diff options
author | Mateusz Loskot <mateusz@loskot.net> | 2010-03-10 19:42:56 +0100 |
---|---|---|
committer | Peter Simons <simons@cryp.to> | 2010-03-10 19:54:29 +0100 |
commit | b47379923c1f1dc34cfaef1bb69437a00cd49dec (patch) | |
tree | ec6a446d7b85e6f46f1ae3727218d48f3994dc71 /m4/ax_lib_libkml.m4 | |
parent | ab8fb6290617feb17cc3b08beb4d455a9985b34b (diff) | |
download | autoconf-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.m4 | 277 |
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 +]) |