-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathCMakeLists.txt
218 lines (182 loc) · 6.68 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
213
214
215
216
217
218
cmake_minimum_required(VERSION 3.12)
project(MarkdownEdit VERSION 1.5.6
DESCRIPTION "Simple program for editing Markdown files"
HOMEPAGE_URL "https://tim-gromeyer.github.io/MarkdownEdit"
LANGUAGES C CXX)
set(PROJECT_CONTACT "sakul8826@gmail.com")
set(CMAKE_INCLUDE_CURRENT_DIR ON)
set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)
set(CMAKE_AUTOUIC_SEARCH_PATHS ${CMAKE_SOURCE_DIR}/ui)
# Require c++17
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# Find Qt
find_package(QT NAMES Qt5 Qt6 REQUIRED COMPONENTS Widgets PrintSupport Svg)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Widgets PrintSupport Svg)
find_package(Qt${QT_VERSION_MAJOR} OPTIONAL_COMPONENTS Concurrent)
# Set default build type
if (NOT CMAKE_BUILD_TYPE)
message(STATUS "Build type not specified. Release is used.")
set(CMAKE_BUILD_TYPE "Release")
else()
message(STATUS "Build type: ${CMAKE_BUILD_TYPE}")
endif()
# Link to pthread (Wasm)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread")
# Improve performance
if(CMAKE_BUILD_TYPE STREQUAL "Release")
string(REPLACE "-O2" "-O3" CMAKE_C_FLAGS "${CMAKE_C_FLAGS}")
string(REPLACE "-O2" "-O3" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}")
endif()
# Spell checker will not work with cross compilation
if(CMAKE_CROSSCOMPILING)
message(STATUS "Cross compilation. The spell checker is not available!")
option(DISABLE_SPELLCHECK "Turn off spell checker" ON)
else()
option(DISABLE_SPELLCHECK "Turn off spell checker" OFF)
endif()
# For flatpak. Obsolete
option(FLATPAK "Build for flatpak" OFF)
if(FLATPAK)
find_package(ECM 5.86.0 REQUIRED NO_MODULE)
set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
include(KDEInstallDirs)
include(KDECMakeSettings)
add_compile_definitions(FLATPAK)
install(FILES include/flatpak/appdata.xml DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/metainfo/)
endif()
# Project files
set(TS_FILES translations/MarkdownEdit_de_DE.ts)
set(RC_FILES
ressources/icons.qrc
ressources/ressources.qrc
translations/translations.qrc
)
set(PROJECT_SOURCES
${RC_FILES}
common.h
src/highlighter.cpp src/highlighter.h
src/main.cpp
src/mainwindow.cpp src/mainwindow.h
src/markdowndialog.cpp src/markdowndialog.h
src/markdowneditor.cpp src/markdowneditor.h
src/markdownparser.cpp src/markdownparser.h
src/previewwidget.cpp src/previewwidget.h
src/settings.cpp src/settings.h
src/spellchecker.cpp src/spellchecker.h
src/tableofcontents.cpp src/tableofcontents.h
src/tablewidget.cpp src/tablewidget.h
src/utils.cpp src/utils.h
ui/mainwindow.ui
)
# Include windows icon
if(WIN32)
list(APPEND PROJECT_SOURCES ressources/logo/Icon.rc)
endif()
# Include 3rdparty libs and translations
include(3rdparty/CMakeLists.txt)
include(cmake/Translation.cmake)
add_translations(TS ${TS_FILES})
# Build it!
if(${QT_VERSION_MAJOR} GREATER_EQUAL 6)
qt_add_executable(markdownedit
MANUAL_FINALIZATION
${PROJECT_SOURCES}
${TS}
)
# Dir for android settings
set_property(TARGET markdownedit APPEND PROPERTY QT_ANDROID_PACKAGE_SOURCE_DIR
${CMAKE_CURRENT_SOURCE_DIR}/android)
else()
if(ANDROID)
add_library(markdownedit SHARED
${PROJECT_SOURCES}
${TS}
)
set(ANDROID_PACKAGE_SOURCE_DIR "${CMAKE_CURRENT_SOURCE_DIR}/android")
else()
add_executable(markdownedit
${PROJECT_SOURCES}
${TS}
)
endif()
endif()
# Find nuspell
if(DISABLE_SPELLCHECK)
target_compile_definitions(markdownedit PUBLIC NO_SPELLCHECK)
else()
include(cmake/FindNuspell.cmake)
endif()
if(Qt${QT_VERSION_MAJOR}Concurrent_FOUND)
add_compile_definitions(CONCURRENT)
list(APPEND 3rdparty Qt${QT_VERSION_MAJOR}::Concurrent)
endif()
target_include_directories(markdownedit PRIVATE ${CMAKE_SOURCE_DIR}/src)
target_link_libraries(markdownedit PRIVATE
Qt${QT_VERSION_MAJOR}::Widgets
Qt${QT_VERSION_MAJOR}::PrintSupport
Qt${QT_VERSION_MAJOR}::Svg
${3rdparty}
)
target_compile_definitions(markdownedit PUBLIC
APP_VERSION="${PROJECT_VERSION}"
CHECK_MARKDOWN
HOMEPAGE="${PROJECT_HOMEPAGE_URL}"
QT_NO_CAST_FROM_ASCII
QT_NO_CAST_FROM_BYTEARRAY
QT_NO_CAST_TO_ASCII
QT_NO_FOREACH
QT_NO_KEYWORDS
QT_NO_NARROWING_CONVERSIONS_IN_CONNECT
QT_NO_URL_CAST_FROM_STRING
QT_STRICT_ITERATORS
QT_USE_QSTRINGBUILDER
QT${QT_VERSION_MAJOR}=1
)
set_target_properties(markdownedit PROPERTIES
MACOSX_BUNDLE_GUI_IDENTIFIER org.qtproject.markdownedit
MACOSX_BUNDLE_BUNDLE_VERSION ${PROJECT_VERSION}
MACOSX_BUNDLE_SHORT_VERSION_STRING ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}
MACOSX_BUNDLE TRUE
WIN32_EXECUTABLE TRUE
)
if(QT_VERSION_MAJOR EQUAL 6)
qt_finalize_executable(markdownedit)
endif()
# Packaging
include(GNUInstallDirs)
# Installing icons
message(STATUS "Installing icons")
install(FILES ressources/logo/16-apps-MarkdownEdit.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/16x16/apps/ RENAME MarkdownEdit.png)
install(FILES ressources/logo/24-apps-MarkdownEdit.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/24x24/apps/ RENAME MarkdownEdit.png)
install(FILES ressources/logo/32-apps-MarkdownEdit.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/32x32/apps/ RENAME MarkdownEdit.png)
install(FILES ressources/logo/48-apps-MarkdownEdit.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/48x48/apps/ RENAME MarkdownEdit.png)
install(FILES ressources/logo/64-apps-MarkdownEdit.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/64x64/apps/ RENAME MarkdownEdit.png)
install(FILES ressources/logo/128-apps-MarkdownEdit.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/128x128/apps/ RENAME MarkdownEdit.png)
install(FILES ressources/logo/256-apps-MarkdownEdit.png DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/icons/hicolor/256x256/apps/ RENAME MarkdownEdit.png)
install(TARGETS markdownedit
BUNDLE DESTINATION .
LIBRARY DESTINATION . # For android
RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)
# Desktop shortcut for linux
if(UNIX AND NOT EXMSCRIPTEN AND NOT ANDROID)
install(FILES include/io.github.tim_gromeyer.MarkdownEdit.desktop
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/applications)
endif()
# Icon for windows
if(WIN32)
install(FILES ressources/logo/Icon.ico
DESTINATION .)
endif()
if(${QT_VERSION} GREATER_EQUAL 6.3 AND WIN32)
qt_generate_deploy_app_script(
TARGET markdownedit
FILENAME_VARIABLE deploy_script
NO_UNSUPPORTED_PLATFORM_ERROR
)
install(SCRIPT ${deploy_script})
endif()
include(cmake/Packaging.cmake)