From 33629d0744040c62f3a2ff7b0727705f8cc751d2 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Sun, 1 May 2016 20:19:56 +0000
Subject: [PATCH] Build: Compile resource bundles from ant, not msgfmt,
 speeding up builds with translations by 20x

---
 apps/desktopgui/build.xml                     | 62 ++++++++++---------
 apps/desktopgui/bundle-messages.sh            | 10 ++-
 apps/i2psnark/java/build.xml                  |  5 ++
 apps/i2psnark/java/bundle-messages.sh         | 10 ++-
 apps/i2ptunnel/java/build.xml                 | 10 +++
 apps/i2ptunnel/java/bundle-messages-proxy.sh  | 10 ++-
 apps/i2ptunnel/java/bundle-messages.sh        | 10 ++-
 apps/ministreaming/java/build.xml             |  5 ++
 apps/ministreaming/java/bundle-messages.sh    | 10 ++-
 apps/routerconsole/java/build.xml             | 15 +++++
 .../java/bundle-messages-countries.sh         | 10 ++-
 .../java/bundle-messages-news.sh              | 10 ++-
 apps/routerconsole/java/bundle-messages.sh    | 10 ++-
 apps/susidns/src/build.xml                    |  7 ++-
 apps/susidns/src/bundle-messages.sh           | 10 ++-
 apps/susimail/build.xml                       |  5 ++
 apps/susimail/bundle-messages.sh              | 10 ++-
 17 files changed, 168 insertions(+), 41 deletions(-)

diff --git a/apps/desktopgui/build.xml b/apps/desktopgui/build.xml
index 598027900b..7e25f38977 100644
--- a/apps/desktopgui/build.xml
+++ b/apps/desktopgui/build.xml
@@ -6,7 +6,7 @@
 	<property name="dist"  location="dist"/>
 	<property name="jar" value="desktopgui.jar"/>
 	<property name="resources" value="resources"/>
-    <property name="javadoc" value="javadoc"/>
+	<property name="javadoc" value="javadoc"/>
 	<property name="javac.compilerargs" value=""/>
 	<property name="javac.version" value="1.6" />
 	<property name="require.gettext" value="true" />
@@ -17,9 +17,7 @@
 
 	<target name="init">
 	<mkdir dir="${build}"/>
-	<mkdir dir="${build}/${resources}"/>
-        <mkdir dir="${build}/${javadoc}"/>
-		<mkdir dir="${dist}"/>
+	<mkdir dir="${dist}"/>
 	</target>
 
 	<target name="clean">
@@ -27,35 +25,39 @@
 		<delete dir="${dist}"/>
 	</target>
 
-	<target name="compile" depends="init">
+        <target name="compile" depends="init">
             <javac debug="true" deprecation="on" source="${javac.version}" target="${javac.version}" 
                        includeAntRuntime="false"
                        srcdir="${src}" destdir="${build}">
-            <compilerarg line="${javac.compilerargs}" />
-            <classpath>
-                <pathelement location="../../core/java/build/i2p.jar" />
-                <pathelement location="../../installer/lib/wrapper/all/wrapper.jar" />
-            	<pathelement location="../../router/java/build/router.jar" />
-            </classpath>
-		</javac>
-        <copy todir="${build}/desktopgui/${resources}">
-            <fileset dir="${resources}" />
-        </copy>
-	</target>
+                <compilerarg line="${javac.compilerargs}" />
+                <classpath>
+                    <pathelement location="../../core/java/build/i2p.jar" />
+                    <pathelement location="../../installer/lib/wrapper/all/wrapper.jar" />
+                    <pathelement location="../../router/java/build/router.jar" />
+                </classpath>
+            </javac>
+            <copy todir="${build}/desktopgui/${resources}">
+                <fileset dir="${resources}" />
+            </copy>
+        </target>
 
-	<target name="bundle" unless="no.bundle">
-        <exec executable="sh" osfamily="unix" failifexecutionfails="true" failonerror="${require.gettext}" >
-            <env key="JAVA_HOME" value="${java.home}" />
-            <arg value="./bundle-messages.sh" />
-        </exec>
-        <exec executable="sh" osfamily="mac" failifexecutionfails="true" failonerror="${require.gettext}" >
-            <arg value="./bundle-messages.sh" />
-        </exec>
-		<!-- multi-lang is optional -->
-        <exec executable="sh" osfamily="windows" failifexecutionfails="false" >
-            <arg value="./bundle-messages.sh" />
-        </exec>
-	</target>
+        <target name="bundle" unless="no.bundle">
+            <exec executable="sh" osfamily="unix" failifexecutionfails="true" failonerror="${require.gettext}" >
+                <env key="JAVA_HOME" value="${java.home}" />
+                <arg value="./bundle-messages.sh" />
+            </exec>
+            <exec executable="sh" osfamily="mac" failifexecutionfails="true" failonerror="${require.gettext}" >
+                <arg value="./bundle-messages.sh" />
+            </exec>
+            <exec executable="sh" osfamily="windows" failifexecutionfails="false" >
+                <arg value="./bundle-messages.sh" />
+            </exec>
+            <javac source="${javac.version}" target="${javac.version}" 
+                   includeAntRuntime="false"
+                   srcdir="${build}/messages-src" destdir="${build}">
+                <compilerarg line="${javac.compilerargs}" />
+            </javac>
+        </target>
 
         <target name="listChangedFiles" depends="jarUpToDate" if="shouldListChanges" >
         <exec executable="mtn" outputproperty="workspace.changes" errorproperty="mtn.error2" failifexecutionfails="false" >
@@ -74,7 +76,7 @@
 	<target name="jar" depends="compile, bundle, listChangedFiles" unless="jar.uptodate" >
 		<!-- set if unset -->
 		<property name="workspace.changes.tr" value="" />
-		<jar basedir="${build}" destfile="${dist}/${jar}">
+		<jar basedir="${build}" excludes="messages-src/**" destfile="${dist}/${jar}">
 			<manifest>
 				<attribute name="Main-Class" value="net.i2p.desktopgui.Main"/>
 				<attribute name="Build-Date" value="${build.timestamp}" />
diff --git a/apps/desktopgui/bundle-messages.sh b/apps/desktopgui/bundle-messages.sh
index 6823dde03e..8654607560 100644
--- a/apps/desktopgui/bundle-messages.sh
+++ b/apps/desktopgui/bundle-messages.sh
@@ -106,7 +106,13 @@ do
         echo "Generating ${CLASS}_$LG ResourceBundle..."
 
         # convert to class files in build
-        msgfmt --java --statistics -r $CLASS -l $LG -d build $i
+        TD=build/messages-src-tmp
+        TDX=$TD/net/i2p/desktopgui
+        TD2=build/messages-src
+        TDY=$TD2/net/i2p/desktopgui
+        rm -rf $TD
+        mkdir -p $TD $TDY
+        msgfmt --java --statistics --source -r $CLASS -l $LG -d $TD $i
         if [ $? -ne 0 ]
         then
             echo "ERROR - msgfmt failed on ${i}, not updating translations"
@@ -115,6 +121,8 @@ do
             RC=1
             break
         fi
+        mv $TDX/messages_$LG.java $TDY
+        rm -rf $TD
     fi
 done
 rm -f $TMPFILE
diff --git a/apps/i2psnark/java/build.xml b/apps/i2psnark/java/build.xml
index ec0e5e7e86..31f3805a18 100644
--- a/apps/i2psnark/java/build.xml
+++ b/apps/i2psnark/java/build.xml
@@ -150,6 +150,11 @@
         <exec executable="sh" osfamily="windows" failifexecutionfails="false" >
             <arg value="./bundle-messages.sh" />
         </exec>
+        <javac source="${javac.version}" target="${javac.version}" 
+               includeAntRuntime="false"
+               srcdir="build/messages-src" destdir="build/obj">
+            <compilerarg line="${javac.compilerargs}" />
+        </javac>
     </target>
 
     <target name="poupdate" depends="builddep, compile">
diff --git a/apps/i2psnark/java/bundle-messages.sh b/apps/i2psnark/java/bundle-messages.sh
index 7ef207a6d3..adbacb45a6 100755
--- a/apps/i2psnark/java/bundle-messages.sh
+++ b/apps/i2psnark/java/bundle-messages.sh
@@ -97,7 +97,13 @@ do
         echo "Generating ${CLASS}_$LG ResourceBundle..."
 
         # convert to class files in build/obj
-        msgfmt --java --statistics -r $CLASS -l $LG -d build/obj $i
+        TD=build/messages-src-tmp
+        TDX=$TD/org/klomp/snark/web
+        TD2=build/messages-src
+        TDY=$TD2/org/klomp/snark/web
+        rm -rf $TD
+        mkdir -p $TD $TDY
+        msgfmt --java --statistics --source -r $CLASS -l $LG -d $TD $i
         if [ $? -ne 0 ]
         then
             echo "ERROR - msgfmt failed on ${i}, not updating translations"
@@ -106,6 +112,8 @@ do
             RC=1
             break
         fi
+        mv $TDX/messages_$LG.java $TDY
+        rm -rf $TD
     fi
 done
 rm -f $TMPFILE
diff --git a/apps/i2ptunnel/java/build.xml b/apps/i2ptunnel/java/build.xml
index 9c86a7ae19..7f3833c76b 100644
--- a/apps/i2ptunnel/java/build.xml
+++ b/apps/i2ptunnel/java/build.xml
@@ -136,6 +136,11 @@
         <exec executable="sh" osfamily="windows" failifexecutionfails="false" >
             <arg value="./bundle-messages.sh" />
         </exec>
+        <javac source="${javac.version}" target="${javac.version}" 
+               includeAntRuntime="false"
+               srcdir="build/messages-src" destdir="../jsp/WEB-INF/classes">
+            <compilerarg line="${javac.compilerargs}" />
+        </javac>
     </target>
 
     <target name="poupdate" depends="compile, precompilejsp">
@@ -169,6 +174,11 @@
         <exec executable="sh" osfamily="windows" failifexecutionfails="false" >
             <arg value="./bundle-messages-proxy.sh" />
         </exec>
+        <javac source="${javac.version}" target="${javac.version}" 
+               includeAntRuntime="false"
+               srcdir="build/messages-proxy-src" destdir="build/obj">
+            <compilerarg line="${javac.compilerargs}" />
+        </javac>
     </target>
 
     <target name="extractProxyTags">
diff --git a/apps/i2ptunnel/java/bundle-messages-proxy.sh b/apps/i2ptunnel/java/bundle-messages-proxy.sh
index a777a5eed9..ac31340f79 100755
--- a/apps/i2ptunnel/java/bundle-messages-proxy.sh
+++ b/apps/i2ptunnel/java/bundle-messages-proxy.sh
@@ -99,7 +99,13 @@ do
         echo "Generating ${CLASS}_$LG ResourceBundle..."
 
         # convert to class files in build/obj
-        msgfmt --java --statistics -r $CLASS -l $LG -d build/obj $i
+        TD=build/messages-proxy-src-tmp
+        TDX=$TD/net/i2p/i2ptunnel/proxy
+        TD2=build/messages-proxy-src
+        TDY=$TD2/net/i2p/i2ptunnel/proxy
+        rm -rf $TD
+        mkdir -p $TD $TDY
+        msgfmt --java --statistics --source -r $CLASS -l $LG -d $TD $i
         if [ $? -ne 0 ]
         then
             echo "ERROR - msgfmt failed on ${i}, not updating translations"
@@ -108,6 +114,8 @@ do
             RC=1
             break
         fi
+        mv $TDX/messages_$LG.java $TDY
+        rm -rf $TD
     fi
 done
 rm -f $TMPFILE
diff --git a/apps/i2ptunnel/java/bundle-messages.sh b/apps/i2ptunnel/java/bundle-messages.sh
index 0b426cb4d2..00f26b712c 100755
--- a/apps/i2ptunnel/java/bundle-messages.sh
+++ b/apps/i2ptunnel/java/bundle-messages.sh
@@ -98,7 +98,13 @@ do
         echo "Generating ${CLASS}_$LG ResourceBundle..."
 
         # convert to class files in build/obj
-        msgfmt --java --statistics -r $CLASS -l $LG -d ../jsp/WEB-INF/classes $i
+        TD=build/messages-src-tmp
+        TDX=$TD/net/i2p/i2ptunnel/web
+        TD2=build/messages-src
+        TDY=$TD2/net/i2p/i2ptunnel/web
+        rm -rf $TD
+        mkdir -p $TD $TDY
+        msgfmt --java --statistics --source -r $CLASS -l $LG -d $TD $i
         if [ $? -ne 0 ]
         then
             echo "ERROR - msgfmt failed on ${i}, not updating translations"
@@ -107,6 +113,8 @@ do
             RC=1
             break
         fi
+        mv $TDX/messages_$LG.java $TDY
+        rm -rf $TD
     fi
 done
 rm -f $TMPFILE
diff --git a/apps/ministreaming/java/build.xml b/apps/ministreaming/java/build.xml
index 14f729446b..c3aaf4a55b 100644
--- a/apps/ministreaming/java/build.xml
+++ b/apps/ministreaming/java/build.xml
@@ -110,6 +110,11 @@
         <exec executable="sh" osfamily="windows" failifexecutionfails="false" >
             <arg value="./bundle-messages.sh" />
         </exec>
+        <javac source="${javac.version}" target="${javac.version}" 
+               includeAntRuntime="false"
+               srcdir="build/messages-src" destdir="build/obj">
+            <compilerarg line="${javac.compilerargs}" />
+        </javac>
     </target>
 
     <target name="poupdate" depends="builddep, compile">
diff --git a/apps/ministreaming/java/bundle-messages.sh b/apps/ministreaming/java/bundle-messages.sh
index 140efc61e1..3c9103fd93 100755
--- a/apps/ministreaming/java/bundle-messages.sh
+++ b/apps/ministreaming/java/bundle-messages.sh
@@ -97,7 +97,13 @@ do
         echo "Generating ${CLASS}_$LG ResourceBundle..."
 
         # convert to class files in build/obj
-        msgfmt --java --statistics -r $CLASS -l $LG -d build/obj $i
+        TD=build/messages-src-tmp
+        TDX=$TD/net/i2p/client/streaming
+        TD2=build/messages-src
+        TDY=$TD2/net/i2p/client/streaming
+        rm -rf $TD
+        mkdir -p $TD $TDY
+        msgfmt --java --statistics --source -r $CLASS -l $LG -d $TD $i
         if [ $? -ne 0 ]
         then
             echo "ERROR - msgfmt failed on ${i}, not updating translations"
@@ -106,6 +112,8 @@ do
             RC=1
             break
         fi
+        mv $TDX/messages_$LG.java $TDY
+        rm -rf $TD
     fi
 done
 rm -f $TMPFILE
diff --git a/apps/routerconsole/java/build.xml b/apps/routerconsole/java/build.xml
index a5bfe58f74..f2e7166089 100644
--- a/apps/routerconsole/java/build.xml
+++ b/apps/routerconsole/java/build.xml
@@ -158,6 +158,11 @@
         <exec executable="sh" osfamily="windows" failifexecutionfails="false" >
             <arg value="./bundle-messages.sh" />
         </exec>
+        <javac source="${javac.version}" target="${javac.version}" 
+               includeAntRuntime="false"
+               srcdir="build/messages-src" destdir="build/obj">
+            <compilerarg line="${javac.compilerargs}" />
+        </javac>
         <!-- jar again to get the latest messages_*.class files -->
         <jar destfile="./build/routerconsole.jar" basedir="./build/obj" includes="**/*.class" update="true" />
     </target>
@@ -204,6 +209,11 @@
         <exec executable="sh" osfamily="windows" failifexecutionfails="false" >
             <arg value="./bundle-messages-news.sh" />
         </exec>
+        <javac source="${javac.version}" target="${javac.version}" 
+               includeAntRuntime="false"
+               srcdir="build/messages-news-src" destdir="build/obj">
+            <compilerarg line="${javac.compilerargs}" />
+        </javac>
     </target>
 
     <target name="bundle-countries" unless="no.bundle">
@@ -217,6 +227,11 @@
         <exec executable="sh" osfamily="windows" failifexecutionfails="false" >
             <arg value="./bundle-messages-countries.sh" />
         </exec>
+        <javac source="${javac.version}" target="${javac.version}" 
+               includeAntRuntime="false"
+               srcdir="build/messages-countries-src" destdir="build/obj">
+            <compilerarg line="${javac.compilerargs}" />
+        </javac>
     </target>
 
     <target name="extractProxyTags">
diff --git a/apps/routerconsole/java/bundle-messages-countries.sh b/apps/routerconsole/java/bundle-messages-countries.sh
index 23588e440f..77045ddadb 100755
--- a/apps/routerconsole/java/bundle-messages-countries.sh
+++ b/apps/routerconsole/java/bundle-messages-countries.sh
@@ -113,7 +113,13 @@ do
         echo "Generating ${CLASS}_$LG ResourceBundle..."
 
         # convert to class files in build/obj
-        msgfmt --java --statistics -r $CLASS -l $LG -d build/obj $i
+        TD=build/messages-countries-src-tmp
+        TDX=$TD/net/i2p/router/countries
+        TD2=build/messages-countries-src
+        TDY=$TD2/net/i2p/router/countries
+        rm -rf $TD
+        mkdir -p $TD $TDY
+        msgfmt --java --statistics --source -r $CLASS -l $LG -d $TD $i
         if [ $? -ne 0 ]
         then
             echo "ERROR - msgfmt failed on ${i}, not updating translations"
@@ -122,6 +128,8 @@ do
             RC=1
             break
         fi
+        mv $TDX/messages_$LG.java $TDY
+        rm -rf $TD
     fi
 done
 rm -f $TMPFILE
diff --git a/apps/routerconsole/java/bundle-messages-news.sh b/apps/routerconsole/java/bundle-messages-news.sh
index 759a3137b5..22137d1f15 100755
--- a/apps/routerconsole/java/bundle-messages-news.sh
+++ b/apps/routerconsole/java/bundle-messages-news.sh
@@ -99,7 +99,13 @@ do
         echo "Generating ${CLASS}_$LG ResourceBundle..."
 
         # convert to class files in build/obj
-        msgfmt --java --statistics -r $CLASS -l $LG -d build/obj $i
+        TD=build/messages-news-src-tmp
+        TDX=$TD/net/i2p/router/news
+        TD2=build/messages-news-src
+        TDY=$TD2/net/i2p/router/news
+        rm -rf $TD
+        mkdir -p $TD $TDY
+        msgfmt --java --statistics --source -r $CLASS -l $LG -d $TD $i
         if [ $? -ne 0 ]
         then
             echo "ERROR - msgfmt failed on ${i}, not updating translations"
@@ -108,6 +114,8 @@ do
             RC=1
             break
         fi
+        mv $TDX/messages_$LG.java $TDY
+        rm -rf $TD
     fi
 done
 rm -f $TMPFILE
diff --git a/apps/routerconsole/java/bundle-messages.sh b/apps/routerconsole/java/bundle-messages.sh
index dd100561ba..2f21375245 100755
--- a/apps/routerconsole/java/bundle-messages.sh
+++ b/apps/routerconsole/java/bundle-messages.sh
@@ -126,7 +126,13 @@ do
         echo "Generating ${CLASS}_$LG ResourceBundle..."
 
         # convert to class files in build/obj
-        msgfmt --java --statistics -r $CLASS -l $LG -d build/obj $i
+        TD=build/messages-src-tmp
+        TDX=$TD/net/i2p/router/web
+        TD2=build/messages-src
+        TDY=$TD2/net/i2p/router/web
+        rm -rf $TD
+        mkdir -p $TD $TDY
+        msgfmt --java --statistics --source -r $CLASS -l $LG -d $TD $i
         if [ $? -ne 0 ]
         then
             echo "ERROR - msgfmt failed on ${i}, not updating translations"
@@ -135,6 +141,8 @@ do
             RC=1
             break
         fi
+        mv $TDX/messages_$LG.java $TDY
+        rm -rf $TD
     fi
 done
 rm -f $TMPFILE
diff --git a/apps/susidns/src/build.xml b/apps/susidns/src/build.xml
index 482bedad0f..f5279d69b4 100644
--- a/apps/susidns/src/build.xml
+++ b/apps/susidns/src/build.xml
@@ -149,6 +149,11 @@
         <exec executable="sh" osfamily="windows" failifexecutionfails="false" >
             <arg value="./bundle-messages.sh" />
         </exec>
+        <javac source="${javac.version}" target="${javac.version}" 
+               includeAntRuntime="false"
+               srcdir="build/messages-src" destdir="${bin}">
+            <compilerarg line="${javac.compilerargs}" />
+        </javac>
     </target>
 
     <target name="poupdate" depends="compile, precompilejsp">
@@ -171,7 +176,7 @@
       <delete file="susidns.war" />
       <delete>
         <fileset dir="." includes="**/*.class" />
-        <fileset dir="." includes="tmp" />
+        <fileset dir="." includes="tmp, build" />
         <fileset dir="WEB-INF" includes="web-fragment.xml, web-out.xml" />
       </delete>
       <delete dir="${bin}" />
diff --git a/apps/susidns/src/bundle-messages.sh b/apps/susidns/src/bundle-messages.sh
index 25bfae4d7a..60aaa17d7b 100755
--- a/apps/susidns/src/bundle-messages.sh
+++ b/apps/susidns/src/bundle-messages.sh
@@ -99,7 +99,13 @@ do
         echo "Generating ${CLASS}_$LG ResourceBundle..."
 
         # convert to class files in build/obj
-        msgfmt --java --statistics -r $CLASS -l $LG -d WEB-INF/classes $i
+        TD=build/messages-src-tmp
+        TDX=$TD/i2p/susi/dns
+        TD2=build/messages-src
+        TDY=$TD2/i2p/susi/dns
+        rm -rf $TD
+        mkdir -p $TD $TDY
+        msgfmt --java --statistics --source -r $CLASS -l $LG -d $TD $i
         if [ $? -ne 0 ]
         then
             echo "ERROR - msgfmt failed on ${i}, not updating translations"
@@ -108,6 +114,8 @@ do
             RC=1
             break
         fi
+        mv $TDX/messages_$LG.java $TDY
+        rm -rf $TD
     fi
 done
 rm -f $TMPFILE
diff --git a/apps/susimail/build.xml b/apps/susimail/build.xml
index 3a553c6014..2a524b2b65 100644
--- a/apps/susimail/build.xml
+++ b/apps/susimail/build.xml
@@ -113,6 +113,11 @@
         <exec executable="sh" osfamily="windows" failifexecutionfails="false" >
             <arg value="./bundle-messages.sh" />
         </exec>
+        <javac source="${javac.version}" target="${javac.version}" 
+               includeAntRuntime="false"
+               srcdir="build/messages-src" destdir="src/WEB-INF/classes">
+            <compilerarg line="${javac.compilerargs}" />
+        </javac>
     </target>
 
     <target name="poupdate" depends="builddep, compile">
diff --git a/apps/susimail/bundle-messages.sh b/apps/susimail/bundle-messages.sh
index 8d8b55fc54..330fa7988e 100644
--- a/apps/susimail/bundle-messages.sh
+++ b/apps/susimail/bundle-messages.sh
@@ -97,7 +97,13 @@ do
         echo "Generating ${CLASS}_$LG ResourceBundle..."
 
         # convert to class files in build/obj
-        msgfmt --java --statistics -r $CLASS -l $LG -d src/WEB-INF/classes $i
+        TD=build/messages-src-tmp
+        TDX=$TD/i2p/susi/webmail
+        TD2=build/messages-src
+        TDY=$TD2/i2p/susi/webmail
+        rm -rf $TD
+        mkdir -p $TD $TDY
+        msgfmt --java --statistics --source -r $CLASS -l $LG -d $TD $i
         if [ $? -ne 0 ]
         then
             echo "ERROR - msgfmt failed on ${i}, not updating translations"
@@ -106,6 +112,8 @@ do
             RC=1
             break
         fi
+        mv $TDX/messages_$LG.java $TDY
+        rm -rf $TD
     fi
 done
 rm -f $TMPFILE
-- 
GitLab