You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@ant.apache.org by bu...@apache.org on 2001/07/23 18:30:32 UTC
[Bug 2743] New: - More sophisticated dependency analysis
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=2743
*** shadow/2743 Mon Jul 23 09:30:32 2001
--- shadow/2743.tmp.7634 Mon Jul 23 09:30:32 2001
***************
*** 0 ****
--- 1,59 ----
+ +============================================================================+
+ | More sophisticated dependency analysis |
+ +----------------------------------------------------------------------------+
+ | Bug #: 2743 Product: Ant |
+ | Status: NEW Version: unspecified |
+ | Resolution: Platform: Other |
+ | Severity: Enhancement OS/Version: All |
+ | Priority: Other Component: Core |
+ +----------------------------------------------------------------------------+
+ | Assigned To: ant-dev@jakarta.apache.org |
+ | Reported By: Jochen.Schwarze@cit.de |
+ | CC list: Cc: |
+ +----------------------------------------------------------------------------+
+ | URL: |
+ +============================================================================+
+ | DESCRIPTION |
+ To the Ant team:
+
+ When I read the documents for the Ant2 re-design, I remembered a Perl-based
+ make system named "cons", now at <http://www.dsmit.com/cons/>. Like Ant, cons
+ tries to be a better make. There are two design decisions or features that make
+ cons unique:
+
+ 1) Cons never calls itself recursively, so it can process the whole dependency
+ tree in one pass. Actually, cons parses a hierarchy of declarative "Construct"
+ files and analyses the entire hierarchy before it starts building. This is MUCH
+ better than the usual make approach with make processes calling themselves
+ recursively, breaking the dependency chain every time.
+
+ 2) Cons keeps hash keys (MD5 message digests, actually) of all dependencies and
+ targets it has seen and processed (including external influences like the
+ system environment and compiler flags), so it can detect very reliably if
+ anything has changed and needs a rebuild.
+
+ Example #1: If you touch a source's modification date, that source will not be
+ considered as changed as long as the file contents don't change; if you change
+ a target, that target will be rebuilt if it doesn't fit to the current set of
+ dependencies.
+
+ Example #2: You compile a subtree or a project with debugging enabled. When you
+ re-build the entire project (say, with optimization enabled), cons will re-
+ compile exactly these files that previously have not been compiled with
+ optimization enabled, because it records the set of command-line options used
+ for building each target.
+
+ I have used cons for years in C/C++ building, and I haven't yet come across a
+ build system that is nearly as reliable.
+
+ As it is, cons is not very well suited for Java applications. Cons follows a
+ strict dependency hierarchy, where a set of sources always leads to ONE result.
+ (Java dependency analysis is more difficult, and the class files that are
+ created during compilation are -- seen from the outside -- essentially random.)
+
+ Anyway, it might be inspiring to look at cons' design from the perspective of
+ specifying Ant2.
+
+ Best,
+
+ Jochen