Unbreak with kf6 6.19 and upcoming cmake4

This commit is contained in:
rsadowski
2025-10-21 06:56:19 +00:00
parent 444b12d032
commit 6bea6cf4f8
5 changed files with 184 additions and 2 deletions
+4 -1
View File
@@ -2,7 +2,7 @@ COMMENT = database connectivity and creation framework
VERSION = 3.2.0
DISTNAME = kdb-${VERSION}
REVISION = 5
REVISION = 6
SHARED_LIBS += KDb3 1.1 # 3.0
@@ -40,4 +40,7 @@ LIB_DEPENDS = devel/kf5/kcoreaddons \
CONFIGURE_ARGS += -DBUILD_TESTING=On \
-DBUILD_EXAMPLES=On
CONFIGURE_ARGS += -DCMAKE_POLICY_VERSION_MINIMUM=3.5
.include <bsd.port.mk>
+12 -1
View File
@@ -3,7 +3,12 @@ Fix build with icu >=75
Index: CMakeLists.txt
--- CMakeLists.txt.orig
+++ CMakeLists.txt
@@ -5,6 +5,8 @@ include(SetKDbCMakePolicies NO_POLICY_SCOPE)
@@ -1,10 +1,12 @@
-cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
+cmake_minimum_required(VERSION 3.16)
find_package(ECM 1.8.0 REQUIRED NO_MODULE)
set(CMAKE_MODULE_PATH ${CMAKE_SOURCE_DIR}/cmake/modules ${ECM_MODULE_PATH} ${ECM_KDE_MODULE_DIR})
include(SetKDbCMakePolicies NO_POLICY_SCOPE)
project(KDb VERSION 3.2.0) # Update this
@@ -12,3 +17,9 @@ Index: CMakeLists.txt
include(KDbAddTests)
include(KDbAddExamples)
kdb_add_tests(OFF)
@@ -61,4 +63,4 @@ if (IS_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/po")
ecm_install_po_files_as_qm(po)
endif()
-feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
+feature_summary(WHAT ALL)
@@ -0,0 +1,110 @@
Index: cmake/modules/KDbCreateSharedDataClasses.cmake
--- cmake/modules/KDbCreateSharedDataClasses.cmake.orig
+++ cmake/modules/KDbCreateSharedDataClasses.cmake
@@ -16,54 +16,87 @@
# For details see the accompanying COPYING-CMAKE-SCRIPTS file.
macro(KDB_CREATE_SHARED_DATA_CLASSES)
- # message(STATUS "KDB_CREATE_SHARED_DATA_CLASSES ARGV: ${ARGV}")
set(_args "")
list(APPEND _args ${ARGV})
list(GET _args 0 OUTPUT_VAR)
list(GET _args 1 PREFIX)
list(REMOVE_AT _args 0 1)
- # message(STATUS "OUTPUT_VAR: ${OUTPUT_VAR} ${_args}")
- find_package(PythonInterp 2.6)
- set_package_properties(PythonInterp PROPERTIES DESCRIPTION "Python language interpreter"
- URL "https://www.python.org" TYPE REQUIRED
- PURPOSE "Required by the Shared Data Classes (SDC) tool")
+
+ # Find Python 3 interpreter (required)
+ if(NOT Python3_EXECUTABLE)
+ find_package(Python3 COMPONENTS Interpreter REQUIRED)
+ endif()
+
+ set_package_properties(Python3 PROPERTIES
+ DESCRIPTION "Python 3 language interpreter"
+ URL "https://www.python.org"
+ TYPE REQUIRED
+ PURPOSE "Required by the Shared Data Classes (SDC) tool"
+ )
+
+ # Collect all output files to create a dependency target
+ set(_all_outputs "")
+
foreach(_input ${_args})
get_filename_component(INPUT ${_input} ABSOLUTE)
string(REGEX REPLACE "\\.shared\\.h" ".h" OUTPUT ${_input})
string(REGEX REPLACE ".*/([^/]+)\\.h" "\\1.h" OUTPUT ${OUTPUT})
- #MESSAGE(DEBUG "--------- ${_input} ${OUTPUT} ${INPUT}")
- #MESSAGE(DEBUG "COMMAND python2 ${CMAKE_SOURCE_DIR}/tools/sdc.py ${INPUT} ${CMAKE_CURRENT_BINARY_DIR}/${OUTPUT}")
- message(STATUS "Creating shared data class in ${OUTPUT} from ${_input}")
+
+ # Determine output directory based on PREFIX parameter
if(${PREFIX} STREQUAL "NO_PREFIX")
set(OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR})
else()
set(OUTPUT_DIR ${CMAKE_CURRENT_BINARY_DIR}/${PREFIX})
set(OUTPUT "${PREFIX}/${OUTPUT}")
endif()
- # message(STATUS "OUTPUT_DIR: ${OUTPUT_DIR} ${PREFIX}")
+
+ # Ensure output directory exists
file(MAKE_DIRECTORY ${OUTPUT_DIR})
- execute_process(
- COMMAND ${PYTHON_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tools/sdc.py
- ${INPUT}
- ${OUTPUT_DIR}/${OUTPUT}
+
+ set(FULL_OUTPUT_PATH "${OUTPUT_DIR}/${OUTPUT}")
+
+ message(STATUS "Will create shared data class: ${OUTPUT} from ${_input}")
+
+ # Use add_custom_command instead of execute_process
+ # This generates headers at build-time, not at configure-time
+ # This ensures proper dependency tracking by the build system
+ add_custom_command(
+ OUTPUT "${FULL_OUTPUT_PATH}"
+ COMMAND ${Python3_EXECUTABLE} ${CMAKE_SOURCE_DIR}/tools/sdc.py
+ ${INPUT}
+ ${FULL_OUTPUT_PATH}
+ DEPENDS ${INPUT} ${CMAKE_SOURCE_DIR}/tools/sdc.py
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
- RESULT_VARIABLE KDB_CREATE_SHARED_DATA_CLASSES_RESULT
+ COMMENT "Generating shared data class ${OUTPUT}"
+ VERBATIM
)
- # MESSAGE(STATUS "...result: ${KDB_CREATE_SHARED_DATA_CLASSES_RESULT}")
+
+ # Add to output variable (relative path for install rules)
list(APPEND ${OUTPUT_VAR} "${OUTPUT}")
+ # Add to internal list (full path for dependency tracking)
+ list(APPEND _all_outputs "${FULL_OUTPUT_PATH}")
endforeach(_input)
+
+ # Create a custom target that depends on all generated files
+ # This target can be used as a dependency by other targets
+ add_custom_target(_shared_classes ALL
+ DEPENDS ${_all_outputs}
+ COMMENT "Generating all shared data classes"
+ )
+
endmacro(KDB_CREATE_SHARED_DATA_CLASSES)
macro(KDB_REMOVE_EXTENSIONS)
- # message(STATUS "KDB_REMOVE_EXTENSIONS ARGV: ${ARGV}")
+ # Remove .h extensions from a list of header file names
+ # First argument is the output variable name
+ # Remaining arguments are input file names
set(_args "")
list(APPEND _args ${ARGV})
list(GET _args 0 OUTPUT_VAR)
list(REMOVE_AT _args 0)
- # message(STATUS "OUTPUT_VAR: ${OUTPUT_VAR} ${_args}")
+
foreach(_input ${_args})
string(REGEX REPLACE "\\.h" "" OUTPUT ${_input})
- # message(STATUS "...result: ${OUTPUT}")
list(APPEND ${OUTPUT_VAR} "${OUTPUT}")
endforeach(_input)
endmacro(KDB_REMOVE_EXTENSIONS)
@@ -0,0 +1,13 @@
Index: cmake/modules/SetKDbCMakePolicies.cmake
--- cmake/modules/SetKDbCMakePolicies.cmake.orig
+++ cmake/modules/SetKDbCMakePolicies.cmake
@@ -8,9 +8,6 @@ cmake_policy(SET CMP0048 NEW) # for PROJECT_VERSION
cmake_policy(SET CMP0053 NEW) # TODO remove, temporary fix for a bug in Qt 5.8's Qt5ModuleLocation.cmake
# "Simplify variable reference and escape sequence evaluation"
-if(POLICY CMP0059) # Dont treat DEFINITIONS as a built-in directory property.
- cmake_policy(SET CMP0059 OLD)
-endif()
if(POLICY CMP0063) # Honor visibility properties for all target types (since cmake 3.3)
cmake_policy(SET CMP0063 NEW)
endif()
@@ -0,0 +1,45 @@
Index: src/CMakeLists.txt
--- src/CMakeLists.txt.orig
+++ src/CMakeLists.txt
@@ -172,6 +172,10 @@ ecm_create_qm_loader(kdb_LIB_SRCS kdb_qt)
add_library(KDb SHARED ${kdb_LIB_SRCS})
set_coinstallable_lib_version(KDb)
+if(TARGET _shared_classes)
+ add_dependencies(KDb _shared_classes)
+endif()
+
kdb_create_shared_data_classes(
kdb_GENERATED_SHARED_DATA_CLASS_HEADERS # output variable with list of headers
NO_PREFIX # subdirectory in which the headers should be generated
@@ -399,13 +403,23 @@ ecm_generate_headers(kdb_FORWARDING_HEADERS
#message(STATUS "%% ${kdb_GENERATED_SHARED_DATA_CLASS_BASENAMES}")
-ecm_generate_headers(kdb_FORWARDING_HEADERS_FROM_BUILDDIR
- REQUIRED_HEADERS kdb_HEADERS_FROM_BUILDDIR
- ORIGINAL CAMELCASE
- SOURCE_DIR ${PROJECT_BINARY_DIR}/src
- HEADER_NAMES
- ${kdb_GENERATED_SHARED_DATA_CLASS_BASENAMES}
-)
+set(kdb_FORWARDING_HEADERS_FROM_BUILDDIR "")
+set(kdb_HEADERS_FROM_BUILDDIR "")
+
+foreach(header ${kdb_GENERATED_SHARED_DATA_CLASS_HEADERS})
+ # header enthält bereits den relativen Pfad (z.B. "KDbConnectionData.h")
+ set(FULL_PATH "${CMAKE_CURRENT_BINARY_DIR}/${header}")
+
+ # Extrahiere Basename ohne .h
+ string(REGEX REPLACE "\\.h$" "" basename "${header}")
+
+ # CamelCase Forwarding Header (ohne .h Extension)
+ set(FORWARDING_HEADER "${CMAKE_CURRENT_BINARY_DIR}/${basename}")
+ file(WRITE "${FORWARDING_HEADER}" "#include \"${header}\"\n")
+
+ list(APPEND kdb_FORWARDING_HEADERS_FROM_BUILDDIR "${FORWARDING_HEADER}")
+ list(APPEND kdb_HEADERS_FROM_BUILDDIR "${FULL_PATH}")
+endforeach()
#message(STATUS "%%kdb_HEADERS_FROM_BUILDDIR ${kdb_HEADERS_FROM_BUILDDIR}")