Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package kf6-extra-cmake-modules for
openSUSE:Factory checked in at 2026-09-11 17:59:04
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kf6-extra-cmake-modules (Old)
and /work/SRC/openSUSE:Factory/.kf6-extra-cmake-modules.new.1265 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kf6-extra-cmake-modules"
Fri Sep 11 17:59:04 2026 rev:31 rq:1376669 version:6.30.0
Changes:
--------
---
/work/SRC/openSUSE:Factory/kf6-extra-cmake-modules/kf6-extra-cmake-modules.changes
2026-08-17 16:58:20.037636900 +0200
+++
/work/SRC/openSUSE:Factory/.kf6-extra-cmake-modules.new.1265/kf6-extra-cmake-modules.changes
2026-09-11 18:01:03.114147359 +0200
@@ -1,0 +2,19 @@
+Tue Sep 8 09:21:40 UTC 2026 - Christophe Marin <[email protected]>
+
+- Update to 6.30.0
+ * New feature release
+ * For more details please see:
+ * https://kde.org/announcements/frameworks/6/6.30.0
+- Changes since 6.29.0:
+ * List ECM sources explicitly instead of using GLOBS
+ * ECMInstalledLibraryCheck: add more separating linebreaks to generated files
+ * ExecuteKDEModules: add newer KDE modules to test
+ * ExecuteKDEModules: split off support for apple platform, document it
+ * ECMInstalledLibraryCheck: use $<cond:string> over $<IF:cond,string,>
+ * Add ECMInstalledLibraryCheck
+ * ecm_generate_export_header: make VERSION optional, default to
PROJECT_VERSION
+ * ECMSetupVersion: support version args in <major>.<minor> and <major> forms
+ * ECMSetupVersion: use final hex number in version header, not calculation
+ * Update version to 6.30.0
+
+-------------------------------------------------------------------
Old:
----
extra-cmake-modules-6.29.0.tar.xz
extra-cmake-modules-6.29.0.tar.xz.sig
New:
----
extra-cmake-modules-6.30.0.tar.xz
extra-cmake-modules-6.30.0.tar.xz.sig
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ kf6-extra-cmake-modules.spec ++++++
--- /var/tmp/diff_new_pack.USePSK/_old 2026-09-11 18:01:04.526206239 +0200
+++ /var/tmp/diff_new_pack.USePSK/_new 2026-09-11 18:01:04.532206489 +0200
@@ -23,12 +23,12 @@
%define rname extra-cmake-modules
-# Full KF6 version (e.g. 6.29.0)
+# Full KF6 version (e.g. 6.30.0)
%{!?_kf6_version: %global _kf6_version %{version}}
%bcond_without doc
%bcond_without released
Name: kf6-extra-cmake-modules%{?pkg_suffix}
-Version: 6.29.0
+Version: 6.30.0
Release: 0
Summary: CMake modules
License: BSD-3-Clause
++++++ extra-cmake-modules-6.29.0.tar.xz -> extra-cmake-modules-6.30.0.tar.xz
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extra-cmake-modules-6.29.0/.gitignore
new/extra-cmake-modules-6.30.0/.gitignore
--- old/extra-cmake-modules-6.29.0/.gitignore 2026-08-07 22:38:40.000000000
+0200
+++ new/extra-cmake-modules-6.30.0/.gitignore 2026-09-04 13:36:44.000000000
+0200
@@ -2,6 +2,9 @@
cmake/ECMConfig.cmake
cmake/ECMConfigVersion.cmake
+# Ignore generated test clang-format file
+tests/ExecuteKDEModules/.clang-format
+
# Ignore the following files
*~
*.[oa]
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extra-cmake-modules-6.29.0/CMakeLists.txt
new/extra-cmake-modules-6.30.0/CMakeLists.txt
--- old/extra-cmake-modules-6.29.0/CMakeLists.txt 2026-08-07
22:38:40.000000000 +0200
+++ new/extra-cmake-modules-6.30.0/CMakeLists.txt 2026-09-04
13:36:44.000000000 +0200
@@ -11,7 +11,7 @@
# Preliminary setup
#
-set(VERSION "6.29.0") # handled by release scripts
+set(VERSION "6.30.0") # handled by release scripts
project(ECM
VERSION "${VERSION}"
@@ -42,6 +42,7 @@
set(FIND_MODULES_INSTALL_DIR ${SHARE_INSTALL_DIR}/ECM/find-modules/)
set(KDE_MODULES_INSTALL_DIR ${SHARE_INSTALL_DIR}/ECM/kde-modules)
set(MODULES_INSTALL_DIR ${SHARE_INSTALL_DIR}/ECM/modules/)
+set(TEST_MODULES_INSTALL_DIR ${SHARE_INSTALL_DIR}/ECM/test-modules/)
set(TOOLCHAIN_MODULES_INSTALL_DIR ${SHARE_INSTALL_DIR}/ECM/toolchain/)
set(DOC_INSTALL_DIR ${SHARE_INSTALL_DIR}/doc/ECM
@@ -83,23 +84,15 @@
# Install modules
#
-file(GLOB installModuleFiles ${CMAKE_SOURCE_DIR}/modules/*[^~])
-install(FILES ${installModuleFiles} DESTINATION ${MODULES_INSTALL_DIR})
+add_subdirectory(modules)
-file(GLOB installTestModuleFiles ${CMAKE_SOURCE_DIR}/test-modules/*[^~])
-install(FILES ${installTestModuleFiles} DESTINATION
${SHARE_INSTALL_DIR}/ECM/test-modules)
+add_subdirectory(test-modules)
-file(GLOB installKdeModuleFiles LIST_DIRECTORIES FALSE
${CMAKE_SOURCE_DIR}/kde-modules/*[^~])
-install(FILES ${installKdeModuleFiles} DESTINATION ${KDE_MODULES_INSTALL_DIR})
-# The scripts need to be executable
-file(GLOB installKDECommitHooks
${CMAKE_SOURCE_DIR}/kde-modules/kde-git-commit-hooks/*[^~])
-install(PROGRAMS ${installKDECommitHooks} DESTINATION
${KDE_MODULES_INSTALL_DIR}/kde-git-commit-hooks)
+add_subdirectory(kde-modules)
-file(GLOB installFindModuleFiles ${CMAKE_SOURCE_DIR}/find-modules/*.cmake
${CMAKE_SOURCE_DIR}/find-modules/*.py)
-install(FILES ${installFindModuleFiles} DESTINATION
${FIND_MODULES_INSTALL_DIR})
+add_subdirectory(find-modules)
-file(GLOB installToolchainModuleFiles ${CMAKE_SOURCE_DIR}/toolchain/*[^~])
-install(FILES ${installToolchainModuleFiles} DESTINATION
${TOOLCHAIN_MODULES_INSTALL_DIR})
+add_subdirectory(toolchain)
#
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extra-cmake-modules-6.29.0/docs/CMakeLists.txt
new/extra-cmake-modules-6.30.0/docs/CMakeLists.txt
--- old/extra-cmake-modules-6.29.0/docs/CMakeLists.txt 2026-08-07
22:38:40.000000000 +0200
+++ new/extra-cmake-modules-6.30.0/docs/CMakeLists.txt 2026-09-04
13:36:44.000000000 +0200
@@ -109,8 +109,14 @@
add_custom_target(documentation ALL DEPENDS ${doc_format_outputs})
if(BUILD_MAN_DOCS)
- file(GLOB man_rst RELATIVE ${ECM_SOURCE_DIR}/docs/manual
- ${ECM_SOURCE_DIR}/docs/manual/*.[1-9].rst)
+ set(man_rst
+ ecm.7.rst
+ ecm-developer.7.rst
+ ecm-find-modules.7.rst
+ ecm-kde-modules.7.rst
+ ecm-modules.7.rst
+ ecm-toolchains.7.rst
+ )
foreach(m ${man_rst})
if("x${m}" MATCHES "^x(.+)\\.([1-9])\\.rst$")
set(name "${CMAKE_MATCH_1}")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extra-cmake-modules-6.29.0/docs/module/ECMInstalledLibraryCheck.rst
new/extra-cmake-modules-6.30.0/docs/module/ECMInstalledLibraryCheck.rst
--- old/extra-cmake-modules-6.29.0/docs/module/ECMInstalledLibraryCheck.rst
1970-01-01 01:00:00.000000000 +0100
+++ new/extra-cmake-modules-6.30.0/docs/module/ECMInstalledLibraryCheck.rst
2026-09-04 13:36:44.000000000 +0200
@@ -0,0 +1 @@
+.. ecm-module:: ../../modules/ECMInstalledLibraryCheck.cmake
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extra-cmake-modules-6.29.0/find-modules/CMakeLists.txt
new/extra-cmake-modules-6.30.0/find-modules/CMakeLists.txt
--- old/extra-cmake-modules-6.29.0/find-modules/CMakeLists.txt 1970-01-01
01:00:00.000000000 +0100
+++ new/extra-cmake-modules-6.30.0/find-modules/CMakeLists.txt 2026-09-04
13:36:44.000000000 +0200
@@ -0,0 +1,47 @@
+# SPDX-FileCopyrightText: 2026 Friedrich W. H. Kossebau <[email protected]>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
+install(FILES
+ ECMFindModuleHelpersStub.cmake
+ Find7z.cmake
+ Find7Zip.cmake
+ FindCanberra.cmake
+ FindEGL.cmake
+ Findepoxy.cmake
+ FindFFmpeg.cmake
+ FindGLIB2.cmake
+ FindGperf.cmake
+ FindGradle.cmake
+ local.properties.cmake
+ settings.gradle.cmake
+ Findgzip.cmake
+ FindIcoTool.cmake
+ FindInotify.cmake
+ FindIsoCodes.cmake
+ FindKF5.cmake
+ FindKF6.cmake
+ FindLibcap.cmake
+ FindLibExiv2.cmake
+ FindLibGit2.cmake
+ FindLibMount.cmake
+ FindOpenEXR.cmake
+ FindPhoneNumber.cmake
+ FindPoppler.cmake
+ FindPulseAudio.cmake
+ FindQHelpGenerator.cmake
+ FindQtWaylandScanner.cmake
+ FindReuseTool.cmake
+ FindSasl2.cmake
+ FindSeccomp.cmake
+ FindSharedMimeInfo.cmake
+ FindTaglib.cmake
+ FindUDev.cmake
+ FindWayland.cmake
+ FindWaylandProtocols.cmake
+ FindWaylandScanner.cmake
+ FindX11_XCB.cmake
+ FindXCB.cmake
+
+ DESTINATION ${FIND_MODULES_INSTALL_DIR}
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extra-cmake-modules-6.29.0/kde-modules/CMakeLists.txt
new/extra-cmake-modules-6.30.0/kde-modules/CMakeLists.txt
--- old/extra-cmake-modules-6.29.0/kde-modules/CMakeLists.txt 1970-01-01
01:00:00.000000000 +0100
+++ new/extra-cmake-modules-6.30.0/kde-modules/CMakeLists.txt 2026-09-04
13:36:44.000000000 +0200
@@ -0,0 +1,41 @@
+# SPDX-FileCopyrightText: 2026 Friedrich W. H. Kossebau <[email protected]>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
+install(FILES
+ KDEClangFormat.cmake
+ clang-format.cmake
+ KDECMakeSettings.cmake
+ appstreamtest.cmake
+ KDECompilerSettings.cmake
+ KDEFrameworkCompilerLegacySettings.cmake
+ KDEFrameworkCompilerSettings.cmake
+ KDEGitCommitHooks.cmake
+ KDEInstallDirs5.cmake
+ KDEInstallDirs6.cmake
+ KDEInstallDirs.cmake
+ KDEInstallDirsCommon.cmake
+ KDEMetaInfoPlatformCheck.cmake
+ KDEPackageAppTemplates.cmake
+ KDESetupPrefixScript.cmake
+ prefix.sh.cmake
+ prefix.sh.fish.cmake
+
+ DESTINATION ${KDE_MODULES_INSTALL_DIR}
+)
+
+install(FILES
+ kde-git-commit-hooks/combined.schema.json.in
+ kde-git-commit-hooks/combined.schema.json.in.license
+
+ DESTINATION ${KDE_MODULES_INSTALL_DIR}/kde-git-commit-hooks
+)
+
+# The scripts need to be executable
+install(PROGRAMS
+ kde-git-commit-hooks/clang-format.sh
+ kde-git-commit-hooks/json-schema.py
+ kde-git-commit-hooks/pre-commit.in
+
+ DESTINATION ${KDE_MODULES_INSTALL_DIR}/kde-git-commit-hooks
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extra-cmake-modules-6.29.0/modules/CMakeLists.txt
new/extra-cmake-modules-6.30.0/modules/CMakeLists.txt
--- old/extra-cmake-modules-6.29.0/modules/CMakeLists.txt 1970-01-01
01:00:00.000000000 +0100
+++ new/extra-cmake-modules-6.30.0/modules/CMakeLists.txt 2026-09-04
13:36:44.000000000 +0200
@@ -0,0 +1,68 @@
+# SPDX-FileCopyrightText: 2026 Friedrich W. H. Kossebau <[email protected]>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
+install(FILES
+ CheckAtomic.cmake
+ ECMAddAndroidApk.cmake
+ ECMAddAppIcon.cmake
+ ECMAddQch.cmake
+ ECMQchDoxygen.config.in
+ ECMQchDoxygenLayout.xml
+ ECMAddQtDesignerPlugin.cmake
+ ECMAddTests.cmake
+ ECMCheckOutboundLicense.cmake
+ check-outbound-license.py
+ ECMConfiguredInstall.cmake
+ ECMCoverageOption.cmake
+ ECMCreateQmFromPoFiles.cmake
+ ECMDeprecationSettings.cmake
+ ECMEnableSanitizers.cmake
+ ECMFeatureSummary.cmake
+ ECMFindModuleHelpers.cmake
+ ECMFindQmlModule.cmake
+ ECMFindQmlModule.cmake.in
+ ECMGenerateDBusServiceFile.cmake
+ ECMGenerateExportHeader.cmake
+ ECMGenerateHeaders.cmake
+ ECMGeneratePkgConfigFile.cmake
+ ECMGeneratePriFile.cmake
+ ECMGeneratePythonBindings.cmake
+ ECMGeneratePythonBindings.toml.in
+ ECMGeneratePythonBindings.toml.in.license
+ ECMGenerateQDoc.cmake
+ ECMGenerateQmlTypes.cmake
+ ECMInstalledLibraryCheck.cmake
+ ecm_create_installed_library_check.cmake
+ ECMInstallIcons.cmake
+ ECMMarkAsTest.cmake
+ ECMMarkNonGuiExecutable.cmake
+ ECMOptionalAddSubdirectory.cmake
+ ECMPackageConfigHelpers.cmake
+ ECMPoQmTools.cmake
+ ECMQmLoader.cpp.in
+ ECMQmlModule5.cmake
+ ECMQmlModule6.cmake
+ ECMQmlModule.cmake
+ ECMQmlModule.cpp.in
+ ECMQmlModule.cpp.in.license
+ ECMQmlModule.h.in
+ ECMQmlModule.h.in.license
+ ECMQMLModules.cmake
+ ECMQtDeclareLoggingCategory.cmake
+ ECMQtDeclareLoggingCategory.cpp.in
+ ECMQtDeclareLoggingCategory.h.in
+ ECMQueryQmake.cmake
+ ECMQueryQt.cmake
+ ECMSetupQtPluginMacroNames.cmake
+ ECMSetupVersion.cmake
+ ECMVersionHeader.h.in
+ ECMSourceVersionControl.cmake
+ ECMUninstallTarget.cmake
+ ecm_uninstall.cmake.in
+ ECMUseFindModules.cmake
+ ECMWinResolveSymlinks.cmake
+ QtVersionOption.cmake
+
+ DESTINATION ${MODULES_INSTALL_DIR}
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extra-cmake-modules-6.29.0/modules/ECMGenerateExportHeader.cmake
new/extra-cmake-modules-6.30.0/modules/ECMGenerateExportHeader.cmake
--- old/extra-cmake-modules-6.29.0/modules/ECMGenerateExportHeader.cmake
2026-08-07 22:38:40.000000000 +0200
+++ new/extra-cmake-modules-6.30.0/modules/ECMGenerateExportHeader.cmake
2026-09-04 13:36:44.000000000 +0200
@@ -18,7 +18,7 @@
::
ecm_generate_export_header(<library_target_name>
- VERSION <version>
+ [VERSION <version>] # Optional since 6.30
[BASE_NAME <base_name>]
[GROUP_BASE_NAME <group_base_name>]
[EXPORT_MACRO_NAME <export_macro_name>]
@@ -41,7 +41,8 @@
)
``VERSION`` specifies the version of the library, given in the format
-"<major>.<minor>.<patchlevel>".
+"<major>.<minor>.<patchlevel>". Since 6.30 this argument is optional if
+``${PROJECT_VERSION}`` is set and will default to that.
``GROUP_BASE_NAME`` specifies the name to use for the macros defining
library group default values. If set, this will generate code supporting
@@ -515,15 +516,25 @@
# helper string
set(_version_triple_regexp "^([0-9]+)\\.([0-9]+)\\.([0-9]+)$")
# args sanity check
- if (NOT ARGS_VERSION)
- message(FATAL_ERROR "No VERSION passed when calling
ecm_generate_export_header().")
- elseif(NOT ARGS_VERSION MATCHES ${_version_triple_regexp})
- message(FATAL_ERROR "VERSION expected to be in x.y.z format when
calling ecm_generate_export_header().")
+ if (ARGS_VERSION)
+ if(NOT ARGS_VERSION MATCHES ${_version_triple_regexp})
+ message(FATAL_ERROR "VERSION expected to be in x.y.z format when
calling ecm_generate_export_header(), is: ${ARGS_VERSION}")
+ endif()
+ set(_version ${ARGS_VERSION})
+ else()
+ if (PROJECT_VERSION)
+ if(NOT PROJECT_VERSION MATCHES ${_version_triple_regexp})
+ message(FATAL_ERROR "PROJECT_VERSION expected to be in x.y.z
format when calling ecm_generate_export_header(), is: ${PROJECT_VERSION}")
+ endif()
+ set(_version ${PROJECT_VERSION})
+ else()
+ message(FATAL_ERROR "No VERSION passed when calling
ecm_generate_export_header().")
+ endif()
endif()
if (NOT ARGS_EXCLUDE_DEPRECATED_BEFORE_AND_AT)
set(ARGS_EXCLUDE_DEPRECATED_BEFORE_AND_AT 0)
elseif(ARGS_EXCLUDE_DEPRECATED_BEFORE_AND_AT STREQUAL "CURRENT")
- set(ARGS_EXCLUDE_DEPRECATED_BEFORE_AND_AT ${ARGS_VERSION})
+ set(ARGS_EXCLUDE_DEPRECATED_BEFORE_AND_AT ${_version})
elseif(NOT ARGS_EXCLUDE_DEPRECATED_BEFORE_AND_AT MATCHES
${_version_triple_regexp} AND
NOT ARGS_EXCLUDE_DEPRECATED_BEFORE_AND_AT STREQUAL "0")
message(FATAL_ERROR "EXCLUDE_DEPRECATED_BEFORE_AND_AT expected to be
in \"x.y.z\" format, \"0\" or \"CURRENT\" when calling
ecm_generate_export_header().")
@@ -532,12 +543,12 @@
if (ARGS_EXCLUDE_DEPRECATED_BEFORE_AND_AT)
set(ARGS_DEPRECATED_BASE_VERSION
"${ARGS_EXCLUDE_DEPRECATED_BEFORE_AND_AT}")
else()
- string(REGEX REPLACE ${_version_triple_regexp} "\\1"
_version_major "${ARGS_VERSION}")
+ string(REGEX REPLACE ${_version_triple_regexp} "\\1"
_version_major "${_version}")
set(ARGS_DEPRECATED_BASE_VERSION "${_version_major}.0.0")
endif()
else()
if(ARGS_DEPRECATED_BASE_VERSION STREQUAL "CURRENT")
- set(ARGS_DEPRECATED_BASE_VERSION ${ARGS_VERSION})
+ set(ARGS_DEPRECATED_BASE_VERSION ${_version})
elseif(NOT ARGS_DEPRECATED_BASE_VERSION MATCHES
${_version_triple_regexp} AND
NOT ARGS_DEPRECATED_BASE_VERSION STREQUAL "0")
message(FATAL_ERROR "DEPRECATED_BASE_VERSION expected to be in
\"x.y.z\" format, \"0\" or \"CURRENT\" when calling
ecm_generate_export_header().")
@@ -574,7 +585,7 @@
set(_version_hexnumber "${_upper_version_base_name}_VERSION")
endif()
else()
- _ecm_geh_generate_hex_number(_version_hexnumber "${ARGS_VERSION}")
+ _ecm_geh_generate_hex_number(_version_hexnumber "${_version}")
endif()
if(NOT ARGS_EXPORT_FILE_NAME)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extra-cmake-modules-6.29.0/modules/ECMInstalledLibraryCheck.cmake
new/extra-cmake-modules-6.30.0/modules/ECMInstalledLibraryCheck.cmake
--- old/extra-cmake-modules-6.29.0/modules/ECMInstalledLibraryCheck.cmake
1970-01-01 01:00:00.000000000 +0100
+++ new/extra-cmake-modules-6.30.0/modules/ECMInstalledLibraryCheck.cmake
2026-09-04 13:36:44.000000000 +0200
@@ -0,0 +1,549 @@
+# SPDX-FileCopyrightText: 2026 Friedrich W. H. Kossebau <[email protected]>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
+#[=======================================================================[.rst:
+ECMInstalledLibraryCheck
+------------------------
+
+Generates a check to test artifacts of the library installation, like the
+self-containedness of the CMake config files as well as of the official public
+headers in the deployed directory layout.
+
+::
+
+ ecm_add_installed_library_check(<library_target>
+ [PACKAGE_NAME <package_name>]
+ [PACKAGE_VERSION <package_version>]
+ {NO_PACKAGE_VERSION]
+ [PACKAGE_TARGET_NAMESPACE <package_target_namespace>]
+ [NO_PACKAGE_TARGET_NAMESPACE]
+ [COMPILE_DEFINITIONS <definition> [...]]
+ [EXTRA_DEPENDENCIES <dependency> [<version>] [...]]
+ [EXTRA_LINK_LIBRARIES <library> [...]]
+ )
+
+The function creates a target ``<library_target>_installed_library_check``
which
+can be invoked after the installation to check if the installed library
+artifacts are self-contained when used by a consumer.
+All these targets are added as dependency to a target
+``all_installed_library_check``, which is created at the level where this
module
+is included, if there is none yet.
+
+The check generates a CMake project with a dummy library which searches the
+given package for any specified version, links to the exported target as
+imported from the package's CMake config file and as its sources add for each
+given include strings a source file with just the content
+``#include <include_string>``. Additionally checks are added to the CMake code
+and the source files for any CMake variables, compile definitions and
+preprocessor macros as configured by the additional functions (see below).
+This project then is configured with CMake and all these sources are built. The
+check is considered as passed, when the build completes.
+
+``PACKAGE_NAME`` specifies the name of the CMake package to check for.
+The default is ``${PROJECT_NAME}``.
+
+``PACKAGE_VERSION`` specifies the version of the CMake package to check for.
+The default is ``${PROJECT_VERSION}`` if set and ``NO_PACKAGE_VERSION`` not
+being used, otherwise none.
+
+``NO_PACKAGE_VERSION`` defines that the CMake package has no version to check
+for.
+
+``PACKAGE_TARGET_NAMESPACE`` specifies what namespace the exported target
+name of the library is placed in. The default is the value estimated for
+the package name, unless ``NO_PACKAGE_TARGET_NAMESPACE`` is set.
+
+``NO_PACKAGE_TARGET_NAMESPACE`` defines that the library target is exported
+in the package without any namespace.
+
+``COMPILE_DEFINITIONS`` can be used to set custom definitions for the test
+builds against the headers.
+
+``EXTRA_DEPENDENCIES`` can be used to add custom dependencies to search for
+with ``find_package()``. This can be used if the current dependencies declared
+in the installed CMake config file are not complete, but can not be changed.
+
+``EXTRA_LINK_LIBRARIES`` can be used to add custom libraries to link to with
+``target_link_libraries()``. This can be used if the current list of libraries
+in the public interface is not complete, but can not be changed.
+
+::
+
+ ecm_installed_library_check_include_strings(<library_target>
+ HEADERS <header> [...]
+ [PREFIX <prefix>]
+ )
+
+This function registers include strings with the check, by listing files
+which will be used as official public headers.
+
+``HEADERS`` specifies the header files whose base names will be available as
+public include strings. The actual path of any file listed is ignored, it also
+does not need to reference any existing file.
+
+``PREFIX`` specifies a prefix which consumers need to prepend to the base
+names of the headers passed to ``HEADERS``. The argument ``<prefix>`` is
+specified without a trailing "/". Default is none.
+
+::
+
+ ecm_installed_library_check_cmake_variable(<library_target>
+ NAME <name>
+ [VALUE <value>]
+ [UNDEFINED]
+ [TYPE <type>]
+ )
+
+This function registers a CMake variable with the check which should be tested
+for presence and its value after the library's CMake package has been found.
+
+``NAME`` specifies the name of a variable expected to be set after finding the
+package.
+
+``VALUE`` specifies the value expected to be set for the variable. For
+variables of the type ``BOOL`` the usual evaluation of CMake to a boolean value
+is checked. If this argument is not passed, the variable. is only tested for
+being defined.
+
+``UNDEFINED`` specifies if the variable should be tested for being undefined.
+
+``TYPE`` specifies the type of the variable. The options are ``BOOL``,
+``STRING``. Default is ``STRING``.
+
+::
+
+ ecm_installed_library_check_compile_definition(<library_target>
+ NAME <name>
+ [VALUE <value>]
+ [UNDEFINED]
+ )
+
+This function registers a compile definition with the check which should be
+tested for being set on the imported library target.
+
+``NAME`` specifies the name of the compile definition to test.
+
+``VALUE`` specifies the value expected to be set for the compile definition.
+If this argument is not passed, the compile definition is only tested for being
+defined. Only numeric values are supported.
+
+``UNDEFINED`` specifies if the compile definition should be tested for being
+undefined.
+
+::
+
+ ecm_installed_library_check_preprocessor_macro(<library_target>
+ NAME <name>
+ [VALUE <value>]
+ [UNDEFINED]
+ )
+
+This function registers a preprocessor macro with the check which should be
+tested for being present with all registered include strings.
+
+``NAME`` specifies the name of the macro to test.
+
+``VALUE`` specifies the value expected to be set for the macro. If this
argument
+is not passed, the macro is only tested for being defined. Only numeric values
+are supported.
+
+``UNDEFINED`` specifies if the macro should be tested for being undefined.
+
+::
+
+ ecm_installed_library_check_version_preprocessor_macros(<library_target>
+ [PREFIX <prefix>]
+ [VERSION <version>]
+ )
+
+This function is a convenience utility to register a usual set of preprocessor
+macros with the check which should be tested for being present with all
+registered include strings and match the given version. Such macros are e.g.
+created by the macro ``ecm_setup_version()`` from the module
+:module:`ECMSetupVersion` when using the ``VERSION_HEADER`` argument to
+generate a version header.
+
+``PREFIX`` specifies the prefix of the version macros to test. The expected
+macro names are:
+
+* ``<prefix>_VERSION`` (hexadecimal number in ``0xMMmmpp`` format)
+* ``<prefix>_VERSION_MAJOR``
+* ``<prefix>_VERSION_MINOR``
+* ``<prefix>_VERSION_PATCH``
+
+Default is the library target name in upper case.
+
+``VERSION`` specifies the version string "<major>.<minor>.<patch>" with the
+expected version values. The default is any "VERSION" property set on the
+target, otherwise any package version defined for the check, or otherwise
+``${PROJECT_VERSION}``.
+
+Example usage:
+
+.. code-block:: cmake
+
+ # add a non-default target "MyLib_installed_library_check",
+ # which will test for a CMake config file for "MyPackage",
+ # at version "1.0", with the imported library target
+ # "MyPackage::MyLib" and whose include strings (headers)
+ # can be used self-contained when linking the target
+ ecm_add_installed_library_check(MyLib
+ PACKAGE_NAME "MyPackage"
+ PACKAGE_VERSION "1.0"
+ )
+
+ # for any <MLFoo> etc. includes
+ ecm_installed_library_check_include_strings(MyLib
+ HEADERS
+ /absolute/path/MLFoo
+ relative/path/MLBar
+ # etc
+ )
+
+ # for any <ML/Foo> etc. includes
+ ecm_installed_library_check_include_strings(MyLib
+ HEADERS
+ /absolute/path/Foo
+ relative/path/Bar
+ # etc
+ PREFIX ML
+ )
+
+Since 6.30
+#]=======================================================================]
+
+cmake_policy(VERSION 3.29)
+
+# create global target, at include level
+if(NOT TARGET all_installed_library_check)
+ add_custom_target(all_installed_library_check)
+endif()
+
+
+function(ecm_add_installed_library_check _target)
+ set(options NO_PACKAGE_TARGET_NAMESPACE NO_PACKAGE_VERSION)
+ set(oneValueArgs PACKAGE_NAME PACKAGE_VERSION PACKAGE_TARGET_NAMESPACE)
+ set(multiValueArgs EXTRA_DEPENDENCIES EXTRA_LINK_LIBRARIES
COMPILE_DEFINITIONS)
+
+ cmake_parse_arguments(ARG "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN})
+
+ # argument checks
+ if(ARG_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Unknown keywords given to
ecm_add_installed_library_check(): \"${ARG_UNPARSED_ARGUMENTS}\"")
+ endif()
+ if(ARG_NO_PACKAGE_TARGET_NAMESPACE AND ARG_PACKAGE_TARGET_NAMESPACE)
+ message(FATAL_ERROR "ecm_add_installed_library_check cannot be called
with both NO_PACKAGE_TARGET_NAMESPACE and PACKAGE_TARGET_NAMESPACE args.")
+ endif()
+ if(ARG_NO_PACKAGE_VERSION AND ARG_PACKAGE_VERSION)
+ message(FATAL_ERROR "ecm_add_installed_library_check cannot be called
with both NO_PACKAGE_VERSION and PACKAGE_VERSION args.")
+ endif()
+ set(_library_types "STATIC_LIBRARY" "SHARED_LIBRARY" "INTERFACE_LIBRARY")
+ get_target_property(_type ${_target} TYPE)
+ if(NOT ${_type} IN_LIST _library_types)
+ message(FATAL_ERROR "ecm_add_installed_library_check cannot be called
on a target which is not some library. Was: ${_type}")
+ endif()
+
+ # setup data
+ if(ARG_PACKAGE_NAME)
+ set(_package_name "${ARG_PACKAGE_NAME}")
+ else()
+ set(_package_name "${PROJECT_NAME}")
+ endif()
+ if(ARG_PACKAGE_VERSION)
+ set(_package_version ${ARG_PACKAGE_VERSION})
+ else()
+ if(NOT ARG_NO_PACKAGE_VERSION AND PROJECT_VERSION)
+ set(_package_version ${PROJECT_VERSION})
+ else()
+ set(_package_version)
+ endif()
+ endif()
+ if(ARG_PACKAGE_TARGET_NAMESPACE)
+ set(_library_target_namespace ${ARG_PACKAGE_TARGET_NAMESPACE})
+ else()
+ if(ARG_NO_PACKAGE_TARGET_NAMESPACE)
+ set(_library_target_namespace)
+ else()
+ set(_library_target_namespace "${_package_name}::")
+ endif()
+ endif()
+
+ set(_compiler_propagation)
+ foreach(_compiler IN ITEMS CMAKE_C_COMPILER CMAKE_CXX_COMPILER)
+ if (${_compiler})
+ list(APPEND _compiler_propagation "-D${_compiler}=${${_compiler}}")
+ endif()
+ endforeach()
+
+ set(_languages)
+ if (CMAKE_C_COMPILER)
+ list(APPEND _languages "C")
+ endif()
+ if (CMAKE_CXX_COMPILER)
+ list(APPEND _languages "CXX")
+ endif()
+
+ set(_installed_library_check_dir
"${CMAKE_CURRENT_BINARY_DIR}/${_target}_ECMInstalledLibraryCheck")
+
+ # prepare (generator) expressions, to pick up data for the check set only
after this function's call
+ set(_include_strings
"$<TARGET_PROPERTY:${_target},ECM_INSTALLED_LIBRARY_INCLUDE_STRINGS>")
+ set(_include_strings_sorted "$<LIST:SORT,${_include_strings}>")
+
+ set(_exported_target_name "$<TARGET_PROPERTY:${_target},EXPORT_NAME>")
+ set(_library_target_name
"${_library_target_namespace}$<IF:$<BOOL:${_exported_target_name}>,${_exported_target_name},${_target}>")
+
+ set(_cmake_variables_check_data
"$<TARGET_PROPERTY:${_target},ECM_INSTALLED_LIBRARY_CMAKE_VARIABLES_CHECK_DATA>")
+
+ set(_compile_definitions_check_data
"$<TARGET_PROPERTY:${_target},ECM_INSTALLED_LIBRARY_COMPILE_DEFINITIONS_CHECK_DATA>")
+
+ set(_preprocessor_macro_check_data
"$<TARGET_PROPERTY:${_target},ECM_INSTALLED_LIBRARY_PREPROCESSOR_MACRO_CHECK_DATA>")
+ set(_version_check_prefix
"$<TARGET_PROPERTY:${_target},ECM_INSTALLED_LIBRARY_VERSION_PREPROCESSOR_MACRO_CHECK_PREFIX>")
+ set(_version_check_data
"$<TARGET_PROPERTY:${_target},ECM_INSTALLED_LIBRARY_VERSION_PREPROCESSOR_MACRO_CHECK_DATA>")
+ set(_version_preprocessor_macro_check_data
"$<$<BOOL:${_version_check_data}>:${_version_check_prefix}:>${_version_check_data}$<$<STREQUAL:${_version_check_data},DEFAULT>:|$<TARGET_PROPERTY:${_target},VERSION>|${_package_version}>")
+
+ # prepare non-generator-expression list values for passing as command
+ # avoids space being used as list separator when expanding there even
inside ""
+ list(JOIN _languages $<SEMICOLON> _languages)
+ list(JOIN ARG_EXTRA_DEPENDENCIES $<SEMICOLON> _extra_dependencies)
+ list(JOIN ARG_EXTRA_LINK_LIBRARIES $<SEMICOLON> _extra_link_libraries)
+ list(JOIN ARG_COMPILE_DEFINITIONS $<SEMICOLON> _compile_definitions)
+
+ # prepare dir
+ file(MAKE_DIRECTORY ${_installed_library_check_dir})
+
+ set(_check_target_name ${_target}_installed_library_check)
+
+ add_custom_target(${_check_target_name}
+ COMMENT "Running installed library check for ${_target}"
+ COMMAND ${CMAKE_COMMAND}
+ -DOUTPUT_DIR="${_installed_library_check_dir}"
+ -DLANGUAGES="${_languages}"
+ -DPACKAGE_NAME="${_package_name}"
+ -DPACKAGE_VERSION="${_package_version}"
+ -DPACKAGE_INSTALL_PREFIX="${CMAKE_INSTALL_PREFIX}"
+ -DLIBRARY_TARGET_NAME="${_library_target_name}"
+ -DEXTRA_DEPENDENCIES="${_extra_dependencies}"
+ -DEXTRA_LINK_LIBRARIES="${_extra_link_libraries}"
+ -DEXTRA_COMPILE_DEFINITIONS="${_compile_definitions}"
+ -DINCLUDE_STRINGS="${_include_strings_sorted}"
+ -DCMAKE_VARIABLES_CHECK_DATA="${_cmake_variables_check_data}"
+
-DCOMPILE_DEFINITIONS_CHECK_DATA="${_compile_definitions_check_data}"
+ -DPREPROCESSOR_MACRO_CHECK_DATA="${_preprocessor_macro_check_data}"
+
-DVERSION_PREPROCESSOR_MACRO_CHECK_DATA="${_version_preprocessor_macro_check_data}"
+ -P
"${CMAKE_CURRENT_FUNCTION_LIST_DIR}/ecm_create_installed_library_check.cmake"
+ COMMAND ${CMAKE_COMMAND}
+ # TODO: other options to pass on? e.g. for cross-compilation,
tool-chain file?
+ -G ${CMAKE_GENERATOR}
+ ${_compiler_propagation}
+ --fresh
+ .
+ COMMAND ${CMAKE_COMMAND} --build .
+ WORKING_DIRECTORY ${_installed_library_check_dir}
+ JOB_SERVER_AWARE
+ )
+
+ add_dependencies(all_installed_library_check ${_check_target_name})
+endfunction()
+
+
+function(ecm_installed_library_check_include_strings _target)
+ set(options)
+ set(oneValueArgs PREFIX)
+ set(multiValueArgs HEADERS)
+
+ cmake_parse_arguments(ARG "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN})
+
+ # argument checks
+ if(ARG_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Unknown keywords given to
ecm_installed_library_check_include_strings(): \"${ARG_UNPARSED_ARGUMENTS}\"")
+ endif()
+
+ # store data with library target
+ get_target_property(_names ${_target}
ECM_INSTALLED_LIBRARY_INCLUDE_STRINGS)
+ if(_names STREQUAL "_names-NOTFOUND")
+ set(_names)
+ endif()
+
+ if(ARG_PREFIX)
+ string(APPEND ARG_PREFIX "/")
+ endif()
+
+ # turn file names into include strings, with optional prefix
+ foreach(_header IN LISTS ARG_HEADERS)
+ cmake_path(GET _header FILENAME _name)
+ list(APPEND _names "${ARG_PREFIX}${_name}")
+ endforeach()
+
+ set_target_properties(${_target} PROPERTIES
ECM_INSTALLED_LIBRARY_INCLUDE_STRINGS "${_names}")
+endfunction()
+
+
+function(ecm_installed_library_check_cmake_variable _target)
+ set(options UNDEFINED)
+ set(oneValueArgs NAME TYPE VALUE)
+ set(multiValueArgs)
+
+ cmake_parse_arguments(ARG "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN})
+
+ # argument checks
+ if(ARG_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Unknown keywords given to
ecm_installed_library_check_cmake_variable(): \"${ARG_UNPARSED_ARGUMENTS}\"")
+ endif()
+ if(NOT DEFINED ARG_NAME)
+ message(FATAL_ERROR "Missing NAME argument to
ecm_installed_library_check_cmake_variable().")
+ endif()
+ if(DEFINED ARG_VALUE AND ARG_UNDEFINED)
+ message(FATAL_ERROR "ecm_installed_library_check_cmake_variable cannot
be called with both VALUE and UNDEFINED args.")
+ endif()
+ if(ARG_TYPE)
+ set(_variable_types "BOOL" "STRING")
+ if(NOT ${ARG_TYPE} IN_LIST _variable_types)
+ message(FATAL_ERROR "ecm_installed_library_check_cmake_variable
called with unknown type: ${ARG_TYPE}")
+ endif()
+ else()
+ set(ARG_TYPE "STRING")
+ endif()
+
+ # store data with library target
+ get_target_property(_data ${_target}
ECM_INSTALLED_LIBRARY_CMAKE_VARIABLES_CHECK_DATA)
+ if(_data STREQUAL "_data-NOTFOUND")
+ set(_data)
+ endif()
+
+ if(DEFINED ARG_VALUE)
+ set(_var_check_data "${ARG_NAME}=${ARG_VALUE}")
+ elseif(ARG_UNDEFINED)
+ set(_var_check_data "${ARG_NAME}!")
+ else() # defined
+ set(_var_check_data "${ARG_NAME}?")
+ endif()
+ if(${ARG_TYPE} STREQUAL "BOOL")
+ string(PREPEND _var_check_data "B:")
+ else() # STRING
+ string(PREPEND _var_check_data "S:")
+ endif()
+
+ list(APPEND _data "${_var_check_data}")
+ set_target_properties(${_target} PROPERTIES
ECM_INSTALLED_LIBRARY_CMAKE_VARIABLES_CHECK_DATA "${_data}")
+endfunction()
+
+
+function(_ecm_installed_library_check_preprocessor_macro_check_data _var_name
_name _check_type _value)
+ if(_check_type STREQUAL "VALUE")
+ set(_var_check_data "${_name}=${_value}")
+ elseif(_check_type STREQUAL "UNDEFINED")
+ set(_var_check_data "${_name}!")
+ else() # "DEFINED"
+ set(_var_check_data "${_name}?")
+ endif()
+ set(${_var_name} "${_var_check_data}" PARENT_SCOPE)
+endfunction()
+
+
+function(ecm_installed_library_check_compile_definition _target)
+ set(options UNDEFINED)
+ set(oneValueArgs NAME VALUE)
+ set(multiValueArgs)
+
+ cmake_parse_arguments(ARG "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN})
+
+ # argument checks
+ if(ARG_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Unknown keywords given to
ecm_installed_library_check_compile_definition():
\"${ARG_UNPARSED_ARGUMENTS}\"")
+ endif()
+ if(NOT DEFINED ARG_NAME)
+ message(FATAL_ERROR "Missing NAME argument to
ecm_installed_library_check_compile_definition().")
+ endif()
+ if(DEFINED ARG_VALUE AND ARG_UNDEFINED)
+ message(FATAL_ERROR "ecm_installed_library_check_compile_definition
cannot be called with both VALUE and UNDEFINED args.")
+ endif()
+
+ # store data with library target
+ get_target_property(_data ${_target}
ECM_INSTALLED_LIBRARY_COMPILE_DEFINITIONS_CHECK_DATA)
+ if(_data STREQUAL "_data-NOTFOUND")
+ set(_data)
+ endif()
+
+ if(DEFINED ARG_VALUE)
+ set(_check_type "VALUE")
+ elseif(ARG_UNDEFINED)
+ set(_check_type "UNDEFINED")
+ else()
+ set(_check_type "DEFINED")
+ endif()
+
+ _ecm_installed_library_check_preprocessor_macro_check_data(_var_check_data
${ARG_NAME} ${_check_type} "${ARG_VALUE}")
+
+ list(APPEND _data "${_var_check_data}")
+ set_target_properties(${_target} PROPERTIES
ECM_INSTALLED_LIBRARY_COMPILE_DEFINITIONS_CHECK_DATA "${_data}")
+endfunction()
+
+
+function(ecm_installed_library_check_preprocessor_macro _target)
+ set(options UNDEFINED)
+ set(oneValueArgs NAME VALUE)
+ set(multiValueArgs)
+
+ cmake_parse_arguments(ARG "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN})
+
+ # argument checks
+ if(ARG_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Unknown keywords given to
ecm_installed_library_check_preprocessor_macro():
\"${ARG_UNPARSED_ARGUMENTS}\"")
+ endif()
+ if(NOT DEFINED ARG_NAME)
+ message(FATAL_ERROR "Missing NAME argument to
ecm_installed_library_check_preprocessor_macro().")
+ endif()
+ if(ARG_VALUE AND ARG_UNDEFINED)
+ message(FATAL_ERROR "ecm_installed_library_check_preprocessor_macro
cannot be called with both VALUE and UNDEFINED args.")
+ endif()
+
+ # store data with library target
+ get_target_property(_data ${_target}
ECM_INSTALLED_LIBRARY_PREPROCESSOR_MACRO_CHECK_DATA)
+ if(_data STREQUAL "_data-NOTFOUND")
+ set(_data)
+ endif()
+
+ if(DEFINED ARG_VALUE)
+ set(_check_type "VALUE")
+ elseif(ARG_UNDEFINED)
+ set(_check_type "UNDEFINED")
+ else()
+ set(_check_type "DEFINED")
+ endif()
+
+ _ecm_installed_library_check_preprocessor_macro_check_data(_var_check_data
${ARG_NAME} ${_check_type} "${ARG_VALUE}")
+
+ list(APPEND _data "${_var_check_data}")
+ set_target_properties(${_target} PROPERTIES
ECM_INSTALLED_LIBRARY_PREPROCESSOR_MACRO_CHECK_DATA "${_data}")
+endfunction()
+
+
+function(ecm_installed_library_check_version_preprocessor_macros _target)
+ set(options)
+ set(oneValueArgs PREFIX VERSION)
+ set(multiValueArgs)
+
+ cmake_parse_arguments(ARG "${options}" "${oneValueArgs}"
"${multiValueArgs}" ${ARGN})
+
+ # argument checks
+ if(ARG_UNPARSED_ARGUMENTS)
+ message(FATAL_ERROR "Unknown keywords given to
ecm_installed_library_check_version_preprocessor_macros():
\"${ARG_UNPARSED_ARGUMENTS}\"")
+ endif()
+
+ if(DEFINED ARG_PREFIX)
+ set(_prefix "${ARG_PREFIX}")
+ else()
+ string(TOUPPER "${_target}" _prefix)
+ endif()
+
+ # storing separately, as *_DATA will need to be
generator-expression-compared to "DEFAULT"
+ set_target_properties(${_target} PROPERTIES
ECM_INSTALLED_LIBRARY_VERSION_PREPROCESSOR_MACRO_CHECK_PREFIX "${_prefix}")
+
+ if(DEFINED ARG_VERSION)
+ set(_version "${ARG_VERSION}")
+ else()
+ set(_version "DEFAULT")
+ endif()
+ set_target_properties(${_target} PROPERTIES
ECM_INSTALLED_LIBRARY_VERSION_PREPROCESSOR_MACRO_CHECK_DATA "${_version}")
+endfunction()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extra-cmake-modules-6.29.0/modules/ECMSetupVersion.cmake
new/extra-cmake-modules-6.30.0/modules/ECMSetupVersion.cmake
--- old/extra-cmake-modules-6.29.0/modules/ECMSetupVersion.cmake
2026-08-07 22:38:40.000000000 +0200
+++ new/extra-cmake-modules-6.30.0/modules/ECMSetupVersion.cmake
2026-09-04 13:36:44.000000000 +0200
@@ -36,6 +36,10 @@
<prefix>_VERSION_STRING - <version> (use <prefix>_VERSION instead)
+Since ECM 6.30 additionally the forms ``<major>.<minor>`` and ``<major>``
+are supported, the variables for the respective missing components are set to
+empty strings.
+
With CMake versions older than 4.0.0 and if CMake policy CMP0048 is not
``NEW``,
the following CMake variables will also be set::
@@ -150,9 +154,22 @@
string(REGEX REPLACE "0*([0-9]+)" "\\1" _minor
"${PROJECT_VERSION_MINOR}")
string(REGEX REPLACE "0*([0-9]+)" "\\1" _patch
"${PROJECT_VERSION_PATCH}")
else()
- string(REGEX REPLACE "^0*([0-9]+)\\.[0-9]+\\.[0-9]+.*" "\\1" _major
"${_version}")
- string(REGEX REPLACE "^[0-9]+\\.0*([0-9]+)\\.[0-9]+.*" "\\1" _minor
"${_version}")
- string(REGEX REPLACE "^[0-9]+\\.[0-9]+\\.0*([0-9]+).*" "\\1" _patch
"${_version}")
+ # not applying final "$", to be able to ignore .<tweak>, possibly also
other appendices in usage
+ string(REGEX MATCH "^0*([0-9]+)(\\.0*([0-9]+)(\\.0*([0-9]+))?)?"
_match "${_version}")
+ if(_match STREQUAL "")
+ message(FATAL_ERROR "ecm_setup_version given version argument not
matching <major>[.<minor>[.<patch>][.<tweak>]]: ${_version}")
+ endif()
+ set(_major ${CMAKE_MATCH_1})
+ if (CMAKE_MATCH_COUNT GREATER_EQUAL 3)
+ set(_minor ${CMAKE_MATCH_3})
+ else()
+ set(_minor "")
+ endif()
+ if (CMAKE_MATCH_COUNT GREATER_EQUAL 5)
+ set(_patch ${CMAKE_MATCH_5})
+ else()
+ set(_patch "")
+ endif()
endif()
if(NOT DEFINED ESV_SOVERSION) # use DEFINED, so "0" as valid SO version is
not evaluated to FALSE
@@ -192,6 +209,22 @@
set(HEADER_VERSION_MAJOR "${_major}")
set(HEADER_VERSION_MINOR "${_minor}")
set(HEADER_VERSION_PATCH "${_patch}")
+ # handle patch or even minor level not being set
+ if (_minor STREQUAL "")
+ set(_minor_number 0)
+ else()
+ set(_minor_number "${_minor}")
+ endif()
+ if (_patch STREQUAL "")
+ set(_patch_number 0)
+ else()
+ set(_patch_number "${_patch}")
+ endif()
+ math(
+ EXPR HEADER_VERSION_HEXNUMBER "${_major}*65536 +
${_minor_number}*256 + ${_patch_number}"
+ OUTPUT_FORMAT HEXADECIMAL
+ )
+
configure_file("${_ECM_SETUP_VERSION_HEADER_TEMPLATE}"
"${ESV_VERSION_HEADER}")
endif()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extra-cmake-modules-6.29.0/modules/ECMVersionHeader.h.in
new/extra-cmake-modules-6.30.0/modules/ECMVersionHeader.h.in
--- old/extra-cmake-modules-6.29.0/modules/ECMVersionHeader.h.in
2026-08-07 22:38:40.000000000 +0200
+++ new/extra-cmake-modules-6.30.0/modules/ECMVersionHeader.h.in
2026-09-04 13:36:44.000000000 +0200
@@ -7,6 +7,7 @@
#define @HEADER_PREFIX@_VERSION_MAJOR @HEADER_VERSION_MAJOR@
#define @HEADER_PREFIX@_VERSION_MINOR @HEADER_VERSION_MINOR@
#define @HEADER_PREFIX@_VERSION_PATCH @HEADER_VERSION_PATCH@
-#define @HEADER_PREFIX@_VERSION
((@HEADER_VERSION_MAJOR@<<16)|(@HEADER_VERSION_MINOR@<<8)|(@HEADER_VERSION_PATCH@))
+// Packed format 0xMMmmpp, 0xMM == major, 0xmm == minor, 0xpp == patch
+#define @HEADER_PREFIX@_VERSION @HEADER_VERSION_HEXNUMBER@
#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extra-cmake-modules-6.29.0/modules/ecm_create_installed_library_check.cmake
new/extra-cmake-modules-6.30.0/modules/ecm_create_installed_library_check.cmake
---
old/extra-cmake-modules-6.29.0/modules/ecm_create_installed_library_check.cmake
1970-01-01 01:00:00.000000000 +0100
+++
new/extra-cmake-modules-6.30.0/modules/ecm_create_installed_library_check.cmake
2026-09-04 13:36:44.000000000 +0200
@@ -0,0 +1,409 @@
+# SPDX-FileCopyrightText: 2026 Friedrich W. H. Kossebau <[email protected]>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
+cmake_policy(VERSION 3.29)
+
+#TODO: enable VERBOSE mode via some env var
+set(_verbose_mode FALSE)
+
+# Expected arguments
+set(_expected_arg_names
+ LANGUAGES # languages to set in the project() call
+ OUTPUT_DIR # dir where to create the CMakeLists.txt file
+ PACKAGE_NAME # package name
+ PACKAGE_VERSION # package version
+ PACKAGE_INSTALL_PREFIX # package installation prefix
+ LIBRARY_TARGET_NAME # library target name
+ EXTRA_DEPENDENCIES # extra package dependencies
+ EXTRA_LINK_LIBRARIES # extra library targets to link to
+ EXTRA_COMPILE_DEFINITIONS # compile definitions to use
+ INCLUDE_STRINGS # include strings
+ CMAKE_VARIABLES_CHECK_DATA # data about cmake variables to check, list of
format B/S:name=value
+ COMPILE_DEFINITIONS_CHECK_DATA # data about compile definitions to check,
list of format
+ PREPROCESSOR_MACRO_CHECK_DATA # data about preprocessor macros to check,
list of format
+)
+set(_missing_arg FALSE)
+foreach (_arg_name IN LISTS _expected_arg_names)
+ if(NOT DEFINED ${_arg_name})
+ set(_missing_arg TRUE)
+ message(SEND_ERROR "Missing argument: ${_arg_name}.")
+ endif()
+endforeach()
+if(_missing_arg)
+ message(FATAL_ERROR "Aborting over missing arguments.")
+endif()
+
+
+# helper functions
+function(_set_extra_deps_code _var_name _extra_deps)
+ set(_statements)
+ list(LENGTH _extra_deps _deps_count)
+ set(_i 0)
+ while(${_i} LESS ${_deps_count})
+ list(GET _extra_deps ${_i} _extra_package_name)
+ math(EXPR _i "${_i} + 1")
+ set(_extra_package_version_string)
+ # check next arg if it is version and thus to be consumed
+ if(${_i} LESS ${_deps_count})
+ list(GET _extra_deps ${_i} _extra_package_version)
+ if(_extra_package_version MATCHES
"^([0-9]+)\\.([0-9]+)(\\.([0-9]+))?$")
+ set(_extra_package_version_string " ${_extra_package_version}")
+ math(EXPR _i "${_i} + 1")
+ endif()
+ endif()
+ string(APPEND _statements
"find_package(${_extra_package_name}${_extra_package_version_string}
REQUIRED)\n")
+ endwhile()
+ set(${_var_name} ${_statements} PARENT_SCOPE)
+endfunction()
+
+
+function(_append_macro_check_data_by_version_checks _var_name _check_data)
+ string(REGEX MATCH "^(.+):(.+)$" _match "${_check_data}")
+ if(_match STREQUAL "")
+ message(FATAL_ERROR "Broken version preprocessor macro argument:
${_check_data}.")
+ endif()
+ set(_prefix "${CMAKE_MATCH_1}")
+ set(_version_data "${CMAKE_MATCH_2}")
+ if(_version_data MATCHES "^DEFAULT\\|(.*)\\|(.*)$")
+ if (NOT CMAKE_MATCH_1 STREQUAL "")
+ set(_version "${CMAKE_MATCH_1}")
+ elseif (NOT CMAKE_MATCH_2 STREQUAL "")
+ set(_version "${CMAKE_MATCH_2}")
+ else()
+ message(FATAL_ERROR
"ecm_installed_library_check_version_preprocessor_macros() called without
VERSION argument, but neither project or library target provide a default.")
+ endif()
+ else()
+ set(_version "${_version_data}")
+ endif()
+
+ string(REGEX MATCH "^0*([0-9]+)\\.0*([0-9]+)\\.0*([0-9]+)$" _match
"${_version}")
+ if ("${_match}" STREQUAL "")
+ message(FATAL_ERROR "Version to use by
ecm_installed_library_check_version_preprocessor_macros() not in
<major>.<minor>.<patch> format, is: ${_version}")
+ endif()
+ set(_version_major "${CMAKE_MATCH_1}")
+ set(_version_minor "${CMAKE_MATCH_2}")
+ set(_version_patch "${CMAKE_MATCH_3}")
+
+ math(
+ EXPR _hex_number "${_version_major}*65536 + ${_version_minor}*256 +
${_version_patch}"
+ OUTPUT_FORMAT HEXADECIMAL
+ )
+
+ list(APPEND ${_var_name}
+ "${_prefix}_VERSION=${_hex_number}"
+ "${_prefix}_VERSION_MAJOR=${_version_major}"
+ "${_prefix}_VERSION_MINOR=${_version_minor}"
+ "${_prefix}_VERSION_PATCH=${_version_patch}"
+ )
+ set(${_var_name} ${${_var_name}} PARENT_SCOPE)
+endfunction()
+
+
+function(_set_macro_check_init_code _var_name _subject_name)
+ set(_check_code)
+ if (_verbose_mode)
+ string(APPEND _check_code "#pragma message(\\\"Checking
${_subject_name}\\\")\n")
+ endif()
+ string(APPEND _check_code
+"#define _ECM_INSTALLED_LIBRARY_CHECK_VALUE_TO_STRING(x) #x
+#define _ECM_INSTALLED_LIBRARY_CHECK_VALUE(x)
_ECM_INSTALLED_LIBRARY_CHECK_VALUE_TO_STRING(x)
+")
+ set(${_var_name} ${_check_code} PARENT_SCOPE)
+endfunction()
+
+
+function(_set_macro_value_check_code _var_name _name _value)
+ set(_check_code
+"#if !defined(${_name})
+ #error(\\\"${_name}: not defined\\\")
+#else
+ #if ${_name} != ${_value}
+ #pragma message(\\\"${_name}: is '\\\"
_ECM_INSTALLED_LIBRARY_CHECK_VALUE(${_name}) \\\"'\\\")
+ #error(\\\"${_name}: expecting '${_value}'\\\")
+")
+ if (_verbose_mode)
+ string(APPEND _check_code
+" #else
+ #pragma message(\\\"${_name}: as expected matches '${_value}'\\\")
+")
+ endif()
+ string(APPEND _check_code
+" #endif
+#endif
+")
+ set(${_var_name} ${_check_code} PARENT_SCOPE)
+endfunction()
+
+
+function(_set_macro_defined_check_code _var_name _name)
+ set(_check_code
+"#if !defined(${_name})
+ #error(\\\"${_name}: is undefined, expecting defined\\\")
+")
+ if (_verbose_mode)
+ string(APPEND _check_code
+"#else
+ #pragma message(\\\"${_name}: as expected defined\\\")
+")
+ endif()
+ string(APPEND _check_code
+"#endif
+")
+ set(${_var_name} ${_check_code} PARENT_SCOPE)
+endfunction()
+
+
+function(_set_macro_undefined_check_code _var_name _name)
+ set(_check_code
+"#if defined(${_name})
+ #error(\\\"${_name}: is defined, expecting undefined\\\")
+")
+ if (_verbose_mode)
+ string(APPEND _check_code
+"#else
+ #pragma message(\\\"${_name}: as expected undefined\\\")
+")
+ endif()
+ string(APPEND _check_code
+"#endif
+")
+ set(${_var_name} ${_check_code} PARENT_SCOPE)
+endfunction()
+
+
+function(_set_preprocessor_macro_check_statements _var_name _arg_type_name
_check_data)
+ set(_check_statements)
+ foreach(_definition_data IN LISTS _check_data)
+ string(REGEX MATCH "^([A-Za-z0-9_]+)([\!\?\=])(.*)$" _match
"${_definition_data}")
+ if(_match STREQUAL "")
+ message(FATAL_ERROR "Broken ${_arg_type_name} argument:
${_definition_data}.")
+ endif()
+
+ set(_macro_var_name "${CMAKE_MATCH_1}")
+ if (CMAKE_MATCH_2 STREQUAL "=")
+ _set_macro_value_check_code(_check_code ${_macro_var_name}
${CMAKE_MATCH_3})
+ elseif (CMAKE_MATCH_2 STREQUAL "!")
+ _set_macro_undefined_check_code(_check_code ${_macro_var_name})
+ else()
+ _set_macro_defined_check_code(_check_code ${_macro_var_name})
+ endif()
+ string(APPEND _check_statements "${_check_code}")
+ endforeach()
+
+ set(${_var_name} ${_check_statements} PARENT_SCOPE)
+endfunction()
+
+
+function(_set_compile_definitions_check_code _var_name _check_data)
+ _set_preprocessor_macro_check_statements(_check_statements "compile
definition" "${_check_data}")
+
+ _set_macro_check_init_code(_init_check_code "compile definitions" FALSE)
+
+ set(_source_file "ecm_installed_library_check_compile_definitions.cpp")
+ set(_definitions_check_code "
+file(GENERATE OUTPUT ${_source_file} CONTENT
+\"${_init_check_code}${_check_statements}\")\n
+target_sources(InstalledLibraryCheck PRIVATE ${_source_file})\n")
+
+ set(${_var_name} ${_definitions_check_code} PARENT_SCOPE)
+endfunction()
+
+
+function(_set_preprocessor_macro_check_code _var_name _check_data)
+ _set_preprocessor_macro_check_statements(_check_statements "preprocessor
macro" "${_check_data}")
+
+ _set_macro_check_init_code(_init_check_code "preprocessor macros")
+
+ set(_macros_check_code "\n\"\n${_init_check_code}${_check_statements}\"")
+
+ set(${_var_name} ${_macros_check_code} PARENT_SCOPE)
+endfunction()
+
+
+function(_set_cmake_variable_defined_check_code _var_name _name)
+ set(_check_code
+"if(NOT DEFINED ${_name})
+ message(SEND_ERROR \"${_name}: is undefined, expecting defined\")
+")
+ if (_verbose_mode)
+ string(APPEND _check_code
+"else()
+ message(STATUS \"${_name}: as expected defined\")
+")
+ endif()
+ string(APPEND _check_code
+"endif()
+")
+ set(${_var_name} ${_check_code} PARENT_SCOPE)
+endfunction()
+
+
+function(_set_cmake_variable_undefined_check_code _var_name _name)
+ set(_check_code
+"if(DEFINED ${_name})
+ message(SEND_ERROR \"${_name}: is defined, expecting undefined\")
+")
+ if (_verbose_mode)
+ string(APPEND _check_code
+"else()
+ message(STATUS \"${_name}: as expected undefined\")
+")
+ endif()
+ string(APPEND _check_code
+"endif()
+")
+ set(${_var_name} ${_check_code} PARENT_SCOPE)
+endfunction()
+
+
+function(_set_cmake_variable_check_code _var_name _name _type _value)
+ if (_type STREQUAL "BOOL")
+ # test boolean type by code evaluating the variable
+ if (${_value})
+ set(_value_error_condition_code "NOT \${${_name}}")
+ set(_value_error_report "is FALSE, expecting TRUE")
+ else()
+ set(_value_error_condition_code "\${${_name}}")
+ set(_value_error_report "is TRUE, expecting FALSE")
+ endif()
+ else() # STRING
+ set(_value_error_condition_code "NOT \${${_name}} STREQUAL
\"${_value}\"")
+ set(_value_error_report "is '\${${_name}}', expecting '${_value}'")
+ endif()
+
+ set(_check_code
+"if(NOT DEFINED ${_name})
+ message(SEND_ERROR \"${_name}: not defined\")
+else()
+ if (${_value_error_condition_code})
+ message(SEND_ERROR \"${_name}: ${_value_error_report}\")
+")
+ if (_verbose_mode)
+ string(APPEND _check_code
+" else()
+ message(STATUS \"${_name}: as expected matches '${_value}'\")
+")
+ endif()
+ string(APPEND _check_code
+" endif()
+endif()
+")
+ set(${_var_name} ${_check_code} PARENT_SCOPE)
+endfunction()
+
+
+function(_set_cmake_variables_check_code _var_name _check_data)
+ set(_check_code)
+ if (_verbose_mode)
+ string(APPEND _check_code "message(STATUS \"Checking CMake
variables\")\n")
+ endif()
+
+ foreach(_cmake_variable_data IN LISTS _check_data)
+ string(REGEX MATCH "^([SB]):([A-Za-z0-9_]+)([\!\?\=])(.*)$" _match
"${_cmake_variable_data}")
+ if(_match STREQUAL "")
+ message(SEND_ERROR "Broken cmake variable argument:
${_cmake_variable_data}.")
+ endif()
+ set(_cmake_var_name "${CMAKE_MATCH_2}")
+ if (CMAKE_MATCH_1 STREQUAL "B")
+ set(_type "BOOL")
+ else()
+ set(_type "STRING")
+ endif()
+
+ if (CMAKE_MATCH_3 STREQUAL "=")
+ _set_cmake_variable_check_code(_var_check_code ${_cmake_var_name}
${_type} "${CMAKE_MATCH_4}" )
+ elseif (CMAKE_MATCH_3 STREQUAL "!")
+ _set_cmake_variable_undefined_check_code(_var_check_code
${_cmake_var_name})
+ else()
+ _set_cmake_variable_defined_check_code(_var_check_code
${_cmake_var_name})
+ endif()
+
+ string(APPEND _check_code "${_var_check_code}")
+ endforeach()
+ set(${_var_name} ${_check_code} PARENT_SCOPE)
+endfunction()
+
+
+# process arguments
+set(_languages)
+if (LANGUAGES)
+ string(REPLACE ";" " " _languages "${LANGUAGES}")
+ string(PREPEND _languages " LANGUAGES ")
+endif()
+if(PACKAGE_VERSION)
+ set(_package_version_exact " EXACT ")
+else()
+ set(_package_version_exact " ")
+endif()
+set(_extra_find_packages_statements)
+if(EXTRA_DEPENDENCIES)
+ _set_extra_deps_code(_extra_find_packages_statements
"${EXTRA_DEPENDENCIES}")
+endif()
+set(_extra_link_libraries_list)
+foreach(_link_library IN LISTS EXTRA_LINK_LIBRARIES)
+ string(APPEND _extra_link_libraries_list "\n ${_link_library}")
+endforeach()
+set(_compile_definitions_statement)
+if(EXTRA_COMPILE_DEFINITIONS)
+ set(_compile_definitions_statement
"target_compile_definitions(InstalledLibraryCheck PRIVATE
${EXTRA_COMPILE_DEFINITIONS})\n")
+endif()
+string(JOIN "\n " _include_strings_lines ${INCLUDE_STRINGS})
+
+set(_cmake_variables_check_code)
+if (CMAKE_VARIABLES_CHECK_DATA)
+ _set_cmake_variables_check_code(_cmake_variables_check_code
"${CMAKE_VARIABLES_CHECK_DATA}")
+ string(PREPEND _cmake_variables_check_code "\n")
+endif()
+
+set(_compile_definitions_check_code)
+if(COMPILE_DEFINITIONS_CHECK_DATA)
+ _set_compile_definitions_check_code(_compile_definitions_check_code
"${COMPILE_DEFINITIONS_CHECK_DATA}")
+endif()
+
+if(VERSION_PREPROCESSOR_MACRO_CHECK_DATA)
+ _append_macro_check_data_by_version_checks(PREPROCESSOR_MACRO_CHECK_DATA
"${VERSION_PREPROCESSOR_MACRO_CHECK_DATA}")
+endif()
+
+set(_preprocessor_macro_check_code)
+if(PREPROCESSOR_MACRO_CHECK_DATA)
+ _set_preprocessor_macro_check_code(_preprocessor_macro_check_code
"${PREPROCESSOR_MACRO_CHECK_DATA}")
+endif()
+
+
+# create CMakeLists.txt file
+file(CONFIGURE
+ OUTPUT "${OUTPUT_DIR}/CMakeLists.txt"
+ CONTENT
+"# This file was generated by ecm_add_installed_library_check(). DO NOT EDIT!
+cmake_minimum_required(VERSION 3.29)
+
+project(InstalledLibraryCheck@_languages@)
+
+find_package(@PACKAGE_NAME@ @PACKAGE_VERSION@@_package_version_exact@CONFIG
REQUIRED NO_DEFAULT_PATH
+ PATHS \"@PACKAGE_INSTALL_PREFIX@\"
+)
+@_extra_find_packages_statements@
+include(FeatureSummary)
+feature_summary(WHAT ALL FATAL_ON_MISSING_REQUIRED_PACKAGES)
+@_cmake_variables_check_code@
+add_library(InstalledLibraryCheck MODULE)
+target_link_libraries(InstalledLibraryCheck
+ @LIBRARY_TARGET_NAME@@_extra_link_libraries_list@
+)
+@_compile_definitions_statement@
+set(_include_strings
+ @_include_strings_lines@
+)
+@_compile_definitions_check_code@
+set(_preprocessor_macro_check_statements@_preprocessor_macro_check_code@)
+
+foreach(_include_string IN LISTS _include_strings)
+ string(REPLACE \"/\" \"__\" _escaped_include_string \${_include_string})
+ set(_source_file
\"\${CMAKE_CURRENT_BINARY_DIR}/\${_escaped_include_string}.cpp\")
+ file(GENERATE OUTPUT \${_source_file} CONTENT \"#include
<\${_include_string}>\\n\${_preprocessor_macro_check_statements}\")
+ target_sources(InstalledLibraryCheck PRIVATE \${_source_file})
+endforeach()
+"
+ @ONLY
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extra-cmake-modules-6.29.0/test-modules/CMakeLists.txt
new/extra-cmake-modules-6.30.0/test-modules/CMakeLists.txt
--- old/extra-cmake-modules-6.29.0/test-modules/CMakeLists.txt 1970-01-01
01:00:00.000000000 +0100
+++ new/extra-cmake-modules-6.30.0/test-modules/CMakeLists.txt 2026-09-04
13:36:44.000000000 +0200
@@ -0,0 +1,9 @@
+# SPDX-FileCopyrightText: 2026 Friedrich W. H. Kossebau <[email protected]>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
+install(FILES
+ test_execute_and_compare.cmake
+
+ DESTINATION ${TEST_MODULES_INSTALL_DIR}
+)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extra-cmake-modules-6.29.0/tests/ECMSetupVersionTest/CMakeLists.txt
new/extra-cmake-modules-6.30.0/tests/ECMSetupVersionTest/CMakeLists.txt
--- old/extra-cmake-modules-6.29.0/tests/ECMSetupVersionTest/CMakeLists.txt
2026-08-07 22:38:40.000000000 +0200
+++ new/extra-cmake-modules-6.30.0/tests/ECMSetupVersionTest/CMakeLists.txt
2026-09-04 13:36:44.000000000 +0200
@@ -35,6 +35,7 @@
add_version_test(new_explicit_soversion dummy)
add_version_test(new_explicit_version_file dummy)
add_version_test(new_explicit_version_file_abspath dummy)
+add_version_test(new_explicit_version_file_no_patchlevel dummy)
add_version_test(new_project_header check_header)
add_version_test(new_project_header_abspath check_header)
add_version_test(new_project_header_prefix check_header)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extra-cmake-modules-6.29.0/tests/ECMSetupVersionTest/new_explicit_version_file_no_patchlevel/CMakeLists.txt
new/extra-cmake-modules-6.30.0/tests/ECMSetupVersionTest/new_explicit_version_file_no_patchlevel/CMakeLists.txt
---
old/extra-cmake-modules-6.29.0/tests/ECMSetupVersionTest/new_explicit_version_file_no_patchlevel/CMakeLists.txt
1970-01-01 01:00:00.000000000 +0100
+++
new/extra-cmake-modules-6.30.0/tests/ECMSetupVersionTest/new_explicit_version_file_no_patchlevel/CMakeLists.txt
2026-09-04 13:36:44.000000000 +0200
@@ -0,0 +1,69 @@
+cmake_minimum_required(VERSION 3.16)
+
+project(new_explicit_version_file_no_patchlevel VERSION 1.5.6.7)
+
+set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../../modules)
+include(ECMSetupVersion)
+
+ecm_setup_version(2.3
+ VARIABLE_PREFIX Foo
+ PACKAGE_VERSION_FILE FooVersion.cmake
+)
+
+include(../version_helpers.cmake)
+project_version_var_checks(1.5.6.7)
+version_var_checks(Foo 2.3)
+assert_var_num_value(Foo_SOVERSION 2)
+
+macro(AnyNewer_2_3_checks filename)
+ # too old - fails
+ test_version_file("${filename}" "3.1")
+ assert_var_str_value(PACKAGE_VERSION "2.3")
+ assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED)
+ assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED)
+
+ # too old - fails
+ test_version_file("${filename}" "3")
+ assert_var_str_value(PACKAGE_VERSION "2.3")
+ assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED)
+ assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED)
+
+ # too old - fails
+ test_version_file("${filename}" "2.3.4")
+ assert_var_str_value(PACKAGE_VERSION "2.3")
+ assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE FALSE ALLOW_UNDEFINED)
+ assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED)
+
+ # newer - succeeds
+ test_version_file("${filename}" "1.1")
+ assert_var_str_value(PACKAGE_VERSION "2.3")
+ assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE TRUE)
+ assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED)
+
+ # newer - succeeds
+ test_version_file("${filename}" "2.1")
+ assert_var_str_value(PACKAGE_VERSION "2.3")
+ assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE TRUE)
+ assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED)
+
+ # newer - succeeds
+ test_version_file("${filename}" "2")
+ assert_var_str_value(PACKAGE_VERSION "2.3")
+ assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE TRUE)
+ assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED)
+
+ # unspecified - succeeds
+ test_version_file("${filename}" "")
+ assert_var_str_value(PACKAGE_VERSION "2.3")
+ assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE TRUE)
+ assert_var_bool_value(PACKAGE_VERSION_EXACT FALSE ALLOW_UNDEFINED)
+
+ # exact - succeeds
+ test_version_file("${filename}" "2.3")
+ assert_var_str_value(PACKAGE_VERSION "2.3")
+ assert_var_bool_value(PACKAGE_VERSION_COMPATIBLE TRUE)
+ assert_var_bool_value(PACKAGE_VERSION_EXACT TRUE)
+endmacro()
+AnyNewer_2_3_checks("${CMAKE_CURRENT_BINARY_DIR}/FooVersion.cmake")
+
+add_executable(dummy main.c)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extra-cmake-modules-6.29.0/tests/ECMSetupVersionTest/new_explicit_version_file_no_patchlevel/main.c
new/extra-cmake-modules-6.30.0/tests/ECMSetupVersionTest/new_explicit_version_file_no_patchlevel/main.c
---
old/extra-cmake-modules-6.29.0/tests/ECMSetupVersionTest/new_explicit_version_file_no_patchlevel/main.c
1970-01-01 01:00:00.000000000 +0100
+++
new/extra-cmake-modules-6.30.0/tests/ECMSetupVersionTest/new_explicit_version_file_no_patchlevel/main.c
2026-09-04 13:36:44.000000000 +0200
@@ -0,0 +1,4 @@
+int main()
+{
+ return 0;
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extra-cmake-modules-6.29.0/tests/ExecuteCoreModules/CMakeLists.txt
new/extra-cmake-modules-6.30.0/tests/ExecuteCoreModules/CMakeLists.txt
--- old/extra-cmake-modules-6.29.0/tests/ExecuteCoreModules/CMakeLists.txt
2026-08-07 22:38:40.000000000 +0200
+++ new/extra-cmake-modules-6.30.0/tests/ExecuteCoreModules/CMakeLists.txt
2026-09-04 13:36:44.000000000 +0200
@@ -3,6 +3,8 @@
set(ECM_GLOBAL_FIND_VERSION "5.90.0")
file(GLOB all_core_modules "${CMAKE_CURRENT_SOURCE_DIR}/../../modules/*cmake")
+# drop helper scripts from the list
+list(FILTER all_core_modules EXCLUDE REGEX "modules/ecm_.*cmake")
set(CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../modules)
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/../../find-modules)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extra-cmake-modules-6.29.0/tests/ExecuteKDEModules/CMakeLists.txt
new/extra-cmake-modules-6.30.0/tests/ExecuteKDEModules/CMakeLists.txt
--- old/extra-cmake-modules-6.29.0/tests/ExecuteKDEModules/CMakeLists.txt
2026-08-07 22:38:40.000000000 +0200
+++ new/extra-cmake-modules-6.30.0/tests/ExecuteKDEModules/CMakeLists.txt
2026-09-04 13:36:44.000000000 +0200
@@ -7,12 +7,16 @@
KDECMakeSettings
KDECompilerSettings
KDEFrameworkCompilerSettings
- ECMMarkNonGuiExecutable
+
+ KDEClangFormat
+ KDEGitCommitHooks
+ KDEMetaInfoPlatformCheck
+ KDEPackageAppTemplates
)
set(ECM_KDE_MODULE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../kde-modules)
set(ECM_MODULE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/../../modules)
-set(CMAKE_MODULE_PATH "${ECM_KDE_MODULE_DIR}" "${ECM_MODULE_DIR}")
+set(CMAKE_MODULE_PATH "${ECM_KDE_MODULE_DIR}")
foreach(module ${all_kde_modules})
message(STATUS "module: ${module}")
@@ -20,6 +24,10 @@
endforeach()
add_executable(dummy main.c)
+
+# tune test for Apple, no bundle expected there
+list(APPEND CMAKE_MODULE_PATH "${ECM_MODULE_DIR}")
+include(ECMMarkNonGuiExecutable)
ecm_mark_nongui_executable(dummy)
set_target_properties(dummy PROPERTIES RUNTIME_OUTPUT_DIRECTORY
${CMAKE_CURRENT_BINARY_DIR})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/extra-cmake-modules-6.29.0/tests/ExecuteKDEModules/metainfo.yaml
new/extra-cmake-modules-6.30.0/tests/ExecuteKDEModules/metainfo.yaml
--- old/extra-cmake-modules-6.29.0/tests/ExecuteKDEModules/metainfo.yaml
1970-01-01 01:00:00.000000000 +0100
+++ new/extra-cmake-modules-6.30.0/tests/ExecuteKDEModules/metainfo.yaml
2026-09-04 13:36:44.000000000 +0200
@@ -0,0 +1,9 @@
+# Needed for KDEMetaInfoPlatformCheck
+description: ExecuteKDEModules test
+platforms:
+ - name: Linux
+ - name: FreeBSD
+ - name: Windows
+ - name: macOS
+ - name: Android
+release: false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/extra-cmake-modules-6.29.0/toolchain/CMakeLists.txt
new/extra-cmake-modules-6.30.0/toolchain/CMakeLists.txt
--- old/extra-cmake-modules-6.29.0/toolchain/CMakeLists.txt 1970-01-01
01:00:00.000000000 +0100
+++ new/extra-cmake-modules-6.30.0/toolchain/CMakeLists.txt 2026-09-04
13:36:44.000000000 +0200
@@ -0,0 +1,18 @@
+# SPDX-FileCopyrightText: 2026 Friedrich W. H. Kossebau <[email protected]>
+#
+# SPDX-License-Identifier: BSD-3-Clause
+
+install(FILES
+ Android.cmake
+ deployment-file.json.in
+ deployment-file-qt514.json.in
+ deployment-file-qt6.json.in
+ deployment-file-qt6.json.in.license
+ ECMAndroidDeployQt5.cmake
+ ecm-version.gradle.in
+ generate-fastlane-metadata.py
+ hasMainSymbol.cmake
+ specifydependencies.cmake
+
+ DESTINATION ${TOOLCHAIN_MODULES_INSTALL_DIR}
+)