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/CMIP5_IPSL/UTIL – NEMO

source: branches/CMIP5_IPSL/UTIL/fait_AA_make @ 7795

Last change on this file since 7795 was 4625, checked in by mafoipsl, 10 years ago

Adapt fait_AA_make to ada and curie. Delete old computers.

  • Property svn:eol-style set to native
  • Property svn:executable set to *
  • Property svn:keywords set to Author Date Id Revision
File size: 19.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 || exit
31pwd
32
33# Test version of echo
34stringtest=`echo "\c"`
35if [ "$stringtest" ]; then
36   echo 'aliasing echo with /bin/echo -e ...'
37   alias echo='echo -e'
38fi
39
40#-
41#- Search CPP keys ---
42liste_cle=$(egrep '^# *if[!( &]*def|^# *elif' *.[Fh] *.[Fh]90  2> /dev/null | grep key_ | sed 's/||/\
43/' | sed 's/\&\&/\
44/' | sed 's/^.*key_/key_/' | sed 's/ *[) ] *$//' | sort -u  )
45
46#-
47#- Write main compilation rules ---
48cat > tampon <<end
49
50.SUFFIXES: .f90 .F90 .F
51
52# Target
53all:     diroce \$(EXEC_BIN)
54      @cp SRC_FILE_LIST.temp SRC_FILE_LIST
55      @echo OPA model is OK
56# Cleaning objects, libraries and executables
57clean:
58ifeq (\$(AGRIF),use)
59      -@(cd OPAFILES; ./efface)
60endif
61      \$(RM) model.o \$(MODDIR)/oce/*.mod \$(MODEL_LIB) \$(SXMODEL_LIB) \$(EXEC_BIN)
62      @echo OPA model \(.o .mod libraries and executables are removed\)
63
64# Dependancies
65diroce:
66      @if [ ! -d ../../../lib/oce ] ; then mkdir ../../../lib/oce ; fi
67
68\$(EXEC_BIN) : libioipsl libioserver firstagrif mpiagrif key keyverif src_file_list libagrif \$(MODEL_LIB) \$(IOIPSL_LIB) \$(AGRIF_LIB) agrif2model.o model.o
69ifeq (\$(AGRIF),use)
70      \$(F_L) \$(L_X) -o \$(EXEC_BIN) model.o agrif2model.o \$(SXMODEL_LIB) \$(USER_LIB) \$(IOIPSL_LIB) \$(AGRIF_LIB) \$(NCDF_LIB) \$(LIBMPI) \$(LIBMP)
71else
72      \$(F_L) \$(L_X) -o \$(EXEC_BIN) model.o \$(SXMODEL_LIB) \$(USER_LIB) \$(IOIPSL_LIB) \$(NCDF_LIB) \$(LIBMPI) \$(LIBMP)
73endif
74
75# ioserver library
76libioserver :
77ifeq (\$(IOSERVER),use)
78ifeq (\$(FCM),use)
79   (cd ../../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 .)
80   (cd ../../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 ../../bin ; ln -sf ../modeles/XMLIO_SERVER/bin/server.exe ioserver)
81else
82   (cd ../../XMLF90/external ; \$(M_K) -f Makefile )
83   (cd ../../XMLIO_SERVER/external ; \$(M_K) -f Makefile P_P="\$(IOSERVER_MPI)" )
84endif
85endif
86
87# Agrif library and conv
88libagrif :  \$(call keycompat,key_iomput,key_agrif)
89ifeq (\$(AGRIF),use)
90   @( if [ ! -d OPAFILES ]; then mkdir OPAFILES; fi )
91   @( if [ ! -d OPAFILES/AGRIF_INC ]; then mkdir OPAFILES/AGRIF_INC ; fi )
92   @( if [ ! -d OPAFILES/AGRIF_MODELFILES ]; then mkdir OPAFILES/AGRIF_MODELFILES ; fi )
93   @(cd ../../AGRIF ; \$(M_K) -f Makefile P_P="\$(AGRIF_MPI)" )
94   @cp -rf ../../AGRIF/agrif_opa.in OPAFILES/.
95   @cp -rf ../../AGRIF/conv OPAFILES/.
96   @cp -rf ../../AGRIF/efface OPAFILES/.
97endif
98
99# Agrif interface with NEMO
100agrif2model.o :
101ifeq (\$(AGRIF),use)
102   @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC \$*.F90 > OPAFILES/\$*.F90
103   @\$(F_C) \\
104#-Q- aix    -qsuffix=f=F90 \\
105#-Q- aix6      -qsuffix=f=F90 \\
106#-Q- osxxlf    -qsuffix=f=F90 \\
107   \$(P_P) \$(F_O) \\
108#-Q- aix6      -qsource \\
109#-Q- aix    -qsource \\
110      OPAFILES/\$*.F90 || { mv \$(PREF).L \$(TMP) ; false ; exit ; }
111endif
112
113# IOIPSL library
114libioipsl :
115   (cd ../../IOIPSL/src ; \$(M_K) -f Makefile )
116
117# Main program
118model.o :   model.f90
119      @\$(F_C) \$(F_O) -c model.f90
120
121# if the make script is stopped, one doesn't destroy library
122.PRECIOUS : \$(MODEL_LIB)
123
124# library dependancies
125\$(MODEL_LIB): \$(LIB_OBJ)
126      @echo
127      @echo The library is up-to-date
128      @echo
129
130# Default rules
131.DEFAULTS:
132
133# rules for the .f90 files
134.f90.a :           
135      @\$(F_C) \$(P_P) \$(F_O) \\
136#-Q- fjvpp     -Z \$*.L \\
137#-Q- aix    -qsource \\
138#-Q- aix6      -qsource \\
139      \$*.f90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; }
140      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
141      @\$(RM) \$*.[of]
142      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce ; fi
143#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
144#-Q- aix6      @mv \$(PREF)\$*.lst \$(PREF)\$*.L
145#-Q- linux     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
146#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
147      @if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi
148
149# rules for the .F90 files
150.F90.a : 
151ifeq (\$(AGRIF),use) 
152      @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC \$*.F90 > OPAFILES/\$*.F90
153      @(cd OPAFILES ; ./conv agrif_opa.in -rm \\
154#-Q- linux     -SubloopScalar \\
155#-Q- g95       -SubloopScalar \\
156#-Q- f95       -SubloopScalar \\
157#-Q- osf1         -SubloopScalar \\
158      -comdirin ./ -comdirout AGRIF_MODELFILES/. -convfile \$*.F90)
159      -@mv -f OPAFILES/AGRIF_MODELFILES/\$*.F90 OPAFILES/\$*.F90
160      @\$(P_C) \$(P_O) -IOPAFILES/AGRIF_INC OPAFILES/\$*.F90 > OPAFILES/AGRIF_MODELFILES/\$*.F90
161      -@mv -f OPAFILES/AGRIF_MODELFILES/\$*.F90 OPAFILES/\$*.F90
162      @\$(F_C) \$(P_P) \$(F_O) \\
163#-Q- aix    -qsource \\
164#-Q- aix6      -qsource \\
165      OPAFILES/\$*.F90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; } 
166else
167      @\$(F_C) \$(P_P) \$(F_O) \\
168#-Q- aix    -qsource \\
169#-Q- aix6      -qsource \\
170      \$*.F90 || { if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi ; false ; exit ; }
171endif
172      @\$(A_C) \$(MODEL_LIB) \$*.o  > /dev/null
173      @\$(RM) \$*.[of]
174      @if [ -f \$*.mod ] ; then mv \$*.mod \$(MODDIR)/oce ; fi
175#-Q- aix    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
176#-Q- aix6      @mv \$(PREF)\$*.lst \$(PREF)\$*.L
177#-Q- linux     @mv \$(PREF)\$*.lst \$(PREF)\$*.L
178#-Q- osxxlf    @mv \$(PREF)\$*.lst \$(PREF)\$*.L
179      @if [ -f \$(PREF)\$*.L ] ; then mv \$(PREF)\$*.L \$(TMP) ; fi
180
181end
182#-
183#- Compilation options ---
184exec 1> AA_make
185MAIN="model"
186echo '# $Header$'
187echo '# some variables'
188echo 'TMP = ../../../tmp'
189echo ''
190echo '#WARNING : NEMO does NOT support fortran 95 signed zero behaviour when using intrinsec SIGN function'
191echo '#          This doesnt happen whith Fortran 90 compilers but'
192echo '#          Check your compilers option in consequence when using real F95 compilers'
193echo ''
194echo '#-Q- ada # Compiler options NEMO (IDRIS Ada)'
195echo '#-Q- ada F_O = -shared-intel -mcmodel=large -O3 -i4 -r8 -module $(MODDIR)/oce -I$(MODDIR) -I$(MODDIR)/oce -I$(NCDF_INC) $(USER_INC)'
196echo '#-Q- ada L_X = $(L_O)'
197echo '#-Q- curie # Compiler options NEMO (PRACE Curie)'
198echo '#-Q- curie F_O = -O3 -i4 -r8 -xHost -module $(MODDIR)/oce -I$(MODDIR) -I$(MODDIR)/oce -I$(NCDF_INC) $(USER_INC)'
199echo '#-Q- curie L_X = $(L_O)'
200echo '#-Q- linux  # Compiler options for NEMO (pgf version)'
201echo '#-Q- linux  F_O = -Mlist -O3 -byteswapio -r8  -I $(MODDIR) -I$(MODDIR)/oce -I $(NCDF_INC) $(USER_INC)'
202echo '#-Q- linux  L_X = -r8 -O3'
203echo '#-Q- lxiv7  # Compiler options for NEMO (ifc version)'
204echo '#-Q- lxiv7  F_O = -O3 -r8  -I $(MODDIR) -I$(MODDIR)/oce -I $(NCDF_INC) $(USER_INC)'
205echo '#-Q- lxiv7  L_X = -r8 -O3'
206echo '#-Q- lxiv8  # Compiler options for NEMO (ifort version)'
207echo '#-Q- lxiv8  F_O = -O3 -r8  -I $(MODDIR) -I$(MODDIR)/oce -I $(NCDF_INC) $(USER_INC)'
208echo '#-Q- lxiv8  L_X = -r8 -O3'
209echo '#-Q- g95  # Compiler options for NEMO (g95 version)'
210echo '#-Q- g95  F_O = -O3 -fno-second-underscore -r8 -funroll-all-loops -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC) $(USER_INC)'
211echo '#-Q- g95  L_X = -r8 -O3'
212echo '#-Q- gfortran  # Compiler options for NEMO (gfortran version)'
213echo '#-Q- gfortran  F_O = -fno-second-underscore -fdefault-real-8 -funroll-all-loops -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC) $(USER_INC)'
214echo '#-Q- gfortran  L_X = -fdefault-real-8'
215echo '#-Q- aix    # Compiler options for NEMO (aix version)'
216echo '#-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) $(USER_INC)' 
217echo '#-Q- aix   L_O = $(F_P) -q64 -O3'
218echo '#-Q- aix   L_X = $(L_O)'
219echo '#-Q- aix6    # Compiler options for NEMO (aix6 version)'
220echo '#-Q- aix6    F_O = -O3 -qrealsize=8 -qsuffix=f=f90 -qsuffix=cpp=F90 -qsource -qextname=flush -q64 -qlargepage -qmaxmem=-1 -I $(MODDIR) -I $(MODDIR)/oce -I $(NCDF_INC) $(USER_INC)' 
221echo '#-Q- aix6   L_O = $(F_P) -q64 -O3'
222echo '#-Q- aix6   L_X = $(L_O)'
223echo '#-Q- osxxlf    # Compiler options for NEMO (osxxlf version)'
224echo '#-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) $(USER_INC)' 
225echo '#-Q- osxxlf    L_X = -qrealsize=8 -O3'
226
227echo 'PREF='
228echo ''
229echo '# add suffix to P_P'
230echo 'override P_P := $(P_P:%=$(prefix)%)'
231echo ''
232echo '# Some tests to define variables related to Agrif compilation'
233echo '# Please do not change '
234echo 'ifneq (,$(findstring key_agrif,$(P_P)))'
235echo 'AGRIF=use'
236echo 'else'
237echo 'AGRIF=notuse'
238echo 'AGRIF_LIB='
239echo 'endif'
240echo 'ifneq (,$(findstring key_mpp_mpi,$(P_P)))'
241echo 'AGRIF_MPI=-DAGRIF_MPI'
242echo 'else'
243echo 'AGRIF_MPI='
244echo 'endif'
245echo ''
246echo '# Some tests to define variables related to xmlioserver compilation'
247echo '# Please do not change '
248echo 'ifneq (,$(findstring key_iomput,$(P_P)))'
249echo 'IOSERVER=use'
250echo 'override USER_LIB += -L../../../lib/libxmlio_server -lioserver -lxmlio -lxmlf90'
251echo 'override USER_INC += -I../../../lib/libxmlio_server'
252echo 'ifneq (,$(findstring key_mpp_mpi,$(P_P)))'
253echo 'IOSERVER_MPI='
254echo 'else'
255echo 'IOSERVER_MPI=-DNO_MPI'
256echo 'endif'
257echo 'else'
258echo 'IOSERVER=notuse'
259echo 'endif'
260echo ''
261
262echo '# A variables related to xmlioserver compilationi (fcm or AA_make)'
263echo '# Please do not change '
264echo 'override FCM ?= notuse'
265echo ''
266
267echo '#check key compatibility'
268echo 'keycompat=$(if $(and $(findstring $1,$(P_P)),$(findstring $2,$(P_P))),$(error $1 and $2 NOT compatible))'
269
270echo ''
271# Write the cpp key list with one key by line
272echo 'KEY_LIST = \c'
273for i in ${liste_cle}
274do
275 echo "\\"
276 echo "     $i \c"
277done
278
279echo ''
280echo '# .o file list in the library'
281echo 'LIB_OBJ = \c'
282#
283# find all .f90 in the current directory
284# build object files list  LIB_OBJ
285# one dependancy by line
286
287for i in `ls *.f90  `
288do
289  bn=`basename $i .f90`
290  if [ "${bn}" != "${MAIN}" ] 
291  then
292  if [ "${bn}" != "agrif2model" ] 
293  then
294    echo "\\"
295    echo "     \$(MODEL_LIB)($bn.o)\c"
296  fi
297  fi
298done
299
300# find all .F90 in the current directory
301# build object files list  LIB_OBJ
302# one dependancy by line
303
304for i in `ls *.F90  `
305do
306  bn=`basename $i .F90`
307  if [ "${bn}" != "${MAIN}" ] 
308  then
309  if [ "${bn}" != "agrif2model" ] 
310  then
311    echo "\\"
312    echo "     \$(MODEL_LIB)($bn.o)\c"
313  fi
314  fi
315done
316
317echo ""
318
319cat tampon
320rm tampon
321#-
322#- Write all dependancies ---
323
324for fic in `ls *.f90 *.F90  *.F 2> /dev/null `
325do
326    if [ "${fic}" != "agrif2model.F90" ]
327    then
328    if [ "${fic}" != "${MAIN}.[Ff]" ]
329    then
330   i=0
331   j=0
332   dep=""
333   inc=""
334   inc2=""
335   inc3=""
336   luse0=""
337   luse1=""
338   luse2=""
339   luse3=""
340        key=""
341#- search include files (old ice model form, should it be suppressed ?)
342   for inc in `sed -n 's/^[   ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
343   do
344       dep="$dep\n$inc"
345   done
346
347#- take into account CPP dependancies  keys only (par_trc_trp example)
348   for key in `sed -n 's/^#[  eElL]*[iF][fF][   ]*[dD][eE][fF][iI][nN][eE][dD][  ]*//p' $fic | sort -u`
349   do
350       j=1
351   done
352
353#- search include files on 3 levels
354   for inc in `sed -n 's/^#[  ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
355   do
356       j=1
357       dep="$dep\n$inc"
358      for inc2 in `sed -n 's/^#[    ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc | sort -u`
359      do
360          dep="$dep\n$inc2"
361          #- search include  in include (third level !!!)
362          for inc3 in `sed -n 's/^#[   ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc2 | sort -u`
363          do
364         dep="$dep\n$inc3"
365          done
366      done
367   done
368
369#- search USE in include files
370   for inc in `sed -n 's/^#[  ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $fic | sort -u`
371   do
372      for fuse0 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $inc | sort -u`
373      do
374                    [ -f $fuse0.[hfF]90 ] || continue
375          lfuse0=$fuse0.f90
376          [ -f $fuse0.F90 ] && lfuse0=$fuse0.F90
377          luse0="$luse0\n$lfuse0\n\$(MODEL_LIB)($fuse0.o)"
378      done
379
380#- search USE in  files included in included files and add to luse0
381
382      for inc2 in `sed -n 's/^#[    ]*[iI][nN][cC][lL][uU][dD][eE][  ]*\(['\''"]\)\([^'\''"]*\)\1.*/\2/p' $inc | sort -u`
383      do
384          for fuse0 in `sed -n 's/^[   ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $inc2 | sort -u`
385          do
386                        [ -f $fuse0.[hfF]90 ] || continue
387              lfuse0=$fuse0.f90
388              [ -f $fuse0.F90 ] && lfuse0=$fuse0.F90
389              luse0="$luse0\n$lfuse0\n\$(MODEL_LIB)($fuse0.o)"
390          done
391           done
392   done
393
394#- search USE (and USE of USE and so on three levels)
395   for fuse1 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $fic | sort -u`
396   do
397            [ -f $fuse1.[hfF]90 ] || continue
398       lfuse1=$fuse1.f90
399       [ -f $fuse1.F90 ] && lfuse1=$fuse1.F90
400       luse1="$luse1\n$lfuse1\n\$(MODEL_LIB)($fuse1.o)"
401      for fuse2 in `sed -n 's/^[    ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $lfuse1 | sort -u`
402      do
403                    [ -f $fuse2.[hfF]90 ] || continue
404          lfuse2=$fuse2.f90
405          [ -f $fuse2.F90 ] && lfuse2=$fuse2.F90
406          luse2="$luse2\n$lfuse2\n\$(MODEL_LIB)($fuse2.o)"
407          # on cherche les USE  dans le fichier deja USE (3eme niveau! balaise!)
408          for fuse3 in `sed -n 's/^#[     ]*[uU][sS][eE] [  ]*\([^!,;]*\).*/\1/p' $lfuse2 | sort -u`
409          do
410                        [ -f $fuse3.[hfF]90 ] || continue
411         luse3="$luse3\n$lfuse3\n\$(MODEL_LIB)($fuse3.o)"
412                    done
413      done
414   done
415#-
416#-  dep contains all dependancies
417   echo "\$(MODEL_LIB)(`echo $fic|awk -F. '{print $1}'`.o) :   \c"
418   for depele in `echo $luse3 | sort -u` `echo $luse2 | sort -u` `echo $luse1 | sort -u` `echo $luse0 | sort -u` `echo $dep | sort -u`
419   do
420       echo "\\"
421       echo "  $depele \c"
422       let i=i+1 # pour signaler le premier
423   done
424
425#-
426#- add dependancies with IOIPSL library (if source files contains IOIPSL)
427        grep -i 'use *ioipsl' ${fic} >/dev/null && ( echo "\\" ; echo " \$(IOIPSL_LIB) \c")
428
429#-
430#- add dependancies with IOIPSL library (if source files contains Agrif_*)
431        grep -i 'use Agrif_*' ${fic} >/dev/null && ( echo "\\" ; echo " \$(AGRIF_LIB) \c")
432
433#-
434#- add dependancies with KEY_CPP (if source file includes cpp  keys)
435   if [ ${j} != "0" ] 
436        then
437     echo "\\"
438     echo " KEY_CPP \c" 
439   fi
440#-
441#- end with the file itself
442        echo "\\"
443              echo " $fic"
444    fi
445    fi
446echo $fic done >/dev/tty
447done
448#-
449#- Write some special rules ---
450echo '# agrif previous use'
451echo "firstagrif:"
452echo "ifeq (\$(AGRIF),use)"
453echo '   @if [ -z "`cat KEY_CPP | grep key_agrif`" ]; then $(RM) model.o $(MODDIR)/oce/*.mod $(MODEL_LIB) $(SXMODEL_LIB); fi'
454echo "else"
455echo '   @if [ -n "`cat KEY_CPP | grep key_agrif`" ]; then $(RM) -r OPAFILES model.o $(MODDIR)/oce/*.mod $(MODEL_LIB) $(SXMODEL_LIB); fi'
456echo "endif"
457#-
458echo '#- RB : this rule is a pretty miserable trick to be able to re-compile NEMP-AGRIF-mono after NEMO-AGRIF-mpp'
459echo '#- I guess the good correction should be in AGRIF/LIB/toamr.c for the conv, to remove useless allocation declarations in AGRIF_INC'
460echo '# recompile all in this case' 
461echo "mpiagrif:"
462echo "ifeq (\$(AGRIF),use)"
463echo "ifeq (,\$(AGRIF_MPI))"
464echo '   @if [ -n "`cat KEY_CPP | grep key_mpp_mpi`" ]; then $(RM) -r OPAFILES model.o $(MODDIR)/oce/*.mod $(MODEL_LIB) $(SXMODEL_LIB); fi'
465echo "endif"
466echo "endif"
467#-
468echo '# key changing control'
469echo "key: "
470echo "   @echo CHANGE of CPP KEYS yes/no ?"
471echo "   -@if [ \"\`cat KEY_CPP\`\" != \"\$(P_P:\$(prefix)%=%)\" ] ; then \\"
472echo "      echo CPP options changed ; echo \"\$(P_P:\$(prefix)%=%)\" > KEY_CPP ; fi "
473#-
474echo '# check key values'
475echo "keyverif:"
476echo '   @echo CHECKING KEY'
477echo '   @echo KEY USED : '
478echo '   @for v in ` echo $(P_P:$(prefix)%=%) ` ; \'
479echo '   do \'
480echo '   echo $$v ;\'
481echo '        w=`echo $$v | cut -c1-3` ; \'
482echo '        if [ $$w = `echo "key"` ] ; then \'
483echo '        r=n ; \'
484echo '        echo " $(KEY_LIST) " | (grep $$v >/dev/null 2>&1) || r=o ; \'
485echo '           if [ $$r != "n" ] ; then \'
486echo '              echo "UNKNOWN KEY" ;\'
487echo '              false ;  \'
488echo '              exit ;  \'
489echo '           fi \'
490echo '        fi \'
491echo '   done'
492echo '# Checking the number of routines'
493echo "src_file_list: "
494echo '   @echo CHECKING THE NUMBER AND NAMES OF SOURCE FILES '
495echo '   @$(RM) `ls | fgrep -v -f .patron` '
496echo '   @check=`grep OPA_SRC .config`              ; \'
497echo '   if [ -n "$$check" ] ; then                   \'
498echo '   echo "   use OPA_SRC files"                ; \'
499echo '       ln -sf ../OPA_SRC/*.[Ffh]90          . ; \'
500echo '       ln -sf ../OPA_SRC/*/*.[Ffh]90      . ; \'
501echo '  fi '
502echo '   @check=`grep LIM_SRC_3 .config`              ; \'
503echo '   if [ -n "$$check" ] ; then                   \'
504echo '   echo "   use LIM_SRC_3 files"                ; \'
505echo '      ln -sf ../LIM_SRC_3/*.[Ffh]90          . ; \'
506echo '  fi '
507echo '   @check=`grep LIM_SRC_2 .config`              ; \'
508echo '   if [ -n "$$check" ] ; then                   \'
509echo '   echo "   use LIM_SRC_2 files"                ; \'
510echo '      ln -sf ../LIM_SRC_2/*.[Ffh]90          . ; \'
511echo '  fi '
512echo '   @check=`grep C1D_SRC .config`              ; \'
513echo '   if [ -n "$$check" ] ; then                   \'
514echo '   echo "   use C1D_SRC files"                ; \'
515echo '      ln -sf ../C1D_SRC/*.[Ffh]90          . ; \'
516echo '  fi '
517echo '   @check=`grep TOP_SRC .config`              ; \'
518echo '   if [ -n "$$check" ] ; then  \'
519echo '   echo "   use TOP_SRC files"                ; \'
520echo '      ln -sf ../TOP_SRC/*.[Ffh]90          . ; \'
521echo '      ln -sf ../TOP_SRC/*/*.[Ffh]90      . ; \'
522echo '  fi '
523echo '   @check=`grep OFF_SRC .config`              ; \'
524echo '   if [ -n "$$check" ] ; then                   \'
525echo '   echo "   use OFF_SRC files"                ; \'
526echo '      ln -sf ../OFF_SRC/*.[Ffh]90          . ; \'
527echo '      ln -sf ../OFF_SRC/*/*.[Ffh]90        . ; \'
528echo '  fi '
529echo '   @check=`grep NST_SRC .config`              ; \'
530echo '   if [ -n "$$check" ] ; then                   \'
531echo '   echo "   use NST_SRC files"                ; \'
532echo '      \$(RM) agrif_opa_interp.F90           ; \'
533echo '      \$(RM) agrif_opa_sponge.F90           ; \'
534echo '      \$(RM) agrif_opa_update.F90           ; \'
535echo '      \$(RM) agrif_top_interp.F90           ; \'
536echo '      \$(RM) agrif_top_sponge.F90           ; \'
537echo '      \$(RM) agrif_top_update.F90           ; \'
538echo '      ln -sf ../NST_SRC/*.[Ffh]90      .     ; \'
539echo '  fi '
540echo '   @\$(RM) tmplist'
541echo '   @ls -1 | fgrep -v -f .patron  >tmplist'
542echo '   @cmp tmplist SRC_FILE_LIST.temp || { echo some routines have been added or suppressed ; \'
543echo '   sdiff -s tmplist SRC_FILE_LIST.temp ; cp tmplist SRC_FILE_LIST.temp ; \'
544echo '   \$(RM) model.o \$(MODEL_LIB) \$(SXMODEL_LIB) \$(EXEC_BIN) ; \'
545echo '   echo "Rebuilding the AA_make files" ; \'
546echo '   cd ..  ; ../UTIL/fait_AA_make ; echo " " ; \'
547echo '   echo "THE ins_make COMMAND in modipsl/util MUST BE RERUN PLEASE DO SO BEFORE gmake" ; \'
548echo '   echo "========================================== " ; \'
549echo '   ../../util/ins_make ; echo " " ;  false ; exit ; }'
550exec > /dev/null
551
Note: See TracBrowser for help on using the repository browser.