diff options
author | Oliver Reiche <oliver.reiche@huawei.com> | 2023-01-31 15:08:51 +0100 |
---|---|---|
committer | Oliver Reiche <oliver.reiche@huawei.com> | 2023-01-31 15:34:10 +0100 |
commit | 1022e731a5a5509c18f2a3c65b01bf4179a82eca (patch) | |
tree | dc1aaf13048a6248147c37892bbeac066d177735 | |
parent | 77589b0d2f860e73b5b0348044e0a1182a7fa949 (diff) | |
download | rules-cc-1022e731a5a5509c18f2a3c65b01bf4179a82eca.tar.gz |
cmake: Support pre_cmds and post_cmds
-rw-r--r-- | CC/foreign/cmake/EXPRESSIONS | 45 | ||||
-rw-r--r-- | CC/foreign/cmake/RULES | 35 |
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"} ] |