Thank you for the tip. After rereading the documentation again, I noticed the following quote in the docs
CMake also manages a new entry for scripts loaded by include()
<https://cmake.org/cmake/help/v3.5/command/include.html#command:include>
and find_package()
<https://cmake.org/cmake/help/v3.5/command/find_package.html#command:find_package>
commands except when invoked with the NO_POLICY_SCOPE option (see
also policy CMP0011
<https://cmake.org/cmake/help/v3.5/policy/CMP0011.html#policy:CMP0011>).
Config files are invoked as a result from |find_package()| calls and
indeed, as the documentation states, it automatically creates a new
entry in the stack.
For further users with the same problem, you likely do not need need to
invoke |cmake_policy(PUSH)|/|cmake_policy(POP)| from your shipped Config
file, so just delete them and set whatever policies you need without
concerns.
Sérgio
On 21/10/19 15:45, Kyle Edwards wrote:
> On Sun, 2019-10-20 at 19:25 +0200, Sérgio Agostinho wrote:
>> Hey everyone,
>>
>> I’m shipping a config file for my library and inside I set push/pop
>> specific policies so that me and the consumers of my library can
>> target different policies without us clashing against each other.
>> However I’m struggling with cmake_policy(PUSH)/cmake_policy(POP) once
>> they are invoked from macro/functions.
>>
>> Here’s a minimal failure example illustrating my problem
>>
>>
>> project(pcl-config-test)
>> cmake_minimum_required(VERSION 3.5)
>>
>> cmake_policy(PUSH)
>>
>> macro(return_early)
>> # clean up code
>> cmake_policy(POP)
>> return()
>> endmacro()
>>
>> # 1. do a bunch of things. invoke a couple of macros/functions
>> # from within other macros/functions, etc...
>>
>> # 2. some error occurs
>> if(ERROR)
>> return_early()
>> endif()
>>
>> # 3. Everything went well
>> cmake_policy(POP)
>> This produces the following output
>>
>>
>> CMake Error at CMakeLists.txt:27 (my_macro):
>> cmake_policy POP without matching PUSH
>>
>> CMake Error in CMakeLists.txt:
>> cmake_policy PUSH without matching POP
>>
>> -- Configuring incomplete, errors occurred!
>> I was counting on the policy stack being preserved for at least
>> macros, but that is not the case.
>>
>> Is there a way for me to return early from my config file from within
>> macros?
> If you're trying to set policies within a function, set them at the
> module level rather than at the function level. The module-level policy
> settings will automatically be pushed when you call the function. That
> way, there will be no need to do cmake_policy(POP) within
> return_early().
>
> Kyle
signature.asc
Description: OpenPGP digital signature
-- Powered by www.kitware.com Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ Kitware offers various services to support the CMake community. For more information on each offering, please visit: CMake Support: http://cmake.org/cmake/help/support.html CMake Consulting: http://cmake.org/cmake/help/consulting.html CMake Training Courses: http://cmake.org/cmake/help/training.html Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html Follow this link to subscribe/unsubscribe: https://cmake.org/mailman/listinfo/cmake
