diff options
author | David Edmundson <kde@davidedmundson.co.uk> | 2020-06-08 15:29:40 +0100 |
---|---|---|
committer | David Edmundson <davidedmundson@kde.org> | 2020-07-10 12:12:58 +0000 |
commit | 0ae520199d0e0523f4f0aa847b7567d72ae9553d (patch) | |
tree | 4dc13a76d6dfb691b629962b21abbc2fa5ddfce6 /tests | |
parent | 4ad3d1615f90adc66f053183f82eec572b35d011 (diff) | |
download | extra-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.txt | 10 | ||||
-rw-r--r-- | tests/ECMConfiguredInstallTest/CMakeLists.txt | 21 | ||||
-rw-r--r-- | tests/ECMConfiguredInstallTest/check_tree.cmake.in | 20 | ||||
-rw-r--r-- | tests/ECMConfiguredInstallTest/configured.txt | 3 | ||||
-rw-r--r-- | tests/ECMConfiguredInstallTest/configured_atOnly.txt.in | 3 | ||||
-rw-r--r-- | tests/ECMConfiguredInstallTest/expected/configured.txt | 3 | ||||
-rw-r--r-- | tests/ECMConfiguredInstallTest/expected/configured_atOnly.txt | 3 | ||||
-rw-r--r-- | tests/ECMConfiguredInstallTest/expected/multi1.txt | 2 | ||||
-rw-r--r-- | tests/ECMConfiguredInstallTest/expected/multi2.txt | 2 | ||||
-rw-r--r-- | tests/ECMConfiguredInstallTest/multi1.txt.in | 2 | ||||
-rw-r--r-- | tests/ECMConfiguredInstallTest/multi2.txt.in | 2 |
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@ |