home *** CD-ROM | disk | FTP | other *** search
/ Phoenix CD 2.0 / Phoenix_CD.cdr / 02a / pctmk.zip / PCTMK.DOC next >
Text File  |  1986-01-13  |  24KB  |  757 lines

  1.  
  2.  
  3.  
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.                                       PCTMK
  19.  
  20.                           A tool for program development
  21.  
  22.  
  23.  
  24.                                  G. W. Glasscock
  25.                             15617 S. E. Fairwood Blvd.
  26.                                 Renton, Wa.  98058
  27.                                   (206) 271-0638
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.         Version 1.0                                      January 1986
  52.  
  53.  
  54.         Copyright (c) 1986, G. W. Glasscock,  All rights reserved.
  55.  
  56.  
  57.                                     DISCLAIMER
  58.  
  59.         The author has taken due care in preparing this manual and
  60.         accompanying program to ensure it operates as described.
  61.         However, the author makes no expressed or implied warranty of any
  62.         kind with regard to this program or the documentation in the
  63.         manual.  Under no circumstances shall the author be liable for
  64.         incidental or consequential damages arising from the use or
  65.         inability to use this program.
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72.  
  73.  
  74.  
  75.  
  76.  
  77.  
  78.  
  79.  
  80.  
  81.  
  82.  
  83.  
  84.  
  85.  
  86.  
  87.  
  88.  
  89.  
  90.  
  91.  
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.                                                                  Page 1
  110.  
  111.         INTRODUCTION
  112.  
  113.         PCTMK is a tool for conveniently building a program or a set of
  114.         programs ensuring that the current version of a program reflects
  115.         all changes made to any of the source files comprising that
  116.         program.  It accomplishes this task efficiently by compiling only
  117.         those source files which have been modified.  A command entered
  118.         at the DOS command prompt is used to invoke PCTMK and provide the
  119.         name of the target file to be constructed.  The user supplies the
  120.         detailed knowledge needed to construct the target file through
  121.         rules which he places in a "makefile".
  122.  
  123.         If the modular approach to program development is used, it is
  124.         easy to forget which source files have been modified and which
  125.         source files make up a particular program.  Since the user of
  126.         PCTMK must create a "makefile", he has conveniently documented
  127.         the steps necessary to build his program.
  128.  
  129.         PCTMK provides programmers who use PCDOS [1] and MS-DOS [2] an
  130.         introduction to the capabilities of "make" which was developed by
  131.         S. I. Feldman of Bell Laboratories for the UNIX [3] operating
  132.         system.  PCTMK is intended for use with version 2.0 and later
  133.         releases of PCDOS or MS-DOS.  PCTMK will work with most compilers
  134.         and assemblers which run on these operating systems.
  135.  
  136.         Although PCTMK provides the basic capabilities needed for a
  137.         "make" program, it is missing several advanced features useful in
  138.         a complete "make" program.  PCMK, a superset of PCTMK, provides
  139.         these useful advanced features for only $21.00.
  140.  
  141.                 Wild card character expansion
  142.                 Full path name support
  143.                 User defined macros
  144.                 Access to DOS environment via macros
  145.                 Access to internally generated macros
  146.                 Built-in rules defined by the user
  147.                 Printed manual with examples (40 pages)
  148.  
  149.  
  150.  
  151.  
  152.  
  153.  
  154.  
  155.  
  156.  
  157.  
  158.  
  159.  
  160.         1. PCDOS is a Trademark of International Business Machines
  161.         2. MS-DOS is a Trademark of Microsoft Inc.
  162.         3. UNIX is a Trademark of Bell Laboratories
  163.                                                                 Page 2
  164.  
  165.         BASIC OPERATION
  166.  
  167.         The basic function of PCTMK is to produce a target file which is
  168.         current or up-to-date.  It accomplishes this by automatically
  169.         executing all commands necessary to produce the updated target
  170.         file.  A target file is defined as "current" if its date and time
  171.         are more recent than any file on which it depends.
  172.  
  173.         PCTMK determines what needs to be done by examining the "make-
  174.         file".  This "makefile" contains user supplied rules.  These
  175.         rules contain a list of files that a target depends upon and a
  176.         list of the commands necessary to create the target file.  The
  177.         date and time of a file's last modification is obtained from DOS.
  178.         This date and time must be accurate if PCTMK is to operate
  179.         correctly.
  180.  
  181.         As an illustration, suppose a program called "mypgm.exe" is built
  182.         from three assembly language files: "f1.asm", "f2.asm", and
  183.         "f3.asm".  Also, assume that a file of macro definitions
  184.         "mdefs.mac" is "included" in the assembly language files "f2.asm"
  185.         and "f3.asm".  Using only the basic capabilities of PCTMK, the
  186.         four rules shown below describe the "makefile" required to build
  187.         the program "mypgm.exe".
  188.  
  189.             mypgm.exe : f1.obj f2.obj f3.obj
  190.                     link f1.obj f2.obj f3.obj, mypgm.exe, NUL;
  191.  
  192.             f1.obj : f1.asm
  193.                     masm f1.asm;
  194.  
  195.             f2.obj : f2.asm mdefs.mac
  196.                     masm f2.asm;
  197.  
  198.             f3.obj : f3.asm mdefs.mac
  199.                     masm f3.asm;
  200.  
  201.  
  202.         The first rule states that "mypgm.exe" depends on "f1.obj",
  203.         "f2.obj", and "f3.obj".  The second line of this rule is the DOS
  204.         command or program to run if "mypgm.exe" is out of date with any
  205.         of the files on which it it depends.  The second rule states that
  206.         "f1.obj" depends upon "f1.asm" and provides a command to create
  207.         "f1.obj".  Likewise, the third rule states that "f2.obj" depends
  208.         on "f2.asm" and "mdefs.mac".  The second line of this rule is the
  209.         DOS command which will create an updated "f2.obj".  The fourth
  210.         rule is similar to the third rule.
  211.  
  212.         If these four rules are placed in a file named "MAKEFILE", the
  213.         command
  214.  
  215.             PCTMK
  216.  
  217.                                                                  Page 3
  218.  
  219.         is sufficient to cause "mypgm.exe" to be recreated after a change
  220.         had been made to any of the source files, "f1.asm", "f2.asm",
  221.         "f3.asm", or "mdef.mac".
  222.  
  223.         Let's assume that after running "mypgm", it is determined that a
  224.         modification to the file "f2.asm" is necessary to correct a
  225.         problem.  After making this modification, PCTMK is executed.
  226.         From the four rules in "MAKEFILE" and the date and times of the
  227.         target and dependency files, PCTMK discovers that "f2.asm" has
  228.         been modified and executes the command associated with rule 3.
  229.         The command associated with rule 1 will then be executed because
  230.         "f2.obj" is now out of date.  The commands associated with rules
  231.         2 or 4 are not executed because the targets in these rules are
  232.         current with their dependency files.
  233.  
  234.  
  235.  
  236.  
  237.  
  238.  
  239.  
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246.  
  247.  
  248.  
  249.  
  250.  
  251.  
  252.  
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.                                                                 Page 4
  272.  
  273.         MAKEFILE SYNTAX
  274.  
  275.         The overall syntax of a "makefile" is relatively simple.  It
  276.         contains lines of ASCII text by which the user can construct
  277.         rules.  A rule is an entry in the "makefile" which states depend-
  278.         ency condition(s).  It also defines actions to be taken should
  279.         that condition be met.  Blank lines are allowed between rules.
  280.  
  281.         The sharp "#" character is used to start a comment.  When a sharp
  282.         "#" is found, the line is effectively ended because the sharp and
  283.         all characters following the sharp up to the end-of-line are
  284.         ignored.  If it is necessary to use a sharp in a rule, it can be
  285.         "escaped"; the sequence "\#" is replaced by a sharp and does not
  286.         signify the start of a comment.
  287.  
  288.         Non-comment lines may be continued by placing a backslash "\"
  289.         character at the end of the line.  In this case, the backslash
  290.         followed by an end-of-line is ignored so that the first character
  291.         of the next line immediately follows the character which preceded
  292.         the backslash.
  293.  
  294.         To define a rule within the "makefile", use the following syntax:
  295.  
  296.         target : [dependent ... ] [; command]
  297.         [(tab) command]
  298.             ...
  299.  
  300.         Items inside brackets are optional and may be omitted.  The
  301.         appearance of three dots "..." means that the previous item may
  302.         be repeated.  Targets and dependents are strings of letters,
  303.         digits, and special characters delimited by white space.  White
  304.         space must both precede and follow the colon.  White space is
  305.         defined as one or more blanks or tab characters.  Targets and
  306.         dependents can appear in more than one rule.
  307.  
  308.         Because targets and dependents refer to DOS file names which may
  309.         or may not exist, you would be wise to restrict your use of
  310.         special characters to those which can be used in valid DOS file
  311.         names.
  312.  
  313.         A command is any string of characters terminating with an
  314.         unescaped sharp "#" or the end-of-line sequence.  Usually com-
  315.         mands appear on separate lines which begin with a tab character.
  316.         However, one command may be placed at the end of a target/
  317.         dependency line if it is preceded by a semicolon.  The commands
  318.         of a rule are executed in the order of appearance provided at
  319.         least one of the dependents is more recent than the target.
  320.  
  321.         The first string in a DOS command line identifies the file/
  322.         command to be executed.  Three types of files, ".COM", ".EXE",
  323.         and ".BAT", as well as commands which are internal to the DOS
  324.         command line processor, can be run under DOS.  PCTMK handles all
  325.                                                                  Page 5
  326.  
  327.         of these commands.  It is not necessary to provide the suffix of
  328.         the command to be run.  The syntax of the command should conform
  329.         to DOS conventions, but depends to a large extent upon the
  330.         command being executed.
  331.  
  332.         A comment may be placed at the end of a target or command line by
  333.         using the sharp "#" to signal the start of the comment.  Both
  334.         target lines and command lines that do not end with a comment may
  335.         be continued.
  336.  
  337.  
  338.  
  339.  
  340.  
  341.  
  342.  
  343.  
  344.  
  345.  
  346.  
  347.  
  348.  
  349.  
  350.  
  351.  
  352.  
  353.  
  354.  
  355.  
  356.  
  357.  
  358.  
  359.  
  360.  
  361.  
  362.  
  363.  
  364.  
  365.  
  366.  
  367.  
  368.  
  369.  
  370.  
  371.  
  372.  
  373.  
  374.  
  375.  
  376.  
  377.  
  378.  
  379.                                                                 Page 6
  380.  
  381.         PCTMK COMMAND
  382.  
  383.         pctmk [-f makefile] [-s] [-i] [-n] [names]
  384.  
  385.         Any or all of the command line parameters may be omitted.  The
  386.         sequence in which parameters are entered has no significance for
  387.         their meaning.  Command line parameters are of two types: options
  388.         and target names.  The case of the characters on the command line
  389.         is not significant.
  390.  
  391.         Options
  392.  
  393.         The four PCTMK options are:
  394.  
  395.             -f "makefile"  is the name of a file which contains the rules
  396.                 that you want PCTMK to process.  If this option is
  397.                 omitted, PCTMK uses the file "MAKEFILE" in the current
  398.                 directory.
  399.  
  400.             -s  specifies that PCTMK call the system's command processor
  401.                 "COMMAND.COM" to execute all commands.
  402.  
  403.             -i  requests that error codes returned by commands be
  404.                 ignored.  Normally, PCTMK aborts when a command it
  405.                 executes generates an error return.  When this option is
  406.                 present, it will continue processing.  This option is
  407.                 useful when working with commands that set the "exit"
  408.                 code incorrectly.
  409.  
  410.             -n  requests that PCTMK only print the commands that would be
  411.                 executed but not execute them.  This option allows you to
  412.                 see what commands PCTMK would issue without actually
  413.                 executing them.
  414.  
  415.         Target Names  [names]
  416.  
  417.         For each target name present on the command line, PCTMK attempts
  418.         to create an updated version of that target.  If no targets are
  419.         present on the command line, the first target found in the
  420.         "makefile" will be updated.
  421.  
  422.  
  423.  
  424.  
  425.  
  426.  
  427.  
  428.  
  429.  
  430.  
  431.  
  432.  
  433.                                                                  Page 7
  434.  
  435.         OPERATIONAL DETAILS
  436.  
  437.         The information provided in this section will help you understand
  438.         the operation of PCTMK so that you can better take advantage of
  439.         this tool.
  440.  
  441.         Command Execution
  442.  
  443.         PCTMK provides two options for executing or running commands.
  444.         Direct execution is the preferable method because PCTMK can
  445.         access the exit code of the DOS command it executes and halt when
  446.         that command (i.e. a compiler or assembler) detects errors.  Of
  447.         course, access to the exit code is useless unless it is set
  448.         accurately by the command being executed.
  449.  
  450.         You may provide the full path name for a file to be executed.  If
  451.         only the command name is given, PCTMK tries to locate a command
  452.         by first looking in the current directory, then in the
  453.         directories identified by the DOS environment variable, PATH.
  454.         The full path name is necessary to execute a command which is not
  455.         in the current directory or in a directory identified by the
  456.         environment PATH variable.
  457.  
  458.         Commands can also be executed by first calling the DOS command
  459.         line interpreter which will then execute the command.  There are
  460.         three reasons PCTMK uses this method for executing commands.
  461.         Since some commands are internal to the DOS command processor or
  462.         have special syntactical conventions, they must be executed by
  463.         the DOS command line processor.  Appendix A contains a list of
  464.         the commands PCTMK always executes via the DOS command line
  465.         processor.  PCTMK does not itself handle redirection of input,
  466.         redirection of output, or pipes.  If a command line contains any
  467.         of the characters "<", ">", or "|", that command line is executed
  468.         via the DOS command line processor.  Any command which has a
  469.         ".BAT" suffix is executed via the DOS command line processor.
  470.         The problem with executing commands via the DOS command processor
  471.         is that the exit code of the command is not available to PCTMK.
  472.  
  473.         PCTMK WILL CONTINUE NORMALLY WHEN A COMMAND EXECUTED BY THE DOS
  474.         COMMAND LINE INTERPRETER ABORTS BECAUSE PCTMK IS NOT INFORMED OF
  475.         THIS ABNORMAL CONDITION.
  476.  
  477.         By using the "-s" option, you can force PCTMK to call the DOS
  478.         command line processor to execute all commands.
  479.  
  480.         Size of Commands
  481.  
  482.         DOS restricts the parameter portion of a command line to 126
  483.         characters.  If the command is to be executed via the command
  484.         line processor, the complete command may not exceed 123
  485.         characters.  Several techniques have been developed to cope with
  486.         this limit.  Some of the DOS commands, (i.e.  copy and backup)
  487.                                                                 Page 8
  488.  
  489.         avoid this problem by expanding wild card characters as a part of
  490.         the command.  "LINK" allows parameters to be input from a file as
  491.         an alternative to the DOS command line.  For some commands,
  492.         simply running the command multiple times will avoid this limit.
  493.  
  494.         PCTMK helps cope with this situation by allowing one target to
  495.         appear in multiple rules.  For each rule the commands associated
  496.         with that rule are executed if the target is out of date with any
  497.         of the dependencies of that rule.
  498.  
  499.         Support of Path Names
  500.  
  501.         PCTMK allows all file names to include a full path qualifier.
  502.         However, some assemblers and compilers do not allow file names
  503.         which include a path.  This is universally true for compilers and
  504.         assemblers which were produced before DOS 2.0 was available.
  505.         Even the DOS 2.0 command processor has restrictions on the use of
  506.         file names which contain a path prefix.
  507.  
  508.         Lower Case vs Upper Case
  509.  
  510.         Where possible PCTMK maintains the distinction between upper and
  511.         lower case letters.  That is the string "abcd" is not identical
  512.         to the string "ABCD".  However, PCTMK must deal with DOS which
  513.         converts the lower case letters to upper case in file names.  As
  514.         a result, lower case letters in target names are converted to
  515.         uppercase.
  516.  
  517.  
  518.  
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.  
  531.  
  532.  
  533.  
  534.  
  535.  
  536.  
  537.  
  538.  
  539.  
  540.  
  541.                                                                  Page 9
  542.  
  543.         EXAMPLE OF USAGE
  544.  
  545.         The previous sections have described the basic operation of
  546.         PCTMK, the syntax of the "makefile", and the command line used to
  547.         invoke PCTMK.  This section presents an example using PCTMK and a
  548.         product from C Ware.  The "makefile" illustrated here uses an
  549.         assembler and a "C" compiler.  This "makefile" happens to be the
  550.         one used to develop PCTMK.
  551.  
  552.         #   Rule 1
  553.         pctmk.exe : pcmk.o parser.o builtin.o ffind.o fetenv.o
  554.                 bind pcmk.o parser.o builtin.o ffind.o fetenv.o a:exec.o \
  555.         -opctmk -p -s4000
  556.  
  557.         #   Rule 2
  558.         pcmk.o : pcmk.c defs.h
  559.                 c88 pcmk.c
  560.  
  561.         #   Rule 3
  562.         parser.o : parser.c defs.h
  563.                 c88.exe parser.c
  564.  
  565.         #   Rule 4
  566.         builtin.o : builtin.c  defs.h
  567.                 c88 builtin.c
  568.  
  569.         #   Rule 5
  570.         ffind.o : ffind.a
  571.                 asm88 ffind.a
  572.  
  573.         #   Rule 6
  574.         fetenv.o : fetenv.a
  575.                 asm88 fetenv.a
  576.  
  577.  
  578.         Rule 1 describes how to build "pctmk.exe".  Because this is the
  579.         first target in the "makefile", it is chosen whenever a target is
  580.         omitted from the PCTMK command line.  The dependency part of this
  581.         rule list the five (5) object files on which "pctmk.exe" depends
  582.         that are subject to change.
  583.  
  584.         The second line of this rule starts with a tab and is the command
  585.         to run if one or more of the dependencies are out-of-date with
  586.         "pctmk.exe".  This line is continued because the backslash "\" at
  587.         the end of the line immediately precedes the end-of-line
  588.         sequence.  When this command is executed PCTMK looks for "bind"
  589.         in the current directory, then the directories specified by the
  590.         environment variable PATH.  The parameters for this command are
  591.         the object files on which "pctmk.exe" depends, "a:exec.o" and the
  592.         three option flags.  The "-o" option supplies the name for the
  593.         output of "bind".  The file "a:exec.o", which is part of the
  594.         compiler package, is needed to construct "pctmk.exe".  It is not
  595.                                                                 Page 10
  596.  
  597.         necessary to include this file in the dependency list since it
  598.         does not change.
  599.  
  600.         Before deciding to execute the command in rule 1, PCTMK must
  601.         ensure that all of the dependents are also current.  To do this,
  602.         PCTMK attempts to "make" each of the dependents.  It will find
  603.         rules for each of these sub-targets.  Rule 2 states that "pcmk.o"
  604.         depends upon "pcmk.c" and "defs.h".  If either of the files
  605.         "pcmk.o" or "defs.h" are out-of date with "pcmk.o", the command
  606.         which is the second line of rule 2 will be run to re-build
  607.         "pcmk.o".  Rules 3 and 4 are similar to rule 2.  Note that the
  608.         full name of the compiler, "c88.exe", is present in the command
  609.         portion of rule 3.
  610.  
  611.         Rule 5 states that "ffind.o" depends upon "ffind.a".  If
  612.         "ffind.o" is out-of-date with "ffind.a" the command show in the
  613.         second line of this rule will be executed.  Rule 6 is similar to
  614.         rule 5.
  615.  
  616.         You should be aware that PCTMK will try to "make" all of the file
  617.         names which it encounters in a dependency list.  Even the source
  618.         files: "pcmk.c", "parser.c", "builtin.c", "ffind.a", "fetenv.a",
  619.         and "defs.h".  The attempt to "make" these source files will not
  620.         succeed because there are no rules present that create these
  621.         source files.  Because of this feature, PCTMK will work in
  622.         environments where program generators and precompilers are used.
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.                                  Appendix A                     Page 11
  650.  
  651.         DOS COMMANDS
  652.  
  653.         The commands listed below are always executed via the DOS command
  654.         processor.  The exit code is not available to PCMK when the DOS
  655.         command processor is called to execute a command.
  656.  
  657.                     backup                  break
  658.                     chdir                   cd
  659.                     chkdsk                  cls
  660.                     comp                    copy
  661.                     ctty                    date
  662.                     del                     erase
  663.                     dir                     echo
  664.                     for                     if
  665.                     mkdir                   md
  666.                     more                    pause
  667.                     print
  668.                     ren                     rename
  669.                     restore
  670.                     rmdir                   rd
  671.                     sort                    time
  672.                     type                    ver
  673.                     verify                  vol
  674.  
  675.  
  676.  
  677.  
  678.  
  679.  
  680.  
  681.  
  682.  
  683.  
  684.  
  685.  
  686.  
  687.  
  688.  
  689.  
  690.  
  691.  
  692.  
  693.  
  694.  
  695.  
  696.  
  697.  
  698.  
  699.  
  700.  
  701.  
  702.  
  703.                                  Appendix B                     Page 12
  704.  
  705.         DISTRIBUTION OF PCTMK
  706.  
  707.         PCTMK and its document is available at no cost to those who want
  708.         to use it.  Please help distribute this software by copying both
  709.         the program and the electronic form of the manual for anyone who
  710.         may want to use this program.  The only restriction on copying
  711.         this software is that the electronic form of the manual be copied
  712.         along with the program, and that neither the program nor the
  713.         manual be modified in any way.  I have placed PCTMK on several
  714.         computer bulletin boards and I hope it will spread to additional
  715.         bulletin boards.  PCTMK is not directly available from the
  716.         author.  Copies of PCTMK must be obtained from either a bulletin
  717.         board or a friend.
  718.  
  719.         My motivation for making this program available at no cost is to
  720.         help market PCMK which is a superset of PCTMK and provides the
  721.         user many useful and convenient features.
  722.  
  723.             -    Wild card character expansion
  724.             -    Full path name support
  725.             -    User defined macros
  726.             -    Access to DOS environment via macros
  727.             -    Access to internally generated macros
  728.             -    Built-in rules defined by the user
  729.             -    Printed manual with examples (40 pages)
  730.  
  731.         A copy of PCMK and its 40 page printed manual are available from
  732.         the author for $21.00.  A check or money order for the full
  733.         amount of the order must accompany all orders.  Washington state
  734.         residents include 8.1% sales tax.
  735.  
  736.         G. W. Glasscock
  737.         15617 S. E. Fairwood Blvd.
  738.         Renton, Wa.  98058
  739.         (206) 271-0638
  740.  
  741.         Because of the low cost of this product, I will not be able to
  742.         return your long distance telephone calls.  However, I am willing
  743.         to talk with you if you pay for the call.  I am available most
  744.         evenings 6:00 PM to 9:00 PM PST.  I will answer all mail that I
  745.         receive concerning PCMK or PCTMK.
  746.  
  747.  
  748.  
  749.  
  750.  
  751.  
  752.  
  753.  
  754.  
  755.  
  756.  
  757.