# HG changeset patch # User Mike Becker # Date 1694348960 -7200 # Node ID 096f3105b3b12325cc30050c175b69540e0eaf19 # Parent f4ec2feccebb49efdc14a8bb7ec825ba447b4b75 add support for pkgconf version constraints - fixes #294 diff -r f4ec2feccebb -r 096f3105b3b1 src/main/java/de/unixwork/uwproj/PkgConfigPackage.java --- a/src/main/java/de/unixwork/uwproj/PkgConfigPackage.java Sun Sep 10 13:12:54 2023 +0200 +++ b/src/main/java/de/unixwork/uwproj/PkgConfigPackage.java Sun Sep 10 14:29:20 2023 +0200 @@ -2,9 +2,15 @@ import org.w3c.dom.Element; +import java.util.ArrayList; +import java.util.stream.Collectors; + +import static de.unixwork.uwproj.Util.isNotNullOrBlank; + public class PkgConfigPackage { private String name; - private String atleast; + private String atLeastVersion; + private String exactVersion; private String maxVersion; public static PkgConfigPackage parse(Element e) throws Exception { @@ -15,6 +21,9 @@ } else { p.setName(name); } + p.setAtLeastVersion(e.getAttribute("atleast")); + p.setExactVersion(e.getAttribute("exact")); + p.setMaxVersion(e.getAttribute("max")); return p; } @@ -26,12 +35,12 @@ this.name = name; } - public String getAtleast() { - return atleast; + public String getAtLeastVersion() { + return atLeastVersion; } - public void setAtleast(String atleast) { - this.atleast = atleast; + public void setAtLeastVersion(String atLeastVersion) { + this.atLeastVersion = atLeastVersion; } public String getMaxVersion() { @@ -42,7 +51,36 @@ this.maxVersion = maxVersion; } - public String getPkgConfigParam() { - return name; + public String getExactVersion() { + return exactVersion; + } + + public void setExactVersion(String exactVersion) { + this.exactVersion = exactVersion; + } + + public String getPkgConfigTestQuery() { + // pkg-config is a more broken piece of software than we thought + // it is not possible to combine any flags + // e.g. --atleast-version and --max-version together will return true, + // even when the max-version is violated + // or other example: combining any version flag with --cflags or + // --libs does not print the flags + // therefore we have to execute multiple query first, and obtain the flags later + + final var commands = new ArrayList(); + if (isNotNullOrBlank(atLeastVersion)) { + commands.add("$PKG_CONFIG --atleast-version="+atLeastVersion+" "+name); + } + if (isNotNullOrBlank(exactVersion)) { + commands.add("$PKG_CONFIG --exact-version="+exactVersion+" "+name); + } + if (isNotNullOrBlank(maxVersion)) { + commands.add("$PKG_CONFIG --max-version="+maxVersion+" "+name); + } + if (commands.isEmpty()) { + commands.add("$PKG_CONFIG "+name); + } + return String.join(" && ", commands); } } diff -r f4ec2feccebb -r 096f3105b3b1 src/test/resources/golden-sample/configure2 --- a/src/test/resources/golden-sample/configure2 Sun Sep 10 13:12:54 2023 +0200 +++ b/src/test/resources/golden-sample/configure2 Sun Sep 10 14:29:20 2023 +0200 @@ -429,7 +429,7 @@ if [ -z "$PKG_CONFIG" ]; then break fi - $PKG_CONFIG libxml-2.0 + $PKG_CONFIG --atleast-version=2.8 libxml-2.0 if [ $? -ne 0 ] ; then break fi diff -r f4ec2feccebb -r 096f3105b3b1 test/make/configure.vm --- a/test/make/configure.vm Sun Sep 10 13:12:54 2023 +0200 +++ b/test/make/configure.vm Sun Sep 10 14:29:20 2023 +0200 @@ -349,12 +349,12 @@ fi #end #foreach( $pkg in $sub.pkgconfig ) - $PKG_CONFIG $pkg.getPkgConfigParam() + $pkg.getPkgConfigTestQuery() if [ $? -ne 0 ] ; then break fi - TEMP_CFLAGS="$TEMP_CFLAGS `$PKG_CONFIG --cflags $pkg.getPkgConfigParam()`" - TEMP_LDFLAGS="$TEMP_LDFLAGS `$PKG_CONFIG --libs $pkg.getPkgConfigParam()`" + TEMP_CFLAGS="$TEMP_CFLAGS `$PKG_CONFIG --cflags $pkg.name`" + TEMP_LDFLAGS="$TEMP_LDFLAGS `$PKG_CONFIG --libs $pkg.name`" #end #foreach( $flags in $sub.flags ) #if( $flags.exec ) @@ -413,15 +413,15 @@ #end #foreach( $pkg in $dependency.pkgconfig ) printf "checking for pkg-config package $pkg.name... " - $PKG_CONFIG $pkg.getPkgConfigParam() + $pkg.getPkgConfigTestQuery() if [ $? -ne 0 ]; then echo no ERROR=1 break fi echo yes - TEMP_CFLAGS="$TEMP_CFLAGS `$PKG_CONFIG --cflags $pkg.getPkgConfigParam()`" - TEMP_LDFLAGS="$TEMP_LDFLAGS `$PKG_CONFIG --libs $pkg.getPkgConfigParam()`" + TEMP_CFLAGS="$TEMP_CFLAGS `$PKG_CONFIG --cflags $pkg.name`" + TEMP_LDFLAGS="$TEMP_LDFLAGS `$PKG_CONFIG --libs $pkg.name`" #end #foreach( $flags in $dependency.flags ) diff -r f4ec2feccebb -r 096f3105b3b1 test/make/project2.xml --- a/test/make/project2.xml Sun Sep 10 13:12:54 2023 +0200 +++ b/test/make/project2.xml Sun Sep 10 14:29:20 2023 +0200 @@ -15,7 +15,7 @@ libcurl - libxml-2.0 + libxml-2.0 xml = libxml2 diff -r f4ec2feccebb -r 096f3105b3b1 uwproj.xsd --- a/uwproj.xsd Sun Sep 10 13:12:54 2023 +0200 +++ b/uwproj.xsd Sun Sep 10 14:29:20 2023 +0200 @@ -30,12 +30,22 @@ + + + + + + + + + + - +