vanhofen
6 years ago
4 changed files with 189 additions and 2 deletions
@ -0,0 +1,142 @@ |
|||
From 267a57022699453e8d8f517519df25ac6bf6ac4e 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: |
|||
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> |
|||
---
|
|||
libpkgconf/tuple.c | 60 ++++++++++++++++++++++++++++++++-------------- |
|||
1 file changed, 42 insertions(+), 18 deletions(-) |
|||
|
|||
diff --git a/libpkgconf/tuple.c b/libpkgconf/tuple.c
|
|||
index 8523709..7cd2fff 100644
|
|||
--- a/libpkgconf/tuple.c
|
|||
+++ b/libpkgconf/tuple.c
|
|||
@@ -161,6 +161,18 @@
|
|||
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 |
|||
* |
|||
@@ -181,16 +193,22 @@
|
|||
{ |
|||
char *dequote_value; |
|||
pkgconf_tuple_t *tuple = calloc(sizeof(pkgconf_tuple_t), 1); |
|||
+ bool add_sysroot = false;
|
|||
+ int i;
|
|||
|
|||
pkgconf_tuple_find_delete(list, key); |
|||
|
|||
dequote_value = dequote(value); |
|||
|
|||
PKGCONF_TRACE(client, "adding tuple to @%p: %s => %s (parsed? %d)", list, key, dequote_value, parse); |
|||
+
|
|||
+ 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); |
|||
|
|||
@@ -234,27 +252,14 @@
|
|||
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++) |
|||
@@ -294,7 +299,7 @@
|
|||
|
|||
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); |
|||
@@ -342,6 +347,25 @@
|
|||
/* |
|||
* !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
|
|||
+ *
|
|||
* .. c:function:: void pkgconf_tuple_free_entry(pkgconf_tuple_t *tuple, pkgconf_list_t *list) |
|||
* |
|||
* Deletes a variable object, removing it from any variable lists and releasing any memory associated |
|||
--
|
|||
2.19.2 |
|||
|
@ -0,0 +1,45 @@ |
|||
From 4ccef40918a539905a2951bfb81cf8dba4a245c6 Mon Sep 17 00:00:00 2001 |
|||
From: Thomas Petazzoni <thomas.petazzoni@bootlin.com> |
|||
Date: Wed, 2 Jan 2019 18:15:50 +0100 |
|||
Subject: [PATCH] Revert "main: assume --modversion insted of --version if |
|||
other flags or module names are provided" |
|||
|
|||
This reverts commit 12a0eb124cea85586e57f33c91a1e4c73459eef6, as it |
|||
causes pkg-config to assume --modversion is used when something as |
|||
simple as 'pkg-config --static --version' is used, leading to a |
|||
failure instead of the expected behavior: the one of "pkg-config |
|||
--version".
|
|||
|
|||
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com> |
|||
---
|
|||
cli/main.c | 14 ++------------ |
|||
1 file changed, 2 insertions(+), 12 deletions(-) |
|||
|
|||
diff --git a/cli/main.c b/cli/main.c
|
|||
index b52cc85..c5acc10 100644
|
|||
--- a/cli/main.c
|
|||
+++ b/cli/main.c
|
|||
@@ -1002,18 +1002,8 @@ main(int argc, char *argv[])
|
|||
|
|||
if ((want_flags & PKG_VERSION) == PKG_VERSION) |
|||
{ |
|||
- if (argc > 2)
|
|||
- {
|
|||
- fprintf(stderr, "%s: --version specified with other options or module names, assuming --modversion.\n", argv[0]);
|
|||
-
|
|||
- want_flags &= ~PKG_VERSION;
|
|||
- want_flags |= PKG_MODVERSION;
|
|||
- }
|
|||
- else
|
|||
- {
|
|||
- version();
|
|||
- return EXIT_SUCCESS;
|
|||
- }
|
|||
+ version();
|
|||
+ return EXIT_SUCCESS;
|
|||
} |
|||
|
|||
if ((want_flags & PKG_HELP) == PKG_HELP) |
|||
--
|
|||
2.20.1 |
|||
|
Loading…
Reference in new issue