summaryrefslogtreecommitdiffstats
path: root/tests/depfile
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-18 05:39:07 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-18 05:39:07 +0000
commitaf6b8ed095f88f1df2116cdc7a9d44872cfa6074 (patch)
tree1f2df671c1f8033d5ed83f056167a0911f8d2a57 /tests/depfile
parentInitial commit. (diff)
downloadrust-cbindgen-upstream.tar.xz
rust-cbindgen-upstream.zip
Adding upstream version 0.26.0.upstream/0.26.0upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/depfile')
-rw-r--r--tests/depfile/Readme.md11
-rw-r--r--tests/depfile/cbindgen_test.cmake27
2 files changed, 38 insertions, 0 deletions
diff --git a/tests/depfile/Readme.md b/tests/depfile/Readme.md
new file mode 100644
index 0000000..d7f8b1a
--- /dev/null
+++ b/tests/depfile/Readme.md
@@ -0,0 +1,11 @@
+This a folder containing tests for `--depfile` parameter.
+Each test is in a subfolder and defines a minimum CMake project,
+which uses cbindgen to generate Rust bindings and the `--depfile`
+parameter to determine when to regenerate.
+The outer test can the build the project, assert that rebuilding does not regenerate the
+bindings, and then assert that touching the files involved does trigger rebuilding.
+
+The test project must contain an `expectations` folder, containing a file `dependencies`.
+This `dependencies` should list all files that should be listed as dependencies in the generated
+depfile. The paths should be relative to the project folder (i.e. to the folder containing
+`expectations`).
diff --git a/tests/depfile/cbindgen_test.cmake b/tests/depfile/cbindgen_test.cmake
new file mode 100644
index 0000000..752c3c3
--- /dev/null
+++ b/tests/depfile/cbindgen_test.cmake
@@ -0,0 +1,27 @@
+# Common code used across the different tests
+
+if(NOT DEFINED CBINDGEN_PATH)
+ message(FATAL_ERROR "Path to cbindgen not specified")
+endif()
+
+# Promote to cache
+set(CBINDGEN_PATH "${CBINDGEN_PATH}" CACHE INTERNAL "")
+
+function(add_cbindgen_command custom_target_name header_destination)
+ # Place the depfile always at the same location, so the outer test framework can locate the file easily
+ set(depfile_destination "${CMAKE_BINARY_DIR}/depfile.d")
+ add_custom_command(
+ OUTPUT
+ "${header_destination}" "${depfile_destination}"
+ COMMAND
+ "${CBINDGEN_PATH}"
+ --output "${header_destination}"
+ --depfile "${depfile_destination}"
+ ${ARGN}
+ DEPFILE "${depfile_destination}"
+ WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}"
+ COMMENT "Running cbindgen"
+ COMMAND_EXPAND_LISTS
+ )
+ add_custom_target("${custom_target_name}" ALL DEPENDS "${header_destination}")
+endfunction() \ No newline at end of file