Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Try to fix temp file creation.
[simgrid.git] / src / smpi / smpif90.in
index bb772b5..bba2ffa 100644 (file)
@@ -1,6 +1,6 @@
-#! /bin/bash
+#! /usr/bin/env bash
 
-CC=gfortran
+F90=@GFORTRAN_EXE@
 
 INCLUDEARGS="@includeflag@"
 CMAKE_LINKARGS="-L@libdir@"
@@ -8,7 +8,27 @@ CMAKE_LINKARGS="-L@libdir@"
 FFLAGS="-ff2c  -fno-second-underscore"
 LINKARGS="-lsimgrid -lm -lgfortran"
 main_name=main
-TMPFILE=$(mktemp).f90
+
+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"
@@ -20,11 +40,8 @@ while [ -n "$1" ]; do
       CMDLINE="${CMDLINE} -c "
       ;;
    *.f90|*.F90)
-      SRCFILE="$(readlink -f ${ARG} 2>/dev/null)"
-      if [ -z $SRCFILE ] ; then
-         SRCFILE="$ARG"
-      fi
-      TMPFILE=$ARG\_.f90
+      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}"
@@ -36,11 +53,7 @@ while [ -n "$1" ]; do
   esac
 done
 
-CMDLINE="${CC} ${FFLAGS} ${CMDLINE} ${INCLUDEARGS} ${CMAKE_LINKARGS} ${LINKARGS}"
+CMDLINE="${F90} ${FFLAGS} ${CMDLINE} ${INCLUDEARGS} ${CMAKE_LINKARGS} ${LINKARGS}"
 
 #echo "${CMDLINE}"
 ${CMDLINE}
-
-if [ -f ${TMPFILE} ];then
-  rm ${TMPFILE}
-fi