@@ -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,55 @@ set(PROJECT_SOURCES
37
46
keyboard-layouts.c
38
47
keyboard-layouts.h
39
48
)
40
- source_group ("" FILES ${PROJECT_SOURCES} )
41
-
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 (LXQtTranslate)
62
+ lxqt_translate_ts(PROJECT_QM_FILES
63
+ SOURCES ${PROJECT_SOURCES}
64
+ TEMPLATE ${PROJECT_ID}
65
+ TRANSLATION_DIR "${PROJECT_TRANSLATIONS_DIR} "
66
+ UPDATE_TRANSLATIONS ${PROJECT_TRANSLATIONS_UPDATE}
67
+ INSTALL_DIR "${CMAKE_INSTALL_DATADIR} /${PROJECT_ID} /translations"
68
+ )
69
+ lxqt_translate_desktop(PROJECT_DESKTOP_FILES
70
+ SOURCES "${CMAKE_BINARY_DIR} /${PROJECT_APPSTREAM_ID} .desktop.in"
71
+ TRANSLATION_DIR "${PROJECT_TRANSLATIONS_DIR} "
72
+ USE_YAML
73
+ )
74
+ #===================================================================================================
75
+ # Application
76
+ #===================================================================================================
42
77
qt_add_executable(${PROJECT_NAME} MANUAL_FINALIZATION
43
78
${PROJECT_SOURCES}
79
+ ${PROJECT_DESKTOP_FILES}
80
+ ${PROJECT_OTHER_FILES}
81
+ ${PROJECT_QM_FILES}
82
+ ${PROJECT_TRANSLATION_SOURCES}
83
+ )
84
+ include (GNUInstallDirs)
85
+ set (PROJECT_ICON_SYSTEM_PATH "${CMAKE_INSTALL_FULL_DATADIR} /icons/hicolor/scalable/apps" )
86
+ file (COPY_FILE "${CMAKE_SOURCE_DIR} /data/${PROJECT_APPSTREAM_ID} .svg"
87
+ "${CMAKE_BINARY_DIR} /${PROJECT_APPSTREAM_ID} .svg"
88
+ )
89
+ target_compile_definitions (${PROJECT_NAME} PRIVATE
90
+ APPLICATION_NAME="${PROJECT_NAME} "
91
+ APPLICATION_VERSION="${PROJECT_VERSION} "
92
+ PROJECT_ID="${PROJECT_ID} "
93
+ PROJECT_APPSTREAM_ID="${PROJECT_APPSTREAM_ID} "
94
+ PROJECT_DATA_DIR="${CMAKE_INSTALL_FULL_DATADIR} /${PROJECT_NAME} "
95
+ PROJECT_ICON_SYSTEM_PATH="${PROJECT_ICON_SYSTEM_PATH} "
96
+ PROJECT_TRANSLATION_TEST_ENABLED=${PROJECT_TRANSLATION_TEST_ENABLED}
97
+ PROJECT_TRANSLATION_TEST_LANGUAGE="${PROJECT_TRANSLATION_TEST_LANGUAGE} "
44
98
)
45
99
target_include_directories (${PROJECT_NAME} PRIVATE ${GLIB_INCLUDE_DIRS} )
46
100
target_include_directories (${PROJECT_NAME} PRIVATE ${LIBXML2_INCLUDE_DIR} )
@@ -51,11 +105,39 @@ target_link_libraries(${PROJECT_NAME} PRIVATE
51
105
${LIBXML2_LIBRARIES}
52
106
)
53
107
#target_link_options(${PROJECT_NAME} BEFORE PUBLIC -fsanitize=undefined PUBLIC -fsanitize=address)
54
-
55
- include (GNUInstallDirs)
108
+ #===================================================================================================
109
+ # Installation
110
+ #===================================================================================================
111
+ configure_file ("${CMAKE_SOURCE_DIR} /data/${PROJECT_APPSTREAM_ID} .desktop.in"
112
+ "${CMAKE_BINARY_DIR} /${PROJECT_APPSTREAM_ID} .desktop.in" @ONLY
113
+ )
114
+ configure_file ("${CMAKE_SOURCE_DIR} /data/${PROJECT_APPSTREAM_ID} .appdata.xml.in"
115
+ "${CMAKE_BINARY_DIR} /${PROJECT_APPSTREAM_ID} .appdata.xml" @ONLY
116
+ )
56
117
install (TARGETS ${PROJECT_NAME}
57
118
BUNDLE DESTINATION .
58
119
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
59
120
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
60
121
)
122
+ install (FILES "${CMAKE_BINARY_DIR} /${PROJECT_APPSTREAM_ID} .appdata.xml"
123
+ DESTINATION "${CMAKE_INSTALL_DATADIR} /metainfo"
124
+ )
125
+ install (FILES "${PROJECT_DESKTOP_FILES} "
126
+ DESTINATION "${CMAKE_INSTALL_DATADIR} /applications"
127
+ )
128
+ install (FILES "${CMAKE_BINARY_DIR} /${PROJECT_APPSTREAM_ID} .svg"
129
+ # Don't use PROJECT_ICON_SYSTEM_PATH here which is absolute and doesn't take prefixes into account
130
+ DESTINATION "${CMAKE_INSTALL_DATADIR} /icons/hicolor/scalable/apps"
131
+ )
61
132
qt_finalize_executable(${PROJECT_NAME} )
133
+ #===================================================================================================
134
+ # Configuration report
135
+ #===================================================================================================
136
+ message (STATUS "
137
+ Project name: ${PROJECT_NAME}
138
+ Version: ${PROJECT_VERSION}
139
+ Qt version: ${QT_VERSION}
140
+ Build type: ${CMAKE_BUILD_TYPE}
141
+ Install prefix: ${CMAKE_INSTALL_PREFIX}
142
+ Update translations before build: ${PROJECT_TRANSLATIONS_UPDATE}
143
+ " )
0 commit comments