cmake: use pkg-config for resolving dependencies

Changes:
 * Fix glib2 search path.
 * Add pkg-config support to CAP, GEOIP, GNUTLS, LUA, PortAudio (API
   19), zlib, kerberos.
 * Add pkg-config support to libnl3, libnl2 and libnl1 (but tested only
   with libnl3).

This makes it easier to do 32-bit builds on 64-bit hosts by just setting
`PKG_CONFIG_LIBDIR`. Due to how HINTS work, it is still fragile though:
missing 32-bit libraries will cause a fallback to 64-bit libraries.

A future patch could check for `<PREFIX>_FOUND` and remove the manual
`find_path` and `find_library` hackery since the paths are already
known.

Change-Id: Ieb4fb74695c96afb1a4c70168e84abb1fa4612c6
Reviewed-on: https://code.wireshark.org/review/4292
Reviewed-by: Anders Broman <a.broman58@gmail.com>
This commit is contained in:
Peter Wu 2014-09-25 12:09:23 +02:00 committed by Anders Broman
parent 0ac441b3ec
commit 9506909223
9 changed files with 106 additions and 25 deletions

View File

@ -12,12 +12,19 @@ IF (CAP_INCLUDE_DIRS)
SET(CAP_FIND_QUIETLY TRUE)
ENDIF (CAP_INCLUDE_DIRS)
FIND_PATH(CAP_INCLUDE_DIR sys/capability.h)
find_package(PkgConfig)
pkg_search_module(CAP libcap)
FIND_PATH(CAP_INCLUDE_DIR sys/capability.h
HINTS ${CAP_INCLUDEDIR}
)
SET(CAP_NAMES cap)
FIND_LIBRARY(CAP_LIBRARY NAMES ${CAP_NAMES} )
FIND_LIBRARY(CAP_LIBRARY NAMES ${CAP_NAMES}
HINTS ${CAP_LIBDIR}
)
# handle the QUIETLY and REQUIRED arguments and set CAP_FOUND to TRUE if
# handle the QUIETLY and REQUIRED arguments and set CAP_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(CAP DEFAULT_MSG CAP_LIBRARY CAP_INCLUDE_DIR)

View File

@ -15,12 +15,23 @@ ENDIF (GEOIP_INCLUDE_DIRS)
INCLUDE(FindWSWinLibs)
FindWSWinLibs("GeoIP-.*" "GEOIP_HINTS")
FIND_PATH(GEOIP_INCLUDE_DIR GeoIP.h HINTS "${GEOIP_HINTS}/include" )
find_package(PkgConfig)
pkg_search_module(GEOIP geoip)
FIND_PATH(GEOIP_INCLUDE_DIR GeoIP.h
HINTS
"${GEOIP_INCLUDEDIR}"
"${GEOIP_HINTS}/include"
)
SET(GEOIP_NAMES GeoIP libGeoIP-1)
FIND_LIBRARY(GEOIP_LIBRARY NAMES ${GEOIP_NAMES} HINTS "${GEOIP_HINTS}/lib" )
FIND_LIBRARY(GEOIP_LIBRARY NAMES ${GEOIP_NAMES}
HINTS
"${GEOIP_LIBDIR}"
"${GEOIP_HINTS}/lib"
)
# handle the QUIETLY and REQUIRED arguments and set GEOIP_FOUND to TRUE if
# handle the QUIETLY and REQUIRED arguments and set GEOIP_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GEOIP DEFAULT_MSG GEOIP_LIBRARY GEOIP_INCLUDE_DIR)

View File

@ -40,7 +40,7 @@ find_path( GLIB2_MAIN_INCLUDE_DIR
NAMES
glib.h
HINTS
"${PC_GLIB2_INCLUDEDIR}"
"${GLIB2_INCLUDEDIR}"
"${GLIB2_HINTS}/include"
PATH_SUFFIXES
glib-2.0
@ -58,7 +58,7 @@ find_library( GLIB2_LIBRARY
glib-2.0
libglib-2.0
HINTS
"${PC_GLIB2_LIBDIR}"
"${GLIB2_LIBDIR}"
"${GLIB2_HINTS}/lib"
PATHS
/opt/gnome/lib64
@ -77,7 +77,7 @@ find_path( GLIB2_INTERNAL_INCLUDE_DIR
NAMES
glibconfig.h
HINTS
"${PC_GLIB2_INCLUDEDIR}"
"${GLIB2_INCLUDEDIR}"
"${glib2LibDir}"
${CMAKE_SYSTEM_LIBRARY_PATH}
PATH_SUFFIXES

View File

@ -15,20 +15,32 @@ ENDIF (GNUTLS_INCLUDE_DIRS)
INCLUDE(FindWSWinLibs)
FindWSWinLibs("gnutls-.*" "GNUTLS_HINTS")
find_package(PkgConfig)
pkg_search_module(GNUTLS gnutls)
FIND_PATH(GNUTLS_INCLUDE_DIR
NAMES
gnutls.h
gnutls/gnutls.h
PATH_SUFFIXES
include
HINTS
${GNUTLS_HINTS}
NAMES
gnutls.h
gnutls/gnutls.h
PATH_SUFFIXES
include
HINTS
"${GNUTLS_INCLUDEDIR}"
"${GNUTLS_HINTS}"
)
SET(GNUTLS_NAMES gnutls libgnutls-28)
FIND_LIBRARY(GNUTLS_LIBRARY NAMES ${GNUTLS_NAMES} libgmp-10 libgcc_s_sjlj-1 libffi-6 libhogweed-2-4 libnettle-4-6 libp11-kit-0 libtasn1-6 HINTS "${GNUTLS_HINTS}/bin" )
FIND_LIBRARY(GNUTLS_LIBRARY
NAMES
${GNUTLS_NAMES}
libgmp-10 libgcc_s_sjlj-1 libffi-6 libhogweed-2-4 libnettle-4-6
libp11-kit-0 libtasn1-6
HINTS
"${GNUTLS_LIBDIR}"
"${GNUTLS_HINTS}/bin"
)
# handle the QUIETLY and REQUIRED arguments and set GNUTLS_FOUND to TRUE if
# handle the QUIETLY and REQUIRED arguments and set GNUTLS_FOUND to TRUE if
# all listed variables are TRUE
INCLUDE(FindPackageHandleStandardArgs)
FIND_PACKAGE_HANDLE_STANDARD_ARGS(GNUTLS DEFAULT_MSG GNUTLS_LIBRARY GNUTLS_INCLUDE_DIR)

View File

@ -15,10 +15,21 @@ ENDIF (KERBEROS_INCLUDE_DIRS)
INCLUDE(FindWSWinLibs)
FindWSWinLibs("kfw-.*" "KERBOROS_HINTS")
FIND_PATH(KERBEROS_INCLUDE_DIR krb5.h HINTS "${KERBOROS_HINTS}/include" )
find_package(PkgConfig)
pkg_search_module(KERBEROS krb5)
FIND_PATH(KERBEROS_INCLUDE_DIR krb5.h
HINTS
"${KERBEROS_INCLUDEDIR}"
"${KERBOROS_HINTS}/include"
)
SET(KERBEROS_NAMES krb5 krb5_32)
FIND_LIBRARY(KERBEROS_LIBRARY NAMES ${KERBEROS_NAMES} HINTS "${KERBOROS_HINTS}/lib" )
FIND_LIBRARY(KERBEROS_LIBRARY NAMES ${KERBEROS_NAMES}
HINTS
"${KERBEROS_LIBDIR}"
"${KERBOROS_HINTS}/lib"
)
# handle the QUIETLY and REQUIRED arguments and set KERBEROS_FOUND to TRUE if
# all listed variables are TRUE
@ -28,7 +39,7 @@ FIND_PACKAGE_HANDLE_STANDARD_ARGS(KERBEROS DEFAULT_MSG KERBEROS_LIBRARY KERBEROS
# todo
# add all kerberos libs
# autodetect HAVE_HEIMDAL_KERBEROS
# autodetect HAVE_MIT_KERBEROS
# autodetect HAVE_MIT_KERBEROS (use pkg_search_module(mit-krb5)?)
# autodetect(?) HAVE_KEYTYPE_ARCFOUR_56
IF(KERBEROS_FOUND)

View File

@ -15,9 +15,13 @@
INCLUDE(FindWSWinLibs)
FindWSWinLibs("lua5*" "LUA_HINTS")
find_package(PkgConfig)
pkg_search_module(LUA lua)
FIND_PATH(LUA_INCLUDE_DIR lua.h
HINTS
$ENV{LUA_DIR}
"${LUA_INCLUDEDIR}"
"$ENV{LUA_DIR}"
${LUA_HINTS}
PATH_SUFFIXES include/lua52 include/lua5.2 include/lua51 include/lua5.1 include/lua include
PATHS
@ -49,7 +53,8 @@ message("LUA INCLUDE SUFFIX: ${LUA_INC_SUFFIX}")
FIND_LIBRARY(LUA_LIBRARY
NAMES lua${LUA_INC_SUFFIX} lua52 lua5.2 lua51 lua5.1 lua
HINTS
$ENV{LUA_DIR}
"${LUA_LIBDIR}"
"$ENV{LUA_DIR}"
${LUA_HINTS}
PATH_SUFFIXES lib64 lib
PATHS

View File

@ -20,11 +20,19 @@ ELSE (NL_LIBRARIES AND NL_INCLUDE_DIRS )
/usr
/usr/local
)
find_package(PkgConfig)
pkg_check_modules(NL3 libnl-3.0 libnl-genl-3.0 libnl-route-3.0)
pkg_search_module(NL2 libnl-2.0)
FIND_PATH( NL_INCLUDE_DIR
PATH_SUFFIXES
include/libnl3
NAMES
netlink/version.h
HINTS
"${NL3_libnl-3.0_INCLUDEDIR}"
"${NL2_INCLUDEDIR}"
PATHS
$(SEARCHPATHS)
)
@ -35,6 +43,9 @@ ELSE (NL_LIBRARIES AND NL_INCLUDE_DIRS )
nl-3 nl
PATH_SUFFIXES
lib64 lib
HINTS
"${NL3_libnl-3.0_LIBDIR}"
"${NL2_LIBDIR}"
PATHS
$(SEARCHPATHS)
)
@ -43,6 +54,9 @@ ELSE (NL_LIBRARIES AND NL_INCLUDE_DIRS )
nl-genl-3 nl-genl
PATH_SUFFIXES
lib64 lib
HINTS
"${NL3_libnl-genl-3.0_LIBDIR}"
"${NL2_LIBDIR}"
PATHS
$(SEARCHPATHS)
)
@ -51,6 +65,9 @@ ELSE (NL_LIBRARIES AND NL_INCLUDE_DIRS )
nl-route-3 nl-route
PATH_SUFFIXES
lib64 lib
HINTS
"${NL3_libnl-route-3.0_LIBDIR}"
"${NL2_LIBDIR}"
PATHS
$(SEARCHPATHS)
)
@ -71,9 +88,12 @@ ELSE (NL_LIBRARIES AND NL_INCLUDE_DIRS )
ENDIF( NL_LIBRARY )
ELSE( NL_INCLUDE_DIR )
# NL version 1 ?
pkg_search_module(NL1 libnl-1)
FIND_PATH( NL_INCLUDE_DIR
NAMES
netlink/netlink.h
HINTS
"${NL1_INCLUDEDIR}"
PATHS
$(SEARCHPATHS)
)
@ -82,6 +102,8 @@ ELSE (NL_LIBRARIES AND NL_INCLUDE_DIRS )
nl
PATH_SUFFIXES
lib64 lib
HINTS
"${NL1_LIBDIR}"
PATHS
$(SEARCHPATHS)
)

View File

@ -15,10 +15,18 @@ ENDIF (PORTAUDIO_INCLUDE_DIRS)
INCLUDE(FindWSWinLibs)
FindWSWinLibs("portaudio_.*" "PORTAUDIO_HINTS")
FIND_PATH(PORTAUDIO_INCLUDE_DIR portaudio.h HINTS "${PORTAUDIO_HINTS}/include" )
find_package(PkgConfig)
pkg_search_module(PORTAUDIO portaudio-2.0)
FIND_PATH(PORTAUDIO_INCLUDE_DIR portaudio.h
HINTS
"${PORTAUDIO_INCLUDEDIR}"
"${PORTAUDIO_HINTS}/include"
)
SET(PORTAUDIO_NAMES portaudio)
FIND_LIBRARY(PORTAUDIO_LIBRARY NAMES ${PORTAUDIO_NAMES} )
FIND_LIBRARY(PORTAUDIO_LIBRARY NAMES ${PORTAUDIO_NAMES}
HINTS "${PORTAUDIO_LIBDIR}")
# handle the QUIETLY and REQUIRED arguments and set PORTAUDIO_FOUND to TRUE if
# all listed variables are TRUE

View File

@ -35,10 +35,14 @@
INCLUDE(FindWSWinLibs)
FindWSWinLibs("zlib" "ZLIB_HINTS")
find_package(PkgConfig)
pkg_search_module(ZLIB zlib)
FIND_PATH(ZLIB_INCLUDE_DIR
NAMES
zlib.h
HINTS
"${ZLIB_INCLUDEDIR}"
${ZLIB_HINTS}/include
${ZLIB_HINTS}
PATHS
@ -50,6 +54,7 @@ FIND_LIBRARY(ZLIB_LIBRARY
NAMES
${ZLIB_NAMES}
HINTS
"${ZLIB_LIBDIR}"
${ZLIB_HINTS}/lib
${ZLIB_HINTS}
PATHS