1# GA_F77_COMPUTE_SIZEOF(TYPE, VARIABLE)
2# -------------------------------------
3AC_DEFUN([GA_F77_COMPUTE_SIZEOF], [
4AS_TR_SH([$2])=no
5AC_F77_FUNC([size])
6AC_F77_FUNC([fsub])
7AC_LANG_PUSH([Fortran 77])
8AC_COMPILE_IFELSE([AC_LANG_SOURCE(
9[[      subroutine fsub
10      external size
11      $1 x(2)
12      call size(x(1),x(2))
13      end]])], [mv conftest.$ac_objext cfortran_test.$ac_objext
14    ga_save_LIBS=$LIBS
15    LIBS="cfortran_test.$ac_objext $LIBS $[]_AC_LANG_PREFIX[]LIBS"
16    AC_LANG_PUSH([C])
17    AC_RUN_IFELSE([AC_LANG_SOURCE(
18[[#include <stdio.h>
19#include <stdlib.h>
20#ifdef __cplusplus
21extern "C" {
22#endif
23void $size(char *a, char *b)
24{
25    long diff = (long) (b - a);
26    FILE *f=fopen("conftestval", "w");
27    if (!f) exit(1);
28    fprintf(f, "%ld\n", diff);
29    fclose(f);
30}
31#ifdef __cplusplus
32}
33#endif
34#ifdef __cplusplus
35extern "C"
36#else
37extern
38#endif
39void $fsub(void);
40int main(int argc, char **argv)
41{
42    $fsub();
43    return 0;
44}
45]])], [AS_TR_SH([$2])=`cat conftestval`])
46    LIBS=$ga_save_LIBS
47    rm -f conftest* cfortran_test*
48    AC_LANG_POP([C])])
49AC_LANG_POP([Fortran 77])
50]) # GA_F77_COMPUTE_SIZEOF
51
52# GA_F77_CHECK_SIZEOF(TYPE, CROSS-SIZE)
53# -------------------------------------
54AC_DEFUN([GA_F77_CHECK_SIZEOF],
55[AS_VAR_PUSHDEF([type_var], [ga_cv_f77_sizeof_$1])
56AC_CACHE_CHECK([size of Fortran $1], type_var,
57    [AS_IF([test x$cross_compiling = xyes],
58        [AS_VAR_SET(type_var, [$2])],
59        [GA_F77_COMPUTE_SIZEOF([$1], type_var)])])
60AS_IF([test x$cross_compiling = xyes],
61    [AC_MSG_WARN([Cannot determine size of $1 when cross-compiling.])
62     AC_MSG_WARN([Defaulting to $2])])
63AC_DEFINE_UNQUOTED(AS_TR_CPP(sizeof_f77_$1), $type_var,
64    [The size of '$1' as computed by C's sizeof.])
65AS_VAR_POPDEF([type_var])
66])# GA_F77_SIZEOF
67