All of lore.kernel.org
 help / color / mirror / Atom feed
* [Buildroot] Alternate solution for the pkg-config mess ?
@ 2018-12-16 11:04 Thomas Petazzoni
  2018-12-16 18:57 ` Yann E. MORIN
  2018-12-17  9:39 ` Arnout Vandecappelle
  0 siblings, 2 replies; 3+ messages in thread
From: Thomas Petazzoni @ 2018-12-16 11:04 UTC (permalink / raw)
  To: buildroot

Hello,

You'll find attached a patch that modifies pkgconf 1.5.3 to behave like
our older pkg-config used to, i.e only prefix by the sysroot a
specific subset of variables, and leave all others untouched.

I am clearly not familiar with all the internals of pkgconf, so I won't
pretend that the patch is perfect, but it seems to do the job.

If we decide that this is the right approach rather than adjusting
gazillions of packages for pkgconf 1.5.3, then let me know and I'll
submit as a proper patch.

Fabrice: I tested this with util-linux/bash-completion, and it does the
job. If you have the chance to test it on other situations where you
had to patch packages to work with pkgconf 1.5.3, it would be very
useful.

Thanks!

Thomas
-- 
Thomas Petazzoni, CTO, Bootlin
Embedded Linux and Kernel engineering
https://bootlin.com
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-Only-prefix-with-the-sysroot-a-subset-of-variables.patch
Type: text/x-patch
Size: 4495 bytes
Desc: not available
URL: <http://lists.busybox.net/pipermail/buildroot/attachments/20181216/37669f96/attachment.bin>

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Buildroot] Alternate solution for the pkg-config mess ?
  2018-12-16 11:04 [Buildroot] Alternate solution for the pkg-config mess ? Thomas Petazzoni
@ 2018-12-16 18:57 ` Yann E. MORIN
  2018-12-17  9:39 ` Arnout Vandecappelle
  1 sibling, 0 replies; 3+ messages in thread
From: Yann E. MORIN @ 2018-12-16 18:57 UTC (permalink / raw)
  To: buildroot

Thomas, All,

On 2018-12-16 12:04 +0100, Thomas Petazzoni spake thusly:
> You'll find attached a patch that modifies pkgconf 1.5.3 to behave like
> our older pkg-config used to, i.e only prefix by the sysroot a
> specific subset of variables, and leave all others untouched.
> 
> I am clearly not familiar with all the internals of pkgconf, so I won't
> pretend that the patch is perfect, but it seems to do the job.
> 
> If we decide that this is the right approach rather than adjusting
> gazillions of packages for pkgconf 1.5.3, then let me know and I'll
> submit as a proper patch.

As discussed IRL, I prefer we have to fixup a few packages (like the
upcoming glib2 packages) rather than patch all the gazillions failing
packages we now have.

If it turns out that we have more to fix in the future with that patch,
then we can revert. But as it is now, we have too much to fix.

In my opinion, I think reverting to the previous behaviour is sane.
Since this patch is doing exactly that, then that is fine by me.

Regards,
Yann E. MORIN.

> Fabrice: I tested this with util-linux/bash-completion, and it does the
> job. If you have the chance to test it on other situations where you
> had to patch packages to work with pkgconf 1.5.3, it would be very
> useful.
> 
> Thanks!
> 
> Thomas
> -- 
> Thomas Petazzoni, CTO, Bootlin
> Embedded Linux and Kernel engineering
> https://bootlin.com

> From bfb8780c4c12c69032c3aee6de2f7b65f72d7ae3 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
> 
> Hack the pkg-config implementation to behave like it used to, by only
> prefixing a specific subset of variables by the sysroot.
> 
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
> ---
>  libpkgconf/tuple.c | 61 ++++++++++++++++++++++++++++++++--------------
>  1 file changed, 43 insertions(+), 18 deletions(-)
> 
> diff --git a/libpkgconf/tuple.c b/libpkgconf/tuple.c
> index 8523709..6fde258 100644
> --- a/libpkgconf/tuple.c
> +++ b/libpkgconf/tuple.c
> @@ -160,6 +160,18 @@ dequote(const char *value)
>  	return buf;
>  }
>  
> +static char *
> +pkgconf_tuple_parse_sysroot(const pkgconf_client_t *client, pkgconf_list_t *vars, const char *value, bool add_sysroot);
> +
> +const char *sysrooted_keys[] = {
> +	"includedir",
> +	"libdir",
> +	"mapdir",
> +	"pkgdatadir",
> +	"sdkdir",
> +	NULL,
> +};
> +
>  /*
>   * !doc
>   *
> @@ -180,6 +192,8 @@ pkgconf_tuple_add(const pkgconf_client_t *client, pkgconf_list_t *list, const ch
>  {
>  	char *dequote_value;
>  	pkgconf_tuple_t *tuple = calloc(sizeof(pkgconf_tuple_t), 1);
> +	bool add_sysroot = true;
> +	int i;
>  
>  	pkgconf_tuple_find_delete(list, key);
>  
> @@ -187,9 +201,14 @@ pkgconf_tuple_add(const pkgconf_client_t *client, pkgconf_list_t *list, const ch
>  
>  	PKGCONF_TRACE(client, "adding tuple to @%p: %s => %s (parsed? %d)", list, key, dequote_value, parse);
>  
> +	add_sysroot = false;
> +	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);
> +		tuple->value = pkgconf_tuple_parse_sysroot(client, list, dequote_value, add_sysroot);
>  	else
>  		tuple->value = strdup(dequote_value);
>  
> @@ -233,27 +252,14 @@ 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)
> - *
> - *    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.
> - *    :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)
> +static char *
> +pkgconf_tuple_parse_sysroot(const pkgconf_client_t *client, pkgconf_list_t *vars, const char *value, bool add_sysroot)
>  {
>  	char buf[PKGCONF_BUFSIZE];
>  	const char *ptr;
>  	char *bptr = buf;
>  
> -	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);
>  
>  	for (ptr = value; *ptr != '\0' && bptr - buf < PKGCONF_BUFSIZE; ptr++)
> @@ -293,7 +299,7 @@ pkgconf_tuple_parse(const pkgconf_client_t *client, pkgconf_list_t *vars, const
>  
>  				if (kv != NULL)
>  				{
> -					parsekv = pkgconf_tuple_parse(client, vars, kv);
> +					parsekv = pkgconf_tuple_parse_sysroot(client, vars, kv, add_sysroot);
>  
>  					strncpy(bptr, parsekv, PKGCONF_BUFSIZE - (bptr - buf));
>  					bptr += strlen(parsekv);
> @@ -338,6 +344,25 @@ 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)
> + *
> + *    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.
> + *    :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)
> +{
> +	return pkgconf_tuple_parse_sysroot(client, vars, value, true);
> +}
> +
>  /*
>   * !doc
>   *
> -- 
> 2.19.2
> 


-- 
.-----------------.--------------------.------------------.--------------------.
|  Yann E. MORIN  | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: |
| +33 662 376 056 | Software  Designer | \ / CAMPAIGN     |  ___               |
| +33 223 225 172 `------------.-------:  X  AGAINST      |  \e/  There is no  |
| http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL    |   v   conspiracy.  |
'------------------------------^-------^------------------^--------------------'

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [Buildroot] Alternate solution for the pkg-config mess ?
  2018-12-16 11:04 [Buildroot] Alternate solution for the pkg-config mess ? Thomas Petazzoni
  2018-12-16 18:57 ` Yann E. MORIN
@ 2018-12-17  9:39 ` Arnout Vandecappelle
  1 sibling, 0 replies; 3+ messages in thread
From: Arnout Vandecappelle @ 2018-12-17  9:39 UTC (permalink / raw)
  To: buildroot



On 16/12/2018 12:04, Thomas Petazzoni wrote:
> Hello,
> 
> You'll find attached a patch that modifies pkgconf 1.5.3 to behave like
> our older pkg-config used to, i.e only prefix by the sysroot a
> specific subset of variables, and leave all others untouched.
> 
> I am clearly not familiar with all the internals of pkgconf, so I won't
> pretend that the patch is perfect, but it seems to do the job.
> 
> If we decide that this is the right approach rather than adjusting
> gazillions of packages for pkgconf 1.5.3, then let me know and I'll
> submit as a proper patch.
> 
> Fabrice: I tested this with util-linux/bash-completion, and it does the
> job. If you have the chance to test it on other situations where you
> had to patch packages to work with pkgconf 1.5.3, it would be very
> useful.

 This is exactly the approach I had in mind when I wrote about whitelisting some
variables. So this patch gets my vote.

 I haven't looked at the details of the implementation though, just at the
principle.

 Regards,
 Arnout

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2018-12-17  9:39 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-12-16 11:04 [Buildroot] Alternate solution for the pkg-config mess ? Thomas Petazzoni
2018-12-16 18:57 ` Yann E. MORIN
2018-12-17  9:39 ` Arnout Vandecappelle

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.