Răsfoiți Sursa

Merge topic 'cmake-presets-file-dir' into release-3.23

f54507c2f6 CMakePresets.json: Add ${fileDir} macro

Acked-by: Kitware Robot <[email protected]>
Tested-by: buildbot <[email protected]>
Acked-by: Gerhard Olsson <[email protected]>
Merge-request: !7051
Brad King 3 ani în urmă
părinte
comite
11c25ae6ae

+ 5 - 0
Help/manual/cmake-presets.7.rst

@@ -1053,6 +1053,11 @@ Recognized macros include:
   :variable:`CMAKE_HOST_SYSTEM_NAME`. This is allowed in preset files
   specifying version ``3`` or above.
 
+``${fileDir}``
+
+  Path to the directory containing the preset file which contains the macro.
+  This is allowed in preset files specifying version ``4`` or above.
+
 ``${dollar}``
 
   A literal dollar sign (``$``).

+ 3 - 0
Help/release/3.23.rst

@@ -18,6 +18,9 @@ Presets
 * :manual:`cmake-presets(7)` files now have an optional ``include`` field,
   which allows the files to include other files.
 
+* :manual:`cmake-presets(7)` files now support a ``${fileDir}`` macro, which
+  contains the directory containing the preset file.
+
 * :manual:`cmake-presets(7)` gained support for specifying the
   ``resolvePackageReferences`` command line option in a build preset to control
   restoration behavior of package references from external package managers.

+ 8 - 0
Source/cmCMakePresetsGraph.cxx

@@ -353,6 +353,14 @@ bool ExpandMacros(const cmCMakePresetsGraph& graph, const T& preset,
         macroOut += cmSystemTools::GetSystemName();
         return ExpandMacroResult::Ok;
       }
+      if (macroName == "fileDir") {
+        if (version < 4) {
+          return ExpandMacroResult::Error;
+        }
+        macroOut +=
+          cmSystemTools::GetParentDirectory(preset.OriginFile->Filename);
+        return ExpandMacroResult::Ok;
+      }
     }
 
     return ExpandMacroResult::Ignore;

+ 3 - 0
Tests/RunCMake/CMakePresets/FileDir.cmake

@@ -0,0 +1,3 @@
+include(${CMAKE_CURRENT_LIST_DIR}/TestVariable.cmake)
+
+test_variable(TEST_FILE_DIR "" "${CMAKE_CURRENT_SOURCE_DIR}/subdir")

+ 6 - 0
Tests/RunCMake/CMakePresets/FileDir.json.in

@@ -0,0 +1,6 @@
+{
+  "version": 4,
+  "include": [
+    "subdir/FileDir.json"
+  ]
+}

+ 1 - 0
Tests/RunCMake/CMakePresets/FileDirFuture-result.txt

@@ -0,0 +1 @@
+1

+ 2 - 0
Tests/RunCMake/CMakePresets/FileDirFuture-stderr.txt

@@ -0,0 +1,2 @@
+^CMake Error: Could not read presets from [^
+]*/Tests/RunCMake/CMakePresets/FileDirFuture: Invalid macro expansion$

+ 13 - 0
Tests/RunCMake/CMakePresets/FileDirFuture.json.in

@@ -0,0 +1,13 @@
+{
+  "version": 3,
+  "configurePresets": [
+    {
+      "name": "FileDirFuture",
+      "generator": "@RunCMake_GENERATOR@",
+      "binaryDir": "${sourceDir}/build",
+      "cacheVariables": {
+        "TEST_FILE_DIR": "${fileDir}"
+      }
+    }
+  ]
+}

+ 11 - 1
Tests/RunCMake/CMakePresets/RunCMakeTest.cmake

@@ -53,7 +53,7 @@ function(run_cmake_presets name)
       )
     string(REGEX REPLACE "\\.in$" "" _extra_file_out_relative "${_extra_file_relative}")
     set(_extra_file_out "${RunCMake_TEST_SOURCE_DIR}/${_extra_file_out_relative}")
-    configure_file("${_extra_file}" "${_extra_file_out}")
+    configure_file("${_extra_file}" "${_extra_file_out}" @ONLY)
     list(APPEND _CMakePresets_EXTRA_FILES_OUT "${_extra_file_out}")
     list(APPEND _CMakePresets_EXTRA_FILES_SCHEMA_EXPECTED_RESULTS 0)
   endforeach()
@@ -317,6 +317,16 @@ run_cmake_presets(HostSystemName)
 set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/HostSystemNameFuture.json.in")
 run_cmake_presets(HostSystemNameFuture)
 
+# Test ${fileDir} macro
+set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/FileDir.json.in")
+set(CMakePresets_EXTRA_FILES
+  "${RunCMake_SOURCE_DIR}/subdir/FileDir.json.in"
+  )
+run_cmake_presets(FileDir)
+unset(CMakePresets_EXTRA_FILES)
+set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/FileDirFuture.json.in")
+run_cmake_presets(FileDirFuture)
+
 # Test conditions
 set(CMakePresets_FILE "${RunCMake_SOURCE_DIR}/Conditions.json.in")
 run_cmake_presets(ListConditions --list-presets)

+ 13 - 0
Tests/RunCMake/CMakePresets/subdir/FileDir.json.in

@@ -0,0 +1,13 @@
+{
+  "version": 4,
+  "configurePresets": [
+    {
+      "name": "FileDir",
+      "generator": "@RunCMake_GENERATOR@",
+      "binaryDir": "${sourceDir}/build",
+      "cacheVariables": {
+        "TEST_FILE_DIR": "${fileDir}"
+      }
+    }
+  ]
+}