diff options
22 files changed, 102 insertions, 33 deletions
diff --git a/Auxiliary/bash-completion/cmake b/Auxiliary/bash-completion/cmake index 6061129..0a862fa 100644 --- a/Auxiliary/bash-completion/cmake +++ b/Auxiliary/bash-completion/cmake @@ -102,7 +102,7 @@ _cmake() ;; -E) COMPREPLY=( $( compgen -W "$( cmake -E help |& sed -n \ - '/^ /{s|^ \([^ ]\{1,\}\) .*$|\1|;p}' 2>/dev/null )" \ + '/^ [^ ]/{s|^ \([^ ]\{1,\}\) .*$|\1|;p}' 2>/dev/null )" \ -- "$cur" ) ) return ;; diff --git a/Help/release/dev/wix-custom-install-dir.rst b/Help/release/dev/wix-custom-install-dir.rst new file mode 100644 index 0000000..cd12a88 --- /dev/null +++ b/Help/release/dev/wix-custom-install-dir.rst @@ -0,0 +1,7 @@ +wix-custom-install-dir +---------------------- + +* The CPack WIX generator now supports + :variable:`CPACK_WIX_SKIP_PROGRAM_FOLDER` to allow specification + of a custom absolute installation prefix outside + of the ProgramFiles folders. diff --git a/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in b/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in index 3e8c511..bc78016 100644 --- a/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in +++ b/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in @@ -26,6 +26,6 @@ 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") - string(APPEND PACKAGE_VERSION " (${installedBits}bit)") + 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 index 5741007..de4a23a 100644 --- a/Modules/BasicConfigVersion-ExactVersion.cmake.in +++ b/Modules/BasicConfigVersion-ExactVersion.cmake.in @@ -42,6 +42,6 @@ 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") - string(APPEND PACKAGE_VERSION " (${installedBits}bit)") + 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 index 0fad8a3..a32245d 100644 --- a/Modules/BasicConfigVersion-SameMajorVersion.cmake.in +++ b/Modules/BasicConfigVersion-SameMajorVersion.cmake.in @@ -41,6 +41,6 @@ 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") - string(APPEND PACKAGE_VERSION " (${installedBits}bit)") + set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") set(PACKAGE_VERSION_UNSUITABLE TRUE) endif() diff --git a/Modules/CPackWIX.cmake b/Modules/CPackWIX.cmake index 10926c0..08ff0cb 100644 --- a/Modules/CPackWIX.cmake +++ b/Modules/CPackWIX.cmake @@ -248,6 +248,23 @@ # Sets the description of the root install feature in the WIX installer. Same as # CPACK_COMPONENT_<compName>_DESCRIPTION for components. # +# .. variable:: CPACK_WIX_SKIP_PROGRAM_FOLDER +# +# If this variable is set to true, the default install location +# of the generated package will be CPACK_PACKAGE_INSTALL_DIRECTORY directly. +# The install location will not be located relatively below +# ProgramFiles or ProgramFiles64. +# +# .. note:: +# Installers created with this feature do not take differences +# between the system on which the installer is created +# and the system on which the installer might be used into account. +# +# It is therefor possible that the installer e.g. might try to install +# onto a drive that is unavailable or unintended or a path that does not +# follow the localization or convention of the system on which the +# installation is performed. +# #============================================================================= # Copyright 2014-2015 Kitware, Inc. diff --git a/Modules/Compiler/CrayPrgEnv.cmake b/Modules/Compiler/CrayPrgEnv.cmake index fa39b00..9f8befd 100644 --- a/Modules/Compiler/CrayPrgEnv.cmake +++ b/Modules/Compiler/CrayPrgEnv.cmake @@ -56,6 +56,8 @@ macro(__CrayPrgEnv_setup lang test_src compiler_cmd link_cmd) message(STATUS "Cray Programming Environment $ENV{CRAYPE_VERSION} ${lang}") elseif(DEFINED ENV{ASYNCPE_VERSION}) message(STATUS "Cray XT Programming Environment $ENV{ASYNCPE_VERSION} ${lang}") + else() + message(STATUS "Cray Programming Environment (unknown version) ${lang}") endif() # Flags for the Cray wrappers diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake index 44bf957..fc01976 100644 --- a/Modules/ExternalProject.cmake +++ b/Modules/ExternalProject.cmake @@ -1133,7 +1133,7 @@ function(_ep_command_line_to_initial_cache var args force) endif() else() # Assume this is a list to append to the last var - string(APPEND accumulator ";${line}") + list(APPEND accumulator "${line}") endif() endforeach() # Catch the final line of the args diff --git a/Modules/FindOpenCL.cmake b/Modules/FindOpenCL.cmake index feda315..6acda55 100644 --- a/Modules/FindOpenCL.cmake +++ b/Modules/FindOpenCL.cmake @@ -53,7 +53,7 @@ function(_FIND_OPENCL_VERSION) if(APPLE) CHECK_SYMBOL_EXISTS( CL_VERSION_${VERSION} - "${OpenCL_INCLUDE_DIR}/OpenCL/cl.h" + "${OpenCL_INCLUDE_DIR}/Headers/cl.h" OPENCL_VERSION_${VERSION}) else() CHECK_SYMBOL_EXISTS( @@ -145,8 +145,15 @@ mark_as_advanced( OpenCL_LIBRARY) if(OpenCL_FOUND AND NOT TARGET OpenCL::OpenCL) - add_library(OpenCL::OpenCL UNKNOWN IMPORTED) + if(OpenCL_LIBRARY MATCHES "/([^/]+)\\.framework$") + add_library(OpenCL::OpenCL INTERFACE IMPORTED) + set_target_properties(OpenCL::OpenCL PROPERTIES + INTERFACE_LINK_LIBRARIES "${OpenCL_LIBRARY}") + else() + add_library(OpenCL::OpenCL UNKNOWN IMPORTED) + set_target_properties(OpenCL::OpenCL PROPERTIES + IMPORTED_LOCATION "${OpenCL_LIBRARY}") + endif() set_target_properties(OpenCL::OpenCL PROPERTIES - IMPORTED_LOCATION "${OpenCL_LIBRARY}" INTERFACE_INCLUDE_DIRECTORIES "${OpenCL_INCLUDE_DIRS}") endif() diff --git a/Modules/FindQt4.cmake b/Modules/FindQt4.cmake index bf41ea1..7c41b99 100644 --- a/Modules/FindQt4.cmake +++ b/Modules/FindQt4.cmake @@ -764,7 +764,7 @@ if (QT_QMAKE_EXECUTABLE AND ############################################# cmake_push_check_state() # Add QT_INCLUDE_DIR to CMAKE_REQUIRED_INCLUDES - string(APPEND CMAKE_REQUIRED_INCLUDES ";${QT_INCLUDE_DIR}") + list(APPEND CMAKE_REQUIRED_INCLUDES "${QT_INCLUDE_DIR}") set(CMAKE_REQUIRED_QUIET ${Qt4_FIND_QUIETLY}) # 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) diff --git a/Modules/GetPrerequisites.cmake b/Modules/GetPrerequisites.cmake index 322cbd3..2881e7f 100644 --- a/Modules/GetPrerequisites.cmake +++ b/Modules/GetPrerequisites.cmake @@ -753,7 +753,7 @@ function(get_prerequisites target prerequisites_var exclude_system recurse exepa find_program(gp_grep_cmd grep) endif() if(gp_grep_cmd) - set(gp_cmd_maybe_filter COMMAND ${gp_grep_cmd} "^[[:blank:]]*DLL Name: ") + set(gp_cmd_maybe_filter COMMAND ${gp_grep_cmd} "-a" "^[[:blank:]]*DLL Name: ") endif() else() message(STATUS "warning: gp_tool='${gp_tool}' is an unknown tool...") diff --git a/Modules/Platform/CrayLinuxEnvironment.cmake b/Modules/Platform/CrayLinuxEnvironment.cmake index 97771a2..a1a3d3f 100644 --- a/Modules/Platform/CrayLinuxEnvironment.cmake +++ b/Modules/Platform/CrayLinuxEnvironment.cmake @@ -8,14 +8,22 @@ if(DEFINED ENV{CRAYOS_VERSION}) set(CMAKE_SYSTEM_VERSION "$ENV{CRAYOS_VERSION}") elseif(DEFINED ENV{XTOS_VERSION}) set(CMAKE_SYSTEM_VERSION "$ENV{XTOS_VERSION}") -else() - message(FATAL_ERROR "Neither the CRAYOS_VERSION or XTOS_VERSION environment variables are defined. This platform file should be used inside the Cray Linux Environment for targeting compute nodes (NIDs)") +elseif(EXISTS /etc/opt/cray/release/cle-release) + file(STRINGS /etc/opt/cray/release/cle-release release REGEX "^RELEASE=.*") + string(REGEX REPLACE "^RELEASE=(.*)$" "\\1" CMAKE_SYSTEM_VERSION "${release}") + unset(release) +elseif(EXISTS /etc/opt/cray/release/clerelease) + file(READ /etc/opt/cray/release/clerelease CMAKE_SYSTEM_VERSION) endif() # Guard against multiple messages if(NOT __CrayLinuxEnvironment_message) - set(__CrayLinuxEnvironment_message 1) - message(STATUS "Cray Linux Environment ${CMAKE_SYSTEM_VERSION}") + set(__CrayLinuxEnvironment_message 1 CACHE INTERNAL "") + if(NOT CMAKE_SYSTEM_VERSION) + message(STATUS "CrayLinuxEnvironment: Unable to determine CLE version. This platform file should only be used from inside the Cray Linux Environment for targeting compute nodes (NIDs).") + else() + message(STATUS "Cray Linux Environment ${CMAKE_SYSTEM_VERSION}") + endif() endif() # All cray systems are x86 CPUs and have been for quite some time diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index 6383bf6..f354b57 100644 --- a/Source/CMakeVersion.cmake +++ b/Source/CMakeVersion.cmake @@ -1,5 +1,5 @@ # CMake version number components. set(CMake_VERSION_MAJOR 3) set(CMake_VERSION_MINOR 6) -set(CMake_VERSION_PATCH 20160805) +set(CMake_VERSION_PATCH 20160810) #set(CMake_VERSION_RC 1) diff --git a/Source/CPack/WiX/cmCPackWIXGenerator.cxx b/Source/CPack/WiX/cmCPackWIXGenerator.cxx index 3ecc14d..d7f69a1 100644 --- a/Source/CPack/WiX/cmCPackWIXGenerator.cxx +++ b/Source/CPack/WiX/cmCPackWIXGenerator.cxx @@ -18,6 +18,7 @@ #include <cmGeneratedFileStream.h> #include <cmInstalledFile.h> #include <cmSystemTools.h> +#include <cmUuid.h> #include "cmWIXDirectoriesSourceWriter.h" #include "cmWIXFeaturesSourceWriter.h" @@ -441,6 +442,11 @@ bool cmCPackWIXGenerator::CreateWiXSourceFiles() cmWIXFilesSourceWriter fileDefinitions(this->Logger, fileDefinitionsFilename); + // if install folder is supposed to be set absolutely, the default + // component guid "*" cannot be used + fileDefinitions.GenerateComponentGuids = + cmSystemTools::IsOn(GetOption("CPACK_WIX_SKIP_PROGRAM_FOLDER")); + fileDefinitions.BeginElement("Fragment"); std::string featureDefinitionsFilename = @@ -566,6 +572,9 @@ bool cmCPackWIXGenerator::CreateWiXSourceFiles() std::string cmCPackWIXGenerator::GetProgramFilesFolderId() const { + if (cmSystemTools::IsOn(GetOption("CPACK_WIX_SKIP_PROGRAM_FOLDER"))) { + return ""; + } if (GetArchitecture() == "x86") { return "ProgramFilesFolder"; } else { diff --git a/Source/CPack/WiX/cmWIXDirectoriesSourceWriter.cxx b/Source/CPack/WiX/cmWIXDirectoriesSourceWriter.cxx index de64059..97e3a51 100644 --- a/Source/CPack/WiX/cmWIXDirectoriesSourceWriter.cxx +++ b/Source/CPack/WiX/cmWIXDirectoriesSourceWriter.cxx @@ -52,8 +52,12 @@ size_t cmWIXDirectoriesSourceWriter::BeginInstallationPrefixDirectory( std::string const& programFilesFolderId, std::string const& installRootString) { - BeginElement("Directory"); - AddAttribute("Id", programFilesFolderId); + size_t offset = 1; + if (!programFilesFolderId.empty()) { + BeginElement("Directory"); + AddAttribute("Id", programFilesFolderId); + offset = 0; + } std::vector<std::string> installRoot; @@ -77,7 +81,7 @@ size_t cmWIXDirectoriesSourceWriter::BeginInstallationPrefixDirectory( AddAttribute("Name", installRoot[i]); } - return installRoot.size(); + return installRoot.size() - offset; } void cmWIXDirectoriesSourceWriter::EndInstallationPrefixDirectory(size_t size) diff --git a/Source/CPack/WiX/cmWIXFilesSourceWriter.cxx b/Source/CPack/WiX/cmWIXFilesSourceWriter.cxx index 9a143cc..dde9635 100644 --- a/Source/CPack/WiX/cmWIXFilesSourceWriter.cxx +++ b/Source/CPack/WiX/cmWIXFilesSourceWriter.cxx @@ -16,6 +16,9 @@ #include <cmInstalledFile.h> +#include <cmSystemTools.h> +#include <cmUuid.h> + #include <sys/types.h> // include sys/stat.h after sys/types.h #include <sys/stat.h> @@ -23,6 +26,7 @@ cmWIXFilesSourceWriter::cmWIXFilesSourceWriter(cmCPackLog* logger, std::string const& filename) : cmWIXSourceWriter(logger, filename) + , GenerateComponentGuids(false) { } @@ -126,12 +130,20 @@ std::string cmWIXFilesSourceWriter::EmitComponentFile( std::string componentId = std::string("CM_C") + id; std::string fileId = std::string("CM_F") + id; + std::string guid = "*"; + if (this->GenerateComponentGuids) { + std::string md5 = cmSystemTools::ComputeStringMD5(componentId); + cmUuid uuid; + std::vector<unsigned char> ns; + guid = uuid.FromMd5(ns, md5); + } + BeginElement("DirectoryRef"); AddAttribute("Id", directoryId); BeginElement("Component"); AddAttribute("Id", componentId); - AddAttribute("Guid", "*"); + AddAttribute("Guid", guid); if (installedFile) { if (installedFile->GetPropertyAsBool("CPACK_NEVER_OVERWRITE")) { diff --git a/Source/CPack/WiX/cmWIXFilesSourceWriter.h b/Source/CPack/WiX/cmWIXFilesSourceWriter.h index c577e5b..eeb84cb 100644 --- a/Source/CPack/WiX/cmWIXFilesSourceWriter.h +++ b/Source/CPack/WiX/cmWIXFilesSourceWriter.h @@ -47,6 +47,8 @@ public: std::string const& id, std::string const& filePath, cmWIXPatch& patch, cmInstalledFile const* installedFile); + + bool GenerateComponentGuids; }; #endif diff --git a/Source/cmNinjaTargetGenerator.cxx b/Source/cmNinjaTargetGenerator.cxx index 855a243..1466f8a 100644 --- a/Source/cmNinjaTargetGenerator.cxx +++ b/Source/cmNinjaTargetGenerator.cxx @@ -305,7 +305,7 @@ void cmNinjaTargetGenerator::WriteCompileRule(const std::string& lang) vars.RuleLauncher = "RULE_LAUNCH_COMPILE"; vars.CMTarget = this->GetGeneratorTarget(); vars.Language = lang.c_str(); - vars.Source = "$in"; + vars.Source = "$IN_ABS"; vars.Object = "$out"; vars.Defines = "$DEFINES"; vars.Includes = "$INCLUDES"; @@ -529,8 +529,7 @@ void cmNinjaTargetGenerator::WriteObjectBuildStatement( cmSourceFile const* source, bool writeOrderDependsTargetForTarget) { std::string const language = source->GetLanguage(); - std::string const sourceFileName = - language == "RC" ? source->GetFullPath() : this->GetSourceFilePath(source); + std::string const sourceFileName = this->GetSourceFilePath(source); std::string const objectDir = this->ConvertToNinjaPath(this->GeneratorTarget->GetSupportDirectory()); std::string const objectFileName = @@ -539,6 +538,8 @@ void cmNinjaTargetGenerator::WriteObjectBuildStatement( cmSystemTools::GetFilenamePath(objectFileName); cmNinjaVars vars; + vars["IN_ABS"] = this->GetLocalGenerator()->ConvertToOutputFormat( + source->GetFullPath(), cmOutputConverter::SHELL); vars["FLAGS"] = this->ComputeFlagsForObject(source, language); vars["DEFINES"] = this->ComputeDefines(source, language); vars["INCLUDES"] = this->GetIncludes(language); diff --git a/Source/cmVisualStudio10TargetGenerator.cxx b/Source/cmVisualStudio10TargetGenerator.cxx index b1885e5..c33a291 100644 --- a/Source/cmVisualStudio10TargetGenerator.cxx +++ b/Source/cmVisualStudio10TargetGenerator.cxx @@ -2365,11 +2365,11 @@ bool cmVisualStudio10TargetGenerator::ComputeLinkOptions( cmGlobalVisualStudio10Generator* gg = static_cast<cmGlobalVisualStudio10Generator*>(this->GlobalGenerator); const char* toolset = gg->GetPlatformToolset(); - if (toolset && (toolset == kWINDOWS_7_1_SDK || - cmHasLiteralPrefix(toolset, "v90") || - cmHasLiteralPrefix(toolset, "v100") || - cmHasLiteralPrefix(toolset, "v110") || - cmHasLiteralPrefix(toolset, "v120"))) { + if (toolset && + (toolset == kWINDOWS_7_1_SDK || cmHasLiteralPrefix(toolset, "v90") || + cmHasLiteralPrefix(toolset, "v100") || + cmHasLiteralPrefix(toolset, "v110") || + cmHasLiteralPrefix(toolset, "v120"))) { if (const char* debug = linkOptions.GetFlag("GenerateDebugInformation")) { // Convert value from enumeration back to boolean for older toolsets. diff --git a/Tests/RunCMake/CPack/VerifyResult.cmake b/Tests/RunCMake/CPack/VerifyResult.cmake index 8047668..074890f 100644 --- a/Tests/RunCMake/CPack/VerifyResult.cmake +++ b/Tests/RunCMake/CPack/VerifyResult.cmake @@ -16,7 +16,7 @@ include("${src_dir}/${GENERATOR_TYPE}/${RunCMake_TEST}-ExpectedFiles.cmake") if(NOT EXPECTED_FILES_COUNT EQUAL 0) foreach(file_no_ RANGE 1 ${EXPECTED_FILES_COUNT}) file(GLOB FOUND_FILE_${file_no_} RELATIVE "${bin_dir}" "${EXPECTED_FILE_${file_no_}}") - string(APPEND foundFiles_ ";${FOUND_FILE_${file_no_}}") + list(APPEND foundFiles_ "${FOUND_FILE_${file_no_}}") list(LENGTH FOUND_FILE_${file_no_} foundFilesCount_) if(foundFilesCount_ EQUAL 1) @@ -45,7 +45,7 @@ if(NOT EXPECTED_FILES_COUNT EQUAL 0) # check that there were no extra files generated foreach(all_files_glob_ IN LISTS ALL_FILES_GLOB) file(GLOB foundAll_ RELATIVE "${bin_dir}" "${all_files_glob_}") - string(APPEND allFoundFiles_ ";${foundAll_}") + list(APPEND allFoundFiles_ "${foundAll_}") endforeach() list(LENGTH foundFiles_ foundFilesCount_) diff --git a/Tests/SimpleInstall/CMakeLists.txt b/Tests/SimpleInstall/CMakeLists.txt index 5a1392b..4cf7355 100644 --- a/Tests/SimpleInstall/CMakeLists.txt +++ b/Tests/SimpleInstall/CMakeLists.txt @@ -348,7 +348,7 @@ if(UNIX AND NOT APPLE) # if(NOT SKIP_TZ) # message("compress found and it was not a script") # message("output from file command: [${output}]") - # string(APPEND CPACK_GENERATOR ";TZ") + # list(APPEND CPACK_GENERATOR "TZ") # else() # message("compress found, but it was a script so dont use it") # message("output from file command: [${output}]") @@ -357,7 +357,7 @@ if(UNIX AND NOT APPLE) find_program(found_bz2 NAMES bzip2) if(found_bz2) - string(APPEND CPACK_GENERATOR ";TBZ2") + list(APPEND CPACK_GENERATOR "TBZ2") endif() endif() diff --git a/Tests/SimpleInstallS2/CMakeLists.txt b/Tests/SimpleInstallS2/CMakeLists.txt index 5a1392b..4cf7355 100644 --- a/Tests/SimpleInstallS2/CMakeLists.txt +++ b/Tests/SimpleInstallS2/CMakeLists.txt @@ -348,7 +348,7 @@ if(UNIX AND NOT APPLE) # if(NOT SKIP_TZ) # message("compress found and it was not a script") # message("output from file command: [${output}]") - # string(APPEND CPACK_GENERATOR ";TZ") + # list(APPEND CPACK_GENERATOR "TZ") # else() # message("compress found, but it was a script so dont use it") # message("output from file command: [${output}]") @@ -357,7 +357,7 @@ if(UNIX AND NOT APPLE) find_program(found_bz2 NAMES bzip2) if(found_bz2) - string(APPEND CPACK_GENERATOR ";TBZ2") + list(APPEND CPACK_GENERATOR "TBZ2") endif() endif() |