summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMaxin B. John <maxin.john@intel.com>2017-08-21 18:09:45 +0300
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-08-23 12:06:51 +0100
commitee8b56528dacf9b2821d537074fa40ad2d1baa7a (patch)
tree8a784fd85801c42fda9adf8c88ebeca4304b3df9
parent96d0d4b5b671ea08cb4dcaedc84e783f253d941e (diff)
downloadpoky-ee8b56528dacf9b2821d537074fa40ad2d1baa7a.tar.gz
pkgconf: add recipe
pkgconf is a better replacement for pkg-config. Fedora 26 replaces the system pkg-config implementation with pkgconf because it "provides better support for handling .pc files and a stable library ABI/API for integrating into applications." and is actively maintained, unlike pkg-config. pkgconf aims to offer many improvements over pkg-config such as faster/more efficient dependency resolver which "allows for the user to more conservatively link their binaries -- which may be helpful in some environments, such as when prelink(1) is being used. pkgconf also aims to provide a more complete implementation of pkg-config. The features most likely to benefit the Yocto Project build system are the faster/more efficient dependency resolution and linker flag optimisation. Move pkgconf recipe to oe-core from meta-pkgconf: https://github.com/kergoth/meta-kergoth-wip/tree/master/meta-pkgconf Links: 1. http://pkgconf.org 2. https://fedoraproject.org/wiki/Changes/pkgconf_as_system_pkg-config_implementation 3. https://bugzilla.yoctoproject.org/show_bug.cgi?id=11308 (From OE-Core rev: 879bd0ff00ebebfdeef52c3f61597d635e040aef) Signed-off-by: Christopher Larson <chris_larson@mentor.com> Signed-off-by: Maxin B. John <maxin.john@intel.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--meta/files/common-licenses/pkgconf10
-rw-r--r--meta/recipes-devtools/pkgconf/pkgconf/0001-Minimal-tweaks-to-compile-with-Visual-C-2015.patch224
-rw-r--r--meta/recipes-devtools/pkgconf/pkgconf/0001-stdinc.h-fix-build-with-mingw.patch48
-rw-r--r--meta/recipes-devtools/pkgconf/pkgconf/pkg-config-esdk.in24
-rw-r--r--meta/recipes-devtools/pkgconf/pkgconf/pkg-config-native.in6
-rwxr-xr-xmeta/recipes-devtools/pkgconf/pkgconf/pkg-config-wrapper16
-rw-r--r--meta/recipes-devtools/pkgconf/pkgconf_1.3.7.bb73
7 files changed, 401 insertions, 0 deletions
diff --git a/meta/files/common-licenses/pkgconf b/meta/files/common-licenses/pkgconf
new file mode 100644
index 0000000000..81a5221507
--- /dev/null
+++ b/meta/files/common-licenses/pkgconf
@@ -0,0 +1,10 @@
1Copyright (c) 2011, 2012, 2013, 2014, 2015, 2016, 2017
2 pkgconf authors (see AUTHORS file in source directory).
3
4Permission to use, copy, modify, and/or distribute this software for any
5purpose with or without fee is hereby granted, provided that the above
6copyright notice and this permission notice appear in all copies.
7
8This software is provided 'as is' and without any warranty, express or
9implied. In no event shall the authors be liable for any damages arising
10from the use of this software.
diff --git a/meta/recipes-devtools/pkgconf/pkgconf/0001-Minimal-tweaks-to-compile-with-Visual-C-2015.patch b/meta/recipes-devtools/pkgconf/pkgconf/0001-Minimal-tweaks-to-compile-with-Visual-C-2015.patch
new file mode 100644
index 0000000000..3805ad3ebd
--- /dev/null
+++ b/meta/recipes-devtools/pkgconf/pkgconf/0001-Minimal-tweaks-to-compile-with-Visual-C-2015.patch
@@ -0,0 +1,224 @@
1From 4d7b4d7c8e9966c593f472355607204c6c80fecb Mon Sep 17 00:00:00 2001
2From: Dan Kegel <dank@kegel.com>
3Date: Sun, 4 Jun 2017 19:19:55 -0700
4Subject: [PATCH] Minimal tweaks to compile with Visual C 2015
5
6Upstream-Status: Backport
7
8Signed-off-by: Maxin B. John <maxin.john@intel.com>
9---
10 getopt_long.c | 2 ++
11 libpkgconf/bsdstubs.c | 1 +
12 libpkgconf/libpkgconf.h | 2 +-
13 libpkgconf/path.c | 10 +++++-----
14 libpkgconf/pkg.c | 28 +++++++++++++++++++---------
15 libpkgconf/stdinc.h | 9 +++++++--
16 6 files changed, 35 insertions(+), 17 deletions(-)
17
18diff --git a/getopt_long.c b/getopt_long.c
19index afeb68d..5ce9bfd 100644
20--- a/getopt_long.c
21+++ b/getopt_long.c
22@@ -62,7 +62,9 @@
23 #include <stdio.h>
24 #include <stdlib.h>
25 #include <string.h>
26+#ifndef _WIN32
27 #include <unistd.h>
28+#endif
29
30 #define PKGCONF_HACK_LOGICAL_OR_ALL_VALUES
31
32diff --git a/libpkgconf/bsdstubs.c b/libpkgconf/bsdstubs.c
33index 8f70ff3..2c000ac 100644
34--- a/libpkgconf/bsdstubs.c
35+++ b/libpkgconf/bsdstubs.c
36@@ -17,6 +17,7 @@
37 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
38 */
39
40+#include <stdlib.h>
41 #include <sys/types.h>
42 #include <string.h>
43
44diff --git a/libpkgconf/libpkgconf.h b/libpkgconf/libpkgconf.h
45index 404bf0c..551d85d 100644
46--- a/libpkgconf/libpkgconf.h
47+++ b/libpkgconf/libpkgconf.h
48@@ -310,7 +310,7 @@ void pkgconf_audit_log_dependency(pkgconf_client_t *client, const pkgconf_pkg_t
49 /* path.c */
50 void pkgconf_path_add(const char *text, pkgconf_list_t *dirlist, bool filter);
51 size_t pkgconf_path_split(const char *text, pkgconf_list_t *dirlist, bool filter);
52-size_t pkgconf_path_build_from_environ(const char *environ, const char *fallback, pkgconf_list_t *dirlist, bool filter);
53+size_t pkgconf_path_build_from_environ(const char *envvarname, const char *fallback, pkgconf_list_t *dirlist, bool filter);
54 bool pkgconf_path_match_list(const char *path, const pkgconf_list_t *dirlist);
55 void pkgconf_path_free(pkgconf_list_t *dirlist);
56 bool pkgconf_path_relocate(char *buf, size_t buflen);
57diff --git a/libpkgconf/path.c b/libpkgconf/path.c
58index dddb3bf..59e003e 100644
59--- a/libpkgconf/path.c
60+++ b/libpkgconf/path.c
61@@ -20,7 +20,7 @@
62 # include <sys/cygwin.h>
63 #endif
64
65-#ifdef HAVE_SYS_STAT_H
66+#if defined(HAVE_SYS_STAT_H) && ! defined(_WIN32)
67 # include <sys/stat.h>
68 # define PKGCONF_CACHE_INODES
69 #endif
70@@ -156,12 +156,12 @@ pkgconf_path_split(const char *text, pkgconf_list_t *dirlist, bool filter)
71 /*
72 * !doc
73 *
74- * .. c:function:: size_t pkgconf_path_build_from_environ(const char *environ, const char *fallback, pkgconf_list_t *dirlist)
75+ * .. c:function:: size_t pkgconf_path_build_from_environ(const char *envvarname, const char *fallback, pkgconf_list_t *dirlist)
76 *
77 * Adds the paths specified in an environment variable to a path list. If the environment variable is not set,
78 * an optional default set of paths is added.
79 *
80- * :param char* environ: The environment variable to look up.
81+ * :param char* envvarname: The environment variable to look up.
82 * :param char* fallback: The fallback paths to use if the environment variable is not set.
83 * :param pkgconf_list_t* dirlist: The path list to add the path nodes to.
84 * :param bool filter: Whether to perform duplicate filtering.
85@@ -169,11 +169,11 @@ pkgconf_path_split(const char *text, pkgconf_list_t *dirlist, bool filter)
86 * :rtype: size_t
87 */
88 size_t
89-pkgconf_path_build_from_environ(const char *environ, const char *fallback, pkgconf_list_t *dirlist, bool filter)
90+pkgconf_path_build_from_environ(const char *envvarname, const char *fallback, pkgconf_list_t *dirlist, bool filter)
91 {
92 const char *data;
93
94- data = getenv(environ);
95+ data = getenv(envvarname);
96 if (data != NULL)
97 return pkgconf_path_split(data, dirlist, filter);
98
99diff --git a/libpkgconf/pkg.c b/libpkgconf/pkg.c
100index 7aebd61..5dacae3 100644
101--- a/libpkgconf/pkg.c
102+++ b/libpkgconf/pkg.c
103@@ -30,6 +30,8 @@
104 # define PKG_CONFIG_REG_KEY "Software\\pkgconfig\\PKG_CONFIG_PATH"
105 # undef PKG_DEFAULT_PATH
106 # define PKG_DEFAULT_PATH "../lib/pkgconfig;../share/pkgconfig"
107+#define strncasecmp _strnicmp
108+#define strcasecmp _stricmp
109 #endif
110
111 #define PKG_CONFIG_EXT ".pc"
112@@ -134,21 +136,21 @@ static int pkgconf_pkg_parser_keyword_pair_cmp(const void *key, const void *ptr)
113 static void
114 pkgconf_pkg_parser_tuple_func(const pkgconf_client_t *client, pkgconf_pkg_t *pkg, const ptrdiff_t offset, char *value)
115 {
116- char **dest = ((void *) pkg + offset);
117+ char **dest = (char **)((char *) pkg + offset);
118 *dest = pkgconf_tuple_parse(client, &pkg->vars, value);
119 }
120
121 static void
122 pkgconf_pkg_parser_fragment_func(const pkgconf_client_t *client, pkgconf_pkg_t *pkg, const ptrdiff_t offset, char *value)
123 {
124- pkgconf_list_t *dest = ((void *) pkg + offset);
125+ pkgconf_list_t *dest = (pkgconf_list_t *)((char *) pkg + offset);
126 pkgconf_fragment_parse(client, dest, &pkg->vars, value);
127 }
128
129 static void
130 pkgconf_pkg_parser_dependency_func(const pkgconf_client_t *client, pkgconf_pkg_t *pkg, const ptrdiff_t offset, char *value)
131 {
132- pkgconf_list_t *dest = ((void *) pkg + offset);
133+ pkgconf_list_t *dest = (pkgconf_list_t *)((char *) pkg + offset);
134 pkgconf_dependency_parse(client, pkg, dest, value);
135 }
136
137@@ -238,7 +240,7 @@ pkgconf_pkg_validate(const pkgconf_client_t *client, const pkgconf_pkg_t *pkg)
138
139 for (i = 0; i < PKGCONF_ARRAY_SIZE(pkgconf_pkg_validations); i++)
140 {
141- char **p = ((void *) pkg + pkgconf_pkg_validations[i].offset);
142+ char **p = (char **)((char *) pkg + pkgconf_pkg_validations[i].offset);
143
144 if (*p != NULL)
145 continue;
146@@ -587,7 +589,7 @@ pkgconf_scan_all(pkgconf_client_t *client, void *data, pkgconf_pkg_iteration_fun
147
148 #ifdef _WIN32
149 static pkgconf_pkg_t *
150-pkgconf_pkg_find_in_registry_key(const pkgconf_client_t *client, HKEY hkey, const char *name)
151+pkgconf_pkg_find_in_registry_key(pkgconf_client_t *client, HKEY hkey, const char *name)
152 {
153 pkgconf_pkg_t *pkg = NULL;
154
155@@ -1048,8 +1050,12 @@ typedef struct {
156
157 static const pkgconf_pkg_provides_vermatch_rule_t pkgconf_pkg_provides_vermatch_rules[] = {
158 [PKGCONF_CMP_ANY] = {
159- .rulecmp = {},
160- .depcmp = {},
161+ .rulecmp = {
162+ [PKGCONF_CMP_ANY] = pkgconf_pkg_comparator_none,
163+ },
164+ .depcmp = {
165+ [PKGCONF_CMP_ANY] = pkgconf_pkg_comparator_none,
166+ },
167 },
168 [PKGCONF_CMP_LESS_THAN] = {
169 .rulecmp = {
170@@ -1121,7 +1127,9 @@ static const pkgconf_pkg_provides_vermatch_rule_t pkgconf_pkg_provides_vermatch_
171 [PKGCONF_CMP_EQUAL] = pkgconf_pkg_comparator_eq,
172 [PKGCONF_CMP_NOT_EQUAL] = pkgconf_pkg_comparator_ne
173 },
174- .depcmp = {},
175+ .depcmp = {
176+ [PKGCONF_CMP_ANY] = pkgconf_pkg_comparator_none,
177+ },
178 },
179 [PKGCONF_CMP_NOT_EQUAL] = {
180 .rulecmp = {
181@@ -1133,7 +1141,9 @@ static const pkgconf_pkg_provides_vermatch_rule_t pkgconf_pkg_provides_vermatch_
182 [PKGCONF_CMP_EQUAL] = pkgconf_pkg_comparator_ne,
183 [PKGCONF_CMP_NOT_EQUAL] = pkgconf_pkg_comparator_eq
184 },
185- .depcmp = {},
186+ .depcmp = {
187+ [PKGCONF_CMP_ANY] = pkgconf_pkg_comparator_none,
188+ },
189 },
190 };
191
192diff --git a/libpkgconf/stdinc.h b/libpkgconf/stdinc.h
193index 58cc6c7..ac7e53c 100644
194--- a/libpkgconf/stdinc.h
195+++ b/libpkgconf/stdinc.h
196@@ -24,9 +24,7 @@
197 #include <stdbool.h>
198 #include <stdarg.h>
199 #include <string.h>
200-#include <dirent.h>
201 #include <sys/types.h>
202-#include <unistd.h>
203 #include <stdint.h>
204
205 #ifdef _WIN32
206@@ -34,8 +32,15 @@
207 # include <windows.h>
208 # include <malloc.h>
209 # define PATH_DEV_NULL "nul"
210+# ifndef ssize_t
211+# include <BaseTsd.h>
212+# define ssize_t SSIZE_T
213+# endif
214+# include "win-dirent.h"
215 #else
216 # define PATH_DEV_NULL "/dev/null"
217+# include <dirent.h>
218+# include <unistd.h>
219 #endif
220
221 #endif
222--
2232.4.0
224
diff --git a/meta/recipes-devtools/pkgconf/pkgconf/0001-stdinc.h-fix-build-with-mingw.patch b/meta/recipes-devtools/pkgconf/pkgconf/0001-stdinc.h-fix-build-with-mingw.patch
new file mode 100644
index 0000000000..49ebe31e46
--- /dev/null
+++ b/meta/recipes-devtools/pkgconf/pkgconf/0001-stdinc.h-fix-build-with-mingw.patch
@@ -0,0 +1,48 @@
1From ea28c5b34457cf7676181b284e22ea5f79a30d85 Mon Sep 17 00:00:00 2001
2From: "Maxin B. John" <maxin.john@intel.com>
3Date: Thu, 13 Jul 2017 14:47:31 +0300
4Subject: [PATCH] stdinc.h: fix build with mingw
5
6Fixes this build error with mingw:
7...
8| compilation terminated.
9| In file included from ../pkgconf-1.3.7/libpkgconf/libpkgconf.h:19:0,
10| from ../pkgconf-1.3.7/libpkgconf/audit.c:16:
11| ../pkgconf-1.3.7/libpkgconf/stdinc.h:36:12: fatal error: BaseTsd.h: No
12such file or directory
13| # include <BaseTsd.h>
14
15Upstream-Status: Submitted
16
17Signed-off-by: Maxin B. John <maxin.john@intel.com>
18---
19 libpkgconf/stdinc.h | 10 +++++++++-
20 1 file changed, 9 insertions(+), 1 deletion(-)
21
22diff --git a/libpkgconf/stdinc.h b/libpkgconf/stdinc.h
23index ac7e53c..d8efcf5 100644
24--- a/libpkgconf/stdinc.h
25+++ b/libpkgconf/stdinc.h
26@@ -33,10 +33,18 @@
27 # include <malloc.h>
28 # define PATH_DEV_NULL "nul"
29 # ifndef ssize_t
30+# ifndef __MINGW32__
31 # include <BaseTsd.h>
32+# else
33+# include <basetsd.h>
34+# endif
35 # define ssize_t SSIZE_T
36 # endif
37-# include "win-dirent.h"
38+# ifndef __MINGW32__
39+# include "win-dirent.h"
40+# else
41+# include <dirent.h>
42+# endif
43 #else
44 # define PATH_DEV_NULL "/dev/null"
45 # include <dirent.h>
46--
472.4.0
48
diff --git a/meta/recipes-devtools/pkgconf/pkgconf/pkg-config-esdk.in b/meta/recipes-devtools/pkgconf/pkgconf/pkg-config-esdk.in
new file mode 100644
index 0000000000..4fc9b0a4a7
--- /dev/null
+++ b/meta/recipes-devtools/pkgconf/pkgconf/pkg-config-esdk.in
@@ -0,0 +1,24 @@
1#! /bin/sh
2
3# Orignal pkg-config-native action when called as pkg-config-native
4# NO Change here
5if [ "pkg-config-native" = "`basename $0`" ] ; then
6 PKG_CONFIG_PATH="@PATH_NATIVE@"
7 PKG_CONFIG_LIBDIR="@LIBDIR_NATIVE@"
8 unset PKG_CONFIG_SYSROOT_DIR
9else
10 # in this case check if we are in the esdk
11 if [ "$OE_SKIP_SDK_CHECK" = "1" ] ; then
12 parentpid=`ps -o ppid= -p $$`
13 parentpid_info=`ps -wo comm= -o args= -p $parentpid`
14
15 # check if we are being called from the kernel's make menuconfig
16 if ( echo $parentpid_info | grep -q check-lxdialog ) ; then
17 PKG_CONFIG_PATH="@PATH_NATIVE@"
18 PKG_CONFIG_LIBDIR="@LIBDIR_NATIVE@"
19 unset PKG_CONFIG_SYSROOT_DIR
20 fi
21 fi
22fi
23
24pkg-config.real "$@"
diff --git a/meta/recipes-devtools/pkgconf/pkgconf/pkg-config-native.in b/meta/recipes-devtools/pkgconf/pkgconf/pkg-config-native.in
new file mode 100644
index 0000000000..9ed30a0d80
--- /dev/null
+++ b/meta/recipes-devtools/pkgconf/pkgconf/pkg-config-native.in
@@ -0,0 +1,6 @@
1#! /bin/sh
2
3PKG_CONFIG_PATH="@PATH_NATIVE@"
4unset PKG_CONFIG_SYSROOT_DIR
5
6pkg-config "$@"
diff --git a/meta/recipes-devtools/pkgconf/pkgconf/pkg-config-wrapper b/meta/recipes-devtools/pkgconf/pkgconf/pkg-config-wrapper
new file mode 100755
index 0000000000..695f349566
--- /dev/null
+++ b/meta/recipes-devtools/pkgconf/pkgconf/pkg-config-wrapper
@@ -0,0 +1,16 @@
1#!/bin/sh
2# pkgconf wrapper to deal with pkg-config/pkgconf compatibility issues
3#
4# Copyright (C) 2015 Christopher Larson <chris_larson@mentor.com>
5# License: MIT (see COPYING.MIT at the root of the repository for terms)
6
7for arg; do
8 case "$arg" in
9 --variable|--variable=*)
10 # pkg-config doesn't sysroot-prefix user variables
11 unset PKG_CONFIG_SYSROOT_DIR
12 ;;
13 esac
14done
15
16exec pkgconf "$@"
diff --git a/meta/recipes-devtools/pkgconf/pkgconf_1.3.7.bb b/meta/recipes-devtools/pkgconf/pkgconf_1.3.7.bb
new file mode 100644
index 0000000000..5da0dd15bd
--- /dev/null
+++ b/meta/recipes-devtools/pkgconf/pkgconf_1.3.7.bb
@@ -0,0 +1,73 @@
1SUMMARY = "pkgconf provides compiler and linker configuration for development frameworks."
2DESCRIPTION = "pkgconf is a program which helps to configure compiler and linker \
3flags for development frameworks. It is similar to pkg-config from \
4freedesktop.org, providing additional functionality while also maintaining \
5compatibility."
6HOMEPAGE = "http://pkgconf.org"
7BUGTRACKER = "https://github.com/pkgconf/pkgconf/issues"
8SECTION = "devel"
9PROVIDES += "pkgconfig"
10RPROVIDES_${PN} += "pkgconfig"
11DEFAULT_PREFERENCE = "-1"
12
13# The pkgconf license seems to be functionally equivalent to BSD-2-Clause or
14# ISC, but has different wording, so needs its own name.
15LICENSE = "pkgconf"
16LIC_FILES_CHKSUM = "file://COPYING;md5=548a9d1db10cc0a84810c313a0e9266f"
17
18SRC_URI = "\
19 https://distfiles.dereferenced.org/pkgconf/pkgconf-${PV}.tar.xz \
20 file://0001-Minimal-tweaks-to-compile-with-Visual-C-2015.patch \
21 file://0001-stdinc.h-fix-build-with-mingw.patch \
22 file://pkg-config-wrapper \
23 file://pkg-config-native.in \
24 file://pkg-config-esdk.in \
25"
26SRC_URI[md5sum] = "ac35c34d84eeb6a03d4d61b8555d6197"
27SRC_URI[sha256sum] = "1be7e40900c7467893c65f810211b1e68da3f8d5e70fddb883fc24839cad0339"
28
29inherit autotools update-alternatives
30
31EXTRA_OECONF += "--with-pkg-config-dir='${libdir}/pkgconfig:${datadir}/pkgconfig'"
32
33do_install_append () {
34 # Install a wrapper which deals, as much as possible with pkgconf vs
35 # pkg-config compatibility issues.
36 install -m 0755 "${WORKDIR}/pkg-config-wrapper" "${D}${bindir}/pkg-config"
37}
38
39do_install_append_class-native () {
40 # Install a pkg-config-native wrapper that will use the native sysroot instead
41 # of the MACHINE sysroot, for using pkg-config when building native tools.
42 sed -e "s|@PATH_NATIVE@|${PKG_CONFIG_PATH}|" \
43 < ${WORKDIR}/pkg-config-native.in > ${B}/pkg-config-native
44 install -m755 ${B}/pkg-config-native ${D}${bindir}/pkg-config-native
45 sed -e "s|@PATH_NATIVE@|${PKG_CONFIG_PATH}|" \
46 -e "s|@LIBDIR_NATIVE@|${PKG_CONFIG_LIBDIR}|" \
47 < ${WORKDIR}/pkg-config-esdk.in > ${B}/pkg-config-esdk
48 install -m755 ${B}/pkg-config-esdk ${D}${bindir}/pkg-config-esdk
49}
50
51ALTERNATIVE_${PN} = "pkg-config"
52
53# When using the RPM generated automatic package dependencies, some packages
54# will end up requiring 'pkgconfig(pkg-config)'. Allow this behavior by
55# specifying an appropriate provide.
56RPROVIDES_${PN} += "pkgconfig(pkg-config)"
57
58# Include pkg.m4 in the main package, leaving libpkgconf dev files in -dev
59FILES_${PN}-dev_remove = "${datadir}/aclocal"
60FILES_${PN} += "${datadir}/aclocal"
61
62BBCLASSEXTEND += "native nativesdk"
63
64pkgconf_sstate_fixup_esdk () {
65 if [ "${BB_CURRENTTASK}" = "populate_sysroot_setscene" -a "${WITHIN_EXT_SDK}" = "1" ] ; then
66 pkgconfdir="${SSTATE_INSTDIR}/recipe-sysroot-native/${bindir_native}"
67 mv $pkgconfdir/pkg-config $pkgconfdir/pkg-config.real
68 lnr $pkgconfdir/pkg-config-esdk $pkgconfdir/pkg-config
69 sed -i -e "s|^pkg-config|pkg-config.real|" $pkgconfdir/pkg-config-native
70 fi
71}
72
73SSTATEPOSTUNPACKFUNCS_append_class-native = " pkgconf_sstate_fixup_esdk"