On Sunday 19 January 2014, Alexander Neundorf wrote: > On Wednesday 15 January 2014, Matthew Woehlke wrote: > > On 2014-01-15 16:25, Alexander Neundorf wrote: > > > On Wednesday 15 January 2014, Alexander Neundorf wrote: > > >> And, to actually produce the breakage, at some place the VERSION > > >> argument must have been added. > > >> With the current state of my branch, this could be worked around by > > >> unsetting the guard variable: > > >> > > >> > > >> project(Foo VERSION 1.2.3) > > >> .... > > >> > > >> unset(CMAKE_PROJECT_VERSION_SET_BY_PROJECT_COMMAND) > > >> add_subdir(B) > > >> > > >> This way B would be protected from that change in behaviour. > > > > > > I could also add more logic, to try to detect if PROJECT_VERSION has > > > been set manually, e.g. project() could reset PROJECT_VERSION only if > > > it has the same value as ${${ParentProjectName}_VERSION}. Then it > > > would only break if there was a manual set(PROJECT_VERSION ...) before > > > a project() call without VERSION, and if that manually set version was > > > the same as the version in the "parent project". > > > > IMHO your last suggestion (very good idea, btw!) is more than adequate, > > especially given the original weakness of my "objection" (which was > > always more along the lines of "did you consider this case, and should > > we worry about it?"). > > This is now in the AddVersionToProjectCommand branch on git stage. > > Please have a close look at it. > > I'm not sure I like that somewhat magic behaviour how it decides whether to > unset() the variables or not. > There will be problems with this very rarely, but when the circumstances > occur, it may be quite hard to figure out. > I.e. it could happen when the version number of a sub-project changes, then > suddenly PROJECT_VERSION could be empty afterwards: > > CMakeLists.txt: > > project(Parent VERSION 1.0.0) > > add_subdirector(sub) > > sub/CMakeLists.txt: > - set(PROJECT_VERSION 0.0.1) > + set(PROJECT_VERSION 1.0.0) > project(Foo) > message(STATUS "Version: ${PROJECT_VERSION}) > > Such a patch would have the effect that PROJECT_VERSION in suddenly empty > in the message() call. > > I would probably prefer to not touch the PROJECT_VERSION variables at all > if VERSION is not used, then there are at least no (very rare) surprises > or sudden breakages. > > Alex
I could maybe also do something with variable_watch(), but I haven't used this yet at all. It probably would have somne performance impact I guess. Alex -- 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