home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume19 / dmake / part12 < prev    next >
Encoding:
Text File  |  1991-05-11  |  40.2 KB  |  1,100 lines

  1. Newsgroups: comp.sources.misc
  2. From: Dennis Vadura <dvadura@watdragon.waterloo.edu>
  3. Subject:  v19i033:  dmake - dmake version 3.7, Part12/37
  4. Message-ID: <1991May10.185918.22778@sparky.IMD.Sterling.COM>
  5. Date: Fri, 10 May 1991 18:59:18 GMT
  6. Approved: kent@sparky.imd.sterling.com
  7.  
  8. Submitted-by: Dennis Vadura <dvadura@watdragon.waterloo.edu>
  9. Posting-number: Volume 19, Issue 33
  10. Archive-name: dmake/part12
  11. Supersedes: dmake-3.6: Volume 15, Issue 52-77
  12.  
  13. ---- Cut Here and feed the following to sh ----
  14. #!/bin/sh
  15. # this is dmake.shar.12 (part 12 of a multipart archive)
  16. # do not concatenate these parts, unpack them in order with /bin/sh
  17. # file dmake/makefile.mk continued
  18. #
  19. if test ! -r _shar_seq_.tmp; then
  20.     echo 'Please unpack part 1 first!'
  21.     exit 1
  22. fi
  23. (read Scheck
  24.  if test "$Scheck" != 12; then
  25.     echo Please unpack part "$Scheck" next!
  26.     exit 1
  27.  else
  28.     exit 0
  29.  fi
  30. ) < _shar_seq_.tmp || exit 1
  31. if test -f _shar_wnt_.tmp; then
  32. sed 's/^X//' << 'SHAR_EOF' >> 'dmake/makefile.mk' &&
  33. #    OSRELEASE     - optionally gives the particular release of the OS above.
  34. #    OSENVIRONMENT - optionally gives the environment under which the above
  35. #            OS is in use.
  36. #
  37. # For valid values for the above macros consult the readme/* files or type
  38. # 'make' by itself to get a summary of what is available.
  39. X
  40. # First target in the makefile, do this so that targets declared in the
  41. # included files are never marked as being the first *default* target.
  42. first : all ;
  43. X
  44. #Enable keeping of state for future compiles
  45. .KEEP_STATE := _state.mk
  46. X
  47. # Pull in the configuration macros, from the environment.  OS is required,
  48. # OSRELEASE, and OSENVIRONMENT are optional.
  49. .IF $(OS) == $(NULL)
  50. X   .IMPORT : OS
  51. .END
  52. .IMPORT .IGNORE : OSRELEASE OSENVIRONMENT TMPDIR
  53. X
  54. # Define $(PUBLIC)
  55. _osenv  := $(OSENVIRONMENT)$(DIRSEPSTR)
  56. _osre   := $(OSRELEASE)$(DIRSEPSTR)$(!null,$(OSENVIRONMENT) $(_osenv))
  57. ENVDIR   = $(OS)$(DIRSEPSTR)$(!null,$(OSRELEASE) $(_osre))
  58. PUBLIC   = $(ENVDIR)public.h
  59. STARTUP := startup.mk
  60. X
  61. # Define the source files
  62. SRC =\
  63. X    infer.c make.c stat.c expand.c dmstring.c hash.c dag.c dmake.c\
  64. X    path.c imacs.c sysintf.c parse.c getinp.c quit.c state.c\
  65. X    basename.c dmdump.c macparse.c rulparse.c percent.c function.c
  66. X
  67. # Common Include files.
  68. HDR = dmake.h extern.h struct.h vextern.h patchlvl.h version.h
  69. X
  70. # Define the TARGET we are making, and where the OBJECT files go.
  71. OBJDIR := objects
  72. TARGET  = dmake$E
  73. CFLAGS += -I.
  74. X
  75. # Meta rule for making .o's from .c's (give our own so we can move object
  76. # to objects directory in a portable, compiler independent way)
  77. # Define it before the .INCLUDE so that different OS combinations can redefine
  78. # it.
  79. %$O : %.c
  80. X    %$(CC) -c $(CFLAGS) $<
  81. X    mv $(@:f) $(OBJDIR)
  82. X
  83. # Pull in the proper configuration files, based on the value of OS.
  84. .INCLUDE : $(OS)/config.mk
  85. .INCLUDE : dbug/dbug.mk
  86. X
  87. # Set the .SOURCE targets so that we look for things in the right place.
  88. .SOURCE.c :^ .NULL
  89. .SOURCE.h :^ .NULL
  90. .SOURCE$O :^ $(OBJDIR)
  91. .PRECIOUS : $(HDR)
  92. X
  93. # Must come after the above INCLUDE so that it gets ALL objects.
  94. OBJECTS    := {$(ASRC:b) $(SRC:b)}$O
  95. X
  96. # The main target, make sure the objects directory exists first.
  97. # LDARGS is defined in config.mk file of each OS/OSRELEASE combination.
  98. all : $(TARGET) $(STARTUP);
  99. $(TARGET)  : $(OBJDIR)
  100. $(TARGET)  : $(OBJECTS);$(LD) $(LDARGS)
  101. $(STARTUP) : $(ENVDIR)$(STARTUP); +$(eq,$(SHELL),$(COMSPEC) copy cp) $< $@
  102. X
  103. # how to make public.h
  104. public .PHONY : $(PUBLIC);
  105. $(PUBLIC) .SHELL .NOSTATE: $(SRC); genpub -n DMAKE $< >$@
  106. X
  107. # Other obvious targets...
  108. $(OBJDIR):;+-$(eq,$(SHELL),$(COMSPEC) md mkdir) $@
  109. X
  110. # remaining dependencies should be automatically generated
  111. sysintf$O  : $(OS)/sysintf.h
  112. ruletab$O  : $(OS)/startup.h  #khc 01NOV90 - dependency was missing
  113. $(OBJECTS) : $(HDR)
  114. X
  115. clean:;+- $(RM) -rf dmake$E dbdmake$E objects* $(STARTUP)
  116. X
  117. # Rules for making the manual pages.
  118. man .SETDIR=man : dmake.nc ;
  119. dmake.nc : dmake.p ; scriptfix < $< > $@
  120. dmake.p  : dmake.tf; typeset -man -Tdumb $< > $@
  121. X
  122. #--------------------------------------------------------------------------
  123. # Make the various archives for shipping the thing around.
  124. #
  125. archives : zoo tar shar;
  126. X
  127. zoo  .PHONY : dmake.zoo ;
  128. shar .PHONY : dmake.shar;
  129. tar  .PHONY : dmake.tar;
  130. X
  131. dmake.zoo  : dir-copy
  132. [
  133. X    find dmake -type f -print | zoo aI $@
  134. X    $(RM) -rf src-list dmake
  135. ]
  136. X
  137. dmake.shar : dir-copy
  138. [
  139. X    find dmake -type f -print >src-list
  140. X    xshar -vc -o$@ -L40 `cat src-list`
  141. X    $(RM) -rf src-list dmake
  142. ]
  143. X
  144. dmake.tar : dir-copy
  145. [
  146. X    tar cf $@ dmake
  147. X    $(RM) -rf src-list dmake
  148. ]
  149. X
  150. dir-copy .PHONY : src-list
  151. [
  152. X    echo 'tmp.tar .SILENT :$$(ALLSRC) ;tar -cf tmp.tar $$(ALLSRC)' >> $<
  153. X    $(MAKECMD) -f $< tmp.tar
  154. X    mkdir dmake
  155. X    cd dmake
  156. X    tar xf ../tmp.tar; chmod -R u+rw .
  157. X    cd ..
  158. X    /bin/rm -f tmp.tar
  159. ]
  160. X
  161. src-list : clean man
  162. X    echo 'ALLSRC = \' >$@
  163. X    find . -type f -print |\
  164. X    sed -e 's/RCS\///' -e 's/,v//' -e 's/$$/\\/' -e 's/^\.\// /'|\
  165. X    sort -u |\
  166. X    grep -v tst | grep -v $@ | grep -v LICENSE | grep -v '*state*\.mk' |\
  167. X    grep -v '\.zoo' | grep -v '\.tar'| grep -v '\.shar' >> $@
  168. X    echo ' LICENSE' >> $@
  169. X
  170. #--------------------------------------------------------------------------
  171. # This section can be used to make the necessary script files so that dmake
  172. # can be bootstrapped.
  173. #
  174. #    dmake scripts    -- makes all the script files at once.
  175. #
  176. SH_n = $(@:s/swp-/-/:s,-,/,:s/scripts/${SCRIPTFILE}/)
  177. MS_n = MAKESTARTUP=$(@:s/swp-/-/:s,-,/,:s/scripts/startup.mk/)
  178. SH = $(SH_n:s/c40d/cd/:s/c50d/cd/:s/c51d/cd/:s/c60d/cd/)
  179. MS = $(MS_n:s/c40d/cd/:s/c50d/cd/:s/c51d/cd/:s/c60d/cd/)
  180. FIX-SH = $(SH:s,fix/,,)
  181. X
  182. scripts: unix-scripts atari-tos-scripts msdos-scripts os2-scripts
  183. X
  184. # To add a new environment for UNIX, simply create the appropriate entry
  185. # in the style below for the macro which contains the OS, OSRELEASE and
  186. # OSENVIRONMENT flags.  Then add the entry as a recipe line for the target
  187. # unix-scripts.
  188. #
  189. unix-bsd43-scripts-flags   = OS=unix OSRELEASE=bsd43  OSENVIRONMENT=
  190. unix-sysvr4-scripts-flags  = OS=unix OSRELEASE=sysvr4 OSENVIRONMENT=
  191. unix-sysvr3-scripts-flags  = OS=unix OSRELEASE=sysvr3 OSENVIRONMENT=
  192. unix-sysvr1-scripts-flags  = OS=unix OSRELEASE=sysvr1 OSENVIRONMENT=
  193. unix-386ix-scripts-flags   = OS=unix OSRELEASE=386ix  OSENVIRONMENT=
  194. unix-bsd43-uw-scripts-flags= OS=unix OSRELEASE=bsd43  OSENVIRONMENT=uw
  195. unix-bsd43-vf-scripts-flags= OS=unix OSRELEASE=bsd43  OSENVIRONMENT=vf
  196. tos--scripts-flags         = OS=tos  OSRELEASE=       OSENVIRONMENT=
  197. X
  198. unix-scripts .SWAP : clean
  199. X    $(MAKE) SCRIPTFILE=make.sh unix-bsd43-scripts
  200. X    $(MAKE) SCRIPTFILE=make.sh unix-bsd43-uw-scripts
  201. X    $(MAKE) SCRIPTFILE=make.sh unix-bsd43-vf-scripts
  202. X    $(MAKE) SCRIPTFILE=make.sh unix-sysvr4-scripts
  203. X    $(MAKE) SCRIPTFILE=make.sh unix-sysvr3-scripts
  204. X    $(MAKE) SCRIPTFILE=make.sh unix-sysvr1-scripts
  205. X    $(MAKE) SCRIPTFILE=make.sh unix-386ix-scripts
  206. X
  207. unix-%-scripts .SWAP :
  208. X    $(MAKECMD) -s $($@-flags) .KEEP_STATE:= public
  209. X    $(MAKECMD) -ns .KEEP_STATE:= $(MS) $($@-flags) >$(SH)
  210. X
  211. tos-%-scripts  .SWAP :
  212. X    $(MAKECMD) -s $($@-flags) .KEEP_STATE:= public
  213. X    $(MAKECMD) -ns .KEEP_STATE:= $(MS) $($@-flags) >$(SH)
  214. X
  215. atari-tos-scripts .SWAP : clean
  216. X    $(MAKE) SCRIPTFILE=make.sh tos--scripts
  217. X
  218. # We make the standard dos scripts here, but we have to go and fix up the
  219. # mkXX.bat file since it contains names of temporary files for the response
  220. # files required by the linker.  We need to also construct the response file
  221. # contents.  These two functions are performed by the fix-msdos-%-scripts
  222. # meta-target.
  223. #
  224. # To add a new DOS environment just do what is described for adding a new
  225. # unix environment, and then make certain that the fix-msdos-%-scripts target
  226. # performs the correct function for the new environment.
  227. msdos-cf = OS=msdos OSENVIRONMENT=
  228. msdos-tccdos-scripts-flags = $(msdos-cf) OSRELEASE=tccdos SWAP=n
  229. msdos-tccdosswp-scripts-flags = $(msdos-cf) OSRELEASE=tccdos
  230. msdos-bccdos-scripts-flags = $(msdos-cf) OSRELEASE=bccdos SWAP=n
  231. msdos-bccdosswp-scripts-flags = $(msdos-cf) OSRELEASE=bccdos
  232. msdos-msc40dos-scripts-flags= $(msdos-cf) OSRELEASE=mscdos SWAP=n MSC_VER=4.0
  233. msdos-msc40dosswp-scripts-flags = $(msdos-cf) OSRELEASE=mscdos MSC_VER=4.0
  234. msdos-msc50dos-scripts-flags= $(msdos-cf) OSRELEASE=mscdos SWAP=n MSC_VER=5.0
  235. msdos-msc50dosswp-scripts-flags = $(msdos-cf) OSRELEASE=mscdos MSC_VER=5.0
  236. msdos-msc51dos-scripts-flags= $(msdos-cf) OSRELEASE=mscdos SWAP=n MSC_VER=5.1
  237. msdos-msc51dosswp-scripts-flags = $(msdos-cf) OSRELEASE=mscdos MSC_VER=5.1
  238. msdos-msc60dos-scripts-flags= $(msdos-cf) OSRELEASE=mscdos SWAP=n MSC_VER=6.0
  239. msdos-msc60dosswp-scripts-flags = $(msdos-cf) OSRELEASE=mscdos MSC_VER=6.0
  240. X
  241. msdos-scripts: clean msdos-tcc-scripts msdos-bcc-scripts msdos-msc-scripts;
  242. X
  243. msdos-tcc-scripts .SWAP :
  244. X    $(MAKE) SCRIPTFILE=mk.bat msdos-tccdos-scripts
  245. X    $(MAKE) SCRIPTFILE=mkswp.bat msdos-tccdosswp-scripts
  246. X
  247. msdos-bcc-scripts .SWAP :
  248. X    $(MAKE) SCRIPTFILE=mk.bat msdos-bccdos-scripts
  249. X    $(MAKE) SCRIPTFILE=mkswp.bat msdos-bccdosswp-scripts
  250. X
  251. msdos-msc-scripts .SWAP :! 40 50 51 60
  252. X    $(MAKE) SCRIPTFILE=mk$?.bat msdos-msc$?dos-scripts
  253. X    $(MAKE) SCRIPTFILE=mk$?swp.bat msdos-msc$?dosswp-scripts
  254. X
  255. msdos-%-scripts .SWAP .SILENT:
  256. X    $(MAKE) -s $($@-flags) .KEEP_STATE:= public
  257. X    $(MAKE) -ns SHELL=command.com COMSPEC=command.com .KEEP_STATE:= $(MS) $($@-flags) >$(SH)
  258. X    $(MAKE) -s $(MAKEMACROS) $(MS) $($@-flags) fix-msdos-$*-scripts
  259. X
  260. X
  261. # We make the standard OS/2 scripts here, but we have to go and fix up the
  262. # mkXX.bat file since it contains names of temporary files for the response
  263. # files required by the linker.  We need to also construct the response file
  264. # contents.  These two functions are performed by the fix-msdos-%-scripts
  265. # meta-target.
  266. #
  267. # To add a new OS/2 environment just do what is described for adding a new
  268. # unix environment, and then make certain that the fix-msdos-%-scripts target
  269. # performs the correct function for the new environment.
  270. os2-cf = OS=os2 OSENVIRONMENT=
  271. os2-msc40dos-scripts-flags= $(os2-cf) OSRELEASE=mscdos SWAP=n MSC_VER=4.0
  272. os2-msc50dos-scripts-flags= $(os2-cf) OSRELEASE=mscdos SWAP=n MSC_VER=5.0
  273. os2-msc51dos-scripts-flags= $(os2-cf) OSRELEASE=mscdos SWAP=n MSC_VER=5.1
  274. os2-msc60dos-scripts-flags= $(os2-cf) OSRELEASE=mscdos SWAP=n MSC_VER=6.0
  275. X
  276. os2-scripts: clean os2-msc-scripts;
  277. X
  278. os2-msc-scripts .SWAP :! 40 50 51 60
  279. X    $(MAKE) SCRIPTFILE=mk$?.cmd os2-msc$?dos-scripts
  280. X
  281. os2-%-scripts .SWAP :
  282. X    $(MAKE) -s $($@-flags) .KEEP_STATE:= public
  283. X    $(MAKE) -ns .KEEP_STATE:= $(MS) $($@-flags) >$(SH)
  284. X    $(MAKE) -s $(MAKEMACROS) $(MS) $($@-flags) fix-os2-$*-scripts
  285. X
  286. # Signify NULL targets for the various MSC compiler versions.
  287. 40 50 51 60:;
  288. X
  289. # Go over the created script file and make sure all the '/' that are in
  290. # filenames are '\', and make sure the final link command line looks
  291. # reasonable.
  292. MAPOBJ = obj$(SWAP:s/y/swp/:s/n//).rsp
  293. MAPLIB = lib$(SWAP:s/y/swp/:s/n//).rsp
  294. OBJRSP = $(SH:s,fix/,,:s,${SCRIPTFILE},${MAPOBJ},)
  295. LIBRSP = $(SH:s,fix/,,:s,${SCRIPTFILE},${MAPLIB},)
  296. DOSOBJ = $(CSTARTUP) $(OBJDIR)/{$(OBJECTS)}
  297. fix-%-scripts:
  298. X    tail -r $(FIX-SH) >tmp-sh-r
  299. X    tail +2 tmp-sh-r | sed -e 's,/,\\,g' >tmp-out
  300. X    tail -r tmp-out >$(FIX-SH)
  301. X    head -1 tmp-sh-r |\
  302. X    sed -e 's,\\tmp\\mkA..[0-9]*,$(OBJRSP),'\
  303. X        -e 's,\\tmp\\mkB..[0-9]*,$(LIBRSP),' |\
  304. X    sed -e 's,$(OS)/,$(OS)\\,g'\
  305. X        -e 's,$(OS)/$(OSRELEASE)/,$(OS)\\$(OSRELEASE)\\,g'\
  306. X        -e 's,$(OS)\\$(OSRELEASE)/,$(OS)\\$(OSRELEASE)\\,g'\
  307. X        -e 's,$(OS)/$(OSRELEASE)\\,$(OS)\\$(OSRELEASE)\\,g' >>$(FIX-SH)
  308. X    rm -f tmp-sh-r tmp-out
  309. X    mv <+$(DOSOBJ:s,/,\\,:t"+\n")\n+> $(OBJRSP)
  310. X    mv <+$(LDLIBS:s,/,\\,:t"+\n")\n+> $(LIBRSP)
  311. SHAR_EOF
  312. chmod 0640 dmake/makefile.mk ||
  313. echo 'restore of dmake/makefile.mk failed'
  314. Wc_c="`wc -c < 'dmake/makefile.mk'`"
  315. test 10539 -eq "$Wc_c" ||
  316.     echo 'dmake/makefile.mk: original size 10539, current size' "$Wc_c"
  317. rm -f _shar_wnt_.tmp
  318. fi
  319. # ============= dmake/makefile ==============
  320. if test -f 'dmake/makefile' -a X"$1" != X"-c"; then
  321.     echo 'x - skipping dmake/makefile (File already exists)'
  322.     rm -f _shar_wnt_.tmp
  323. else
  324. > _shar_wnt_.tmp
  325. sed 's/^X//' << 'SHAR_EOF' > 'dmake/makefile' &&
  326. # Default makefile for the various versions of dmake that we
  327. # have available.  This is a bootstrap version and uses /bin/sh to
  328. # execute a script which compiles dmake.
  329. #
  330. # Note the DOS commands actually invoke command.com to run the .bat file
  331. # to make the script.
  332. X
  333. all:
  334. X    @echo "INDEX:  You must issue one of:"
  335. X    @echo "   make bsd43         - Generic BSD 4.3 System"
  336. X    @echo "   make bsd43uw       - Generic BSD 4.3 at U of Waterloo"
  337. X    @echo "   make bsd43vf       - Generic BSD 4.3 that needs vfprintf"
  338. X    @echo "   make sysvr4        - Generic SysV R4 UNIX System"
  339. X    @echo "   make sysvr3        - Generic SysV R3 UNIX System"
  340. X    @echo "   make sysvr1        - Generic SysV R1 UNIX System"
  341. X    @echo "   make dynix         - Sequent DYNIX System"
  342. X    @echo "   make ultrix        - Ultrix 3.0 System"
  343. X    @echo "   make mips          - Any MIPS System"
  344. X    @echo "   make 386ix         - 386/ix (SysV R3) System"
  345. X    @echo "   make xenix         - 386 Xenix System"
  346. X    @echo "   make aix           - IBM RS6000/AIX System"
  347. X    @echo "   make os2msc40      - OS/2 using MSC 4.0 compiler"
  348. X    @echo "   make os2msc50      - OS/2 using MSC 5.0 compiler"
  349. X    @echo "   make os2msc51      - OS/2 using MSC 5.1 compiler"
  350. X    @echo "   make os2msc60      - OS/2 using MSC 6.0 compiler"
  351. X    @echo "   make tos           - Atari-ST TOS using GCC as compiler"
  352. X    @echo "   make tcc           - DOS with Turbo C 2.0"
  353. X    @echo "   make bcc           - DOS with Borland C++ 2.0"
  354. X    @echo "   make tccswp        - swapping DOS version with Turbo C 2.0"
  355. X    @echo "   make bccswp        - swapping DOS version with Borland C++ 2.0"
  356. X    @echo "   make msc40         - DOS with MSC 4.0"
  357. X    @echo "   make msc50         - DOS with MSC 5.0"
  358. X    @echo "   make msc51         - DOS with MSC 5.1"
  359. X    @echo "   make msc60         - DOS with MSC 6.0"
  360. X    @echo "   make msc40swp      - swapping DOS version with MSC 4.0"
  361. X    @echo "   make msc50swp      - swapping DOS version with MSC 5.0"
  362. X    @echo "   make msc51swp      - swapping DOS version with MSC 5.1"
  363. X    @echo "   make msc60swp      - swapping DOS version with MSC 6.0"
  364. X
  365. bsd43uw :; /bin/sh -x < unix/bsd43/uw/make.sh
  366. bsd43vf dynix mips        :; /bin/sh -x < unix/bsd43/vf/make.sh
  367. sysvr1 sysvr3 sysvr4 bsd43 386ix :; /bin/sh -x < unix/$@/make.sh
  368. ultrix xenix aix: sysvr3;
  369. tos :; sh -x tos/make.sh
  370. X
  371. # Various OS/2 targets.
  372. OS2_VER = os2msc40 os2msc50 os2msc51 os2msc60
  373. $(OS2_VER) :; make.cmd $(@:s/os2//)
  374. X
  375. # DOS with some form of make and sh
  376. # Note if you do not have a 'make and/or sh' program under MSDOS then
  377. # typing 'make' in the dmake distribution directory will invoke the make.bat
  378. # batch file which will issue the appropriate instructions.
  379. DOS_VER = tcc    msc40    msc50    msc51    msc60 \
  380. X      tccswp msc40swp msc50swp msc51swp msc60swp \
  381. X      bcc \
  382. X      bccswp
  383. $(DOS_VER) :; make.bat $@
  384. SHAR_EOF
  385. chmod 0640 dmake/makefile ||
  386. echo 'restore of dmake/makefile failed'
  387. Wc_c="`wc -c < 'dmake/makefile'`"
  388. test 2763 -eq "$Wc_c" ||
  389.     echo 'dmake/makefile: original size 2763, current size' "$Wc_c"
  390. rm -f _shar_wnt_.tmp
  391. fi
  392. # ============= dmake/man/dmake.nc ==============
  393. if test ! -d 'dmake/man'; then
  394.     mkdir 'dmake/man'
  395. fi
  396. if test -f 'dmake/man/dmake.nc' -a X"$1" != X"-c"; then
  397.     echo 'x - skipping dmake/man/dmake.nc (File already exists)'
  398.     rm -f _shar_wnt_.tmp
  399. else
  400. > _shar_wnt_.tmp
  401. sed 's/^X//' << 'SHAR_EOF' > 'dmake/man/dmake.nc' &&
  402. X
  403. X
  404. X
  405. X
  406. DMAKE(p)             Unsupported Free Software            DMAKE(p)
  407. X
  408. X
  409. X
  410. NAME
  411. X     dmake - maintain program groups, or interdependent files
  412. X
  413. SYNOPSIS
  414. X     dmake [-AceEhiknpqrsStTuVx] [-v{dfimt}] [-P#] [-{f|C|K}
  415. X     file] [macro[*][+][:]=value ...] [target ...]
  416. X
  417. DESCRIPTION
  418. X     dmake executes commands found in an external file called a
  419. X     makefile to update one or more target names.  Each target
  420. X     may depend on zero or more prerequisite targets.  If any of
  421. X     the target's prerequisites is newer than the target or if
  422. X     the target itself does not exist, then dmake will attempt to
  423. X     make the target.
  424. X
  425. X     If no -f command line option is present then dmake searches
  426. X     for an existing makefile from the list of prerequisites
  427. X     specified for the special target .MAKEFILES (see the STARTUP
  428. X     section for more details).  If "-" is the name of the file
  429. X     specified to the -f flag then dmake uses standard input as
  430. X     the source of the makefile text.
  431. X
  432. X     Any macro definitions (arguments with embedded "=" signs)
  433. X     that appear on the command line are processed first and
  434. X     supersede definitions for macros of the same name found
  435. X     within the makefile.  In general it is impossible for defin-
  436. X     itions found inside the makefile to redefine a macro defined
  437. X     on the command line, see the MACROS section for an excep-
  438. X     tion.
  439. X
  440. X     If no target names are specified on the command line, then
  441. X     dmake uses the first non-special target found in the
  442. X     makefile as the default target.  See the SPECIAL TARGETS
  443. X     section for the list of special targets and their function.
  444. X     dmake is a re-implementation of the UNIX Make utility with
  445. X     significant enhancements.  Makefiles written for most previ-
  446. X     ous versions of Make will be handled correctly by dmake.
  447. X     Known differences between dmake and other versions of make
  448. X     are discussed in the COMPATIBILITY section found at the end
  449. X     of this document.
  450. X
  451. OPTIONS
  452. X     -A   Enable AUGMAKE special inference rule transformations
  453. X          (see the "PERCENT(%) RULES" section), these are set to
  454. X          off by default.
  455. X
  456. X     -c   Use non-standard comment stripping.  If you specify -c
  457. X          then dmake will treat any # character as a start of
  458. X          comment character wherever it may appear unless it is
  459. X          escaped by a \.
  460. X
  461. X
  462. X
  463. X
  464. X
  465. Version 3.70                    UW                              1
  466. X
  467. X
  468. X
  469. X
  470. DMAKE(p)             Unsupported Free Software            DMAKE(p)
  471. X
  472. X
  473. X
  474. X     -C [+]file
  475. X          This option writes to file a copy of standard output
  476. X          and standard error from any child processes and from
  477. X          the dmake process itself.  If you specify a + prior to
  478. X          the file name then the text is appended to the previous
  479. X          contents of file.  This option is active in the MSDOS
  480. X          implementation only and is ignored by non-MSDOS ver-
  481. X          sions of dmake.
  482. X
  483. X     -e   Read the environment and define all strings of the form
  484. X          'ENV-VAR=evalue' defined within as macros whose name is
  485. X          ENV-VAR, and whose value is 'evalue'.  The environment
  486. X          is processed prior to processing the user specified
  487. X          makefile thereby allowing definitions in the makefile
  488. X          to override definitions in the environment.
  489. X
  490. X     -E   Same as -e, except that the environment is processed
  491. X          after the user specified makefile has been processed
  492. X          (thus definitions in the environment override defini-
  493. X          tions in the makefile).  The -e and -E options are
  494. X          mutually exclusive.  If both are given the latter takes
  495. X          effect.
  496. X
  497. X     -f file
  498. X          Use file as the source for the makefile text.  Only one
  499. X          -f option is allowed.
  500. X
  501. X     -h   Print the command summary for dmake.
  502. X
  503. X     -i   Tells dmake to ignore errors, and continue making other
  504. X          targets.  This is equivalent to the .IGNORE attribute
  505. X          or macro.
  506. X
  507. X     -K file
  508. X          Turns on .KEEP_STATE state tracking and tells dmake to
  509. X          use file as the state file.
  510. X
  511. X     -k   Causes dmake to ignore errors caused by command execu-
  512. X          tion and to make all targets not depending on targets
  513. X          that could not be made. Ordinarily dmake stops after a
  514. X          command returns a non-zero status, specifying -k causes
  515. X          dmake to ignore the error and continue to make as much
  516. X          as possible.
  517. X
  518. X     -n   Causes dmake to print out what it would have executed,
  519. X          but does not actually execute the commands.  A special
  520. X          check is made for the string "$(MAKE)" inside a recipe
  521. X          line, if found, the line is expanded and invoked,
  522. X          thereby enabling recursive makes to give a full
  523. X          description of all that they will do.  The check for
  524. X          "$(MAKE)" is disabled inside group recipes.
  525. X
  526. X
  527. X
  528. X
  529. Version 3.70                    UW                              2
  530. X
  531. X
  532. X
  533. X
  534. DMAKE(p)             Unsupported Free Software            DMAKE(p)
  535. X
  536. X
  537. X
  538. X     -p   Print out a version of the digested makefile in human
  539. X          readable form.  (useful for debugging, but cannot be
  540. X          re-read by dmake)
  541. X
  542. X     -P#  On systems that support multi-processing cause dmake to
  543. X          use # concurrent child processes to make targets.  See
  544. X          the "MULTI PROCESSING" section for more information.
  545. X
  546. X     -q   Check and see if the target is up to date.  Exits with
  547. X          code 0 if up to date, 1 otherwise.
  548. X
  549. X     -r   Tells dmake not to read the initial startup makefile,
  550. X          see STARTUP section for more details.
  551. X
  552. X     -s   Tells dmake to do all its work silently and not echo
  553. X          the commands it is executing to stdout (also suppresses
  554. X          warnings).  This  is equivalent to the .SILENT attri-
  555. X          bute or macro.
  556. X
  557. X     -S   Force sequential execution of recipes on architectures
  558. X          which support concurrent makes.  For backward compati-
  559. X          bility with old makefiles that have nasty side-effect
  560. X          prerequisite dependencies.
  561. X
  562. X     -t   Causes dmake to touch the targets and bring them up to
  563. X          date without executing any commands.
  564. X
  565. X     -T   Tells dmake to not perform transitive closure on the
  566. X          inference graph.
  567. X
  568. X     -u   Force an unconditional update.  (ie. do everything that
  569. X          would be done if everything that a target depended on
  570. X          was out of date)
  571. X
  572. X     -v[dfimt]
  573. X          Verbose flag, when making targets print to stdout what
  574. X          we are going to make and what we think its time stamp
  575. X          is.  The optional flags [dfimt] can be used to restrict
  576. X          the information that is displayed.  In the absence of
  577. X          any optional flags all are assumed to be given (ie. -v
  578. X          is equivalent to -vdfimt).  The meanings of the
  579. X          optional flags are:
  580. X
  581. X          d    Notify of change directory operations only.
  582. X
  583. X          f    Notify of file I/O operations only.
  584. X
  585. X          i    Notify of inference algorithm operation only.
  586. X
  587. X          m    Notify of target update operations only.
  588. X
  589. X
  590. X
  591. X
  592. X
  593. Version 3.70                    UW                              3
  594. X
  595. X
  596. X
  597. X
  598. DMAKE(p)             Unsupported Free Software            DMAKE(p)
  599. X
  600. X
  601. X
  602. X          t    Keep any temporary files created; normally they
  603. X               are automatically deleted.
  604. X
  605. X     -V   Print the version of dmake, and values of builtin mac-
  606. X          ros.
  607. X
  608. X     -x   Upon processing the user makefile export all non-
  609. X          internally defined macros to the user's environment.
  610. X          This option together with the -e option allows SYSV
  611. X          AUGMAKE recursive makes to function as expected.
  612. X
  613. INDEX
  614. X     Here is a list of the sections that follow and a short
  615. X     description of each.  Perhaps you won't have to read the
  616. X     whole man page to find what you need.
  617. X
  618. X     STARTUP            Describes dmake initialization.
  619. X
  620. X     SYNTAX             Describes the syntax of makefile expres-
  621. X                        sions.
  622. X
  623. X     ATTRIBUTES         Describes the notion of attributes and
  624. X                        how they are used when making targets.
  625. X
  626. X     MACROS             Defining and expanding macros.
  627. X
  628. X     RULES AND TARGETS  How to define targets and their prere-
  629. X                        quisites.
  630. X
  631. X     RECIPES            How to tell dmake how to make a target.
  632. X
  633. X     TEXT DIVERSIONS    How to use text diversions in recipes and
  634. X                        macro expansions.
  635. X
  636. X     SPECIAL TARGETS    Some targets are special.
  637. X
  638. X     SPECIAL MACROS     Macros used by dmake to alter the pro-
  639. X                        cessing of the makefile, and those
  640. X                        defined by dmake for the user.
  641. X
  642. X     CONTROL MACROS     Itemized list of special control macros.
  643. X
  644. X     RUN-TIME MACROS    Discussion of special run-time macros
  645. X                        such as $@ and $<.
  646. X
  647. X     FUNCTION MACROS    GNU style function macros, only $(mktmp
  648. X                        ...) for now.
  649. X
  650. X     DYNAMIC PREREQUISITES
  651. X                        Processing of prerequisites which contain
  652. X                        macro expansions in their name.
  653. X
  654. X
  655. X
  656. X
  657. Version 3.70                    UW                              4
  658. X
  659. X
  660. X
  661. X
  662. DMAKE(p)             Unsupported Free Software            DMAKE(p)
  663. X
  664. X
  665. X
  666. X     BINDING TARGETS    The rules that dmake uses to bind a tar-
  667. X                        get to an existing file in the file sys-
  668. X                        tem.
  669. X
  670. X     PERCENT(%) RULES   Specification of recipes to be used by
  671. X                        the inference algorithm.
  672. X
  673. X     MAKING INFERENCES  The rules that dmake uses when inferring
  674. X                        how to make a target which has no expli-
  675. X                        cit recipe.  This and the previous sec-
  676. X                        tion are really a single section in the
  677. X                        text.
  678. X
  679. X     MAKING TARGETS     How dmake makes targets other than
  680. X                        libraries.
  681. X
  682. X     MAKING LIBRARIES   How dmake makes libraries.
  683. X
  684. X     KEEP STATE         A discussion of how .KEEP_STATE works.
  685. X
  686. X     MULTI PROCESSING   Discussion of dmake's parallel make
  687. X                        facilities for architectures that support
  688. X                        them.
  689. X
  690. X     CONDITIONALS       Conditional expressions which control the
  691. X                        processing of the makefile.
  692. X
  693. X     EXAMPLES           Some hopefully useful examples.
  694. X
  695. X     COMPATIBILITY      How dmake compares with previous versions
  696. X                        of make.
  697. X
  698. X     LIMITS             Limitations of dmake.
  699. X
  700. X     PORTABILITY        Comments on writing portable makefiles.
  701. X
  702. X     FILES              Files used by dmake.
  703. X
  704. X     SEE ALSO           Other related programs, and man pages.
  705. X
  706. X     AUTHOR             The guy responsible for this thing.
  707. X
  708. X     BUGS               Hope not.
  709. X
  710. STARTUP
  711. X     When dmake begins execution it first processes the command
  712. X     line and then processes an initial startup-makefile.  This
  713. X     is followed by an attempt to locate and process a user sup-
  714. X     plied makefile.  The startup file defines the default values
  715. X     of all required control macros and the set of default rules
  716. X     for making targets and inferences.  When searching for the
  717. X     startup makefile, dmake searches the following locations, in
  718. X
  719. X
  720. X
  721. Version 3.70                    UW                              5
  722. X
  723. X
  724. X
  725. X
  726. DMAKE(p)             Unsupported Free Software            DMAKE(p)
  727. X
  728. X
  729. X
  730. X     the order specified, until a startup file is located:
  731. X
  732. X          1.   The location given as the value of the macro MAK-
  733. X               ESTARTUP defined on the command line.
  734. X
  735. X          2.   The location given as the value of the environment
  736. X               variable MAKESTARTUP defined in the current
  737. X               environment.
  738. X
  739. X          3.   The location given as the value of the macro MAK-
  740. X               ESTARTUP defined internally within dmake.
  741. X
  742. X     The above search is disabled by specifying the -r option on
  743. X     the command line.  An error is issued if a startup makefile
  744. X     cannot be found and the -r option was not specified.  A user
  745. X     may substitute a custom startup file by defining the MAKES-
  746. X     TARTUP environment variable or by redefining the MAKESTARTUP
  747. X     macro on the command line.  To determine where dmake looks
  748. X     for the default startup file, check your environment or
  749. X     issue the command "dmake -V".
  750. X
  751. X     A similar search is performed to locate a default user
  752. X     makefile when no -f command line option is specified.  By
  753. X     default, the prerequisite list of the special target
  754. X     .MAKEFILES specifies the names of possible makefiles and the
  755. X     search order that dmake should use to determine if one
  756. X     exists.  A typical definition for this target is:
  757. X
  758. X          .MAKEFILES : makefile.mk Makefile makefile
  759. X
  760. X     dmake will first look for makefile.mk and then the others.
  761. X     If a prerequisite cannot be found dmake will try to make it
  762. X     before going on to the next prerequisite.  For example,
  763. X     makefile.mk can be checked out of an RCS file if the proper
  764. X     rules for doing so are defined in the startup file.
  765. X
  766. SYNTAX
  767. X     This section is a summary of the syntax of makefile state-
  768. X     ments.  The description is given in a style similar to BNF,
  769. X     where { } enclose items that may appear zero or more times,
  770. X     and [ ] enclose items that are optional.  Alternative pro-
  771. X     ductions for a left hand side are indicated by '->', and
  772. X     newlines are significant.  All symbols in bold type are text
  773. X     or names representing text supplied by the user.
  774. X
  775. X
  776. X
  777. X          Makefile -> { Statement }
  778. X
  779. X          Statement -> Macro-Definition
  780. X                    -> Conditional
  781. X                    -> Rule-Definition
  782. X
  783. X
  784. X
  785. Version 3.70                    UW                              6
  786. X
  787. X
  788. X
  789. X
  790. DMAKE(p)             Unsupported Free Software            DMAKE(p)
  791. X
  792. X
  793. X
  794. X                    -> Attribute-Definition
  795. X
  796. X          Macro-Definition -> MACRO = LINE
  797. X                           -> MACRO *= LINE
  798. X                           -> MACRO := LINE
  799. X                           -> MACRO *:= LINE
  800. X                           -> MACRO += LINE
  801. X                           -> MACRO +:= LINE
  802. X
  803. X          Conditional ->  .IF expression
  804. X                             Makefile
  805. X                          [ .ELIF expression
  806. X                             Makefile ]
  807. X                          [ .ELSE
  808. X                             Makefile ]
  809. X                          .END
  810. X
  811. X          expression -> LINE
  812. X                     -> STRING == LINE
  813. X                     -> STRING != LINE
  814. X
  815. X
  816. X          Rule-Definition ->  target-definition
  817. X                                 [ recipe ]
  818. X
  819. X          target-definition -> targets [attrs] op { PREREQUISITE } [; rcp-line]
  820. X
  821. X          targets -> target { targets }
  822. X                  -> "target" { targets }
  823. X
  824. X          target -> special-target
  825. X                 -> TARGET
  826. X
  827. X          attrs -> attribute { attrs }
  828. X                -> "attribute" { attrs }
  829. X
  830. X          op -> : { modifier }
  831. X
  832. X          modifier -> :
  833. X                   -> ^
  834. X                   -> !
  835. X                   -> -
  836. X
  837. X          recipe -> { TAB rcp-line }
  838. X                 -> [@][%][-] [
  839. X                       { LINE }
  840. X                    ]
  841. X
  842. X          rcp-line -> [@][%][-][+] LINE
  843. X
  844. X
  845. X
  846. X
  847. X
  848. X
  849. Version 3.70                    UW                              7
  850. X
  851. X
  852. X
  853. X
  854. DMAKE(p)             Unsupported Free Software            DMAKE(p)
  855. X
  856. X
  857. X
  858. X          Attribute-Definition -> attrs : targets
  859. X
  860. X
  861. X          attribute -> .EPILOG
  862. X                    -> .IGNORE
  863. X                    -> .LIBRARY
  864. X                    -> .MKSARGS
  865. X                    -> .NOINFER
  866. X                    -> .NOSTATE
  867. X                    -> .PHONY
  868. X                    -> .PRECIOUS
  869. X                    -> .PROLOG
  870. X                    -> .SETDIR=path
  871. X                    -> .SILENT
  872. X                    -> .SEQUENTIAL
  873. X                    -> .SWAP
  874. X                    -> .USESHELL
  875. X                    -> .SYMBOL
  876. X                    -> .UPDATEALL
  877. X
  878. X          special-target -> .ERROR
  879. X                         -> .EXPORT
  880. X                         -> .GROUPEPILOG
  881. X                         -> .GROUPPROLOG
  882. X                         -> .IMPORT
  883. X                         -> .INCLUDE
  884. X                         -> .INCLUDEDIRS
  885. X                         -> .MAKEFILES
  886. X                         -> .REMOVE
  887. X                         -> .SOURCE
  888. X                         -> .SOURCE.suffix
  889. X                         -> .suffix1.suffix2
  890. X
  891. X
  892. X     Where, TAB represents a <tab> character, STRING represents
  893. X     an arbitrary sequence of characters, and LINE represents a
  894. X     possibly empty sequence of characters terminated by a non-
  895. X     escaped (not immediately preceded by a backslash '\') new-
  896. X     line character.  MACRO, PREREQUISITE, and TARGET each
  897. X     represent a string of characters not including space or tab
  898. X     which respectively form the name of a macro, prerequisite or
  899. X     target.  The name may itself be a macro expansion expres-
  900. X     sion.  A LINE can be continued over several physical lines
  901. X     by terminating it with a single backslash character.  Com-
  902. X     ments are initiated by the pound # character and extend to
  903. X     the end of line.  All comment text is discarded, a '#' may
  904. X     be placed into the makefile text by escaping it with '\'
  905. X     (ie. \# translates to # when it is parsed).  An exception to
  906. X     this occurs when a # is seen inside a recipe line that
  907. X     begins with a <tab> or is inside a group recipe.  If you
  908. X     specify the -c command line switch then this behavior is
  909. X     disabled and dmake will treat all # characters as start of
  910. X
  911. X
  912. X
  913. Version 3.70                    UW                              8
  914. X
  915. X
  916. X
  917. X
  918. DMAKE(p)             Unsupported Free Software            DMAKE(p)
  919. X
  920. X
  921. X
  922. X     comment indicators unless they are escaped by \.  A set of
  923. X     continued lines may be commented out by placing a single #
  924. X     at the start of the first line.  A continued line cannot
  925. X     span more than one makefile.
  926. X
  927. X     white space is defined to be any combination of <space>,
  928. X     <tab>, and the sequence \<nl> when \<nl> is used to ter-
  929. X     minate a LINE.  When processing macro definition lines, any
  930. X     amount of white space is allowed on either side of the macro
  931. X     operator (=, *=, :=, *:=, += or +:=), and white space is
  932. X     stripped from both before and after the macro value string.
  933. X     The sequence \<nl> is treated as white space during recipe
  934. X     expansion and is deleted from the final recipe string.  You
  935. X     must escape the \<nl> with another \ in order to get a \ at
  936. X     the end of a recipe line.  The \<nl> sequence is deleted
  937. X     from macro values when they are expanded.
  938. X
  939. X     When processing target definition lines, the recipe for a
  940. X     target must, in general, follow the first definition of the
  941. X     target (See the RULES AND TARGETS section for an exception),
  942. X     and the recipe may not span across multiple makefiles.  Any
  943. X     targets and prerequisites found on a target definition line
  944. X     are taken to be white space separated tokens.  The rule
  945. X     operator (op in SYNTAX section) is also considered to be a
  946. X     token but does not require white space to precede or follow
  947. X     it.  Since the rule operator begins with a `:', traditional
  948. X     versions of make do not allow the `:' character to form a
  949. X     valid target name.  dmake allows `:' to be present in
  950. X     target/prerequisite names as long as the entire
  951. X     target/prerequisite name is quoted.  For example:
  952. X
  953. X          a:fred : test
  954. X
  955. X     would be parsed as TARGET = a, PREREQUISITES={fred, :,
  956. X     test}, which is not what was intended.  To fix this you must
  957. X     write:
  958. X
  959. X          "a:fred" : test
  960. X
  961. X     Which will be parsed as expected.  See the EXAMPLES section
  962. X     for how to apply " quoting to a list of targets.
  963. X
  964. ATTRIBUTES
  965. X     dmake defines several target attributes.  Attributes may be
  966. X     assigned to a single target, a group of targets, or to all
  967. X     targets in the makefile.  Attributes are used to modify
  968. X     dmake actions during target update.  The recognized attri-
  969. X     butes are:
  970. X
  971. X
  972. X     .EPILOG     Insert shell epilog code when executing a group
  973. X                 recipe associated with any target having this
  974. X
  975. X
  976. X
  977. Version 3.70                    UW                              9
  978. X
  979. X
  980. X
  981. X
  982. DMAKE(p)             Unsupported Free Software            DMAKE(p)
  983. X
  984. X
  985. X
  986. X                 attribute set.
  987. X
  988. X     .IGNORE     Ignore an error when trying to make any target
  989. X                 with this attribute set.
  990. X
  991. X     .LIBRARY    Target is a library.
  992. X
  993. X     .MKSARGS    If running in an MSDOS environment then use MKS
  994. X                 extended argument passing conventions to pass
  995. X                 arguments to commands.  Non-MSDOS environments
  996. X                 ignore this attribute.
  997. X
  998. X     .NOINFER    Any target with this attribute set will not be
  999. X                 subjected to transitive closure if it is
  1000. X                 inferred as a prerequisite of a target whose
  1001. X                 recipe and prerequisites are being inferred.
  1002. X                 (i.e. the inference algorithm will not use any
  1003. X                 prerequisite with this attribute set, as a tar-
  1004. X                 get) If specified as '.NOINFER:' (ie. with no
  1005. X                 prerequisites or targets) then the effect is
  1006. X                 equivalent to specifying -T on the command line.
  1007. X
  1008. X     .NOSTATE    Any target with this attribute set will not have
  1009. X                 command line flag information stored in the
  1010. X                 state file if .KEEP_STATE has been enabled.
  1011. X
  1012. X     .PHONY      Any target with this attribute set will have its
  1013. X                 recipe executed each time the target is made
  1014. X                 even if a file matching the target name can be
  1015. X                 located.  Any targets that have a .PHONY attri-
  1016. X                 buted target as a prerequisite will be made each
  1017. X                 time the .PHONY attributed prerequisite is made.
  1018. X
  1019. X     .PRECIOUS   Do not remove associated target under any cir-
  1020. X                 cumstances.  Set by default for any targets
  1021. X                 whose corresponding files exist in the file sys-
  1022. X                 tem prior to the execution of dmake.
  1023. X
  1024. X     .PROLOG     Insert shell prolog code when executing a group
  1025. X                 recipe associated with any target having this
  1026. X                 attribute set.
  1027. X
  1028. X     .SEQUENTIAL Force a sequential make of the associated
  1029. X                 target's prerequisites.
  1030. X
  1031. X     .SETDIR     Change current working directory to specified
  1032. X                 directory when making the associated target.
  1033. X                 You must specify the directory at the time the
  1034. X                 attribute is specified.  To do this simply give
  1035. X                 .SETDIR=path as the attribute.  path is expanded
  1036. X                 and the result is used as the value of the
  1037. X                 directory to change to.  If path is surrounded
  1038. X
  1039. X
  1040. X
  1041. Version 3.70                    UW                             10
  1042. X
  1043. X
  1044. X
  1045. X
  1046. DMAKE(p)             Unsupported Free Software            DMAKE(p)
  1047. X
  1048. X
  1049. X
  1050. X                 by single quotes then path is not expanded, and
  1051. X                 is used literally as the directory name.  If the
  1052. X                 path contains any `:' characters then the entire
  1053. X                 attribute string must be quoted using ".  If a
  1054. X                 target having this attribute set also has the
  1055. X                 .IGNORE attribute set then if the change to the
  1056. X                 specified directory fails it will be ignored,
  1057. X                 and no error message will be issued.
  1058. X
  1059. X     .SILENT     Do not echo the recipe lines when making any
  1060. X                 target with this attribute set, and do not issue
  1061. X                 any warnings.
  1062. X
  1063. X     .SWAP       Under MSDOS when making a target with this
  1064. X                 attribute set swap the dmake executable to disk
  1065. X                 prior to executing the recipe line.  Also see
  1066. X                 the '%' recipe line flag defined in the RECIPES
  1067. X                 section.
  1068. X
  1069. X     .SYMBOL     Target is a library member and is an entry point
  1070. X                 into a module in the library.  This attribute is
  1071. X                 used only when searching a library for a target.
  1072. X                 Targets of the form lib((entry)) have this
  1073. X                 attribute set automatically.
  1074. X
  1075. X     .USESHELL   Force each recipe line of a target to be exe-
  1076. X                 cuted using a shell.  Specifying this attribute
  1077. X                 is equivalent to specifying the '+' character at
  1078. X                 the start of each line of a non-group recipe.
  1079. X
  1080. X     .UPDATEALL  Indicates that all the targets listed in this
  1081. X                 rule are updated by the execution of the accom-
  1082. X                 panying recipe.  A common example is the produc-
  1083. X                 tion of the y.tab.c and y.tab.h files by yacc
  1084. X                 when it is run on a grammar.  Specifying
  1085. X                 .UPDATEALL in such a rule prevents the running
  1086. X                 of yacc twice, once for the y.tab.c file and
  1087. SHAR_EOF
  1088. true || echo 'restore of dmake/man/dmake.nc failed'
  1089. fi
  1090. echo 'End of part 12, continue with part 13'
  1091. echo 13 > _shar_seq_.tmp
  1092. exit 0
  1093.  
  1094. exit 0 # Just in case...
  1095. -- 
  1096. Kent Landfield                   INTERNET: kent@sparky.IMD.Sterling.COM
  1097. Sterling Software, IMD           UUCP:     uunet!sparky!kent
  1098. Phone:    (402) 291-8300         FAX:      (402) 291-4362
  1099. Please send comp.sources.misc-related mail to kent@uunet.uu.net.
  1100.