Step1: build with busybox.
Signed-off-by: Chen Wang <wangchen20@iscas.ac.cn>
This commit is contained in:
@@ -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
|
||||
|
||||
44
package/pkgconf/make-host.sh
Executable file
44
package/pkgconf/make-host.sh
Executable file
@@ -0,0 +1,44 @@
|
||||
#!/usr/bin/bash
|
||||
source $(dirname "$0")/../common.sh
|
||||
|
||||
PKGNAME=pkgconf
|
||||
PKGVERSION=2.3.0
|
||||
PKGSOURCE_DIR=pkgconf
|
||||
PKGSOURCE=pkgconf-2.3.0.tar.xz
|
||||
PKGURL=https://distfiles.ariadne.space/pkgconf/pkgconf-2.3.0.tar.xz
|
||||
|
||||
PKGBUILDNAME=host-${PKGNAME}
|
||||
PKGBUILD_DIR=${BUILD_DIR}/${PKGBUILDNAME}-${PKGVERSION}
|
||||
|
||||
echo "----> Building ${PKGBUILDNAME} ..."
|
||||
|
||||
stamp_downloaded
|
||||
|
||||
step_start extract
|
||||
mkdir -p ${PKGBUILD_DIR}
|
||||
xzcat ${DL_DIR}/${PKGSOURCE_DIR}/${PKGSOURCE} | tar --strip-components=1 -C ${PKGBUILD_DIR} -xf -
|
||||
chmod -R +rw ${PKGBUILD_DIR}
|
||||
step_end extract
|
||||
|
||||
step_start patch
|
||||
TAR="tar" PATH=${HOST_DIR}/bin:$PATH ${PROJECT_DIR}/support/scripts/apply-patches.sh ${PKGBUILD_DIR} ${PROJECT_DIR}/package/${PKGNAME} \*.patch
|
||||
step_end patch autotools
|
||||
|
||||
step_start configure
|
||||
(cd ${PKGBUILD_DIR} && rm -rf config.cache; eval "${HOST_CONFIGURE_OPTS} CC=\"/usr/bin/gcc\" CXX=\"/usr/bin/g++\" CONFIG_SITE=/dev/null ./configure --prefix=\"${HOST_DIR}\" --sysconfdir=\"${HOST_DIR}/etc\" --localstatedir=\"${HOST_DIR}/var\" --enable-shared --disable-static --disable-gtk-doc --disable-gtk-doc-html --disable-doc --disable-docs --disable-documentation --disable-debug --with-xmlto=no --with-fop=no --disable-nls --disable-dependency-tracking")
|
||||
step_end configure
|
||||
|
||||
step_start build
|
||||
eval "${HOST_MAKE_ENV} /usr/bin/make -j${MAXNUM_CPUS} -C ${PKGBUILD_DIR}"
|
||||
step_end build
|
||||
|
||||
step_start install-host
|
||||
eval "${HOST_MAKE_ENV} /usr/bin/make -j${MAXNUM_CPUS} install -C ${PKGBUILD_DIR}"
|
||||
/usr/bin/install -m 0755 -D ${PROJECT_DIR}/package/pkgconf/pkg-config.in ${HOST_DIR}/bin/pkg-config
|
||||
/usr/bin/sed -i -e "s,@STAGING_SUBDIR@,${STAGING_SUBDIR},g" ${HOST_DIR}/bin/pkg-config
|
||||
/usr/bin/sed -i -e 's,@STATIC@,,' ${HOST_DIR}/bin/pkg-config
|
||||
step_end install-host
|
||||
|
||||
stamp_installed
|
||||
|
||||
echo "<---- ${PKGBUILDNAME} build complete."
|
||||
12
package/pkgconf/pkg-config.in
Normal file
12
package/pkgconf/pkg-config.in
Normal file
@@ -0,0 +1,12 @@
|
||||
#!/bin/sh
|
||||
PKGCONFDIR=$(dirname $0)
|
||||
DEFAULT_PKG_CONFIG_LIBDIR=${PKGCONFDIR}/../@STAGING_SUBDIR@/usr/lib/pkgconfig:${PKGCONFDIR}/../@STAGING_SUBDIR@/usr/share/pkgconfig
|
||||
DEFAULT_PKG_CONFIG_SYSROOT_DIR=${PKGCONFDIR}/../@STAGING_SUBDIR@
|
||||
DEFAULT_PKG_CONFIG_SYSTEM_INCLUDE_PATH=${PKGCONFDIR}/../@STAGING_SUBDIR@/usr/include
|
||||
DEFAULT_PKG_CONFIG_SYSTEM_LIBRARY_PATH=${PKGCONFDIR}/../@STAGING_SUBDIR@/usr/lib
|
||||
|
||||
PKG_CONFIG_LIBDIR=${PKG_CONFIG_LIBDIR:-${DEFAULT_PKG_CONFIG_LIBDIR}} \
|
||||
PKG_CONFIG_SYSROOT_DIR=${PKG_CONFIG_SYSROOT_DIR:-${DEFAULT_PKG_CONFIG_SYSROOT_DIR}} \
|
||||
PKG_CONFIG_SYSTEM_INCLUDE_PATH=${PKG_CONFIG_SYSTEM_INCLUDE_PATH:-${DEFAULT_PKG_CONFIG_SYSTEM_INCLUDE_PATH}} \
|
||||
PKG_CONFIG_SYSTEM_LIBRARY_PATH=${PKG_CONFIG_SYSTEM_LIBRARY_PATH:-${DEFAULT_PKG_CONFIG_SYSTEM_LIBRARY_PATH}} \
|
||||
exec ${PKGCONFDIR}/pkgconf --keep-system-libs @STATIC@ "$@"
|
||||
Reference in New Issue
Block a user