polybar/cmake/common/utils.cmake

117 lines
3.5 KiB
CMake

#
# Collection of cmake utility functions
#
# message_colored {{{
function(message_colored message_level text color)
string(ASCII 27 esc)
message(${message_level} "${esc}[${color}m${text}${esc}[0m")
endfunction()
# }}}
# colored_option {{{
function(colored_option text flag)
if(ARGC GREATER 2 AND NOT "${${ARGV2}}" STREQUAL "")
set(text "${text} (${${ARGV2}})")
endif()
if(${flag})
message_colored(STATUS "[X]${text}" "32;1")
else()
message_colored(STATUS "[ ]${text}" "37;2")
endif()
endfunction()
# }}}
# find_package_impl {{{
# Uses PkgConfig to search for pkg_config_name
#
# Defines the following variables:
# ${find_pkg_name}_FOUND - True if the package has been found
# ${find_pkg_name}_INCLUDE_DIR - <...>_INCLUDE_DIRS exported by pkg_check_modules
# ${find_pkg_name}_INCLUDE_DIRS - Same as ${find_pkg_name}_INCLUDE_DIR
# ${find_pkg_name}_LIBRARY - <...>_LIBRARIES exported by pkg_check_modules
# ${find_pkg_name}_LIBRARIES - Same as ${find_pkg_name}_LIBRARY
# ${find_pkg_name}_VERSION - <...>_VERSION exported by pkg_check_modules
#
macro(find_package_impl pkg_config_name find_pkg_name header_to_find)
find_package(PkgConfig REQUIRED)
include(FindPackageHandleStandardArgs)
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()
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}_VERSION ${PC_${find_pkg_name}_VERSION})
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
${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}"
INTERFACE_INCLUDE_DIRECTORIES "${includes}"
)
endfunction()
# }}}
# checklib {{{
function(checklib flag type pkg)
if(NOT DEFINED ${flag})
if(${type} STREQUAL "cmake")
find_package(${pkg} QUIET)
set(${flag} ${${pkg}_FOUND} CACHE BOOL "")
elseif(${type} STREQUAL "pkg-config")
find_package(PkgConfig REQUIRED)
pkg_check_modules(PKG_${flag} QUIET ${pkg})
set(${flag} ${PKG_${flag}_FOUND} CACHE BOOL "")
elseif(${type} STREQUAL "binary")
find_program(BIN_${flag} ${pkg})
set(${flag} ${BIN_${flag}} CACHE BOOL "")
else()
message(FATAL_ERROR "Invalid lookup type '${type}'")
endif()
mark_as_advanced(${flag})
endif()
endfunction()
function(get_include_dirs output)
get_filename_component(generated_sources_dir ${CMAKE_BINARY_DIR}/generated-sources ABSOLUTE)
get_filename_component(include_dir ${CMAKE_SOURCE_DIR}/include ABSOLUTE)
set(${output} ${include_dir} ${generated_sources_dir} PARENT_SCOPE)
endfunction()
function(get_sources_dirs output)
get_filename_component(src_dir ${CMAKE_SOURCE_DIR}/src ABSOLUTE)
set(${output} ${src_dir} PARENT_SCOPE)
endfunction()
# }}}