/[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.243 by utke, Tue Sep 25 21:16:29 2012 UTC revision 1.267 by heimbach, Tue Jul 15 23:05:54 2014 UTC
# Line 19  Usage: "$0" [OPTIONS] Line 19  Usage: "$0" [OPTIONS]
19      -help | --help | -h | --h      -help | --help | -h | --h
20            Print this help message and exit.            Print this help message and exit.
21    
22        -oad | --oad
23              Generate a Makefile for an OpenAD built
24    
25      -adoptfile NAME | --adoptfile NAME | -adof NAME | --adof NAME      -adoptfile NAME | --adoptfile NAME | -adof NAME | --adof NAME
26        -adoptfile=NAME | --adoptfile=NAME | -adof=NAME | --adof=NAME        -adoptfile=NAME | --adoptfile=NAME | -adof=NAME | --adof=NAME
27            Use "NAME" as the adoptfile.  By default, the file at            Use "NAME" as the adoptfile.  By default, the file at
28              "tools/adjoint_options/adjoint_oad" (for OpenAD built) or
29            "tools/adjoint_options/adjoint_default" will be used.            "tools/adjoint_options/adjoint_default" will be used.
30    
31      -nooptfile | --nooptfile      -nooptfile | --nooptfile
# Line 208  test_for_string_in_file() { Line 212  test_for_string_in_file() {
212  expand_pkg_groups() {  expand_pkg_groups() {
213      new_packages=      new_packages=
214      if test -r $PKG_GROUPS ; then      if test -r $PKG_GROUPS ; then
215          cat $PKG_GROUPS | sed -e 's/#.*$//g' | sed -e 's/:/ : /g' > ./p1.tmp          cat $PKG_GROUPS | sed -e 's/#.*$//g' | sed -e 's/:/ : /g' > $TMP.p1
216          cat ./p1.tmp | $AWK '(NF>2 && $2==":"){ print $0 }' > ./p2.tmp          cat $TMP.p1 | $AWK '(NF>2 && $2==":"){ print $0 }' > $TMP.p2
217          matched=0          matched=0
218          for i in $PACKAGES ; do          for i in $PACKAGES ; do
219              line=`grep "^ *$i" ./p2.tmp`              line=`grep "^ *$i" $TMP.p2`
220              RETVAL=$?              RETVAL=$?
221              if test "x$RETVAL" = x0 ; then              if test "x$RETVAL" = x0 ; then
222                  matched=1                  matched=1
# Line 224  expand_pkg_groups() { Line 228  expand_pkg_groups() {
228              fi              fi
229          done          done
230          PACKAGES=$new_packages          PACKAGES=$new_packages
231          rm -f ./p[1,2].tmp          rm -f $TMP.p[1,2]
232          return $matched          return $matched
233      else      else
234          echo "Warning: can't read package groups definition file: $PKG_GROUPS"          echo "Warning: can't read package groups definition file: $PKG_GROUPS"
# Line 324  look_for_makedepend()  { Line 328  look_for_makedepend()  {
328      #      #
329      #    1) a makedepend implementation shipped with the cyrus-imapd      #    1) a makedepend implementation shipped with the cyrus-imapd
330      #       package:  ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/      #       package:  ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/
331      #      #    2) a local tools/xmakedepend shell script
     #    2) a known-buggy xmakedpend shell script  
332      #      #
333      #  So the choices are, in order:      #  So the choices are, in order:
     #  
334      #    1) use the user-specified program      #    1) use the user-specified program
335      #    2) use a system-wide default      #    2) use the local xmakedepend script (get all dependencies, but slower)
336      #    3) locally build and use the cyrus implementation      #    3) use a system-wide default
337      #    4) fall back to the buggy local xmakedpend script      #    4) locally build and use the cyrus makedepend
338        #             (faster, but can miss some dependencies)
339      #      #
340      echo >> $LOGFILE      echo >> $LOGFILE
341      echo "running: look_for_makedepend()" >> $LOGFILE      echo "running: look_for_makedepend()" >> $LOGFILE
# Line 343  look_for_makedepend()  { Line 346  look_for_makedepend()  {
346              build_cyrus_makedepend              build_cyrus_makedepend
347              RETVAL=$?              RETVAL=$?
348              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" != x0 ; then
349                  echo "WARNING: unable to build cyrus-makedepend. Try 'makedepend'"                  echo "WARNING: unable to build cyrus-makedepend. Try other 'makedepend'"
350                  MAKEDEPEND=                  MAKEDEPEND=
351              fi              fi
352          else          else
# Line 356  look_for_makedepend()  { Line 359  look_for_makedepend()  {
359          fi          fi
360      fi      fi
361      if test "x${MAKEDEPEND}" = x ; then      if test "x${MAKEDEPEND}" = x ; then
         which makedepend > /dev/null 2>&1  
         RV0=$?  
362          test -f $MAKEFILE  &&  mv -f $MAKEFILE $MAKEFILE".tst"          test -f $MAKEFILE  &&  mv -f $MAKEFILE $MAKEFILE".tst"
363          #  echo 'MAKEFILE="'$MAKEFILE'"'          #  echo 'MAKEFILE="'$MAKEFILE'"'
364          cat <<EOF >> $MAKEFILE          cat <<EOF >> $MAKEFILE
# Line 373  EOF Line 374  EOF
374        stop        stop
375        end        end
376  EOF  EOF
377          makedepend -f $MAKEFILE genmake_tc.f > /dev/null 2>&1          $ROOTDIR/tools/xmakedepend -f $MAKEFILE genmake_tc.f > /dev/null 2>&1
378          RV1=$?          RV1=$?
379            which makedepend > /dev/null 2>&1
380            RV2=$?
381            if test "x${RV2}" = x0 ; then
382                makedepend -f $MAKEFILE genmake_tc.f > /dev/null 2>&1
383                RV3=$? ; loc_msg='not working.'
384            else RV3=$RV2 ; loc_msg='not found.'
385            fi
386          test -f $MAKEFILE  &&  rm -f $MAKEFILE          test -f $MAKEFILE  &&  rm -f $MAKEFILE
387          test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE          test -f $MAKEFILE".tst"  &&  mv -f $MAKEFILE".tst" $MAKEFILE
388          if test "x${RV0}${RV1}" = x00 ; then          echo "  check makedepend (local: $RV1, system: $RV2, $RV3)"
389            if test "x${RV1}" = x0 ; then
390                MAKEDEPEND='$(TOOLSDIR)/xmakedepend'
391                echo " --> set MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE
392            elif test "x${RV3}" = x0 ; then
393                echo "    local tools/xmakedepend not working. Use system-default makedepend"
394              MAKEDEPEND=makedepend              MAKEDEPEND=makedepend
395              echo " --> set MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE              echo " --> set MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE
396          else          else
397              echo "    system-default makedepend not found. Try to build cyrus-makedepend"              echo "    local tools/xmakedepend not working; system-default makedepend $loc_msg"
398                echo -n "    Try to build cyrus-makedepend ..."
399              #  Try to build the cyrus implementation              #  Try to build the cyrus implementation
400              build_cyrus_makedepend              build_cyrus_makedepend
401              RETVAL=$?              RETVAL=$?
402              if test "x$RETVAL" != x0 ; then              if test "x$RETVAL" = x0 ; then
403                  echo "WARNING: unable to build cyrus-makedepend. Use local xmakedepend"                  echo "  Works"
404                  MAKEDEPEND='$(TOOLSDIR)/xmakedepend'              else
405                  echo " --> set MAKEDEPEND=${MAKEDEPEND}" >> $LOGFILE                  echo "  Fails" ; echo "" >> $LOGFILE
406                    echo "ERROR: no working makedepend found ; look_for_makedepend FAILED" | tee -a $LOGFILE
407                    echo ""
408                    exit -1
409                    return
410              fi              fi
411          fi          fi
412      fi      fi
# Line 588  EOF Line 606  EOF
606      fi      fi
607  }  }
608    
609    #  Do a local copy of MPI headers files (in local dir ./mpi_headers/) after
610    #  checking for additional included headers (in case of chain of included header)
611    mpi_headers_do_local_copy() {
612    
613        dBug=0
614        rm -rf ./mpi_headers
615        if test -d $MPIINCLUDEDIR ; then
616    
617            #----- check for additional headers (chain of included headers)
618            echo -n '  Check MPI headers ... '
619            listIni=$MPI_HEADER_FILES
620            echo $listIni | grep "\<mpif.h\>" > /dev/null 2>&1
621            outp=$?
622            #- always check mpif.h (the only mpi-header included in standard MITgcm code)
623            if test $outp != 0 ; then listIni="mpif.h $listIni" ; fi
624            if test $dBug = 1 ; then echo "listIni='$listIni'" ; fi
625    
626            doCheck=1 ; list2copy='' ; list2check=$listIni
627            while test $doCheck = 1 ; do
628              newList=''
629              for i in $list2check ; do
630                if test -f $MPIINCLUDEDIR/$i ; then
631                  newInc=`grep '^ *include ' $MPIINCLUDEDIR/$i | \
632                    sed -e 's/^ *include //' -e 's/\!.*$//' -e "s/'//g"  -e 's/\"//g'`
633                  if test $dBug = 1 ; then echo -n "checking $i : newInc='$newInc'" ; fi
634                  for j in $newInc ; do
635                    echo $listIni $list2copy $newList | grep "\<$j\>" > /dev/null 2>&1
636                    outp=$?
637                    if test $outp != 0 ; then
638                      if test $dBug = 1 ; then echo -n " ; adding $j" ; fi
639                      newList="$newList $j"
640                    fi
641                  done
642                  if test $dBug = 1 ; then echo "" ; fi
643                fi
644              done
645              if test "x$newList" = x ; then doCheck=0
646              else list2check=$newList ; list2copy="$list2copy $newList"
647              fi
648            done
649            list2copy="$MPI_HEADER_FILES $list2copy"
650            if test $dBug = 1 ; then echo "list2copy='$list2copy'" ; fi
651    
652            #----- create local mpi_headers dir if we have files to copy
653            mkListInc=`echo $list2copy | wc -w`
654            if test $mkListInc != 0 ; then
655              echo 'create local "./mpi_headers" dir'
656              mkdir -p ./mpi_headers
657              INCLUDES="-I./mpi_headers $INCLUDES"
658              mkListInc=1
659            fi
660            if test "x$LOCAL_MPI_HEADERS" != x ; then mkListInc=0 ; fi
661    
662            #----- make local copy and update LOCAL_MPI_HEADERS (if not already set)
663            for i in $list2copy ; do
664              if test -f $MPIINCLUDEDIR/$i ; then
665                cp -p $MPIINCLUDEDIR/$i ./mpi_headers
666                if test $i = 'mpif.h' ; then
667                    perl -i -pe 's/MPI_DISPLACEMENT_CURRENT=-1_8/MPI_DISPLACEMENT_CURRENT=-1/g' mpi_headers/mpif.h
668                fi
669                if test $mkListInc = 2 ; then
670                    LOCAL_MPI_HEADERS="$LOCAL_MPI_HEADERS ./mpi_headers/$i"
671                fi
672                if test $mkListInc = 1 ; then
673                    LOCAL_MPI_HEADERS="./mpi_headers/$i" ; mkListInc=2
674                fi
675              fi
676            done
677        else
678            echo "WARNING: MPIINCLUDEDIR='$MPIINCLUDEDIR' is not a directory"
679            echo "WARNING: => skip checking for MPI headers (no ./mpi_headers dir)"
680    #       exit -1
681        fi
682    }
683    
684  #  Parse the package dependency information  #  Parse the package dependency information
685  get_pdepend_list()  {  get_pdepend_list()  {
686    
# Line 907  check_netcdf_libs()  { Line 1000  check_netcdf_libs()  {
1000        program fgennc        program fgennc
1001  #include "netcdf.inc"  #include "netcdf.inc"
1002  EOF  EOF
1003      if test ! "x$MPI" = x ; then     #if test ! "x$MPI" = x ; then
1004          echo '#include "mpif.h"' >> genmake_tnc.F     #    echo '#include "mpif.h"' >> genmake_tnc.F
1005      fi     #fi
1006      cat <<EOF >> genmake_tnc.F      cat <<EOF >> genmake_tnc.F
1007        integer iret, ncid, xid        integer iret, ncid, xid
1008        iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)        iret = nf_create('genmake_tnc.nc', NF_CLOBBER, ncid)
# Line 990  EOF Line 1083  EOF
1083  }  }
1084    
1085  check_lapack_libs()  {  check_lapack_libs()  {
1086      if test ! "x$SKIP_LAPACK_CHECK" = x ; then      if test "x$CHECK_FOR_LAPACK" = xf ; then return ; fi
         return  
     fi  
1087      echo >> $LOGFILE      echo >> $LOGFILE
1088      echo "running: check_lapack_libs()" >> $LOGFILE      echo "running: check_lapack_libs()" >> $LOGFILE
1089      cat <<EOF > genmake_tla.F      cat <<EOF > genmake_tla.F
# Line 1092  EOF Line 1183  EOF
1183      echo " --> set HAVE_LAPACK='$HAVE_LAPACK'" >> $LOGFILE      echo " --> set HAVE_LAPACK='$HAVE_LAPACK'" >> $LOGFILE
1184  }  }
1185    
1186    check_HAVE_FLUSH()  {
1187        if test ! "x$SKIP_CHECK_FLUSH" = x ; then
1188            return
1189        fi
1190        echo >> $LOGFILE
1191        echo "running: check_HAVE_FLUSH()" >> $LOGFILE
1192        cat <<EOF > genmake_tflsh.$FS
1193          program fgenflsh
1194          integer iounit
1195          character*9 fname
1196          iounit = 26
1197          fname = 'tmp.tflsh'
1198          open(iounit,FILE=fname,STATUS='unknown')
1199          write(iounit,*) 'genmake_tflsh: hello'
1200          call flush(iounit)
1201          close(iounit)
1202          end
1203    EOF
1204        echo "===  genmake_tflsh.$FS  >>>" > genmake_tflsh.log
1205        cat genmake_tflsh.$FS >> genmake_tflsh.log
1206        echo "<<<  genmake_tflsh.$FS  ===" >> genmake_tflsh.log
1207    
1208        echo "$FC $FFLAGS $FOPTIM -c genmake_tflsh.$FS  \ " >> genmake_tflsh.log
1209        echo "  &&  $LINK $FFLAGS $FOPTIM -o genmake_tflsh.o $LIBS" >> genmake_tflsh.log
1210        $FC $FFLAGS $FOPTIM -c genmake_tflsh.$FS >> genmake_tflsh.log 2>&1  \
1211            &&  $LINK $FFLAGS $FOPTIM -o genmake_tflsh genmake_tflsh.o $LIBS >> genmake_tflsh.log 2>&1
1212        RET_COMPILE=$?
1213    
1214        if test "x$RET_COMPILE" = x0 ; then
1215            HAVE_FLUSH=t
1216            #cat genmake_tflsh.log >> $LOGFILE
1217            echo "  check_HAVE_FLUSH: successful" >> $LOGFILE
1218        else
1219            HAVE_FLUSH=f
1220            cat genmake_tflsh.log >> $LOGFILE
1221        fi
1222        rm -f genmake_tflsh*
1223        echo " --> set HAVE_FLUSH='$HAVE_FLUSH'" >> $LOGFILE
1224    }
1225    
1226  ###############################################################################  ###############################################################################
1227  #   Sequential part of script starts here  #   Sequential part of script starts here
# Line 1149  GSL= Line 1279  GSL=
1279  DEVEL=  DEVEL=
1280  HAVE_TEST_L=  HAVE_TEST_L=
1281    
1282    # set this to "t" to enable lapack test
1283    CHECK_FOR_LAPACK=f
1284    
1285  # DEFINES checked by test compilation or command-line  # DEFINES checked by test compilation or command-line
1286  HAVE_SYSTEM=  HAVE_SYSTEM=
1287  HAVE_FDATE=  HAVE_FDATE=
# Line 1160  HAVE_NETCDF= Line 1293  HAVE_NETCDF=
1293  HAVE_ETIME=  HAVE_ETIME=
1294  IGNORE_TIME=  IGNORE_TIME=
1295  HAVE_LAPACK=  HAVE_LAPACK=
1296    HAVE_FLUSH=
1297    
1298  MODS=  MODS=
1299  TOOLSDIR=  TOOLSDIR=
# Line 1193  FS= Line 1327  FS=
1327  FS90=  FS90=
1328    
1329  AUTODIFF_PKG_USED=f  AUTODIFF_PKG_USED=f
1330    OPENAD=
1331  AD_OPTFILE=  AD_OPTFILE=
1332  TAF=  TAF=
1333  AD_TAF_FLAGS=  AD_TAF_FLAGS=
# Line 1205  FTL_TAF_FLAGS= Line 1340  FTL_TAF_FLAGS=
1340  SVD_TAMC_FLAGS=  SVD_TAMC_FLAGS=
1341  TAMC_EXTRA=  TAMC_EXTRA=
1342    
1343    DIVA=
1344    MPIINCLUDEDIR=
1345    MPI_HEADER_FILES=
1346    LOCAL_MPI_HEADERS=
1347    
1348  #  The following state can be set directly by command-line switches  #  The following state can be set directly by command-line switches
1349  gm_s1="ROOTDIR STANDARDDIRS MODS PKG_DEPEND PKG_GROUPS DISABLE ENABLE"  gm_s1="ROOTDIR STANDARDDIRS MODS PKG_DEPEND PKG_GROUPS DISABLE ENABLE"
1350  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 1213  gm_s3="FEXTRAFLAGS IEEE DEVEL GSL TS PAP Line 1353  gm_s3="FEXTRAFLAGS IEEE DEVEL GSL TS PAP
1353  #  The following state is not directly set by command-line switches  #  The following state is not directly set by command-line switches
1354  gm_s4="LN S64 LINK PACKAGES INCLUDES FFLAGS FOPTIM"  gm_s4="LN S64 LINK PACKAGES INCLUDES FFLAGS FOPTIM"
1355  gm_s5="CFLAGS LIBS KPP KFLAGS1 KFLAGS2 KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s5="CFLAGS LIBS KPP KFLAGS1 KFLAGS2 KPPFILES NOOPTFILES NOOPTFLAGS"
1356  gm_s6="TOOLSDIR SOURCEDIRS INCLUDEDIRS EXEDIR EXECUTABLE EXEHOOK"  gm_s6="PWD TOOLSDIR SOURCEDIRS INCLUDEDIRS EXEDIR EXECUTABLE EXEHOOK"
1357  gm_s7="PWD THISHOST THISUSER THISDATE THISVER MACHINE"  gm_s7="TMP THISHOST THISUSER THISDATE THISVER MACHINE FC_NAMEMANGLE"
1358  gm_s8="FC_NAMEMANGLE HAVE_NETCDF HAVE_SYSTEM HAVE_FDATE HAVE_ETIME HAVE_LAPACK"  gm_s8="HAVE_NETCDF HAVE_SYSTEM HAVE_FDATE HAVE_ETIME HAVE_LAPACK HAVE_FLUSH"
1359    
1360  #  The following are all related to adjoint/tangent-linear stuff  #  The following are all related to adjoint/tangent-linear stuff
1361  gm_s10="AUTODIFF_PKG_USED AD_OPTFILE TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS"  gm_s10="AUTODIFF_PKG_USED AD_OPTFILE OPENAD TAMC TAF AD_TAMC_FLAGS AD_TAF_FLAGS"
1362  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"
1363  gm_s12="TAF_EXTRA TAMC_EXTRA"  gm_s12="TAF_EXTRA TAMC_EXTRA DIVA MPIINCLUDEDIR MPI_HEADER_FILES"
1364    
1365  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"
1366  gm_state="$gm_state $gm_s10 $gm_s11 $gm_s12"  gm_state="$gm_state $gm_s10 $gm_s11 $gm_s12"
# Line 1270  for ac_option in "$@" ; do Line 1410  for ac_option in "$@" ; do
1410          -optfile=* | --optfile=* | -of=* | --of=*)          -optfile=* | --optfile=* | -of=* | --of=*)
1411              OPTFILE=$ac_optarg ;;              OPTFILE=$ac_optarg ;;
1412    
1413            -oad | --oad)
1414                OPENAD="true" ;;
1415          -adoptfile | --adoptfile | -adof | --adof)          -adoptfile | --adoptfile | -adof | --adof)
1416              ac_prev=AD_OPTFILE ;;              ac_prev=AD_OPTFILE ;;
1417          -adoptfile=* | --adoptfile=* | -adof=* | --adof=*)          -adoptfile=* | --adoptfile=* | -adof=* | --adof=*)
# Line 1439  for ac_option in "$@" ; do Line 1581  for ac_option in "$@" ; do
1581    
1582  done  done
1583    
1584    #TMP=./genmk_$$
1585    #- try to put temporary files in system-local /tmp dir
1586    TMP=/tmp/genmk_$$
1587    touch $TMP ; retVal=$?
1588    if [ $retVal -eq 0 ] ; then
1589      if test ! -r $TMP ; then TMP=./genmk_$$ ; fi
1590    else
1591      TMP=./genmk_$$
1592    fi
1593    rm -f $TMP
1594    #echo "  temp files: $TMP.*"
1595    
1596  printf "  getting local config information:  "  printf "  getting local config information:  "
1597  if test -f $gm_local ; then  if test -f $gm_local ; then
1598      echo "using $gm_local"      echo "using $gm_local"
# Line 1531  fi Line 1685  fi
1685    
1686  echo "  getting AD_OPTFILE information:"  echo "  getting AD_OPTFILE information:"
1687  if test "x${AD_OPTFILE}" = x ; then  if test "x${AD_OPTFILE}" = x ; then
1688      if test "x$MITGCM_AD_OF" = x ; then      if test "x$MITGCM_AD_OF" != x ; then
1689            AD_OPTFILE=$MITGCM_AD_OF
1690        elif test "x$OPENAD" = x ; then
1691          AD_OPTFILE=$ROOTDIR/tools/adjoint_options/adjoint_default          AD_OPTFILE=$ROOTDIR/tools/adjoint_options/adjoint_default
1692      else      else
1693          AD_OPTFILE=$MITGCM_AD_OF          AD_OPTFILE=$ROOTDIR/tools/adjoint_options/adjoint_oad
1694      fi      fi
1695  fi  fi
1696  if test "x${AD_OPTFILE}" != xNONE ; then  if test "x${AD_OPTFILE}" != xNONE ; then
# Line 1659  check_for_broken_Ff Line 1815  check_for_broken_Ff
1815  if test ! "x$MPI" = x ; then  if test ! "x$MPI" = x ; then
1816        echo "  Turning on MPI cpp macros"        echo "  Turning on MPI cpp macros"
1817        DEFINES="$DEFINES -DALLOW_USE_MPI"        DEFINES="$DEFINES -DALLOW_USE_MPI"
1818    #- To compile code older than checkpoint63s (2012/09/05), un-comment the following line:
1819    #     DEFINES="$DEFINES -DALWAYS_USE_MPI"
1820  fi  fi
1821  if test ! "x$OMP" = x ; then  if test ! "x$OMP" = x ; then
1822        echo "  Add OMPFLAG and turn on OpenMP cpp macros"        echo "  Add OMPFLAG and turn on OpenMP cpp macros"
# Line 1883  if test "x$HAVE_LAPACK" != x ; then Line 2041  if test "x$HAVE_LAPACK" != x ; then
2041  else  else
2042      echo "no"      echo "no"
2043  fi  fi
 DEFINES="$DEFINES $IGNORE_TIME"  
2044    
2045    printf "  Can we call FLUSH intrinsic subroutine...  "
2046    check_HAVE_FLUSH
2047    if test "x$HAVE_FLUSH" = xt ; then
2048        DEFINES="$DEFINES -DHAVE_FLUSH"
2049        echo "yes"
2050    else
2051        echo "no"
2052    fi
2053    
2054    DEFINES="$DEFINES $IGNORE_TIME"
2055  if test "x$EMBED_SRC" = xt ; then  if test "x$EMBED_SRC" = xt ; then
2056      build_embed_encode      build_embed_encode
2057  fi  fi
# Line 2089  if test "x${PKG_GROUPS}" != x ; then Line 2256  if test "x${PKG_GROUPS}" != x ; then
2256  fi  fi
2257    
2258  echo "  applying DISABLE settings"  echo "  applying DISABLE settings"
2259  echo "" > ./.tmp_pack  echo "" > $TMP.pack
2260  for i in $PACKAGES ; do  for i in $PACKAGES ; do
2261      echo $i >> ./.tmp_pack      echo $i >> $TMP.pack
2262  done  done
2263  for i in `grep  "-" ./.tmp_pack` ; do  for i in `grep  "-" $TMP.pack` ; do
2264      j=`echo $i | sed 's/[-]//'`      j=`echo $i | sed 's/[-]//'`
2265      DISABLE="$DISABLE $j"      DISABLE="$DISABLE $j"
2266  done  done
# Line 2111  for p in $PACKAGES ; do Line 2278  for p in $PACKAGES ; do
2278  done  done
2279  PACKAGES="$pack"  PACKAGES="$pack"
2280  echo "  applying ENABLE settings"  echo "  applying ENABLE settings"
2281  echo "" > ./.tmp_pack  echo "" > $TMP.pack
2282  PACKAGES="$PACKAGES $ENABLE"  PACKAGES="$PACKAGES $ENABLE"
2283  # Test if each explicitly referenced package exists  # Test if each explicitly referenced package exists
2284  for i in $PACKAGES ; do  for i in $PACKAGES ; do
# Line 2120  for i in $PACKAGES ; do Line 2287  for i in $PACKAGES ; do
2287          echo "Error: dir '$ROOTDIR/pkg/$i' missing for package '$i'"          echo "Error: dir '$ROOTDIR/pkg/$i' missing for package '$i'"
2288          exit 1          exit 1
2289      fi      fi
2290      echo $i >> ./.tmp_pack      echo $i >> $TMP.pack
2291  done  done
2292  PACKAGES=  PACKAGES=
2293  for i in `grep -v "-" ./.tmp_pack | sort | uniq` ; do  for i in `grep -v "-" $TMP.pack | sort | uniq` ; do
2294      PACKAGES="$PACKAGES $i"      PACKAGES="$PACKAGES $i"
2295  done  done
2296  rm -f ./.tmp_pack  rm -f $TMP.pack
2297  echo "    packages are: $PACKAGES"  echo "    packages are: $PACKAGES"
2298    
2299  #  Check for package MNC: if NetCDF is available, then build the MNC  #  Check for package MNC: if NetCDF is available, then build the MNC
# Line 2196  EOF Line 2363  EOF
2363      fi      fi
2364  fi  fi
2365    
2366  #  Check for package RADTRANS: if LAPACK is not available,  #  Make sure the openad package is enabled if using OpenAD
2367  #  then issue a warning that the direct radtrans solver is not available.  if test "x$OPENAD" != x ; then
2368  if test "x$HAVE_LAPACK" != xt ; then      echo " $PACKAGES " | grep ' openad ' > /dev/null 2>&1
     echo " $PACKAGES " | grep ' radtrans ' > /dev/null 2>&1  
2369      RETVAL=$?      RETVAL=$?
2370      if test "x$RETVAL" = x0 ; then      if test "x$RETVAL" != x0 ; then
2371          cat <<EOF          cat <<EOF
 *********************************************************************  
 WARNING: the "radtrans" package was enabled but tests failed to  
   compile LAPACK applications.  This means that the direct radtrans  
   solver is not available and compilation will fail if it is enabled.  
   If you want to use the direct solver, please check that:  
2372    
   1) LAPACK is correctly installed for this compiler and  
   2) the LIBS variable (within the "optfile") specifies the correct  
      LAPACK library to link against.  
2373  *********************************************************************  *********************************************************************
2374    ERROR: when generating an adjoint with OpenAD, the openad package
2375      must be enabled.  Please add it to packages.conf.
2376    *********************************************************************
2377    
2378  EOF  EOF
2379            exit 1
2380      fi      fi
2381  fi  fi
2382    
# Line 2405  fi Line 2568  fi
2568    
2569  #  Here, we build the list of files to be "run through" the adjoint  #  Here, we build the list of files to be "run through" the adjoint
2570  #  compiler.  #  compiler.
2571  if test -f ./adSrcFiles.tmp ; then  if test -f $TMP.adSrcFiles ; then
2572      rm -f ./adSrcFiles.tmp      rm -f $TMP.adSrcFiles
2573  fi  fi
2574  echo "  Creating the list of files for the adjoint compiler."  echo "  Creating the list of files for the adjoint compiler."
2575  touch adSrcFiles.tmp  touch $TMP.adSrcFiles
2576  for i in $SOURCEDIRS ; do  for i in $SOURCEDIRS ; do
2577      list_files=`( cd $i && ls -1 *.list 2>/dev/null )`      list_files=`( cd $i && ls -1 *.list 2>/dev/null )`
2578      for j in $list_files ; do      for j in $list_files ; do
2579          cat $i/$j >> adSrcFiles.tmp          cat $i/$j >> $TMP.adSrcFiles
2580      done      done
2581  done  done
2582  if test ! "x"$FS = "x.f" ; then  if test ! "x"$FS = "x.f" ; then
2583      cat adSrcFiles.tmp | sed -e "s/\.f/.$FS/g" > adSrcFiles.tmp_f      cat $TMP.adSrcFiles | sed -e "s/\.f/.$FS/g" > $TMP.adSrcFiles_f
2584      mv -f adSrcFiles.tmp_f adSrcFiles.tmp      mv -f $TMP.adSrcFiles_f $TMP.adSrcFiles
2585  fi  fi
2586    
2587  echo  echo
# Line 2430  for i in $INCLUDEDIRS ; do Line 2593  for i in $INCLUDEDIRS ; do
2593      fi      fi
2594  done  done
2595    
2596  if test ! "x$DIVA" = x ; then  if test ! "x$DIVA" = x -a ! "x$MPI" = x ; then
2597      echo "  Creating the pseudo-MPI include directory"      if test ! "x$MPIINCLUDEDIR" = x ; then
2598      INCLUDES="-I./mpi_headers $INCLUDES"          #  Do a local copy of MPI headers files (in local dir ./mpi_headers/) after
2599      rm -rf ./mpi_headers          #   checking for additional included headers (in case of chain of included
2600      mkdir -p ./mpi_headers          #   header); also set LOCAL_MPI_HEADERS (if not already set)
2601            mpi_headers_do_local_copy
     if test "x$MPIINCLUDEDIR" = x ; then  
         if test "x$MPIHOME" = x ; then  
             MPIHOME='/usr'  
         fi  
         MPIINCLUDEDIR='$MPIHOME/include'  
     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  
     else  
         echo " We cannot create a copy of mpif.h!"  
 #       exit -1  
2602      fi      fi
2603  fi  fi
2604    
2605  echo "  Determining the list of source and include files"  echo "  Determining the list of source and include files"
2606  rm -rf .links.tmp  rm -rf $TMP.links
2607  mkdir .links.tmp  mkdir $TMP.links
2608  touch .links.tmp/foo  touch $TMP.links/foo
2609  if test ! -r ".links.tmp/foo" ; then  if test ! -r "$TMP.links/foo" ; then
2610      echo      echo
2611      echo "ERROR : something is wrong with your directory permissions or"      echo "ERROR : something is wrong with your directory permissions or"
2612      echo "   your user file-creation mask (\"umask\") since creating a"      echo "   your user file-creation mask (\"umask\") since creating a"
# Line 2475  if test ! -r ".links.tmp/foo" ; then Line 2622  if test ! -r ".links.tmp/foo" ; then
2622      echo      echo
2623      exit 1      exit 1
2624  fi  fi
2625  rm -f .links.tmp/foo  rm -f $TMP.links/foo
2626    
2627  if test "x$OPENAD" != x ; then  if test "x$OPENAD" != x ; then
2628      OAD_DONT_COMPILE="/dev/null"      OAD_DONT_COMPILE="/dev/null"
# Line 2483  if test "x$OPENAD" != x ; then Line 2630  if test "x$OPENAD" != x ; then
2630      OAD_KEEP_ORIGINAL="/dev/null"      OAD_KEEP_ORIGINAL="/dev/null"
2631      OAD_CB2M_FILES="/dev/null"      OAD_CB2M_FILES="/dev/null"
2632      OADTOOLS="$TOOLSDIR/OAD_support"      OADTOOLS="$TOOLSDIR/OAD_support"
     test -f "oadtempflile"  &&  \rm -f "oadtempflile"  
 cat >> "oadtempflile" <<EOF  
 $OADTOOLS  
 EOF  
2633      echo "  looking for dontCompile file:  "      echo "  looking for dontCompile file:  "
2634      for i in "." $MODS ; do      for i in "." $MODS $OADTOOLS ; do
2635          if test -r $i"/dontCompile" ; then          if test -r $i"/dontCompile" ; then
2636              OAD_DONT_COMPILE=$i"/dontCompile"              OAD_DONT_COMPILE=$i"/dontCompile"
2637              echo "     found $OAD_DONT_COMPILE"              echo "     found $OAD_DONT_COMPILE"
# Line 2496  EOF Line 2639  EOF
2639          fi          fi
2640      done      done
2641      echo "  looking for dontTransform file:  "      echo "  looking for dontTransform file:  "
2642      for i in "." $MODS ; do      for i in "." $MODS $OADTOOLS ; do
2643          if test -r $i"/dontTransform" ; then          if test -r $i"/dontTransform" ; then
2644              OAD_DONT_TRANSFORM=$i"/dontTransform"              OAD_DONT_TRANSFORM=$i"/dontTransform"
2645              echo "     found $OAD_DONT_TRANSFORM"              echo "     found $OAD_DONT_TRANSFORM"
# Line 2504  EOF Line 2647  EOF
2647          fi          fi
2648      done      done
2649      echo "  looking for keepOriginal file:  "      echo "  looking for keepOriginal file:  "
2650      for i in "." $MODS ; do      for i in "." $MODS $OADTOOLS ; do
2651          if test -r $i"/keepOriginal" ; then          if test -r $i"/keepOriginal" ; then
2652              OAD_KEEP_ORIGINAL=$i"/keepOriginal"              OAD_KEEP_ORIGINAL=$i"/keepOriginal"
2653              echo "     found $OAD_KEEP_ORIGINAL"              echo "     found $OAD_KEEP_ORIGINAL"
# Line 2512  EOF Line 2655  EOF
2655          fi          fi
2656      done      done
2657      echo "  looking for cb2mFiles:  "      echo "  looking for cb2mFiles:  "
2658      for i in "." $MODS ; do      for i in "." $MODS $OADTOOLS ; do
2659          if test -r $i"/cb2mFiles" ; then          if test -r $i"/cb2mFiles" ; then
2660              OAD_CB2M_FILES=$i"/cb2mFiles"              OAD_CB2M_FILES=$i"/cb2mFiles"
2661              echo "     found $OAD_CB2M_FILES"              echo "     found $OAD_CB2M_FILES"
# Line 2522  EOF Line 2665  EOF
2665      echo "   OpenAD exceptions:  "      echo "   OpenAD exceptions:  "
2666  fi  fi
2667    
2668  echo "# This section creates symbolic links" > srclinks.tmp  echo "# This section creates symbolic links" > $TMP.srclinks
2669  echo "" >> srclinks.tmp  echo "" >> $TMP.srclinks
2670  printf 'F77_SRC_FILES = ' > F77srclist.tmp  printf 'F77_SRC_FILES = ' > $TMP.F77srclist
2671  printf 'NON_AD_F77_SRC_FILES = ' > nonADF77srclist.tmp  printf 'NON_AD_F77_SRC_FILES = ' > $TMP.nonADF77srclist
2672  printf 'C_SRC_FILES = '   > csrclist.tmp  printf 'C_SRC_FILES = '   > $TMP.csrclist
2673  printf 'F90_SRC_FILES = ' > F90srclist.tmp  printf 'F90_SRC_FILES = ' > $TMP.F90srclist
2674  printf 'H_SRC_FILES = '   > hsrclist.tmp  printf 'H_SRC_FILES = '   > $TMP.hsrclist
2675  printf 'AD_FLOW_FILES = ' > ad_flow_files.tmp  printf 'AD_FLOW_FILES = ' > $TMP.ad_flow_files
2676  alldirs="$SOURCEDIRS $INCLUDEDIRS ."  alldirs="$SOURCEDIRS $INCLUDEDIRS ."
2677  for d in $alldirs ; do  for d in $alldirs ; do
2678      deplist=      deplist=
# Line 2539  for d in $alldirs ; do Line 2682  for d in $alldirs ; do
2682          sfiles=`( echo $sfiles | grep -v _cb2m\. )`          sfiles=`( echo $sfiles | grep -v _cb2m\. )`
2683      fi      fi
2684      for sf in $sfiles ; do      for sf in $sfiles ; do
2685          if test ! -r ".links.tmp/$sf" ; then          if test ! -r "$TMP.links/$sf" ; then
2686              if test -f "$d/$sf" ; then              if test -f "$d/$sf" ; then
2687                  ignore_f=f                  ignore_f=f
2688                  case $d/$sf in                  case $d/$sf in
# Line 2564  for d in $alldirs ; do Line 2707  for d in $alldirs ; do
2707                          if test "x$HAVE_TEST_L" = xt -a "x$d" = x. -a -L $sf ; then                          if test "x$HAVE_TEST_L" = xt -a "x$d" = x. -a -L $sf ; then
2708                              ignore_f=t                              ignore_f=t
2709                          else                          else
2710                              touch .links.tmp/$sf                              touch $TMP.links/$sf
2711                              deplist="$deplist $sf"                              deplist="$deplist $sf"
2712                          fi                          fi
2713                          ;;                          ;;
# Line 2573  for d in $alldirs ; do Line 2716  for d in $alldirs ; do
2716                      extn=`echo $sf | $AWK -F. '{print $NF}'`                      extn=`echo $sf | $AWK -F. '{print $NF}'`
2717                      case $extn in                      case $extn in
2718                        F)                        F)
2719                          echo    " \\"  >> F77srclist.tmp                          echo    " \\"  >> $TMP.F77srclist
2720                          printf " $sf" >> F77srclist.tmp                          printf " $sf" >> $TMP.F77srclist
2721                          if test "x$OPENAD" != x ; then                          if test "x$OPENAD" = x ; then
2722                                basename=${sf%%.F}
2723                                isAD=`egrep ^$basename.f'[  ]*' $TMP.adSrcFiles`
2724                                if test -z "$isAD" ; then
2725                                    echo    " \\"  >> $TMP.nonADF77srclist
2726                                    printf " $sf" >> $TMP.nonADF77srclist
2727                                fi
2728                            else #- OpenAD case:
2729                              basename=${sf%%.F}                              basename=${sf%%.F}
2730                              isAD=`egrep ^$basename.f'[  ]*' adSrcFiles.tmp`                              isAD=`egrep ^$basename.f'[  ]*' $TMP.adSrcFiles`
2731                              if test -z "$isAD" ; then                              if test -z "$isAD" ; then
2732                                  toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE}`                                  toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE}`
2733                                  if test -z "$toBeIgnored" ; then                                  if test -z "$toBeIgnored" ; then
2734                                      echo    " \\"  >> nonADF77srclist.tmp                                      echo    " \\"  >> $TMP.nonADF77srclist
2735                                      printf " $sf" >> nonADF77srclist.tmp                                      printf " $sf" >> $TMP.nonADF77srclist
2736                                  else                                  else
2737                                      echo "    not to be compiled   :  $sf"                                      echo "    not to be compiled   :  $sf"
2738                                  fi                                  fi
# Line 2597  for d in $alldirs ; do Line 2747  for d in $alldirs ; do
2747                                      echo "    original to be kept  :  $sf"                                      echo "    original to be kept  :  $sf"
2748                                  fi                                  fi
2749                                  if test -n "$notToBeTransformed" -o -n "$untransformedVersionToBeKept" ; then                                  if test -n "$notToBeTransformed" -o -n "$untransformedVersionToBeKept" ; then
2750                                      echo    " \\"  >> nonADF77srclist.tmp                                      echo    " \\"  >> $TMP.nonADF77srclist
2751                                      printf " $sf" >> nonADF77srclist.tmp                                      printf " $sf" >> $TMP.nonADF77srclist
2752                                  fi                                  fi
2753                              fi                              fi
2754                          fi                          fi
2755                          ;;                          ;;
2756                      F90)                      F90)
2757                          echo    " \\"  >> F90srclist.tmp                          echo    " \\"  >> $TMP.F90srclist
2758                          printf " $sf" >> F90srclist.tmp                          printf " $sf" >> $TMP.F90srclist
2759                          ;;                          ;;
2760                      c)                      c)
2761                          echo    " \\"  >> csrclist.tmp                          echo    " \\"  >> $TMP.csrclist
2762                          printf " $sf" >> csrclist.tmp                          printf " $sf" >> $TMP.csrclist
2763                          ;;                          ;;
2764                      h)                      h)
2765                          echo    " \\"  >> hsrclist.tmp                          echo    " \\"  >> $TMP.hsrclist
2766                          printf " $sf" >> hsrclist.tmp                          printf " $sf" >> $TMP.hsrclist
2767                          ;;                          ;;
2768                      flow)                      flow)
2769                          echo    " \\"  >> ad_flow_files.tmp                          echo    " \\"  >> $TMP.ad_flow_files
2770                          printf " $sf" >> ad_flow_files.tmp                          printf " $sf" >> $TMP.ad_flow_files
2771                          ;;                          ;;
2772                     esac                     esac
2773                  fi                  fi
# Line 2626  for d in $alldirs ; do Line 2776  for d in $alldirs ; do
2776      done      done
2777      if test "x$deplist" != x ; then      if test "x$deplist" != x ; then
2778        if test "$d" != "." ; then        if test "$d" != "." ; then
2779          echo "" >> srclinks.tmp          echo "" >> $TMP.srclinks
2780          echo "#  These files are linked from $d" >> srclinks.tmp          echo "#  These files are linked from $d" >> $TMP.srclinks
2781          echo "$deplist :" >> srclinks.tmp          echo "$deplist :" >> $TMP.srclinks
2782  # We need to make sure that the link isn't already there.  # We need to make sure that the link isn't already there.
2783  # This may happen when make thinks that a header file has to be "remade"  # This may happen when make thinks that a header file has to be "remade"
2784  # because a module it depends on has changed.  In this case we do nothing.  # because a module it depends on has changed.  In this case we do nothing.
2785          printf "\tif [ ! -L \$@ ]; then \$(LN) %s/\$@ \$@; fi\n" $d >> srclinks.tmp          printf "\tif [ ! -L \$@ ]; then \$(LN) %s/\$@ \$@; fi\n" $d >> $TMP.srclinks
2786        fi        fi
2787      fi      fi
2788  done  done
2789  rm -rf .links.tmp  rm -rf $TMP.links
2790  echo "" >> F77srclist.tmp  echo "" >> $TMP.F77srclist
2791  echo "" >> nonADF77srclist.tmp  echo "" >> $TMP.nonADF77srclist
2792  echo "" >> csrclist.tmp  echo "" >> $TMP.csrclist
2793  echo "" >> F90srclist.tmp  echo "" >> $TMP.F90srclist
2794  echo "" >> hsrclist.tmp  echo "" >> $TMP.hsrclist
2795  echo "" >> ad_flow_files.tmp  echo "" >> $TMP.ad_flow_files
2796    
2797  CMDLINE=$0  CMDLINE=$0
2798  for xx in "$@" ; do nw=`echo $xx | wc -w`  for xx in "$@" ; do nw=`echo $xx | wc -w`
# Line 2715  else Line 2865  else
2865      echo "EMBEDDED_FILES = " >>$MAKEFILE      echo "EMBEDDED_FILES = " >>$MAKEFILE
2866  fi  fi
2867    
2868    # extract default cpp search path so we can pass it to makedepend
2869    CPPINCLUDES=`cat /dev/null | $CPP -v 2>&1 | awk '/^End of search/{f=0}!/^\#/{if(f){printf " -I%s", $1;}}/^\#include "..." search start/{f=1}'`
2870    
2871  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
2872  # Unix ln (link)  # Unix ln (link)
2873  LN = ${LN}  LN = ${LN}
# Line 2735  LINK = ${LINK} ${LDADD} Line 2888  LINK = ${LINK} ${LDADD}
2888  DEFINES = ${DEFINES}  DEFINES = ${DEFINES}
2889  # Includes for CPP  # Includes for CPP
2890  INCLUDES = ${INCLUDES}  INCLUDES = ${INCLUDES}
2891    # default CPP includes for makedepend
2892    CPPINCLUDES = ${CPPINCLUDES}
2893  # Flags for KPP  # Flags for KPP
2894  KFLAGS1 = ${KFLAGS1}  KFLAGS1 = ${KFLAGS1}
2895  KFLAGS2 = ${KFLAGS2}  KFLAGS2 = ${KFLAGS2}
# Line 2759  MAKE = ${MAKE} Line 2914  MAKE = ${MAKE}
2914    
2915  EOF  EOF
2916    
2917  cat F77srclist.tmp      >> $MAKEFILE  cat $TMP.F77srclist      >> $MAKEFILE
2918  cat nonADF77srclist.tmp >> $MAKEFILE  cat $TMP.nonADF77srclist >> $MAKEFILE
2919  cat csrclist.tmp        >> $MAKEFILE  cat $TMP.csrclist        >> $MAKEFILE
2920  cat F90srclist.tmp      >> $MAKEFILE  cat $TMP.F90srclist      >> $MAKEFILE
2921  cat hsrclist.tmp        >> $MAKEFILE  cat $TMP.hsrclist        >> $MAKEFILE
2922  cat ad_flow_files.tmp   >> $MAKEFILE  cat $TMP.ad_flow_files   >> $MAKEFILE
2923    
2924  rm -f F77srclist.tmp nonADF77srclist.tmp csrclist.tmp F90srclist.tmp hsrclist.tmp ad_flow_files.tmp  rm -f $TMP.F77srclist $TMP.nonADF77srclist $TMP.csrclist $TMP.F90srclist $TMP.hsrclist $TMP.ad_flow_files
2925    
2926  echo >> $MAKEFILE  echo >> $MAKEFILE
2927    
# Line 2800  fwd_exe_target: Line 2955  fwd_exe_target:
2955    
2956  depend:  depend:
2957          @\$(MAKE) -f \$(MAKEFILE) links          @\$(MAKE) -f \$(MAKEFILE) links
2958          \$(MAKEDEPEND) -f \$(MAKEFILE) -o .$FS \$(DEFINES) \$(INCLUDES) \$(F77_SRC_FILES)          \$(MAKEDEPEND) -f \$(MAKEFILE) -o .$FS \$(DEFINES) \$(INCLUDES) \$(CPPINCLUDES) \$(F77_SRC_FILES)
2959          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
2960          -rm -f makedepend.out          -rm -f makedepend.out
2961    
# Line 2816  links: \$(F77_SRC_FILES) \$(C_SRC_FILES) Line 2971  links: \$(F77_SRC_FILES) \$(C_SRC_FILES)
2971    
2972  small_f: \$(F77_PP_SRC_FILES) \$(F90_PP_SRC_FILES)  small_f: \$(F77_PP_SRC_FILES) \$(F90_PP_SRC_FILES)
2973    
 output.txt: \$(EXECUTABLE)  
         @printf 'running ... '  
         @\$(EXECUTABLE) > \$@  
   
2974  # remove most of the files that "make" generates  # remove most of the files that "make" generates
2975  clean:  clean:
2976          -rm -rf *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template          -rm -rf *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template
# Line 2833  Clean: Line 2984  Clean:
2984          @\$(MAKE) -f \$(MAKEFILE) cleanlinks          @\$(MAKE) -f \$(MAKEFILE) cleanlinks
2985          -rm -f \$(SPECIAL_FILES) f90mkdepend.log $MAKEFILE.old          -rm -f \$(SPECIAL_FILES) f90mkdepend.log $MAKEFILE.old
2986          -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  
2987    
2988  # remove also the executable, files that "genmake2" generates (except Makefile)  # remove also the executable, files that "genmake2" generates (except Makefile)
2989  #         and output from a run (plus log files from testreport)  #         and output from a run (plus log files from testreport)
# Line 2842  CLEAN: Line 2992  CLEAN:
2992          -rm -f \$(EXECUTABLE) \$(EXE_AD) \$(EXE_FTL) *.bak          -rm -f \$(EXECUTABLE) \$(EXE_AD) \$(EXE_FTL) *.bak
2993          -rm -f $LOGFILE genmake_state genmake_*optfile          -rm -f $LOGFILE genmake_state genmake_*optfile
2994          -rm -f SIZE.h.mpi genmake.tr_log make.tr_log          -rm -f SIZE.h.mpi genmake.tr_log make.tr_log
2995            -rm -rf mpi_headers mnc_test_*
2996          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
2997          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
2998          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
2999          -rm -f *.txt STD* *diagnostics.log datetime          -rm -f *.txt STDOUT.* STDERR.* *diagnostics.log *.[0-9][0-9][0-9][0-9].log
3000            -rm -f datetime costfinal divided.ctrl snapshot* output_adm.txt.diva_*
3001          -rm -f *_MIT_CE_000.opt0000 costfunction*0000          -rm -f *_MIT_CE_000.opt0000 costfunction*0000
3002          -rm -rf mnc_test_*          -rm -f oad_cp.[0-9][0-9][0-9].?????
3003    
3004  makefile:  makefile:
3005          $THIS_SCRIPT $G2ARGS          $THIS_SCRIPT $G2ARGS
# Line 2900  cat >>$MAKEFILE <<EOF Line 3052  cat >>$MAKEFILE <<EOF
3052  ## This nullifies any default implicit rules concerning these two file types:  ## This nullifies any default implicit rules concerning these two file types:
3053  ## %.o : %.F  ## %.o : %.F
3054    
3055  # C preprocessing and replacing the _d in constants:  # C preprocessing and replacing the _d in constants:
3056  CPPCMD = cat \$< | ${CPP} \$(DEFINES) \$(INCLUDES) | ${S64}  CPPCMD = cat \$< | ${CPP} \$(DEFINES) \$(INCLUDES) | ${S64}
3057    
3058  .F.$FS:  .F.$FS:
# Line 2944  TAF            = ${TAF} Line 3096  TAF            = ${TAF}
3096    
3097  TAF_EXTRA      = ${TAF_EXTRA}  TAF_EXTRA      = ${TAF_EXTRA}
3098  TAMC_EXTRA     = ${TAMC_EXTRA}  TAMC_EXTRA     = ${TAMC_EXTRA}
3099    LOCAL_MPI_HEADERS    = ${LOCAL_MPI_HEADERS}
3100    
3101  EOF  EOF
3102    
# Line 2961  done Line 3114  done
3114  echo "  Add the source list for AD code generation"  echo "  Add the source list for AD code generation"
3115  echo >> $MAKEFILE  echo >> $MAKEFILE
3116  printf "AD_FILES = " >> $MAKEFILE  printf "AD_FILES = " >> $MAKEFILE
3117  AD_FILES=`cat adSrcFiles.tmp`  AD_FILES=`cat $TMP.adSrcFiles`
3118  for i in $AD_FILES ; do  for i in $AD_FILES ; do
3119      echo    " \\" >> $MAKEFILE      echo    " \\" >> $MAKEFILE
3120      printf " $i" >> $MAKEFILE      printf " $i" >> $MAKEFILE
3121  done  done
3122  echo >> $MAKEFILE  echo >> $MAKEFILE
3123  rm -f adSrcFiles.tmp  rm -f $TMP.adSrcFiles
3124    
3125  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
3126    
# Line 2992  ad_input_code.$FS: \$(AD_FILES) \$(AD_FL Line 3145  ad_input_code.$FS: \$(AD_FILES) \$(AD_FL
3145          cat \$(FLOWFILES) \$(AD_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ad_input_code.$FS          cat \$(FLOWFILES) \$(AD_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ad_input_code.$FS
3146    
3147  ad_taf_output.$FS: ad_input_code.$FS  ad_taf_output.$FS: ad_input_code.$FS
3148            @-rm -f ad_input_code_ad.$FS ; echo ''
3149          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS          \$(TAF) \$(AD_TAF_FLAGS) \$(TAF_EXTRA) ad_input_code.$FS
3150          ls -l ad_input_code_ad.$FS          ls -l ad_input_code_ad.$FS
3151          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
# Line 3001  adtafonly: Line 3155  adtafonly:
3155          ls -l ad_input_code_ad.$FS          ls -l ad_input_code_ad.$FS
3156          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS          cat ad_input_code_ad.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ad_taf_output.$FS
3157    
3158  \$(EXE_AD): \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) ad_taf_output.o \$(OBJFILES) \$(EMBEDDED_FILES)  \$(EXE_AD): \$(SPECIAL_FILES) \$(H_SRC_FILES) ad_taf_output.o \$(NON_AD_F77_SRC_FILES:.F=.o) \$(F90_SRC_FILES:.F90=.o) \$(C_SRC_FILES:.c=.o) \$(EMBEDDED_FILES)
3159          \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ad_taf_output.o \$(LIBS)          \$(LINK) -o \${EXE_AD} \$(FFLAGS) \$(FOPTIM) ad_taf_output.o \$(NON_AD_F77_SRC_FILES:.F=.o) \$(F90_SRC_FILES:.F90=.o) \$(C_SRC_FILES:.c=.o) \$(LIBS)
3160    
3161  ad_tamc_output.$FS: ad_input_code.$FS  ad_tamc_output.$FS: ad_input_code.$FS
3162          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS          \$(TAMC) \$(AD_TAMC_FLAGS) \$(TAMC_EXTRA) ad_input_code.$FS
# Line 3017  adonlyfwd: Line 3171  adonlyfwd:
3171  adtrick:  adtrick:
3172          patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff          patch < \$(TOOLSDIR)/ad_taf_output.f.adtrick.diff
3173    
3174  adobj: ad_taf_output.o \$(OBJFILES)  adobj: ad_taf_output.o \$(NON_AD_F77_SRC_FILES:.F=.o) \$(F90_SRC_FILES:.F90=.o) \$(C_SRC_FILES:.c=.o)
3175    
3176  # ... FTL ...  # ... FTL ...
3177  ftlall: ftl_exe_target  ftlall: ftl_exe_target
# Line 3040  ftl_input_code.$FS: \$(AD_FILES) Line 3194  ftl_input_code.$FS: \$(AD_FILES)
3194          cat \$(AD_FLOW_FILES) \$(AD_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ftl_input_code.$FS          cat \$(AD_FLOW_FILES) \$(AD_FILES) | sed -f \$(TOOLSDIR)/remove_comments_sed > ftl_input_code.$FS
3195    
3196  ftl_taf_output.$FS: ftl_input_code.$FS  ftl_taf_output.$FS: ftl_input_code.$FS
3197            @-rm -f ftl_input_code_tl.$FS ; echo ''
3198          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
3199          ls -l ftl_input_code_ftl.$FS          ls -l ftl_input_code_tl.$FS
3200          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS          cat ftl_input_code_tl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
3201    
3202  ftltafonly:  ftltafonly:
3203          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS          \$(TAF) \$(FTL_TAF_FLAGS) \$(TAF_EXTRA) ftl_input_code.$FS
3204          ls -l ftl_input_code_ftl.$FS          ls -l ftl_input_code_tl.$FS
3205          cat ftl_input_code_ftl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS          cat ftl_input_code_tl.$FS | sed -f \$(TOOLSDIR)/adjoint_sed > ftl_taf_output.$FS
3206    
3207  \$(EXE_FTL): \$(SPECIAL_FILES) \$(F77_SRC_FILES) \$(C_SRC_FILES) \$(H_SRC_FILES) \$(F90_SRC_FILES) ftl_taf_output.o \$(OBJFILES) \$(EMBEDDED_FILES)  \$(EXE_FTL): \$(SPECIAL_FILES) \$(H_SRC_FILES) ftl_taf_output.o \$(NON_AD_F77_SRC_FILES:.F=.o) \$(F90_SRC_FILES:.F90=.o) \$(C_SRC_FILES:.c=.o) \$(EMBEDDED_FILES)
3208          \$(LINK) -o \${EXE_FTL} \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) ftl_taf_output.o \$(LIBS)          \$(LINK) -o \${EXE_FTL} \$(FFLAGS) \$(FOPTIM) ftl_taf_output.o \$(NON_AD_F77_SRC_FILES:.F=.o) \$(F90_SRC_FILES:.F90=.o) \$(C_SRC_FILES:.c=.o) \$(LIBS)
3209    
3210  ftl_tamc_output.$FS: ftl_input_code.$FS  ftl_tamc_output.$FS: ftl_input_code.$FS
3211          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS          \$(TAMC) \$(FTL_TAMC_FLAGS) \$(TAMC_EXTRA) ftl_input_code.$FS
# Line 3094  if test "x$OPENAD" != x ; then Line 3249  if test "x$OPENAD" != x ; then
3249  # ============ begin OpenAD specific section ==============  # ============ begin OpenAD specific section ==============
3250    
3251  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
3252    # ... OpenAD ...
3253    
3254  # all the source files linked from the various locations:  # all the source files linked from the various locations:
3255  ALL_LINKED_FILES= \  ALL_LINKED_FILES= \
# Line 3133  for i in `cat ${OAD_CB2M_FILES}` ; do Line 3289  for i in `cat ${OAD_CB2M_FILES}` ; do
3289    echo    " \\" >> $MAKEFILE    echo    " \\" >> $MAKEFILE
3290    printf " ${i}_mod.f$FS90" >> $MAKEFILE    printf " ${i}_mod.f$FS90" >> $MAKEFILE
3291  done  done
3292  AD_FILES=`cat adSrcFiles.tmp`  AD_FILES=`cat $TMP.adSrcFiles`
3293  for i in $AD_FILES ; do  for i in $AD_FILES ; do
3294    basename=${i%%.f}    basename=${i%%.f}
3295    toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE} ${OAD_DONT_TRANSFORM}`    toBeIgnored=`egrep ^$basename'[      ]*' ${OAD_DONT_COMPILE} ${OAD_DONT_TRANSFORM}`
# Line 3143  for i in $AD_FILES ; do Line 3299  for i in $AD_FILES ; do
3299    fi    fi
3300  done  done
3301  echo >> $MAKEFILE  echo >> $MAKEFILE
3302  rm -f adSrcFiles.tmp  rm -f $TMP.adSrcFiles
3303    
3304  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
3305    
3306  adAll: \$(EXE_AD)  adAll: ad_exe_target
3307  .PHONY: adAll  .PHONY: adAll
3308    
3309    ad_exe_target:
3310            @echo Update AD_CONFIG.h and make \$(EXE_AD)
3311            @$BASH\$(TOOLSDIR)/convert_cpp_cmd2defines "Adjoint version" -bAD_CONFIG_H -DALLOW_ADJOINT_RUN -UALLOW_TANGENTLINEAR_RUN > ad_config.template
3312            @cmp ad_config.template AD_CONFIG.h || cat ad_config.template > AD_CONFIG.h
3313            @-rm -f ad_config.template
3314            \$(MAKE) -f \$(MAKEFILE) \$(EXE_AD)
3315    
3316  CB2M_F90_PP_SRC_FILES=\$(addsuffix _mod.f$FS90, \$(CB2M_F90_SRC_NAMES))  CB2M_F90_PP_SRC_FILES=\$(addsuffix _mod.f$FS90, \$(CB2M_F90_SRC_NAMES))
3317    
3318  .PRECIOUS: \$(CB2M_F90_PP_SRC_FILES) \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90)  .PRECIOUS: \$(CB2M_F90_PP_SRC_FILES) \$(NON_AD_F77_SRC_FILES:.F=_cb2m.f$FS90)
# Line 3165  w2f__types.F90 \ Line 3328  w2f__types.F90 \
3328  OAD_active.F90 \  OAD_active.F90 \
3329  OAD_cp.F90 \  OAD_cp.F90 \
3330  OAD_rev.F90 \  OAD_rev.F90 \
3331  OAD_tape.F90  OAD_tape.F90 \
3332    revolve.F90
3333    
3334  OPENAD_SUPPORT_C_SRC_FILES = \  OPENAD_SUPPORT_C_SRC_FILES = \
3335  iaddr.c \  iaddr.c \
# Line 3206  AD_OBJ_FILES_S2=\$(AD_OBJ_FILES_S1) \$(N Line 3370  AD_OBJ_FILES_S2=\$(AD_OBJ_FILES_S1) \$(N
3370  small_f: \$(CB2M_F90_PP_SRC_FILES)  small_f: \$(CB2M_F90_PP_SRC_FILES)
3371  .PHONY: small_f  .PHONY: small_f
3372    
 ad_output.txt: \$(EXE_AD)  
         @printf 'linking data files ... '  
         \$(LN) -f ../input_ad/data* ../input_ad/eedata .  
         \$(LN) -f ../../global_ocean.90x40x15/input/*.bin .  
         @printf 'running ... '  
         @./\$(EXE_AD) > \$@  
   
3373  ad_input_code.f$FS90:  \$(CB2M_AD_FILES)  ad_input_code.f$FS90:  \$(CB2M_AD_FILES)
3374          cat \$^ > \$@          cat \$^ > \$@
3375    
# Line 3248  ad_input_code_sf.pre.s2p.xb.x2w.w2f.f$FS Line 3405  ad_input_code_sf.pre.s2p.xb.x2w.w2f.f$FS
3405  ad_input_code_sf.pre.s2p.xb.x2w.w2f.td.f$FS90: ad_input_code_sf.pre.s2p.xb.x2w.w2f.f$FS90 \${OADTOOLS}/insertTemplateDir.bash  ad_input_code_sf.pre.s2p.xb.x2w.w2f.td.f$FS90: ad_input_code_sf.pre.s2p.xb.x2w.w2f.f$FS90 \${OADTOOLS}/insertTemplateDir.bash
3406          \${OADTOOLS}/insertTemplateDir.bash \$< \$@          \${OADTOOLS}/insertTemplateDir.bash \$< \$@
3407    
3408  PPEXTRAS=\$(wildcard \${OADTOOLS}/ad_template.*.F) \${OADTOOLS}/ad_inline.F  PPEXTRAS=\$(notdir \$(wildcard \${OADTOOLS}/ad_template.*.F)) ad_inline.F
3409  # postprocess F'  # postprocess F'
3410  postProcess.tag: ad_input_code_sf.pre.s2p.xb.x2w.w2f.td.f$FS90 \$(PPEXTRAS:.F=.f) | w2f__types.f90  postProcess.tag: ad_input_code_sf.pre.s2p.xb.x2w.w2f.td.f$FS90 \$(PPEXTRAS:.F=.f) | w2f__types.f90
3411          \${OPENADFORTTK_BASE}/tools/SourceProcessing/postProcess.py --progress --timing --infoUnitFile w2f__types.f90 --outputFormat=fixed --separateOutput --pathSuffix "" --filenameSuffix "_oad" -m r -i \${OADTOOLS}/ad_inline.f \$<          \${OPENADFORTTK_BASE}/tools/SourceProcessing/postProcess.py --progress --timing --infoUnitFile w2f__types.f90 --outputFormat=fixed --separateOutput --pathSuffix "" --filenameSuffix "_oad" -m r -i ad_inline.f \$<
3412          # the target is a placeholder to trigger a single execution of the rule          # the target is a placeholder to trigger a single execution of the rule
3413          touch \$@          touch \$@
3414  # put this so make knows about the postprocessing output  # put this so make knows about the postprocessing output
# Line 3262  OAD_intrinsics_oad.f \$(CB2M_AD_FILES:.f Line 3419  OAD_intrinsics_oad.f \$(CB2M_AD_FILES:.f
3419          \$(LN) \${XAIFSCHEMAROOT}/schema/\$@ .          \$(LN) \${XAIFSCHEMAROOT}/schema/\$@ .
3420    
3421  # link the support files:  # link the support files:
3422  \$(OPENAD_SUPPORT_F90_SRC_FILES) \$(OPENAD_SUPPORT_C_SRC_FILES):  \$(OPENAD_SUPPORT_F90_SRC_FILES) \$(OPENAD_SUPPORT_C_SRC_FILES) \$(PPEXTRAS):
3423          \$(LN) \${OADTOOLS}/\$@ .          \$(LN) \${OADTOOLS}/\$@ .
3424    
3425  AD_CLEAN += *_mod.h *_mod.F90 *.FF90 *.mod-whirl temp.sed oad_cp.* postProcess.tag \$(PPEXTRAS:.F=.f)  AD_CLEAN += *_mod.h *_mod.F90 *.FF90 *.mod-whirl temp.sed oad_cp.* postProcess.tag
3426    
3427  # ============ end OpenAD specific section ==============  # ============ end OpenAD specific section ==============
3428    
# Line 3301  for i in $NOOPTFILES ; do Line 3458  for i in $NOOPTFILES ; do
3458  done  done
3459    
3460  echo "  Add rules for links"  echo "  Add rules for links"
3461  cat srclinks.tmp >> $MAKEFILE  cat $TMP.srclinks >> $MAKEFILE
3462  rm -f srclinks.tmp  rm -f $TMP.srclinks
3463    
3464  echo "  Adding makedepend marker"  echo "  Adding makedepend marker"
3465  printf "\n\n# DO NOT DELETE\n" >> $MAKEFILE  printf "\n\n# DO NOT DELETE\n" >> $MAKEFILE

Legend:
Removed from v.1.243  
changed lines
  Added in v.1.267

  ViewVC Help
Powered by ViewVC 1.1.22