mirror_zfs/config/find_system_library.m4
Ryan Moeller c0234eab65 Spruce up pkg-config files for libzfs/libzfs_core
Several of the listed library dependencies are not relevant on FreeBSD.
Have ./configure save libraries that are found via pkg-config as
${LIB}_PC and use the configured automake variables instead of hard
coded names so we only get what was actually needed.

While here, update the URL to point at the OpenZFS Github repo.

Reviewed-by: Brian Behlendorf <behlendorf1@llnl.gov>
Signed-off-by: Ryan Moeller <ryan@iXsystems.com>
Closes #10869
2020-09-09 10:26:01 -07:00

99 lines
2.9 KiB
Plaintext

# find_system_lib.m4 - Macros to search for a system library. -*- Autoconf -*-
dnl requires pkg.m4 from pkg-config
dnl requires ax_save_flags.m4 from autoconf-archive
dnl requires ax_restore_flags.m4 from autoconf-archive
dnl ZFS_AC_FIND_SYSTEM_LIBRARY(VARIABLE-PREFIX, MODULE, HEADER, HEADER-PREFIXES, LIBRARY, FUNCTIONS, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
AC_DEFUN([ZFS_AC_FIND_SYSTEM_LIBRARY], [
AC_REQUIRE([PKG_PROG_PKG_CONFIG])
_header_found=
_library_found=
_pc_found=
AS_IF([test -n "$2"], [PKG_CHECK_MODULES([$1], [$2], [
_header_found=1
_library_found=1
_pc_found=1
], [:])])
# set _header_found/_library_found if the user passed in CFLAGS/LIBS
AS_IF([test "x$[$1][_CFLAGS]" != x], [_header_found=1])
AS_IF([test "x$[$1][_LIBS]" != x], [_library_found=1])
AX_SAVE_FLAGS
orig_CFLAGS="$CFLAGS"
for _prefixdir in /usr /usr/local
do
AS_VAR_PUSHDEF([header_cache], [ac_cv_header_$3])
AS_IF([test "x$_prefixdir" != "x/usr"], [
[$1][_CFLAGS]="-I$lt_sysroot$_prefixdir/include"
AS_IF([test "x$_library_found" = x], [
[$1][_LIBS]="-L$lt_sysroot$_prefixdir/lib"
])
])
CFLAGS="$orig_CFLAGS $[$1][_CFLAGS]"
AS_UNSET([header_cache])
AC_CHECK_HEADER([$3], [
_header_found=1
break
], [AS_IF([test "x$_header_found" = "x1"], [
# if pkg-config or the user set CFLAGS, fail if the header is unusable
AC_MSG_FAILURE([header [$3] for library [$5] is not usable])
])], [AC_INCLUDES_DEFAULT])
# search for header under HEADER-PREFIXES
m4_foreach_w([prefix], [$4], [
[$1][_CFLAGS]=["-I$lt_sysroot$_prefixdir/include/]prefix["]
CFLAGS="$orig_CFLAGS $[$1][_CFLAGS]"
AS_UNSET([header_cache])
AC_CHECK_HEADER([$3], [
_header_found=1
break
], [], [AC_INCLUDES_DEFAULT])
])
AS_VAR_POPDEF([header_cache])
done
AS_IF([test "x$_header_found" = "x1"], [
AS_IF([test "x$_library_found" = x], [
[$1][_LIBS]="$[$1]_LIBS -l[$5]"
])
LDFLAGS="$LDFLAGS $[$1][_LIBS]"
_libcheck=1
m4_ifval([$6],
[m4_foreach_w([func], [$6], [AC_CHECK_LIB([$5], func, [:], [_libcheck=])])],
[AC_CHECK_LIB([$5], [main], [:], [_libcheck=])])
AS_IF([test "x$_libcheck" = "x1"], [_library_found=1],
[test "x$_library_found" = "x1"], [
# if pkg-config or the user set LIBS, fail if the library is unusable
AC_MSG_FAILURE([library [$5] is not usable])
])
], [test "x$_library_found" = "x1"], [
# if the user set LIBS, fail if we didn't find the header
AC_MSG_FAILURE([cannot find header [$3] for library [$5]])
])
AX_RESTORE_FLAGS
AS_IF([test "x$_header_found" = "x1" && test "x$_library_found" = "x1"], [
AC_SUBST([$1]_CFLAGS)
AC_SUBST([$1]_LIBS)
AS_IF([test "x$_pc_found" = "x1"], [
AC_SUBST([$1]_PC, [$2])
])
AC_DEFINE([HAVE_][$1], [1], [Define if you have [$5]])
$7
],[dnl ELSE
AC_SUBST([$1]_CFLAGS, [])
AC_SUBST([$1]_LIBS, [])
AC_MSG_WARN([cannot find [$5] via pkg-config or in the standard locations])
$8
])
])