##	-*- autoconf -*-
dnl This file was created by Lee Carpenter <elc@carpie.net>
dnl Later modified by Martin Gruner <mgruner@crosswire.org>
dnl It provides macros for the autoconf package to find the CLucene library on your system.

dnl ----------------------------------------------------------------------
dnl		Check for clucene installation
dnl             First argument specifies whether or not to link
dnl             CLucene statically
dnl ----------------------------------------------------------------------
AC_DEFUN(AC_CHECK_CLUCENE,
[
dnl AC_MSG_CHECKING([for a clucene installation])

dnl The option for the configure script
AC_ARG_WITH(clucene-dir,
[  --with-clucene-dir=DIR     Path where CLucene is installed (default=/usr) ],
[
  ac_clucene_dir=$withval
],ac_clucene_dir=/usr
)

AC_ARG_ENABLE(static-clucene,
[  --enable-static-clucene    Link to the static CLucene library],
 	ac_static_clucene="YES",
 	[ ac_static_clucene="$1" ]
)

dnl try to find CLucene library files
AC_MSG_CHECKING([for CLucene library files])
clucene_multiarch_libs="`find /usr/lib/ -maxdepth 1 -type d | xargs echo`"
ac_clucene_library_dirs="$ac_clucene_dir/lib $exec_prefix/lib $prefix/lib /usr/lib /usr/lib64 /usr/local/lib $clucene_multiarch_libs"

if test "x$ac_static_clucene" = "xYES"; then
	SEARCH_LIBS="libclucene.a";
else
	SEARCH_LIBS="libclucene.so libclucene.so.0 libclucene.so.0.0.0 libcluene.a";
fi


AC_CACHE_VAL(ac_cv_clucene_libdir, AC_FIND_FILE($SEARCH_LIBS, $ac_clucene_library_dirs, ac_cv_clucene_libdir))

if test "x$ac_cv_clucene_libdir" = "xNO"; then
  AC_MSG_CHECKING([for CLucene 2.x library files])
  SEARCH_LIBS="libclucene-shared.so libclucene-shared.so.1";
  AC_CACHE_VAL(ac_cv_clucene2_libdir, AC_FIND_FILE($SEARCH_LIBS, $ac_clucene_library_dirs, ac_cv_clucene_libdir))

  if test "x$ac_cv_clucene2_libdir" = "xNO"; then
    AC_MSG_ERROR(CLucene library not found. Try to use configure with --with-clucene-dir=/path/to/clucene);
  fi
else
  ac_cv_clucene2_libdir="NO"
fi

if test "x$ac_static_clucene" = "xYES"; then
	LIB_CLUCENE="$ac_cv_clucene_libdir/libclucene.a";
else
	if test "x$ac_cv_clucene2_libdir" = "xNO"; then
		LIB_CLUCENE="-lclucene";
	else
		CXXFLAGS="$CXXFLAGS -DCLUCENE_V2"
		LIB_CLUCENE="-lclucene-core -lclucene-shared";
	fi
fi

AC_SUBST(CLUCENE_LIBRARY_PATH)
AC_SUBST(LIB_CLUCENE)
all_libraries="$all_libraries -L$ac_cv_clucene_libdir"

if test "x$ac_static_clucene" = "xYES"; then
	MESSAGE="static library $ac_cv_clucene_libdir/libclucene.a";
else
	MESSAGE="$ac_cv_clucene_libdir";
fi
AC_MSG_RESULT([$MESSAGE])

dnl -- try to find CLucene include files --
AC_MSG_CHECKING([for Clucene include files])
ac_clucene_include_dirs="$ac_clucene_dir/include $exec_prefix/include $prefix/include /usr/include /usr/local/include"

AC_CACHE_VAL(ac_cv_clucene_incdir, AC_FIND_FILE(CLucene.h, $ac_clucene_include_dirs, ac_cv_clucene_incdir))

if test "x$ac_cv_clucene_incdir" = "xNO"; then
	AC_MSG_ERROR([The CLucene include file files were not found.
Please try to use configure with --with-clucene-dir=/path/to/clucene 
])
fi

CLUCENE_INCLUDES="-I$ac_cv_clucene_incdir"
AC_SUBST(CLUCENE_INCLUDES)
all_includes="$all_includes -I$ac_cv_clucene_incdir -I$ac_cv_clucene_libdir -I$ac_cv_sword_incdir" #$ac_cv_clucene_libdir needed for Clucene/clucene-config.h

AC_MSG_RESULT([$ac_cv_clucene_incdir])



dnl -- CLucene installed test --

AC_MSG_CHECKING([for CLucene version])

AC_CACHE_VAL(ac_cv_installed_clucene_version,
[
AC_LANG_SAVE
AC_LANG_CPLUSPLUS
ac_LD_LIBRARY_PATH_safe=$LD_LIBRARY_PATH
ac_LIBRARY_PATH="$LIBRARY_PATH"
ac_cxxflags_safe="$CXXFLAGS"
ac_ldflags_safe="$LDFLAGS"
ac_libs_safe="$LIBS"

CXXFLAGS="$CXXFLAGS -I$"
LDFLAGS="$LDFLAGS -L$ac_cv_clucene_libdir -L$ac_cv_sword_libdir"
LIBS="$LIB_CLUCENE -lz -lsword -ltqt"
LD_LIBRARY_PATH="$ac_cv_clucene_libdir"
export LD_LIBRARY_PATH
LIBRARY_PATH=
export LIBRARY_PATH

cat > conftest.$ac_ext <<EOF
#include <iostream>
#include <swversion.h>
#include <CLucene/clucene-config.h>

int main(int argc, char* argv[[]]) {
	if ( sword::SWVersion( _CL_VERSION ) >= sword::SWVersion( "0.9.16" ) ){
		std::cout << "ok";
	}
	else{
		std::cout << "not-ok";
	}
	return 0;
}
EOF


ac_link='$LIBTOOL_SHELL --silent --mode=link --tag=LD ${CXX-g++} -o conftest $CXXFLAGS $all_includes $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
if AC_TRY_EVAL(ac_link) && test -s conftest; then
	if test -x conftest; then
		eval ac_cv_installed_clucene_version=`./conftest 2>&5`
	fi
else
  echo "configure: failed program was:" >&AC_FD_CC
  AC_MSG_ERROR([Failed to compile the test program to check the CLucene version! Please have a look at config.log! Report this to the BibleTime developers!]);
  cat conftest.$ac_ext >&AC_FD_CC
fi

rm -f conftest*
CXXFLAGS="$ac_cxxflags_safe"
LDFLAGS="$ac_ldflags_safe"
LIBS="$ac_libs_safe"

LD_LIBRARY_PATH="$ac_LD_LIBRARY_PATH_safe"
export LD_LIBRARY_PATH
LIBRARY_PATH="$ac_LIBRARY_PATH"
export LIBRARY_PATH
AC_LANG_RESTORE
])

if test "x$ac_cv_installed_clucene_version" = "xok"; then
	AC_MSG_RESULT([ok, version is recent enough]);
elif test "x$ac_cv_installed_clucene_version" = "xnot-ok"; then
	AC_MSG_RESULT([installed]);
  	AC_MSG_ERROR([Your CLucene version is not recent enough! Please upgrade to version >= 0.9.16!]);
fi;

])

