Sun, 10 Sep 2023 14:29:20 +0200
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 | 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 | 19 | if (name.isBlank()) { |
20 | throw new Exception("pkgconfig element: value required"); | |
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 | 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 | 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 | } |