On 2014-01-28 11:16, Jean-Christophe Fillion-Robin wrote:
On Tue, Jan 28, 2014 at 9:10 AM, Brad King wrote:
So our options are

(1) Design new behavior in a way that requires a change to the
     project to activate.

(2) Add a policy.  The policy should only trigger when the
     project() command is about to unset a PROJECT_VERSION
     variable that was set by user code and not by a previous
     project() command.

I would vote for (2), that way people using the latest and greatest of
CMake won't have to enable any variable and it will work out of the box.

This is also the case with (1), but (1) has the advantage that a project wishing to use the new feature that also contains a nested subproject that is not aware of (and would be broken by) the new feature can avoid breaking its nested project.

Note that (as I understand it, anyway) the "change to activate" in (1) is using project(VERSION).

IOW, with (1), until you either use project(VERSION) or manually set the variable (though it's hard to imagine why you would ever need to do the latter), you get the old behavior. Once you do either, you get the new behavior... unless you subsequently unset the variable, in which case you go back to the old behavior. (Also see Brad's reply.)

I suppose with (2), requiring CMake >= 3.0 would give you the new behavior unless you override the policy. I'm not in favor of this as I don't see any significant advantage over (1), but it can break nested projects that aren't expecting the new behavior. (If someone can present a strong reason why a policy would be better, that might change my mind.)

--
Matthew

--

Powered by www.kitware.com

Visit other Kitware open-source projects at 
http://www.kitware.com/opensource/opensource.html

Please keep messages on-topic and check the CMake FAQ at: 
http://www.cmake.org/Wiki/CMake_FAQ

Follow this link to subscribe/unsubscribe:
http://public.kitware.com/cgi-bin/mailman/listinfo/cmake-developers

Reply via email to