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.
      

Changes  Path
+7 -0 omake-branches/existential_nodes/Files
+6 -8 omake-branches/existential_nodes/OMakefile.in
+0 -5 omake-branches/existential_nodes/OMakeroot
+1 -1 omake-branches/existential_nodes/omake.spec
+75 -44 omake-branches/existential_nodes/src/build/omake_build.ml
+67 -42 omake-branches/existential_nodes/src/ir/omake_cache.ml
+2 -0 omake-branches/existential_nodes/src/ir/omake_cache.mli
+21 -0 omake-branches/existential_nodes/src/ir/omake_node.ml
+5 -0 omake-branches/existential_nodes/src/ir/omake_node.mli
+2 -0 omake-branches/existential_nodes/src/main/omake_main.ml