src/main/java/de/unixwork/uwproj/PkgConfigPackage.java

Sun, 10 Sep 2023 14:29:20 +0200

author
Mike Becker <universe@uap-core.de>
date
Sun, 10 Sep 2023 14:29:20 +0200
changeset 46
096f3105b3b1
parent 41
75ee588d5d9e
child 63
ac47c2fb2c4a
permissions
-rw-r--r--

add support for pkgconf version constraints - fixes #294

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
46
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
5 import java.util.ArrayList;
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
6 import java.util.stream.Collectors;
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
7
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
8 import static de.unixwork.uwproj.Util.isNotNullOrBlank;
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
9
0
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
10 public class PkgConfigPackage {
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
11 private String name;
46
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
12 private String atLeastVersion;
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
13 private String exactVersion;
0
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
14 private String maxVersion;
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
15
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
16 public static PkgConfigPackage parse(Element e) throws Exception {
41
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
17 var p = new PkgConfigPackage();
40
b42bfc9e9983 first minor code improvements
Mike Becker <universe@uap-core.de>
parents: 0
diff changeset
18 String name = Util.getContent(e);
41
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
19 if (name.isBlank()) {
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
20 throw new Exception("pkgconfig element: value required");
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
21 } else {
0
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
22 p.setName(name);
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
23 }
46
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
24 p.setAtLeastVersion(e.getAttribute("atleast"));
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
25 p.setExactVersion(e.getAttribute("exact"));
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
26 p.setMaxVersion(e.getAttribute("max"));
0
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
27 return p;
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
28 }
41
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
29
0
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
30 public String getName() {
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
31 return name;
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
32 }
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
33
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
34 public void setName(String name) {
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
35 this.name = name;
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
36 }
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
37
46
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
38 public String getAtLeastVersion() {
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
39 return atLeastVersion;
0
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
40 }
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
41
46
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
42 public void setAtLeastVersion(String atLeastVersion) {
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
43 this.atLeastVersion = atLeastVersion;
0
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
44 }
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
45
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
46 public String getMaxVersion() {
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
47 return maxVersion;
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
48 }
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
49
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
50 public void setMaxVersion(String maxVersion) {
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
51 this.maxVersion = maxVersion;
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
52 }
41
75ee588d5d9e some more code cleanup
Mike Becker <universe@uap-core.de>
parents: 40
diff changeset
53
46
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
54 public String getExactVersion() {
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
55 return exactVersion;
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
56 }
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
57
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
58 public void setExactVersion(String exactVersion) {
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
59 this.exactVersion = exactVersion;
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
60 }
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
61
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
62 public String getPkgConfigTestQuery() {
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
63 // pkg-config is a more broken piece of software than we thought
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
64 // it is not possible to combine any flags
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
65 // e.g. --atleast-version and --max-version together will return true,
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
66 // even when the max-version is violated
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
67 // or other example: combining any version flag with --cflags or
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
68 // --libs does not print the flags
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
69 // therefore we have to execute multiple query first, and obtain the flags later
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
70
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
71 final var commands = new ArrayList<String>();
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
72 if (isNotNullOrBlank(atLeastVersion)) {
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
73 commands.add("$PKG_CONFIG --atleast-version="+atLeastVersion+" "+name);
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
74 }
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
75 if (isNotNullOrBlank(exactVersion)) {
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
76 commands.add("$PKG_CONFIG --exact-version="+exactVersion+" "+name);
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
77 }
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
78 if (isNotNullOrBlank(maxVersion)) {
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
79 commands.add("$PKG_CONFIG --max-version="+maxVersion+" "+name);
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
80 }
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
81 if (commands.isEmpty()) {
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
82 commands.add("$PKG_CONFIG "+name);
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
83 }
096f3105b3b1 add support for pkgconf version constraints - fixes #294
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
84 return String.join(" && ", commands);
0
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
85 }
38775db5fdf5 add existing source
Olaf Wintermann <olaf.wintermann@gmail.com>
parents:
diff changeset
86 }

mercurial