home *** CD-ROM | disk | FTP | other *** search
/ Power-Programmierung / CD2.mdf / c / tools / make / make_pd / readme < prev    next >
Text File  |  1987-02-15  |  5KB  |  123 lines

  1. Following is a repost of the public domain 'make' that I posted
  2. to net.sources a couple of months ago.  I have fixed a few bugs, and
  3. added some more features, and the resulting changes amounted to
  4. about as much text as the whole program (hence the repost).
  5.  
  6. For those that missed the net.sources posting, this is a public domain
  7. re-implementation of the UNIX make program.  There is no manual included;
  8. for documentation, refer to a UNIX manual, or the source.
  9.  
  10. Here is a list of the changes made:
  11.  
  12. i)      If '-' (ignore) or '@' (silent) where used at the start
  13.         of a command, their effect was not turned off for the following
  14.         commands.
  15. ii)     A special target (.SUFFIXES, .PRECIOUS) or a rule (.c.o, .a.o),
  16.         if first in the file would be taken as the default target.
  17.         This resulted in error messages like "Don't know how to
  18.         make .c", because things like .SUFFIXES were being made.
  19.         This was further complicated by ---
  20. iii)    Special target lines with no dependents (ie. .SUFFIXES:\n)
  21.         were not clearing out the existing dependents like
  22.         they should.
  23. iv)     Default rules could not be redefined because of the error
  24.         checking for commands being defined twice.  Now you are
  25.         allowed to define a target beinging with '.', having
  26.         no dependents with commands.
  27. v)      The -q option didn't do the time comparison correctly,
  28.         or clear the variable used to keep track of this.  Thus
  29.         it didn't work very well.
  30. vi)     The syntax ${..} for macro's supported by UNIX make was
  31.         not supported.
  32. vii)    There wuz a couple of spelling errors.
  33. viii)   When make checked for implicit rules on targets without
  34.         a suffix, there were problems.  (Note: The ~ feature of
  35.         UNIX make wasn't and still isn't supported)
  36. ix)     The -n option did not print @ lines like it was supposed to.
  37. x)      :: added.  (See UNIX manual)
  38. xi)     $? added.  (see UNIX manual)
  39.  
  40. ===========================
  41.  
  42. This 'make' is based on a usenet version that was posted to mod.sources
  43. in December of 1986.  I have added some #defines to enable compilation
  44. with Microsoft C, version 4.0, under MS-DOS.  Within the bounds of
  45. legality, this is as close as one can get to REAL unix make on a DOS
  46. machine.  If anyone ever again spends money for a DOS make program they
  47. either:  1) don't know about this version, or 2) are crazy.  Let's distribute
  48. this widely to take care of the first case.  As to the second case, that
  49. probably doesn't matter- most of them are using MacIntoshes!
  50.  
  51.         - Paul Homchick
  52.           Sysop, GEnie IBM RoundTable
  53.           January 11, 1987
  54.  
  55. (For information on how to use make, see any text on unix programming,
  56. or, any unix documentation.  While this source code is P.D., the AT&T
  57. documentation is not.)
  58.  
  59. These are the default rules for this implementation:
  60.  
  61.         macro "CC" =  "cc"
  62.         macro "CFLAGS" = "-O"
  63.         rule "c.obj"
  64.         command "$(CC) $(CFLAGS) -c $<"
  65.  
  66.         macro "AS" = "masm"
  67.         rule ".asm.obj"
  68.         command "$(AS) $<;"
  69.  
  70.         suffixes:
  71.         ".obj"
  72.         ".asm"
  73.         ".c"
  74.         ".SUFFIXES"
  75.  
  76. ===========================
  77.  
  78. Further changes for MS-DOS, made by Rahul Dhesi.  All changes will
  79. compile with Microsoft C version 3.0, but are compiler-specific and
  80. will probably not work with any other compiler (with the possible
  81. exception of Microsoft C version 4.0).
  82.  
  83. 1987/02/01
  84. (a)  If switchchar had been set to other than "/", using Make made the 
  85. system go haywire.  Included my own system() function that recognizes 
  86. switchar.  File affected:  new file `msdos.c'.
  87.  
  88. (b)  System() function always invoked MS-DOS's command interpreter.
  89. As a result, the return code from the executed command was lost, since
  90. MS-DOS's command interpreter always returns a zero exit code.  Fixed
  91. as follows:  My system() function first tries to execute the command 
  92. directly by creating a process with the help of the spawn() library 
  93. function of Microsoft C.  If this fails, only then is the command
  94. interpreter invoked.  This means that all commands other than those
  95. executed by the MS-DOS command interpreter will return a proper exit
  96. code.  File affected:  `msdos.c'.
  97.  
  98. This does have the side effect that if there is a program called 
  99. COPY.COM or COPY.EXE, that will be executed in preference to the
  100. command interpreter's command COPY.  This is not necessarily a bad
  101. thing.
  102.  
  103. (c)  User interrupts were being ignored.  Added some signal() calls
  104. to trap any user interrupt and increment a flag.  Also added kbhit()
  105. function call to check console status after each command is executed and 
  106. (with any luck) recognize any user interrupt.  User interrupt
  107. handling is now somewhat improved.  File affected:  `msdos.c'.
  108.  
  109. (d)  Added "$*" macro which stands for target minus suffix.  File
  110. affected:  `make.c'.
  111.  
  112. Remaining known bug:  A command-line macro definition, as in
  113.  
  114.    make "switch = -o" xyz
  115.  
  116. should override a macro definition of `switch' in the makefile.  It
  117. does not.  One way of fixing this would be to change the structure of
  118. macro definitions to indicate whether or not the current macro
  119. definition is a command-line definition.  Then a command-line
  120. definition would never be replaced by one within the makefile.  
  121.  
  122.                                   -- R.D.  1987/02/01
  123.