declare -a TMPFILES
trap 'rm -f "${TMPFILES[@]}"' EXIT
+# $1: prefix, $2: suffix
+mymktemp () {
+ tmp=$(mktemp --suffix="$2" "$1_XXXXXXXXXX" 2> /dev/null)
+ if [ -z "$tmp" ]; then
+ # mktemp failed (unsupported --suffix ?), try unsafe mode
+ tmp=$(mktemp -u "$1_XXXXXXXXXX" 2> /dev/null)
+ if [ -z "$tmp" ]; then
+ # mktemp failed again (doesn't exist ?), try very unsafe mode
+ tmp="$1_$$x$RANDOM"
+ fi
+ tmp="${tmp}$2"
+ # create temp file, and exit if it existed before
+ sh -C -c "true > \"${tmp}\"" || exit 1
+ fi
+ echo "${tmp}"
+}
+
CMDLINE=""
while [ -n "$1" ]; do
ARG="$1"
CMDLINE="${CMDLINE} -c "
;;
*.f90|*.F90)
- TMPFILE=$(mktemp "${ARG}_XXXXXX.f90")
- TMPFILES+=( "${TMPFILE}" )
+ TMPFILE=$(mymktemp "${ARG}" ".f90")
+ TMPFILES+="${TMPFILE}"
#replace "program main_name by subroutine user\_main (and the end clause as well)"
sed 's/[[:space:]]*program[[:space:]]*\([a-zA-Z0-9\-\_]*\)/subroutine user\_main /gI;s/[[:space:]]*use[[:space:]]*mpi/\include \"mpif\.h\" /gI' ${ARG} > ${TMPFILE}
SRCFILE="${TMPFILE}"
ARGS="-DMAIN__=user_main -Diargc_=smpi_process_argc -Dgetarg_=smpi_process_getarg"
LINKARGS="-lf2c -lm"
-SRCFILES=""
+declare -a SRCFILES
+
+# $1: prefix, $2: suffix
+mymktemp () {
+ tmp=$(mktemp --suffix="$2" "$1_XXXXXXXXXX" 2> /dev/null)
+ if [ -z "$tmp" ]; then
+ # mktemp failed (unsupported --suffix ?), try unsafe mode
+ tmp=$(mktemp -u "$1_XXXXXXXXXX" 2> /dev/null)
+ if [ -z "$tmp" ]; then
+ # mktemp failed again (doesn't exist ?), try very unsafe mode
+ tmp="$1_$$x$RANDOM"
+ fi
+ tmp="${tmp}$2"
+ # create temp file, and exit if it existed before
+ sh -C -c "true > \"${tmp}\"" || exit 1
+ fi
+ echo "${tmp}"
+}
while [ -n "$1" ]; do
ARG="$1"
case "${ARG}" in
*.f)
SRCFILE="$(readlink -f ${ARG} 2>/dev/null)"
- if [ -z $SRCFILE ] ; then
+ if [ -z "$SRCFILE" ] ; then
SRCFILE="$ARG"
fi
- SRCFILES="${SRCFILES} ${SRCFILE}"
+ SRCFILES+="${SRCFILE}"
;;
*)
if [ "${ARG}" = "-c" ]; then
if [ -n "${SRCFILES}" ]
then
- for SRCFILE in "${SRCFILES}"
+ for SRCFILE in "${SRCFILES[@]}"
do
- TMPFILE=${SRCFILE}\_$RANDOM.f
+ TMPFILE=$(mymktemp "${SRCFILE}" ".f")
cp ${SRCFILE} ${TMPFILE}
CFILE="${TMPFILE%.f}.c"
#echo "$prefix/bin/smpif2c ${TMPFILE} && $prefix/bin/smpicc ${ARGS} ${CFILE} && rm ${CFILE} && rm ${TMPFILE}"