aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorDavid Edmundson <kde@davidedmundson.co.uk>2020-06-08 15:29:40 +0100
committerDavid Edmundson <davidedmundson@kde.org>2020-07-10 12:12:58 +0000
commit0ae520199d0e0523f4f0aa847b7567d72ae9553d (patch)
tree4dc13a76d6dfb691b629962b21abbc2fa5ddfce6 /tests
parent4ad3d1615f90adc66f053183f82eec572b35d011 (diff)
downloadextra-cmake-modules-0ae520199d0e0523f4f0aa847b7567d72ae9553d.tar.gz
extra-cmake-modules-0ae520199d0e0523f4f0aa847b7567d72ae9553d.tar.bz2
Introduce function ecm_install_configured_file
Summary: This, as the name suggests, configures a file and installs it. It's not very complicated but it's a repeated pattern in plasma that gets quite messy dealing with temporary files. Test Plan: Used in a project Reviewers: #build_system Subscribers: apol, kossebau, pino, kde-frameworks-devel, kde-buildsystem Tags: #frameworks, #build_system Differential Revision: https://phabricator.kde.org/D28355
Diffstat (limited to 'tests')
-rw-r--r--tests/CMakeLists.txt10
-rw-r--r--tests/ECMConfiguredInstallTest/CMakeLists.txt21
-rw-r--r--tests/ECMConfiguredInstallTest/check_tree.cmake.in20
-rw-r--r--tests/ECMConfiguredInstallTest/configured.txt3
-rw-r--r--tests/ECMConfiguredInstallTest/configured_atOnly.txt.in3
-rw-r--r--tests/ECMConfiguredInstallTest/expected/configured.txt3
-rw-r--r--tests/ECMConfiguredInstallTest/expected/configured_atOnly.txt3
-rw-r--r--tests/ECMConfiguredInstallTest/expected/multi1.txt2
-rw-r--r--tests/ECMConfiguredInstallTest/expected/multi2.txt2
-rw-r--r--tests/ECMConfiguredInstallTest/multi1.txt.in2
-rw-r--r--tests/ECMConfiguredInstallTest/multi2.txt.in2
11 files changed, 71 insertions, 0 deletions
diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
index 5fe100b9..e61d7aa4 100644
--- a/tests/CMakeLists.txt
+++ b/tests/CMakeLists.txt
@@ -201,3 +201,13 @@ set_package_properties(
if (TARGET Qt5::Quick)
add_test_macro(ECMQMLModules dummy)
endif()
+
+set(ECMConfiguredInstallTest_EXTRA_OPTIONS
+ --build-target install
+ --build-options
+ "-DCMAKE_INSTALL_PREFIX:PATH=${CMAKE_CURRENT_BINARY_DIR}/ECMConfiguredInstallTest/InstallDirectory"
+)
+add_test_macro(ECMConfiguredInstallTest
+ ${CMAKE_COMMAND} -P "${CMAKE_CURRENT_BINARY_DIR}/ECMConfiguredInstallTest/check_tree.cmake"
+)
+
diff --git a/tests/ECMConfiguredInstallTest/CMakeLists.txt b/tests/ECMConfiguredInstallTest/CMakeLists.txt
new file mode 100644
index 00000000..a698dd0b
--- /dev/null
+++ b/tests/ECMConfiguredInstallTest/CMakeLists.txt
@@ -0,0 +1,21 @@
+cmake_minimum_required(VERSION 3.5)
+project(ECMConfiguredInstallTest)
+set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../modules)
+
+# make sure the test install dir is clean
+file(REMOVE_RECURSE "${CMAKE_INSTALL_PREFIX}")
+include(ECMConfiguredInstall)
+
+# run test
+
+set(FOO myFoo)
+set(BAR myBar)
+
+ecm_install_configured_files(INPUT configured.txt DESTINATION ${CMAKE_INSTALL_PREFIX}/test)
+
+ecm_install_configured_files(INPUT configured_atOnly.txt.in DESTINATION ${CMAKE_INSTALL_PREFIX}/test @ONLY ESCAPE_QUOTES)
+
+ecm_install_configured_files(INPUT multi1.txt.in ${CMAKE_CURRENT_SOURCE_DIR}/multi2.txt.in DESTINATION ${CMAKE_INSTALL_PREFIX}/test)
+
+# this will be run by CTest
+configure_file(check_tree.cmake.in "${CMAKE_CURRENT_BINARY_DIR}/check_tree.cmake" @ONLY)
diff --git a/tests/ECMConfiguredInstallTest/check_tree.cmake.in b/tests/ECMConfiguredInstallTest/check_tree.cmake.in
new file mode 100644
index 00000000..c5fe51c9
--- /dev/null
+++ b/tests/ECMConfiguredInstallTest/check_tree.cmake.in
@@ -0,0 +1,20 @@
+set(EXPECTED "@CMAKE_CURRENT_SOURCE_DIR@/expected")
+set(ACTUAL "@CMAKE_INSTALL_PREFIX@")
+
+# Compares files in two directories, emits a fatal error if the top level files are different
+# Takes a directory of expected files, and a directory of output files
+function(compare_dirs expected output )
+ file(GLOB files "${expected}/*")
+ foreach(file ${files})
+ get_filename_component(name ${file} NAME)
+
+ execute_process(COMMAND ${CMAKE_COMMAND} -E compare_files ${file} "${output}/${name}"
+ RESULT_VARIABLE test_result
+ )
+ If (NOT test_result EQUAL 0)
+ message(FATAL_ERROR "Test failed: ${file} doesn't match ${output}/${name}!")
+ endif()
+ endforeach()
+endfunction()
+
+compare_dirs(${EXPECTED} ${ACTUAL}/test )
diff --git a/tests/ECMConfiguredInstallTest/configured.txt b/tests/ECMConfiguredInstallTest/configured.txt
new file mode 100644
index 00000000..8dd0d5d5
--- /dev/null
+++ b/tests/ECMConfiguredInstallTest/configured.txt
@@ -0,0 +1,3 @@
+[General]
+Foo=@FOO@
+Bar=${BAR}
diff --git a/tests/ECMConfiguredInstallTest/configured_atOnly.txt.in b/tests/ECMConfiguredInstallTest/configured_atOnly.txt.in
new file mode 100644
index 00000000..8dd0d5d5
--- /dev/null
+++ b/tests/ECMConfiguredInstallTest/configured_atOnly.txt.in
@@ -0,0 +1,3 @@
+[General]
+Foo=@FOO@
+Bar=${BAR}
diff --git a/tests/ECMConfiguredInstallTest/expected/configured.txt b/tests/ECMConfiguredInstallTest/expected/configured.txt
new file mode 100644
index 00000000..119db8fc
--- /dev/null
+++ b/tests/ECMConfiguredInstallTest/expected/configured.txt
@@ -0,0 +1,3 @@
+[General]
+Foo=myFoo
+Bar=myBar
diff --git a/tests/ECMConfiguredInstallTest/expected/configured_atOnly.txt b/tests/ECMConfiguredInstallTest/expected/configured_atOnly.txt
new file mode 100644
index 00000000..68a37bf1
--- /dev/null
+++ b/tests/ECMConfiguredInstallTest/expected/configured_atOnly.txt
@@ -0,0 +1,3 @@
+[General]
+Foo=myFoo
+Bar=${BAR}
diff --git a/tests/ECMConfiguredInstallTest/expected/multi1.txt b/tests/ECMConfiguredInstallTest/expected/multi1.txt
new file mode 100644
index 00000000..a8f6a104
--- /dev/null
+++ b/tests/ECMConfiguredInstallTest/expected/multi1.txt
@@ -0,0 +1,2 @@
+TestMulti1
+Foo=myFoo
diff --git a/tests/ECMConfiguredInstallTest/expected/multi2.txt b/tests/ECMConfiguredInstallTest/expected/multi2.txt
new file mode 100644
index 00000000..b396657d
--- /dev/null
+++ b/tests/ECMConfiguredInstallTest/expected/multi2.txt
@@ -0,0 +1,2 @@
+TestMulti2
+Foo=myFoo
diff --git a/tests/ECMConfiguredInstallTest/multi1.txt.in b/tests/ECMConfiguredInstallTest/multi1.txt.in
new file mode 100644
index 00000000..9e98c14e
--- /dev/null
+++ b/tests/ECMConfiguredInstallTest/multi1.txt.in
@@ -0,0 +1,2 @@
+TestMulti1
+Foo=@FOO@
diff --git a/tests/ECMConfiguredInstallTest/multi2.txt.in b/tests/ECMConfiguredInstallTest/multi2.txt.in
new file mode 100644
index 00000000..018ad639
--- /dev/null
+++ b/tests/ECMConfiguredInstallTest/multi2.txt.in
@@ -0,0 +1,2 @@
+TestMulti2
+Foo=@FOO@