Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Try to fix temp file creation.
[simgrid.git] / src / smpi / smpif90.in
index 9864551..bba2ffa 100644 (file)
@@ -1,14 +1,34 @@
-#! /bin/bash
+#! /usr/bin/env bash
 
-CC=@CMAKE_Fortran_Compiler@
+F90=@GFORTRAN_EXE@
 
 INCLUDEARGS="@includeflag@"
 CMAKE_LINKARGS="-L@libdir@"
 
-FFLAGS="-ff2c "
+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,12 +40,10 @@ while [ -n "$1" ]; do
       CMDLINE="${CMDLINE} -c "
       ;;
    *.f90|*.F90)
-      SRCFILE="$(readlink -f ${ARG} 2>/dev/null)"
-      if [ -z $SRCFILE ] ; then
-         SRCFILE="$ARG"
-      fi
+      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'  ${ARG} > ${TMPFILE}
+      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}"
       CMDLINE="${CMDLINE} ${SRCFILE} "
       ;;
@@ -35,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}"
+#echo "${CMDLINE}"
 ${CMDLINE}
-
-if [ -f ${TMPFILE} ];then
-  rm ${TMPFILE}
-fi