[RFC] cmake modules and keeping source compatibility
Alexander Neundorf
neundorf at kde.org
Fri Jan 18 18:17:02 GMT 2008
Hi,
we are shipping KDE 4.0.0 now and so have to keep source compatibility.
This means also that the cmake files installed on the users systems have to
stay compatible.
Here is a document describing what needs to be taken care of:
http://techbase.kde.org/index.php?title=Policies/CMake_and_Source_Compatibility
Please comment on it.
Two more things:
-do we need to keep source compatibility for all cmake files from all modules
or is kdelibs enough ? If kdelibs would be enough, this would simply mean
that the other modules like kdebase don't install their cmake files.
There were a few commits already which change cmake modules so that a higher
version of the respective library is now required, otherwise they fail.
Please comment.
I'm afraid this is also source incompatible:
> SVN commit 762185 by trueg:
>
> Min Soprano version is now 2.0
>
> --- trunk/KDE/kdelibs/cmake/modules/FindSoprano.cmake #762184:762185
> @@ -79,10 +79,10 @@
> STRING(REGEX MATCH "SOPRANO_VERSION_STRING \".*\"\n"
> SOPRANO_VERSION_MATCH ${SOPRANO_VERSION_CONTENT}) IF
> (SOPRANO_VERSION_MATCH)
> STRING(REGEX REPLACE "SOPRANO_VERSION_STRING \"(.*)\"\n" "\\1"
> SOPRANO_VERSION ${SOPRANO_VERSION_MATCH}) - if(SOPRANO_VERSION STRLESS
> "1.99")
> + if(SOPRANO_VERSION STRLESS "2.0")
> set(Soprano_FOUND FALSE)
> - message(FATAL_ERROR "Soprano version ${SOPRANO_VERSION} is too
> old. Please install 1.99 or newer") - endif(SOPRANO_VERSION STRLESS
> "1.99")
> + message(FATAL_ERROR "Soprano version ${SOPRANO_VERSION} is too
> old. Please install 2.0 or newer") + endif(SOPRANO_VERSION STRLESS
> "2.0")
> ENDIF (SOPRANO_VERSION_MATCH)
> endif(Soprano_FOUND)
I'm not sure we may do such changes now.
The change has the effect that a cmake module now fails (if the soprano
version is too old), whereas with the previous version it worked.
If there is a 3rd party application which also uses FindSoprano.cmake,
installed with KDE, it may not build anymore after an update of KDE. Insofar
this could be considered a source incompatible change, which we must not do.
A better approach would be not to hardcode the required version in the cmake
module, but to set it from the outside:
set(SOPRANO_REQUIRED_VERSION 2.0)
find_package(Soprano REQUIRED)
and then compare with SOPRANO_REQUIRED_VERSION in FindSoprano.cmake.
This issue is not specific to FindSoprano.cmake, there was also a similar
commit to FindSharedMimeInfo.cmake.
One could argue that if a KDE is installed which has this version of
FindSoprano, then the correct version of Soprano is installed anyways. But
this must not be true. It could be an optional package in KDE (so KDE still
builds without it), but it could be a required package for the 3rd party
application, which would then fail to build (and which doesn't require the
newer version).
So I'm afraid this is really a source incompatible change and must be
reverted.
Alex
More information about the kde-core-devel
mailing list