@@ -12,13 +12,22 @@ set(CMAKE_CXX_STANDARD 17)
12
12
set (CMAKE_CXX_STANDARD_REQUIRED ON )
13
13
set (CMAKE_INCLUDE_CURRENT_DIR ON )
14
14
15
+ list (APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR} /cmake" )
16
+
17
+ include (Config.cmake)
18
+
19
+ # QtCreator doesn't use the system locale and I see no way to prefix with LANG=XYZ.UTF-8 the command,
20
+ # so enabling these 2 settings we can test any language, see initLocale() in main.cpp.
21
+ set (PROJECT_TRANSLATION_TEST_ENABLED 0 CACHE STRING "Whether to enable translation testing [default: 0]" )
22
+ set (PROJECT_TRANSLATION_TEST_LANGUAGE "en" CACHE STRING "Country code of language to test in IDE [default: en]" )
15
23
set (PROJECT_QT_VERSION 6 CACHE STRING "Qt version to use [Default: 6]" )
24
+ option (PROJECT_TRANSLATIONS_UPDATE "Update source translations [default: OFF]" OFF )
16
25
17
26
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fsanitize=undefined")
18
27
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fsanitize=undefined")
19
28
20
29
find_package (QT NAMES Qt${PROJECT_QT_VERSION} )
21
- find_package (Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets)
30
+ find_package (Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets LinguistTools )
22
31
find_package (PkgConfig REQUIRED)
23
32
pkg_search_module(GLIB REQUIRED glib-2.0)
24
33
find_package (LibXml2 REQUIRED)
@@ -37,10 +46,56 @@ set(PROJECT_SOURCES
37
46
keyboard-layouts.c
38
47
keyboard-layouts.h
39
48
)
40
- source_group ("" FILES ${PROJECT_SOURCES} )
49
+ set (PROJECT_OTHER_FILES
50
+ .github/workflows/build .yml
51
+ README.md
52
+ )
53
+ file (GLOB PROJECT_TRANSLATION_SOURCES "${PROJECT_TRANSLATIONS_DIR} /*" )
54
+ source_group ("" FILES
55
+ ${PROJECT_SOURCES}
56
+ ${PROJECT_TRANSLATION_SOURCES}
57
+ )
58
+ #===================================================================================================
59
+ # Translations
60
+ #===================================================================================================
61
+ include (GNUInstallDirs)
62
+ include (LXQtTranslate)
41
63
64
+ lxqt_translate_ts(PROJECT_QM_FILES
65
+ SOURCES ${PROJECT_SOURCES}
66
+ TEMPLATE ${PROJECT_ID}
67
+ TRANSLATION_DIR "${PROJECT_TRANSLATIONS_DIR} "
68
+ UPDATE_TRANSLATIONS ${PROJECT_TRANSLATIONS_UPDATE}
69
+ INSTALL_DIR "${CMAKE_INSTALL_DATADIR} /${PROJECT_ID} /translations"
70
+ )
71
+ lxqt_translate_desktop(PROJECT_DESKTOP_FILES
72
+ SOURCES "${CMAKE_BINARY_DIR} /${PROJECT_APPSTREAM_ID} .desktop.in"
73
+ TRANSLATION_DIR "${PROJECT_TRANSLATIONS_DIR} "
74
+ USE_YAML
75
+ )
76
+ #===================================================================================================
77
+ # Application
78
+ #===================================================================================================
42
79
qt_add_executable(${PROJECT_NAME} MANUAL_FINALIZATION
43
80
${PROJECT_SOURCES}
81
+ ${PROJECT_DESKTOP_FILES}
82
+ ${PROJECT_OTHER_FILES}
83
+ ${PROJECT_QM_FILES}
84
+ ${PROJECT_TRANSLATION_SOURCES}
85
+ )
86
+ set (PROJECT_ICON_SYSTEM_PATH "${CMAKE_INSTALL_FULL_DATADIR} /icons/hicolor/scalable/apps" )
87
+ file (COPY_FILE "${CMAKE_SOURCE_DIR} /data/${PROJECT_APPSTREAM_ID} .svg"
88
+ "${CMAKE_BINARY_DIR} /${PROJECT_APPSTREAM_ID} .svg"
89
+ )
90
+ target_compile_definitions (${PROJECT_NAME} PRIVATE
91
+ APPLICATION_NAME="${PROJECT_NAME} "
92
+ APPLICATION_VERSION="${PROJECT_VERSION} "
93
+ PROJECT_ID="${PROJECT_ID} "
94
+ PROJECT_APPSTREAM_ID="${PROJECT_APPSTREAM_ID} "
95
+ PROJECT_DATA_DIR="${CMAKE_INSTALL_FULL_DATADIR} /${PROJECT_NAME} "
96
+ PROJECT_ICON_SYSTEM_PATH="${PROJECT_ICON_SYSTEM_PATH} "
97
+ PROJECT_TRANSLATION_TEST_ENABLED=${PROJECT_TRANSLATION_TEST_ENABLED}
98
+ PROJECT_TRANSLATION_TEST_LANGUAGE="${PROJECT_TRANSLATION_TEST_LANGUAGE} "
44
99
)
45
100
target_include_directories (${PROJECT_NAME} PRIVATE ${GLIB_INCLUDE_DIRS} )
46
101
target_include_directories (${PROJECT_NAME} PRIVATE ${LIBXML2_INCLUDE_DIR} )
@@ -51,11 +106,39 @@ target_link_libraries(${PROJECT_NAME} PRIVATE
51
106
${LIBXML2_LIBRARIES}
52
107
)
53
108
#target_link_options(${PROJECT_NAME} BEFORE PUBLIC -fsanitize=undefined PUBLIC -fsanitize=address)
54
-
55
- include (GNUInstallDirs)
109
+ #===================================================================================================
110
+ # Installation
111
+ #===================================================================================================
112
+ configure_file ("${CMAKE_SOURCE_DIR} /data/${PROJECT_APPSTREAM_ID} .desktop.in"
113
+ "${CMAKE_BINARY_DIR} /${PROJECT_APPSTREAM_ID} .desktop.in" @ONLY
114
+ )
115
+ configure_file ("${CMAKE_SOURCE_DIR} /data/${PROJECT_APPSTREAM_ID} .appdata.xml.in"
116
+ "${CMAKE_BINARY_DIR} /${PROJECT_APPSTREAM_ID} .appdata.xml" @ONLY
117
+ )
56
118
install (TARGETS ${PROJECT_NAME}
57
119
BUNDLE DESTINATION .
58
120
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
59
121
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
60
122
)
123
+ install (FILES "${CMAKE_BINARY_DIR} /${PROJECT_APPSTREAM_ID} .appdata.xml"
124
+ DESTINATION "${CMAKE_INSTALL_DATADIR} /metainfo"
125
+ )
126
+ install (FILES "${PROJECT_DESKTOP_FILES} "
127
+ DESTINATION "${CMAKE_INSTALL_DATADIR} /applications"
128
+ )
129
+ install (FILES "${CMAKE_BINARY_DIR} /${PROJECT_APPSTREAM_ID} .svg"
130
+ # Don't use PROJECT_ICON_SYSTEM_PATH here which is absolute and doesn't take prefixes into account
131
+ DESTINATION "${CMAKE_INSTALL_DATADIR} /icons/hicolor/scalable/apps"
132
+ )
61
133
qt_finalize_executable(${PROJECT_NAME} )
134
+ #===================================================================================================
135
+ # Configuration report
136
+ #===================================================================================================
137
+ message (STATUS "
138
+ Project name: ${PROJECT_NAME}
139
+ Version: ${PROJECT_VERSION}
140
+ Qt version: ${QT_VERSION}
141
+ Build type: ${CMAKE_BUILD_TYPE}
142
+ Install prefix: ${CMAKE_INSTALL_PREFIX}
143
+ Update translations before build: ${PROJECT_TRANSLATIONS_UPDATE}
144
+ " )
0 commit comments