-
Notifications
You must be signed in to change notification settings - Fork 10
/
Copy pathCMakeLists.txt
162 lines (150 loc) · 6.36 KB
/
CMakeLists.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
cmake_minimum_required(VERSION 3.5)
project(labwc-tweaks
VERSION 0.1.0
LANGUAGES C CXX
)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_CXX_EXTENSIONS OFF)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_INCLUDE_CURRENT_DIR ON)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
include(Config.cmake)
# QtCreator doesn't use the system locale and I see no way to prefix with LANG=XYZ.UTF-8 the command,
# so enabling these 2 settings we can test any language, see initLocale() in main.cpp.
set(PROJECT_TRANSLATION_TEST_ENABLED 0 CACHE STRING "Whether to enable translation testing [default: 0]")
set(PROJECT_TRANSLATION_TEST_LANGUAGE "en" CACHE STRING "Country code of language to test in IDE [default: en]")
set(PROJECT_QT_VERSION 6 CACHE STRING "Qt version to use [Default: 6]")
option(PROJECT_TRANSLATIONS_UPDATE "Update source translations [default: OFF]" OFF)
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fsanitize=address -fsanitize=undefined")
#set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fsanitize=address -fsanitize=undefined")
find_package(QT NAMES Qt${PROJECT_QT_VERSION})
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets LinguistTools)
find_package(PkgConfig REQUIRED)
pkg_search_module(GLIB REQUIRED glib-2.0)
find_package(LibXml2 REQUIRED)
set(PROJECT_SOURCES
src/main.cpp
src/maindialog.ui
src/maindialog.cpp
src/maindialog.h
src/layoutmodel.cpp
src/layoutmodel.h
src/environment.cpp
src/environment.h
src/theme.c
src/theme.h
src/xml.c
src/xml.h
)
set(PROJECT_OTHER_FILES
.github/workflows/build.yml
README.md
)
file(GLOB PROJECT_TRANSLATION_SOURCES "${PROJECT_TRANSLATIONS_DIR}/*")
source_group("" FILES
${PROJECT_SOURCES}
${PROJECT_TRANSLATION_SOURCES}
)
#===================================================================================================
# Translations
#===================================================================================================
include(GNUInstallDirs)
include(LXQtTranslate)
lxqt_translate_ts(PROJECT_QM_FILES
SOURCES ${PROJECT_SOURCES}
TEMPLATE ${PROJECT_ID}
TRANSLATION_DIR "${PROJECT_TRANSLATIONS_DIR}"
UPDATE_TRANSLATIONS ${PROJECT_TRANSLATIONS_UPDATE}
INSTALL_DIR "${CMAKE_INSTALL_DATADIR}/${PROJECT_ID}/translations"
)
lxqt_translate_desktop(PROJECT_DESKTOP_FILES
SOURCES "${CMAKE_BINARY_DIR}/${PROJECT_APPSTREAM_ID}.desktop.in"
TRANSLATION_DIR "${PROJECT_TRANSLATIONS_DIR}"
USE_YAML
)
#===================================================================================================
# Tests
#===================================================================================================
include(CTest)
add_executable(t1000 tests/t1000-add-xpath-node.c tests/tap.c src/xml.c)
target_link_libraries(t1000 PRIVATE ${GLIB_LDFLAGS} ${LIBXML2_LIBRARIES})
target_include_directories(t1000 PRIVATE ${GLIB_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIR})
add_test(t1000 t1000)
add_executable(t1001 tests/t1001-nodenames.c tests/tap.c)
target_link_libraries(t1001 PRIVATE ${GLIB_LDFLAGS} ${LIBXML2_LIBRARIES})
target_include_directories(t1001 PRIVATE ${GLIB_INCLUDE_DIRS} ${LIBXML2_INCLUDE_DIR})
add_test(t1001 t1001)
#===================================================================================================
# Application
#===================================================================================================
qt_add_executable(${PROJECT_NAME} MANUAL_FINALIZATION
${PROJECT_SOURCES}
${PROJECT_DESKTOP_FILES}
${PROJECT_OTHER_FILES}
${PROJECT_QM_FILES}
${PROJECT_TRANSLATION_SOURCES}
)
set(PROJECT_ICON_SYSTEM_PATH "${CMAKE_INSTALL_FULL_DATADIR}/icons/hicolor/scalable/apps")
file(COPY_FILE "${CMAKE_SOURCE_DIR}/data/${PROJECT_APPSTREAM_ID}.svg"
"${CMAKE_BINARY_DIR}/${PROJECT_APPSTREAM_ID}.svg"
)
target_compile_definitions(${PROJECT_NAME} PRIVATE
APPLICATION_NAME="${PROJECT_NAME}"
APPLICATION_VERSION="${PROJECT_VERSION}"
PROJECT_ID="${PROJECT_ID}"
PROJECT_APPSTREAM_ID="${PROJECT_APPSTREAM_ID}"
PROJECT_DATA_DIR="${CMAKE_INSTALL_FULL_DATADIR}/${PROJECT_NAME}"
PROJECT_ICON_SYSTEM_PATH="${PROJECT_ICON_SYSTEM_PATH}"
PROJECT_TRANSLATION_TEST_ENABLED=${PROJECT_TRANSLATION_TEST_ENABLED}
PROJECT_TRANSLATION_TEST_LANGUAGE="${PROJECT_TRANSLATION_TEST_LANGUAGE}"
)
target_include_directories(${PROJECT_NAME} PRIVATE
${GLIB_INCLUDE_DIRS}
${LIBXML2_INCLUDE_DIR}
src
)
target_link_libraries(${PROJECT_NAME} PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
${GLIB_LDFLAGS}
${LIBXML2_LIBRARIES}
)
#target_link_options(${PROJECT_NAME} BEFORE PUBLIC -fsanitize=undefined PUBLIC -fsanitize=address)
#===================================================================================================
# Installation
#===================================================================================================
configure_file("${CMAKE_SOURCE_DIR}/data/${PROJECT_APPSTREAM_ID}.desktop.in"
"${CMAKE_BINARY_DIR}/${PROJECT_APPSTREAM_ID}.desktop.in" @ONLY
)
configure_file("${CMAKE_SOURCE_DIR}/data/${PROJECT_APPSTREAM_ID}.appdata.xml.in"
"${CMAKE_BINARY_DIR}/${PROJECT_APPSTREAM_ID}.appdata.xml" @ONLY
)
install(TARGETS ${PROJECT_NAME}
BUNDLE DESTINATION .
LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
install(FILES "${CMAKE_BINARY_DIR}/${PROJECT_APPSTREAM_ID}.appdata.xml"
DESTINATION "${CMAKE_INSTALL_DATADIR}/metainfo"
)
install(FILES "${PROJECT_DESKTOP_FILES}"
DESTINATION "${CMAKE_INSTALL_DATADIR}/applications"
)
install(FILES "${CMAKE_BINARY_DIR}/${PROJECT_APPSTREAM_ID}.svg"
# Don't use PROJECT_ICON_SYSTEM_PATH here which is absolute and doesn't take prefixes into account
DESTINATION "${CMAKE_INSTALL_DATADIR}/icons/hicolor/scalable/apps"
)
qt_finalize_executable(${PROJECT_NAME})
#===================================================================================================
# Configuration report
#===================================================================================================
message(STATUS "
Project name: ${PROJECT_NAME}
Version: ${PROJECT_VERSION}
Qt version: ${QT_VERSION}
Build type: ${CMAKE_BUILD_TYPE}
Install prefix: ${CMAKE_INSTALL_PREFIX}
Update translations before build: ${PROJECT_TRANSLATIONS_UPDATE}
")