Improve backends handling and make DECOMPRESSION_BACKEND and PDF_BACKEND settings easier to discover

This commit is contained in:
luisangelsm
2026-03-29 22:55:16 +02:00
parent 27c94bcb53
commit 52dd4e4c3c
8 changed files with 250 additions and 105 deletions

View File

@ -30,21 +30,13 @@ endif()
# Install paths
include(GNUInstallDirs)
find_package(PkgConfig)
list(PREPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")
# Compiler options (MSVC flags, NOMINMAX, etc.)
include(cmake/CompilerOptions.cmake)
# --- Build options ---
# Archive decompression backend (mutually exclusive)
set(DECOMPRESSION_BACKEND "" CACHE STRING "Archive backend: unarr | 7zip | libarchive")
set_property(CACHE DECOMPRESSION_BACKEND PROPERTY STRINGS "unarr" "7zip" "libarchive")
# PDF rendering backend (mutually exclusive)
set(PDF_BACKEND "" CACHE STRING "PDF backend: pdfium | poppler | pdfkit | no_pdf")
set_property(CACHE PDF_BACKEND PROPERTY STRINGS "pdfium" "poppler" "pdfkit" "no_pdf")
# Build configuration
option(BUILD_TESTS "Build tests" ON)
option(BUILD_SERVER_STANDALONE "Server standalone install (Linux only)" OFF)
@ -52,25 +44,63 @@ option(BUILD_SERVER_STANDALONE "Server standalone install (Linux only)" OFF)
# Build number (set by CI)
set(BUILD_NUMBER "" CACHE STRING "CI build number")
set(YACREADER_DECOMPRESSION_BACKENDS unarr 7zip libarchive)
set(YACREADER_PDF_BACKENDS pdfium poppler pdfkit no_pdf)
# --- Platform defaults (mirrors config.pri) ---
if(NOT DECOMPRESSION_BACKEND OR DECOMPRESSION_BACKEND STREQUAL "")
if(UNIX AND NOT APPLE)
set(DECOMPRESSION_BACKEND "unarr")
else()
set(DECOMPRESSION_BACKEND "7zip")
endif()
message(STATUS "DECOMPRESSION_BACKEND defaulted to: ${DECOMPRESSION_BACKEND}")
if(UNIX AND NOT APPLE)
set(_default_decompression_backend "unarr")
set(_default_pdf_backend "poppler")
elseif(APPLE)
set(_default_decompression_backend "7zip")
set(_default_pdf_backend "pdfkit")
else()
set(_default_decompression_backend "7zip")
set(_default_pdf_backend "pdfium")
endif()
if(NOT PDF_BACKEND OR PDF_BACKEND STREQUAL "")
if(UNIX AND NOT APPLE)
set(PDF_BACKEND "poppler")
elseif(APPLE)
set(PDF_BACKEND "pdfkit")
else()
set(PDF_BACKEND "pdfium")
endif()
message(STATUS "PDF_BACKEND defaulted to: ${PDF_BACKEND}")
# Archive decompression backend (mutually exclusive)
set(_decompression_backend_value "")
if(DEFINED CACHE{DECOMPRESSION_BACKEND})
set(_decompression_backend_value "$CACHE{DECOMPRESSION_BACKEND}")
endif()
if(_decompression_backend_value STREQUAL "")
set(_decompression_backend_value "${_default_decompression_backend}")
string(JOIN ", " _available_decompression_backends ${YACREADER_DECOMPRESSION_BACKENDS})
message(STATUS
"DECOMPRESSION_BACKEND not set, defaulting to ${_decompression_backend_value}. "
"Available: ${_available_decompression_backends}.")
endif()
set(DECOMPRESSION_BACKEND "${_decompression_backend_value}" CACHE STRING
"Archive backend: unarr | 7zip | libarchive" FORCE)
set_property(CACHE DECOMPRESSION_BACKEND PROPERTY STRINGS ${YACREADER_DECOMPRESSION_BACKENDS})
if(NOT DECOMPRESSION_BACKEND IN_LIST YACREADER_DECOMPRESSION_BACKENDS)
string(JOIN ", " _valid_decompression_backends ${YACREADER_DECOMPRESSION_BACKENDS})
message(FATAL_ERROR
"Unknown DECOMPRESSION_BACKEND: '${DECOMPRESSION_BACKEND}'. "
"Use one of: ${_valid_decompression_backends}")
endif()
# PDF rendering backend (mutually exclusive)
set(_pdf_backend_value "")
if(DEFINED CACHE{PDF_BACKEND})
set(_pdf_backend_value "$CACHE{PDF_BACKEND}")
endif()
if(_pdf_backend_value STREQUAL "")
set(_pdf_backend_value "${_default_pdf_backend}")
string(JOIN ", " _available_pdf_backends ${YACREADER_PDF_BACKENDS})
message(STATUS
"PDF_BACKEND not set, defaulting to ${_pdf_backend_value}. "
"Available: ${_available_pdf_backends}.")
endif()
set(PDF_BACKEND "${_pdf_backend_value}" CACHE STRING
"PDF backend: pdfium | poppler | pdfkit | no_pdf" FORCE)
set_property(CACHE PDF_BACKEND PROPERTY STRINGS ${YACREADER_PDF_BACKENDS})
if(NOT PDF_BACKEND IN_LIST YACREADER_PDF_BACKENDS)
string(JOIN ", " _valid_pdf_backends ${YACREADER_PDF_BACKENDS})
message(FATAL_ERROR
"Unknown PDF_BACKEND: '${PDF_BACKEND}'. "
"Use one of: ${_valid_pdf_backends}")
endif()
# macOS universal binary default
@ -114,7 +144,7 @@ endif()
qt_standard_project_setup()
# PDF backend detection (creates pdf_backend_iface INTERFACE target)
include(cmake/PdfBackend.cmake)
include(PdfBackend)
# Output directory
set(CMAKE_RUNTIME_OUTPUT_DIRECTORY "${CMAKE_BINARY_DIR}/bin")