diff options
30 files changed, 198 insertions, 88 deletions
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 6dc9dcf..d4b7c5c 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -723,49 +723,49 @@ upload:macos10.10-package: # Windows builds -build:windows-vs2019-x64-ninja: +build:windows-vs2022-x64-ninja: extends: - - .windows_vs2019_x64_ninja + - .windows_vs2022_x64_ninja - .cmake_build_windows - .cmake_build_artifacts - - .windows_builder_tags + - .windows_tags_nonconcurrent_vs2022 - .run_manually -test:windows-vs2019-x64-ninja: +test:windows-vs2022-x64-ninja: extends: - - .windows_vs2019_x64_ninja + - .windows_vs2022_x64_ninja - .cmake_test_windows - - .windows_builder_tags + - .windows_tags_nonconcurrent_vs2022 - .cmake_test_artifacts - .run_dependent dependencies: - - build:windows-vs2019-x64-ninja + - build:windows-vs2022-x64-ninja needs: - - build:windows-vs2019-x64-ninja + - build:windows-vs2022-x64-ninja -test:windows-vs2019-x64: +test:windows-vs2022-x64: extends: - - .windows_vs2019_x64 + - .windows_vs2022_x64 - .cmake_test_windows_external - - .windows_builder_ext_tags + - .windows_tags_concurrent_vs2022 - .cmake_junit_artifacts - .run_dependent dependencies: - - test:windows-vs2019-x64-ninja + - test:windows-vs2022-x64-ninja needs: - - test:windows-vs2019-x64-ninja + - test:windows-vs2022-x64-ninja test:windows-borland5.5: extends: - .windows_borland5.5 - .cmake_test_windows_borland - - .windows_builder_ext_tags + - .windows_tags_concurrent - .cmake_junit_artifacts - .run_dependent dependencies: - - test:windows-vs2019-x64-ninja + - test:windows-vs2022-x64-ninja needs: - - test:windows-vs2019-x64-ninja + - test:windows-vs2022-x64-ninja variables: CMAKE_CI_JOB_NIGHTLY: "true" @@ -773,13 +773,13 @@ test:windows-borland5.8: extends: - .windows_borland5.8 - .cmake_test_windows_borland - - .windows_builder_ext_tags + - .windows_tags_concurrent - .cmake_junit_artifacts - .run_dependent dependencies: - - test:windows-vs2019-x64-ninja + - test:windows-vs2022-x64-ninja needs: - - test:windows-vs2019-x64-ninja + - test:windows-vs2022-x64-ninja variables: CMAKE_CI_JOB_NIGHTLY: "true" @@ -787,13 +787,13 @@ test:windows-msvc-v71-nmake: extends: - .windows_msvc_v71_nmake - .cmake_test_windows_nmake - - .windows_builder_ext_tags + - .windows_tags_concurrent - .cmake_junit_artifacts - .run_dependent dependencies: - - test:windows-vs2019-x64-ninja + - test:windows-vs2022-x64-ninja needs: - - test:windows-vs2019-x64-ninja + - test:windows-vs2022-x64-ninja variables: CMAKE_CI_JOB_NIGHTLY: "true" @@ -801,12 +801,12 @@ test:windows-openwatcom1.9: extends: - .windows_openwatcom1.9 - .cmake_test_windows_openwatcom - - .windows_builder_ext_tags + - .windows_tags_concurrent - .cmake_junit_artifacts - .run_dependent dependencies: - - test:windows-vs2019-x64-ninja + - test:windows-vs2022-x64-ninja needs: - - test:windows-vs2019-x64-ninja + - test:windows-vs2022-x64-ninja variables: CMAKE_CI_JOB_NIGHTLY: "true" diff --git a/.gitlab/ci/configure_windows_vs2019_x64.cmake b/.gitlab/ci/configure_windows_vs2022_x64.cmake index f6ece57..f6ece57 100644 --- a/.gitlab/ci/configure_windows_vs2019_x64.cmake +++ b/.gitlab/ci/configure_windows_vs2022_x64.cmake diff --git a/.gitlab/ci/configure_windows_vs2019_x64_ninja.cmake b/.gitlab/ci/configure_windows_vs2022_x64_ninja.cmake index e1ae81e..e1ae81e 100644 --- a/.gitlab/ci/configure_windows_vs2019_x64_ninja.cmake +++ b/.gitlab/ci/configure_windows_vs2022_x64_ninja.cmake diff --git a/.gitlab/ci/download_qt.cmake b/.gitlab/ci/download_qt.cmake index 3990430..5940a28 100644 --- a/.gitlab/ci/download_qt.cmake +++ b/.gitlab/ci/download_qt.cmake @@ -18,7 +18,8 @@ if ("$ENV{CMAKE_CONFIGURATION}" MATCHES "windows") set(msvc_year "2015") set(qt_abi "win64_msvc${msvc_year}_64") elseif ("$ENV{CMAKE_CONFIGURATION}" MATCHES "vs2017" OR - "$ENV{CMAKE_CONFIGURATION}" MATCHES "vs2019") + "$ENV{CMAKE_CONFIGURATION}" MATCHES "vs2019" OR + "$ENV{CMAKE_CONFIGURATION}" MATCHES "vs2022") set(qt_platform "windows_x86") set(msvc_year "2019") set(qt_abi "win64_msvc${msvc_year}_64") diff --git a/.gitlab/os-windows.yml b/.gitlab/os-windows.yml index 7e12496..f781c56 100644 --- a/.gitlab/os-windows.yml +++ b/.gitlab/os-windows.yml @@ -31,25 +31,25 @@ CMAKE_CI_BUILD_TYPE: Release CTEST_NO_WARNINGS_ALLOWED: 1 -.windows_vs2019_x64_ninja: +.windows_vs2022_x64_ninja: extends: .windows_ninja variables: - CMAKE_CONFIGURATION: windows_vs2019_x64_ninja - VCVARSALL: "${VS160COMNTOOLS}\\..\\..\\VC\\Auxiliary\\Build\\vcvarsall.bat" + CMAKE_CONFIGURATION: windows_vs2022_x64_ninja + VCVARSALL: "${VS170COMNTOOLS}\\..\\..\\VC\\Auxiliary\\Build\\vcvarsall.bat" VCVARSPLATFORM: "x64" - VCVARSVERSION: "14.29.30133" + VCVARSVERSION: "14.30.30705" ### External testing -.windows_vs2019_x64: +.windows_vs2022_x64: extends: .windows variables: - CMAKE_CONFIGURATION: windows_vs2019_x64 - CMAKE_GENERATOR: "Visual Studio 16 2019" + CMAKE_CONFIGURATION: windows_vs2022_x64 + CMAKE_GENERATOR: "Visual Studio 17 2022" CMAKE_GENERATOR_PLATFORM: "x64" - CMAKE_GENERATOR_TOOLSET: "v142,version=14.29.30133" + CMAKE_GENERATOR_TOOLSET: "v143,version=14.30.30705" CMAKE_CI_NIGHTLY_IGNORE_DEPS: "true" .windows_borland: @@ -104,22 +104,29 @@ ## Tags -.windows_builder_tags: +.windows_tags_nonconcurrent_vs2022: tags: - cmake # Since this is a bare runner, pin to a project. - windows - shell - - vs2019 - - msvc-19.29-16.11 + - vs2022 + - msvc-19.30 - nonconcurrent -.windows_builder_ext_tags: +.windows_tags_concurrent_vs2022: + tags: + - cmake # Since this is a bare runner, pin to a project. + - windows + - shell + - vs2022 + - msvc-19.30 + - concurrent + +.windows_tags_concurrent: tags: - cmake # Since this is a bare runner, pin to a project. - windows - shell - - vs2019 - - msvc-19.29-16.11 - concurrent ## Windows-specific scripts diff --git a/Help/policy/CMP0128.rst b/Help/policy/CMP0128.rst index f341f24..604a146 100644 --- a/Help/policy/CMP0128.rst +++ b/Help/policy/CMP0128.rst @@ -6,17 +6,19 @@ CMP0128 When this policy is set to ``NEW``: * :prop_tgt:`<LANG>_EXTENSIONS` is initialized to + :variable:`CMAKE_<LANG>_EXTENSIONS` if set, otherwise falling back to :variable:`CMAKE_<LANG>_EXTENSIONS_DEFAULT`. -* Extensions are correctly disabled/enabled if :prop_tgt:`<LANG>_STANDARD` is - unset. +* Extensions are correctly enabled/disabled if :prop_tgt:`<LANG>_STANDARD` is + unset or satisfied by the default. * Standard mode-affecting flags aren't added unless necessary to achieve the specified mode. The ``OLD`` behavior: -* Initializes :prop_tgt:`<LANG>_EXTENSIONS` to ``ON``. +* Initializes :prop_tgt:`<LANG>_EXTENSIONS` to + :variable:`CMAKE_<LANG>_EXTENSIONS` if set, otherwise falling back to ``ON``. * Always adds a flag if :prop_tgt:`<LANG>_STANDARD` is set and :prop_tgt:`<LANG>_STANDARD_REQUIRED` is ``OFF``. @@ -31,26 +33,6 @@ The ``OLD`` behavior: Code may need to be updated for the ``NEW`` behavior in the following cases: -* If :prop_tgt:`<LANG>_EXTENSIONS` matches - :variable:`CMAKE_<LANG>_EXTENSIONS_DEFAULT` or is unset and the compiler's - default satisfies :prop_tgt:`<LANG>_STANDARD` but the compiled code requires - the exact standard specified. - Such code should set :prop_tgt:`<LANG>_STANDARD_REQUIRED` to ``ON``. - - For example: - - .. code-block:: cmake - - cmake_minimum_required(VERSION |release|) - project(example C) - - add_executable(exe main.c) - set_property(TARGET exe PROPERTY C_STANDARD 99) - - If the compiler defaults to C11 then the standard specification for C99 is - satisfied and CMake will pass no flags. ``main.c`` will no longer compile if - it is incompatible with C11. - * If a standard mode flag previously overridden by CMake's and not used during compiler detection now takes effect due to CMake no longer adding one as the default detected is appropriate. @@ -62,6 +44,17 @@ Code may need to be updated for the ``NEW`` behavior in the following cases: * Or ensure the manually-specified flags are used during compiler detection. +* If extensions were disabled without :prop_tgt:`<LANG>_STANDARD` being set + CMake previously wouldn't actually disable extensions. + + Such code should be updated to not disable extensions if they are required. + +* If extensions were enabled/disabled when :prop_tgt:`<LANG>_STANDARD` was + satisfied by the compiler's default CMake previously wouldn't actually + enable/disable extensions. + + Such code should be updated to set the correct extensions mode. + If compiler flags affecting the standard mode are used during compiler detection (for example in :manual:`a toolchain file <cmake-toolchains(7)>` using :variable:`CMAKE_<LANG>_FLAGS_INIT`) then they will affect the detected diff --git a/Help/prop_tgt/XCODE_EMBED_type.rst b/Help/prop_tgt/XCODE_EMBED_type.rst index a1af56f..e8383c2 100644 --- a/Help/prop_tgt/XCODE_EMBED_type.rst +++ b/Help/prop_tgt/XCODE_EMBED_type.rst @@ -19,6 +19,12 @@ The supported values for ``<type>`` are: The specified items will be added to the ``Embed App Extensions`` build phase. They must be CMake target names. +``PLUGINS`` + .. versionadded:: 3.23 + + The specified items will be added to the ``Embed PlugIns`` build phase. + They must be CMake target names. + See also :prop_tgt:`XCODE_EMBED_<type>_PATH`, :prop_tgt:`XCODE_EMBED_<type>_REMOVE_HEADERS_ON_COPY` and :prop_tgt:`XCODE_EMBED_<type>_CODE_SIGN_ON_COPY`. diff --git a/Help/prop_tgt/XCODE_EMBED_type_CODE_SIGN_ON_COPY.rst b/Help/prop_tgt/XCODE_EMBED_type_CODE_SIGN_ON_COPY.rst index 7ec0385..cb449ac 100644 --- a/Help/prop_tgt/XCODE_EMBED_type_CODE_SIGN_ON_COPY.rst +++ b/Help/prop_tgt/XCODE_EMBED_type_CODE_SIGN_ON_COPY.rst @@ -14,5 +14,8 @@ The supported values for ``<type>`` are: ``APP_EXTENSIONS`` .. versionadded:: 3.21 +``PLUGINS`` + .. versionadded:: 3.23 + If a ``XCODE_EMBED_<type>_CODE_SIGN_ON_COPY`` property is not defined on the target, no code signing on copy will be performed for that ``<type>``. diff --git a/Help/prop_tgt/XCODE_EMBED_type_PATH.rst b/Help/prop_tgt/XCODE_EMBED_type_PATH.rst index a6f980d..160f765 100644 --- a/Help/prop_tgt/XCODE_EMBED_type_PATH.rst +++ b/Help/prop_tgt/XCODE_EMBED_type_PATH.rst @@ -16,3 +16,6 @@ The supported values for ``<type>`` are: ``APP_EXTENSIONS`` .. versionadded:: 3.21 + +``PLUGINS`` + .. versionadded:: 3.23 diff --git a/Help/prop_tgt/XCODE_EMBED_type_REMOVE_HEADERS_ON_COPY.rst b/Help/prop_tgt/XCODE_EMBED_type_REMOVE_HEADERS_ON_COPY.rst index 75c8eae..e3a7ced 100644 --- a/Help/prop_tgt/XCODE_EMBED_type_REMOVE_HEADERS_ON_COPY.rst +++ b/Help/prop_tgt/XCODE_EMBED_type_REMOVE_HEADERS_ON_COPY.rst @@ -18,3 +18,6 @@ The supported values for ``<type>`` are: If the ``XCODE_EMBED_APP_EXTENSIONS_REMOVE_HEADERS_ON_COPY`` property is not defined, headers WILL be removed on copy by default. + +``PLUGINS`` + .. versionadded:: 3.23 diff --git a/Help/release/dev/xcode-embed-plugins.rst b/Help/release/dev/xcode-embed-plugins.rst new file mode 100644 index 0000000..10f91f6 --- /dev/null +++ b/Help/release/dev/xcode-embed-plugins.rst @@ -0,0 +1,6 @@ +xcode-embed-plugins +------------------- + +* The :prop_tgt:`XCODE_EMBED_PLUGINS <XCODE_EMBED_<type>>` target property + was added to tell the :generator:`Xcode` generator what targets to put in + the ``Embed PlugIns`` build phase. diff --git a/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake b/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake index 05174de..bda1d71 100644 --- a/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake +++ b/Modules/CMakeCheckCompilerFlagCommonPatterns.cmake @@ -32,5 +32,6 @@ macro (CHECK_COMPILER_FLAG_COMMON_PATTERNS _VAR) FAIL_REGEX "Warning: illegal option" # SunStudio 12 FAIL_REGEX "[Ww]arning: Invalid suboption" # Fujitsu FAIL_REGEX "An invalid option .* appears on the command line" # Cray + FAIL_REGEX "WARNING: invalid compiler option" # TI armcl ) endmacro () diff --git a/Modules/CMakeFindBinUtils.cmake b/Modules/CMakeFindBinUtils.cmake index 6033ef6..6c81754 100644 --- a/Modules/CMakeFindBinUtils.cmake +++ b/Modules/CMakeFindBinUtils.cmake @@ -85,7 +85,7 @@ if(("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_SIMULATE_ID}" STREQUAL "xMSVC" AND list(PREPEND _CMAKE_MT_NAMES "llvm-mt") list(PREPEND _CMAKE_LINKER_NAMES "lld-link") list(APPEND _CMAKE_TOOL_VARS NM) - elseif("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" MATCHES "^xIntel") + elseif("x${CMAKE_${_CMAKE_PROCESSING_LANGUAGE}_COMPILER_ID}" STREQUAL "xIntel") list(PREPEND _CMAKE_AR_NAMES "xilib") list(PREPEND _CMAKE_LINKER_NAMES "xilink") endif() diff --git a/Modules/CMakeFortranCompiler.cmake.in b/Modules/CMakeFortranCompiler.cmake.in index f690eb2..97f891e 100644 --- a/Modules/CMakeFortranCompiler.cmake.in +++ b/Modules/CMakeFortranCompiler.cmake.in @@ -5,6 +5,7 @@ set(CMAKE_Fortran_COMPILER_VERSION "@CMAKE_Fortran_COMPILER_VERSION@") set(CMAKE_Fortran_COMPILER_WRAPPER "@CMAKE_Fortran_COMPILER_WRAPPER@") set(CMAKE_Fortran_PLATFORM_ID "@CMAKE_Fortran_PLATFORM_ID@") set(CMAKE_Fortran_SIMULATE_ID "@CMAKE_Fortran_SIMULATE_ID@") +set(CMAKE_Fortran_COMPILER_FRONTEND_VARIANT "@CMAKE_Fortran_COMPILER_FRONTEND_VARIANT@") set(CMAKE_Fortran_SIMULATE_VERSION "@CMAKE_Fortran_SIMULATE_VERSION@") @_SET_CMAKE_Fortran_XL_CPP@ @_SET_CMAKE_Fortran_COMPILER_ARCHITECTURE_ID@ diff --git a/Modules/FindThreads.cmake b/Modules/FindThreads.cmake index e4d6cf3..4198374 100644 --- a/Modules/FindThreads.cmake +++ b/Modules/FindThreads.cmake @@ -164,18 +164,21 @@ if(CMAKE_HAVE_PTHREAD_H) elseif(CMAKE_CXX_COMPILER_LOADED) CHECK_CXX_SOURCE_COMPILES("${PTHREAD_C_CXX_TEST_SOURCE}" CMAKE_HAVE_LIBC_PTHREAD) endif() - if(CMAKE_HAVE_LIBC_PTHREAD) + + # Check for -pthread first if enabled. This is the recommended + # way, but not backwards compatible as one must also pass -pthread + # as compiler flag then. + if(THREADS_PREFER_PTHREAD_FLAG) + _check_pthreads_flag() + endif() + + if(Threads_FOUND) + # do nothing, we are done + elseif(CMAKE_HAVE_LIBC_PTHREAD) set(CMAKE_THREAD_LIBS_INIT "") set(CMAKE_HAVE_THREADS_LIBRARY 1) set(Threads_FOUND TRUE) else() - # Check for -pthread first if enabled. This is the recommended - # way, but not backwards compatible as one must also pass -pthread - # as compiler flag then. - if (THREADS_PREFER_PTHREAD_FLAG) - _check_pthreads_flag() - endif () - if(CMAKE_SYSTEM MATCHES "GHS-MULTI") _check_threads_lib(posix pthread_create CMAKE_HAVE_PTHREADS_CREATE) endif() diff --git a/Modules/FindVulkan.cmake b/Modules/FindVulkan.cmake index 078e367..527ca8b 100644 --- a/Modules/FindVulkan.cmake +++ b/Modules/FindVulkan.cmake @@ -143,10 +143,15 @@ if(Vulkan_INCLUDE_DIR) if(EXISTS ${VULKAN_CORE_H}) file(STRINGS ${VULKAN_CORE_H} VulkanHeaderVersionLine REGEX "^#define VK_HEADER_VERSION ") string(REGEX MATCHALL "[0-9]+" VulkanHeaderVersion "${VulkanHeaderVersionLine}") - file(STRINGS ${VULKAN_CORE_H} VulkanHeaderVersionLine REGEX "^#define VK_HEADER_VERSION_COMPLETE ") - # "#define VK_HEADER_VERSION_COMPLETE VK_MAKE_API_VERSION(0, 1, 2, VK_HEADER_VERSION)" - string(REGEX REPLACE ".*\\([0_9]+[, ]+([0-9]+)[, ]+([0-9]+)[, ].*\\)" - "\\1.\\2.${VulkanHeaderVersion}" Vulkan_VERSION "${VulkanHeaderVersionLine}") + file(STRINGS ${VULKAN_CORE_H} VulkanHeaderVersionLine2 REGEX "^#define VK_HEADER_VERSION_COMPLETE ") + string(REGEX MATCHALL "[0-9]+" VulkanHeaderVersion2 "${VulkanHeaderVersionLine2}") + list(LENGTH VulkanHeaderVersion2 _len) + # versions >= 1.2.175 have an additional numbers in front of e.g. '0, 1, 2' instead of '1, 2' + if(_len EQUAL 3) + list(REMOVE_AT VulkanHeaderVersion2 0) + endif() + list(APPEND VulkanHeaderVersion2 ${VulkanHeaderVersion}) + list(JOIN VulkanHeaderVersion2 "." Vulkan_VERSION) endif() endif() diff --git a/Source/CMakeVersion.cmake b/Source/CMakeVersion.cmake index 7b3d170..29e7899 100644 --- a/Source/CMakeVersion.cmake +++ b/Source/CMakeVersion.cmake @@ -1,7 +1,7 @@ # CMake version number components. set(CMake_VERSION_MAJOR 3) set(CMake_VERSION_MINOR 22) -set(CMake_VERSION_PATCH 20211109) +set(CMake_VERSION_PATCH 20211112) #set(CMake_VERSION_RC 0) set(CMake_VERSION_IS_DIRTY 0) diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index c8df0a7..6fa15e6 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -3910,6 +3910,14 @@ void cmGlobalXCodeGenerator::AddEmbeddedFrameworks(cmXCodeObject* target) NoActionOnCopyByDefault); } +void cmGlobalXCodeGenerator::AddEmbeddedPlugIns(cmXCodeObject* target) +{ + static const auto dstSubfolderSpec = "13"; + + this->AddEmbeddedObjects(target, "Embed PlugIns", "XCODE_EMBED_PLUGINS", + dstSubfolderSpec, NoActionOnCopyByDefault); +} + void cmGlobalXCodeGenerator::AddEmbeddedAppExtensions(cmXCodeObject* target) { static const auto dstSubfolderSpec = "13"; @@ -4298,6 +4306,7 @@ bool cmGlobalXCodeGenerator::CreateXCodeObjects( for (auto t : targets) { this->AddDependAndLinkInformation(t); this->AddEmbeddedFrameworks(t); + this->AddEmbeddedPlugIns(t); this->AddEmbeddedAppExtensions(t); // Inherit project-wide values for any target-specific search paths. this->InheritBuildSettingAttribute(t, "HEADER_SEARCH_PATHS"); diff --git a/Source/cmGlobalXCodeGenerator.h b/Source/cmGlobalXCodeGenerator.h index 4d7ee90..910c946 100644 --- a/Source/cmGlobalXCodeGenerator.h +++ b/Source/cmGlobalXCodeGenerator.h @@ -216,6 +216,7 @@ private: const std::string& dstSubfolderSpec, int actionsOnByDefault); void AddEmbeddedFrameworks(cmXCodeObject* target); + void AddEmbeddedPlugIns(cmXCodeObject* target); void AddEmbeddedAppExtensions(cmXCodeObject* target); void AddPositionIndependentLinkAttribute(cmGeneratorTarget* target, cmXCodeObject* buildSettings, diff --git a/Source/cmOutputConverter.cxx b/Source/cmOutputConverter.cxx index 02b4821..4503038 100644 --- a/Source/cmOutputConverter.cxx +++ b/Source/cmOutputConverter.cxx @@ -143,7 +143,7 @@ std::string cmOutputConverter::ConvertToOutputFormat(cm::string_view source, result = this->EscapeForShell(result, true, false, output == WATCOMQUOTE, output == NINJAMULTI); } else if (output == RESPONSE) { - result = this->EscapeForShell(result, false, false, false); + result = this->EscapeForShell(result, false, false, false, false, true); } return result; } @@ -175,9 +175,11 @@ static bool cmOutputConverterIsShellOperator(cm::string_view str) return (shellOperators.count(str) != 0); } -std::string cmOutputConverter::EscapeForShell( - cm::string_view str, bool makeVars, bool forEcho, bool useWatcomQuote, - bool unescapeNinjaConfiguration) const +std::string cmOutputConverter::EscapeForShell(cm::string_view str, + bool makeVars, bool forEcho, + bool useWatcomQuote, + bool unescapeNinjaConfiguration, + bool forResponse) const { // Do not escape shell operators. if (cmOutputConverterIsShellOperator(str)) { @@ -203,6 +205,9 @@ std::string cmOutputConverter::EscapeForShell( if (useWatcomQuote) { flags |= Shell_Flag_WatcomQuote; } + if (forResponse) { + flags |= Shell_Flag_IsResponse; + } if (this->GetState()->UseWatcomWMake()) { flags |= Shell_Flag_WatcomWMake; } @@ -360,6 +365,13 @@ bool cmOutputConverter::Shell_CharNeedsQuotes(char c, int flags) return true; } + /* Quote hyphens in response files */ + if (flags & Shell_Flag_IsResponse) { + if (c == '-') { + return true; + } + } + if (flags & Shell_Flag_IsUnix) { /* On UNIX several special characters need quotes to preserve them. */ if (Shell_CharNeedsQuotesOnUnix(c)) { diff --git a/Source/cmOutputConverter.h b/Source/cmOutputConverter.h index 53ec247..335442d 100644 --- a/Source/cmOutputConverter.h +++ b/Source/cmOutputConverter.h @@ -88,11 +88,14 @@ public: Shell_Flag_IsUnix = (1 << 8), Shell_Flag_UnescapeNinjaConfiguration = (1 << 9), + + Shell_Flag_IsResponse = (1 << 10) }; std::string EscapeForShell(cm::string_view str, bool makeVars = false, bool forEcho = false, bool useWatcomQuote = false, - bool unescapeNinjaConfiguration = false) const; + bool unescapeNinjaConfiguration = false, + bool forResponse = false) const; enum class WrapQuotes { diff --git a/Source/cmStandardLevelResolver.cxx b/Source/cmStandardLevelResolver.cxx index 957f4ca..61416e0 100644 --- a/Source/cmStandardLevelResolver.cxx +++ b/Source/cmStandardLevelResolver.cxx @@ -206,7 +206,8 @@ struct StandardLevelComputer // If the standard requested is older than the compiler's default or the // extension mode doesn't match then we need to use a flag. - if (stdIt < defaultStdIt) { + if (stdIt < defaultStdIt || + (cmp0128 == cmPolicies::NEW && ext != defaultExt)) { auto offset = std::distance(cm::cbegin(stds), stdIt); return cmStrCat("CMAKE_", this->Language, stdsStrings[offset], "_", type, "_COMPILE_OPTION"); diff --git a/Tests/RunCMake/CompileFeatures/ExtensionsStandardDefault-build-check.cmake b/Tests/RunCMake/CompileFeatures/ExtensionsStandardDefault-build-check.cmake new file mode 100644 index 0000000..4e85397 --- /dev/null +++ b/Tests/RunCMake/CompileFeatures/ExtensionsStandardDefault-build-check.cmake @@ -0,0 +1,12 @@ +foreach(flag @flags@) + string(FIND "${actual_stdout}" "${flag}" position) + + if(NOT position EQUAL -1) + set(found TRUE) + break() + endif() +endforeach() + +if(NOT found) + set(RunCMake_TEST_FAILED "No compile flags from \"@flags@\" found for LANG_STANDARD=default and @lang@_EXTENSIONS=@extensions_opposite@.") +endif() diff --git a/Tests/RunCMake/CompileFeatures/ExtensionsStandardDefault.cmake b/Tests/RunCMake/CompileFeatures/ExtensionsStandardDefault.cmake new file mode 100644 index 0000000..32578d1 --- /dev/null +++ b/Tests/RunCMake/CompileFeatures/ExtensionsStandardDefault.cmake @@ -0,0 +1,9 @@ +enable_language(@lang@) + +# Make sure the compile command is not hidden. +string(REPLACE "${CMAKE_START_TEMP_FILE}" "" CMAKE_@lang@_COMPILE_OBJECT "${CMAKE_@lang@_COMPILE_OBJECT}") +string(REPLACE "${CMAKE_END_TEMP_FILE}" "" CMAKE_@lang@_COMPILE_OBJECT "${CMAKE_@lang@_COMPILE_OBJECT}") + +set(CMAKE_@lang@_EXTENSIONS @extensions_opposite@) +set(CMAKE_@lang@_STANDARD @standard_default@) +add_library(foo "@RunCMake_SOURCE_DIR@/empty.@ext@") diff --git a/Tests/RunCMake/CompileFeatures/UnsetStandard-build-check.cmake b/Tests/RunCMake/CompileFeatures/ExtensionsStandardUnset-build-check.cmake index abe293c..abe293c 100644 --- a/Tests/RunCMake/CompileFeatures/UnsetStandard-build-check.cmake +++ b/Tests/RunCMake/CompileFeatures/ExtensionsStandardUnset-build-check.cmake diff --git a/Tests/RunCMake/CompileFeatures/UnsetStandard.cmake b/Tests/RunCMake/CompileFeatures/ExtensionsStandardUnset.cmake index 99bb3f0..99bb3f0 100644 --- a/Tests/RunCMake/CompileFeatures/UnsetStandard.cmake +++ b/Tests/RunCMake/CompileFeatures/ExtensionsStandardUnset.cmake diff --git a/Tests/RunCMake/CompileFeatures/RunCMakeTest.cmake b/Tests/RunCMake/CompileFeatures/RunCMakeTest.cmake index 3bfd211..ebd981b 100644 --- a/Tests/RunCMake/CompileFeatures/RunCMakeTest.cmake +++ b/Tests/RunCMake/CompileFeatures/RunCMakeTest.cmake @@ -36,7 +36,7 @@ endif() configure_file("${RunCMake_SOURCE_DIR}/CMakeLists.txt" "${RunCMake_BINARY_DIR}/CMakeLists.txt" COPYONLY) -macro(test_build) +function(test_build) set(test ${name}-${lang}) configure_file("${RunCMake_SOURCE_DIR}/${name}.cmake" "${RunCMake_BINARY_DIR}/${test}.cmake" @ONLY) @@ -52,7 +52,7 @@ macro(test_build) run_cmake(${test}) set(RunCMake_TEST_NO_CLEAN 1) run_cmake_command(${test}-build ${CMAKE_COMMAND} --build . ${ARGN}) -endmacro() +endfunction() # Mangle flags such as they're in verbose build output. macro(mangle_flags variable) @@ -68,7 +68,7 @@ macro(mangle_flags variable) list(APPEND flags "${result}") endmacro() -function(test_unset_standard) +function(test_extensions_opposite) if(extensions_opposite) set(flag_ext "_EXT") endif() @@ -81,9 +81,15 @@ function(test_unset_standard) mangle_flags(flag) - set(name UnsetStandard) + # Make sure we enable/disable extensions when: + # 1. LANG_STANDARD is unset. + set(name ExtensionsStandardUnset) set(RunCMake_TEST_OPTIONS -DCMAKE_POLICY_DEFAULT_CMP0128=NEW) test_build(--verbose) + + # 2. LANG_STANDARD matches CMAKE_LANG_STANDARD_DEFAULT. + set(name ExtensionsStandardDefault) + test_build(--verbose) endfunction() function(test_no_unnecessary_flag) @@ -138,7 +144,7 @@ function(test_lang lang ext) set(extensions_opposite ON) endif() - test_unset_standard() + test_extensions_opposite() test_no_unnecessary_flag() test_cmp0128_warn_match() test_cmp0128_warn_unset() diff --git a/Tests/RunCMake/XcodeProject-Embed/EmbedPlugIns-macOS-check.cmake b/Tests/RunCMake/XcodeProject-Embed/EmbedPlugIns-macOS-check.cmake new file mode 100644 index 0000000..576be11 --- /dev/null +++ b/Tests/RunCMake/XcodeProject-Embed/EmbedPlugIns-macOS-check.cmake @@ -0,0 +1,4 @@ +include(${CMAKE_CURRENT_LIST_DIR}/findAttribute.cmake) + +findAttribute(${test} "RemoveHeadersOnCopy" TRUE) +findAttribute(${test} "CodeSignOnCopy" FALSE) diff --git a/Tests/RunCMake/XcodeProject-Embed/EmbedPlugIns-macOS.cmake b/Tests/RunCMake/XcodeProject-Embed/EmbedPlugIns-macOS.cmake new file mode 100644 index 0000000..57f8fbe --- /dev/null +++ b/Tests/RunCMake/XcodeProject-Embed/EmbedPlugIns-macOS.cmake @@ -0,0 +1 @@ +include(${CMAKE_CURRENT_LIST_DIR}/EmbedPlugIns.cmake) diff --git a/Tests/RunCMake/XcodeProject-Embed/EmbedPlugIns.cmake b/Tests/RunCMake/XcodeProject-Embed/EmbedPlugIns.cmake new file mode 100644 index 0000000..1bd1bd0 --- /dev/null +++ b/Tests/RunCMake/XcodeProject-Embed/EmbedPlugIns.cmake @@ -0,0 +1,20 @@ +add_executable(plug_in MACOS_BUNDLE Empty.txt) +set_target_properties(plug_in PROPERTIES + LINKER_LANGUAGE CXX + XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO" + XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "" + XCODE_ATTRIBUTE_ENABLE_BITCODE "NO" + MACOSX_BUNDLE_INFO_PLIST "${CMAKE_CURRENT_SOURCE_DIR}/Info.plist.in" + MACOSX_BUNDLE_GUI_IDENTIFIER "com.example.app.plug_in" + XCODE_EXPLICIT_FILE_TYPE "wrapper.cfbundle" + XCODE_ATTRIBUTE_MACH_O_TYPE "mh_bundle" +) + +add_executable(app MACOSX_BUNDLE main.m) +add_dependencies(app plug_in) +set_target_properties(app PROPERTIES + XCODE_ATTRIBUTE_CODE_SIGNING_ALLOWED "NO" + XCODE_ATTRIBUTE_CODE_SIGN_IDENTITY "" + XCODE_EMBED_PLUGINS plug_in + MACOSX_BUNDLE_GUI_IDENTIFIER "com.example.app" +) |