pkgconf 2.4.3.post1__tar.gz → 2.4.3.post3__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/.github/workflows/build.yml +7 -5
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/.github/workflows/test.yml +9 -5
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/PKG-INFO +3 -4
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/README.md +1 -1
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/meson.build +3 -1
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/pyproject.toml +2 -3
- pkgconf-2.4.3.post3/src/pkgconf/__init__.py +103 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/src/pkgconf/__main__.py +6 -6
- pkgconf-2.4.3.post3/src/pkgconf/_path_entrypoints.py +266 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/src/pkgconf/diagnose.py +2 -2
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/tests/conftest.py +7 -1
- pkgconf-2.4.3.post3/tests/packages/inplace/example/include/example.h +3 -0
- pkgconf-2.4.3.post3/tests/packages/inplace/example/pkgconf/example.pc +8 -0
- pkgconf-2.4.3.post3/tests/packages/inplace/pyproject.toml +13 -0
- pkgconf-2.4.3.post3/tests/packages/register-pkg-config-path/register_pkg_config_path/lib/__init__.py +0 -0
- pkgconf-2.4.3.post3/tests/packages/register-pkg-config-path/register_pkg_config_path/pkgconf/__init__.py +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/tests/test_entrypoints.py +1 -4
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/tests/test_python_module.py +17 -0
- pkgconf-2.4.3.post3/update-upstream.py +84 -0
- pkgconf-2.4.3.post1/src/pkgconf/__init__.py +0 -150
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/.gitmodules +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/.pre-commit-config.yaml +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/.readthedocs.yaml +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/LICENSE +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/codecov.yml +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/docs/conf.py +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/docs/index.rst +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/environment.yml +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/examples/header-only-library/example/include/example.h +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/examples/header-only-library/example/pkgconf/example.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/examples/header-only-library/pyproject.toml +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/src/buildhack.py +0 -0
- /pkgconf-2.4.3.post1/tests/packages/register-pkg-config-path/register_pkg_config_path/__init__.py → /pkgconf-2.4.3.post3/src/pkgconf/py.typed +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/.gitattributes +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/.github/FUNDING.yml +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/.github/workflows/test.yml +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/.gitignore +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/.mailmap +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/.woodpecker.yml +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/AUTHORS +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/CODE_OF_CONDUCT.md +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/COPYING +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/Kyuafile.in +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/Makefile.am +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/Makefile.lite +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/NEWS +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/README.md +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/autogen.sh +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/cli/bomtool/main.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/cli/getopt_long.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/cli/getopt_long.h +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/cli/main.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/cli/renderer-msvc.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/cli/renderer-msvc.h +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/configure.ac +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/doc/conf.py +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/doc/extract.py +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/doc/index.rst +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/doc/libpkgconf-argvsplit.rst +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/doc/libpkgconf-audit.rst +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/doc/libpkgconf-cache.rst +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/doc/libpkgconf-client.rst +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/doc/libpkgconf-dependency.rst +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/doc/libpkgconf-fragment.rst +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/doc/libpkgconf-path.rst +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/doc/libpkgconf-personality.rst +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/doc/libpkgconf-pkg.rst +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/doc/libpkgconf-queue.rst +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/doc/libpkgconf-tuple.rst +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/doc/libpkgconf.rst +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/argvsplit.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/audit.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/bsdstubs.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/bsdstubs.h +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/buffer.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/cache.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/client.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/config.h.meson +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/dependency.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/fileio.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/fragment.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/iter.h +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/libpkgconf-api.h +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/libpkgconf.h +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/meson.build +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/parser.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/path.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/personality.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/pkg.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/queue.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/stdinc.h +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/tuple.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf/win-dirent.h +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/libpkgconf.pc.in +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/m4/ax_check_compile_flag.m4 +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/man/pc.5 +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/man/pkg.m4.7 +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/man/pkgconf-personality.5 +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/man/pkgconf.1 +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/meson.build +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/meson_options.txt +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/pkg.m4 +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/Kyuafile.in +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/basic.sh +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/builtins.sh +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/conflicts.sh +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/framework.sh +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib-relocatable/lib/pkgconfig/foo.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/argv-parse-2.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/argv-parse-3.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/argv-parse.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/bar.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/baz.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/billion-laughs.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/c-comment.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/case-sensitivity.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/cflags-internal.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/cflags-libs-only.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/cflags-libs-private-a.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/cflags-libs-private-b.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/cflags-libs-private-c.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/cflags-whitespace-trailing.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/cflags-whitespace.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/child-prefix/pkgconfig/child-prefix-1.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/circular-1.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/circular-2.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/circular-3.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/comments-in-fields.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/comments.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/conflicts.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/depgraph-break.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/dos-lineendings.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/empty-tuple.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/escaped-backslash.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/explicit-sysroot.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/flag-order-1.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/flag-order-3.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/foo.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/foobar.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/fragment-collision-1.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/fragment-collision-2.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/fragment-collision-intermediary.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/fragment-collision.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/fragment-comment.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/fragment-escaping-1.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/fragment-escaping-2.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/fragment-escaping-3.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/fragment-group-a.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/fragment-group-b.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/fragment-group-c.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/fragment-groups-2.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/fragment-groups.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/fragment-quoting-2.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/fragment-quoting-3.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/fragment-quoting-5.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/fragment-quoting-7.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/fragment-quoting.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/framework-1.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/framework-2.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/idirafter-ordering.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/idirafter.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/incomplete.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/intermediary-1.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/intermediary-2.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/isystem.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/malformed-1.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/malformed-quoting.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/malformed-version.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/metapackage-1.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/metapackage-2.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/metapackage-3.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/metapackage.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/missing-require.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/multiline-bogus.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/multiline.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/no-trailing-newline.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/nocflag.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/nolib.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/omg-sysroot-uninstalled.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/omg-uninstalled.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/orphaned-requires-private.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/paren-quoting.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/pcfiledir.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/prefix-foo1.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/prefix-foo2.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/private-libs-duplication.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/provides-request-simple.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/provides.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/quotes.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/requires-internal-2.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/requires-internal-collision.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/requires-internal-missing.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/requires-internal.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/spaces-in-paths.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/static-archive-libs.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/static-libs.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/sysroot-dir-2.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/sysroot-dir-3.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/sysroot-dir-4.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/sysroot-dir-5.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/sysroot-dir.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/tilde-quoting.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/tilde.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/truncated.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/tuple-quoting.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/typelibdir.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/unavailable-provider.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/utf8.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib1/variable-whitespace.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib2/foo.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/lib3/bar.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/meson.build +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/parser.sh +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/provides.sh +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/regress.sh +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/requires.sh +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/symlink.sh +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/sysroot.sh +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/test_env.sh.in +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/subprojects/pkgconf/tests/version.sh +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/tests/data/needs-example-lib.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/tests/packages/error-on-import/foo/__init__.py +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/tests/packages/error-on-import/foo/bar/__init__.py +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/tests/packages/error-on-import/meson.build +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/tests/packages/error-on-import/pyproject.toml +0 -0
- {pkgconf-2.4.3.post1/tests/packages/register-pkg-config-path/register_pkg_config_path/include → pkgconf-2.4.3.post3/tests/packages/inplace/example}/__init__.py +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/tests/packages/namespace/namespace/namespace.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/tests/packages/namespace/pyproject.toml +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/tests/packages/register-pkg-config-path/lib.c +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/tests/packages/register-pkg-config-path/meson.build +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/tests/packages/register-pkg-config-path/pyproject.toml +0 -0
- {pkgconf-2.4.3.post1/tests/packages/register-pkg-config-path/register_pkg_config_path/lib → pkgconf-2.4.3.post3/tests/packages/register-pkg-config-path/register_pkg_config_path}/__init__.py +0 -0
- {pkgconf-2.4.3.post1/tests/packages/register-pkg-config-path/register_pkg_config_path/pkgconf → pkgconf-2.4.3.post3/tests/packages/register-pkg-config-path/register_pkg_config_path/include}/__init__.py +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/tests/packages/register-pkg-config-path/register_pkg_config_path/include/lib.h +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/tests/packages/register-pkg-config-path/register_pkg_config_path/pkgconf/register_pkg_config_path.pc +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/tests/packages/use-pybind11/meson.build +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/tests/test_diagnose.py +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/tests/test_distribution.py +0 -0
- {pkgconf-2.4.3.post1 → pkgconf-2.4.3.post3}/tests/test_examples.py +0 -0
|
@@ -33,15 +33,17 @@ jobs:
|
|
|
33
33
|
matrix:
|
|
34
34
|
os:
|
|
35
35
|
- ubuntu-latest
|
|
36
|
+
- ubuntu-24.04-arm
|
|
36
37
|
- windows-latest
|
|
37
|
-
-
|
|
38
|
-
- macos-
|
|
38
|
+
- windows-11-arm
|
|
39
|
+
- macos-13 # x86-64
|
|
40
|
+
- macos-latest # arm64
|
|
39
41
|
fail-fast: false
|
|
40
42
|
steps:
|
|
41
43
|
- uses: actions/checkout@v4
|
|
42
44
|
with:
|
|
43
45
|
submodules: true
|
|
44
|
-
- uses: pypa/cibuildwheel@
|
|
46
|
+
- uses: pypa/cibuildwheel@2edf5784998b7b1ab70445baced23069e839541e # 3.0.0rc2
|
|
45
47
|
- uses: actions/upload-artifact@v4
|
|
46
48
|
if: always()
|
|
47
49
|
with:
|
|
@@ -56,9 +58,9 @@ jobs:
|
|
|
56
58
|
- uses: docker/setup-qemu-action@v3
|
|
57
59
|
with:
|
|
58
60
|
platforms: all
|
|
59
|
-
- uses: pypa/cibuildwheel@
|
|
61
|
+
- uses: pypa/cibuildwheel@2edf5784998b7b1ab70445baced23069e839541e # 3.0.0rc2
|
|
60
62
|
env:
|
|
61
|
-
CIBW_ARCHS_LINUX:
|
|
63
|
+
CIBW_ARCHS_LINUX: ppc64le s390x
|
|
62
64
|
- uses: actions/upload-artifact@v4
|
|
63
65
|
if: always()
|
|
64
66
|
with:
|
|
@@ -15,19 +15,23 @@ concurrency:
|
|
|
15
15
|
|
|
16
16
|
jobs:
|
|
17
17
|
pytest:
|
|
18
|
-
runs-on: ${{ matrix.os }}
|
|
18
|
+
runs-on: ${{ matrix.os }}
|
|
19
19
|
strategy:
|
|
20
20
|
matrix:
|
|
21
21
|
os:
|
|
22
|
-
- ubuntu
|
|
23
|
-
- windows
|
|
24
|
-
-
|
|
22
|
+
- ubuntu-latest
|
|
23
|
+
- windows-latest
|
|
24
|
+
- windows-11-arm
|
|
25
|
+
- macos-latest
|
|
25
26
|
python:
|
|
26
|
-
- '3.9'
|
|
27
27
|
- '3.10'
|
|
28
28
|
- '3.11'
|
|
29
29
|
- '3.12'
|
|
30
30
|
- '3.13'
|
|
31
|
+
- '3.14-dev'
|
|
32
|
+
exclude:
|
|
33
|
+
- os: windows-11-arm
|
|
34
|
+
python: '3.10'
|
|
31
35
|
fail-fast: false
|
|
32
36
|
steps:
|
|
33
37
|
- uses: actions/checkout@v4
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: pkgconf
|
|
3
|
-
Version: 2.4.3.
|
|
3
|
+
Version: 2.4.3.post3
|
|
4
4
|
Summary: `pkgconf` is a program which helps with discovering library dependencies and configuring compiler and linker flags.
|
|
5
5
|
Author-Email: Ralf Gommers <ralf.gommers@gmail.com>, =?utf-8?q?Filipe_La=C3=ADns?= <lains@riseup.net>
|
|
6
6
|
License: Copyright (c) 2024 pypackaging-native contributors
|
|
@@ -36,9 +36,8 @@ Classifier: Operating System :: MacOS
|
|
|
36
36
|
Project-URL: homepage, https://pkgconf-pypi.readthedocs.io/en/latest/
|
|
37
37
|
Project-URL: issues, https://github.com/pypackaging-native/pkgconf-pypi/issues
|
|
38
38
|
Project-URL: source, https://github.com/pypackaging-native/pkgconf-pypi
|
|
39
|
-
Requires-Python: >=3.
|
|
39
|
+
Requires-Python: >=3.10
|
|
40
40
|
Requires-Dist: colorama; os_name == "nt"
|
|
41
|
-
Requires-Dist: importlib_metadata; python_version < "3.10"
|
|
42
41
|
Provides-Extra: test
|
|
43
42
|
Requires-Dist: pytest; extra == "test"
|
|
44
43
|
Requires-Dist: pytest-cov>=5; extra == "test"
|
|
@@ -64,7 +63,7 @@ Description-Content-Type: text/markdown
|
|
|
64
63
|
[](https://pypi.org/project/pkgconf/)
|
|
65
64
|
[](https://discord.gg/pypa)
|
|
66
65
|
|
|
67
|
-
This goal of this repo is to
|
|
66
|
+
This goal of this repo is to facilitate building and publishing of
|
|
68
67
|
[pkgconf](https://github.com/pkgconf/pkgconf) binaries on PyPI, primarily for
|
|
69
68
|
ease of installing in a cross-platform manner. This is useful when `pkgconf` is
|
|
70
69
|
for example needed in workflows of other Python packages.
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
[](https://pypi.org/project/pkgconf/)
|
|
10
10
|
[](https://discord.gg/pypa)
|
|
11
11
|
|
|
12
|
-
This goal of this repo is to
|
|
12
|
+
This goal of this repo is to facilitate building and publishing of
|
|
13
13
|
[pkgconf](https://github.com/pkgconf/pkgconf) binaries on PyPI, primarily for
|
|
14
14
|
ease of installing in a cross-platform manner. This is useful when `pkgconf` is
|
|
15
15
|
for example needed in workflows of other Python packages.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# SPDX-License-Identifier: MIT
|
|
4
4
|
|
|
5
5
|
project('pkgconf-pypi',
|
|
6
|
-
version : '2.4.3-
|
|
6
|
+
version : '2.4.3-3',
|
|
7
7
|
license : 'MIT AND ISC',
|
|
8
8
|
license_files : ['LICENSE'],
|
|
9
9
|
meson_version : '>=1.3.2',
|
|
@@ -16,7 +16,9 @@ py.install_sources(
|
|
|
16
16
|
[
|
|
17
17
|
'src/pkgconf/__init__.py',
|
|
18
18
|
'src/pkgconf/__main__.py',
|
|
19
|
+
'src/pkgconf/_path_entrypoints.py',
|
|
19
20
|
'src/pkgconf/diagnose.py',
|
|
21
|
+
'src/pkgconf/py.typed',
|
|
20
22
|
],
|
|
21
23
|
subdir: 'pkgconf',
|
|
22
24
|
)
|
|
@@ -11,7 +11,7 @@ requires = ['meson-python', 'wheel']
|
|
|
11
11
|
|
|
12
12
|
[project]
|
|
13
13
|
name = 'pkgconf'
|
|
14
|
-
version = '2.4.3-
|
|
14
|
+
version = '2.4.3-3'
|
|
15
15
|
description = '`pkgconf` is a program which helps with discovering library dependencies and configuring compiler and linker flags.'
|
|
16
16
|
readme = 'README.md'
|
|
17
17
|
license = {file = 'LICENSE'}
|
|
@@ -31,10 +31,9 @@ classifiers = [
|
|
|
31
31
|
'Operating System :: Unix',
|
|
32
32
|
'Operating System :: MacOS'
|
|
33
33
|
]
|
|
34
|
-
requires-python = '>= 3.
|
|
34
|
+
requires-python = '>= 3.10'
|
|
35
35
|
dependencies = [
|
|
36
36
|
'colorama; os_name == "nt"',
|
|
37
|
-
'importlib_metadata; python_version < "3.10"',
|
|
38
37
|
]
|
|
39
38
|
|
|
40
39
|
[project.optional-dependencies]
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import logging
|
|
2
|
+
import os
|
|
3
|
+
import pathlib
|
|
4
|
+
import shlex
|
|
5
|
+
import shutil
|
|
6
|
+
import subprocess
|
|
7
|
+
import sysconfig
|
|
8
|
+
import warnings
|
|
9
|
+
|
|
10
|
+
from typing import Any
|
|
11
|
+
|
|
12
|
+
import pkgconf._path_entrypoints
|
|
13
|
+
|
|
14
|
+
from pkgconf._path_entrypoints import PathWarning
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
__version__ = '2.4.3-3'
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
_LOGGER = logging.getLogger(__name__)
|
|
21
|
+
_CLI_LOGGER = _LOGGER.getChild('cli')
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def _get_system_executable() -> pathlib.Path | None:
|
|
25
|
+
if os.environ.get('PKGCONF_PYPI_EMBEDDED_ONLY'):
|
|
26
|
+
return None
|
|
27
|
+
|
|
28
|
+
scripts = sysconfig.get_path('scripts')
|
|
29
|
+
path_list = os.environ.get('PATH', os.defpath).split(os.pathsep)
|
|
30
|
+
if scripts in path_list:
|
|
31
|
+
path_list.remove(scripts)
|
|
32
|
+
path = os.pathsep.join(path_list)
|
|
33
|
+
|
|
34
|
+
executable = shutil.which('pkgconf', path=path) or shutil.which('pkg-config', path=path)
|
|
35
|
+
if executable:
|
|
36
|
+
return pathlib.Path(executable)
|
|
37
|
+
return None
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def get_executable() -> pathlib.Path:
|
|
41
|
+
"""Get the pkgconf executable."""
|
|
42
|
+
executable: pathlib.Path | None
|
|
43
|
+
|
|
44
|
+
if os.name == 'posix':
|
|
45
|
+
executable_name = 'pkgconf'
|
|
46
|
+
elif os.name == 'nt':
|
|
47
|
+
executable_name = 'pkgconf.EXE'
|
|
48
|
+
else:
|
|
49
|
+
raise NotImplementedError
|
|
50
|
+
|
|
51
|
+
for path in __path__:
|
|
52
|
+
executable = pathlib.Path(path) / '.bin' / executable_name
|
|
53
|
+
if executable.exists():
|
|
54
|
+
return executable
|
|
55
|
+
|
|
56
|
+
warnings.warn('Bundled pkgconf not found, using the system executable', stacklevel=2)
|
|
57
|
+
executable = _get_system_executable()
|
|
58
|
+
if executable:
|
|
59
|
+
return executable
|
|
60
|
+
|
|
61
|
+
msg = 'No pkgconf/pkg-config executable available'
|
|
62
|
+
raise RuntimeError(msg)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def _entry_points() -> list[pkgconf._path_entrypoints.EntryPoint]:
|
|
66
|
+
return pkgconf._path_entrypoints.entry_points(group='pkg_config')
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def get_pkg_config_path() -> list[str]:
|
|
70
|
+
"""Calculate PKG_CONFIG_PATH for Python packages in the current environment.
|
|
71
|
+
|
|
72
|
+
Python packages may register a directory for their pkg-config files by
|
|
73
|
+
specifying a "pkg-config" entrypoint.
|
|
74
|
+
|
|
75
|
+
TODO: Document the entrypoint creation and point to that here.
|
|
76
|
+
[project.entry-points.pkg-config]
|
|
77
|
+
entrypoint-name = 'project.package'
|
|
78
|
+
"""
|
|
79
|
+
return [ep.path for ep in _entry_points()]
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def run_pkgconf(*args: str, **subprocess_kwargs: Any) -> subprocess.CompletedProcess[bytes | str]:
|
|
83
|
+
"""Run the pkgconf executable.
|
|
84
|
+
|
|
85
|
+
:param args: Arguments to pass to the pkgconf call.
|
|
86
|
+
:param subprocess_kwargs: Keyword arguments to pass to the subprocess.run call.
|
|
87
|
+
"""
|
|
88
|
+
env = os.environ.copy()
|
|
89
|
+
PKG_CONFIG_PATH = env.get('PKG_CONFIG_PATH', '').split(os.pathsep) + get_pkg_config_path()
|
|
90
|
+
PKG_CONFIG_PATH = list(dict.fromkeys(PKG_CONFIG_PATH)) # Remove duplicated entried
|
|
91
|
+
env['PKG_CONFIG_PATH'] = os.pathsep.join(PKG_CONFIG_PATH)
|
|
92
|
+
cmd = [os.fspath(get_executable()), *args]
|
|
93
|
+
_CLI_LOGGER.info('Running the Python pkgconf')
|
|
94
|
+
_CLI_LOGGER.info('$ ' + shlex.join(('PKG_CONFIG_PATH=' + shlex.quote(env['PKG_CONFIG_PATH']), *cmd)))
|
|
95
|
+
return subprocess.run(cmd, env=env, **subprocess_kwargs)
|
|
96
|
+
|
|
97
|
+
|
|
98
|
+
__all__ = [
|
|
99
|
+
'PathWarning',
|
|
100
|
+
'get_executable',
|
|
101
|
+
'get_pkg_config_path',
|
|
102
|
+
'run_pkgconf',
|
|
103
|
+
]
|
|
@@ -6,7 +6,7 @@ import sys
|
|
|
6
6
|
import sysconfig
|
|
7
7
|
import warnings
|
|
8
8
|
|
|
9
|
-
from typing import
|
|
9
|
+
from typing import TextIO
|
|
10
10
|
|
|
11
11
|
import pkgconf
|
|
12
12
|
|
|
@@ -99,17 +99,17 @@ def _setup_cli():
|
|
|
99
99
|
|
|
100
100
|
logging.basicConfig(
|
|
101
101
|
stream=sys.stderr,
|
|
102
|
-
format=f'{dim}> %(message)s{reset}',
|
|
103
|
-
level=logging.INFO,
|
|
102
|
+
format=f'{dim}> %(message)s{reset} [%(levelname)s:%(name)s]',
|
|
104
103
|
)
|
|
104
|
+
pkgconf._CLI_LOGGER.setLevel(logging.INFO)
|
|
105
105
|
|
|
106
106
|
def _showwarning(
|
|
107
|
-
message:
|
|
107
|
+
message: Warning | str,
|
|
108
108
|
category: type[Warning],
|
|
109
109
|
filename: str,
|
|
110
110
|
lineno: int,
|
|
111
|
-
file:
|
|
112
|
-
line:
|
|
111
|
+
file: TextIO | None = None,
|
|
112
|
+
line: str | None = None,
|
|
113
113
|
) -> None: # pragma: no cover
|
|
114
114
|
print(f'{yellow}WARNING{reset} {message}', file=sys.stderr)
|
|
115
115
|
|
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
import contextlib
|
|
2
|
+
import importlib.machinery
|
|
3
|
+
import importlib.metadata
|
|
4
|
+
import importlib.resources
|
|
5
|
+
import importlib.util
|
|
6
|
+
import operator
|
|
7
|
+
import os
|
|
8
|
+
import pathlib
|
|
9
|
+
import pickle
|
|
10
|
+
import sys
|
|
11
|
+
import types
|
|
12
|
+
import warnings
|
|
13
|
+
|
|
14
|
+
from collections.abc import Callable, Iterable
|
|
15
|
+
from typing import Any, ParamSpec, TypeVar
|
|
16
|
+
|
|
17
|
+
import pkgconf
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
P = ParamSpec('P')
|
|
21
|
+
T = TypeVar('T')
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
# Import system helpers
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def import_module_no_exec(name: str) -> types.ModuleType:
|
|
28
|
+
"""Return a module object with all the module attributes set, but without executing it.
|
|
29
|
+
|
|
30
|
+
WARNING: This places uninitialized modules in sys.modules.
|
|
31
|
+
"""
|
|
32
|
+
if name in sys.modules:
|
|
33
|
+
return sys.modules[name]
|
|
34
|
+
# Import parent without execution
|
|
35
|
+
if parent := name.rpartition('.')[0]:
|
|
36
|
+
import_module_no_exec(parent)
|
|
37
|
+
# Find module spec
|
|
38
|
+
spec = importlib.util.find_spec(name)
|
|
39
|
+
if not spec:
|
|
40
|
+
msg = f'No module named {name!r}'
|
|
41
|
+
raise ModuleNotFoundError(msg)
|
|
42
|
+
# Create module object without executing, and save it sys.modules
|
|
43
|
+
module = sys.modules[name] = importlib.util.module_from_spec(spec)
|
|
44
|
+
return module
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def module_path(name: str) -> str:
|
|
48
|
+
"""Resolve module name to file-system path.
|
|
49
|
+
|
|
50
|
+
WARNING: This places uninitialized modules in sys.modules.
|
|
51
|
+
"""
|
|
52
|
+
module = import_module_no_exec(name)
|
|
53
|
+
# Check if submodule_search_locations is set on the spec.
|
|
54
|
+
if module.__spec__.submodule_search_locations:
|
|
55
|
+
# If it contains a single path, use it.
|
|
56
|
+
if len(module.__spec__.submodule_search_locations) == 1:
|
|
57
|
+
return module.__spec__.submodule_search_locations[0]
|
|
58
|
+
# Traversables often implement __fspath__, attempt to use it.
|
|
59
|
+
traversable = importlib.resources.files(module)
|
|
60
|
+
if isinstance(traversable, os.PathLike):
|
|
61
|
+
return os.fsdecode(os.fspath(traversable))
|
|
62
|
+
# Give up :/
|
|
63
|
+
msg = f'Unable to resolve the path for {name}'
|
|
64
|
+
raise ValueError(msg)
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
# Helpers to run the import helpers isolated from the import state of the main process/interpreter
|
|
68
|
+
|
|
69
|
+
_subinterpreter = None
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def run_in_subinterpreter(fn: Callable[P, T], *args: P.args, **kwargs: P.kwargs) -> T:
|
|
73
|
+
"""Run callable in a subinterpreter — using concurrent.interpreters."""
|
|
74
|
+
assert sys.version_info >= (3, 14)
|
|
75
|
+
|
|
76
|
+
import concurrent.interpreters
|
|
77
|
+
|
|
78
|
+
global _subinterpreter
|
|
79
|
+
|
|
80
|
+
if _subinterpreter is None:
|
|
81
|
+
_subinterpreter = concurrent.interpreters.create()
|
|
82
|
+
|
|
83
|
+
return _subinterpreter.call(fn, *args, **kwargs)
|
|
84
|
+
|
|
85
|
+
|
|
86
|
+
_worker = None
|
|
87
|
+
_WORKER_CODE = r"""
|
|
88
|
+
import sys, pickle
|
|
89
|
+
|
|
90
|
+
stdin, stdout = sys.stdin.buffer, sys.stdout.buffer
|
|
91
|
+
|
|
92
|
+
while True:
|
|
93
|
+
try:
|
|
94
|
+
length_data = stdin.read(4)
|
|
95
|
+
if not length_data:
|
|
96
|
+
break
|
|
97
|
+
length = int.from_bytes(length_data, "big")
|
|
98
|
+
payload = stdin.read(length)
|
|
99
|
+
fn, args, kwargs = pickle.loads(payload)
|
|
100
|
+
try:
|
|
101
|
+
result = fn(*args, **kwargs)
|
|
102
|
+
data = pickle.dumps((True, result))
|
|
103
|
+
except Exception as e:
|
|
104
|
+
data = pickle.dumps((False, e))
|
|
105
|
+
stdout.write(len(data).to_bytes(4, "big"))
|
|
106
|
+
stdout.write(data)
|
|
107
|
+
stdout.flush()
|
|
108
|
+
except Exception:
|
|
109
|
+
break
|
|
110
|
+
"""
|
|
111
|
+
|
|
112
|
+
|
|
113
|
+
def _make_worker():
|
|
114
|
+
"""Start worker subprocess and assign callable to _worker."""
|
|
115
|
+
global _worker
|
|
116
|
+
import subprocess
|
|
117
|
+
|
|
118
|
+
proc = subprocess.Popen(
|
|
119
|
+
[sys.executable, '-u', '-c', _WORKER_CODE],
|
|
120
|
+
stdin=subprocess.PIPE,
|
|
121
|
+
stdout=subprocess.PIPE,
|
|
122
|
+
)
|
|
123
|
+
|
|
124
|
+
def _worker_fn(fn: Callable[P, T], *args: P.args, **kwargs: P.kwargs) -> T:
|
|
125
|
+
payload = pickle.dumps((fn, args, kwargs))
|
|
126
|
+
length = len(payload).to_bytes(4, 'big')
|
|
127
|
+
|
|
128
|
+
proc.stdin.write(length)
|
|
129
|
+
proc.stdin.write(payload)
|
|
130
|
+
proc.stdin.flush()
|
|
131
|
+
|
|
132
|
+
length_data = proc.stdout.read(4)
|
|
133
|
+
if not length_data:
|
|
134
|
+
msg = 'Subprocess died'
|
|
135
|
+
raise RuntimeError(msg)
|
|
136
|
+
resp_length = int.from_bytes(length_data, 'big')
|
|
137
|
+
data = proc.stdout.read(resp_length)
|
|
138
|
+
ok, value = pickle.loads(data)
|
|
139
|
+
|
|
140
|
+
if ok:
|
|
141
|
+
return value
|
|
142
|
+
else:
|
|
143
|
+
raise value
|
|
144
|
+
|
|
145
|
+
_worker = _worker_fn
|
|
146
|
+
|
|
147
|
+
|
|
148
|
+
def run_in_subprocess(fn: Callable[P, T], *args: P.args, **kwargs: P.kwargs) -> T:
|
|
149
|
+
"""Run callable in a subprocess."""
|
|
150
|
+
if _worker is None:
|
|
151
|
+
_make_worker()
|
|
152
|
+
|
|
153
|
+
return _worker(fn, *args, **kwargs)
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
def run_in_isolated_context(fn: Callable[P, T], *args: P.args, **kwargs: P.kwargs) -> T:
|
|
157
|
+
try:
|
|
158
|
+
if sys.version_info >= (3, 14):
|
|
159
|
+
return run_in_subinterpreter(fn, *args, **kwargs)
|
|
160
|
+
except Exception:
|
|
161
|
+
pkgconf._LOGGER.exception(f'Failed to run {fn} in subinterpreter, falling back to subprocess')
|
|
162
|
+
return run_in_subprocess(fn, *args, **kwargs)
|
|
163
|
+
|
|
164
|
+
|
|
165
|
+
@contextlib.contextmanager
|
|
166
|
+
def replace_sys_modules() -> Iterable[None]:
|
|
167
|
+
original = sys.modules
|
|
168
|
+
sys.modules = original.copy()
|
|
169
|
+
try:
|
|
170
|
+
yield
|
|
171
|
+
finally:
|
|
172
|
+
sys.modules = original
|
|
173
|
+
|
|
174
|
+
|
|
175
|
+
# Entrypoint helpers
|
|
176
|
+
|
|
177
|
+
|
|
178
|
+
class EntryPoint:
|
|
179
|
+
def __init__(self, entrypoint: importlib.metadata.EntryPoint) -> None:
|
|
180
|
+
self._ep = entrypoint
|
|
181
|
+
|
|
182
|
+
@property
|
|
183
|
+
def name(self) -> str:
|
|
184
|
+
return self._ep.name
|
|
185
|
+
|
|
186
|
+
@property
|
|
187
|
+
def value(self) -> str:
|
|
188
|
+
return self._ep.value
|
|
189
|
+
|
|
190
|
+
@property
|
|
191
|
+
def group(self) -> str:
|
|
192
|
+
return self._ep.group
|
|
193
|
+
|
|
194
|
+
@property
|
|
195
|
+
def dist(self) -> importlib.metadata.Distribution | None:
|
|
196
|
+
return self._ep.dist
|
|
197
|
+
|
|
198
|
+
@property
|
|
199
|
+
def path(self) -> str:
|
|
200
|
+
try:
|
|
201
|
+
return self._resolve_via_import_system()
|
|
202
|
+
except Exception:
|
|
203
|
+
msg = 'Failed to resolve the entrypoint path via the import system (see log for details)'
|
|
204
|
+
pkgconf._LOGGER.exception(msg)
|
|
205
|
+
warnings.warn(PathWarning(msg, self), stacklevel=2)
|
|
206
|
+
# Fallback method
|
|
207
|
+
return self._resolve_via_translation()
|
|
208
|
+
|
|
209
|
+
def _resolve_via_import_system(self) -> str:
|
|
210
|
+
# module_path is not safe to run directly in the execution context, as
|
|
211
|
+
# it alters the import state, so try to run it in an isolated context.
|
|
212
|
+
try:
|
|
213
|
+
return run_in_isolated_context(module_path, self.value)
|
|
214
|
+
except Exception:
|
|
215
|
+
pkgconf._LOGGER.exception('Failed to run module_path in isolated context')
|
|
216
|
+
# Fallback to running in the current context, but try to save and
|
|
217
|
+
# restore the original import state.
|
|
218
|
+
with replace_sys_modules():
|
|
219
|
+
return module_path(self.value)
|
|
220
|
+
|
|
221
|
+
def _resolve_via_translation(self) -> str:
|
|
222
|
+
assert self.dist
|
|
223
|
+
subpath = pathlib.PurePath(*self.value.split('.'))
|
|
224
|
+
dist_path = self.dist.locate_file(subpath)
|
|
225
|
+
assert isinstance(dist_path, os.PathLike)
|
|
226
|
+
return os.fsdecode(os.fspath(dist_path))
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
def entry_points(**select_params: Any) -> list[EntryPoint]:
|
|
230
|
+
original_eps = importlib.metadata.entry_points(**select_params)
|
|
231
|
+
our_eps = map(EntryPoint, original_eps)
|
|
232
|
+
valid_eps = filter(operator.attrgetter('path'), our_eps)
|
|
233
|
+
return sorted(valid_eps, key=operator.attrgetter('name'))
|
|
234
|
+
|
|
235
|
+
|
|
236
|
+
class PathWarning(Warning):
|
|
237
|
+
def __init__(self, message: str, entrypoint: EntryPoint) -> None:
|
|
238
|
+
super().__init__(message)
|
|
239
|
+
self._entrypoint = entrypoint
|
|
240
|
+
self._logger = pkgconf._LOGGER.getChild(self.__class__.__name__)
|
|
241
|
+
self._logger.warning(
|
|
242
|
+
message,
|
|
243
|
+
extra={
|
|
244
|
+
'entrypoint': self._entrypoint,
|
|
245
|
+
'distribution': self._distribution_info(),
|
|
246
|
+
},
|
|
247
|
+
)
|
|
248
|
+
|
|
249
|
+
def _distribution_info(self) -> str:
|
|
250
|
+
assert self._entrypoint.dist
|
|
251
|
+
info = f'{self._entrypoint.dist.name}-{self._entrypoint.dist.version}'
|
|
252
|
+
if metadata_path := self._find_metadata_path():
|
|
253
|
+
info += f' at {metadata_path!r}'
|
|
254
|
+
return info
|
|
255
|
+
|
|
256
|
+
def _find_metadata_path(self) -> str | None:
|
|
257
|
+
assert self._entrypoint.dist
|
|
258
|
+
try:
|
|
259
|
+
dist_root = self._entrypoint.dist.locate_file('')
|
|
260
|
+
except NotImplementedError:
|
|
261
|
+
return None
|
|
262
|
+
|
|
263
|
+
for file in self._entrypoint.dist.files or []:
|
|
264
|
+
if file.parts[0].endswith('.dist-info'):
|
|
265
|
+
return str(dist_root / file.parts[0])
|
|
266
|
+
return None
|
|
@@ -7,10 +7,10 @@ def report() -> None:
|
|
|
7
7
|
print(f'pkgconf executable: {pkgconf.get_executable()}')
|
|
8
8
|
|
|
9
9
|
print('entrypoints:')
|
|
10
|
-
for entrypoint in pkgconf.
|
|
10
|
+
for entrypoint in pkgconf._entry_points():
|
|
11
11
|
print(f' {entrypoint.name}:')
|
|
12
12
|
print(f' value: {entrypoint.value}')
|
|
13
|
-
print(f' path: {
|
|
13
|
+
print(f' path: {entrypoint.path}')
|
|
14
14
|
|
|
15
15
|
print(f'PKG_CONFIG_PATH: {os.pathsep.join(pkgconf.get_pkg_config_path())}')
|
|
16
16
|
|
|
@@ -41,7 +41,13 @@ def self_wheel(tmp_path_factory):
|
|
|
41
41
|
@pytest.fixture
|
|
42
42
|
def env(tmpdir, self_wheel):
|
|
43
43
|
"""Make a virtual environment with our project installed."""
|
|
44
|
-
env = environment_helpers.create_venv(tmpdir
|
|
44
|
+
env = environment_helpers.create_venv(tmpdir)
|
|
45
|
+
|
|
46
|
+
# Write .pth file pointing to the current environment
|
|
47
|
+
current_env = environment_helpers.CurrentEnvironment()
|
|
48
|
+
purelib, platlib = current_env.scheme['purelib'], current_env.scheme['platlib']
|
|
49
|
+
env.scheme['purelib'].joinpath('base-env.pth').write_text(f'{purelib!s}\n{platlib!s}\n')
|
|
50
|
+
|
|
45
51
|
env.install_wheel(self_wheel)
|
|
46
52
|
return env
|
|
47
53
|
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
build-backend = 'hatchling.build'
|
|
3
|
+
requires = ['hatchling']
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = 'example'
|
|
7
|
+
version = '1.0.0'
|
|
8
|
+
|
|
9
|
+
[project.entry-points.pkg_config]
|
|
10
|
+
example = 'example.pkgconf'
|
|
11
|
+
|
|
12
|
+
[tool.hatch.build.targets.wheel]
|
|
13
|
+
packages = ['example']
|
pkgconf-2.4.3.post3/tests/packages/register-pkg-config-path/register_pkg_config_path/lib/__init__.py
ADDED
|
File without changes
|
|
File without changes
|
|
@@ -1,6 +1,4 @@
|
|
|
1
|
-
import os
|
|
2
1
|
import re
|
|
3
|
-
import shutil
|
|
4
2
|
import subprocess
|
|
5
3
|
import sys
|
|
6
4
|
|
|
@@ -13,8 +11,7 @@ import pkgconf.__main__
|
|
|
13
11
|
@pytest.mark.parametrize('name', ['pkgconf', 'pkg-config'])
|
|
14
12
|
def test_entries(env, name):
|
|
15
13
|
# TODO: Check PKG_CONFIG_PATH is correctly set
|
|
16
|
-
|
|
17
|
-
help_text = subprocess.check_output([os.fspath(path), '--help'])
|
|
14
|
+
help_text = env.run_script('pkgconf', '--help')
|
|
18
15
|
assert help_text.decode().startswith('usage: pkgconf')
|
|
19
16
|
|
|
20
17
|
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import os
|
|
2
2
|
import pathlib
|
|
3
|
+
import shutil
|
|
3
4
|
import subprocess
|
|
4
5
|
|
|
5
6
|
import pytest
|
|
@@ -69,3 +70,19 @@ def test_get_executable_fallback_to_system(mocker):
|
|
|
69
70
|
executable = pkgconf.get_executable()
|
|
70
71
|
|
|
71
72
|
assert executable == pkgconf._get_system_executable()
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def test_inplace_editable(env, tmp_path, packages, data):
|
|
76
|
+
dst = tmp_path / 'inplace'
|
|
77
|
+
shutil.copytree(packages / 'inplace', dst)
|
|
78
|
+
|
|
79
|
+
env.install(['-e', dst])
|
|
80
|
+
|
|
81
|
+
src = os.fspath(data / 'needs-example-lib.c')
|
|
82
|
+
bin = os.fspath(tmp_path / 'needs-example-lib')
|
|
83
|
+
|
|
84
|
+
cflags = env.run_interpreter('-m', 'pkgconf', '--cflags', 'example').decode().split()
|
|
85
|
+
subprocess.check_call(['gcc', '-o', bin, src, *cflags])
|
|
86
|
+
out = subprocess.check_output([bin])
|
|
87
|
+
|
|
88
|
+
assert out == b'bar'
|