rom-properties/cmake/libs/FindLibraryPkgConfig.cmake
David Korth 1d694fe4d7 travis-ci: Fixed builds of the GTK+ frontends.
There were several issues caused by travis-ci using cmake-3.2.2
instead of what I have locally, cmake-3.7.2:

- FIND_PACKAGE(PkgConfig) sets PKG_CONFIG_FOUND, not PkgConfig_FOUND.
- Set cache internal variables instead of parent scope. (Probably not
  needed, but it's a good idea.)
- Older PkgConfig CMake modules don't support PKG_GET_VARIABLE(), so use
  defaults for Nautilus and Thunar extension directories in that case.
- Added diagnostic messages for older PkgConfig.
- Print the cmake version in travis-ci.

Squashed commit of the bugfix/travis-ci-gtk branch.
2017-04-09 13:59:23 -04:00

106 lines
4.0 KiB
CMake

# Find a library using PkgConfig.
#
# Required variables:
# - _prefix: Variable prefix.
# - _prefix: pkgconfig package name. (Used for variable prefixes.)
# - _include: Include file to test.
# - _library: Library name, without the leading "lib".
# - _target: Name for the imported target.
#
# If found, the following variables will be defined:
# - ${_prefix}_FOUND: System has the package.
# - ${_prefix}_INCLUDE_DIRS: Package include directories.
# - ${_prefix}_LIBRARIES: Package libraries.
# - ${_prefix}_DEFINITIONS: Compiler switches required for using the package.
# - ${_prefix}_VERSION: Package version.
#
# In addition, if a package has extensiondir or extensionsdir set,
# the appropriate ${_prefix}_* variable will also be set.
#
# A target with the name ${_target} will be created with all of
# these definitions.
#
# References:
# - https://cmake.org/Wiki/CMake:How_To_Find_Libraries
# - http://francesco-cek.com/cmake-and-gtk-3-the-easy-way/
#
FUNCTION(FIND_LIBRARY_PKG_CONFIG _prefix _pkgconf _include _library _target)
FIND_PACKAGE(PkgConfig)
IF(PKG_CONFIG_FOUND)
PKG_CHECK_MODULES(PC_${_prefix} QUIET ${_pkgconf})
SET(${_prefix}_DEFINITIONS ${PC_${_prefix}_CFLAGS_OTHER})
FIND_PATH(${_prefix}_INCLUDE_DIR ${_include}
HINTS ${PC_${_prefix}_INCLUDEDIR} ${PC_${_prefix}_INCLUDE_DIRS})
FIND_LIBRARY(${_prefix}_LIBRARY NAMES ${_library} lib${_library}
HINTS ${PC_${_prefix}_LIBDIR} ${PC_${_prefix}_LIBRARY_DIRS})
# Version must be set before calling FPHSA.
SET(${_prefix}_VERSION ${PC_${_prefix}_VERSION})
MARK_AS_ADVANCED(${_prefix}_VERSION)
# Handle the QUIETLY and REQUIRED arguments and set
# ${_prefix}_FOUND to TRUE if all listed variables
# are TRUE.
SET(${_prefix}_PREV_FOUND ${_prefix}_FOUND)
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(${_prefix}
FOUND_VAR ${_prefix}_FOUND
REQUIRED_VARS ${_prefix}_LIBRARY ${_prefix}_INCLUDE_DIR
VERSION_VAR ${_prefix}_VERSION
)
MARK_AS_ADVANCED(${_prefix}_INCLUDE_DIR ${_prefix}_LIBRARY)
SET(${_prefix}_LIBRARIES ${${_prefix}_LIBRARY})
SET(${_prefix}_INCLUDE_DIRS ${${_prefix}_INCLUDE_DIR})
# Create the library target.
IF(${_prefix}_FOUND)
IF(NOT TARGET ${_target})
ADD_LIBRARY(${_target} UNKNOWN IMPORTED)
ENDIF(NOT TARGET ${_target})
SET_TARGET_PROPERTIES(${_target} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${${_prefix}_INCLUDE_DIRS}")
SET_TARGET_PROPERTIES(${_target} PROPERTIES
IMPORTED_LOCATION "${${_prefix}_LIBRARY}")
SET_TARGET_PROPERTIES(${_target} PROPERTIES
COMPILE_DEFINITIONS "${${_prefix}_DEFINITIONS}")
# Add include directories from the pkgconfig's Cflags section.
FOREACH(CFLAG ${PC_${_prefix}_CFLAGS})
IF(CFLAG MATCHES "^-I")
STRING(SUBSTRING "${CFLAG}" 2 -1 INCDIR)
LIST(APPEND ${_prefix}_INCLUDE_DIRS "${INCDIR}")
UNSET(INCDIR)
ENDIF(CFLAG MATCHES "^-I")
ENDFOREACH()
SET_TARGET_PROPERTIES(${_target} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "${${_prefix}_INCLUDE_DIRS}")
IF(COMMAND PKG_GET_VARIABLE)
IF(NOT ${_prefix}_PREV_FOUND)
MESSAGE(STATUS "Found ${_prefix}: ${${_prefix}_LIBRARY} (version ${${_prefix}_VERSION})")
ENDIF(NOT ${_prefix}_PREV_FOUND)
# Check for extensiondir and/or extensionsdir.
PKG_GET_VARIABLE(${_prefix}_EXTENSION_DIR ${_pkgconf} extensiondir)
PKG_GET_VARIABLE(${_prefix}_EXTENSIONS_DIR ${_pkgconf} extensionsdir)
ENDIF(COMMAND PKG_GET_VARIABLE)
# Replace hard-coded prefixes.
INCLUDE(ReplaceHardcodedPrefix)
FOREACH(VAR EXTENSION_DIR EXTENSIONS_DIR)
REPLACE_HARDCODED_PREFIX(${_prefix}_${VAR} "${PC_${_prefix}_PREFIX}")
ENDFOREACH()
# Export variables.
FOREACH(VAR FOUND INCLUDE_DIRS LIBRARY LIBRARIES DEFINITIONS EXTENSION_DIR EXTENSIONS_DIR VERSION)
SET(${_prefix}_${VAR} ${${_prefix}_${VAR}} CACHE INTERNAL "${_prefix}_${VAR}")
ENDFOREACH()
ELSE(${_prefix}_FOUND)
MESSAGE(STATUS "NOT FOUND: ${_prefix}")
ENDIF(${_prefix}_FOUND)
ELSE(PKG_CONFIG_FOUND)
MESSAGE(STATUS "NOT FOUND: PkgConfig - cannot search for ${_prefix}")
ENDIF(PKG_CONFIG_FOUND)
ENDFUNCTION()