source: codes/icosagcm/devel/XCodeML/make_xml.sh @ 823

Last change on this file since 823 was 823, checked in by dubos, 5 years ago

devel : script and files to parse DYNAMICO using XCodeML F_Front

  • Property svn:executable set to *
File size: 2.0 KB
Line 
1#!/bin/bash
2
3ROOT=$PWD
4MOD=$ROOT/xmod
5INC=/usr/lib64/openmpi/1.8.8-gfortran49/include
6
7function parse()
8{
9    cd $1 ; shift
10    for SRC in $* ; do
11        F_Front -M $MOD -I $INC $SRC.f90 -o $ROOT/xml/$SRC.xml > $ROOT/xml/$SRC.err 2>&1
12    done
13    cd $ROOT
14}
15
16function add_srcfiles()
17{
18    while (($# > 0)) ; do
19        DIR=$1
20        SRC=$2
21#       echo $SRC ${dir[$SRC]}
22        if [[ -z ${dir[$SRC]} ]] ; then
23#           echo "add_srcfiles : $NUMFILE $DIR $SRC"
24            src[$NUMFILE]=$SRC
25            dir[$SRC]=$DIR
26            ok[$SRC]=NO
27            ((NUMFILE++))
28        fi
29        shift ; shift
30    done
31}
32
33NETCDF=netcdf-fortran-4.4.5
34if [ ! -d "$NETCDF" ]; then
35    tar xzvf ${NETCDF}.tar.gz
36fi
37
38rm -f xml/* xmod/*
39echo "Parsing NetCDF ..."
40parse ${NETCDF}/fortran typeSizes netcdf4
41echo "... done."
42
43# create arrays
44declare -a src
45declare -A dir
46declare -A ok
47NUMFILE=0
48
49# first read from text file parse_order.txt
50touch parse_order.txt
51add_srcfiles $(cat parse_order.txt)
52# then, for completeness and bootstrapping, add files found in relevant places
53for DIR in $(find ../tools/ioipsl ../src ../ppsrc external_src -type d) ; do
54    cd -P $ROOT/$DIR
55    for F90 in $(ls *.f90 2>/dev/null) ;  do
56        SRC=$(echo "$F90" | cut -d'.' -f1)
57        add_srcfiles $DIR $SRC
58    done
59done
60cd $ROOT
61
62echo "$NUMFILE files to be parsed."
63rm -f parse_order.txt
64
65PASS=0
66AGAIN=YES
67
68while [[ "$AGAIN" == "YES" ]] ; do
69    AGAIN=NO
70    ((PASS++))
71    echo "------------------ pass $PASS ------------------"
72    for SRC in ${src[@]} ; do
73        DIR=${dir[$SRC]}
74        YESNO=${ok[$SRC]}
75        if [[ "$YESNO" == "NO" ]] ; then
76            parse $DIR $SRC
77            grep 'failed to import module' xml/$SRC.err > /dev/null
78            if [ $? -ne 0 ]; then
79                echo "$SRC : $DIR/$SRC.f90"
80                echo "$DIR $SRC" >> parse_order.txt
81                ok[$SRC]=YES
82                AGAIN=YES
83            else
84                rm xml/$SRC.xml
85            fi
86        fi
87    done
88done
89
90echo "------------------------------------"
91for SRC in ${!dir[@]} ; do
92    DIR=${dir[$SRC]}
93    YESNO=${ok[$SRC]}
94    if [[ "$YESNO" == "NO" ]] ; then
95        echo "Unable to parse : $SRC $DIR/$SRC.f90, check xml/$SRC.err"
96    fi
97done
98
99# cleanup
100find xml -name '*.err' -size 0 -print0 | xargs -0 rm
Note: See TracBrowser for help on using the repository browser.