mst06/cmake/libs/FindLibraryPkgConfig.cmake
David Korth aa4019b94d Mst: Added saveXML() to save the string table in XML format.
Added an internal copy of TinyXML2 for Windows builds.
Based on the rom-properties build.

main.cpp: Replace the file extension on the source file with .xml and
use that as the destination filename.
2019-05-11 15:27:42 -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()