project() (Re: [karchive] /: Show how qmake integration can be done.)

Alexander Neundorf neundorf at kde.org
Wed Jan 29 20:40:09 UTC 2014


On Monday 06 January 2014, Alexander Neundorf wrote:
> On Sunday 05 January 2014, you wrote:
> > On Sunday 05 January 2014 20:39:37 Alexander Neundorf wrote:
> > > how about extending the project( <name> [lang1 ... langN]) command ?
> > > It already sets PROJECT_(SOURCE|BINARY)_DIR and
> > > <name>_(SOURCE|BINARY)_DIR variables.
> > > 
> > > It could be
> > > project(foo VERSION 1.2.3 C CXX)
> > > and it could set the PROJECT_VERSION_... variables, and also
> > > foo_VERSION_...  variables.
> > 
> > So this:
> > 
> > project(KArchive)
> > set(KF5_VERSION "5.0.0")
> > ecm_setup_version(${KF5_VERSION} VARIABLE_PREFIX KARCHIVE
> > 
> >                         VERSION_HEADER
> > 
> > "${CMAKE_CURRENT_BINARY_DIR}/karchive_version.h" PACKAGE_VERSION_FILE
> > "${CMAKE_CURRENT_BINARY_DIR}/KF5ArchiveConfigVersion.cmake")
> > 
> > would become this?
> > 
> > set(KF5_VERSION "5.0.0")
> > project(KArchive $KF5_VERSION)
> > ecm_setup_version(
> > 
> >                         VERSION_HEADER
> > 
> > "${CMAKE_CURRENT_BINARY_DIR}/karchive_version.h" PACKAGE_VERSION_FILE
> > "${CMAKE_CURRENT_BINARY_DIR}/KF5ArchiveConfigVersion.cmake")
> > 
> > We still need ecm_setup_version, to generate these version files,
> > but it could take the version from PROJECT_VERSION_*.
> > This is SIC, but I understand that's not a problem yet.
> > 
> > (we could also keep the parsing of the first argument if set, for SC).
> > 
> > Works for me.
> > But project() is not in ECM, it's in CMake, isn't it?
> 
> I pushed such an extension to project() to cmake stage, in the
> AddVersionToProjectCommand branch. This now also contains a modified
> write_basic_package_version_file() macro, which can now make use of that
> version.
> I will see what cmake-devel thinks about it.
> 
> So you could do the following:
> 
> project(Foo VERSION 1.2.3)
> 
> ...
> write_basic_package_version_file(FooConfigVersion.cmake
>                                  COMPATIBILITY AnyNewerVersion)
> 
> set_target_properties(.... VERSION ${PROJECT_VERSION}
>                            SOVERSION ${PROJECT_VERSION_MAJOR} )
> 
> 
> 
> 
> Without requiring this cmake version (3.0), probably the VERSION parameter
> could be optional for ecm_setup_version() and ecm_generate_pri_file() too,
> which could fall back to ${PROJECT_VERSION} in that case. If no VERSION
> argument has been used in ecm_generate_pri_file(), and no PROJECT_VERSION
> is set, it would error out.
> Once cmake 3.0 is required, the VERSION argument to ecm_generate_pri_file()
> could then be removed.

This will be in 3.0:
http://cmake.org/gitweb?p=stage/cmake.git;a=commitdiff;h=7e142c5ac2be11097f7ff905b1606179803043d7

So then you can do
cmake_minimum_required(VERSION 3.0)

project(Foo VERSION 1.2.3)

and you'll have PROJECT_VERSION and Foo_VERSION set respectively.
Calling
project(Bar)
unsets PROJECT_VERSION.

Please make sure the solution you have now here for KDE works good with that 
behaviour coming with the next cmake version.

Alex


More information about the Kde-buildsystem mailing list