diff options
27 files changed, 151 insertions, 78 deletions
diff --git a/Help/command/file.rst b/Help/command/file.rst index 3e669c2..b2e4eea 100644 --- a/Help/command/file.rst +++ b/Help/command/file.rst @@ -304,6 +304,11 @@ Exactly one ``CONTENT`` or ``INPUT`` option must be given. A specific Generated files are modified on subsequent cmake runs only if their content is changed. +Note also that ``file(GENERATE)`` does not create the output file until the +generation phase. The output file will not yet have been written when the +``file(GENERATE)`` command returns, it is written only after processing all +of a project's ``CMakeLists.txt`` files. + ------------------------------------------------------------------------------ :: diff --git a/Help/manual/cmake.1.rst b/Help/manual/cmake.1.rst index 063aea1..37e50d2 100644 --- a/Help/manual/cmake.1.rst +++ b/Help/manual/cmake.1.rst @@ -263,8 +263,10 @@ Available commands are: 052f86c15bbde68af55c7f7b340ab639 file2.txt ``remove [-f] <file>...`` - Remove the file(s), use ``-f`` to force it. If a file does - not exist it will be silently ignored. + Remove the file(s). If any of the listed files already do not + exist, the command returns a non-zero exit code, but no message + is logged. The ``-f`` option changes the behavior to return a + zero exit code (i.e. success) in such situations instead. ``remove_directory <dir>`` Remove a directory and its contents. If a directory does diff --git a/Help/prop_tgt/CROSSCOMPILING_EMULATOR.rst b/Help/prop_tgt/CROSSCOMPILING_EMULATOR.rst index d30a2f2..a0811bc 100644 --- a/Help/prop_tgt/CROSSCOMPILING_EMULATOR.rst +++ b/Help/prop_tgt/CROSSCOMPILING_EMULATOR.rst @@ -5,3 +5,7 @@ Use the given emulator to run executables created when crosscompiling. This command will be added as a prefix to :command:`add_test`, :command:`add_custom_command`, and :command:`add_custom_target` commands for built target system executables. + +This property is initialized by the value of the +:variable:`CMAKE_CROSSCOMPILING_EMULATOR` variable if it is set when a target +is created. diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake index bb34de5..c41a986 100644 --- a/Modules/CMakeDetermineCompilerId.cmake +++ b/Modules/CMakeDetermineCompilerId.cmake @@ -269,7 +269,13 @@ Id flags: ${testflags} ${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS} set(id_toolset "") endif() if("${lang}" STREQUAL "Swift") - set(id_lang_version "SWIFT_VERSION = 2.3;") + if(CMAKE_Swift_LANGUAGE_VERSION) + set(id_lang_version "SWIFT_VERSION = ${CMAKE_Swift_LANGUAGE_VERSION};") + elseif(XCODE_VERSION VERSION_GREATER_EQUAL 8.3) + set(id_lang_version "SWIFT_VERSION = 3.0;") + else() + set(id_lang_version "SWIFT_VERSION = 2.3;") + endif() else() set(id_lang_version "") endif() diff --git a/Modules/CMakeParseImplicitLinkInfo.cmake b/Modules/CMakeParseImplicitLinkInfo.cmake index 3469d34..3273443 100644 --- a/Modules/CMakeParseImplicitLinkInfo.cmake +++ b/Modules/CMakeParseImplicitLinkInfo.cmake @@ -49,8 +49,12 @@ function(CMAKE_PARSE_IMPLICIT_LINK_INFO text lib_var dir_var fwk_var log_var obj if("${cmd}" MATCHES "${linker_regex}") string(APPEND log " link line: [${line}]\n") string(REGEX REPLACE ";-([LYz]);" ";-\\1" args "${args}") + set(skip_value_of "") foreach(arg IN LISTS args) - if("${arg}" MATCHES "^-L(.:)?[/\\]") + if(skip_value_of) + string(APPEND log " arg [${arg}] ==> skip value of ${skip_value_of}\n") + set(skip_value_of "") + elseif("${arg}" MATCHES "^-L(.:)?[/\\]") # Unix search path. string(REGEX REPLACE "^-L" "" dir "${arg}") list(APPEND implicit_dirs_tmp ${dir}) @@ -66,6 +70,10 @@ function(CMAKE_PARSE_IMPLICIT_LINK_INFO text lib_var dir_var fwk_var log_var obj set(lib "${CMAKE_MATCH_1}") list(APPEND implicit_libs_tmp ${lib}) string(APPEND log " arg [${arg}] ==> lib [${lib}]\n") + elseif("${arg}" STREQUAL "-lto_library") + # ld argument "-lto_library <path>" + set(skip_value_of "${arg}") + string(APPEND log " arg [${arg}] ==> ignore, skip following value\n") elseif("${arg}" MATCHES "^-l([^:].*)$") # Unix library. set(lib "${CMAKE_MATCH_1}") diff --git a/Modules/CPackRPM.cmake b/Modules/CPackRPM.cmake index 87fa9dd..e905bc6 100644 --- a/Modules/CPackRPM.cmake +++ b/Modules/CPackRPM.cmake @@ -721,14 +721,6 @@ # Debuginfo packages contain debug symbols and sources for debugging packaged # binaries. # -# .. note:: -# -# Currently multiple debuginfo packages are generated if component based -# packaging is used - one debuginfo package per component. This duplicates -# sources if multiple binaries are using them. This is a side effect of -# how CPackRPM currently generates component packages and will be addressed -# in later versions of the generator. -# # Debuginfo RPM packaging has it's own set of variables: # # .. variable:: CPACK_RPM_DEBUGINFO_PACKAGE diff --git a/Modules/Compiler/Intel-CXX-FeatureTests.cmake b/Modules/Compiler/Intel-CXX-FeatureTests.cmake index e370647..929a7c6 100644 --- a/Modules/Compiler/Intel-CXX-FeatureTests.cmake +++ b/Modules/Compiler/Intel-CXX-FeatureTests.cmake @@ -13,7 +13,6 @@ # - __cpp_variadic_templates 200704 set(_cmake_feature_test_cxx_variable_templates "__cpp_variable_templates >= 201304") -set(_cmake_feature_test_cxx_relaxed_constexpr "__cpp_constexpr >= 201304") set(_cmake_oldestSupported "__INTEL_COMPILER >= 1210") set(DETECT_CXX11 "((__cplusplus >= 201103L) || defined(__INTEL_CXX11_MODE__) || defined(__GXX_EXPERIMENTAL_CXX0X__))") @@ -24,6 +23,9 @@ set(DETECT_BUGGY_ICC15 "((__INTEL_COMPILER == 1500) && (__INTEL_COMPILER_UPDATE set(DETECT_CXX14 "((__cplusplus >= 201300L) || ((__cplusplus == 201103L) && !defined(__INTEL_CXX11_MODE__)) || ((${DETECT_BUGGY_ICC15}) && defined(__GXX_EXPERIMENTAL_CXX0X__) && !defined(__INTEL_CXX11_MODE__) ) || (defined(__INTEL_CXX11_MODE__) && defined(__cpp_aggregate_nsdmi)) )") unset(DETECT_BUGGY_ICC15) +set(Intel17_CXX14 "__INTEL_COMPILER >= 1700 && ${DETECT_CXX14}") +set(_cmake_feature_test_cxx_relaxed_constexpr "__cpp_constexpr >= 201304 || (${Intel17_CXX14} && !defined(_MSC_VER))") + set(Intel16_CXX14 "__INTEL_COMPILER >= 1600 && ${DETECT_CXX14}") set(_cmake_feature_test_cxx_aggregate_default_initializers "${Intel16_CXX14}") set(_cmake_feature_test_cxx_contextual_conversions "${Intel16_CXX14}") diff --git a/Modules/Compiler/SDCC-C-DetermineCompiler.cmake b/Modules/Compiler/SDCC-C-DetermineCompiler.cmake index 1d7dd78..4c70c5e 100644 --- a/Modules/Compiler/SDCC-C-DetermineCompiler.cmake +++ b/Modules/Compiler/SDCC-C-DetermineCompiler.cmake @@ -1,10 +1,16 @@ # sdcc, the small devices C compiler for embedded systems, # http://sdcc.sourceforge.net */ -set(_compiler_id_pp_test "defined(SDCC)") +set(_compiler_id_pp_test "defined(__SDCC_VERSION_MAJOR) || defined(SDCC)") set(_compiler_id_version_compute " +# if defined(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MAJOR @MACRO_DEC@(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MINOR @MACRO_DEC@(__SDCC_VERSION_MINOR) +# define COMPILER_VERSION_PATCH @MACRO_DEC@(__SDCC_VERSION_PATCH) +# else /* SDCC = VRP */ # define COMPILER_VERSION_MAJOR @MACRO_DEC@(SDCC/100) # define COMPILER_VERSION_MINOR @MACRO_DEC@(SDCC/10 % 10) -# define COMPILER_VERSION_PATCH @MACRO_DEC@(SDCC % 10)") +# define COMPILER_VERSION_PATCH @MACRO_DEC@(SDCC % 10) +# endif") diff --git a/Modules/ExternalProject.cmake b/Modules/ExternalProject.cmake index 00781d6..b42d2dd 100644 --- a/Modules/ExternalProject.cmake +++ b/Modules/ExternalProject.cmake @@ -600,8 +600,11 @@ if(error_code) message(FATAL_ERROR \"Failed to clone repository: '${git_repository}'\") endif() +# Use `git checkout <branch>` even though this risks ambiguity with a +# local path. Unfortunately we cannot use `git checkout <tree-ish> --` +# because that will not search for remote branch names, a common use case. execute_process( - COMMAND \"${git_EXECUTABLE}\" \${git_options} checkout ${git_tag} -- + COMMAND \"${git_EXECUTABLE}\" \${git_options} checkout ${git_tag} WORKING_DIRECTORY \"${work_dir}/${src_name}\" RESULT_VARIABLE error_code ) diff --git a/Modules/FindBoost.cmake b/Modules/FindBoost.cmake index a6f63f5..2dd08e1 100644 --- a/Modules/FindBoost.cmake +++ b/Modules/FindBoost.cmake @@ -746,6 +746,7 @@ function(_Boost_COMPONENT_DEPENDENCIES component _ret) set(_Boost_CHRONO_DEPENDENCIES system) set(_Boost_CONTEXT_DEPENDENCIES thread chrono system date_time) set(_Boost_COROUTINE_DEPENDENCIES context system) + set(_Boost_COROUTINE2_DEPENDENCIES context fiber thread chrono system date_time) set(_Boost_FIBER_DEPENDENCIES context thread chrono system date_time) set(_Boost_FILESYSTEM_DEPENDENCIES system) set(_Boost_IOSTREAMS_DEPENDENCIES regex) diff --git a/Modules/FindwxWidgets.cmake b/Modules/FindwxWidgets.cmake index d30d35f..bc906e5 100644 --- a/Modules/FindwxWidgets.cmake +++ b/Modules/FindwxWidgets.cmake @@ -423,7 +423,7 @@ if(wxWidgets_FIND_STYLE STREQUAL "win32") list(APPEND wxWidgets_LIBRARIES opengl32 glu32) endif() - list(APPEND wxWidgets_LIBRARIES winmm comctl32 rpcrt4 wsock32) + list(APPEND wxWidgets_LIBRARIES winmm comctl32 oleacc rpcrt4 shlwapi version wsock32) endmacro() #------------------------------------------------------------------- diff --git a/Modules/InstallRequiredSystemLibraries.cmake b/Modules/InstallRequiredSystemLibraries.cmake index 1061da0..a3478a3 100644 --- a/Modules/InstallRequiredSystemLibraries.cmake +++ b/Modules/InstallRequiredSystemLibraries.cmake @@ -191,19 +191,31 @@ if(MSVC) set(vs "${_MSVCRT_IDE_VERSION}") # Find the runtime library redistribution directory. - get_filename_component(msvc_install_dir - "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${vs}.0;InstallDir]" ABSOLUTE) - set(programfilesx86 "ProgramFiles(x86)") if(vs VERSION_LESS 15 AND DEFINED MSVC${vs}_REDIST_DIR AND EXISTS "${MSVC${vs}_REDIST_DIR}") set(MSVC_REDIST_DIR "${MSVC${vs}_REDIST_DIR}") # use old cache entry endif() - find_path(MSVC_REDIST_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.VC${vs}0.CRT - PATHS - "${msvc_install_dir}/../../VC/redist" + if(NOT vs VERSION_LESS 15) + set(_vs_redist_paths "") + cmake_host_system_information(RESULT _vs_dir QUERY VS_${vs}_DIR) # undocumented query + if(IS_DIRECTORY "${_vs_dir}") + file(GLOB _vs_redist_paths "${_vs_dir}/VC/Redist/MSVC/*") + endif() + unset(_vs_dir) + else() + get_filename_component(_vs_dir + "[HKEY_LOCAL_MACHINE\\SOFTWARE\\Microsoft\\VisualStudio\\${vs}.0;InstallDir]" ABSOLUTE) + set(programfilesx86 "ProgramFiles(x86)") + set(_vs_redist_paths + "${_vs_dir}/../../VC/redist" "${base_dir}/VC/redist" "$ENV{ProgramFiles}/Microsoft Visual Studio ${vs}.0/VC/redist" "$ENV{${programfilesx86}}/Microsoft Visual Studio ${vs}.0/VC/redist" - ) + ) + unset(_vs_dir) + unset(programfilesx86) + endif() + find_path(MSVC_REDIST_DIR NAMES ${CMAKE_MSVC_ARCH}/Microsoft.VC${vs}0.CRT PATHS ${_vs_redist_paths}) + unset(_vs_redist_paths) mark_as_advanced(MSVC_REDIST_DIR) set(MSVC_CRT_DIR "${MSVC_REDIST_DIR}/${CMAKE_MSVC_ARCH}/Microsoft.VC${vs}0.CRT") diff --git a/Packaging/QtSDK/ToolsCMakeXX.cmake b/Packaging/QtSDK/ToolsCMakeXX.cmake index c5f8f34..99731fb 100644 --- a/Packaging/QtSDK/ToolsCMakeXX.cmake +++ b/Packaging/QtSDK/ToolsCMakeXX.cmake @@ -13,7 +13,7 @@ set(CMake_IFW_ROOT_COMPONENT_NAME "qt.tools.cmake.${CMake_VERSION_MAJOR}${CMake_VERSION_MINOR}" CACHE STRING "QtSDK CMake tools component name") set(CMake_IFW_ROOT_COMPONENT_DISPLAY_NAME - "CMake ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}" + "CMake ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}.${CMake_VERSION_PATCH}" CACHE STRING "QtSDK CMake tools component display name") set(CMake_IFW_ROOT_COMPONENT_DESCRIPTION "CMake Build Tools ${CMake_VERSION_MAJOR}.${CMake_VERSION_MINOR}.${CMake_VERSION_PATH}" diff --git a/Packaging/QtSDK/qt.tools.cmake.xx.qs.in b/Packaging/QtSDK/qt.tools.cmake.xx.qs.in index 81ce157..e806dd7 100644 --- a/Packaging/QtSDK/qt.tools.cmake.xx.qs.in +++ b/Packaging/QtSDK/qt.tools.cmake.xx.qs.in @@ -25,24 +25,22 @@ Component.prototype.createOperations = function() { component.createOperations(); - if (installer.value("os") == "win") { - try { - if (installer.value("SDKToolBinary") == "") - return; + try { + if (installer.value("SDKToolBinary") == "") + return; - var cmId = component.name; - installer.setValue("CMAKE%CMake_VERSION_MAJOR%%CMake_VERSION_MINOR%_ID", cmId); + var cmId = component.name; + installer.setValue("CMAKE%CMake_VERSION_MAJOR%%CMake_VERSION_MINOR%_ID", cmId); - component.addOperation("Execute", - ["{0,2}", "@SDKToolBinary@", "addCMake", - "--id", cmId, - "--name", "%CMake_IFW_ROOT_COMPONENT_DISPLAY_NAME%", - "--path", "@CMAKE%CMake_VERSION_MAJOR%%CMake_VERSION_MINOR%_BIN_DIR@/cmake.exe", - "UNDOEXECUTE", - "@SDKToolBinary@", "rmCMake", "--id", cmId]); + component.addOperation("Execute", + ["{0,2}", "@SDKToolBinary@", "addCMake", + "--id", cmId, + "--name", "%CMake_IFW_ROOT_COMPONENT_DISPLAY_NAME%", + "--path", "@CMAKE%CMake_VERSION_MAJOR%%CMake_VERSION_MINOR%_BIN_DIR@/cmake%CMAKE_EXECUTABLE_SUFFIX%", + "UNDOEXECUTE", + "@SDKToolBinary@", "rmCMake", "--id", cmId]); - } catch( e ) { - print( e ); - } + } catch( e ) { + print( e ); } } diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index e2b8d4f..58497b3 100644 --- a/Source/CMakeVersion.cmake +++ b/Source/CMakeVersion.cmake @@ -2,4 +2,4 @@ set(CMake_VERSION_MAJOR 3) set(CMake_VERSION_MINOR 8) set(CMake_VERSION_PATCH 0) -set(CMake_VERSION_RC 2) +set(CMake_VERSION_RC 4) diff --git a/Source/cmCMakeHostSystemInformationCommand.cxx b/Source/cmCMakeHostSystemInformationCommand.cxx index 7da93ac..e135ac6 100644 --- a/Source/cmCMakeHostSystemInformationCommand.cxx +++ b/Source/cmCMakeHostSystemInformationCommand.cxx @@ -7,6 +7,12 @@ #include "cmMakefile.h" #include "cmsys/SystemInformation.hxx" +#if defined(_WIN32) +#include "cmSystemTools.h" +#include "cmVSSetupHelper.h" +#define HAVE_VS_SETUP_HELPER +#endif + class cmExecutionStatus; // cmCMakeHostSystemInformation @@ -70,6 +76,13 @@ bool cmCMakeHostSystemInformationCommand::GetValue( value = this->ValueToString(info.GetTotalPhysicalMemory()); } else if (key == "AVAILABLE_PHYSICAL_MEMORY") { value = this->ValueToString(info.GetAvailablePhysicalMemory()); +#ifdef HAVE_VS_SETUP_HELPER + } else if (key == "VS_15_DIR") { + cmVSSetupAPIHelper vsSetupAPIHelper; + if (vsSetupAPIHelper.GetVSInstanceInfo(value)) { + cmSystemTools::ConvertToUnixSlashes(value); + } +#endif } else { std::string e = "does not recognize <key> " + key; this->SetError(e); diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index 8627cf2..dd771b1 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -3075,10 +3075,14 @@ bool cmGlobalXCodeGenerator::CreateXCodeObjects( this->CreateString(this->GeneratorToolset)); } if (this->GetLanguageEnabled("Swift")) { - std::string swiftVersion = "2.3"; + std::string swiftVersion; if (const char* vers = this->CurrentMakefile->GetDefinition( "CMAKE_Swift_LANGUAGE_VERSION")) { swiftVersion = vers; + } else if (this->XcodeVersion >= 83) { + swiftVersion = "3.0"; + } else { + swiftVersion = "2.3"; } buildSettings->AddAttribute("SWIFT_VERSION", this->CreateString(swiftVersion)); diff --git a/Source/cmNinjaNormalTargetGenerator.cxx b/Source/cmNinjaNormalTargetGenerator.cxx index 4fc664d..b1374c2 100644 --- a/Source/cmNinjaNormalTargetGenerator.cxx +++ b/Source/cmNinjaNormalTargetGenerator.cxx @@ -550,10 +550,6 @@ static int calculateCommandLineLengthLimit(int linkRuleLength) #ifdef _WIN32 8000, #endif -#if defined(_SC_ARG_MAX) - // for instance ARG_MAX is 2096152 on Ubuntu or 262144 on Mac - ((int)sysconf(_SC_ARG_MAX)) - 1000, -#endif #if defined(__linux) // #define MAX_ARG_STRLEN (PAGE_SIZE * 32) in Linux's binfmts.h ((int)sysconf(_SC_PAGESIZE) * 32) - 1000, @@ -562,7 +558,15 @@ static int calculateCommandLineLengthLimit(int linkRuleLength) }; size_t const arrSz = cmArraySize(limits); - int const sz = *std::min_element(limits, limits + arrSz); + int sz = *std::min_element(limits, limits + arrSz); +#if defined(_SC_ARG_MAX) + // for instance ARG_MAX is 2096152 on Ubuntu or 262144 on Mac + int const szArgMax = static_cast<int>(sysconf(_SC_ARG_MAX)); + // a return value of -1 signifies an unrestricted value + if (szArgMax != -1) { + sz = std::min(sz, szArgMax - 1000); + } +#endif if (sz == std::numeric_limits<int>::max()) { return 0; } diff --git a/Tests/CMakeTests/ImplicitLinkInfoTest.cmake.in b/Tests/CMakeTests/ImplicitLinkInfoTest.cmake.in index d6d2357..58e2bf9 100644 --- a/Tests/CMakeTests/ImplicitLinkInfoTest.cmake.in +++ b/Tests/CMakeTests/ImplicitLinkInfoTest.cmake.in @@ -261,6 +261,12 @@ set(mac_absoft_libs "af90math;afio;amisc;absoftmain;af77math;m;mv") set(mac_absoft_dirs "/Applications/Absoft11.1/lib;/usr/lib/i686-apple-darwin10/4.2.1;/usr/lib/gcc/i686-apple-darwin10/4.2.1;/usr/lib") list(APPEND platforms mac_absoft) +# Xcode 8.3: clang++ dummy.cpp -v +set(mac_clang_v_text " \"/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/ld\" -demangle -lto_library /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/lib/libLTO.dylib -no_deduplicate -dynamic -arch x86_64 -macosx_version_min 10.12.0 -syslibroot /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.12.sdk -o a.out /var/folders/hc/95l7dhnx459c57g4yg_6yd8c0000gp/T/dummy-384ea1.o -lc++ -lSystem /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/clang/8.1.0/lib/darwin/libclang_rt.osx.a") +set(mac_clang_v_libs "c++") +set(mac_clang_v_dirs "") +list(APPEND platforms mac_clang_v) + #----------------------------------------------------------------------------- # Sun diff --git a/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake b/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake index fc90d09..a5b38fd 100644 --- a/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake +++ b/Tests/CPackComponentsForAll/RunCPackVerifyResult.cmake @@ -205,14 +205,14 @@ if(CPackGen MATCHES "RPM") /usr/foo/bar/non_relocatable/depth_two /usr/foo/bar/non_relocatable/depth_two/symlink_from_non_relocatable_path /usr/foo/bar/other_relocatable -/usr/foo/bar/other_relocatable/depth_two$") +/usr/foo/bar/other_relocatable/depth_two(\n.*\.build-id.*)*$") elseif(check_file_headers_match) set(check_file_match_expected_summary ".*${CPACK_RPM_HEADERS_PACKAGE_SUMMARY}.*") set(check_file_match_expected_description ".*${CPACK_RPM_HEADERS_PACKAGE_DESCRIPTION}.*") set(check_file_match_expected_relocation_path "Relocations${whitespaces}:${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}${whitespaces}${CPACK_PACKAGING_INSTALL_PREFIX}/${CMAKE_INSTALL_INCLUDEDIR}") set(check_file_match_expected_architecture "noarch") set(spec_regex "*headers*") - set(check_content_list "^/usr/foo/bar\n/usr/foo/bar/include\n/usr/foo/bar/include/mylib.h$") + set(check_content_list "^/usr/foo/bar\n/usr/foo/bar/include\n/usr/foo/bar/include/mylib.h(\n.*\.build-id.*)*$") elseif(check_file_applications_match) set(check_file_match_expected_summary ".*${CPACK_RPM_PACKAGE_SUMMARY}.*") set(check_file_match_expected_description ".*${CPACK_COMPONENT_APPLICATIONS_DESCRIPTION}.*") @@ -221,7 +221,7 @@ if(CPackGen MATCHES "RPM") set(spec_regex "*applications*") set(check_content_list "^/usr/foo/bar /usr/foo/bar/bin -/usr/foo/bar/bin/mylibapp$") +/usr/foo/bar/bin/mylibapp(\n.*\.build-id.*)*$") elseif(check_file_Unspecified_match) set(check_file_match_expected_summary ".*${CPACK_RPM_PACKAGE_SUMMARY}.*") set(check_file_match_expected_description ".*DESCRIPTION.*") @@ -241,7 +241,7 @@ if(CPackGen MATCHES "RPM") /usr/foo/bar/share/man/mylib/man3 /usr/foo/bar/share/man/mylib/man3/mylib.1 /usr/foo/bar/share/man/mylib/man3/mylib.1/mylib -/usr/foo/bar/share/man/mylib/man3/mylib.1/mylib2$") +/usr/foo/bar/share/man/mylib/man3/mylib.1/mylib2(\n.*\.build-id.*)*$") else() message(FATAL_ERROR "error: unexpected rpm package '${check_file}'") endif() diff --git a/Tests/CTestTestChecksum/test.cmake.in b/Tests/CTestTestChecksum/test.cmake.in index 32d62bb..2a435d2 100644 --- a/Tests/CTestTestChecksum/test.cmake.in +++ b/Tests/CTestTestChecksum/test.cmake.in @@ -5,8 +5,8 @@ set(CTEST_DASHBOARD_ROOT "@CMake_BINARY_DIR@/Tests/CTestTest") set(CTEST_SITE "@SITE@") set(CTEST_BUILD_NAME "CTestTest-@BUILDNAME@-Checksum") -set(CTEST_SOURCE_DIRECTORY "@CMake_SOURCE_DIR@/Tests/CTestTestParallel") -set(CTEST_BINARY_DIRECTORY "@CMake_BINARY_DIR@/Tests/CTestTestParallel") +set(CTEST_SOURCE_DIRECTORY "@CMake_SOURCE_DIR@/Tests/CTestTestChecksum") +set(CTEST_BINARY_DIRECTORY "@CMake_BINARY_DIR@/Tests/CTestTestChecksum") set(CTEST_CVS_COMMAND "@CVSCOMMAND@") set(CTEST_CMAKE_GENERATOR "@CMAKE_GENERATOR@") set(CTEST_CMAKE_GENERATOR_PLATFORM "@CMAKE_GENERATOR_PLATFORM@") diff --git a/Tests/RunCMake/CPack/RPM/Helpers.cmake b/Tests/RunCMake/CPack/RPM/Helpers.cmake index bbc358c8..d8012b1 100644 --- a/Tests/RunCMake/CPack/RPM/Helpers.cmake +++ b/Tests/RunCMake/CPack/RPM/Helpers.cmake @@ -36,6 +36,10 @@ function(getPackageContentList FILE RESULT_VAR) OUTPUT_STRIP_TRAILING_WHITESPACE) string(REGEX REPLACE "\n" ";" package_content_ "${package_content_}") + # never versions of rpmbuild (introduced in rpm 4.13.0.1) add build_id links + # to packages - tests should ignore them + list(FILTER package_content_ EXCLUDE REGEX ".*\.build-id.*") + set(${RESULT_VAR} "${package_content_}" PARENT_SCOPE) endfunction() diff --git a/Tests/RunCMake/CPack/tests/SOURCE_PACKAGE/VerifyResult.cmake b/Tests/RunCMake/CPack/tests/SOURCE_PACKAGE/VerifyResult.cmake index bc54d79..73d7481 100644 --- a/Tests/RunCMake/CPack/tests/SOURCE_PACKAGE/VerifyResult.cmake +++ b/Tests/RunCMake/CPack/tests/SOURCE_PACKAGE/VerifyResult.cmake @@ -21,7 +21,9 @@ execute_process(COMMAND ${RPMBUILD_EXECUTABLE} --define "_topdir ${CMAKE_CURRENT set(output_error_message_ "\n${RPMBUILD_EXECUTABLE} error: '${error_}';\nresult: '${result_}';\n${output_error_message}") -set(EXPECTED_FILE_CONTENT_ "^/foo${whitespaces_}/foo/test_prog$") +# expected file content are test_prog and optional build-id links that are +# generated by rpmbuild (introduced in rpm 4.13.0.1) +set(EXPECTED_FILE_CONTENT_ "^/foo${whitespaces_}/foo/test_prog(${whitespaces_}.*\.build-id.*)*$") file(GLOB_RECURSE FOUND_FILE_ RELATIVE "${CMAKE_CURRENT_BINARY_DIR}/test_rpm/RPMS" "${CMAKE_CURRENT_BINARY_DIR}/test_rpm/RPMS/*.rpm") list(APPEND foundFiles_ "${FOUND_FILE_}") diff --git a/Tests/Server/CMakeLists.txt b/Tests/Server/CMakeLists.txt index 8913406..e7eaa8d 100644 --- a/Tests/Server/CMakeLists.txt +++ b/Tests/Server/CMakeLists.txt @@ -5,6 +5,7 @@ find_package(PythonInterp REQUIRED) macro(do_test bsname file) execute_process(COMMAND ${PYTHON_EXECUTABLE} + -B # no .pyc files "${CMAKE_SOURCE_DIR}/server-test.py" "${CMAKE_COMMAND}" "${CMAKE_SOURCE_DIR}/${file}" diff --git a/Tests/SwiftMix/ObjCMain.m b/Tests/SwiftMix/ObjCMain.m index 7fa90ae..20f0bf1 100644 --- a/Tests/SwiftMix/ObjCMain.m +++ b/Tests/SwiftMix/ObjCMain.m @@ -1,4 +1,4 @@ #import "SwiftMix-Swift.h" int ObjCMain(int argc, char const* const argv[]) { - return [SwiftMainClass SwiftMain:argc argv:argv]; + return [SwiftMainClass SwiftMain]; } diff --git a/Tests/SwiftMix/SwiftMain.swift b/Tests/SwiftMix/SwiftMain.swift index 3629ac8..a4a0a62 100644 --- a/Tests/SwiftMix/SwiftMain.swift +++ b/Tests/SwiftMix/SwiftMain.swift @@ -1,12 +1,8 @@ import Foundation @objc class SwiftMainClass : NSObject { - class func SwiftMain(argc:Int, argv:UnsafePointer<UnsafePointer<CChar>>) -> Int32 { - dump("argc: \(argc)") - for (var i = 0; i < argc; ++i) { - let argi = String.fromCString(argv[i]) - dump("arg[\(i)]: \(argi)"); - } + class func SwiftMain() -> Int32 { + dump("Hello World!"); return 0; } } diff --git a/Utilities/cmlibarchive/libarchive/archive_read_support_format_zip.c b/Utilities/cmlibarchive/libarchive/archive_read_support_format_zip.c index c50ba84..8df52c3 100644 --- a/Utilities/cmlibarchive/libarchive/archive_read_support_format_zip.c +++ b/Utilities/cmlibarchive/libarchive/archive_read_support_format_zip.c @@ -850,29 +850,33 @@ zip_read_local_file_header(struct archive_read *a, struct archive_entry *entry, zip_entry->mode |= AE_IFREG; } - if ((zip_entry->mode & AE_IFMT) == 0) { - /* Especially in streaming mode, we can end up - here without having seen proper mode information. - Guess from the filename. */ + /* If the mode is totally empty, set some sane default. */ + if (zip_entry->mode == 0) { + zip_entry->mode |= 0664; + } + + /* Make sure that entries with a trailing '/' are marked as directories + * even if the External File Attributes contains bogus values. If this + * is not a directory and there is no type, assume regularfile. */ + if ((zip_entry->mode & AE_IFMT) != AE_IFDIR) { + int has_slash; + wp = archive_entry_pathname_w(entry); if (wp != NULL) { len = wcslen(wp); - if (len > 0 && wp[len - 1] == L'/') - zip_entry->mode |= AE_IFDIR; - else - zip_entry->mode |= AE_IFREG; + has_slash = len > 0 && wp[len - 1] == L'/'; } else { cp = archive_entry_pathname(entry); len = (cp != NULL)?strlen(cp):0; - if (len > 0 && cp[len - 1] == '/') - zip_entry->mode |= AE_IFDIR; - else - zip_entry->mode |= AE_IFREG; + has_slash = len > 0 && cp[len - 1] == '/'; } - if (zip_entry->mode == AE_IFDIR) { - zip_entry->mode |= 0775; - } else if (zip_entry->mode == AE_IFREG) { - zip_entry->mode |= 0664; + /* Correct file type as needed. */ + if (has_slash) { + zip_entry->mode &= ~AE_IFMT; + zip_entry->mode |= AE_IFDIR; + zip_entry->mode |= 0111; + } else if ((zip_entry->mode & AE_IFMT) == 0) { + zip_entry->mode |= AE_IFREG; } } |