Michael G Schwern <[EMAIL PROTECTED]> writes: >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?
The problem with directories as targets is they timestamps change too often. e.g. make adds Foo.pm to Libdir So Libdir timestamp changes. > > >[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