This is an automated email from the git hooks/post-receive script. It was generated because a ref change was pushed to the repository containing the project "CMake".
The branch, master has been updated via 89abbdd8c8db5bf587373f2a00f6a816eddd8496 (commit) via 4e47e9967aa9d4cd76375468e3b175cd313f3877 (commit) via fb05b6a8f53bbfd15dc549f24c11035ec5272b36 (commit) via 6d8f0627a39ff18c7c7d1d744de405f30aa4d9c4 (commit) via 3744bd0a0afa696546afa3bd128c2c1825fd2fdb (commit) via 204c5ccb43e8a0bc937d8adac5eaa4b73f12140d (commit) via 2c43fb5be345b75d12bba227979efd74b810b49a (commit) via 0404efe786b1e2c5c28065a53e55ec77217e7b49 (commit) via 2060a1445c6c6350eb886cfe70f956dccaef798e (commit) via ddad70c8a48eb90493760b7fa3d3850235ad451a (commit) via 413b71485a456456e204183f0d62e11e1ec3c1da (commit) via d79fa9dd55daa24e90c8609fb9d1759f13e2f2e5 (commit) via 868dc1a121f9876a19852e0c6467483ad0d67951 (commit) via 775c8b21dac805da914557f85c2bb1408530c5fe (commit) via 965da8d787ad0ca9b78f98cd276211e997016d07 (commit) via 03d17a35b50e409d466b3042ad5e79010e746f35 (commit) via f7dca1fc97c08146da33a2d6a3ba22ad8e08d94a (commit) from 94be5f9344aa770d38bc5487aa57ba9566512a1e (commit) Those revisions listed above that are new to this repository have not appeared on any other notification email; so we list those revisions in full, below. - Log ----------------------------------------------------------------- https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=89abbdd8c8db5bf587373f2a00f6a816eddd8496 commit 89abbdd8c8db5bf587373f2a00f6a816eddd8496 Merge: 4e47e99 2c43fb5 Author: Brad King <brad.k...@kitware.com> AuthorDate: Fri Mar 22 13:22:28 2019 +0000 Commit: Kitware Robot <kwro...@kitware.com> CommitDate: Fri Mar 22 09:22:44 2019 -0400 Merge topic 'ghs-linux' 2c43fb5be3 FindThreads: Fix pthread library check in GHS Multi Generator 0404efe786 GHS: Add support for GHS Multi Generator in Linux 2060a1445c Tests: Fix file name case in GHS object library test ddad70c8a4 Tests: Run GHS tests in a separate ctest process f7dca1fc97 GHS: Fix include-what-you-use and clang-tidy diagnostics Acked-by: Kitware Robot <kwro...@kitware.com> Merge-request: !3006 https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=4e47e9967aa9d4cd76375468e3b175cd313f3877 commit 4e47e9967aa9d4cd76375468e3b175cd313f3877 Merge: fb05b6a 204c5cc Author: Brad King <brad.k...@kitware.com> AuthorDate: Fri Mar 22 13:19:36 2019 +0000 Commit: Kitware Robot <kwro...@kitware.com> CommitDate: Fri Mar 22 09:19:55 2019 -0400 Merge topic 'cmTarget_non_copyable' 204c5ccb43 cmMakefile: Use std::unordered_map::emplace to add cmTargets to the list Acked-by: Kitware Robot <kwro...@kitware.com> Merge-request: !3134 https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=fb05b6a8f53bbfd15dc549f24c11035ec5272b36 commit fb05b6a8f53bbfd15dc549f24c11035ec5272b36 Merge: 6d8f062 965da8d Author: Brad King <brad.k...@kitware.com> AuthorDate: Fri Mar 22 13:19:02 2019 +0000 Commit: Kitware Robot <kwro...@kitware.com> CommitDate: Fri Mar 22 09:19:09 2019 -0400 Merge topic 'cmTarget_micro_fixes' 965da8d787 cmTarget: Acquire data only when needed 03d17a35b5 cmTarget: Use helper function to append to lists Acked-by: Kitware Robot <kwro...@kitware.com> Merge-request: !3135 https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=6d8f0627a39ff18c7c7d1d744de405f30aa4d9c4 commit 6d8f0627a39ff18c7c7d1d744de405f30aa4d9c4 Merge: 3744bd0 d79fa9d Author: Brad King <brad.k...@kitware.com> AuthorDate: Fri Mar 22 13:16:20 2019 +0000 Commit: Kitware Robot <kwro...@kitware.com> CommitDate: Fri Mar 22 09:16:56 2019 -0400 Merge topic 'update-kwsys' d79fa9dd55 Merge branch 'upstream-KWSys' into update-kwsys 868dc1a121 KWSys 2019-03-21 (fd41ac36) 775c8b21da update-third-party: update from upstream Acked-by: Kitware Robot <kwro...@kitware.com> Merge-request: !3136 https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=3744bd0a0afa696546afa3bd128c2c1825fd2fdb commit 3744bd0a0afa696546afa3bd128c2c1825fd2fdb Merge: 94be5f9 413b714 Author: Brad King <brad.k...@kitware.com> AuthorDate: Fri Mar 22 13:15:50 2019 +0000 Commit: Kitware Robot <kwro...@kitware.com> CommitDate: Fri Mar 22 09:16:02 2019 -0400 Merge topic 'xcodescheme2' 413b71485a Xcode: Create Xcode schemes per target Acked-by: Kitware Robot <kwro...@kitware.com> Merge-request: !3098 https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=204c5ccb43e8a0bc937d8adac5eaa4b73f12140d commit 204c5ccb43e8a0bc937d8adac5eaa4b73f12140d Author: Sebastian Holtermann <sebh...@xwmw.org> AuthorDate: Thu Mar 21 20:06:00 2019 +0100 Commit: Sebastian Holtermann <sebh...@xwmw.org> CommitDate: Thu Mar 21 20:43:48 2019 +0100 cmMakefile: Use std::unordered_map::emplace to add cmTargets to the list When adding cmTargets to a cmMakefile, use std::unordered_map::emplace instead of std::unordered_map::insert. diff --git a/Source/cmGlobalGenerator.cxx b/Source/cmGlobalGenerator.cxx index 6964b62..00781c3 100644 --- a/Source/cmGlobalGenerator.cxx +++ b/Source/cmGlobalGenerator.cxx @@ -1214,14 +1214,16 @@ void cmGlobalGenerator::Configure() this->ConfigureDoneCMP0026AndCMP0024 = true; // Put a copy of each global target in every directory. - std::vector<GlobalTargetInfo> globalTargets; - this->CreateDefaultGlobalTargets(globalTargets); - - for (cmMakefile* mf : this->Makefiles) { - cmTargets* targets = &(mf->GetTargets()); - for (GlobalTargetInfo const& globalTarget : globalTargets) { - targets->insert(cmTargets::value_type( - globalTarget.Name, this->CreateGlobalTarget(globalTarget, mf))); + { + std::vector<GlobalTargetInfo> globalTargets; + this->CreateDefaultGlobalTargets(globalTargets); + + for (cmMakefile* mf : this->Makefiles) { + auto& targets = mf->GetTargets(); + for (GlobalTargetInfo const& globalTarget : globalTargets) { + targets.emplace(globalTarget.Name, + this->CreateGlobalTarget(globalTarget, mf)); + } } } diff --git a/Source/cmMakefile.cxx b/Source/cmMakefile.cxx index ab37774..3832427 100644 --- a/Source/cmMakefile.cxx +++ b/Source/cmMakefile.cxx @@ -2023,8 +2023,7 @@ cmTarget* cmMakefile::AddNewTarget(cmStateEnums::TargetType type, { cmTargets::iterator it = this->Targets - .insert(cmTargets::value_type( - name, cmTarget(name, type, cmTarget::VisibilityNormal, this))) + .emplace(name, cmTarget(name, type, cmTarget::VisibilityNormal, this)) .first; this->GetGlobalGenerator()->IndexTarget(&it->second); this->GetStateSnapshot().GetDirectory().AddNormalTargetName(name); https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2c43fb5be345b75d12bba227979efd74b810b49a commit 2c43fb5be345b75d12bba227979efd74b810b49a Author: Naren Manimohan <narendha...@gmail.com> AuthorDate: Wed Mar 13 16:06:59 2019 +0100 Commit: Brad King <brad.k...@kitware.com> CommitDate: Thu Mar 21 12:57:44 2019 -0400 FindThreads: Fix pthread library check in GHS Multi Generator diff --git a/Modules/FindThreads.cmake b/Modules/FindThreads.cmake index 3684f01..d317b71 100644 --- a/Modules/FindThreads.cmake +++ b/Modules/FindThreads.cmake @@ -161,6 +161,9 @@ if(CMAKE_HAVE_PTHREAD_H) _check_pthreads_flag() endif () + if(CMAKE_SYSTEM MATCHES "GHS-MULTI") + _check_threads_lib(posix pthread_create CMAKE_HAVE_PTHREADS_CREATE) + endif() _check_threads_lib(pthreads pthread_create CMAKE_HAVE_PTHREADS_CREATE) _check_threads_lib(pthread pthread_create CMAKE_HAVE_PTHREAD_CREATE) if(CMAKE_SYSTEM_NAME MATCHES "SunOS") https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=0404efe786b1e2c5c28065a53e55ec77217e7b49 commit 0404efe786b1e2c5c28065a53e55ec77217e7b49 Author: Naren Manimohan <narendha...@gmail.com> AuthorDate: Thu Mar 21 17:00:04 2019 +0100 Commit: Brad King <brad.k...@kitware.com> CommitDate: Thu Mar 21 12:57:40 2019 -0400 GHS: Add support for GHS Multi Generator in Linux diff --git a/Help/generator/Green Hills MULTI.rst b/Help/generator/Green Hills MULTI.rst index e474682..09c5b15 100644 --- a/Help/generator/Green Hills MULTI.rst +++ b/Help/generator/Green Hills MULTI.rst @@ -33,12 +33,12 @@ Cache variables that are used for toolset and target system customization: * ``GHS_TOOLSET_ROOT`` | Root path for ``toolset`` searches. - | Defaults to ``C:/ghs``. + | Defaults to ``C:/ghs`` in Windows or ``/usr/ghs`` in Linux. * ``GHS_OS_ROOT`` | Root path for RTOS searches. - | Defaults to ``C:/ghs``. + | Defaults to ``C:/ghs`` in Windows or ``/usr/ghs`` in Linux. * ``GHS_OS_DIR`` diff --git a/Help/release/dev/ghs-linux.rst b/Help/release/dev/ghs-linux.rst new file mode 100644 index 0000000..6b663c8 --- /dev/null +++ b/Help/release/dev/ghs-linux.rst @@ -0,0 +1,4 @@ +ghs-linux +--------- + +* The :generator:`Green Hills MULTI` generator is now available on Linux. diff --git a/Help/variable/CMAKE_MAKE_PROGRAM.rst b/Help/variable/CMAKE_MAKE_PROGRAM.rst index 56df2df..a3c8b7c 100644 --- a/Help/variable/CMAKE_MAKE_PROGRAM.rst +++ b/Help/variable/CMAKE_MAKE_PROGRAM.rst @@ -52,7 +52,8 @@ to configure the project: possible. * The :generator:`Green Hills MULTI` generator sets this to the full - path to ``gbuild.exe`` based upon the toolset being used. + path to ``gbuild.exe(Windows)`` or ``gbuild(Linux)`` based upon + the toolset being used. Once the generator has initialized a particular value for this variable, changing the value has undefined behavior. diff --git a/Modules/CMakeDetermineCompilerId.cmake b/Modules/CMakeDetermineCompilerId.cmake index 59dab6d..594f85b 100644 --- a/Modules/CMakeDetermineCompilerId.cmake +++ b/Modules/CMakeDetermineCompilerId.cmake @@ -431,10 +431,18 @@ Id flags: ${testflags} ${CMAKE_${lang}_COMPILER_ID_FLAGS_ALWAYS} ) # Match the compiler location line printed out. set(ghs_toolpath "${CMAKE_MAKE_PROGRAM}") - string(REPLACE "/gbuild.exe" "/" ghs_toolpath ${ghs_toolpath}) - string(REPLACE / "\\\\" ghs_toolpath ${ghs_toolpath}) + if(CMAKE_HOST_UNIX) + string(REPLACE "/gbuild" "/" ghs_toolpath ${ghs_toolpath}) + else() + string(REPLACE "/gbuild.exe" "/" ghs_toolpath ${ghs_toolpath}) + string(REPLACE / "\\\\" ghs_toolpath ${ghs_toolpath}) + endif() if("${CMAKE_${lang}_COMPILER_ID_OUTPUT}" MATCHES "(${ghs_toolpath}[^ ]*)") - set(_comp "${CMAKE_MATCH_1}.exe") + if(CMAKE_HOST_UNIX) + set(_comp "${CMAKE_MATCH_1}") + else() + set(_comp "${CMAKE_MATCH_1}.exe") + endif() if(EXISTS "${_comp}") file(TO_CMAKE_PATH "${_comp}" _comp) set(CMAKE_${lang}_COMPILER_ID_TOOL "${_comp}" PARENT_SCOPE) diff --git a/Modules/Platform/GHS-MULTI-Initialize.cmake b/Modules/Platform/GHS-MULTI-Initialize.cmake index 25004c6..db65d14 100644 --- a/Modules/Platform/GHS-MULTI-Initialize.cmake +++ b/Modules/Platform/GHS-MULTI-Initialize.cmake @@ -3,7 +3,11 @@ #Setup Green Hills MULTI specific compilation information -set(GHS_OS_ROOT "C:/ghs" CACHE PATH "GHS platform OS search root directory") +if(CMAKE_HOST_UNIX) + set(GHS_OS_ROOT "/usr/ghs" CACHE PATH "GHS platform OS search root directory") +else() + set(GHS_OS_ROOT "C:/ghs" CACHE PATH "GHS platform OS search root directory") +endif() mark_as_advanced(GHS_OS_ROOT) set(GHS_OS_DIR "NOTFOUND" CACHE PATH "GHS platform OS directory") diff --git a/Source/CMakeLists.txt b/Source/CMakeLists.txt index 696826f..f65e78f 100644 --- a/Source/CMakeLists.txt +++ b/Source/CMakeLists.txt @@ -727,14 +727,6 @@ if (WIN32) cmVisualStudioSlnParser.cxx cmVisualStudioWCEPlatformParser.h cmVisualStudioWCEPlatformParser.cxx - cmGlobalGhsMultiGenerator.cxx - cmGlobalGhsMultiGenerator.h - cmLocalGhsMultiGenerator.cxx - cmLocalGhsMultiGenerator.h - cmGhsMultiTargetGenerator.cxx - cmGhsMultiTargetGenerator.h - cmGhsMultiGpj.cxx - cmGhsMultiGpj.h cmVSSetupHelper.cxx cmVSSetupHelper.h ) @@ -754,6 +746,22 @@ if(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL "Linux") ) endif() +# GHS support +# Works only for windows and linux +if(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL "Linux") + set(SRCS ${SRCS} + cmGlobalGhsMultiGenerator.cxx + cmGlobalGhsMultiGenerator.h + cmLocalGhsMultiGenerator.cxx + cmLocalGhsMultiGenerator.h + cmGhsMultiTargetGenerator.cxx + cmGhsMultiTargetGenerator.h + cmGhsMultiGpj.cxx + cmGhsMultiGpj.h + ) +endif() + + # Ninja support set(SRCS ${SRCS} cmGlobalNinjaGenerator.cxx diff --git a/Source/cmGlobalGhsMultiGenerator.cxx b/Source/cmGlobalGhsMultiGenerator.cxx index dd2e100..690398f 100644 --- a/Source/cmGlobalGhsMultiGenerator.cxx +++ b/Source/cmGlobalGhsMultiGenerator.cxx @@ -22,8 +22,13 @@ #include <utility> const char* cmGlobalGhsMultiGenerator::FILE_EXTENSION = ".gpj"; +#ifdef __linux__ +const char* cmGlobalGhsMultiGenerator::DEFAULT_BUILD_PROGRAM = "gbuild"; +const char* cmGlobalGhsMultiGenerator::DEFAULT_TOOLSET_ROOT = "/usr/ghs"; +#elif defined(_WIN32) const char* cmGlobalGhsMultiGenerator::DEFAULT_BUILD_PROGRAM = "gbuild.exe"; const char* cmGlobalGhsMultiGenerator::DEFAULT_TOOLSET_ROOT = "C:/ghs"; +#endif cmGlobalGhsMultiGenerator::cmGlobalGhsMultiGenerator(cmake* cm) : cmGlobalGenerator(cm) diff --git a/Source/cmake.cxx b/Source/cmake.cxx index 08e284e..69dc26b 100644 --- a/Source/cmake.cxx +++ b/Source/cmake.cxx @@ -48,7 +48,6 @@ #if defined(_WIN32) && !defined(__CYGWIN__) # if !defined(CMAKE_BOOT_MINGW) # include "cmGlobalBorlandMakefileGenerator.h" -# include "cmGlobalGhsMultiGenerator.h" # include "cmGlobalJOMMakefileGenerator.h" # include "cmGlobalNMakeMakefileGenerator.h" # include "cmGlobalVisualStudio10Generator.h" @@ -84,6 +83,10 @@ # include "cmExtraEclipseCDT4Generator.h" #endif +#if defined(__linux__) || defined(_WIN32) +# include "cmGlobalGhsMultiGenerator.h" +#endif + #if defined(__APPLE__) # if defined(CMAKE_BUILD_WITH_CMAKE) # include "cmGlobalXCodeGenerator.h" @@ -1833,13 +1836,15 @@ void cmake::AddDefaultGenerators() this->Generators.push_back(cmGlobalBorlandMakefileGenerator::NewFactory()); this->Generators.push_back(cmGlobalNMakeMakefileGenerator::NewFactory()); this->Generators.push_back(cmGlobalJOMMakefileGenerator::NewFactory()); - this->Generators.push_back(cmGlobalGhsMultiGenerator::NewFactory()); # endif this->Generators.push_back(cmGlobalMSYSMakefileGenerator::NewFactory()); this->Generators.push_back(cmGlobalMinGWMakefileGenerator::NewFactory()); #endif this->Generators.push_back(cmGlobalUnixMakefileGenerator3::NewFactory()); #if defined(CMAKE_BUILD_WITH_CMAKE) +# if defined(__linux__) || defined(_WIN32) + this->Generators.push_back(cmGlobalGhsMultiGenerator::NewFactory()); +# endif this->Generators.push_back(cmGlobalNinjaGenerator::NewFactory()); #endif #if defined(CMAKE_USE_WMAKE) https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=2060a1445c6c6350eb886cfe70f956dccaef798e commit 2060a1445c6c6350eb886cfe70f956dccaef798e Author: Naren Manimohan <narendha...@gmail.com> AuthorDate: Wed Mar 13 13:36:58 2019 +0100 Commit: Brad King <brad.k...@kitware.com> CommitDate: Thu Mar 21 12:57:38 2019 -0400 Tests: Fix file name case in GHS object library test diff --git a/Tests/GhsMulti/GhsMultiObjectLibrary/CMakeLists.txt b/Tests/GhsMulti/GhsMultiObjectLibrary/CMakeLists.txt index a025814..98668e5 100644 --- a/Tests/GhsMulti/GhsMultiObjectLibrary/CMakeLists.txt +++ b/Tests/GhsMulti/GhsMultiObjectLibrary/CMakeLists.txt @@ -5,7 +5,7 @@ cmake_minimum_required(VERSION 3.12 FATAL_ERROR) project(test C) -add_library(obj1 OBJECT testObj.c testObj.h sub/testObj.c testObj2.c) +add_library(obj1 OBJECT testOBJ.c testOBJ.h sub/testOBJ.c testOBJ2.c) add_executable(exe1 exe.c $<TARGET_OBJECTS:obj1>) if(CMAKE_C_COMPILER_ID STREQUAL "GHS") https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=ddad70c8a48eb90493760b7fa3d3850235ad451a commit ddad70c8a48eb90493760b7fa3d3850235ad451a Author: Brad King <brad.k...@kitware.com> AuthorDate: Thu Mar 21 12:56:35 2019 -0400 Commit: Brad King <brad.k...@kitware.com> CommitDate: Thu Mar 21 12:57:38 2019 -0400 Tests: Run GHS tests in a separate ctest process These tests use a different compiler than the rest of the test suite. Isolate the rest of our tests from their environment. diff --git a/Tests/CMakeLists.txt b/Tests/CMakeLists.txt index 01f8226..a59b6eb 100644 --- a/Tests/CMakeLists.txt +++ b/Tests/CMakeLists.txt @@ -2316,6 +2316,7 @@ ${CMake_BINARY_DIR}/bin/cmake -DDIR=dev -P ${CMake_SOURCE_DIR}/Utilities/Release --build-generator "Green Hills MULTI" --build-project test --build-config $<CONFIGURATION> + --force-new-ctest-process --build-options ${ghs_target_arch} ${ghs_toolset_name} ${ghs_toolset_root} ${ghs_target_platform} ${ghs_os_root} ${ghs_os_dir} ${ghs_bsp_name} ${_ghs_build_opts} ${_ghs_toolset_extra} ${_ghs_test_command} https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=413b71485a456456e204183f0d62e11e1ec3c1da commit 413b71485a456456e204183f0d62e11e1ec3c1da Author: Harry Mallon <hjmal...@gmail.com> AuthorDate: Mon Mar 11 12:57:39 2019 +0000 Commit: Harry Mallon <hjmal...@gmail.com> CommitDate: Thu Mar 21 16:50:41 2019 +0000 Xcode: Create Xcode schemes per target diff --git a/Auxiliary/vim/syntax/cmake.vim b/Auxiliary/vim/syntax/cmake.vim index 9610410..7fcdc72 100644 --- a/Auxiliary/vim/syntax/cmake.vim +++ b/Auxiliary/vim/syntax/cmake.vim @@ -353,6 +353,7 @@ syn keyword cmakeProperty contained \ XCODE_EMIT_EFFECTIVE_PLATFORM_NAME \ XCODE_EXPLICIT_FILE_TYPE \ XCODE_FILE_ATTRIBUTES + \ XCODE_GENERATE_SCHEME \ XCODE_LAST_KNOWN_FILE_TYPE \ XCODE_PRODUCT_TYPE \ XCODE_SCHEME_ADDRESS_SANITIZER diff --git a/Help/manual/cmake-properties.7.rst b/Help/manual/cmake-properties.7.rst index fce5584..4d4b9ff 100644 --- a/Help/manual/cmake-properties.7.rst +++ b/Help/manual/cmake-properties.7.rst @@ -349,6 +349,7 @@ Properties on Targets /prop_tgt/WINDOWS_EXPORT_ALL_SYMBOLS /prop_tgt/XCODE_ATTRIBUTE_an-attribute /prop_tgt/XCODE_EXPLICIT_FILE_TYPE + /prop_tgt/XCODE_GENERATE_SCHEME /prop_tgt/XCODE_PRODUCT_TYPE /prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER /prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN diff --git a/Help/variable/CMAKE_XCODE_GENERATE_SCHEME.rst b/Help/prop_tgt/XCODE_GENERATE_SCHEME.rst similarity index 88% copy from Help/variable/CMAKE_XCODE_GENERATE_SCHEME.rst copy to Help/prop_tgt/XCODE_GENERATE_SCHEME.rst index 707c6a0..a56a210 100644 --- a/Help/variable/CMAKE_XCODE_GENERATE_SCHEME.rst +++ b/Help/prop_tgt/XCODE_GENERATE_SCHEME.rst @@ -1,10 +1,14 @@ -CMAKE_XCODE_GENERATE_SCHEME ---------------------------- +XCODE_GENERATE_SCHEME +--------------------- If enabled, the Xcode generator will generate schema files. These are useful to invoke analyze, archive, build-for-testing and test actions from the command line. +This property is initialized by the value of the variable +:variable:`CMAKE_XCODE_GENERATE_SCHEME` if it is set when a target +is created. + The following target properties overwrite the default of the corresponding settings on the "Diagnostic" tab for each schema file. Each of those is initialized by the respective ``CMAKE_`` variable diff --git a/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER.rst b/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER.rst index 694cd77..cc9bac2 100644 --- a/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER.rst +++ b/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER.rst @@ -8,5 +8,5 @@ This property is initialized by the value of the variable :variable:`CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER` if it is set when a target is created. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst b/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst index 2803da0..37a043a 100644 --- a/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst +++ b/Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst @@ -8,5 +8,5 @@ This property is initialized by the value of the variable :variable:`CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN` if it is set when a target is created. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/prop_tgt/XCODE_SCHEME_ARGUMENTS.rst b/Help/prop_tgt/XCODE_SCHEME_ARGUMENTS.rst index 2eac4a9..1f228e3 100644 --- a/Help/prop_tgt/XCODE_SCHEME_ARGUMENTS.rst +++ b/Help/prop_tgt/XCODE_SCHEME_ARGUMENTS.rst @@ -6,5 +6,5 @@ section of the generated Xcode scheme. If set to a list of arguments those will be added to the scheme. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/prop_tgt/XCODE_SCHEME_DEBUG_AS_ROOT.rst b/Help/prop_tgt/XCODE_SCHEME_DEBUG_AS_ROOT.rst index a53f836..5407e80 100644 --- a/Help/prop_tgt/XCODE_SCHEME_DEBUG_AS_ROOT.rst +++ b/Help/prop_tgt/XCODE_SCHEME_DEBUG_AS_ROOT.rst @@ -3,5 +3,5 @@ XCODE_SCHEME_DEBUG_AS_ROOT Whether to debug the target as 'root'. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/prop_tgt/XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst b/Help/prop_tgt/XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst index 75fc326..1a6fcfd 100644 --- a/Help/prop_tgt/XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst +++ b/Help/prop_tgt/XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst @@ -8,5 +8,5 @@ This property is initialized by the value of the variable :variable:`CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER` if it is set when a target is created. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst b/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst index a7fab66..9224022 100644 --- a/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst +++ b/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst @@ -8,5 +8,5 @@ This property is initialized by the value of the variable :variable:`CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS` if it is set when a target is created. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst b/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst index 162fc45..203c803 100644 --- a/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst +++ b/Help/prop_tgt/XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst @@ -8,5 +8,5 @@ This property is initialized by the value of the variable :variable:`CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE` if it is set when a target is created. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/prop_tgt/XCODE_SCHEME_ENVIRONMENT.rst b/Help/prop_tgt/XCODE_SCHEME_ENVIRONMENT.rst index 1dbd6c4..c6d875e 100644 --- a/Help/prop_tgt/XCODE_SCHEME_ENVIRONMENT.rst +++ b/Help/prop_tgt/XCODE_SCHEME_ENVIRONMENT.rst @@ -8,5 +8,5 @@ If set to a list of environment variables and values of the form ``MYVAR=value`` those environment variables will be added to the scheme. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/prop_tgt/XCODE_SCHEME_EXECUTABLE.rst b/Help/prop_tgt/XCODE_SCHEME_EXECUTABLE.rst index d0427e2..104841b 100644 --- a/Help/prop_tgt/XCODE_SCHEME_EXECUTABLE.rst +++ b/Help/prop_tgt/XCODE_SCHEME_EXECUTABLE.rst @@ -5,5 +5,5 @@ Specify path to executable in the Info section of the generated Xcode scheme. If not set the schema generator will select the current target if it is actually executable. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/prop_tgt/XCODE_SCHEME_GUARD_MALLOC.rst b/Help/prop_tgt/XCODE_SCHEME_GUARD_MALLOC.rst index 64e1990..c4e83da 100644 --- a/Help/prop_tgt/XCODE_SCHEME_GUARD_MALLOC.rst +++ b/Help/prop_tgt/XCODE_SCHEME_GUARD_MALLOC.rst @@ -8,5 +8,5 @@ This property is initialized by the value of the variable :variable:`CMAKE_XCODE_SCHEME_GUARD_MALLOC` if it is set when a target is created. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/prop_tgt/XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst b/Help/prop_tgt/XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst index 99c112f..73992c3 100644 --- a/Help/prop_tgt/XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst +++ b/Help/prop_tgt/XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst @@ -9,5 +9,5 @@ This property is initialized by the value of the variable :variable:`CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP` if it is set when a target is created. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/prop_tgt/XCODE_SCHEME_MALLOC_GUARD_EDGES.rst b/Help/prop_tgt/XCODE_SCHEME_MALLOC_GUARD_EDGES.rst index ef3852a..ca761c0 100644 --- a/Help/prop_tgt/XCODE_SCHEME_MALLOC_GUARD_EDGES.rst +++ b/Help/prop_tgt/XCODE_SCHEME_MALLOC_GUARD_EDGES.rst @@ -8,5 +8,5 @@ This property is initialized by the value of the variable :variable:`CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES` if it is set when a target is created. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/prop_tgt/XCODE_SCHEME_MALLOC_SCRIBBLE.rst b/Help/prop_tgt/XCODE_SCHEME_MALLOC_SCRIBBLE.rst index 75baba2..c5ddb95 100644 --- a/Help/prop_tgt/XCODE_SCHEME_MALLOC_SCRIBBLE.rst +++ b/Help/prop_tgt/XCODE_SCHEME_MALLOC_SCRIBBLE.rst @@ -8,5 +8,5 @@ This property is initialized by the value of the variable :variable:`CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE` if it is set when a target is created. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/prop_tgt/XCODE_SCHEME_MALLOC_STACK.rst b/Help/prop_tgt/XCODE_SCHEME_MALLOC_STACK.rst index 984022c..170f33d 100644 --- a/Help/prop_tgt/XCODE_SCHEME_MALLOC_STACK.rst +++ b/Help/prop_tgt/XCODE_SCHEME_MALLOC_STACK.rst @@ -8,5 +8,5 @@ This property is initialized by the value of the variable :variable:`CMAKE_XCODE_SCHEME_MALLOC_STACK` if it is set when a target is created. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER.rst b/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER.rst index 825ac5b..bb70141 100644 --- a/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER.rst +++ b/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER.rst @@ -8,5 +8,5 @@ This property is initialized by the value of the variable :variable:`CMAKE_XCODE_SCHEME_THREAD_SANITIZER` if it is set when a target is created. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER_STOP.rst b/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER_STOP.rst index 86f894e..5deadb1 100644 --- a/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER_STOP.rst +++ b/Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER_STOP.rst @@ -8,5 +8,5 @@ This property is initialized by the value of the variable :variable:`CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP` if it is set when a target is created. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst b/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst index 829a62e..0cd823d 100644 --- a/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst +++ b/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst @@ -8,5 +8,5 @@ This property is initialized by the value of the variable :variable:`CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER` if it is set when a target is created. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst b/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst index 5e382ca..d1a9bca 100644 --- a/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst +++ b/Help/prop_tgt/XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst @@ -9,5 +9,5 @@ This property is initialized by the value of the variable :variable:`CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP` if it is set when a target is created. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/prop_tgt/XCODE_SCHEME_ZOMBIE_OBJECTS.rst b/Help/prop_tgt/XCODE_SCHEME_ZOMBIE_OBJECTS.rst index 80b954a..6e70e8b 100644 --- a/Help/prop_tgt/XCODE_SCHEME_ZOMBIE_OBJECTS.rst +++ b/Help/prop_tgt/XCODE_SCHEME_ZOMBIE_OBJECTS.rst @@ -8,5 +8,5 @@ This property is initialized by the value of the variable :variable:`CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS` if it is set when a target is created. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/release/dev/xcode-scheme-per-target.rst b/Help/release/dev/xcode-scheme-per-target.rst new file mode 100644 index 0000000..3febe79 --- /dev/null +++ b/Help/release/dev/xcode-scheme-per-target.rst @@ -0,0 +1,6 @@ +xcode-scheme-per-target +----------------------- + +* The :generator:`Xcode` generator now supports per-target schemes. + See the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable and + :prop_tgt:`XCODE_GENERATE_SCHEME` target property. diff --git a/Help/variable/CMAKE_XCODE_GENERATE_SCHEME.rst b/Help/variable/CMAKE_XCODE_GENERATE_SCHEME.rst index 707c6a0..1fb84d7 100644 --- a/Help/variable/CMAKE_XCODE_GENERATE_SCHEME.rst +++ b/Help/variable/CMAKE_XCODE_GENERATE_SCHEME.rst @@ -5,31 +5,6 @@ If enabled, the Xcode generator will generate schema files. These are useful to invoke analyze, archive, build-for-testing and test actions from the command line. -The following target properties overwrite the default of the -corresponding settings on the "Diagnostic" tab for each schema file. -Each of those is initialized by the respective ``CMAKE_`` variable -at target creation time. - -- :prop_tgt:`XCODE_SCHEME_ADDRESS_SANITIZER` -- :prop_tgt:`XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN` -- :prop_tgt:`XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER` -- :prop_tgt:`XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS` -- :prop_tgt:`XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE` -- :prop_tgt:`XCODE_SCHEME_GUARD_MALLOC` -- :prop_tgt:`XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP` -- :prop_tgt:`XCODE_SCHEME_MALLOC_GUARD_EDGES` -- :prop_tgt:`XCODE_SCHEME_MALLOC_SCRIBBLE` -- :prop_tgt:`XCODE_SCHEME_MALLOC_STACK` -- :prop_tgt:`XCODE_SCHEME_THREAD_SANITIZER` -- :prop_tgt:`XCODE_SCHEME_THREAD_SANITIZER_STOP` -- :prop_tgt:`XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER` -- :prop_tgt:`XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP` -- :prop_tgt:`XCODE_SCHEME_ZOMBIE_OBJECTS` - -The following target properties will be applied on the -"Info" and "Arguments" tab: - -- :prop_tgt:`XCODE_SCHEME_ARGUMENTS` -- :prop_tgt:`XCODE_SCHEME_DEBUG_AS_ROOT` -- :prop_tgt:`XCODE_SCHEME_ENVIRONMENT` -- :prop_tgt:`XCODE_SCHEME_EXECUTABLE` +This variable initializes the +:prop_tgt:`XCODE_GENERATE_SCHEME` +target property on all targets. diff --git a/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER.rst b/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER.rst index 37dc0ce..b972ba5 100644 --- a/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER.rst +++ b/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER.rst @@ -8,5 +8,5 @@ This variable initializes the :prop_tgt:`XCODE_SCHEME_ADDRESS_SANITIZER` property on all targets. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst b/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst index 05949c3..59eb32d 100644 --- a/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst +++ b/Help/variable/CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst @@ -8,5 +8,5 @@ This variable initializes the :prop_tgt:`XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN` property on all targets. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/variable/CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst b/Help/variable/CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst index 81f4974..71bcf42 100644 --- a/Help/variable/CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst +++ b/Help/variable/CMAKE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst @@ -8,5 +8,5 @@ This variable initializes the :prop_tgt:`XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER` property on all targets. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst b/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst index 5e133ac..53f55e6 100644 --- a/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst +++ b/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst @@ -8,5 +8,5 @@ This variable initializes the :prop_tgt:`XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS` property on all targets. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst b/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst index 33162d9..784ceb6 100644 --- a/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst +++ b/Help/variable/CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst @@ -8,5 +8,5 @@ This variable initializes the :prop_tgt:`XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE` property on all targets. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/variable/CMAKE_XCODE_SCHEME_GUARD_MALLOC.rst b/Help/variable/CMAKE_XCODE_SCHEME_GUARD_MALLOC.rst index 03d88c2..9350244 100644 --- a/Help/variable/CMAKE_XCODE_SCHEME_GUARD_MALLOC.rst +++ b/Help/variable/CMAKE_XCODE_SCHEME_GUARD_MALLOC.rst @@ -8,5 +8,5 @@ This variable initializes the :prop_tgt:`XCODE_SCHEME_GUARD_MALLOC` property on all targets. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/variable/CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst b/Help/variable/CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst index fd6135f..45a2dad 100644 --- a/Help/variable/CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst +++ b/Help/variable/CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst @@ -9,5 +9,5 @@ This variable initializes the :prop_tgt:`XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP` property on all targets. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES.rst b/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES.rst index 8fedc20..94d1c61 100644 --- a/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES.rst +++ b/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES.rst @@ -8,5 +8,5 @@ This variable initializes the :prop_tgt:`XCODE_SCHEME_MALLOC_GUARD_EDGES` property on all targets. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE.rst b/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE.rst index cddca7c..9bf0eb4 100644 --- a/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE.rst +++ b/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE.rst @@ -8,5 +8,5 @@ This variable initializes the :prop_tgt:`XCODE_SCHEME_MALLOC_SCRIBBLE` property on all targets. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_STACK.rst b/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_STACK.rst index 9c83698..4cc21ee 100644 --- a/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_STACK.rst +++ b/Help/variable/CMAKE_XCODE_SCHEME_MALLOC_STACK.rst @@ -8,5 +8,5 @@ This variable initializes the :prop_tgt:`XCODE_SCHEME_MALLOC_STACK` property on all targets. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER.rst b/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER.rst index c937369..6d1b56e 100644 --- a/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER.rst +++ b/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER.rst @@ -8,5 +8,5 @@ This variable initializes the :prop_tgt:`XCODE_SCHEME_THREAD_SANITIZER` property on all targets. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP.rst b/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP.rst index eed796c..de40478 100644 --- a/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP.rst +++ b/Help/variable/CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP.rst @@ -8,5 +8,5 @@ This variable initializes the :prop_tgt:`XCODE_SCHEME_THREAD_SANITIZER_STOP` property on all targets. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst b/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst index d14ba3f..ec5df66 100644 --- a/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst +++ b/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst @@ -8,5 +8,5 @@ This variable initializes the :prop_tgt:`XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER` property on all targets. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst b/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst index f8df304..dcec9b0 100644 --- a/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst +++ b/Help/variable/CMAKE_XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst @@ -9,5 +9,5 @@ This variable initializes the :prop_tgt:`XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP` property on all targets. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Help/variable/CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS.rst b/Help/variable/CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS.rst index efc331a..82e9d76 100644 --- a/Help/variable/CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS.rst +++ b/Help/variable/CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS.rst @@ -8,5 +8,5 @@ This variable initializes the :prop_tgt:`XCODE_SCHEME_ZOMBIE_OBJECTS` property on all targets. -Please refer to the :variable:`CMAKE_XCODE_GENERATE_SCHEME` variable +Please refer to the :prop_tgt:`XCODE_GENERATE_SCHEME` target property documentation to see all Xcode schema related properties. diff --git a/Source/cmGlobalXCodeGenerator.cxx b/Source/cmGlobalXCodeGenerator.cxx index 4bfa0b1..4025073 100644 --- a/Source/cmGlobalXCodeGenerator.cxx +++ b/Source/cmGlobalXCodeGenerator.cxx @@ -3402,10 +3402,8 @@ void cmGlobalXCodeGenerator::OutputXCodeProject( } this->WriteXCodePBXProj(fout, root, generators); - if (this->IsGeneratingScheme(root)) { - this->OutputXCodeSharedSchemes(xcodeDir); - } - this->OutputXCodeWorkspaceSettings(xcodeDir, root); + bool hasGeneratedSchemes = this->OutputXCodeSharedSchemes(xcodeDir, root); + this->OutputXCodeWorkspaceSettings(xcodeDir, hasGeneratedSchemes); this->ClearXCodeObjects(); @@ -3415,17 +3413,8 @@ void cmGlobalXCodeGenerator::OutputXCodeProject( root->GetBinaryDirectory()); } -bool cmGlobalXCodeGenerator::IsGeneratingScheme(cmLocalGenerator* root) const -{ - // Since the lowest available Xcode version for testing was 6.4, - // I'm setting this as a limit then - return this->XcodeVersion >= 64 && - (root->GetMakefile()->GetCMakeInstance()->GetIsInTryCompile() || - root->GetMakefile()->IsOn("CMAKE_XCODE_GENERATE_SCHEME")); -} - -void cmGlobalXCodeGenerator::OutputXCodeSharedSchemes( - const std::string& xcProjDir) +bool cmGlobalXCodeGenerator::OutputXCodeSharedSchemes( + const std::string& xcProjDir, cmLocalGenerator* root) { // collect all tests for the targets std::map<std::string, cmXCodeScheme::TestObjects> testables; @@ -3449,21 +3438,33 @@ void cmGlobalXCodeGenerator::OutputXCodeSharedSchemes( } // generate scheme - for (auto obj : this->XCodeObjects) { - if (obj->GetType() == cmXCodeObject::OBJECT && - (obj->GetIsA() == cmXCodeObject::PBXNativeTarget || - obj->GetIsA() == cmXCodeObject::PBXAggregateTarget)) { - const std::string& targetName = obj->GetTarget()->GetName(); - cmXCodeScheme schm(obj, testables[targetName], - this->CurrentConfigurationTypes, this->XcodeVersion); - schm.WriteXCodeSharedScheme(xcProjDir, - this->RelativeToSource(xcProjDir)); + bool ret = false; + + // Since the lowest available Xcode version for testing was 6.4, + // I'm setting this as a limit then + if (this->XcodeVersion >= 64) { + for (auto obj : this->XCodeObjects) { + if (obj->GetType() == cmXCodeObject::OBJECT && + (obj->GetIsA() == cmXCodeObject::PBXNativeTarget || + obj->GetIsA() == cmXCodeObject::PBXAggregateTarget) && + (root->GetMakefile()->GetCMakeInstance()->GetIsInTryCompile() || + obj->GetTarget()->GetPropertyAsBool("XCODE_GENERATE_SCHEME"))) { + const std::string& targetName = obj->GetTarget()->GetName(); + cmXCodeScheme schm(obj, testables[targetName], + this->CurrentConfigurationTypes, + this->XcodeVersion); + schm.WriteXCodeSharedScheme(xcProjDir, + this->RelativeToSource(xcProjDir)); + ret = true; + } } } + + return ret; } void cmGlobalXCodeGenerator::OutputXCodeWorkspaceSettings( - const std::string& xcProjDir, cmLocalGenerator* root) + const std::string& xcProjDir, bool hasGeneratedSchemes) { std::string xcodeSharedDataDir = xcProjDir; xcodeSharedDataDir += "/project.xcworkspace/xcshareddata"; @@ -3489,7 +3490,7 @@ void cmGlobalXCodeGenerator::OutputXCodeWorkspaceSettings( xout.Element("key", "BuildSystemType"); xout.Element("string", "Original"); } - if (this->IsGeneratingScheme(root)) { + if (hasGeneratedSchemes) { xout.Element("key", "IDEWorkspaceSharedSettings_AutocreateContextsIfNeeded"); xout.Element("false"); diff --git a/Source/cmGlobalXCodeGenerator.h b/Source/cmGlobalXCodeGenerator.h index b80a9ad..8daa95b 100644 --- a/Source/cmGlobalXCodeGenerator.h +++ b/Source/cmGlobalXCodeGenerator.h @@ -186,11 +186,12 @@ private: std::vector<cmLocalGenerator*>& generators); void OutputXCodeProject(cmLocalGenerator* root, std::vector<cmLocalGenerator*>& generators); - bool IsGeneratingScheme(cmLocalGenerator* root) const; // Write shared scheme files for all the native targets - void OutputXCodeSharedSchemes(const std::string& xcProjDir); + // return true if any were written + bool OutputXCodeSharedSchemes(const std::string& xcProjDir, + cmLocalGenerator* root); void OutputXCodeWorkspaceSettings(const std::string& xcProjDir, - cmLocalGenerator* root); + bool hasGeneratedSchemes); void WriteXCodePBXProj(std::ostream& fout, cmLocalGenerator* root, std::vector<cmLocalGenerator*>& generators); cmXCodeObject* CreateXCodeFileReferenceFromPath(const std::string& fullpath, diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 46f930a..c0b9ba1 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -283,6 +283,7 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type, this->SetPropertyDefault("FOLDER", nullptr); #ifdef __APPLE__ if (this->GetGlobalGenerator()->IsXcode()) { + this->SetPropertyDefault("XCODE_GENERATE_SCHEME", nullptr); this->SetPropertyDefault("XCODE_SCHEME_ADDRESS_SANITIZER", nullptr); this->SetPropertyDefault( "XCODE_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN", nullptr); diff --git a/Tests/RunCMake/XcodeProject/XcodeSchemaProperty-check.cmake b/Tests/RunCMake/XcodeProject/XcodeSchemaProperty-check.cmake index f675d81..88077b3 100644 --- a/Tests/RunCMake/XcodeProject/XcodeSchemaProperty-check.cmake +++ b/Tests/RunCMake/XcodeProject/XcodeSchemaProperty-check.cmake @@ -7,6 +7,13 @@ function(check_property property matcher) endif() endfunction() +function(expect_no_schema target) + set(schema "${RunCMake_TEST_BINARY_DIR}/XcodeSchemaProperty.xcodeproj/xcshareddata/xcschemes/${target}.xcscheme") + if(EXISTS ${schema}) + message(SEND_ERROR "Found unexpected schema ${schema}") + endif() +endfunction() + check_property("ADDRESS_SANITIZER" "enableAddressSanitizer") check_property("ADDRESS_SANITIZER_USE_AFTER_RETURN" "enableASanStackUseAfterReturn") check_property("THREAD_SANITIZER" "enableThreadSanitizer") @@ -31,3 +38,5 @@ check_property("ENVIRONMENT" [=[key="FOO"]=]) check_property("ENVIRONMENT" [=[value="foo"]=]) check_property("ENVIRONMENT" [=[key="BAR"]=]) check_property("ENVIRONMENT" [=[value="bar"]=]) + +expect_no_schema("NoSchema") diff --git a/Tests/RunCMake/XcodeProject/XcodeSchemaProperty.cmake b/Tests/RunCMake/XcodeProject/XcodeSchemaProperty.cmake index 2b72a64..73ef5ca 100644 --- a/Tests/RunCMake/XcodeProject/XcodeSchemaProperty.cmake +++ b/Tests/RunCMake/XcodeProject/XcodeSchemaProperty.cmake @@ -35,3 +35,6 @@ endfunction() create_scheme_for_property(EXECUTABLE myExecutable) create_scheme_for_property(ARGUMENTS "--foo;--bar=baz") create_scheme_for_property(ENVIRONMENT "FOO=foo;BAR=bar") + +add_executable(NoSchema main.cpp) +set_target_properties(NoSchema PROPERTIES XCODE_GENERATE_SCHEME OFF) https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=d79fa9dd55daa24e90c8609fb9d1759f13e2f2e5 commit d79fa9dd55daa24e90c8609fb9d1759f13e2f2e5 Merge: 775c8b2 868dc1a Author: Brad King <brad.k...@kitware.com> AuthorDate: Thu Mar 21 12:38:42 2019 -0400 Commit: Brad King <brad.k...@kitware.com> CommitDate: Thu Mar 21 12:38:42 2019 -0400 Merge branch 'upstream-KWSys' into update-kwsys * upstream-KWSys: KWSys 2019-03-21 (fd41ac36) https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=868dc1a121f9876a19852e0c6467483ad0d67951 commit 868dc1a121f9876a19852e0c6467483ad0d67951 Author: KWSys Upstream <kwro...@kitware.com> AuthorDate: Thu Mar 21 12:35:09 2019 -0400 Commit: Brad King <brad.k...@kitware.com> CommitDate: Thu Mar 21 12:38:41 2019 -0400 KWSys 2019-03-21 (fd41ac36) Code extracted from: https://gitlab.kitware.com/utils/kwsys.git at commit fd41ac36adc088e1b175185ef8a8347df569a836 (master). Upstream Shortlog ----------------- Brad King (1): db462838 SystemTools: Revert "Use copyfile(3) to clone files on macOS" Gregor Jasny (1): 7c71e879 SystemTools: Use copyfile(3) to clone files on macOS Sebastian Holtermann (10): 6fed6364 SystemTools: Add SystemToolsStatic class skeleton a8195f76 SystemTools: Move SystemTools::Cyg2Win32Map to SystemToolsStatic 7c273c83 SystemTools: Move SystemTools::EnvMap to SystemToolsStatic 706919be SystemTools: Move SystemTools::PathCaseMap to SystemToolsStatic 67eb2674 SystemTools: Move SystemTools::TranslationMap to SystemToolsStatic 9e32eecd SystemTools: Move private type definitions to SystemToolsStatic d9db985f SystemTools: Move private GetEnvImpl method to SystemToolsStatic a1271fea SystemTools: Move private FindName method to SystemToolsStatic 7512ab8c SystemTools: Move private FindIsFullPath method to SystemToolsStatic class 8b58389c SystemTools: Move private ReplaceString method to SystemToolsStatic class diff --git a/SystemTools.cxx b/SystemTools.cxx index 33a92e4..b736ed4 100644 --- a/SystemTools.cxx +++ b/SystemTools.cxx @@ -28,6 +28,7 @@ #include <iostream> #include <set> #include <sstream> +#include <utility> #include <vector> // Work-around CMake dependency scanning limitation. This must @@ -363,10 +364,6 @@ double SystemTools::GetTime(void) #endif } -class SystemToolsTranslationMap : public std::map<std::string, std::string> -{ -}; - /* Type of character storing the environment. */ #if defined(_WIN32) typedef wchar_t envchar; @@ -447,15 +444,139 @@ struct SystemToolsPathCaseCmp # endif } }; +#endif -class SystemToolsPathCaseMap - : public std::map<std::string, std::string, SystemToolsPathCaseCmp> +/** + * SystemTools static variables singleton class. + */ +class SystemToolsStatic { +public: + typedef std::map<std::string, std::string> StringMap; + /** + * Path translation table from dir to refdir + * Each time 'dir' will be found it will be replace by 'refdir' + */ + StringMap TranslationMap; +#ifdef _WIN32 + static std::string GetCasePathName(std::string const& pathIn); + static std::string GetActualCaseForPathCached(std::string const& path); + static const char* GetEnvBuffered(const char* key); + std::map<std::string, std::string, SystemToolsPathCaseCmp> PathCaseMap; + std::map<std::string, std::string> EnvMap; +#endif +#ifdef __CYGWIN__ + StringMap Cyg2Win32Map; +#endif + + /** + * Actual implementation of ReplaceString. + */ + static void ReplaceString(std::string& source, const char* replace, + size_t replaceSize, const std::string& with); + + /** + * Actual implementation of FileIsFullPath. + */ + static bool FileIsFullPath(const char*, size_t); + + /** + * Find a filename (file or directory) in the system PATH, with + * optional extra paths. + */ + static std::string FindName( + const std::string& name, + const std::vector<std::string>& path = std::vector<std::string>(), + bool no_system_path = false); }; -class SystemToolsEnvMap : public std::map<std::string, std::string> +#ifdef _WIN32 +std::string SystemToolsStatic::GetCasePathName(std::string const& pathIn) { -}; + std::string casePath; + + // First check if the file is relative. We don't fix relative paths since the + // real case depends on the root directory and the given path fragment may + // have meaning elsewhere in the project. + if (!SystemTools::FileIsFullPath(pathIn)) { + // This looks unnecessary, but it allows for the return value optimization + // since all return paths return the same local variable. + casePath = pathIn; + return casePath; + } + + std::vector<std::string> path_components; + SystemTools::SplitPath(pathIn, path_components); + + // Start with root component. + std::vector<std::string>::size_type idx = 0; + casePath = path_components[idx++]; + // make sure drive letter is always upper case + if (casePath.size() > 1 && casePath[1] == ':') { + casePath[0] = toupper(casePath[0]); + } + const char* sep = ""; + + // If network path, fill casePath with server/share so FindFirstFile + // will work after that. Maybe someday call other APIs to get + // actual case of servers and shares. + if (path_components.size() > 2 && path_components[0] == "//") { + casePath += path_components[idx++]; + casePath += "/"; + casePath += path_components[idx++]; + sep = "/"; + } + + // Convert case of all components that exist. + bool converting = true; + for (; idx < path_components.size(); idx++) { + casePath += sep; + sep = "/"; + + if (converting) { + // If path component contains wildcards, we skip matching + // because these filenames are not allowed on windows, + // and we do not want to match a different file. + if (path_components[idx].find('*') != std::string::npos || + path_components[idx].find('?') != std::string::npos) { + converting = false; + } else { + std::string test_str = casePath; + test_str += path_components[idx]; + WIN32_FIND_DATAW findData; + HANDLE hFind = + ::FindFirstFileW(Encoding::ToWide(test_str).c_str(), &findData); + if (INVALID_HANDLE_VALUE != hFind) { + path_components[idx] = Encoding::ToNarrow(findData.cFileName); + ::FindClose(hFind); + } else { + converting = false; + } + } + } + + casePath += path_components[idx]; + } + return casePath; +} + +std::string SystemToolsStatic::GetActualCaseForPathCached(std::string const& p) +{ + // Check to see if actual case has already been called + // for this path, and the result is stored in the PathCaseMap + auto& pcm = SystemTools::Statics->PathCaseMap; + { + auto itr = pcm.find(p); + if (itr != pcm.end()) { + return itr->second; + } + } + std::string casePath = SystemToolsStatic::GetCasePathName(p); + if (casePath.size() <= MAX_PATH) { + pcm[p] = casePath; + } + return casePath; +} #endif // adds the elements of the env variable path to the arg passed in @@ -496,30 +617,35 @@ void SystemTools::GetPath(std::vector<std::string>& path, const char* env) } } -const char* SystemTools::GetEnvImpl(const char* key) -{ - const char* v = KWSYS_NULLPTR; #if defined(_WIN32) +const char* SystemToolsStatic::GetEnvBuffered(const char* key) +{ std::string env; if (SystemTools::GetEnv(key, env)) { - std::string& menv = (*SystemTools::EnvMap)[key]; - menv = env; - v = menv.c_str(); + std::string& menv = SystemTools::Statics->EnvMap[key]; + menv = std::move(env); + return menv.c_str(); } -#else - v = getenv(key); -#endif - return v; + return KWSYS_NULLPTR; } +#endif const char* SystemTools::GetEnv(const char* key) { - return SystemTools::GetEnvImpl(key); +#if defined(_WIN32) + return SystemToolsStatic::GetEnvBuffered(key); +#else + return getenv(key); +#endif } const char* SystemTools::GetEnv(const std::string& key) { - return SystemTools::GetEnvImpl(key.c_str()); +#if defined(_WIN32) + return SystemToolsStatic::GetEnvBuffered(key.c_str()); +#else + return getenv(key.c_str()); +#endif } bool SystemTools::GetEnv(const char* key, std::string& result) @@ -822,7 +948,8 @@ void SystemTools::ReplaceString(std::string& source, return; } - SystemTools::ReplaceString(source, replace.c_str(), replace.size(), with); + SystemToolsStatic::ReplaceString(source, replace.c_str(), replace.size(), + with); } void SystemTools::ReplaceString(std::string& source, const char* replace, @@ -833,12 +960,13 @@ void SystemTools::ReplaceString(std::string& source, const char* replace, return; } - SystemTools::ReplaceString(source, replace, strlen(replace), - with ? with : ""); + SystemToolsStatic::ReplaceString(source, replace, strlen(replace), + with ? with : ""); } -void SystemTools::ReplaceString(std::string& source, const char* replace, - size_t replaceSize, const std::string& with) +void SystemToolsStatic::ReplaceString(std::string& source, const char* replace, + size_t replaceSize, + const std::string& with) { const char* src = source.c_str(); char* searchPos = const_cast<char*>(strstr(src, replace)); @@ -1316,18 +1444,16 @@ int SystemTools::Stat(const std::string& path, SystemTools::Stat_t* buf) #ifdef __CYGWIN__ bool SystemTools::PathCygwinToWin32(const char* path, char* win32_path) { - SystemToolsTranslationMap::iterator i = - SystemTools::Cyg2Win32Map->find(path); - - if (i != SystemTools::Cyg2Win32Map->end()) { - strncpy(win32_path, i->second.c_str(), MAX_PATH); + auto itr = SystemTools::Statics->Cyg2Win32Map.find(path); + if (itr != SystemTools::Statics->Cyg2Win32Map.end()) { + strncpy(win32_path, itr->second.c_str(), MAX_PATH); } else { if (cygwin_conv_path(CCP_POSIX_TO_WIN_A, path, win32_path, MAX_PATH) != 0) { win32_path[0] = 0; } - SystemToolsTranslationMap::value_type entry(path, win32_path); - SystemTools::Cyg2Win32Map->insert(entry); + SystemTools::Statics->Cyg2Win32Map.insert( + SystemToolsStatic::StringMap::value_type(path, win32_path)); } return win32_path[0] != 0; } @@ -2673,9 +2799,9 @@ size_t SystemTools::GetMaximumFilePathLength() * the system search path. Returns the full path to the file if it is * found. Otherwise, the empty string is returned. */ -std::string SystemTools::FindName(const std::string& name, - const std::vector<std::string>& userPaths, - bool no_system_path) +std::string SystemToolsStatic::FindName( + const std::string& name, const std::vector<std::string>& userPaths, + bool no_system_path) { // Add the system search path to our path first std::vector<std::string> path; @@ -2723,7 +2849,8 @@ std::string SystemTools::FindFile(const std::string& name, const std::vector<std::string>& userPaths, bool no_system_path) { - std::string tryPath = SystemTools::FindName(name, userPaths, no_system_path); + std::string tryPath = + SystemToolsStatic::FindName(name, userPaths, no_system_path); if (!tryPath.empty() && !SystemTools::FileIsDirectory(tryPath)) { return SystemTools::CollapseFullPath(tryPath); } @@ -2740,7 +2867,8 @@ std::string SystemTools::FindDirectory( const std::string& name, const std::vector<std::string>& userPaths, bool no_system_path) { - std::string tryPath = SystemTools::FindName(name, userPaths, no_system_path); + std::string tryPath = + SystemToolsStatic::FindName(name, userPaths, no_system_path); if (!tryPath.empty() && SystemTools::FileIsDirectory(tryPath)) { return SystemTools::CollapseFullPath(tryPath); } @@ -3244,8 +3372,9 @@ void SystemTools::AddTranslationPath(const std::string& a, path_b += '/'; } if (!(path_a == path_b)) { - SystemTools::TranslationMap->insert( - SystemToolsTranslationMap::value_type(path_a, path_b)); + SystemTools::Statics->TranslationMap.insert( + SystemToolsStatic::StringMap::value_type(std::move(path_a), + std::move(path_b))); } } } @@ -3269,21 +3398,19 @@ void SystemTools::CheckTranslationPath(std::string& path) // Always add a trailing slash before translation. It does not // matter if this adds an extra slash, but we do not want to // translate part of a directory (like the foo part of foo-dir). - path += "/"; + path += '/'; // In case a file was specified we still have to go through this: // Now convert any path found in the table back to the one desired: - std::map<std::string, std::string>::const_iterator it; - for (it = SystemTools::TranslationMap->begin(); - it != SystemTools::TranslationMap->end(); ++it) { + for (auto const& pair : SystemTools::Statics->TranslationMap) { // We need to check of the path is a substring of the other path - if (path.find(it->first) == 0) { - path = path.replace(0, it->first.size(), it->second); + if (path.find(pair.first) == 0) { + path = path.replace(0, pair.first.size(), pair.second); } } // Remove the trailing slash we added before. - path.erase(path.end() - 1, path.end()); + path.pop_back(); } static void SystemToolsAppendComponents( @@ -3371,7 +3498,7 @@ std::string SystemTools::CollapseFullPath(const std::string& in_path, SystemTools::CheckTranslationPath(newPath); #ifdef _WIN32 - newPath = SystemTools::GetActualCaseForPathCached(newPath); + newPath = SystemTools::Statics->GetActualCaseForPathCached(newPath); SystemTools::ConvertToUnixSlashes(newPath); #endif // Return the reconstructed path. @@ -3457,104 +3584,15 @@ std::string SystemTools::RelativePath(const std::string& local, return relativePath; } -#ifdef _WIN32 -static std::string GetCasePathName(std::string const& pathIn) -{ - std::string casePath; - - // First check if the file is relative. We don't fix relative paths since the - // real case depends on the root directory and the given path fragment may - // have meaning elsewhere in the project. - if (!SystemTools::FileIsFullPath(pathIn)) { - // This looks unnecessary, but it allows for the return value optimization - // since all return paths return the same local variable. - casePath = pathIn; - return casePath; - } - - std::vector<std::string> path_components; - SystemTools::SplitPath(pathIn, path_components); - - // Start with root component. - std::vector<std::string>::size_type idx = 0; - casePath = path_components[idx++]; - // make sure drive letter is always upper case - if (casePath.size() > 1 && casePath[1] == ':') { - casePath[0] = toupper(casePath[0]); - } - const char* sep = ""; - - // If network path, fill casePath with server/share so FindFirstFile - // will work after that. Maybe someday call other APIs to get - // actual case of servers and shares. - if (path_components.size() > 2 && path_components[0] == "//") { - casePath += path_components[idx++]; - casePath += "/"; - casePath += path_components[idx++]; - sep = "/"; - } - - // Convert case of all components that exist. - bool converting = true; - for (; idx < path_components.size(); idx++) { - casePath += sep; - sep = "/"; - - if (converting) { - // If path component contains wildcards, we skip matching - // because these filenames are not allowed on windows, - // and we do not want to match a different file. - if (path_components[idx].find('*') != std::string::npos || - path_components[idx].find('?') != std::string::npos) { - converting = false; - } else { - std::string test_str = casePath; - test_str += path_components[idx]; - WIN32_FIND_DATAW findData; - HANDLE hFind = - ::FindFirstFileW(Encoding::ToWide(test_str).c_str(), &findData); - if (INVALID_HANDLE_VALUE != hFind) { - path_components[idx] = Encoding::ToNarrow(findData.cFileName); - ::FindClose(hFind); - } else { - converting = false; - } - } - } - - casePath += path_components[idx]; - } - return casePath; -} -#endif - std::string SystemTools::GetActualCaseForPath(const std::string& p) { -#ifndef _WIN32 - return p; +#ifdef _WIN32 + return SystemToolsStatic::GetCasePathName(p); #else - return GetCasePathName(p); + return p; #endif } -#ifdef _WIN32 -std::string SystemTools::GetActualCaseForPathCached(std::string const& p) -{ - // Check to see if actual case has already been called - // for this path, and the result is stored in the PathCaseMap - SystemToolsPathCaseMap::iterator i = SystemTools::PathCaseMap->find(p); - if (i != SystemTools::PathCaseMap->end()) { - return i->second; - } - std::string casePath = GetCasePathName(p); - if (casePath.size() > MAX_PATH) { - return casePath; - } - (*SystemTools::PathCaseMap)[p] = casePath; - return casePath; -} -#endif - const char* SystemTools::SplitPathRootComponent(const std::string& p, std::string* root) { @@ -4047,16 +4085,16 @@ bool SystemTools::LocateFileInDir(const char* filename, const char* dir, bool SystemTools::FileIsFullPath(const std::string& in_name) { - return SystemTools::FileIsFullPath(in_name.c_str(), in_name.size()); + return SystemToolsStatic::FileIsFullPath(in_name.c_str(), in_name.size()); } bool SystemTools::FileIsFullPath(const char* in_name) { - return SystemTools::FileIsFullPath(in_name, - in_name[0] ? (in_name[1] ? 2 : 1) : 0); + return SystemToolsStatic::FileIsFullPath( + in_name, in_name[0] ? (in_name[1] ? 2 : 1) : 0); } -bool SystemTools::FileIsFullPath(const char* in_name, size_t len) +bool SystemToolsStatic::FileIsFullPath(const char* in_name, size_t len) { #if defined(_WIN32) || defined(__CYGWIN__) // On Windows, the name must be at least two characters long. @@ -4654,14 +4692,7 @@ bool SystemTools::ParseURL(const std::string& URL, std::string& protocol, // These must NOT be initialized. Default initialization to zero is // necessary. static unsigned int SystemToolsManagerCount; -SystemToolsTranslationMap* SystemTools::TranslationMap; -#ifdef _WIN32 -SystemToolsPathCaseMap* SystemTools::PathCaseMap; -SystemToolsEnvMap* SystemTools::EnvMap; -#endif -#ifdef __CYGWIN__ -SystemToolsTranslationMap* SystemTools::Cyg2Win32Map; -#endif +SystemToolsStatic* SystemTools::Statics; // SystemToolsManager manages the SystemTools singleton. // SystemToolsManager should be included in any translation unit @@ -4702,15 +4733,9 @@ void SystemTools::ClassInitialize() #ifdef __VMS SetVMSFeature("DECC$FILENAME_UNIX_ONLY", 1); #endif - // Allocate the translation map first. - SystemTools::TranslationMap = new SystemToolsTranslationMap; -#ifdef _WIN32 - SystemTools::PathCaseMap = new SystemToolsPathCaseMap; - SystemTools::EnvMap = new SystemToolsEnvMap; -#endif -#ifdef __CYGWIN__ - SystemTools::Cyg2Win32Map = new SystemToolsTranslationMap; -#endif + + // Create statics singleton instance + SystemTools::Statics = new SystemToolsStatic; // Add some special translation paths for unix. These are not added // for windows because drive letters need to be maintained. Also, @@ -4758,14 +4783,7 @@ void SystemTools::ClassInitialize() void SystemTools::ClassFinalize() { - delete SystemTools::TranslationMap; -#ifdef _WIN32 - delete SystemTools::PathCaseMap; - delete SystemTools::EnvMap; -#endif -#ifdef __CYGWIN__ - delete SystemTools::Cyg2Win32Map; -#endif + delete SystemTools::Statics; } } // namespace KWSYS_NAMESPACE diff --git a/SystemTools.hxx.in b/SystemTools.hxx.in index 33b579f..cdc9483 100644 --- a/SystemTools.hxx.in +++ b/SystemTools.hxx.in @@ -41,9 +41,7 @@ typedef @KWSYS_NAMESPACE@_VA_LIST::hack_va_list va_list; namespace @KWSYS_NAMESPACE@ { -class SystemToolsTranslationMap; -class SystemToolsPathCaseMap; -class SystemToolsEnvMap; +class SystemToolsStatic; /** \class SystemToolsManager * \brief Use to make sure SystemTools is initialized before it is used @@ -967,41 +965,8 @@ private: return &SystemToolsManagerInstance; } - /** - * Actual implementation of ReplaceString. - */ - static void ReplaceString(std::string& source, const char* replace, - size_t replaceSize, const std::string& with); - - /** - * Actual implementation of FileIsFullPath. - */ - static bool FileIsFullPath(const char*, size_t); - - /** - * Find a filename (file or directory) in the system PATH, with - * optional extra paths. - */ - static std::string FindName( - const std::string& name, - const std::vector<std::string>& path = std::vector<std::string>(), - bool no_system_path = false); - - static const char* GetEnvImpl(const char* key); - - /** - * Path translation table from dir to refdir - * Each time 'dir' will be found it will be replace by 'refdir' - */ - static SystemToolsTranslationMap* TranslationMap; -#ifdef _WIN32 - static std::string GetActualCaseForPathCached(std::string const& path); - static SystemToolsPathCaseMap* PathCaseMap; - static SystemToolsEnvMap* EnvMap; -#endif -#ifdef __CYGWIN__ - static SystemToolsTranslationMap* Cyg2Win32Map; -#endif + static SystemToolsStatic* Statics; + friend class SystemToolsStatic; friend class SystemToolsManager; }; https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=775c8b21dac805da914557f85c2bb1408530c5fe commit 775c8b21dac805da914557f85c2bb1408530c5fe Author: Brad King <brad.k...@kitware.com> AuthorDate: Thu Mar 21 12:37:09 2019 -0400 Commit: Brad King <brad.k...@kitware.com> CommitDate: Thu Mar 21 12:37:25 2019 -0400 update-third-party: update from upstream Update to `update-common.sh` from commit 958a2cd1b9 in https://gitlab.kitware.com/utils/git-import-third-party diff --git a/Utilities/Scripts/update-third-party.bash b/Utilities/Scripts/update-third-party.bash index 670946e..fcab871 100644 --- a/Utilities/Scripts/update-third-party.bash +++ b/Utilities/Scripts/update-third-party.bash @@ -71,8 +71,6 @@ warn () { readonly regex_date='20[0-9][0-9]-[0-9][0-9]-[0-9][0-9]' readonly basehash_regex="$name $regex_date ([0-9a-f]*)" -readonly basehash="$( git rev-list --author="$ownership" --grep="$basehash_regex" -n 1 HEAD )" -readonly upstream_old_short="$( git cat-file commit "$basehash" | sed -n '/'"$basehash_regex"'/ {s/.*(//;s/)//;p}' | egrep '^[0-9a-f]+$' )" ######################################################################## # Sanity checking @@ -87,6 +85,18 @@ readonly upstream_old_short="$( git cat-file commit "$basehash" | sed -n '/'"$ba die "'repo' is empty" [ -n "$tag" ] || \ die "'tag' is empty" + +# Check for an empty destination directory on disk. By checking on disk and +# not in the repo it allows a library to be freshly re-inialized in a single +# commit rather than first deleting the old copy in one commit and adding the +# new copy in a seperate commit. +if [ ! -d "$(git rev-parse --show-toplevel)/$subtree" ]; then + readonly basehash="" +else + readonly basehash="$( git rev-list --author="$ownership" --grep="$basehash_regex" -n 1 HEAD )" +fi +readonly upstream_old_short="$( git cat-file commit "$basehash" | sed -n '/'"$basehash_regex"'/ {s/.*(//;s/)//;p}' | egrep '^[0-9a-f]+$' )" + [ -n "$basehash" ] || \ warn "'basehash' is empty; performing initial import" readonly do_shortlog="${shortlog-false}" @@ -104,6 +114,8 @@ trap "rm -rf '$workdir'" EXIT git clone "$repo" "$upstreamdir" if [ -n "$basehash" ]; then + # Remove old worktrees + git worktree prune # Use the existing package's history git worktree add "$extractdir" "$basehash" # Clear out the working tree @@ -163,13 +175,17 @@ popd if [ -n "$basehash" ]; then git merge --log -s recursive "-Xsubtree=$subtree/" --no-commit "upstream-$name" else + # Note: on Windows 'git merge --help' will open a browser, and the check + # will fail, so use the flag by default. unrelated_histories_flag="" - if git merge --help | grep -q -e allow-unrelated-histories; then + if git --version | grep -q windows; then + unrelated_histories_flag="--allow-unrelated-histories " + elif git merge --help | grep -q -e allow-unrelated-histories; then unrelated_histories_flag="--allow-unrelated-histories " fi readonly unrelated_histories_flag - git fetch "$extractdir" "upstream-$name:upstream-$name" + git fetch "$extractdir" "+upstream-$name:upstream-$name" git merge --log -s ours --no-commit $unrelated_histories_flag "upstream-$name" git read-tree -u --prefix="$subtree/" "upstream-$name" fi https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=965da8d787ad0ca9b78f98cd276211e997016d07 commit 965da8d787ad0ca9b78f98cd276211e997016d07 Author: Sebastian Holtermann <sebh...@xwmw.org> AuthorDate: Thu Mar 21 16:58:29 2019 +0100 Commit: Sebastian Holtermann <sebh...@xwmw.org> CommitDate: Thu Mar 21 16:58:29 2019 +0100 cmTarget: Acquire data only when needed diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 0b83b6b..d3f7a45 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -315,10 +315,6 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type, #endif } - // Collect the set of configuration types. - std::vector<std::string> configNames; - mf->GetConfigurations(configNames); - // Setup per-configuration property default values. if (this->GetType() != cmStateEnums::UTILITY) { static const auto configProps = { @@ -328,6 +324,9 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type, "COMPILE_PDB_OUTPUT_DIRECTORY_", "MAP_IMPORTED_CONFIG_", "INTERPROCEDURAL_OPTIMIZATION_" }; + // Collect the set of configuration types. + std::vector<std::string> configNames; + mf->GetConfigurations(configNames); for (std::string const& configName : configNames) { std::string configUpper = cmSystemTools::UpperCase(configName); for (auto const& prop : configProps) { https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=03d17a35b50e409d466b3042ad5e79010e746f35 commit 03d17a35b50e409d466b3042ad5e79010e746f35 Author: Sebastian Holtermann <sebh...@xwmw.org> AuthorDate: Thu Mar 21 16:57:27 2019 +0100 Commit: Sebastian Holtermann <sebh...@xwmw.org> CommitDate: Thu Mar 21 16:57:27 2019 +0100 cmTarget: Use helper function to append to lists diff --git a/Source/cmTarget.cxx b/Source/cmTarget.cxx index 46f930a..0b83b6b 100644 --- a/Source/cmTarget.cxx +++ b/Source/cmTarget.cxx @@ -32,6 +32,13 @@ #include "cmTargetPropertyComputer.h" #include "cmake.h" +///! Append all elements from the second container to the first container +template <class C, class R> +static inline void CApp(C& container, R const& range) +{ + container.insert(container.end(), range.begin(), range.end()); +} + template <> const char* cmTargetPropertyComputer::ComputeLocationForBuild<cmTarget>( cmTarget const* tgt) @@ -355,59 +362,30 @@ cmTarget::cmTarget(std::string const& name, cmStateEnums::TargetType type, if (!this->IsImported()) { // Initialize the INCLUDE_DIRECTORIES property based on the current value // of the same directory property: - const cmStringRange parentIncludes = - this->Makefile->GetIncludeDirectoriesEntries(); - const cmBacktraceRange parentIncludesBts = - this->Makefile->GetIncludeDirectoriesBacktraces(); - - this->Internal->IncludeDirectoriesEntries.insert( - this->Internal->IncludeDirectoriesEntries.end(), parentIncludes.begin(), - parentIncludes.end()); - this->Internal->IncludeDirectoriesBacktraces.insert( - this->Internal->IncludeDirectoriesBacktraces.end(), - parentIncludesBts.begin(), parentIncludesBts.end()); - - const std::set<std::string> parentSystemIncludes = - this->Makefile->GetSystemIncludeDirectories(); - - this->SystemIncludeDirectories.insert(parentSystemIncludes.begin(), - parentSystemIncludes.end()); - - const cmStringRange parentCompileOptions = - this->Makefile->GetCompileOptionsEntries(); - const cmBacktraceRange parentCompileOptionsBts = - this->Makefile->GetCompileOptionsBacktraces(); - - this->Internal->CompileOptionsEntries.insert( - this->Internal->CompileOptionsEntries.end(), - parentCompileOptions.begin(), parentCompileOptions.end()); - this->Internal->CompileOptionsBacktraces.insert( - this->Internal->CompileOptionsBacktraces.end(), - parentCompileOptionsBts.begin(), parentCompileOptionsBts.end()); - - const cmStringRange parentLinkOptions = - this->Makefile->GetLinkOptionsEntries(); - const cmBacktraceRange parentLinkOptionsBts = - this->Makefile->GetLinkOptionsBacktraces(); - - this->Internal->LinkOptionsEntries.insert( - this->Internal->LinkOptionsEntries.end(), parentLinkOptions.begin(), - parentLinkOptions.end()); - this->Internal->LinkOptionsBacktraces.insert( - this->Internal->LinkOptionsBacktraces.end(), - parentLinkOptionsBts.begin(), parentLinkOptionsBts.end()); - - const cmStringRange parentLinkDirectories = - this->Makefile->GetLinkDirectoriesEntries(); - const cmBacktraceRange parentLinkDirectoriesBts = - this->Makefile->GetLinkDirectoriesBacktraces(); - - this->Internal->LinkDirectoriesEntries.insert( - this->Internal->LinkDirectoriesEntries.end(), - parentLinkDirectories.begin(), parentLinkDirectories.end()); - this->Internal->LinkDirectoriesBacktraces.insert( - this->Internal->LinkDirectoriesBacktraces.end(), - parentLinkDirectoriesBts.begin(), parentLinkDirectoriesBts.end()); + CApp(this->Internal->IncludeDirectoriesEntries, + this->Makefile->GetIncludeDirectoriesEntries()); + CApp(this->Internal->IncludeDirectoriesBacktraces, + this->Makefile->GetIncludeDirectoriesBacktraces()); + + { + auto const& sysInc = this->Makefile->GetSystemIncludeDirectories(); + this->SystemIncludeDirectories.insert(sysInc.begin(), sysInc.end()); + } + + CApp(this->Internal->CompileOptionsEntries, + this->Makefile->GetCompileOptionsEntries()); + CApp(this->Internal->CompileOptionsBacktraces, + this->Makefile->GetCompileOptionsBacktraces()); + + CApp(this->Internal->LinkOptionsEntries, + this->Makefile->GetLinkOptionsEntries()); + CApp(this->Internal->LinkOptionsBacktraces, + this->Makefile->GetLinkOptionsBacktraces()); + + CApp(this->Internal->LinkDirectoriesEntries, + this->Makefile->GetLinkDirectoriesEntries()); + CApp(this->Internal->LinkDirectoriesBacktraces, + this->Makefile->GetLinkDirectoriesBacktraces()); } if (this->GetType() != cmStateEnums::INTERFACE_LIBRARY && https://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=f7dca1fc97c08146da33a2d6a3ba22ad8e08d94a commit f7dca1fc97c08146da33a2d6a3ba22ad8e08d94a Author: Brad King <brad.k...@kitware.com> AuthorDate: Wed Mar 20 09:43:14 2019 -0400 Commit: Brad King <brad.k...@kitware.com> CommitDate: Wed Mar 20 09:48:29 2019 -0400 GHS: Fix include-what-you-use and clang-tidy diagnostics We will soon build GHS sources on Linux where we run these lints. diff --git a/Source/cmGhsMultiGpj.cxx b/Source/cmGhsMultiGpj.cxx index c1f0742..8b69b51 100644 --- a/Source/cmGhsMultiGpj.cxx +++ b/Source/cmGhsMultiGpj.cxx @@ -2,7 +2,7 @@ file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmGhsMultiGpj.h" -#include "cmGeneratedFileStream.h" +#include <ostream> static const char* GHS_TAG[] = { "[INTEGRITY Application]", "[Library]", @@ -11,7 +11,7 @@ static const char* GHS_TAG[] = { "[INTEGRITY Application]", "[Reference]", "[Subproject]" }; -const char* GhsMultiGpj::GetGpjTag(Types const gpjType) +const char* GhsMultiGpj::GetGpjTag(Types gpjType) { char const* tag; switch (gpjType) { @@ -29,7 +29,7 @@ const char* GhsMultiGpj::GetGpjTag(Types const gpjType) return tag; } -void GhsMultiGpj::WriteGpjTag(Types const gpjType, std::ostream& fout) +void GhsMultiGpj::WriteGpjTag(Types gpjType, std::ostream& fout) { char const* tag; tag = GhsMultiGpj::GetGpjTag(gpjType); diff --git a/Source/cmGhsMultiGpj.h b/Source/cmGhsMultiGpj.h index 6d59225..420eab1 100644 --- a/Source/cmGhsMultiGpj.h +++ b/Source/cmGhsMultiGpj.h @@ -6,8 +6,6 @@ #include "cmConfigure.h" // IWYU pragma: keep #include <iosfwd> -class cmGeneratedFileStream; - class GhsMultiGpj { public: @@ -21,9 +19,9 @@ public: SUBPROJECT }; - static void WriteGpjTag(Types const gpjType, std::ostream& fout); + static void WriteGpjTag(Types gpjType, std::ostream& fout); - static const char* GetGpjTag(Types const gpjType); + static const char* GetGpjTag(Types gpjType); }; #endif // ! cmGhsMultiGpjType_h diff --git a/Source/cmGhsMultiTargetGenerator.cxx b/Source/cmGhsMultiTargetGenerator.cxx index 9f8f12b..bbe7f23 100644 --- a/Source/cmGhsMultiTargetGenerator.cxx +++ b/Source/cmGhsMultiTargetGenerator.cxx @@ -2,16 +2,29 @@ file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmGhsMultiTargetGenerator.h" -#include "cmComputeLinkInformation.h" +#include "cmCustomCommand.h" +#include "cmCustomCommandLines.h" #include "cmGeneratedFileStream.h" #include "cmGeneratorTarget.h" #include "cmGlobalGhsMultiGenerator.h" #include "cmLinkLineComputer.h" +#include "cmLocalGenerator.h" #include "cmLocalGhsMultiGenerator.h" #include "cmMakefile.h" #include "cmSourceFile.h" #include "cmSourceGroup.h" +#include "cmStateDirectory.h" +#include "cmStateSnapshot.h" +#include "cmStateTypes.h" +#include "cmSystemTools.h" #include "cmTarget.h" +#include "cmTargetDepend.h" + +#include <algorithm> +#include <assert.h> +#include <ostream> +#include <set> +#include <utility> cmGhsMultiTargetGenerator::cmGhsMultiTargetGenerator(cmGeneratorTarget* target) : GeneratorTarget(target) @@ -30,9 +43,7 @@ cmGhsMultiTargetGenerator::cmGhsMultiTargetGenerator(cmGeneratorTarget* target) } } -cmGhsMultiTargetGenerator::~cmGhsMultiTargetGenerator() -{ -} +cmGhsMultiTargetGenerator::~cmGhsMultiTargetGenerator() = default; void cmGhsMultiTargetGenerator::Generate() { @@ -99,7 +110,7 @@ void cmGhsMultiTargetGenerator::GenerateTarget() fname += "/"; fname += this->Name; fname += cmGlobalGhsMultiGenerator::FILE_EXTENSION; - cmGeneratedFileStream fout(fname.c_str()); + cmGeneratedFileStream fout(fname); fout.SetCopyIfDifferent(true); this->GetGlobalGenerator()->WriteFileHeader(fout); @@ -336,10 +347,9 @@ void cmGhsMultiTargetGenerator::WriteCustomCommandsHelper( } } -void cmGhsMultiTargetGenerator::WriteSourceProperty(std::ostream& fout, - const cmSourceFile* sf, - std::string propName, - std::string propFlag) +void cmGhsMultiTargetGenerator::WriteSourceProperty( + std::ostream& fout, const cmSourceFile* sf, std::string const& propName, + std::string const& propFlag) { const char* prop = sf->GetProperty(propName); if (prop) { @@ -370,7 +380,7 @@ void cmGhsMultiTargetGenerator::WriteSources(std::ostream& fout_proj) this->Makefile->FindSourceGroup(sf->GetFullPath(), sourceGroups); std::string gn = sourceGroup->GetFullName(); groupFiles[gn].push_back(sf); - groupNames.insert(gn); + groupNames.insert(std::move(gn)); } /* list of known groups and the order they are displayed in a project file */ @@ -397,7 +407,7 @@ void cmGhsMultiTargetGenerator::WriteSources(std::ostream& fout_proj) } { /* catch-all group - is last item */ - std::string gn = ""; + std::string gn; auto n = groupNames.find(gn); if (n != groupNames.end()) { groupFilesList.back() = *n; @@ -446,7 +456,7 @@ void cmGhsMultiTargetGenerator::WriteSources(std::ostream& fout_proj) std::string fpath = this->LocalGenerator->GetCurrentBinaryDirectory(); fpath += "/"; fpath += lpath; - cmGeneratedFileStream* f = new cmGeneratedFileStream(fpath.c_str()); + cmGeneratedFileStream* f = new cmGeneratedFileStream(fpath); f->SetCopyIfDifferent(true); gfiles.push_back(f); fout = f; @@ -476,7 +486,7 @@ void cmGhsMultiTargetGenerator::WriteSources(std::ostream& fout_proj) if ("ld" != si->GetExtension() && "int" != si->GetExtension() && "bsp" != si->GetExtension()) { - this->WriteObjectLangOverride(*fout, si); + WriteObjectLangOverride(*fout, si); } this->WriteSourceProperty(*fout, si, "INCLUDE_DIRECTORIES", "-I"); @@ -502,9 +512,9 @@ void cmGhsMultiTargetGenerator::WriteObjectLangOverride( std::ostream& fout, const cmSourceFile* sourceFile) { const char* rawLangProp = sourceFile->GetProperty("LANGUAGE"); - if (NULL != rawLangProp) { + if (nullptr != rawLangProp) { std::string sourceLangProp(rawLangProp); - std::string extension(sourceFile->GetExtension()); + std::string const& extension = sourceFile->GetExtension(); if ("CXX" == sourceLangProp && ("c" == extension || "C" == extension)) { fout << " -dotciscxx" << std::endl; } @@ -540,20 +550,19 @@ void cmGhsMultiTargetGenerator::WriteReferences(std::ostream& fout) } } -bool cmGhsMultiTargetGenerator::DetermineIfIntegrityApp(void) +bool cmGhsMultiTargetGenerator::DetermineIfIntegrityApp() { const char* p = this->GeneratorTarget->GetProperty("ghs_integrity_app"); if (p) { return cmSystemTools::IsOn( this->GeneratorTarget->GetProperty("ghs_integrity_app")); - } else { - std::vector<cmSourceFile*> sources; - this->GeneratorTarget->GetSourceFiles(sources, this->ConfigName); - for (auto& sf : sources) { - if ("int" == sf->GetExtension()) { - return true; - } + } + std::vector<cmSourceFile*> sources; + this->GeneratorTarget->GetSourceFiles(sources, this->ConfigName); + for (auto& sf : sources) { + if ("int" == sf->GetExtension()) { + return true; } - return false; } + return false; } diff --git a/Source/cmGhsMultiTargetGenerator.h b/Source/cmGhsMultiTargetGenerator.h index a241cc6..a4e23d9 100644 --- a/Source/cmGhsMultiTargetGenerator.h +++ b/Source/cmGhsMultiTargetGenerator.h @@ -7,8 +7,12 @@ #include "cmTarget.h" +#include <iosfwd> +#include <map> +#include <string> +#include <vector> + class cmCustomCommand; -class cmGeneratedFileStream; class cmGeneratorTarget; class cmGlobalGhsMultiGenerator; class cmLocalGhsMultiGenerator; @@ -51,12 +55,13 @@ private: cmTarget::CustomCommandType commandType); void WriteSources(std::ostream& fout_proj); void WriteSourceProperty(std::ostream& fout, const cmSourceFile* sf, - std::string propName, std::string propFlag); + std::string const& propName, + std::string const& propFlag); void WriteReferences(std::ostream& fout); static void WriteObjectLangOverride(std::ostream& fout, const cmSourceFile* sourceFile); - bool DetermineIfIntegrityApp(void); + bool DetermineIfIntegrityApp(); cmGeneratorTarget* GeneratorTarget; cmLocalGhsMultiGenerator* LocalGenerator; cmMakefile* Makefile; diff --git a/Source/cmGlobalGhsMultiGenerator.cxx b/Source/cmGlobalGhsMultiGenerator.cxx index 4f1d06a..dd2e100 100644 --- a/Source/cmGlobalGhsMultiGenerator.cxx +++ b/Source/cmGlobalGhsMultiGenerator.cxx @@ -2,19 +2,25 @@ file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmGlobalGhsMultiGenerator.h" -#include "cmsys/SystemTools.hxx" - -#include "cmAlgorithms.h" #include "cmDocumentationEntry.h" #include "cmGeneratedFileStream.h" #include "cmGeneratorTarget.h" -#include "cmGhsMultiTargetGenerator.h" +#include "cmGhsMultiGpj.h" +#include "cmLocalGenerator.h" #include "cmLocalGhsMultiGenerator.h" #include "cmMakefile.h" #include "cmState.h" +#include "cmStateTypes.h" +#include "cmSystemTools.h" #include "cmVersion.h" #include "cmake.h" +#include <algorithm> +#include <map> +#include <ostream> +#include <string.h> +#include <utility> + const char* cmGlobalGhsMultiGenerator::FILE_EXTENSION = ".gpj"; const char* cmGlobalGhsMultiGenerator::DEFAULT_BUILD_PROGRAM = "gbuild.exe"; const char* cmGlobalGhsMultiGenerator::DEFAULT_TOOLSET_ROOT = "C:/ghs"; @@ -25,9 +31,7 @@ cmGlobalGhsMultiGenerator::cmGlobalGhsMultiGenerator(cmake* cm) cm->GetState()->SetGhsMultiIDE(true); } -cmGlobalGhsMultiGenerator::~cmGlobalGhsMultiGenerator() -{ -} +cmGlobalGhsMultiGenerator::~cmGlobalGhsMultiGenerator() = default; cmLocalGenerator* cmGlobalGhsMultiGenerator::CreateLocalGenerator( cmMakefile* mf) @@ -64,7 +68,8 @@ bool cmGlobalGhsMultiGenerator::SetGeneratorToolset(std::string const& ts, /* no toolset was found */ if (tsp.empty()) { return false; - } else if (ts.empty()) { + } + if (ts.empty()) { std::string message; message = "Green Hills MULTI: -T <toolset> not specified; defaulting to \""; @@ -86,7 +91,7 @@ bool cmGlobalGhsMultiGenerator::SetGeneratorToolset(std::string const& ts, const char* prevTool = mf->GetDefinition("CMAKE_MAKE_PROGRAM"); /* check if the toolset changed from last generate */ - if (prevTool != NULL && (gbuild != prevTool)) { + if (prevTool != nullptr && (gbuild != prevTool)) { std::string message = "toolset build tool: "; message += gbuild; message += "\nDoes not match the previously used build tool: "; @@ -95,13 +100,12 @@ bool cmGlobalGhsMultiGenerator::SetGeneratorToolset(std::string const& ts, "directory or choose a different binary directory."; cmSystemTools::Error(message); return false; - } else { - /* store the toolset that is being used for this build */ - mf->AddCacheDefinition("CMAKE_MAKE_PROGRAM", gbuild.c_str(), - "build program to use", cmStateEnums::INTERNAL, - true); } + /* store the toolset that is being used for this build */ + mf->AddCacheDefinition("CMAKE_MAKE_PROGRAM", gbuild.c_str(), + "build program to use", cmStateEnums::INTERNAL, true); + mf->AddDefinition("CMAKE_SYSTEM_VERSION", tsp.c_str()); return true; @@ -110,7 +114,7 @@ bool cmGlobalGhsMultiGenerator::SetGeneratorToolset(std::string const& ts, bool cmGlobalGhsMultiGenerator::SetGeneratorPlatform(std::string const& p, cmMakefile* mf) { - if (p == "") { + if (p.empty()) { cmSystemTools::Message( "Green Hills MULTI: -A <arch> not specified; defaulting to \"arm\""); std::string arch = "arm"; @@ -202,7 +206,7 @@ void cmGlobalGhsMultiGenerator::WriteFileHeader(std::ostream& fout) fout << "#!gbuild" << std::endl; fout << "#" << std::endl << "# CMAKE generated file: DO NOT EDIT!" << std::endl - << "# Generated by \"" << this->GetActualName() << "\"" + << "# Generated by \"" << GetActualName() << "\"" << " Generator, CMake Version " << cmVersion::GetMajorVersion() << "." << cmVersion::GetMinorVersion() << std::endl << "#" << std::endl @@ -297,7 +301,7 @@ void cmGlobalGhsMultiGenerator::WriteSubProjects( if (projName && projType) { cmLocalGenerator* lg = target->GetLocalGenerator(); std::string dir = lg->GetCurrentBinaryDirectory(); - dir = root->MaybeConvertToRelativePath(rootBinaryDir, dir.c_str()); + dir = root->MaybeConvertToRelativePath(rootBinaryDir, dir); if (dir == ".") { dir.clear(); } else { @@ -320,7 +324,7 @@ void cmGlobalGhsMultiGenerator::WriteSubProjects( fname += "REF"; fname += FILE_EXTENSION; - cmGeneratedFileStream fref(fname.c_str()); + cmGeneratedFileStream fref(fname); fref.SetCopyIfDifferent(true); this->WriteFileHeader(fref); @@ -361,7 +365,7 @@ void cmGlobalGhsMultiGenerator::OutputTopLevelProject( fname += ".top"; fname += FILE_EXTENSION; - cmGeneratedFileStream fout(fname.c_str()); + cmGeneratedFileStream fout(fname); fout.SetCopyIfDifferent(true); this->WriteTopLevelProject(fout, root, generators); @@ -377,9 +381,12 @@ cmGlobalGhsMultiGenerator::GenerateBuildCommand( std::vector<std::string> const& makeOptions) { GeneratedMakeCommand makeCommand = {}; - const char* gbuild = - this->CMakeInstance->GetCacheDefinition("CMAKE_MAKE_PROGRAM"); - makeCommand.Add(this->SelectMakeProgram(makeProgram, (std::string)gbuild)); + std::string gbuild; + if (const char* gbuildCached = + this->CMakeInstance->GetCacheDefinition("CMAKE_MAKE_PROGRAM")) { + gbuild = gbuildCached; + } + makeCommand.Add(this->SelectMakeProgram(makeProgram, gbuild)); if (jobs != cmake::NO_BUILD_PARALLEL_LEVEL) { makeCommand.Add("-parallel"); @@ -425,7 +432,7 @@ void cmGlobalGhsMultiGenerator::WriteMacros(std::ostream& fout) { char const* ghsGpjMacros = this->GetCMakeInstance()->GetCacheDefinition("GHS_GPJ_MACROS"); - if (NULL != ghsGpjMacros) { + if (nullptr != ghsGpjMacros) { std::vector<std::string> expandedList; cmSystemTools::ExpandListArgument(std::string(ghsGpjMacros), expandedList); for (std::string const& arg : expandedList) { @@ -458,7 +465,7 @@ void cmGlobalGhsMultiGenerator::WriteHighLevelDirectives(std::ostream& fout) char const* const customization = this->GetCMakeInstance()->GetCacheDefinition("GHS_CUSTOMIZATION"); - if (NULL != customization && strlen(customization) > 0) { + if (nullptr != customization && strlen(customization) > 0) { fout << "customization=" << trimQuotes(customization) << std::endl; this->GetCMakeInstance()->MarkCliAsUsed("GHS_CUSTOMIZATION"); } diff --git a/Source/cmGlobalGhsMultiGenerator.h b/Source/cmGlobalGhsMultiGenerator.h index c39f40f..f8df6ef 100644 --- a/Source/cmGlobalGhsMultiGenerator.h +++ b/Source/cmGlobalGhsMultiGenerator.h @@ -5,10 +5,20 @@ #include "cmGlobalGenerator.h" -#include "cmGhsMultiGpj.h" #include "cmGlobalGeneratorFactory.h" +#include "cmTargetDepend.h" -class cmGeneratedFileStream; +#include <iosfwd> +#include <set> +#include <string> +#include <utility> +#include <vector> + +class cmGeneratorTarget; +class cmLocalGenerator; +class cmMakefile; +class cmake; +struct cmDocumentationEntry; class cmGlobalGhsMultiGenerator : public cmGlobalGenerator { @@ -17,7 +27,7 @@ public: static const char* FILE_EXTENSION; cmGlobalGhsMultiGenerator(cmake* cm); - ~cmGlobalGhsMultiGenerator(); + ~cmGlobalGhsMultiGenerator() override; static cmGlobalGeneratorFactory* NewFactory() { @@ -31,7 +41,7 @@ public: static std::string GetActualName() { return "Green Hills MULTI"; } ///! Get the name for this generator - std::string GetName() const override { return this->GetActualName(); } + std::string GetName() const override { return GetActualName(); } /// Overloaded methods. @see cmGlobalGenerator::GetDocumentation() static void GetDocumentation(cmDocumentationEntry& entry); @@ -77,8 +87,8 @@ public: std::string First; public: - TargetCompare(std::string const& first) - : First(first) + TargetCompare(std::string first) + : First(std::move(first)) { } bool operator()(cmGeneratorTarget const* l, diff --git a/Source/cmLocalGhsMultiGenerator.cxx b/Source/cmLocalGhsMultiGenerator.cxx index 125e8b5..bf25f98 100644 --- a/Source/cmLocalGhsMultiGenerator.cxx +++ b/Source/cmLocalGhsMultiGenerator.cxx @@ -2,12 +2,15 @@ file Copyright.txt or https://cmake.org/licensing for details. */ #include "cmLocalGhsMultiGenerator.h" -#include "cmGeneratedFileStream.h" #include "cmGeneratorTarget.h" #include "cmGhsMultiTargetGenerator.h" -#include "cmGlobalGhsMultiGenerator.h" -#include "cmMakefile.h" +#include "cmGlobalGenerator.h" #include "cmSourceFile.h" +#include "cmStateTypes.h" +#include "cmSystemTools.h" + +#include <algorithm> +#include <utility> cmLocalGhsMultiGenerator::cmLocalGhsMultiGenerator(cmGlobalGenerator* gg, cmMakefile* mf) @@ -15,9 +18,7 @@ cmLocalGhsMultiGenerator::cmLocalGhsMultiGenerator(cmGlobalGenerator* gg, { } -cmLocalGhsMultiGenerator::~cmLocalGhsMultiGenerator() -{ -} +cmLocalGhsMultiGenerator::~cmLocalGhsMultiGenerator() = default; std::string cmLocalGhsMultiGenerator::GetTargetDirectory( cmGeneratorTarget const* target) const diff --git a/Source/cmLocalGhsMultiGenerator.h b/Source/cmLocalGhsMultiGenerator.h index 2584fd3..b6ccd08 100644 --- a/Source/cmLocalGhsMultiGenerator.h +++ b/Source/cmLocalGhsMultiGenerator.h @@ -5,7 +5,14 @@ #include "cmLocalGenerator.h" -class cmGeneratedFileStream; +#include <map> +#include <string> +#include <vector> + +class cmGeneratorTarget; +class cmGlobalGenerator; +class cmMakefile; +class cmSourceFile; /** \class cmLocalGhsMultiGenerator * \brief Write Green Hills MULTI project files. @@ -18,7 +25,7 @@ class cmLocalGhsMultiGenerator : public cmLocalGenerator public: cmLocalGhsMultiGenerator(cmGlobalGenerator* gg, cmMakefile* mf); - virtual ~cmLocalGhsMultiGenerator(); + ~cmLocalGhsMultiGenerator() override; /** * Generate the makefile for this directory. ----------------------------------------------------------------------- Summary of changes: Auxiliary/vim/syntax/cmake.vim | 1 + Help/generator/Green Hills MULTI.rst | 4 +- Help/manual/cmake-properties.7.rst | 1 + .../XCODE_GENERATE_SCHEME.rst} | 8 +- Help/prop_tgt/XCODE_SCHEME_ADDRESS_SANITIZER.rst | 2 +- ...E_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst | 2 +- Help/prop_tgt/XCODE_SCHEME_ARGUMENTS.rst | 2 +- Help/prop_tgt/XCODE_SCHEME_DEBUG_AS_ROOT.rst | 2 +- .../XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst | 2 +- .../XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst | 2 +- .../XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst | 2 +- Help/prop_tgt/XCODE_SCHEME_ENVIRONMENT.rst | 2 +- Help/prop_tgt/XCODE_SCHEME_EXECUTABLE.rst | 2 +- Help/prop_tgt/XCODE_SCHEME_GUARD_MALLOC.rst | 2 +- .../XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst | 2 +- Help/prop_tgt/XCODE_SCHEME_MALLOC_GUARD_EDGES.rst | 2 +- Help/prop_tgt/XCODE_SCHEME_MALLOC_SCRIBBLE.rst | 2 +- Help/prop_tgt/XCODE_SCHEME_MALLOC_STACK.rst | 2 +- Help/prop_tgt/XCODE_SCHEME_THREAD_SANITIZER.rst | 2 +- .../XCODE_SCHEME_THREAD_SANITIZER_STOP.rst | 2 +- .../XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst | 2 +- ...E_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst | 2 +- Help/prop_tgt/XCODE_SCHEME_ZOMBIE_OBJECTS.rst | 2 +- Help/release/dev/ghs-linux.rst | 4 + Help/release/dev/xcode-scheme-per-target.rst | 6 + Help/variable/CMAKE_MAKE_PROGRAM.rst | 3 +- Help/variable/CMAKE_XCODE_GENERATE_SCHEME.rst | 31 +- .../CMAKE_XCODE_SCHEME_ADDRESS_SANITIZER.rst | 2 +- ...E_SCHEME_ADDRESS_SANITIZER_USE_AFTER_RETURN.rst | 2 +- ...KE_XCODE_SCHEME_DISABLE_MAIN_THREAD_CHECKER.rst | 2 +- .../CMAKE_XCODE_SCHEME_DYNAMIC_LIBRARY_LOADS.rst | 2 +- ...CMAKE_XCODE_SCHEME_DYNAMIC_LINKER_API_USAGE.rst | 2 +- Help/variable/CMAKE_XCODE_SCHEME_GUARD_MALLOC.rst | 2 +- ...CMAKE_XCODE_SCHEME_MAIN_THREAD_CHECKER_STOP.rst | 2 +- .../CMAKE_XCODE_SCHEME_MALLOC_GUARD_EDGES.rst | 2 +- .../CMAKE_XCODE_SCHEME_MALLOC_SCRIBBLE.rst | 2 +- Help/variable/CMAKE_XCODE_SCHEME_MALLOC_STACK.rst | 2 +- .../CMAKE_XCODE_SCHEME_THREAD_SANITIZER.rst | 2 +- .../CMAKE_XCODE_SCHEME_THREAD_SANITIZER_STOP.rst | 2 +- ..._XCODE_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER.rst | 2 +- ...E_SCHEME_UNDEFINED_BEHAVIOUR_SANITIZER_STOP.rst | 2 +- .../variable/CMAKE_XCODE_SCHEME_ZOMBIE_OBJECTS.rst | 2 +- Modules/CMakeDetermineCompilerId.cmake | 14 +- Modules/FindThreads.cmake | 3 + Modules/Platform/GHS-MULTI-Initialize.cmake | 6 +- Source/CMakeLists.txt | 24 +- Source/cmGhsMultiGpj.cxx | 6 +- Source/cmGhsMultiGpj.h | 6 +- Source/cmGhsMultiTargetGenerator.cxx | 57 ++-- Source/cmGhsMultiTargetGenerator.h | 11 +- Source/cmGlobalGenerator.cxx | 18 +- Source/cmGlobalGhsMultiGenerator.cxx | 60 ++-- Source/cmGlobalGhsMultiGenerator.h | 22 +- Source/cmGlobalXCodeGenerator.cxx | 53 +-- Source/cmGlobalXCodeGenerator.h | 7 +- Source/cmLocalGhsMultiGenerator.cxx | 13 +- Source/cmLocalGhsMultiGenerator.h | 11 +- Source/cmMakefile.cxx | 3 +- Source/cmTarget.cxx | 92 ++---- Source/cmake.cxx | 9 +- Source/kwsys/SystemTools.cxx | 354 +++++++++++---------- Source/kwsys/SystemTools.hxx.in | 41 +-- Tests/CMakeLists.txt | 1 + .../GhsMulti/GhsMultiObjectLibrary/CMakeLists.txt | 2 +- .../XcodeProject/XcodeSchemaProperty-check.cmake | 9 + .../XcodeProject/XcodeSchemaProperty.cmake | 3 + Utilities/Scripts/update-third-party.bash | 24 +- 67 files changed, 515 insertions(+), 460 deletions(-) copy Help/{variable/CMAKE_XCODE_GENERATE_SCHEME.rst => prop_tgt/XCODE_GENERATE_SCHEME.rst} (88%) create mode 100644 Help/release/dev/ghs-linux.rst create mode 100644 Help/release/dev/xcode-scheme-per-target.rst hooks/post-receive -- CMake _______________________________________________ Cmake-commits mailing list Cmake-commits@cmake.org https://cmake.org/mailman/listinfo/cmake-commits