pkgconf --modversion provided-module segfaults #172

Closed
opened 2018-02-08 20:16:39 +00:00 by c-ney · 1 comment
c-ney commented 2018-02-08 20:16:39 +00:00 (Migrated from github.com)

Version: 1.4.1 from release tarball

Issue

When --modversion is run on a module that is provided by some other module, a segfault occurs. This is independent of the way the version is specified for the provided module (=, >, etc.).

./configure
make
export PKG_CONFIG_PATH=tests/lib1
./pkgconf --modversion provides-test-meow
zsh: segmentation fault (core dumped)  ./pkgconf --modversion provides-test-meow
Thread 1 (LWP 32567):
#0  0x0000000000402c18 in apply_modversion (client=client@entry=0x608260 <pkg_client>, world=world@entry=0x7fff6756a970, unused=unused@entry=0x0, maxdepth=maxdepth@entry=2000) at main.c:288
        dep = 0x20595d0
        pkg = 0x0
        iter = 0x20595d0
#1  0x00007fa1acd4adf8 in pkgconf_queue_apply (client=client@entry=0x608260 <pkg_client>, list=list@entry=0x7fff6756ab10, func=func@entry=0x402c00 <apply_modversion>, maxdepth=2000, data=data@entry=0x0)
    at libpkgconf/queue.c:151
        world = {cache_iter = {prev = 0x0, next = 0x0, data = 0x0}, refcount = 0, id = 0x7fa1acd4c3aa "virtual:world", filename = 0x0, realname = 0x7fa1acd4c3b8 "virtual world package", version = 0x0,
          description = 0x0, url = 0x0, pc_filedir = 0x0, libs = {head = 0x0, tail = 0x0, length = 0}, libs_private = {head = 0x0, tail = 0x0, length = 0}, cflags = {head = 0x0, tail = 0x0, length = 0},
          cflags_private = {head = 0x0, tail = 0x0, length = 0}, required = {head = 0x20595d0, tail = 0x20595d0, length = 1}, requires_private = {head = 0x0, tail = 0x0, length = 0}, conflicts = {head = 0x0,
            tail = 0x0, length = 0}, provides = {head = 0x0, tail = 0x0, length = 0}, vars = {head = 0x0, tail = 0x0, length = 0}, flags = 17, owner = 0x0}
#2  0x000000000040255c in main (argc=<optimized out>, argv=<optimized out>) at main.c:1195
        ret = 0
        pkgq = {head = 0x2059580, tail = 0x2059580, length = 1}
        builddir = <optimized out>
        sysroot_dir = <optimized out>
        env_traverse_depth = <optimized out>
        required_pkgconfig_version = <optimized out>
        required_exact_module_version = 0x0
        required_max_module_version = 0x0
        required_module_version = <optimized out>
        logfile_arg = 0x0
        want_env_prefix = 0x0
        want_client_flags = 0
        options = {{name = 0x405a9d "version", has_arg = 0, flag = 0x608238 <want_flags>, val = 67141632}, {name = 0x405a75 "about", has_arg = 0, flag = 0x608238 <want_flags>, val = 67174400}, {
            name = 0x405a7b "atleast-version", has_arg = 1, flag = 0x0, val = 2}, {name = 0x405a8b "atleast-pkgconfig-version", has_arg = 1, flag = 0x0, val = 3}, {name = 0x405bb6 "libs", has_arg = 0,
            flag = 0x608238 <want_flags>, val = 67109088}, {name = 0x405ba3 "cflags", has_arg = 0, flag = 0x608238 <want_flags>, val = 67108876}, {name = 0x405aa5 "modversion", has_arg = 0,
            flag = 0x608238 <want_flags>, val = 67109120}, {name = 0x405bc2 "variable", has_arg = 1, flag = 0x0, val = 7}, {name = 0x405ab0 "exists", has_arg = 0, flag = 0x608238 <want_flags>,
            val = 1099511627776}, {name = 0x405ab7 "print-errors", has_arg = 0, flag = 0x608238 <want_flags>, val = 67108864}, {name = 0x405ac4 "short-errors", has_arg = 0, flag = 0x608238 <want_flags>,
            val = 549755813888}, {name = 0x405ad1 "maximum-traverse-depth", has_arg = 1, flag = 0x0, val = 11}, {name = 0x405ae8 "static", has_arg = 0, flag = 0x608238 <want_flags>, val = 2097152}, {
            name = 0x405aef "pure", has_arg = 0, flag = 0x608238 <want_flags>, val = 8589934592}, {name = 0x405af4 "print-requires", has_arg = 0, flag = 0x608238 <want_flags>, val = 512}, {
            name = 0x405b03 "print-variables", has_arg = 0, flag = 0x608238 <want_flags>, val = 67110912}, {name = 0x405b13 "digraph", has_arg = 0, flag = 0x608238 <want_flags>, val = 4096}, {
            name = 0x405b1b "help", has_arg = 0, flag = 0x608238 <want_flags>, val = 33554432}, {name = 0x405b20 "env-only", has_arg = 0, flag = 0x608238 <want_flags>, val = 131072}, {
            name = 0x405b29 "print-requires-private", has_arg = 0, flag = 0x608238 <want_flags>, val = 1024}, {name = 0x405b40 "cflags-only-I", has_arg = 0, flag = 0x608238 <want_flags>, val = 67108868}, {
            name = 0x405b4e "cflags-only-other", has_arg = 0, flag = 0x608238 <want_flags>, val = 67108872}, {name = 0x405b60 "libs-only-L", has_arg = 0, flag = 0x608238 <want_flags>, val = 67108896}, {
            name = 0x405b6c "libs-only-l", has_arg = 0, flag = 0x608238 <want_flags>, val = 67108928}, {name = 0x405b78 "libs-only-other", has_arg = 0, flag = 0x608238 <want_flags>, val = 67108992}, {
            name = 0x405b8b "uninstalled", has_arg = 0, flag = 0x608238 <want_flags>, val = 8388608}, {name = 0x405b88 "no-uninstalled", has_arg = 0, flag = 0x608238 <want_flags>, val = 4194304}, {
            name = 0x405b97 "keep-system-cflags", has_arg = 0, flag = 0x608238 <want_flags>, val = 8192}, {name = 0x405baa "keep-system-libs", has_arg = 0, flag = 0x608238 <want_flags>, val = 16384}, {
            name = 0x405bbb "define-variable", has_arg = 1, flag = 0x0, val = 27}, {name = 0x405bcb "exact-version", has_arg = 1, flag = 0x0, val = 28}, {name = 0x405bd9 "max-version", has_arg = 1, flag = 0x0,
            val = 29}, {name = 0x405be5 "ignore-conflicts", has_arg = 0, flag = 0x608238 <want_flags>, val = 1048576}, {name = 0x405bf6 "errors-to-stdout", has_arg = 0, flag = 0x608238 <want_flags>,
            val = 262144}, {name = 0x405c07 "silence-errors", has_arg = 0, flag = 0x608238 <want_flags>, val = 524288}, {name = 0x405c16 "list-all", has_arg = 0, flag = 0x608238 <want_flags>, val = 83886080}, {
            name = 0x405c1f "list-package-names", has_arg = 0, flag = 0x608238 <want_flags>, val = 2214592512}, {name = 0x405c32 "simulate", has_arg = 0, flag = 0x608238 <want_flags>, val = 134217728}, {
            name = 0x405c3b "no-cache", has_arg = 0, flag = 0x608238 <want_flags>, val = 268435456}, {name = 0x405c44 "print-provides", has_arg = 0, flag = 0x608238 <want_flags>, val = 536870912}, {
            name = 0x405c53 "no-provides", has_arg = 0, flag = 0x608238 <want_flags>, val = 4294967296}, {name = 0x405c5f "debug", has_arg = 0, flag = 0x608238 <want_flags>, val = 274945015808}, {
            name = 0x405c65 "validate", has_arg = 0, flag = 0x608238 <want_flags>, val = 1141112832}, {name = 0x405c6e "log-file", has_arg = 1, flag = 0x0, val = 40}, {name = 0x405c7c "path", has_arg = 0,
            flag = 0x608238 <want_flags>, val = 17179869184}, {name = 0x405c77 "with-path", has_arg = 1, flag = 0x0, val = 42}, {name = 0x405c81 "prefix-variable", has_arg = 1, flag = 0x0, val = 43}, {
            name = 0x405c9f "define-prefix", has_arg = 0, flag = 0x608238 <want_flags>, val = 34359738368}, {name = 0x405c91 "relocate", has_arg = 1, flag = 0x0, val = 45}, {
            name = 0x405c9a "dont-define-prefix", has_arg = 0, flag = 0x608238 <want_flags>, val = 68719476736}, {name = 0x405cad "dont-relocate-paths", has_arg = 0, flag = 0x608238 <want_flags>,
            val = 137438953472}, {name = 0x405cc1 "env", has_arg = 1, flag = 0x0, val = 48}, {name = 0x405cc5 "msvc-syntax", has_arg = 0, flag = 0x608238 <want_flags>, val = 2199023255552}, {name = 0x0,
            has_arg = 0, flag = 0x0, val = 0}}

Context

I'm currently experimenting with Provides: for various implementations of some reference implementation/standard. This is for use in meson, the libraries in question being BLAS, LAPACK and MPI.

These are my openblas.pc, ompi.pc and scalapack.pc files:

version=0.2.20
netlibversion=3.7.0
libdir=/usr/lib64
includedir=/usr/include
extralib=-lm -lpthread -lgfortran

Name: openblas
Description: OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version
Version: ${version}
URL: https://github.com/xianyi/OpenBLAS
Libs: -L${libdir} -lopenblas
Libs.private: ${extralib}
Cflags: -I${includedir}
Provides: blas = ${netlibversion}, lapack = ${netlibversion}, cblas = ${netlibversion}
# Copyright (c) 2010 Cisco Systems, Inc.  All rights reserved.
# Copyright (c) 2016      IBM Corporation.  All rights reserved.
#
Name: Open MPI
Description: Portable high-performance MPI implementation
Version: 3.0.0.0.1cbdf5d279
URL: http://www.open-mpi.org/
#
prefix=/usr/lib64/mpi/gcc/openmpi3
exec_prefix=/usr/lib64/mpi/gcc/openmpi3
includedir=/usr/lib64/mpi/gcc/openmpi3/include
libdir=/usr/lib64/mpi/gcc/openmpi3/lib64
pkgincludedir=${includedir}/openmpi
#
# Note that -lopen-pal and all the EXTRA_LIBS are only necessary when
# static linking (they're pulled in by libopen-rte.so's implicit
# dependencies), so only list these in Libs.private.
#
Libs: -L${libdir}    -lmpi
Libs.private: -lm -ldl -lutil  -lrt
#
Cflags: -I${includedir}     -pthread
Provides: mpi = 3.1
prefix=/usr/local
libdir=/usr/local/lib

Name: scalapack
Description: SCALAPACK reference implementation
Version: 2.0.2
URL: http://www.netlib.org/scalapack/
Libs: -L/usr/local/lib -lscalapack
Requires: mpi lapack blas

There is no blas.pc, lapack.pc or mpi.pc. A minimal working example for meson:

project('test', 'c')
dependency('openblas')
dependency('blas', required: false)
dependency('lapack', required: false)
dependency('scalapack')
The Meson build system
Version: 0.43.0
Source dir: /home/user/devel/meson_modversion_bug
Build dir: /home/user/devel/meson_modversion_bug/build
Build type: native build
Project name: test
Native C compiler: ccache cc (gcc 7.3.0)
Build machine cpu family: x86_64
Build machine cpu: x86_64
Found pkg-config: /usr/bin/pkgconf (1.4.1)
Native dependency openblas found: YES 0.2.20
Dependency blas found: NO
Dependency lapack found: NO
Native dependency scalapack found: YES 2.0.2
Build targets in project: 0
Found ninja-1.8.2 at /usr/bin/ninja

Finding scalapack works, because meson effectively calls $PKG_CONFIG scalapack --libs, that resolves the Requires properly. For blas on the other hand it is calling $PKG_CONFIG --modversion blas, which produces a segfault.

Not sure what the output of pkgconf --modversion provided-module should be. I don't think one can just print the version information of the provided module, as it would break drop-in compatibility with pkg-config (which expects a version string, not stuff like != 1.0.0).

--modversion
              Requests that the version information of the libraries specified
              on  the  command  line be displayed.  If pkg-config can find all
              the libraries on the command line, each library's version string
              is printed to stdout, one version per line.  In this case
              pkg-config exits successfully. If one or more libraries is
              unknown, pkg-config exits with a nonzero code, and the contents
              of stdout  are undefined.
Version: `1.4.1` from release tarball ### Issue When `--modversion` is run on a module that is provided by some other module, a segfault occurs. This is independent of the way the version is specified for the provided module (`=`, `>`, etc.). ``` ./configure make export PKG_CONFIG_PATH=tests/lib1 ./pkgconf --modversion provides-test-meow zsh: segmentation fault (core dumped) ./pkgconf --modversion provides-test-meow ``` ```c Thread 1 (LWP 32567): #0 0x0000000000402c18 in apply_modversion (client=client@entry=0x608260 <pkg_client>, world=world@entry=0x7fff6756a970, unused=unused@entry=0x0, maxdepth=maxdepth@entry=2000) at main.c:288 dep = 0x20595d0 pkg = 0x0 iter = 0x20595d0 #1 0x00007fa1acd4adf8 in pkgconf_queue_apply (client=client@entry=0x608260 <pkg_client>, list=list@entry=0x7fff6756ab10, func=func@entry=0x402c00 <apply_modversion>, maxdepth=2000, data=data@entry=0x0) at libpkgconf/queue.c:151 world = {cache_iter = {prev = 0x0, next = 0x0, data = 0x0}, refcount = 0, id = 0x7fa1acd4c3aa "virtual:world", filename = 0x0, realname = 0x7fa1acd4c3b8 "virtual world package", version = 0x0, description = 0x0, url = 0x0, pc_filedir = 0x0, libs = {head = 0x0, tail = 0x0, length = 0}, libs_private = {head = 0x0, tail = 0x0, length = 0}, cflags = {head = 0x0, tail = 0x0, length = 0}, cflags_private = {head = 0x0, tail = 0x0, length = 0}, required = {head = 0x20595d0, tail = 0x20595d0, length = 1}, requires_private = {head = 0x0, tail = 0x0, length = 0}, conflicts = {head = 0x0, tail = 0x0, length = 0}, provides = {head = 0x0, tail = 0x0, length = 0}, vars = {head = 0x0, tail = 0x0, length = 0}, flags = 17, owner = 0x0} #2 0x000000000040255c in main (argc=<optimized out>, argv=<optimized out>) at main.c:1195 ret = 0 pkgq = {head = 0x2059580, tail = 0x2059580, length = 1} builddir = <optimized out> sysroot_dir = <optimized out> env_traverse_depth = <optimized out> required_pkgconfig_version = <optimized out> required_exact_module_version = 0x0 required_max_module_version = 0x0 required_module_version = <optimized out> logfile_arg = 0x0 want_env_prefix = 0x0 want_client_flags = 0 options = {{name = 0x405a9d "version", has_arg = 0, flag = 0x608238 <want_flags>, val = 67141632}, {name = 0x405a75 "about", has_arg = 0, flag = 0x608238 <want_flags>, val = 67174400}, { name = 0x405a7b "atleast-version", has_arg = 1, flag = 0x0, val = 2}, {name = 0x405a8b "atleast-pkgconfig-version", has_arg = 1, flag = 0x0, val = 3}, {name = 0x405bb6 "libs", has_arg = 0, flag = 0x608238 <want_flags>, val = 67109088}, {name = 0x405ba3 "cflags", has_arg = 0, flag = 0x608238 <want_flags>, val = 67108876}, {name = 0x405aa5 "modversion", has_arg = 0, flag = 0x608238 <want_flags>, val = 67109120}, {name = 0x405bc2 "variable", has_arg = 1, flag = 0x0, val = 7}, {name = 0x405ab0 "exists", has_arg = 0, flag = 0x608238 <want_flags>, val = 1099511627776}, {name = 0x405ab7 "print-errors", has_arg = 0, flag = 0x608238 <want_flags>, val = 67108864}, {name = 0x405ac4 "short-errors", has_arg = 0, flag = 0x608238 <want_flags>, val = 549755813888}, {name = 0x405ad1 "maximum-traverse-depth", has_arg = 1, flag = 0x0, val = 11}, {name = 0x405ae8 "static", has_arg = 0, flag = 0x608238 <want_flags>, val = 2097152}, { name = 0x405aef "pure", has_arg = 0, flag = 0x608238 <want_flags>, val = 8589934592}, {name = 0x405af4 "print-requires", has_arg = 0, flag = 0x608238 <want_flags>, val = 512}, { name = 0x405b03 "print-variables", has_arg = 0, flag = 0x608238 <want_flags>, val = 67110912}, {name = 0x405b13 "digraph", has_arg = 0, flag = 0x608238 <want_flags>, val = 4096}, { name = 0x405b1b "help", has_arg = 0, flag = 0x608238 <want_flags>, val = 33554432}, {name = 0x405b20 "env-only", has_arg = 0, flag = 0x608238 <want_flags>, val = 131072}, { name = 0x405b29 "print-requires-private", has_arg = 0, flag = 0x608238 <want_flags>, val = 1024}, {name = 0x405b40 "cflags-only-I", has_arg = 0, flag = 0x608238 <want_flags>, val = 67108868}, { name = 0x405b4e "cflags-only-other", has_arg = 0, flag = 0x608238 <want_flags>, val = 67108872}, {name = 0x405b60 "libs-only-L", has_arg = 0, flag = 0x608238 <want_flags>, val = 67108896}, { name = 0x405b6c "libs-only-l", has_arg = 0, flag = 0x608238 <want_flags>, val = 67108928}, {name = 0x405b78 "libs-only-other", has_arg = 0, flag = 0x608238 <want_flags>, val = 67108992}, { name = 0x405b8b "uninstalled", has_arg = 0, flag = 0x608238 <want_flags>, val = 8388608}, {name = 0x405b88 "no-uninstalled", has_arg = 0, flag = 0x608238 <want_flags>, val = 4194304}, { name = 0x405b97 "keep-system-cflags", has_arg = 0, flag = 0x608238 <want_flags>, val = 8192}, {name = 0x405baa "keep-system-libs", has_arg = 0, flag = 0x608238 <want_flags>, val = 16384}, { name = 0x405bbb "define-variable", has_arg = 1, flag = 0x0, val = 27}, {name = 0x405bcb "exact-version", has_arg = 1, flag = 0x0, val = 28}, {name = 0x405bd9 "max-version", has_arg = 1, flag = 0x0, val = 29}, {name = 0x405be5 "ignore-conflicts", has_arg = 0, flag = 0x608238 <want_flags>, val = 1048576}, {name = 0x405bf6 "errors-to-stdout", has_arg = 0, flag = 0x608238 <want_flags>, val = 262144}, {name = 0x405c07 "silence-errors", has_arg = 0, flag = 0x608238 <want_flags>, val = 524288}, {name = 0x405c16 "list-all", has_arg = 0, flag = 0x608238 <want_flags>, val = 83886080}, { name = 0x405c1f "list-package-names", has_arg = 0, flag = 0x608238 <want_flags>, val = 2214592512}, {name = 0x405c32 "simulate", has_arg = 0, flag = 0x608238 <want_flags>, val = 134217728}, { name = 0x405c3b "no-cache", has_arg = 0, flag = 0x608238 <want_flags>, val = 268435456}, {name = 0x405c44 "print-provides", has_arg = 0, flag = 0x608238 <want_flags>, val = 536870912}, { name = 0x405c53 "no-provides", has_arg = 0, flag = 0x608238 <want_flags>, val = 4294967296}, {name = 0x405c5f "debug", has_arg = 0, flag = 0x608238 <want_flags>, val = 274945015808}, { name = 0x405c65 "validate", has_arg = 0, flag = 0x608238 <want_flags>, val = 1141112832}, {name = 0x405c6e "log-file", has_arg = 1, flag = 0x0, val = 40}, {name = 0x405c7c "path", has_arg = 0, flag = 0x608238 <want_flags>, val = 17179869184}, {name = 0x405c77 "with-path", has_arg = 1, flag = 0x0, val = 42}, {name = 0x405c81 "prefix-variable", has_arg = 1, flag = 0x0, val = 43}, { name = 0x405c9f "define-prefix", has_arg = 0, flag = 0x608238 <want_flags>, val = 34359738368}, {name = 0x405c91 "relocate", has_arg = 1, flag = 0x0, val = 45}, { name = 0x405c9a "dont-define-prefix", has_arg = 0, flag = 0x608238 <want_flags>, val = 68719476736}, {name = 0x405cad "dont-relocate-paths", has_arg = 0, flag = 0x608238 <want_flags>, val = 137438953472}, {name = 0x405cc1 "env", has_arg = 1, flag = 0x0, val = 48}, {name = 0x405cc5 "msvc-syntax", has_arg = 0, flag = 0x608238 <want_flags>, val = 2199023255552}, {name = 0x0, has_arg = 0, flag = 0x0, val = 0}} ``` ### Context I'm currently experimenting with `Provides:` for various implementations of some reference implementation/standard. This is for use in `meson`, the libraries in question being BLAS, LAPACK and MPI. These are my `openblas.pc`, `ompi.pc` and `scalapack.pc` files: ``` version=0.2.20 netlibversion=3.7.0 libdir=/usr/lib64 includedir=/usr/include extralib=-lm -lpthread -lgfortran Name: openblas Description: OpenBLAS is an optimized BLAS library based on GotoBLAS2 1.13 BSD version Version: ${version} URL: https://github.com/xianyi/OpenBLAS Libs: -L${libdir} -lopenblas Libs.private: ${extralib} Cflags: -I${includedir} Provides: blas = ${netlibversion}, lapack = ${netlibversion}, cblas = ${netlibversion} ``` ``` # Copyright (c) 2010 Cisco Systems, Inc. All rights reserved. # Copyright (c) 2016 IBM Corporation. All rights reserved. # Name: Open MPI Description: Portable high-performance MPI implementation Version: 3.0.0.0.1cbdf5d279 URL: http://www.open-mpi.org/ # prefix=/usr/lib64/mpi/gcc/openmpi3 exec_prefix=/usr/lib64/mpi/gcc/openmpi3 includedir=/usr/lib64/mpi/gcc/openmpi3/include libdir=/usr/lib64/mpi/gcc/openmpi3/lib64 pkgincludedir=${includedir}/openmpi # # Note that -lopen-pal and all the EXTRA_LIBS are only necessary when # static linking (they're pulled in by libopen-rte.so's implicit # dependencies), so only list these in Libs.private. # Libs: -L${libdir} -lmpi Libs.private: -lm -ldl -lutil -lrt # Cflags: -I${includedir} -pthread Provides: mpi = 3.1 ``` ``` prefix=/usr/local libdir=/usr/local/lib Name: scalapack Description: SCALAPACK reference implementation Version: 2.0.2 URL: http://www.netlib.org/scalapack/ Libs: -L/usr/local/lib -lscalapack Requires: mpi lapack blas ``` There is no `blas.pc`, `lapack.pc` or `mpi.pc`. A minimal working example for meson: ```meson project('test', 'c') dependency('openblas') dependency('blas', required: false) dependency('lapack', required: false) dependency('scalapack') ``` ``` The Meson build system Version: 0.43.0 Source dir: /home/user/devel/meson_modversion_bug Build dir: /home/user/devel/meson_modversion_bug/build Build type: native build Project name: test Native C compiler: ccache cc (gcc 7.3.0) Build machine cpu family: x86_64 Build machine cpu: x86_64 Found pkg-config: /usr/bin/pkgconf (1.4.1) Native dependency openblas found: YES 0.2.20 Dependency blas found: NO Dependency lapack found: NO Native dependency scalapack found: YES 2.0.2 Build targets in project: 0 Found ninja-1.8.2 at /usr/bin/ninja ``` Finding scalapack works, because meson effectively calls `$PKG_CONFIG scalapack --libs`, that resolves the `Requires` properly. For blas on the other hand it is calling `$PKG_CONFIG --modversion blas`, which produces a segfault. Not sure what the output of `pkgconf --modversion provided-module` should be. I don't think one can just print the version information of the provided module, as it would break drop-in compatibility with `pkg-config` (which expects a version string, not stuff like `!= 1.0.0`). ``` --modversion Requests that the version information of the libraries specified on the command line be displayed. If pkg-config can find all the libraries on the command line, each library's version string is printed to stdout, one version per line. In this case pkg-config exits successfully. If one or more libraries is unknown, pkg-config exits with a nonzero code, and the contents of stdout are undefined. ```

this will be in pkgconf 1.4.2.

this will be in pkgconf 1.4.2.
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: ariadne/pkgconf#172
There is no content yet.