From 612d06bd53aa517bed4ad9cf8f1ec9894f8baa66 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Sun, 28 Nov 2010 03:56:56 +0000
Subject: [PATCH]     * Build: Move all dependencies to top-level build.xml,   
           so each sub-build.xml is only executed once (true DAG)

---
 apps/i2psnark/java/build.xml      |  4 +-
 apps/i2ptunnel/java/build.xml     |  4 +-
 apps/ministreaming/java/build.xml |  4 +-
 apps/routerconsole/java/build.xml | 12 +----
 apps/sam/java/build.xml           | 10 +---
 apps/streaming/java/build.xml     |  7 +--
 apps/susimail/build.xml           |  2 +-
 apps/systray/java/build.xml       |  5 +-
 build.xml                         | 77 +++++++++++++++++++++++++------
 router/java/build.xml             |  4 +-
 10 files changed, 72 insertions(+), 57 deletions(-)

diff --git a/apps/i2psnark/java/build.xml b/apps/i2psnark/java/build.xml
index 4d7fbbe94..90f5cd6fe 100644
--- a/apps/i2psnark/java/build.xml
+++ b/apps/i2psnark/java/build.xml
@@ -3,9 +3,7 @@
     <target name="all" depends="clean, build" />
     <target name="build" depends="builddep, jar, war" />
     <target name="builddep">
-        <ant dir="../../jetty/" target="build" />
-        <ant dir="../../streaming/java/" target="build" />
-	<!-- streaming will build ministreaming and core -->
+        <!-- run from top level build.xml to get dependencies built -->
     </target>
     <condition property="depend.available">
         <typefound name="depend" />
diff --git a/apps/i2ptunnel/java/build.xml b/apps/i2ptunnel/java/build.xml
index b17e8d9f3..f50fadd3e 100644
--- a/apps/i2ptunnel/java/build.xml
+++ b/apps/i2ptunnel/java/build.xml
@@ -3,9 +3,7 @@
     <target name="all" depends="clean, build" />
     <target name="build" depends="builddep, jar, war" />
     <target name="builddep">
-        <ant dir="../../ministreaming/java/" target="build" />
-        <ant dir="../../jetty/" target="build" />
-	<!-- ministreaming will build core -->
+        <!-- run from top level build.xml to get dependencies built -->
     </target>
     <condition property="depend.available">
         <typefound name="depend" />
diff --git a/apps/ministreaming/java/build.xml b/apps/ministreaming/java/build.xml
index ca0889042..c22676d26 100644
--- a/apps/ministreaming/java/build.xml
+++ b/apps/ministreaming/java/build.xml
@@ -3,7 +3,7 @@
     <target name="all" depends="clean, build" />
     <target name="build" depends="builddep, jar" />
     <target name="builddep">
-        <ant dir="../../../core/java/" target="build" />
+        <!-- run from top level build.xml to get dependencies built -->
     </target>
     <condition property="depend.available">
         <typefound name="depend" />
@@ -45,9 +45,7 @@
         <delete dir="./build" />
     </target>
     <target name="cleandep" depends="clean">
-        <ant dir="../../../core/java/" target="cleandep" />
     </target>
     <target name="distclean" depends="clean">
-        <ant dir="../../../core/java/" target="distclean" />
     </target>
 </project>
diff --git a/apps/routerconsole/java/build.xml b/apps/routerconsole/java/build.xml
index 8b08c0de8..d544e59ac 100644
--- a/apps/routerconsole/java/build.xml
+++ b/apps/routerconsole/java/build.xml
@@ -3,12 +3,10 @@
     <target name="all" depends="clean, build" />
     <target name="build" depends="builddep, jar" />
     <target name="builddep">
-        <ant dir="../../../router/java/" target="build" />
-        <ant dir="../../systray/java/" target="build" />
-	<!-- router will build core -->
+        <!-- run from top level build.xml to get dependencies built -->
     </target>
     <target name="prepare">
-        <ant dir="../../jetty/" target="build" />
+        <!-- run from top level build.xml to get dependencies built -->
     </target>
     <condition property="depend.available">
         <typefound name="depend" />
@@ -235,13 +233,7 @@
         <delete file="../jsp/web-out.xml" />
     </target>
     <target name="cleandep" depends="clean">
-	<!-- router will clean core -->
-        <ant dir="../../../router/java/" target="cleandep" />
-        <ant dir="../../systray/java/" target="cleandep" />
     </target>
     <target name="distclean" depends="clean">
-	<!-- router will clean core -->
-        <ant dir="../../../router/java/" target="distclean" />
-        <ant dir="../../systray/java/" target="distclean" />
     </target>
 </project>
diff --git a/apps/sam/java/build.xml b/apps/sam/java/build.xml
index 6a987b341..57aeff994 100644
--- a/apps/sam/java/build.xml
+++ b/apps/sam/java/build.xml
@@ -3,9 +3,7 @@
     <target name="all" depends="clean, build" />
     <target name="build" depends="builddep, jar" />
     <target name="builddep">
-        <ant dir="../../ministreaming/java/" target="build" />
-        <ant dir="../../streaming/java/" target="build" />
-	<!-- ministreaming will build core -->
+        <!-- run from top level build.xml to get dependencies built -->
     </target>
     <condition property="depend.available">
         <typefound name="depend" />
@@ -69,13 +67,7 @@
         <delete dir="./build" />
     </target>
     <target name="cleandep" depends="clean">
-	<!-- ministreaming will clean core -->
-        <ant dir="../../ministreaming/java/" target="distclean" />
-        <ant dir="../../streaming/java/" target="distclean" />
     </target>
     <target name="distclean" depends="clean">
-	<!-- ministreaming will clean core -->
-        <ant dir="../../ministreaming/java/" target="distclean" />
-        <ant dir="../../streaming/java/" target="distclean" />
     </target>
 </project>
diff --git a/apps/streaming/java/build.xml b/apps/streaming/java/build.xml
index 7740a6022..dff6fbf1d 100644
--- a/apps/streaming/java/build.xml
+++ b/apps/streaming/java/build.xml
@@ -3,8 +3,7 @@
     <target name="all" depends="clean, build" />
     <target name="build" depends="builddep, jar" />
     <target name="builddep">
-        <ant dir="../../ministreaming/java/" target="build" />
-	<!-- ministreaming will build core -->
+        <!-- run from top level build.xml to get dependencies built -->
     </target>
     <condition property="depend.available">
         <typefound name="depend" />
@@ -62,11 +61,7 @@
         <delete dir="./build" />
     </target>
     <target name="cleandep" depends="clean">
-	<!-- ministreaming will clean core -->
-        <ant dir="../../ministreaming/java/" target="distclean" />
     </target>
     <target name="distclean" depends="clean">
-	<!-- ministreaming will clean core -->
-        <ant dir="../../ministreaming/java/" target="distclean" />
     </target>
 </project>
diff --git a/apps/susimail/build.xml b/apps/susimail/build.xml
index fb4371614..9ab38ce42 100644
--- a/apps/susimail/build.xml
+++ b/apps/susimail/build.xml
@@ -3,7 +3,7 @@
     <target name="all" depends="clean, build" />
     <target name="build" depends="builddep, jar" />
     <target name="builddep">
-        <ant dir="../jetty/" target="build" />
+        <!-- run from top level build.xml to get dependencies built -->
     </target>
     <property name="javac.compilerargs" value="" />
     <target name="compile">
diff --git a/apps/systray/java/build.xml b/apps/systray/java/build.xml
index 1597f20b3..9d48f902c 100644
--- a/apps/systray/java/build.xml
+++ b/apps/systray/java/build.xml
@@ -3,7 +3,7 @@
     <target name="all" depends="clean, build" />
     <target name="build" depends="builddep, jar" />
     <target name="builddep">
-        <ant dir="../../../core/java/" target="build" />
+        <!-- run from top level build.xml to get dependencies built -->
     </target>
     <property name="javac.compilerargs" value="" />
     <target name="compile">
@@ -55,10 +55,7 @@
         <delete dir="./build" />
     </target>
     <target name="cleandep" depends="clean">
-	<!-- router will clean core -->
-        <ant dir="../../../core/java/" target="cleandep" />
     </target>
     <target name="distclean" depends="clean">
-        <ant dir="../../../core/java/" target="distclean" />
     </target>
 </project>
diff --git a/build.xml b/build.xml
index de3525191..f0c1c4973 100644
--- a/build.xml
+++ b/build.xml
@@ -62,33 +62,79 @@
     <target name="build2" depends="builddep, jar, buildWEB" />
     <target name="buildSmall" depends="builddepSmall, jarSmall, buildWEB" />
     <target name="buildclean" depends="distclean, build" />
-    <target name="builddep" depends="builddepSmall">
-	<!-- build *everything* here, but only once -->
+
+    <target name="builddep" depends="builddepSmall, buildBOB, buildSAM, buildSusiMail, buildSusiDNS, buildI2PSnark" />
+
+    <target name="builddepSmall" depends="buildrouter, buildSystray, buildRouterConsole, buildStreaming, buildI2PTunnel, buildAddressbook" />
+
+    <!-- start of buildX, one for each sub-build.xml.
+         Do not put ant tasks in the sub-build.xmls anymore,
+         so the build will go faster.
+      -->
+
+    <!-- TODO remove I2PTunnel dependency in BOB -->
+    <target name="buildBOB" depends="buildStreaming, buildI2PTunnel" >
         <ant dir="apps/BOB/" target="jar" />
+    </target>
+
+    <target name="buildSAM" depends="buildStreaming" >
         <ant dir="apps/sam/java/" target="jar" />
+    </target>
+
+    <target name="buildSusiMail" depends="buildCore, buildJetty" >
         <ant dir="apps/susimail/" target="war" />
+    </target>
+
+    <target name="buildSusiDNS" depends="buildCore, buildJetty" >
         <ant dir="apps/susidns/src" target="all" />
+    </target>
+
+    <target name="buildI2PSnark" depends="buildStreaming, buildJetty" >
         <ant dir="apps/i2psnark/java/" target="war" />
     </target>
-    <target name="builddepSmall">
-        <ant dir="core/java/" target="jar" />
-        <ant dir="router/java/" target="jar" />
-        <ant dir="apps/systray/java/" target="jar" />
+
+    <target name="buildAddressbook" depends="buildCore, buildJetty" >
+        <ant dir="apps/addressbook/" target="war" />
+    </target>
+
+    <target name="buildI2PTunnel" depends="buildStreaming, buildJetty" >
+        <ant dir="apps/i2ptunnel/java/" target="build" />
+    </target>
+
+    <target name="buildRouterConsole" depends="buildrouter, buildSystray, buildJetty" >
         <ant dir="apps/routerconsole/java/" target="jar" />
-        <ant dir="apps/ministreaming/java/" target="jar" />
+    </target>
+
+    <target name="buildJetty" >
+        <ant dir="apps/jetty" target="build" />
+    </target>
+
+    <target name="buildSystray" depends="buildCore" >
+        <ant dir="apps/systray/java/" target="jar" />
+    </target>
+
+    <target name="buildStreaming" depends="buildMinistreaming" >
         <ant dir="apps/streaming/java/" target="jar" />
-        <ant dir="apps/i2ptunnel/java/" target="build" />
-        <ant dir="apps/addressbook/" target="war" />
     </target>
-    <target name="buildrouter">
-        <ant dir="core/java/" target="jar" />
+
+    <target name="buildMinistreaming" depends="buildCore" >
+        <ant dir="apps/ministreaming/java/" target="jar" />
+    </target>
+
+    <target name="buildRouter" depends="buildrouter" />
+    <target name="buildrouter" depends="buildCore" >
         <ant dir="router/java/" target="jar" />
-        <copy file="core/java/build/i2p.jar" todir="build/" />
         <copy file="router/java/build/router.jar" todir="build/" />
     </target>
-    <target name="buildWEB">
-        <ant dir="apps/jetty" target="ensureJettylib" />
-        <ant dir="apps/routerconsole/java" target="build" />
+
+    <target name="buildCore" >
+        <ant dir="core/java/" target="jar" />
+        <copy file="core/java/build/i2p.jar" todir="build/" />
+    </target>
+
+    <!-- end of sub-build.xml targets -->
+
+    <target name="buildWEB" depends="buildRouterConsole" >
         <copy file="apps/routerconsole/java/build/routerconsole.jar" todir="build/" />
         <copy file="apps/routerconsole/java/build/routerconsole.war" todir="build/" />
         <copy file="apps/jetty/jettylib/org.mortbay.jetty.jar" todir="build/" />
@@ -98,6 +144,7 @@
         <copy file="apps/jetty/jettylib/commons-el.jar" todir="build/" />
         <copy file="apps/jetty/jettylib/javax.servlet.jar" todir="build/" />
     </target>
+
     <target name="buildexe">
         <condition property="noExe">
 	    <os arch="x86_64" />
diff --git a/router/java/build.xml b/router/java/build.xml
index efb0b3091..69f6b4109 100644
--- a/router/java/build.xml
+++ b/router/java/build.xml
@@ -3,7 +3,7 @@
     <target name="all" depends="clean, build" />
     <target name="build" depends="builddep, jar" />
     <target name="builddep">
-        <ant dir="../../core/java/" target="build" />
+        <!-- run from top level build.xml to get dependencies built -->
     </target>
     <target name="builddeptest">
         <ant dir="../../core/java/" target="jarTest" />
@@ -131,9 +131,7 @@
         <delete dir="./build" />
     </target>
     <target name="cleandep" depends="clean">
-        <ant dir="../../core/java/" target="cleandep" />
     </target>
     <target name="distclean" depends="clean">
-        <ant dir="../../core/java/" target="distclean" />
     </target>
 </project>
-- 
GitLab