[CMake] should zlib be searched in CMAKE_PREFIX_PATH or am I confused?

P F pfultz2 at yahoo.com
Thu Mar 22 19:52:49 EDT 2018


Are you setting `CMAKE_INSTALL_PREFIX`? This path is searched before the `CMAKE_PREFIX_PATH` is searched. 

Also the find_package paths listed in the documentation are only for libraries that provide find_package support. Zlib does not, so it cmake fallsback on the FindZLIB.cmake module to do the searching which the search order can be entirely up to the author of the module. You can see how FindZLIB.cmake searches here:

https://github.com/Kitware/CMake/blob/master/Modules/FindZLIB.cmake#L72 <https://github.com/Kitware/CMake/blob/master/Modules/FindZLIB.cmake#L72>

Of course, if its not correctly searching the `CMAKE_PREFIX_PATH` then this should be considered a bug.

> On Mar 22, 2018, at 11:54 AM, Mario Emmenlauer <mario at emmenlauer.de <mailto:mario at emmenlauer.de>> wrote:
> 
> 
> Dear Stephen,
> 
> thanks a lot for your support! I've tested and your suggestion works!
> 
> But, it does not fully resolve my pain :-( I'm slightly scared now
> because I assumed that cmake would prefer CMAKE_PREFIX_PATH over system
> libraries. In my understanding, the documentation says CMAKE_PREFIX_PATH
> is searched first (1). That aspect is quite crucial to me, because I have
> patched versions of more than 30 standard libraries in CMAKE_PREFIX_PATH.
> If I can not rely that cmake would use the patched versions, then I
> may end up having an "interesting" mix of system and patched libraries
> in my executable :-(
> 
> (1) https://cmake.org/cmake/help/v3.0/command/find_package.html <https://cmake.org/cmake/help/v3.0/command/find_package.html>
> 
> Thanks a lot and all the best,
> 
>    Mario
> 
> 
> On 22.03.2018 17:43, Stephen McDowell wrote:
>> Hi Mario,
>> 
>> Very sorry, I should have looked more closely!  CMAKE_MODULE_PATH is for libraries that install their own CMake scripts.  You are correct, Zlib only installs a
>> pkg-config script.  However, FindZLIB.cmake doesn’t appear to use that at all (aka I don’t believe you /need/ to be setting PKG_CONFIG_PATH).  You should be
>> able to get away with setting *ZLIB_ROOT*.  So for you I think it would look like
>> 
>>     cmake .. -DZLIB_ROOT=/data/thirdparty
>> 
>> FindZLIB.cmake will proceed to look for ZLIB_ROOT/include/zlib.h and look in ZLIB_ROOT/lib for the library.
>> 
>> The XXX_ROOT is typically available for any built-in CMake FindXXX.cmake modules (see hint at bottom: https://cmake.org/cmake/help/v3.0/module/FindZLIB.html <https://cmake.org/cmake/help/v3.0/module/FindZLIB.html> ).
>>  These FindXXX.cmake modules are for this exact scenario: there is a library that many users want access to that does not install cmake scripts (typically
>> because the library uses a different build system such as autotools).
>> 
>> - - - - -
>> 
>> If you are still having trouble, this is what I used to test this.  I didn’t actually write code that uses it, but I suspect if you *remove* setting of
>> CMAKE_PREFIX_PATH (I think that’s where your conflict originates from) and just specify ZLIB_ROOT your problem will be solved (I hope!).
>> 
>> With a very crude CMakeLists.txt:
>> 
>>     cmake_minimum_required(VERSION 3.0 FATAL_ERROR)
>>     project("find_zlib")
>> 
>>     find_package(ZLIB)
>>     if (ZLIB_FOUND)
>>       message(FATAL_ERROR "Found Zlib:\n- ZLIB_INCLUDE_DIRS: ${ZLIB_INCLUDE_DIRS}\n- ZLIB_LIBRARIES: ${ZLIB_LIBRARIES}")
>>     else()
>>       message(FATAL_ERROR "Did not find Zlib :/")
>>     endif()
>> 
>> *Without* setting ZLIB_ROOT:
>> 
>>     $ cmake ..
>>     -- Found ZLIB: /usr/lib/libz.dylib (found version "1.2.8")
>>     CMake Error at CMakeLists.txt:6 (message):
>>       Found Zlib:
>>       - ZLIB_INCLUDE_DIRS: /usr/include
>>       - ZLIB_LIBRARIES: /usr/lib/libz.dylib
>> 
>> That’s the default Zlib that comes with OS X.  However, if I specify ZLIB_ROOT:
>> 
>>     $ cmake .. -DZLIB_ROOT=/usr/local/Cellar/zlib/1.2.11/
>>     -- Found ZLIB: /usr/local/Cellar/zlib/1.2.11/lib/libz.dylib (found version "1.2.11")
>>     CMake Error at CMakeLists.txt:6 (message):
>>       Found Zlib:
>>       - ZLIB_INCLUDE_DIRS: /usr/local/Cellar/zlib/1.2.11/include
>>       - ZLIB_LIBRARIES: /usr/local/Cellar/zlib/1.2.11/lib/libz.dylib
>> 
>> Let us know if it works or if you still need help!
>> 
>> -Stephen
>> 
>> 
>> 
> 
> 
> --
> BioDataAnalysis GmbH, Mario Emmenlauer      Tel. Buero: +49-89-74677203
> Balanstr. 43                   mailto: memmenlauer * biodataanalysis.de <http://biodataanalysis.de/>
> D-81669 München                          http://www.biodataanalysis.de/ <http://www.biodataanalysis.de/>
> -- 
> 
> Powered by www.kitware.com <http://www.kitware.com/>
> 
> Please keep messages on-topic and check the CMake FAQ at: http://www.cmake.org/Wiki/CMake_FAQ <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 <http://cmake.org/cmake/help/support.html>
> CMake Consulting: http://cmake.org/cmake/help/consulting.html <http://cmake.org/cmake/help/consulting.html>
> CMake Training Courses: http://cmake.org/cmake/help/training.html <http://cmake.org/cmake/help/training.html>
> 
> Visit other Kitware open-source projects at http://www.kitware.com/opensource/opensource.html <http://www.kitware.com/opensource/opensource.html>
> 
> Follow this link to subscribe/unsubscribe:
> https://cmake.org/mailman/listinfo/cmake <https://cmake.org/mailman/listinfo/cmake>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://cmake.org/pipermail/cmake/attachments/20180322/a67a6408/attachment-0001.html>


More information about the CMake mailing list