Changes by: Jason Hickey (jyh at cs.caltech.edu)
Date: 2003-10-19 20:44:47 -0700 (Sun, 19 Oct 2003)
Revision: 219
Log message:
This is the final commit on the existential_nodes branch.
This has several differences from the trunk:
1. scanners are run at most once, instead of a fixpoint,
dropping all dependencies from the cache when the
scanner is actually run (this addresses the
monotonicity problem).
2. weak dependencies are allowed. Here is an example:
.SCANNER: %.cmo %.cmx: %.ml $(optional %.mli)
$(OCAMLDEP) ...
The .mli file doesn't need to exist to run the scanner,
but if it is created, or if it changes, the scanner
will be considered out-of-date.
Internally, this uses an escape-convention on filenames.
The escaped string representation is ?%.mli?. That is,
any file that begins and ends with a ? is considered
a weak existential. The escape convention can be
adjusted at will.
One more issue: the weak dependency does not consider
rules to build the dependency. That is, the rule may
be executed even before rules to build the .mli file.
The problem is that weak dependencies implicitly create
fixpoint rules, like Aleksey's example:
%.dvi %.aux: %.tex $(optional %.aux)
latex ...
This rule should be executed until the .aux file no
longer changes.
This commit sets the stage for fixpoint rules, but
we should take it one step at a time. The problem is
that recursion may involve more than one rule, and
this would be really confusing to the user whenever
the system goes into an infinite loop (the dependencies
are currently checked for being well-founded).
I'm going to commit this to the trunk. It seems stable, no
problem building MetaPRL on Linux and Windows.
One issue: omake -j fails on Windows with a dependency
error, but not on Linux. This may be a lurking issue with
dependency analysis, but it seems more likely that
scanners are colliding on win32. For example, perhaps
choosing the name of a temp file is broken on Windows,
and they all use the same file.