[cmake-developers] FindBoost: boost version vs cached variables

Andriy Gapon avg at icyb.net.ua
Thu Jun 21 13:12:57 EDT 2012


on 20/06/2012 07:39 Philip Lowman said the following:
> I wasn't aware of this defect.  Thanks for pointing it out.
> 
> Could you give the attached version a whirl?  I got rid of the odd caching
> behavior (not sure exactly why FindBoost was written that way to begin with) and
> this appears to resolve the bug.

Yes, thank you very much!
With the attached version the Boost detection works as expected.  And just in
case: I haven't run into any regressions with a real/larger project.

> On Tue, Jun 19, 2012 at 10:54 AM, Andriy Gapon <avg at icyb.net.ua
> <mailto:avg at icyb.net.ua>> wrote:
> 
> 
>     FindBoost.cmake currently (as of CMake 2.8.8) has fairly simply logic to see if
>     Boost is already found and the relevant variables are cached.
>     Essentially that logic verifies that Boost_INCLUDE_DIR and
>     Boost_${COMPONENT}_FOUND variables are set.
> 
>     What it doesn't do is validate that the found/cached Boost version satisfies the
>     requested version.  At least it seems so.  And this is amplified by the fact that
>     the variables remained set and cached even if the original search for Boost
>     couldn't find a satisfactory version.
> 
>     A sample CMakeLists.txt file:
> 
>     CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
>     PROJECT(boost_test)
>     FIND_PACKAGE(Boost 1.51)
>     IF(Boost_FOUND)
>            MESSAGE("Boost 1.51 found!!!")
>     ELSE(Boost_FOUND)
>            MESSAGE("Boost 1.51 not found...")
>     ENDIF(Boost_FOUND)
> 
> 
>     As you know, Boost 1.51 doesn't exist yet.
> 
>     But on a system with Boost 1.48.0 installed I get:
> 
>     $ cmake .
>     -- The C compiler identification is GNU 4.2.1
>     -- The CXX compiler identification is GNU 4.2.1
>     -- Check for working C compiler: /usr/bin/gcc
>     -- Check for working C compiler: /usr/bin/gcc -- works
>     -- Detecting C compiler ABI info
>     -- Detecting C compiler ABI info - done
>     -- Check for working CXX compiler: /usr/bin/c++
>     -- Check for working CXX compiler: /usr/bin/c++ -- works
>     -- Detecting CXX compiler ABI info
>     -- Detecting CXX compiler ABI info - done
>     -- Could NOT find Boost
>     Boost 1.51 not found...
>     -- Configuring done
>     -- Generating done
>     -- Build files have been written to: /home/avg/tmp/boost-test
> 
>     So far so good.  Running cmake again:
> 
>     $ cmake .
>     Boost 1.51 found!!!
>     -- Configuring done
>     -- Generating done
>     -- Build files have been written to: /home/avg/tmp/boost-test
> 
>     Adding SET(Boost_DEBUG TRUE) I get the following for a secondary run:
>     $ cmake .
>     -- [ /usr/local/share/cmake/Modules/FindBoost.cmake:519 ] boost 1.48.0 is already
>     in the cache.  To view debugging messages, please clear the cache.
>     Boost 1.51 found!!!
>     -- Configuring done
>     -- Generating done
>     -- Build files have been written to: /home/avg/tmp/boost-test
> 
>     So FindBoost correctly knows that it has seen boost 1.48.0, but it misreports that
>     boost 1.51 is available.
> 
>     --
>     Andriy Gapon
> 
>     --
> 
>     Powered by www.kitware.com <http://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
> 
> 
> 
> 
> -- 
> Philip Lowman


-- 
Andriy Gapon





More information about the cmake-developers mailing list