AC_INIT([sybilSBML], [2.0.8], [geliudie@uni-duesseldorf.de])

dnl # --------------------------------------------------------------------
dnl # global (environment) variables
dnl # --------------------------------------------------------------------
dnl
dnl # PKG_CPPFLAGS       C preprocessor flags -I...
dnl # PKG_CFLAGS         C compiler flags
dnl # PKG_LIBS           libraries -l...


dnl # --------------------------------------------------------------------
dnl # R compiler and flags
dnl # --------------------------------------------------------------------

: ${R_HOME=`R RHOME`}
if test -z "${R_HOME}"; then
    echo "could not determine R_HOME"
    exit 1
fi

dnl # GNU R default settings
CC=`"${R_HOME}/bin/R" CMD config CC`
CPP=`"${R_HOME}/bin/R" CMD config CPP`
CFLAGS=`"${R_HOME}/bin/R" CMD config CFLAGS`
CPPFLAGS=`"${R_HOME}/bin/R" CMD config CPPFLAGS`
AC_PROG_CC
AC_PROG_CPP


dnl # --------------------------------------------------------------------
dnl # template config.h.in
dnl # --------------------------------------------------------------------

dnl # AC_CONFIG_HEADERS([src/config.h])


dnl # --------------------------------------------------------------------
dnl # test for global variables
dnl # --------------------------------------------------------------------

ARGS_OK="FALSE"

if test [ -n "$PKG_CPPFLAGS" -a -n "$PKG_LIBS" ] ; then
    ARGS_OK="TRUE"
else
    if test [ -n "$PKG_CPPFLAGS" -o -n "$PKG_LIBS" ] ; then
        AC_MSG_ERROR([Please set both variables: PKG_CPPFLAGS AND PKG_LIBS])
    fi
fi


dnl # --------------------------------------------------------------------
dnl # get arguments
dnl # --------------------------------------------------------------------

AC_ARG_WITH(sbml-include,
            AC_HELP_STRING([--with-sbml-include=PATH],
                           [location of libSBML include directory]
                          ),
            [SBML_INCLUDE=$withval],
            [SBML_INCLUDE=""])

AC_ARG_WITH(sbml-lib,
            AC_HELP_STRING([--with-sbml-lib=PATH],
                           [location of SBML callable library]
                          ),
            [SBML_LIB=$withval],
            [SBML_LIB=""])


dnl # --------------------------------------------------------------------
dnl # pkg-config
dnl # --------------------------------------------------------------------

dnl # include and library directories
if test [ "$ARGS_OK" = "FALSE" ] ; then
    AC_PATH_PROG([PKG_CONFIG], [pkg-config], [], [$PATH:/usr/local/bin])

    if test [ "${PKG_CONFIG}" != "" ] ; then
        if "${PKG_CONFIG}" --exists libsbml; then

            SBML_LIBS=`${PKG_CONFIG} --libs libsbml`    
            SBML_CFLAGS=`${PKG_CONFIG} --cflags libsbml`    
    
            if test [ -z "$SBML_LIBS" -a -z "$SBML_CFLAGS" ] ; then
                AC_MSG_NOTICE([can not get information about libSBML from pkg-config])
            else
                AC_MSG_NOTICE([set compile and link flags according to pkg-config])
                AC_MSG_NOTICE([compile flags are $SBML_CFLAGS])
                AC_MSG_NOTICE([link flags are $SBML_LIBS])
                PKG_LIBS="${SBML_LIBS}"
                PKG_CPPFLAGS="${SBML_CFLAGS}"
                ARGS_OK="TRUE"
            fi
        else
            AC_MSG_NOTICE([pkg-config file for libSBML is not available])
        fi
    fi
fi


dnl # --------------------------------------------------------------------
dnl # test arguments
dnl # --------------------------------------------------------------------

dnl # include and library directories
if test [ "$ARGS_OK" = "FALSE" ] ; then

    if test [ -n "$SBML_INCLUDE" -a -n "$SBML_LIB" ] ; then
    
        if test [ -d "$SBML_INCLUDE" ] ; then
            if test [ -d "$SBML_INCLUDE/sbml"] ; then
                PKG_CPPFLAGS="-I${SBML_INCLUDE} -I${SBML_INCLUDE}/sbml"
            else
                PKG_CPPFLAGS="-I${SBML_INCLUDE}"
            fi
        else
            AC_MSG_ERROR([directory $SBML_INCLUDE does not exist])
        fi
    
        if test [ -d "$SBML_LIB" ] ; then
            if test [ -d "$SBML_LIB/sbml" ] ; then
                PKG_LIBS="-L${SBML_LIB} -L${SBML_LIB}/sbml"
            else
                PKG_LIBS="-L${SBML_LIB}"
            fi
        else
            AC_MSG_ERROR([directory $SBML_LIB does not exist])
        fi
        
        ARGS_OK="TRUE"
    else

        dnl # if no arguments are given, try to use /usr/local

        if test [ "$prefix" = "NONE" ] ; then

            if test [ -d "/usr/include" -o -d "/usr/local/include" ] ; then
                PKG_CPPFLAGS="-I/usr/include -I/usr/local/include -I/usr/include/sbml -I/usr/local/include/sbml"
            else
                AC_MSG_ERROR([directories /usr/include and /usr/local/include do not exist])
            fi

            if test [ -d "/usr/local/lib" -o -d "/usr/local/lib64" -o -d "/usr/lib" -o -d "/usr/lib64" ] ; then
                PKG_LIBS=""
                if test [ -d "/usr/local/lib" ] ; then
                    PKG_LIBS="$PKG_LIBS -L/usr/local/lib"
                    if test [ -d "/usr/local/lib/sbml" ] ; then
                        PKG_LIBS="$PKG_LIBS -L/usr/local/lib/sbml"
                    fi
                fi
                if test [ -d "/usr/local/lib64" ] ; then
                    PKG_LIBS="$PKG_LIBS -L/usr/local/lib64"
                    if test [ -d "/usr/local/lib64/sbml" ] ; then
                        PKG_LIBS="$PKG_LIBS -L/usr/local/lib64/sbml"
                    fi
                fi
                if test [ -d "/usr/lib" ] ; then
                    PKG_LIBS="$PKG_LIBS -L/usr/lib"
                    if test [ -d "/usr/lib/sbml" ] ; then
                        PKG_LIBS="$PKG_LIBS -L/usr/lib/sbml"
                    fi
                fi
                if test [ -d "/usr/lib64" ] ; then
                    PKG_LIBS="$PKG_LIBS -L/usr/lib64"
                    if test [ -d "/usr/lib64/sbml" ] ; then
                        PKG_LIBS="$PKG_LIBS -L/usr/lib64/sbml"
                    fi
                fi
                # PKG_LIBS="-L/usr/local/lib -Wl,-rpath /usr/local/lib"
            else
                AC_MSG_ERROR([none of the directories /usr/local/lib, /usr/local/lib64, /usr/lib or /usr/lib64 exists])
            fi

        else
        
            AC_MSG_NOTICE(trying prefix $prefix)
        
            if test [ -d "$prefix/include" ] ; then
                PKG_CPPFLAGS="-I$prefix/include -I$prefix/sbml"
            else
                AC_MSG_ERROR([directory $prefix/include does not exist])
            fi

            if test [ -d "$prefix/lib" -o -d "$prefix/lib64" ] ; then
                PKG_LIBS=""
                if test [ -d "$prefix/lib" ] ; then
                    PKG_LIBS="$PKG_LIBS -L$prefix/lib"
                    if test [ -d "$prefix/sbml" ] ; then
                        PKG_LIBS="$PKG_LIBS -L$prefix/sbml"
                    fi
                fi
                if test [ -d "$prefix/lib64" ] ; then
                    PKG_LIBS="$PKG_LIBS -L$prefix/lib64"
                    if test [ -d "$prefix/lib64/sbml" ] ; then
                        PKG_LIBS="$PKG_LIBS -L$prefix/lib64/sbml"
                    fi
                fi
            else
                AC_MSG_ERROR([none of the directories $prefix/lib of $prefix/lib64 exists])
            fi

        fi

    fi

    dnl # PKG_LIBS="${PKG_LIBS} -lxml2 -lz -lpthread -licucore -lm -lz -lbz2 -lsbml -lstdc++ -lm"
    PKG_LIBS="${PKG_LIBS} -lsbml"

    ARGS_OK="TRUE"

fi

if test [ ! "$ARGS_OK" = "TRUE" ] ; then	
   AC_MSG_ERROR([no libSBML installation found])
fi



dnl # --------------------------------------------------------------------
dnl # check header and library
dnl # --------------------------------------------------------------------

LIBS="${PKG_LIBS}"
CFLAGS="${CFLAGS} ${PKG_CFLAGS}"
CPPFLAGS="${CPPFLAGS} ${PKG_CPPFLAGS}"

AC_CHECK_HEADER([sbml/SBMLTypes.h], ,
    AC_MSG_ERROR([Could not find SBMLTypes.h:
      sybilSBML requires libSBML from http://www.sbml.org/.
      use --with-sbml-include or PKG_CPPFLAGS to specify the include path.]))


AC_SEARCH_LIBS([readSBML], [sbml], ,
    AC_MSG_ERROR([Could not link to libSBML:
      use --with-sbml-lib or PKG_LIBS to specify the library path and the libraries to pass to the linker.]))


dnl # --------------------------------------------------------------------
dnl # substitute src/Makevars
dnl # --------------------------------------------------------------------

AC_SUBST(PKG_CFLAGS)
AC_SUBST(PKG_LIBS)
AC_SUBST(PKG_CPPFLAGS)
AC_OUTPUT(src/Makevars)

exit 0