#!/bin/sh
# @configure_input@
#
# Copyright (C) 2002,2003,2004,2005,2006,2007,2009,2010,2012,2014,2015 Olly Betts
#
# This program is free software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License as
# published by the Free Software Foundation; either version 2 of the
# License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301
# USA

PROG_NAME=xapian-config
PROG_DESC="report information about the installed version of xapian"

# ${prefix} and ${exec_prefix} are used in some @-substitutions, and
# ${prefix} is usually used in the exec_prefix @-substitution.
prefix="@prefix@"
exec_prefix="@exec_prefix@"

# Show usage information and exit with the specified exit status.
show_usage() {
    cat <<EOF
Usage: $PROG_NAME OPTION...

Options:
  --cxxflags   output all preprocessor and C++ compiler flags
  --libs       output all linker flags
  --ltlibs     output linker flags for linking using GNU libtool
  --static     make other options report values for static linking
  --swigflags  output preprocessor flags for use with SWIG
  --help       output this help and exit
  --version    output version information and exit

Report bugs to <@PACKAGE_BUGREPORT@>.
EOF

    exit "$1"
}

# This script requires at least one argument.
[ 0 != "$#" ] || show_usage 1 1>&2

##UNINSTONLYBEGIN
# Cached value.  Note that this a return code, so 0 means uninstalled!
is_uninstalled_cache=

# Check if this is an uninstalled xapian-config.
is_uninstalled()
{
    if [ -z "$is_uninstalled_cache" ]; then
	[ -n "$builddir" -a -f "${builddir}Makefile" ]
	is_uninstalled_cache=$?
    fi
    return $is_uninstalled_cache
}

# -I options for compiling against an uninstalled xapian.
set_I_for_uninstalled() {
    I=
    # version.h is generated by configure, so we also need builddir
    # in the include path if it's different to srcdir.
    [ "@abs_srcdir@" != "@abs_builddir@" ] && I="-I@abs_builddir@/include "
    I="$I-I@abs_srcdir@/include"
}
##UNINSTONLYEND

need_explicit_dependencies()
{
    # For static libraries, we need to explicitly link with dependency_libs
    # on all platforms.  For shared libraries, it depends on the platform.

    # xapian-config --static means static libraries.
    [ no = "$static" ] || return 0 # "true"

    # If the .la file hasn't been installed, assume there are shared libraries.
    if [ -f "@libdir@/libxapian@LIBRARY_VERSION_SUFFIX@.la" ] ; then
	# If "$dlname" is empty, we only have static libraries.
	extract_dlname "@libdir@/libxapian@LIBRARY_VERSION_SUFFIX@.la"
	[ -n "$dlname" ] || return 0 # "true"
    fi

    # Vanilla libtool set this to either "yes" or "unknown" and then handles
    # both of these the same way, but our configure forces this to "no" on
    # platforms where we know that is appropriate.
    [ no != "@link_all_deplibs_CXX@" ] || return 1 # "false"

    return 0 # "true"
}

# Any extra ldflags needed.
set_F_to_extra_ldflags() {
    F=
    [ -n "@ldflags@" ] && F="@ldflags@ "
}

# -L option required (if any).
set_L_to_library_path() {
    L=
    [ /usr/lib != "@libdir@" ] && L="-L@libdir@ "
}

set_I() {
    ##UNINSTONLYBEGIN
    if is_uninstalled ; then
	set_I_for_uninstalled
    else
    ##UNINSTONLYEND
	# Adding -I/usr/include to CXXFLAGS causes problems with certain
	# versions of GCC on some platforms where GCC generates "fixed"
	# versions of vendor supplied include headers at install time.
	# Normally these are used instead of those in /usr/include, but if
	# you explicitly pass -I/usr/include you get the non-fixed
	# versions.  More recent GCC versions simply ignore -I/usr/include
	# but we want to support older versions too.
	case "@incdir@" in
	/usr/include|/usr/include/c++) I= ;;
	*) I="-I@incdir@" ;;
	esac
    ##UNINSTONLYBEGIN
    fi
    ##UNINSTONLYEND
}

set_I_swig() {
    ##UNINSTONLYBEGIN
    if is_uninstalled ; then
	set_I_for_uninstalled
    else
    ##UNINSTONLYEND
	I="-I@incdir@"
    ##UNINSTONLYBEGIN
    fi
    ##UNINSTONLYEND
}

# Extract dlname from a libtool .la file.
extract_dlname() {
    dlname=
    # Need to quote ^ for Solaris /bin/sh.
    assignment=`grep '^dlname=' "$1" 2>/dev/null`
    eval "$assignment"
}

# Extract dependency_libs recursively from a libtool .la file, converting
# .la references into appropriate -L and -l options.
extract_dependency_libs() {
    deps=
    # Multiple whitespace (space or tab).
    mws='[	 ][	 ]*'
    la='\(/[^ ]*\)\(/lib\)\([^ ]*\).la'
    pat='\(.* \)'"$la"'\( .*\)'
    extract_dependency_libs_ "$1"
    dependency_libs=`echo "$deps"|sed 's/  */ /g;s/^ //;s/ $//'`
}

# Internal helper function for extract_dependency_libs.
extract_dependency_libs_() {
    dependency_libs=
    # Need to quote ^ for Solaris /bin/sh.
    assignment=`grep '^dependency_libs=' "$1" 2>/dev/null`
    eval "$assignment"
    dependency_libs=`echo " $dependency_libs "|sed "s/$mws/ /g"`
    while true ; do
	file=`echo "$dependency_libs"|sed "s,$pat"',\2\3\4.la,'`
	case $file in
	*.la)
	    # Replace "/path/to/libfoo.la" with "-L/path/to -lfoo".
	    deps="$deps "`echo "$dependency_libs"|sed "s,$pat"',\1-L\2 -l\4,'`
	    # Put the trailing part in $1 which is a local variable.
	    set "`echo "$dependency_libs"|sed "s,$pat"',\5,'`"
	    # And expand any dependency libs from libfoo.la.
	    extract_dependency_libs_ "$file"
	    # Set dependency_libs to the trailing part, ready for the
	    # next pass of the loop which checks for more .la files.
	    dependency_libs=$1
	    ;;
	*)
	    deps=$deps$dependency_libs
	    break
	    ;;
	esac
    done
}

builddir=`echo "$0"|sed 's![^/]*$!!'`
xo_lib_xapian=no
static=no

actions=
while [ 0 != "$#" ] ; do
    arg=$1
    shift
    case $arg in
    --help)
	echo "$PROG_NAME - $PROG_DESC"
	echo
	show_usage 0
	;;

    --version)
	echo "$PROG_NAME - @PACKAGE_STRING@"
	exit 0
	;;

    --cxxflags|--swigflags|--libs|--ltlibs)
	actions="$actions $arg"
	;;

    --static)
	static=yes
	;;

    --from-xo-lib-xapian)
	# Top Secret option which allows us to give a more helpful error
	# message if we're asked to link with an uninstalled libxapian@LIBRARY_VERSION_SUFFIX@
	# and libtool isn't in use.
	xo_lib_xapian=yes
	;;

    -*)
	echo "$0: Unrecognized option: $arg" 1>&2
	show_usage 1 1>&2
	;;

    *)
	show_usage 1 1>&2
	;;
    esac
done

for arg in $actions ; do
    case $arg in
    --cxxflags)
	set_I
	F=
	[ -n "@abi_affecting_cxxflags@" ] && F="@abi_affecting_cxxflags@ "
	echo "$I$F"
	;;

    --swigflags)
	set_I_swig
	echo "$I"
	;;

    --libs)
	##UNINSTONLYBEGIN
	if is_uninstalled ; then
	    if [ no = "$xo_lib_xapian" ]; then
		echo "$0: Use libtool and '$PROG_NAME --ltlibs'" 1>&2
	    else
		configure_ac='configure.in (or configure.ac)'
		# If ac_top_srcdir isn't passed to us, we just end up looking
		# in the current directory, which is a sensible fallback.
		if [ -r "${ac_top_srcdir}configure.ac" ]; then
		    configure_ac=configure.ac
		elif [ -r "${ac_top_srcdir}configure.in" ]; then
		    configure_ac=configure.in
		fi
		echo "$0: Add AC_PROG_LIBTOOL to your $configure_ac" 1>&2
	    fi
	    echo "to link with an uninstalled libxapian@LIBRARY_VERSION_SUFFIX@." 1>&2
	    exit 1
	fi
	##UNINSTONLYEND
	set_F_to_extra_ldflags
	set_L_to_library_path
	D=
	if need_explicit_dependencies ; then
	    extract_dependency_libs "@libdir@/libxapian@LIBRARY_VERSION_SUFFIX@.la"
	    [ -n "$dependency_libs" ] && D=" $dependency_libs"
	fi
	echo "$F$L-lxapian@LIBRARY_VERSION_SUFFIX@$D"
	;;

    --ltlibs)
	set_F_to_extra_ldflags
	##UNINSTONLYBEGIN
	if is_uninstalled ; then
	    # Don't check if libxapian@LIBRARY_VERSION_SUFFIX@.la exists yet since we want to allow
	    # configuring against a xapian-core tree which hasn't been built
	    # yet (the top level bootstrap script relies on this).
	    [ ./ != "$builddir" ] && F="$F$builddir"
	    [ no = "$static" ] || F="-static-libtool-libs $F"
	    echo "${F}libxapian@LIBRARY_VERSION_SUFFIX@.la"
	    continue
	fi
	##UNINSTONLYEND

	# If we need to pull in dependency_libs, we need libxapian@LIBRARY_VERSION_SUFFIX@.la.
	# Otherwise just use the appropriate -L and -l options.
	# Upstream libtool currently never sets link_all_deplibs_CXX=no.
	# Some Linux distros patch libtool to return no, and some have an
	# unhelpful policy of not packaging .la files in an attempt to work
	# around this.  So avoiding using libtool here gives more consistent
	# behaviour.
	if need_explicit_dependencies ; then
	    if [ -f "@libdir@/libxapian@LIBRARY_VERSION_SUFFIX@.la" ]; then
		echo "${F}@libdir@/libxapian@LIBRARY_VERSION_SUFFIX@.la"
		continue
	    fi

	    echo "$0: Can't find libxapian@LIBRARY_VERSION_SUFFIX@.la to link against." 1>&2
	    exit 1
	fi

	set_L_to_library_path
	echo "$F$L-lxapian@LIBRARY_VERSION_SUFFIX@"
	;;
    esac
done
exit 0
