summaryrefslogtreecommitdiff
path: root/m4/ax_lib_libkml.m4
diff options
context:
space:
mode:
authorMateusz Loskot <mateusz@loskot.net>2010-03-10 19:42:56 +0100
committerPeter Simons <simons@cryp.to>2010-03-10 19:54:29 +0100
commitb47379923c1f1dc34cfaef1bb69437a00cd49dec (patch)
treeec6a446d7b85e6f46f1ae3727218d48f3994dc71 /m4/ax_lib_libkml.m4
parentab8fb6290617feb17cc3b08beb4d455a9985b34b (diff)
downloadautoconf-archive-b47379923c1f1dc34cfaef1bb69437a00cd49dec.tar.gz
AX_LIB_LIBKML: Detect Google's libkml library <http://code.google.com/p/libkml/>.
Initial version. See <https://savannah.gnu.org/patch/?7109> for further details.
Diffstat (limited to 'm4/ax_lib_libkml.m4')
-rw-r--r--m4/ax_lib_libkml.m4277
1 files changed, 277 insertions, 0 deletions
diff --git a/m4/ax_lib_libkml.m4 b/m4/ax_lib_libkml.m4
new file mode 100644
index 0000000..530f92a
--- /dev/null
+++ b/m4/ax_lib_libkml.m4
@@ -0,0 +1,277 @@
+# ===========================================================================
+# http://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
+# <http://code.google.com/p/libkml/> 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 <mateusz@loskot.net>
+#
+# 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 1
+
+AC_DEFUN([AX_LIB_LIBKML],
+[
+ AC_ARG_WITH([libkml],
+ AC_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],
+ AC_HELP_STRING([--with-libkml-inc=@<:@DIR@:>@],
+ [path to Google libkml headers]
+ ),
+ [libkml_include_dir="$withval"],
+ [libkml_include_dir=""]
+ )
+ AC_ARG_WITH([libkml-lib],
+ AC_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 <kml/dom.h>
+ ]],
+ [[]]
+ )],
+ [
+ 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 <kml/dom.h>
+ ]],
+ [[
+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
+])