/[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.86 by edhill, Sat Jul 17 02:52:14 2004 UTC revision 1.152 by jmc, Thu Jun 15 17:11:37 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 -e 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=$?
142      if test "x$RETVAL" != x0 -o ! -e "genmake_hello."$tfs ; then      if test "x$RETVAL" != x0 -o ! -f "genmake_hello."$tfs ; then
143          if test "x$FS" = x ; then          if test "x$FS" = x ; then
144              FS='for'              FS='for'
145              FS90='fr9'              FS90='fr9'
# 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 -e 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
214              echo "    a system-default makedepend was not found."              echo "    a system-default makedepend was not found."
215                            
216              #  Try to build the cyrus implementation              #  Try to build the cyrus implementation
217              rm -f ./genmake_cy_md              build_cyrus_makedepend
             (  
                 cd $ROOTDIR/tools/cyrus-imapd-makedepend  \  
                     &&  ./configure > /dev/null 2>&1  \  
                     &&  make > /dev/null 2>&1  
                 if test -x ./makedepend.exe ; then  
                     $LN ./makedepend.exe ./makedepend  
                 fi  
                 ./makedepend ifparser.c > /dev/null 2>&1  \  
                     &&  echo "true"  
             ) > ./genmake_cy_md  
             grep true ./genmake_cy_md > /dev/null 2>&1  
218              RETVAL=$?              RETVAL=$?
219              if test "x$RETVAL" = x0 ; then              if test "x$RETVAL" != x0 ; then
                 MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend'  
             else  
220                  MAKEDEPEND='$(TOOLSDIR)/xmakedepend'                  MAKEDEPEND='$(TOOLSDIR)/xmakedepend'
221              fi              fi
222              rm -f ./genmake_cy_md              rm -f ./genmake_cy_md
223          fi          fi
224        else
225            #  echo "MAKEDEPEND=${MAKEDEPEND}"
226            echo "${MAKEDEPEND}" | grep -i cyrus > /dev/null 2>&1
227            RETVAL=$?
228            if test x"$RETVAL" = x0 ; then
229                build_cyrus_makedepend
230            fi
231      fi      fi
232  }  }
233    
234    
235    build_cyrus_makedepend()  {
236        rm -f ./genmake_cy_md
237        (
238            cd $ROOTDIR/tools/cyrus-imapd-makedepend  \
239                &&  ./configure > /dev/null 2>&1  \
240                &&  make > /dev/null 2>&1
241            if test -x ./makedepend.exe ; then
242                $LN ./makedepend.exe ./makedepend
243            fi
244            ./makedepend ifparser.c > /dev/null 2>&1  \
245                &&  echo "true"
246        ) > ./genmake_cy_md
247        grep true ./genmake_cy_md > /dev/null 2>&1
248        RETVAL=$?
249        rm -f ./genmake_cy_md
250        if test "x$RETVAL" = x0 ; then
251            MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend'
252            return 0
253        else
254            echo "WARNING: unable to build cyrus-imapd-makedepend"
255            return 1
256        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 251  find_possible_configs()  { Line 323  find_possible_configs()  {
323    
324      look_for_makedepend      look_for_makedepend
325    
326      # look for possible fortran compilers      #================================================================
327      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95"      #  look for possible C compilers
328        tmp="$MITGCM_CC $CC gcc c89 cc c99 mpicc"
329        p_CC=
330        for c in $tmp ; do
331            rm -f ./genmake_hello.c  ./genmake_hello
332            cat >> genmake_hello.c << EOF
333    #include <stdio.h>
334    int main(int argc, char **argv) {
335      printf("Hello!\n");
336      return 0;
337    }
338    EOF
339            $c -o genmake_hello genmake_hello.c > /dev/null 2>&1
340            RETVAL=$?
341            if test "x${RETVAL}" = x0 ; then
342                p_CC="$p_CC $c"
343            fi
344        done
345        rm -f ./genmake_hello.c ./genmake_hello
346        if test "x${p_CC}" = x ; then
347            cat 1>&2 <<EOF
348    
349    Error: No C compilers were found in your path.  Please specify one using:
350    
351        1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
352        2) the CC or MITGCM_CC environment variables.
353    
354    EOF
355            exit 1
356        else
357            echo "  The possible C compilers found in your path are:"
358            echo "   "$p_CC
359            if test "x$CC" = x ; then
360                CC=`echo $p_CC | $AWK '{print $1}'`
361                echo "  Setting C compiler to: "$CC
362            fi
363        fi
364    
365        #================================================================
366        #  look for possible FORTRAN compilers
367        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 277  Error: No Fortran compilers were found i Line 389  Error: No Fortran compilers were found i
389    
390      1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),      1) an "optfile" on (eg. "-optfile=path/to/OPTFILE"),
391      2) a command-line option (eg. "-fc NAME"), or      2) a command-line option (eg. "-fc NAME"), or
392      3) the MITGCM_FC environment variable.      3) the FC or MITGCM_FC environment variables.
393    
394  EOF  EOF
395          exit 1          exit 1
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 448  Usage: "$0" [OPTIONS] Line 568  Usage: "$0" [OPTIONS]
568            will search for a working compiler by trying a list of            will search for a working compiler by trying a list of
569            "usual suspects" such as g77, f77, etc.            "usual suspects" such as g77, f77, etc.
570    
571        -cc NAME | --cc NAME | -cc=NAME | --cc=NAME
572              Use "NAME" as the C compiler.  By default, genmake
573              will search for a working compiler by trying a list of
574              "usual suspects" such as gcc, c89, cc, etc.
575    
576      -[no]ieee | --[no]ieee      -[no]ieee | --[no]ieee
577            Do or don't use IEEE numerics.  Note that this option            Do or don't use IEEE numerics.  Note that this option
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 483  EOF Line 637  EOF
637    
638  #  Build a CPP macro to automate calling C routines from FORTRAN  #  Build a CPP macro to automate calling C routines from FORTRAN
639  get_fortran_c_namemangling()  {  get_fortran_c_namemangling()  {
640    
641        #echo "FC_NAMEMANGLE = \"$FC_NAMEMANGLE\""
642        if test ! "x$FC_NAMEMANGLE" = x ; then
643            return 0
644        fi
645    
646      default_nm="#define FC_NAMEMANGLE(X) X ## _"      default_nm="#define FC_NAMEMANGLE(X) X ## _"
647            
648      cat > genmake_test.c <<EOF      cat > genmake_test.c <<EOF
# Line 500  WARNING: Please contact <MITgcm-support@ Line 660  WARNING: Please contact <MITgcm-support@
660  EOF  EOF
661          return 1          return 1
662      fi      fi
663      c_tcall=`nm genmake_test.o | grep 'T ' | grep tcall | cut -d ' ' -f 3`      c_tcall=`nm genmake_test.o 2>/dev/null | grep 'T ' | grep tcall | cut -d ' ' -f 3`
664      RETVAL=$?      RETVAL=$?
665      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
666          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 512  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 530  WARNING: Please contact <MITgcm-support@ Line 690  WARNING: Please contact <MITgcm-support@
690  EOF  EOF
691          return 1          return 1
692      fi      fi
693      f_tcall=`nm genmake_tcomp.o | grep 'T ' | grep tcall | cut -d ' ' -f 3`      f_tcall=`nm genmake_tcomp.o 2>/dev/null | grep 'T ' | grep tcall | cut -d ' ' -f 3`
694      RETVAL=$?      RETVAL=$?
695      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
696          FC_NAMEMANGLE=$default_nm          FC_NAMEMANGLE=$default_nm
# Line 584  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 606  EOF Line 766  EOF
766  }  }
767    
768    
769    check_HAVE_SIGREG()  {
770        if test ! "x$HAVE_SIGREG" = x ; then
771            return
772        fi
773        get_fortran_c_namemangling
774        cat <<EOF > genmake_tc_1.c
775    $FC_NAMEMANGLE
776    #include <stdlib.h>
777    #include <stdio.h>
778    #include <signal.h>
779    #include <errno.h>
780    #include <ucontext.h>
781    
782    int * ip;
783    
784    static void killhandler(
785        unsigned int sn, siginfo_t  si, struct ucontext *sc )
786    {
787        *ip = *ip + 1;
788        return;
789    }
790    
791    void FC_NAMEMANGLE(sigreg) (int * aip)
792    {
793        struct sigaction s;
794        ip = aip;
795        s.sa_flags = SA_SIGINFO;
796        s.sa_sigaction = (void *)killhandler;
797        if(sigaction (SIGTERM,&s,(struct sigaction *)NULL)) {
798            printf("Sigaction returned error = %d\n", errno);
799            exit(0);
800        }
801        return;
802    }
803    EOF
804        make genmake_tc_1.o >> genmake_warnings 2>&1
805        RET_C=$?
806        cat <<EOF > genmake_tc_2.$FS
807          program hello
808          integer anint
809          common /iv/ anint
810          external sigreg
811          call sigreg(anint)
812          end
813    EOF
814        echo >> genmake_warnings
815        echo "running: check_HAVE_SIGREG()" >> genmake_warnings
816        cat genmake_tc_2.$FS >> genmake_warnings
817        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
818        echo $COMM >> genmake_warnings
819        $COMM >> genmake_warnings 2>&1
820        RETVAL=$?
821        if test "x$RETVAL" = x0 ; then
822            HAVE_SIGREG=t
823            DEFINES="$DEFINES -DHAVE_SIGREG"
824        fi
825        rm -f genmake_tc*
826    }
827    
828    
829    check_HAVE_SETRLSTK()  {
830        if test "x$HAVE_SETRLSTK" = xt ; then
831            DEFINES="$DEFINES -DHAVE_SETRLSTK"
832            return
833        fi  
834        if test ! "x$HAVE_SETRLSTK" = x ; then
835            return
836        fi
837        get_fortran_c_namemangling
838        cat <<EOF > genmake_tc_1.c
839    $FC_NAMEMANGLE
840    #include <sys/time.h>
841    #include <sys/resource.h>
842    #include <unistd.h>
843    void FC_NAMEMANGLE(setrlstk) ()
844    {
845        struct rlimit rls;
846        rls.rlim_cur = RLIM_INFINITY;
847        rls.rlim_max = RLIM_INFINITY;
848        setrlimit(RLIMIT_STACK, &rls);
849        return;
850    }
851    EOF
852        make genmake_tc_1.o >> genmake_warnings 2>&1
853        RET_C=$?
854        cat <<EOF > genmake_tc_2.$FS
855          program hello
856          external setrlstk
857          call setrlstk()
858          end
859    EOF
860        echo >> genmake_warnings
861        echo "running: check_HAVE_SETRLSTK()" >> genmake_warnings
862        cat genmake_tc_2.$FS >> genmake_warnings
863        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
864        echo $COMM >> genmake_warnings
865        $COMM >> genmake_warnings 2>&1
866        RETVAL=$?
867        if test "x$RETVAL" = x0 ; then
868            HAVE_SETRLSTK=t
869            DEFINES="$DEFINES -DHAVE_SETRLSTK"
870        fi
871        rm -f genmake_tc*
872    }
873    
874    
875    check_HAVE_STAT()  {
876        get_fortran_c_namemangling
877        cat <<EOF > genmake_tc_1.c
878    $FC_NAMEMANGLE
879    #include <stdio.h>
880    #include <stdlib.h>
881    #include <unistd.h>
882    #include <sys/stat.h>
883    #include <sys/types.h>
884    void FC_NAMEMANGLE(tfsize) ( int *nbyte )
885    {
886        char name[512];
887        struct stat astat;
888    
889        name[0] = 'a'; name[1] = '\0';
890        if (! stat(name, &astat))
891            *nbyte = (int)(astat.st_size);
892        else
893            *nbyte = -1;
894    }
895    EOF
896        make genmake_tc_1.o >> genmake_tc.log 2>&1
897        RET_C=$?
898        cat <<EOF > genmake_tc_2.$FS
899          program hello
900          integer nbyte
901          call tfsize(nbyte)
902          print *," HELLO WORLD", nbyte
903          end
904    EOF
905        echo >> genmake_warnings
906        echo "running: check_HAVE_STAT()" >> genmake_warnings
907        cat genmake_tc_2.$FS >> genmake_warnings
908        COMM="$FC $FFLAGS -o genmake_tc genmake_tc_2.$FS genmake_tc_1.o"
909        echo $COMM >> genmake_warnings
910        $COMM >> genmake_tc.log 2>&1
911        RETVAL=$?
912        if test "x$RETVAL" = x0 ; then
913            HAVE_STAT=t
914            DEFINES="$DEFINES -DHAVE_STAT"
915        fi
916        rm -f genmake_tc*
917    }
918    
919    
920  check_netcdf_libs()  {  check_netcdf_libs()  {
921      cat <<EOF > genmake_tnc.for      if test ! "x$SKIP_NETCDF_CHECK" = x ; then
922            return
923        fi
924        echo >> genmake_warnings
925        echo "running: check_netcdf_libs()" >> genmake_warnings
926        cat <<EOF > genmake_tnc.F
927        program fgennc        program fgennc
928  #include "netcdf.inc"  #include "netcdf.inc"
929    EOF
930        if test ! "x$MPI" = x ; then
931            echo '#include "mpif.h"' >> genmake_tnc.F
932        fi
933        cat <<EOF >> genmake_tnc.F
934        integer iret, ncid, xid        integer iret, ncid, xid
935        iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)        iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)
936        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
# Line 619  check_netcdf_libs()  { Line 940  check_netcdf_libs()  {
940        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
941        end        end
942  EOF  EOF
943      $CPP genmake_tnc.for > genmake_tnc.f  \      echo "===  genmake_tnc.F  ===" > genmake_tnc.log
944          &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f $LIBS >> genmake_tnc.log 2>&1      cat genmake_tnc.F >> genmake_tnc.log
945        echo "===  genmake_tnc.F  ===" >> genmake_tnc.log
946        RET_CPP=f
947        COMM="cat genmake_tnc.F | $CPP $DEFINES $INCLUDES"
948        echo "$COMM" >> genmake_tnc.log
949        $COMM > genmake_tnc.$FS 2>/dev/null  &&  RET_CPP=t
950        if test "x$RET_CPP" = xf ; then
951            echo "  WARNING: CPP failed to pre-process the netcdf test." \
952                >> genmake_tnc.log
953            echo "    Please check that \$INCLUDES is properly set." \
954                >> genmake_tnc.log
955        fi
956        echo "$FC $FFLAGS $FOPTIM -c genmake_tnc.$FS  \ " >> genmake_tnc.log
957        echo "  &&  $LINK -o genmake_tnc.o $LIBS" >> genmake_tnc.log
958        $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
959            &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS >> genmake_tnc.log 2>&1
960      RET_COMPILE=$?      RET_COMPILE=$?
961      test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1      cat genmake_tnc.log >> genmake_warnings
962      RETVAL=$?  
963      if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then      #EH3  Remove test program execution for machines that either disallow
964        #EH3  execution or cannot support it (eg. cross-compilers)
965        #EH3
966        #EH3 test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1
967        #EH3 RETVAL=$?
968        #EH3 if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then
969    
970        if test "x$RET_COMPILE" = x0 ; then
971          HAVE_NETCDF=t          HAVE_NETCDF=t
972      else      else
973          # try again with "-lnetcdf" added to the libs          # try again with "-lnetcdf" added to the libs
974          $CPP genmake_tnc.for > genmake_tnc.f  \          echo "try again with added '-lnetcdf'" > genmake_tnc.log
975              &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f \          echo "cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS \ " >> genmake_tnc.log
976              $LIBS -lnetcdf >> genmake_tnc_2.log 2>&1          echo " &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS \ " >> genmake_tnc.log
977            echo " &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf" >> genmake_tnc.log
978            cat genmake_tnc.F | $CPP $DEFINES $INCLUDES > genmake_tnc.$FS 2>/dev/null  \
979                &&  $FC $FFLAGS $FOPTIM -c genmake_tnc.$FS >> genmake_tnc.log 2>&1  \
980                &&  $LINK -o genmake_tnc genmake_tnc.o $LIBS -lnetcdf >> genmake_tnc.log 2>&1
981          RET_COMPILE=$?          RET_COMPILE=$?
982          test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1          cat genmake_tnc.log >> genmake_warnings
983          RETVAL=$?          if test "x$RET_COMPILE" = x0 ; then
         if test "x$RET_COMPILE" = x0 -a "x$RETVAL" = x0 ; then  
984              LIBS="$LIBS -lnetcdf"              LIBS="$LIBS -lnetcdf"
985              HAVE_NETCDF=t              HAVE_NETCDF=t
         else  
             cat genmake_tnc.log >> genmake_warnings  
986          fi          fi
987      fi      fi
988      rm -f genmake_tnc*      rm -f genmake_tnc*
# Line 657  PLATFORM= Line 1001  PLATFORM=
1001  LN=  LN=
1002  S64=  S64=
1003  KPP=  KPP=
1004  FC=  #FC=
1005  CPP=  #CC=gcc
1006    #CPP=
1007  LINK=  LINK=
1008  DEFINES=  DEFINES=
1009  PACKAGES=  PACKAGES=
1010  ENABLE=  ENABLE=
1011  DISABLE=  DISABLE=
1012  MAKEFILE=  # MAKEFILE=
1013  MAKEDEPEND=  # MAKEDEPEND=
1014  PDEPEND=  PDEPEND=
1015  DUMPSTATE=t  DUMPSTATE=t
1016  PDEFAULT=  PDEFAULT=
1017  OPTFILE=  OPTFILE=
1018  INCLUDES="-I."  INCLUDES="-I. $INCLUDES"
1019  FFLAGS=  FFLAGS=
1020  FOPTIM=  FOPTIM=
1021  CFLAGS=  CFLAGS=
# Line 683  NOOPTFILES= Line 1028  NOOPTFILES=
1028  NOOPTFLAGS=  NOOPTFLAGS=
1029  MPI=  MPI=
1030  MPIPATH=  MPIPATH=
1031    TS=
1032    PAPIS=
1033    PCLS=
1034    FOOLAD=
1035    PAPI=
1036    PCL=
1037    HPMT=
1038    GSL=
1039    HAVE_TEST_L=
1040    
1041  # DEFINES checked by test compilation  # DEFINES checked by test compilation or command-line
1042  HAVE_SYSTEM=  HAVE_SYSTEM=
1043  HAVE_FDATE=  HAVE_FDATE=
1044  FC_NAMEMANGLE=  FC_NAMEMANGLE=
1045  HAVE_CLOC=  HAVE_CLOC=
1046    # HAVE_SETRLSTK=
1047    HAVE_STAT=
1048  HAVE_NETCDF=  HAVE_NETCDF=
1049  HAVE_ETIME=  HAVE_ETIME=
1050    IGNORE_TIME=
1051    
1052  MODS=  MODS=
1053  TOOLSDIR=  TOOLSDIR=
# Line 701  STANDARDDIRS="USE_THE_DEFAULT" Line 1058  STANDARDDIRS="USE_THE_DEFAULT"
1058  G2ARGS=  G2ARGS=
1059  BASH=  BASH=
1060  PWD=`pwd`  PWD=`pwd`
1061  MAKE=make  test "x$MAKE" = x  &&  MAKE=make
1062  AWK=awk  test "x$AWK" = x   &&  AWK=awk
1063  THISHOSTNAME=`hostname`  EMBED_SRC=
1064    THISHOST=`hostname`
1065  THISCWD=`pwd`  THISCWD=`pwd`
1066  THISDATE=`date`  THISDATE=`date`
1067    THISUSER=`echo $USER`
1068    THISVER=
1069  MACHINE=`uname -a`  MACHINE=`uname -a`
1070  EXECUTABLE=  EXECUTABLE=
1071  EXEHOOK=  EXEHOOK=
# Line 734  TAMC_EXTRA= Line 1094  TAMC_EXTRA=
1094    
1095  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
1096  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"  gm_s1="OPTFILE PDEPEND PDEFAULT MAKEFILE PLATFORM ROOTDIR MODS DISABLE ENABLE"
1097  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"
1098    
1099  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
1100  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 "
1101  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
1102  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOSTNAME THISDATE MACHINE"  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOST THISUSER THISDATE THISVER MACHINE"
1103  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
1104  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"
1105    
# Line 771  for i in . $MODS ; do Line 1131  for i in . $MODS ; do
1131      fi      fi
1132  done  done
1133  printf "  getting local config information:  "  printf "  getting local config information:  "
1134  if test -e $gm_local ; then  if test -f $gm_local ; then
1135      echo "using $gm_local"      echo "using $gm_local"
1136      . $gm_local      . $gm_local
1137      # echo "DISABLE=$DISABLE"      # echo "DISABLE=$DISABLE"
# Line 780  else Line 1140  else
1140      echo "none found"      echo "none found"
1141  fi  fi
1142    
1143  #  echo "$0::$1:$2:$3:$4:$5:$6:$7:"  #echo "$0::$1:$2:$3:$4:$5:$6:$7:"
1144  #OPTIONS=  #OPTIONS=
1145  #n=0  #n=0
1146  #for i ; do  #for i ; do
# Line 792  fi Line 1152  fi
1152  #done  #done
1153  #parse_options  #parse_options
1154  ac_prev=  ac_prev=
1155  for ac_option ; do  for ac_option in "$@" ; do
1156    
1157      G2ARGS="$G2ARGS \"$ac_option\""      G2ARGS="$G2ARGS \"$ac_option\""
1158    
# Line 888  for ac_option ; do Line 1248  for ac_option ; do
1248  #               ac_prev=cpp ;;  #               ac_prev=cpp ;;
1249  #           -cpp=* | --cpp=*)  #           -cpp=* | --cpp=*)
1250  #               CPP=$ac_optarg ;;  #               CPP=$ac_optarg ;;
1251                        
1252            -cc | --cc)
1253                ac_prev=CC ;;
1254            -cc=* | --cc=*)
1255                CC=$ac_optarg ;;
1256            
1257          -fortran | --fortran | -fc | --fc)          -fortran | --fortran | -fc | --fc)
1258              ac_prev=FC ;;              ac_prev=FC ;;
1259          -fc=* | --fc=*)          -fc=* | --fc=*)
# Line 909  for ac_option ; do Line 1274  for ac_option ; do
1274          -noieee | --noieee)          -noieee | --noieee)
1275              IEEE= ;;              IEEE= ;;
1276    
1277            -ts | --ts)
1278                TS=true ;;
1279            -papis | --papis)
1280                PAPIS=true ;;
1281            -pcls | --pcls)
1282                PCLS=true ;;
1283            -foolad | --foolad)
1284                FOOLAD=true ;;
1285            -papi | --papi)
1286                PAPI=true ;;
1287            -pcl | --pcl)
1288                PCL=true ;;
1289            -hpmt | --hpmt)
1290                HPMT=true ;;
1291    
1292            -gsl | --gsl)
1293                GSL=true ;;
1294    
1295          -mpi | --mpi)          -mpi | --mpi)
1296              MPI=true ;;              MPI=true ;;
1297          -mpi=* | --mpi=*)          -mpi=* | --mpi=*)
# Line 932  for ac_option ; do Line 1315  for ac_option ; do
1315              ac_prev=TAMC_EXTRA ;;              ac_prev=TAMC_EXTRA ;;
1316          -tamc_extra=* | --tamc_extra=*)          -tamc_extra=* | --tamc_extra=*)
1317              TAMC_EXTRA=$ac_optarg ;;              TAMC_EXTRA=$ac_optarg ;;
1318            
1319            -ignoretime | -ignore_time | --ignoretime | --ignore_time)
1320                IGNORE_TIME="-DIGNORE_TIME" ;;
1321    
1322            -es | --es | -embed-source | --embed-source)
1323                EMBED_SRC=t ;;
1324    
1325          -*)          -*)
1326              echo "Error: unrecognized option: "$ac_option              echo "Error: unrecognized option: "$ac_option
# Line 947  for ac_option ; do Line 1336  for ac_option ; do
1336            
1337  done  done
1338    
1339    
1340  if test -f ./.genmakerc ; then  if test -f ./.genmakerc ; then
1341      echo      echo
1342      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 959  if test -f ./.genmakerc ; then Line 1349  if test -f ./.genmakerc ; then
1349      echo      echo
1350  fi  fi
1351    
1352    #  Find the MITgcm ${ROOTDIR}
1353  if test "x${ROOTDIR}" = x ; then  if test "x${ROOTDIR}" = x ; then
1354      if test "${PWD##/*/}" = "bin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1355        if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then
1356          ROOTDIR=".."          ROOTDIR=".."
1357      else      else
1358          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
# Line 984  if test ! -d ${ROOTDIR} ; then Line 1376  if test ! -d ${ROOTDIR} ; then
1376      exit 1      exit 1
1377  fi  fi
1378    
1379    #  Find the MITgcm ${THISVER}
1380    if test -f "${ROOTDIR}/doc/tag-index" ; then
1381        THISVER=`grep '^checkpoint' ${ROOTDIR}/doc/tag-index | head -1`
1382    fi
1383    
1384    if test "x$MAKEFILE" = x ; then
1385        MAKEFILE="Makefile"
1386    fi
1387    
1388  echo "  getting OPTFILE information:  "  echo "  getting OPTFILE information:  "
1389  if test "x${OPTFILE}" = x ; then  if test "x${OPTFILE}" = x ; then
1390      if test "x$MITGCM_OF" = x ; then      if test "x$MITGCM_OF" = x ; then
# Line 1013  if test "x$OPTFILE" != xNONE ; then Line 1414  if test "x$OPTFILE" != xNONE ; then
1414      fi      fi
1415  fi  fi
1416    
 #  Check for broken systems that cannot correctly distinguish *.F and *.f files  
 # check_for_broken_Ff  
   
1417  echo "  getting AD_OPTFILE information:  "  echo "  getting AD_OPTFILE information:  "
1418  if test "x${AD_OPTFILE}" = x ; then  if test "x${AD_OPTFILE}" = x ; then
1419      if test "x$MITGCM_AD_OF" = x ; then      if test "x$MITGCM_AD_OF" = x ; then
# Line 1043  if test "x${AD_OPTFILE}" != xNONE ; then Line 1441  if test "x${AD_OPTFILE}" != xNONE ; then
1441      fi      fi
1442  fi  fi
1443    
1444  #  Check that FC, LINK, CPP, S64, LN, and MAKE are defined.  If not,  #====================================================================
1445    #  Set default values if not set by the optfile
1446    #
1447    #  Check that FC, CC, LINK, CPP, S64, LN, and MAKE are defined.  If not,
1448  #  either set defaults or complain and abort!  #  either set defaults or complain and abort!
1449  if test ! "x$BASH" = x ; then  if test ! "x$BASH" = x ; then
1450      # add a trailing space so that it works within the Makefile syntax (see below)      # add a trailing space so that it works within the Makefile syntax (see below)
# Line 1059  Error: no Fortran compiler: please speci Line 1460  Error: no Fortran compiler: please speci
1460  EOF  EOF
1461      exit 1      exit 1
1462  fi  fi
1463    if test "x$CC" = x ; then
1464        CC=cc
1465    #     cat <<EOF 1>&2
1466    # Error: no C compiler: please specify using one of the following:
1467    #   1) within the options file ("CC=...") as specified by "-of=OPTFILE"
1468    #   2) the "-cc=XXX" command-line option
1469    #   3) the "./genmake_local" file
1470    # EOF
1471    #     exit 1
1472    fi
1473  if test "x$LINK" = x ; then  if test "x$LINK" = x ; then
1474      LINK=$FC      LINK=$FC
1475  fi  fi
# Line 1109  Error: The command "ln -s" failed -- ple Line 1520  Error: The command "ln -s" failed -- ple
1520  EOF  EOF
1521      exit 1      exit 1
1522  fi  fi
1523    test -L genmake_tlink > /dev/null 2>&1
1524    RETVAL=$?
1525    if test "x$RETVAL" = x0 ; then
1526        HAVE_TEST_L=t
1527    fi
1528  rm -f genmake_test_ln genmake_tlink  rm -f genmake_test_ln genmake_tlink
1529    
1530  #  Check for broken *.F/*.f handling and fix if possible  #  Check for broken *.F/*.f handling and fix if possible
# Line 1119  if test ! "x$MPI" = x ; then Line 1535  if test ! "x$MPI" = x ; then
1535        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
1536  fi  fi
1537    
1538    if test ! "x$TS" = x ; then
1539          echo "  Turning on timing per timestep"
1540          if test ! "x$FOOLAD" = x ; then
1541                DEFINES="$DEFINES -DTIME_PER_TIMESTEP_SFP"
1542          else
1543                DEFINES="$DEFINES -DTIME_PER_TIMESTEP"
1544          fi
1545    fi
1546    if test ! "x$PAPIS" = x ; then
1547          echo "  Turning on PAPI flop summary per timestep"
1548          echo "  Please make sure PAPIINC, PAPILIB are defined"
1549          if test ! "x$FOOLAD" = x ; then
1550                DEFINES="$DEFINES -DUSE_PAPI_FLOPS_SFP"
1551          else
1552                DEFINES="$DEFINES -DUSE_PAPI_FLOPS"
1553          fi
1554          INCLUDES="$INCLUDES $PAPIINC"
1555          LIBS="$LIBS $PAPILIB"
1556    fi
1557    if test ! "x$PCLS" = x ; then
1558          echo "  Turning on PCL counter summary per timestep"
1559          echo "  Please make sure PCLINC, PCLLIB are defined"
1560          if test ! "x$FOOLAD" = x ; then
1561                DEFINES="$DEFINES -DUSE_PCL_FLOPS_SFP"
1562          else
1563                DEFINES="$DEFINES -DUSE_PCL_FLOPS"
1564          fi
1565          INCLUDES="$INCLUDES $PCLINC"
1566          LIBS="$LIBS $PCLLIB"
1567    fi
1568    if test ! "x$PAPI" = x ; then
1569          if test ! "x$PAPIS" = x ; then
1570              echo "  PAPI performance analysis and flop summary per timestep cannot co-exist!"
1571              echo "  Sticking with PAPI flop summary per timestep!"
1572          else
1573              echo "  Turning on performance analysis with PAPI"
1574              echo "  Please make sure PAPIINC, PAPILIB are defined"
1575              DEFINES="$DEFINES -DUSE_PAPI"
1576              INCLUDES="$INCLUDES $PAPIINC"
1577              LIBS="$LIBS $PAPILIB"
1578          fi
1579    fi
1580    if test ! "x$PCL" = x ; then
1581          if test ! "x$PCLS" = x ; then
1582              echo "  PCL performance analysis and flop summary per timestep cannot co-exist!"
1583              echo "  Sticking with PCL flop summary per timestep!"
1584          else
1585              echo "  Turning on performance analysis with PCL"
1586              echo "  Please make sure PCLINC, PCLLIB are defined"
1587              DEFINES="$DEFINES -DUSE_PCL"
1588              INCLUDES="$INCLUDES $PCLINC"
1589              LIBS="$LIBS $PCLLIB"
1590          fi
1591    fi
1592    if test ! "x$HPMT" = x ; then
1593          if test ! "x$PAPI" = x ; then
1594              echo "  PAPI and the HPM Toolkit cannot co-exist!"
1595              echo "  Sticking with PAPI!"
1596          else if test ! "x$PCL" = x ; then
1597              echo "  PCL and the HPM Toolkit cannot co-exist!"
1598              echo "  Sticking with PCL!"
1599          else
1600              echo "  Turning on performance analysis with the HPM Toolkit"
1601              echo "  Please make sure HPMTINC, HPMTLIB are defined"
1602              DEFINES="$DEFINES -DUSE_LIBHPM"
1603              INCLUDES="$INCLUDES $HPMTINC"
1604              LIBS="$LIBS $HPMTLIB"
1605          fi
1606          fi
1607    fi
1608    if test ! "x$GSL" = x ; then
1609          echo "  Turning on use of GSL to control floating point calculations"
1610          echo "  Please make sure GSLINC, GSLLIB are defined"
1611          DEFINES="$DEFINES -DUSE_GSL_IEEE"
1612          INCLUDES="$INCLUDES $GSLINC"
1613          LIBS="$LIBS $GSLLIB"
1614    fi
1615    
1616  printf "\n===  Checking system libraries  ===\n"  printf "\n===  Checking system libraries  ===\n"
1617  printf "  Do we have the system() command using $FC...  "  printf "  Do we have the system() command using $FC...  "
1618  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1619        program hello        program hello
1620        call system('echo hi')        call system('echo hi')
1621        end        end
1622  EOF  EOF
1623  $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
1624  RETVAL=$?  RETVAL=$?
1625  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1626      HAVE_SYSTEM=t      HAVE_SYSTEM=t
# Line 1139  fi Line 1633  fi
1633  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1634    
1635  printf "  Do we have the fdate() command using $FC...  "  printf "  Do we have the fdate() command using $FC...  "
1636  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1637        program hello        program hello
1638        CHARACTER(128) string        CHARACTER*(128) string
1639        string = ' '        string = ' '
1640        call fdate( string )        call fdate( string )
1641        print *, string        print *, string
1642        end        end
1643  EOF  EOF
1644  $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
1645  RETVAL=$?  RETVAL=$?
1646  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1647      HAVE_FDATE=t      HAVE_FDATE=t
# Line 1160  fi Line 1654  fi
1654  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1655    
1656  printf "  Do we have the etime() command using $FC...  "  printf "  Do we have the etime() command using $FC...  "
1657  cat > genmake_tcomp.f <<EOF  cat > genmake_tcomp.$FS <<EOF
1658        program hello        program hello
1659        REAL*4 ACTUAL, TARRAY(2)        REAL*4 ACTUAL, TARRAY(2)
1660        EXTERNAL ETIME        EXTERNAL ETIME
# Line 1169  cat > genmake_tcomp.f <<EOF Line 1663  cat > genmake_tcomp.f <<EOF
1663        print *, tarray        print *, tarray
1664        end        end
1665  EOF  EOF
1666  $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
1667  RETVAL=$?  RETVAL=$?
1668  if test "x$RETVAL" = x0 ; then  if test "x$RETVAL" = x0 ; then
1669      HAVE_ETIME=t      HAVE_ETIME=t
# Line 1187  if test "x$HAVE_CLOC" != x ; then Line 1681  if test "x$HAVE_CLOC" != x ; then
1681      echo "yes"      echo "yes"
1682  else  else
1683      echo "no"      echo "no"
1684        if test "x$EMBED_SRC" = xt ; then
1685            echo "    WARNING: you requested file embedding but it has"
1686            echo "      been disabled since C code cannot be called"
1687            EMBED_SRC=
1688        fi
1689    fi
1690    rm -f genmake_t*
1691    
1692    printf "  Can we unlimit the stack size using $FC...  "
1693    check_HAVE_SETRLSTK
1694    if test "x$HAVE_SETRLSTK" = xt ; then
1695        echo "yes"
1696    else
1697        echo "no"
1698    fi
1699    rm -f genmake_t*
1700    
1701    printf "  Can we register a signal handler using $FC...  "
1702    check_HAVE_SIGREG
1703    if test "x$HAVE_SIGREG" = xt ; then
1704        echo "yes"
1705    else
1706        echo "no"
1707    fi
1708    rm -f genmake_t*
1709    
1710    printf "  Can we use stat() through C calls...  "
1711    check_HAVE_STAT
1712    if test "x$HAVE_STAT" != x ; then
1713        echo "yes"
1714    else
1715        echo "no"
1716  fi  fi
1717  rm -f genmake_t*  rm -f genmake_t*
1718    
# Line 1197  if test "x$HAVE_NETCDF" != x ; then Line 1723  if test "x$HAVE_NETCDF" != x ; then
1723  else  else
1724      echo "no"      echo "no"
1725  fi  fi
1726    DEFINES="$DEFINES $IGNORE_TIME"
1727    
1728    if test "x$EMBED_SRC" = xt ; then
1729        build_embed_encode
1730    fi
1731    if test "x$EMBED_SRC" = xt ; then
1732        ENABLE="$ENABLE embed_files"
1733    fi
1734    
1735    
1736  printf "\n===  Setting defaults  ===\n"  printf "\n===  Setting defaults  ===\n"
# Line 1214  for d in $MODS ; do Line 1748  for d in $MODS ; do
1748  done  done
1749  echo  echo
1750    
 if test "x$MAKEFILE" = x ; then  
     MAKEFILE="Makefile"  
 fi  
1751  if test "x${PLATFORM}" = x ; then  if test "x${PLATFORM}" = x ; then
1752      PLATFORM=$p_PLATFORM      PLATFORM=$p_PLATFORM
1753  fi  fi
1754    
1755  if test "x${EXEDIR}" = x ; then  if test "x${EXEDIR}" = x ; then
1756      if test "${PWD##/*/}" = "bin" -a -d ../exe -a $ROOTDIR = .. ; then      tmp=`echo $PWD | sed -e 's/\// /g' | $AWK '{print $NR}'`
1757        if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then
1758          EXEDIR=../exe          EXEDIR=../exe
1759      else      else
1760          EXEDIR=.          EXEDIR=.
# Line 1241  if test ! -d ${TOOLSDIR} ; then Line 1773  if test ! -d ${TOOLSDIR} ; then
1773      exit 1      exit 1
1774  fi  fi
1775  if test "x$S64" = x ; then  if test "x$S64" = x ; then
1776      S64='$(TOOLSDIR)/set64bitConst.sh'      echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.sh > /dev/null 2>&1
1777        RETVAL=$?
1778        if test "x${RETVAL}" = x0 ; then
1779            S64='$(TOOLSDIR)/set64bitConst.sh'
1780        else
1781            echo "3.0 _d 3" | ${TOOLSDIR}/set64bitConst.csh > /dev/null 2>&1
1782            RETVAL=$?
1783            if test "x${RETVAL}" = x0 ; then
1784                S64='$(TOOLSDIR)/set64bitConst.csh'
1785            else
1786                cat <<EOF
1787    
1788    ERROR: neither of the two default scripts:
1789    
1790        ${TOOLSDIR}/set64bitConst.sh
1791        ${TOOLSDIR}/set64bitConst.csh
1792    
1793      are working so please check paths or specify (with \$S64) a
1794      working version of this script.
1795    
1796    EOF
1797                exit 1
1798            fi
1799        fi
1800  fi  fi
1801  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`  THIS_SCRIPT=`echo ${0} | sed 's:'$TOOLSDIR':\$(TOOLSDIR):'`
1802    
# Line 1340  else Line 1895  else
1895              PACKAGES="$PACKAGES $i"              PACKAGES="$PACKAGES $i"
1896          done          done
1897          echo "    before group expansion packages are: $PACKAGES"          echo "    before group expansion packages are: $PACKAGES"
1898          while ! expand_pkg_groups; do echo > /dev/null; done          RET=1
1899            while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
1900          echo "    after group expansion packages are:  $PACKAGES"          echo "    after group expansion packages are:  $PACKAGES"
1901      fi      fi
1902  fi  fi
# Line 1385  done Line 1941  done
1941  rm -f ./.tmp_pack  rm -f ./.tmp_pack
1942  echo "    packages are:  $PACKAGES"  echo "    packages are:  $PACKAGES"
1943    
1944    #  Check availability of NetCDF and then either build the MNC template
1945    #  files or delete mnc from the list of available packages.
1946    echo $PACKAGES | grep ' mnc ' > /dev/null 2>&1
1947    RETVAL=$?
1948    if test "x$RETVAL" = x0 ; then
1949        if test "x$HAVE_NETCDF" != xt ; then
1950            cat <<EOF
1951    
1952    *********************************************************************
1953    WARNING: the "mnc" package was enabled but tests failed to compile
1954      NetCDF applications.  Please check that:
1955    
1956      1) NetCDF is correctly installed for this compiler and
1957      2) the LIBS variable (within the "optfile") specifies the correct
1958           NetCDF library to link against.
1959    
1960      Due to this failure, the "mnc" package is now DISABLED.
1961    *********************************************************************
1962    
1963    EOF
1964            PACKAGES=`echo $PACKAGES | sed -e 's/mnc//g'`
1965            DISABLE="$DISABLE mnc"
1966        else
1967            ( cd $ROOTDIR"/pkg/mnc" && $MAKE testclean && $MAKE templates ) > make_mnc.errors 2>&1
1968            RETVAL=$?
1969            if test "x${RETVAL}" = x0 ; then
1970                rm -f make_mnc.errors
1971            else
1972                echo "Error: problem encountered while building source files in pkg/mnc:"
1973                cat make_mnc.errors 1>&2
1974                exit 1
1975            fi
1976        fi
1977    fi
1978    
1979  echo "  applying package dependency rules"  echo "  applying package dependency rules"
1980  ck=  ck=
1981  while test "x$ck" != xtt ; do  while test "x$ck" != xtt ; do
# Line 1449  while test "x$ck" != xtt ; do Line 2040  while test "x$ck" != xtt ; do
2040              echo "  the dependency rules for \"$dname\""              echo "  the dependency rules for \"$dname\""
2041              exit 1              exit 1
2042          fi          fi
2043          i=$(( $i + 1 ))          i=`echo "$i + 1" | bc -l`
2044            #i=$(( $i + 1 ))
2045      done      done
2046      ck=$ck"t"      ck=$ck"t"
2047  done  done
# Line 1468  for i in $PACKAGES ; do Line 2060  for i in $PACKAGES ; do
2060      fi      fi
2061  done  done
2062    
 #  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  
   
2063  # Create a list of #define and #undef to enable/disable packages  # Create a list of #define and #undef to enable/disable packages
2064  PACKAGES_DOT_H=PACKAGES_CONFIG.h  PACKAGES_DOT_H=PACKAGES_CONFIG.h
2065  #  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 1514  for n in $names ; do Line 2079  for n in $names ; do
2079              fi              fi
2080          done          done
2081          if test "x$has_pack" = xf ; then          if test "x$has_pack" = xf ; then
2082              undef=`echo "ALLOW_$n" | $AWK '{print toupper($0)}'`              undef=`echo "ALLOW_$n" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
2083              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"              DISABLED_PACKAGES="$DISABLED_PACKAGES -U$undef"
2084          fi          fi
2085      fi      fi
2086  done  done
2087  ENABLED_PACKAGES=  ENABLED_PACKAGES=
2088  for i in $PACKAGES ; do  for i in $PACKAGES ; do
2089      def=`echo "ALLOW_$i" | $AWK '{print toupper($0)}'`      def=`echo "ALLOW_$i" | sed -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
2090      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"      ENABLED_PACKAGES="$ENABLED_PACKAGES -D$def"
2091  #eh3 DEFINES="$DEFINES -D$def"  #eh3 DEFINES="$DEFINES -D$def"
2092    
# Line 1605  for i in $SOURCEDIRS ; do Line 2170  for i in $SOURCEDIRS ; do
2170          cat $i/$j >> ad_files          cat $i/$j >> ad_files
2171      done      done
2172  done  done
2173    if test ! "x"$FS = "x.f" ; then
2174        cat ad_files | sed -e "s/\.f/.$FS/g" > ad_files_f
2175        mv -f ad_files_f ad_files
2176    fi
2177    
2178  echo  echo
2179  echo "===  Creating the Makefile  ==="  echo "===  Creating the Makefile  ==="
2180  echo "  setting INCLUDES"  echo "  setting INCLUDES"
2181  for i in $INCLUDEDIRS ; do  for i in $INCLUDEDIRS ; do
2182      if ! test -d $i ; then      if test ! -d $i ; then
 #       INCLUDES="$INCLUDES -I$i"  
 #   else  
2183          echo "Warning: can't find INCLUDEDIRS=\"$i\""          echo "Warning: can't find INCLUDEDIRS=\"$i\""
2184      fi      fi
2185  done  done
2186    
2187    if test ! "x$DIVA" = x ; then
2188        echo "  Creating the pseudo-MPI include directory"
2189        INCLUDES="-I./mpi_headers $INCLUDES"
2190        rm -rf ./mpi_headers
2191        mkdir -p ./mpi_headers
2192    
2193        if test "x$MPIINCLUDEDIR" = x ; then
2194            if test "x$MPIHOME" = x ; then
2195                MPIHOME='/usr'
2196            fi
2197            MPIINCLUDEDIR='$MPIHOME/include'
2198        fi
2199        
2200        if test -r $MPIINCLUDEDIR/mpif.h ; then
2201            for i in $MPI_HEADER_FILES; do
2202                cp -p $MPIINCLUDEDIR/$i ./mpi_headers
2203            done
2204    
2205            perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h
2206        else
2207            echo " We cannot create a copy of mpif.h!"
2208            exit -1
2209        fi
2210    fi
2211    
2212  echo "  Determining the list of source and include files"  echo "  Determining the list of source and include files"
2213  rm -rf .links.tmp  rm -rf .links.tmp
2214  mkdir .links.tmp  mkdir .links.tmp
2215    touch .links.tmp/foo
2216    if test ! -r ".links.tmp/foo" ; then
2217        echo
2218        echo "ERROR : something is wrong with your directory permissions or"
2219        echo "   your user file-creation mask (\"umask\") since creating a"
2220        echo "   sub-dir, touch-ing a file within it, and then reading it is"
2221        echo "   not working.  Please try setting your umask to something"
2222        echo "   sane such as:"
2223        echo
2224        echo "      umask 0002"
2225        echo
2226        echo "   and please verify that you have the proper permissions for"
2227        echo "   creating sub-directories and then reading files created"
2228        echo "   within them."
2229        echo
2230        exit 1
2231    fi
2232    rm -f .links.tmp/foo
2233  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > srclinks.tmp
2234  echo "" >> srclinks.tmp  echo "" >> srclinks.tmp
2235  printf 'SRCFILES = '    > srclist.inc  printf 'SRCFILES = '    > srclist.inc
# Line 1636  for d in $alldirs ; do Line 2245  for d in $alldirs ; do
2245      for sf in $sfiles ; do      for sf in $sfiles ; do
2246          if test ! -r ".links.tmp/$sf" ; then          if test ! -r ".links.tmp/$sf" ; then
2247              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
2248                    ignore_f=f
2249                  case $d/$sf in                  case $d/$sf in
2250                    ./$PACKAGES_DOT_H)                    ./$PACKAGES_DOT_H)
2251                            ignore_f=t
2252                          ;;                          ;;
2253                    ./AD_CONFIG.h)                    ./AD_CONFIG.h)
2254                            ignore_f=t
2255                          ;;                          ;;
2256                    ./FC_NAMEMANGLE.h)                    ./FC_NAMEMANGLE.h)
2257                            ignore_f=t
2258                          ;;                          ;;
2259                    *)                    ./BUILD_INFO.h)
2260                          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  
2261                          ;;                          ;;
2262                      h)                    ./EMBEDDED_FILES.h)
2263                          echo    " \\"  >> hlist.inc                          ignore_f=t
                         printf " $sf" >> hlist.inc  
2264                          ;;                          ;;
2265                      flow)                    *)
2266                          echo    " \\"  >> ad_flow_files.inc                          #  For the local directory *ONLY*,
2267                          printf " $sf" >> ad_flow_files.inc                          #  ignore all soft-links
2268                            if test "x$HAVE_TEST_L" = xt -a "x$d" = x. -a -L $sf ; then
2269                                ignore_f=t
2270                            else
2271                                touch .links.tmp/$sf
2272                                deplist="$deplist $sf"
2273                            fi
2274                          ;;                          ;;
2275                  esac                  esac
2276                    if test "x$ignore_f" = xf ; then
2277                        extn=`echo $sf | $AWK -F. '{print $NF}'`
2278                        case $extn in
2279                            F)
2280                                echo    " \\"  >> srclist.inc
2281                                printf " $sf" >> srclist.inc
2282                                ;;
2283                            F90)
2284                                echo    " \\"  >> f90srclist.inc
2285                                printf " $sf" >> f90srclist.inc
2286                                ;;
2287                            c)
2288                                echo    " \\"  >> csrclist.inc
2289                                printf " $sf" >> csrclist.inc
2290                                ;;
2291                            h)
2292                                echo    " \\"  >> hlist.inc
2293                                printf " $sf" >> hlist.inc
2294                                ;;
2295                            flow)
2296                                echo    " \\"  >> ad_flow_files.inc
2297                                printf " $sf" >> ad_flow_files.inc
2298                                ;;
2299                        esac
2300                    fi
2301              fi              fi
2302          fi          fi
2303      done      done
# Line 1688  echo "" >> f90srclist.inc Line 2315  echo "" >> f90srclist.inc
2315  echo "" >> hlist.inc  echo "" >> hlist.inc
2316  echo "" >> ad_flow_files.inc  echo "" >> ad_flow_files.inc
2317    
2318  if test -e $MAKEFILE ; then  if test -f $MAKEFILE ; then
2319      mv -f $MAKEFILE "$MAKEFILE.bak"      mv -f $MAKEFILE "$MAKEFILE.bak"
2320  fi  fi
2321  echo "  Writing makefile: $MAKEFILE"  echo "  Writing makefile: $MAKEFILE"
# Line 1699  echo "#    $THISDATE" >> $MAKEFILE Line 2326  echo "#    $THISDATE" >> $MAKEFILE
2326  echo "# by the command:" >> $MAKEFILE  echo "# by the command:" >> $MAKEFILE
2327  echo "#    $0 $G2ARGS" >> $MAKEFILE  echo "#    $0 $G2ARGS" >> $MAKEFILE
2328  echo "# executed by:" >> $MAKEFILE  echo "# executed by:" >> $MAKEFILE
2329  echo "#    $USER@${THISHOSTNAME}:${THISCWD}" >> $MAKEFILE  echo "#    ${THISUSER}@${THISHOST}:${THISCWD}" >> $MAKEFILE
2330    
2331  EXE_AD=$EXECUTABLE"_ad"  EXE_AD=$EXECUTABLE"_ad"
2332  EXE_FTL=$EXECUTABLE"_ftl"  EXE_FTL=$EXECUTABLE"_ftl"
# Line 1745  ENABLED_PACKAGES = ${ENABLED_PACKAGES} Line 2372  ENABLED_PACKAGES = ${ENABLED_PACKAGES}
2372  DISABLED_PACKAGES = ${DISABLED_PACKAGES}  DISABLED_PACKAGES = ${DISABLED_PACKAGES}
2373    
2374  # These files are created by Makefile  # These files are created by Makefile
2375  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
   
2376  EOF  EOF
2377    
2378  #  Note: figure out some way to add Hyades JAM libraries here  if test "x$EMBED_SRC" = xt ; then
2379        echo "EMBEDDED_FILES = EMBEDDED_FILES.h" >>$MAKEFILE
2380    else
2381        echo "EMBEDDED_FILES = " >>$MAKEFILE
2382    fi
2383    
2384    #  Note: figure out some way to add Hyades JAM libraries here
2385  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2386  # Unix ln (link)  # Unix ln (link)
2387  LN = ${LN}  LN = ${LN}
# Line 1764  KPP = ${KPP} Line 2395  KPP = ${KPP}
2395  FC = ${FC}  FC = ${FC}
2396  # Fortran compiler  # Fortran compiler
2397  F90C = ${F90C}  F90C = ${F90C}
2398    # C compiler
2399    CC = ${CC}
2400  # Link editor  # Link editor
2401  LINK = ${LINK} ${LDADD}  LINK = ${LINK} ${LDADD}
2402    
# Line 1786  CFLAGS = ${CFLAGS} Line 2419  CFLAGS = ${CFLAGS}
2419  NOOPTFILES = ${NOOPTFILES}  NOOPTFILES = ${NOOPTFILES}
2420  NOOPTFLAGS = ${NOOPTFLAGS}  NOOPTFLAGS = ${NOOPTFLAGS}
2421  # Flags and libraries needed for linking  # Flags and libraries needed for linking
2422  LIBS = ${LIBS} \$(XLIBS)  LIBS = ${LIBS}
2423  # Name of the Mekfile  # Name of the Mekfile
2424  MAKEFILE=${MAKEFILE}  MAKEFILE=${MAKEFILE}
2425    
# Line 1799  cat hlist.inc         >> $MAKEFILE Line 2432  cat hlist.inc         >> $MAKEFILE
2432  cat ad_flow_files.inc >> $MAKEFILE  cat ad_flow_files.inc >> $MAKEFILE
2433  echo >> $MAKEFILE  echo >> $MAKEFILE
2434  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE
2435  echo 'F90FILES =  $(F90SRCFILES:.F=.'$FS90')' >> $MAKEFILE  echo 'F90FILES =  $(F90SRCFILES:.F90=.'$FS90')' >> $MAKEFILE
2436  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE
2437  echo >> $MAKEFILE  echo >> $MAKEFILE
2438  echo '.SUFFIXES:' >> $MAKEFILE  echo '.SUFFIXES:' >> $MAKEFILE
# Line 1810  rm -f ad_flow_files.inc Line 2443  rm -f ad_flow_files.inc
2443  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2444    
2445  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
2446  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES) \$(EMBEDDED_FILES)
2447          @echo Creating \$@ ...          @echo Creating \$@ ...
2448          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
2449  depend:  depend:
# Line 1819  depend: Line 2452  depend:
2452          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2453          -rm -f makedepend.out          -rm -f makedepend.out
2454    
2455    lib: libmitgcmuv.a
2456    
2457    libmitgcmuv.a: \$(OBJFILES)
2458            ar rcv libmitgcmuv.a \$(OBJFILES)
2459    
2460  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)  links: \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(SPECIAL_FILES)
2461    
2462  small_f: \$(F77FILES) \$(F90FILES)  small_f: \$(F77FILES) \$(F90FILES)
# Line 1839  CLEAN: Line 2477  CLEAN:
2477          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2478          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2479          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
2480          -rm -f \$(EXECUTABLE) output.txt STD*          -rm -f \$(EXECUTABLE) \$(EXE_AD) *.txt STD* *diagnostics.log datetime
2481            -rm -rf mnc_test_*
2482    
2483  #eh3 Makefile: makefile  #eh3 Makefile: makefile
2484  makefile:  makefile:
# Line 1847  makefile: Line 2486  makefile:
2486  cleanlinks:  cleanlinks:
2487          -find . -type l -exec rm {} \;          -find . -type l -exec rm {} \;
2488    
2489  # Special targets ($SPECIAL_FILES) which are create by make  # Special targets (SPECIAL_FILES) which are create by make
2490  ${PACKAGES_DOT_H}:  ${PACKAGES_DOT_H}:
2491          @echo Creating \$@ ...          @echo Creating \$@ ...
2492          @$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 1858  FC_NAMEMANGLE.h: Line 2497  FC_NAMEMANGLE.h:
2497          @echo Creating \$@ ...          @echo Creating \$@ ...
2498          echo "$FC_NAMEMANGLE" > \$@          echo "$FC_NAMEMANGLE" > \$@
2499    
2500    BUILD_INFO.h:
2501            @echo Creating \$@ ...
2502    EOF
2503    
2504    test ! "x$THISVER" = x  && echo "       -echo \"#define THISVER '$THISVER'\" > \$@"   >> $MAKEFILE
2505    test ! "x$THISUSER" = x && echo "       -echo \"#define THISUSER '$THISUSER'\" >> \$@" >> $MAKEFILE
2506    test ! "x$THISDATE" = x && echo "       -echo \"#define THISDATE '$THISDATE'\" >> \$@" >> $MAKEFILE
2507    test ! "x$THISHOST" = x && echo "       -echo \"#define THISHOST '$THISHOST'\" >> \$@" >> $MAKEFILE
2508    
2509    if test "x$EMBED_SRC" = xt ; then
2510        cat >>$MAKEFILE <<EOF
2511    
2512    decode_files.o : EMBEDDED_FILES.h
2513    
2514    ##  \$(F77FILES)
2515    all_fF.tar.gz : \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(F77FILES) Makefile
2516            @echo Creating \$@ ...
2517            -tar -hcf all_fF.tar \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(F77FILES) Makefile
2518            -rm -f all_fF.tar.gz
2519            -gzip all_fF.tar
2520    
2521    EMBEDDED_FILES.h : all_fF.tar.gz
2522            @echo Creating \$@ ...
2523            -\${ROOTDIR}/tools/embed_encode/encode_files EMBEDDED_FILES.h all_fF.tar.gz
2524    
2525    EOF
2526    fi
2527    
2528    cat >>$MAKEFILE <<EOF
2529    
2530  # The normal chain of rules is (  .F - .$FS - .o  )  # The normal chain of rules is (  .F - .$FS - .o  )
2531    
2532  %.o : %.F  ## This nullifies any default implicit rules concerning these two file types:
2533    ## %.o : %.F
2534    
2535  .F.$FS:  .F.$FS:
2536          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
# Line 1871  FC_NAMEMANGLE.h: Line 2541  FC_NAMEMANGLE.h:
2541  .$FS90.o:  .$FS90.o:
2542          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
2543  .c.o:  .c.o:
2544          \$(CC) \$(CFLAGS) -c \$<          \$(CC) \$(CFLAGS) \$(DEFINES) \$(INCLUDES) -c \$<
2545    
2546  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
2547  .F.p:  .F.p:
# Line 1895  ad_vars="$ad_vars FTL_TAMC_FLAGS FTL_TAF Line 2565  ad_vars="$ad_vars FTL_TAMC_FLAGS FTL_TAF
2565  ad_vars="$ad_vars SVD_TAMC_FLAGS SVD_TAF_FLAGS"  ad_vars="$ad_vars SVD_TAMC_FLAGS SVD_TAF_FLAGS"
2566  for i in $ad_vars ; do  for i in $ad_vars ; do
2567      name=$i      name=$i
2568      t1="t2=\$"`echo $i`      t1="t2=\$"`echo "$i"`
2569      eval $t1      eval $t1
2570      printf "%-20s = " $name >> $MAKEFILE      printf "%-20s = " $name >> $MAKEFILE
2571      echo $t2 >> $MAKEFILE      echo "$t2" | sed -e 's| \+| |g' >> $MAKEFILE
2572  done  done
2573    
2574  echo "  Add the source list for AD code generation"  echo "  Add the source list for AD code generation"
# Line 1915  rm -f ad_files Line 2585  rm -f ad_files
2585  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2586    
2587  # ... AD ...  # ... AD ...
2588  adall: ad_taf  adall: \$(EXE_AD)
2589  adtaf: ad_taf_output.f  adtaf: ad_taf_output.$FS
2590  adtamc: ad_tamc_output.f  adtamc: ad_tamc_output.$FS
2591    
2592  ad_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ad_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)
2593          @$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
2594          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
2595          -rm -f ad_config.template          -rm -f ad_config.template
2596          @make \$(F77FILES)          @make \$(F77FILES)
2597          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2598          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ad_input_code.$FS
2599    
2600  ad_taf_output.f: ad_input_code.f  ad_taf_output.$FS: ad_input_code.$FS
2601          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2602          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
2603    
2604  adtafonly:  adtafonly:
2605          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.f          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
2606          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
2607    
2608  ad_taf: ad_taf_output.o \$(OBJFILES)  \${EXE_AD}: ad_taf_output.o \$(OBJFILES)
2609          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)          \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)
2610    
2611  ad_tamc_output.f: ad_input_code.f  ad_tamc_output.$FS: ad_input_code.$FS
2612          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.f          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS
2613          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
2614    
2615  ad_tamc: ad_tamc_output.o \$(OBJFILES)  ad_tamc: ad_tamc_output.o \$(OBJFILES)
2616          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_tamc_output.o \$(LIBS)
2617    
2618    adonlyfwd:
2619            patch < \$(TOOLSDIR)/ad_taf_output.f.onlyfwd.diff
2620    
2621    adtrick:
2622            patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff
2623    
2624  # ... FTL ...  # ... FTL ...
2625  ftlall: ftl_taf  ftlall: ftl_taf
2626  ftltaf: ftl_taf_output.f  ftltaf: ftl_taf_output.$FS
2627  ftltamc: ftl_tamc_output.f  ftltamc: ftl_tamc_output.$FS
2628    
2629  ftl_input_code.f: \$(AD_FILES) \$(HEADERFILES)  ftl_input_code.$FS: \$(AD_FILES) \$(HEADERFILES)
2630          @$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
2631          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
2632          -rm -f ftl_config.template          -rm -f ftl_config.template
2633          @make \$(F77FILES)          @make \$(F77FILES)
2634          @make \$(AD_FLOW_FILES)          @make \$(AD_FLOW_FILES)
2635          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.f          cat \$(AD_FLOW_FILES) \$(AD_FILES) > ftl_input_code.$FS
2636    
2637  ftl_taf_output.f: ftl_input_code.f  ftl_taf_output.$FS: ftl_input_code.$FS
2638          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2639          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
2640    
2641  ftltafonly:  ftltafonly:
2642          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.f          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
2643          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
2644    
2645  ftl_taf: ftl_taf_output.o \$(OBJFILES)  ftl_taf: ftl_taf_output.o \$(OBJFILES)
2646          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)
2647    
2648  ftl_tamc_output.f: ftl_input_code.f  ftl_tamc_output.$FS: ftl_input_code.$FS
2649          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.f          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS
2650          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
2651    
2652  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)  ftl_tamc: ftl_tamc_output.o \$(OBJFILES)
2653          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)          \$(LINK) -o ${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_tamc_output.o \$(LIBS)
2654    
2655    
2656  # ... SVD ...  # ... SVD ...
2657  svdtaf: ad_taf_output.f ftl_taf_output.f  svdtaf: ad_taf_output.$FS ftl_taf_output.$FS
2658  svdall: svd_taf          @echo "--->>> Only ran TAF to generate SVD code!    <<<---"
2659            @echo "--->>> Do make svdall afterwards to compile. <<<---"
2660    svdall: svd_touch svd_taf
2661    
2662  svd_taf: ad_taf_output.o ftl_taf_output.o \$(OBJFILES)  svd_taf: \$(OBJFILES)
2663          \$(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)
2664    
2665            @echo "--->>> Only COMPILE svd code! <<<---"
2666            @echo "--->>> Assumes you previously <<<---"
2667            @echo "--->>> did make svdtaf        <<<---"
2668    
2669    svd_touch:
2670            @echo "--->>> Only COMPILE svd code! <<<---"
2671            @echo "--->>> Assumes you previously <<<---"
2672            @echo "--->>> did make svdtaf        <<<---"
2673            touch ad_taf_output.$FS ftl_taf_output.$FS
2674            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ad_taf_output.$FS
2675            \$(FC) \$(FFLAGS) \$(FOPTIM) -c ftl_taf_output.$FS
2676            @$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
2677            cmp ftl_config.template AD_CONFIG.h || cat ftl_config.template > AD_CONFIG.h
2678            -rm -f ftl_config.template
2679    
2680  #=========================================  #=========================================
2681    

Legend:
Removed from v.1.86  
changed lines
  Added in v.1.152

  ViewVC Help
Powered by ViewVC 1.1.22