/[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.93 by edhill, Fri Jul 30 19:53:15 2004 UTC revision 1.149 by edhill, Thu May 11 20:28:50 2006 UTC
# Line 13  Line 13 
13  test_for_package_in_cpp_options() {  test_for_package_in_cpp_options() {
14      cpp_options=$1      cpp_options=$1
15      pkg=$2      pkg=$2
16      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg[ ]"
17      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg[ ]"
18      test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg[ ]"
19      test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg[ ]"
20        test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_$pkg$"
21        test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_$pkg$"
22        test_for_string_in_file $cpp_options "^[ ]*#define.*DISABLE_$pkg$"
23        test_for_string_in_file $cpp_options "^[ ]*#undef.*DISABLE_$pkg$"
24  }  }
25    
26  # Search for particular CPP #cmds associated with MPI  # Search for particular CPP #cmds associated with MPI
27  # usage: test_for_mpi_in_cpp_eeoptions CPP_file  # usage: test_for_mpi_in_cpp_eeoptions CPP_file
28  test_for_mpi_in_cpp_eeoptions() {  test_for_mpi_in_cpp_eeoptions() {
29      cpp_options=$1      cpp_options=$1
30      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI[ ]"
31      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI[ ]"
32      test_for_string_in_file $cpp_options "^[ ]*#define.*ALWAYS_USE_MPI" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#define.*ALWAYS_USE_MPI[ ]"
33      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALWAYS_USE_MPI" || exit 99      test_for_string_in_file $cpp_options "^[ ]*#undef.*ALWAYS_USE_MPI[ ]"
34        test_for_string_in_file $cpp_options "^[ ]*#define.*ALLOW_USE_MPI$"
35        test_for_string_in_file $cpp_options "^[ ]*#undef.*ALLOW_USE_MPI$"
36        test_for_string_in_file $cpp_options "^[ ]*#define.*ALWAYS_USE_MPI$"
37        test_for_string_in_file $cpp_options "^[ ]*#undef.*ALWAYS_USE_MPI$"
38  }  }
39    
40  # Search for particular string in a file. Return 1 if detected, 0 if not  # Search for particular string in a file. Return 1 if detected, 0 if not
# Line 39  test_for_string_in_file() { Line 47  test_for_string_in_file() {
47      if test "x${RETVAL}" = x0 ; then      if test "x${RETVAL}" = x0 ; then
48          printf "Error: In $file there is an illegal line: "          printf "Error: In $file there is an illegal line: "
49          grep -i "$strng" $file          grep -i "$strng" $file
50          return 1          exit 99
51      fi      fi
52      return 0      return 0
53  }  }
# Line 122  EOF Line 130  EOF
130        stop        stop
131        end        end
132  EOF  EOF
133      test -f Makefile  &&  mv -f Makefile Makefile.bak      test -f $MAKEFILE  &&  mv -f $MAKEFILE $MAKEFILE".tst"
134      cat <<EOF >> Makefile      cat <<EOF >> $MAKEFILE
 %.$tfs : %.F  
135  .SUFFIXES:  .SUFFIXES:
136  genmake_hello.$tfs: genmake_hello.F  .SUFFIXES: .$tfs .F
137          $LN genmake_hello.F genmake_hello.$tfs  .F.$tfs:
138            $LN \$< \$@
139  EOF  EOF
140      $MAKE "genmake_hello."$tfs > /dev/null 2>&1      $MAKE "genmake_hello."$tfs > /dev/null 2>&1
141      RETVAL=$?      RETVAL=$?
# Line 148  EOF Line 156  EOF
156              return              return
157          fi          fi
158      fi      fi
159      rm -f genmake_hello.* Makefile      rm -f genmake_hello.* $MAKEFILE
160      test -f Makefile  &&  mv -f Makefile.bak Makefile      test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE
161    
162      #  If we make it here, use the extensions      #  If we make it here, use the extensions
163      FS=$tfs      FS=$tfs
# Line 181  look_for_makedepend()  { Line 189  look_for_makedepend()  {
189      if test "x${MAKEDEPEND}" = x ; then      if test "x${MAKEDEPEND}" = x ; then
190          which makedepend > /dev/null 2>&1          which makedepend > /dev/null 2>&1
191          RV0=$?          RV0=$?
192            test -f $MAKEFILE  &&  mv -f $MAKEFILE $MAKEFILE".tst"
193            #  echo 'MAKEFILE="'$MAKEFILE'"'
194            cat <<EOF >> $MAKEFILE
195    #   THIS IS A TEST MAKEFILE GENERATED BY "genmake2"
196    #
197    #   Some "makedepend" implementations will die if they cannot
198    #   find a Makefile -- so this file is here to gives them an
199    #   empty one to find and parse.
200    EOF
201          cat <<EOF >> genmake_tc.f          cat <<EOF >> genmake_tc.f
202        program test        program test
203        write(*,*) 'test'        write(*,*) 'test'
# Line 189  look_for_makedepend()  { Line 206  look_for_makedepend()  {
206  EOF  EOF
207          makedepend genmake_tc.f > /dev/null 2>&1          makedepend genmake_tc.f > /dev/null 2>&1
208          RV1=$?          RV1=$?
209            test -f $MAKEFILE  &&  rm -f $MAKEFILE
210            test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE
211          if test "x${RV0}${RV1}" = x00 ; then          if test "x${RV0}${RV1}" = x00 ; then
212              MAKEDEPEND=makedepend              MAKEDEPEND=makedepend
213          else          else
# Line 237  build_cyrus_makedepend()  { Line 256  build_cyrus_makedepend()  {
256      fi      fi
257  }  }
258    
259    
260    build_embed_encode()
261    {
262        printf "  building the embed-encode utility...  "
263        if test ! -e "$ROOTDIR/tools/embed_encode/encode_files" ; then
264            if test ! -d "$ROOTDIR/tools/embed_encode" ; then
265                echo
266                echo "    Error: can't locate \"$ROOTDIR/tools/embed_encode\""
267                echo
268                EMBED_SRC=f
269                return 1
270            fi
271            clist="cc gcc c89 $CC"
272            for ic in $clist ; do
273                comm="$ic -o encode_files encode_files.c"
274                ( cd $ROOTDIR/tools/embed_encode && $comm ) > /dev/null 2>&1
275                RETVAL=$?
276                if test "x$RETVAL" = x0 ; then
277                    echo "OK"
278                    DEFINES="$DEFINES -DHAVE_EMBED_SRC"
279                    return 0
280                fi
281            done
282            echo
283            echo "    Error: unable to build $ROOTDIR/embed_encode/encode_files"
284            echo "      so it has been disabled"
285            echo
286            EMBED_SRC=f
287            return 1
288        fi
289        echo "OK"
290        DEFINES="$DEFINES -DHAVE_EMBED_SRC"
291    }
292    
293    
294  # Guess possible config options for this host  # Guess possible config options for this host
295  find_possible_configs()  {  find_possible_configs()  {
296    
# Line 310  EOF Line 364  EOF
364    
365      #================================================================      #================================================================
366      #  look for possible FORTRAN compilers      #  look for possible FORTRAN compilers
367      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 gfortran"
368      p_FC=      p_FC=
369      for c in $tmp ; do      for c in $tmp ; do
370          rm -f ./hello.f ./hello          rm -f ./hello.f ./hello
# Line 342  EOF Line 396  EOF
396      else      else
397          echo "  The possible FORTRAN compilers found in your path are:"          echo "  The possible FORTRAN compilers found in your path are:"
398          echo "   "$p_FC          echo "   "$p_FC
399          if test "x$FC" = x ; then      fi
400              FC=`echo $p_FC | $AWK '{print $1}'`  
401              echo "  Setting FORTRAN compiler to: "$FC      #  Use the first of the compilers found in the current PATH
402          fi      #  that has a correctly-named optfile
403        if test "x$OPTFILE" = x  -a  "x$FC" = x ; then
404            for i in $p_FC ; do
405                OPTFILE=$ROOTDIR"/tools/build_options/"$PLATFORM"_"$i
406                if test -r $OPTFILE ; then
407                    echo "  Setting OPTFILE to: "$OPTFILE
408                    break
409                fi
410            done
411      fi      fi
412    
413      if test "x$OPTFILE" = x ; then      if test "x$OPTFILE" = x ; then
# Line 516  Usage: "$0" [OPTIONS] Line 578  Usage: "$0" [OPTIONS]
578            *only* works if it is supported by the OPTFILE that            *only* works if it is supported by the OPTFILE that
579            is being used.            is being used.
580    
581        -ignoretime | -ignore_time | --ignoretime | --ignore_time
582              Ignore all the "wall clock" routines entirely.  This will
583              not in any way hurt the model results -- it simply means
584              that the code that checks how long the model spends in
585              various routines will give junk values.
586    
587        -ts | --ts
588              Produce timing information per timestep
589        -papis | --papis
590              Produce summary MFlop/s (and IPC) with PAPI per timestep
591        -pcls | --pcls
592              Produce summary MFlop/s etc. with PCL per timestep
593        -foolad | --foolad
594              Fool the AD code generator
595        -papi | --papi
596              Performance analysis with PAPI
597        -pcl | --pcl
598              Performance analysis with PCL
599        -hpmt | --hpmt
600              Performance analysis with the HPM Toolkit
601    
602        -gsl | --gsl
603              Use GSL to control floating point rounding and precision
604    
605      -mpi | --mpi      -mpi | --mpi
606            Include MPI header files and link to MPI libraries            Include MPI header files and link to MPI libraries
607      -mpi=PATH | --mpi=PATH      -mpi=PATH | --mpi=PATH
608            Include MPI header files and link to MPI libraries using MPI_ROOT            Include MPI header files and link to MPI libraries using MPI_ROOT
609            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
610            from $PATH/lib and use binaries from $PATH/bin.            from \$PATH/lib and use binaries from \$PATH/bin.
611    
612        -es | --es | -embed-source | --embed-source
613              Embed a tarball containing the full source code
614              (including the Makefile, etc.) used to build the
615              executable [off by default]
616    
617      -bash NAME      -bash NAME
618            Explicitly specify the Bourne or BASH shell to use            Explicitly specify the Bourne or BASH shell to use
# Line 581  WARNING: Please contact <MITgcm-support@ Line 672  WARNING: Please contact <MITgcm-support@
672  EOF  EOF
673          return 1          return 1
674      fi      fi
675      cat > genmake_tcomp.f <<EOF      cat > genmake_tcomp.$FS <<EOF
676        subroutine tcall( string )        subroutine tcall( string )
677        character*(*) string        character*(*) string
678        call tsub( string )        call tsub( string )
679        end        end
680  EOF  EOF
681      $FC $FFLAGS $DEFINES -c genmake_tcomp.f >> genmake_warnings 2>&1      $FC $FFLAGS -c genmake_tcomp.$FS >> genmake_warnings 2>&1
682      RETVAL=$?      RETVAL=$?
683      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
684          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 653  void FC_NAMEMANGLE(cloc) ( double *curti Line 744  void FC_NAMEMANGLE(cloc) ( double *curti
744   *curtim = *curtim/1.E6;   *curtim = *curtim/1.E6;
745  }  }
746  EOF  EOF
747      make genmake_tc_1.o >> genmake_tc.log 2>&1      make genmake_tc_1.o >> genmake_warnings 2>&1
748      RET_C=$?      RET_C=$?
749      cat <<EOF > genmake_tc_2.f      cat <<EOF > genmake_tc_2.$FS
750        program hello        program hello
751        Real*8 wtime        REAL*8 wtime
752        external cloc        external cloc
753        call cloc(wtime)        call cloc(wtime)
754        print *," HELLO WORLD", wtime        print *," HELLO WORLD", wtime
755        end program hello        end
756  EOF  EOF
757      $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
758      RET_F=$?      RET_F=$?
759      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_tc.log 2>&1      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_warnings 2>&1
760      RETVAL=$?      RETVAL=$?
761      if test "x$RETVAL" = x0 ; then      if test "x$RETVAL" = x0 ; then
762          HAVE_CLOC=t          HAVE_CLOC=t
# Line 675  EOF Line 766  EOF
766  }  }
767    
768    
769    check_HAVE_SIGREG()  {
770        get_fortran_c_namemangling
771        cat <<EOF > genmake_tc_1.c
772    $FC_NAMEMANGLE
773    #include <stdlib.h>
774    #include <stdio.h>
775    #include <signal.h>
776    #include <errno.h>
777    #include <ucontext.h>
778    
779    int * ip;
780    
781    static void killhandler(
782        unsigned int sn, siginfo_t  si, struct ucontext *sc )
783    {
784        *ip = *ip + 1;
785        return;
786    }
787    
788    void FC_NAMEMANGLE(sigreg) (int * aip)
789    {
790        struct sigaction s;
791        ip = aip;
792        s.sa_flags = SA_SIGINFO;
793        s.sa_sigaction = (void *)killhandler;
794        if(sigaction (SIGTERM,&s,(struct sigaction *)NULL)) {
795            printf("Sigaction returned error = %d\n", errno);
796            exit(0);
797        }
798        return;
799    }
800    EOF
801        make genmake_tc_1.o >> genmake_warnings 2>&1
802        RET_C=$?
803        cat <<EOF > genmake_tc_2.$FS
804          program hello
805          integer anint
806          common /iv/ anint
807          external sigreg
808          call sigreg(anint)
809          end
810    EOF
811        echo >> genmake_warnings
812        echo "running: check_HAVE_SIGREG()" >> genmake_warnings
813        cat genmake_tc_2.$FS >> genmake_warnings
814        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
815        echo $COMM >> genmake_warnings
816        $COMM >> genmake_warnings 2>&1
817        RETVAL=$?
818        if test "x$RETVAL" = x0 ; then
819            HAVE_SIGREG=t
820            DEFINES="$DEFINES -DHAVE_SIGREG"
821        fi
822        rm -f genmake_tc*
823    }
824    
825    
826    check_HAVE_SETRLSTK()  {
827        get_fortran_c_namemangling
828        cat <<EOF > genmake_tc_1.c
829    $FC_NAMEMANGLE
830    #include <sys/time.h>
831    #include <sys/resource.h>
832    #include <unistd.h>
833    void FC_NAMEMANGLE(setrlstk) ()
834    {
835        struct rlimit rls;
836        rls.rlim_cur = RLIM_INFINITY;
837        rls.rlim_max = RLIM_INFINITY;
838        setrlimit(RLIMIT_STACK, &rls);
839        return;
840    }
841    EOF
842        make genmake_tc_1.o >> genmake_warnings 2>&1
843        RET_C=$?
844        cat <<EOF > genmake_tc_2.$FS
845          program hello
846          external setrlstk
847          call setrlstk()
848          end
849    EOF
850        echo >> genmake_warnings
851        echo "running: check_HAVE_SETRLSTK()" >> genmake_warnings
852        cat genmake_tc_2.$FS >> genmake_warnings
853        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
854        echo $COMM >> genmake_warnings
855        $COMM >> genmake_warnings 2>&1
856        RETVAL=$?
857        if test "x$RETVAL" = x0 ; then
858            HAVE_SETRLSTK=t
859            DEFINES="$DEFINES -DHAVE_SETRLSTK"
860        fi
861        rm -f genmake_tc*
862    }
863    
864    
865    check_HAVE_STAT()  {
866        get_fortran_c_namemangling
867        cat <<EOF > genmake_tc_1.c
868    $FC_NAMEMANGLE
869    #include <stdio.h>
870    #include <stdlib.h>
871    #include <unistd.h>
872    #include <sys/stat.h>
873    #include <sys/types.h>
874    void FC_NAMEMANGLE(tfsize) ( int *nbyte )
875    {
876        char name[512];
877        struct stat astat;
878    
879        name[0] = 'a'; name[1] = '\0';
880        if (! stat(name, &astat))
881            *nbyte = (int)(astat.st_size);
882        else
883            *nbyte = -1;
884    }
885    EOF
886        make genmake_tc_1.o >> genmake_tc.log 2>&1
887        RET_C=$?
888        cat <<EOF > genmake_tc_2.$FS
889          program hello
890          integer nbyte
891          call tfsize(nbyte)
892          print *," HELLO WORLD", nbyte
893          end
894    EOF
895        echo >> genmake_warnings
896        echo "running: check_HAVE_STAT()" >> genmake_warnings
897        cat genmake_tc_2.$FS >> genmake_warnings
898        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
899        echo $COMM >> genmake_warnings
900        $COMM >> genmake_tc.log 2>&1
901        RETVAL=$?
902        if test "x$RETVAL" = x0 ; then
903            HAVE_STAT=t
904            DEFINES="$DEFINES -DHAVE_STAT"
905        fi
906        rm -f genmake_tc*
907    }
908    
909    
910  check_netcdf_libs()  {  check_netcdf_libs()  {
911      echo "" > genmake_tnc.log      if test ! "x$SKIP_NETCDF_CHECK" = x ; then
912      cat <<EOF > genmake_tnc.for          return
913        fi
914        echo >> genmake_warnings
915        echo "running: check_netcdf_libs()" >> genmake_warnings
916        cat <<EOF > genmake_tnc.F
917        program fgennc        program fgennc
918  #include "netcdf.inc"  #include "netcdf.inc"
919    EOF
920        if test ! "x$MPI" = x ; then
921            echo '#include "mpif.h"' >> genmake_tnc.F
922        fi
923        cat <<EOF >> genmake_tnc.F
924        integer iret, ncid, xid        integer iret, ncid, xid
925        iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)        iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)
926        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
# Line 689  check_netcdf_libs()  { Line 930  check_netcdf_libs()  {
930        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
931        end        end
932  EOF  EOF
933      #echo "$CPP $DEFINES $INCLUDES"      echo "===  genmake_tnc.F  ===" > genmake_tnc.log
934      $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f 2>/dev/null  \      cat genmake_tnc.F >> genmake_tnc.log
935          &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f $LIBS >> genmake_tnc.log 2>&1      echo "===  genmake_tnc.F  ===" >> genmake_tnc.log
936        RET_CPP=f
937        COMM="cat genmake_tnc.F | $CPP $DEFINES $INCLUDES"
938        echo "$COMM" >> genmake_tnc.log
939        $COMM > genmake_tnc.$FS 2>/dev/null  &&  RET_CPP=t
940        if test "x$RET_CPP" = xf ; then
941            echo "  WARNING: CPP failed to pre-process the netcdf test." \
942                >> genmake_tnc.log
943            echo "    Please check that \$INCLUDES is properly set." \
944                >> genmake_tnc.log
945        fi
946        echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.$FS  \ " >> genmake_tnc.log
947        echo "  &&  $LINK -o genmake_tnc.o $LIBS" >> genmake_tnc.log
948        $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
949            &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1
950      RET_COMPILE=$?      RET_COMPILE=$?
951      test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1      cat genmake_tnc.log >> genmake_warnings
952      RETVAL=$?  
953      if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then      #EH3  Remove test program execution for machines that either disallow
954        #EH3  execution or cannot support it (eg. cross-compilers)
955        #EH3
956        #EH3 test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1
957        #EH3 RETVAL=$?
958        #EH3 if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
959    
960        if test "x$RET_COMPILE" = x0 ; then
961          HAVE_NETCDF=t          HAVE_NETCDF=t
962      else      else
963          # try again with "-lnetcdf" added to the libs          # try again with "-lnetcdf" added to the libs
964          $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f 2>/dev/null  \          echo "try again with added '-lnetcdf'" > genmake_tnc.log
965              &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f \          echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log
966              $LIBS -lnetcdf >> genmake_tnc_2.log 2>&1          echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
967            echo " &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log
968            cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null  \
969                &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
970                &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1
971          RET_COMPILE=$?          RET_COMPILE=$?
972          test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1          cat genmake_tnc.log >> genmake_warnings
973          RETVAL=$?          if test "x$RET_COMPILE" = x0 ; then
         if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then  
974              LIBS="$LIBS -lnetcdf"              LIBS="$LIBS -lnetcdf"
975              HAVE_NETCDF=t              HAVE_NETCDF=t
         else  
             cat genmake_tnc.log >> genmake_warnings  
976          fi          fi
977      fi      fi
978      rm -f genmake_tnc*      rm -f genmake_tnc*
# Line 728  PLATFORM= Line 991  PLATFORM=
991  LN=  LN=
992  S64=  S64=
993  KPP=  KPP=
994  FC=  #FC=
995  #CC=gcc  #CC=gcc
996  CPP=  #CPP=
997  LINK=  LINK=
998  DEFINES=  DEFINES=
999  PACKAGES=  PACKAGES=
1000  ENABLE=  ENABLE=
1001  DISABLE=  DISABLE=
1002  MAKEFILE=  # MAKEFILE=
1003  #MAKEDEPEND=  # MAKEDEPEND=
1004  PDEPEND=  PDEPEND=
1005  DUMPSTATE=t  DUMPSTATE=t
1006  PDEFAULT=  PDEFAULT=
1007  OPTFILE=  OPTFILE=
1008  INCLUDES="-I."  INCLUDES="-I. $INCLUDES"
1009  FFLAGS=  FFLAGS=
1010  FOPTIM=  FOPTIM=
1011  CFLAGS=  CFLAGS=
# Line 755  NOOPTFILES= Line 1018  NOOPTFILES=
1018  NOOPTFLAGS=  NOOPTFLAGS=
1019  MPI=  MPI=
1020  MPIPATH=  MPIPATH=
1021    TS=
1022    PAPIS=
1023    PCLS=
1024    FOOLAD=
1025    PAPI=
1026    PCL=
1027    HPMT=
1028    GSL=
1029    HAVE_TEST_L=
1030    
1031  # DEFINES checked by test compilation  # DEFINES checked by test compilation or command-line
1032  HAVE_SYSTEM=  HAVE_SYSTEM=
1033  HAVE_FDATE=  HAVE_FDATE=
1034  FC_NAMEMANGLE=  FC_NAMEMANGLE=
1035  HAVE_CLOC=  HAVE_CLOC=
1036    HAVE_SETRLSTK=
1037    HAVE_STAT=
1038  HAVE_NETCDF=  HAVE_NETCDF=
1039  HAVE_ETIME=  HAVE_ETIME=
1040    IGNORE_TIME=
1041    
1042  MODS=  MODS=
1043  TOOLSDIR=  TOOLSDIR=
# Line 773  STANDARDDIRS="USE_THE_DEFAULT" Line 1048  STANDARDDIRS="USE_THE_DEFAULT"
1048  G2ARGS=  G2ARGS=
1049  BASH=  BASH=
1050  PWD=`pwd`  PWD=`pwd`
1051  MAKE=make  test "x$MAKE" = x  &&  MAKE=make
1052  AWK=awk  test "x$AWK" = x   &&  AWK=awk
1053  THISHOSTNAME=`hostname`  EMBED_SRC=
1054    THISHOST=`hostname`
1055  THISCWD=`pwd`  THISCWD=`pwd`
1056  THISDATE=`date`  THISDATE=`date`
1057    THISUSER=`echo $USER`
1058    THISVER=
1059  MACHINE=`uname -a`  MACHINE=`uname -a`
1060  EXECUTABLE=  EXECUTABLE=
1061  EXEHOOK=  EXEHOOK=
# Line 806  TAMC_EXTRA= Line 1084  TAMC_EXTRA=
1084    
1085  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
1086  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
1087  gm_s2="FC CPP IEEE MPI JAM DUMPSTATE STANDARDDIRS"  gm_s2="FC CPP IEEE TS PAPIS PCLS PAPI PCL HPMT GSL MPI JAM DUMPSTATE STANDARDDIRS"
1088    
1089  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
1090  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 "
1091  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
1092  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOSTNAME THISDATE MACHINE"  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE"
1093  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
1094  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"
1095    
# Line 852  else Line 1130  else
1130      echo "none found"      echo "none found"
1131  fi  fi
1132    
1133  #  echo "$0::$1:$2:$3:$4:$5:$6:$7:"  #echo "$0::$1:$2:$3:$4:$5:$6:$7:"
1134  #OPTIONS=  #OPTIONS=
1135  #n=0  #n=0
1136  #for i ; do  #for i ; do
# Line 864  fi Line 1142  fi
1142  #done  #done
1143  #parse_options  #parse_options
1144  ac_prev=  ac_prev=
1145  for ac_option in $@ ; do  for ac_option in "$@" ; do
1146    
1147      G2ARGS="$G2ARGS \"$ac_option\""      G2ARGS="$G2ARGS \"$ac_option\""
1148    
# Line 986  for ac_option in $@ ; do Line 1264  for ac_option in $@ ; do
1264          -noieee | --noieee)          -noieee | --noieee)
1265              IEEE= ;;              IEEE= ;;
1266    
1267            -ts | --ts)
1268                TS=true ;;
1269            -papis | --papis)
1270                PAPIS=true ;;
1271            -pcls | --pcls)
1272                PCLS=true ;;
1273            -foolad | --foolad)
1274                FOOLAD=true ;;
1275            -papi | --papi)
1276                PAPI=true ;;
1277            -pcl | --pcl)
1278                PCL=true ;;
1279            -hpmt | --hpmt)
1280                HPMT=true ;;
1281    
1282            -gsl | --gsl)
1283                GSL=true ;;
1284    
1285          -mpi | --mpi)          -mpi | --mpi)
1286              MPI=true ;;              MPI=true ;;
1287          -mpi=* | --mpi=*)          -mpi=* | --mpi=*)
# Line 1009  for ac_option in $@ ; do Line 1305  for ac_option in $@ ; do
1305              ac_prev=TAMC_EXTRA ;;              ac_prev=TAMC_EXTRA ;;
1306          -tamc_extra=* | --tamc_extra=*)          -tamc_extra=* | --tamc_extra=*)
1307              TAMC_EXTRA=$ac_optarg ;;              TAMC_EXTRA=$ac_optarg ;;
1308            
1309            -ignoretime | -ignore_time | --ignoretime | --ignore_time)
1310                IGNORE_TIME="-DIGNORE_TIME" ;;
1311    
1312            -es | --es | -embed-source | --embed-source)
1313                EMBED_SRC=t ;;
1314    
1315          -*)          -*)
1316              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
# Line 1024  for ac_option in $@ ; do Line 1326  for ac_option in $@ ; do
1326            
1327  done  done
1328    
1329    
1330  if test -f ./.genmakerc ; then  if test -f ./.genmakerc ; then
1331      echo      echo
1332      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 1036  if test -f ./.genmakerc ; then Line 1339  if test -f ./.genmakerc ; then
1339      echo      echo
1340  fi  fi
1341    
1342    #  Find the MITgcm ${ROOTDIR}
1343  if test "x${ROOTDIR}" = x ; then  if test "x${ROOTDIR}" = x ; then
1344      tmp=`echo $PWD | sed -e 's/\// /g' | awk '{print $NR}'`      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1345      if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then      if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then
1346          ROOTDIR=".."          ROOTDIR=".."
1347      else      else
# Line 1062  if test ! -d ${ROOTDIR} ; then Line 1366  if test ! -d ${ROOTDIR} ; then
1366      exit 1      exit 1
1367  fi  fi
1368    
1369    #  Find the MITgcm ${THISVER}
1370    if test -f "${ROOTDIR}/doc/tag-index" ; then
1371        THISVER=`grep '^checkpoint' ${ROOTDIR}/doc/tag-index | head -1`
1372    fi
1373    
1374    if test "x$MAKEFILE" = x ; then
1375        MAKEFILE="Makefile"
1376    fi
1377    
1378  echo "  getting OPTFILE information:  "  echo "  getting OPTFILE information:  "
1379  if test "x${OPTFILE}" = x ; then  if test "x${OPTFILE}" = x ; then
1380      if test "x$MITGCM_OF" = x ; then      if test "x$MITGCM_OF" = x ; then
# Line 1091  if test "x$OPTFILE" != xNONE ; then Line 1404  if test "x$OPTFILE" != xNONE ; then
1404      fi      fi
1405  fi  fi
1406    
 #  Check for broken systems that cannot correctly distinguish *.F and *.f files  
 # check_for_broken_Ff  
   
1407  echo "  getting AD_OPTFILE information:  "  echo "  getting AD_OPTFILE information:  "
1408  if test "x${AD_OPTFILE}" = x ; then  if test "x${AD_OPTFILE}" = x ; then
1409      if test "x$MITGCM_AD_OF" = x ; then      if test "x$MITGCM_AD_OF" = x ; then
# Line 1121  if test "x${AD_OPTFILE}" != xNONE ; then Line 1431  if test "x${AD_OPTFILE}" != xNONE ; then
1431      fi      fi
1432  fi  fi
1433    
1434    #====================================================================
1435    #  Set default values if not set by the optfile
1436    #
1437  #  Check that FC, CC, LINK, CPP, S64, LN, and MAKE are defined.  If not,  #  Check that FC, CC, LINK, CPP, S64, LN, and MAKE are defined.  If not,
1438  #  either set defaults or complain and abort!  #  either set defaults or complain and abort!
1439  if test ! "x$BASH" = x ; then  if test ! "x$BASH" = x ; then
# Line 1197  Error: The command "ln -s" failed -- ple Line 1510  Error: The command "ln -s" failed -- ple
1510  EOF  EOF
1511      exit 1      exit 1
1512  fi  fi
1513    test -L genmake_tlink > /dev/null 2>&1
1514    RETVAL=$?
1515    if test "x$RETVAL" = x0 ; then
1516        HAVE_TEST_L=t
1517    fi
1518  rm -f genmake_test_ln genmake_tlink  rm -f genmake_test_ln genmake_tlink
1519    
1520  #  Check for broken *.F/*.f handling and fix if possible  #  Check for broken *.F/*.f handling and fix if possible
# Line 1207  if test ! "x$MPI" = x ; then Line 1525  if test ! "x$MPI" = x ; then
1525        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1526  fi  fi
1527    
1528    if test ! "x$TS" = x ; then
1529          echo "  Turning on timing per timestep"
1530          if test ! "x$FOOLAD" = x ; then
1531                DEFINES="$DEFINES -DTIME_PER_TIMESTEP_SFP"
1532          else
1533                DEFINES="$DEFINES -DTIME_PER_TIMESTEP"
1534          fi
1535    fi
1536    if test ! "x$PAPIS" = x ; then
1537          echo "  Turning on PAPI flop summary per timestep"
1538          echo "  Please make sure PAPIINC, PAPILIB are defined"
1539          if test ! "x$FOOLAD" = x ; then
1540                DEFINES="$DEFINES -DUSE_PAPI_FLOPS_SFP"
1541          else
1542                DEFINES="$DEFINES -DUSE_PAPI_FLOPS"
1543          fi
1544          INCLUDES="$INCLUDES $PAPIINC"
1545          LIBS="$LIBS $PAPILIB"
1546    fi
1547    if test ! "x$PCLS" = x ; then
1548          echo "  Turning on PCL counter summary per timestep"
1549          echo "  Please make sure PCLINC, PCLLIB are defined"
1550          if test ! "x$FOOLAD" = x ; then
1551                DEFINES="$DEFINES -DUSE_PCL_FLOPS_SFP"
1552          else
1553                DEFINES="$DEFINES -DUSE_PCL_FLOPS"
1554          fi
1555          INCLUDES="$INCLUDES $PCLINC"
1556          LIBS="$LIBS $PCLLIB"
1557    fi
1558    if test ! "x$PAPI" = x ; then
1559          if test ! "x$PAPIS" = x ; then
1560              echo "  PAPI performance analysis and flop summary per timestep cannot co-exist!"
1561              echo "  Sticking with PAPI flop summary per timestep!"
1562          else
1563              echo "  Turning on performance analysis with PAPI"
1564              echo "  Please make sure PAPIINC, PAPILIB are defined"
1565              DEFINES="$DEFINES -DUSE_PAPI"
1566              INCLUDES="$INCLUDES $PAPIINC"
1567              LIBS="$LIBS $PAPILIB"
1568          fi
1569    fi
1570    if test ! "x$PCL" = x ; then
1571          if test ! "x$PCLS" = x ; then
1572              echo "  PCL performance analysis and flop summary per timestep cannot co-exist!"
1573              echo "  Sticking with PCL flop summary per timestep!"
1574          else
1575              echo "  Turning on performance analysis with PCL"
1576              echo "  Please make sure PCLINC, PCLLIB are defined"
1577              DEFINES="$DEFINES -DUSE_PCL"
1578              INCLUDES="$INCLUDES $PCLINC"
1579              LIBS="$LIBS $PCLLIB"
1580          fi
1581    fi
1582    if test ! "x$HPMT" = x ; then
1583          if test ! "x$PAPI" = x ; then
1584              echo "  PAPI and the HPM Toolkit cannot co-exist!"
1585              echo "  Sticking with PAPI!"
1586          else if test ! "x$PCL" = x ; then
1587              echo "  PCL and the HPM Toolkit cannot co-exist!"
1588              echo "  Sticking with PCL!"
1589          else
1590              echo "  Turning on performance analysis with the HPM Toolkit"
1591              echo "  Please make sure HPMTINC, HPMTLIB are defined"
1592              DEFINES="$DEFINES -DUSE_LIBHPM"
1593              INCLUDES="$INCLUDES $HPMTINC"
1594              LIBS="$LIBS $HPMTLIB"
1595          fi
1596          fi
1597    fi
1598    if test ! "x$GSL" = x ; then
1599          echo "  Turning on use of GSL to control floating point calculations"
1600          echo "  Please make sure GSLINC, GSLLIB are defined"
1601          DEFINES="$DEFINES -DUSE_GSL_IEEE"
1602          INCLUDES="$INCLUDES $GSLINC"
1603          LIBS="$LIBS $GSLLIB"
1604    fi
1605    
1606  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
1607  printf "  Do we have the system() command using $FC...  "  printf "  Do we have the system() command using $FC...  "
1608  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1609        program hello        program hello
1610        call system('echo hi')        call system('echo hi')
1611        end        end
1612  EOF  EOF
1613  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1  $FC $FFLAGS -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1614  RETVAL=$?  RETVAL=$?
1615  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1616      HAVE_SYSTEM=t      HAVE_SYSTEM=t
# Line 1227  fi Line 1623  fi
1623  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1624    
1625  printf "  Do we have the fdate() command using $FC...  "  printf "  Do we have the fdate() command using $FC...  "
1626  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1627        program hello        program hello
1628        CHARACTER(128) string        CHARACTER*(128) string
1629        string = ' '        string = ' '
1630        call fdate( string )        call fdate( string )
1631        print *, string        print *, string
1632        end        end
1633  EOF  EOF
1634  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1  $FC $FFLAGS -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1635  RETVAL=$?  RETVAL=$?
1636  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1637      HAVE_FDATE=t      HAVE_FDATE=t
# Line 1248  fi Line 1644  fi
1644  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1645    
1646  printf "  Do we have the etime() command using $FC...  "  printf "  Do we have the etime() command using $FC...  "
1647  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1648        program hello        program hello
1649        REAL*4 ACTUAL, TARRAY(2)        REAL*4 ACTUAL, TARRAY(2)
1650        EXTERNAL ETIME        EXTERNAL ETIME
# Line 1257  cat > genmake_tcomp.f <<EOF Line 1653  cat > genmake_tcomp.f <<EOF
1653        print *, tarray        print *, tarray
1654        end        end
1655  EOF  EOF
1656  $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1  $FC $FFLAGS -o genmake_tcomp genmake_tcomp.$FS > genmake_tcomp.log 2>&1
1657  RETVAL=$?  RETVAL=$?
1658  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1659      HAVE_ETIME=t      HAVE_ETIME=t
# Line 1275  if test "x$HAVE_CLOC" != x ; then Line 1671  if test "x$HAVE_CLOC" != x ; then
1671      echo "yes"      echo "yes"
1672  else  else
1673      echo "no"      echo "no"
1674        if test "x$EMBED_SRC" = xt ; then
1675            echo "    WARNING: you requested file embedding but it has"
1676            echo "      been disabled since C code cannot be called"
1677            EMBED_SRC=
1678        fi
1679    fi
1680    rm -f genmake_t*
1681    
1682    printf "  Can we unlimit the stack size using $FC...  "
1683    check_HAVE_SETRLSTK
1684    if test "x$HAVE_SETRLSTK" != x ; then
1685        echo "yes"
1686    else
1687        echo "no"
1688    fi
1689    rm -f genmake_t*
1690    
1691    printf "  Can we register a signal handler using $FC...  "
1692    check_HAVE_SIGREG
1693    if test "x$HAVE_SIGREG" != x ; then
1694        echo "yes"
1695    else
1696        echo "no"
1697    fi
1698    rm -f genmake_t*
1699    
1700    printf "  Can we use stat() through C calls...  "
1701    check_HAVE_STAT
1702    if test "x$HAVE_STAT" != x ; then
1703        echo "yes"
1704    else
1705        echo "no"
1706  fi  fi
1707  rm -f genmake_t*  rm -f genmake_t*
1708    
# Line 1285  if test "x$HAVE_NETCDF" != x ; then Line 1713  if test "x$HAVE_NETCDF" != x ; then
1713  else  else
1714      echo "no"      echo "no"
1715  fi  fi
1716    DEFINES="$DEFINES $IGNORE_TIME"
1717    
1718    if test "x$EMBED_SRC" = xt ; then
1719        build_embed_encode
1720    fi
1721    if test "x$EMBED_SRC" = xt ; then
1722        ENABLE="$ENABLE embed_files"
1723    fi
1724    
1725    
1726  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
# Line 1302  for d in $MODS ; do Line 1738  for d in $MODS ; do
1738  done  done
1739  echo  echo
1740    
 if test "x$MAKEFILE" = x ; then  
     MAKEFILE="Makefile"  
 fi  
1741  if test "x${PLATFORM}" = x ; then  if test "x${PLATFORM}" = x ; then
1742      PLATFORM=$p_PLATFORM      PLATFORM=$p_PLATFORM
1743  fi  fi
1744    
1745  if test "x${EXEDIR}" = x ; then  if test "x${EXEDIR}" = x ; then
1746      tmp=`echo $PWD | sed -e 's/\// /g' | awk '{print $NR}'`      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1747      if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then      if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then
1748          EXEDIR=../exe          EXEDIR=../exe
1749      else      else
# Line 1330  if test ! -d ${TOOLSDIR} ; then Line 1763  if test ! -d ${TOOLSDIR} ; then
1763      exit 1      exit 1
1764  fi  fi
1765  if test "x$S64" = x ; then  if test "x$S64" = x ; then
1766      S64='$(TOOLSDIR)/set64bitConst.sh'      echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.sh > /dev/null 2>&1
1767        RETVAL=$?
1768        if test "x${RETVAL}" = x0 ; then
1769            S64='$(TOOLSDIR)/set64bitConst.sh'
1770        else
1771            echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.csh > /dev/null 2>&1
1772            RETVAL=$?
1773            if test "x${RETVAL}" = x0 ; then
1774                S64='$(TOOLSDIR)/set64bitConst.csh'
1775            else
1776                cat <<EOF
1777    
1778    ERROR: neither of the two default scripts:
1779    
1780        ${TOOLSDIR}/set64bitConst.sh
1781        ${TOOLSDIR}/set64bitConst.csh
1782    
1783      are working so please check paths or specify (with \$S64) a
1784      working version of this script.
1785    
1786    EOF
1787                exit 1
1788            fi
1789        fi
1790  fi  fi
1791  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`
1792    
# Line 1475  done Line 1931  done
1931  rm -f ./.tmp_pack  rm -f ./.tmp_pack
1932  echo "    packages are:  $PACKAGES"  echo "    packages are:  $PACKAGES"
1933    
1934    #  Check availability of NetCDF and then either build the MNC template
1935    #  files or delete mnc from the list of available packages.
1936    echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1
1937    RETVAL=$?
1938    if test "x$RETVAL" = x0 ; then
1939        if test "x$HAVE_NETCDF" != xt ; then
1940            cat <<EOF
1941    
1942    *********************************************************************
1943    WARNING: the "mnc" package was enabled but tests failed to compile
1944      NetCDF applications.  Please check that:
1945    
1946      1) NetCDF is correctly installed for this compiler and
1947      2) the LIBS variable (within the "optfile") specifies the correct
1948           NetCDF library to link against.
1949    
1950      Due to this failure, the "mnc" package is now DISABLED.
1951    *********************************************************************
1952    
1953    EOF
1954            PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`
1955            DISABLE="$DISABLE mnc"
1956        else
1957            ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1
1958            RETVAL=$?
1959            if test "x${RETVAL}" = x0 ; then
1960                rm -f make_mnc.errors
1961            else
1962                echo "Error: problem encountered while building source files in pkg/mnc:"
1963                cat make_mnc.errors 1>&2
1964                exit 1
1965            fi
1966        fi
1967    fi
1968    
1969  echo "  applying package dependency rules"  echo "  applying package dependency rules"
1970  ck=  ck=
1971  while test "x$ck" != xtt ; do  while test "x$ck" != xtt ; do
# Line 1559  for i in $PACKAGES ; do Line 2050  for i in $PACKAGES ; do
2050      fi      fi
2051  done  done
2052    
 #  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  
   
2053  # Create a list of #define and #undef to enable/disable packages  # Create a list of #define and #undef to enable/disable packages
2054  PACKAGES_DOT_H=PACKAGES_CONFIG.h  PACKAGES_DOT_H=PACKAGES_CONFIG.h
2055  #  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 1605  for n in $names ; do Line 2069  for n in $names ; do
2069              fi              fi
2070          done          done
2071          if test "x$has_pack" = xf ; then          if test "x$has_pack" = xf ; then
2072              undef=`echo "ALLOW_$n" | $AWK '{print toupper($0)}'`              undef=`echo "ALLOW_$n" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
2073              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"
2074          fi          fi
2075      fi      fi
2076  done  done
2077  ENABLED_PACKAGES=  ENABLED_PACKAGES=
2078  for i in $PACKAGES ; do  for i in $PACKAGES ; do
2079      def=`echo "ALLOW_$i" | $AWK '{print toupper($0)}'`      def=`echo "ALLOW_$i" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
2080      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"
2081  #eh3 DEFINES="$DEFINES -D$def"  #eh3 DEFINES="$DEFINES -D$def"
2082    
# Line 1696  for i in $SOURCEDIRS ; do Line 2160  for i in $SOURCEDIRS ; do
2160          cat $i/$j >> ad_files          cat $i/$j >> ad_files
2161      done      done
2162  done  done
2163    if test ! "x"$FS = "x.f" ; then
2164        cat ad_files | sed -e "s/\.f/.$FS/g" > ad_files_f
2165        mv -f ad_files_f ad_files
2166    fi
2167    
2168  echo  echo
2169  echo "===  Creating the Makefile  ==="  echo "===  Creating the Makefile  ==="
# Line 1707  for i in $INCLUDEDIRS ; do Line 2174  for i in $INCLUDEDIRS ; do
2174      fi      fi
2175  done  done
2176    
2177    if test ! "x$DIVA" = x ; then
2178        echo "  Creating the pseudo-MPI include directory"
2179        INCLUDES="-I./mpi_headers $INCLUDES"
2180        rm -rf ./mpi_headers
2181        mkdir -p ./mpi_headers
2182    
2183        if test "x$MPIINCLUDEDIR" = x ; then
2184            if test "x$MPIHOME" = x ; then
2185                MPIHOME='/usr'
2186            fi
2187            MPIINCLUDEDIR='$MPIHOME/include'
2188        fi
2189        
2190        if test -r $MPIINCLUDEDIR/mpif.h ; then
2191            for i in $MPI_HEADER_FILES; do
2192                cp -p $MPIINCLUDEDIR/$i ./mpi_headers
2193            done
2194    
2195            perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h
2196        else
2197            echo " We cannot create a copy of mpif.h!"
2198            exit -1
2199        fi
2200    fi
2201    
2202  echo "  Determining the list of source and include files"  echo "  Determining the list of source and include files"
2203  rm -rf .links.tmp  rm -rf .links.tmp
2204  mkdir .links.tmp  mkdir .links.tmp
2205    touch .links.tmp/foo
2206    if test ! -r ".links.tmp/foo" ; then
2207        echo
2208        echo "ERROR : something is wrong with your directory permissions or"
2209        echo "   your user file-creation mask (\"umask\") since creating a"
2210        echo "   sub-dir, touch-ing a file within it, and then reading it is"
2211        echo "   not working.  Please try setting your umask to something"
2212        echo "   sane such as:"
2213        echo
2214        echo "      umask 0002"
2215        echo
2216        echo "   and please verify that you have the proper permissions for"
2217        echo "   creating sub-directories and then reading files created"
2218        echo "   within them."
2219        echo
2220        exit 1
2221    fi
2222    rm -f .links.tmp/foo
2223  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
2224  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
2225  printf 'SRCFILES = '    > srclist.inc  printf 'SRCFILES = '    > srclist.inc
# Line 1725  for d in $alldirs ; do Line 2235  for d in $alldirs ; do
2235      for sf in $sfiles ; do      for sf in $sfiles ; do
2236          if test ! -r ".links.tmp/$sf" ; then          if test ! -r ".links.tmp/$sf" ; then
2237              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
2238                    ignore_f=f
2239                  case $d/$sf in                  case $d/$sf in
2240                    ./$PACKAGES_DOT_H)                    ./$PACKAGES_DOT_H)
2241                            ignore_f=t
2242                          ;;                          ;;
2243                    ./AD_CONFIG.h)                    ./AD_CONFIG.h)
2244                            ignore_f=t
2245                          ;;                          ;;
2246                    ./FC_NAMEMANGLE.h)                    ./FC_NAMEMANGLE.h)
2247                            ignore_f=t
2248                          ;;                          ;;
2249                    *)                    ./BUILD_INFO.h)
2250                          touch .links.tmp/$sf                          ignore_f=t
                         deplist="$deplist $sf"  
                         ;;  
                 esac  
                 extn=`echo $sf | $AWK -F '.' '{print $NF}'`  
                 case $extn in  
                     F)  
                         echo    " \\"  >> srclist.inc  
                         printf " $sf" >> srclist.inc  
                         ;;  
                     F90)  
                         echo    " \\"  >> f90srclist.inc  
                         printf " $sf" >> f90srclist.inc  
                         ;;  
                     c)  
                         echo    " \\"  >> csrclist.inc  
                         printf " $sf" >> csrclist.inc  
2251                          ;;                          ;;
2252                      h)                    ./EMBEDDED_FILES.h)
2253                          echo    " \\"  >> hlist.inc                          ignore_f=t
                         printf " $sf" >> hlist.inc  
2254                          ;;                          ;;
2255                      flow)                    *)
2256                          echo    " \\"  >> ad_flow_files.inc                          #  For the local directory *ONLY*,
2257                          printf " $sf" >> ad_flow_files.inc                          #  ignore all soft-links
2258                            if test "x$HAVE_TEST_L" = xt -a "x$d" = x. -a -L $sf ; then
2259                                ignore_f=t
2260                            else
2261                                touch .links.tmp/$sf
2262                                deplist="$deplist $sf"
2263                            fi
2264                          ;;                          ;;
2265                  esac                  esac
2266                    if test "x$ignore_f" = xf ; then
2267                        extn=`echo $sf | $AWK -F. '{print $NF}'`
2268                        case $extn in
2269                            F)
2270                                echo    " \\"  >> srclist.inc
2271                                printf " $sf" >> srclist.inc
2272                                ;;
2273                            F90)
2274                                echo    " \\"  >> f90srclist.inc
2275                                printf " $sf" >> f90srclist.inc
2276                                ;;
2277                            c)
2278                                echo    " \\"  >> csrclist.inc
2279                                printf " $sf" >> csrclist.inc
2280                                ;;
2281                            h)
2282                                echo    " \\"  >> hlist.inc
2283                                printf " $sf" >> hlist.inc
2284                                ;;
2285                            flow)
2286                                echo    " \\"  >> ad_flow_files.inc
2287                                printf " $sf" >> ad_flow_files.inc
2288                                ;;
2289                        esac
2290                    fi
2291              fi              fi
2292          fi          fi
2293      done      done
# Line 1788  echo "#    $THISDATE" >> $MAKEFILE Line 2316  echo "#    $THISDATE" >> $MAKEFILE
2316  echo "# by the command:" >> $MAKEFILE  echo "# by the command:" >> $MAKEFILE
2317  echo "#    $0 $G2ARGS" >> $MAKEFILE  echo "#    $0 $G2ARGS" >> $MAKEFILE
2318  echo "# executed by:" >> $MAKEFILE  echo "# executed by:" >> $MAKEFILE
2319  echo "#    $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE
2320    
2321  EXE_AD=$EXECUTABLE"_ad"  EXE_AD=$EXECUTABLE"_ad"
2322  EXE_FTL=$EXECUTABLE"_ftl"  EXE_FTL=$EXECUTABLE"_ftl"
# Line 1834  ENABLED_PACKAGES = ${ENABLED_PACKAGES} Line 2362  ENABLED_PACKAGES = ${ENABLED_PACKAGES}
2362  DISABLED_PACKAGES = ${DISABLED_PACKAGES}  DISABLED_PACKAGES = ${DISABLED_PACKAGES}
2363    
2364  # These files are created by Makefile  # These files are created by Makefile
2365  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
   
2366  EOF  EOF
2367    
2368  #  Note: figure out some way to add Hyades JAM libraries here  if test "x$EMBED_SRC" = xt ; then
2369        echo "EMBEDDED_FILES = EMBEDDED_FILES.h" >>$MAKEFILE
2370    else
2371        echo "EMBEDDED_FILES = " >>$MAKEFILE
2372    fi
2373    
2374    #  Note: figure out some way to add Hyades JAM libraries here
2375  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2376  # Unix ln (link)  # Unix ln (link)
2377  LN = ${LN}  LN = ${LN}
# Line 1850  MAKEDEPEND = ${MAKEDEPEND} Line 2382  MAKEDEPEND = ${MAKEDEPEND}
2382  # Special preprocessor (KAP on DECs, FPP on Crays)  # Special preprocessor (KAP on DECs, FPP on Crays)
2383  KPP = ${KPP}  KPP = ${KPP}
2384  # Fortran compiler  # Fortran compiler
2385  FC = ${FC} in  FC = ${FC}
2386  # Fortran compiler  # Fortran compiler
2387  F90C = ${F90C}  F90C = ${F90C}
2388  # C compiler  # C compiler
# Line 1877  CFLAGS = ${CFLAGS} Line 2409  CFLAGS = ${CFLAGS}
2409  NOOPTFILES = ${NOOPTFILES}  NOOPTFILES = ${NOOPTFILES}
2410  NOOPTFLAGS = ${NOOPTFLAGS}  NOOPTFLAGS = ${NOOPTFLAGS}
2411  # Flags and libraries needed for linking  # Flags and libraries needed for linking
2412  LIBS = ${LIBS} \$(XLIBS)  LIBS = ${LIBS}
2413  # Name of the Mekfile  # Name of the Mekfile
2414  MAKEFILE=${MAKEFILE}  MAKEFILE=${MAKEFILE}
2415    
# Line 1890  cat hlist.inc         >> $MAKEFILE Line 2422  cat hlist.inc         >> $MAKEFILE
2422  cat ad_flow_files.inc >> $MAKEFILE  cat ad_flow_files.inc >> $MAKEFILE
2423  echo >> $MAKEFILE  echo >> $MAKEFILE
2424  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE
2425  echo 'F90FILES =  $(F90SRCFILES:.F=.'$FS90')' >> $MAKEFILE  echo 'F90FILES =  $(F90SRCFILES:.F90=.'$FS90')' >> $MAKEFILE
2426  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE
2427  echo >> $MAKEFILE  echo >> $MAKEFILE
2428  echo '.SUFFIXES:' >> $MAKEFILE  echo '.SUFFIXES:' >> $MAKEFILE
# Line 1901  rm -f ad_flow_files.inc Line 2433  rm -f ad_flow_files.inc
2433  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2434    
2435  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
2436  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES) \$(EMBEDDED_FILES)
2437          @echo Creating \$@ ...          @echo Creating \$@ ...
2438          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
2439  depend:  depend:
# Line 1910  depend: Line 2442  depend:
2442          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2443          -rm -f makedepend.out          -rm -f makedepend.out
2444    
2445    lib: libmitgcmuv.a
2446    
2447    libmitgcmuv.a: \$(OBJFILES)
2448            ar rcv libmitgcmuv.a \$(OBJFILES)
2449    
2450  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)
2451    
2452  small_f: \$(F77FILES) \$(F90FILES)  small_f: \$(F77FILES) \$(F90FILES)
# Line 1930  CLEAN: Line 2467  CLEAN:
2467          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2468          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2469          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
2470          -rm -f \$(EXECUTABLE) output.txt STD*          -rm -f \$(EXECUTABLE) *.txt STD* *diagnostics.log datetime
2471            -rm -rf mnc_test_*
2472    
2473  #eh3 Makefile: makefile  #eh3 Makefile: makefile
2474  makefile:  makefile:
# Line 1938  makefile: Line 2476  makefile:
2476  cleanlinks:  cleanlinks:
2477          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
2478    
2479  # Special targets ($SPECIAL_FILES) which are create by make  # Special targets (SPECIAL_FILES) which are create by make
2480  ${PACKAGES_DOT_H}:  ${PACKAGES_DOT_H}:
2481          @echo Creating \$@ ...          @echo Creating \$@ ...
2482          @$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 1949  FC_NAMEMANGLE.h: Line 2487  FC_NAMEMANGLE.h:
2487          @echo Creating \$@ ...          @echo Creating \$@ ...
2488          echo "$FC_NAMEMANGLE" > \$@          echo "$FC_NAMEMANGLE" > \$@
2489    
2490    BUILD_INFO.h:
2491            @echo Creating \$@ ...
2492    EOF
2493    
2494    test ! "x$THISVER" = x  && echo "       -echo \"#define THISVER '$THISVER'\" > \$@"   >> $MAKEFILE
2495    test ! "x$THISUSER" = x && echo "       -echo \"#define THISUSER '$THISUSER'\" >> \$@" >> $MAKEFILE
2496    test ! "x$THISDATE" = x && echo "       -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE
2497    test ! "x$THISHOST" = x && echo "       -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE
2498    
2499    if test "x$EMBED_SRC" = xt ; then
2500        cat >>$MAKEFILE <<EOF
2501    
2502    decode_files.o : EMBEDDED_FILES.h
2503    
2504    ##  \$(F77FILES)
2505    all_fF.tar.gz : \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(F77FILES) Makefile
2506            @echo Creating \$@ ...
2507            -tar -hcf all_fF.tar \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(F77FILES) Makefile
2508            -rm -f all_fF.tar.gz
2509            -gzip all_fF.tar
2510    
2511    EMBEDDED_FILES.h : all_fF.tar.gz
2512            @echo Creating \$@ ...
2513            -\${ROOTDIR}/tools/embed_encode/encode_files EMBEDDED_FILES.h all_fF.tar.gz
2514    
2515    EOF
2516    fi
2517    
2518    cat >>$MAKEFILE <<EOF
2519    
2520  # The normal chain of rules is (  .F - .$FS - .o  )  # The normal chain of rules is (  .F - .$FS - .o  )
2521    
2522  %.o : %.F  ## This nullifies any default implicit rules concerning these two file types:
2523    ## %.o : %.F
2524    
2525  .F.$FS:  .F.$FS:
2526          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
# Line 1962  FC_NAMEMANGLE.h: Line 2531  FC_NAMEMANGLE.h:
2531  .$FS90.o:  .$FS90.o:
2532          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
2533  .c.o:  .c.o:
2534          \$(CC) \$(CFLAGS) -c \$<          \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<
2535    
2536  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
2537  .F.p:  .F.p:
# Line 2007  cat >>$MAKEFILE <<EOF Line 2576  cat >>$MAKEFILE <<EOF
2576    
2577  # ... AD ...  # ... AD ...
2578  adall: ad_taf  adall: ad_taf
2579  adtaf: ad_taf_output.f  adtaf: ad_taf_output.$FS
2580  adtamc: ad_tamc_output.f  adtamc: ad_tamc_output.$FS
2581    
2582  ad_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ad_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)
2583          @$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
2584          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
2585          -rm -f ad_config.template          -rm -f ad_config.template
2586          @make \$(F77FILES)          @make \$(F77FILES)
2587          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2588          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.$FS
2589    
2590  ad_taf_output.f: ad_input_code.f  ad_taf_output.$FS: ad_input_code.$FS
2591          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2592          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
2593    
2594  adtafonly:  adtafonly:
2595          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2596          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
2597    
2598  ad_taf: ad_taf_output.o \$(OBJFILES)  ad_taf: ad_taf_output.o \$(OBJFILES)
2599          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2600    
2601  ad_tamc_output.f: ad_input_code.f  ad_tamc_output.$FS: ad_input_code.$FS
2602          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.f          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS
2603          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
2604    
2605  ad_tamc: ad_tamc_output.o \$(OBJFILES)  ad_tamc: ad_tamc_output.o \$(OBJFILES)
2606          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
2607    
2608    adonlyfwd:
2609            patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff
2610    
2611    adtrick:
2612            patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff
2613    
2614  # ... FTL ...  # ... FTL ...
2615  ftlall: ftl_taf  ftlall: ftl_taf
2616  ftltaf: ftl_taf_output.f  ftltaf: ftl_taf_output.$FS
2617  ftltamc: ftl_tamc_output.f  ftltamc: ftl_tamc_output.$FS
2618    
2619  ftl_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ftl_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)
2620          @$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
2621          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
2622          -rm -f ftl_config.template          -rm -f ftl_config.template
2623          @make \$(F77FILES)          @make \$(F77FILES)
2624          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2625          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS
2626    
2627  ftl_taf_output.f: ftl_input_code.f  ftl_taf_output.$FS: ftl_input_code.$FS
2628          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2629          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
2630    
2631  ftltafonly:  ftltafonly:
2632          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2633          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
2634    
2635  ftl_taf: ftl_taf_output.o \$(OBJFILES)  ftl_taf: ftl_taf_output.o \$(OBJFILES)
2636          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
2637    
2638  ftl_tamc_output.f: ftl_input_code.f  ftl_tamc_output.$FS: ftl_input_code.$FS
2639          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.f          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS
2640          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
2641    
2642  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2643          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
2644    
2645    
2646  # ... SVD ...  # ... SVD ...
2647  svdtaf: ad_taf_output.f ftl_taf_output.f  svdtaf: ad_taf_output.$FS ftl_taf_output.$FS
2648  svdall: svd_taf          @echo "--->>> Only ran TAF to generate SVD code!    <<<---"
2649            @echo "--->>> Do make svdall afterwards to compile. <<<---"
2650    svdall: svd_touch svd_taf
2651    
2652  svd_taf: ad_taf_output.o ftl_taf_output.o \$(OBJFILES)  svd_taf: \$(OBJFILES)
2653          \$(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)
2654    
2655            @echo "--->>> Only COMPILE svd code! <<<---"
2656            @echo "--->>> Assumes you previously <<<---"
2657            @echo "--->>> did make svdtaf        <<<---"
2658    
2659    svd_touch:
2660            @echo "--->>> Only COMPILE svd code! <<<---"
2661            @echo "--->>> Assumes you previously <<<---"
2662            @echo "--->>> did make svdtaf        <<<---"
2663            touch ad_taf_output.$FS ftl_taf_output.$FS
2664            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ad_taf_output.$FS
2665            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ftl_taf_output.$FS
2666            @$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
2667            cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2668            -rm -f ftl_config.template
2669    
2670  #=========================================  #=========================================
2671    

Legend:
Removed from v.1.93  
changed lines
  Added in v.1.149

  ViewVC Help
Powered by ViewVC 1.1.22