Skip to content

Commit 77297e4

Browse files
committed
Fix scripts on linux, more consolidation
1 parent 7d519ad commit 77297e4

38 files changed

+158
-85
lines changed

ant/linux/installer.xml

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,10 +32,6 @@
3232
<include name="**/${project.filename}"/>
3333
<include name="**/install"/>
3434
<include name="**/uninstall"/>
35-
<include name="provision/*"/>
36-
<exclude name="provision/*.crt"/>
37-
<exclude name="provision/*.txt"/>
38-
<exclude name="provision/*.json"/>
3935
</fileset>
4036
</chmod>
4137

src/org/jdesktop/swinghelper/tray/JXTrayIcon.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919

2020
package org.jdesktop.swinghelper.tray;
2121

22-
import com.github.zafarkhaja.semver.Version;
2322
import qz.common.Constants;
2423
import qz.utils.MacUtilities;
2524
import qz.utils.SystemUtilities;
@@ -162,7 +161,7 @@ public void actionPerformed(ActionEvent e) {
162161
@Override
163162
public Dimension getSize() {
164163
Dimension iconSize = new Dimension(super.getSize());
165-
switch(SystemUtilities.getOsType()) {
164+
switch(SystemUtilities.getOs()) {
166165
// macOS icons are slightly smaller than the size reported
167166
case MAC:
168167
// Handle retina display

src/qz/build/JLink.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,10 @@
1515
import org.apache.commons.lang3.StringUtils;
1616
import org.apache.logging.log4j.LogManager;
1717
import org.apache.logging.log4j.Logger;
18-
import qz.build.jlink.Arch;
1918
import qz.build.jlink.Platform;
2019
import qz.build.jlink.Vendor;
2120
import qz.build.jlink.Url;
21+
import qz.build.provision.params.Arch;
2222
import qz.common.Constants;
2323
import qz.utils.*;
2424

@@ -60,7 +60,7 @@ public class JLink {
6060

6161
public JLink(String targetPlatform, String targetArch, String javaVendor, String javaVersion, String gcEngine, String gcVersion, String targetJdk) throws IOException {
6262
this.hostPlatform = Platform.getCurrentPlatform();
63-
this.hostArch = Arch.getCurrentArch();
63+
this.hostArch = SystemUtilities.getArch();
6464

6565
this.targetPlatform = Platform.parse(targetPlatform, this.hostPlatform);
6666
this.targetArch = Arch.parse(targetArch, this.hostArch);
@@ -150,7 +150,7 @@ private String downloadJdk(Arch arch, Platform platform) throws IOException {
150150
String url = new Url(this.javaVendor).format(arch, platform, this.gcEngine, this.javaSemver, this.javaVersion, this.gcVersion);
151151

152152
// Saves to out e.g. "out/jlink/jdk-AdoptOpenjdk-amd64-platform-11_0_7"
153-
String extractedJdk = new Fetcher(String.format("jlink/jdk-%s-%s-%s-%s", javaVendor.value(), arch.value(), platform.value(), javaSemver.toString().replaceAll("\\+", "_")), url)
153+
String extractedJdk = new Fetcher(String.format("jlink/jdk-%s-%s-%s-%s", javaVendor.value(), arch, platform.value(), javaSemver.toString().replaceAll("\\+", "_")), url)
154154
.fetch()
155155
.uncompress();
156156

src/qz/build/jlink/Arch.java

Lines changed: 0 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +0,0 @@
1-
package qz.build.jlink;
2-
3-
/**
4-
* Handling of architectures
5-
*/
6-
public enum Arch implements Parsable {
7-
AMD64("amd64", "x86_64", "x64"),
8-
AARCH64("aarch64", "arm64");
9-
10-
public final String[] matches;
11-
Arch(String ... matches) { this.matches = matches; }
12-
13-
public static Arch parse(String value, Arch fallback) {
14-
return Parsable.parse(Arch.class, value, fallback);
15-
}
16-
17-
public static Arch parse(String value) {
18-
return Parsable.parse(Arch.class, value);
19-
}
20-
21-
public static Arch getCurrentArch() {
22-
return Parsable.parse(Arch.class, System.getProperty("os.arch"));
23-
}
24-
}

src/qz/build/jlink/Platform.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public static Platform parse(String value) {
2424
}
2525

2626
public static Platform getCurrentPlatform() {
27-
switch(SystemUtilities.getOsType()) {
27+
switch(SystemUtilities.getOs()) {
2828
case MAC:
2929
return Platform.MAC;
3030
case WINDOWS:

src/qz/build/jlink/Url.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.github.zafarkhaja.semver.Version;
44
import org.apache.logging.log4j.LogManager;
55
import org.apache.logging.log4j.Logger;
6+
import qz.build.provision.params.Arch;
67

78
import java.io.UnsupportedEncodingException;
89
import java.net.URLEncoder;

src/qz/build/jlink/Vendor.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package qz.build.jlink;
22

33
import com.github.zafarkhaja.semver.Version;
4-
import qz.build.JLink;
4+
import qz.build.provision.params.Arch;
55

66
/**
77
* Handling of java vendors
@@ -47,7 +47,7 @@ public String getUrlArch(Arch arch) {
4747
case AARCH64:
4848
// All vendors seem to use "aarch64" universally
4949
return "aarch64";
50-
case AMD64:
50+
case X86_64:
5151
switch(this) {
5252
// BellSoft uses "amd64"
5353
case BELLSOFT:

src/qz/build/provision/ProvisionBuilder.java

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
import qz.build.provision.params.Arch;
1111
import qz.build.provision.params.Os;
1212
import qz.build.provision.params.Type;
13+
import qz.build.provision.params.types.Script;
14+
import qz.build.provision.params.types.Software;
1315
import qz.common.Constants;
1416
import qz.utils.SystemUtilities;
1517

@@ -23,7 +25,7 @@ public class ProvisionBuilder {
2325
protected static final Logger log = LogManager.getLogger(ProvisionBuilder.class);
2426

2527
public static final Path BUILD_PROVISION_FOLDER = SystemUtilities.getJarParentPath().resolve(Constants.PROVISION_DIR);
26-
public static final File BUILD_PROVISION_FILE = BUILD_PROVISION_FOLDER.resolve("provision.json").toFile();
28+
public static final File BUILD_PROVISION_FILE = BUILD_PROVISION_FOLDER.resolve(Constants.PROVISION_FILE).toFile();
2729

2830
private File ingestFile;
2931
private JSONArray jsonSteps;

src/qz/build/provision/Step.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ public JSONObject toJSON() throws JSONException {
7979
.put("data", data);
8080

8181
for(int i = 0; i < args.size(); i++) {
82-
json.put(String.format("arg%s", ++i), args.get(i));
82+
json.put(String.format("arg%s", i + 1), args.get(i));
8383
}
8484
return json;
8585
}

src/qz/build/provision/params/Arch.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,11 @@ public static HashSet<Arch> parse(String input) {
3636
return EnumParser.parseSet(Arch.class, Arch.ALL, input);
3737
}
3838

39+
public static Arch parse(String input, Arch fallback) {
40+
Arch found = bestMatch(input);
41+
return found == UNKNOWN ? fallback : found;
42+
}
43+
3944
public static Arch bestMatch(String input) {
4045
if(input != null) {
4146
for(Arch arch : values()) {

src/qz/build/provision/params/EnumParser.java

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,27 @@ public interface EnumParser {
99
*/
1010

1111
static <T extends Enum<T>> T parse(Class<T> clazz, String s) {
12-
for(T en : EnumSet.allOf(clazz)){
13-
if(en.name().equalsIgnoreCase(s)){
14-
return en;
12+
if(s != null) {
13+
for(T en : EnumSet.allOf(clazz)){
14+
if(en.name().equalsIgnoreCase(s)){
15+
return en;
16+
}
1517
}
1618
}
1719
return null;
1820
}
1921

22+
static <T extends Enum<T>> T parse(Class<T> clazz, String s, T fallbackValue) {
23+
if(s != null) {
24+
for(T en : EnumSet.allOf(clazz)) {
25+
if (en.name().equalsIgnoreCase(s)) {
26+
return en;
27+
}
28+
}
29+
}
30+
return fallbackValue;
31+
}
32+
2033
static <T extends Enum<T>> T parseStrict(Class<T> clazz, String s, T ... blocklist) throws UnsupportedOperationException {
2134
if(s != null) {
2235
HashSet<T> matched = parseSet(clazz, null, s);
@@ -55,6 +68,4 @@ static <T extends Enum<T>> HashSet<T> parseSet(Class<T> clazz, T all, String s)
5568
}
5669
return matched;
5770
}
58-
59-
// TODO: Add HashSet<T> parseSet(Class<T> clazz, String s) support for Os, Arch
6071
}

src/qz/build/provision/params/Os.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public boolean matches(HashSet<Os> osList) {
2222

2323
public static boolean matchesHost(HashSet<Os> osList) {
2424
for(Os os : osList) {
25-
if(os == SystemUtilities.getOsType() || os == ALL) {
25+
if(os == SystemUtilities.getOs() || os == ALL) {
2626
return true;
2727
}
2828
}

src/qz/build/provision/params/types/Script.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import qz.build.provision.params.EnumParser;
44

5+
import java.nio.file.Path;
56
import java.util.Locale;
67

78
public enum Script {
@@ -24,6 +25,10 @@ public static Script parse(String input) {
2425
return null;
2526
}
2627

28+
public static Script parse(Path path) {
29+
return parse(path.toAbsolutePath().toString());
30+
}
31+
2732
@Override
2833
public String toString() {
2934
return super.toString().toLowerCase(Locale.ENGLISH);

src/qz/build/provision/params/types/Software.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import qz.build.provision.params.EnumParser;
44
import qz.build.provision.params.Os;
55

6+
import java.nio.file.Path;
67
import java.util.*;
78

89
public enum Software {
@@ -14,13 +15,11 @@ public enum Software {
1415
UNKNOWN;
1516

1617
public static Software parse(String input) {
17-
if(input != null) {
18-
if(input.contains(".")) {
19-
String extension = input.substring(input.lastIndexOf(".") + 1);
20-
return EnumParser.parse(Software.class, extension);
21-
}
22-
}
23-
return UNKNOWN;
18+
return EnumParser.parse(Software.class, input, UNKNOWN);
19+
}
20+
21+
public static Software parse(Path path) {
22+
return parse(path.toString());
2423
}
2524

2625
public static List<String> parseArgs(String input) {

src/qz/common/AboutInfo.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ private static JSONObject environment() throws JSONException {
9292
environment
9393
.put("os", SystemUtilities.getOsDisplayName())
9494
.put("os version", SystemUtilities.getOsDisplayVersion())
95-
.put("java", String.format("%s (%s)", Constants.JAVA_VERSION, SystemUtilities.getJreArch().toString().toLowerCase()))
95+
.put("java", String.format("%s (%s)", Constants.JAVA_VERSION, SystemUtilities.getArch().toString().toLowerCase()))
9696
.put("java (location)", System.getProperty("java.home"))
9797
.put("java (vendor)", Constants.JAVA_VENDOR)
9898
.put("uptime", DurationFormatUtils.formatDurationWords(uptime, true, false))

src/qz/common/Constants.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ public class Constants {
7575
public static final String OVERRIDE_CERT = "override.crt";
7676
public static final String WHITELIST_CERT_DIR = "whitelist";
7777
public static final String PROVISION_DIR = "provision";
78+
public static final String PROVISION_FILE = "provision.json";
7879

7980
public static final String SIGNING_PRIVATE_KEY = "private-key.pem";
8081
public static final String SIGNING_CERTIFICATE = "digital-certificate.txt";

src/qz/common/TrayManager.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -115,7 +115,7 @@ public TrayManager(boolean isHeadless) {
115115
iconCache = new IconCache();
116116

117117
if (SystemUtilities.isSystemTraySupported(headless)) { // UI mode with tray
118-
switch(SystemUtilities.getOsType()) {
118+
switch(SystemUtilities.getOs()) {
119119
case WINDOWS:
120120
tray = TrayType.JX.init(iconCache);
121121
// Undocumented HiDPI behavior

src/qz/installer/Installer.java

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ public enum PrivilegeLevel {
6161

6262
public static Installer getInstance() {
6363
if(instance == null) {
64-
switch(SystemUtilities.getOsType()) {
64+
switch(SystemUtilities.getOs()) {
6565
case WINDOWS:
6666
instance = new WindowsInstaller();
6767
break;
@@ -131,7 +131,10 @@ public Installer deployApp() throws IOException {
131131
// Note: preserveFileDate=false per https://github.com/qzind/tray/issues/1011
132132
FileUtils.copyDirectory(src.toFile(), dest.toFile(), false);
133133
FileUtilities.setPermissionsRecursively(dest, false);
134-
134+
// Fix permissions for provisioned files
135+
FileUtilities.setExecutableRecursively(SystemUtilities.isMac() ?
136+
dest.resolve("Contents/Resources").resolve(PROVISION_DIR) :
137+
dest.resolve(PROVISION_DIR), false);
135138
if(!SystemUtilities.isWindows()) {
136139
setExecutable(SystemUtilities.isMac() ? "Contents/Resources/uninstall" : "uninstall");
137140
setExecutable(SystemUtilities.isMac() ? "Contents/MacOS/" + ABOUT_TITLE : PROPS_FILE);
@@ -284,7 +287,9 @@ public CertificateManager certGen(boolean forceNew, String... hostNames) throws
284287
}
285288

286289
// Add provisioning steps that come after certgen
287-
invokeProvisioning(Phase.CERTGEN);
290+
if(SystemUtilities.isAdmin()) {
291+
invokeProvisioning(Phase.CERTGEN);
292+
}
288293

289294
return certificateManager;
290295
}

src/qz/installer/certificate/NativeCertificateInstaller.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public static NativeCertificateInstaller getInstance() {
3434
}
3535
public static NativeCertificateInstaller getInstance(Installer.PrivilegeLevel type) {
3636
if (instance == null) {
37-
switch(SystemUtilities.getOsType()) {
37+
switch(SystemUtilities.getOs()) {
3838
case WINDOWS:
3939
instance = new WindowsCertificateInstaller(type);
4040
break;

src/qz/installer/certificate/firefox/locator/AppLocator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ public static AppLocator getInstance() {
7474
}
7575

7676
private static AppLocator getPlatformSpecificAppLocator() {
77-
switch(SystemUtilities.getOsType()) {
77+
switch(SystemUtilities.getOs()) {
7878
case WINDOWS:
7979
return new WindowsAppLocator();
8080
case MAC:

src/qz/installer/provision/ProvisionInstaller.java

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,44 @@
1010
import qz.build.provision.Step;
1111
import qz.build.provision.params.Os;
1212
import qz.build.provision.params.Phase;
13-
import qz.installer.provision.types.*;
13+
import qz.build.provision.params.types.Script;
14+
import qz.build.provision.params.types.Software;
15+
import qz.common.Constants;
16+
import qz.installer.provision.invoker.*;
17+
import qz.utils.FileUtilities;
18+
import qz.utils.ShellUtilities;
19+
import qz.utils.SystemUtilities;
1420

1521
import java.io.File;
1622
import java.io.IOException;
1723
import java.io.InputStream;
1824
import java.nio.charset.StandardCharsets;
1925
import java.nio.file.Path;
2026
import java.util.ArrayList;
27+
import java.util.Arrays;
2128

2229
public class ProvisionInstaller {
2330
protected static final Logger log = LogManager.getLogger(ProvisionInstaller.class);
2431
private ArrayList<Step> steps;
2532

33+
static {
34+
// Populate variables for scripting environment
35+
ArrayList<String> envp = new ArrayList(Arrays.asList(ShellUtilities.envp));
36+
envp.add("APP_TITLE=" + Constants.ABOUT_TITLE);
37+
envp.add("APP_VERSION=" + Constants.VERSION);
38+
envp.add("APP_ABBREV=" + Constants.PROPS_FILE);
39+
envp.add("APP_VENDOR=" + Constants.ABOUT_COMPANY);
40+
envp.add("APP_VENDOR_ABBREV=" + Constants.DATA_DIR);
41+
envp.add("APP_ARCH=" + SystemUtilities.getArch());
42+
envp.add("APP_OS=" + SystemUtilities.getOs());
43+
envp.add("APP_DIR=" + SystemUtilities.getAppPath());
44+
envp.add("APP_USER_DIR=" + FileUtilities.USER_DIR);
45+
envp.add("APP_SHARED_DIR=" + FileUtilities.SHARED_DIR);
46+
ShellUtilities.envp = envp.toArray(new String[envp.size()]);
47+
}
48+
2649
public ProvisionInstaller(Path relativePath) throws IOException, JSONException {
27-
this(relativePath, relativePath.resolve("provision.json").toFile());
50+
this(relativePath, relativePath.resolve(Constants.PROVISION_FILE).toFile());
2851
}
2952

3053
public ProvisionInstaller(Path relativePath, File jsonFile) throws IOException, JSONException {
@@ -119,4 +142,8 @@ private static ArrayList<Step> parse(JSONArray jsonArray, Object relativeObject)
119142
}
120143
return steps;
121144
}
145+
146+
public static boolean shouldBeExecutable(Path path) {
147+
return Script.parse(path) != null || Software.parse(path) != Software.UNKNOWN;
148+
}
122149
}

src/qz/installer/provision/types/CertInvoker.java renamed to src/qz/installer/provision/invoker/CertInvoker.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package qz.installer.provision.types;
1+
package qz.installer.provision.invoker;
22

33
import qz.build.provision.Step;
44
import qz.common.Constants;

src/qz/installer/provision/types/Invokable.java renamed to src/qz/installer/provision/invoker/Invokable.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package qz.installer.provision.types;
1+
package qz.installer.provision.invoker;
22

33
import org.apache.logging.log4j.LogManager;
44
import org.apache.logging.log4j.Logger;

src/qz/installer/provision/types/InvokableResource.java renamed to src/qz/installer/provision/invoker/InvokableResource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package qz.installer.provision.types;
1+
package qz.installer.provision.invoker;
22

33
import org.apache.commons.io.IOUtils;
44
import org.apache.logging.log4j.LogManager;

0 commit comments

Comments
 (0)