refactoring find packages
This commit is contained in:
parent
b143e43491
commit
cb0aeacbf2
@ -71,31 +71,47 @@ function(queryfont output_variable fontname)
|
||||
endfunction()
|
||||
|
||||
# }}}
|
||||
# querylib {{{
|
||||
# find_package_impl {{{
|
||||
|
||||
function(querylib flag type pkg out_library out_include_dirs)
|
||||
if(${flag})
|
||||
if(${type} STREQUAL "cmake")
|
||||
find_package(${pkg} REQUIRED)
|
||||
string(TOUPPER ${pkg} pkg_upper)
|
||||
list(APPEND ${out_library} ${${pkg_upper}_LIBRARY})
|
||||
list(APPEND ${out_include_dirs} ${${pkg_upper}_INCLUDE_DIR})
|
||||
elseif(${type} STREQUAL "pkg-config")
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(PKG_${flag} REQUIRED ${pkg})
|
||||
macro(find_package_impl pkg_config_name find_pkg_name header_to_find)
|
||||
find_package(PkgConfig REQUIRED)
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
# Set packet version so that it can be used in the summary
|
||||
set(${flag}_VERSION ${PKG_${flag}_VERSION} PARENT_SCOPE)
|
||||
list(APPEND ${out_library} ${PKG_${flag}_LIBRARIES})
|
||||
list(APPEND ${out_include_dirs} ${PKG_${flag}_INCLUDE_DIRS})
|
||||
else()
|
||||
message(FATAL_ERROR "Invalid lookup type '${type}'")
|
||||
endif()
|
||||
set(${out_library} ${${out_library}} PARENT_SCOPE)
|
||||
set(${out_include_dirs} ${${out_include_dirs}} PARENT_SCOPE)
|
||||
pkg_check_modules(PC_${find_pkg_name} REQUIRED ${pkg_config_name})
|
||||
|
||||
if (NOT ${header_to_find} STREQUAL "")
|
||||
find_path(PC_${find_pkg_name}_INCLUDE_DIRS_
|
||||
NAMES "${header_to_find}"
|
||||
HINTS "${PC_${find_pkg_name}_INCLUDE_DIRS}"
|
||||
)
|
||||
set(PC_${find_pkg_name}_INCLUDE_DIRS ${PC_${find_pkg_name}_INCLUDE_DIRS_})
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
set(${find_pkg_name}_INCLUDE_DIR ${PC_${find_pkg_name}_INCLUDE_DIRS})
|
||||
set(${find_pkg_name}_INCLUDE_DIRS ${${find_pkg_name}_INCLUDE_DIR})
|
||||
set(${find_pkg_name}_LIBRARY ${PC_${find_pkg_name}_LIBRARIES})
|
||||
set(${find_pkg_name}_LIBRARIES ${${find_pkg_name}_LIBRARY})
|
||||
|
||||
find_package_handle_standard_args(${find_pkg_name}
|
||||
REQUIRED_VARS
|
||||
${find_pkg_name}_INCLUDE_DIRS
|
||||
${find_pkg_name}_LIBRARIES
|
||||
VERSION_VAR
|
||||
PC_${find_pkg_name}_VERSION
|
||||
)
|
||||
|
||||
mark_as_advanced(${find_pkg_name}_INCLUDE_DIR ${find_pkg_name}_LIBRARY)
|
||||
endmacro()
|
||||
|
||||
# }}}
|
||||
# create_imported_target {{{
|
||||
function(create_imported_target library_name includes libraries)
|
||||
add_library(${library_name} INTERFACE IMPORTED)
|
||||
set_target_properties(${library_name} PROPERTIES
|
||||
INTERFACE_LINK_LIBRARIES "${libraries}"
|
||||
)
|
||||
target_include_directories(${library_name} SYSTEM INTERFACE ${includes})
|
||||
endfunction()
|
||||
# }}}
|
||||
# checklib {{{
|
||||
|
||||
|
@ -1,31 +1,5 @@
|
||||
find_package(PkgConfig REQUIRED)
|
||||
include(CMakeFindDependencyMacro)
|
||||
|
||||
pkg_check_modules(PC_CairoFC QUIET cairo-fc)
|
||||
|
||||
set(CairoFC_INCLUDE_DIR ${PC_CairoFC_INCLUDE_DIRS})
|
||||
set(CairoFC_LIBRARY ${PC_CairoFC_LIBRARIES})
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
# handle the QUIETLY and REQUIRED arguments and set CairoFC_FOUND to TRUE
|
||||
# if all listed variables are TRUE
|
||||
find_package_handle_standard_args(CairoFC
|
||||
REQUIRED_VARS
|
||||
CairoFC_INCLUDE_DIR
|
||||
CairoFC_LIBRARY
|
||||
VERSION_VAR
|
||||
PC_CairoFC_VERSION)
|
||||
message(STATUS "${CairoFC}")
|
||||
|
||||
mark_as_advanced(CairoFC_INCLUDE_DIR CairoFC_LIBRARY)
|
||||
|
||||
set(CairoFC_LIBRARIES ${CairoFC_LIBRARY})
|
||||
set(CairoFC_INCLUDE_DIRS ${CairoFC_INCLUDE_DIR})
|
||||
find_package_impl("cairo-fc" "CairoFC" "")
|
||||
|
||||
if(CairoFC_FOUND AND NOT TARGET Cairo::CairoFC)
|
||||
add_library(Cairo::CairoFC INTERFACE IMPORTED)
|
||||
set_target_properties(Cairo::CairoFC PROPERTIES
|
||||
INTERFACE_INCLUDE_DIRECTORIES "${CairoFC_INCLUDE_DIRS}"
|
||||
INTERFACE_LINK_LIBRARIES "${CairoFC_LIBRARIES}"
|
||||
)
|
||||
create_imported_target("Cairo::CairoFC" "${CairoFC_INCLUDE_DIR}" "${CairoFC_LIBRARY}")
|
||||
endif()
|
||||
|
@ -1,26 +1,5 @@
|
||||
function(libinotify)
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(PC_LibInotify QUIET libinotify)
|
||||
find_package_impl("libinotify" "LibInotify" "")
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
find_path(LibInotify_INCLUDES
|
||||
NAMES netlink/version.h
|
||||
HINTS ${PC_LibInotify_INCLUDEDIR} ${PC_LibInotify_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
find_package_handle_standard_args(LibInotify
|
||||
REQUIRED_VARS PC_LibInotify_INCLUDE_DIRS
|
||||
VERSION_VAR PC_LibInotify_VERSION
|
||||
)
|
||||
|
||||
if(LibInotify_FOUND AND NOT TARGET LibInotify::LibInotify)
|
||||
add_library(LibInotify::LibInotify INTERFACE IMPORTED)
|
||||
set_target_properties(LibInotify::LibInotify PROPERTIES
|
||||
INTERFACE_LINK_LIBRARIES "${PC_LibInotify_LIBRARIES}")
|
||||
|
||||
target_include_directories(LibInotify::LibInotify SYSTEM INTERFACE ${LibInotify_INCLUDES})
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
libinotify()
|
||||
if(LibInotify_FOUND AND NOT TARGET LibInotify::LibInotify)
|
||||
create_imported_target("LibInotify::LibInotify" "${LibInotify_INCLUDE_DIR}" "${LibInotify_LIBRARY}")
|
||||
endif()
|
||||
|
@ -1,22 +1,5 @@
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(PC_LibMPDClient QUIET libmpdclient)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
find_path(LibMPDClient_INCLUDES
|
||||
NAMES mpd/player.h
|
||||
HINTS ${PC_LibMPDClient_INCLUDEDIR} ${PC_LibMPDClient_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
find_package_handle_standard_args(LibMPDClient
|
||||
REQUIRED_VARS LibMPDClient_INCLUDES
|
||||
VERSION_VAR PC_LibMPDClient_VERSION
|
||||
)
|
||||
find_package_impl("libmpdclient" "LibMPDClient" "mpd/player.h")
|
||||
|
||||
if(LibMPDClient_FOUND AND NOT TARGET LibMPDClient::LibMPDClient)
|
||||
add_library(LibMPDClient::LibMPDClient INTERFACE IMPORTED)
|
||||
set_target_properties(LibMPDClient::LibMPDClient PROPERTIES
|
||||
INTERFACE_LINK_LIBRARIES "${PC_LibMPDClient_LIBRARIES}")
|
||||
|
||||
target_include_directories(LibMPDClient::LibMPDClient SYSTEM INTERFACE ${LibMPDClient_INCLUDES})
|
||||
create_imported_target("LibMPDClient::LibMPDClient" "${LibMPDClient_INCLUDE_DIR}" "${LibMPDClient_LIBRARY}")
|
||||
endif()
|
||||
|
@ -1,17 +1,5 @@
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(PC_LibNlGenl3 QUIET libnl-genl-3.0)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
find_package_handle_standard_args(LibNlGenl3
|
||||
REQUIRED_VARS PC_LibNlGenl3_INCLUDE_DIRS
|
||||
VERSION_VAR PC_LibNlGenl3_VERSION
|
||||
)
|
||||
find_package_impl("libnl-genl-3.0" "LibNlGenl3" "")
|
||||
|
||||
if(LibNlGenl3_FOUND AND NOT TARGET LibNlGenl3::LibNlGenl3)
|
||||
add_library(LibNlGenl3::LibNlGenl3 INTERFACE IMPORTED)
|
||||
|
||||
set_target_properties(LibNlGenl3::LibNlGenl3 PROPERTIES
|
||||
INTERFACE_LINK_LIBRARIES "${PC_LibNlGenl3_LIBRARIES}")
|
||||
target_include_directories(LibNlGenl3::LibNlGenl3 SYSTEM INTERFACE ${PC_LibNlGenl3_INCLUDE_DIRS})
|
||||
create_imported_target("LibNlGenl3::LibNlGenl3" "${LibNlGenl3_INCLUDE_DIR}" "${LibNlGenl3_LIBRARY}")
|
||||
endif()
|
||||
|
@ -1,23 +1,5 @@
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
pkg_check_modules(PC_LibPulse QUIET libpulse)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
find_path(LibPulse_INCLUDES
|
||||
NAMES pulse/version.h
|
||||
HINTS ${PC_LibPulse_INCLUDEDIR} ${PC_LibPulse_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
find_package_handle_standard_args(LibPulse
|
||||
REQUIRED_VARS LibPulse_INCLUDES
|
||||
VERSION_VAR PC_LibPulse_VERSION
|
||||
)
|
||||
find_package_impl("libpulse" "LibPulse" "pulse/version.h")
|
||||
|
||||
if(LibPulse_FOUND AND NOT TARGET LibPulse::LibPulse)
|
||||
add_library(LibPulse::LibPulse INTERFACE IMPORTED)
|
||||
set_target_properties(LibPulse::LibPulse PROPERTIES
|
||||
INTERFACE_LINK_LIBRARIES "${PC_LibPulse_LIBRARIES}")
|
||||
|
||||
target_include_directories(LibPulse::LibPulse SYSTEM INTERFACE ${LibPulse_INCLUDES})
|
||||
create_imported_target("LibPulse::LibPulse" "${LibPulse_INCLUDE_DIR}" "${LibPulse_LIBRARY}")
|
||||
endif()
|
||||
|
@ -17,8 +17,5 @@ find_package_handle_standard_args(Libiw DEFAULT_MSG LIBIW_LIBRARY LIBIW_INCLUDE_
|
||||
mark_as_advanced(LIBIW_INCLUDE_DIR LIBIW_LIBRARY)
|
||||
|
||||
if(Libiw_FOUND AND NOT TARGET Libiw::Libiw)
|
||||
add_library(Libiw::Libiw INTERFACE IMPORTED)
|
||||
set_target_properties(Libiw::Libiw PROPERTIES
|
||||
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${LIBIW_INCLUDE_DIR}"
|
||||
INTERFACE_LINK_LIBRARIES "${LIBIW_LIBRARY}")
|
||||
create_imported_target("Libiw::Libiw" "${LIBIW_INCLUDE_DIR}" "${LIBIW_LIBRARIES}")
|
||||
endif()
|
||||
|
@ -1,6 +1,4 @@
|
||||
cmake_policy(PUSH)
|
||||
cmake_policy(SET CMP0057 NEW)
|
||||
|
||||
# This script only supports the following components of XCB
|
||||
set(XCB_known_components
|
||||
XCB
|
||||
RANDR
|
||||
@ -9,44 +7,32 @@ set(XCB_known_components
|
||||
XRM
|
||||
CURSOR)
|
||||
|
||||
# Deducing header from the name of the component
|
||||
foreach(_comp ${XCB_known_components})
|
||||
string(TOLOWER "${_comp}" _lc_comp)
|
||||
set(XCB_${_comp}_pkg_config "xcb-${_lc_comp}")
|
||||
set(XCB_${_comp}_header "xcb/${_lc_comp}.h")
|
||||
endforeach()
|
||||
# Exception cases
|
||||
set(XCB_XRM_header "xcb/xcb_xrm.h")
|
||||
set(XCB_CURSOR_header "xcb/xcb_cursor.h")
|
||||
|
||||
find_package(PkgConfig REQUIRED)
|
||||
include(FindPackageHandleStandardArgs)
|
||||
cmake_policy(PUSH)
|
||||
cmake_policy(SET CMP0057 NEW)
|
||||
|
||||
foreach(_comp ${Xcb_FIND_COMPONENTS})
|
||||
if (NOT ${_comp} IN_LIST XCB_known_components)
|
||||
cmake_policy(POP)
|
||||
message(FATAL_ERROR "Unknow component ${_comp} for XCB")
|
||||
message(FATAL_ERROR "Unknow component \"${_comp}\" of XCB")
|
||||
endif()
|
||||
|
||||
pkg_check_modules(PC_${_comp} QUIET ${XCB_${_comp}_pkg_config})
|
||||
|
||||
find_path(${_comp}_INCLUDES_DIRS
|
||||
NAMES "${XCB_${_comp}_header}"
|
||||
HINTS ${PC_${_comp}_INCLUDEDIR} ${PC_${_comp}_INCLUDE_DIRS}
|
||||
)
|
||||
|
||||
find_package_handle_standard_args(Xcb_${_comp}
|
||||
REQUIRED_VARS ${_comp}_INCLUDES_DIRS
|
||||
VERSION_VAR PC_${_comp}_VERSION
|
||||
HANDLE_COMPONENTS
|
||||
)
|
||||
find_package_impl(${XCB_${_comp}_pkg_config} "Xcb_${_comp}" "${XCB_${_comp}_header}")
|
||||
|
||||
if(Xcb_${_comp}_FOUND AND NOT TARGET Xcb::${_comp})
|
||||
add_library(Xcb::${_comp} INTERFACE IMPORTED)
|
||||
set_target_properties(Xcb::${_comp} PROPERTIES
|
||||
INTERFACE_SYSTEM_INCLUDE_DIRECTORIES "${_comp}_INCLUDES"
|
||||
INTERFACE_LINK_LIBRARIES "${PC_${_comp}_LIBRARIES}"
|
||||
)
|
||||
create_imported_target("Xcb::${_comp}" "${Xcb_${_comp}_INCLUDE_DIRS}" "${Xcb_${_comp}_LIBRARIES}")
|
||||
elseif(NOT Xcb_${_comp}_FOUND AND Xcb_FIND_REQUIRED)
|
||||
message(FATAL_ERROR "Xcb: Required component \"${component}\" is not found")
|
||||
cmake_policy(POP)
|
||||
message(FATAL_ERROR "Xcb: Required component \"${_comp}\" is not found")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user