/[MITgcm]/MITgcm/tools/genmake2
ViewVC logotype

Diff of /MITgcm/tools/genmake2

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

revision 1.61 by edhill, Thu Jan 15 04:27:39 2004 UTC revision 1.95 by edhill, Thu Aug 5 16:04:32 2004 UTC
# Line 37  test_for_string_in_file() { Line 37  test_for_string_in_file() {
37      grep -i "$strng" $file > /dev/null 2>&1      grep -i "$strng" $file > /dev/null 2>&1
38      RETVAL=$?      RETVAL=$?
39      if test "x${RETVAL}" = x0 ; then      if test "x${RETVAL}" = x0 ; then
40          echo -n "Error: In $file there is an illegal line: "          printf "Error: In $file there is an illegal line: "
41          grep -i "$strng" $file          grep -i "$strng" $file
42          return 1          return 1
43      fi      fi
# Line 67  expand_pkg_groups() { Line 67  expand_pkg_groups() {
67          done          done
68          PACKAGES=$new_packages          PACKAGES=$new_packages
69          rm -f ./p[1,2].tmp          rm -f ./p[1,2].tmp
70            return $matched
71      else      else
72          echo "Warning: can't read package groups definition file: $PKG_GROUPS"          echo "Warning: can't read package groups definition file: $PKG_GROUPS"
73      fi      fi
74  }  }
75    
76    #  Check for broken environments (eg. cygwin, MacOSX w/HFS+) that
77    #  cannot distinguish [*.F/*.F90] from [*.f/*.f90] files.
78    check_for_broken_Ff()  {
79        #  Do we have defaults for $FS and/or $FS90 ?
80        tfs=f
81        tfs9=f90
82        if test "x$FS" != x ; then
83            tfs="$FS"
84        fi
85        if test "x$FS90" != x ; then
86            tfs9="$FS90"
87        fi
88    
89        #  First check the ability to create a *.F/.f pair.
90        cat <<EOF >> genmake_hello.F
91          program hello
92          write(*,*) 'hi'
93          stop
94          end
95    EOF
96        cp genmake_hello.F "genmake_hello."$tfs > /dev/null 2>&1
97        RETVAL=$?
98        if test "x$RETVAL" != x0 ; then
99            if test "x$FS" = x ; then
100                FS='for'
101                FS90='fr9'
102                check_for_broken_Ff
103            else
104                cat <<EOF 2>&1
105    ERROR: Your file system cannot distinguish between *.F and *.f files
106      (fails the "cp" test) and this program cannot find a suitable
107      replacement extension.  Please try a different build environment or
108      contact the <MITgcm-support@mitgcm.org> list for help.
109    
110    EOF
111                exit -1
112            fi
113            return
114        fi
115        rm -f genmake_hello.*
116    
117        #  Check the ability of ${MAKE} and ${LN} to use the current set
118        #  of extensions.
119        cat <<EOF >> genmake_hello.F
120          program hello
121          write(*,*) 'hi'
122          stop
123          end
124    EOF
125        test -f Makefile  &&  mv -f Makefile Makefile.bak
126        cat <<EOF >> Makefile
127    %.$tfs : %.F
128    .SUFFIXES:
129    genmake_hello.$tfs: genmake_hello.F
130            $LN genmake_hello.F genmake_hello.$tfs
131    EOF
132        $MAKE "genmake_hello."$tfs > /dev/null 2>&1
133        RETVAL=$?
134        if test "x$RETVAL" != x0 -o ! -f "genmake_hello."$tfs ; then
135            if test "x$FS" = x ; then
136                FS='for'
137                FS90='fr9'
138                check_for_broken_Ff
139            else
140                cat <<EOF 2>&1
141    ERROR: Your file system cannot distinguish between *.F and *.f files
142      (fails the "make/ln" test) and this program cannot find a suitable
143      replacement extension.  Please try a different build environment or
144      contact the <MITgcm-support@mitgcm.org> list for help.
145    
146    EOF
147                exit -1
148                return
149            fi
150        fi
151        rm -f genmake_hello.* Makefile
152        test -f Makefile  &&  mv -f Makefile.bak Makefile
153    
154        #  If we make it here, use the extensions
155        FS=$tfs
156        FS90=$tfs9
157        return
158    }
159    
160    
161    look_for_makedepend()  {
162    
163        #  The "original" makedepend is part of the Imake system that is
164        #  most often distributed with XFree86 or with an XFree86 source
165        #  package.  As a result, many machines (eg. generic Linux) do not
166        #  have a system-default "makedepend" available.  For those
167        #  systems, we have two fall-back options:
168        #
169        #    1) a makedepend implementation shipped with the cyrus-imapd
170        #       package:  ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/
171        #
172        #    2) a known-buggy xmakedpend shell script
173        #
174        #  So the choices are, in order:
175        #
176        #    1) use the user-specified program
177        #    2) use a system-wide default
178        #    3) locally build and use the cyrus implementation
179        #    4) fall back to the buggy local xmakedpend script
180        #
181        if test "x${MAKEDEPEND}" = x ; then
182            which makedepend > /dev/null 2>&1
183            RV0=$?
184            cat <<EOF >> genmake_tc.f
185          program test
186          write(*,*) 'test'
187          stop
188          end
189    EOF
190            makedepend genmake_tc.f > /dev/null 2>&1
191            RV1=$?
192            if test "x${RV0}${RV1}" = x00 ; then
193                MAKEDEPEND=makedepend
194            else
195                echo "    a system-default makedepend was not found."
196                
197                #  Try to build the cyrus implementation
198                build_cyrus_makedepend
199                RETVAL=$?
200                if test "x$RETVAL" != x0 ; then
201                    MAKEDEPEND='$(TOOLSDIR)/xmakedepend'
202                fi
203                rm -f ./genmake_cy_md
204            fi
205        else
206            #  echo "MAKEDEPEND=${MAKEDEPEND}"
207            echo "${MAKEDEPEND}" | grep -i cyrus > /dev/null 2>&1
208            RETVAL=$?
209            if test x"$RETVAL" = x0 ; then
210                build_cyrus_makedepend
211            fi
212        fi
213    }
214    
215    
216    build_cyrus_makedepend()  {
217        rm -f ./genmake_cy_md
218        (
219            cd $ROOTDIR/tools/cyrus-imapd-makedepend  \
220                &&  ./configure > /dev/null 2>&1  \
221                &&  make > /dev/null 2>&1
222            if test -x ./makedepend.exe ; then
223                $LN ./makedepend.exe ./makedepend
224            fi
225            ./makedepend ifparser.c > /dev/null 2>&1  \
226                &&  echo "true"
227        ) > ./genmake_cy_md
228        grep true ./genmake_cy_md > /dev/null 2>&1
229        RETVAL=$?
230        rm -f ./genmake_cy_md
231        if test "x$RETVAL" = x0 ; then
232            MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend'
233            return 0
234        else
235            echo "WARNING: unable to build cyrus-imapd-makedepend"
236            return 1
237        fi
238    }
239    
240  # Guess possible config options for this host  # Guess possible config options for this host
241  find_possible_configs()  {  find_possible_configs()  {
242    
# Line 80  find_possible_configs()  { Line 245  find_possible_configs()  {
245      tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`      tmp3=`echo $tmp2 | sed -e 's/power macintosh/ppc/'`
246      tmp1=`echo $tmp3 | sed -e 's|x86_64|amd64|'`      tmp1=`echo $tmp3 | sed -e 's|x86_64|amd64|'`
247      tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`      tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`
248      PLATFORM=$tmp2      tmp3=`echo $tmp2 | sed -e 's/cray sv1/craysv1/'`
249        PLATFORM=$tmp3
250        echo $PLATFORM | grep cygwin > /dev/null 2>&1  &&  PLATFORM=cygwin_ia32
251      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`
252      echo "  The platform appears to be:  $PLATFORM"      echo "  The platform appears to be:  $PLATFORM"
253            
# Line 100  find_possible_configs()  { Line 267  find_possible_configs()  {
267          CPP="cpp -traditional -P"          CPP="cpp -traditional -P"
268      fi      fi
269    
270      # makedepend is not always available      look_for_makedepend
271      if test "x${MAKEDEPEND}" = x ; then  
272        which makedepend >& /dev/null      #================================================================
273        RETVAL=$?      #  look for possible C compilers
274        if test "x${RETVAL}" = x1 ; then      tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc"
275           echo "    makedepend was not found. Using xmakedpend instead."      p_CC=
276           MAKEDEPEND='$(TOOLSDIR)/xmakedepend'      for c in $tmp ; do
277        fi          rm -f ./genmake_hello.c  ./genmake_hello
278            cat >> genmake_hello.c << EOF
279    #include <stdio.h>
280    int main(int argc, char **argv) {
281      printf("Hello!\n");
282      return 0;
283    }
284    EOF
285            $c -o genmake_hello genmake_hello.c > /dev/null 2>&1
286            RETVAL=$?
287            if test "x${RETVAL}" = x0 ; then
288                p_CC="$p_CC $c"
289            fi
290        done
291        rm -f ./genmake_hello.c ./genmake_hello
292        if test "x${p_CC}" = x ; then
293            cat 1>&2 <<EOF
294    
295    Error: No C compilers were found in your path.  Please specify one using:
296    
297        1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
298        2) the CC or MITGCM_CC environment variables.
299    
300    EOF
301            exit 1
302        else
303            echo "  The possible C compilers found in your path are:"
304            echo "   "$p_CC
305            if test "x$CC" = x ; then
306                CC=`echo $p_CC | $AWK '{print $1}'`
307                echo "  Setting C compiler to: "$CC
308            fi
309      fi      fi
310    
311      # look for possible fortran compilers      #================================================================
312        #  look for possible FORTRAN compilers
313      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95"      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95"
314      p_FC=      p_FC=
315      for c in $tmp ; do      for c in $tmp ; do
# Line 136  Error: No Fortran compilers were found i Line 335  Error: No Fortran compilers were found i
335    
336      1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),      1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
337      2) a command-line option (eg. "-fc NAME"), or      2) a command-line option (eg. "-fc NAME"), or
338      3) the MITGCM_FC environment variable.      3) the FC or MITGCM_FC environment variables.
339    
340  EOF  EOF
341          exit 1          exit 1
# Line 145  EOF Line 344  EOF
344          echo "   "$p_FC          echo "   "$p_FC
345          if test "x$FC" = x ; then          if test "x$FC" = x ; then
346              FC=`echo $p_FC | $AWK '{print $1}'`              FC=`echo $p_FC | $AWK '{print $1}'`
347                echo "  Setting FORTRAN compiler to: "$FC
348          fi          fi
349      fi      fi
350    
351      for i in $p_FC ; do      if test "x$OPTFILE" = x ; then
352          p_OF=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i          OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$FC
353          if test -r $p_OF ; then          if test ! -r $OPTFILE ; then
354              OPTFILE=$p_OF               echo "  I looked for the file "$OPTFILE" but did not find it"
355              echo "  The options file:  $p_OF"          fi
356              echo "    appears to match so we'll use it."      fi
357              break  #    echo "  The options file:  $p_OF"
358          fi  #    echo "    appears to match so we'll use it."
359      done  #   for i in $p_FC ; do
360    #p_OF=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i
361    #if test -r $p_OF ; then
362    #    OPTFILE=$p_OF
363    #    echo "  The options file:  $p_OF"
364    #    echo "    appears to match so we'll use it."
365    #    break
366    #fi
367    #   done
368      if test "x$OPTFILE" = x ; then      if test "x$OPTFILE" = x ; then
369          cat 1>&2 <<EOF          cat 1>&2 <<EOF
370    
# Line 215  get_pdepend_list()  { Line 423  get_pdepend_list()  {
423      . ./.pd_tmp      . ./.pd_tmp
424      rm -f ./.pd_tmp      rm -f ./.pd_tmp
425    
426      echo -n "PNAME = "${}      printf "PNAME = "${}
427  }  }
428    
429    
# Line 229  Usage: "$0" [OPTIONS] Line 437  Usage: "$0" [OPTIONS]
437      -help | --help | -h | --h      -help | --help | -h | --h
438            Print this help message and exit.            Print this help message and exit.
439    
440        -adoptfile NAME | --adoptfile NAME | -adof NAME | --adof NAME
441          -adoptfile=NAME | --adoptfile=NAME | -adof=NAME | --adof=NAME
442              Use "NAME" as the adoptfile.  By default, the file at
443              "tools/adjoint_options/adjoint_default" will be used.
444    
445      -nooptfile | --nooptfile      -nooptfile | --nooptfile
446        -optfile NAME | --optfile NAME | -of NAME | --of NAME        -optfile NAME | --optfile NAME | -of NAME | --of NAME
447        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME
# Line 253  Usage: "$0" [OPTIONS] Line 466  Usage: "$0" [OPTIONS]
466        --makefile=NAME | -mf=NAME        --makefile=NAME | -mf=NAME
467            Call the makefile "NAME".  The default is "Makefile".            Call the makefile "NAME".  The default is "Makefile".
468    
469        -makedepend NAME | -md NAME
470          --makedepend=NAME | -md=NAME
471              Use "NAME" for the MAKEDEPEND program.
472    
473      -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME      -rootdir NAME | --rootdir NAME | -rd NAME | --rd NAME
474        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME        -rootdir=NAME | --rootdir=NAME | -rd=NAME | --rd=NAME
475            Specify the location of the MITgcm ROOTDIR as "NAME".            Specify the location of the MITgcm ROOTDIR as "NAME".
# Line 289  Usage: "$0" [OPTIONS] Line 506  Usage: "$0" [OPTIONS]
506            will search for a working compiler by trying a list of            will search for a working compiler by trying a list of
507            "usual suspects" such as g77, f77, etc.            "usual suspects" such as g77, f77, etc.
508    
509        -cc NAME | --cc NAME | -cc=NAME | --cc=NAME
510              Use "NAME" as the C compiler.  By default, genmake
511              will search for a working compiler by trying a list of
512              "usual suspects" such as gcc, c89, cc, etc.
513    
514      -[no]ieee | --[no]ieee      -[no]ieee | --[no]ieee
515            Do or don't use IEEE numerics.  Note that this option            Do or don't use IEEE numerics.  Note that this option
516            *only* works if it is supported by the OPTFILE that            *only* works if it is supported by the OPTFILE that
517            is being used.            is being used.
518    
519        -mpi | --mpi
520              Include MPI header files and link to MPI libraries
521        -mpi=PATH | --mpi=PATH
522              Include MPI header files and link to MPI libraries using MPI_ROOT
523              set to PATH. i.e. Include files from \$PATH/include, link to libraries
524              from \$PATH/lib and use binaries from \$PATH/bin.
525    
526        -bash NAME
527              Explicitly specify the Bourne or BASH shell to use
528    
529    While it is most often a single word, the "NAME" variables specified    While it is most often a single word, the "NAME" variables specified
530    above can in many cases be a space-delimited string such as:    above can in many cases be a space-delimited string such as:
531    
# Line 314  EOF Line 546  EOF
546    
547  #  Build a CPP macro to automate calling C routines from FORTRAN  #  Build a CPP macro to automate calling C routines from FORTRAN
548  get_fortran_c_namemangling()  {  get_fortran_c_namemangling()  {
549    
550        #echo "FC_NAMEMANGLE = \"$FC_NAMEMANGLE\""
551        if test ! "x$FC_NAMEMANGLE" = x ; then
552            return 0
553        fi
554    
555      default_nm="#define FC_NAMEMANGLE(X) X ## _"      default_nm="#define FC_NAMEMANGLE(X) X ## _"
556            
557      cat > genmake_test.c <<EOF      cat > genmake_test.c <<EOF
# Line 331  WARNING: Please contact <MITgcm-support@ Line 569  WARNING: Please contact <MITgcm-support@
569  EOF  EOF
570          return 1          return 1
571      fi      fi
572      c_tcall=`nm genmake_test.o | grep 'T ' | grep tcall | cut -d ' ' -f 3`      c_tcall=`nm genmake_test.o 2>/dev/null | grep 'T ' | grep tcall | cut -d ' ' -f 3`
573      RETVAL=$?      RETVAL=$?
574      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
575          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 361  WARNING: Please contact <MITgcm-support@ Line 599  WARNING: Please contact <MITgcm-support@
599  EOF  EOF
600          return 1          return 1
601      fi      fi
602      f_tcall=`nm genmake_tcomp.o | grep 'T ' | grep tcall | cut -d ' ' -f 3`      f_tcall=`nm genmake_tcomp.o 2>/dev/null | grep 'T ' | grep tcall | cut -d ' ' -f 3`
603      RETVAL=$?      RETVAL=$?
604      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
605          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 438  EOF Line 676  EOF
676    
677    
678  check_netcdf_libs()  {  check_netcdf_libs()  {
679      cat <<EOF > genmake_tnc.F      echo "" > genmake_tnc.log
680        cat <<EOF > genmake_tnc.for
681        program fgennc        program fgennc
682  #include "netcdf.inc"  #include "netcdf.inc"
683        integer iret, ncid, xid        integer iret, ncid, xid
# Line 450  check_netcdf_libs()  { Line 689  check_netcdf_libs()  {
689        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
690        end        end
691  EOF  EOF
692      $CPP genmake_tnc.F > genmake_tnc.f  \      #echo "$CPP $DEFINES $INCLUDES"
693        $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f 2>/dev/null  \
694          &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f $LIBS >> genmake_tnc.log 2>&1          &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f $LIBS >> genmake_tnc.log 2>&1
695      RET_COMPILE=$?      RET_COMPILE=$?
696      test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1      test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1
# Line 458  EOF Line 698  EOF
698      if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then      if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
699          HAVE_NETCDF=t          HAVE_NETCDF=t
700      else      else
701          cat genmake_tnc.log >> genmake_warnings          # try again with "-lnetcdf" added to the libs
702            $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f 2>/dev/null  \
703                &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f \
704                $LIBS -lnetcdf >> genmake_tnc_2.log 2>&1
705            RET_COMPILE=$?
706            test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1
707            RETVAL=$?
708            if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
709                LIBS="$LIBS -lnetcdf"
710                HAVE_NETCDF=t
711            else
712                cat genmake_tnc.log >> genmake_warnings
713            fi
714      fi      fi
715      rm -f genmake_tnc*      rm -f genmake_tnc*
716  }  }
717    
718    
719    
720    ###############################################################################
721    #   Sequential part of script starts here
722    ###############################################################################
723    
724  #  Set defaults here  #  Set defaults here
725  COMMANDL="$0 $@"  COMMANDL="$0 $@"
726    
# Line 472  LN= Line 729  LN=
729  S64=  S64=
730  KPP=  KPP=
731  FC=  FC=
732    #CC=gcc
733  CPP=  CPP=
734  LINK=  LINK=
 # DEFINES="-DWORDLENGTH=4"  
735  DEFINES=  DEFINES=
736  PACKAGES=  PACKAGES=
737  ENABLE=  ENABLE=
738  DISABLE=  DISABLE=
739  MAKEFILE=  MAKEFILE=
740  MAKEDEPEND=  #MAKEDEPEND=
741  PDEPEND=  PDEPEND=
742  DUMPSTATE=t  DUMPSTATE=t
743  PDEFAULT=  PDEFAULT=
# Line 491  FOPTIM= Line 748  FOPTIM=
748  CFLAGS=  CFLAGS=
749  KFLAGS1=  KFLAGS1=
750  KFLAGS2=  KFLAGS2=
751    #LDADD=
752  LIBS=  LIBS=
753  KPPFILES=  KPPFILES=
754  NOOPTFILES=  NOOPTFILES=
755  NOOPTFLAGS=  NOOPTFLAGS=
756    MPI=
757    MPIPATH=
758    
759  # DEFINES checked by test compilation  # DEFINES checked by test compilation
760  HAVE_SYSTEM=  HAVE_SYSTEM=
# Line 502  HAVE_FDATE= Line 762  HAVE_FDATE=
762  FC_NAMEMANGLE=  FC_NAMEMANGLE=
763  HAVE_CLOC=  HAVE_CLOC=
764  HAVE_NETCDF=  HAVE_NETCDF=
765    HAVE_ETIME=
766    
767  MODS=  MODS=
768  TOOLSDIR=  TOOLSDIR=
# Line 509  SOURCEDIRS= Line 770  SOURCEDIRS=
770  INCLUDEDIRS=  INCLUDEDIRS=
771  STANDARDDIRS="USE_THE_DEFAULT"  STANDARDDIRS="USE_THE_DEFAULT"
772    
773    G2ARGS=
774    BASH=
775  PWD=`pwd`  PWD=`pwd`
776  MAKE=make  MAKE=make
777  AWK=awk  AWK=awk
# Line 524  IEEE= Line 787  IEEE=
787  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
788      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
789  fi  fi
790    FS=
791    FS90=
792    
793  AUTODIFF_PKG_USED=f  AUTODIFF_PKG_USED=f
794  AD_OPTFILE=  AD_OPTFILE=
# Line 548  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPE Line 813  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPE
813  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
814  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOSTNAME THISDATE MACHINE"  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOSTNAME THISDATE MACHINE"
815  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
816  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE"  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"
817    
818  #  The following are all related to adjoint/tangent-linear stuff  #  The following are all related to adjoint/tangent-linear stuff
819  gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS"  gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS"
# Line 577  for i in . $MODS ; do Line 842  for i in . $MODS ; do
842          break          break
843      fi      fi
844  done  done
845  echo -n "  getting local config information:  "  printf "  getting local config information:  "
846  if test -e $gm_local ; then  if test -f $gm_local ; then
847      echo "using $gm_local"      echo "using $gm_local"
848      . $gm_local      . $gm_local
849      # echo "DISABLE=$DISABLE"      # echo "DISABLE=$DISABLE"
# Line 599  fi Line 864  fi
864  #done  #done
865  #parse_options  #parse_options
866  ac_prev=  ac_prev=
867  for ac_option ; do  for ac_option in $@ ; do
868    
869        G2ARGS="$G2ARGS \"$ac_option\""
870    
871      # If the previous option needs an argument, assign it.      # If the previous option needs an argument, assign it.
872      if test -n "$ac_prev"; then      if test -n "$ac_prev"; then
# Line 642  for ac_option ; do Line 909  for ac_option ; do
909          -make=* | --make=* | -m=* | --m=*)          -make=* | --make=* | -m=* | --m=*)
910              MAKE=$ac_optarg ;;              MAKE=$ac_optarg ;;
911                    
912            -bash | --bash)
913                ac_prev=BASH ;;
914            -bash=* | --bash=*)
915                BASH=$ac_optarg ;;
916            
917            -makedepend | --makedepend | -md | --md)
918                ac_prev=MAKEDEPEND ;;
919            -makedepend=* | --makedepend=* | -md=* | --md=*)
920                MAKEDEPEND=$ac_optarg ;;
921            
922          -makefile | --makefile | -ma | --ma)          -makefile | --makefile | -ma | --ma)
923              ac_prev=MAKEFILE ;;              ac_prev=MAKEFILE ;;
924          -makefile=* | --makefile=* | -ma=* | --ma=*)          -makefile=* | --makefile=* | -ma=* | --ma=*)
# Line 683  for ac_option ; do Line 960  for ac_option ; do
960  #               ac_prev=cpp ;;  #               ac_prev=cpp ;;
961  #           -cpp=* | --cpp=*)  #           -cpp=* | --cpp=*)
962  #               CPP=$ac_optarg ;;  #               CPP=$ac_optarg ;;
963                        
964            -cc | --cc)
965                ac_prev=CC ;;
966            -cc=* | --cc=*)
967                CC=$ac_optarg ;;
968            
969          -fortran | --fortran | -fc | --fc)          -fortran | --fortran | -fc | --fc)
970              ac_prev=FC ;;              ac_prev=FC ;;
971          -fc=* | --fc=*)          -fc=* | --fc=*)
972              FC=$ac_optarg ;;              FC=$ac_optarg ;;
973                    
974            -fs | --fs)
975                ac_prev=FS ;;
976            -fs=* | --fs=*)
977                FS=$ac_optarg ;;
978            
979            -fs90 | --fs90)
980                ac_prev=FS90 ;;
981            -fs90=* | --fs90=*)
982                FS90=$ac_optarg ;;
983            
984          -ieee | --ieee)          -ieee | --ieee)
985              IEEE=true ;;              IEEE=true ;;
986          -noieee | --noieee)          -noieee | --noieee)
987              IEEE= ;;              IEEE= ;;
988    
989            -mpi | --mpi)
990                MPI=true ;;
991            -mpi=* | --mpi=*)
992                MPIPATH=$ac_optarg
993                MPI=true ;;
994                    
995  #       -jam | --jam)  #       -jam | --jam)
996  #           JAM=1 ;;  #           JAM=1 ;;
# Line 739  if test -f ./.genmakerc ; then Line 1037  if test -f ./.genmakerc ; then
1037  fi  fi
1038    
1039  if test "x${ROOTDIR}" = x ; then  if test "x${ROOTDIR}" = x ; then
1040      if test "${PWD##/*/}" = "bin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then      tmp=`echo $PWD | sed -e 's/\// /g' | awk '{print $NR}'`
1041        if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then
1042          ROOTDIR=".."          ROOTDIR=".."
1043      else      else
1044          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
1045              if [ -d "$d/model" -a -d "$d/eesupp" -a -d "$d/pkg" ]; then              if [ -d "$d/model" -a -d "$d/eesupp" -a -d "$d/pkg" ]; then
1046                  ROOTDIR=$d                  ROOTDIR=$d
1047                  echo -n "Warning:  ROOTDIR was not specified but there appears to be"                  printf "Warning:  ROOTDIR was not specified but there appears to be"
1048                  echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."                  echo " a copy of MITgcm at \"$ROOTDIR\" so we'll try it."
1049                  break                  break
1050              fi              fi
# Line 779  if test "x$OPTFILE" != xNONE ; then Line 1078  if test "x$OPTFILE" != xNONE ; then
1078          . "$OPTFILE"          . "$OPTFILE"
1079          RETVAL=$?          RETVAL=$?
1080          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1081              echo -n "Error: failed to source OPTFILE \"$OPTFILE\""              printf "Error: failed to source OPTFILE \"$OPTFILE\""
1082              echo "--please check that variable syntax is bash-compatible"              echo "--please check that variable syntax is bash-compatible"
1083              exit 1              exit 1
1084          fi          fi
# Line 792  if test "x$OPTFILE" != xNONE ; then Line 1091  if test "x$OPTFILE" != xNONE ; then
1091      fi      fi
1092  fi  fi
1093    
1094    #  Check for broken systems that cannot correctly distinguish *.F and *.f files
1095    # check_for_broken_Ff
1096    
1097  echo "  getting AD_OPTFILE information:  "  echo "  getting AD_OPTFILE information:  "
1098  if test "x${AD_OPTFILE}" = x ; then  if test "x${AD_OPTFILE}" = x ; then
1099      if test "x$MITGCM_AD_OF" = x ; then      if test "x$MITGCM_AD_OF" = x ; then
# Line 806  if test "x${AD_OPTFILE}" != xNONE ; then Line 1108  if test "x${AD_OPTFILE}" != xNONE ; then
1108          . "$AD_OPTFILE"          . "$AD_OPTFILE"
1109          RETVAL=$?          RETVAL=$?
1110          if test "x$RETVAL" != x0 ; then          if test "x$RETVAL" != x0 ; then
1111              echo -n "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""              printf "Error: failed to source AD_OPTFILE \"$AD_OPTFILE\""
1112              echo "--please check that variable syntax is bash-compatible"              echo "--please check that variable syntax is bash-compatible"
1113              exit 1              exit 1
1114          fi          fi
# Line 819  if test "x${AD_OPTFILE}" != xNONE ; then Line 1121  if test "x${AD_OPTFILE}" != xNONE ; then
1121      fi      fi
1122  fi  fi
1123    
1124  #  Check that FC, LINK, CPP, S64, LN, and MAKE are defined.  If not,  #  Check that FC, CC, LINK, CPP, S64, LN, and MAKE are defined.  If not,
1125  #  either set defaults or complain and abort!  #  either set defaults or complain and abort!
1126    if test ! "x$BASH" = x ; then
1127        # add a trailing space so that it works within the Makefile syntax (see below)
1128        BASH="$BASH "
1129    fi
1130  if test "x$FC" = x ; then  if test "x$FC" = x ; then
1131      cat <<EOF 1>&2      cat <<EOF 1>&2
1132    
# Line 831  Error: no Fortran compiler: please speci Line 1137  Error: no Fortran compiler: please speci
1137  EOF  EOF
1138      exit 1      exit 1
1139  fi  fi
1140    if test "x$CC" = x ; then
1141        CC=cc
1142    #     cat <<EOF 1>&2
1143    # Error: no C compiler: please specify using one of the following:
1144    #   1) within the options file ("CC=...") as specified by "-of=OPTFILE"
1145    #   2) the "-cc=XXX" command-line option
1146    #   3) the "./genmake_local" file
1147    # EOF
1148    #     exit 1
1149    fi
1150  if test "x$LINK" = x ; then  if test "x$LINK" = x ; then
1151      LINK=$FC      LINK=$FC
1152  fi  fi
 if test "x$CPP" = x ; then  
     CPP="cpp"  
 fi  
1153  if test "x$MAKE" = x ; then  if test "x$MAKE" = x ; then
1154      MAKE="make"      MAKE="make"
1155  fi  fi
1156    if test "x$CPP" = x ; then
1157        CPP=cpp
1158    fi
1159    #EH3 === UGLY ===
1160    #  The following is an ugly little hack to check for $CPP in /lib/ and
1161    #  it should eventually be replaced with a more general function that
1162    #  searches a combo of the user's path and a list of "usual suspects"
1163    #  to find the correct location for binaries such as $CPP.
1164    for i in " " "/lib/" ; do
1165        echo "#define A a" | $i$CPP > test_cpp 2>&1 && CPP=$i$CPP
1166    done
1167    #EH3 === UGLY ===
1168  echo "#define A a" | $CPP > test_cpp 2>&1  echo "#define A a" | $CPP > test_cpp 2>&1
1169  RETVAL=$?  RETVAL=$?
1170  if test "x$RETVAL" != x0 ; then  if test "x$RETVAL" != x0 ; then
# Line 856  EOF Line 1181  EOF
1181  else  else
1182      rm -f test_cpp      rm -f test_cpp
1183  fi  fi
1184  if test "x$MAKEDEPEND" = x ; then  look_for_makedepend
     MAKEDEPEND=makedepend  
 fi  
1185  if test "x$LN" = x ; then  if test "x$LN" = x ; then
1186      LN="ln -s"      LN="ln -s"
1187  fi  fi
# Line 876  EOF Line 1199  EOF
1199  fi  fi
1200  rm -f genmake_test_ln genmake_tlink  rm -f genmake_test_ln genmake_tlink
1201    
1202    #  Check for broken *.F/*.f handling and fix if possible
1203    check_for_broken_Ff
1204    
1205    if test ! "x$MPI" = x ; then
1206          echo "  Turning on MPI cpp macros"
1207          DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1208    fi
1209    
1210  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
1211  echo -n "  Do we have the system() command using $FC...  "  printf "  Do we have the system() command using $FC...  "
1212  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.f <<EOF
1213        program hello        program hello
1214        call system('echo hi')        call system('echo hi')
# Line 896  else Line 1226  else
1226  fi  fi
1227  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1228    
1229  echo -n "  Do we have the fdate() command using $FC...  "  printf "  Do we have the fdate() command using $FC...  "
1230  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.f <<EOF
1231        program hello        program hello
1232        CHARACTER(128) string        CHARACTER(128) string
# Line 917  else Line 1247  else
1247  fi  fi
1248  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1249    
1250  echo -n "  Can we call simple C routines (here, \"cloc()\") using $FC...  "  printf "  Do we have the etime() command using $FC...  "
1251    cat > genmake_tcomp.f <<EOF
1252          program hello
1253          REAL*4 ACTUAL, TARRAY(2)
1254          EXTERNAL ETIME
1255          REAL*4 ETIME
1256          actual = etime( tarray )
1257          print *, tarray
1258          end
1259    EOF
1260    $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1
1261    RETVAL=$?
1262    if test "x$RETVAL" = x0 ; then
1263        HAVE_ETIME=t
1264        DEFINES="$DEFINES -DHAVE_ETIME"
1265        echo "yes"
1266    else
1267        HAVE_ETIME=
1268        echo "no"
1269    fi
1270    rm -f genmake_tcomp*
1271    
1272    printf "  Can we call simple C routines (here, \"cloc()\") using $FC...  "
1273  check_HAVE_CLOC  check_HAVE_CLOC
1274  if test "x$HAVE_CLOC" != x ; then  if test "x$HAVE_CLOC" != x ; then
1275      echo "yes"      echo "yes"
# Line 926  else Line 1278  else
1278  fi  fi
1279  rm -f genmake_t*  rm -f genmake_t*
1280    
1281  echo -n "  Can we create NetCDF-enabled binaries...  "  printf "  Can we create NetCDF-enabled binaries...  "
1282  check_netcdf_libs  check_netcdf_libs
1283  if test "x$HAVE_NETCDF" != x ; then  if test "x$HAVE_NETCDF" != x ; then
1284      echo "yes"      echo "yes"
# Line 936  fi Line 1288  fi
1288    
1289    
1290  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1291  echo -n "  Adding MODS directories:  "  printf "  Adding MODS directories:  "
1292  for d in $MODS ; do  for d in $MODS ; do
1293      if test ! -d $d ; then      if test ! -d $d ; then
1294          echo          echo
1295          echo "Error: MODS directory \"$d\" not found!"          echo "Error: MODS directory \"$d\" not found!"
1296          exit 1          exit 1
1297      else      else
1298          echo -n " $d"          printf " $d"
1299          SOURCEDIRS="$SOURCEDIRS $d"          SOURCEDIRS="$SOURCEDIRS $d"
1300          INCLUDEDIRS="$INCLUDEDIRS $d"          INCLUDEDIRS="$INCLUDEDIRS $d"
1301      fi      fi
# Line 958  if test "x${PLATFORM}" = x ; then Line 1310  if test "x${PLATFORM}" = x ; then
1310  fi  fi
1311    
1312  if test "x${EXEDIR}" = x ; then  if test "x${EXEDIR}" = x ; then
1313      if test "${PWD##/*/}" = "bin" -a -d ../exe -a $ROOTDIR = .. ; then      tmp=`echo $PWD | sed -e 's/\// /g' | awk '{print $NR}'`
1314        if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then
1315          EXEDIR=../exe          EXEDIR=../exe
1316      else      else
1317          EXEDIR=.          EXEDIR=.
# Line 973  if test "x${TOOLSDIR}" = x ; then Line 1326  if test "x${TOOLSDIR}" = x ; then
1326      TOOLSDIR="$ROOTDIR/tools"      TOOLSDIR="$ROOTDIR/tools"
1327  fi  fi
1328  if test ! -d ${TOOLSDIR} ; then  if test ! -d ${TOOLSDIR} ; then
1329      echo "Error: the specified $TOOLSDIR (\"$TOOLSDIR\") does not exist!"      echo "Error: the specified TOOLSDIR (\"$TOOLSDIR\") does not exist!"
1330      exit 1      exit 1
1331  fi  fi
1332  if test "x$S64" = x ; then  if test "x$S64" = x ; then
# Line 994  if test -r $ROOTDIR"/eesupp/src/Makefile Line 1347  if test -r $ROOTDIR"/eesupp/src/Makefile
1347          rm -f make_eesupp.errors          rm -f make_eesupp.errors
1348      else      else
1349          echo "Error: problem encountered while building source files in eesupp:"          echo "Error: problem encountered while building source files in eesupp:"
1350          cat make_eesupp.errors          cat make_eesupp.errors 1>&2
1351          exit 1          exit 1
1352      fi      fi
1353  fi  fi
# Line 1008  if test -r $ROOTDIR"/pkg/exch2/Makefile" Line 1361  if test -r $ROOTDIR"/pkg/exch2/Makefile"
1361          rm -f make_exch2.errors          rm -f make_exch2.errors
1362      else      else
1363          echo "Error: problem encountered while building source files in exch2:"          echo "Error: problem encountered while building source files in exch2:"
1364          cat make_exch2.errors          cat make_exch2.errors 1>&2
1365          exit 1          exit 1
1366      fi      fi
1367  fi  fi
# Line 1068  else Line 1421  else
1421          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`          def=`cat $PDEFAULT | sed -e 's/#.*$//g' | $AWK '(NF>0){print $0}'`
1422          RETVAL=$?          RETVAL=$?
1423          if test "x${RETVAL}" != x0 ; then          if test "x${RETVAL}" != x0 ; then
1424              echo -n "Error: can't parse default package list "              printf "Error: can't parse default package list "
1425              echo "-- please check PDEFAULT=\"$PDEFAULT\""              echo "-- please check PDEFAULT=\"$PDEFAULT\""
1426              exit 1              exit 1
1427          fi          fi
# Line 1076  else Line 1429  else
1429              PACKAGES="$PACKAGES $i"              PACKAGES="$PACKAGES $i"
1430          done          done
1431          echo "    before group expansion packages are: $PACKAGES"          echo "    before group expansion packages are: $PACKAGES"
1432          expand_pkg_groups          RET=1
1433            while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
1434          echo "    after group expansion packages are:  $PACKAGES"          echo "    after group expansion packages are:  $PACKAGES"
1435      fi      fi
1436  fi  fi
1437    
1438  echo "  applying DISABLE settings"  echo "  applying DISABLE settings"
1439    for i in $PACKAGES ; do
1440        echo $i >> ./.tmp_pack
1441    done
1442    for i in `grep  "-" ./.tmp_pack` ; do
1443        j=`echo $i | sed 's/[-]//'`
1444        DISABLE="$DISABLE $j"
1445    done
1446  pack=  pack=
1447  for p in $PACKAGES ; do  for p in $PACKAGES ; do
1448      addit="t"      addit="t"
# Line 1098  PACKAGES="$pack" Line 1459  PACKAGES="$pack"
1459  echo "  applying ENABLE settings"  echo "  applying ENABLE settings"
1460  echo "" > ./.tmp_pack  echo "" > ./.tmp_pack
1461  PACKAGES="$PACKAGES $ENABLE"  PACKAGES="$PACKAGES $ENABLE"
1462    # Test if each explicitly referenced package exists
1463  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1464      if test ! -d "$ROOTDIR/pkg/$i" ; then      j=`echo $i | sed 's/[-+]//'`
1465        if test ! -d "$ROOTDIR/pkg/$j" ; then
1466          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""          echo "Error: can't find package $i at \"$ROOTDIR/pkg/$i\""
1467          exit 1          exit 1
1468      fi      fi
1469      echo $i >> ./.tmp_pack      echo $i >> ./.tmp_pack
1470  done  done
 pack=`cat ./.tmp_pack | sort | uniq`  
 rm -f ./.tmp_pack  
1471  PACKAGES=  PACKAGES=
1472  for i in $pack ; do  for i in `grep -v "-" ./.tmp_pack | sort | uniq` ; do
1473      PACKAGES="$PACKAGES $i"      PACKAGES="$PACKAGES $i"
1474  done  done
1475    rm -f ./.tmp_pack
1476  echo "    packages are:  $PACKAGES"  echo "    packages are:  $PACKAGES"
1477    
1478  echo "  applying package dependency rules"  echo "  applying package dependency rules"
# Line 1177  while test "x$ck" != xtt ; do Line 1539  while test "x$ck" != xtt ; do
1539              echo "  the dependency rules for \"$dname\""              echo "  the dependency rules for \"$dname\""
1540              exit 1              exit 1
1541          fi          fi
1542          i=$(( $i + 1 ))          i=`echo "$i + 1" | bc -l`
1543            #i=$(( $i + 1 ))
1544      done      done
1545      ck=$ck"t"      ck=$ck"t"
1546  done  done
# Line 1196  for i in $PACKAGES ; do Line 1559  for i in $PACKAGES ; do
1559      fi      fi
1560  done  done
1561    
1562  #  Check for ability to build and use NetCDF  #  Build MNC templates and check for ability to build and use NetCDF
1563  echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1  echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1
1564  RETVAL=$?  RETVAL=$?
1565  if test "x$RETVAL" = x0 -a "x$HAVE_NETCDF" != xt ; then  if test "x$RETVAL" = x0 ; then
1566      cat <<EOF      ( cd $ROOTDIR"/pkg/mnc" && $MAKE templates ) > make_mnc.errors 2>&1
1567        RETVAL=$?
1568        if test "x${RETVAL}" = x0 ; then
1569            rm -f make_mnc.errors
1570        else
1571            echo "Error: problem encountered while building source files in pkg/mnc:"
1572            cat make_mnc.errors 1>&2
1573            exit 1
1574        fi
1575        if test "x$HAVE_NETCDF" != xt ; then
1576            cat <<EOF
1577    
1578  WARNING: the "mnc" package has been enabled but tests failed to  WARNING: the "mnc" package has been enabled but tests failed to
1579    compile and/or execute NetCDF applications.  Please check that:    compile and/or execute NetCDF applications.  Please check that:
# Line 1210  WARNING: the "mnc" package has been enab Line 1583  WARNING: the "mnc" package has been enab
1583         NetCDF library to link against.         NetCDF library to link against.
1584        
1585  EOF  EOF
1586        fi
1587  fi  fi
1588    
1589  # Create a list of #define and #undef to enable/disable packages  # Create a list of #define and #undef to enable/disable packages
# Line 1328  echo Line 1702  echo
1702  echo "===  Creating the Makefile  ==="  echo "===  Creating the Makefile  ==="
1703  echo "  setting INCLUDES"  echo "  setting INCLUDES"
1704  for i in $INCLUDEDIRS ; do  for i in $INCLUDEDIRS ; do
1705      if ! test -d $i ; then      if test ! -d $i ; then
 #       INCLUDES="$INCLUDES -I$i"  
 #   else  
1706          echo "Warning: can't find INCLUDEDIRS=\"$i\""          echo "Warning: can't find INCLUDEDIRS=\"$i\""
1707      fi      fi
1708  done  done
# Line 1340  rm -rf .links.tmp Line 1712  rm -rf .links.tmp
1712  mkdir .links.tmp  mkdir .links.tmp
1713  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
1714  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
1715  echo -n 'SRCFILES = '    > srclist.inc  printf 'SRCFILES = '    > srclist.inc
1716  echo -n 'CSRCFILES = '   > csrclist.inc  printf 'CSRCFILES = '   > csrclist.inc
1717  echo -n 'F90SRCFILES = ' > f90srclist.inc  printf 'F90SRCFILES = ' > f90srclist.inc
1718  echo -n 'HEADERFILES = ' > hlist.inc  printf 'HEADERFILES = ' > hlist.inc
1719  echo -n 'AD_FLOW_FILES = ' > ad_flow_files.inc  printf 'AD_FLOW_FILES = ' > ad_flow_files.inc
1720  alldirs="$SOURCEDIRS $INCLUDEDIRS ."  alldirs="$SOURCEDIRS $INCLUDEDIRS ."
1721  for d in $alldirs ; do  for d in $alldirs ; do
1722      deplist=      deplist=
# Line 1369  for d in $alldirs ; do Line 1741  for d in $alldirs ; do
1741                  case $extn in                  case $extn in
1742                      F)                      F)
1743                          echo    " \\"  >> srclist.inc                          echo    " \\"  >> srclist.inc
1744                          echo -n " $sf" >> srclist.inc                          printf " $sf" >> srclist.inc
1745                          ;;                          ;;
1746                      F90)                      F90)
1747                          echo    " \\"  >> f90srclist.inc                          echo    " \\"  >> f90srclist.inc
1748                          echo -n " $sf" >> f90srclist.inc                          printf " $sf" >> f90srclist.inc
1749                          ;;                          ;;
1750                      c)                      c)
1751                          echo    " \\"  >> csrclist.inc                          echo    " \\"  >> csrclist.inc
1752                          echo -n " $sf" >> csrclist.inc                          printf " $sf" >> csrclist.inc
1753                          ;;                          ;;
1754                      h)                      h)
1755                          echo    " \\"  >> hlist.inc                          echo    " \\"  >> hlist.inc
1756                          echo -n " $sf" >> hlist.inc                          printf " $sf" >> hlist.inc
1757                          ;;                          ;;
1758                      flow)                      flow)
1759                          echo    " \\"  >> ad_flow_files.inc                          echo    " \\"  >> ad_flow_files.inc
1760                          echo -n " $sf" >> ad_flow_files.inc                          printf " $sf" >> ad_flow_files.inc
1761                          ;;                          ;;
1762                  esac                  esac
1763              fi              fi
# Line 1405  echo "" >> f90srclist.inc Line 1777  echo "" >> f90srclist.inc
1777  echo "" >> hlist.inc  echo "" >> hlist.inc
1778  echo "" >> ad_flow_files.inc  echo "" >> ad_flow_files.inc
1779    
1780  if test -e $MAKEFILE ; then  if test -f $MAKEFILE ; then
1781      mv -f $MAKEFILE "$MAKEFILE.bak"      mv -f $MAKEFILE "$MAKEFILE.bak"
1782  fi  fi
1783  echo "  Writing makefile: $MAKEFILE"  echo "  Writing makefile: $MAKEFILE"
# Line 1414  echo "#    $MACHINE" >> $MAKEFILE Line 1786  echo "#    $MACHINE" >> $MAKEFILE
1786  echo "# This makefile was generated automatically on" >> $MAKEFILE  echo "# This makefile was generated automatically on" >> $MAKEFILE
1787  echo "#    $THISDATE" >> $MAKEFILE  echo "#    $THISDATE" >> $MAKEFILE
1788  echo "# by the command:" >> $MAKEFILE  echo "# by the command:" >> $MAKEFILE
1789  echo "#    $0 $@" >> $MAKEFILE  echo "#    $0 $G2ARGS" >> $MAKEFILE
1790  echo "# executed by:" >> $MAKEFILE  echo "# executed by:" >> $MAKEFILE
1791  echo "#    $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE  echo "#    $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE
1792    
# Line 1481  KPP = ${KPP} Line 1853  KPP = ${KPP}
1853  FC = ${FC}  FC = ${FC}
1854  # Fortran compiler  # Fortran compiler
1855  F90C = ${F90C}  F90C = ${F90C}
1856    # C compiler
1857    CC = ${CC}
1858  # Link editor  # Link editor
1859  LINK = ${LINK}  LINK = ${LINK} ${LDADD}
1860    
1861  # Defines for CPP  # Defines for CPP
1862  DEFINES = ${DEFINES}  DEFINES = ${DEFINES}
# Line 1514  cat csrclist.inc      >> $MAKEFILE Line 1888  cat csrclist.inc      >> $MAKEFILE
1888  cat f90srclist.inc    >> $MAKEFILE  cat f90srclist.inc    >> $MAKEFILE
1889  cat hlist.inc         >> $MAKEFILE  cat hlist.inc         >> $MAKEFILE
1890  cat ad_flow_files.inc >> $MAKEFILE  cat ad_flow_files.inc >> $MAKEFILE
1891  echo               >> $MAKEFILE  echo >> $MAKEFILE
1892  echo 'F77FILES =  $(SRCFILES:.F=.f)'                                           >> $MAKEFILE  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE
1893  echo 'F90FILES =  $(F90SRCFILES:.F90=.f90)'                                    >> $MAKEFILE  echo 'F90FILES =  $(F90SRCFILES:.F=.'$FS90')' >> $MAKEFILE
1894  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE
1895    echo >> $MAKEFILE
1896    echo '.SUFFIXES:' >> $MAKEFILE
1897    echo '.SUFFIXES: .o .'$FS' .p .F .c .'$FS90' .F90' >> $MAKEFILE
1898  rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc  rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc
1899  rm -f ad_flow_files.inc  rm -f ad_flow_files.inc
1900    
1901  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
1902    
 .SUFFIXES:  
 .SUFFIXES: .o .f .p .F .c .F90 .f90  
   
1903  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
1904  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)
1905          @echo Creating \$@ ...          @echo Creating \$@ ...
1906          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
1907  depend:  depend:
1908          @make links          @make links
1909          \$(MAKEDEPEND) -o .f \$(DEFINES) \$(INCLUDES) \$(SRCFILES)          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(SRCFILES)
1910          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
1911            -rm -f makedepend.out
1912    
1913  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)
1914    
# Line 1545  output.txt: \$(EXECUTABLE) Line 1919  output.txt: \$(EXECUTABLE)
1919          @\$(EXECUTABLE) > \$@          @\$(EXECUTABLE) > \$@
1920    
1921  clean:  clean:
1922          -rm -rf *.o *.f *.p *.f90 *.mod ${RMFILES} work.{pc,pcl} *.template          -rm -rf *.o *.$FS *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template
1923  Clean:  Clean:
1924          @make clean          @make clean
1925          @make cleanlinks          @make cleanlinks
# Line 1556  CLEAN: Line 1930  CLEAN:
1930          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
1931          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
1932          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
1933          -rm -f \$(EXECUTABLE) output.txt          -rm -f \$(EXECUTABLE) output.txt STD*
1934    
1935  #eh3 Makefile: makefile  #eh3 Makefile: makefile
1936  makefile:  makefile:
1937          $THIS_SCRIPT $@          $THIS_SCRIPT $G2ARGS
1938  cleanlinks:  cleanlinks:
1939          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
1940    
1941  # Special targets ($SPECIAL_FILES) which are create by make  # Special targets ($SPECIAL_FILES) which are create by make
1942  ${PACKAGES_DOT_H}:  ${PACKAGES_DOT_H}:
1943          @echo Creating \$@ ...          @echo Creating \$@ ...
1944          @\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bPACKAGES_CONFIG_H "Disabled packages:" \$(DISABLED_PACKAGES) " " "Enabled packages:" \$(ENABLED_PACKAGES) > \$@          @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bPACKAGES_CONFIG_H "Disabled packages:" \$(DISABLED_PACKAGES) " " "Enabled packages:" \$(ENABLED_PACKAGES) > \$@
1945  AD_CONFIG.h:  AD_CONFIG.h:
1946          @echo Creating \$@ ...          @echo Creating \$@ ...
1947          @\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bAD_CONFIG_H -UALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > \$@          @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bAD_CONFIG_H -UALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > \$@
1948  FC_NAMEMANGLE.h:  FC_NAMEMANGLE.h:
1949          @echo Creating \$@ ...          @echo Creating \$@ ...
1950          echo "$FC_NAMEMANGLE" > \$@          echo "$FC_NAMEMANGLE" > \$@
1951    
1952  # The normal chain of rules is (  .F - .f - .o  )  # The normal chain of rules is (  .F - .$FS - .o  )
1953  .F.f:  
1954    %.o : %.F
1955    
1956    .F.$FS:
1957          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1958  .f.o:  .$FS.o:
1959          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
1960  .F90.f90:  .F90.$FS90:
1961          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1962  .f90.o:  .$FS90.o:
1963          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
1964  .c.o:  .c.o:
1965          \$(CC) \$(CFLAGS) -c \$<          \$(CC) \$(CFLAGS) -c \$<
1966    
1967  # Special exceptions that use the ( .F - .p - .f - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
1968  .F.p:  .F.p:
1969          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1970  .p.f:  .p.$FS:
1971          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
1972    
1973  #=========================================  #=========================================
# Line 1617  done Line 1994  done
1994    
1995  echo "  Add the source list for AD code generation"  echo "  Add the source list for AD code generation"
1996  echo >> $MAKEFILE  echo >> $MAKEFILE
1997  echo -n "AD_FILES = " >> $MAKEFILE  printf "AD_FILES = " >> $MAKEFILE
1998  AD_FILES=`cat ad_files`  AD_FILES=`cat ad_files`
1999  for i in $AD_FILES ; do  for i in $AD_FILES ; do
2000      echo    " \\" >> $MAKEFILE      echo    " \\" >> $MAKEFILE
2001      echo -n " $i" >> $MAKEFILE      printf " $i" >> $MAKEFILE
2002  done  done
2003  echo >> $MAKEFILE  echo >> $MAKEFILE
2004  rm -f ad_files  rm -f ad_files
# Line 1634  adtaf: ad_taf_output.f Line 2011  adtaf: ad_taf_output.f
2011  adtamc: ad_tamc_output.f  adtamc: ad_tamc_output.f
2012    
2013  ad_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ad_input_code.f: \$(AD_FILES) \$(HEADERFILES)
2014          @\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -DALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ad_config.template          @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -DALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ad_config.template
2015          cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h          cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h
2016          -rm -f ad_config.template          -rm -f ad_config.template
2017          @make \$(F77FILES)          @make \$(F77FILES)
# Line 1666  ftltaf: ftl_taf_output.f Line 2043  ftltaf: ftl_taf_output.f
2043  ftltamc: ftl_tamc_output.f  ftltamc: ftl_tamc_output.f
2044    
2045  ftl_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ftl_input_code.f: \$(AD_FILES) \$(HEADERFILES)
2046          @\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -UALLOW_ADJOINT_RUN -DALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ftl_config.template          @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -UALLOW_ADJOINT_RUN -DALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > ftl_config.template
2047          cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h          cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2048          -rm -f ftl_config.template          -rm -f ftl_config.template
2049          @make \$(F77FILES)          @make \$(F77FILES)
# Line 1715  for i in $KPPFILES ; do Line 2092  for i in $KPPFILES ; do
2092      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
2093          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
2094      fi      fi
2095      echo "$base.f: $base.p" >> $MAKEFILE      echo "$base.$FS: $base.p" >> $MAKEFILE
2096  done  done
2097    
2098  echo "  Making list of NOOPTFILES"  echo "  Making list of NOOPTFILES"
# Line 1725  for i in $NOOPTFILES ; do Line 2102  for i in $NOOPTFILES ; do
2102      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
2103          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
2104      fi      fi
2105      echo "$base.o: $base.f" >> $MAKEFILE      echo "$base.o: $base.$FS" >> $MAKEFILE
2106      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE
2107  done  done
2108    
# Line 1739  printf "\n\n# DO NOT DELETE\n" >> $MAKEF Line 2116  printf "\n\n# DO NOT DELETE\n" >> $MAKEF
2116  printf "\n===  Done  ===\n"  printf "\n===  Done  ===\n"
2117    
2118  # Create special header files  # Create special header files
2119  $TOOLSDIR/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bPACKAGES_CONFIG_H "Disabled packages:" $DISABLED_PACKAGES " " "Enabled packages:" $ENABLED_PACKAGES > $PACKAGES_DOT_H".tmp"  $BASH $TOOLSDIR/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -bPACKAGES_CONFIG_H "Disabled packages:" $DISABLED_PACKAGES " " "Enabled packages:" $ENABLED_PACKAGES > $PACKAGES_DOT_H".tmp"
2120  if test ! -f $PACKAGES_DOT_H ; then  if test ! -f $PACKAGES_DOT_H ; then
2121      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H      mv -f $PACKAGES_DOT_H".tmp" $PACKAGES_DOT_H
2122  else  else
# Line 1753  else Line 2130  else
2130      fi      fi
2131  fi  fi
2132  if test ! -f AD_CONFIG.h ; then  if test ! -f AD_CONFIG.h ; then
2133      $TOOLSDIR/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -UALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > AD_CONFIG.h      $BASH $TOOLSDIR/convert_cpp_cmd2defines "Warning - this file is automatically generated - do NOT edit" -UALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN -UALLOW_ECCO_OPTIMIZATION > AD_CONFIG.h
2134  fi  fi
2135    
2136    
2137  #  Write the "state" for future records  #  Write the "state" for future records
2138  if test "x$DUMPSTATE" != xf ; then  if test "x$DUMPSTATE" != xf ; then
2139      echo -n "" > genmake_state      printf "" > genmake_state
2140      for i in $gm_state ; do      for i in $gm_state ; do
2141          t1="t2=\$$i"          t1="t2=\$$i"
2142          eval $t1          eval $t1

Legend:
Removed from v.1.61  
changed lines
  Added in v.1.95

  ViewVC Help
Powered by ViewVC 1.1.22