diff options
Diffstat (limited to 'config/find_system_library.m4')
-rw-r--r-- | config/find_system_library.m4 | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/config/find_system_library.m4 b/config/find_system_library.m4 new file mode 100644 index 000000000000..9a95d6a15033 --- /dev/null +++ b/config/find_system_library.m4 @@ -0,0 +1,93 @@ +# 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= + + AS_IF([test -n "$2"], [PKG_CHECK_MODULES([$1], [$2], [ + _header_found=1 + _library_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) + 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 + ]) +]) |