/[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.83 by adcroft, Tue Jul 6 18:06:49 2004 UTC revision 1.130 by edhill, Sun Sep 11 18:52:26 2005 UTC
# Line 1  Line 1 
1  #! /usr/bin/env sh  #! /usr/bin/env bash
2  #  #
3  # $Header$  # $Header$
4  #  #
# Line 122  EOF Line 122  EOF
122        stop        stop
123        end        end
124  EOF  EOF
125      test -e Makefile  &&  mv -f Makefile Makefile.bak      test -f $MAKEFILE  &&  mv -f $MAKEFILE $MAKEFILE".tst"
126      cat <<EOF >> Makefile      cat <<EOF >> $MAKEFILE
 %.$tfs : %.F  
127  .SUFFIXES:  .SUFFIXES:
128  genmake_hello.$tfs: genmake_hello.F  .SUFFIXES: .$tfs .F
129          $LN genmake_hello.F genmake_hello.$tfs  .F.$tfs:
130            $LN \$< \$@
131  EOF  EOF
132      $MAKE "genmake_hello."$tfs > /dev/null 2>&1      $MAKE "genmake_hello."$tfs > /dev/null 2>&1
133      RETVAL=$?      RETVAL=$?
134      if test "x$RETVAL" != x0 -o ! -e "genmake_hello."$tfs ; then      if test "x$RETVAL" != x0 -o ! -f "genmake_hello."$tfs ; then
135          if test "x$FS" = x ; then          if test "x$FS" = x ; then
136              FS='for'              FS='for'
137              FS90='fr9'              FS90='fr9'
# Line 148  EOF Line 148  EOF
148              return              return
149          fi          fi
150      fi      fi
151      rm -f genmake_hello.* Makefile      rm -f genmake_hello.* $MAKEFILE
152      test -e Makefile  &&  mv -f Makefile.bak Makefile      test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE
153    
154      #  If we make it here, use the extensions      #  If we make it here, use the extensions
155      FS=$tfs      FS=$tfs
# Line 158  EOF Line 158  EOF
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            test -f $MAKEFILE  &&  mv -f $MAKEFILE $MAKEFILE".tst"
185            #  echo 'MAKEFILE="'$MAKEFILE'"'
186            cat <<EOF >> $MAKEFILE
187    #   THIS IS A TEST MAKEFILE GENERATED BY "genmake2"
188    #
189    #   Some "makedepend" implementations will die if they cannot
190    #   find a Makefile -- so this file is here to gives them an
191    #   empty one to find and parse.
192    EOF
193            cat <<EOF >> genmake_tc.f
194          program test
195          write(*,*) 'test'
196          stop
197          end
198    EOF
199            makedepend genmake_tc.f > /dev/null 2>&1
200            RV1=$?
201            test -f $MAKEFILE  &&  rm -f $MAKEFILE
202            test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE
203            if test "x${RV0}${RV1}" = x00 ; then
204                MAKEDEPEND=makedepend
205            else
206                echo "    a system-default makedepend was not found."
207                
208                #  Try to build the cyrus implementation
209                build_cyrus_makedepend
210                RETVAL=$?
211                if test "x$RETVAL" != x0 ; then
212                    MAKEDEPEND='$(TOOLSDIR)/xmakedepend'
213                fi
214                rm -f ./genmake_cy_md
215            fi
216        else
217            #  echo "MAKEDEPEND=${MAKEDEPEND}"
218            echo "${MAKEDEPEND}" | grep -i cyrus > /dev/null 2>&1
219            RETVAL=$?
220            if test x"$RETVAL" = x0 ; then
221                build_cyrus_makedepend
222            fi
223        fi
224    }
225    
226    
227    build_cyrus_makedepend()  {
228        rm -f ./genmake_cy_md
229        (
230            cd $ROOTDIR/tools/cyrus-imapd-makedepend  \
231                &&  ./configure > /dev/null 2>&1  \
232                &&  make > /dev/null 2>&1
233            if test -x ./makedepend.exe ; then
234                $LN ./makedepend.exe ./makedepend
235            fi
236            ./makedepend ifparser.c > /dev/null 2>&1  \
237                &&  echo "true"
238        ) > ./genmake_cy_md
239        grep true ./genmake_cy_md > /dev/null 2>&1
240        RETVAL=$?
241        rm -f ./genmake_cy_md
242        if test "x$RETVAL" = x0 ; then
243            MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend'
244            return 0
245        else
246            echo "WARNING: unable to build cyrus-imapd-makedepend"
247            return 1
248        fi
249    }
250    
251  # Guess possible config options for this host  # Guess possible config options for this host
252  find_possible_configs()  {  find_possible_configs()  {
253    
# Line 188  find_possible_configs()  { Line 278  find_possible_configs()  {
278          CPP="cpp -traditional -P"          CPP="cpp -traditional -P"
279      fi      fi
280    
281      #  The "original" makedepend is part of the Imake system that is      look_for_makedepend
282      #  most often distributed with XFree86 or with an XFree86 source  
283      #  package.  As a result, many machines (eg. generic Linux) do not      #================================================================
284      #  have a system-default "makedepend" available.  For those      #  look for possible C compilers
285      #  systems, we have two fall-back options:      tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc"
286      #      p_CC=
287      #    1) a makedepend implementation shipped with the cyrus-imapd      for c in $tmp ; do
288      #       package:  ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/          rm -f ./genmake_hello.c  ./genmake_hello
289      #          cat >> genmake_hello.c << EOF
290      #    2) a known-buggy xmakedpend shell script  #include <stdio.h>
291      #  int main(int argc, char **argv) {
292      #  So the choices are, in order:    printf("Hello!\n");
293      #    return 0;
294      #    1) use the user-specified program  }
     #    2) use a system-wide default  
     #    3) locally build and use the cyrus implementation  
     #    4) fall back to the buggy local xmakedpend script  
     #  
     if test "x${MAKEDEPEND}" = x ; then  
       which makedepend > /dev/null 2>&1  
       RV0=$?  
       cat <<EOF >> genmake_tc.f  
       program test  
       write(*,*) 'test'  
       stop  
       end  
295  EOF  EOF
296        makedepend genmake_tc.f > /dev/null 2>&1          $c -o genmake_hello genmake_hello.c > /dev/null 2>&1
297        RV1=$?          RETVAL=$?
298        if test ! "x${RV0}${RV1}" = x00 ; then          if test "x${RETVAL}" = x0 ; then
299           echo "    a system-default makedepend was not found."              p_CC="$p_CC $c"
300            fi
301           #  Try to build the cyrus impl      done
302           rm -f ./genmake_cy_md      rm -f ./genmake_hello.c ./genmake_hello
303           (      if test "x${p_CC}" = x ; then
304               cd $ROOTDIR/tools/cyrus-imapd-makedepend  \          cat 1>&2 <<EOF
305                   &&  ./configure > /dev/null 2>&1  \  
306                   &&  make > /dev/null 2>&1  Error: No C compilers were found in your path.  Please specify one using:
307               if test -x ./makedepend.exe ; then  
308                   $LN ./makedepend.exe ./makedepend      1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
309               fi      2) the CC or MITGCM_CC environment variables.
310               ./makedepend ifparser.c > /dev/null 2>&1  \  
311                   &&  echo "true"  EOF
312           ) > ./genmake_cy_md          exit 1
313           grep true ./genmake_cy_md > /dev/null 2>&1      else
314           RETVAL=$?          echo "  The possible C compilers found in your path are:"
315           if test "x$RETVAL" = x0 ; then          echo "   "$p_CC
316               MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend'          if test "x$CC" = x ; then
317           else              CC=`echo $p_CC | $AWK '{print $1}'`
318               MAKEDEPEND='$(TOOLSDIR)/xmakedepend'              echo "  Setting C compiler to: "$CC
319           fi          fi
          rm -f ./genmake_cy_md  
       fi  
320      fi      fi
321    
322      # look for possible fortran compilers      #================================================================
323      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95"      #  look for possible FORTRAN compilers
324        tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95 gfortran"
325      p_FC=      p_FC=
326      for c in $tmp ; do      for c in $tmp ; do
327          rm -f ./hello.f ./hello          rm -f ./hello.f ./hello
# Line 269  Error: No Fortran compilers were found i Line 346  Error: No Fortran compilers were found i
346    
347      1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),      1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
348      2) a command-line option (eg. "-fc NAME"), or      2) a command-line option (eg. "-fc NAME"), or
349      3) the MITGCM_FC environment variable.      3) the FC or MITGCM_FC environment variables.
350    
351  EOF  EOF
352          exit 1          exit 1
# Line 440  Usage: "$0" [OPTIONS] Line 517  Usage: "$0" [OPTIONS]
517            will search for a working compiler by trying a list of            will search for a working compiler by trying a list of
518            "usual suspects" such as g77, f77, etc.            "usual suspects" such as g77, f77, etc.
519    
520        -cc NAME | --cc NAME | -cc=NAME | --cc=NAME
521              Use "NAME" as the C compiler.  By default, genmake
522              will search for a working compiler by trying a list of
523              "usual suspects" such as gcc, c89, cc, etc.
524    
525      -[no]ieee | --[no]ieee      -[no]ieee | --[no]ieee
526            Do or don't use IEEE numerics.  Note that this option            Do or don't use IEEE numerics.  Note that this option
527            *only* works if it is supported by the OPTFILE that            *only* works if it is supported by the OPTFILE that
528            is being used.            is being used.
529    
530        -ts | --ts
531              Produce timing information per timestep
532    
533      -mpi | --mpi      -mpi | --mpi
534            Include MPI header files and link to MPI libraries            Include MPI header files and link to MPI libraries
535      -mpi=PATH | --mpi=PATH      -mpi=PATH | --mpi=PATH
536            Include MPI header files and link to MPI libraries using MPI_ROOT            Include MPI header files and link to MPI libraries using MPI_ROOT
537            set to PATH. i.e. Include files from $PATH/include, link to libraries            set to PATH. i.e. Include files from \$PATH/include, link to libraries
538            from $PATH/lib and use binaries from $PATH/bin.            from \$PATH/lib and use binaries from \$PATH/bin.
539    
540      -bash NAME      -bash NAME
541            Explicitly specify the Bourne or BASH shell to use            Explicitly specify the Bourne or BASH shell to use
# Line 475  EOF Line 560  EOF
560    
561  #  Build a CPP macro to automate calling C routines from FORTRAN  #  Build a CPP macro to automate calling C routines from FORTRAN
562  get_fortran_c_namemangling()  {  get_fortran_c_namemangling()  {
563    
564        #echo "FC_NAMEMANGLE = \"$FC_NAMEMANGLE\""
565        if test ! "x$FC_NAMEMANGLE" = x ; then
566            return 0
567        fi
568    
569      default_nm="#define FC_NAMEMANGLE(X) X ## _"      default_nm="#define FC_NAMEMANGLE(X) X ## _"
570            
571      cat > genmake_test.c <<EOF      cat > genmake_test.c <<EOF
# Line 492  WARNING: Please contact <MITgcm-support@ Line 583  WARNING: Please contact <MITgcm-support@
583  EOF  EOF
584          return 1          return 1
585      fi      fi
586      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`
587      RETVAL=$?      RETVAL=$?
588      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
589          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 504  WARNING: Please contact <MITgcm-support@ Line 595  WARNING: Please contact <MITgcm-support@
595  EOF  EOF
596          return 1          return 1
597      fi      fi
598      cat > genmake_tcomp.f <<EOF      cat > genmake_tcomp.$FS <<EOF
599        subroutine tcall( string )        subroutine tcall( string )
600        character*(*) string        character*(*) string
601        call tsub( string )        call tsub( string )
602        end        end
603  EOF  EOF
604      $FC $FFLAGS $DEFINES -c genmake_tcomp.f >> genmake_warnings 2>&1      $FC $FFLAGS $DEFINES -c genmake_tcomp.$FS >> genmake_warnings 2>&1
605      RETVAL=$?      RETVAL=$?
606      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
607          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 522  WARNING: Please contact <MITgcm-support@ Line 613  WARNING: Please contact <MITgcm-support@
613  EOF  EOF
614          return 1          return 1
615      fi      fi
616      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`
617      RETVAL=$?      RETVAL=$?
618      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
619          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 576  void FC_NAMEMANGLE(cloc) ( double *curti Line 667  void FC_NAMEMANGLE(cloc) ( double *curti
667   *curtim = *curtim/1.E6;   *curtim = *curtim/1.E6;
668  }  }
669  EOF  EOF
670      make genmake_tc_1.o >> genmake_tc.log 2>&1      make genmake_tc_1.o >> genmake_warnings 2>&1
671      RET_C=$?      RET_C=$?
672      cat <<EOF > genmake_tc_2.f      cat <<EOF > genmake_tc_2.$FS
673        program hello        program hello
674        Real*8 wtime        REAL*8 wtime
675        external cloc        external cloc
676        call cloc(wtime)        call cloc(wtime)
677        print *," HELLO WORLD", wtime        print *," HELLO WORLD", wtime
678        end program hello        end
679  EOF  EOF
680      $FC $FFLAGS -o genmake_tc genmake_tc_2.f genmake_tc_1.o >> genmake_tc.log 2>&1      $FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o >> genmake_warnings 2>&1
681      RET_F=$?      RET_F=$?
682      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_tc.log 2>&1      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_warnings 2>&1
683      RETVAL=$?      RETVAL=$?
684      if test "x$RETVAL" = x0 ; then      if test "x$RETVAL" = x0 ; then
685          HAVE_CLOC=t          HAVE_CLOC=t
# Line 598  EOF Line 689  EOF
689  }  }
690    
691    
692    check_HAVE_SETRLSTK()  {
693        get_fortran_c_namemangling
694        cat <<EOF > genmake_tc_1.c
695    $FC_NAMEMANGLE
696    #include <sys/time.h>
697    #include <sys/resource.h>
698    #include <unistd.h>
699    void FC_NAMEMANGLE(setrlstk) ()
700    {
701        struct rlimit rls;
702        rls.rlim_cur = RLIM_INFINITY;
703        rls.rlim_max = RLIM_INFINITY;
704        setrlimit(RLIMIT_STACK, &rls);
705        return;
706    }
707    EOF
708        make genmake_tc_1.o >> genmake_warnings 2>&1
709        RET_C=$?
710        cat <<EOF > genmake_tc_2.$FS
711          program hello
712          external setrlstk
713          call setrlstk()
714          end
715    EOF
716        $FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o >> genmake_warnings 2>&1
717        RET_F=$?
718        test -x ./genmake_tc  &&  ./genmake_tc >> genmake_warnings 2>&1
719        RETVAL=$?
720        if test "x$RETVAL" = x0 ; then
721            HAVE_SETRLSTK=t
722            DEFINES="$DEFINES -DHAVE_SETRLSTK"
723        fi
724        rm -f genmake_tc*
725    }
726    
727    
728    check_HAVE_STAT()  {
729        get_fortran_c_namemangling
730        cat <<EOF > genmake_tc_1.c
731    $FC_NAMEMANGLE
732    #include <stdio.h>
733    #include <stdlib.h>
734    #include <unistd.h>
735    #include <sys/stat.h>
736    #include <sys/types.h>
737    void FC_NAMEMANGLE(tfsize) ( int *nbyte )
738    {
739        char name[512];
740        struct stat astat;
741    
742        name[0] = 'a'; name[1] = '\0';
743        if (! stat(name, &astat))
744            *nbyte = (int)(astat.st_size);
745        else
746            *nbyte = -1;
747    }
748    EOF
749        make genmake_tc_1.o >> genmake_tc.log 2>&1
750        RET_C=$?
751        cat <<EOF > genmake_tc_2.$FS
752          program hello
753          integer nbyte
754          call tfsize(nbyte)
755          print *," HELLO WORLD", nbyte
756          end
757    EOF
758        $FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o >> genmake_tc.log 2>&1
759        RET_F=$?
760        test -x ./genmake_tc  &&  ./genmake_tc >> genmake_tc.log 2>&1
761        RETVAL=$?
762        if test "x$RETVAL" = x0 ; then
763            HAVE_STAT=t
764            DEFINES="$DEFINES -DHAVE_STAT"
765        fi
766        rm -f genmake_tc*
767    }
768    
769    
770  check_netcdf_libs()  {  check_netcdf_libs()  {
771      cat <<EOF > genmake_tnc.for      if test ! "x$SKIP_NETCDF_CHECK" = x ; then
772            return
773        fi
774        echo "" > genmake_tnc.log
775        cat <<EOF > genmake_tnc.F
776        program fgennc        program fgennc
777  #include "netcdf.inc"  #include "netcdf.inc"
778    EOF
779        if test ! "x$MPI" = x ; then
780            echo '#include "mpif.h"' >> genmake_tnc.F
781        fi
782        cat <<EOF >> genmake_tnc.F
783        integer iret, ncid, xid        integer iret, ncid, xid
784        iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)        iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)
785        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
# Line 611  check_netcdf_libs()  { Line 789  check_netcdf_libs()  {
789        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
790        end        end
791  EOF  EOF
792      $CPP genmake_tnc.for > genmake_tnc.f  \      echo "Executing:" > genmake_tnc.log
793          &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f $LIBS >> genmake_tnc.log 2>&1      echo "  $CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS" \
794            > genmake_tnc.log
795        RET_CPP=f
796        $CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS 2>/dev/null  \
797            &&  RET_CPP=t
798        if test "x$RET_CPP" = xf ; then
799            echo "  WARNING: CPP failed to pre-process the netcdf test." \
800                > genmake_tnc.log
801            echo "    Please check that \$INCLUDES is properly set." \
802                > genmake_tnc.log
803        fi
804        echo "Executing:" > genmake_tnc.log
805        echo "  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS" > genmake_tnc.log
806        echo "  $LINK -o genmake_tnc.o $LIBS" > genmake_tnc.log
807        $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
808            &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1
809      RET_COMPILE=$?      RET_COMPILE=$?
810      test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1  
811      RETVAL=$?      #EH3  Remove test program execution for machines that either disallow
812      if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then      #EH3  execution or cannot support it (eg. cross-compilers)
813        #EH3
814        #EH3 test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1
815        #EH3 RETVAL=$?
816        #EH3 if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
817    
818        if test "x$RET_COMPILE" = x0 ; then
819          HAVE_NETCDF=t          HAVE_NETCDF=t
820      else      else
821          # try again with "-lnetcdf" added to the libs          # try again with "-lnetcdf" added to the libs
822          $CPP genmake_tnc.for > genmake_tnc.f  \          $CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS 2>/dev/null  \
823              &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f \              &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
824              $LIBS -lnetcdf >> genmake_tnc_2.log 2>&1              &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1
825          RET_COMPILE=$?          RET_COMPILE=$?
826          test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1          if test "x$RET_COMPILE" = x0 ; then
         RETVAL=$?  
         if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then  
827              LIBS="$LIBS -lnetcdf"              LIBS="$LIBS -lnetcdf"
828              HAVE_NETCDF=t              HAVE_NETCDF=t
829          else          else
# Line 649  PLATFORM= Line 846  PLATFORM=
846  LN=  LN=
847  S64=  S64=
848  KPP=  KPP=
849  FC=  #FC=
850  CPP=  #CC=gcc
851    #CPP=
852  LINK=  LINK=
853  DEFINES=  DEFINES=
854  PACKAGES=  PACKAGES=
855  ENABLE=  ENABLE=
856  DISABLE=  DISABLE=
857  MAKEFILE=  # MAKEFILE=
858  MAKEDEPEND=  # MAKEDEPEND=
859  PDEPEND=  PDEPEND=
860  DUMPSTATE=t  DUMPSTATE=t
861  PDEFAULT=  PDEFAULT=
862  OPTFILE=  OPTFILE=
863  INCLUDES="-I."  INCLUDES="-I. $INCLUDES"
864  FFLAGS=  FFLAGS=
865  FOPTIM=  FOPTIM=
866  CFLAGS=  CFLAGS=
# Line 675  NOOPTFILES= Line 873  NOOPTFILES=
873  NOOPTFLAGS=  NOOPTFLAGS=
874  MPI=  MPI=
875  MPIPATH=  MPIPATH=
876    TS=
877    
878  # DEFINES checked by test compilation  # DEFINES checked by test compilation or command-line
879  HAVE_SYSTEM=  HAVE_SYSTEM=
880  HAVE_FDATE=  HAVE_FDATE=
881  FC_NAMEMANGLE=  FC_NAMEMANGLE=
882  HAVE_CLOC=  HAVE_CLOC=
883    HAVE_SETRLSTK=
884    HAVE_STAT=
885  HAVE_NETCDF=  HAVE_NETCDF=
886  HAVE_ETIME=  HAVE_ETIME=
887    IGNORE_TIME=
888    
889  MODS=  MODS=
890  TOOLSDIR=  TOOLSDIR=
# Line 693  STANDARDDIRS="USE_THE_DEFAULT" Line 895  STANDARDDIRS="USE_THE_DEFAULT"
895  G2ARGS=  G2ARGS=
896  BASH=  BASH=
897  PWD=`pwd`  PWD=`pwd`
898  MAKE=make  test "x$MAKE" = x  &&  MAKE=make
899  AWK=awk  test "x$AWK" = x   &&  AWK=awk
900  THISHOSTNAME=`hostname`  THISHOST=`hostname`
901  THISCWD=`pwd`  THISCWD=`pwd`
902  THISDATE=`date`  THISDATE=`date`
903    THISUSER=`echo $USER`
904    THISVER=
905  MACHINE=`uname -a`  MACHINE=`uname -a`
906  EXECUTABLE=  EXECUTABLE=
907  EXEHOOK=  EXEHOOK=
# Line 726  TAMC_EXTRA= Line 930  TAMC_EXTRA=
930    
931  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
932  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
933  gm_s2="FC CPP IEEE MPI JAM DUMPSTATE STANDARDDIRS"  gm_s2="FC CPP IEEE TS MPI JAM DUMPSTATE STANDARDDIRS"
934    
935  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
936  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPEND PDEPEND PDEFAULT INCLUDES FFLAGS FOPTIM "
937  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
938  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOSTNAME THISDATE MACHINE"  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE"
939  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
940  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"
941    
# Line 763  for i in . $MODS ; do Line 967  for i in . $MODS ; do
967      fi      fi
968  done  done
969  printf "  getting local config information:  "  printf "  getting local config information:  "
970  if test -e $gm_local ; then  if test -f $gm_local ; then
971      echo "using $gm_local"      echo "using $gm_local"
972      . $gm_local      . $gm_local
973      # echo "DISABLE=$DISABLE"      # echo "DISABLE=$DISABLE"
# Line 772  else Line 976  else
976      echo "none found"      echo "none found"
977  fi  fi
978    
979  #  echo "$0::$1:$2:$3:$4:$5:$6:$7:"  #echo "$0::$1:$2:$3:$4:$5:$6:$7:"
980  #OPTIONS=  #OPTIONS=
981  #n=0  #n=0
982  #for i ; do  #for i ; do
# Line 784  fi Line 988  fi
988  #done  #done
989  #parse_options  #parse_options
990  ac_prev=  ac_prev=
991  for ac_option ; do  for ac_option in "$@" ; do
992    
993      G2ARGS="$G2ARGS \"$ac_option\""      G2ARGS="$G2ARGS \"$ac_option\""
994    
# Line 880  for ac_option ; do Line 1084  for ac_option ; do
1084  #               ac_prev=cpp ;;  #               ac_prev=cpp ;;
1085  #           -cpp=* | --cpp=*)  #           -cpp=* | --cpp=*)
1086  #               CPP=$ac_optarg ;;  #               CPP=$ac_optarg ;;
1087                        
1088            -cc | --cc)
1089                ac_prev=CC ;;
1090            -cc=* | --cc=*)
1091                CC=$ac_optarg ;;
1092            
1093          -fortran | --fortran | -fc | --fc)          -fortran | --fortran | -fc | --fc)
1094              ac_prev=FC ;;              ac_prev=FC ;;
1095          -fc=* | --fc=*)          -fc=* | --fc=*)
# Line 901  for ac_option ; do Line 1110  for ac_option ; do
1110          -noieee | --noieee)          -noieee | --noieee)
1111              IEEE= ;;              IEEE= ;;
1112    
1113            -ts | --ts)
1114                TS=true ;;
1115    
1116          -mpi | --mpi)          -mpi | --mpi)
1117              MPI=true ;;              MPI=true ;;
1118          -mpi=* | --mpi=*)          -mpi=* | --mpi=*)
# Line 924  for ac_option ; do Line 1136  for ac_option ; do
1136              ac_prev=TAMC_EXTRA ;;              ac_prev=TAMC_EXTRA ;;
1137          -tamc_extra=* | --tamc_extra=*)          -tamc_extra=* | --tamc_extra=*)
1138              TAMC_EXTRA=$ac_optarg ;;              TAMC_EXTRA=$ac_optarg ;;
1139            
1140            -ignoretime | -ignore_time | --ignoretime | --ignore_time)
1141                IGNORE_TIME="-DIGNORE_TIME" ;;
1142    
1143          -*)          -*)
1144              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
# Line 939  for ac_option ; do Line 1154  for ac_option ; do
1154            
1155  done  done
1156    
1157    
1158  if test -f ./.genmakerc ; then  if test -f ./.genmakerc ; then
1159      echo      echo
1160      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""      echo "WARNING: genmake2 has detected a copy of the old-style \"./.genmakerc\""
# Line 951  if test -f ./.genmakerc ; then Line 1167  if test -f ./.genmakerc ; then
1167      echo      echo
1168  fi  fi
1169    
1170    #  Find the MITgcm ${ROOTDIR}
1171  if test "x${ROOTDIR}" = x ; then  if test "x${ROOTDIR}" = x ; then
1172      if test "${PWD##/*/}" = "bin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1173        if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then
1174          ROOTDIR=".."          ROOTDIR=".."
1175      else      else
1176          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
# Line 976  if test ! -d ${ROOTDIR} ; then Line 1194  if test ! -d ${ROOTDIR} ; then
1194      exit 1      exit 1
1195  fi  fi
1196    
1197    #  Find the MITgcm ${THISVER}
1198    if test -f "${ROOTDIR}/doc/tag-index" ; then
1199        THISVER=`grep '^checkpoint' ${ROOTDIR}/doc/tag-index | head -1`
1200    fi
1201    
1202    if test "x$MAKEFILE" = x ; then
1203        MAKEFILE="Makefile"
1204    fi
1205    
1206  echo "  getting OPTFILE information:  "  echo "  getting OPTFILE information:  "
1207  if test "x${OPTFILE}" = x ; then  if test "x${OPTFILE}" = x ; then
1208      if test "x$MITGCM_OF" = x ; then      if test "x$MITGCM_OF" = x ; then
# Line 1005  if test "x$OPTFILE" != xNONE ; then Line 1232  if test "x$OPTFILE" != xNONE ; then
1232      fi      fi
1233  fi  fi
1234    
 #  Check for broken systems that cannot correctly distinguish *.F and *.f files  
 # check_for_broken_Ff  
   
1235  echo "  getting AD_OPTFILE information:  "  echo "  getting AD_OPTFILE information:  "
1236  if test "x${AD_OPTFILE}" = x ; then  if test "x${AD_OPTFILE}" = x ; then
1237      if test "x$MITGCM_AD_OF" = x ; then      if test "x$MITGCM_AD_OF" = x ; then
# Line 1035  if test "x${AD_OPTFILE}" != xNONE ; then Line 1259  if test "x${AD_OPTFILE}" != xNONE ; then
1259      fi      fi
1260  fi  fi
1261    
1262  #  Check that FC, LINK, CPP, S64, LN, and MAKE are defined.  If not,  #====================================================================
1263    #  Set default values if not set by the optfile
1264    #
1265    #  Check that FC, CC, LINK, CPP, S64, LN, and MAKE are defined.  If not,
1266  #  either set defaults or complain and abort!  #  either set defaults or complain and abort!
1267  if test ! "x$BASH" = x ; then  if test ! "x$BASH" = x ; then
1268      # add a trailing space so that it works within the Makefile syntax (see below)      # add a trailing space so that it works within the Makefile syntax (see below)
# Line 1051  Error: no Fortran compiler: please speci Line 1278  Error: no Fortran compiler: please speci
1278  EOF  EOF
1279      exit 1      exit 1
1280  fi  fi
1281    if test "x$CC" = x ; then
1282        CC=cc
1283    #     cat <<EOF 1>&2
1284    # Error: no C compiler: please specify using one of the following:
1285    #   1) within the options file ("CC=...") as specified by "-of=OPTFILE"
1286    #   2) the "-cc=XXX" command-line option
1287    #   3) the "./genmake_local" file
1288    # EOF
1289    #     exit 1
1290    fi
1291  if test "x$LINK" = x ; then  if test "x$LINK" = x ; then
1292      LINK=$FC      LINK=$FC
1293  fi  fi
# Line 1085  EOF Line 1322  EOF
1322  else  else
1323      rm -f test_cpp      rm -f test_cpp
1324  fi  fi
1325  if test "x$MAKEDEPEND" = x ; then  look_for_makedepend
     MAKEDEPEND=makedepend  
 fi  
1326  if test "x$LN" = x ; then  if test "x$LN" = x ; then
1327      LN="ln -s"      LN="ln -s"
1328  fi  fi
# Line 1113  if test ! "x$MPI" = x ; then Line 1348  if test ! "x$MPI" = x ; then
1348        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1349  fi  fi
1350    
1351    if test ! "x$TS" = x ; then
1352          echo "  Turning on timing per timestep"
1353          DEFINES="$DEFINES -DTIME_PER_TIMESTEP"
1354    fi
1355    
1356  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
1357  printf "  Do we have the system() command using $FC...  "  printf "  Do we have the system() command using $FC...  "
1358  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1359        program hello        program hello
1360        call system('echo hi')        call system('echo hi')
1361        end        end
1362  EOF  EOF
1363  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1364  RETVAL=$?  RETVAL=$?
1365  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1366      HAVE_SYSTEM=t      HAVE_SYSTEM=t
# Line 1133  fi Line 1373  fi
1373  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1374    
1375  printf "  Do we have the fdate() command using $FC...  "  printf "  Do we have the fdate() command using $FC...  "
1376  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1377        program hello        program hello
1378        CHARACTER(128) string        CHARACTER*(128) string
1379        string = ' '        string = ' '
1380        call fdate( string )        call fdate( string )
1381        print *, string        print *, string
1382        end        end
1383  EOF  EOF
1384  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1385  RETVAL=$?  RETVAL=$?
1386  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1387      HAVE_FDATE=t      HAVE_FDATE=t
# Line 1154  fi Line 1394  fi
1394  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1395    
1396  printf "  Do we have the etime() command using $FC...  "  printf "  Do we have the etime() command using $FC...  "
1397  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1398        program hello        program hello
1399        REAL*4 ACTUAL, TARRAY(2)        REAL*4 ACTUAL, TARRAY(2)
1400        EXTERNAL ETIME        EXTERNAL ETIME
# Line 1163  cat > genmake_tcomp.f <<EOF Line 1403  cat > genmake_tcomp.f <<EOF
1403        print *, tarray        print *, tarray
1404        end        end
1405  EOF  EOF
1406  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1407  RETVAL=$?  RETVAL=$?
1408  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1409      HAVE_ETIME=t      HAVE_ETIME=t
# Line 1184  else Line 1424  else
1424  fi  fi
1425  rm -f genmake_t*  rm -f genmake_t*
1426    
1427    printf "  Can we unlimit the stack size using $FC...  "
1428    check_HAVE_SETRLSTK
1429    if test "x$HAVE_SETRLSTK" != x ; then
1430        echo "yes"
1431    else
1432        echo "no"
1433    fi
1434    rm -f genmake_t*
1435    
1436    printf "  Can we use stat() through C calls...  "
1437    check_HAVE_STAT
1438    if test "x$HAVE_STAT" != x ; then
1439        echo "yes"
1440    else
1441        echo "no"
1442    fi
1443    rm -f genmake_t*
1444    
1445  printf "  Can we create NetCDF-enabled binaries...  "  printf "  Can we create NetCDF-enabled binaries...  "
1446  check_netcdf_libs  check_netcdf_libs
1447  if test "x$HAVE_NETCDF" != x ; then  if test "x$HAVE_NETCDF" != x ; then
# Line 1191  if test "x$HAVE_NETCDF" != x ; then Line 1449  if test "x$HAVE_NETCDF" != x ; then
1449  else  else
1450      echo "no"      echo "no"
1451  fi  fi
1452    DEFINES="$DEFINES $IGNORE_TIME"
1453    
1454  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
1455  printf "  Adding MODS directories:  "  printf "  Adding MODS directories:  "
# Line 1208  for d in $MODS ; do Line 1466  for d in $MODS ; do
1466  done  done
1467  echo  echo
1468    
 if test "x$MAKEFILE" = x ; then  
     MAKEFILE="Makefile"  
 fi  
1469  if test "x${PLATFORM}" = x ; then  if test "x${PLATFORM}" = x ; then
1470      PLATFORM=$p_PLATFORM      PLATFORM=$p_PLATFORM
1471  fi  fi
1472    
1473  if test "x${EXEDIR}" = x ; then  if test "x${EXEDIR}" = x ; then
1474      if test "${PWD##/*/}" = "bin" -a -d ../exe -a $ROOTDIR = .. ; then      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1475        if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then
1476          EXEDIR=../exe          EXEDIR=../exe
1477      else      else
1478          EXEDIR=.          EXEDIR=.
# Line 1235  if test ! -d ${TOOLSDIR} ; then Line 1491  if test ! -d ${TOOLSDIR} ; then
1491      exit 1      exit 1
1492  fi  fi
1493  if test "x$S64" = x ; then  if test "x$S64" = x ; then
1494      S64='$(TOOLSDIR)/set64bitConst.sh'      echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.sh > /dev/null 2>&1
1495        RETVAL=$?
1496        if test "x${RETVAL}" = x0 ; then
1497            S64='$(TOOLSDIR)/set64bitConst.sh'
1498        else
1499            echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.csh > /dev/null 2>&1
1500            RETVAL=$?
1501            if test "x${RETVAL}" = x0 ; then
1502                S64='$(TOOLSDIR)/set64bitConst.csh'
1503            else
1504                cat <<EOF
1505    
1506    ERROR: neither of the two default scripts:
1507    
1508        ${TOOLSDIR}/set64bitConst.sh
1509        ${TOOLSDIR}/set64bitConst.csh
1510    
1511      are working so please check paths or specify (with \$S64) a
1512      working version of this script.
1513    
1514    EOF
1515                exit 1
1516            fi
1517        fi
1518  fi  fi
1519  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`
1520    
# Line 1334  else Line 1613  else
1613              PACKAGES="$PACKAGES $i"              PACKAGES="$PACKAGES $i"
1614          done          done
1615          echo "    before group expansion packages are: $PACKAGES"          echo "    before group expansion packages are: $PACKAGES"
1616          while ! expand_pkg_groups; do echo > /dev/null; done          RET=1
1617            while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
1618          echo "    after group expansion packages are:  $PACKAGES"          echo "    after group expansion packages are:  $PACKAGES"
1619      fi      fi
1620  fi  fi
# Line 1379  done Line 1659  done
1659  rm -f ./.tmp_pack  rm -f ./.tmp_pack
1660  echo "    packages are:  $PACKAGES"  echo "    packages are:  $PACKAGES"
1661    
1662    #  Check availability of NetCDF and then either build the MNC template
1663    #  files or delete mnc from the list of available packages.
1664    echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1
1665    RETVAL=$?
1666    if test "x$RETVAL" = x0 ; then
1667        if test "x$HAVE_NETCDF" != xt ; then
1668            cat <<EOF
1669    
1670    *********************************************************************
1671    WARNING: the "mnc" package was enabled but tests failed to compile
1672      NetCDF applications.  Please check that:
1673    
1674      1) NetCDF is correctly installed for this compiler and
1675      2) the LIBS variable (within the "optfile") specifies the correct
1676           NetCDF library to link against.
1677    
1678      Due to this failure, the "mnc" package is now DISABLED.
1679    *********************************************************************
1680    
1681    EOF
1682            PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`
1683            DISABLE="$DISABLE mnc"
1684        else
1685            ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1
1686            RETVAL=$?
1687            if test "x${RETVAL}" = x0 ; then
1688                rm -f make_mnc.errors
1689            else
1690                echo "Error: problem encountered while building source files in pkg/mnc:"
1691                cat make_mnc.errors 1>&2
1692                exit 1
1693            fi
1694        fi
1695    fi
1696    
1697  echo "  applying package dependency rules"  echo "  applying package dependency rules"
1698  ck=  ck=
1699  while test "x$ck" != xtt ; do  while test "x$ck" != xtt ; do
# Line 1443  while test "x$ck" != xtt ; do Line 1758  while test "x$ck" != xtt ; do
1758              echo "  the dependency rules for \"$dname\""              echo "  the dependency rules for \"$dname\""
1759              exit 1              exit 1
1760          fi          fi
1761          i=$(( $i + 1 ))          i=`echo "$i + 1" | bc -l`
1762            #i=$(( $i + 1 ))
1763      done      done
1764      ck=$ck"t"      ck=$ck"t"
1765  done  done
# Line 1462  for i in $PACKAGES ; do Line 1778  for i in $PACKAGES ; do
1778      fi      fi
1779  done  done
1780    
 #  Build MNC templates and check for ability to build and use NetCDF  
 echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1  
 RETVAL=$?  
 if test "x$RETVAL" = x0 ; then  
     ( cd $ROOTDIR"/pkg/mnc" && $MAKE templates ) > make_mnc.errors 2>&1  
     RETVAL=$?  
     if test "x${RETVAL}" = x0 ; then  
         rm -f make_mnc.errors  
     else  
         echo "Error: problem encountered while building source files in pkg/mnc:"  
         cat make_mnc.errors 1>&2  
         exit 1  
     fi  
     if test "x$HAVE_NETCDF" != xt ; then  
         cat <<EOF  
   
 WARNING: the "mnc" package has been enabled but tests failed to  
   compile and/or execute NetCDF applications.  Please check that:  
   
   1) NetCDF is installed for your compiler and  
   2) the LIBS variable (within the 'optfile") specifies the correct  
        NetCDF library to link against.  
     
 EOF  
     fi  
 fi  
   
1781  # Create a list of #define and #undef to enable/disable packages  # Create a list of #define and #undef to enable/disable packages
1782  PACKAGES_DOT_H=PACKAGES_CONFIG.h  PACKAGES_DOT_H=PACKAGES_CONFIG.h
1783  #  The following UGLY HACK sets multiple "#undef"s and it needs to go  #  The following UGLY HACK sets multiple "#undef"s and it needs to go
# Line 1508  for n in $names ; do Line 1797  for n in $names ; do
1797              fi              fi
1798          done          done
1799          if test "x$has_pack" = xf ; then          if test "x$has_pack" = xf ; then
1800              undef=`echo "ALLOW_$n" | $AWK '{print toupper($0)}'`              undef=`echo "ALLOW_$n" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
1801              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"
1802          fi          fi
1803      fi      fi
1804  done  done
1805  ENABLED_PACKAGES=  ENABLED_PACKAGES=
1806  for i in $PACKAGES ; do  for i in $PACKAGES ; do
1807      def=`echo "ALLOW_$i" | $AWK '{print toupper($0)}'`      def=`echo "ALLOW_$i" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
1808      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"
1809  #eh3 DEFINES="$DEFINES -D$def"  #eh3 DEFINES="$DEFINES -D$def"
1810    
# Line 1599  for i in $SOURCEDIRS ; do Line 1888  for i in $SOURCEDIRS ; do
1888          cat $i/$j >> ad_files          cat $i/$j >> ad_files
1889      done      done
1890  done  done
1891    if test ! "x"$FS = "x.f" ; then
1892        cat ad_files | sed -e "s/\.f/.$FS/g" > ad_files_f
1893        mv -f ad_files_f ad_files
1894    fi
1895    
1896  echo  echo
1897  echo "===  Creating the Makefile  ==="  echo "===  Creating the Makefile  ==="
1898  echo "  setting INCLUDES"  echo "  setting INCLUDES"
1899  for i in $INCLUDEDIRS ; do  for i in $INCLUDEDIRS ; do
1900      if ! test -d $i ; then      if test ! -d $i ; then
 #       INCLUDES="$INCLUDES -I$i"  
 #   else  
1901          echo "Warning: can't find INCLUDEDIRS=\"$i\""          echo "Warning: can't find INCLUDEDIRS=\"$i\""
1902      fi      fi
1903  done  done
# Line 1637  for d in $alldirs ; do Line 1927  for d in $alldirs ; do
1927                          ;;                          ;;
1928                    ./FC_NAMEMANGLE.h)                    ./FC_NAMEMANGLE.h)
1929                          ;;                          ;;
1930                      ./BUILD_INFO.h)
1931                            ;;
1932                    *)                    *)
1933                          touch .links.tmp/$sf                          touch .links.tmp/$sf
1934                          deplist="$deplist $sf"                          deplist="$deplist $sf"
1935                          ;;                          ;;
1936                  esac                  esac
1937                  extn=`echo $sf | $AWK -F '.' '{print $NF}'`                  extn=`echo $sf | $AWK -F. '{print $NF}'`
1938                  case $extn in                  case $extn in
1939                      F)                      F)
1940                          echo    " \\"  >> srclist.inc                          echo    " \\"  >> srclist.inc
# Line 1682  echo "" >> f90srclist.inc Line 1974  echo "" >> f90srclist.inc
1974  echo "" >> hlist.inc  echo "" >> hlist.inc
1975  echo "" >> ad_flow_files.inc  echo "" >> ad_flow_files.inc
1976    
1977  if test -e $MAKEFILE ; then  if test -f $MAKEFILE ; then
1978      mv -f $MAKEFILE "$MAKEFILE.bak"      mv -f $MAKEFILE "$MAKEFILE.bak"
1979  fi  fi
1980  echo "  Writing makefile: $MAKEFILE"  echo "  Writing makefile: $MAKEFILE"
# Line 1693  echo "#    $THISDATE" >> $MAKEFILE Line 1985  echo "#    $THISDATE" >> $MAKEFILE
1985  echo "# by the command:" >> $MAKEFILE  echo "# by the command:" >> $MAKEFILE
1986  echo "#    $0 $G2ARGS" >> $MAKEFILE  echo "#    $0 $G2ARGS" >> $MAKEFILE
1987  echo "# executed by:" >> $MAKEFILE  echo "# executed by:" >> $MAKEFILE
1988  echo "#    $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE
1989    
1990  EXE_AD=$EXECUTABLE"_ad"  EXE_AD=$EXECUTABLE"_ad"
1991  EXE_FTL=$EXECUTABLE"_ftl"  EXE_FTL=$EXECUTABLE"_ftl"
# Line 1739  ENABLED_PACKAGES = ${ENABLED_PACKAGES} Line 2031  ENABLED_PACKAGES = ${ENABLED_PACKAGES}
2031  DISABLED_PACKAGES = ${DISABLED_PACKAGES}  DISABLED_PACKAGES = ${DISABLED_PACKAGES}
2032    
2033  # These files are created by Makefile  # These files are created by Makefile
2034  SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h  SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h BUILD_INFO.h
2035    
2036  EOF  EOF
2037    
# Line 1758  KPP = ${KPP} Line 2050  KPP = ${KPP}
2050  FC = ${FC}  FC = ${FC}
2051  # Fortran compiler  # Fortran compiler
2052  F90C = ${F90C}  F90C = ${F90C}
2053    # C compiler
2054    CC = ${CC}
2055  # Link editor  # Link editor
2056  LINK = ${LINK} ${LDADD}  LINK = ${LINK} ${LDADD}
2057    
# Line 1780  CFLAGS = ${CFLAGS} Line 2074  CFLAGS = ${CFLAGS}
2074  NOOPTFILES = ${NOOPTFILES}  NOOPTFILES = ${NOOPTFILES}
2075  NOOPTFLAGS = ${NOOPTFLAGS}  NOOPTFLAGS = ${NOOPTFLAGS}
2076  # Flags and libraries needed for linking  # Flags and libraries needed for linking
2077  LIBS = ${LIBS} \$(XLIBS)  LIBS = ${LIBS}
2078  # Name of the Mekfile  # Name of the Mekfile
2079  MAKEFILE=${MAKEFILE}  MAKEFILE=${MAKEFILE}
2080    
# Line 1793  cat hlist.inc         >> $MAKEFILE Line 2087  cat hlist.inc         >> $MAKEFILE
2087  cat ad_flow_files.inc >> $MAKEFILE  cat ad_flow_files.inc >> $MAKEFILE
2088  echo >> $MAKEFILE  echo >> $MAKEFILE
2089  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE
2090  echo 'F90FILES =  $(F90SRCFILES:.F=.'$FS90')' >> $MAKEFILE  echo 'F90FILES =  $(F90SRCFILES:.F90=.'$FS90')' >> $MAKEFILE
2091  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE
2092  echo >> $MAKEFILE  echo >> $MAKEFILE
2093  echo '.SUFFIXES:' >> $MAKEFILE  echo '.SUFFIXES:' >> $MAKEFILE
# Line 1841  makefile: Line 2135  makefile:
2135  cleanlinks:  cleanlinks:
2136          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
2137    
2138  # Special targets ($SPECIAL_FILES) which are create by make  # Special targets (SPECIAL_FILES) which are create by make
2139  ${PACKAGES_DOT_H}:  ${PACKAGES_DOT_H}:
2140          @echo Creating \$@ ...          @echo Creating \$@ ...
2141          @$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) > \$@          @$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) > \$@
# Line 1852  FC_NAMEMANGLE.h: Line 2146  FC_NAMEMANGLE.h:
2146          @echo Creating \$@ ...          @echo Creating \$@ ...
2147          echo "$FC_NAMEMANGLE" > \$@          echo "$FC_NAMEMANGLE" > \$@
2148    
2149    BUILD_INFO.h:
2150            @echo Creating \$@ ...
2151    EOF
2152    
2153    test ! "x$THISVER" = x  && echo "       -echo \"#define THISVER '$THISVER'\" > \$@"   >> $MAKEFILE
2154    test ! "x$THISUSER" = x && echo "       -echo \"#define THISUSER '$THISUSER'\" >> \$@" >> $MAKEFILE
2155    test ! "x$THISDATE" = x && echo "       -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE
2156    test ! "x$THISHOST" = x && echo "       -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE
2157    
2158    cat >>$MAKEFILE <<EOF
2159    
2160  # The normal chain of rules is (  .F - .$FS - .o  )  # The normal chain of rules is (  .F - .$FS - .o  )
2161    
2162  %.o : %.F  ## This nullifies any default implicit rules concerning these two file types:
2163    ## %.o : %.F
2164    
2165  .F.$FS:  .F.$FS:
2166          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
# Line 1910  cat >>$MAKEFILE <<EOF Line 2216  cat >>$MAKEFILE <<EOF
2216    
2217  # ... AD ...  # ... AD ...
2218  adall: ad_taf  adall: ad_taf
2219  adtaf: ad_taf_output.f  adtaf: ad_taf_output.$FS
2220  adtamc: ad_tamc_output.f  adtamc: ad_tamc_output.$FS
2221    
2222  ad_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ad_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)
2223          @$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          @$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
2224          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
2225          -rm -f ad_config.template          -rm -f ad_config.template
2226          @make \$(F77FILES)          @make \$(F77FILES)
2227          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2228          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.$FS
2229    
2230  ad_taf_output.f: ad_input_code.f  ad_taf_output.$FS: ad_input_code.$FS
2231          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2232          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2233    
2234  adtafonly:  adtafonly:
2235          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2236          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.f          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
2237    
2238  ad_taf: ad_taf_output.o \$(OBJFILES)  ad_taf: ad_taf_output.o \$(OBJFILES)
2239          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2240    
2241  ad_tamc_output.f: ad_input_code.f  ad_tamc_output.$FS: ad_input_code.$FS
2242          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.f          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS
2243          cat ad_input_code_ad.f | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.f          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_tamc_output.$FS
2244    
2245  ad_tamc: ad_tamc_output.o \$(OBJFILES)  ad_tamc: ad_tamc_output.o \$(OBJFILES)
2246          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
2247    
2248    adonlyfwd:
2249            patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff
2250    
2251    adtrick:
2252            patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff
2253    
2254  # ... FTL ...  # ... FTL ...
2255  ftlall: ftl_taf  ftlall: ftl_taf
2256  ftltaf: ftl_taf_output.f  ftltaf: ftl_taf_output.$FS
2257  ftltamc: ftl_tamc_output.f  ftltamc: ftl_tamc_output.$FS
2258    
2259  ftl_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ftl_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)
2260          @$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          @$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
2261          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
2262          -rm -f ftl_config.template          -rm -f ftl_config.template
2263          @make \$(F77FILES)          @make \$(F77FILES)
2264          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2265          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS
2266    
2267  ftl_taf_output.f: ftl_input_code.f  ftl_taf_output.$FS: ftl_input_code.$FS
2268          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2269          cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2270    
2271  ftltafonly:  ftltafonly:
2272          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2273          cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.f          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
2274    
2275  ftl_taf: ftl_taf_output.o \$(OBJFILES)  ftl_taf: ftl_taf_output.o \$(OBJFILES)
2276          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
2277    
2278  ftl_tamc_output.f: ftl_input_code.f  ftl_tamc_output.$FS: ftl_input_code.$FS
2279          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.f          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS
2280          cat ftl_input_code_ftl.f | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.f          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_tamc_output.$FS
2281    
2282  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2283          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
2284    
2285    
2286  # ... SVD ...  # ... SVD ...
2287  svdtaf: ad_taf_output.f ftl_taf_output.f  svdtaf: ad_taf_output.$FS ftl_taf_output.$FS
2288  svdall: svd_taf          @echo "--->>> Only ran TAF to generate SVD code!    <<<---"
2289            @echo "--->>> Do make svdall afterwards to compile. <<<---"
2290    svdall: svd_touch svd_taf
2291    
2292  svd_taf: ad_taf_output.o ftl_taf_output.o \$(OBJFILES)  svd_taf: \$(OBJFILES)
2293          \$(LINK) -o mitgcmuv_svd \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o ftl_taf_output.o \$(LIBS)          \$(LINK) -o mitgcmuv_svd \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o ftl_taf_output.o \$(LIBS)
2294    
2295            @echo "--->>> Only COMPILE svd code! <<<---"
2296            @echo "--->>> Assumes you previously <<<---"
2297            @echo "--->>> did make svdtaf        <<<---"
2298    
2299    svd_touch:
2300            @echo "--->>> Only COMPILE svd code! <<<---"
2301            @echo "--->>> Assumes you previously <<<---"
2302            @echo "--->>> did make svdtaf        <<<---"
2303            touch ad_taf_output.$FS ftl_taf_output.$FS
2304            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ad_taf_output.$FS
2305            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ftl_taf_output.$FS
2306            @$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
2307            cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2308            -rm -f ftl_config.template
2309    
2310  #=========================================  #=========================================
2311    

Legend:
Removed from v.1.83  
changed lines
  Added in v.1.130

  ViewVC Help
Powered by ViewVC 1.1.22