From ec163549f98ae6176d40946e542889ed7723eb02 Mon Sep 17 00:00:00 2001
From: Zlatin Balevsky <zlatinb@gmail.com>
Date: Thu, 13 May 2021 12:45:50 +0000
Subject: [PATCH] Fixes for reproducible Gradle build

---
 apps/i2ptunnel/build.gradle     | 22 +++++++++++++++++++++-
 apps/routerconsole/build.gradle | 21 ++++++++++++++++++++-
 apps/susidns/build.gradle       | 23 ++++++++++++++++++++++-
 reproducible/build.gradle       |  3 ++-
 4 files changed, 65 insertions(+), 4 deletions(-)

diff --git a/apps/i2ptunnel/build.gradle b/apps/i2ptunnel/build.gradle
index fd5c8e5362..bd1ea1510d 100644
--- a/apps/i2ptunnel/build.gradle
+++ b/apps/i2ptunnel/build.gradle
@@ -75,7 +75,27 @@ task helpersJar(type: Jar) {
     archiveBaseName='i2pTunnelHelpers'
 }
 
+task copyJsps(type: Copy) {
+    doFirst {
+        def f = file("$buildDir/jsp_copy")
+        f.mkdirs()
+    }
+    from("jsp")
+    include("**/*.jsp")
+    include("**/*.jsi")
+    into("$buildDir/jsp_copy")
+
+    doLast {
+        fileTree("$buildDir/jsp_copy").getFiles().each {
+            if (it.getName().endsWith("jsi"))
+                it.setLastModified(0)
+        }
+    }
+}
+
+
 task precompileJsp(type : JavaExec) {
+    dependsOn copyJsps
     classpath = sourceSets.main.runtimeClasspath
     main = 'net.i2p.servlet.util.JspC'
 
@@ -90,7 +110,7 @@ task precompileJsp(type : JavaExec) {
     args "-webinc"
     args "$buildDir/web-fragment.xml"
     args "-webapp"
-    args "jsp"
+    args "$buildDir/jsp_copy"
     doLast {
         def output = new File("$buildDir/compiledJsps")
         output.mkdirs()
diff --git a/apps/routerconsole/build.gradle b/apps/routerconsole/build.gradle
index 60bad6e0e5..a110ab116c 100644
--- a/apps/routerconsole/build.gradle
+++ b/apps/routerconsole/build.gradle
@@ -89,7 +89,26 @@ task helpersJar(type: Jar) {
 }
 
 
+task copyJsps(type: Copy) {
+    doFirst {
+        def f = file("$buildDir/jsp_copy")
+        f.mkdirs()
+    }
+    from("jsp") 
+    include("**/*.jsp")
+    include("**/*.jsi")
+    into("$buildDir/jsp_copy")
+    
+    doLast {
+        fileTree("$buildDir/jsp_copy").getFiles().each {
+            if (it.getName().endsWith("jsi"))
+                it.setLastModified(0)
+        }
+    }
+}
+
 task precompileJsp(type: JavaExec) {
+    dependsOn copyJsps
     classpath = sourceSets.main.runtimeClasspath
     main = 'net.i2p.servlet.util.JspC'
 
@@ -104,7 +123,7 @@ task precompileJsp(type: JavaExec) {
     args "-webinc"
     args "$buildDir/web-fragment.xml"
     args "-webapp"
-    args "jsp"
+    args "$buildDir/jsp_copy"
     doLast {
         def output = new File("$buildDir/compiledJsps")
         output.mkdirs()
diff --git a/apps/susidns/build.gradle b/apps/susidns/build.gradle
index 9939f41242..672f7805b3 100644
--- a/apps/susidns/build.gradle
+++ b/apps/susidns/build.gradle
@@ -29,11 +29,32 @@ task bundle {
     }
 }
 
+task copyJsps(type: Copy) {
+    doFirst {
+        def f = file("$buildDir/jsp_copy")
+        f.mkdirs()
+    }
+    from("src/jsp")
+    include("**/*.jsp")
+    include("**/*.jsi")
+    into("$buildDir/jsp_copy")
+
+    doLast {
+        fileTree("$buildDir/jsp_copy").getFiles().each {
+            if (it.getName().endsWith("jsi"))
+                it.setLastModified(0)
+        }
+    }
+}
+
+
 task precompileJsp(type: JavaExec) {
     doFirst {
         file("$buildDir/tmp_jsp").mkdirs()
     }
 
+    dependsOn copyJsps
+
     classpath = sourceSets.main.runtimeClasspath + fileTree("src/lib")
     main = 'net.i2p.servlet.util.JspC'
 
@@ -48,7 +69,7 @@ task precompileJsp(type: JavaExec) {
     args "-webinc"
     args "$buildDir/web-fragment.xml"
     args "-webapp"
-    args "src/jsp"
+    args "$buildDir/jsp_copy"
     doLast {
         // normalize the order of the _jspx_dependents
         ant.replaceregexp(file : "$buildDir/tmp_jsp/i2p/susi/dns/jsp/addressbook_jsp.java",
diff --git a/reproducible/build.gradle b/reproducible/build.gradle
index 27c92d19c8..29c9d9faf4 100644
--- a/reproducible/build.gradle
+++ b/reproducible/build.gradle
@@ -26,7 +26,8 @@ dependencies {
     implementation project(':core')
     implementation project(':router')
     implementation project(path : ':installer', configuration: 'jbigi')
-    implementation fileTree("../apps/susidns/src/lib")
+    implementation files("../apps/susidns/src/lib/standard.jar")
+    implementation files("../apps/susidns/src/lib/jstl.jar")
 }
 
 import java.nio.file.*
-- 
GitLab