-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathCMakeLists.txt
212 lines (170 loc) · 5.59 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
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
cmake_minimum_required(VERSION 3.21)
include(cmake/GetVersionFromGit.cmake)
get_version_from_git(
SEMANTIC NAUTOGRAF_SEMVER
DESCRIBE NAUTOGRAF_VERSION_DESCRIBE
)
project(nautograf LANGUAGES CXX VERSION ${NAUTOGRAF_SEMVER})
include(cmake/InstallLicense.cmake)
install_license(FILE ${CMAKE_CURRENT_SOURCE_DIR}/LICENSE)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.txt.in
${CMAKE_CURRENT_BINARY_DIR}/version.txt @ONLY)
configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.h.in
${CMAKE_CURRENT_BINARY_DIR}/version.h @ONLY)
set(CMAKE_CXX_STANDARD 20)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
find_package(Qt6
COMPONENTS
REQUIRED Gui Core Network Concurrent Quick Svg QuickControls2 ShaderTools
CMAKE_FIND_ROOT_PATH_BOTH
)
find_program(IMAGEMAGICK
NAMES magick convert
)
find_program(RSVG-CONVERT
NAMES rsvg-convert
)
find_package(UnixCommands)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
option(USE_XDG_FILE_DIALOG "Use xdg-file-dialog library when user selects chart catalog" OFF)
endif()
add_subdirectory(external)
add_subdirectory(src/tilefactory)
option(RESOURCE_DEV "Load QML from file system not from Qt resource" "")
if(${RESOURCE_DEV})
set(SYMBOLS_DIR "${CMAKE_SOURCE_DIR}/symbols")
else()
qt_add_resources(QML_RESOURCES qml/qml.qrc)
qt_add_resources(SYMBOL_RESOURCES symbols/symbols.qrc)
set(SYMBOLS_DIR ":/symbols")
endif()
add_subdirectory(src/scene)
if (NOT ${BASH} STREQUAL "BASH-NOTFOUND"
AND NOT ${IMAGEMAGICK} STREQUAL "IMAGEMAGICK-NOTFOUND"
AND NOT ${RSVG-CONVERT} STREQUAL "RSVG-CONVERT-NOTFOUND")
configure_file(
icon.rc.in
${CMAKE_BINARY_DIR}/icon.rc
)
set(ICON_GENERATED TRUE)
set(APP_ICON_RESOURCE_WINDOWS "${CMAKE_BINARY_DIR}/icon.rc")
add_custom_command(
OUTPUT ${CMAKE_BINARY_DIR}/icon.ico
DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/logo.svg ${CMAKE_CURRENT_SOURCE_DIR}/create_icon.sh
COMMAND ${BASH} "${CMAKE_CURRENT_SOURCE_DIR}/create_icon.sh" ${CMAKE_CURRENT_SOURCE_DIR}/logo.svg ${CMAKE_BINARY_DIR}/icon.ico "${IMAGEMAGICK}"
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
)
else()
message(WARNING "Cannot create application icon. Missing bash or imagemagick")
endif()
add_executable(nautograf WIN32
src/main.cpp
src/licenses.h
src/licenses.cpp
src/mercatorwrapper.h
src/maptile.h
src/maptile.cpp
src/maptilemodel.h
src/maptilemodel.cpp
src/chartmodel.cpp
src/chartmodel.h
src/tileinfobackend.cpp
src/tileinfobackend.h
src/usersettings.cpp
src/usersettings.h
${QML_RESOURCES}
${SYMBOL_RESOURCES}
${APP_ICON_RESOURCE_WINDOWS}
)
if(ICON_GENERATED)
qt_add_resources(nautograf "icon"
PREFIX "/"
BASE ${CMAKE_BINARY_DIR}
FILES ${CMAKE_BINARY_DIR}/icon.ico
)
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
install(
FILES
${CMAKE_CURRENT_SOURCE_DIR}/logo.svg
DESTINATION
"share/icons/hicolor/scalable/apps/"
RENAME
${CMAKE_PROJECT_NAME}.svg
)
endif()
endif()
option(USE_OEXSERVERD "Use oexserverd to decrypt chart catalogs" ON)
if(${USE_OEXSERVERD})
target_compile_definitions(nautograf PRIVATE USE_OEXSERVERD)
endif()
target_include_directories(nautograf PRIVATE ${CMAKE_CURRENT_BINARY_DIR}/src)
target_include_directories(nautograf PRIVATE ${CMAKE_CURRENT_BINARY_DIR})
set_target_properties(nautograf PROPERTIES AUTOMOC TRUE)
if(${RESOURCE_DEV})
target_compile_definitions(nautograf PRIVATE QML_DIR="${CMAKE_SOURCE_DIR}/qml")
endif()
target_include_directories(nautograf PRIVATE src)
target_link_libraries(nautograf PRIVATE
Qt6::Core
Qt6::Quick
Qt6::QuickControls2
Qt6::Concurrent
Qt6::Svg
Qt::Gui
tilefactory
scene
)
install(
TARGETS nautograf scene tilefactory oesenc
RUNTIME_DEPENDENCY_SET dependency_set
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT Runtime
)
if(${USE_XDG_FILE_DIALOG})
target_compile_definitions(nautograf PRIVATE USE_XDG_FILE_DIALOG)
target_link_libraries(nautograf PRIVATE xdg-file-dialog)
install(
TARGETS xdg-file-dialog
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR} COMPONENT Runtime
)
endif()
install(
IMPORTED_RUNTIME_ARTIFACTS nautograf
RUNTIME_DEPENDENCY_SET dependency_set
)
install(
RUNTIME_DEPENDENCY_SET dependency_set
PRE_INCLUDE_REGEXES "tinyxml2" "freetype" "bz2" "brotli" "libpng" "zlib"
PRE_EXCLUDE_REGEXES ".*"
# tinyxml exists as runtime dependency for more than one target. Exclude
# one of them to avoid conflict during install.
POST_EXCLUDE_REGEXES ".*/scene/.*tinyxml2.*"
)
if(WIN32)
find_program(WINDEPLOYQT windeployqt HINTS "${_qt_bin_dir}")
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/AppxManifest.xml.in"
"${CMAKE_CURRENT_BINARY_DIR}/AppxManifest.xml")
configure_file(
"${CMAKE_CURRENT_SOURCE_DIR}/deploy-qt-windows.cmake.in"
"${CMAKE_CURRENT_BINARY_DIR}/deploy-qt-windows.cmake"
@ONLY)
set(CPACK_PRE_BUILD_SCRIPTS
${CMAKE_CURRENT_BINARY_DIR}/deploy-qt-windows.cmake
)
install(
FILES ${CMAKE_CURRENT_BINARY_DIR}/AppxManifest.xml
DESTINATION .
)
# Replace this if statement with a more explicit relation between the variable
# beeing checked and the existence of the PNG files.
if(ICON_GENERATED)
install(
FILES
${CMAKE_CURRENT_BINARY_DIR}/logo_44.png
${CMAKE_CURRENT_BINARY_DIR}/logo_150.png
DESTINATION .
)
endif()
endif()
set(CPACK_GENERATOR "ZIP")
include(CPack)