view f2c-compat.sh @ 149:471912bc76c4

[project @ 1993-10-05 19:11:06 by jwe] (main): Print usage message if we are given more than one extra argument on the command line. Delay printing startup message until just before setting the toplevel jump context.
author jwe
date Tue, 05 Oct 1993 19:11:06 +0000
parents 9c27e323492f
children
line wrap: on
line source

#!/bin/sh
#
# f2c-compat -- try to see if calling a Fortran compiled routine from
# a C compiled main program will work as if the Fortran routine has
# been translated to C via f2c.
#
# John W. Eaton
# jwe@che.utexas.edu
# Department of Chemical Engineering
# The University of Texas at Austin

# trap 'rm -f ftest* ctest* core; exit 1' 1 3 15

status=1

if test $# -eq 0; then
  FLIBS_SH="./flibs.sh"
elif test $# -eq 1; then
  FLIBS_SH="$1"
else
  echo "usage: f2c-compat.sh [flibs_script]"
  exit 1
fi

# Write a minimal program, compile it, and see if it works as
# expected.

cat << EOF > ftest.f
      INTEGER FUNCTION FORSUB (C, D)
      CHARACTER *(*) C
      INTEGER L
      DOUBLE PRECISION D
      L = LEN (C)
      WRITE (*, '(A,1X,I2)') C(1:L), INT (D)
      FORSUB = 1
      RETURN
      END
EOF
${F77-f77} -c ftest.f > /dev/null 2>&1

cat << EOF > ctest.c
extern int strlen ();
extern int strcpy ();
extern int forsub_ ();
static char s[14];
int
main (argc, argv)
  int argc;
  char **argv;
{
  double d = 10.0;
  int len;
  strcpy (s, "FOO-I-HITHERE");
  len = strlen (s);
  return (! forsub_ (s, &d, len));
}
/* For Sun f77 */
int
MAIN_ ()
{
  return 0;
}
EOF

${CC-cc} -c ctest.c > /dev/null 2>&1

FLIBS=`F77="${F77-f77}" $FLIBS_SH`

${CC-cc} -o ctest ctest.o ftest.o $FLIBS -lm > /dev/null 2>&1

ctest_output=`./ctest 2>&1`
status=$?

if test $status -eq 0 && test "$ctest_output" = "FOO-I-HITHERE 10"
then
  echo '-DF77_APPEND_UNDERSCORE=1'
  status=0
else
  cat << EOF > ctest.c
extern int strlen ();
extern int strcpy ();
extern int forsub ();
static char s[14];
int
main (argc, argv)
  int argc;
  char **argv;
{
  double d = 10.0;
  int len;
  strcpy (s, "FOO-I-HITHERE");
  len = strlen (s);
  return (! forsub (s, &d, len));
}
/* For Sun f77 */
int
MAIN_ ()
{
  return 0;
}
EOF

  ${CC-cc} -c ctest.c > /dev/null 2>&1

  ${CC-cc} -o ctest ctest.o ftest.o $FLIBS -lm > /dev/null 2>&1

  ctest_output=`./ctest 2>&1`
  status=$?

  if test $status -eq 0 && test "$ctest_output" = "FOO-I-HITHERE 10"
  then
    status=0
  fi
fi

rm -f ftest* ctest* core

# Bye-bye.

exit $status