New URL for NEMO forge!   http://forge.nemo-ocean.eu

Since March 2022 along with NEMO 4.2 release, the code development moved to a self-hosted GitLab.
This present forge is now archived and remained online for history.
fait_AA_make in trunk/UTIL – NEMO

source: trunk/UTIL/fait_AA_make @ 429

Last change on this file since 429 was 429, checked in by opalod, 18 years ago

nemo_v1_compil_014:RB: add dependency to agrif library

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 21.4 KB
Line 
1#!/bin/ksh
2#set -vx
3############################################################
4#
5# Purpose :
6# This script aims to create create the AA_make file
7# in the WORK directory.
8# AA_make contains :
9#    - compilation options speccific to NEMO
10#    - compilation rules
11#    - dependancies
12# Running the modipsl/util/ins_make command is needed AFTER
13# fait_AA_make.
14#
15# Method :
16# We use temporary files to perform the following steps :
17#    1- search all CPP keys in the code
18#    2- write compilation rules
19#    3- add compilation options add the beginning of AA_make
20#    4- search and write dependancies
21#    5- add some specific rules (links creation in the WORK)
22#
23############################################################
24#-
25echo "This script must be run while in the modipsl/modeles/NEMO directory"
26cd WORK
27pwd
28
29#-
30#- Search CPP keys ---
31liste_cle=$(egrep '^# *if[!( &]*def|^# *elif' *.[Fh] *.[Fh]90  2> /dev/null | grep key_ | sed 's/||/\
32/' | sed 's/\&\&/\
33/' | sed 's/^.*key_/key_/' | sed 's/ *[) ] *$//' | sort -u  )
34
35#-
36#- Write main compilation rules ---
37cat > tampon <<end
38
39.SUFFIXES: .f90 .F90 .F
40
41# Target
42all:     diroce \$(EXEC_BIN)
43      @cp SRC_FILE_LIST.temp SRC_FILE_LIST
44      @echo OPA model is OK
45# Cleaning objects, libraries and executables
46clean:
47ifeq (\$(AGRIF),use)
48      -@(cd OPAFILES; ./efface)
49endif
50      \$(RM) model.o \$(MODDIR)/oce/*.mod \$(MODEL_LIB) \$(SXMODEL_LIB) \$(EXEC_BIN)
51      @echo OPA model \(.o .mod libraries and executables are removed\)
52
53# Dependancies
54diroce:
55      @if [ ! -d ../../../lib/oce ] ; then mkdir ../../../lib/oce ; fi
56
57\$(EXEC_BIN) : libioipsl key keyverif src_file_list libagrif \$(MODEL_LIB) \$(IOIPSL_LIB) \$(AGRIF_LIB) agrif2model.o model.o
58ifeq (\$(AGRIF),use)
59      \$(F_L) \$(L_X) -o \$(EXEC_BIN) model.o agrif2model.o \$(SXMODEL_LIB) \$(OASISMPI2_LIB) \$(IOIPSL_LIB) \$(AGRIF_LIB) \$(NCDF_LIB) \$(LIBMPI) \$(LIBMP)
60else
61      \$(F_L) \$(L_X) -o \$(EXEC_BIN) model.o \$(SXMODEL_LIB) \$(OASISMPI2_LIB) \$(IOIPSL_LIB) \$(NCDF_LIB) \$(LIBMPI) \$(LIBMP)
62endif
63
64# Agrif library and conv
65libagrif :
66ifeq (\$(AGRIF),use)
67   @( if [ ! -d OPAFILES ]; then mkdir OPAFILES; fi )
68   @( if [ ! -d OPAFILES/AGRIF_INC ]; then mkdir OPAFILES/AGRIF_INC ; fi )
69   @( if [ ! -d OPAFILES/AGRIF_MODELFILES ]; then mkdir OPAFILES/AGRIF_MODELFILES ; fi )
70   @(cd ../../AGRIF ; \$(M_K) -f Makefile P_P="\$(AGRIF_MPI)" )
71   @cp -rf ../../AGRIF/agrif_opa.in OPAFILES/.
72   @cp -rf ../../AGRIF/conv OPAFILES/.
73   @cp -rf ../../AGRIF/efface OPAFILES/.
74endif
75
76# Agrif interface with NEMO
77agrif2model.o :
78ifeq (\$(AGRIF),use)
79   @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC \$*.F90 > OPAFILES/\$*.F90
80   @\$(F_C) \\
81#-Q- aix    -qsuffix=f=F90 \\
82#-Q- osxxlf    -qsuffix=f=F90 \\
83   \$(P_P) \$(F_O) \\
84#-Q- fjvpp     -Z \$*.L \\
85#-Q- sxnec     -R2 \\
86#-Q- sx6nec    -R2 \\
87#-Q- sxdkrz    -R2 \\
88#-Q- eshpux    -R2 \\
89#-Q- aix    -qsource \\
90      OPAFILES/\$*.F90 || { mv \$(PREF).L \$(TMP) ; false ; exit ; }
91#-Q- sxnec     @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
92#-Q- sx6nec    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
93#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
94#-Q- hpux         @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
95endif
96
97# IOIPSL library
98libioipsl :
99   (cd ../../IOIPSL/src ; \$(M_K) -f Makefile )
100
101# Main program
102model.o :   model.f90
103      @\$(F_C) \$(F_O) -c model.f90
104
105# if the make script is stopped, one doesn't destroy library
106.PRECIOUS : \$(MODEL_LIB)
107#-Q- sxnec .PRECIOUS : \$(SXMODEL_LIB)
108#-Q- sx6nec .PRECIOUS : \$(SXMODEL_LIB)
109#-Q- sxdkrz .PRECIOUS : \$(SXMODEL_LIB)
110#-Q- eshpux .PRECIOUS : \$(SXMODEL_LIB)
111
112# library dependancies
113\$(MODEL_LIB): \$(LIB_OBJ)
114      @echo
115      @echo La bibliotheque est a jour
116      @echo
117
118# Default rules
119.DEFAULTS:
120
121# rules for the .f90 files
122.f90.a :           
123      @\$(F_C) \$(P_P) \$(F_O) \\
124#-Q- fjvpp     -Z \$*.L \\
125#-Q- sxnec     -R2 \\
126#-Q- sx6nec    -R2 \\
127#-Q- sxdkrz    -R2 \\
128#-Q- eshpux    -R2 \\
129#-Q- aix    -qsource \\
130      \$*.f90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; }
131#-Q- sxnec     @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
132#-Q- sx6nec    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
133#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
134#-Q- eshpux    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
135      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
136      @\$(RM) \$*.[of]
137      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce ; fi
138#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
139#-Q- linux     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
140#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
141      @if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi
142
143# rules for the .F90 files
144.F90.a : 
145ifeq (\$(AGRIF),use) 
146      @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC \$*.F90 > OPAFILES/\$*.F90
147      @(cd OPAFILES ; ./conv agrif_opa.in -rm \\
148#-Q- linux     -SubloopScalar \\
149#-Q- lxiv8     -SubloopScalar \\
150#-Q- g95       -SubloopScalar \\
151#-Q- f95       -SubloopScalar \\
152#-Q- osf1         -SubloopScalar \\
153      -comdirin ./ -comdirout AGRIF_MODELFILES/. -convfile \$*.F90)
154      -@mv -f OPAFILES/AGRIF_MODELFILES/\$*.F90 OPAFILES/\$*.F90
155      @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC OPAFILES/\$*.F90 > OPAFILES/AGRIF_MODELFILES/\$*.F90
156      -@mv -f OPAFILES/AGRIF_MODELFILES/\$*.F90 OPAFILES/\$*.F90
157      @\$(F_C) \$(P_P) \$(F_O) \\
158#-Q- fjvpp     -Z \$*.L \\
159#-Q- sxnec     -R2 \\
160#-Q- sx6nec    -R2 \\
161#-Q- sxdkrz    -R2 \\
162#-Q- eshpux    -R2 \\
163#-Q- aix    -qsource \\
164      OPAFILES/\$*.F90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; } 
165else
166      @\$(F_C) \$(P_P) \$(F_O) \\
167#-Q- fjvpp     -Z \$*.L \\
168#-Q- sxnec     -R2 \\
169#-Q- sx6nec    -R2 \\
170#-Q- sxdkrz    -R2 \\
171#-Q- eshpux    -R2 \\
172#-Q- aix    -qsource \\
173      \$*.F90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; }
174endif
175#-Q- sxnec     @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
176#-Q- sx6nec    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
177#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
178#-Q- eshpux    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
179      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
180      @\$(RM) \$*.[of]
181      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce ; fi
182#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
183#-Q- linux     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
184#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
185      @if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi
186
187# rules for the .F files
188.F.a :           
189      @\$(F_C) \$(P_P) \$(F_O) \\
190#-Q- fjvpp     -Z \$*.L \\
191#-Q- sxnec     -R2 \\
192#-Q- sx6nec    -R2 \\
193#-Q- sxdkrz    -R2 \\
194#-Q- eshpux    -R2 \\
195#-Q- aix    -qsource \\
196      \$*.F || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; }
197#-Q- sxnec     @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
198#-Q- sx6nec    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
199#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
200#-Q- eshpux    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
201      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
202      @\$(RM) \$*.[of]
203      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce ; fi
204#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
205#-Q- linux     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
206#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
207      @if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi
208
209# rules for the library from the .f files
210.f.a :     
211      @\$(F_C) \$(F_O) \\
212#-Q- fjvpp     -Z \$*.L \\
213#-Q- sxnec     -R2 \\
214#-Q- sx6nec    -R2 \\
215#-Q- sxdkrz    -R2 \\
216#-Q- eshpux    -R2 \\
217#-Q- aix    -qsource \\
218      \$*.f|| { if [ -f \$(PREF)\$*.L ] ; then mv \$*.L \$(TMP) ; fi ; false ; exit ; }
219#-Q- sxnec     @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
220#-Q- sx6nec    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
221#-Q- sxdkrz    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
222#-Q- eshpux    @\$(A_X) \$(SXMODEL_LIB) \$*.o  > /dev/null
223      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
224      @\$(RM) -f \$*.o
225#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
226#-Q- linux  @mv \$(PREF)\$*.lst \$(PREF)\$*.L
227#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
228      @if [ -f \$(PREF)\$*.L ] ; then mv \$*.L \$(TMP) ; fi
229
230end
231#-
232#- Compilation options ---
233exec 1> AA_make
234MAIN="model"
235echo '# $Header$'
236echo '# some variables'
237echo 'TMP = ../../../tmp'
238echo '#-Q- sxnec  # Compiler options for NEMO (IDRIS SX5-NEC) '
239echo '#-Q- sxnec  F_O = -dw -Wf\"-A idbl4\" -sx5 -ftrace -C vopt -Wf"-init stack=nan" -Wl"-f nan" -Wf"-P nh" -Wf,-pvctl noassume loopcnt=10000 -L transform -I $(MODDIR) -I $(MODDIR)/oce'
240echo '#-Q- sxnec  L_X = $(L_O) $(L_C) -ftrace'
241echo '#-Q- sx6nec  # Compiler options NEMO (CEA SX6-NEC) '
242echo '#-Q- sx6nec  F_O = -size_t64 -dw -Wf\"-A dbl4\" -sx6 -C vopt -Wf"-P nh" -Wf',-pvctl noassume loopcnt=10000 -L transform' -I $(MODDIR) -I $(MODDIR)/oce'
243echo '#-Q- sx6nec  F_O = -size_t64 -dw -Wf\"-A dbl4\" -sx6 -ftrace -C vopt -Wf"-init stack=nan" -Wl"-f nan" -Wf"-P nh" -Wf,-pvctl noassume loopcnt=10000 -L transform -I $(MODDIR) -I $(MODDIR)/oce'
244echo '#-Q- sx6nec  L_X = $(L_O) $(L_C) -ftrace'
245echo '#-Q- sxdkrz  # Compiler options for NEMO (DKRZ SX6-NEC) '
246echo '#-Q- sxdkrz  F_O = -ew -sx6 -ftrace -C vopt -Wf"-init stack=nan" -Wl"-f nan" -Wf"-P nh" -Wf"-pvctl noassume loopcnt=10000" -L transform -I $(MODDIR) -I $(MODDIR)/oce'
247echo '#-Q- sxdkrz  L_X = $(L_O) $(L_C) -ftrace'
248echo '#-Q- eshpux  # Compiler options for NEMO (Earth Simulator)'
249echo '#-Q- eshpux  # for super perfs!'
250echo '#-Q- eshpux  # F_O = $(FTRACE) -pi nest=5 line=10000 expin=Fmpplib.F -Wf,-A idbl4 -C hopt -Wf"-P nh" -Wf,-pvctl noassume loopcnt=10000 -L transform -I $(MODDIR) -I $(MODDIR)/oce'
251echo '#-Q- eshpux  # regular options!'
252echo '#-Q- eshpux  F_O = $(FTRACE) -Wf,-A idbl4 -C vopt -P stack -Wf"-P nh" -Wf,-pvctl noassume loopcnt=10000 -L transform -Wf,-pvctl nomsg -Wf"-O nomsg" -I $(MODDIR) -I $(MODDIR)/oce'
253echo '#-Q- eshpux  L_X = $(L_O)'
254echo '#-Q- linux  # Compiler options for NEMO (pgf version)'
255echo '#-Q- linux  F_O = -Mlist -O3 -byteswapio -r8  -I $(MODDIR) -I$(MODDIR)/oce'
256echo '#-Q- linux  L_X = -r8 -O3'
257echo '#-Q- lxiv7  # Compiler options for NEMO (ifc version)'
258echo '#-Q- lxiv7  F_O = -O3 -r8  -I $(MODDIR) -I$(MODDIR)/oce'
259echo '#-Q- lxiv7  L_X = -r8 -O3'
260echo '#-Q- lxiv8  # Compiler options for NEMO (ifort version)'
261echo '#-Q- lxiv8  F_O = -O3 -r8  -I $(MODDIR) -I$(MODDIR)/oce'
262echo '#-Q- lxiv8  L_X = -r8 -O3'
263echo '#-Q- g95  # Compiler options for NEMO (g95 version)'
264echo '#-Q- g95  F_O = -O3 -fno-second-underscore -r8 -funroll-all-loops -I $(MODDIR) -I $(MODDIR)/oce'
265echo '#-Q- g95  L_X = -r8 -O3'
266echo '#-Q- aix    # Compiler options for NEMO (aix version)'
267echo '#-Q- aix    F_O = -O3 -qsave -qrealsize=8 -qsuffix=f=f90 -qsuffix=cpp=F90 -qextname -qsource -q64 -qlargepage -qmaxmem=-1 -I $(MODDIR) -I $(MODDIR)/oce' 
268echo '#-Q- aix   L_O = $(F_P) -q64 -O3'
269echo '#-Q- aix   L_X = $(L_O) $(L_C) '
270echo '#-Q- osxxlf    # Compiler options for NEMO (osxxlf version)'
271echo '#-Q- osxxlf    F_O = -O3 -qsave -qrealsize=8 -qsuffix=f=f90 -qsuffix=cpp=F90 -qsource -qmaxmem=-1 -I $(MODDIR) -I $(MODDIR)/oce' 
272echo '#-Q- osxxlf    L_X = -qrealsize=8 -O3'
273
274echo 'PREF='
275echo '#-Q- sxnec  PREF=i.'
276echo '#-Q- sx6nec PREF=i.'
277echo '#-Q- sxdkrz PREF=i.'
278echo '#-Q- eshpux PREF=i.'
279echo ''
280echo '# add suffix to P_P'
281echo 'P_P := $(P_P:%=$(prefix)%)'
282echo ''
283echo '# Some tests to define variables related to Agrif compilation'
284echo '# Please do not change '
285echo 'ifneq (,$(findstring key_agrif,$(P_P)))'
286echo 'AGRIF=use'
287echo 'else'
288echo 'AGRIF=notuse'
289echo 'AGRIF_LIB='
290echo 'endif'
291echo 'ifneq (,$(findstring key_mpp_mpi,$(P_P)))'
292echo 'AGRIF_MPI=-DAGRIF_MPI'
293echo 'else'
294echo 'AGRIF_MPI='
295echo 'endif'
296
297echo ''
298# Write the cpp key list with one key by line
299echo 'KEY_LIST = \c'
300for i in ${liste_cle}
301do
302 echo "\\"
303 echo "     $i \c"
304done
305
306echo ''
307echo '# .o file list in the library'
308echo 'LIB_OBJ = \c'
309#
310# find all .f in the current directory
311# build object files list  LIB_OBJ
312# one dependancy by line
313
314for i in `ls *.f 2> /dev/null`
315do
316  bn=`basename $i .f`
317  if [ "${bn}" != "${MAIN}" ] 
318  then
319  if [ "${bn}" != "agrif2model" ] 
320  then
321    echo "\\"
322    echo "     \$(MODEL_LIB)($bn.o)\c"
323  fi
324  fi
325done
326
327# find all .f90 in the current directory
328# build object files list  LIB_OBJ
329# one dependancy by line
330
331for i in `ls *.f90  `
332do
333  bn=`basename $i .f90`
334  if [ "${bn}" != "${MAIN}" ] 
335  then
336  if [ "${bn}" != "agrif2model" ] 
337  then
338    echo "\\"
339    echo "     \$(MODEL_LIB)($bn.o)\c"
340  fi
341  fi
342done
343
344# find all .F90 in the current directory
345# build object files list  LIB_OBJ
346# one dependancy by line
347
348for i in `ls *.F90  `
349do
350  bn=`basename $i .F90`
351  if [ "${bn}" != "${MAIN}" ] 
352  then
353  if [ "${bn}" != "agrif2model" ] 
354  then
355    echo "\\"
356    echo "     \$(MODEL_LIB)($bn.o)\c"
357  fi
358  fi
359done
360
361# find all .F in the current directory
362# build object files list  LIB_OBJ
363# one dependancy by line
364
365for i in `ls *.F 2> /dev/null `
366do
367  bn=`basename $i .F`
368  if [ "${bn}" != "${MAIN}" ] 
369  then
370  if [ "${bn}" != "agrif2model" ] 
371  then
372    echo "\\"
373    echo "     \$(MODEL_LIB)($bn.o)\c"
374  fi
375  fi
376 done
377
378echo ""
379
380cat tampon
381rm tampon
382#-
383#- Write all dependancies ---
384
385for fic in `ls *.f90 *.F90  *.F 2> /dev/null `
386do
387    if [ "${fic}" != "agrif2model.F90" ]
388    then
389    if [ "${fic}" != "${MAIN}.[Ff]" ]
390    then
391   i=0
392   j=0
393   dep=""
394   inc=""
395   inc2=""
396   inc3=""
397   luse0=""
398   luse1=""
399   luse2=""
400   luse3=""
401#- search include files (old ice model form, should it be suppressed ?)
402   for inc in `sed -n 's/^[   ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
403   do
404       dep="$dep\n$inc"
405   done
406
407#- search include files on 3 levels
408   for inc in `sed -n 's/^#[  ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
409   do
410       j=1
411       dep="$dep\n$inc"
412      for inc2 in `sed -n 's/^#[    ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc | sort -u`
413      do
414          dep="$dep\n$inc2"
415          #- search include  in include (third level !!!)
416          for inc3 in `sed -n 's/^#[   ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc2 | sort -u`
417          do
418         dep="$dep\n$inc3"
419          done
420      done
421   done
422
423#- search USE in include files
424   for inc in `sed -n 's/^#[  ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
425   do
426      for fuse0 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $inc | sort -u`
427      do
428           if [ $fuse0 != "ioipsl" ] 
429                then
430                if [ $fuse0 != "Agrif_Util" ] 
431                then
432                if [ $fuse0 != "Agrif_Types" ] 
433                then
434          lfuse0=$fuse0.f90
435          [ -f $fuse0.F90 ] && lfuse0=$fuse0.F90
436          luse0="$luse0\n$lfuse0\n\$(MODEL_LIB)($fuse0.o)"
437                fi
438                fi
439                fi
440      done
441
442#- search USE in  files included in included files and add to luse0
443
444      for inc2 in `sed -n 's/^#[    ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc | sort -u`
445      do
446          for fuse0 in `sed -n 's/^[   ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $inc2 | sort -u`
447          do
448               if [ $fuse0 != "ioipsl" ] 
449                    then
450                    if [ $fuse0 != "Agrif_Util" ] 
451                    then
452                    if [ $fuse0 != "Agrif_Types" ] 
453                    then
454              lfuse0=$fuse0.f90
455              [ -f $fuse0.F90 ] && lfuse0=$fuse0.F90
456              luse0="$luse0\n$lfuse0\n\$(MODEL_LIB)($fuse0.o)"
457                    fi
458                    fi
459                    fi
460          done
461           done
462   done
463
464#- search USE (and USE of USE and so on three levels)
465   for fuse1 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $fic | sort -u`
466   do
467   if [ $fuse1 != "ioipsl" ] 
468        then
469        if [ $fuse1 != "Agrif_Util" ] 
470        then
471        if [ $fuse1 != "Agrif_Types" ] 
472        then
473       lfuse1=$fuse1.f90
474       [ -f $fuse1.F90 ] && lfuse1=$fuse1.F90
475       luse1="$luse1\n$lfuse1\n\$(MODEL_LIB)($fuse1.o)"
476      for fuse2 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $lfuse1 | sort -u`
477      do
478           if [ $fuse2 != "ioipsl" ] 
479                then
480                if [ $fuse2 != "Agrif_Util" ] 
481                then
482                if [ $fuse2 != "Agrif_Types" ] 
483                then
484          lfuse2=$fuse2.f90
485          [ -f $fuse2.F90 ] && lfuse2=$fuse2.F90
486          luse2="$luse2\n$lfuse2\n\$(MODEL_LIB)($fuse2.o)"
487          # on cherche les USE  dans le fichier deja USE (3eme niveau! balaise!)
488          for fuse3 in `sed -n 's/^#[     ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $lfuse2 | sort -u`
489          do
490          if [ $fuse3 != "ioipsl" ] 
491                    then
492                    if [ $fuse3 != "Agrif_Util" ] 
493                    then
494                    if [ $fuse3 != "Agrif_Types" ] 
495                    then
496         luse3="$luse3\n$lfuse3\n\$(MODEL_LIB)($fuse3.o)"
497                    fi         
498                    fi         
499                    fi         
500                    done
501                fi
502                fi
503                fi
504      done
505        fi
506        fi
507        fi
508   done
509#-
510#-  dep contains all dependancies
511   for depele in `echo $luse3 | sort -u` `echo $luse2 | sort -u` `echo $luse1 | sort -u` `echo $luse0 | sort -u` `echo $dep | sort -u`
512   do
513       [ ${i} = "0" ] && echo "\$(MODEL_LIB)(`echo $fic|awk -F. '{print $1}'`.o) :  \c"
514       echo "\\"
515       echo "  $depele \c"
516       let i=i+1 # pour signaler le premier
517   done
518
519#-
520#- add dependancies with IOIPSL library (if source files contains IOIPSL)
521        grep -i 'use *ioipsl' ${fic} >/dev/null && ( echo "\\" ; echo " \$(IOIPSL_LIB) \c")
522
523#-
524#- add dependancies with IOIPSL library (if source files contains Agrif_*)
525        grep -i 'use Agrif_*' ${fic} >/dev/null && ( echo "\\" ; echo " \$(AGRIF_LIB) \c")
526
527#-
528#- add dependancies with KEY_CPP (if source file inclides cp  keys)
529   if [ ${j} != "0" ] 
530        then
531     echo "\\"
532     echo " KEY_CPP \c" 
533   fi
534#-
535#- end with the file itself
536   if [ ${i} != "0" ] 
537        then
538        echo "\\"
539              echo " $fic"
540         fi
541    fi
542    fi
543echo $fic done >/dev/tty
544done
545#-
546#- Write some special rules ---
547echo '# key changing control'
548echo "key: "
549echo "   @echo CHANGE of CPP KEYS yes/no ?"
550echo "   -@if [ \"\`cat KEY_CPP\`\" != \"\$(P_P:\$(prefix)%=%)\" ] ; then \\"
551echo "      echo CPP options changed ; echo \"\$(P_P:\$(prefix)%=%)\" > KEY_CPP ; fi "
552#-
553echo '# check key values'
554echo "keyverif:"
555echo '   @echo CHECKING KEY'
556echo '   @echo KEY USED : '
557echo '   @for v in ` echo $(P_P:$(prefix)%=%) ` ; \'
558echo '   do \'
559echo '   echo $$v ;\'
560echo '        w=`echo $$v | cut -c1-3` ; \'
561echo '        if [ $$w = `echo "key"` ] ; then \'
562echo '        r=n ; \'
563echo '        echo " $(KEY_LIST) " | (grep $$v >/dev/null 2>&1) || r=o ; \'
564echo '           if [ $$r != "n" ] ; then \'
565echo '              echo "UNKNOWN KEY" ;\'
566echo '              false ;  \'
567echo '              exit ;  \'
568echo '           fi \'
569echo '        fi \'
570echo '   done'
571echo '# Checking the number of routines'
572echo "src_file_list: "
573echo '   @echo CHECKING THE NUMBER AND NAMES OF SOURCE FILES '
574echo '   @$(RM) `ls | fgrep -v -f .patron` '
575echo '   @check=`grep OPA_SRC .config`              ; \'
576echo '   if [ -n "$$check" ] ; then                   \'
577echo '   echo "   use OPA_SRC files"                ; \'
578echo '       ln -sf ../OPA_SRC/*.[Ffh]90          . ; \'
579echo '       ln -sf ../OPA_SRC/DYN/*.[Ffh]90      . ; \'
580echo '       ln -sf ../OPA_SRC/TRA/*.[Ffh]90      . ; \'
581echo '       ln -sf ../OPA_SRC/TRD/*.[Ffh]90      . ; \'
582echo '       ln -sf ../OPA_SRC/DIA/*.[Ffh]90      . ; \'
583echo '       ln -sf ../OPA_SRC/DOM/*.[Ffh]90      . ; \'
584echo '       ln -sf ../OPA_SRC/OBC/*.[Ffh]90      . ; \'
585echo '       ln -sf ../OPA_SRC/FLO/*.[Ffh]90      . ; \'
586echo '       ln -sf ../OPA_SRC/LDF/*.[Ffh]90      . ; \'
587echo '       ln -sf ../OPA_SRC/ZDF/*.[Ffh]90      . ; \'
588echo '       ln -sf ../OPA_SRC/SOL/*.[Ffh]90      . ; \'
589echo '       ln -sf ../OPA_SRC/DTA/*.[Ffh]90      . ; \'
590echo '       ln -sf ../OPA_SRC/SBC/*.[Ffh]90      . ; \'
591echo '  fi '
592echo '   @check=`grep LIM_SRC .config`              ; \'
593echo '   if [ -n "$$check" ] ; then                   \'
594echo '   echo "   use LIM_SRC files"                ; \'
595echo '      ln -sf ../LIM_SRC/*.[Ffh]90          . ; \'
596echo '  fi '
597echo '   @check=`grep NST_SRC .config`              ; \'
598echo '   if [ -n "$$check" ] ; then                   \'
599echo '   echo "   use NST_SRC files"                ; \'
600echo '      \$(RM) agrif_opa_interp.F90           ; \'
601echo '      \$(RM) agrif_opa_sponge.F90           ; \'
602echo '      \$(RM) agrif_opa_update.F90           ; \'
603echo '      ln -sf ../NST_SRC/*.[Ffh]90      .     ; \'
604echo '  fi '
605echo '   @check=`grep C1D_SRC .config`              ; \'
606echo '   if [ -n "$$check" ] ; then                   \'
607echo '   echo "   use C1D_SRC files"                ; \'
608echo '      ln -sf ../C1D_SRC/*.[Ffh]90          . ; \'
609echo '  fi '
610echo '   @check=`grep TOP_SRC .config`              ; \'
611echo '   if [ -n "$$check" ] ; then  \'
612echo '   echo "   use TOP_SRC files"                ; \'
613echo '      \$(RM) trcstp.F90                      ; \'
614echo '      \$(RM) sms.F90                         ; \'
615echo '      \$(RM) initrc.F90                      ; \'
616echo '      ln -sf ../TOP_SRC/*.[Ffh]90          . ; \'
617echo '      ln -sf ../TOP_SRC/SMS/*.[Ffh]        . ; \'
618echo '      ln -sf ../TOP_SRC/SMS/*.[Ffh]90      . ; \'
619echo '      ln -sf ../TOP_SRC/TRP/*.[Ffh]90      . ; \'
620echo '  fi '
621echo '   @check=`grep OFF_SRC .config`              ; \'
622echo '   if [ -n "$$check" ] ; then                   \'
623echo '   echo "   use OFF_SRC files"                ; \'
624echo '      ln -sf ../OFF_SRC/*.[Ffh]90          . ; \'
625echo '      ln -sf ../OFF_SRC/*/*.[Ffh]90        . ; \'
626echo '  fi '
627echo '   @\$(RM) tmplist'
628echo '   @ls -1 | fgrep -v -f .patron  >tmplist'
629echo '   @cmp tmplist SRC_FILE_LIST.temp || { echo some routines have been added or suppressed ; \'
630echo '   sdiff -s tmplist SRC_FILE_LIST.temp ; cp tmplist SRC_FILE_LIST.temp ; \'
631echo '   \$(RM) model.o \$(MODEL_LIB) \$(SXMODEL_LIB) \$(EXEC_BIN) ; \'
632echo '   echo "Rebuilding the AA_make files" ; \'
633echo '   cd ..  ; ../UTIL/fait_AA_make ; echo " " ; \'
634echo '   echo "THE ins_make COMMAND in modipsl/util MUST BE RERUN PLEASE DO SO BEFORE gmake" ; \'
635echo '   echo "========================================== " ; \'
636echo '   ../../util/ins_make ; echo " " ;  false ; exit ; }'
637exec > /dev/null
638
Note: See TracBrowser for help on using the repository browser.