/[MITgcm]/MITgcm_contrib/jmc_script/mk_mkfile
ViewVC logotype

Annotation of /MITgcm_contrib/jmc_script/mk_mkfile

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.1 - (hide annotations) (download)
Mon Apr 27 21:36:54 2009 UTC (14 years, 11 months ago) by jmc
Branch: MAIN
add script "mk_mkfile" (similar to "make makefile" with link to *_mpi
 files from MODS dir); add short description.

1 jmc 1.1 #! /usr/bin/env bash
2    
3     mkfile='Makefile'
4     if [ $# -ge 1 ] ; then
5     if test $1 = '-h' ; then
6     echo "Usage: `basename $0` MAKEFILE (default: 'Makefile') ; [-h] print this"
7     exit 9
8     fi
9     mkfile=$1
10     fi
11    
12     if test ! -f $mkfile ; then
13     echo "`basename $0` error: missing file '$mkfile'"
14     exit 8
15     fi
16    
17     cmdline=`grep '^# .*genmake2 ' $mkfile | sed 's/^# *//'`
18     echo " get Command-Line from file '$mkfile' :"
19     echo $cmdline
20    
21     printf "=== Parse Options ===\n"
22     CMDLINE=
23     MODS=
24     flg=0
25     MPI=0
26     prev=
27     dbq=0 ; sgq=0 ; keep=
28     # put newline between word in cmdline:
29     # CMDLINE=`echo $cmdline | awk '{ for(i=1;i<=NF;i++) print $i}'`
30     #echo "CMDLINE='$CMDLINE'"
31     for xx in $cmdline
32     do
33     arg=`echo $xx`
34     # glue multiple words argument (unbalanced starting & ending double quote)
35     n1=`echo $xx | grep -c '^"'`
36     n2=`echo $xx | grep -c '"$'`
37     if [ $n1 -eq 1 -a $n2 -eq 0 ] ; then
38     dbq=1; keep=$xx
39     continue
40     fi
41     if [ $n1 -eq 0 -a $dbq -eq 1 ] ; then
42     if [ $n2 -eq 1 ] ; then
43     n1=$dbq ; dbq=0
44     xx="$keep $xx"
45     else
46     keep="$keep $xx"
47     continue
48     fi
49     fi
50     # remove starting & ending double quote
51     if [ $n1 -eq 1 -a $n2 -eq 1 ] ; then
52     arg=`echo $xx | sed 's/^"//' | sed 's/"$//'`
53     fi
54     # glue multiple words argument (unbalanced starting & ending single quote)
55     n1=`echo $xx | grep -c "^'"`
56     n2=`echo $xx | grep -c "'$"`
57     if [ $n1 -eq 1 -a $n2 -eq 0 ] ; then
58     sgq=1; keep=$xx
59     continue
60     fi
61     if [ $n1 -eq 0 -a $sgq -eq 1 ] ; then
62     if [ $n2 -eq 1 ] ; then
63     n1=$sgq ; sgq=0
64     xx="$keep $xx"
65     else
66     keep="$keep $xx"
67     continue
68     fi
69     fi
70     # remove starting & ending single quote
71     if [ $n1 -eq 1 -a $n2 -eq 1 ] ; then
72     arg=`echo $xx | sed "s/^'//" | sed "s/'$//"`
73     fi
74     # process "arg"
75     opt=`expr "x$arg" : 'x[^=]*=\(.*\)'`
76     # echo "xx='$xx' ; arg='$arg' ; opt='$opt'"
77     # sav "arg" to CMDLINE <- not actually used
78     #eqs=`echo $arg | grep -c '='`
79     #if [ $eqs -gt 0 ] ; then
80     # pfx=`echo $arg | sed 's/=.*$/=/'`
81     # nw=`echo $opt | wc -w`
82     # if test $nw = '1' ; then
83     # CMDLINE="$CMDLINE $pfx$opt"
84     # else
85     # CMDLINE="$CMDLINE $pfx'$opt'"
86     # fi
87     #else
88     nw=`echo $arg | wc -w`
89     if test $nw = '1' ; then
90     CMDLINE="$CMDLINE $arg"
91     else
92     CMDLINE="$CMDLINE '$arg'"
93     fi
94     #fi
95     if test -n "$prev" -a $flg = '1' ; then
96     eval "$prev=\$arg"
97     prev=
98     continue
99     fi
100     case $arg in
101     -mpi | --mpi | -mpi=* | --mpi=* )
102     MPI=`expr $MPI + 1` ;;
103     -mods | --mods | -mo | --mo )
104     prev=MODS
105     flg=`expr $flg + 1` ;;
106     -mods=* | --mods=* | -mo=* | --mo=* )
107     MODS=$opt
108     flg=`expr $flg + 1` ;;
109     *) ;;
110     esac
111     done
112    
113     printf "=== \n"
114     echo " Set MPI='$MPI' ; MODS='$MODS'"
115     #echo "flg='$flg'"
116    
117     if [ $flg -lt 1 ] ; then
118     echo "`basename $0` error: no '-mods' found"
119     exit 4
120     fi
121     if [ $flg -gt 1 ] ; then
122     echo "`basename $0` error: found multiple '-mods' ($flg)"
123     exit 3
124     fi
125     if [ $MPI -gt 1 ] ; then
126     echo "`basename $0` error: found multiple '-mpi' ($MPI)"
127     exit 2
128     fi
129    
130     #---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
131    
132     printf "=== Link / Unlink *_mpi files from 'MODS' dirs ===\n"
133     printf " MODS dir: "
134     MPI_LNKF=
135     for d in $MODS ; do
136     if test ! -d $d ; then
137     echo
138     echo "Error: MODS directory \"$d\" not found!"
139     exit 1
140     else
141     printf "$d "
142     #SOURCEDIRS="$SOURCEDIRS $d"
143     #INCLUDEDIRS="$INCLUDEDIRS $d"
144     #-------------------------------------------------------
145     # Put special links so that MPI specific files are used
146     MPI_FILES=`(cd $d ; find . -name "*_mpi" -print)`
147     for i in $MPI_FILES ; do
148     ii=`echo $i | sed 's:^\./::'`
149     name=`echo $ii | sed 's:_mpi::' `
150     if test $MPI = 0 ; then
151     # NO: We undo an _mpi symbolically linked file
152     if test -L $name ; then
153     cmp $name "$d/$ii" > /dev/null 2>&1
154     RETVAL=$?
155     if test "x$RETVAL" = x0 ; then
156     printf "Un-linking $name ; "
157     rm -f $name
158     fi
159     fi
160     else
161     # YES: We symbolically link this file (with conditions if already there)
162     if test -L $name ; then
163     cmp $d/$ii $name > /dev/null 2>&1
164     RETVAL=$?
165     yy=0 ;
166     for xx in $MPI_LNKF ; do if test $xx = $name ; then yy=1 ; fi ; done
167     if test "x$RETVAL" != x0 -a $yy = 0 ; then
168     # remove sym-link if different and has not just been linked
169     printf "Un-link + "
170     rm -f $name
171     fi
172     if test "x$RETVAL" = x0 ; then
173     # if identical, keep sym-link and keep record of it
174     MPI_LNKF="$MPI_LNKF $name"
175     fi
176     fi
177     if ! test -f $name ; then
178     # make sym-link and keep record of it
179     printf "Linking $ii to $name ; "
180     ln -sf $d/$ii $name
181     MPI_LNKF="$MPI_LNKF $name"
182     fi
183     fi
184     done
185     #-------------------------------------------------------
186     fi
187     done
188     echo
189     echo "MPI_LNKF='$MPI_LNKF'"
190    
191     #---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
192     printf "=== Generate new Makefile ===\n"
193     #echo $CMDLINE
194     #eval $CMDLINE
195     echo $cmdline
196     eval $cmdline

  ViewVC Help
Powered by ViewVC 1.1.22