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 branches/2010_and_older/dev_001_GM/UTIL – NEMO

source: branches/2010_and_older/dev_001_GM/UTIL/fait_AA_make @ 5600

Last change on this file since 5600 was 861, checked in by cetlod, 16 years ago

update the fait_AA_make and fait_config scripts to take into account the new TOP architecture , see ticket:93

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