Skip to content

Commit

Permalink
Removal of QT SQL. Migrate to the SQLite library. (#872)
Browse files Browse the repository at this point in the history
* Removal of QT SQL. Migrate to Sqlite library.

* Reallocate SQLite libs

* Remove all of the QT plugins

* Fix macOS

* Fix macOS (2)

* QT SQL and all QT plugins are out. SQLite is used directly

* Move sqlite3 lib to external targets

* Fix c++ standard 20 compiler option on Windows

* Add workaround for SQLITE_BUSY
  • Loading branch information
awawa-dev authored Jun 3, 2024
1 parent 5e78bba commit 3003f8f
Show file tree
Hide file tree
Showing 37 changed files with 271,709 additions and 343 deletions.
26 changes: 5 additions & 21 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ SET ( DEFAULT_SOUNDCAPMACOS OFF )
SET ( DEFAULT_CEC OFF )
SET ( DEFAULT_BONJOUR ON )
SET ( DEFAULT_MQTT ON )
SET ( DEFAULT_STATIC_QT_PLUGINS OFF )
SET ( DEFAULT_PRECOMPILED_HEADERS ON )
SET ( DEFAULT_XZ ON )
SET ( DEFAULT_POWER_MANAGEMENT ON )
Expand All @@ -63,7 +62,7 @@ else()
endif(CCACHE_FOUND)

# find QT libs
find_package(Qt6 COMPONENTS Core Network Sql Widgets SerialPort QUIET)
find_package(Qt6 COMPONENTS Core Network SerialPort QUIET)

if (Qt6Core_FOUND AND NOT (DO_NOT_USE_QT_VERSION_6_LIBS STREQUAL "ON"))
message( STATUS "Found Qt Version: ${Qt6Core_VERSION}" )
Expand All @@ -75,7 +74,7 @@ ELSE()
message( STATUS "QT version 6 not found. Searching for QT version 5 instead." )
endif()
SET(QT_MIN_VERSION "5.10.0")
find_package(Qt5 COMPONENTS Core Network SerialPort Sql REQUIRED)
find_package(Qt5 COMPONENTS Core Network SerialPort REQUIRED)
message( STATUS "Found Qt Version: ${Qt5Core_VERSION}" )
IF ( "${Qt5Core_VERSION}" VERSION_LESS "${QT_MIN_VERSION}" )
message( FATAL_ERROR "Your Qt version is to old! Minimum required ${QT_MIN_VERSION}" )
Expand Down Expand Up @@ -432,9 +431,6 @@ colorMe("ENABLE_XZ = " ${ENABLE_XZ})

message( STATUS "\n${CyanColor}BUILD FEATURES${ColorReset}")

option(USE_STATIC_QT_PLUGINS "Enable static QT plugins" ${DEFAULT_STATIC_QT_PLUGINS})
colorMe("USE_STATIC_QT_PLUGINS = " ${USE_STATIC_QT_PLUGINS})

option(USE_PRECOMPILED_HEADERS "Enable precompiled headers (PCH)" ${DEFAULT_PRECOMPILED_HEADERS})
colorMe("USE_PRECOMPILED_HEADERS = " ${USE_PRECOMPILED_HEADERS})

Expand Down Expand Up @@ -509,7 +505,7 @@ else()
include(CheckCXXCompilerFlag)
CHECK_CXX_COMPILER_FLAG("/std:c++20" COMPILER_SUPPORTS_CXX20)
if (COMPILER_SUPPORTS_CXX20)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /std:c++20")
set(CMAKE_CXX_STANDARD 20)
message(STATUS "Enabling MSVC support for c++20")
endif()
endif()
Expand Down Expand Up @@ -580,18 +576,6 @@ find_package(TurboJPEG REQUIRED)
message( STATUS "TURBOJPEG_LIBRARY_DIRS=${TurboJPEG_LIBRARY}")
message( STATUS "TURBOJPEG_INCLUDE_DIRS=${TurboJPEG_INCLUDE_DIRS}")

# Embedded QT plugins
if (USE_STATIC_QT_PLUGINS)
foreach(sqlPlugin ${Qt${Qt_VERSION}Sql_PLUGINS} Qt${Qt_VERSION}::Sql)
message( STATUS "PLUGIN=${sqlPlugin}")
get_target_property(file ${sqlPlugin} LOCATION)
if (NOT IS_SYMLINK ${file})
message("Using static QT plugin: " ${file})
set(STATIC_QT_PLUGINS_LIBS ${STATIC_QT_PLUGINS_LIBS} ${file})
endif()
endforeach()
endif()

if (WIN32)
if(NOT DEFINED CMAKE_LIBRARY_OUTPUT_DIRECTORY)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY
Expand Down Expand Up @@ -630,8 +614,8 @@ add_custom_target(uninstall COMMAND ${CMAKE_COMMAND} -P ${CMAKE_CURRENT_BINARY_D
include (${CMAKE_CURRENT_SOURCE_DIR}/cmake/packages.cmake)

# external targets
if (WIN32 AND TARGET apidoc AND TARGET flatbuffers AND TARGET flatc AND TARGET mbedcrypto AND TARGET qmqtt AND TARGET liblzma)
set_target_properties(qmqtt apidoc flatbuffers flatc lib mbedcrypto mbedtls mbedx509 resources uninstall liblzma PROPERTIES FOLDER ExternalLibsTargets)
if (WIN32 AND TARGET apidoc AND TARGET flatbuffers AND TARGET flatc AND TARGET mbedcrypto AND TARGET qmqtt AND TARGET liblzma AND TARGET sqlite3)
set_target_properties(qmqtt apidoc flatbuffers flatc lib mbedcrypto mbedtls mbedx509 resources uninstall liblzma sqlite3 PROPERTIES FOLDER ExternalLibsTargets)
else()
set_target_properties(resources uninstall PROPERTIES FOLDER ExternalLibsTargets)
endif()
Expand Down
3 changes: 0 additions & 3 deletions HyperhdrConfig.h.in
Original file line number Diff line number Diff line change
@@ -1,8 +1,5 @@
// Generated config file

// support for static QT plugins
#cmakedefine USE_STATIC_QT_PLUGINS

// cec support
#cmakedefine ENABLE_CEC

Expand Down
121 changes: 9 additions & 112 deletions cmake/Dependencies.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,6 @@ macro(DeployApple TARGET)
install(FILES "${PROJECT_SOURCE_DIR}/LICENSE" DESTINATION "hyperhdr.app/Contents/Resources" COMPONENT "HyperHDR")
install(FILES "${PROJECT_SOURCE_DIR}/3RD_PARTY_LICENSES" DESTINATION "hyperhdr.app/Contents/Resources" COMPONENT "HyperHDR")

if ( Qt5Core_FOUND )
get_target_property(MYQT_QMAKE_EXECUTABLE ${Qt5Core_QMAKE_EXECUTABLE} IMPORTED_LOCATION)
else()
SET (MYQT_QMAKE_EXECUTABLE "${_qt_import_prefix}/../../../bin/qmake")
endif()

execute_process(
COMMAND ${MYQT_QMAKE_EXECUTABLE} -query QT_INSTALL_PLUGINS
OUTPUT_VARIABLE MYQT_PLUGINS_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
install(CODE "set(MYQT_PLUGINS_DIR \"${MYQT_PLUGINS_DIR}\")" COMPONENT "HyperHDR")
install(CODE "set(MY_DEPENDENCY_PATHS \"${TARGET_FILE}\")" COMPONENT "HyperHDR")
install(CODE "set(MY_SYSTEM_LIBS_SKIP \"${SYSTEM_LIBS_SKIP}\")" COMPONENT "HyperHDR")
install(CODE "set(SCOPE_Qt_VERSION ${Qt_VERSION})" COMPONENT "HyperHDR")
Expand Down Expand Up @@ -128,40 +116,10 @@ macro(DeployApple TARGET)
list(LENGTH _u_deps _u_length)
if("${_u_length}" GREATER 0)
message(WARNING "Unresolved dependencies detected!")
endif()

foreach(PLUGIN "sqldrivers")
if(EXISTS ${MYQT_PLUGINS_DIR}/${PLUGIN})
file(GLOB files "${MYQT_PLUGINS_DIR}/${PLUGIN}/*")
foreach(file ${files})
file(GET_RUNTIME_DEPENDENCIES
EXECUTABLES ${file}
RESOLVED_DEPENDENCIES_VAR PLUGINS
UNRESOLVED_DEPENDENCIES_VAR _u_deps
)

foreach(DEPENDENCY ${PLUGINS})
file(INSTALL
DESTINATION "${CMAKE_INSTALL_PREFIX}/hyperhdr.app/Contents/lib"
TYPE SHARED_LIBRARY
FILES ${DEPENDENCY}
)
endforeach()

get_filename_component(singleQtLib ${file} NAME)
list(APPEND MYQT_PLUGINS "${CMAKE_INSTALL_PREFIX}/hyperhdr.app/Contents/plugins/${PLUGIN}/${singleQtLib}")
file(INSTALL
DESTINATION "${CMAKE_INSTALL_PREFIX}/hyperhdr.app/Contents/plugins/${PLUGIN}"
TYPE SHARED_LIBRARY
FILES ${file}
)

endforeach()
endif()
endforeach()
endif()

include(BundleUtilities)
fixup_bundle("${CMAKE_INSTALL_PREFIX}/hyperhdr.app" "${MYQT_PLUGINS}" "${CMAKE_INSTALL_PREFIX}/hyperhdr.app/Contents/lib")
fixup_bundle("${CMAKE_INSTALL_PREFIX}/hyperhdr.app" "" "${CMAKE_INSTALL_PREFIX}/hyperhdr.app/Contents/lib")

file(REMOVE_RECURSE "${CMAKE_INSTALL_PREFIX}/hyperhdr.app/Contents/lib")
file(REMOVE_RECURSE "${CMAKE_INSTALL_PREFIX}/share")
Expand All @@ -172,8 +130,6 @@ macro(DeployApple TARGET)
cmake_policy(SET CMP0009 NEW)
message( "Re-signing bundle's components...")
file(GLOB_RECURSE libSignFramework LIST_DIRECTORIES false "${CMAKE_INSTALL_PREFIX}/hyperhdr.app/Contents/Frameworks/*")
file(GLOB_RECURSE libSignPlugins LIST_DIRECTORIES false "${CMAKE_INSTALL_PREFIX}/hyperhdr.app/Contents/plugins/*")
list(APPEND libSignFramework ${libSignPlugins})
list(APPEND libSignFramework "${CMAKE_INSTALL_PREFIX}/hyperhdr.app/Contents/MacOS/hyperhdr")
foreach(_fileToSign ${libSignFramework})
string(FIND ${_fileToSign} ".framework/Resources" isResources)
Expand Down Expand Up @@ -244,25 +200,6 @@ macro(DeployUnix TARGET)
message( WARNING "OpenSSL NOT found (https instance will not work)")
endif()

# Detect the Qt5 plugin directory, source: https://github.com/lxde/lxqt-qtplugin/blob/master/src/CMakeLists.txt
if ( Qt5Core_FOUND )
get_target_property(QT_QMAKE_EXECUTABLE ${Qt5Core_QMAKE_EXECUTABLE} IMPORTED_LOCATION)
execute_process(
COMMAND ${QT_QMAKE_EXECUTABLE} -query QT_INSTALL_PLUGINS
OUTPUT_VARIABLE QT_PLUGINS_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
elseif ( TARGET Qt${QT_VERSION_MAJOR}::qmake )
get_target_property(QT_QMAKE_EXECUTABLE Qt${QT_VERSION_MAJOR}::qmake IMPORTED_LOCATION)
execute_process(
COMMAND ${QT_QMAKE_EXECUTABLE} -query QT_INSTALL_PLUGINS
OUTPUT_VARIABLE QT_PLUGINS_DIR
OUTPUT_STRIP_TRAILING_WHITESPACE
)
endif()

message(STATUS "QT plugin path: ${QT_PLUGINS_DIR}")

# Copy CEC lib
if (CEC_FOUND)
find_library(XRANDR_LIBRARY NAMES Xrandr libXrandr libXrandr.so.2)
Expand Down Expand Up @@ -301,18 +238,9 @@ macro(DeployUnix TARGET)
endforeach()
endif()

# Create a qt.conf file in 'share/hyperhdr/bin' to override hard-coded search paths in Qt plugins
file(WRITE "${CMAKE_BINARY_DIR}/qt.conf" "[Paths]\nPlugins=../lib/\n")
install(
FILES "${CMAKE_BINARY_DIR}/qt.conf"
DESTINATION "share/hyperhdr/bin"
COMPONENT "HyperHDR"
)

# install CODE
install(CODE "set(TARGET_FILE \"${TARGET_FILE}\")" COMPONENT "HyperHDR")
install(CODE "set(PREREQUISITE_LIBS \"${PREREQUISITE_LIBS}\")" COMPONENT "HyperHDR")
install(CODE "set(QT_PLUGINS_DIR \"${QT_PLUGINS_DIR}\")" COMPONENT "HyperHDR")

install(CODE [[

Expand Down Expand Up @@ -382,40 +310,16 @@ macro(DeployUnix TARGET)
file(GET_RUNTIME_DEPENDENCIES
RESOLVED_DEPENDENCIES_VAR SYS_DEPENDENCIES
EXECUTABLES $<TARGET_FILE:systray-widget>)
foreach(systraLib ${SYS_DEPENDENCIES})
string(FIND ${systraLib} "libayatana" _sysindex)
foreach(systrayLib ${SYS_DEPENDENCIES})
string(FIND ${systrayLib} "libayatana" _sysindex)
if (${_sysindex} GREATER -1)
list(APPEND DEPENDENCIES ${systraLib})
list(APPEND DEPENDENCIES ${systrayLib})
endif()
string(FIND ${systraLib} "libdbusmenu" _sysDBusindex)
string(FIND ${systrayLib} "libdbusmenu" _sysDBusindex)
if (${_sysDBusindex} GREATER -1)
list(APPEND DEPENDENCIES ${systraLib})
endif()
endforeach()


# Copy Qt plugins to 'share/hyperhdr/lib'
foreach(PLUGIN "sqldrivers")
#message(WARNING "Collecting Dependencies for QT plugin folder: ${PLUGIN}")
if(EXISTS ${QT_PLUGINS_DIR}/${PLUGIN})
file(GLOB files "${QT_PLUGINS_DIR}/${PLUGIN}/*")
foreach(file ${files})
file(GET_RUNTIME_DEPENDENCIES
RESOLVED_DEPENDENCIES_VAR QT_DEPENDENCIES
EXECUTABLES ${file}
)
#message(WARNING "${file} => ${DEPENDENCIES} <= ${QT_DEPENDENCIES}")
list(APPEND DEPENDENCIES ${QT_DEPENDENCIES})

file(INSTALL
DESTINATION "${CMAKE_INSTALL_PREFIX}/share/hyperhdr/lib/${PLUGIN}"
TYPE SHARED_LIBRARY
FILES ${file}
)

endforeach()
list(APPEND DEPENDENCIES ${systrayLib})
endif()
endforeach()
endforeach()
endif()


Expand Down Expand Up @@ -483,6 +387,7 @@ macro(DeployWindows TARGET)
--dry-run
${WINDEPLOYQT_PARAMS}
--list mapping
--no-plugins
"${TARGET_FILE}"
OUTPUT_VARIABLE DEPS
OUTPUT_STRIP_TRAILING_WHITESPACE
Expand Down Expand Up @@ -521,14 +426,6 @@ macro(DeployWindows TARGET)
# Copy MQTT
install(CODE [[ file(INSTALL FILES $<TARGET_FILE:qmqtt> DESTINATION "${CMAKE_INSTALL_PREFIX}/bin" TYPE SHARED_LIBRARY) ]] COMPONENT "HyperHDR")

# Create a qt.conf file in 'bin' to override hard-coded search paths in Qt plugins
file(WRITE "${CMAKE_BINARY_DIR}/qt.conf" "[Paths]\nPlugins=../lib/\n")
install(
FILES "${CMAKE_BINARY_DIR}/qt.conf"
DESTINATION "bin"
COMPONENT "HyperHDR"
)

execute_process(
COMMAND ${SEVENZIP_BIN} e ${PROJECT_SOURCE_DIR}/resources/lut/lut_lin_tables.tar.xz -o${CMAKE_CURRENT_BINARY_DIR} -aoa -y
RESULT_VARIABLE STATUS
Expand Down
27 changes: 27 additions & 0 deletions external/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,30 @@
#=============================================================================
# SQLite
#=============================================================================

add_library(sqlite3 "${CMAKE_CURRENT_SOURCE_DIR}/sqlite/sqlite3.c")
target_include_directories(sqlite3 PUBLIC "${CMAKE_CURRENT_SOURCE_DIR}/sqlite")
target_link_libraries(sqlite3 PRIVATE ${CMAKE_THREAD_LIBS_INIT} ${CMAKE_DL_LIBS})


set_target_properties(sqlite3 PROPERTIES
OUTPUT_NAME sqlite3
PUBLIC_HEADER sqlite3.h
)

target_compile_definitions(sqlite3 PUBLIC
SQLITE_THREADSAFE=1
SQLITE_DEFAULT_MEMSTATUS=0
SQLITE_DEFAULT_SYNCHRONOUS=3
SQLITE_OMIT_AUTHORIZATION
SQLITE_OMIT_DEPRECATED
)

#=============================================================================
# RPi ws281x
#=============================================================================


if(ENABLE_WS281XPWM)
add_library(ws281x
${CMAKE_CURRENT_SOURCE_DIR}/rpi_ws281x/mailbox.c ${CMAKE_CURRENT_SOURCE_DIR}/rpi_ws281x/ws2811.c
Expand Down
Loading

0 comments on commit 3003f8f

Please sign in to comment.