/[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.76 by edhill, Thu Apr 8 21:32:11 2004 UTC revision 1.89 by edhill, Wed Jul 21 16:34:46 2004 UTC
# Line 97  EOF Line 97  EOF
97      RETVAL=$?      RETVAL=$?
98      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
99          if test "x$FS" = x ; then          if test "x$FS" = x ; then
100              FS='fs'              FS='for'
101              FS90='fs90'              FS90='fr9'
102              check_for_broken_Ff              check_for_broken_Ff
103          else          else
104              cat <<EOF 2>&1              cat <<EOF 2>&1
# Line 122  EOF Line 122  EOF
122        stop        stop
123        end        end
124  EOF  EOF
125      test -e Makefile  &&  mv -f Makefile Makefile.bak      test -f Makefile  &&  mv -f Makefile Makefile.bak
126      cat <<EOF >> Makefile      cat <<EOF >> Makefile
127    %.$tfs : %.F
128  .SUFFIXES:  .SUFFIXES:
129  genmake_hello.$tfs: genmake_hello.F  genmake_hello.$tfs: genmake_hello.F
130          $LN genmake_hello.F genmake_hello.$tfs          $LN genmake_hello.F genmake_hello.$tfs
131  EOF  EOF
132      $MAKE "genmake_hello."$tfs > /dev/null 2>&1      $MAKE "genmake_hello."$tfs > /dev/null 2>&1
133      RETVAL=$?      RETVAL=$?
134      if test "x$RETVAL" != x0 -o ! -e "genmake_hello."$tfs ; then      if test "x$RETVAL" != x0 -o ! -f "genmake_hello."$tfs ; then
135          if test "x$FS" = x ; then          if test "x$FS" = x ; then
136              FS='fs'              FS='for'
137              FS90='fs9'              FS90='fr9'
138              check_for_broken_Ff              check_for_broken_Ff
139          else          else
140              cat <<EOF 2>&1              cat <<EOF 2>&1
# Line 148  EOF Line 149  EOF
149          fi          fi
150      fi      fi
151      rm -f genmake_hello.* Makefile      rm -f genmake_hello.* Makefile
152      test -e Makefile  &&  mv -f Makefile.bak Makefile      test -f Makefile  &&  mv -f Makefile.bak Makefile
153    
154      #  If we make it here, use the extensions      #  If we make it here, use the extensions
155      FS=$tfs      FS=$tfs
# Line 157  EOF Line 158  EOF
158  }  }
159    
160    
161    look_for_makedepend()  {
162    
163        #  The "original" makedepend is part of the Imake system that is
164        #  most often distributed with XFree86 or with an XFree86 source
165        #  package.  As a result, many machines (eg. generic Linux) do not
166        #  have a system-default "makedepend" available.  For those
167        #  systems, we have two fall-back options:
168        #
169        #    1) a makedepend implementation shipped with the cyrus-imapd
170        #       package:  ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/
171        #
172        #    2) a known-buggy xmakedpend shell script
173        #
174        #  So the choices are, in order:
175        #
176        #    1) use the user-specified program
177        #    2) use a system-wide default
178        #    3) locally build and use the cyrus implementation
179        #    4) fall back to the buggy local xmakedpend script
180        #
181        if test "x${MAKEDEPEND}" = x ; then
182            which makedepend > /dev/null 2>&1
183            RV0=$?
184            cat <<EOF >> genmake_tc.f
185          program test
186          write(*,*) 'test'
187          stop
188          end
189    EOF
190            makedepend genmake_tc.f > /dev/null 2>&1
191            RV1=$?
192            if test "x${RV0}${RV1}" = x00 ; then
193                MAKEDEPEND=makedepend
194            else
195                echo "    a system-default makedepend was not found."
196                
197                #  Try to build the cyrus implementation
198                rm -f ./genmake_cy_md
199                (
200                    cd $ROOTDIR/tools/cyrus-imapd-makedepend  \
201                        &&  ./configure > /dev/null 2>&1  \
202                        &&  make > /dev/null 2>&1
203                    if test -x ./makedepend.exe ; then
204                        $LN ./makedepend.exe ./makedepend
205                    fi
206                    ./makedepend ifparser.c > /dev/null 2>&1  \
207                        &&  echo "true"
208                ) > ./genmake_cy_md
209                grep true ./genmake_cy_md > /dev/null 2>&1
210                RETVAL=$?
211                if test "x$RETVAL" = x0 ; then
212                    MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend'
213                else
214                    MAKEDEPEND='$(TOOLSDIR)/xmakedepend'
215                fi
216                rm -f ./genmake_cy_md
217            fi
218        fi
219    }
220    
221    
222  # Guess possible config options for this host  # Guess possible config options for this host
223  find_possible_configs()  {  find_possible_configs()  {
224    
# Line 167  find_possible_configs()  { Line 229  find_possible_configs()  {
229      tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`      tmp2=`echo $tmp1 | sed -e 's/i[3-6]86/ia32/' | sed -e 's/athlon/ia32/'`
230      tmp3=`echo $tmp2 | sed -e 's/cray sv1/craysv1/'`      tmp3=`echo $tmp2 | sed -e 's/cray sv1/craysv1/'`
231      PLATFORM=$tmp3      PLATFORM=$tmp3
232        echo $PLATFORM | grep cygwin > /dev/null 2>&1  &&  PLATFORM=cygwin_ia32
233      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`
234      echo "  The platform appears to be:  $PLATFORM"      echo "  The platform appears to be:  $PLATFORM"
235            
# Line 186  find_possible_configs()  { Line 249  find_possible_configs()  {
249          CPP="cpp -traditional -P"          CPP="cpp -traditional -P"
250      fi      fi
251    
252      #  The "original" makedepend is part of the Imake system that is      look_for_makedepend
     #  most often distributed with XFree86 or with an XFree86 source  
     #  package.  As a result, many machines (eg. generic Linux) do not  
     #  have a system-default "makedepend" available.  For those  
     #  systems, we have two fall-back options:  
     #  
     #    1) a makedepend implementation shipped with the cyrus-imapd  
     #       package:  ftp://ftp.andrew.cmu.edu/pub/cyrus-mail/  
     #  
     #    2) a known-buggy xmakedpend shell script  
     #  
     #  So the choices are, in order:  
     #  
     #    1) use the user-specified program  
     #    2) use a system-wide default  
     #    3) locally build and use the cyrus implementation  
     #    4) fall back to the buggy local xmakedpend script  
     #  
     if test "x${MAKEDEPEND}" = x ; then  
       which makedepend > /dev/null 2>&1  
       RETVAL=$?  
       if test ! "x${RETVAL}" = x0 ; then  
          echo "    a system-default makedepend was not found."  
   
          #  Try to build the cyrus impl  
          rm -f ./genmake_cy_md  
          (  
              cd $ROOTDIR/tools/cyrus-imapd-makedepend  \  
                  &&  ./configure > /dev/null 2>&1  \  
                  &&  make > /dev/null 2>&1  \  
                  &&  ./makedepend ifparser.c > /dev/null 2>&1  \  
                  &&  echo "true"  
          ) > ./genmake_cy_md  
          grep true ./genmake_cy_md > /dev/null 2>&1  
          RETVAL=$?  
          if test "x$RETVAL" = x0 ; then  
              MAKEDEPEND='$(TOOLSDIR)/cyrus-imapd-makedepend/makedepend'  
          else  
              MAKEDEPEND='$(TOOLSDIR)/xmakedepend'  
          fi  
          rm -f ./genmake_cy_md  
       fi  
     fi  
253    
254      # look for possible fortran compilers      # look for possible fortran compilers
255      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95"      tmp="$MITGCM_FC $FC efc g77 f77 pgf77 pgf95 ifc f90 f95 mpif77 mpf77 mpxlf95"
# Line 358  Usage: "$0" [OPTIONS] Line 379  Usage: "$0" [OPTIONS]
379      -help | --help | -h | --h      -help | --help | -h | --h
380            Print this help message and exit.            Print this help message and exit.
381    
382        -adoptfile NAME | --adoptfile NAME | -adof NAME | --adof NAME
383          -adoptfile=NAME | --adoptfile=NAME | -adof=NAME | --adof=NAME
384              Use "NAME" as the adoptfile.  By default, the file at
385              "tools/adjoint_options/adjoint_default" will be used.
386    
387      -nooptfile | --nooptfile      -nooptfile | --nooptfile
388        -optfile NAME | --optfile NAME | -of NAME | --of NAME        -optfile NAME | --optfile NAME | -of NAME | --of NAME
389        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME        -optfile=NAME | --optfile=NAME | -of=NAME | --of=NAME
# Line 457  EOF Line 483  EOF
483    
484  #  Build a CPP macro to automate calling C routines from FORTRAN  #  Build a CPP macro to automate calling C routines from FORTRAN
485  get_fortran_c_namemangling()  {  get_fortran_c_namemangling()  {
486    
487        #echo "FC_NAMEMANGLE = \"$FC_NAMEMANGLE\""
488        if test ! "x$FC_NAMEMANGLE" = x ; then
489            return 0
490        fi
491    
492      default_nm="#define FC_NAMEMANGLE(X) X ## _"      default_nm="#define FC_NAMEMANGLE(X) X ## _"
493            
494      cat > genmake_test.c <<EOF      cat > genmake_test.c <<EOF
# Line 593  check_netcdf_libs()  { Line 625  check_netcdf_libs()  {
625        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
626        end        end
627  EOF  EOF
628      $CPP genmake_tnc.for > genmake_tnc.f  \      #echo "$CPP $DEFINES $INCLUDES"
629        $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f  \
630          &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f $LIBS >> genmake_tnc.log 2>&1          &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f $LIBS >> genmake_tnc.log 2>&1
631      RET_COMPILE=$?      RET_COMPILE=$?
632      test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1      test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1
# Line 602  EOF Line 635  EOF
635          HAVE_NETCDF=t          HAVE_NETCDF=t
636      else      else
637          # try again with "-lnetcdf" added to the libs          # try again with "-lnetcdf" added to the libs
638          $CPP genmake_tnc.for > genmake_tnc.f  \          $CPP $DEFINES $INCLUDES genmake_tnc.for > genmake_tnc.f  \
639              &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f \              &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f \
640              $LIBS -lnetcdf >> genmake_tnc_2.log 2>&1              $LIBS -lnetcdf >> genmake_tnc_2.log 2>&1
641          RET_COMPILE=$?          RET_COMPILE=$?
# Line 664  HAVE_FDATE= Line 697  HAVE_FDATE=
697  FC_NAMEMANGLE=  FC_NAMEMANGLE=
698  HAVE_CLOC=  HAVE_CLOC=
699  HAVE_NETCDF=  HAVE_NETCDF=
700    HAVE_ETIME=
701    
702  MODS=  MODS=
703  TOOLSDIR=  TOOLSDIR=
# Line 714  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPE Line 748  gm_s3="LN S64 KPP LINK PACKAGES MAKEDEPE
748  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"  gm_s4="CFLAGS KFLAGS1 KFLAGS2 LIBS KPPFILES NOOPTFILES NOOPTFLAGS"
749  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOSTNAME THISDATE MACHINE"  gm_s5="TOOLSDIR SOURCEDIRS INCLUDEDIRS PWD MAKE THISHOSTNAME THISDATE MACHINE"
750  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"  gm_s6="EXECUTABLE EXEHOOK EXEDIR PACKAGES_CONF"
751  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE"  gm_s7="HAVE_SYSTEM HAVE_FDATE FC_NAMEMANGLE HAVE_ETIME"
752    
753  #  The following are all related to adjoint/tangent-linear stuff  #  The following are all related to adjoint/tangent-linear stuff
754  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"
# Line 744  for i in . $MODS ; do Line 778  for i in . $MODS ; do
778      fi      fi
779  done  done
780  printf "  getting local config information:  "  printf "  getting local config information:  "
781  if test -e $gm_local ; then  if test -f $gm_local ; then
782      echo "using $gm_local"      echo "using $gm_local"
783      . $gm_local      . $gm_local
784      # echo "DISABLE=$DISABLE"      # echo "DISABLE=$DISABLE"
# Line 765  fi Line 799  fi
799  #done  #done
800  #parse_options  #parse_options
801  ac_prev=  ac_prev=
802  for ac_option ; do  for ac_option in $@ ; do
803    
804      G2ARGS="$G2ARGS \"$ac_option\""      G2ARGS="$G2ARGS \"$ac_option\""
805    
# Line 933  if test -f ./.genmakerc ; then Line 967  if test -f ./.genmakerc ; then
967  fi  fi
968    
969  if test "x${ROOTDIR}" = x ; then  if test "x${ROOTDIR}" = x ; then
970      if test "${PWD##/*/}" = "bin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then      tmp=`echo $PWD | sed -e 's/\// /g' | awk '{print $NR}'`
971        if test "x$tmp" = "xbin" -a -d ../model -a -d ../eesup -a -d ../pkg ; then
972          ROOTDIR=".."          ROOTDIR=".."
973      else      else
974          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do          for d in . .. ../.. ../../.. ../../../.. ../../../../.. ; do
# Line 987  if test "x$OPTFILE" != xNONE ; then Line 1022  if test "x$OPTFILE" != xNONE ; then
1022  fi  fi
1023    
1024  #  Check for broken systems that cannot correctly distinguish *.F and *.f files  #  Check for broken systems that cannot correctly distinguish *.F and *.f files
1025  check_for_broken_Ff  # check_for_broken_Ff
1026    
1027  echo "  getting AD_OPTFILE information:  "  echo "  getting AD_OPTFILE information:  "
1028  if test "x${AD_OPTFILE}" = x ; then  if test "x${AD_OPTFILE}" = x ; then
# Line 1066  EOF Line 1101  EOF
1101  else  else
1102      rm -f test_cpp      rm -f test_cpp
1103  fi  fi
1104  if test "x$MAKEDEPEND" = x ; then  look_for_makedepend
     MAKEDEPEND=makedepend  
 fi  
1105  if test "x$LN" = x ; then  if test "x$LN" = x ; then
1106      LN="ln -s"      LN="ln -s"
1107  fi  fi
# Line 1086  EOF Line 1119  EOF
1119  fi  fi
1120  rm -f genmake_test_ln genmake_tlink  rm -f genmake_test_ln genmake_tlink
1121    
1122    #  Check for broken *.F/*.f handling and fix if possible
1123    check_for_broken_Ff
1124    
1125  if test ! "x$MPI" = x ; then  if test ! "x$MPI" = x ; then
1126        echo "  Turning on MPI cpp macros"        echo "  Turning on MPI cpp macros"
1127        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
# Line 1131  else Line 1167  else
1167  fi  fi
1168  rm -f genmake_tcomp*  rm -f genmake_tcomp*
1169    
1170    printf "  Do we have the etime() command using $FC...  "
1171    cat > genmake_tcomp.f <<EOF
1172          program hello
1173          REAL*4 ACTUAL, TARRAY(2)
1174          EXTERNAL ETIME
1175          REAL*4 ETIME
1176          actual = etime( tarray )
1177          print *, tarray
1178          end
1179    EOF
1180    $FC $FFLAGS $DEFINES -o genmake_tcomp genmake_tcomp.f > genmake_tcomp.log 2>&1
1181    RETVAL=$?
1182    if test "x$RETVAL" = x0 ; then
1183        HAVE_ETIME=t
1184        DEFINES="$DEFINES -DHAVE_ETIME"
1185        echo "yes"
1186    else
1187        HAVE_ETIME=
1188        echo "no"
1189    fi
1190    rm -f genmake_tcomp*
1191    
1192  printf "  Can we call simple C routines (here, \"cloc()\") using $FC...  "  printf "  Can we call simple C routines (here, \"cloc()\") using $FC...  "
1193  check_HAVE_CLOC  check_HAVE_CLOC
1194  if test "x$HAVE_CLOC" != x ; then  if test "x$HAVE_CLOC" != x ; then
# Line 1172  if test "x${PLATFORM}" = x ; then Line 1230  if test "x${PLATFORM}" = x ; then
1230  fi  fi
1231    
1232  if test "x${EXEDIR}" = x ; then  if test "x${EXEDIR}" = x ; then
1233      if test "${PWD##/*/}" = "bin" -a -d ../exe -a $ROOTDIR = .. ; then      tmp=`echo $PWD | sed -e 's/\// /g' | awk '{print $NR}'`
1234        if test "x$tmp" = "xbin" -a -d ../exe -a $ROOTDIR = .. ; then
1235          EXEDIR=../exe          EXEDIR=../exe
1236      else      else
1237          EXEDIR=.          EXEDIR=.
# Line 1290  else Line 1349  else
1349              PACKAGES="$PACKAGES $i"              PACKAGES="$PACKAGES $i"
1350          done          done
1351          echo "    before group expansion packages are: $PACKAGES"          echo "    before group expansion packages are: $PACKAGES"
1352          while ! expand_pkg_groups; do echo > /dev/null; done          RET=1
1353            while test $RET = 1 ; do expand_pkg_groups; RET=$?; done
1354          echo "    after group expansion packages are:  $PACKAGES"          echo "    after group expansion packages are:  $PACKAGES"
1355      fi      fi
1356  fi  fi
# Line 1399  while test "x$ck" != xtt ; do Line 1459  while test "x$ck" != xtt ; do
1459              echo "  the dependency rules for \"$dname\""              echo "  the dependency rules for \"$dname\""
1460              exit 1              exit 1
1461          fi          fi
1462          i=$(( $i + 1 ))          i=`echo "$i + 1" | bc -l`
1463            #i=$(( $i + 1 ))
1464      done      done
1465      ck=$ck"t"      ck=$ck"t"
1466  done  done
# Line 1561  echo Line 1622  echo
1622  echo "===  Creating the Makefile  ==="  echo "===  Creating the Makefile  ==="
1623  echo "  setting INCLUDES"  echo "  setting INCLUDES"
1624  for i in $INCLUDEDIRS ; do  for i in $INCLUDEDIRS ; do
1625      if ! test -d $i ; then      if test ! -d $i ; then
 #       INCLUDES="$INCLUDES -I$i"  
 #   else  
1626          echo "Warning: can't find INCLUDEDIRS=\"$i\""          echo "Warning: can't find INCLUDEDIRS=\"$i\""
1627      fi      fi
1628  done  done
# Line 1638  echo "" >> f90srclist.inc Line 1697  echo "" >> f90srclist.inc
1697  echo "" >> hlist.inc  echo "" >> hlist.inc
1698  echo "" >> ad_flow_files.inc  echo "" >> ad_flow_files.inc
1699    
1700  if test -e $MAKEFILE ; then  if test -f $MAKEFILE ; then
1701      mv -f $MAKEFILE "$MAKEFILE.bak"      mv -f $MAKEFILE "$MAKEFILE.bak"
1702  fi  fi
1703  echo "  Writing makefile: $MAKEFILE"  echo "  Writing makefile: $MAKEFILE"
# Line 1753  echo 'F90FILES =  $(F90SRCFILES:.F=.'$FS Line 1812  echo 'F90FILES =  $(F90SRCFILES:.F=.'$FS
1812  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE
1813  echo >> $MAKEFILE  echo >> $MAKEFILE
1814  echo '.SUFFIXES:' >> $MAKEFILE  echo '.SUFFIXES:' >> $MAKEFILE
1815  echo '.SUFFIXES: .o .F .p .'$FS' .c .F90 .'$FS90 >> $MAKEFILE  echo '.SUFFIXES: .o .'$FS' .p .F .c .'$FS90' .F90' >> $MAKEFILE
1816  rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc  rm -f srclist.inc csrclist.inc hlist.inc flist.tmp clist.tmp f90srclist.inc
1817  rm -f ad_flow_files.inc  rm -f ad_flow_files.inc
1818    
# Line 1789  CLEAN: Line 1848  CLEAN:
1848          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;          -find \$(EXEDIR) -name "*.meta" -exec rm {} \;
1849          -find \$(EXEDIR) -name "*.data" -exec rm {} \;          -find \$(EXEDIR) -name "*.data" -exec rm {} \;
1850          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;          -find \$(EXEDIR) -name "fort.*" -exec rm {} \;
1851          -rm -f \$(EXECUTABLE) output.txt          -rm -f \$(EXECUTABLE) output.txt STD*
1852    
1853  #eh3 Makefile: makefile  #eh3 Makefile: makefile
1854  makefile:  makefile:

Legend:
Removed from v.1.76  
changed lines
  Added in v.1.89

  ViewVC Help
Powered by ViewVC 1.1.22