/[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.247 by jahn, Wed Dec 26 17:20:01 2012 UTC revision 1.252 by jmc, Mon Jul 22 19:11:31 2013 UTC
# Line 324  look_for_makedepend()  { Line 324  look_for_makedepend()  {
324      #      #
325      #    1) a makedepend implementation shipped with the cyrus-imapd      #    1) a makedepend implementation shipped with the cyrus-imapd
326      #       package:  ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/      #       package:  ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/
327      #      #    2) a local tools/xmakedepend shell script
     #    2) a known-buggy xmakedpend shell script  
328      #      #
329      #  So the choices are, in order:      #  So the choices are, in order:
     #  
330      #    1) use the user-specified program      #    1) use the user-specified program
331      #    2) use a system-wide default      #    2) use the local xmakedepend script (get all dependencies, but slower)
332      #    3) locally build and use the cyrus implementation      #    3) use a system-wide default
333      #    4) fall back to the buggy local xmakedpend script      #    4) locally build and use the cyrus makedepend
334        #             (faster, but can miss some dependencies)
335      #      #
336      echo >> $LOGFILE      echo >> $LOGFILE
337      echo "running: look_for_makedepend()" >> $LOGFILE      echo "running: look_for_makedepend()" >> $LOGFILE
# Line 343  look_for_makedepend()  { Line 342  look_for_makedepend()  {
342              build_cyrus_makedepend              build_cyrus_makedepend
343              RETVAL=$?              RETVAL=$?
344              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
345                  echo "WARNING: unable to build cyrus-makedepend. Try 'makedepend'"                  echo "WARNING: unable to build cyrus-makedepend. Try other 'makedepend'"
346                  MAKEDEPEND=                  MAKEDEPEND=
347              fi              fi
348          else          else
# Line 356  look_for_makedepend()  { Line 355  look_for_makedepend()  {
355          fi          fi
356      fi      fi
357      if test "x${MAKEDEPEND}" = x ; then      if test "x${MAKEDEPEND}" = x ; then
         which makedepend > /dev/null 2>&1  
         RV0=$?  
358          test -f $MAKEFILE  &&  mv -f $MAKEFILE $MAKEFILE".tst"          test -f $MAKEFILE  &&  mv -f $MAKEFILE $MAKEFILE".tst"
359          #  echo 'MAKEFILE="'$MAKEFILE'"'          #  echo 'MAKEFILE="'$MAKEFILE'"'
360          cat <<EOF >> $MAKEFILE          cat <<EOF >> $MAKEFILE
# Line 373  EOF Line 370  EOF
370        stop        stop
371        end        end
372  EOF  EOF
373          makedepend -f $MAKEFILE genmake_tc.f > /dev/null 2>&1          $ROOTDIR/tools/xmakedepend -f $MAKEFILE genmake_tc.f > /dev/null 2>&1
374          RV1=$?          RV1=$?
375            which makedepend > /dev/null 2>&1
376            RV2=$?
377            if test "x${RV2}" = x0 ; then
378                makedepend -f $MAKEFILE genmake_tc.f > /dev/null 2>&1
379                RV3=$? ; loc_msg='not working.'
380            else RV3=$RV2 ; loc_msg='not found.'
381            fi
382          test -f $MAKEFILE  &&  rm -f $MAKEFILE          test -f $MAKEFILE  &&  rm -f $MAKEFILE
383          test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE          test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE
384          if test "x${RV0}${RV1}" = x00 ; then          echo "  check makedepend (local: $RV1, system: $RV2, $RV3)"
385            if test "x${RV1}" = x0 ; then
386                MAKEDEPEND='$(TOOLSDIR)/xmakedepend'
387                echo " --> set MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE
388            elif test "x${RV3}" = x0 ; then
389                echo "    local tools/xmakedepend not working. Use system-default makedepend"
390              MAKEDEPEND=makedepend              MAKEDEPEND=makedepend
391              echo " --> set MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE              echo " --> set MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE
392          else          else
393              echo "    system-default makedepend not found. Try to build cyrus-makedepend"              echo "    local tools/xmakedepend not working; system-default makedepend $loc_msg"
394                echo -n "    Try to build cyrus-makedepend ..."
395              #  Try to build the cyrus implementation              #  Try to build the cyrus implementation
396              build_cyrus_makedepend              build_cyrus_makedepend
397              RETVAL=$?              RETVAL=$?
398              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" = x0 ; then
399                  echo "WARNING: unable to build cyrus-makedepend. Use local xmakedepend"                  echo "  Works"
400                  MAKEDEPEND='$(TOOLSDIR)/xmakedepend'              else
401                  echo " --> set MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE                  echo "  Fails" ; echo "" >> $LOGFILE
402                    echo "ERROR: no working makedepend found ; look_for_makedepend FAILED" | tee -a $LOGFILE
403                    echo ""
404                    exit -1
405                    return
406              fi              fi
407          fi          fi
408      fi      fi
# Line 588  EOF Line 602  EOF
602      fi      fi
603  }  }
604    
605    #  Do a local copy of MPI headers files (in local dir ./mpi_headers/) after
606    #  checking for additional included headers (in case of chain of included header)
607    mpi_headers_do_local_copy() {
608    
609        dBug=0
610        #----- check for additional headers (chain of included headers)
611        listIni=$MPI_HEADER_FILES
612        echo $listIni | grep "\<mpif.h\>" > /dev/null 2>&1
613        outp=$?
614        #- always check mpif.h (the only mpi-header included in standard MITgcm code)
615        if test $outp != 0 ; then listIni="mpif.h $listIni" ; fi
616        if test $dBug = 1 ; then echo "listIni='$listIni'" ; fi
617        doCheck=1 ; list2copy='' ; list2check=$listIni
618        while test $doCheck = 1 ; do
619            newList=''
620            for i in $list2check ; do
621             if test -f $MPIINCLUDEDIR/$i ; then
622                newInc=`grep '^ *include ' $MPIINCLUDEDIR/$i | \
623                    sed -e 's/^ *include //' -e 's/\!.*$//' -e "s/'//g"  -e 's/\"//g'`
624               if test $dBug = 1 ; then echo -n "checking $i : newInc='$newInc'" ; fi
625               for j in $newInc ; do
626                 echo $listIni $list2copy $newList | grep "\<$j\>" > /dev/null 2>&1
627                 outp=$?
628                 if test $outp != 0 ; then
629                    if test $dBug = 1 ; then echo -n " ; adding $j" ; fi
630                    newList="$newList $j"
631                 fi
632               done
633               if test $dBug = 1 ; then echo "" ; fi
634             fi
635            done
636            if test "x$newList" = x ; then doCheck=0
637            else list2check=$newList ; list2copy="$list2copy $newList"
638            fi
639        done
640        list2copy="$MPI_HEADER_FILES $list2copy"
641        if test $dBug = 1 ; then echo "list2copy='$list2copy'" ; fi
642        #----- make local copy and update LOCAL_MPI_HEADERS (if not already set)
643        mkListInc=0
644        for i in $list2copy ; do
645            if test -f $MPIINCLUDEDIR/$i ; then
646                cp -p $MPIINCLUDEDIR/$i ./mpi_headers
647                if test $i = 'mpif.h' ; then
648                    perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h
649                fi
650                if test $mkListInc = 1 ; then
651                    LOCAL_MPI_HEADERS="$LOCAL_MPI_HEADERS ./mpi_headers/$i"
652                fi
653                if test "x$LOCAL_MPI_HEADERS" = x ; then
654                    LOCAL_MPI_HEADERS="./mpi_headers/$i" ; mkListInc=1
655                fi
656            fi
657        done
658    }
659    
660  #  Parse the package dependency information  #  Parse the package dependency information
661  get_pdepend_list()  {  get_pdepend_list()  {
662    
# Line 1248  FTL_TAF_FLAGS= Line 1317  FTL_TAF_FLAGS=
1317  SVD_TAMC_FLAGS=  SVD_TAMC_FLAGS=
1318  TAMC_EXTRA=  TAMC_EXTRA=
1319    
1320    DIVA=
1321    MPIINCLUDEDIR=
1322    MPI_HEADER_FILES=
1323    LOCAL_MPI_HEADERS=
1324    
1325  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
1326  gm_s1="ROOTDIR STANDARDDIRS MODS PKG_DEPEND PKG_GROUPS DISABLE ENABLE"  gm_s1="ROOTDIR STANDARDDIRS MODS PKG_DEPEND PKG_GROUPS DISABLE ENABLE"
1327  gm_s2="PLATFORM OPTFILE MAKE MAKEFILE MAKEDEPEND FC CC MPI OMP USE_R4"  gm_s2="PLATFORM OPTFILE MAKE MAKEFILE MAKEDEPEND FC CC MPI OMP USE_R4"
# Line 1263  gm_s8="HAVE_NETCDF HAVE_SYSTEM HAVE_FDAT Line 1337  gm_s8="HAVE_NETCDF HAVE_SYSTEM HAVE_FDAT
1337  #  The following are all related to adjoint/tangent-linear stuff  #  The following are all related to adjoint/tangent-linear stuff
1338  gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS"  gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS"
1339  gm_s11="FTL_TAMC_FLAGS FTL_TAF_FLAGS SVD_TAMC_FLAGS SVD_TAF_FLAGS"  gm_s11="FTL_TAMC_FLAGS FTL_TAF_FLAGS SVD_TAMC_FLAGS SVD_TAF_FLAGS"
1340  gm_s12="TAF_EXTRA TAMC_EXTRA"  gm_s12="TAF_EXTRA TAMC_EXTRA DIVA MPIINCLUDEDIR MPI_HEADER_FILES"
1341    
1342  gm_state="COMMANDL $gm_s1 $gm_s2 $gm_s3 $gm_s4 $gm_s5 $gm_s6 $gm_s7 $gm_s8"  gm_state="COMMANDL $gm_s1 $gm_s2 $gm_s3 $gm_s4 $gm_s5 $gm_s6 $gm_s7 $gm_s8"
1343  gm_state="$gm_state $gm_s10 $gm_s11 $gm_s12"  gm_state="$gm_state $gm_s10 $gm_s11 $gm_s12"
# Line 1702  check_for_broken_Ff Line 1776  check_for_broken_Ff
1776  if test ! "x$MPI" = x ; then  if test ! "x$MPI" = x ; then
1777        echo "  Turning on MPI cpp macros"        echo "  Turning on MPI cpp macros"
1778        DEFINES="$DEFINES -DALLOW_USE_MPI"        DEFINES="$DEFINES -DALLOW_USE_MPI"
1779    #- To compile code older than checkpoint63s (2012/09/05), un-comment the following line:
1780    #     DEFINES="$DEFINES -DALWAYS_USE_MPI"
1781  fi  fi
1782  if test ! "x$OMP" = x ; then  if test ! "x$OMP" = x ; then
1783        echo "  Add OMPFLAG and turn on OpenMP cpp macros"        echo "  Add OMPFLAG and turn on OpenMP cpp macros"
# Line 2482  for i in $INCLUDEDIRS ; do Line 2558  for i in $INCLUDEDIRS ; do
2558      fi      fi
2559  done  done
2560    
2561  if test ! "x$DIVA" = x ; then  if test ! "x$DIVA" = x -a ! "x$MPI" = x ; then
2562      echo "  Creating the pseudo-MPI include directory"    if test ! "x$MPIINCLUDEDIR" = x ; then
2563      INCLUDES="-I./mpi_headers $INCLUDES"      if test -d $MPIINCLUDEDIR ; then
2564      rm -rf ./mpi_headers          echo "  Creating the pseudo-MPI include directory"
2565      mkdir -p ./mpi_headers          INCLUDES="-I./mpi_headers $INCLUDES"
2566            rm -rf ./mpi_headers
2567      if test "x$MPIINCLUDEDIR" = x ; then          mkdir -p ./mpi_headers
2568          if test "x$MPIHOME" = x ; then          #  Do a local copy of MPI headers files (in local dir ./mpi_headers/) after
2569              MPIHOME='/usr'          #   checking for additional included headers (in case of chain of included
2570          fi          #   header); also set LOCAL_MPI_HEADERS (if not already set)
2571          MPIINCLUDEDIR='$MPIHOME/include'          mpi_headers_do_local_copy
     fi  
   
     if test -r $MPIINCLUDEDIR/mpif.h ; then  
         for i in $MPI_HEADER_FILES; do  
             cp -p $MPIINCLUDEDIR/$i ./mpi_headers  
         done  
   
         perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h  
2572      else      else
2573          echo " We cannot create a copy of mpif.h!"          echo "WARNING: MPIINCLUDEDIR='$MPIINCLUDEDIR' is not a dir"
2574            echo "WARNING: ==> cannot create pseudo-MPI include directory"
2575  #       exit -1  #       exit -1
2576      fi      fi
2577      fi
2578  fi  fi
2579    
2580  echo "  Determining the list of source and include files"  echo "  Determining the list of source and include files"
# Line 2535  if test "x$OPENAD" != x ; then Line 2605  if test "x$OPENAD" != x ; then
2605      OAD_KEEP_ORIGINAL="/dev/null"      OAD_KEEP_ORIGINAL="/dev/null"
2606      OAD_CB2M_FILES="/dev/null"      OAD_CB2M_FILES="/dev/null"
2607      OADTOOLS="$TOOLSDIR/OAD_support"      OADTOOLS="$TOOLSDIR/OAD_support"
     test -f "oadtempflile"  &&  \rm -f "oadtempflile"  
 cat >> "oadtempflile" <<EOF  
 $OADTOOLS  
 EOF  
2608      echo "  looking for dontCompile file:  "      echo "  looking for dontCompile file:  "
2609      for i in "." $MODS ; do      for i in "." $MODS ; do
2610          if test -r $i"/dontCompile" ; then          if test -r $i"/dontCompile" ; then
# Line 2890  Clean: Line 2956  Clean:
2956          @\$(MAKE) -f \$(MAKEFILE) cleanlinks          @\$(MAKE) -f \$(MAKEFILE) cleanlinks
2957          -rm -f \$(SPECIAL_FILES) f90mkdepend.log $MAKEFILE.old          -rm -f \$(SPECIAL_FILES) f90mkdepend.log $MAKEFILE.old
2958          -rm -f taf_command taf_output taf_ad.log taf_ad_flow.log taf_ftl.log          -rm -f taf_command taf_output taf_ad.log taf_ad_flow.log taf_ftl.log
         -rm -f genmake_warnings genmake_errors make.log  
2959    
2960  # remove also the executable, files that "genmake2" generates (except Makefile)  # remove also the executable, files that "genmake2" generates (except Makefile)
2961  #         and output from a run (plus log files from testreport)  #         and output from a run (plus log files from testreport)
# Line 2899  CLEAN: Line 2964  CLEAN:
2964          -rm -f \$(EXECUTABLE) \$(EXE_AD) \$(EXE_FTL) *.bak          -rm -f \$(EXECUTABLE) \$(EXE_AD) \$(EXE_FTL) *.bak
2965          -rm -f $LOGFILE genmake_state genmake_*optfile          -rm -f $LOGFILE genmake_state genmake_*optfile
2966          -rm -f SIZE.h.mpi genmake.tr_log make.tr_log          -rm -f SIZE.h.mpi genmake.tr_log make.tr_log
2967            -rm -rf mpi_headers mnc_test_*
2968          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2969          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2970          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
2971          -rm -f *.txt STD* *diagnostics.log datetime          -rm -f *.txt STDOUT.* STDERR.* *diagnostics.log *.[0-9][0-9][0-9][0-9].log
2972            -rm -f datetime costfinal divided.ctrl snapshot* output_adm.txt.diva_*
2973          -rm -f *_MIT_CE_000.opt0000 costfunction*0000          -rm -f *_MIT_CE_000.opt0000 costfunction*0000
2974          -rm -rf mnc_test_*          -rm -f oad_cp.000.[0-9][0-9][0-9][0-9][0-9]
2975    
2976  makefile:  makefile:
2977          $THIS_SCRIPT $G2ARGS          $THIS_SCRIPT $G2ARGS
# Line 3001  TAF            = ${TAF} Line 3068  TAF            = ${TAF}
3068    
3069  TAF_EXTRA      = ${TAF_EXTRA}  TAF_EXTRA      = ${TAF_EXTRA}
3070  TAMC_EXTRA     = ${TAMC_EXTRA}  TAMC_EXTRA     = ${TAMC_EXTRA}
3071    LOCAL_MPI_HEADERS    = ${LOCAL_MPI_HEADERS}
3072    
3073  EOF  EOF
3074    
# Line 3222  w2f__types.F90 \ Line 3290  w2f__types.F90 \
3290  OAD_active.F90 \  OAD_active.F90 \
3291  OAD_cp.F90 \  OAD_cp.F90 \
3292  OAD_rev.F90 \  OAD_rev.F90 \
3293  OAD_tape.F90  OAD_tape.F90 \
3294    revolve.F90
3295    
3296  OPENAD_SUPPORT_C_SRC_FILES = \  OPENAD_SUPPORT_C_SRC_FILES = \
3297  iaddr.c \  iaddr.c \

Legend:
Removed from v.1.247  
changed lines
  Added in v.1.252

  ViewVC Help
Powered by ViewVC 1.1.22