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