From 21d3ec1e8971ee111f436edea5f3f91846102d6a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Sebastian=20K=C3=BCrten?= <sebastian@mobanisto.de>
Date: Sat, 7 Jan 2023 11:23:03 +0100
Subject: [PATCH] Use Pinpit plugin for packaging

---
 .gitlab-ci.yml                                | 152 ++++++++--------
 README.md                                     |  13 +-
 briar-desktop/build.gradle.kts                |  91 +++++++++-
 .../briar/desktop/DesktopModule.kt            |   1 -
 .../packagingResources/linux/deb/copyright    |  19 ++
 .../linux/{ => deb}/postinst                  |   0
 .../linux/{ => deb}/preinst                   |   0
 .../packagingResources/linux/{ => deb}/prerm  |   0
 .../packagingResources/linux/launcher.desktop |   9 +
 .../src/packagingResources/windows/.gitignore |   2 +
 .../src/packagingResources/windows/banner.bmp | Bin 0 -> 114514 bytes
 .../src/packagingResources/windows/banner.svg | 119 ++++++++++++
 .../src/packagingResources/windows/convert.sh |   7 +
 .../src/packagingResources/windows/dialog.bmp | Bin 0 -> 615402 bytes
 .../src/packagingResources/windows/dialog.svg | 169 ++++++++++++++++++
 .../briar/desktop/DesktopTestModule.kt        |   1 -
 gradle.properties                             |   1 -
 utils/finalize-deb.sh                         |  24 ---
 18 files changed, 485 insertions(+), 123 deletions(-)
 create mode 100644 briar-desktop/src/packagingResources/linux/deb/copyright
 rename briar-desktop/src/packagingResources/linux/{ => deb}/postinst (100%)
 rename briar-desktop/src/packagingResources/linux/{ => deb}/preinst (100%)
 rename briar-desktop/src/packagingResources/linux/{ => deb}/prerm (100%)
 create mode 100644 briar-desktop/src/packagingResources/linux/launcher.desktop
 create mode 100644 briar-desktop/src/packagingResources/windows/.gitignore
 create mode 100644 briar-desktop/src/packagingResources/windows/banner.bmp
 create mode 100644 briar-desktop/src/packagingResources/windows/banner.svg
 create mode 100755 briar-desktop/src/packagingResources/windows/convert.sh
 create mode 100644 briar-desktop/src/packagingResources/windows/dialog.bmp
 create mode 100644 briar-desktop/src/packagingResources/windows/dialog.svg
 delete mode 100755 utils/finalize-deb.sh

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 84fca2d534..e9dd5bbdfe 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -39,116 +39,104 @@ ktlint:
       when: always
     - when: always
 
-b_jar:
+b_package_linux:
+  image: briar/ci-image-android:ubuntu-20-wine
   stage: build
   script:
-    - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-11-openjdk-amd64 --no-daemon kaptKotlin
-    - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 --no-daemon -PbuildType=nightly -x kaptKotlin packageUberJarForCurrentOS
-    - mv briar-desktop/build/compose/jars/Briar-*.jar ./briar-desktop.jar
-  artifacts:
-    paths:
-      - briar-desktop.jar
-    expire_in: 2 days
-  rules:
-    - if: $CI_PIPELINE_SOURCE == "schedule"
-
-b_bullseye_deb:
-  stage: build
-  script:
-    - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-11-openjdk-amd64 --no-daemon kaptKotlin
-    - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 --no-daemon -PbuildType=nightly -x kaptKotlin packageDeb
-    - utils/finalize-deb.sh
-    - mv briar-desktop/build/compose/binaries/main/deb/briar-desktop.deb ./briar-desktop-debian-bullseye.deb
+    - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 --no-daemon -PbuildType=nightly
+      pinpitPackageDefaultUberJarForLinuxX64
+      pinpitPackageDefaultDebDebianBullseyeX64
+      pinpitPackageDefaultDebUbuntuBionicX64
+      pinpitPackageDefaultDebUbuntuFocalX64
+    - ls -lrth briar-desktop/build/pinpit/jars/Briar-linux-*.jar
+    - ls -lrth briar-desktop/build/pinpit/binaries/main-default/linux/x64/deb/briar-desktop-ubuntu-18.04-x64-*.deb
+    - ls -lrth briar-desktop/build/pinpit/binaries/main-default/linux/x64/deb/briar-desktop-ubuntu-20.04-x64-*.deb
+    - ls -lrth briar-desktop/build/pinpit/binaries/main-default/linux/x64/deb/briar-desktop-debian-bullseye-x64-*.deb
+    - mv briar-desktop/build/pinpit/jars/Briar-linux-*.jar ./briar-linux-desktop.jar
+    - mv briar-desktop/build/pinpit/binaries/main-default/linux/x64/deb/briar-desktop-ubuntu-18.04-x64-*.deb ./briar-desktop-ubuntu-18.04.deb
+    - mv briar-desktop/build/pinpit/binaries/main-default/linux/x64/deb/briar-desktop-ubuntu-20.04-x64-*.deb ./briar-desktop-ubuntu-20.04.deb
+    - mv briar-desktop/build/pinpit/binaries/main-default/linux/x64/deb/briar-desktop-debian-bullseye-x64-*.deb ./briar-desktop-debian-bullseye.deb
   artifacts:
     paths:
+      - briar-linux-desktop.jar
       - briar-desktop-debian-bullseye.deb
-    expire_in: 2 days
-  rules:
-    - if: $CI_PIPELINE_SOURCE == "schedule"
-
-b_20_ubuntu_deb:
-  image: briar/ci-image-android:ubuntu-20
-  stage: build
-  script:
-    - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-11-openjdk-amd64 --no-daemon kaptKotlin
-    - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 --no-daemon -PbuildType=nightly -x kaptKotlin packageDeb
-    - utils/finalize-deb.sh
-    - mv briar-desktop/build/compose/binaries/main/deb/briar-desktop.deb ./briar-desktop-ubuntu-20.04.deb
-  artifacts:
-    paths:
+      - briar-desktop-ubuntu-18.04.deb
       - briar-desktop-ubuntu-20.04.deb
     expire_in: 2 days
   rules:
     - if: $CI_PIPELINE_SOURCE == "schedule"
 
-b_18_ubuntu_deb:
-  image: briar/ci-image-android:ubuntu-18
+b_package_windows:
+  image: briar/ci-image-android:ubuntu-20-wine
   stage: build
   script:
-    - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-11-openjdk-amd64 --no-daemon kaptKotlin
-    - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 --no-daemon -PbuildType=nightly -x kaptKotlin packageDeb
-    - utils/finalize-deb.sh
-    - mv briar-desktop/build/compose/binaries/main/deb/briar-desktop.deb ./briar-desktop-ubuntu-18.04.deb
+    - wine --version
+    - wine uninstaller --list
+    - wget https://dl.winehq.org/wine/wine-mono/7.4.0/wine-mono-7.4.0-x86.msi
+    - wine msiexec /i wine-mono-7.4.0-x86.msi
+    - wine uninstaller --list
+    - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 --no-daemon -PbuildType=nightly
+      pinpitPackageDefaultUberJarForWindowsX64
+      pinpitPackageDefaultMsiX64
+    - ls -lrth briar-desktop/build/pinpit/jars/Briar-windows-*.jar
+    - ls -lrth briar-desktop/build/pinpit/binaries/main-default/windows/x64/msi/Briar-x64-*.msi
+    - mv briar-desktop/build/pinpit/jars/Briar-windows-*.jar ./briar-windows-desktop.jar
+    - mv briar-desktop/build/pinpit/binaries/main-default/windows/x64/msi/Briar-x64-*.msi ./Briar-Desktop.msi
   artifacts:
     paths:
-      - briar-desktop-ubuntu-18.04.deb
+      - briar-windows-desktop.jar
+      - Briar-Desktop.msi
     expire_in: 2 days
   rules:
     - if: $CI_PIPELINE_SOURCE == "schedule"
 
-rb_jar:
+rb_package_linux:
+  image: briar/ci-image-android:ubuntu-20-wine
   stage: releasebuild
   script:
-    - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-11-openjdk-amd64 --no-daemon kaptKotlin
-    - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 --no-daemon -PbuildType=beta -x kaptKotlin packageUberJarForCurrentOS
-    - mv briar-desktop/build/compose/jars/Briar-*.jar ./briar-desktop.jar
-  artifacts:
-    paths:
-      - briar-desktop.jar
-    expire_in: 2 days
-  only:
-    - tags
-
-rb_bullseye_deb:
-  stage: releasebuild
-  script:
-    - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-11-openjdk-amd64 --no-daemon kaptKotlin
-    - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 --no-daemon -PbuildType=beta -x kaptKotlin packageDeb
-    - utils/finalize-deb.sh
-    - mv briar-desktop/build/compose/binaries/main/deb/briar-desktop.deb ./briar-desktop-debian-bullseye.deb
+    - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 --no-daemon -PbuildType=beta
+      pinpitPackageDefaultUberJarForLinuxX64
+      pinpitPackageDefaultDebDebianBullseyeX64
+      pinpitPackageDefaultDebUbuntuBionicX64
+      pinpitPackageDefaultDebUbuntuFocalX64
+    - ls -lrth briar-desktop/build/pinpit/jars/Briar-linux-*.jar
+    - ls -lrth briar-desktop/build/pinpit/binaries/main-default/linux/x64/deb/briar-desktop-ubuntu-18.04-x64-*.deb
+    - ls -lrth briar-desktop/build/pinpit/binaries/main-default/linux/x64/deb/briar-desktop-ubuntu-20.04-x64-*.deb
+    - ls -lrth briar-desktop/build/pinpit/binaries/main-default/linux/x64/deb/briar-desktop-debian-bullseye-x64-*.deb
+    - mv briar-desktop/build/pinpit/jars/Briar-linux-*.jar ./briar-linux-desktop.jar
+    - mv briar-desktop/build/pinpit/binaries/main-default/linux/x64/deb/briar-desktop-ubuntu-18.04-x64-*.deb ./briar-desktop-ubuntu-18.04.deb
+    - mv briar-desktop/build/pinpit/binaries/main-default/linux/x64/deb/briar-desktop-ubuntu-20.04-x64-*.deb ./briar-desktop-ubuntu-20.04.deb
+    - mv briar-desktop/build/pinpit/binaries/main-default/linux/x64/deb/briar-desktop-debian-bullseye-x64-*.deb ./briar-desktop-debian-bullseye.deb
   artifacts:
     paths:
+      - briar-linux-desktop.jar
       - briar-desktop-debian-bullseye.deb
-    expire_in: 2 days
-  only:
-    - tags
-
-rb_20_ubuntu_deb:
-  image: briar/ci-image-android:ubuntu-20
-  stage: releasebuild
-  script:
-    - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-11-openjdk-amd64 --no-daemon kaptKotlin
-    - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 --no-daemon -PbuildType=beta -x kaptKotlin packageDeb
-    - utils/finalize-deb.sh
-    - mv briar-desktop/build/compose/binaries/main/deb/briar-desktop.deb ./briar-desktop-ubuntu-20.04.deb
-  artifacts:
-    paths:
+      - briar-desktop-ubuntu-18.04.deb
       - briar-desktop-ubuntu-20.04.deb
     expire_in: 2 days
-  only:
-    - tags
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "schedule"
 
-rb_18_ubuntu_deb:
-  image: briar/ci-image-android:ubuntu-18
+rb_package_windows:
+  image: briar/ci-image-android:ubuntu-20-wine
   stage: releasebuild
   script:
-    - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-11-openjdk-amd64 --no-daemon kaptKotlin
-    - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 --no-daemon -PbuildType=beta -x kaptKotlin packageDeb
-    - utils/finalize-deb.sh
-    - mv briar-desktop/build/compose/binaries/main/deb/briar-desktop.deb ./briar-desktop-ubuntu-18.04.deb
+    - wine --version
+    - wine uninstaller --list
+    - wget https://dl.winehq.org/wine/wine-mono/7.4.0/wine-mono-7.4.0-x86.msi
+    - wine msiexec /i wine-mono-7.4.0-x86.msi
+    - wine uninstaller --list
+    - ./gradlew -Dorg.gradle.java.home=/usr/lib/jvm/java-17-openjdk-amd64 --no-daemon -PbuildType=beta
+      pinpitPackageDefaultUberJarForWindowsX64
+      pinpitPackageDefaultMsiX64
+    - ls -lrth briar-desktop/build/pinpit/jars/Briar-windows-*.jar
+    - ls -lrth briar-desktop/build/pinpit/binaries/main-default/windows/x64/msi/Briar-x64-*.msi
+    - mv briar-desktop/build/pinpit/jars/Briar-windows-*.jar ./briar-windows-desktop.jar
+    - mv briar-desktop/build/pinpit/binaries/main-default/windows/x64/msi/Briar-x64-*.msi ./Briar-Desktop.msi
   artifacts:
     paths:
-      - briar-desktop-ubuntu-18.04.deb
+      - briar-windows-desktop.jar
+      - Briar-Desktop.msi
     expire_in: 2 days
-  only:
-    - tags
+  rules:
+    - if: $CI_PIPELINE_SOURCE == "schedule"
diff --git a/README.md b/README.md
index 2f7a24fe53..6ce7970524 100644
--- a/README.md
+++ b/README.md
@@ -79,24 +79,25 @@ composable functions without parameters which are annotated with `@Preview`.
 
 In order to build and run the application from the command line, execute this:
 
-    ./gradlew run
+    ./gradlew pinpitRun
 
 You can specify arguments to the app using the `--args` option of the
 Gradle task. For example to show the usage info:
 
-    ./gradlew run --args="--help"
+    ./gradlew pinpitRun --args="--help"
 
 To specify a different data directory and enable the debug output:
 
-    ./gradlew run --args="--debug --data-dir=/tmp/briar-tmp"
+    ./gradlew pinpitRun --args="--debug --data-dir=/tmp/briar-tmp"
 
-In case you want to build a self-contained Debian package, note that you need at least JDK 17 and that you might need to install `binutils` and `fakeroot` before running the respective task:
+In case you want to build a self-contained Debian packages and an MSI installer,
+note that you need at least JDK 17:
 
-    ./gradlew packageDeb
+    ./gradlew pinpitPackageDefault
 
 If you want to use the JDKs downloaded by Intellij IDEA, you can for example specify the path like this:
 
-    ./gradlew packageDeb -Dorg.gradle.java.home=$HOME/.jdks/openjdk-17.0.2
+    ./gradlew pinpitPackageDefault -Dorg.gradle.java.home=$HOME/.jdks/openjdk-17.0.2
 
 Take a look at [_.gitlab-ci.yml_](.gitlab-ci.yml) if you have problems with Kotlin and JDK 17.
 
diff --git a/briar-desktop/build.gradle.kts b/briar-desktop/build.gradle.kts
index 895a312416..30c1eeceba 100644
--- a/briar-desktop/build.gradle.kts
+++ b/briar-desktop/build.gradle.kts
@@ -18,19 +18,51 @@
 
 @file:Suppress("HardCodedStringLiteral")
 
-import org.jetbrains.compose.desktop.application.dsl.TargetFormat
 import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
 
 plugins {
     kotlin("jvm") version "1.7.20"
     kotlin("kapt") version "1.7.20"
     id("org.jetbrains.compose") version "1.2.1"
+    id("de.mobanisto.pinpit") version "0.2.0"
     id("java")
     id("idea")
     id("org.jlleitschuh.gradle.ktlint") version "10.1.0"
     id("org.briarproject.briar.desktop.build-data-gradle-plugin")
 }
 
+val attributeUsage = Attribute.of("org.gradle.usage", String::class.java)
+
+val currentOs: Configuration by configurations.creating {
+    extendsFrom(configurations.implementation.get())
+    attributes { attribute(attributeUsage, "java-runtime") }
+}
+
+val windowsX64: Configuration by configurations.creating {
+    extendsFrom(configurations.implementation.get())
+    attributes { attribute(attributeUsage, "java-runtime") }
+}
+
+val linuxX64: Configuration by configurations.creating {
+    extendsFrom(configurations.implementation.get())
+    attributes { attribute(attributeUsage, "java-runtime") }
+}
+
+sourceSets {
+    main {
+        java {
+            compileClasspath = currentOs
+            runtimeClasspath = currentOs
+        }
+    }
+    test {
+        java {
+            compileClasspath += currentOs
+            runtimeClasspath += currentOs
+        }
+    }
+}
+
 val versionCode = "0.3.1"
 val buildType = if (project.hasProperty("buildType")) project.properties["buildType"] else "snapshot"
 group = "app.briar.desktop"
@@ -43,7 +75,10 @@ buildData {
 }
 
 dependencies {
-    implementation(compose.desktop.currentOs)
+    currentOs(compose.desktop.currentOs)
+    windowsX64(compose.desktop.windows_x64)
+    linuxX64(compose.desktop.linux_x64)
+
     implementation(compose.materialIconsExtended)
     // needed to access Dispatchers.Swing for EventExecutor
     implementation("org.jetbrains.kotlinx:kotlinx-coroutines-swing:1.6.4")
@@ -97,20 +132,20 @@ tasks.jar {
     exclude("META-INF/BC2048KE.RSA", "META-INF/BC2048KE.SF", "META-INF/BC2048KE.DSA")
 }
 
-compose.desktop {
+pinpit.desktop {
     application {
         mainClass = "org.briarproject.briar.desktop.MainKt"
         nativeDistributions {
-            targetFormats(TargetFormat.Msi, TargetFormat.Exe, TargetFormat.Deb, TargetFormat.Rpm)
+            jvmVendor = "adoptium"
+            jvmVersion = "17.0.5+8"
+
             packageName = "Briar"
+            packageVersion = version.toString()
             description = "Secure messaging, anywhere"
             vendor = "The Briar Project"
-            copyright = "2021-2022 The Briar Project"
+            copyright = "2021-2023 The Briar Project"
             licenseFile.set(project.file("LICENSE.txt"))
             appResourcesRootDir.set(project.layout.projectDirectory.dir("src/appResources"))
-            // As described at https://github.com/JetBrains/compose-jb/tree/master/tutorials/Native_distributions_and_local_execution#configuring-included-jdk-modules
-            // the Gradle plugin does not automatically determine necessary JDK modules to ship
-            // so that we need to define required modules here:
             modules("java.sql")
             modules("java.naming")
             modules("jdk.localedata")
@@ -123,15 +158,55 @@ compose.desktop {
                 // rpm versions may not contain hyphens, so use underscore
                 rpmPackageVersion = "${versionCode}_$buildType"
                 iconFile.set(project.file("src/main/resources/images/logo_circle.png"))
+                debPreInst.set(project.file("src/packagingResources/linux/deb/preinst"))
+                debPostInst.set(project.file("src/packagingResources/linux/deb/postinst"))
+                debPreRm.set(project.file("src/packagingResources/linux/deb/prerm"))
+                debCopyright.set(project.file("src/packagingResources/linux/deb/copyright"))
+                debLauncher.set(project.file("src/packagingResources/linux/launcher.desktop"))
                 debMaintainer = "contact@briarproject.org"
                 appCategory = "comm"
                 menuGroup = "Network;Chat;InstantMessaging;"
+                deb("UbuntuFocalX64") {
+                    qualifier = "ubuntu-20.04"
+                    arch = "x64"
+                    depends(
+                        "libc6", "libexpat1", "libgcc-s1", "libpcre3", "libuuid1", "xdg-utils",
+                        "zlib1g", "libnotify4"
+                    )
+                }
+                deb("UbuntuBionicX64") {
+                    qualifier = "ubuntu-18.04"
+                    arch = "x64"
+                    depends(
+                        "libasound2", "libc6", "libexpat1", "libfontconfig1", "libfreetype6", "libgcc1",
+                        "libglib2.0-0", "libgraphite2-3", "libharfbuzz0b", "libjpeg-turbo8", "liblcms2-2",
+                        "libpcre3", "libpng16-16", "libstdc++6", "xdg-utils", "zlib1g", "libnotify4"
+                    )
+                }
+                deb("DebianBullseyeX64") {
+                    qualifier = "debian-bullseye"
+                    arch = "x64"
+                    depends(
+                        "libasound2", "libbrotli1", "libc6", "libexpat1", "libfontconfig1", "libfreetype6",
+                        "libgcc-s1", "libglib2.0-0", "libgraphite2-3", "libharfbuzz0b", "libjpeg62-turbo",
+                        "liblcms2-2", "libpcre3", "libpng16-16", "libstdc++6", "libuuid1", "xdg-utils", "zlib1g",
+                        "libnotify4"
+                    )
+                }
             }
             windows {
+                dirChooser = true
+                shortcut = true
                 iconFile.set(project.file("src/main/resources/images/logo_circle.ico"))
+                aumid = windowsAumiName
                 upgradeUuid = "cc8b40f7-f190-4cea-bfec-ceb9ef85df09"
                 // Windows doesn't support things like 'nightly' or 'release'. Only numeric versions are acceptable
                 packageVersion = versionCode
+                msi {
+                    arch = "x64"
+                    bitmapBanner.set(project.file("src/packagingResources/windows/banner.bmp"))
+                    bitmapDialog.set(project.file("src/packagingResources/windows/dialog.bmp"))
+                }
             }
         }
     }
diff --git a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt
index 600b044a04..ec27276365 100644
--- a/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt
+++ b/briar-desktop/src/main/kotlin/org/briarproject/briar/desktop/DesktopModule.kt
@@ -28,7 +28,6 @@ import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory
 import org.briarproject.bramble.plugin.tcp.LanTcpPluginFactory
 import org.briarproject.bramble.plugin.tor.UnixTorPluginFactory
 import org.briarproject.bramble.plugin.tor.WindowsTorPluginFactory
-import org.briarproject.bramble.util.OsUtils
 import org.briarproject.bramble.util.OsUtils.isLinux
 import org.briarproject.bramble.util.OsUtils.isMac
 import org.briarproject.bramble.util.OsUtils.isWindows
diff --git a/briar-desktop/src/packagingResources/linux/deb/copyright b/briar-desktop/src/packagingResources/linux/deb/copyright
new file mode 100644
index 0000000000..d972b0c698
--- /dev/null
+++ b/briar-desktop/src/packagingResources/linux/deb/copyright
@@ -0,0 +1,19 @@
+Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/
+
+Files: *
+Copyright: 2021-2023 The Briar Project
+License: AGPL-3+
+
+This program is free software: you can redistribute it and/or modify
+it under the terms of the GNU Affero General Public License as
+published by the Free Software Foundation, either version 3 of the
+License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+GNU Affero General Public License for more details.
+
+You should have received a copy of the GNU Affero General Public License
+along with this program.  If not, see <https://www.gnu.org/licenses/>.
+
diff --git a/briar-desktop/src/packagingResources/linux/postinst b/briar-desktop/src/packagingResources/linux/deb/postinst
similarity index 100%
rename from briar-desktop/src/packagingResources/linux/postinst
rename to briar-desktop/src/packagingResources/linux/deb/postinst
diff --git a/briar-desktop/src/packagingResources/linux/preinst b/briar-desktop/src/packagingResources/linux/deb/preinst
similarity index 100%
rename from briar-desktop/src/packagingResources/linux/preinst
rename to briar-desktop/src/packagingResources/linux/deb/preinst
diff --git a/briar-desktop/src/packagingResources/linux/prerm b/briar-desktop/src/packagingResources/linux/deb/prerm
similarity index 100%
rename from briar-desktop/src/packagingResources/linux/prerm
rename to briar-desktop/src/packagingResources/linux/deb/prerm
diff --git a/briar-desktop/src/packagingResources/linux/launcher.desktop b/briar-desktop/src/packagingResources/linux/launcher.desktop
new file mode 100644
index 0000000000..9692b6cd96
--- /dev/null
+++ b/briar-desktop/src/packagingResources/linux/launcher.desktop
@@ -0,0 +1,9 @@
+[Desktop Entry]
+Name=Briar
+Comment=Secure messaging, anywhere
+Exec=/opt/briar-desktop/bin/Briar
+Icon=/opt/briar-desktop/lib/Briar.png
+Terminal=false
+Type=Application
+Categories=Network;Chat;InstantMessaging;
+MimeType=
diff --git a/briar-desktop/src/packagingResources/windows/.gitignore b/briar-desktop/src/packagingResources/windows/.gitignore
new file mode 100644
index 0000000000..caa3110f57
--- /dev/null
+++ b/briar-desktop/src/packagingResources/windows/.gitignore
@@ -0,0 +1,2 @@
+banner.png
+dialog.png
diff --git a/briar-desktop/src/packagingResources/windows/banner.bmp b/briar-desktop/src/packagingResources/windows/banner.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..bb8d61eed7af07697aaab5f7e95c931f8790dc38
GIT binary patch
literal 114514
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
L2q1vKCKmV?Qw-xg

literal 0
HcmV?d00001

diff --git a/briar-desktop/src/packagingResources/windows/banner.svg b/briar-desktop/src/packagingResources/windows/banner.svg
new file mode 100644
index 0000000000..d08db597ca
--- /dev/null
+++ b/briar-desktop/src/packagingResources/windows/banner.svg
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   id="svg2"
+   sodipodi:docname="banner.svg"
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
+   width="493"
+   height="58"
+   inkscape:export-filename="banner.png"
+   inkscape:export-xdpi="96"
+   inkscape:export-ydpi="96">
+  <metadata
+     id="metadata10">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6" />
+  <sodipodi:namedview
+     id="namedview4"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     showgrid="false"
+     inkscape:zoom="1.1091666"
+     inkscape:cx="86.214987"
+     inkscape:cy="61.330774"
+     inkscape:window-width="1680"
+     inkscape:window-height="981"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg2"
+     width="493px" />
+  <style
+     id="style3"
+     type="text/css">
+	.st0{fill:#FFFFFF;}
+	.st1{display:none;fill:#87C214;}
+	.st2{fill:#87C214;}
+	.st3{display:none;fill:#FFFFFF;}
+	.st4{fill:#95D220;}
+	.st5{display:none;fill:#95D220;}
+</style>
+  <g
+     id="g838"
+     transform="matrix(0.21053343,0,0,0.21053343,427.40936,-6.2122037)"
+     style="stroke-width:4.74983931">
+    <g
+       id="g1059"
+       style="stroke-width:4.74983931">
+      <path
+         style="fill:#87c214;stroke-width:4.74983931"
+         inkscape:connector-curvature="0"
+         id="path15"
+         d="m 94.299994,145.70001 v 119.5 c 0,9.7 7.899996,17.7 17.699996,17.7 h 8.3 c 9.7,0 17.7,-8 17.7,-17.7 v -119.5 z"
+         class="st2" />
+      <path
+         style="fill:#87c214;stroke-width:4.74983931"
+         inkscape:connector-curvature="0"
+         id="path17"
+         d="m 137.99999,88.000006 v -22.5 c 0,-9.7 -8,-17.7 -17.7,-17.7 h -8.3 c -9.7,0 -17.699996,8 -17.699996,17.7 v 22.5 z"
+         class="st2" />
+      <path
+         style="fill:#87c214;stroke-width:4.74983931"
+         inkscape:connector-curvature="0"
+         id="path25"
+         d="M 234.99999,185.00001 V 65.500006 c 0,-9.7 -7.9,-17.7 -17.7,-17.7 h -8.3 c -9.7,0 -17.7,8 -17.7,17.7 V 185.00001 Z"
+         class="st2" />
+      <path
+         style="fill:#87c214;stroke-width:4.74983931"
+         inkscape:connector-curvature="0"
+         id="path29"
+         d="m 191.29999,242.70001 v 22.5 c 0,9.7 8,17.7 17.7,17.7 h 8.3 c 9.7,0 17.7,-8 17.7,-17.7 v -22.5 z"
+         class="st2" />
+      <path
+         style="fill:#95d220;stroke-width:4.74983931"
+         inkscape:connector-curvature="0"
+         id="path37"
+         d="m 87.299994,192.00001 h -22.5 c -9.7,0 -17.7,7.9 -17.7,17.7 v 8.3 c 0,9.7 7.9,17.7 17.7,17.7 h 22.5 z"
+         class="st4" />
+      <path
+         style="fill:#95d220;stroke-width:4.74983931"
+         inkscape:connector-curvature="0"
+         id="path41"
+         d="m 264.49999,192.00001 h -119.5 v 43.7 h 119.5 c 9.7,0 17.7,-8 17.7,-17.7 v -8.3 c -0.1,-9.7 -8,-17.7 -17.7,-17.7 z"
+         class="st4" />
+      <path
+         style="fill:#95d220;stroke-width:4.74983931"
+         inkscape:connector-curvature="0"
+         id="path51"
+         d="M 184.29999,95.000006 H 64.799994 c -9.7,0 -17.7,7.900004 -17.7,17.700004 v 8.3 c 0,9.7 7.9,17.7 17.7,17.7 H 184.29999 Z"
+         class="st4" />
+      <path
+         style="fill:#95d220;stroke-width:4.74983931"
+         inkscape:connector-curvature="0"
+         id="path53"
+         d="m 264.49999,95.000006 h -22.5 v 43.700004 h 22.5 c 9.7,0 17.7,-7.9 17.7,-17.7 v -8.3 c -0.1,-9.7 -8,-17.700004 -17.7,-17.700004 z"
+         class="st4" />
+    </g>
+  </g>
+</svg>
diff --git a/briar-desktop/src/packagingResources/windows/convert.sh b/briar-desktop/src/packagingResources/windows/convert.sh
new file mode 100755
index 0000000000..5cf4467d98
--- /dev/null
+++ b/briar-desktop/src/packagingResources/windows/convert.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+inkscape -C -e banner.png banner.svg
+inkscape -C -e dialog.png dialog.svg
+
+convert banner.png banner.bmp
+convert dialog.png dialog.bmp
diff --git a/briar-desktop/src/packagingResources/windows/dialog.bmp b/briar-desktop/src/packagingResources/windows/dialog.bmp
new file mode 100644
index 0000000000000000000000000000000000000000..bb764d1cb2d6daca36101a5b186da564769a833d
GIT binary patch
literal 615402
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
aAkbbw*R<&xj%^&<C)^VW5Fjuffj<MB$IdMP

literal 0
HcmV?d00001

diff --git a/briar-desktop/src/packagingResources/windows/dialog.svg b/briar-desktop/src/packagingResources/windows/dialog.svg
new file mode 100644
index 0000000000..94b7a0e41b
--- /dev/null
+++ b/briar-desktop/src/packagingResources/windows/dialog.svg
@@ -0,0 +1,169 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   id="svg2"
+   sodipodi:docname="dialog.svg"
+   inkscape:version="0.92.5 (2060ec1f9f, 2020-04-08)"
+   width="493"
+   height="312"
+   inkscape:export-filename="dialog.png"
+   inkscape:export-xdpi="96"
+   inkscape:export-ydpi="96">
+  <metadata
+     id="metadata13">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6">
+    <linearGradient
+       inkscape:collect="always"
+       id="linearGradient1123">
+      <stop
+         style="stop-color:#0044aa;stop-opacity:1;"
+         offset="0"
+         id="stop1119" />
+      <stop
+         style="stop-color:#79f344;stop-opacity:1"
+         offset="1"
+         id="stop1121" />
+    </linearGradient>
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient1123"
+       id="linearGradient1125"
+       x1="434.21234"
+       y1="27.777527"
+       x2="487.01492"
+       y2="27.777527"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(-345.06367,-2.4622972)" />
+  </defs>
+  <sodipodi:namedview
+     id="namedview4"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageshadow="2"
+     inkscape:pageopacity="0.0"
+     inkscape:pagecheckerboard="0"
+     showgrid="false"
+     inkscape:zoom="0.55458332"
+     inkscape:cx="-336.80909"
+     inkscape:cy="233.53699"
+     inkscape:window-width="1680"
+     inkscape:window-height="981"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg2"
+     width="493px"
+     inkscape:snap-page="true"
+     inkscape:snap-global="false" />
+  <path
+     sodipodi:type="star"
+     style="fill:url(#linearGradient1125);fill-opacity:1"
+     id="path957"
+     inkscape:flatsided="false"
+     sodipodi:sides="5"
+     sodipodi:cx="115.33324"
+     sodipodi:cy="27.759957"
+     sodipodi:r1="27.768814"
+     sodipodi:r2="13.884408"
+     sodipodi:arg1="0.96773607"
+     sodipodi:arg2="1.5960546"
+     inkscape:rounded="0"
+     inkscape:randomized="0"
+     d="M 131.08275,50.630457 114.98258,41.639936 98.448966,49.806009 102.02423,31.715609 89.148668,18.514665 107.45848,16.324705 116.03455,-2.1839437e-7 123.77537,16.736929 l 18.17587,3.111722 -13.52572,12.533951 z"
+     inkscape:transform-center-x="-0.21671913"
+     inkscape:transform-center-y="-2.4447277" />
+  <rect
+     style="fill:#2e3d4f;stroke-width:0.83427;fill-opacity:1"
+     id="rect859"
+     width="164"
+     height="312"
+     x="0"
+     y="0" />
+  <style
+     id="style3"
+     type="text/css">
+	.st0{fill:#FFFFFF;}
+	.st1{display:none;fill:#87C214;}
+	.st2{fill:#87C214;}
+	.st3{display:none;fill:#FFFFFF;}
+	.st4{fill:#95D220;}
+	.st5{display:none;fill:#95D220;}
+</style>
+  <g
+     id="g844"
+     transform="matrix(0.22810234,0,0,0.22810234,78.267585,8.31882)"
+     style="stroke-width:4.38399696">
+    <g
+       id="g1059"
+       style="stroke-width:4.38399696">
+      <path
+         style="fill:#87c214;stroke-width:4.38399696"
+         inkscape:connector-curvature="0"
+         id="path15"
+         d="m 94.299994,145.70001 v 119.5 c 0,9.7 7.899996,17.7 17.699996,17.7 h 8.3 c 9.7,0 17.7,-8 17.7,-17.7 v -119.5 z"
+         class="st2" />
+      <path
+         style="fill:#87c214;stroke-width:4.38399696"
+         inkscape:connector-curvature="0"
+         id="path17"
+         d="m 137.99999,88.000006 v -22.5 c 0,-9.7 -8,-17.7 -17.7,-17.7 h -8.3 c -9.7,0 -17.699996,8 -17.699996,17.7 v 22.5 z"
+         class="st2" />
+      <path
+         style="fill:#87c214;stroke-width:4.38399696"
+         inkscape:connector-curvature="0"
+         id="path25"
+         d="M 234.99999,185.00001 V 65.500006 c 0,-9.7 -7.9,-17.7 -17.7,-17.7 h -8.3 c -9.7,0 -17.7,8 -17.7,17.7 V 185.00001 Z"
+         class="st2" />
+      <path
+         style="fill:#87c214;stroke-width:4.38399696"
+         inkscape:connector-curvature="0"
+         id="path29"
+         d="m 191.29999,242.70001 v 22.5 c 0,9.7 8,17.7 17.7,17.7 h 8.3 c 9.7,0 17.7,-8 17.7,-17.7 v -22.5 z"
+         class="st2" />
+      <path
+         style="fill:#95d220;stroke-width:4.38399696"
+         inkscape:connector-curvature="0"
+         id="path37"
+         d="m 87.299994,192.00001 h -22.5 c -9.7,0 -17.7,7.9 -17.7,17.7 v 8.3 c 0,9.7 7.9,17.7 17.7,17.7 h 22.5 z"
+         class="st4" />
+      <path
+         style="fill:#95d220;stroke-width:4.38399696"
+         inkscape:connector-curvature="0"
+         id="path41"
+         d="m 264.49999,192.00001 h -119.5 v 43.7 h 119.5 c 9.7,0 17.7,-8 17.7,-17.7 v -8.3 c -0.1,-9.7 -8,-17.7 -17.7,-17.7 z"
+         class="st4" />
+      <path
+         style="fill:#95d220;stroke-width:4.38399696"
+         inkscape:connector-curvature="0"
+         id="path51"
+         d="M 184.29999,95.000006 H 64.799994 c -9.7,0 -17.7,7.900004 -17.7,17.700004 v 8.3 c 0,9.7 7.9,17.7 17.7,17.7 H 184.29999 Z"
+         class="st4" />
+      <path
+         style="fill:#95d220;stroke-width:4.38399696"
+         inkscape:connector-curvature="0"
+         id="path53"
+         d="m 264.49999,95.000006 h -22.5 v 43.700004 h 22.5 c 9.7,0 17.7,-7.9 17.7,-17.7 v -8.3 c -0.1,-9.7 -8,-17.700004 -17.7,-17.700004 z"
+         class="st4" />
+    </g>
+  </g>
+</svg>
diff --git a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/DesktopTestModule.kt b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/DesktopTestModule.kt
index 900c303a95..0d181915e4 100644
--- a/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/DesktopTestModule.kt
+++ b/briar-desktop/src/test/kotlin/org/briarproject/briar/desktop/DesktopTestModule.kt
@@ -28,7 +28,6 @@ import org.briarproject.bramble.api.plugin.simplex.SimplexPluginFactory
 import org.briarproject.bramble.plugin.tcp.TestLanTcpPluginFactory
 import org.briarproject.bramble.plugin.tor.UnixTorPluginFactory
 import org.briarproject.bramble.plugin.tor.WindowsTorPluginFactory
-import org.briarproject.bramble.util.OsUtils
 import org.briarproject.bramble.util.OsUtils.isLinux
 import org.briarproject.bramble.util.OsUtils.isMac
 import org.briarproject.bramble.util.OsUtils.isWindows
diff --git a/gradle.properties b/gradle.properties
index 7a18ef373c..1da405e029 100644
--- a/gradle.properties
+++ b/gradle.properties
@@ -1,3 +1,2 @@
 kotlin.code.style=official
 org.gradle.jvmargs=--add-opens=java.base/java.io=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.code=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.comp=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.jvm=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.main=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.parser=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.processing=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.tree=ALL-UNNAMED --add-opens=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED
-org.gradle.jvmargs=-Xmx2g
diff --git a/utils/finalize-deb.sh b/utils/finalize-deb.sh
deleted file mode 100755
index 511448c6f8..0000000000
--- a/utils/finalize-deb.sh
+++ /dev/null
@@ -1,24 +0,0 @@
-#!/bin/bash
-
-# A script for manually adding files to the produced .deb files.
-# https://unix.stackexchange.com/a/138190
-
-set -ex
-
-DIR=$(dirname $0)
-REPO="$DIR/.."
-
-cd "$REPO/briar-desktop/build/compose/binaries/main/deb"
-
-cp ./briar-desktop_*.deb briar-desktop.original.deb
-
-fakeroot sh -c '
-  mkdir tmp
-  dpkg-deb -R briar-desktop.original.deb tmp
-  cp ../../../../../src/packagingResources/linux/postinst tmp/DEBIAN/postinst
-  cp ../../../../../src/packagingResources/linux/preinst tmp/DEBIAN/preinst
-  cp ../../../../../src/packagingResources/linux/prerm tmp/DEBIAN/prerm
-  sed -i "/Depends:/s/$/, libnotify4/" tmp/DEBIAN/control
-  dpkg-deb -b tmp briar-desktop.deb
-  rm -r tmp
-'
-- 
GitLab