Bladeren bron

Merge topic 'presets-build-fixes' into release-3.20

534c40e6d8 presets: Fix buildPreset "targets" not allowing a single string
5d67632813 presets: Fix buildPreset "jobs"
93e396b402 presets: Fix buildPreset "jobs" field test case

Acked-by: Kitware Robot <[email protected]>
Acked-by: Kyle Edwards <[email protected]>
Merge-request: !6190
Brad King 4 jaren geleden
bovenliggende
commit
e3c420a74f

+ 10 - 7
Source/cmCMakePresetsFile.cxx

@@ -184,8 +184,8 @@ auto const PresetVectorStringHelper =
     ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESET,
     PresetStringHelper);
 
-ReadFileResult PresetInheritsHelper(std::vector<std::string>& out,
-                                    const Json::Value* value)
+ReadFileResult PresetVectorOneOrMoreStringHelper(std::vector<std::string>& out,
+                                                 const Json::Value* value)
 {
   out.clear();
   if (!value) {
@@ -312,8 +312,8 @@ auto const ConfigurePresetHelper =
   cmJSONObjectHelper<ConfigurePreset, ReadFileResult>(
     ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESET, false)
     .Bind("name"_s, &ConfigurePreset::Name, PresetStringHelper)
-    .Bind("inherits"_s, &ConfigurePreset::Inherits, PresetInheritsHelper,
-          false)
+    .Bind("inherits"_s, &ConfigurePreset::Inherits,
+          PresetVectorOneOrMoreStringHelper, false)
     .Bind("hidden"_s, &ConfigurePreset::Hidden, PresetBoolHelper, false)
     .Bind<std::nullptr_t>("vendor"_s, nullptr,
                           VendorHelper(ReadFileResult::INVALID_PRESET), false)
@@ -340,7 +340,8 @@ auto const BuildPresetHelper =
   cmJSONObjectHelper<BuildPreset, ReadFileResult>(
     ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESET, false)
     .Bind("name"_s, &BuildPreset::Name, PresetStringHelper)
-    .Bind("inherits"_s, &BuildPreset::Inherits, PresetInheritsHelper, false)
+    .Bind("inherits"_s, &BuildPreset::Inherits,
+          PresetVectorOneOrMoreStringHelper, false)
     .Bind("hidden"_s, &BuildPreset::Hidden, PresetBoolHelper, false)
     .Bind<std::nullptr_t>("vendor"_s, nullptr,
                           VendorHelper(ReadFileResult::INVALID_PRESET), false)
@@ -356,7 +357,8 @@ auto const BuildPresetHelper =
           &BuildPreset::InheritConfigureEnvironment, PresetOptionalBoolHelper,
           false)
     .Bind("jobs"_s, &BuildPreset::Jobs, PresetOptionalIntHelper, false)
-    .Bind("targets"_s, &BuildPreset::Targets, PresetVectorStringHelper, false)
+    .Bind("targets"_s, &BuildPreset::Targets,
+          PresetVectorOneOrMoreStringHelper, false)
     .Bind("configuration"_s, &BuildPreset::Configuration, PresetStringHelper,
           false)
     .Bind("cleanFirst"_s, &BuildPreset::CleanFirst, PresetOptionalBoolHelper,
@@ -657,7 +659,8 @@ auto const TestPresetHelper =
   cmJSONObjectHelper<TestPreset, ReadFileResult>(
     ReadFileResult::READ_OK, ReadFileResult::INVALID_PRESET, false)
     .Bind("name"_s, &TestPreset::Name, PresetStringHelper)
-    .Bind("inherits"_s, &TestPreset::Inherits, PresetInheritsHelper, false)
+    .Bind("inherits"_s, &TestPreset::Inherits,
+          PresetVectorOneOrMoreStringHelper, false)
     .Bind("hidden"_s, &TestPreset::Hidden, PresetBoolHelper, false)
     .Bind<std::nullptr_t>("vendor"_s, nullptr,
                           VendorHelper(ReadFileResult::INVALID_PRESET), false)

+ 3 - 1
Source/cmake.cxx

@@ -3164,7 +3164,9 @@ int cmake::Build(int jobs, std::string dir, std::vector<std::string> targets,
     this->UnprocessedPresetEnvironment = expandedPreset->Environment;
     this->ProcessPresetEnvironment();
 
-    if (jobs == cmake::DEFAULT_BUILD_PARALLEL_LEVEL && expandedPreset->Jobs) {
+    if ((jobs == cmake::DEFAULT_BUILD_PARALLEL_LEVEL ||
+         jobs == cmake::NO_BUILD_PARALLEL_LEVEL) &&
+        expandedPreset->Jobs) {
       jobs = *expandedPreset->Jobs;
     }
 

+ 13 - 3
Tests/RunCMake/CMakeLists.txt

@@ -809,9 +809,19 @@ add_RunCMake_test(PrecompileHeaders -DCMAKE_C_COMPILER_ID=${CMAKE_C_COMPILER_ID}
   -DCMAKE_C_COMPILER_VERSION=${CMAKE_C_COMPILER_VERSION})
 
 add_RunCMake_test("UnityBuild")
-add_RunCMake_test(CMakePresets -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} -DCMake_TEST_JSON_SCHEMA=${CMake_TEST_JSON_SCHEMA})
-add_RunCMake_test(CMakePresetsBuild -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} -DCMake_TEST_JSON_SCHEMA=${CMake_TEST_JSON_SCHEMA})
-add_RunCMake_test(CMakePresetsTest -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE} -DCMake_TEST_JSON_SCHEMA=${CMake_TEST_JSON_SCHEMA})
+add_RunCMake_test(CMakePresets
+  -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}
+  -DCMake_TEST_JSON_SCHEMA=${CMake_TEST_JSON_SCHEMA}
+  )
+add_RunCMake_test(CMakePresetsBuild
+  -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}
+  -DCMake_TEST_JSON_SCHEMA=${CMake_TEST_JSON_SCHEMA}
+  -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
+  )
+add_RunCMake_test(CMakePresetsTest
+  -DPYTHON_EXECUTABLE=${PYTHON_EXECUTABLE}
+  -DCMake_TEST_JSON_SCHEMA=${CMake_TEST_JSON_SCHEMA}
+  )
 
 if(${CMAKE_GENERATOR} MATCHES "Make|Ninja")
   add_RunCMake_test(TransformDepfile)

+ 6 - 1
Tests/RunCMake/CMakePresetsBuild/Good.json.in

@@ -30,7 +30,7 @@
             "description": "",
             "inheritConfigureEnvironment": true,
             "environment": {},
-            "jobs": 0,
+            @Good_json_jobs@
             "targets": [],
             "configuration": "",
             "verbose": true,
@@ -73,6 +73,11 @@
             "vendor": {
                 "example.com": "value"
             }
+        },
+        {
+            "name": "singleTarget",
+            "inherits": "build-default",
+            "targets": "good"
         }
     ]
 }

+ 9 - 1
Tests/RunCMake/CMakePresetsBuild/RunCMakeTest.cmake

@@ -62,7 +62,15 @@ endfunction()
 
 set(CMakePresets_SCHEMA_EXPECTED_RESULT 0)
 
-run_cmake_build_presets(Good "default;other" "build-other;withEnvironment;noEnvironment;macros;vendorObject")
+if(RunCMake_GENERATOR MATCHES "NMake|Borland|Watcom")
+  set(Good_json_jobs [[]])
+elseif(RunCMake_GENERATOR MATCHES "Make" AND CMAKE_SYSTEM_NAME MATCHES "FreeBSD")
+  set(Good_json_jobs [["jobs": 1,]])
+else()
+  set(Good_json_jobs [["jobs": 0,]])
+endif()
+
+run_cmake_build_presets(Good "default;other" "build-other;withEnvironment;noEnvironment;macros;vendorObject;singleTarget")
 run_cmake_build_presets(InvalidConfigurePreset "default" "badConfigurePreset")
 
 set(CMakePresetsBuild_BUILD_ONLY 1)