home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / fchk294s.zip / ftnchek-2.9.4 / makefile.os2 < prev    next >
Makefile  |  1996-10-04  |  15KB  |  439 lines

  1. #=======================================================================
  2. # UNIX version of Makefile for Fortran program checker ftnchek version 2.9
  3. #
  4. # Current target list:
  5. #    TAGS
  6. #    all            build ftnchek and its documentation files
  7. #    blurb.txt
  8. #    check            run validation test suite
  9. #    clean            remove unnecessary intermediate files
  10. #    clobber            make clean, and remove ftnchek executable
  11. #    dcl2inc.doc        ASCII form of documentation
  12. #    dcl2inc.ps        PostScript form of documentation
  13. #    dcl2inc            Shell script to convert decls to includes
  14. #    distclean        remove everything not in the distribution
  15. #    docs            documentation files
  16. #    fortran.c        translate yacc code to C
  17. #    ftnchek            ftnchek executable program
  18. #    ftnchek.1        UNIX manual page document
  19. #    ftnchek.doc        ASCII form of documentation
  20. #    ftnchek.hlp        VAX/VMS HELP library source
  21. #    ftnchek.ps        PostScript form of documentation
  22. #    install            install ftnchek and dcl2inc and their man pages
  23. #    install-exe        install ftnchek and dcl2inc executables
  24. #    install-man        install only man pages
  25. #    install-man-sgi        install only man pages on SGI systems
  26. #    lint            run lint on source code
  27. #    mostlyclean        same as clean
  28. #    prog            same as ftnchek
  29. #    realclean        same as clobber
  30. #    spotless        make distclean, then remove formatted
  31. #                documentation (do NOT do this if you don't
  32. #                have groff or nroff/troff to recreate the
  33. #                documentation!)
  34. #    maintainer-clean    distclean, then things maintainer can rebuild
  35. #    TAGS            emacs editor tags file
  36. #    tags            ex and vi editor tags file
  37. #    uninstall        undo an ftnchek installation
  38. #    tar            distribution tar file
  39. #
  40. # Object file targets:
  41. #    ftnchek.o
  42. #    exprtype.o
  43. #    forlex.o
  44. #    fortran.o
  45. #    pgsymtab.o
  46. #    plsymtab.o
  47. #    project.o
  48. #    symtab.o
  49. #
  50. #
  51. #
  52. #    Copyright (C) 1991 by Robert K. Moniot.
  53. #    This program is free software.  Permission is granted to
  54. #    modify it and/or redistribute it, retaining this notice.
  55. #    No guarantees accompany this software.
  56. #
  57. # Acknowledgements and thanks to Nelson H. F. Beebe of the University
  58. # of Utah for improvements to this Makefile.
  59. # [25-Apr-1994]
  60. #=======================================================================
  61.  
  62. # These definitions should be customized for your local conventions
  63. # if you want to do "make install" or "make uninstall".
  64. #  prefix is the root of the destination for installing things.
  65. #  bindir is directory for executables, mandir for man pages.
  66. #  manext is the extension on man pages, including the dot.
  67. #  libdir is the directory for library files (dcl2inc.awk).  It must
  68. #    agree with the libdir defined in dcl2inc as made by configure.
  69. prefix        = @prefix@
  70. exec_prefix    = @exec_prefix@
  71. bindir        = @bindir@
  72. mandir        = @mandir@
  73. manext        = .1
  74. libdir        = @libdir@/ftnchek
  75.  
  76. # Define suffix for executables, for non-unix systems which have one.
  77. EXE        = .exe
  78. #EXE        = .exe
  79.  
  80. # Define suffix for scripts, to go on the end of dcl2inc script.
  81. CMD        = .cmd
  82. #CMD        = .cmd
  83. #CMD        = .bat
  84.  
  85. # The following definitions are set for your system by configure
  86. CC              = gcc.exe
  87. MANtoPS        = 
  88. NAWK        = gawk.exe
  89. NROFF        = groff.exe
  90. STRIP           = echo Requested: strip
  91. YACC            = 
  92.  
  93. # The following is only used for targets ftnchek.doc and ftnchek.hlp
  94. # which are not needed for unix platforms.  It removes control chars
  95. # and converts tabs to blanks.  Normally COL=col -bx but if you don't
  96. # have it, can make do with cat.
  97. COL        = 
  98.  
  99. # Editor tags file support
  100. CTAGS        = ctags
  101. CTAGSFLAGS    = -t
  102. ETAGS        = etags
  103.  
  104.  
  105. # These system utilities should be standard on all UNIX systems
  106. CHMOD        = chmod.exe
  107. CMP        = diff.exe
  108. CP        = cp.exe
  109. EQN        = eqn.exe
  110. MKDIR        = mkdir.exe
  111. MV        = mv.exe
  112. PWD_PROG    = @PWD_PROG@
  113. RM        = rm.exe -f
  114. RMDIR        = rmdir.exe
  115. SED        = sed.exe
  116. SHELL        = sh.exe
  117. SOELIM        = soelim.exe
  118. TBL        = tbl.exe
  119. TAR        = tar.exe
  120.  
  121. FTNCHEK        = ./ftnchek$(EXE)
  122.  
  123.  
  124. # OPTIONS is used to define various characteristics.  Most commonly
  125. # needed ones are given below; uncomment whichever you like.
  126. # See ftnchek.h for others, with their defaults and explanations.
  127. # OPTIONS shouldn't include things controlled by "configure".
  128. # To include your own options without touching the Makefile, say
  129. #              make "OPTIONS= <your-list-of-options>"
  130.  
  131. # If you want -f77=all to be the default, uncomment this.
  132. #OPTIONS        = -DSTRICT_SYNTAX
  133.  
  134.  
  135. # CFLAGS is used to define the operating system and options
  136. # LDFLAGS gives linker options
  137. # YFLAGS specifies yacc options
  138. CFLAGS          = -DUNIX -DLARGE_MACHINE -O2 -m486 $(OPTIONS)
  139. LDFLAGS         = -s
  140. YFLAGS          = -d
  141.  
  142. # fortran.o first because of possible remake if tokdefs.h changes (see below)
  143. OBJS            = fortran.o exprtype.o forlex.o ftnchek.o \
  144.           pgsymtab.o plsymtab.o project.o symtab.o
  145.  
  146. DOCS        = README INSTALL PATCHES average.f average.out correct.f \
  147.             blurb.txt dcl2inc.doc dcl2inc.man dcl2inc.ps \
  148.             ftnchek.doc ftnchek.hlp ftnchek.man ftnchek.ps
  149. BUILDFILES    = Makefile.in configure configure.in config.guess config.sub \
  150.             configure.generic configure_os2.cmd \
  151.             makefile.bc makefile.mpw makefile.os2 makefile.unix \
  152.             makefile.generic \
  153.             install-sh ftnchek.def \
  154.             build-alpha.com build.com cc.com \
  155.             link-alpha.com link.com
  156. SRCS            = exprtype.c forlex.c fortran.y fortran.c ftnchek.c \
  157.           ftnchek.h intrins.h iokeywds.h keywords.h \
  158.           pgsymtab.c plsymtab.c project.c shell_mung.c \
  159.           symtab.c symtab.h tokdefs.h
  160. SCRIPTS        = dcl2inc dcl2inc.awk dcl2inc.in man2ps
  161. TESTDIR        = test
  162. # The following defines all files to go into distribution
  163. DISTFILES    = $(DOCS) $(BUILDFILES) $(SRCS) $(SCRIPTS) $(TESTDIR)
  164. #=======================================================================
  165.  
  166. # N.B. dcl2inc is also a prog but it is made by configure.  A generic
  167. # copy of it is provided with the distribution also, in case the user
  168. # doesn't want to use configure.
  169. prog:    ftnchek$(EXE)
  170.  
  171. all:    prog docs
  172.  
  173. check:
  174.     cd $(TESTDIR); $(MAKE) NAWK="$(NAWK)" -s precheck
  175.     cd $(TESTDIR); $(MAKE) NAWK="$(NAWK)" -i -s check
  176.  
  177. lint:
  178.     lint $(LINTFLAGS) $(OBJS:.o=.c) -lm
  179.  
  180. # Remove intermediate files that are not required after the program is
  181. # built.
  182. clean mostlyclean:
  183.     -$(RM) *.o
  184.     -$(RM) \#*
  185.     -$(RM) a.out
  186.     -$(RM) *~
  187.     -$(RM) core
  188.     -$(RM) y.tab.h
  189.     -$(RM) config.status config.log config.cache
  190.  
  191. # Remove almost everything that make can rebuild.  We do not remove
  192. # fortran.c since some places don't have yacc or bison.
  193. clobber realclean:    clean
  194.     -$(RM) ftnchek$(EXE)
  195.  
  196. # Remove everything that make can rebuild, preparatory to making a
  197. # distribution version.  We intentionally do NOT remove .ps and .doc
  198. # files, because some UNIX systems lack nroff/troff/groff.
  199. distclean:    realclean
  200.     -$(RM) *.dcl
  201.     -$(RM) cscope.out
  202.     -$(RM) tags
  203.     -$(RM) TAGS
  204.     -$(RM) ftnchek$(manext)
  205.     cd $(TESTDIR); $(MAKE) distclean
  206.  
  207. maintainer-clean:    distclean
  208.     @echo "This command is intended for maintainers to use;"
  209.     @echo "it deletes files that may require special tools to rebuild."
  210.     -$(RM) Makefile
  211.     -$(RM) configure
  212.     -$(RM) fortran.c
  213.  
  214. ftnchek$(EXE): $(OBJS)
  215.     $(CC) $(CFLAGS) $(LDFLAGS) -o ftnchek$(EXE) $(OBJS) -lm
  216.  
  217. # N.B. tokdefs.h is copy of y.tab.h used to avoid remaking stuff when
  218. # grammar changes but not tokens.
  219. # The following copies y.tab.h to tokdefs.h if changed, then aborts make,
  220. # since dependencies may have changed.
  221. fortran.c: fortran.y
  222.     $(YACC) $(YFLAGS) fortran.y
  223.     $(MV) y.tab.c fortran.c
  224.     @if $(CMP) -s y.tab.h tokdefs.h ; then true ; else \
  225.         echo; echo tokdefs.h changed -- repeat make ; \
  226.         $(CP) y.tab.h tokdefs.h; \
  227.         false ; \
  228.     fi
  229.  
  230. # Documentation targets: If you make changes to the documentation,
  231. # you should edit only ftnchek.man and then re-make these targets.
  232. # If ftnchek.1 fails to make, ftnchek.man is usable directly (after
  233. # applying soelim) except that some troff-like processors may not
  234. # give satisfactory results.
  235.  
  236. docs:    average.out blurb.txt ftnchek.doc ftnchek.hlp \
  237.     ftnchek.ps dcl2inc.doc dcl2inc.ps
  238.  
  239.  
  240. # Following sed script trims out the if-else machinery contained in
  241. # ftnchek.man to produce a clean nroff document.  The lines of the
  242. # sed script correspond to the following actions:
  243. #    1. remove text between lines of form ``.if \nh \{'' or .ie \nh \{''
  244. #       and lines of form ``\}'' (these are the help-related additions)
  245. #    2. remove lines of form ``.if !\nh \{''  (these preface man text)
  246. #       Also remove ``.if !\nb \{'' which are for blurb.
  247. #    3. remove lines of form ``.el \{''  (start of the else sections of
  248. #       the .if's of step 1)
  249. #    4. remove lines of form ``\}'' (closures of step 3 lines)
  250. #    5. remove lines of form ``.ie \nh text'' (one-liner help text)
  251. #    6. change lines of form ``.el \nh text'' to ``text'' (these are
  252. #       one-liner man text)
  253. #    7. change lines of form ``.if !\nh text'' to ``text'' (ditto)
  254. ftnchek$(manext):    ftnchek.man average.f average.out correct.f
  255.     $(SOELIM) ftnchek.man | \
  256.     $(SED) -e '/^\.i[fe] \\nh \\{/,/^\\}$$/d' \
  257.         -e '/^\.if !\\n[bh] \\{/d' \
  258.         -e '/^\.el \\{/d' \
  259.         -e '/^\\}/d' \
  260.         -e '/^\.i[fe] \\nh /d' \
  261.         -e 's/^\.el *\(.*\)$$/\1/' \
  262.         -e 's/^\.if !\\nh *\(.*\)$$/\1/' \
  263.             > ftnchek$(manext)
  264.  
  265. # ftnchek.doc is ascii text form of documentation.  It should not matter
  266. # whether ftnchek.1 or ftnchek.man is used here.
  267. ftnchek.doc:    ftnchek.man
  268.     $(NROFF) -man ftnchek.man | $(COL) >ftnchek.doc
  269.  
  270. # ftnchek.ps is PostScript form of documentation.
  271. ftnchek.ps:    ftnchek$(manext)
  272.     $(TBL) <ftnchek$(manext) | $(EQN) | $(MANtoPS) >ftnchek.ps
  273.  
  274. # blurb.txt is an ascii file for informational mailings.
  275. blurb.txt:    ftnchek.man
  276.     $(NROFF) -man -rb1 ftnchek.man | $(COL) >blurb.txt
  277.  
  278. # ftnchek.hlp is a VMS HELP library source document:
  279. # create ftnchek.hlb with $ LIBR/CREATE/HELP FTNCHEK.HLB FTNCHEK.HLP
  280. # The leading and trailing newlines in ftnchek.hlp should be removed.
  281. ftnchek.hlp:    ftnchek.man
  282.     $(SED) -e '1d' ftnchek.man | \
  283.     $(NROFF) -man -rh1 | $(COL) | \
  284.     $(SED) -e 's/^-\([a-zA-Z][a-zA-Z]*\)/\/\1/' \
  285.         -e 's/\([^a-zA-Z]\)-\([a-zA-Z][a-zA-Z]*\)/\1\/\2/g' \
  286.     >ftnchek.hlp
  287.  
  288.  
  289. # Rebuild average.out when version changes.  (We don't put the
  290. # dependency on ftnchek to avoid building ftnchek just for docs.)
  291. average.out: ftnchek.h
  292.     $(FTNCHEK) -list -symtab average > average.out
  293.  
  294. # dcl2inc.doc is ascii text form of documentation.  It should not matter
  295. # whether dcl2inc.1 or dcl2inc.man is used here.
  296. dcl2inc.doc:    dcl2inc.man
  297.     $(NROFF) -man dcl2inc.man | $(COL) >dcl2inc.doc
  298.  
  299. dcl2inc.ps:    dcl2inc.man
  300.     $(TBL) <dcl2inc.man  | $(EQN) | $(MANtoPS) >dcl2inc.ps
  301.  
  302.  
  303. # Install program and documentation on system.  Obsolete fcl2vcg script
  304. # & doc is removed if present.
  305. install:    install-exe @INSTALL_MAN@
  306.  
  307. install-exe:    ftnchek$(EXE) dcl2inc$(CMD)
  308.     $(CP) ftnchek $(bindir)
  309.     -$(STRIP) $(bindir)/ftnchek$(EXE)
  310.     $(CHMOD) 755 $(bindir)/ftnchek$(EXE)
  311.     -$(MKDIR) $(libdir)
  312.     $(CP) dcl2inc.awk $(libdir)/dcl2inc.awk
  313.     $(CHMOD) 644 $(libdir)/dcl2inc.awk
  314.     $(CP) dcl2inc$(CMD) $(bindir)/dcl2inc$(CMD)
  315.     $(CHMOD) 755 $(bindir)/dcl2inc$(CMD)
  316.     -$(RM) $(bindir)/fcl2vcg
  317.  
  318. # Install man pages, taking care to remove old formatted ones, because
  319. # many man implentations fail to compare time stamps of raw and
  320. # formatted files, and will show out-of-date formatted files.
  321. install-man: ftnchek$(manext)
  322.     $(CP) dcl2inc.man $(mandir)/man1/dcl2inc$(manext)
  323.     -$(RM) $(mandir)/cat1/dcl2inc$(manext)
  324.     $(CHMOD) 644 $(mandir)/man1/dcl2inc$(manext)
  325.     $(CP) ftnchek$(manext) $(mandir)/man1/ftnchek$(manext)
  326.     -$(RM) $(mandir)/cat1/ftnchek$(manext)
  327.     $(CHMOD) 644 $(mandir)/man1/ftnchek$(manext)
  328.     -$(RM) $(mandir)/man1/fcl2vcg$(manext)
  329.     -$(RM) $(mandir)/cat1/fcl2vcg$(manext)
  330.  
  331. # IRIX uses pre-formatted, packed man pages and nroff is not bundled with it.
  332. # If this IRIX does not have nroff, then use the flat ascii files as
  333. # second best.
  334. install-man-sgi:
  335.     if @HAS_NROFF@ ; then \
  336.       $(NROFF) -man dcl2inc.man > dcl2inc.cat ; \
  337.     else \
  338.           cp dcl2inc.doc dcl2inc.cat ; \
  339.     fi ; \
  340.     if pack dcl2inc.cat ; \
  341.     then \
  342.         $(MV) dcl2inc.cat.z $(mandir)/dcl2inc.z ; \
  343.         $(CHMOD) 644 $(mandir)/dcl2inc.z ; \
  344.     fi
  345.     if @HAS_NROFF@ ; then \
  346.       $(NROFF) -man ftnchek.man > ftnchek.cat ; \
  347.     else \
  348.           cp ftnchek.doc ftnchek.cat ; \
  349.     fi ; \
  350.     if pack ftnchek.cat ; \
  351.     then \
  352.         $(MV) ftnchek.cat.z $(mandir)/ftnchek.z ; \
  353.         $(CHMOD) 644 $(mandir)/ftnchek.z ; \
  354.     fi
  355.     -$(RM) $(mandir)/fcl2vcg.z
  356.  
  357. # Remove everything that the install target installed.
  358. uninstall:
  359.     -$(RM) $(bindir)/dcl2inc$(CMD)
  360.     -$(RM) $(bindir)/ftnchek$(CMD)
  361.     -$(RM) $(libdir)/dcl2inc.awk
  362.     -$(RM) $(mandir)/cat1/dcl2inc$(manext)
  363.     -$(RM) $(mandir)/cat1/ftnchek$(manext)
  364.     -$(RM) $(mandir)/ftnchek.z    # SGI
  365.     -$(RM) $(mandir)/man1/dcl2inc$(manext)
  366.     -$(RM) $(mandir)/man1/ftnchek$(manext)
  367.     -$(RMDIR) $(libdir)
  368.  
  369. # WARNING: do NOT execute this target, unless you have nroff/troff or groff
  370. # to recreate the formatted documentation files.
  371. spotless:    distclean
  372.     $(RM) blurb.txt
  373.     $(RM) dcl2inc.doc
  374.     $(RM) dcl2inc.ps
  375.     $(RM) ftnchek.doc
  376.     $(RM) ftnchek.hlp
  377.     $(RM) ftnchek.ps
  378.  
  379. # ex and vi editor tags file
  380. tags:    $(SRCS)
  381.     $(CTAGS) $(CTAGSFLAGS) *.[ch]
  382.  
  383. # emacs editor tags file
  384. TAGS:    $(SRCS)
  385.     $(ETAGS) *.[ch]
  386.  
  387. #=======================================================================
  388. # Object file dependencies on include files
  389.  
  390. ftnchek.o:    ftnchek.h
  391.  
  392. exprtype.o:    ftnchek.h symtab.h tokdefs.h
  393.  
  394. forlex.o:    ftnchek.h keywords.h symtab.h tokdefs.h
  395.  
  396. fortran.o:    ftnchek.h symtab.h fortran.c
  397.  
  398. pgsymtab.o:    ftnchek.h symtab.h
  399.  
  400. plsymtab.o:    ftnchek.h symtab.h
  401.  
  402. project.o:    ftnchek.h symtab.h
  403.  
  404. symtab.o:    ftnchek.h iokeywds.h intrins.h symtab.h tokdefs.h
  405.  
  406.  
  407. #=======================================================================
  408. # The makefile.generic target is for users on deficient Unix systems or using
  409. # GNU software on non-Unix platforms.  It tries to put reasonably generic
  410. # values in for all the things that the configure script is supposed to
  411. # handle.  Pathnames are removed since these may vary wildly.
  412. # The first sed substitution is to protect the patterns from configure.
  413. # It is not protected from itself, so this target will look (and be)
  414. # wrong in makefile.generic.
  415. makefile.generic: Makefile.in configure.generic
  416.     ./configure.generic
  417.  
  418. #=======================================================================
  419. # Making the distribution tar file.  Dirname is name of current
  420. # directory.  Makefiles are not distributed because they are supposed
  421. # to be created by local configure.  Files to archive are explicitly
  422. # named so that detritus from development will not be accidentally
  423. # included.  However, test files are not listed separately so one
  424. # should make clean in $(TESTDIR)/ first.
  425. #
  426. # This target assumes GNU tar for the --exclude option.  If you don't
  427. # have it, remove test/Makefile manually and use ``make tar TAR_EXCLUDE=''
  428.  
  429. TAR_EXCLUDE    = --exclude $$dirname/$(TESTDIR)/Makefile
  430.  
  431. tar:
  432.     dirname=`$(PWD_PROG)|$(SED) 's%.*/%%'` ; cd .. ; \
  433.       $(TAR) -cf $$dirname.tar $(TAR_EXCLUDE) \
  434.       `echo " "$(DISTFILES) | sed "s% % $$dirname/%g"`
  435.  
  436. # Targets that should be freshened prior to making tar (so I don't put
  437. # stale ones into the distribution).
  438. pretar:    docs makefile.generic distclean
  439.