Sun, 30 Nov 2025 10:14:33 +0100
run compiler detection before trying to correct libdir + check TOOLCHAIN_WSIZE before setting 64bit libdir
|
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
1 | package de.unixwork.uwproj; |
|
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
2 | |
|
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
3 | import org.apache.velocity.VelocityContext; |
|
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
4 | import org.apache.velocity.app.VelocityEngine; |
|
112
206e91a8dd18
validation errors contain line and column number
Mike Becker <universe@uap-core.de>
parents:
109
diff
changeset
|
5 | import org.xml.sax.SAXParseException; |
|
39
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
6 | |
|
109
1e852be12654
adds schema validation - fixes #291
Mike Becker <universe@uap-core.de>
parents:
93
diff
changeset
|
7 | import javax.xml.XMLConstants; |
|
1e852be12654
adds schema validation - fixes #291
Mike Becker <universe@uap-core.de>
parents:
93
diff
changeset
|
8 | import javax.xml.parsers.DocumentBuilderFactory; |
|
1e852be12654
adds schema validation - fixes #291
Mike Becker <universe@uap-core.de>
parents:
93
diff
changeset
|
9 | import javax.xml.transform.stream.StreamSource; |
|
1e852be12654
adds schema validation - fixes #291
Mike Becker <universe@uap-core.de>
parents:
93
diff
changeset
|
10 | import javax.xml.validation.SchemaFactory; |
|
39
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
11 | import java.io.*; |
|
93
df47e083139b
fix that a broken configure file is left over when something goes wrong
Mike Becker <universe@uap-core.de>
parents:
90
diff
changeset
|
12 | import java.nio.file.Files; |
|
df47e083139b
fix that a broken configure file is left over when something goes wrong
Mike Becker <universe@uap-core.de>
parents:
90
diff
changeset
|
13 | import java.nio.file.Path; |
|
df47e083139b
fix that a broken configure file is left over when something goes wrong
Mike Becker <universe@uap-core.de>
parents:
90
diff
changeset
|
14 | import java.nio.file.Paths; |
|
df47e083139b
fix that a broken configure file is left over when something goes wrong
Mike Becker <universe@uap-core.de>
parents:
90
diff
changeset
|
15 | import java.nio.file.StandardCopyOption; |
|
90
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
16 | import java.nio.file.attribute.PosixFilePermissions; |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
17 | import java.util.Arrays; |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
18 | import java.util.Objects; |
|
39
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
19 | |
|
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
20 | public class Main { |
|
155
64521cedb78e
increase program and project file version
Mike Becker <universe@uap-core.de>
parents:
124
diff
changeset
|
21 | public static final String PROGRAM_VERSION = "0.4"; |
|
39
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
22 | |
|
81
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
23 | public final static String IN_FILE_DEFAULT = "make/project.xml"; |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
24 | public final static String TPL_FILE_DEFAULT = "make/configure.vm"; |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
25 | public final static String OUT_FILE_DEFAULT = "configure"; |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
26 | |
|
120
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
27 | static Project loadProjectFile(String fileName) throws CompatibilityCheck.CompatibilityException { |
|
109
1e852be12654
adds schema validation - fixes #291
Mike Becker <universe@uap-core.de>
parents:
93
diff
changeset
|
28 | try (final var xsdResource = Objects.requireNonNull(Main.class.getClassLoader().getResourceAsStream("make/uwproj.xsd"))) { |
|
120
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
29 | // Load the DOM from the input file |
|
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
30 | final var dom = DocumentBuilderFactory. |
|
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
31 | newDefaultNSInstance(). |
|
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
32 | newDocumentBuilder(). |
|
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
33 | parse(fileName). |
|
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
34 | getDocumentElement(); |
|
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
35 | |
|
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
36 | // Check the version, first |
|
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
37 | CompatibilityCheck.check(PROGRAM_VERSION, dom.getAttribute("version")); |
|
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
38 | |
|
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
39 | // Parse the XML |
|
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
40 | final var proj = new Project(dom); |
|
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
41 | |
|
109
1e852be12654
adds schema validation - fixes #291
Mike Becker <universe@uap-core.de>
parents:
93
diff
changeset
|
42 | // Create the XSD validator |
|
1e852be12654
adds schema validation - fixes #291
Mike Becker <universe@uap-core.de>
parents:
93
diff
changeset
|
43 | final var factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); |
|
1e852be12654
adds schema validation - fixes #291
Mike Becker <universe@uap-core.de>
parents:
93
diff
changeset
|
44 | final var schema = factory.newSchema(new StreamSource(xsdResource)); |
|
1e852be12654
adds schema validation - fixes #291
Mike Becker <universe@uap-core.de>
parents:
93
diff
changeset
|
45 | final var validator = schema.newValidator(); |
|
1e852be12654
adds schema validation - fixes #291
Mike Becker <universe@uap-core.de>
parents:
93
diff
changeset
|
46 | |
|
112
206e91a8dd18
validation errors contain line and column number
Mike Becker <universe@uap-core.de>
parents:
109
diff
changeset
|
47 | // Validate the XML as stream (DOM validation cannot output line numbers in error message) |
|
206e91a8dd18
validation errors contain line and column number
Mike Becker <universe@uap-core.de>
parents:
109
diff
changeset
|
48 | validator.validate(new StreamSource(new File(fileName))); |
|
206e91a8dd18
validation errors contain line and column number
Mike Becker <universe@uap-core.de>
parents:
109
diff
changeset
|
49 | |
|
120
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
50 | return proj; |
|
112
206e91a8dd18
validation errors contain line and column number
Mike Becker <universe@uap-core.de>
parents:
109
diff
changeset
|
51 | } catch (SAXParseException saxerror) { |
|
206e91a8dd18
validation errors contain line and column number
Mike Becker <universe@uap-core.de>
parents:
109
diff
changeset
|
52 | System.err.printf("Parse error in line %d, column %d: %s", |
|
206e91a8dd18
validation errors contain line and column number
Mike Becker <universe@uap-core.de>
parents:
109
diff
changeset
|
53 | saxerror.getLineNumber(), |
|
206e91a8dd18
validation errors contain line and column number
Mike Becker <universe@uap-core.de>
parents:
109
diff
changeset
|
54 | saxerror.getColumnNumber(), |
|
206e91a8dd18
validation errors contain line and column number
Mike Becker <universe@uap-core.de>
parents:
109
diff
changeset
|
55 | saxerror.getMessage()); |
|
109
1e852be12654
adds schema validation - fixes #291
Mike Becker <universe@uap-core.de>
parents:
93
diff
changeset
|
56 | throw new RuntimeException("XML validation failed."); |
|
120
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
57 | } catch (CompatibilityCheck.CompatibilityException e) { |
|
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
58 | throw e; |
|
39
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
59 | } catch (Exception e) { |
|
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
60 | throw new RuntimeException(e); |
|
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
61 | } |
|
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
62 | } |
|
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
63 | |
|
39
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
64 | static void writeConfigureScript(Writer out, String tplFileName, Project project) { |
|
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
65 | var context = new VelocityContext(); |
|
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
66 | context.put("targets", project.getTargets()); |
|
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
67 | context.put("namedDependencies", project.getNamedDependencies()); |
|
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
68 | context.put("dependencies", project.getDependencies()); |
|
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
69 | context.put("options", project.getOptions()); |
|
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
70 | context.put("features", project.getFeatures()); |
|
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
71 | context.put("project", project); |
|
116
41981a23aff8
add platform attributes to config element
Mike Becker <universe@uap-core.de>
parents:
112
diff
changeset
|
72 | context.put("config", project.getConfig()); |
|
165
f4f11f755ee7
add full spectrum config var configurations
Mike Becker <universe@uap-core.de>
parents:
155
diff
changeset
|
73 | context.put("vars", project.getVars()); |
|
67
e43d30273f74
check compilers before any dependency checks
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
42
diff
changeset
|
74 | context.put("languages", project.getLang()); |
|
39
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
75 | new VelocityEngine().getTemplate(tplFileName).merge(context, out); |
|
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
76 | } |
|
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
77 | |
|
90
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
78 | private static void abort() { |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
79 | System.err.println("Abort."); |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
80 | System.exit(1); |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
81 | } |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
82 | |
|
81
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
83 | private static void printUsage() { |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
84 | System.err.println("Usage: uwproj [OPTIONS]"); |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
85 | System.err.println(); |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
86 | System.err.println("OPTIONS:"); |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
87 | System.err.println(" -h --help Print help text and exit"); |
|
90
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
88 | System.err.println(" --init Creates default files in directory 'make'"); |
|
81
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
89 | System.err.println(" -o --output <file> Path to the output file"); |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
90 | System.err.printf(" (default: %s)\n", OUT_FILE_DEFAULT); |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
91 | System.err.println(" -p --project <file> Path to the project.xml file"); |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
92 | System.err.printf(" (default: %s)\n", IN_FILE_DEFAULT); |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
93 | System.err.println(" -t --template <file> Path to the velocity template"); |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
94 | System.err.printf(" (default: %s)\n", TPL_FILE_DEFAULT); |
|
124
a93fe3c0b916
fix that --update overwrites .mk files - fixes #505
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
95 | System.err.println(" --update Updates configure template and toolchain detection"); |
|
a93fe3c0b916
fix that --update overwrites .mk files - fixes #505
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
96 | System.err.println(" in directory 'make' to current version."); |
|
a93fe3c0b916
fix that --update overwrites .mk files - fixes #505
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
97 | System.err.println(" You might need to update project.xml manually."); |
|
90
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
98 | } |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
99 | |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
100 | private static void extract(Path path) { |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
101 | try (final var res = Objects.requireNonNull(Main.class.getClassLoader().getResourceAsStream(path.toString()))) { |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
102 | Files.copy(res, path, StandardCopyOption.REPLACE_EXISTING); |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
103 | } catch (Throwable t) { |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
104 | System.err.printf("Cannot extract '%s': %s\n", path, t.getMessage()); |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
105 | abort(); |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
106 | } |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
107 | } |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
108 | |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
109 | private static void init(boolean force) { |
|
124
a93fe3c0b916
fix that --update overwrites .mk files - fixes #505
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
110 | final var files = force ? new String[] { |
|
a93fe3c0b916
fix that --update overwrites .mk files - fixes #505
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
111 | "configure.vm", "toolchain.sh", "uwproj.xsd" |
|
a93fe3c0b916
fix that --update overwrites .mk files - fixes #505
Mike Becker <universe@uap-core.de>
parents:
120
diff
changeset
|
112 | } : new String[]{ |
|
90
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
113 | "cc.mk", "gcc.mk", "clang.mk", "suncc.mk", |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
114 | "configure.vm", "toolchain.sh", "uwproj.xsd" |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
115 | }; |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
116 | |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
117 | // (1) create the make dir if it does not exist |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
118 | final var make = Paths.get("make"); |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
119 | if (Files.exists(make)) { |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
120 | if (!Files.isDirectory(make)) { |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
121 | System.err.println("A file with name 'make' already exists, but it's not a directory."); |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
122 | abort(); |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
123 | } |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
124 | if (!force) { |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
125 | System.err.println("uwproj files already exist. You can use --update instead."); |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
126 | abort(); |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
127 | } |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
128 | } else { |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
129 | try { |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
130 | Files.createDirectory(make); |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
131 | } catch (Throwable t) { |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
132 | System.err.printf("Creating directory failed: %s\n", t.getMessage()); |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
133 | abort(); |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
134 | } |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
135 | } |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
136 | |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
137 | // (2) create project.xml ONLY if it does not exist |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
138 | final var project = make.resolve("project.xml"); |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
139 | if (Files.notExists(project)) { |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
140 | extract(project); |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
141 | } |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
142 | |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
143 | // (3) create or update remaining uwproj files |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
144 | Arrays.stream(files).map(make::resolve).forEach(Main::extract); |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
145 | |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
146 | // (4) stop |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
147 | System.out.printf("uwproj files %s.\n", force ? "updated" : "created"); |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
148 | System.exit(0); |
|
81
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
149 | } |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
150 | |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
151 | private static void checkOneMoreArg(int i, int length) { |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
152 | if (i+1 >= length) { |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
153 | printUsage(); |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
154 | System.exit(1); |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
155 | } |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
156 | } |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
157 | |
|
42
becfbf7af928
add simple SLF4J provider - fixes #292
Mike Becker <universe@uap-core.de>
parents:
39
diff
changeset
|
158 | public static void main(String[] args) { |
|
81
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
159 | var inFileName = IN_FILE_DEFAULT; |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
160 | var tplFileName = TPL_FILE_DEFAULT; |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
161 | var outFileName = OUT_FILE_DEFAULT; |
|
90
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
162 | boolean opsOptionsUsed = false; |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
163 | boolean doInit = false; |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
164 | boolean forceInit = false; |
|
81
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
165 | |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
166 | for (int i = 0 ; i < args.length ; i++) { |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
167 | switch (args[i]) { |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
168 | case "-o": |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
169 | case "--output": |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
170 | checkOneMoreArg(i, args.length); |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
171 | outFileName = args[++i]; |
|
90
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
172 | opsOptionsUsed = true; |
|
81
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
173 | break; |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
174 | case "-p": |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
175 | case "--project": |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
176 | checkOneMoreArg(i, args.length); |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
177 | inFileName = args[++i]; |
|
90
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
178 | opsOptionsUsed = true; |
|
81
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
179 | break; |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
180 | |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
181 | case "-t": |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
182 | case "--template": |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
183 | checkOneMoreArg(i, args.length); |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
184 | tplFileName = args[++i]; |
|
90
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
185 | opsOptionsUsed = true; |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
186 | break; |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
187 | case "--init": |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
188 | doInit = true; |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
189 | break; |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
190 | case "--update": |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
191 | doInit = true; |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
192 | forceInit = true; |
|
81
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
193 | break; |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
194 | case "--help": |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
195 | case "-h": |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
196 | printUsage(); |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
197 | System.exit(0); |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
198 | default: |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
199 | printUsage(); |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
200 | System.exit(1); |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
201 | } |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
202 | } |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
203 | |
|
90
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
204 | if (opsOptionsUsed && doInit) { |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
205 | System.err.println("Cannot use --init or --update with other options."); |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
206 | abort(); |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
207 | } |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
208 | |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
209 | if (doInit) { |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
210 | init(forceInit); |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
211 | } |
|
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
212 | |
|
81
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
213 | System.out.println("In: " + inFileName); |
|
ea79a383ad75
add command line options - fixes #303
Mike Becker <universe@uap-core.de>
parents:
67
diff
changeset
|
214 | System.out.println("Tpl: " + tplFileName); |
|
39
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
215 | |
|
93
df47e083139b
fix that a broken configure file is left over when something goes wrong
Mike Becker <universe@uap-core.de>
parents:
90
diff
changeset
|
216 | final var outFilePath = Path.of(outFileName); |
|
df47e083139b
fix that a broken configure file is left over when something goes wrong
Mike Becker <universe@uap-core.de>
parents:
90
diff
changeset
|
217 | try { |
|
df47e083139b
fix that a broken configure file is left over when something goes wrong
Mike Becker <universe@uap-core.de>
parents:
90
diff
changeset
|
218 | final var tmp = File.createTempFile("uwproj", null); |
|
df47e083139b
fix that a broken configure file is left over when something goes wrong
Mike Becker <universe@uap-core.de>
parents:
90
diff
changeset
|
219 | try (var out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(tmp)))) { |
|
df47e083139b
fix that a broken configure file is left over when something goes wrong
Mike Becker <universe@uap-core.de>
parents:
90
diff
changeset
|
220 | writeConfigureScript(out, tplFileName, loadProjectFile(inFileName)); |
|
df47e083139b
fix that a broken configure file is left over when something goes wrong
Mike Becker <universe@uap-core.de>
parents:
90
diff
changeset
|
221 | } |
|
df47e083139b
fix that a broken configure file is left over when something goes wrong
Mike Becker <universe@uap-core.de>
parents:
90
diff
changeset
|
222 | Files.copy(tmp.toPath(), outFilePath, StandardCopyOption.REPLACE_EXISTING); |
|
120
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
223 | } catch (CompatibilityCheck.CompatibilityException e) { |
|
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
224 | System.err.println("Compatibility problem: " + e.getMessage()); |
|
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
225 | abort(); |
|
90
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
226 | } catch (Throwable t) { |
|
120
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
227 | System.err.println("Unexpected error: " + t.getMessage()); |
|
90
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
228 | abort(); |
|
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
229 | } |
|
39
3ca85da78515
add RegressionTest - fixes #264
Mike Becker <universe@uap-core.de>
parents:
7
diff
changeset
|
230 | |
|
42
becfbf7af928
add simple SLF4J provider - fixes #292
Mike Becker <universe@uap-core.de>
parents:
39
diff
changeset
|
231 | System.out.println("Out: " + outFileName); |
|
90
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
232 | try { |
|
93
df47e083139b
fix that a broken configure file is left over when something goes wrong
Mike Becker <universe@uap-core.de>
parents:
90
diff
changeset
|
233 | Files.setPosixFilePermissions(outFilePath, PosixFilePermissions.fromString("rwxr-xr-x")); |
|
90
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
234 | } catch (Throwable t) { |
|
120
0e3827ebc6e4
add compatibility check - resolves #477
Mike Becker <universe@uap-core.de>
parents:
116
diff
changeset
|
235 | System.err.println("WARN: Setting file permissions failed: " + t.getMessage()); |
|
90
a13789dd1cfb
add --init and --update options
Mike Becker <universe@uap-core.de>
parents:
81
diff
changeset
|
236 | } |
|
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
237 | } |
|
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
238 | } |