[CMake] CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0 FATAL_ERROR) and cmake_policy(VERSION 2.6.0) not working correctly for 2.6.2
Brad King
brad.king at kitware.com
Fri Feb 6 08:19:59 EST 2009
Alan W. Irwin wrote:
> On 2009-02-01 09:03-0800 Alan W. Irwin wrote:
>
>> According to the documentation of 2.6.2, policies CMP0008 and CMP0009
>> were introduced after 2.6.0. Also, according to that documentation,
>> cmake_policy(VERSION 2.6.0) should set those policies to OLD and warn
>> about
>> that.
>>
>> I use
>>
>> CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0 FATAL_ERROR)
>>
>> according to the documentation that sets
>>
>> cmake_policy(VERSION 2.6.0)
>>
>> by default. This documented behaviour seems quite logical and useful so
>> that users can use a variety of CMake versions above 2.6.0 and get the
>> same 2.6.0 policies.
>>
>> However, I could see no such warning messages concerning policies
>> CMP0008 and
>> CMP0009 even with -Wdev (and even if I use cmake_policy(VERSION 2.6.0)
>> explicitly). I then investigated further with
>>
>> foreach(policy RANGE 0 9)
>> if(POLICY CMP000${policy})
>> message(STATUS "Policy ${policy} is ON")
>> else(POLICY CMP000${policy})
>> message(STATUS "Policy ${policy} is OFF")
>> endif(POLICY CMP000${policy})
>> endforeach(policy RANGE 0 9)
>>
>> and obtained
>>
>> -- Policy 0 is ON
>> -- Policy 1 is ON
>> -- Policy 2 is ON
>> -- Policy 3 is ON
>> -- Policy 4 is ON
>> -- Policy 5 is ON
>> -- Policy 6 is ON
>> -- Policy 7 is ON
>> -- Policy 8 is ON
>> -- Policy 9 is ON
>>
>> I am pretty sure the ON result for policies CMP0008 and CMP0009 for
>>
>> CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0 FATAL_ERROR)
>>
>> must be a bug in 2.6.2.
>
> Oops! That test simply asked if a policy exists. So that test is
> ambiguous
> at best. Here is an improved test and results:
>
> foreach(policy RANGE 0 9)
> cmake_policy(GET CMP000${policy} policy_result)
> message(STATUS "Policy CMP000${policy} is ${policy_result}")
> endforeach(policy RANGE 0 9)
>
> -- Policy CMP0000 is NEW
> -- Policy CMP0001 is NEW
> -- Policy CMP0002 is NEW
> -- Policy CMP0003 is NEW
> -- Policy CMP0004 is NEW
> -- Policy CMP0005 is NEW
> -- Policy CMP0006 is NEW
> -- Policy CMP0007 is NEW
> -- Policy CMP0008 is -- Policy CMP0009 is
>
> So from these results (and if you can trust the documentation of
> cmake_policy(GET ...)) it appears CMP0008 and CMP0009 are not set.
> Shouldn't
> those be set to OFF with a warning (i.e., the documented behaviour) when
Everything is behaving as intended and as documented. You're just
misinterpreting the documentation. See below.
> CMAKE_MINIMUM_REQUIRED(VERSION 2.6.0 FATAL_ERROR)
>
> is used?
>
> If a policy is undefined as for CMP0008 and CMP0009 for 2.6.2 what does
> that
> mean? Is that the same as OLD (or NEW) or does the policy implementation
> have buggy/unknown behaviour under these circumstances?
The policies are defined but "unset". I've updated the documentation to
clarify this:
- "All policies introduced after the specified version will be reset "
- "to use OLD behavior with a warning. "
+ "All policies introduced after the specified version will be unset. "
The documentation of cmake_poilcy already says
"When CMake needs to know which behavior
to use it checks for a setting specified by the project. If no
setting is available the OLD behavior is assumed and a warning is
produced requesting that the policy be set."
Therefore you'll only see a warning if CMake encounters a situation in
which it needs to know which behavior to use. In CMP0009 for example,
you should see a warning only if file(GLOB) encounters a symlink.
-Brad
More information about the CMake
mailing list