summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorOliver Reiche <oliver.reiche@huawei.com>2023-01-31 15:08:51 +0100
committerOliver Reiche <oliver.reiche@huawei.com>2023-01-31 15:34:10 +0100
commit1022e731a5a5509c18f2a3c65b01bf4179a82eca (patch)
treedc1aaf13048a6248147c37892bbeac066d177735
parent77589b0d2f860e73b5b0348044e0a1182a7fa949 (diff)
downloadrules-cc-1022e731a5a5509c18f2a3c65b01bf4179a82eca.tar.gz
cmake: Support pre_cmds and post_cmds
-rw-r--r--CC/foreign/cmake/EXPRESSIONS45
-rw-r--r--CC/foreign/cmake/RULES35
2 files changed, 72 insertions, 8 deletions
diff --git a/CC/foreign/cmake/EXPRESSIONS b/CC/foreign/cmake/EXPRESSIONS
index fe5931e..3b10de3 100644
--- a/CC/foreign/cmake/EXPRESSIONS
+++ b/CC/foreign/cmake/EXPRESSIONS
@@ -3,6 +3,8 @@
[ "source_dir"
, "cmake_options"
, "cmake_defines"
+ , "pre_cmds"
+ , "post_cmds"
, "CC"
, "CXX"
, "CFLAGS"
@@ -112,13 +114,42 @@
{ "type": "join"
, "separator": "\n"
, "$1":
- [ "set -eu"
- , "readonly CMAKE_AR=$(which $1)"
- , "shift"
- , "cmake \"$@\" -Ssource -Bbuild -DCMAKE_AR=${CMAKE_AR} -DCMAKE_INSTALL_PREFIX=./install >configure.log || (cat configure.log && exit 1)"
- , "cmake --build build --target install >build.log || (cat configure.log build.log && exit 1)"
- , "find ./install -type l -delete"
- ]
+ { "type": "++"
+ , "$1":
+ [ [ "set -eu"
+ , "mkdir scratch"
+ , "readonly TMPDIR=\"$(pwd)/scratch\""
+ ]
+ , { "type": "if"
+ , "cond": {"type": "var", "name": "pre_cmds"}
+ , "then":
+ { "type": "++"
+ , "$1":
+ [ ["(", "set --", "cd ./source"]
+ , {"type": "var", "name": "pre_cmds"}
+ , [")"]
+ ]
+ }
+ }
+ , [ "readonly CMAKE_AR=$(which $1)"
+ , "shift"
+ , "cmake \"$@\" -Ssource -Bbuild -DCMAKE_AR=${CMAKE_AR} -DCMAKE_INSTALL_PREFIX=./install >configure.log || (cat configure.log && exit 1)"
+ , "cmake --build build --target install >build.log || (cat configure.log build.log && exit 1)"
+ , "find ./install -type l -delete"
+ ]
+ , { "type": "if"
+ , "cond": {"type": "var", "name": "post_cmds"}
+ , "then":
+ { "type": "++"
+ , "$1":
+ [ ["(", "set --", "cd ./install"]
+ , {"type": "var", "name": "post_cmds"}
+ , [")"]
+ ]
+ }
+ }
+ ]
+ }
}
}
}
diff --git a/CC/foreign/cmake/RULES b/CC/foreign/cmake/RULES
index b7801c4..e6ca125 100644
--- a/CC/foreign/cmake/RULES
+++ b/CC/foreign/cmake/RULES
@@ -1,7 +1,8 @@
{ "data":
{ "doc": ["Data produced by CMake configure, build, and install."]
, "target_fields": ["project"]
- , "string_fields": ["options", "defines", "out_files", "out_dirs"]
+ , "string_fields":
+ ["options", "defines", "pre_cmds", "post_cmds", "out_files", "out_dirs"]
, "config_vars":
[ "CC"
, "CXX"
@@ -27,6 +28,19 @@
[ "CMake defines for the configuration phase."
, "(e.g., [\"CMAKE_BUILD_TYPE=Release\"])"
]
+ , "pre_cmds":
+ [ "List of commands executed in the project directory before calling"
+ , "CMake. Useful for renaming files or directories. Note that data"
+ , "between \"pre_cmds\" and \"post_cmds\" can be exchanged via $TMPDIR,"
+ , "which is uniquely reserved for this action."
+ ]
+ , "post_cmds":
+ [ "List of commands executed in the install directory after successful"
+ , "installation but before the output files are collected. Useful for"
+ , "renaming files or directories. Note that data between \"pre_cmds\" and"
+ , "\"post_cmds\" can be exchanged via $TMPDIR, which is uniquely reserved"
+ , "for this action."
+ ]
, "out_files":
[ "Paths to the produced output files. The paths are considered relative"
, "to the install directory."
@@ -138,6 +152,8 @@
]
, ["cmake_options", {"type": "FIELD", "name": "options"}]
, ["cmake_defines", {"type": "FIELD", "name": "defines"}]
+ , ["pre_cmds", {"type": "FIELD", "name": "pre_cmds"}]
+ , ["post_cmds", {"type": "FIELD", "name": "post_cmds"}]
, [ "full_install_dir"
, {"type": "CALL_EXPRESSION", "name": "cmake-build"}
]
@@ -194,6 +210,8 @@
, "stage"
, "options"
, "defines"
+ , "pre_cmds"
+ , "post_cmds"
, "out_hdrs"
, "out_hdr_dirs"
, "out_libs"
@@ -240,6 +258,19 @@
[ "CMake defines for the configuration phase."
, "(e.g., [\"CMAKE_BUILD_TYPE=Release\"])"
]
+ , "pre_cmds":
+ [ "List of commands executed in the project directory before calling"
+ , "CMake. Useful for renaming files or directories. Note that data"
+ , "between \"pre_cmds\" and \"post_cmds\" can be exchanged via $TMPDIR,"
+ , "which is uniquely reserved for this action."
+ ]
+ , "post_cmds":
+ [ "List of commands executed in the install directory after successful"
+ , "installation but before the output files are collected. Useful for"
+ , "renaming files or directories (e.g., in case of SONAME mismatch). Note"
+ , "that data between \"pre_cmds\" and \"post_cmds\" can be exchanged via"
+ , "$TMPDIR, which is uniquely reserved for this action."
+ ]
, "out_hdrs":
[ "Paths to produced public header files. The path is considered"
, "relative to the include directory, which be set via \"hdr_prefix\"."
@@ -460,6 +491,8 @@
]
, ["cmake_options", {"type": "FIELD", "name": "options"}]
, ["cmake_defines", {"type": "FIELD", "name": "defines"}]
+ , ["pre_cmds", {"type": "FIELD", "name": "pre_cmds"}]
+ , ["post_cmds", {"type": "FIELD", "name": "post_cmds"}]
, [ "full_install_dir"
, {"type": "CALL_EXPRESSION", "name": "cmake-build"}
]