#!/bin/sh
# xapian-config.  Generated from xapian-config.in by configure.
#
# 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, see
# <https://www.gnu.org/licenses/>.

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="/usr/local"
exec_prefix="${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 <https://xapian.org/bugs>.
EOF

    exit "$1"
}

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


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 "${exec_prefix}/lib/libxapian.la" ] ; then
	# If "$dlname" is empty, we only have static libraries.
	extract_dlname "${exec_prefix}/lib/libxapian.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 != "no" ] || return 1 # "false"

    return 0 # "true"
}

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

set_I() {
	# 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 "${prefix}/include" in
	/usr/include|/usr/include/c++) I= ;;
	*) I="-I${prefix}/include" ;;
	esac
}

set_I_swig() {
	I="-I${prefix}/include"
}

# 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 - xapian-core 2.0.0"
	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
	# 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 "" ] && F=" "
	echo "$I$F"
	;;

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

    --libs)
	set_L_to_library_path
	D=
	if need_explicit_dependencies ; then
	    extract_dependency_libs "${exec_prefix}/lib/libxapian.la"
	    [ -n "$dependency_libs" ] && D=" $dependency_libs"
	fi
	echo "$L-lxapian$D"
	;;

    --ltlibs)

	# If we need to pull in dependency_libs, we need libxapian.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 "${exec_prefix}/lib/libxapian.la" ]; then
		echo "${exec_prefix}/lib/libxapian.la"
		continue
	    fi

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

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