Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
c0cb3482b9259011de75193a937ee4a8ed59b662
[simgrid.git] / src / smpi / smpif90.in
1 #! /bin/sh
2
3 F90=@GFORTRAN_EXE@
4
5 INCLUDEARGS="@includeflag@"
6 CMAKE_LINKARGS="-L@libdir@"
7
8 FFLAGS="-ff2c  -fno-second-underscore"
9 LINKARGS="-lsimgrid -lm -lgfortran"
10 main_name=main
11
12 declare -a TMPFILES
13 trap 'rm -f "${TMPFILES[@]}"' EXIT
14
15 # $1: prefix, $2: suffix
16 mymktemp () {
17     tmp=$(mktemp --suffix="$2" "$1_XXXXXXXXXX" 2> /dev/null)
18     if [ -z "$tmp" ]; then
19         # mktemp failed (unsupported --suffix ?), try unsafe mode
20         tmp=$(mktemp -u "$1_XXXXXXXXXX" 2> /dev/null)
21         if [ -z "$tmp" ]; then
22             # mktemp failed again (doesn't exist ?), try very unsafe mode
23             tmp="$1_$$x$RANDOM"
24         fi
25         tmp="${tmp}$2"
26         # create temp file, and exit if it existed before
27         sh -C -c "true > \"${tmp}\"" || exit 1
28     fi
29     echo "${tmp}"
30 }
31
32 CMDLINE=""
33 while [ -n "$1" ]; do
34   ARG="$1"
35   shift
36   case "${ARG}" in
37    -c)
38       CMAKE_LINKARGS=""
39       LINKARGS=""
40       CMDLINE="${CMDLINE} -c "
41       ;;
42    *.f90|*.F90)
43       TMPFILE=$(mymktemp "${ARG}" ".f90")
44       TMPFILES+="${TMPFILE}"
45       #replace "program main_name by subroutine user\_main (and the end clause as well)"
46       sed 's/[[:space:]]*program[[:space:]]*\([a-zA-Z0-9\-\_]*\)/subroutine user\_main /gI;s/[[:space:]]*use[[:space:]]*mpi/\include \"mpif\.h\" /gI'  ${ARG} > ${TMPFILE}
47       SRCFILE="${TMPFILE}"
48       CMDLINE="${CMDLINE} ${SRCFILE} "
49       ;;
50    *)
51       CMDLINE="${CMDLINE} ${ARG} "
52       ;;
53   esac
54 done
55
56 CMDLINE="${F90} ${FFLAGS} ${CMDLINE} ${INCLUDEARGS} ${CMAKE_LINKARGS} ${LINKARGS}"
57
58 #echo "${CMDLINE}"
59 ${CMDLINE}