From 0be4d91dea4f9aeb5e9e298dc579d4ba2b03a2b7 Mon Sep 17 00:00:00 2001 From: Arnaud Giersch Date: Fri, 8 Nov 2013 17:49:41 +0100 Subject: [PATCH] Try to fix temp file creation. --- src/smpi/smpif90.in | 21 +++++++++++++++++++-- src/smpi/smpiff.in | 27 ++++++++++++++++++++++----- 2 files changed, 41 insertions(+), 7 deletions(-) diff --git a/src/smpi/smpif90.in b/src/smpi/smpif90.in index 7c52fc57da..bba2ffa337 100644 --- a/src/smpi/smpif90.in +++ b/src/smpi/smpif90.in @@ -12,6 +12,23 @@ main_name=main 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" @@ -23,8 +40,8 @@ while [ -n "$1" ]; do 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}" diff --git a/src/smpi/smpiff.in b/src/smpi/smpiff.in index 31c2116d8c..b5c10f0e55 100644 --- a/src/smpi/smpiff.in +++ b/src/smpi/smpiff.in @@ -3,7 +3,24 @@ prefix="@exec_prefix@" 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" @@ -11,10 +28,10 @@ while [ -n "$1" ]; do 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 @@ -28,9 +45,9 @@ ARGS="${ARGS} ${LINKARGS}" 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}" -- 2.20.1