From f8b04e398e24e5fff217f8ce65b5ecab9e7ee665 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Sat, 1 Aug 2020 14:12:54 +0000
Subject: [PATCH] Debian: Support libjson-simple-java 3 for bullseye Patch
 adapted from Gilles Filippini
 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=960589

---
 build.xml                               |   7 +
 debian/patches/0003-json-simple-3.patch | 178 ++++++++++++++++++++++++
 debian/patches/series                   |   2 +
 debian/rules                            |  21 +++
 4 files changed, 208 insertions(+)
 create mode 100644 debian/patches/0003-json-simple-3.patch

diff --git a/build.xml b/build.xml
index 5e7d344203..da6c26639a 100644
--- a/build.xml
+++ b/build.xml
@@ -2618,6 +2618,13 @@
             <arg value="-p1" />
         </exec>
         <echo />
+        <echo message="Checking debian/patches/0003-json-simple-3.patch" />
+        <exec executable="patch" failonerror="true" input="debian/patches/0003-json-simple-3.patch" >
+            <arg value="--dry-run" />
+            <arg value="-F0" />
+            <arg value="-p1" />
+        </exec>
+        <echo />
         <echo message="Checking debian-alt/xenial/patches/0002-jetty-old-api.patch" />
         <exec executable="patch" failonerror="true" input="debian-alt/xenial/patches/0002-jetty-old-api.patch" >
             <arg value="--dry-run" />
diff --git a/debian/patches/0003-json-simple-3.patch b/debian/patches/0003-json-simple-3.patch
new file mode 100644
index 0000000000..f5151ef335
--- /dev/null
+++ b/debian/patches/0003-json-simple-3.patch
@@ -0,0 +1,178 @@
+Description: Migrate away from deprecated json-simple 1.x classes
+ See json-simple 2.0.0 changelog:
+ > * Deprecated JSONParse and JSONValue in favor of Jsoner.
+ > * Deprecated JSONStreamAware and JSONAware in favor of Jsonable.
+ > * Deprecated JSONObject in favor of JsonObject.
+ > * Deprecated JSONArray in favor of JsonArray.
+ .
+ This patch uses the new json-simple Json* classes. It is compatible with
+ both 2.x and 3.x json-simple releases, with a few ajustments regarding
+ backward incompatible changes in json-simple 3.x:
+ - The package name, changed to com.github.cliftonlabs.json_simple
+ - The exception DeserializationExcetpion renamed as JsonException
+ These two changes are handled using place-holders @JSON_SIMPLE@ and
+ @JSON_EXCETPION@ which are substituted at build time by debian/rules.
+ .
+ With these tricks the package is compatible with json-simple 2.x and 3.x.
+Author: Gilles Filippini <pini@debian.org>
+Index: i2p-0.9.45/apps/i2pcontrol/java/com/thetransactioncompany/jsonrpc2/JSONRPC2Error.java
+===================================================================
+--- i2p-0.9.45.orig/apps/i2pcontrol/java/com/thetransactioncompany/jsonrpc2/JSONRPC2Error.java
++++ i2p-0.9.45/apps/i2pcontrol/java/com/thetransactioncompany/jsonrpc2/JSONRPC2Error.java
+@@ -1,7 +1,7 @@
+ package com.thetransactioncompany.jsonrpc2;
+ 
+ 
+-import org.json.simple.JsonObject;
++import @JSON_SIMPLE@.JsonObject;
+ 
+ 
+ /** 
+Index: i2p-0.9.45/apps/i2pcontrol/java/com/thetransactioncompany/jsonrpc2/JSONRPC2Message.java
+===================================================================
+--- i2p-0.9.45.orig/apps/i2pcontrol/java/com/thetransactioncompany/jsonrpc2/JSONRPC2Message.java
++++ i2p-0.9.45/apps/i2pcontrol/java/com/thetransactioncompany/jsonrpc2/JSONRPC2Message.java
+@@ -5,7 +5,7 @@ package com.thetransactioncompany.jsonrp
+ import java.util.List;
+ import java.util.Map;
+ 
+-import org.json.simple.JsonObject;
++import @JSON_SIMPLE@.JsonObject;
+ 
+ 
+ /**
+Index: i2p-0.9.45/apps/i2pcontrol/java/com/thetransactioncompany/jsonrpc2/JSONRPC2Notification.java
+===================================================================
+--- i2p-0.9.45.orig/apps/i2pcontrol/java/com/thetransactioncompany/jsonrpc2/JSONRPC2Notification.java
++++ i2p-0.9.45/apps/i2pcontrol/java/com/thetransactioncompany/jsonrpc2/JSONRPC2Notification.java
+@@ -4,7 +4,7 @@ package com.thetransactioncompany.jsonrp
+ import java.util.List;
+ import java.util.Map;
+ 
+-import org.json.simple.JsonObject;
++import @JSON_SIMPLE@.JsonObject;
+ 
+ 
+ /** 
+Index: i2p-0.9.45/apps/i2pcontrol/java/com/thetransactioncompany/jsonrpc2/JSONRPC2Parser.java
+===================================================================
+--- i2p-0.9.45.orig/apps/i2pcontrol/java/com/thetransactioncompany/jsonrpc2/JSONRPC2Parser.java
++++ i2p-0.9.45/apps/i2pcontrol/java/com/thetransactioncompany/jsonrpc2/JSONRPC2Parser.java
+@@ -4,8 +4,8 @@ package com.thetransactioncompany.jsonrp
+ import java.util.List;
+ import java.util.Map;
+ 
+-import org.json.simple.Jsoner;
+-import org.json.simple.DeserializationException;
++import @JSON_SIMPLE@.Jsoner;
++import @JSON_SIMPLE@.@JSON_EXCEPTION@;
+ 
+ 
+ /**
+@@ -181,7 +181,7 @@ public class JSONRPC2Parser {
+ 		try {
+ 			json = Jsoner.deserialize(jsonString);
+ 				
+-		} catch (DeserializationException e) {
++		} catch (@JSON_EXCEPTION@ e) {
+ 
+ 			// Terse message, do not include full parse exception message
+ 			throw new JSONRPC2ParseException("Invalid JSON", 
+Index: i2p-0.9.45/apps/i2pcontrol/java/com/thetransactioncompany/jsonrpc2/JSONRPC2Request.java
+===================================================================
+--- i2p-0.9.45.orig/apps/i2pcontrol/java/com/thetransactioncompany/jsonrpc2/JSONRPC2Request.java
++++ i2p-0.9.45/apps/i2pcontrol/java/com/thetransactioncompany/jsonrpc2/JSONRPC2Request.java
+@@ -4,7 +4,7 @@ package com.thetransactioncompany.jsonrp
+ import java.util.List;
+ import java.util.Map;
+ 
+-import org.json.simple.JsonObject;
++import @JSON_SIMPLE@.JsonObject;
+ 
+ 
+ /** 
+Index: i2p-0.9.45/apps/i2pcontrol/java/com/thetransactioncompany/jsonrpc2/JSONRPC2Response.java
+===================================================================
+--- i2p-0.9.45.orig/apps/i2pcontrol/java/com/thetransactioncompany/jsonrpc2/JSONRPC2Response.java
++++ i2p-0.9.45/apps/i2pcontrol/java/com/thetransactioncompany/jsonrpc2/JSONRPC2Response.java
+@@ -3,7 +3,7 @@ package com.thetransactioncompany.jsonrp
+ 
+ import java.util.Map;
+ 
+-import org.json.simple.JsonObject;
++import @JSON_SIMPLE@.JsonObject;
+ 
+ 
+ /** 
+Index: i2p-0.9.45/apps/i2pcontrol/java/net/i2p/i2pcontrol/SocketController.java
+===================================================================
+--- i2p-0.9.45.orig/apps/i2pcontrol/java/net/i2p/i2pcontrol/SocketController.java
++++ i2p-0.9.45/apps/i2pcontrol/java/net/i2p/i2pcontrol/SocketController.java
+@@ -37,8 +37,8 @@ import net.i2p.util.I2PSSLSocketFactory;
+ import net.i2p.util.Log;
+ import net.i2p.util.PortMapper;
+ 
+-import org.json.simple.Jsoner;
+-import org.json.simple.DeserializationException;
++import @JSON_SIMPLE@.Jsoner;
++import @JSON_SIMPLE@.@JSON_EXCEPTION@;
+ 
+ import net.i2p.i2pcontrol.security.KeyStoreProvider;
+ import net.i2p.i2pcontrol.security.SecurityManager;
+@@ -199,7 +199,7 @@ public class SocketController implements
+                     // TODO
+                     System.out.println("i2pcontrol got: " + o);
+                 }
+-            } catch (DeserializationException pe) {
++            } catch (@JSON_EXCEPTION@ pe) {
+                 _log.error("i2pcontrol handler", pe);
+                 return;
+             } catch (IOException ioe) {
+Index: i2p-0.9.45/apps/routerconsole/java/src/com/vuze/plugins/mlab/MLabRunner.java
+===================================================================
+--- i2p-0.9.45.orig/apps/routerconsole/java/src/com/vuze/plugins/mlab/MLabRunner.java
++++ i2p-0.9.45/apps/routerconsole/java/src/com/vuze/plugins/mlab/MLabRunner.java
+@@ -30,8 +30,8 @@ import java.util.concurrent.atomic.Atomi
+ 
+ import edu.internet2.ndt.Tcpbw100;
+ 
+-import org.json.simple.JsonObject;
+-import org.json.simple.Jsoner;
++import @JSON_SIMPLE@.JsonObject;
++import @JSON_SIMPLE@.Jsoner;
+ 
+ import net.i2p.I2PAppContext;
+ import net.i2p.data.DataHelper;
+Index: i2p-0.9.45/apps/routerconsole/java/src/edu/internet2/ndt/JSONUtils.java
+===================================================================
+--- i2p-0.9.45.orig/apps/routerconsole/java/src/edu/internet2/ndt/JSONUtils.java
++++ i2p-0.9.45/apps/routerconsole/java/src/edu/internet2/ndt/JSONUtils.java
+@@ -1,9 +1,9 @@
+ package edu.internet2.ndt;
+ 
+-import org.json.simple.JsonObject;
+-import org.json.simple.Jsoner;
++import @JSON_SIMPLE@.JsonObject;
++import @JSON_SIMPLE@.Jsoner;
+ import java.util.Iterator;
+ import java.util.Map;
+ 
+ /**
+  * Created by Sebastian Malecki on 13.05.14.
+Index: i2p-0.9.45/core/java/src/net/i2p/util/DNSOverHTTPS.java
+===================================================================
+--- i2p-0.9.45.orig/core/java/src/net/i2p/util/DNSOverHTTPS.java
++++ i2p-0.9.45/core/java/src/net/i2p/util/DNSOverHTTPS.java
+@@ -12,9 +12,9 @@ import java.util.Map;
+ 
+ import gnu.getopt.Getopt;
+ 
+-import org.json.simple.JsonArray;
+-import org.json.simple.JsonObject;
+-import org.json.simple.Jsoner;
++import @JSON_SIMPLE@.JsonArray;
++import @JSON_SIMPLE@.JsonObject;
++import @JSON_SIMPLE@.Jsoner;
+ 
+ import net.i2p.I2PAppContext;
+ import net.i2p.data.DataHelper;
diff --git a/debian/patches/series b/debian/patches/series
index 5fabbd7e7c..3871843af9 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,2 +1,4 @@
 0001-path-substitution.patch
 0002-jetty-compatibility.patch
+0003-json-simple-3.patch
+	
diff --git a/debian/rules b/debian/rules
index fe976bd52d..0f422768e3 100755
--- a/debian/rules
+++ b/debian/rules
@@ -38,6 +38,18 @@ export DEBIANVERSION := $(shell dpkg-parsechangelog |awk -F' ' '/^Version:/{prin
 export BITS := $(shell dpkg-architecture -qDEB_HOST_ARCH_BITS)
 #export DEB_HOST_ARCH_CPU := $(shell dpkg-architecture -qDEB_HOST_ARCH_CPU)
 
+# debian: bullseye - transitioning
+JSON_SIMPLE_VERSION = $(shell dpkg -l libjson-simple-java | grep '^ii' | awk '{print $$3}')
+JSON_SIMPLE_3 = $(shell dpkg --compare-versions '$(JSON_SIMPLE_VERSION)' '>' '3.1.1-1~' && echo yes || echo no)
+ifeq (yes,$(JSON_SIMPLE_3))
+JSON_SIMPLE_PACKAGE = com.github.cliftonlabs.json_simple
+JSON_EXCEPTION = JsonException
+else
+JSON_SIMPLE_PACKAGE = org.json.simple
+JSON_EXCEPTION = DeserializationException
+endif
+
+
 %:
 	dh $@ --with systemd,bash-completion
 
@@ -56,6 +68,8 @@ override_dh_auto_clean:
 	rm -f $(CURDIR)/apps/susidns/src/lib/jstl.jar
 	rm -f $(CURDIR)/apps/susidns/src/lib/jstlel.jar
 	debconf-updatepo
+	find . -type f -name \*.java.json-simple \
+	  -exec sh -c 'file={} && mv $$file $${file%.json-simple}' \; -print
 
 override_dh_auto_build:
 
@@ -158,6 +172,13 @@ endif
 	@mkdir -p $(CURDIR)/core/java/build
 	ln -sf /usr/share/java/json-simple.jar $(CURDIR)/core/java/build/json-simple.jar
 
+	@# debian: bullseye - transitioning
+	find . -type f -name \*.java -exec grep -q 'import @JSON_SIMPLE@' {} \; \
+	  -exec sed -i.json-simple \
+		    -e 's,@JSON_SIMPLE@,$(JSON_SIMPLE_PACKAGE),' \
+		    -e 's/@JSON_EXCEPTION@/$(JSON_EXCEPTION)/' \
+		    {} \; -print
+
 	@# debian: everywhere; ubuntu: trusty+
 	@/bin/echo -e "with-famfamfam-flag-png=true" >> $(CURDIR)/override.properties
 
-- 
GitLab