Backward compatibility

Turn Hunter off by adding one option HUNTER_ENABLED=NO to use your old settings. For example:

  add_executable(foo openssl-example.cpp)

  hunter_add_package(OpenSSL)
  find_package(OpenSSL REQUIRED)
  target_link_libraries(foo PUBLIC OpenSSL::SSL OpenSSL::Crypto)

by default this code will trigger download and build of OpenSSL:

> rm -rf _builds
> cmake -H. -B_builds -DCMAKE_VERBOSE_MAKEFILE=YES
> cmake --build _builds

/usr/bin/c++
    CMakeFiles/foo.dir/openssl-example.cpp.o
    -o foo
    -rdynamic
    /.../_Base/a9bd96a/e8394c3/dd69ac4/Install/lib/libssl.a
    /.../_Base/a9bd96a/e8394c3/dd69ac4/Install/lib/libcrypto.a
    -ldl

but adding HUNTER_ENABLED=NO make it skip all Hunter instructions and system library will be used instead:

> rm -rf _builds
> cmake -H. -B_builds -DCMAKE_VERBOSE_MAKEFILE=YES -DHUNTER_ENABLED=NO
> cmake --build _builds

/usr/bin/c++
    CMakeFiles/foo.dir/openssl-example.cpp.o
    -o foo
    -rdynamic
    /usr/lib/x86_64-linux-gnu/libssl.so
    /usr/lib/x86_64-linux-gnu/libcrypto.so

Note

As you can see hunter_add_package has no effect when HUNTER_ENABLED is OFF hence such code is redundant:

if(HUNTER_ENABLED)
  hunter_add_package(foo)
endif()

It will behave in the same way as just hunter_add_package(foo) alone.

HUNTER_ENABLED=NO can be set by default using CMake option:

# before HunterGate
option(HUNTER_ENABLED "Enable Hunter package manager" NO)
HunterGate(URL ... SHA1 ...)

So this makes it easy to use Hunter as experimental feature. All information that users need to know about new commands is that hunter_add_package and HunterGate will do nothing as long as HUNTER_ENABLED is NO.

Note that Hunter itself add HUNTER_ENABLED=YES while building third party package. It means that if package released with HUNTER_ENABLED=NO by default it still can be used in Hunter, no extra modifications needed.

Helper modules

Not all packages have the same CMake usage API. E.g. for CURL in Hunter there is imported target CURL::libcurl but there are only CURL_INCLUDE_DIRS and CURL_LIBRARIES defined in standard FindCURL module.

To mimic Hunter API disabled-mode modules can be used.

HunterGate will load them automatically when HUNTER_ENABLED=OFF and they are located in ${CMAKE_CURRENT_LIST_DIR}/cmake/Hunter/disabled-mode:

> cmake -H. -B_builds -DHUNTER_ENABLED=NO -DHUNTER_STATUS_DEBUG=ON
-- [hunter *** DEBUG *** ...] Adding "disabled-mode" modules: /.../cmake/Hunter/disabled-mode

Module CURLConfig from “disabled-mode” modules will be added to CMake search path, loaded, call standard FindCURL and create imported target CURL::libcurl. This will allow to use same API with and without Hunter:

hunter_add_package(CURL)
find_package(CURL CONFIG REQUIRED)
target_link_libraries(foo PUBLIC CURL::libcurl)

Examples on GitHub