Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Try to fix temp file creation.
authorArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Fri, 8 Nov 2013 16:49:41 +0000 (17:49 +0100)
committerArnaud Giersch <arnaud.giersch@iut-bm.univ-fcomte.fr>
Fri, 8 Nov 2013 17:01:42 +0000 (18:01 +0100)
src/smpi/smpif90.in
src/smpi/smpiff.in

index 7c52fc5..bba2ffa 100644 (file)
@@ -12,6 +12,23 @@ main_name=main
 declare -a TMPFILES
 trap 'rm -f "${TMPFILES[@]}"' EXIT
 
 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=""
 while [ -n "$1" ]; do
   ARG="$1"
@@ -23,8 +40,8 @@ while [ -n "$1" ]; do
       CMDLINE="${CMDLINE} -c "
       ;;
    *.f90|*.F90)
       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}"
       #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}"
index 31c2116..b5c10f0 100644 (file)
@@ -3,7 +3,24 @@ prefix="@exec_prefix@"
 
 ARGS="-DMAIN__=user_main -Diargc_=smpi_process_argc -Dgetarg_=smpi_process_getarg"
 LINKARGS="-lf2c -lm"
 
 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"
 
 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)"
   case "${ARG}" in
     *.f)
       SRCFILE="$(readlink -f ${ARG} 2>/dev/null)"
-       if [ -z $SRCFILE ] ; then
+       if [ -z "$SRCFILE" ] ; then
          SRCFILE="$ARG"
        fi
          SRCFILE="$ARG"
        fi
-       SRCFILES="${SRCFILES} ${SRCFILE}"
+       SRCFILES+="${SRCFILE}"
        ;;
     *)
       if [ "${ARG}" = "-c" ]; then
        ;;
     *)
       if [ "${ARG}" = "-c" ]; then
@@ -28,9 +45,9 @@ ARGS="${ARGS} ${LINKARGS}"
 
 if [ -n "${SRCFILES}" ]
 then
 
 if [ -n "${SRCFILES}" ]
 then
-   for SRCFILE in "${SRCFILES}"
+   for SRCFILE in "${SRCFILES[@]}"
    do
    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}"
       cp ${SRCFILE} ${TMPFILE}
       CFILE="${TMPFILE%.f}.c"
       #echo "$prefix/bin/smpif2c ${TMPFILE} && $prefix/bin/smpicc ${ARGS} ${CFILE} && rm ${CFILE} && rm ${TMPFILE}"