diff mbox series

[OpenWrt-Devel,PATCHv2,1/3] tools/pkg-config: Replace with pkgconf

Message ID 20191128191933.5421-1-rosenp@gmail.com
State Accepted
Delegated to: Petr Štetiar
Headers show
Series [OpenWrt-Devel,PATCHv2,1/3] tools/pkg-config: Replace with pkgconf | expand

Commit Message

Rosen Penev Nov. 28, 2019, 7:19 p.m. UTC
pkgconf is a newer, actively maintained implementation of pkg-config that
supports more aspects of the pkg-config file specification and provides a
library interface that applications can use to incorporate intelligent
handling of pkg-config files into themselves (such as build file
generators, IDEs, and compilers). Through its pkg-config compatibility
interface (activated when it is run as "pkg-config"), it also can
completely replace the original implementation.

It is also lighterweight and does not require glib2, as pkg-config does.

On other distros, pkgconf is symlinked to pkg-config. For simplicity here,
it is renamed to pkg-config.real, as in the original package.

Initial results have been positive. As before, pkgconf works as long as
the pkg-config files point to the proper paths.

Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
 tools/Makefile                                |  6 +++---
 tools/{pkg-config => pkgconf}/Makefile        | 20 +++++++------------
 .../{pkg-config => pkgconf}/files/pkg-config  |  0
 3 files changed, 10 insertions(+), 16 deletions(-)
 rename tools/{pkg-config => pkgconf}/Makefile (54%)
 rename tools/{pkg-config => pkgconf}/files/pkg-config (100%)

Comments

Petr Štetiar Dec. 25, 2019, 11:17 a.m. UTC | #1
Rosen Penev <rosenp@gmail.com> [2019-11-28 11:19:31]:

> pkgconf is a newer, actively maintained implementation of pkg-config

I'm wondering if that `actively maintained` part still holds true.

-- ynezz
Rosen Penev Dec. 25, 2019, 8:51 p.m. UTC | #2
On Wed, Dec 25, 2019 at 3:17 AM Petr Štetiar <ynezz@true.cz> wrote:
>
> Rosen Penev <rosenp@gmail.com> [2019-11-28 11:19:31]:
>
> > pkgconf is a newer, actively maintained implementation of pkg-config
>
> I'm wondering if that `actively maintained` part still holds true.
It does. The team has management issues it seems. They've publicly
stated they want to move away from GitHub:
https://github.com/pkgconf/pkgconf.github.io/issues/1

So you would think based on the URL of the download that development
moved here: https://git.dereferenced.org/pkgconf/pkgconf#

But there's also a third place where development seems to have moved:
https://git.sr.ht/~kaniini/pkgconf/log

Seems it's a mess.
>
> -- ynezz
Petr Štetiar Feb. 28, 2020, 10:02 a.m. UTC | #3
Rosen Penev <rosenp@gmail.com> [2019-12-25 12:51:33]:

> On Wed, Dec 25, 2019 at 3:17 AM Petr Štetiar <ynezz@true.cz> wrote:
> >
> > Rosen Penev <rosenp@gmail.com> [2019-11-28 11:19:31]:
> >
> > > pkgconf is a newer, actively maintained implementation of pkg-config
> >
> > I'm wondering if that `actively maintained` part still holds true.
>
> It does. The team has management issues it seems. They've publicly
> stated they want to move away from GitHub:
> https://github.com/pkgconf/pkgconf.github.io/issues/1
> 
> So you would think based on the URL of the download that development
> moved here: https://git.dereferenced.org/pkgconf/pkgconf#
> 
> But there's also a third place where development seems to have moved:
> https://git.sr.ht/~kaniini/pkgconf/log
> 
> Seems it's a mess.

So how to sort this out?

I'm simply in favor of keeping the current pkg-config, because the suggested
replacement doesn't seem like a worth considering yet, but maybe I read it
wrong.

-- ynezz
Rosen Penev Feb. 29, 2020, 4:12 a.m. UTC | #4
On Fri, Feb 28, 2020 at 2:03 AM Petr Štetiar <ynezz@true.cz> wrote:
>
> Rosen Penev <rosenp@gmail.com> [2019-12-25 12:51:33]:
>
> > On Wed, Dec 25, 2019 at 3:17 AM Petr Štetiar <ynezz@true.cz> wrote:
> > >
> > > Rosen Penev <rosenp@gmail.com> [2019-11-28 11:19:31]:
> > >
> > > > pkgconf is a newer, actively maintained implementation of pkg-config
> > >
> > > I'm wondering if that `actively maintained` part still holds true.
> >
> > It does. The team has management issues it seems. They've publicly
> > stated they want to move away from GitHub:
> > https://github.com/pkgconf/pkgconf.github.io/issues/1
> >
> > So you would think based on the URL of the download that development
> > moved here: https://git.dereferenced.org/pkgconf/pkgconf#
> >
> > But there's also a third place where development seems to have moved:
> > https://git.sr.ht/~kaniini/pkgconf/log
> >
> > Seems it's a mess.
>
> So how to sort this out?
>
> I'm simply in favor of keeping the current pkg-config, because the suggested
> replacement doesn't seem like a worth considering yet, but maybe I read it
> wrong.
It's more portable and smaller. And as stated, it is still fairly active.
>
> -- ynezz
Petr Štetiar March 13, 2020, 2:33 p.m. UTC | #5
Rosen Penev <rosenp@gmail.com> [2020-02-28 20:12:45]:

Hi,

> It's more portable and smaller. And as stated, it is still fairly active.

Jo has today brought following issue to my attention:

## pkgconf
 $ PATH=$(pwd)/staging_dir/host/bin:$PATH STAGING_PREFIX=$(pwd)/staging_dir/host PKG_CONFIG_PATH=$(pwd)/staging_dir/host/lib/pkgconfig PKG_CONFIG_LIBDIR=$(pwd)/staging_dir/host/lib/pkgconfig pkg-config libelf --libs
 -lelf

## pkg-config

 $ PATH=$(pwd)/staging_dir/host/bin:$PATH STAGING_PREFIX=$(pwd)/staging_dir/host PKG_CONFIG_PATH=$(pwd)/staging_dir/host/lib/pkgconfig PKG_CONFIG_LIBDIR=$(pwd)/staging_dir/host/lib/pkgconfig pkg-config libelf --libs
 -L/home/jow/devel/lede/staging.git/staging_dir/host/lib -lelf

So it looks like pkgconf is filtering out some library paths, causing for
example following issues:

 make[5]: *** No rule to make target 'tools/objtool/objtool', needed by '/home/jow/devel/lede/staging.git/build_dir/target-x86_64_musl/linux-x86_64/siit-1.2/siit.o'.  Stop.

< jow> the main kernel build will skip building objtool (and forcibly disable CONFIG_STACK_VALIDATION) because it cannot link libelf
< jow> any external kmod will assume CONFIG_STACK_VALIDATION is enabled and kbuild will try to invoke objtool which doesn't exist in the precompiled kernel soure tree

Possibly caused by:

 ## linker flags optimization

 As previously mentioned, pkgconf makes optimizations to the linker flags in
 both the case of static and shared linking in order to avoid overlinking
 binaries and also simplifies the `CFLAGS` and `LIBS` output of the pkgconf
 tool for improved readability.

Ref: https://github.com/openwrt/openwrt/pull/2832

-- ynezz
Rosen Penev March 13, 2020, 7:39 p.m. UTC | #6
On Fri, Mar 13, 2020 at 7:33 AM Petr Štetiar <ynezz@true.cz> wrote:
>
> Rosen Penev <rosenp@gmail.com> [2020-02-28 20:12:45]:
>
> Hi,
>
> > It's more portable and smaller. And as stated, it is still fairly active.
>
> Jo has today brought following issue to my attention:
>
> ## pkgconf
>  $ PATH=$(pwd)/staging_dir/host/bin:$PATH STAGING_PREFIX=$(pwd)/staging_dir/host PKG_CONFIG_PATH=$(pwd)/staging_dir/host/lib/pkgconfig PKG_CONFIG_LIBDIR=$(pwd)/staging_dir/host/lib/pkgconfig pkg-config libelf --libs
>  -lelf
>
> ## pkg-config
>
>  $ PATH=$(pwd)/staging_dir/host/bin:$PATH STAGING_PREFIX=$(pwd)/staging_dir/host PKG_CONFIG_PATH=$(pwd)/staging_dir/host/lib/pkgconfig PKG_CONFIG_LIBDIR=$(pwd)/staging_dir/host/lib/pkgconfig pkg-config libelf --libs
>  -L/home/jow/devel/lede/staging.git/staging_dir/host/lib -lelf
>
> So it looks like pkgconf is filtering out some library paths, causing for
> example following issues:
>
>  make[5]: *** No rule to make target 'tools/objtool/objtool', needed by '/home/jow/devel/lede/staging.git/build_dir/target-x86_64_musl/linux-x86_64/siit-1.2/siit.o'.  Stop.
>
> < jow> the main kernel build will skip building objtool (and forcibly disable CONFIG_STACK_VALIDATION) because it cannot link libelf
> < jow> any external kmod will assume CONFIG_STACK_VALIDATION is enabled and kbuild will try to invoke objtool which doesn't exist in the precompiled kernel soure tree
>
> Possibly caused by:
>
>  ## linker flags optimization
>
>  As previously mentioned, pkgconf makes optimizations to the linker flags in
>  both the case of static and shared linking in order to avoid overlinking
>  binaries and also simplifies the `CFLAGS` and `LIBS` output of the pkgconf
>  tool for improved readability.
>
> Ref: https://github.com/openwrt/openwrt/pull/2832
Never seen this. Then again, I've only dealt with target packages.
>
> -- ynezz
diff mbox series

Patch

diff --git a/tools/Makefile b/tools/Makefile
index 2f57d25525..a7d48a40a4 100644
--- a/tools/Makefile
+++ b/tools/Makefile
@@ -22,7 +22,7 @@  ifneq ($(CONFIG_SDK)$(CONFIG_PACKAGE_kmod-b43)$(CONFIG_PACKAGE_b43legacy-firmwar
 endif
 
 tools-$(BUILD_TOOLCHAIN) += gmp mpfr mpc libelf expat
-tools-y += m4 libtool autoconf automake flex bison pkg-config mklibs zlib
+tools-y += m4 libtool autoconf automake flex bison pkgconf mklibs zlib
 tools-y += sstrip make-ext4fs e2fsprogs mtd-utils mkimage
 tools-y += firmware-utils patch-image quilt padjffs2
 tools-y += mm-macros missing-macros cmake bc findutils gengetopt patchelf
@@ -48,7 +48,7 @@  $(curdir)/squashfs/compile := $(curdir)/lzma-old/compile
 $(curdir)/squashfskit4/compile := $(curdir)/xz/compile $(curdir)/zlib/compile
 $(curdir)/quilt/compile := $(curdir)/autoconf/compile $(curdir)/findutils/compile
 $(curdir)/autoconf/compile := $(curdir)/m4/compile
-$(curdir)/automake/compile := $(curdir)/m4/compile $(curdir)/autoconf/compile $(curdir)/pkg-config/compile $(curdir)/xz/compile
+$(curdir)/automake/compile := $(curdir)/m4/compile $(curdir)/autoconf/compile $(curdir)/pkgconf/compile $(curdir)/xz/compile
 $(curdir)/gmp/compile := $(curdir)/libtool/compile
 $(curdir)/mpc/compile := $(curdir)/mpfr/compile $(curdir)/gmp/compile
 $(curdir)/mpfr/compile := $(curdir)/gmp/compile
@@ -69,7 +69,7 @@  $(curdir)/findutils/compile := $(curdir)/bison/compile
 $(curdir)/gengetopt/compile := $(curdir)/libtool/compile
 $(curdir)/patchelf/compile := $(curdir)/libtool/compile
 $(curdir)/dosfstools/compile := $(curdir)/autoconf/compile $(curdir)/automake/compile
-$(curdir)/libressl/compile := $(curdir)/pkg-config/compile
+$(curdir)/libressl/compile := $(curdir)/pkgconf/compile
 $(curdir)/mkimage/compile += $(curdir)/libressl/compile
 $(curdir)/firmware-utils/compile += $(curdir)/libressl/compile $(curdir)/zlib/compile
 $(curdir)/cmake/compile += $(curdir)/libressl/compile
diff --git a/tools/pkg-config/Makefile b/tools/pkgconf/Makefile
similarity index 54%
rename from tools/pkg-config/Makefile
rename to tools/pkgconf/Makefile
index 17a8737be1..cefee1edf0 100644
--- a/tools/pkg-config/Makefile
+++ b/tools/pkgconf/Makefile
@@ -1,4 +1,4 @@ 
-# 
+#
 # Copyright (C) 2006-2016 OpenWrt.org
 #
 # This is free software, licensed under the GNU General Public License v2.
@@ -6,12 +6,12 @@ 
 #
 include $(TOPDIR)/rules.mk
 
-PKG_NAME:=pkg-config
-PKG_VERSION:=0.29.2
+PKG_NAME:=pkgconf
+PKG_VERSION:=1.6.3
 
-PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
-PKG_SOURCE_URL:=https://pkgconfig.freedesktop.org/releases/
-PKG_HASH:=6fc69c01688c9458a57eb9a1664c9aba372ccda420a02bf4429fe610e7e7d591
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:=https://distfiles.dereferenced.org/pkgconf
+PKG_HASH:=61f0b31b0d5ea0e862b454a80c170f57bad47879c0c42bd8de89200ff62ea210
 
 HOST_BUILD_PARALLEL:=1
 
@@ -19,15 +19,9 @@  include $(INCLUDE_DIR)/host-build.mk
 
 unexport PKG_CONFIG
 
-HOST_CONFIGURE_ARGS += --with-internal-glib
-
-ifeq ($(HOST_OS),Darwin)
-HOST_LDFLAGS += -framework CoreFoundation -framework Carbon
-endif
-
 define Host/Install
 	$(MAKE) -C $(HOST_BUILD_DIR) install
-	mv $(STAGING_DIR_HOST)/bin/pkg-config $(STAGING_DIR_HOST)/bin/pkg-config.real
+	mv $(STAGING_DIR_HOST)/bin/pkgconf $(STAGING_DIR_HOST)/bin/pkg-config.real
 	$(INSTALL_BIN) ./files/pkg-config $(STAGING_DIR_HOST)/bin/pkg-config
 endef
 
diff --git a/tools/pkg-config/files/pkg-config b/tools/pkgconf/files/pkg-config
similarity index 100%
rename from tools/pkg-config/files/pkg-config
rename to tools/pkgconf/files/pkg-config