On 16.04.12 01:37:58, Dave Abrahams wrote:
> 
> consider this simple wrapper:
> 
>   function(my_find_package)
>     find_package(${ARGV})
>   endfunction()
> 
> If I replace all the calls to find_package in my project with calls to
> my_find_package, everything breaks.  It appears variable settings in any
> found <packagename>Config.cmake files are visible inside
> my_find_package, but disappear from the point of view of the caller,
> unless I "manually" hoist them into the parent scope using
> 
>   function(my_find_package)
>     find_package(${ARGV})
>     set(some_variable ${some_variable} PARENT_SCOPE)
>   endfunction()
> 
> I've tried hoisting everything as in
> https://github.com/ryppl/ryppl-cmake/blob/find-package-hook/Modules/Ryppl.cmake#L9,
> but apparently that is too much and it clobbers some variables that it
> shouldn't.
> 
> Can anyone explain to me what I'm failing to grasp, here?

Functions have their own scope and the find module are written to be
executed in the global scope. (functions are still a relatively new
feature in cmake)

I can see a few options:
- Don't run find_package inside a function.
- Use a macro instead of a function, macro's do not create a new scope
- inspect all the find-modules you use and adapt them to use
  PARENT_SCOPE for variables when they do not end up in the cache.

Andreas

--

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://www.cmake.org/mailman/listinfo/cmake

Reply via email to