Sun, 28 Jan 2024 13:26:47 +0100
validation errors contain line and column number
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.w3c.dom.Element; |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
4 | import org.w3c.dom.Node; |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
5 | import org.w3c.dom.NodeList; |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
6 | |
41 | 7 | import java.util.Arrays; |
40
b42bfc9e9983
first minor code improvements
Mike Becker <universe@uap-core.de>
parents:
5
diff
changeset
|
8 | import java.util.LinkedList; |
b42bfc9e9983
first minor code improvements
Mike Becker <universe@uap-core.de>
parents:
5
diff
changeset
|
9 | import java.util.List; |
b42bfc9e9983
first minor code improvements
Mike Becker <universe@uap-core.de>
parents:
5
diff
changeset
|
10 | |
78
c3a62e0baa9e
fix special chars in dependency names are breaking configure - fixes #312
Mike Becker <universe@uap-core.de>
parents:
74
diff
changeset
|
11 | import static de.unixwork.uwproj.Util.*; |
92
5a32534f2604
fix empty dependencies element producing broken configure script - fixes #336
Mike Becker <universe@uap-core.de>
parents:
79
diff
changeset
|
12 | import static java.util.function.Predicate.not; |
41 | 13 | |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
14 | public class Target { |
52
afcb57893858
major evolution of configure template - fixes #283
Mike Becker <universe@uap-core.de>
parents:
41
diff
changeset
|
15 | private String name = ""; |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
16 | private String prefix; |
41 | 17 | |
40
b42bfc9e9983
first minor code improvements
Mike Becker <universe@uap-core.de>
parents:
5
diff
changeset
|
18 | private final List<String> dependencies = new LinkedList<>(); |
b42bfc9e9983
first minor code improvements
Mike Becker <universe@uap-core.de>
parents:
5
diff
changeset
|
19 | private final List<Define> defines = new LinkedList<>(); |
b42bfc9e9983
first minor code improvements
Mike Becker <universe@uap-core.de>
parents:
5
diff
changeset
|
20 | private final List<Feature> features = new LinkedList<>(); |
b42bfc9e9983
first minor code improvements
Mike Becker <universe@uap-core.de>
parents:
5
diff
changeset
|
21 | private final List<Option> options = new LinkedList<>(); |
41 | 22 | |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
23 | private boolean allDependencies = false; |
41 | 24 | |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
25 | public static Target parse(Project project, Element element) throws Exception { |
41 | 26 | var target = new Target(); |
27 | ||
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
28 | String name = element.getAttribute("name"); |
41 | 29 | if (!name.isBlank()) { |
5
895bf81d3b6e
add missing source changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
30 | target.setName(name); |
895bf81d3b6e
add missing source changes
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
0
diff
changeset
|
31 | } |
41 | 32 | |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
33 | NodeList nodes = element.getChildNodes(); |
41 | 34 | for (int i = 0; i < nodes.getLength(); i++) { |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
35 | Node node = nodes.item(i); |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
36 | if (node.getNodeType() == Node.ELEMENT_NODE) { |
41 | 37 | Element elm = (Element) node; |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
38 | String n = elm.getNodeName(); |
41 | 39 | if (n.equals("feature")) { |
40 | target.addFeature(Feature.parse(project, elm)); | |
41 | } else if (n.equals("define")) { | |
42 | target.addDefine( | |
43 | elm.getAttribute("name"), | |
44 | elm.getAttribute("value") | |
45 | ); | |
46 | } else if (n.equals("dependencies")) { | |
47 | Arrays.stream(Util.getContent(elm).split(",")) | |
48 | .map(String::trim) | |
92
5a32534f2604
fix empty dependencies element producing broken configure script - fixes #336
Mike Becker <universe@uap-core.de>
parents:
79
diff
changeset
|
49 | .filter(not(String::isBlank)) |
41 | 50 | .forEach(target::addDependency); |
51 | } else if (n.equals("alldependencies")) { | |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
52 | target.setAllDependencies(true); |
41 | 53 | } else if (n.equals("option")) { |
54 | var opt = Option.parse(elm); | |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
55 | target.addOption(opt); |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
56 | project.addOption(opt); |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
57 | } |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
58 | } |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
59 | } |
41 | 60 | |
61 | if (isNullOrBlank(target.prefix) && isNotNullOrBlank(target.name)) { | |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
62 | target.setPrefix(name.toUpperCase()); |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
63 | } |
41 | 64 | |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
65 | return target; |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
66 | } |
41 | 67 | |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
68 | public String getName() { |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
69 | return name; |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
70 | } |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
71 | |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
72 | public void setName(String name) { |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
73 | this.name = name; |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
74 | } |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
75 | |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
76 | public String getPrefix() { |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
77 | return prefix; |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
78 | } |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
79 | |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
80 | public void setPrefix(String prefix) { |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
81 | this.prefix = prefix; |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
82 | } |
41 | 83 | |
84 | private String withPrefix(String id) { | |
85 | return prefix == null ? id : String.format("%s_%s", prefix, id); | |
86 | } | |
87 | ||
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
88 | public String getCFlags() { |
41 | 89 | return withPrefix("CFLAGS"); |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
90 | } |
41 | 91 | |
79
ef0635b78b7b
remove explicit calls of getters in velocity template
Mike Becker <universe@uap-core.de>
parents:
78
diff
changeset
|
92 | public String getLdFlags() { |
41 | 93 | return withPrefix("LDFLAGS"); |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
94 | } |
41 | 95 | |
79
ef0635b78b7b
remove explicit calls of getters in velocity template
Mike Becker <universe@uap-core.de>
parents:
78
diff
changeset
|
96 | public String getCxxFlags() { |
41 | 97 | return withPrefix("CXXFLAGS"); |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
98 | } |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
99 | |
74
30b70a68ad26
make alldependencies element work - fixes #304
Mike Becker <universe@uap-core.de>
parents:
52
diff
changeset
|
100 | public void clearDependencies() { |
30b70a68ad26
make alldependencies element work - fixes #304
Mike Becker <universe@uap-core.de>
parents:
52
diff
changeset
|
101 | dependencies.clear(); |
30b70a68ad26
make alldependencies element work - fixes #304
Mike Becker <universe@uap-core.de>
parents:
52
diff
changeset
|
102 | } |
30b70a68ad26
make alldependencies element work - fixes #304
Mike Becker <universe@uap-core.de>
parents:
52
diff
changeset
|
103 | |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
104 | public List<String> getDependencies() { |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
105 | return dependencies; |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
106 | } |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
107 | |
41 | 108 | public void addDependency(String dependency) { |
78
c3a62e0baa9e
fix special chars in dependency names are breaking configure - fixes #312
Mike Becker <universe@uap-core.de>
parents:
74
diff
changeset
|
109 | // we have to add the sanitized identifier to the list of dependencies |
c3a62e0baa9e
fix special chars in dependency names are breaking configure - fixes #312
Mike Becker <universe@uap-core.de>
parents:
74
diff
changeset
|
110 | dependencies.add(shId(dependency)); |
41 | 111 | } |
112 | ||
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
113 | public boolean isAllDependencies() { |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
114 | return allDependencies; |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
115 | } |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
116 | |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
117 | public void setAllDependencies(boolean allDependencies) { |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
118 | this.allDependencies = allDependencies; |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
119 | } |
41 | 120 | |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
121 | public void addDefine(String name, String value) { |
41 | 122 | if (name.isBlank()) { |
123 | throw new IllegalArgumentException("define element requires name attribute"); | |
124 | } | |
125 | defines.add(new Define(name, value)); | |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
126 | } |
41 | 127 | |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
128 | public List<Define> getDefines() { |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
129 | return defines; |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
130 | } |
41 | 131 | |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
132 | public void addFeature(Feature f) { |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
133 | features.add(f); |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
134 | } |
41 | 135 | |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
136 | public List<Feature> getFeatures() { |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
137 | return features; |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
138 | } |
41 | 139 | |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
140 | public void addOption(Option o) { |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
141 | options.add(o); |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
142 | } |
41 | 143 | |
0
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
144 | public List<Option> getOptions() { |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
145 | return options; |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
146 | } |
38775db5fdf5
add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff
changeset
|
147 | } |