1diff --git a/.github/workflows/push-master.yml b/.github/workflows/push-master.yml
2index 6007f64..a98a23c 100644
3--- a/.github/workflows/push-master.yml
4+++ b/.github/workflows/push-master.yml
5@@ -2,7 +2,7 @@ name: HyperHDR CI Build
6
7 on:
8 push:
9-# pull_request:
10+ pull_request:
11
12 env:
13 USE_CACHE: ${{ vars.USE_CACHE && vars.USE_CACHE || true }}
14@@ -109,6 +109,7 @@ jobs:
15
16 - name: Clear branch ccache storage
17 uses: yumemi-inc/clean-cache-action@v1
18+ continue-on-error: true
19 with:
20 ref: ${{ github.event.ref }}
21 key: ${{ matrix.linuxVersion }}-${{ matrix.dockerImage }}-ccache-
22@@ -193,6 +194,7 @@ jobs:
23
24 - name: Clear branch ccache storage
25 uses: yumemi-inc/clean-cache-action@v1
26+ continue-on-error: true
27 with:
28 ref: ${{ github.event.ref }}
29 key: macOS-ccache-${{ matrix.NICE_NAME }}
30@@ -284,6 +286,7 @@ jobs:
31
32 - name: Clear branch ccache storage
33 uses: yumemi-inc/clean-cache-action@v1
34+ continue-on-error: true
35 with:
36 ref: ${{ github.event.ref }}
37 key: ${{ runner.os }}-ccache
38diff --git a/BUILDING.md b/BUILDING.md
39index 0347079..759cd6a 100644
40--- a/BUILDING.md
41+++ b/BUILDING.md
42@@ -44,6 +44,10 @@ Use -D prefix when configuring the build.
43 * USE_CCACHE_CACHING = ON | OFF, enable CCache support if available
44 * USE_SYSTEM_MQTT_LIBS = ON | OFF, prefer system qMQTT libs
45 * USE_SYSTEM_FLATBUFFERS_LIBS = ON | OFF, prefer system Flatbuffers libs
46+ * USE_SYSTEM_SDBUS_CPP_LIBS = ON | OFF, prefer system sdbus_c++ libs
47+ * USE_SYSTEM_LUNASVG_LIBS = ON | OFF, prefer system lunasvg libs
48+ * USE_SYSTEM_NANOPB_LIBS = ON | OFF, prefer system nanopb libs
49+ * USE_SYSTEM_STB_LIBS = ON | OFF, prefer system stb libs
50 * USE_STATIC_QT_PLUGINS = ON | OFF, embed static QT-plugins into the application
51 * USE_STANDARD_INSTALLER_NAME = ON | OFF, use standard Linux package naming
52
53diff --git a/CMakeLists.txt b/CMakeLists.txt
54index b918a81..fbf8d6b 100644
55--- a/CMakeLists.txt
56+++ b/CMakeLists.txt
57@@ -34,6 +34,10 @@ SET ( DEFAULT_PROTOBUF ON )
58 SET ( DEFAULT_WS281XPWM OFF )
59 SET ( DEFAULT_USE_SYSTEM_FLATBUFFERS_LIBS ON )
60 SET ( DEFAULT_USE_SYSTEM_MQTT_LIBS OFF )
61+SET ( DEFAULT_USE_SYSTEM_SDBUS_CPP_LIBS OFF )
62+SET ( DEFAULT_USE_SYSTEM_LUNASVG_LIBS OFF )
63+SET ( DEFAULT_USE_SYSTEM_NANOPB_LIBS OFF )
64+SET ( DEFAULT_USE_SYSTEM_STB_LIBS OFF )
65 SET ( DEFAULT_MF OFF )
66 SET ( DEFAULT_DX OFF )
67 SET ( DEFAULT_AVF OFF )
68@@ -509,6 +513,18 @@ colorMe("USE_SYSTEM_MQTT_LIBS = " ${USE_SYSTEM_MQTT_LIBS})
69 option(USE_SYSTEM_FLATBUFFERS_LIBS "Use system flatbuffers libs" ${DEFAULT_USE_SYSTEM_FLATBUFFERS_LIBS})
70 colorMe("USE_SYSTEM_FLATBUFFERS_LIBS = " ${USE_SYSTEM_FLATBUFFERS_LIBS})
71
72+option(USE_SYSTEM_SDBUS_CPP_LIBS "Use system sdbus-c++ libs" ${DEFAULT_USE_SYSTEM_SDBUS_CPP_LIBS})
73+colorMe("USE_SYSTEM_SDBUS_CPP_LIBS = " ${USE_SYSTEM_SDBUS_CPP_LIBS})
74+
75+option(USE_SYSTEM_LUNASVG_LIBS "Use system lunasvg libs" ${DEFAULT_USE_SYSTEM_LUNASVG_LIBS})
76+colorMe("USE_SYSTEM_LUNASVG_LIBS = " ${USE_SYSTEM_LUNASVG_LIBS})
77+
78+option(USE_SYSTEM_NANOPB_LIBS "Use system nanopb libs" ${DEFAULT_USE_SYSTEM_NANOPB_LIBS})
79+colorMe("USE_SYSTEM_NANOPB_LIBS = " ${USE_SYSTEM_NANOPB_LIBS})
80+
81+option(USE_SYSTEM_STB_LIBS "Use system stb libs" ${DEFAULT_USE_SYSTEM_STB_LIBS})
82+colorMe("USE_SYSTEM_STB_LIBS = " ${USE_SYSTEM_STB_LIBS})
83+
84 option(USE_STATIC_QT_PLUGINS "Enable static QT plugins" ${DEFAULT_STATIC_QT_PLUGINS})
85 colorMe("USE_STATIC_QT_PLUGINS = " ${USE_STATIC_QT_PLUGINS})
86
87diff --git a/external/CMakeLists.txt b/external/CMakeLists.txt
88index b4d23ad..38acea2 100644
89--- a/external/CMakeLists.txt
90+++ b/external/CMakeLists.txt
91@@ -38,7 +38,7 @@ set_target_properties(sqlite3 PROPERTIES
92 target_compile_definitions(sqlite3 PUBLIC
93 SQLITE_THREADSAFE=2
94 SQLITE_DEFAULT_MEMSTATUS=0
95- SQLITE_DEFAULT_SYNCHRONOUS=3
96+ SQLITE_DEFAULT_SYNCHRONOUS=3
97 SQLITE_OMIT_AUTHORIZATION
98 SQLITE_OMIT_DEPRECATED
99 )
100@@ -47,23 +47,32 @@ target_compile_definitions(sqlite3 PUBLIC
101 # Protobuf-nanopb
102 #=============================================================================
103
104-set(PROTOBUF-NANOPB-SOURCES
105- ${CMAKE_CURRENT_SOURCE_DIR}/nanopb/pb.h
106- ${CMAKE_CURRENT_SOURCE_DIR}/nanopb/pb_common.h
107- ${CMAKE_CURRENT_SOURCE_DIR}/nanopb/pb_common.c
108- ${CMAKE_CURRENT_SOURCE_DIR}/nanopb/pb_encode.h
109- ${CMAKE_CURRENT_SOURCE_DIR}/nanopb/pb_encode.c
110- ${CMAKE_CURRENT_SOURCE_DIR}/nanopb/pb_decode.h
111- ${CMAKE_CURRENT_SOURCE_DIR}/nanopb/pb_decode.c)
112-
113-add_library(protobuf-nanopb OBJECT ${PROTOBUF-NANOPB-SOURCES})
114-set_target_properties(protobuf-nanopb PROPERTIES OUTPUT_NAME protobuf-nanopb)
115-install(TARGETS protobuf-nanopb EXPORT nanopb-targets
116- ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
117+if (USE_SYSTEM_NANOPB_LIBS)
118+ find_package(nanopb)
119+ if (NOT nanopb_FOUND)
120+ message(WARNING "Could NOT find nanopb system libraries. Fallback to nanopb submodule.")
121+ endif()
122+endif()
123
124-target_include_directories(protobuf-nanopb INTERFACE
125- $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/nanopb>
126- $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
127+if (NOT USE_SYSTEM_NANOPB_LIBS OR NOT nanopb_FOUND)
128+ set(PROTOBUF-NANOPB-SOURCES
129+ ${CMAKE_CURRENT_SOURCE_DIR}/nanopb/pb.h
130+ ${CMAKE_CURRENT_SOURCE_DIR}/nanopb/pb_common.h
131+ ${CMAKE_CURRENT_SOURCE_DIR}/nanopb/pb_common.c
132+ ${CMAKE_CURRENT_SOURCE_DIR}/nanopb/pb_encode.h
133+ ${CMAKE_CURRENT_SOURCE_DIR}/nanopb/pb_encode.c
134+ ${CMAKE_CURRENT_SOURCE_DIR}/nanopb/pb_decode.h
135+ ${CMAKE_CURRENT_SOURCE_DIR}/nanopb/pb_decode.c)
136+
137+ add_library(protobuf-nanopb OBJECT ${PROTOBUF-NANOPB-SOURCES})
138+ set_target_properties(protobuf-nanopb PROPERTIES OUTPUT_NAME protobuf-nanopb)
139+ install(TARGETS protobuf-nanopb EXPORT nanopb-targets
140+ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR})
141+
142+ target_include_directories(protobuf-nanopb INTERFACE
143+ $<INSTALL_INTERFACE:${CMAKE_INSTALL_INCLUDEDIR}/nanopb>
144+ $<BUILD_INTERFACE:${CMAKE_CURRENT_SOURCE_DIR}>)
145+endif()
146
147 #=============================================================================
148 # RPi ws281x
149@@ -75,7 +84,7 @@ if(ENABLE_WS281XPWM)
150 string(REPLACE "configure_file(version.h.in version.h)" [=[configure_file(${CMAKE_CURRENT_SOURCE_DIR}/version.h.in ${CMAKE_CURRENT_SOURCE_DIR}/version.h)]=] FILE_CONTENTS "${FILE_CONTENTS}")
151 file(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/rpi_ws281x/CMakeLists.txt" "${FILE_CONTENTS}")
152
153- add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/rpi_ws281x)
154+ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/rpi_ws281x)
155 endif()
156
157 #=============================================================================
158@@ -90,11 +99,22 @@ target_include_directories(linalg INTERFACE "${CMAKE_CURRENT_SOURCE_DIR}/linalg"
159 # LUNASVG
160 #=============================================================================
161
162-
163 set(no_dev_warnings_backup "$CACHE{CMAKE_WARN_DEPRECATED}")
164 set(CMAKE_WARN_DEPRECATED OFF CACHE INTERNAL "" FORCE)
165-add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/lunasvg)
166-set_target_properties(lunasvg PROPERTIES POSITION_INDEPENDENT_CODE ON)
167+
168+if (USE_SYSTEM_LUNASVG_LIBS)
169+ find_package(lunasvg GLOBAL)
170+ if (NOT lunasvg_FOUND)
171+ message(WARNING "Could NOT find lunasvg system libraries. Fallback to lunasvg submodule.")
172+ endif()
173+endif()
174+
175+if (NOT USE_SYSTEM_LUNASVG_LIBS OR NOT lunasvg_FOUND)
176+ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/lunasvg)
177+ set_target_properties(lunasvg PROPERTIES POSITION_INDEPENDENT_CODE ON)
178+ set_target_properties(plutovg PROPERTIES POSITION_INDEPENDENT_CODE ON)
179+endif()
180+
181 set(CMAKE_WARN_DEPRECATED ${no_dev_warnings_backup} CACHE INTERNAL "" FORCE)
182
183 #=============================================================================
184@@ -125,7 +145,7 @@ if (NOT USE_SYSTEM_FLATBUFFERS_LIBS OR CMAKE_CROSSCOMPILING)
185 cmake_policy(PUSH)
186
187 set(CMAKE_POLICY_DEFAULT_CMP0071 NEW)
188- set(FLATBUFFERS_BUILD_TESTS OFF CACHE BOOL "")
189+ set(FLATBUFFERS_BUILD_TESTS OFF CACHE BOOL "")
190
191 if (NOT CMAKE_CROSSCOMPILING AND USE_PRECOMPILED_HEADERS)
192 set(FLATBUFFERS_ENABLE_PCH ON CACHE BOOL "")
193@@ -142,7 +162,7 @@ if (NOT USE_SYSTEM_FLATBUFFERS_LIBS OR CMAKE_CROSSCOMPILING)
194 unset(FLATBUFFERS_FLATC_EXECUTABLE)
195 set(FLATBUFFERS_BUILD_FLATC OFF CACHE BOOL "")
196 set(FLATBUFFERS_BUILD_FLATHASH OFF CACHE BOOL "")
197- set(FLATBUFFERS_HOST_FLATBUFFERS_DIR ${CMAKE_CURRENT_BINARY_DIR}/host_flatc)
198+ set(FLATBUFFERS_HOST_FLATBUFFERS_DIR ${CMAKE_CURRENT_BINARY_DIR}/host_flatc)
199 file(MAKE_DIRECTORY ${FLATBUFFERS_HOST_FLATBUFFERS_DIR})
200
201 EXECUTE_PROCESS ( WORKING_DIRECTORY ${FLATBUFFERS_HOST_FLATBUFFERS_DIR} RESULT_VARIABLE EXEC_RES
202@@ -168,7 +188,7 @@ if (NOT USE_SYSTEM_FLATBUFFERS_LIBS OR CMAKE_CROSSCOMPILING)
203 set(FLATBUFFERS_FLATC_EXECUTABLE "$<TARGET_FILE:flatc>")
204 else()
205 message( STATUS "Using host flatc compiler: ${FLATBUFFERS_FLATC_EXECUTABLE}")
206- endif()
207+ endif()
208
209 cmake_policy(POP)
210 endif()
211@@ -177,7 +197,7 @@ set(FLATBUFFERS_FLATC_EXECUTABLE ${FLATBUFFERS_FLATC_EXECUTABLE} PARENT_SCOPE)
212 set(FLATBUFFERS_INCLUDE_DIRS ${FLATBUFFERS_INCLUDE_DIRS} PARENT_SCOPE)
213 include_directories(${FLATBUFFERS_INCLUDE_DIRS})
214
215-if (FLATBUFFERS_INCLUDE_DIRS AND EXISTS "${FLATBUFFERS_INCLUDE_DIRS}/../package.json")
216+if (FLATBUFFERS_INCLUDE_DIRS AND EXISTS "${FLATBUFFERS_INCLUDE_DIRS}/../package.json")
217 file(STRINGS "${FLATBUFFERS_INCLUDE_DIRS}/../package.json" _FLATBUFFERS_VERSION_STRING REGEX "^[ \t\r\n]+\"version\":[ \t\r\n]+\"[0-9]+.[0-9]+.[0-9]+\",")
218 string(REGEX REPLACE "^[ \t\r\n]+\"version\":[ \t\r\n]+\"([0-9]+.[0-9]+.[0-9]+)\"," "\\1" FLATBUFFERS_PARSE_VERSION "${_FLATBUFFERS_VERSION_STRING}")
219 message(STATUS "Using flatbuffers libraries version: \"${FLATBUFFERS_PARSE_VERSION}\"")
220@@ -220,7 +240,7 @@ if ( ENABLE_MQTT )
221 # HyperHDR workaround for fixed Qt5 version
222 file(READ "${CMAKE_CURRENT_SOURCE_DIR}/qmqtt/CMakeLists.txt" FILE_CONTENTS)
223 string(REPLACE "Qt5" "Qt${Qt_VERSION}" FILE_CONTENTS "${FILE_CONTENTS}")
224- string(REPLACE "find_package" "#find_package" FILE_CONTENTS "${FILE_CONTENTS}")
225+ string(REPLACE "find_package" "#find_package" FILE_CONTENTS "${FILE_CONTENTS}")
226 file(WRITE "${CMAKE_CURRENT_SOURCE_DIR}/qmqtt/CMakeLists.txt" "${FILE_CONTENTS}")
227
228 cmake_policy(PUSH)
229@@ -261,17 +281,41 @@ ENDIF()
230 #=============================================================================
231
232 if (UNIX AND NOT APPLE AND (ENABLE_POWER_MANAGEMENT OR ENABLE_PIPEWIRE))
233- set(SDBUSCPP_BUILD_DOCS OFF CACHE BOOL "No doc")
234- add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sdbus-cpp)
235- set_target_properties(sdbus-c++-objlib PROPERTIES POSITION_INDEPENDENT_CODE ON)
236+ if (USE_SYSTEM_SDBUS_CPP_LIBS)
237+ pkg_check_modules (sdbus-c++ sdbus-c++>=2.0.0)
238+
239+ if(NOT sdbus-c++_FOUND)
240+ message( WARNING "Could not find: sdbus-c++>=2.0.0. Fallback to sdbus-c++ submodule." )
241+ endif()
242+ endif()
243+
244+ if(NOT sdbus-c++_FOUND)
245+ message( "Using sdbus-c++ submodule." )
246+ set(SDBUSCPP_BUILD_DOCS OFF CACHE BOOL "No doc")
247+ add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/sdbus-cpp)
248+ set_target_properties(sdbus-c++-objlib PROPERTIES POSITION_INDEPENDENT_CODE ON)
249+ endif()
250 endif()
251
252 #=============================================================================
253 # STB
254 #=============================================================================
255
256-add_library(stb INTERFACE )
257-target_include_directories(stb INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/stb)
258+add_library(stb INTERFACE)
259+
260+if (USE_SYSTEM_STB_LIBS)
261+ find_path(STB_INCLUDE_DIR stb_image.h PATH_SUFFIXES stb)
262+ if (NOT STB_INCLUDE_DIR)
263+ message(WARNING "Could NOT find system STB libraries. Falling back to embedded STB.")
264+ target_include_directories(stb INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/stb)
265+ else()
266+ message(STATUS "Found system STB libraries: ${STB_INCLUDE_DIR}")
267+ target_include_directories(stb INTERFACE ${STB_INCLUDE_DIR})
268+ endif()
269+else()
270+ target_include_directories(stb INTERFACE ${CMAKE_CURRENT_SOURCE_DIR}/stb)
271+endif()
272+
273 target_compile_definitions(stb INTERFACE
274 STB_IMAGE_WRITE_IMPLEMENTATION
275 STB_IMAGE_IMPLEMENTATION
276diff --git a/sources/utils-image/CMakeLists.txt b/sources/utils-image/CMakeLists.txt
277index b5ad570..5c9b506 100644
278--- a/sources/utils-image/CMakeLists.txt
279+++ b/sources/utils-image/CMakeLists.txt
280@@ -29,13 +29,13 @@ else()
281 add_library(utils-image STATIC ${utils_image_SOURCES})
282 endif()
283
284-target_include_directories(utils-image PRIVATE stb lunasvg TurboJPEG::TurboJPEG)
285+target_include_directories(utils-image PRIVATE stb lunasvg::lunasvg TurboJPEG::TurboJPEG)
286
287 target_link_libraries(utils-image PRIVATE
288 Qt${Qt_VERSION}::Core
289 Qt${Qt_VERSION}::Network
290 stb
291- lunasvg
292+ lunasvg::lunasvg
293 image
294 TurboJPEG::TurboJPEG
295 )