aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--modules/ECMPoQmTools.cmake35
-rw-r--r--tests/ECMPoQmToolsTest/CMakeLists.txt10
-rw-r--r--tests/ECMPoQmToolsTest/check.cmake.in1
-rw-r--r--tests/ECMPoQmToolsTest/check_conf.cmake.in1
4 files changed, 40 insertions, 7 deletions
diff --git a/modules/ECMPoQmTools.cmake b/modules/ECMPoQmTools.cmake
index d1f90b6b..86480b71 100644
--- a/modules/ECMPoQmTools.cmake
+++ b/modules/ECMPoQmTools.cmake
@@ -32,10 +32,13 @@ added to the "all" target (and so the .qm files will be built by default).
::
- ecm_create_qm_loader(<source_files_var> <catalog_name>)
+ ecm_create_qm_loader(<sources_var_name(|target (since 5.83))> <catalog_name>)
Generates C++ code which ensures translations are automatically loaded at
-startup. The generated files are appended to ``<source_files_var>``.
+startup. The generated files are appended to the variable named
+``<sources_var_name>`` or, if the first argument is a target (since 5.83), to
+the SOURCES property of ``<target>``. Any target must be created with
+add_executable() or add_library() and not be an alias.
It assumes that the .qm file for the language code ``<lang>`` is installed as
``<sharedir>/locale/<lang>/LC_MESSAGES/<catalog_name>.qm``, where
@@ -47,9 +50,13 @@ Typical usage is like:
.. code-block:: cmake
set(mylib_SRCS foo.cpp bar.cpp)
- ecm_create_qm_loader(mylib_SRCS mylib)
+ ecm_create_qm_loader(mylib_SRCS mycatalog)
add_library(mylib ${mylib_SRCS})
+ # Or, since 5.83:
+ add_library(mylib foo.cpp bar.cpp)
+ ecm_create_qm_loader(mylib mycatalog)
+
::
ecm_install_po_files_as_qm(<podir>)
@@ -90,17 +97,33 @@ function(_ecm_qm_get_unique_target_name _name _unique_name)
endfunction()
-function(ecm_create_qm_loader out_var catalog_name)
+function(ecm_create_qm_loader sourcesvar_or_target catalog_name)
+ if (TARGET ${sourcesvar_or_target})
+ get_target_property(target_type ${sourcesvar_or_target} TYPE)
+ set(allowed_types "EXECUTABLE" "STATIC_LIBRARY" "MODULE_LIBRARY" "SHARED_LIBRARY" "OBJECT_LIBRARY" "INTERFACE_LIBRARY")
+ if (NOT target_type IN_LIST allowed_types)
+ message(FATAL_ERROR "Target argument passed to ecm_create_qm_loader is not an executable or a library: ${appsources_or_target}")
+ endif()
+ get_target_property(aliased_target ${sourcesvar_or_target} ALIASED_TARGET)
+ if(aliased_target)
+ message(FATAL_ERROR "Target argument passed to ecm_create_qm_loader must not be an alias: ${sourcesvar_or_target}")
+ endif()
+ endif()
set(loader_base ${CMAKE_CURRENT_BINARY_DIR}/ECMQmLoader-${catalog_name})
set(QM_LOADER_CATALOG_NAME "${catalog_name}")
+ set(QM_LOADER_CPP_FILE "${loader_base}.cpp")
configure_file(
${ECM_MODULE_DIR}/ECMQmLoader.cpp.in
- "${loader_base}.cpp"
+ ${QM_LOADER_CPP_FILE}
@ONLY
)
- set(${out_var} "${${out_var}}" "${loader_base}.cpp" PARENT_SCOPE)
+ if (TARGET ${sourcesvar_or_target})
+ target_sources(${sourcesvar_or_target} PRIVATE ${QM_LOADER_CPP_FILE})
+ else()
+ set(${sourcesvar_or_target} "${${sourcesvar_or_target}}" ${QM_LOADER_CPP_FILE} PARENT_SCOPE)
+ endif()
endfunction()
diff --git a/tests/ECMPoQmToolsTest/CMakeLists.txt b/tests/ECMPoQmToolsTest/CMakeLists.txt
index 64ec6f1c..e298db9c 100644
--- a/tests/ECMPoQmToolsTest/CMakeLists.txt
+++ b/tests/ECMPoQmToolsTest/CMakeLists.txt
@@ -71,7 +71,7 @@ ecm_install_po_files_as_qm(tr_test-po)
#
-# single-threaded test
+# single-threaded test, sources var arg
#
set(tr_test_SRCS
tr_test.cpp
@@ -82,6 +82,14 @@ target_link_libraries(tr_test PRIVATE Qt5::Core)
#
+# single-threaded test, target arg
+#
+add_executable(tr_test_target tr_test.cpp)
+ecm_create_qm_loader(tr_test_target catalog)
+target_link_libraries(tr_test_target PRIVATE Qt5::Core)
+
+
+#
# single-threaded test (different catalog name, automoc)
#
# This is to check we don't overwrite previously-generated files.
diff --git a/tests/ECMPoQmToolsTest/check.cmake.in b/tests/ECMPoQmToolsTest/check.cmake.in
index 26320584..5d3d8258 100644
--- a/tests/ECMPoQmToolsTest/check.cmake.in
+++ b/tests/ECMPoQmToolsTest/check.cmake.in
@@ -88,6 +88,7 @@ if("@CMAKE_SYSTEM_NAME@" STREQUAL "Linux")
endfunction()
check_translations(TR_TEST "${TR_TEST_EXEC}" catalog)
+ check_translations(TR_TEST_TARGET "${TR_TEST_TARGET_EXEC}" catalog)
check_translations(TR_TEST_2 "${TR_TEST_2_EXEC}" catalog2)
check_translations(TR_TEST_SUBDIR "${TR_TEST_SUBDIR_EXEC}" catalog)
diff --git a/tests/ECMPoQmToolsTest/check_conf.cmake.in b/tests/ECMPoQmToolsTest/check_conf.cmake.in
index a752d5bd..5b07a00f 100644
--- a/tests/ECMPoQmToolsTest/check_conf.cmake.in
+++ b/tests/ECMPoQmToolsTest/check_conf.cmake.in
@@ -1,4 +1,5 @@
set(TR_TEST_EXEC "$<TARGET_FILE:tr_test>")
+set(TR_TEST_TARGET_EXEC "$<TARGET_FILE:tr_test_target>")
set(TR_TEST_2_EXEC "$<TARGET_FILE:tr_test_2>")
set(TR_TEST_SUBDIR_EXEC "$<TARGET_FILE:tr_test_subdir>")
set(TR_THREAD_TEST_EXEC "$<TARGET_FILE:tr_thread_test>")