-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathCMakeLists.txt
More file actions
121 lines (114 loc) · 3.93 KB
/
Copy pathCMakeLists.txt
File metadata and controls
121 lines (114 loc) · 3.93 KB
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
cmake_minimum_required(VERSION 3.24)
project(omasnap VERSION 1.17.0 LANGUAGES C CXX)
include(GNUInstallDirs)
include(CTest)
set(CMAKE_AUTOMOC ON)
find_package(PkgConfig REQUIRED)
find_package(Qt6 6.8 REQUIRED COMPONENTS Concurrent Core Gui Test Widgets)
find_package(LayerShellQt REQUIRED)
pkg_check_modules(WaylandClient REQUIRED IMPORTED_TARGET wayland-client)
find_program(WAYLAND_SCANNER wayland-scanner REQUIRED)
set(PROTOCOL_XMLS
# ext-image-capture-source references this interface even for output-only use.
/usr/share/wayland-protocols/staging/ext-foreign-toplevel-list/ext-foreign-toplevel-list-v1.xml
/usr/share/wayland-protocols/staging/ext-image-capture-source/ext-image-capture-source-v1.xml
/usr/share/wayland-protocols/staging/ext-image-copy-capture/ext-image-copy-capture-v1.xml
)
set(PROTOCOL_SOURCES)
foreach(PROTOCOL_XML IN LISTS PROTOCOL_XMLS)
get_filename_component(PROTOCOL_NAME "${PROTOCOL_XML}" NAME_WE)
set(PROTOCOL_HEADER "${CMAKE_CURRENT_BINARY_DIR}/${PROTOCOL_NAME}-client-protocol.h")
set(PROTOCOL_CODE "${CMAKE_CURRENT_BINARY_DIR}/${PROTOCOL_NAME}-protocol.c")
add_custom_command(
OUTPUT "${PROTOCOL_HEADER}" "${PROTOCOL_CODE}"
COMMAND "${WAYLAND_SCANNER}" client-header "${PROTOCOL_XML}" "${PROTOCOL_HEADER}"
COMMAND "${WAYLAND_SCANNER}" private-code "${PROTOCOL_XML}" "${PROTOCOL_CODE}"
DEPENDS "${PROTOCOL_XML}"
VERBATIM
)
list(APPEND PROTOCOL_SOURCES "${PROTOCOL_HEADER}" "${PROTOCOL_CODE}")
endforeach()
add_library(omasnap-core STATIC
src/cli-path.cpp
src/cli-path.hpp
src/icons.cpp
src/icons.hpp
src/instance-lock.cpp
src/instance-lock.hpp
src/pin-file.cpp
src/pin-file.hpp
src/pin-layout.cpp
src/pin-layout.hpp
src/capture.cpp
src/capture.hpp
src/cut.cpp
src/cut.hpp
src/palette-config.cpp
src/palette-config.hpp
src/eyedropper.cpp
src/eyedropper.hpp
src/surface-capture.cpp
${PROTOCOL_SOURCES}
src/editor.cpp
src/editor.hpp
)
qt_add_resources(omasnap-core "capture-fonts"
PREFIX "/fonts"
BASE "${CMAKE_CURRENT_SOURCE_DIR}/assets"
FILES "${CMAKE_CURRENT_SOURCE_DIR}/assets/Neucha.ttf"
)
target_include_directories(omasnap-core PUBLIC
"${CMAKE_CURRENT_BINARY_DIR}"
"${CMAKE_CURRENT_SOURCE_DIR}/src"
)
target_compile_features(omasnap-core PUBLIC cxx_std_23)
target_compile_options(omasnap-core PRIVATE -Wall -Wextra -Wpedantic)
target_link_libraries(omasnap-core PUBLIC
Qt6::Concurrent
Qt6::Core
Qt6::Gui
Qt6::Widgets
PkgConfig::WaylandClient
)
qt_add_executable(omasnap src/main.cpp src/pin.cpp src/pin.hpp)
target_compile_options(omasnap PRIVATE -Wall -Wextra -Wpedantic)
target_compile_definitions(omasnap PRIVATE OMASNAP_VERSION="${PROJECT_VERSION}")
target_link_libraries(omasnap PRIVATE omasnap-core LayerShellQt::Interface)
if(BUILD_TESTING)
qt_add_executable(omasnap-smoke
tests/editor-smoke.cpp
tests/clipboard-smoke.cpp
tests/clipboard-smoke.hpp
tests/instance-lock-smoke.cpp
tests/instance-lock-smoke.hpp
tests/transform-smoke.cpp
tests/transform-smoke.hpp
tests/cut-smoke.cpp
tests/cut-smoke.hpp
tests/palette-config-smoke.cpp
tests/palette-config-smoke.hpp
tests/surface-capture-smoke.cpp
tests/surface-capture-smoke.hpp
tests/pin-lifecycle-smoke.cpp
tests/pin-lifecycle-smoke.hpp
tests/pin-layout-smoke.cpp
tests/pin-layout-smoke.hpp
)
target_include_directories(omasnap-smoke PRIVATE
"${CMAKE_CURRENT_SOURCE_DIR}/tests"
)
target_compile_options(omasnap-smoke PRIVATE -Wall -Wextra -Wpedantic)
target_link_libraries(omasnap-smoke PRIVATE omasnap-core Qt6::Test)
add_test(NAME omasnap-smoke COMMAND omasnap-smoke "${CMAKE_CURRENT_BINARY_DIR}/omasnap-smoke-output")
set_tests_properties(omasnap-smoke PROPERTIES ENVIRONMENT "QT_QPA_PLATFORM=offscreen")
endif()
install(TARGETS omasnap
RUNTIME DESTINATION "${CMAKE_INSTALL_BINDIR}"
)
install(FILES assets/OFL.txt
DESTINATION "${CMAKE_INSTALL_DATADIR}/licenses/omasnap"
RENAME Neucha-OFL.txt
)
install(FILES omasnap.desktop
DESTINATION "${CMAKE_INSTALL_DATADIR}/applications"
)