I've been hacking on CMS Make (and losing sleep, but such is the
life of an addict!).  This is so much fun!  Got a long way to go.
Again, the reason for doing this is to have a 'make' tool for CMS
that works mostly like Unix 'make' even to the point of sharing
rules files between CMS and Linux.

This is what I have left to do before I can call it "rel 1".

        * <userid> CMSMAKE default rules file
        * support multiple targets on a rule
        * if/then processing in the command steps (cond recipe actions)
        * CC helper (have crude LD and AS helpers)
        * overview documentation
        * better variable processing
        * documentation of stock vars and how vars work

This is a native 'make'.  It does not require OpenVM, but it will
drive OpenVM if your rules say to.  (OVM is cool.  But not all of the
VM world is POSIX.)  All "target" files and their  "dependencies"
must be on your A disk.  (This will change, but there will always be
the concept of things being in the same directory.)

The default rules file is _DEFAULT CMSMAKE on any disk.
I'm thinking that it should look for a <userid> CMSMAKE first
and then fall to _DEFAULT.  Of course, you can specify a rules file,
which is already supported.

Need to support multiple targets on a rule.  Right now, you can have
only one target per rule.  Of course, any target can have multiple
dependencies  (or none)  and a target need not ever exist.  Ohh...
that reminds me that it needs ".PHONY" handling to explicitly declare
a non-existent target as such.

In the Unix and POSIX make programs, you get built-in if/then handling
because commands are run through the shell.  I have not checked how
NMAKE and other Windoze based 'make' do this, or if they do at all.
CMS Make will have an  'if'  statement handled internally, which is
going to be a little yucky, but I think it's needed.  (Already have
an internal  'echo'  for example, and  'test'.)  ('test' needs work
and will be used by 'if'.)

All files are single token.  It is impractical to have 'make'
properly process fn ft syntax and not possible to have compatible
makefiles between CMS and Unix if we did.  Related to that is the need
for wrapper EXECs to simulate  *some*  of the features of the Unix
assembler and compiler and loader.  This is not a full-out work-alike;
just enough to let the rules files have some commonality.  There is now
an 'ld' helper and an 'as' helper.  We also need a 'cc' helper,
and that's not in the package as it stands today.

As usual, documentation is the hardest part.  I put some time into
writing short but readable help for 'make' and 'wget' and 'curl'.
(That reminds me:  'wget' and 'curl' will need A LOT of work soon.)
It still needs a good overview, which is planned and intended.
Also needs a help specifcally discussing variable processing
including the pre-set variables.  And the variable processing itself
needs a little work, but functions.

Note that before _DEFAULT CMSMAKE is read, _GENERIC CMSMAKE is read.
That presently looks like:

        MAKE            =       make
        MACHTYPE        =       CMS
        BFSROOT         =       /../VMBFS:VMSYS:ROOT/
        SHELL           =       /bin/sh
        AS              =       cmsmkas
        CC              =
        LD              =       cmsmkld
        AR              =

No stock recipes here.  Just a few settings which can be customized.
BFSROOT and SHELL are used internally if a shell command is part of
a rule.  Otherwise, all of the above are only meaningful in the
context of  $(whatever)  syntax in your makefile.  ALL OF THEM can be
changed in your makefile.  (This would change how OVM is driven.)

The current lot is at

        http://www.casita.net/pub/cmsmake/cmsmake.vmarc

No warranties expressed or implied.
Richard Troth and La Casita remain free of any obligation should a
crater appear in the machine room where you shiny new z9 used to be.

Enjoy!

If you download the thing, try these commands:

        make help

        make -f cmsmake help

-- R;

Reply via email to