55 lines
1.7 KiB
CMake
55 lines
1.7 KiB
CMake
# Find the given library in the system locations, or build in-tree if not found.
|
|
#
|
|
# Arguments:
|
|
# PKG_NAME - name of the package as passed to find_package
|
|
# PKG_PATH - name of the source tree relative to extlib/
|
|
#
|
|
# The rest of the arguments are VARIABLE VALUE pairs. If the library is not found,
|
|
# every VARIABLE will be set to VALUE and find_package will be rerun with the REQUIRED flag.
|
|
# Regardless of where the library was found, only the specfied VARIABLEs that start with
|
|
# ${PKG_NAME} will be set in the parent scope.
|
|
#
|
|
# All warnings in the in-tree package are disabled.
|
|
|
|
include(DisableWarnings)
|
|
|
|
function(find_vendored_package PKG_NAME PKG_PATH)
|
|
find_package(${PKG_NAME})
|
|
|
|
set(cfg_name)
|
|
foreach(item ${ARGN})
|
|
if(NOT cfg_name)
|
|
set(cfg_name ${item})
|
|
else()
|
|
set(${cfg_name} ${item})
|
|
set(cfg_name)
|
|
endif()
|
|
endforeach()
|
|
|
|
disable_warnings()
|
|
|
|
string(TOUPPER ${PKG_NAME} VAR_NAME)
|
|
if(NOT ${VAR_NAME}_FOUND)
|
|
message(STATUS "Using in-tree ${PKG_PATH}")
|
|
set(${VAR_NAME}_IN_TREE YES CACHE INTERNAL "")
|
|
|
|
add_subdirectory(extlib/${PKG_PATH} EXCLUDE_FROM_ALL)
|
|
find_package(${PKG_NAME} REQUIRED)
|
|
elseif(${VAR_NAME}_IN_TREE)
|
|
add_subdirectory(extlib/${PKG_PATH} EXCLUDE_FROM_ALL)
|
|
endif()
|
|
|
|
# Now put everything we just discovered into the cache.
|
|
set(cfg_name)
|
|
foreach(item ${ARGN} ${VAR_NAME}_FOUND)
|
|
if(NOT cfg_name)
|
|
set(cfg_name ${item})
|
|
else()
|
|
if(cfg_name MATCHES "^${VAR_NAME}")
|
|
set(${cfg_name} "${${cfg_name}}" CACHE INTERNAL "")
|
|
endif()
|
|
set(cfg_name)
|
|
endif()
|
|
endforeach()
|
|
endfunction()
|