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/NVTK – NEMO

source: trunk/NVTK/fait_AA_make @ 1359

Last change on this file since 1359 was 1359, checked in by smasson, 15 years ago

first implementation of iom_put, see ticket:387

  • Property svn:executable set to *
  • Property svn:keywords set to Id
File size: 23.8 KB
Line 
1#!/bin/ksh
2# $Id$
3##set -vx
4############################################################
5#
6# Purpose :
7# This script aims to create create the AA_make file
8# in the WORK directory.
9# AA_make contains :
10#    - compilation options speccific to NEMO
11#    - compilation rules
12#    - dependancies
13# Running the modipsl/util/ins_make command is needed AFTER
14# fait_AA_make.
15#
16# Method :
17# We use temporary files to perform the following steps :
18#    1- search all CPP keys in the code
19#    2- write compilation rules
20#    3- add compilation options add the beginning of AA_make
21#    4- search and write dependancies
22#    5- add some specific rules (links creation in the WORK)
23#
24############################################################
25#-
26echo "This script must be run from the ../modipsl/config/CONFIG_NAME directory"
27echo ""
28
29#- Save the previous BB_make file before its rebuild
30echo "Save the previous BB_make file before its rebuild"
31cp scripts/BB_make scripts/BB_make_save
32
33#- Start the BB_make rebuild step
34echo "Start the BB_make rebuild step"
35
36cd WORK
37pwd
38
39# Test version of echo
40stringtest=`echo "\c"`
41if [ "$stringtest" ]; then
42   echo 'aliasing echo with /bin/echo -e ...'
43   alias echo='/bin/echo -e'
44fi
45
46#-
47#- Search CPP keys ---
48liste_cle=$(egrep '^# *if[!( &]*def|^# *elif' *.[Fh] *.[Fh]90  2> /dev/null | grep key_ | sed 's/||/\
49/' | sed 's/\&\&/\
50/' | sed 's/^.*key_/key_/' | sed 's/ *[) ] *$//' | sort -u  )
51
52#-
53#- Write main compilation rules ---
54cat > tampon <<end
55
56.SUFFIXES: .f90 .F90 .F
57
58# Target
59all : diroce libioipsl key keyverif src_file_list libioserver libagrif \$(IOIPSL_LIB) \$(AGRIF_LIB)
60      @echo --------------------------------------------
61      time gmake \$(EXEC_BIN) -j \$(NBPRC)
62      @echo --------------------------------------------
63      @cp SRC_FILE_LIST.temp SRC_FILE_LIST
64      @echo OPA model is OK
65
66# Cleaning objects, libraries and executables
67clean:
68ifeq (\$(AGRIF),use)
69      -@(cd OPAFILES; ./efface)
70endif
71      \$(RM) model.o \$(EXEC_BIN)
72      \$(RM) \$(MODDIR)/oce_\$(NEMOLIB)/\$(COMP)/*.mod
73      \$(RM) \$(MODEL_LIB)/*.o
74      \$(RM) ../../../tmp/tmp_\$(NEMOLIB)/\$(COMP)/*
75      @echo OPA model \(.o .mod libraries and executables are removed\)
76
77# Dependancies
78diroce:
79      @if [ ! -d ../../../lib/oce_\$(NEMOLIB) ] ; then mkdir ../../../lib/oce_\$(NEMOLIB) ; fi
80      @if [ ! -d ../../../tmp/tmp_\$(NEMOLIB) ] ; then mkdir ../../../tmp/tmp_\$(NEMOLIB) ; fi
81      @if [ ! -d ../../../lib/oce_\$(NEMOLIB)/\$(COMP) ] ; then mkdir ../../../lib/oce_\$(NEMOLIB)/\$(COMP) ; fi
82      @if [ ! -d ../../../tmp/tmp_\$(NEMOLIB)/\$(COMP) ] ; then mkdir ../../../tmp/tmp_\$(NEMOLIB)/\$(COMP) ; fi
83
84\$(EXEC_BIN) :  \$(MODEL_LIB) agrif2model.o model.o
85ifeq (\$(AGRIF),use)
86      \$(F_L) \$(L_X) -o \$(EXEC_BIN) model.o agrif2model.o \$(MODEL_LIB)/*.o \$(OASISMPI2_LIB) \$(IOIPSL_LIB) \$(AGRIF_LIB) \$(NCDF_LIB) \$(USER_LIB) \$(LIBMPI) \$(LIBMP)
87else
88      \$(F_L) \$(L_X) -o \$(EXEC_BIN) model.o \$(MODEL_LIB)/*.o \$(OASISMPI2_LIB) \$(IOIPSL_LIB) \$(NCDF_LIB) \$(USER_LIB) \$(LIBMPI) \$(LIBMP)
89endif
90
91# ioserver library
92libioserver :
93ifeq (\$(IOSERVER),use)
94   (cd ../../../modeles/XMLF90; ./configure -arch \$(FCM_ARCH); fcm build; mkdir -p ../../lib/libxmlio_server  ; cd ../../lib/libxmlio_server ; ln -sf ../../modeles/XMLF90/lib/*.a .; ln -sf ../../modeles/XMLF90/inc/*.mod .)
95   (cd ../../../modeles/XMLIO_SERVER; ./configure -arch \$(FCM_ARCH); fcm build ; cd ../../lib/libxmlio_server ; ln -sf ../../modeles/XMLIO_SERVER/lib/*.a . ; ln -sf ../../modeles/XMLIO_SERVER/inc/* . ; cd \$(BINDIR) ; ln -sf ../modeles/XMLIO_SERVER/bin/server.exe ioserver)
96endif
97
98# Agrif library and conv
99libagrif : firstagrif mpiagrif
100ifeq (\$(AGRIF),use)
101   @( if [ ! -d OPAFILES ]; then mkdir OPAFILES; fi )
102   @( if [ ! -d OPAFILES/AGRIF_INC ]; then mkdir OPAFILES/AGRIF_INC ; fi )
103   @( if [ ! -d OPAFILES/AGRIF_MODELFILES ]; then mkdir OPAFILES/AGRIF_MODELFILES ; fi )
104   @(cd ../../../modeles/AGRIF ; \$(M_K) -f Makefile P_P="\$(AGRIF_MPI)" )
105   @cp -rf ../../../modeles/AGRIF/agrif_opa.in OPAFILES/.
106   @cp -rf ../../../modeles/AGRIF/conv OPAFILES/.
107   @cp -rf ../../../modeles/AGRIF/efface OPAFILES/.
108endif
109
110# Agrif interface with NEMO
111agrif2model.o :
112ifeq (\$(AGRIF),use)
113   @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC \$*.F90 > OPAFILES/\$*.F90
114   @\$(F_C) \\
115#-Q- aix6      -qsuffix=f=F90 \\
116#-Q- ax6_mono     -qsuffix=f=F90 \\
117#-Q- babel     -qsuffix=f=F90 \\
118#-Q- osxxlf    -qsuffix=f=F90 \\
119   \$(P_P) \$(F_O) \\
120#-Q- fjvpp     -Z \$*.L \\
121#-Q- sx8mercure      -R2 \\
122#-Q- sx8brodie    -R2 \\
123#-Q- sxdkrz    -R2 \\
124#-Q- eshpux    -R2 \\
125#-Q- aix6      -qsource \\
126#-Q- ax6_mono     -qsource \\
127#-Q- babel     -qsource \\
128      OPAFILES/\$*.F90 || { mv \$(PREF).L \$(TMP) ; false ; exit ; }
129endif
130
131# IOIPSL library
132libioipsl :
133   (cd ../../../modeles/IOIPSL/src ; \$(M_K) -f Makefile )
134
135# Main program
136model.o :   \$(MODEL_LIB) model.f90
137      @\$(F_C) \$(F_O) -c model.f90
138
139# if the make script is stopped, one doesn't destroy library
140.PRECIOUS : \$(MODEL_LIB)
141#-Q- sxdkrz .PRECIOUS : \$(SXMODEL_LIB)
142#-Q- eshpux .PRECIOUS : \$(SXMODEL_LIB)
143
144# library dependancies
145\$(MODEL_LIB): \$(LIB_OBJ)
146      @echo
147      @echo The library is up-to-date
148      @echo
149
150# Default rules
151.DEFAULTS:
152
153# rules for the .f90 files
154\$(MODEL_LIB)/%.o : %.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- aix6      -qsource \\
162#-Q- ax6_mono     -qsource \\
163#-Q- babel     -qsource \\
164      \$*.f90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; }
165      @mv \$*.o \$(MODEL_LIB)/.
166      @\$(RM) \$*.[f]
167      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce_\$(NEMOLIB)/\$(COMP) ; fi
168#-Q- aix6      @mv \$(PREF)\$*.lst \$(PREF)\$*.L
169#-Q- ax6_mono     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
170#-Q- babel     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
171#-Q- linux     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
172#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
173      @if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi
174
175# rules for the .F90 files
176\$(MODEL_LIB)/%.o : %.F90           
177ifeq (\$(AGRIF),use) 
178      @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC \$*.F90 > OPAFILES/\$*.F90
179      @(cd OPAFILES ; ./conv agrif_opa.in -rm \\
180#-Q- linux     -SubloopScalar \\
181#-Q- g95       -SubloopScalar \\
182#-Q- f95       -SubloopScalar \\
183#-Q- osf1         -SubloopScalar \\
184      -comdirin ./ -comdirout AGRIF_MODELFILES/. -convfile \$*.F90)
185      -@mv -f OPAFILES/AGRIF_MODELFILES/\$*.F90 OPAFILES/\$*.F90
186      @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC OPAFILES/\$*.F90 > OPAFILES/AGRIF_MODELFILES/\$*.F90
187      -@mv -f OPAFILES/AGRIF_MODELFILES/\$*.F90 OPAFILES/\$*.F90
188      @\$(F_C) \$(P_P) \$(F_O) \\
189#-Q- fjvpp     -Z \$*.L \\
190#-Q- sx8mercure      -R2 \\
191#-Q- sx8brodie    -R2 \\
192#-Q- sxdkrz    -R2 \\
193#-Q- eshpux    -R2 \\
194#-Q- aix6      -qsource \\
195#-Q- ax6_mono     -qsource \\
196#-Q- babel     -qsource \\
197      OPAFILES/\$*.F90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; } 
198else
199      @\$(F_C) \$(P_P) \$(F_O) \\
200#-Q- fjvpp     -Z \$*.L \\
201#-Q- sx8mercure      -R2 \\
202#-Q- sx8brodie    -R2 \\
203#-Q- sxdkrz    -R2 \\
204#-Q- eshpux    -R2 \\
205#-Q- aix6      -qsource \\
206#-Q- ax6_mono     -qsource \\
207#-Q- babel     -qsource \\
208      \$*.F90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; }
209endif
210      @mv \$*.o \$(MODEL_LIB)/.
211      @\$(RM) \$*.[f]
212      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce_\$(NEMOLIB)/\$(COMP) ; fi
213#-Q- aix6      @mv \$(PREF)\$*.lst \$(PREF)\$*.L
214#-Q- ax6_mono     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
215#-Q- babel     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
216#-Q- linux     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
217#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
218      @if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi
219
220end
221#-
222#- Compilation options ---
223exec 1> AA_make
224MAIN="model"
225echo '# some variables'
226echo 'TMP = ../../../tmp/tmp_$(NEMOLIB)/$(COMP)'
227echo ''
228echo '#WARNING : NEMO does NOT support fortran 95 signed zero behaviour when using intrinsec SIGN function'
229echo '#          This doesnt happen whith Fortran 90 compilers but'
230echo '#          Check your compilers option in consequence when using real F95 compilers'
231echo ''
232echo '#-Q- platine # Compiler options NEMO (CCRT Itanium Bull) '
233echo '#-Q- platine F_O = -O3 -i4 -r8 -module $(MODEL_LIB) -I $(MODDIR) -I$(MODEL_LIB) -I$(NCDF_INC) $(USER_INC) '
234echo '#-Q- platine L_X = $(L_O) '
235echo '#-Q- sx8mercure  # Compiler options NEMO (CEA SX8-NEC) '
236echo '#-Q- sx8mercure  F_O = -f2003 nocbind -size_t64 -dw -Wf\"-A dbl4\" -sx8 -C vopt -Wf"-P nh" -Wf',-pvctl noassume loopcnt=10000 shape=10000000 -L transform' -I $(MODDIR) -I $(MODEL_LIB) -I $(NCDF_INC) $(USER_INC)'
237echo '#-Q- sx8mercure  L_X = $(L_O)'
238echo '#-Q- sx8brodie  # Compiler options NEMO (IDRIS SX8-NEC) '
239echo '#-Q- sx8brodie  F_O = -f2003 nocbind -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 $(MODEL_LIB) -I $(NCDF_INC) $(USER_INC)'
240echo '#-Q- sx8brodie  L_X = $(L_O)'
241echo '#-Q- sxdkrz  # Compiler options for NEMO (DKRZ SX6-NEC) '
242echo '#-Q- sxdkrz  F_O =  -f2003 nocbind -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 $(MODEL_LIB) -I $(NCDF_INC) $(USER_INC)'
243echo '#-Q- sxdkrz  L_X = $(L_O) -ftrace'
244echo '#-Q- eshpux  # Compiler options for NEMO (Earth Simulator)'
245echo '#-Q- eshpux  # for super perfs!'
246echo '#-Q- eshpux  # F_O = -f2003 nocbind $(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 $(MODEL_LIB) -I $(NCDF_INC) $(USER_INC)'
247echo '#-Q- eshpux  # regular options!'
248echo '#-Q- eshpux  F_O = -f2003 nocbind $(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 $(MODEL_LIB) -I $(NCDF_INC) $(USER_INC)'
249echo '#-Q- eshpux  L_X = $(L_O)'
250echo '#-Q- linux  # Compiler options for NEMO (pgf version)'
251echo '#-Q- linux  F_O = -Mlist -O3 -byteswapio -r8  -I $(MODDIR) -I$(MODEL_LIB) -I $(NCDF_INC) $(USER_INC)'
252echo '#-Q- linux  L_X = -r8 -O3'
253echo '#-Q- lxiv7  # Compiler options for NEMO (ifc version)'
254echo '#-Q- lxiv7  F_O = -O3 -r8  -I $(MODDIR) -I$(MODEL_LIB) -I $(NCDF_INC) $(USER_INC)'
255echo '#-Q- lxiv7  L_X = -r8 -O3'
256echo '#-Q- lxiv8  # Compiler options for NEMO (ifort version)'
257echo '#-Q- lxiv8  F_O = -O3 -r8  -I $(MODDIR) -I$(MODEL_LIB) -I $(NCDF_INC) $(USER_INC)'
258echo '#-Q- lxiv8  L_X = -r8 -O3'
259echo '#-Q- g95  # Compiler options for NEMO (g95 version)'
260echo '#-Q- g95  F_O = -O3 -fno-second-underscore -r8 -funroll-all-loops -I $(MODDIR) -I $(MODEL_LIB) -I $(NCDF_INC) $(USER_INC)'
261echo '#-Q- g95  L_X = -r8 -O3'
262echo '#-Q- gfortran  # Compiler options for NEMO (gfortran version)'
263echo '#-Q- gfortran  F_O = -fno-second-underscore -fdefault-real-8 -funroll-all-loops -I $(MODDIR) -I $(MODEL_LIB) -I $(NCDF_INC) $(USER_INC)'
264echo '#-Q- gfortran  L_X = -fdefault-real-8'
265echo '#-Q- aix6  # Compiler options for NEMO (aix6 version)'
266echo '#-Q- aix6  F_O = -O3 -qsave -qrealsize=8 -qsuffix=f=f90 -qsuffix=cpp=F90 -qextname -qsource -q64 -qlargepage -qmaxmem=-1 -I $(MODDIR) -I $(MODEL_LIB) -I $(NCDF_INC) $(USER_INC)' 
267echo '#-Q- aix6  L_O = $(F_P) -q64 -O3'
268echo '#-Q- aix6  L_X = $(L_O)'
269echo '#-Q- ax6_mono    # Compiler options for NEMO (aix6 version)'
270echo '#-Q- ax6_mono    F_O = -O3 -qsave -qrealsize=8 -qsuffix=f=f90 -qsuffix=cpp=F90 -qextname -qsource -q64 -qlargepage -qmaxmem=-1 -I $(MODDIR) -I $(MODEL_LIB) -I $(NCDF_INC) $(USER_INC)' 
271echo '#-Q- ax6_mono   L_O = $(F_P) -q64 -O3'
272echo '#-Q- ax6_mono   L_X = $(L_O)'
273echo '#-Q- babel  # Compiler options for NEMO (blue gene version)'
274echo '#-Q- babel  F_O =  -O3 -qsave -qrealsize=8 -qsuffix=f=f90 -qsuffix=cpp=F90 -qsource -qextname=flush -qlargepage -qmaxmem=-1 -I $(MODDIR) -I $(MODEL_LIB) -I $(NCDF_INC) $(USER_INC)'
275echo '#-Q- babel  L_X = $(L_O)'
276echo '#-Q- osxxlf    # Compiler options for NEMO (osxxlf version)'
277echo '#-Q- osxxlf    F_O = -O3 -qsave -qrealsize=8 -qsuffix=f=f90 -qsuffix=cpp=F90 -qsource -qextname -qstrict -qmaxmem=-1 -I $(MODDIR) -I $(MODEL_LIB) -I $(NCDF_INC) $(USER_INC)' 
278echo '#-Q- osxxlf    L_X = -qrealsize=8 -O3'
279
280echo 'PREF='
281echo '#-Q- sx8mercure   PREF=i.'
282echo '#-Q- sx8brodie PREF=i.'
283echo '#-Q- sxdkrz PREF=i.'
284echo '#-Q- eshpux PREF=i.'
285echo ''
286echo '#Run type: mon, mpi or omp '
287echo 'ifeq ($(COMP),mon)'
288echo '#-Q- osxxlf  override F_C = xlf90 -c'
289echo '#-Q- osxxlf  override F_L = xlf90'
290echo 'endif'
291echo ''
292echo 'ifeq ($(COMP),memo)'
293echo '#-Q- sx8brodie  F_O := $(F_O) -P static'
294echo '#-Q- ax6_mono   F_O := $(F_O) -qnosave'
295echo '#-Q- osxxlf     F_O := $(F_O) -qnosave'
296echo 'endif'
297echo ''
298echo 'ifeq ($(COMP),mpi)'
299echo 'P_P := $(P_P) key_mpp_mpi'
300echo '#-Q- osxxlf  override F_C = mpif90 -c'
301echo '#-Q- osxxlf  override F_L = mpif90'
302echo 'endif'
303echo ''
304echo 'ifeq ($(COMP),omp)'
305echo 'P_P := $(P_P) key_mpp_omp'
306echo '#-Q- sx8brodie F_O := $(F_O) -P auto'
307echo '#-Q- sx8brodie override F_F = $(F_O) '
308echo '#-Q- sx8brodie L_X := $(L_X) -P auto'
309echo 'endif'
310echo ''
311echo '# add suffix to P_P'
312echo 'P_P := $(P_P:%=$(prefix)%)'
313echo ''
314echo '# Some tests to define variables related to Agrif compilation'
315echo '# Please do not change '
316echo 'ifneq (,$(findstring key_agrif,$(P_P)))'
317echo 'AGRIF=use'
318echo 'else'
319echo 'AGRIF=notuse'
320echo 'AGRIF_LIB='
321echo 'endif'
322echo 'ifneq (,$(findstring key_mpp_mpi,$(P_P)))'
323echo 'AGRIF_MPI=-DAGRIF_MPI'
324echo 'else'
325echo 'AGRIF_MPI='
326echo 'endif'
327echo ''
328echo '# Some tests to define variables related to xmlioserver compilation'
329echo '# Please do not change '
330echo 'ifneq (,$(findstring key_ioserver,$(P_P)))'
331echo 'IOSERVER=use'
332echo 'override USER_LIB += -L../../../lib/libxmlio_server -lioserver -lxmlio -lxmlf90'
333echo 'override USER_INC += -I../../../lib/libxmlio_server'
334echo 'else'
335echo 'IOSERVER=notuse'
336echo 'endif'
337
338echo ''
339# Write the cpp key list with one key by line
340echo 'KEY_LIST = \c'
341for i in ${liste_cle}
342do
343 echo "\\"
344 echo "     $i \c"
345done
346
347echo ''
348echo '# .o file list in the library'
349echo 'LIB_OBJ = \c'
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
385echo ""
386
387cat tampon
388rm tampon
389#-
390#- Write all dependancies ---
391
392for fic in `ls *.f90 *.F90  *.F 2> /dev/null `
393do
394    if [ "${fic}" != "agrif2model.F90" ]
395    then
396    if [ "${fic}" != "${MAIN}.[Ff]" ]
397    then
398   i=0
399   j=0
400   dep=""
401   inc=""
402   inc2=""
403   inc3=""
404   luse0=""
405   luse1=""
406   luse2=""
407   luse3=""
408   key=""
409#- search include files (old ice model form, should it be suppressed ?)
410   for inc in `sed -n 's/^[   ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
411   do
412       dep="$dep\n$inc"
413   done
414
415#- take into account CPP dependancies  keys only (par_trc_trp example)
416   for key in `sed -n 's/^#[       eElL]*[iF][fF][         ]*[dD][eE][fF][iI][nN][eE][dD][         ]*//p' $fic | sort -u`
417   do
418       j=1
419   done
420
421#- search include files on 3 levels
422   for inc in `sed -n 's/^#[  ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
423   do
424       j=1
425       dep="$dep\n$inc"
426      for inc2 in `sed -n 's/^#[    ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc | sort -u`
427      do
428          dep="$dep\n$inc2"
429          #- search include  in include (third level !!!)
430          for inc3 in `sed -n 's/^#[   ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc2 | sort -u`
431          do
432         dep="$dep\n$inc3"
433          done
434      done
435   done
436
437#- search USE in include files
438   for inc in `sed -n 's/^#[  ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
439   do
440      for fuse0 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $inc | sort -u`
441      do
442                    [ -f $fuse0.[hfF]90 ] || continue
443          lfuse0=$fuse0.f90
444          [ -f $fuse0.F90 ] && lfuse0=$fuse0.F90
445          luse0="$luse0\n$lfuse0\n\$(MODEL_LIB)/$fuse0.o"
446      done
447
448#- search USE in  files included in included files and add to luse0
449
450      for inc2 in `sed -n 's/^#[    ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc | sort -u`
451      do
452          for fuse0 in `sed -n 's/^[   ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $inc2 | sort -u`
453          do
454                        [ -f $fuse0.[hfF]90 ] || continue
455              lfuse0=$fuse0.f90
456              [ -f $fuse0.F90 ] && lfuse0=$fuse0.F90
457              luse0="$luse0\n$lfuse0\n\$(MODEL_LIB)/$fuse0.o"
458          done
459           done
460   done
461
462#- search USE (and USE of USE and so on three levels)
463   for fuse1 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $fic | sort -u`
464   do
465            [ -f $fuse1.[hfF]90 ] || continue
466       lfuse1=$fuse1.f90
467       [ -f $fuse1.F90 ] && lfuse1=$fuse1.F90
468       luse1="$luse1\n$lfuse1\n\$(MODEL_LIB)/$fuse1.o"
469      for fuse2 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $lfuse1 | sort -u`
470      do
471                    [ -f $fuse2.[hfF]90 ] || continue
472          lfuse2=$fuse2.f90
473          [ -f $fuse2.F90 ] && lfuse2=$fuse2.F90
474          luse2="$luse2\n$lfuse2\n\$(MODEL_LIB)/$fuse2.o"
475          # on cherche les USE  dans le fichier deja USE (3eme niveau! balaise!)
476          for fuse3 in `sed -n 's/^#[     ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $lfuse2 | sort -u`
477          do
478                        [ -f $fuse3.[hfF]90 ] || continue
479         luse3="$luse3\n$lfuse3\n\$(MODEL_LIB)($fuse3.o)"
480                    done
481      done
482   done
483#-
484#-  dep contains all dependancies
485   echo "\$(MODEL_LIB)/`echo $fic|awk -F. '{print $1}'`.o :       \c"
486   for depele in `echo $luse3 | sort -u` `echo $luse2 | sort -u` `echo $luse1 | sort -u` `echo $luse0 | sort -u` `echo $dep | sort -u`
487   do
488       echo "\\"
489       echo "  $depele \c"
490       let i=i+1 # pour signaler le premier
491   done
492
493#-
494#- add dependancies with IOIPSL library (if source files contains IOIPSL)
495        grep -i 'use *ioipsl' ${fic} >/dev/null && ( echo "\\" ; echo " \$(IOIPSL_LIB) \c")
496
497#-
498#- add dependancies with IOIPSL library (if source files contains Agrif_*)
499        grep -i 'use Agrif_*' ${fic} >/dev/null && ( echo "\\" ; echo " \$(AGRIF_LIB) \c")
500
501#-
502#- add dependancies with KEY_CPP (if source file includes cpp  keys)
503   if [ ${j} != "0" ] 
504        then
505     echo "\\"
506     echo " KEY_CPP \c" 
507   fi
508#-
509#- end with the file itself
510        echo "\\"
511              echo " $fic"
512    fi
513    fi
514echo $fic done >/dev/tty
515done
516#-
517#- Write some special rules ---
518echo '# agrif previous use'
519echo "firstagrif:"
520echo "ifeq (\$(AGRIF),use)"
521echo '   @if [ -z "`cat KEY_CPP | grep key_agrif`" ]; then $(RM) model.o $(MODDIR)/oce_$(NEMOLIB)/$(COMP)/*.mod $(SXMODEL_LIB); fi'
522echo "else"
523echo '   @if [ -n "`cat KEY_CPP | grep key_agrif`" ]; then $(RM) -r OPAFILES model.o $(MODDIR)/oce_$(NEMOLIB)/$(COMP)/*.mod $(SXMODEL_LIB); fi'
524echo "endif"
525#-
526echo '#- RB : this rule is a pretty miserable trick to be able to re-compile NEMP-AGRIF-mono after NEMO-AGRIF-mpp'
527echo '#- I guess the good correction should be in AGRIF/LIB/toamr.c for the conv, to remove useless allocation declarations in AGRIF_INC'
528echo '# recompile all in this case' 
529echo "mpiagrif:"
530echo "ifeq (\$(AGRIF),use)"
531echo "ifeq (,\$(AGRIF_MPI))"
532echo '   @if [ -n "`cat KEY_CPP | grep key_mpp_mpi`" ]; then $(RM) -r OPAFILES model.o $(MODDIR)/oce_$(NEMOLIB)/$(COMP)/*.mod $(SXMODEL_LIB); fi'
533echo "endif"
534echo "endif"
535#-
536echo '# key changing control'
537echo "key: "
538echo "   @echo CHANGE of CPP KEYS yes/no ?"
539echo "   -@if [ \"\`cat KEY_CPP\`\" != \"\$(P_P:\$(prefix)%=%)\" ] ; then \\"
540echo "      echo CPP options changed ; echo \"\$(P_P:\$(prefix)%=%)\" > KEY_CPP ; fi "
541#-
542echo '# check key values'
543echo "keyverif:"
544echo '   @echo CHECKING KEY'
545echo '   @echo KEY USED : '
546echo '   @for v in ` echo $(P_P:$(prefix)%=%) ` ; \'
547echo '   do \'
548echo '   echo $$v ;\'
549echo '        w=`echo $$v | cut -c1-3` ; \'
550echo '        if [ $$w = `echo "key"` ] ; then \'
551echo '        r=n ; \'
552echo '        echo " $(KEY_LIST) " | (grep $$v >/dev/null 2>&1) || r=o ; \'
553echo '           if [ $$r != "n" ] ; then \'
554echo '              echo "UNKNOWN KEY" ;\'
555echo '              false ;  \'
556echo '              exit ;  \'
557echo '           fi \'
558echo '        fi \'
559echo '   done'
560echo '# Checking the number of routines'
561echo "src_file_list: EMPTY"
562echo '   @echo CHECKING THE NUMBER AND NAMES OF SOURCE FILES '
563echo '   @$(RM) `ls | fgrep -v -f .patron` '
564echo '   @check=`grep OPA_SRC .config`              ; \'
565echo '   if [ -n "$$check" ] ; then                   \'
566echo '   echo "   use OPA_SRC files"                ; \'
567echo '       ln -sf ../../../modeles/NEMO/OPA_SRC/*.[Ffh]90          . ; \'
568echo '       ln -sf ../../../modeles/NEMO/OPA_SRC/*/*.[Ffh]90      . ; \'
569echo '  fi '
570echo '   @check=`grep LIM_SRC_2 .config`              ; \'
571echo '   if [ -n "$$check" ] ; then                   \'
572echo '   echo "   use LIM_SRC_2 files"                ; \'
573echo '      ln -sf ../../../modeles/NEMO/LIM_SRC_2/*.[Ffh]90          . ; \'
574echo '  fi '
575echo '   @check=`grep LIM_SRC_3 .config`              ; \'
576echo '   if [ -n "$$check" ] ; then                   \'
577echo '   echo "   use LIM_SRC_3 files"                ; \'
578echo '      ln -sf ../../../modeles/NEMO/LIM_SRC_3/*.[Ffh]90          . ; \'
579echo '  fi '
580echo '   @check=`grep NST_SRC .config`              ; \'
581echo '   if [ -n "$$check" ] ; then                   \'
582echo '   echo "   use NST_SRC files"                ; \'
583echo '      \$(RM) agrif_opa_interp.F90           ; \'
584echo '      \$(RM) agrif_opa_sponge.F90           ; \'
585echo '      \$(RM) agrif_opa_update.F90           ; \'
586echo '      \$(RM) agrif_top_interp.F90           ; \'
587echo '      \$(RM) agrif_top_sponge.F90           ; \'
588echo '      \$(RM) agrif_top_update.F90           ; \'
589echo '      ln -sf ../../../modeles/NEMO/NST_SRC/*.[Ffh]90      .     ; \'
590echo '  fi '
591echo '   @check=`grep C1D_SRC .config`              ; \'
592echo '   if [ -n "$$check" ] ; then                   \'
593echo '   echo "   use C1D_SRC files"                ; \'
594echo '      ln -sf ../../../modeles/NEMO/C1D_SRC/*.[Ffh]90          . ; \'
595echo '  fi '
596echo '   @check=`grep TOP_SRC .config`              ; \'
597echo '   if [ -n "$$check" ] ; then  \'
598echo '   echo "   use TOP_SRC files"                ; \'
599echo '      \$(RM) trcstp.F90                      ; \'
600echo '      \$(RM) sms.F90                         ; \'
601echo '      \$(RM) trcini.F90                      ; \'
602echo '      ln -sf ../../../modeles/NEMO/TOP_SRC/*.[Ffh]90          . ; \'
603echo '      ln -sf ../../../modeles/NEMO/TOP_SRC/*/*.[Ffh]90      . ; \'
604echo '  fi '
605echo '   @check=`grep OFF_SRC .config`              ; \'
606echo '   if [ -n "$$check" ] ; then                   \'
607echo '   echo "   use OFF_SRC files"                ; \'
608echo '      ln -sf ../../../modeles/NEMO/OFF_SRC/*.[Ffh]90          . ; \'
609echo '      ln -sf ../../../modeles/NEMO/OFF_SRC/*/*.[Ffh]90        . ; \'
610echo '  fi '
611echo ' '
612echo '   @mn=`awk '"'"'{ print $$1 }'"'"' .config `  ; \'
613echo '  myrep=../../../config/$$mn/MY_SRC ; \'
614echo '  echo "*** Dealing with my modified source code, located in" $$myrep ; \'
615echo '  for i in `ls $$myrep` ; do \'
616echo '    [ -f $$i ] && \$(RM) $$i ;\'
617echo '  done ; \'
618echo '  myrep_list=`(cd $$myrep ; ls *.[Ffh]90 *.[Ffh] *.mk)` ; \'
619echo '  if [ -n "$$myrep_list" ] ; then \'
620echo '      for F in $$myrep_list; do \'
621echo '         echo "---> Reconstruct link to MY_SRC/$$F" ; \'
622echo '         ln -sf  $$myrep/$$F . ; \'
623echo '      done ; \'
624echo '  fi '
625echo ' '
626echo '   @\$(RM) tmplist'
627echo '   @ls -1 | fgrep -v -f .patron >tmplist'
628echo '   @cmp tmplist SRC_FILE_LIST.temp || { echo some routines have been added or suppressed ; \'
629echo '   sdiff -s tmplist SRC_FILE_LIST.temp ; cp tmplist SRC_FILE_LIST.temp ; \'
630echo '   \$(RM) model.o \$(MODEL_LIB)/*.o  \$(EXEC_BIN) ; \'
631echo '   echo "Rebuilding the AA_make files" ; \'
632echo '   cd ..  ; ../NVTK/fait_AA_make ; echo " " ; \'
633echo '   echo "THE ins_make COMMAND in modipsl/util MUST BE RERUN PLEASE DO SO BEFORE gmake" ; \'
634echo '   echo "========================================== " ; \'
635echo '   ../../util/ins_make -w \$(NEMOLIB) ; echo " " ;  false ; exit ; }'
636echo "EMPTY: "
637exec > /dev/null
638
Note: See TracBrowser for help on using the repository browser.