/* * Copyright (c) 2021 William Hubbard. All Rights Reserved. */ import org.apache.tools.ant.taskdefs.condition.Os import java.util.stream.Stream plugins { id 'java' id "de.undercouch.download" version "4.1.2" } configurations { addon { canBeConsumed = false canBeResolved = true } } // In this section you declare where to find the dependencies of your project repositories { mavenCentral() def mozilla = ivy { url 'https://download-installer.cdn.mozilla.net/' patternLayout { artifact '/pub/[module]/releases/[revision]/[classifier]/en-US/firefox-[revision].[ext]' artifact '/pub/[module]/releases/[revision]/[classifier]/en-US/Firefox [revision].[ext]' artifact '/pub/[module]/releases/[revision]/[classifier]/en-US/Firefox Setup [revision].[ext]' } metadataSources { artifact() } } flatDir { dirs new File(rootDir, 'libs') } exclusiveContent { forRepositories(mozilla) filter { includeGroup("firefox") } } } def firefox_module = "devedition" def firefox_revision = "92.0b7" abstract class InstallBrowserTask extends DefaultTask { @OutputFile final abstract DirectoryProperty installation = project.objects.directoryProperty() } dependencies { implementation 'org.slf4j:slf4j-api:1.7.30' implementation 'org.apache.logging.log4j:log4j-api:2.13.3' implementation 'org.apache.logging.log4j:log4j-core:2.13.3' implementation 'org.apache.logging.log4j:log4j-slf4j-impl:2.13.3' implementation project(":browserCommands") addon project(path: ":add-on", configuration: 'addonBuild') } task downloadWindows_x86_64(type: Download) { src "https://download-installer.cdn.mozilla.net/pub/${firefox_module}/releases/${firefox_revision}/win64/en-US/Firefox%20Setup%20${firefox_revision}.msi" dest layout.buildDirectory.file("installer.msi") overwrite false onlyIfModified true } task downloadWindows_x86(type: Download) { src "https://download-installer.cdn.mozilla.net/pub/${firefox_module}/releases/${firefox_revision}/win32/en-US/Firefox%20Setup%20${firefox_revision}.msi" dest layout.buildDirectory.file("installer.msi") overwrite false onlyIfModified true } task downloadLinux_x86_64(type: Download) { src "https://download-installer.cdn.mozilla.net/pub/${firefox_module}/releases/${firefox_revision}/linux-x86_64/en-US/firefox-${firefox_revision}.tar.bz2" dest layout.buildDirectory.file("installer.tar.bz2") overwrite false onlyIfModified true } task downloadLinux_i686(type: Download) { src "https://download-installer.cdn.mozilla.net/pub/${firefox_module}/releases/${firefox_revision}/linux-i686/en-US/firefox-${firefox_revision}.tar.bz2" dest layout.buildDirectory.file("installer.tar.bz2") overwrite false onlyIfModified true } task installWindows_x86_64(dependsOn: downloadWindows_x86_64, type: Exec) { workingDir layout.buildDirectory commandLine 'msiexec', '/i', '"' + downloadWindows_x86_64.dest + '"', '/li', '"install.log"', '/qb', "INSTALL_DIRECTORY_PATH=\"$rootDir\\firefox\"", 'TASKBAR_SHORTCUT=false', 'DESKTOP_SHORTCUT=false', 'INSTALL_MAINTENANCE_SERVICE=false' it.outputs.dir("$rootDir\\firefox") } //installWindows_x86_64.onlyIf { !layout.buildDirectory.file("browser/firefox.exe").get().asFile.exists() } installWindows_x86_64.doFirst { println "Administrator privileges needed for installing Firefox. Please confirm on the popup." } task installWindows_x86(dependsOn: downloadWindows_x86, type: Exec) { workingDir layout.buildDirectory commandLine 'msiexec', '/i', '"' + downloadWindows_x86.dest + '"', '/li', '"install.log"', '/qb', "INSTALL_DIRECTORY_PATH=\"$rootDir/firefox\"", 'TASKBAR_SHORTCUT=false', 'DESKTOP_SHORTCUT=false', 'INSTALL_MAINTENANCE_SERVICE=false' it.outputs.dir("$rootDir\\firefox") } //installWindows_x86.onlyIf { !layout.buildDirectory.file("browser/firefox.exe").get().asFile.exists() } installWindows_x86.doFirst { println "Administrator privileges needed for installing Firefox. Please confirm on the popup." } task deleteFirefoxWindows(type: Delete) { delete "$rootDir/firefox" } task uninstallFirefoxWindows(type: Exec) { workingDir layout.buildDirectory commandLine 'cmd', '/c', "$rootDir\\firefox\\uninstall\\helper.exe", '/S' } uninstallFirefoxWindows.onlyIf { new File("$rootDir/firefox/firefox.exe").exists() } uninstallFirefoxWindows.doFirst { println "Administrator privileges needed for uninstalling Firefox. Please confirm on the popup." } uninstallFirefoxWindows.finalizedBy deleteFirefoxWindows task installLinux_x86_64(dependsOn: downloadLinux_x86_64, type: Copy) { from(tarTree(downloadLinux_x86_64.dest)) { include "firefox/**" eachFile { fcd -> fcd.relativePath = new RelativePath(true, fcd.relativePath.segments.drop(1)) } } into "$rootDir/firefox" // outputs.dir(new File(rootDir, "firefox")) } task installLinux_i686(dependsOn: downloadLinux_i686, type: Copy) { from(tarTree(downloadLinux_i686.dest)) { include "firefox/**" eachFile { fcd -> fcd.relativePath = new RelativePath(true, fcd.relativePath.segments.drop(1)) } } into "$rootDir/firefox" outputs.dir("$rootDir/firefox") } task installFirefox() { if (Os.isFamily(Os.FAMILY_WINDOWS)) { if (Os.isArch("x86_64") || Os.isArch("amd64")) { print("Windows x86_64") dependsOn installWindows_x86_64 outputs.dir(installWindows_x86_64.getOutputs()) } else if (Os.isArch("x86") || Os.isArch("i386") || Os.isArch("i686")) { print("Windows x86") dependsOn installWindows_x86 outputs.dir(installWindows_x86.getOutputs()) } else { printf("Unknown windows architecture %s!\n", System.getProperty("os.arch")) } } else if (Os.isFamily(Os.FAMILY_MAC)) { print("Mac") processResources.finalizedBy { api "firefox:devedition:92.0b7:mac@dmg" } } else if (Os.isFamily(Os.FAMILY_UNIX)) { if (Os.isArch("x86_64") || Os.isArch("amd64")) { dependsOn installLinux_x86_64 outputs.dir(installLinux_x86_64.getOutputs().getFiles().getSingleFile()) } else if (Os.isArch("x86") || Os.isArch("i386") || Os.isArch("i686")) { dependsOn installLinux_i686 outputs.dir(installLinux_i686.getOutputs()) } else { printf("Unknown Linux architecture %s!\n", System.getProperty("os.arch")) } } else { printf("Unknown operating system %s!\n", System.getProperty("os.name")) } onlyIf { return !new File(rootDir, 'firefox').isDirectory() } } task setupProfile { dependsOn installFirefox doFirst { for (File file : installFirefox.getOutputs().getFiles().getFiles()) { println file } mkdir "${installFirefox.getOutputs().getFiles().getSingleFile()}/distribution" mkdir "${installFirefox.getOutputs().getFiles().getSingleFile()}/distribution/extensions" } doLast { println "Setting up profile!" } } task movePolicies(type: Copy) { dependsOn setupProfile from files("browserConf") into "$rootDir/firefox/" doLast { println "Making policies firefox!" } } task installAddons(type: Copy) { dependsOn setupProfile dependsOn configurations.addon from configurations.addon.resolve() into "${installFirefox.getOutputs().getFiles().getSingleFile()}/distribution/extensions" doFirst { println "Installing addons!" } } tasks.named('clean') { dependsOn uninstallFirefoxWindows } println configurations.getNames() compileJava.dependsOn installAddons compileJava.dependsOn movePolicies