# ===========================================================================
# https://www.gnu.org/software/autoconf-archive/ax_lib_libkml.html
# ===========================================================================
#
# SYNOPSIS
#
# AX_LIB_LIBKML([MINIMUM-VERSION])
#
# DESCRIPTION
#
# This macro tests whether Google's libkml library
# is available in particular version or
# newer. The generated configure script will support the following
# options:
#
# 1) Single-option usage:
#
# --with-libkml - yes, no or path to Google libkml installation prefix
#
# 2) Three-options usage (all options are required):
#
# --with-libkml=yes
# --with-libkml-inc - path to base directory with headers
# --with-libkml-lib - linker flags for
#
# This macro calls:
#
# AC_SUBST(LIBKML_CFLAGS)
# AC_SUBST(LIBKML_LDFLAGS)
# AC_SUBST(LIBKML_VERSION) - only if version requirement is used
#
# And sets:
#
# HAVE_LIBKML
#
# LICENSE
#
# Copyright (c) 2010 Mateusz Loskot
#
# Copying and distribution of this file, with or without modification, are
# permitted in any medium without royalty provided the copyright notice
# and this notice are preserved. This file is offered as-is, without any
# warranty.
#serial 3
AC_DEFUN([AX_LIB_LIBKML],
[
AC_ARG_WITH([libkml],
AS_HELP_STRING([--with-libkml=@<:@ARG@:>@],
[use Google libkml from given prefix (ARG=path); check standard prefixes (ARG=yes); disable (ARG=no)]
),
[
if test "$withval" = "yes"; then
if test -d /usr/local/include/kml ; then
libkml_prefix=/usr/local
elif test -d /usr/include/kml ; then
libkml_prefix=/usr
else
libkml_prefix=""
fi
libkml_requested="yes"
elif test -d "$withval"; then
libkml_prefix="$withval"
libkml_requested="yes"
else
libkml_prefix=""
libkml_requested="no"
fi
],
[
dnl Default behavior is implicit yes
if test -d /usr/local/include/kml ; then
libkml_prefix=/usr/local
elif test -d /usr/include/kml ; then
libkml_prefix=/usr
else
libkml_prefix=""
fi
]
)
AC_ARG_WITH([libkml-inc],
AS_HELP_STRING([--with-libkml-inc=@<:@DIR@:>@],
[path to Google libkml headers]
),
[libkml_include_dir="$withval"],
[libkml_include_dir=""]
)
AC_ARG_WITH([libkml-lib],
AS_HELP_STRING([--with-libkml-lib=@<:@ARG@:>@],
[link options for Google libkml libraries]
),
[libkml_lib_flags="$withval"],
[libkml_lib_flags=""]
)
LIBKML_CFLAGS=""
LIBKML_LDFLAGS=""
LIBKML_VERSION=""
dnl
dnl Collect include/lib paths and flags
dnl
run_libkml_test="no"
if test -n "$libkml_prefix"; then
libkml_include_dir="$libkml_prefix/include"
libkml_include_dir2="$libkml_prefix/include/kml"
if test "$libkml_prefix" = "/usr"; then
libkml_lib_flags="-lkmlengine -lkmldom -lkmlbase -lkmlconvenience"
else
libkml_lib_flags="-L$libkml_prefix/lib -lkmlengine -lkmldom -lkmlbase -lkmlconvenience"
fi
run_libkml_test="yes"
elif test "$libkml_requested" = "yes"; then
if test -n "$libkml_include_dir" -a -n "$libkml_lib_flags"; then
libkml_include_dir2="$libkml_include_dir/kml"
run_libkml_test="yes"
fi
else
run_libkml_test="no"
fi
dnl
dnl Check libkml headers/libraries
dnl
if test "$run_libkml_test" = "yes"; then
saved_CPPFLAGS="$CPPFLAGS"
CPPFLAGS="$CPPFLAGS -I$libkml_include_dir -I$libkml_include_dir2"
saved_LDFLAGS="$LDFLAGS"
LDFLAGS="$LDFLAGS $libkml_lib_flags"
dnl
dnl Check headers
dnl
AC_MSG_CHECKING([for Google libkml headers in $libkml_include_dir and $libkml_include_dir2])
AC_LANG_PUSH([C++])
AC_COMPILE_IFELSE([
AC_LANG_PROGRAM(
[[
@%:@include
]],
[[]]
)],
[
LIBKML_CFLAGS="-I$libkml_include_dir -I$libkml_include_dir2"
libkml_header_found="yes"
AC_MSG_RESULT([found])
],
[
libkml_header_found="no"
AC_MSG_RESULT([not found])
]
)
AC_LANG_POP([C++])
dnl
dnl Check libraries
dnl
if test "$libkml_header_found" = "yes"; then
AC_MSG_CHECKING([for Google libkml libraries])
AC_LANG_PUSH([C++])
AC_LINK_IFELSE([
AC_LANG_PROGRAM(
[[
@%:@include
]],
[[
kmldom::KmlFactory* factory = kmldom::KmlFactory::GetFactory();
]]
)],
[
LIBKML_LDFLAGS="$libkml_lib_flags"
libkml_lib_found="yes"
AC_MSG_RESULT([found])
],
[
libkml_lib_found="no"
AC_MSG_RESULT([not found])
]
)
AC_LANG_POP([C++])
fi
CPPFLAGS="$saved_CPPFLAGS"
LDFLAGS="$saved_LDFLAGS"
fi
AC_MSG_CHECKING([for Google libkml])
if test "$run_libkml_test" = "yes"; then
if test "$libkml_header_found" = "yes" -a "$libkml_lib_found" = "yes"; then
AC_SUBST([LIBKML_CFLAGS])
AC_SUBST([LIBKML_LDFLAGS])
HAVE_LIBKML="yes"
else
HAVE_LIBKML="no"
fi
AC_MSG_RESULT([$HAVE_LIBKML])
dnl
dnl Check version
dnl
if test "$HAVE_LIBKML" = "yes"; then
libkml_version_req=ifelse([$1], [], [], [$1])
if test -n "$libkml_version_req"; then
AC_MSG_CHECKING([if Google libkml version is >= $libkml_version_req])
if test -f "$libkml_include_dir2/base/version.h"; then
libkml_major=`cat $libkml_include_dir2/base/version.h | \
grep '^#define.*LIBKML_MAJOR_VERSION.*[0-9]$' | \
sed -e 's/#define LIBKML_MAJOR_VERSION.//'`
libkml_minor=`cat $libkml_include_dir2/base/version.h | \
grep '^#define.*LIBKML_MINOR_VERSION.*[0-9]$' | \
sed -e 's/#define LIBKML_MINOR_VERSION.//'`
libkml_revision=`cat $libkml_include_dir2/base/version.h | \
grep '^#define.*LIBKML_MICRO_VERSION.*[0-9]$' | \
sed -e 's/#define LIBKML_MICRO_VERSION.//'`
LIBKML_VERSION="$libkml_major.$libkml_minor.$libkml_revision"
AC_SUBST([LIBKML_VERSION])
dnl Decompose required version string and calculate numerical representation
libkml_version_req_major=`expr $libkml_version_req : '\([[0-9]]*\)'`
libkml_version_req_minor=`expr $libkml_version_req : '[[0-9]]*\.\([[0-9]]*\)'`
libkml_version_req_revision=`expr $libkml_version_req : '[[0-9]]*\.[[0-9]]*\.\([[0-9]]*\)'`
if test "x$libkml_version_req_revision" = "x"; then
libkml_version_req_revision="0"
fi
libkml_version_req_number=`expr $libkml_version_req_major \* 10000 \
\+ $libkml_version_req_minor \* 100 \
\+ $libkml_version_req_revision`
dnl Calculate numerical representation of detected version
libkml_version_number=`expr $libkml_major \* 10000 \
\+ $libkml_minor \* 100 \
\+ $libkml_revision`
libkml_version_check=`expr $libkml_version_number \>\= $libkml_version_req_number`
if test "$libkml_version_check" = "1"; then
AC_MSG_RESULT([yes])
else
AC_MSG_RESULT([no])
AC_MSG_WARN([Found Google libkml $LIBKML_VERSION, which is older than required. Possible compilation failure.])
fi
else
AC_MSG_RESULT([no])
AC_MSG_WARN([Missing header $libkml_include_dir2/base/bersion.hpp. Unable to determine Google libkml version.])
fi
fi
fi
else
HAVE_LIBKML="no"
AC_MSG_RESULT([$HAVE_LIBKML])
if test "$libkml_requested" = "yes"; then
AC_MSG_WARN([Google libkml support requested but headers or library not found. Specify valid prefix of libkml using --with-libkml=@<:@DIR@:>@ or provide include directory and linker flags using --with-libkml-inc and --with-libkml-lib])
fi
fi
])