# =========================================================================== # 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 ])