In part one I layed out the current state of things and what's broken.  In
part two here I'll lay out the new design in the hopes it gets vetted for 
sanity.


Now, the obvious solution would be "just make the directories targets".

INST_LIB = blib/lib
INST_LIBDIR = $(INST_LIB)/Some

$(INST_LIBDIR) :
        $(MKDIR) $@

Simple, right?  Right, except this is cross-platform make.  Nothing is
simple.  GNU make and nmake can handle this, and I hope that means the rest
can, (please confirm) but I've confirmed VMS' MMS/K cannot.

Well sort of.

MMS cannot handle a directory as a target, but it handles files just fine.
VMS happens to have an odd quirk where each directory is a file.
[.path.to.a.dir] is really [.path.to.a]dir.dir.  [1]

So one could say...

INST_LIBDIR = [.blib.lib.Some]

INST_LIBDIR_DIR = [.blib.lib]Some.dir

$(INST_LIBDIR) : $(INST_LIBDIR_DIR)
        $(NOOP)

$(INST_LIBDIR_DIR)
        $(MKDIR) $@

$(INST_LIBDIR) is still useful in the Makefile like always 
(ie. "$(INST_LIBDIR)file" which is like "$(INST_LIBDIR)/file" on Unix)
and $(INST_LIBDIR_DIR) can be used to ensure the directory is created.

I think this will work out.  The previously deprecated dir_target() method
can be reinstated to generate these targets.

So.  Thoughts?


[1] For those who don't know, VMS file paths basically work like this.

Unix                    Windows                 VMS                     
/usr/local/bin/perl     \usr\local\bin\perl     [usr.local.bin]perl
./dir/dir/dir           dir\dir\dir             [.dir.dir.dir]  
./dir/dir/file          .\dir\dir\file          [.dir.dir]file
../dir/dir/file         ..\dir\dir\file         [-dir.dir]file
../../dir/dir/file      ..\..\dir\dir\file      [--dir.dir]file
N/A                     C:\dir\dir\file         C:[dir.dir]file


-- 
Michael G Schwern        [EMAIL PROTECTED]  http://www.pobox.com/~schwern/
What about MY need to be generalized and easily dismissed?
        http://www.goats.com/archive/000221.html

Reply via email to