Arquivos
mpich/confdb/aclocal_datatype.m4
Hui Zhou d05af77b9b confdb: fix syntax error in PAC_SET_MPI_TYPE
It is a syntax error when $3 is empty:
    if test -z "" -o = 0 ;
2024-01-18 13:56:32 -06:00

186 linhas
4.8 KiB
Plaintext

dnl Utilities in shell functions - reduces size in configure script
dnl These functions sets $pac_retval
dnl
AC_DEFUN([PAC_DATATYPE_UTILS], [
# Take decimal and turn it into two hex digits
to_hex() {
len=$[]1
if test -z $len ; then
pac_retval="00"
elif test $len -le 9 ; then
dnl avoid subshell for speed
pac_retval="0${len}"
elif test $len -eq 16 ; then
pac_retval="10"
elif test $len -eq 32 ; then
pac_retval="20"
else
dnl printf is portable enough
pac_retval=`printf "%02x" $len`
fi
}
# Convert hex values in the form of 0x######## to decimal for
# datatype constants in Fortran.
to_dec() {
orig_value=$[]1
dnl printf is portable enough
pac_retval=`printf "%d" $orig_value`
}
# return the C type matching integer of size
get_c_int_type() {
len=$[]1
pac_retval=
for c_type in char short int long "long_long" ; do
eval ctypelen=\$"ac_cv_sizeof_$c_type"
if test "$len" = "$ctypelen" -a "$ctypelen" -gt 0 ; then
if test "$c_type" = "long_long" ; then
pac_retval=`echo $c_type | sed -e 's/_/ /g'`
else
pac_retval=$c_type
fi
return
fi
done
pac_retval="unavailable"
}
# return the C type matching integer of size
get_c_float_type() {
len=$[]1
pac_retval=
for c_type in float double __float128 "long_double" ; do
eval ctypelen=\$"ac_cv_sizeof_$c_type"
if test "$len" = "$ctypelen" -a "$ctypelen" -gt 0 ; then
if test "$c_type" = "long_double" ; then
pac_retval=`echo $c_type | sed -e 's/_/ /g'`
else
pac_retval=$c_type
fi
return
fi
done
pac_retval="unavailable"
}
# return (via $pac_retval) the C type matching integer of size
get_c_bool_type() {
len=$[]1
pac_retval=
for c_type in _Bool unsigned_char unsigned_short unsigned_int unsigned_long unsigned_long_long ; do
eval ctypelen=\$"ac_cv_sizeof_$c_type"
if test "$len" = "$ctypelen" -a "$ctypelen" -gt 0 ; then
if test "$c_type" != "_Bool" ; then
pac_retval=`echo $c_type | sed -e 's/_/ /g'`
else
pac_retval=$c_type
fi
return
fi
done
pac_retval="unavailable"
}
])
dnl
dnl PAC_SET_MPI_TYPE(hexidx, name, len, [multiplier])
dnl Defines datatype hex handle
dnl e.g. PAC_SET_MPI_TYPE(01, MPI_CHAR, 1) -> MPI_CHAR=0x4c000101
dnl Multiplier can be used to define double types
dnl e.g. PAC_SET_MPI_TYPE(48, MPI_COMPLEX, $pac_cv_f77_sizeof_real, 2)
dnl
AC_DEFUN([PAC_SET_MPI_TYPE], [
if test -z "$3" -o "$3" = 0 ; then
$2=MPI_DATATYPE_NULL
F77_$2=MPI_DATATYPE_NULL
F08_$2=MPI_DATATYPE_NULL%MPI_VAL
else
hexidx=$1
if test -n "$4" ; then
len=`expr $3 \* $4`
else
len=$3
fi
to_hex $len
hexlen=$pac_retval
$2="0x4c00${hexlen}${hexidx}"
to_dec $[]$2
F77_$2=$pac_retval
F08_$2=$pac_retval
fi
AC_SUBST($2)
AC_SUBST(F77_$2)
AC_SUBST(F08_$2)
])
dnl
dnl PAC_SET_MPI_LBUB(hex_idx, name)
dnl e.g. PAC_SET_MPI_LBUB(10, MPI_LB) -> MPI_LB=0x4c000010
dnl
AC_DEFUN([PAC_SET_MPI_LBUB], [
$2="0x4c0000$1"
to_dec $[]$2
F77_$2=$pac_retval
F08_$2=$pac_retval
AC_SUBST($2)
AC_SUBST(F77_$2)
AC_SUBST(F08_$2)
])
dnl
dnl PAC_SET_MPI_PAIRTYPE(hexidx, name)
dnl e.g. PAC_SET_MPI_PAIRTYPE(02, MPI_LONG_INT) -> MPI_LONG_INT=0x8c000002
dnl
AC_DEFUN([PAC_SET_MPI_PAIRTYPE], [
$2="0x8c0000$1"
# 0x8c000000 is -1946157056
pac_retval=`expr $1 - 1946157056`
F77_$2=$pac_retval
F08_$2=$pac_retval
AC_SUBST($2)
AC_SUBST(F77_$2)
AC_SUBST(F08_$2)
])
dnl
dnl PAC_SET_MPI_DATATYPE_ALIAS(name, alias)
dnl
AC_DEFUN([PAC_SET_MPI_DATATYPE_ALIAS], [
$1=$[]$2
F77_$1=$F77_$2
F08_$1=$F08_$2
AC_SUBST($1)
AC_SUBST(F77_$1)
AC_SUBST(F08_$1)
])
dnl
dnl PAC_F77_CHECK_FIXED_REAL(size) and PAC_F77_CHECK_FIXED_INTEGER(size)
dnl Map fixed-size Fortran types, e.g. REAL*4, to equivallent C types.
dnl If no equivallent C types exist, set corresponding sizeof value to 0.
dnl
AC_DEFUN([PAC_F77_CHECK_FIXED_REAL], [
get_c_float_type $1
if test "$pac_retval" = "unavailable" ; then
eval pac_cv_f77_sizeof_real$1=0
else
eval pac_cv_f77_sizeof_real$1=$1
AC_DEFINE_UNQUOTED(MPIR_REAL$1_CTYPE,$pac_retval,[C type to use for MPI_REAL$1])
fi
])
AC_DEFUN([PAC_F77_CHECK_FIXED_INTEGER], [
get_c_int_type $1
if test "$pac_retval" = "unavailable" ; then
eval pac_cv_f77_sizeof_integer$1=0
else
eval pac_cv_f77_sizeof_integer$1=$1
AC_DEFINE_UNQUOTED(MPIR_INTEGER$1_CTYPE,$pac_retval,[C type to use for MPI_INTEGER$1])
fi
])