/[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.74 by adcroft, Wed Mar 24 17:12:51 2004 UTC revision 1.77 by edhill, Thu Apr 8 23:48:43 2004 UTC
# Line 73  expand_pkg_groups() { Line 73  expand_pkg_groups() {
73      fi      fi
74  }  }
75    
76    #  Check for broken environments (eg. cygwin, MacOSX w/HFS+) that
77    #  cannot distinguish [*.F/*.F90] from [*.f/*.f90] files.
78    check_for_broken_Ff()  {
79        #  Do we have defaults for $FS and/or $FS90 ?
80        tfs=f
81        tfs9=f90
82        if test "x$FS" != x ; then
83            tfs="$FS"
84        fi
85        if test "x$FS90" != x ; then
86            tfs9="$FS90"
87        fi
88    
89        #  First check the ability to create a *.F/.f pair.
90        cat <<EOF >> genmake_hello.F
91          program hello
92          write(*,*) 'hi'
93          stop
94          end
95    EOF
96        cp genmake_hello.F "genmake_hello."$tfs > /dev/null 2>&1
97        RETVAL=$?
98        if test "x$RETVAL" != x0 ; then
99            if test "x$FS" = x ; then
100                FS='for'
101                FS90='fr9'
102                check_for_broken_Ff
103            else
104                cat <<EOF 2>&1
105    ERROR: Your file system cannot distinguish between *.F and *.f files
106      (fails the "cp" test) and this program cannot find a suitable
107      replacement extension.  Please try a different build environment or
108      contact the <MITgcm-support@mitgcm.org> list for help.
109    
110    EOF
111                exit -1
112            fi
113            return
114        fi
115        rm -f genmake_hello.*
116    
117        #  Check the ability of ${MAKE} and ${LN} to use the current set
118        #  of extensions.
119        cat <<EOF >> genmake_hello.F
120          program hello
121          write(*,*) 'hi'
122          stop
123          end
124    EOF
125        test -e Makefile  &&  mv -f Makefile Makefile.bak
126        cat <<EOF >> Makefile
127    %.$tfs : %.F
128    .SUFFIXES:
129    genmake_hello.$tfs: genmake_hello.F
130            $LN genmake_hello.F genmake_hello.$tfs
131    EOF
132        $MAKE "genmake_hello."$tfs > /dev/null 2>&1
133        RETVAL=$?
134        if test "x$RETVAL" != x0 -o ! -e "genmake_hello."$tfs ; then
135            if test "x$FS" = x ; then
136                FS='for'
137                FS90='fr9'
138                check_for_broken_Ff
139            else
140                cat <<EOF 2>&1
141    ERROR: Your file system cannot distinguish between *.F and *.f files
142      (fails the "make/ln" test) and this program cannot find a suitable
143      replacement extension.  Please try a different build environment or
144      contact the <MITgcm-support@mitgcm.org> list for help.
145    
146    EOF
147                exit -1
148                return
149            fi
150        fi
151        rm -f genmake_hello.* Makefile
152        test -e Makefile  &&  mv -f Makefile.bak Makefile
153    
154        #  If we make it here, use the extensions
155        FS=$tfs
156        FS90=$tfs9
157        return
158    }
159    
160    
161  # Guess possible config options for this host  # Guess possible config options for this host
162  find_possible_configs()  {  find_possible_configs()  {
163    
# Line 83  find_possible_configs()  { Line 168  find_possible_configs()  {
168      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/'`
169      tmp3=`echo $tmp2 | sed -e 's/cray sv1/craysv1/'`      tmp3=`echo $tmp2 | sed -e 's/cray sv1/craysv1/'`
170      PLATFORM=$tmp3      PLATFORM=$tmp3
171        echo $PLATFORM | grep cygwin > /dev/null 2>&1  &&  PLATFORM=cygwin_ia32
172      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`      OFLIST=`(cd $ROOTDIR/tools/build_options; ls | grep "^$PLATFORM")`
173      echo "  The platform appears to be:  $PLATFORM"      echo "  The platform appears to be:  $PLATFORM"
174            
# Line 122  find_possible_configs()  { Line 208  find_possible_configs()  {
208      #      #
209      if test "x${MAKEDEPEND}" = x ; then      if test "x${MAKEDEPEND}" = x ; then
210        which makedepend > /dev/null 2>&1        which makedepend > /dev/null 2>&1
211        RETVAL=$?        RV0=$?
212        if test ! "x${RETVAL}" = x0 ; then        cat <<EOF >> genmake_tc.f
213          program test
214          write(*,*) 'test'
215          stop
216          end
217    EOF
218          makedepend genmake_tc.f > /dev/null 2>&1
219          RV1=$?
220          if test ! "x${RV0}${RV1}" = x00 ; then
221           echo "    a system-default makedepend was not found."           echo "    a system-default makedepend was not found."
222    
223           #  Try to build the cyrus impl           #  Try to build the cyrus impl
# Line 131  find_possible_configs()  { Line 225  find_possible_configs()  {
225           (           (
226               cd $ROOTDIR/tools/cyrus-imapd-makedepend  \               cd $ROOTDIR/tools/cyrus-imapd-makedepend  \
227                   &&  ./configure > /dev/null 2>&1  \                   &&  ./configure > /dev/null 2>&1  \
228                   &&  make > /dev/null 2>&1  \                   &&  make > /dev/null 2>&1
229                   &&  ./makedepend ifparser.c > /dev/null 2>&1  \               if test -x ./makedepend.exe ; then
230                     $LN ./makedepend.exe ./makedepend
231                 fi
232                 ./makedepend ifparser.c > /dev/null 2>&1  \
233                   &&  echo "true"                   &&  echo "true"
234           ) > ./genmake_cy_md           ) > ./genmake_cy_md
235           grep true ./genmake_cy_md > /dev/null 2>&1           grep true ./genmake_cy_md > /dev/null 2>&1
# Line 497  EOF Line 594  EOF
594    
595    
596  check_netcdf_libs()  {  check_netcdf_libs()  {
597      cat <<EOF > genmake_tnc.F      cat <<EOF > genmake_tnc.for
598        program fgennc        program fgennc
599  #include "netcdf.inc"  #include "netcdf.inc"
600        integer iret, ncid, xid        integer iret, ncid, xid
# Line 509  check_netcdf_libs()  { Line 606  check_netcdf_libs()  {
606        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)        IF (iret .NE. NF_NOERR) write(*,*) NF_STRERROR(iret)
607        end        end
608  EOF  EOF
609      $CPP genmake_tnc.F > genmake_tnc.f  \      $CPP genmake_tnc.for > genmake_tnc.f  \
610          &&  $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
611      RET_COMPILE=$?      RET_COMPILE=$?
612      test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1      test -x ./genmake_tnc  &&  ./genmake_tnc >> genmake_tnc.log 2>&1
# Line 518  EOF Line 615  EOF
615          HAVE_NETCDF=t          HAVE_NETCDF=t
616      else      else
617          # try again with "-lnetcdf" added to the libs          # try again with "-lnetcdf" added to the libs
618          $CPP genmake_tnc.F > genmake_tnc.f  \          $CPP genmake_tnc.for > genmake_tnc.f  \
619              &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f \              &&  $FC $FFLAGS $FOPTIM -o genmake_tnc genmake_tnc.f \
620              $LIBS -lnetcdf >> genmake_tnc_2.log 2>&1              $LIBS -lnetcdf >> genmake_tnc_2.log 2>&1
621          RET_COMPILE=$?          RET_COMPILE=$?
# Line 604  IEEE= Line 701  IEEE=
701  if test "x$MITGCM_IEEE" != x ; then  if test "x$MITGCM_IEEE" != x ; then
702      IEEE=$MITGCM_IEEE      IEEE=$MITGCM_IEEE
703  fi  fi
704    FS=
705    FS90=
706    
707  AUTODIFF_PKG_USED=f  AUTODIFF_PKG_USED=f
708  AD_OPTFILE=  AD_OPTFILE=
# Line 781  for ac_option ; do Line 880  for ac_option ; do
880          -fc=* | --fc=*)          -fc=* | --fc=*)
881              FC=$ac_optarg ;;              FC=$ac_optarg ;;
882                    
883            -fs | --fs)
884                ac_prev=FS ;;
885            -fs=* | --fs=*)
886                FS=$ac_optarg ;;
887            
888            -fs90 | --fs90)
889                ac_prev=FS90 ;;
890            -fs90=* | --fs90=*)
891                FS90=$ac_optarg ;;
892            
893          -ieee | --ieee)          -ieee | --ieee)
894              IEEE=true ;;              IEEE=true ;;
895          -noieee | --noieee)          -noieee | --noieee)
# Line 890  if test "x$OPTFILE" != xNONE ; then Line 999  if test "x$OPTFILE" != xNONE ; then
999      fi      fi
1000  fi  fi
1001    
1002    #  Check for broken systems that cannot correctly distinguish *.F and *.f files
1003    # check_for_broken_Ff
1004    
1005  echo "  getting AD_OPTFILE information:  "  echo "  getting AD_OPTFILE information:  "
1006  if test "x${AD_OPTFILE}" = x ; then  if test "x${AD_OPTFILE}" = x ; then
1007      if test "x$MITGCM_AD_OF" = x ; then      if test "x$MITGCM_AD_OF" = x ; then
# Line 943  if test "x$CPP" = x ; then Line 1055  if test "x$CPP" = x ; then
1055      CPP=cpp      CPP=cpp
1056  fi  fi
1057  #EH3 === UGLY ===  #EH3 === UGLY ===
1058  #  The following an ugly little hack to check for $CPP in /lib/ and it  #  The following is an ugly little hack to check for $CPP in /lib/ and
1059  #  should eventually be replaced with a more general function that  #  it should eventually be replaced with a more general function that
1060  #  searches a combo of the user's path and a list of "usual suspects"  #  searches a combo of the user's path and a list of "usual suspects"
1061  #  to find the correct location for binaries such as $CPP.  #  to find the correct location for binaries such as $CPP.
1062  for i in " " "/lib/" ; do  for i in " " "/lib/" ; do
# Line 987  EOF Line 1099  EOF
1099  fi  fi
1100  rm -f genmake_test_ln genmake_tlink  rm -f genmake_test_ln genmake_tlink
1101    
1102    #  Check for broken *.F/*.f handling and fix if possible
1103    check_for_broken_Ff
1104    
1105  if test ! "x$MPI" = x ; then  if test ! "x$MPI" = x ; then
1106        echo "  Turning on MPI cpp macros"        echo "  Turning on MPI cpp macros"
1107        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"        DEFINES="$DEFINES -DALLOW_USE_MPI -DALWAYS_USE_MPI"
# Line 1648  cat csrclist.inc      >> $MAKEFILE Line 1763  cat csrclist.inc      >> $MAKEFILE
1763  cat f90srclist.inc    >> $MAKEFILE  cat f90srclist.inc    >> $MAKEFILE
1764  cat hlist.inc         >> $MAKEFILE  cat hlist.inc         >> $MAKEFILE
1765  cat ad_flow_files.inc >> $MAKEFILE  cat ad_flow_files.inc >> $MAKEFILE
1766  echo               >> $MAKEFILE  echo >> $MAKEFILE
1767  echo 'F77FILES =  $(SRCFILES:.F=.f)'                                           >> $MAKEFILE  echo 'F77FILES =  $(SRCFILES:.F=.'$FS')'      >> $MAKEFILE
1768  echo 'F90FILES =  $(F90SRCFILES:.F90=.f90)'                                    >> $MAKEFILE  echo 'F90FILES =  $(F90SRCFILES:.F=.'$FS90')' >> $MAKEFILE
1769  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE  echo 'OBJFILES =  $(SRCFILES:.F=.o) $(CSRCFILES:.c=.o) $(F90SRCFILES:.F90=.o)' >> $MAKEFILE
1770    echo >> $MAKEFILE
1771    echo '.SUFFIXES:' >> $MAKEFILE
1772    echo '.SUFFIXES: .o .F .p .'$FS' .c .F90 .'$FS90 >> $MAKEFILE
1773  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
1774  rm -f ad_flow_files.inc  rm -f ad_flow_files.inc
1775    
1776  cat >>$MAKEFILE <<EOF  cat >>$MAKEFILE <<EOF
1777    
 .SUFFIXES:  
 .SUFFIXES: .o .f .p .F .c .F90 .f90  
   
1778  all: \$(EXECUTABLE)  all: \$(EXECUTABLE)
1779  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)  \$(EXECUTABLE): \$(SPECIAL_FILES) \$(SRCFILES) \$(CSRCFILES) \$(HEADERFILES) \$(F90SRCFILES) \$(OBJFILES)
1780          @echo Creating \$@ ...          @echo Creating \$@ ...
1781          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)          \$(LINK) -o \$@ \$(FFLAGS) \$(FOPTIM) \$(OBJFILES) \$(LIBS)
1782  depend:  depend:
1783          @make links          @make links
1784          \$(MAKEDEPEND) -o .f \$(DEFINES) \$(INCLUDES) \$(SRCFILES)          \$(MAKEDEPEND) -o .$FS \$(DEFINES) \$(INCLUDES) \$(SRCFILES)
1785          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)          \$(TOOLSDIR)/f90mkdepend >> \$(MAKEFILE)
1786          -rm -f makedepend.out          -rm -f makedepend.out
1787    
# Line 1680  output.txt: \$(EXECUTABLE) Line 1794  output.txt: \$(EXECUTABLE)
1794          @\$(EXECUTABLE) > \$@          @\$(EXECUTABLE) > \$@
1795    
1796  clean:  clean:
1797          -rm -rf *.o *.f *.p *.f90 *.mod ${RMFILES} work.{pc,pcl} *.template          -rm -rf *.o *.$FS *.p *.$FS90 *.mod ${RMFILES} work.{pc,pcl} *.template
1798  Clean:  Clean:
1799          @make clean          @make clean
1800          @make cleanlinks          @make cleanlinks
# Line 1710  FC_NAMEMANGLE.h: Line 1824  FC_NAMEMANGLE.h:
1824          @echo Creating \$@ ...          @echo Creating \$@ ...
1825          echo "$FC_NAMEMANGLE" > \$@          echo "$FC_NAMEMANGLE" > \$@
1826    
1827  # The normal chain of rules is (  .F - .f - .o  )  # The normal chain of rules is (  .F - .$FS - .o  )
1828  .F.f:  
1829    %.o : %.F
1830    
1831    .F.$FS:
1832          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1833  .f.o:  .$FS.o:
1834          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<          \$(FC) \$(FFLAGS) \$(FOPTIM) -c \$<
1835  .F90.f90:  .F90.$FS90:
1836          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1837  .f90.o:  .$FS90.o:
1838          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<          \$(F90C) \$(F90FLAGS) \$(F90OPTIM) -c \$<
1839  .c.o:  .c.o:
1840          \$(CC) \$(CFLAGS) -c \$<          \$(CC) \$(CFLAGS) -c \$<
1841    
1842  # Special exceptions that use the ( .F - .p - .f - .o ) rule-chain  # Special exceptions that use the ( .F - .p - .$FS - .o ) rule-chain
1843  .F.p:  .F.p:
1844          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@          \$(CPP) \$(DEFINES) \$(INCLUDES) > \$@
1845  .p.f:  .p.$FS:
1846          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<          \$(KPP) \$(KFLAGS1)\$@ \$(KFLAGS2) \$<
1847    
1848  #=========================================  #=========================================
# Line 1850  for i in $KPPFILES ; do Line 1967  for i in $KPPFILES ; do
1967      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
1968          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
1969      fi      fi
1970      echo "$base.f: $base.p" >> $MAKEFILE      echo "$base.$FS: $base.p" >> $MAKEFILE
1971  done  done
1972    
1973  echo "  Making list of NOOPTFILES"  echo "  Making list of NOOPTFILES"
# Line 1860  for i in $NOOPTFILES ; do Line 1977  for i in $NOOPTFILES ; do
1977      if test "x$RETVAL" != x0 ; then      if test "x$RETVAL" != x0 ; then
1978          echo "Error: unable to add file \"$i\" to the exceptions list"          echo "Error: unable to add file \"$i\" to the exceptions list"
1979      fi      fi
1980      echo "$base.o: $base.f" >> $MAKEFILE      echo "$base.o: $base.$FS" >> $MAKEFILE
1981      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE      printf "\t\$(FC) \$(FFLAGS) \$(NOOPTFLAGS) -c \$<\n" >> $MAKEFILE
1982  done  done
1983    

Legend:
Removed from v.1.74  
changed lines
  Added in v.1.77

  ViewVC Help
Powered by ViewVC 1.1.22