diff options
| author | Friedrich W. H. Kossebau <kossebau@kde.org> | 2021-05-17 10:54:41 +0200 | 
|---|---|---|
| committer | Friedrich W. H. Kossebau <kossebau@kde.org> | 2021-05-21 13:37:14 +0000 | 
| commit | f7b1cf93e67e3eba07597bf7891b854bd8c954ba (patch) | |
| tree | 47386186f26553aee31a1472eb1a25b6a365063f | |
| parent | 9d22f7b72412c7ccdd843de6e41028fe903f570a (diff) | |
| download | extra-cmake-modules-f7b1cf93e67e3eba07597bf7891b854bd8c954ba.tar.gz extra-cmake-modules-f7b1cf93e67e3eba07597bf7891b854bd8c954ba.tar.bz2  | |
ecm_create_qm_loader: support target as alternative argument
| -rw-r--r-- | modules/ECMPoQmTools.cmake | 35 | ||||
| -rw-r--r-- | tests/ECMPoQmToolsTest/CMakeLists.txt | 10 | ||||
| -rw-r--r-- | tests/ECMPoQmToolsTest/check.cmake.in | 1 | ||||
| -rw-r--r-- | tests/ECMPoQmToolsTest/check_conf.cmake.in | 1 | 
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>")  | 
