#! /bin/sh

outfile=settings.make
verbose=0
sclfile=libdemo.scl

#
# This subroutine prints standard usage message
#
usage()
{
    exit_code=$1
    cat <<EOF
Usage: $0 [-v] </absolute/path/to/babel-config> | --help

Generates a small makefile fragment, called "settings.make"
suitable for inclusion into Makefiles that build Babelized libraries.
Instead of probing the system (like autoconf would), this script
simply gets the information from the babel-config script that 
was generated with the normal Babel distribution.
The absolute path to the babel-config script is the only requirement.
EOF
    exit $exit_code
}

config_var()
{
    varname=$1
    shift
    value="$@"
    if test $verbose -ne 0; then
	echo $varname = $value
    fi
    echo $varname="$value" >> $outfile
}

# if wrong number of arguments, it is an error
if test $# -eq 0; then
    usage 1
fi

if test $1 = "-v"; then
    verbose=1
    shift
fi

if test $# -ne 1; then
    usage 1
fi

# allow various types of help flags (not an error)
if test \( "$1" = "--help" \) -o \( "$1" = "-help" \) -o \( "$1" = "-h" \) ; then
    usage 0
fi

# make sure the argument is an executable
if test -f  "$1"; then
    bc="$1"
else
    echo "$0: error: '$1' is not an executable file" >&2
    exit 1
fi 

result=`$bc --query-var=PACKAGE 2>/dev/null`
if test "$result" != "babel" ; then
    echo "$0: error: '$1' does not act like a valid babel-config file" >&2
    echo "           ('--query-var=PACKAGE' does not return 'babel')" >&2
    exit 1
fi

cat <<EOF > $outfile
# Generated by mini-configure

#
# All other settings are determined based where this
# babel-config script is
#

EOF
config_var BABEL_CONFIG "$bc"

cat <<EOF > $outfile

###############################################################3
# 
# There should be no reason to edit anything below this line.
# Only settings from an installed Babel distro are carried over
# in this file.
#
EOF
TOPDIR=`pwd`
config_var TOPDIR "$TOPDIR"
echo >> $outfile

config_var BABEL_VERSION `$bc --version`
config_var BABEL_PREFIX `$bc --prefix`
config_var BABEL_EPREFIX `$bc --exec-prefix`
config_var BABEL_INCLDIR `$bc --includedir`
config_var BABEL_BINDIR `$bc --bindir`
config_var BABEL_LIBDIR `$bc --libdir`
config_var BABEL `$bc --bindir`/babel
config_var BABEL_LIBTOOL `$bc --bindir`/babel-libtool
config_var BABEL_JARDIR `$bc --jardir`
if $bc --with-f90 2>&1 >/dev/null; then
  config_var BABEL_WITH_F90 1
else
  config_var BABEL_WITH_F90 0
fi
cat <<EOF >> $outfile

# These are the kinds of things that are determined
# at configure time.  Again, babel-config is helpful, 
# but it is not the final word.  Babel uses libtool
# which does some argument processing of its own.
# Therefore these args are pushed into babel-libool.
EOF

config_var CPP gcc -E --traditional-cpp -P -x c
config_var INCLUDES `$bc --includes`
echo >> $outfile

config_var CC `$bc --query-var=CC`
config_var CFLAGS `$bc --flags-c`
config_var CLIBS `$bc --libs-c`
echo >> $outfile

config_var CXX `$bc --query-var=CXX`
config_var CXXFLAGS `$bc --flags-c++`
config_var CXXLIBS `$bc --libs-c++`
config_var CXXINCL '-I$(BABEL_INCLDIR)/cxx/'
echo >> $outfile

if $bc --with-f90 2>&1 >/dev/null; then
  config_var FC `$bc --query-var=FC`
  config_var FCFLAGS `$bc --flags-f90`
  config_var FCLIBS `$bc --libs-f90`
  config_var MFLAG `$bc --query-var=CHASM_FORTRAN_MFLAGS`
  config_var FCINCL '$(MFLAG)$(BABEL_INCLDIR)/f90'
  echo >> $outfile
fi

config_var PYTHON `$bc --which-var=PYTHON`
PYTHONINC=`$bc --query-var=PYTHONINC`
PYTHON_SUBDIR=`echo $PYTHONINC | sed -e 's/^-I//g'`
PYTHON_SUBDIR=`basename $PYTHON_SUBDIR`
BABEL_INCLDIR=`$bc --includedir`
BABEL_LIBDIR=`$bc --libdir`
config_var PYTHON_SUBDIR $PYTHON_SUBDIR
config_var BABEL_PYEXTENSION_INCLDIR ${BABEL_INCLDIR}/${PYTHON_SUBDIR}/babel
config_var BABEL_PYEXTENSION_LIBDIR ${BABEL_LIBDIR}/${PYTHON_SUBDIR}/site-packages
config_var PYTHON_SHARED_LIBRARY_DIR `$bc --query-var=PYTHON_SHARED_LIBRARY_DIR`
config_var PYTHON_VERSION `$bc --query-var=PYTHON_VERSION`

config_var JAVAC `$bc --which-var=JAVAC`
config_var JAVACFLAGS `$bc --flags-javac`
config_var JAVA `$bc --which-var=JAVA`
config_var JAVAFLAGS `$bc --flags-java`
config_var JNI_INCLUDES `$bc --includes-jni`
config_var JNI_LDFLAGS `$bc --query-var=JNI_LDFLAGS`
config_var F90CPPSUFFIX `$bc --query-var=F90CPPSUFFIX`
echo >> $outfile

cat <<EOF >> $outfile
# suffix rules
.SUFFIXES:
.SUFFIXES: .cxx .c .F90 .lo .o

.cxx.lo:
	\${BABEL_LIBTOOL} --mode=compile \$(CXX) -c -o \$@ \${CPPFLAGS} \${CXXFLAGS} \${INCLUDES}  \$(CXXINCL) \$< 

.c.lo:
	\${BABEL_LIBTOOL} --mode=compile \$(CC) -c -o \$@ \${CPPFLAGS} \${CFLAGS} \${INCLUDES} \$< 

.F90.lo: 
	\${CPP} \$< \${INCLUDES} -I\${BABEL_INCLDIR}/f90 -o \${@:.lo=.tmp} \$<
	sed -e 's/^#pragma.*\$\$//' < \$(@:.lo=.tmp) > \$(@:.lo=$F90CPPSUFFIX)
	\${BABEL_LIBTOOL} --mode=compile --tag=FC \${FC} \${FCFLAGS} \${INCLUDES} \$(FCINCL) -c -o \$@ \${@:.lo=$F90CPPSUFFIX}
	rm -f \${@:.lo=$F90CPPSUFFIX} \${@:.lo=.tmp}

EOF

#
# Now generate SCL file
#
cat <<EOF > $sclfile
<?xml version="1.0" ?>
<scl>
  <library uri="${TOPDIR}/libC/libcconway.la" scope="global" resolution="now">
    <class name="c.BoundsException" desc="ior/impl" />
    <!-- <class name="c.Environment" desc="ior/impl" /> -->
    <class name="c.Ruleset" desc="ior/impl" />
    <!-- <class name="c.TimeStepper" desc="ior/impl" /> -->
  </library>
  <library uri="${TOPDIR}/libCxx/libcxxconway.la" scope="global" resolution="now">
    <class name="cxx.BoundsException" desc="ior/impl" />
    <class name="cxx.Environment" desc="ior/impl" />
    <class name="cxx.Ruleset" desc="ior/impl" />
    <class name="cxx.TimeStepper" desc="ior/impl" />
  </library>
EOF
if $bc --with-f90 2>&1 > /dev/null; then
cat <<EOF >> $sclfile
  <library uri="${TOPDIR}/libF90/libf90conway.la" scope="global" resolution="now">
    <class name="f90.BoundsException" desc="ior/impl" />
    <class name="f90.Environment" desc="ior/impl" />
    <class name="f90.Ruleset" desc="ior/impl" />
    <class name="f90.TimeStepper" desc="ior/impl" />
  </library>
EOF
fi
echo "</scl>" >> $sclfile

cat <<EOF > runPython/babelenv.py
#! /bin/env python
#
# Set up environment variables for a Python run
#
import os
import sys
os.environ['SIDL_DEBUG_DLOPEN'] = '1'
os.environ['SIDL_DLL_PATH']="${BABEL_LIBDIR}/libsidl.scl;${BABEL_LIBDIR}/libsidlx.scl;../libdemo.scl"
if os.environ['LD_LIBRARY_PATH']:
    os.environ['LD_LIBRARY_PATH']= os.environ['LD_LIBRARY_PATH'] + ":${BABEL_LIBDIR}"
else:
    os.environ['LD_LIBRARY_PATH'] = "${BABEL_LIBDIR}"
sys.path = sys.path + [ "${BABEL_LIBDIR}/${PYTHON_SUBDIR}/site-packages" ]
EOF

cat <<EOF > runGUI/babelenv.py
#! /bin/env python
#
# Set up environment variables for a Python run
#
import os
import sys
os.environ['SIDL_DEBUG_DLOPEN'] = '1'
os.environ['SIDL_DLL_PATH']="${BABEL_LIBDIR}/libsidl.scl;../libdemo.scl"
if os.environ['LD_LIBRARY_PATH']:
    os.environ['LD_LIBRARY_PATH']= os.environ['LD_LIBRARY_PATH'] + ":${BABEL_LIBDIR}"
else:
    os.environ['LD_LIBRARY_PATH'] = "${BABEL_LIBDIR}"
sys.path = sys.path + [ "../runPython", "${BABEL_LIBDIR}/${PYTHON_SUBDIR}/site-packages" ]
EOF
