dnl -*- autoconf -*- dnl dnl Copyright (c) 2017 The University of Oslo dnl Copyright (c) 2017-2018 Dag-Erling Smørgrav dnl All rights reserved. dnl dnl Redistribution and use in source and binary forms, with or without dnl modification, are permitted provided that the following conditions dnl are met: dnl 1. Redistributions of source code must retain the above copyright dnl notice, this list of conditions and the following disclaimer. dnl 2. Redistributions in binary form must reproduce the above copyright dnl notice, this list of conditions and the following disclaimer in the dnl documentation and/or other materials provided with the distribution. dnl 3. The name of the author may not be used to endorse or promote dnl products derived from this software without specific prior written dnl permission. dnl dnl THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND dnl ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE dnl IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE dnl ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE dnl FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL dnl DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS dnl OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) dnl HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT dnl LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY dnl OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF dnl SUCH DAMAGE. dnl m4_define([AX_PKG_CONFIG_MACROS_VERSION], [0.20180506]) dnl dnl AX_PROG_PKG_CONFIG([min-version]) dnl --------------------------------- dnl dnl Verify that pkgconf or pkg-config are present. dnl AC_DEFUN([AX_PROG_PKG_CONFIG], [ m4_pattern_forbid([^AX_PKG_CONFIG_[A-Z_]+$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config binary]) AC_ARG_VAR([PKG_CONFIG_PATH], [list of directories to prepend to default search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [list of directories to search instead of default search path]) if test x"${PKG_CONFIG}" = x"" ; then AC_PATH_PROGS([PKG_CONFIG], [pkgconf pkg-config]) >/dev/null else AC_PATH_PROG([PKG_CONFIG], [${PKG_CONFIG}]) fi AC_MSG_CHECKING([for pkg-config or pkgconf]) if test -x "${PKG_CONFIG}" ; then AC_MSG_RESULT([${PKG_CONFIG}]) case "${PKG_CONFIG}" in *pkgconf) _min_version="m4_default([$1], [1.3.0])" ;; *pkg-config) _min_version="m4_default([$1], [0.23])" ;; *) _min_version="9.9.error" ;; esac AC_MSG_CHECKING([that ${PKG_CONFIG} is at least version ${_min_version}]) _act_version=`"${PKG_CONFIG}" --version` if ! "${PKG_CONFIG}" --atleast-pkgconfig-version="${_min_version}" ; then PKG_CONFIG="" fi AC_MSG_RESULT([${_act_version}]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi if test x"${PKG_CONFIG}" = x"" ; then AC_MSG_ERROR([pkg-config was not found or is too old]) fi AC_ARG_WITH([pkgconfigdir], AS_HELP_STRING([--with-pkgconfigdir], [installation directory for .pc files @<:@LIBDIR/pkgconfig@:>@]), [pkgconfigdir=$withval], [pkgconfigdir='${libdir}/pkgconfig']) AC_SUBST([pkgconfigdir], [$pkgconfigdir]) ]) dnl dnl AX_PKG_CONFIG_VAR(package-name, var-name) dnl ----------------------------------------- dnl dnl Retrieve specific pkg-config variables for the specified package. dnl AC_DEFUN([AX_PKG_CONFIG_VAR], [ AC_REQUIRE([AX_PROG_PKG_CONFIG]) m4_define([_p], AS_TR_SH([m4_tolower([$1])])) m4_case([$2], [version], [ax_pc_cv_[]_p[]_version=`"${PKG_CONFIG}" --modversion [$1]`], [cflags], [ax_pc_cv_[]_p[]_cflags=`"${PKG_CONFIG}" --cflags [$1]`], [libs], [ax_pc_cv_[]_p[]_libs=`"${PKG_CONFIG}" --libs [$1]`], [ax_pc_cv_[]_p[]_[$2]=`"${PKG_CONFIG}" --variable=[$2] [$1]`]) ]) dnl dnl AX_PKG_CONFIG_CHECK(package-name, [version-spec], dnl [action-if-found], [action-if-not-found]) dnl ------------------------------------------- dnl dnl Check if the specified package is installed. If it is, define dnl HAVE_PACKAGE, PACKAGE_VERSION, PACKAGE_CFLAGS and PACKAGE_LIBS. dnl dnl The second argument, if non-empty, specifies a minimum (>=1.2.3 or dnl >1.2.3), maximum (<=1.2.3 or <1.2.3) or exact (==1.2.3 or =1.2.3 dnl or 1.2.3) version to look for. dnl dnl The specified actions are performed in addition to the standard dnl actions. dnl AC_DEFUN([AX_PKG_CONFIG_CHECK], [ AC_REQUIRE([AX_PROG_PKG_CONFIG]) m4_define([_P], AS_TR_SH([m4_toupper([$1])])) m4_define([_p], AS_TR_SH([m4_tolower([$1])])) dnl ver="$2" ver="${ver##*\[<=>\]}" case "$2" in "") vopt="" vtext="$1" ;; ">=$ver"|">$ver") vopt="--atleast-version=$ver" vtext="$1 $ver or newer" ;; "<=$ver"|"<$ver") vopt="--max-version=$ver" vtext="$1 $ver or older" ;; "==$ver"|"=$ver"|"$ver") vopt="--exact-version=$ver" vtext="$1 $ver" ;; *) AC_MSG_ERROR([invalid version specification: "$2"]) ;; esac dnl AC_ARG_VAR(_P[_CFLAGS], [C compiler flags for $1]) AC_ARG_VAR(_P[_LIBS], [linker flags for $1]) AC_MSG_CHECKING([if ${vtext} is installed]) if AC_RUN_LOG(["${PKG_CONFIG}" --exists $vopt --print-errors "$1"]) ; then AC_MSG_RESULT([yes]) [ax_pc_cv_have_]_p=yes AC_DEFINE([HAVE_]_P, [1], [Define to 1 if you have $1]) dnl AC_MSG_CHECKING([$1 version]) AX_PKG_CONFIG_VAR([$1], [version]) AC_SUBST(_P[_VERSION], [$ax_pc_cv_]_p[_version]) AC_MSG_RESULT([${ax_pc_cv_]_p[_version:-unknown}]) dnl AC_MSG_CHECKING([$1 compiler flags]) AX_PKG_CONFIG_VAR([$1], [cflags]) AC_SUBST(_P[_CFLAGS], [$ax_pc_cv_]_p[_cflags]) AC_MSG_RESULT([${ax_pc_cv_]_p[_cflags:-none}]) dnl AC_MSG_CHECKING([$1 linker flags]) AX_PKG_CONFIG_VAR([$1], [libs]) AC_SUBST(_P[_LIBS], [$ax_pc_cv_]_p[_libs]) AC_MSG_RESULT([${ax_pc_cv_]_p[_libs:-none}]) dnl m4_default([$3], [:]) else AC_MSG_RESULT([no]) [ax_pc_cv_have_]_p=no m4_default([$4], [:]) fi m4_ifdef([AM_CONDITIONAL], [ AM_CONDITIONAL([HAVE_]_P, [test x"$ax_pc_cv_have_]_p[" = x"yes"]) ]) ]) dnl dnl AX_PKG_CONFIG_REQUIRE(package-name, [version-spec]) dnl ----------------------------------- dnl dnl As above, but fail if the package is not installed. dnl AC_DEFUN([AX_PKG_CONFIG_REQUIRE], [ AX_PKG_CONFIG_CHECK([$1], [$2], [], [ AC_MSG_ERROR([cannot proceed without $1]) ]) ])