/[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.115 by edhill, Thu Jan 6 15:09:54 2005 UTC revision 1.147 by ce107, Fri May 5 19:00:28 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
135  .SUFFIXES:  .SUFFIXES:
136  .SUFFIXES: .$tfs .F  .SUFFIXES: .$tfs .F
137  .F.$tfs:  .F.$tfs:
# 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
# Line 523  Usage: "$0" [OPTIONS] Line 609  Usage: "$0" [OPTIONS]
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
619    
# 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()  {  check_HAVE_STAT()  {
866      get_fortran_c_namemangling      get_fortran_c_namemangling
867      cat <<EOF > genmake_tc_1.c      cat <<EOF > genmake_tc_1.c
# Line 698  void FC_NAMEMANGLE(tfsize) ( int *nbyte Line 885  void FC_NAMEMANGLE(tfsize) ( int *nbyte
885  EOF  EOF
886      make genmake_tc_1.o >> genmake_tc.log 2>&1      make genmake_tc_1.o >> genmake_tc.log 2>&1
887      RET_C=$?      RET_C=$?
888      cat <<EOF > genmake_tc_2.f      cat <<EOF > genmake_tc_2.$FS
889        program hello        program hello
890        integer nbyte        integer nbyte
891        call tfsize(nbyte)        call tfsize(nbyte)
892        print *," HELLO WORLD", nbyte        print *," HELLO WORLD", nbyte
893        end program hello        end
894  EOF  EOF
895      $FC $FFLAGS -o genmake_tc genmake_tc_2.f genmake_tc_1.o >> genmake_tc.log 2>&1      echo >> genmake_warnings
896      RET_F=$?      echo "running: check_HAVE_STAT()" >> genmake_warnings
897      test -x ./genmake_tc  &&  ./genmake_tc >> genmake_tc.log 2>&1      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=$?      RETVAL=$?
902      if test "x$RETVAL" = x0 ; then      if test "x$RETVAL" = x0 ; then
903          HAVE_STAT=t          HAVE_STAT=t
# Line 721  check_netcdf_libs()  { Line 911  check_netcdf_libs()  {
911      if test ! "x$SKIP_NETCDF_CHECK" = x ; then      if test ! "x$SKIP_NETCDF_CHECK" = x ; then
912          return          return
913      fi      fi
914      echo "" > genmake_tnc.log      echo >> genmake_warnings
915      cat <<EOF > genmake_tnc.for      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  EOF
920      if test ! "x$MPI" = x ; then      if test ! "x$MPI" = x ; then
921          echo '#include "mpif.h"' >> genmake_tnc.for          echo '#include "mpif.h"' >> genmake_tnc.F
922      fi      fi
923      cat <<EOF >> genmake_tnc.for      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 739  EOF Line 930  EOF
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 "Executing:" > genmake_tnc.log      echo "===  genmake_tnc.F  ===" > genmake_tnc.log
934      echo "  $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f" \      cat genmake_tnc.F >> genmake_tnc.log
935          > genmake_tnc.log      echo "===  genmake_tnc.F  ===" >> genmake_tnc.log
936      RET_CPP=f      RET_CPP=f
937      $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f 2>/dev/null  \      COMM="$CPP $DEFINES $INCLUDES genmake_tnc.F"
938          &&  RET_CPP=t      echo "$COMM" >> genmake_tnc.log
939        $COMM > genmake_tnc.$FS 2>/dev/null  &&  RET_CPP=t
940      if test "x$RET_CPP" = xf ; then      if test "x$RET_CPP" = xf ; then
941          echo "  WARNING: CPP failed to pre-process the netcdf test." \          echo "  WARNING: CPP failed to pre-process the netcdf test." \
942              > genmake_tnc.log              >> genmake_tnc.log
943          echo "    Please check that \$INCLUDES is properly set." \          echo "    Please check that \$INCLUDES is properly set." \
944              > genmake_tnc.log              >> genmake_tnc.log
945      fi      fi
946      echo "Executing:" > genmake_tnc.log      echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.$FS  \ " >> genmake_tnc.log
947      echo "  $FC $FFLAGS $FOPTIM -c genmake_tnc.f" > genmake_tnc.log      echo "  &&  $LINK -o genmake_tnc.o $LIBS" >> genmake_tnc.log
948      echo "  $LINK -o genmake_tnc.o $LIBS" > genmake_tnc.log      $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
     $FC $FFLAGS $FOPTIM -c genmake_tnc.f >> genmake_tnc.log 2>&1  \  
949          &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1          &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1
950      RET_COMPILE=$?      RET_COMPILE=$?
951        cat genmake_tnc.log >> genmake_warnings
952    
953      #EH3  Remove test program execution for machines that either disallow      #EH3  Remove test program execution for machines that either disallow
954      #EH3  execution or cannot support it (eg. cross-compilers)      #EH3  execution or cannot support it (eg. cross-compilers)
# Line 769  EOF Line 961  EOF
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 -c genmake_tnc.f >> genmake_tnc.log 2>&1  \          echo "$CPP $DEFINES $INCLUDES genmake_tnc.F > genmake_tnc.$FS \ " >> genmake_tnc.log
966            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            $CPP $DEFINES $INCLUDES genmake_tnc.F > 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              &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1
971          RET_COMPILE=$?          RET_COMPILE=$?
972            cat genmake_tnc.log >> genmake_warnings
973          if test "x$RET_COMPILE" = x0 ; then          if test "x$RET_COMPILE" = 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 804  DEFINES= Line 999  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=
# Line 823  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=  HAVE_STAT=
1038  HAVE_NETCDF=  HAVE_NETCDF=
1039  HAVE_ETIME=  HAVE_ETIME=
1040    IGNORE_TIME=
1041    
1042  MODS=  MODS=
1043  TOOLSDIR=  TOOLSDIR=
# Line 844  BASH= Line 1050  BASH=
1050  PWD=`pwd`  PWD=`pwd`
1051  test "x$MAKE" = x  &&  MAKE=make  test "x$MAKE" = x  &&  MAKE=make
1052  test "x$AWK" = x   &&  AWK=awk  test "x$AWK" = x   &&  AWK=awk
1053    EMBED_SRC=
1054  THISHOST=`hostname`  THISHOST=`hostname`
1055  THISCWD=`pwd`  THISCWD=`pwd`
1056  THISDATE=`date`  THISDATE=`date`
# Line 877  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 "
# Line 1057  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 1080  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 1095  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 1136  fi Line 1368  fi
1368    
1369  #  Find the MITgcm ${THISVER}  #  Find the MITgcm ${THISVER}
1370  if test -f "${ROOTDIR}/doc/tag-index" ; then  if test -f "${ROOTDIR}/doc/tag-index" ; then
1371      THISVER=`grep checkpoint ${ROOTDIR}/doc/tag-index | head -1`      THISVER=`grep '^checkpoint' ${ROOTDIR}/doc/tag-index | head -1`
1372    fi
1373    
1374    if test "x$MAKEFILE" = x ; then
1375        MAKEFILE="Makefile"
1376  fi  fi
1377    
1378  echo "  getting OPTFILE information:  "  echo "  getting OPTFILE information:  "
# Line 1168  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 1198  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 1274  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 1284  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    if test ! "x$GSL" = x ; then
1598          echo "  Turning on use of GSL to control floating point calculations"
1599          echo "  Please make sure GSLINC, GSLLIB are defined"
1600          DEFINES="$DEFINES -DUSE_GSL_IEEE"
1601          INCLUDES="$INCLUDES $GSLINC"
1602          LIBS="$LIBS $GSLLIB"
1603    fi
1604    
1605  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
1606  printf "  Do we have the system() command using $FC...  "  printf "  Do we have the system() command using $FC...  "
1607  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1608        program hello        program hello
1609        call system('echo hi')        call system('echo hi')
1610        end        end
1611  EOF  EOF
1612  $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
1613  RETVAL=$?  RETVAL=$?
1614  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1615      HAVE_SYSTEM=t      HAVE_SYSTEM=t
# Line 1304  fi Line 1622  fi
1622  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1623    
1624  printf "  Do we have the fdate() command using $FC...  "  printf "  Do we have the fdate() command using $FC...  "
1625  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1626        program hello        program hello
1627        CHARACTER(128) string        CHARACTER*(128) string
1628        string = ' '        string = ' '
1629        call fdate( string )        call fdate( string )
1630        print *, string        print *, string
1631        end        end
1632  EOF  EOF
1633  $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
1634  RETVAL=$?  RETVAL=$?
1635  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1636      HAVE_FDATE=t      HAVE_FDATE=t
# Line 1325  fi Line 1643  fi
1643  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1644    
1645  printf "  Do we have the etime() command using $FC...  "  printf "  Do we have the etime() command using $FC...  "
1646  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1647        program hello        program hello
1648        REAL*4 ACTUAL, TARRAY(2)        REAL*4 ACTUAL, TARRAY(2)
1649        EXTERNAL ETIME        EXTERNAL ETIME
# Line 1334  cat > genmake_tcomp.f <<EOF Line 1652  cat > genmake_tcomp.f <<EOF
1652        print *, tarray        print *, tarray
1653        end        end
1654  EOF  EOF
1655  $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
1656  RETVAL=$?  RETVAL=$?
1657  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1658      HAVE_ETIME=t      HAVE_ETIME=t
# Line 1352  if test "x$HAVE_CLOC" != x ; then Line 1670  if test "x$HAVE_CLOC" != x ; then
1670      echo "yes"      echo "yes"
1671  else  else
1672      echo "no"      echo "no"
1673        if test "x$EMBED_SRC" = xt ; then
1674            echo "    WARNING: you requested file embedding but it has"
1675            echo "      been disabled since C code cannot be called"
1676            EMBED_SRC=
1677        fi
1678    fi
1679    rm -f genmake_t*
1680    
1681    printf "  Can we unlimit the stack size using $FC...  "
1682    check_HAVE_SETRLSTK
1683    if test "x$HAVE_SETRLSTK" != x ; then
1684        echo "yes"
1685    else
1686        echo "no"
1687    fi
1688    rm -f genmake_t*
1689    
1690    printf "  Can we register a signal handler using $FC...  "
1691    check_HAVE_SIGREG
1692    if test "x$HAVE_SIGREG" != x ; then
1693        echo "yes"
1694    else
1695        echo "no"
1696  fi  fi
1697  rm -f genmake_t*  rm -f genmake_t*
1698    
# Line 1371  if test "x$HAVE_NETCDF" != x ; then Line 1712  if test "x$HAVE_NETCDF" != x ; then
1712  else  else
1713      echo "no"      echo "no"
1714  fi  fi
1715    DEFINES="$DEFINES $IGNORE_TIME"
1716    
1717    if test "x$EMBED_SRC" = xt ; then
1718        build_embed_encode
1719    fi
1720    if test "x$EMBED_SRC" = xt ; then
1721        ENABLE="$ENABLE embed_files"
1722    fi
1723    
1724    
1725  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
# Line 1388  for d in $MODS ; do Line 1737  for d in $MODS ; do
1737  done  done
1738  echo  echo
1739    
 if test "x$MAKEFILE" = x ; then  
     MAKEFILE="Makefile"  
 fi  
1740  if test "x${PLATFORM}" = x ; then  if test "x${PLATFORM}" = x ; then
1741      PLATFORM=$p_PLATFORM      PLATFORM=$p_PLATFORM
1742  fi  fi
# Line 1722  for n in $names ; do Line 2068  for n in $names ; do
2068              fi              fi
2069          done          done
2070          if test "x$has_pack" = xf ; then          if test "x$has_pack" = xf ; then
2071              undef=`echo "ALLOW_$n" | $AWK '{print toupper($0)}'`              undef=`echo "ALLOW_$n" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
2072              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"
2073          fi          fi
2074      fi      fi
2075  done  done
2076  ENABLED_PACKAGES=  ENABLED_PACKAGES=
2077  for i in $PACKAGES ; do  for i in $PACKAGES ; do
2078      def=`echo "ALLOW_$i" | $AWK '{print toupper($0)}'`      def=`echo "ALLOW_$i" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
2079      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"
2080  #eh3 DEFINES="$DEFINES -D$def"  #eh3 DEFINES="$DEFINES -D$def"
2081    
# Line 1813  for i in $SOURCEDIRS ; do Line 2159  for i in $SOURCEDIRS ; do
2159          cat $i/$j >> ad_files          cat $i/$j >> ad_files
2160      done      done
2161  done  done
2162    if test ! "x"$FS = "x.f" ; then
2163        cat ad_files | sed -e "s/\.f/.$FS/g" > ad_files_f
2164        mv -f ad_files_f ad_files
2165    fi
2166    
2167  echo  echo
2168  echo "===  Creating the Makefile  ==="  echo "===  Creating the Makefile  ==="
# Line 1824  for i in $INCLUDEDIRS ; do Line 2173  for i in $INCLUDEDIRS ; do
2173      fi      fi
2174  done  done
2175    
2176    if test ! "x$DIVA" = x ; then
2177        echo "  Creating the pseudo-MPI include directory"
2178        INCLUDES="-I./mpi_headers $INCLUDES"
2179        rm -rf ./mpi_headers
2180        mkdir -p ./mpi_headers
2181    
2182        if test "x$MPIINCLUDEDIR" = x ; then
2183            if test "x$MPIHOME" = x ; then
2184                MPIHOME='/usr'
2185            fi
2186            MPIINCLUDEDIR='$MPIHOME/include'
2187        fi
2188        
2189        if test -r $MPIINCLUDEDIR/mpif.h ; then
2190            for i in $MPI_HEADER_FILES; do
2191                cp -p $MPIINCLUDEDIR/$i ./mpi_headers
2192            done
2193    
2194            perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h
2195        else
2196            echo " We cannot create a copy of mpif.h!"
2197            exit -1
2198        fi
2199    fi
2200    
2201  echo "  Determining the list of source and include files"  echo "  Determining the list of source and include files"
2202  rm -rf .links.tmp  rm -rf .links.tmp
2203  mkdir .links.tmp  mkdir .links.tmp
2204    touch .links.tmp/foo
2205    if test ! -r ".links.tmp/foo" ; then
2206        echo
2207        echo "ERROR : something is wrong with your directory permissions or"
2208        echo "   your user file-creation mask (\"umask\") since creating a"
2209        echo "   sub-dir, touch-ing a file within it, and then reading it is"
2210        echo "   not working.  Please try setting your umask to something"
2211        echo "   sane such as:"
2212        echo
2213        echo "      umask 0002"
2214        echo
2215        echo "   and please verify that you have the proper permissions for"
2216        echo "   creating sub-directories and then reading files created"
2217        echo "   within them."
2218        echo
2219        exit 1
2220    fi
2221    rm -f .links.tmp/foo
2222  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
2223  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
2224  printf 'SRCFILES = '    > srclist.inc  printf 'SRCFILES = '    > srclist.inc
# Line 1842  for d in $alldirs ; do Line 2234  for d in $alldirs ; do
2234      for sf in $sfiles ; do      for sf in $sfiles ; do
2235          if test ! -r ".links.tmp/$sf" ; then          if test ! -r ".links.tmp/$sf" ; then
2236              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
2237                    ignore_f=f
2238                  case $d/$sf in                  case $d/$sf in
2239                    ./$PACKAGES_DOT_H)                    ./$PACKAGES_DOT_H)
2240                            ignore_f=t
2241                          ;;                          ;;
2242                    ./AD_CONFIG.h)                    ./AD_CONFIG.h)
2243                            ignore_f=t
2244                          ;;                          ;;
2245                    ./FC_NAMEMANGLE.h)                    ./FC_NAMEMANGLE.h)
2246                            ignore_f=t
2247                          ;;                          ;;
2248                    ./BUILD_INFO.h)                    ./BUILD_INFO.h)
2249                            ignore_f=t
2250                            ;;
2251                      ./EMBEDDED_FILES.h)
2252                            ignore_f=t
2253                          ;;                          ;;
2254                    *)                    *)
2255                          touch .links.tmp/$sf                          #  For the local directory *ONLY*,
2256                          deplist="$deplist $sf"                          #  ignore all soft-links
2257                            if test "x$HAVE_TEST_L" = xt -a "x$d" = x. -a -L $sf ; then
2258                                ignore_f=t
2259                            else
2260                                touch .links.tmp/$sf
2261                                deplist="$deplist $sf"
2262                            fi
2263                          ;;                          ;;
2264                  esac                  esac
2265                  extn=`echo $sf | $AWK -F. '{print $NF}'`                  if test "x$ignore_f" = xf ; then
2266                  case $extn in                      extn=`echo $sf | $AWK -F. '{print $NF}'`
2267                      F)                      case $extn in
2268                          echo    " \\"  >> srclist.inc                          F)
2269                          printf " $sf" >> srclist.inc                              echo    " \\"  >> srclist.inc
2270                          ;;                              printf " $sf" >> srclist.inc
2271                      F90)                              ;;
2272                          echo    " \\"  >> f90srclist.inc                          F90)
2273                          printf " $sf" >> f90srclist.inc                              echo    " \\"  >> f90srclist.inc
2274                          ;;                              printf " $sf" >> f90srclist.inc
2275                      c)                              ;;
2276                          echo    " \\"  >> csrclist.inc                          c)
2277                          printf " $sf" >> csrclist.inc                              echo    " \\"  >> csrclist.inc
2278                          ;;                              printf " $sf" >> csrclist.inc
2279                      h)                              ;;
2280                          echo    " \\"  >> hlist.inc                          h)
2281                          printf " $sf" >> hlist.inc                              echo    " \\"  >> hlist.inc
2282                          ;;                              printf " $sf" >> hlist.inc
2283                      flow)                              ;;
2284                          echo    " \\"  >> ad_flow_files.inc                          flow)
2285                          printf " $sf" >> ad_flow_files.inc                              echo    " \\"  >> ad_flow_files.inc
2286                          ;;                              printf " $sf" >> ad_flow_files.inc
2287                  esac                              ;;
2288                        esac
2289                    fi
2290              fi              fi
2291          fi          fi
2292      done      done
# Line 1954  DISABLED_PACKAGES = ${DISABLED_PACKAGES} Line 2362  DISABLED_PACKAGES = ${DISABLED_PACKAGES}
2362    
2363  # These files are created by Makefile  # These files are created by Makefile
2364  SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h BUILD_INFO.h  SPECIAL_FILES = ${PACKAGES_DOT_H} AD_CONFIG.h FC_NAMEMANGLE.h BUILD_INFO.h
   
2365  EOF  EOF
2366    
2367  #  Note: figure out some way to add Hyades JAM libraries here  if test "x$EMBED_SRC" = xt ; then
2368        echo "EMBEDDED_FILES = EMBEDDED_FILES.h" >>$MAKEFILE
2369    else
2370        echo "EMBEDDED_FILES = " >>$MAKEFILE
2371    fi
2372    
2373    #  Note: figure out some way to add Hyades JAM libraries here
2374  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2375  # Unix ln (link)  # Unix ln (link)
2376  LN = ${LN}  LN = ${LN}
# Line 2009  cat hlist.inc         >> $MAKEFILE Line 2421  cat hlist.inc         >> $MAKEFILE
2421  cat ad_flow_files.inc >> $MAKEFILE  cat ad_flow_files.inc >> $MAKEFILE
2422  echo >> $MAKEFILE  echo >> $MAKEFILE
2423  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE
2424  echo 'F90FILES =  $(F90SRCFILES:.F=.'$FS90')' >> $MAKEFILE  echo 'F90FILES =  $(F90SRCFILES:.F90=.'$FS90')' >> $MAKEFILE
2425  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE
2426  echo >> $MAKEFILE  echo >> $MAKEFILE
2427  echo '.SUFFIXES:' >> $MAKEFILE  echo '.SUFFIXES:' >> $MAKEFILE
# Line 2020  rm -f ad_flow_files.inc Line 2432  rm -f ad_flow_files.inc
2432  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2433    
2434  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
2435  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES) \$(EMBEDDED_FILES)
2436          @echo Creating \$@ ...          @echo Creating \$@ ...
2437          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
2438  depend:  depend:
# Line 2029  depend: Line 2441  depend:
2441          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2442          -rm -f makedepend.out          -rm -f makedepend.out
2443    
2444    lib: libmitgcmuv.a
2445    
2446    libmitgcmuv.a: \$(OBJFILES)
2447            ar rcv libmitgcmuv.a \$(OBJFILES)
2448    
2449  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)
2450    
2451  small_f: \$(F77FILES) \$(F90FILES)  small_f: \$(F77FILES) \$(F90FILES)
# Line 2049  CLEAN: Line 2466  CLEAN:
2466          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2467          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2468          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
2469          -rm -f \$(EXECUTABLE) output.txt STD*          -rm -f \$(EXECUTABLE) *.txt STD* *diagnostics.log datetime
2470            -rm -rf mnc_test_*
2471    
2472  #eh3 Makefile: makefile  #eh3 Makefile: makefile
2473  makefile:  makefile:
# Line 2077  test ! "x$THISUSER" = x && echo "      -echo Line 2495  test ! "x$THISUSER" = x && echo "      -echo
2495  test ! "x$THISDATE" = x && echo "       -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE  test ! "x$THISDATE" = x && echo "       -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE
2496  test ! "x$THISHOST" = x && echo "       -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE  test ! "x$THISHOST" = x && echo "       -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE
2497    
2498    if test "x$EMBED_SRC" = xt ; then
2499        cat >>$MAKEFILE <<EOF
2500    
2501    decode_files.o : EMBEDDED_FILES.h
2502    
2503    ##  \$(F77FILES)
2504    all_fF.tar.gz : \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(F77FILES) Makefile
2505            @echo Creating \$@ ...
2506            -tar -hcf all_fF.tar \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(F77FILES) Makefile
2507            -rm -f all_fF.tar.gz
2508            -gzip all_fF.tar
2509    
2510    EMBEDDED_FILES.h : all_fF.tar.gz
2511            @echo Creating \$@ ...
2512            -\${ROOTDIR}/tools/embed_encode/encode_files EMBEDDED_FILES.h all_fF.tar.gz
2513    
2514    EOF
2515    fi
2516    
2517  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2518    
2519  # The normal chain of rules is (  .F - .$FS - .o  )  # The normal chain of rules is (  .F - .$FS - .o  )
# Line 2093  cat >>$MAKEFILE <<EOF Line 2530  cat >>$MAKEFILE <<EOF
2530  .$FS90.o:  .$FS90.o:
2531          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
2532  .c.o:  .c.o:
2533          \$(CC) \$(CFLAGS) -c \$<          \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<
2534    
2535  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
2536  .F.p:  .F.p:
# Line 2138  cat >>$MAKEFILE <<EOF Line 2575  cat >>$MAKEFILE <<EOF
2575    
2576  # ... AD ...  # ... AD ...
2577  adall: ad_taf  adall: ad_taf
2578  adtaf: ad_taf_output.f  adtaf: ad_taf_output.$FS
2579  adtamc: ad_tamc_output.f  adtamc: ad_tamc_output.$FS
2580    
2581  ad_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ad_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)
2582          @$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
2583          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
2584          -rm -f ad_config.template          -rm -f ad_config.template
2585          @make \$(F77FILES)          @make \$(F77FILES)
2586          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2587          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.$FS
2588    
2589  ad_taf_output.f: ad_input_code.f  ad_taf_output.$FS: ad_input_code.$FS
2590          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2591          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
2592    
2593  adtafonly:  adtafonly:
2594          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2595          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
2596    
2597  ad_taf: ad_taf_output.o \$(OBJFILES)  ad_taf: ad_taf_output.o \$(OBJFILES)
2598          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2599    
2600  ad_tamc_output.f: ad_input_code.f  ad_tamc_output.$FS: ad_input_code.$FS
2601          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.f          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS
2602          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
2603    
2604  ad_tamc: ad_tamc_output.o \$(OBJFILES)  ad_tamc: ad_tamc_output.o \$(OBJFILES)
2605          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
# Line 2175  adtrick: Line 2612  adtrick:
2612    
2613  # ... FTL ...  # ... FTL ...
2614  ftlall: ftl_taf  ftlall: ftl_taf
2615  ftltaf: ftl_taf_output.f  ftltaf: ftl_taf_output.$FS
2616  ftltamc: ftl_tamc_output.f  ftltamc: ftl_tamc_output.$FS
2617    
2618  ftl_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ftl_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)
2619          @$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
2620          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
2621          -rm -f ftl_config.template          -rm -f ftl_config.template
2622          @make \$(F77FILES)          @make \$(F77FILES)
2623          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2624          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS
2625    
2626  ftl_taf_output.f: ftl_input_code.f  ftl_taf_output.$FS: ftl_input_code.$FS
2627          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2628          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
2629    
2630  ftltafonly:  ftltafonly:
2631          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2632          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
2633    
2634  ftl_taf: ftl_taf_output.o \$(OBJFILES)  ftl_taf: ftl_taf_output.o \$(OBJFILES)
2635          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
2636    
2637  ftl_tamc_output.f: ftl_input_code.f  ftl_tamc_output.$FS: ftl_input_code.$FS
2638          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.f          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS
2639          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
2640    
2641  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2642          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
2643    
2644    
2645  # ... SVD ...  # ... SVD ...
2646  svdtaf: ad_taf_output.f ftl_taf_output.f  svdtaf: ad_taf_output.$FS ftl_taf_output.$FS
2647          @echo "--->>> Only ran TAF to generate SVD code!    <<<---"          @echo "--->>> Only ran TAF to generate SVD code!    <<<---"
2648          @echo "--->>> Do make svdall afterwards to compile. <<<---"          @echo "--->>> Do make svdall afterwards to compile. <<<---"
2649  svdall: svd_touch svd_taf  svdall: svd_touch svd_taf
# Line 2222  svd_touch: Line 2659  svd_touch:
2659          @echo "--->>> Only COMPILE svd code! <<<---"          @echo "--->>> Only COMPILE svd code! <<<---"
2660          @echo "--->>> Assumes you previously <<<---"          @echo "--->>> Assumes you previously <<<---"
2661          @echo "--->>> did make svdtaf        <<<---"          @echo "--->>> did make svdtaf        <<<---"
2662          touch ad_taf_output.f ftl_taf_output.f          touch ad_taf_output.$FS ftl_taf_output.$FS
2663          \$(FC) \$(FFLAGS) \$(FOPTIM) -c ad_taf_output.f          \$(FC) \$(FFLAGS) \$(FOPTIM) -c ad_taf_output.$FS
2664          \$(FC) \$(FFLAGS) \$(FOPTIM) -c ftl_taf_output.f          \$(FC) \$(FFLAGS) \$(FOPTIM) -c ftl_taf_output.$FS
2665          @$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
2666          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
2667          -rm -f ftl_config.template          -rm -f ftl_config.template

Legend:
Removed from v.1.115  
changed lines
  Added in v.1.147

  ViewVC Help
Powered by ViewVC 1.1.22