[cmake-developers] RFC: add version to project() call

Brad King brad.king at kitware.com
Wed Jan 29 09:58:44 EST 2014


On 1/28/2014 4:20 PM, Alexander Neundorf wrote:
>> (1) Design new behavior in a way that requires a change to the
>>     project to activate.
> 
> I think my current version fits (1).

Yes, I meant to add "like Alex's topic currently does".

> IMO this is not the place for a policy, since the behaviour of the existing, 
> unchanged project did not change, it is still working as it did before.

...except for the case of set(PROJECT_VERSION) *before* a call to
project() without a VERSION.  Currently your solution using
CMAKE_PROJECT_VERSION_SET_BY_PROJECT_COMMAND avoids needing the
policy.  However, it is not a design that would have been
produced if we were starting from scratch.  The purpose of a
policy is to allow us to switch to the clean design while
remaining compatible with existing code.

> Regarding (2): how should I detect whether PROJECT_VERSION has been set 
> manually ?

Actually I realized we don't have to detect that.  What matters
is that project() may clear the variable values when it did not
before.

I reverted the 'AddVersionToProjectCommand' topic from 'next'
and replaced it with a 'project-version-variables' topic that
adds a policy:

 Help: Format project command and variable documentation
 http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=00007dcc

 project: Add optional LANGUAGES keyword
 http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=16d040c9

 project: Manage VERSION variables
 http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=7e142c5a

 write_basic_package_version_file: use PROJECT_VERSION
 http://cmake.org/gitweb?p=cmake.git;a=commitdiff;h=41d2f2c4

The key is that project() only accepts VERSION when the
policy is set to NEW.  After release this will be automatic
because one would need cmake_minimum_required() to specify a
high enough version to understand the new project() signature
and that would set the policy to NEW.  Once the policy is
set to NEW then we can freely clear variables when project()
is not given a VERSION.

-Brad



More information about the cmake-developers mailing list