diff options
Diffstat (limited to 'package/pkgconf')
| -rw-r--r-- | package/pkgconf/Makefile | 13 | ||||
| -rw-r--r-- | package/pkgconf/patches/0001-Only-prefix-with-the-sysroot-a-subset-of-variables.patch | 150 | 
2 files changed, 157 insertions, 6 deletions
| diff --git a/package/pkgconf/Makefile b/package/pkgconf/Makefile index bded34468..38f9b4c4a 100644 --- a/package/pkgconf/Makefile +++ b/package/pkgconf/Makefile @@ -4,16 +4,14 @@  include $(ADK_TOPDIR)/rules.mk  PKG_NAME:=		pkgconf -PKG_VERSION:=		0.9.6 +PKG_VERSION:=		2.3.0  PKG_RELEASE:=		1 -PKG_HASH:=		8f5f48e52ddef0c3cbffe93f32d5148041e0030b8798b49b0b5fe72f4968d7ec +PKG_HASH:=		3a9080ac51d03615e7c1910a0a2a8df08424892b5f13b0628a204d3fcce0ea8b  PKG_DESCR:=		smart pkg-config replacement  PKG_SECTION:=		dev/tools  HOST_BUILDDEP:=		sed-host -PKG_URL:=		https://github.com/pkgconf/pkgconf -PKG_SITES:=		http://rabbit.dereferenced.org/~nenolod/distfiles/ - -DISTFILES:=		${PKG_NAME}-${PKG_VERSION}.tar.gz +PKG_URL:=		http://pkgconf.org/ +PKG_SITES:=		https://distfiles.dereferenced.org/pkgconf/  include $(ADK_TOPDIR)/mk/host.mk  include $(ADK_TOPDIR)/mk/package.mk @@ -31,6 +29,9 @@ endif  	(cd $(STAGING_HOST_DIR)/usr/bin && ln -sf pkg-config $(GNU_TARGET_NAME)-pkg-config)  pkgconf-install: +	$(INSTALL_DIR) $(IDIR_PKGCONF)/usr/lib +	$(CP) $(WRKINST)/usr/lib/libpkgconf*so* \ +		$(IDIR_PKGCONF)/usr/lib  	$(INSTALL_DIR) $(IDIR_PKGCONF)/usr/bin  	$(INSTALL_BIN) $(WRKINST)/usr/bin/pkgconf \  		$(IDIR_PKGCONF)/usr/bin diff --git a/package/pkgconf/patches/0001-Only-prefix-with-the-sysroot-a-subset-of-variables.patch b/package/pkgconf/patches/0001-Only-prefix-with-the-sysroot-a-subset-of-variables.patch new file mode 100644 index 000000000..986058d40 --- /dev/null +++ b/package/pkgconf/patches/0001-Only-prefix-with-the-sysroot-a-subset-of-variables.patch @@ -0,0 +1,150 @@ +From c912e9bb8d5be414fda74b2019deb2a6d2d041a0 Mon Sep 17 00:00:00 2001 +From: Thomas Petazzoni <thomas.petazzoni@bootlin.com> +Date: Sun, 16 Dec 2018 11:52:18 +0100 +Subject: [PATCH] Only prefix with the sysroot a subset of variables + +The standard logic of pkg-config is to prefix all absolute paths by +the sysroot defined in PKG_CONFIG_SYSROOT_DIR. However, while some +paths (like includedir, libdir, and paths used in -L and -I options) +indeed need to be prefixed by the sysroot, it is not necessarily the +case for paths that are used on the target. If they get prefixed by +the sysroot, the runtime path on the target is incorrect. + +Unfortunately, pkg-config doesn't have a sense of which path needs to +be prefixed by the sysroot, and which path should not be prefixed by +the sysroot. + +So, let's simply have a whitelist of paths that should be prefixed: +g_ir_scanner, g_ir_compiler, g_ir_generate, includedir, libdir, mapdir, +pkgdatadir and sdkdir. This list of variables was collected over years of +Buildroot development. All other paths are not prefixed by the sysroot. + +Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> +[Updated to include gobject-introspection paths] +Signed-off-by: Adam Duskett <aduskett@gmail.com> +[Dropped the pkgdatadir path] +Signed-off-by: Thomas Devoogdt <thomas@devoogdt.com> +--- + libpkgconf/tuple.c | 64 ++++++++++++++++++++++++++++++++-------------- + 1 file changed, 45 insertions(+), 19 deletions(-) + +diff --git a/libpkgconf/tuple.c b/libpkgconf/tuple.c +index 83f6a47..d56fcec 100644 +--- a/libpkgconf/tuple.c ++++ b/libpkgconf/tuple.c +@@ -178,6 +178,20 @@ dequote(const char *value) + 	return buf; + } +  ++static char * ++pkgconf_tuple_parse_sysroot(const pkgconf_client_t *client, pkgconf_list_t *vars, const char *value, unsigned int flags, bool add_sysroot); ++ ++const char *sysrooted_keys[] = { ++	"g_ir_scanner", ++	"g_ir_compiler", ++	"g_ir_generate", ++	"includedir", ++	"libdir", ++	"mapdir", ++	"sdkdir", ++	NULL, ++}; ++ + static const char * + find_sysroot(const pkgconf_client_t *client, pkgconf_list_t *vars) + { +@@ -237,14 +251,20 @@ pkgconf_tuple_add(const pkgconf_client_t *client, pkgconf_list_t *list, const ch + { + 	char *dequote_value; + 	pkgconf_tuple_t *tuple = calloc(1, sizeof(pkgconf_tuple_t)); ++	bool add_sysroot = false; ++	int i; +  + 	pkgconf_tuple_find_delete(list, key); +  + 	dequote_value = dequote(value); +  ++	for (i = 0; sysrooted_keys[i] != NULL; i++) ++		if (!strcmp(key, sysrooted_keys[i])) ++			add_sysroot = true; ++ + 	tuple->key = strdup(key); + 	if (parse) +-		tuple->value = pkgconf_tuple_parse(client, list, dequote_value, flags); ++		tuple->value = pkgconf_tuple_parse_sysroot(client, list, dequote_value, flags, add_sysroot); + 	else + 		tuple->value = strdup(dequote_value); +  +@@ -294,22 +314,8 @@ pkgconf_tuple_find(const pkgconf_client_t *client, pkgconf_list_t *list, const c + 	return NULL; + } +  +-/* +- * !doc +- * +- * .. c:function:: char *pkgconf_tuple_parse(const pkgconf_client_t *client, pkgconf_list_t *vars, const char *value, unsigned int flags) +- * +- *    Parse an expression for variable substitution. +- * +- *    :param pkgconf_client_t* client: The pkgconf client object to access. +- *    :param pkgconf_list_t* list: The variable list to search for variables (along side the global variable list). +- *    :param char* value: The ``key=value`` string to parse. +- *    :param uint flags: Any flags to consider while parsing. +- *    :return: the variable data with any variables substituted +- *    :rtype: char * +- */ +-char * +-pkgconf_tuple_parse(const pkgconf_client_t *client, pkgconf_list_t *vars, const char *value, unsigned int flags) ++static char * ++pkgconf_tuple_parse_sysroot(const pkgconf_client_t *client, pkgconf_list_t *vars, const char *value, unsigned int flags, bool add_sysroot) + { + 	char buf[PKGCONF_BUFSIZE]; + 	const char *ptr; +@@ -318,7 +324,7 @@ pkgconf_tuple_parse(const pkgconf_client_t *client, pkgconf_list_t *vars, const + 	if (!(client->flags & PKGCONF_PKG_PKGF_FDO_SYSROOT_RULES) && + 		(!(flags & PKGCONF_PKG_PROPF_UNINSTALLED) || (client->flags & PKGCONF_PKG_PKGF_PKGCONF1_SYSROOT_RULES))) + 	{ +-		if (*value == '/' && client->sysroot_dir != NULL && strncmp(value, client->sysroot_dir, strlen(client->sysroot_dir))) ++		if (add_sysroot && *value == '/' && client->sysroot_dir != NULL && strncmp(value, client->sysroot_dir, strlen(client->sysroot_dir))) + 			bptr += pkgconf_strlcpy(buf, client->sysroot_dir, sizeof buf); + 	} +  +@@ -381,7 +387,7 @@ pkgconf_tuple_parse(const pkgconf_client_t *client, pkgconf_list_t *vars, const + 				{ + 					size_t nlen; +  +-					parsekv = pkgconf_tuple_parse(client, vars, kv, flags); ++					parsekv = pkgconf_tuple_parse_sysroot(client, vars, kv, flags, add_sysroot); + 					nlen = pkgconf_strlcpy(bptr, parsekv, remain); + 					free(parsekv); +  +@@ -432,6 +438,26 @@ pkgconf_tuple_parse(const pkgconf_client_t *client, pkgconf_list_t *vars, const + 	return strdup(buf); + } +  ++/* ++ * !doc ++ * ++ * .. c:function:: char *pkgconf_tuple_parse(const pkgconf_client_t *client, pkgconf_list_t *vars, const char *value, unsigned int flags) ++ * ++ *    Parse an expression for variable substitution. ++ * ++ *    :param pkgconf_client_t* client: The pkgconf client object to access. ++ *    :param pkgconf_list_t* list: The variable list to search for variables (along side the global variable list). ++ *    :param char* value: The ``key=value`` string to parse. ++ *    :param uint flags: Any flags to consider while parsing. ++ *    :return: the variable data with any variables substituted ++ *    :rtype: char * ++ */ ++char * ++pkgconf_tuple_parse(const pkgconf_client_t *client, pkgconf_list_t *vars, const char *value, unsigned int flags) ++{ ++	return pkgconf_tuple_parse_sysroot(client, vars, value, flags, true); ++} ++ + /* +  * !doc +  * +--  +2.43.0 + | 
