Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Give smpiff the directory to libf2c.
[simgrid.git] / src / smpi / smpiff.in
index a77da10..33093fc 100644 (file)
@@ -1,9 +1,26 @@
-#! /bin/bash
+#! /usr/bin/env bash
 prefix="@exec_prefix@"
 
 ARGS="-DMAIN__=user_main -Diargc_=smpi_process_argc -Dgetarg_=smpi_process_getarg"
-LINKARGS="-lf2c"
-SRCFILES=""
+LINKARGS="-L@F2C_LIBRARY_PATH@ -lf2c -lm"
+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,11 +45,18 @@ ARGS="${ARGS} ${LINKARGS}"
 
 if [ -n "${SRCFILES}" ]
 then
-   for SRCFILE in "${SRCFILES}"
+   for SRCFILE in "${SRCFILES[@]}"
    do
-      CFILE="${SRCFILE%.f}.c"
-      #echo "$prefix/bin/smpif2c ${SRCFILE} && $prefix/bin/smpicc ${ARGS} ${CFILE} && rm ${CFILE}"
-      $prefix/bin/smpif2c ${SRCFILE} && $prefix/bin/smpicc ${ARGS} ${CFILE} 
+      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}"
+      $prefix/bin/smpif2c ${TMPFILE} && $prefix/bin/smpicc ${ARGS} ${CFILE} && rm ${CFILE} && rm ${TMPFILE} || exit $?
+      # When the file is compiled with "-c" and no output file is specified with
+      # "-o", rename the output.  FIXME: do it properly.
+      if [ -f ${CFILE%.c}.o ]; then
+          mv ${CFILE%.c}.o ${SRCFILE%.f}.o
+      fi
    done
 else
    #echo "$prefix/bin/smpicc ${ARGS}"