#! /bin/sh

prefix="/usr"
package="xmlsec1"
exec_prefix="${prefix}"
exec_prefix_set=no
libdir="${exec_prefix}/lib"

usage()
{
    cat <<EOF
Usage: $package-config [OPTION]...

Known values for OPTION are:

  --cflags            print pre-processor and compiler flags
  --libs              print library linking information
  --prefix            print the default XMLSEC prefix folder
  --exec-prefix       print the default XMLSEC executable prefix folder
  --libdir            print the default XMLSEC libraries folder
  --crypto            print the default crypto library name
  --prefix=DIR        change XMLSEC prefix folder
  --exec-prefix=DIR   change XMLSEC executable prefix folder
  --libdir=DIR        change XMLSEC libraries folder
  --crypto=LIB        configure with XMLSEC crypto library (one of the
                      following: none default openssl nss gnutls gcrypt)
  --help              display this help and exit
  --version           output version information
EOF

    exit $1
}


#
# first parse command line aruments
#
if [ $# -eq 0 ]
then
    usage 1 1>&2
fi

cflags=false
libs=false
if [ "z0" = "z1" ] ;
then
    crypto="default"
else
    crypto="none"
fi

while [ $# -gt 0 ]
do
    case "$1" in
    -*=*)
        optarg=`echo "$1" | sed 's/[-_a-zA-Z0-9]*=//'`
    ;;
    *)
        optarg=
    ;;
    esac

    case "$1" in
    --crypto=*)
        crypto=$optarg
    ;;

    --prefix=*)
        prefix=$optarg
        if [ $exec_prefix_set = no ] ;
        then
            exec_prefix=$optarg
        fi
    ;;

    --prefix)
        echo $prefix
    ;;

    --exec-prefix=*)
        exec_prefix=$optarg
        exec_prefix_set=yes
    ;;

    --exec-prefix)
        echo $exec_prefix
    ;;

    --libdir=*)
        libdir=$optarg
    ;;

    --libdir)
        echo $libdir
    ;;

    --version)
        echo 1.2.31
        exit 0
    ;;
    
    --crypto)
        echo openssl
        exit 0
    ;;
    
    --help)
        usage 0
    ;;

    --cflags)
           cflags=true
    ;;

    --libs)
           libs=true
    ;;
    
    *)
        usage 1
    ;;
    esac

    shift
done

#
# Get LibXML2 settings
#
the_xml_flags="`xml2-config --cflags`"
the_xml_libs="`xml2-config --libs`"

#
# Get LibXSLT settings
#
the_xslt_flags=""
the_xslt_libs=""
if test "0" = "0" ;
then 
    the_xslt_flags="`xslt-config --cflags`"
    the_xslt_libs="`xslt-config --libs`"
fi    

#
# Get crypto library settings
#
the_crypto_flags=""
the_crypto_libs=""
the_xmlsec_crypto_lib=""
case "$crypto" in
none)
    # no crypto, just the core xmlsec engine (useful when more
    # than one crypto engine i sused by application)
    if [ "z0" != "z1" ] ;
    then
        the_crypto_flags="-DXMLSEC_CRYPTO_DYNAMIC_LOADING=1"
    fi
    ;;

default) 
    the_crypto_flags=" -DXMLSEC_CRYPTO_OPENSSL=1"
    the_crypto_libs="-lssl -lcrypto "
    the_xmlsec_crypto_lib="-lxmlsec1-openssl"
    ;;
    
openssl)
    if test "0" = "0" ;
    then
        the_crypto_flags=" -DXMLSEC_CRYPTO_OPENSSL=1"
        the_crypto_libs="-lssl -lcrypto "
        the_xmlsec_crypto_lib="-lxmlsec1-openssl"
    else
        echo "Error: the \"$crypto\" cryptographic library is not supported"
        usage 1
    fi
    ;;

gnutls)
    if test "0" = "0" ;
    then
        the_crypto_flags="-I/usr/include/p11-kit-1  -DXMLSEC_CRYPTO_GNUTLS=1"
        the_crypto_libs="-lgnutls "
        the_xmlsec_crypto_lib="-lxmlsec1-gnutls"
    else
        echo "Error: the \"$crypto\" cryptographic library is not supported"
        usage 1
    fi
    ;;

gcrypt)
    if test "0" = "0" ;
    then
        the_crypto_flags=" -DXMLSEC_CRYPTO_GCRYPT=1L"
        the_crypto_libs="-lgcrypt -lgpg-error "
        the_xmlsec_crypto_lib="-lxmlsec1-gcrypt"
    else
        echo "Error: the \"$crypto\" cryptographic library is not supported"
        usage 1
    fi
    ;;

nss)
    if test "0" = "0";
    then
        the_crypto_flags="-I/usr/include/nss -I/usr/include/nspr  -I/usr/include/nspr  -DXMLSEC_CRYPTO_NSS=1"
        the_crypto_libs="-lssl3 -lsmime3 -lnss3 -lnssutil3 -lplds4 -lplc4 -lnspr4  -lplds4 -lplc4 -lnspr4 "
        the_xmlsec_crypto_lib="-lxmlsec1-nss"
    else
        echo "Error: the \"$crypto\" cryptographic library is not supported"
        usage 1
    fi
    ;;
    
*)
    echo "Error: the \"$crypto\" cryptographic library is not supported"
    usage 1
    ;;
    
esac

#
# Assemble all the settings together
#
the_flags="$the_flags  -D__XMLSEC_FUNCTION__=__func__ -DXMLSEC_NO_SIZE_T -DXMLSEC_NO_GOST=1 -DXMLSEC_NO_GOST2012=1 -DXMLSEC_DL_LIBLTDL=1 -I${prefix}/include/xmlsec1   $the_xml_flags $the_xslt_flags $the_crypto_flags"
the_libs="$the_libs -L${libdir} -lxmlsec1 -lltdl  $the_xmlsec_crypto_lib -lxmlsec1 $the_xml_libs $the_xslt_libs $the_crypto_libs"

if $cflags ;
then
    all_flags="$the_flags"
fi

if $libs ;
then
    all_flags="$all_flags $services $the_libs"
fi

if test -z "$all_flags" || test "x$all_flags" = "x " ;
then
    exit 1
fi

# Straight out any possible duplicates, but be careful to
# get `-lfoo -lbar -lbaz' for `-lfoo -lbaz -lbar -lbaz'
other_flags=
rev_libs=
for i in $all_flags; do
    case "$i" in
    # a library, save it for later, in reverse order
    -l*)
        rev_libs="$i $rev_libs"
    ;;
    *)
        case " $other_flags " in
        *\ $i\ *)
            # already there 
        ;;
        *)
            # add it to output
            other_flags="$other_flags $i"
        ;;
        esac 
    ;;
    esac
done

ord_libs=
for i in $rev_libs; do
    case " $ord_libs " in
    *\ $i\ *)
        # already there
    ;;
    *)
        # add it to output in reverse order
        ord_libs="$i $ord_libs" 
    ;;
    esac
done

echo $other_flags $ord_libs

exit 0
