[OE-core] [PATCH v2] pkgconf: add recipe

Burton, Ross ross.burton at intel.com
Fri Aug 4 12:26:25 UTC 2017


A recent patch to pkgconfig to make menuconfig work in the SDK has since
landed in master.  Can you adapt the patch so that it also applies for
pkgconf?

Cheers,
Ross

On 14 July 2017 at 09:52, Maxin B. John <maxin.john at intel.com> wrote:

> Move pkgconf recipe to oe-core from meta-pkgconf:
> https://github.com/kergoth/meta-kergoth-wip/tree/master/meta-pkgconf
>
> Signed-off-by: Christopher Larson <chris_larson at mentor.com>
> Signed-off-by: Maxin B. John <maxin.john at intel.com>
> ---
> Changes in v2:
>     1. Fix build errors with mingw
> ---
>  meta/files/common-licenses/pkgconf                 |  10 +
>  ...imal-tweaks-to-compile-with-Visual-C-2015.patch | 224
> +++++++++++++++++++++
>  .../0001-stdinc.h-fix-build-with-mingw.patch       |  48 +++++
>  .../pkgconf/pkgconf/pkg-config-native.in           |   6 +
>  .../pkgconf/pkgconf/pkg-config-wrapper             |  16 ++
>  meta/recipes-devtools/pkgconf/pkgconf_1.3.7.bb     |  57 ++++++
>  6 files changed, 361 insertions(+)
>  create mode 100644 meta/files/common-licenses/pkgconf
>  create mode 100644 meta/recipes-devtools/pkgconf/
> pkgconf/0001-Minimal-tweaks-to-compile-with-Visual-C-2015.patch
>  create mode 100644 meta/recipes-devtools/pkgconf/
> pkgconf/0001-stdinc.h-fix-build-with-mingw.patch
>  create mode 100644 meta/recipes-devtools/pkgconf/pkgconf/
> pkg-config-native.in
>  create mode 100755 meta/recipes-devtools/pkgconf/
> pkgconf/pkg-config-wrapper
>  create mode 100644 meta/recipes-devtools/pkgconf/pkgconf_1.3.7.bb
>
> diff --git a/meta/files/common-licenses/pkgconf
> b/meta/files/common-licenses/pkgconf
> new file mode 100644
> index 0000000..81a5221
> --- /dev/null
> +++ b/meta/files/common-licenses/pkgconf
> @@ -0,0 +1,10 @@
> +Copyright (c) 2011, 2012, 2013, 2014, 2015, 2016, 2017
> +    pkgconf authors (see AUTHORS file in source directory).
> +
> +Permission to use, copy, modify, and/or distribute this software for any
> +purpose with or without fee is hereby granted, provided that the above
> +copyright notice and this permission notice appear in all copies.
> +
> +This software is provided 'as is' and without any warranty, express or
> +implied.  In no event shall the authors be liable for any damages arising
> +from 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 0000000..3805ad3
> --- /dev/null
> +++ b/meta/recipes-devtools/pkgconf/pkgconf/0001-Minimal-
> tweaks-to-compile-with-Visual-C-2015.patch
> @@ -0,0 +1,224 @@
> +From 4d7b4d7c8e9966c593f472355607204c6c80fecb Mon Sep 17 00:00:00 2001
> +From: Dan Kegel <dank at kegel.com>
> +Date: Sun, 4 Jun 2017 19:19:55 -0700
> +Subject: [PATCH] Minimal tweaks to compile with Visual C 2015
> +
> +Upstream-Status: Backport
> +
> +Signed-off-by: Maxin B. John <maxin.john at intel.com>
> +---
> + getopt_long.c           |  2 ++
> + libpkgconf/bsdstubs.c   |  1 +
> + libpkgconf/libpkgconf.h |  2 +-
> + libpkgconf/path.c       | 10 +++++-----
> + libpkgconf/pkg.c        | 28 +++++++++++++++++++---------
> + libpkgconf/stdinc.h     |  9 +++++++--
> + 6 files changed, 35 insertions(+), 17 deletions(-)
> +
> +diff --git a/getopt_long.c b/getopt_long.c
> +index afeb68d..5ce9bfd 100644
> +--- a/getopt_long.c
> ++++ b/getopt_long.c
> +@@ -62,7 +62,9 @@
> + #include <stdio.h>
> + #include <stdlib.h>
> + #include <string.h>
> ++#ifndef _WIN32
> + #include <unistd.h>
> ++#endif
> +
> + #define PKGCONF_HACK_LOGICAL_OR_ALL_VALUES
> +
> +diff --git a/libpkgconf/bsdstubs.c b/libpkgconf/bsdstubs.c
> +index 8f70ff3..2c000ac 100644
> +--- a/libpkgconf/bsdstubs.c
> ++++ b/libpkgconf/bsdstubs.c
> +@@ -17,6 +17,7 @@
> +  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
> +  */
> +
> ++#include <stdlib.h>
> + #include <sys/types.h>
> + #include <string.h>
> +
> +diff --git a/libpkgconf/libpkgconf.h b/libpkgconf/libpkgconf.h
> +index 404bf0c..551d85d 100644
> +--- a/libpkgconf/libpkgconf.h
> ++++ b/libpkgconf/libpkgconf.h
> +@@ -310,7 +310,7 @@ void pkgconf_audit_log_dependency(pkgconf_client_t
> *client, const pkgconf_pkg_t
> + /* path.c */
> + void pkgconf_path_add(const char *text, pkgconf_list_t *dirlist, bool
> filter);
> + size_t pkgconf_path_split(const char *text, pkgconf_list_t *dirlist,
> bool filter);
> +-size_t pkgconf_path_build_from_environ(const char *environ, const char
> *fallback, pkgconf_list_t *dirlist, bool filter);
> ++size_t pkgconf_path_build_from_environ(const char *envvarname, const
> char *fallback, pkgconf_list_t *dirlist, bool filter);
> + bool pkgconf_path_match_list(const char *path, const pkgconf_list_t
> *dirlist);
> + void pkgconf_path_free(pkgconf_list_t *dirlist);
> + bool pkgconf_path_relocate(char *buf, size_t buflen);
> +diff --git a/libpkgconf/path.c b/libpkgconf/path.c
> +index dddb3bf..59e003e 100644
> +--- a/libpkgconf/path.c
> ++++ b/libpkgconf/path.c
> +@@ -20,7 +20,7 @@
> + # include <sys/cygwin.h>
> + #endif
> +
> +-#ifdef HAVE_SYS_STAT_H
> ++#if defined(HAVE_SYS_STAT_H) && ! defined(_WIN32)
> + # include <sys/stat.h>
> + # define PKGCONF_CACHE_INODES
> + #endif
> +@@ -156,12 +156,12 @@ pkgconf_path_split(const char *text, pkgconf_list_t
> *dirlist, bool filter)
> + /*
> +  * !doc
> +  *
> +- * .. c:function:: size_t pkgconf_path_build_from_environ(const char
> *environ, const char *fallback, pkgconf_list_t *dirlist)
> ++ * .. c:function:: size_t pkgconf_path_build_from_environ(const char
> *envvarname, const char *fallback, pkgconf_list_t *dirlist)
> +  *
> +  *    Adds the paths specified in an environment variable to a path
> list.  If the environment variable is not set,
> +  *    an optional default set of paths is added.
> +  *
> +- *    :param char* environ: The environment variable to look up.
> ++ *    :param char* envvarname: The environment variable to look up.
> +  *    :param char* fallback: The fallback paths to use if the
> environment variable is not set.
> +  *    :param pkgconf_list_t* dirlist: The path list to add the path
> nodes to.
> +  *    :param bool filter: Whether to perform duplicate filtering.
> +@@ -169,11 +169,11 @@ pkgconf_path_split(const char *text, pkgconf_list_t
> *dirlist, bool filter)
> +  *    :rtype: size_t
> +  */
> + size_t
> +-pkgconf_path_build_from_environ(const char *environ, const char
> *fallback, pkgconf_list_t *dirlist, bool filter)
> ++pkgconf_path_build_from_environ(const char *envvarname, const char
> *fallback, pkgconf_list_t *dirlist, bool filter)
> + {
> +       const char *data;
> +
> +-      data = getenv(environ);
> ++      data = getenv(envvarname);
> +       if (data != NULL)
> +               return pkgconf_path_split(data, dirlist, filter);
> +
> +diff --git a/libpkgconf/pkg.c b/libpkgconf/pkg.c
> +index 7aebd61..5dacae3 100644
> +--- a/libpkgconf/pkg.c
> ++++ b/libpkgconf/pkg.c
> +@@ -30,6 +30,8 @@
> + #     define PKG_CONFIG_REG_KEY "Software\\pkgconfig\\PKG_CONFIG_PATH"
> + #     undef PKG_DEFAULT_PATH
> + #     define PKG_DEFAULT_PATH "../lib/pkgconfig;../share/pkgconfig"
> ++#define strncasecmp _strnicmp
> ++#define strcasecmp _stricmp
> + #endif
> +
> + #define PKG_CONFIG_EXT                ".pc"
> +@@ -134,21 +136,21 @@ static int pkgconf_pkg_parser_keyword_pair_cmp(const
> void *key, const void *ptr)
> + static void
> + pkgconf_pkg_parser_tuple_func(const pkgconf_client_t *client,
> pkgconf_pkg_t *pkg, const ptrdiff_t offset, char *value)
> + {
> +-      char **dest = ((void *) pkg + offset);
> ++      char **dest = (char **)((char *) pkg + offset);
> +       *dest = pkgconf_tuple_parse(client, &pkg->vars, value);
> + }
> +
> + static void
> + pkgconf_pkg_parser_fragment_func(const pkgconf_client_t *client,
> pkgconf_pkg_t *pkg, const ptrdiff_t offset, char *value)
> + {
> +-      pkgconf_list_t *dest = ((void *) pkg + offset);
> ++      pkgconf_list_t *dest = (pkgconf_list_t *)((char *) pkg + offset);
> +       pkgconf_fragment_parse(client, dest, &pkg->vars, value);
> + }
> +
> + static void
> + pkgconf_pkg_parser_dependency_func(const pkgconf_client_t *client,
> pkgconf_pkg_t *pkg, const ptrdiff_t offset, char *value)
> + {
> +-      pkgconf_list_t *dest = ((void *) pkg + offset);
> ++      pkgconf_list_t *dest = (pkgconf_list_t *)((char *) pkg + offset);
> +       pkgconf_dependency_parse(client, pkg, dest, value);
> + }
> +
> +@@ -238,7 +240,7 @@ pkgconf_pkg_validate(const pkgconf_client_t *client,
> const pkgconf_pkg_t *pkg)
> +
> +       for (i = 0; i < PKGCONF_ARRAY_SIZE(pkgconf_pkg_validations); i++)
> +       {
> +-              char **p = ((void *) pkg + pkgconf_pkg_validations[i].
> offset);
> ++              char **p = (char **)((char *) pkg +
> pkgconf_pkg_validations[i].offset);
> +
> +               if (*p != NULL)
> +                       continue;
> +@@ -587,7 +589,7 @@ pkgconf_scan_all(pkgconf_client_t *client, void
> *data, pkgconf_pkg_iteration_fun
> +
> + #ifdef _WIN32
> + static pkgconf_pkg_t *
> +-pkgconf_pkg_find_in_registry_key(const pkgconf_client_t *client, HKEY
> hkey, const char *name)
> ++pkgconf_pkg_find_in_registry_key(pkgconf_client_t *client, HKEY hkey,
> const char *name)
> + {
> +       pkgconf_pkg_t *pkg = NULL;
> +
> +@@ -1048,8 +1050,12 @@ typedef struct {
> +
> + static const pkgconf_pkg_provides_vermatch_rule_t
> pkgconf_pkg_provides_vermatch_rules[] = {
> +       [PKGCONF_CMP_ANY] = {
> +-              .rulecmp = {},
> +-              .depcmp = {},
> ++              .rulecmp = {
> ++                      [PKGCONF_CMP_ANY]                       =
> pkgconf_pkg_comparator_none,
> ++                },
> ++              .depcmp = {
> ++                      [PKGCONF_CMP_ANY]                       =
> pkgconf_pkg_comparator_none,
> ++                },
> +       },
> +       [PKGCONF_CMP_LESS_THAN] = {
> +               .rulecmp = {
> +@@ -1121,7 +1127,9 @@ static const pkgconf_pkg_provides_vermatch_rule_t
> pkgconf_pkg_provides_vermatch_
> +                       [PKGCONF_CMP_EQUAL]                     =
> pkgconf_pkg_comparator_eq,
> +                       [PKGCONF_CMP_NOT_EQUAL]                 =
> pkgconf_pkg_comparator_ne
> +               },
> +-              .depcmp = {},
> ++              .depcmp = {
> ++                      [PKGCONF_CMP_ANY]                       =
> pkgconf_pkg_comparator_none,
> ++                },
> +       },
> +       [PKGCONF_CMP_NOT_EQUAL] = {
> +               .rulecmp = {
> +@@ -1133,7 +1141,9 @@ static const pkgconf_pkg_provides_vermatch_rule_t
> pkgconf_pkg_provides_vermatch_
> +                       [PKGCONF_CMP_EQUAL]                     =
> pkgconf_pkg_comparator_ne,
> +                       [PKGCONF_CMP_NOT_EQUAL]                 =
> pkgconf_pkg_comparator_eq
> +               },
> +-              .depcmp = {},
> ++              .depcmp = {
> ++                      [PKGCONF_CMP_ANY]                       =
> pkgconf_pkg_comparator_none,
> ++                },
> +       },
> + };
> +
> +diff --git a/libpkgconf/stdinc.h b/libpkgconf/stdinc.h
> +index 58cc6c7..ac7e53c 100644
> +--- a/libpkgconf/stdinc.h
> ++++ b/libpkgconf/stdinc.h
> +@@ -24,9 +24,7 @@
> + #include <stdbool.h>
> + #include <stdarg.h>
> + #include <string.h>
> +-#include <dirent.h>
> + #include <sys/types.h>
> +-#include <unistd.h>
> + #include <stdint.h>
> +
> + #ifdef _WIN32
> +@@ -34,8 +32,15 @@
> + # include <windows.h>
> + # include <malloc.h>
> + # define PATH_DEV_NULL        "nul"
> ++# ifndef ssize_t
> ++#  include <BaseTsd.h>
> ++#  define ssize_t SSIZE_T
> ++# endif
> ++# include "win-dirent.h"
> + #else
> + # define PATH_DEV_NULL        "/dev/null"
> ++# include <dirent.h>
> ++# include <unistd.h>
> + #endif
> +
> + #endif
> +--
> +2.4.0
> +
> 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 0000000..49ebe31
> --- /dev/null
> +++ b/meta/recipes-devtools/pkgconf/pkgconf/0001-stdinc.h-
> fix-build-with-mingw.patch
> @@ -0,0 +1,48 @@
> +From ea28c5b34457cf7676181b284e22ea5f79a30d85 Mon Sep 17 00:00:00 2001
> +From: "Maxin B. John" <maxin.john at intel.com>
> +Date: Thu, 13 Jul 2017 14:47:31 +0300
> +Subject: [PATCH] stdinc.h: fix build with mingw
> +
> +Fixes this build error with mingw:
> +...
> +| compilation terminated.
> +| In file included from ../pkgconf-1.3.7/libpkgconf/libpkgconf.h:19:0,
> +| from ../pkgconf-1.3.7/libpkgconf/audit.c:16:
> +| ../pkgconf-1.3.7/libpkgconf/stdinc.h:36:12: fatal error: BaseTsd.h: No
> +such file or directory
> +| # include <BaseTsd.h>
> +
> +Upstream-Status: Submitted
> +
> +Signed-off-by: Maxin B. John <maxin.john at intel.com>
> +---
> + libpkgconf/stdinc.h | 10 +++++++++-
> + 1 file changed, 9 insertions(+), 1 deletion(-)
> +
> +diff --git a/libpkgconf/stdinc.h b/libpkgconf/stdinc.h
> +index ac7e53c..d8efcf5 100644
> +--- a/libpkgconf/stdinc.h
> ++++ b/libpkgconf/stdinc.h
> +@@ -33,10 +33,18 @@
> + # include <malloc.h>
> + # define PATH_DEV_NULL        "nul"
> + # ifndef ssize_t
> ++# ifndef __MINGW32__
> + #  include <BaseTsd.h>
> ++# else
> ++#  include <basetsd.h>
> ++# endif
> + #  define ssize_t SSIZE_T
> + # endif
> +-# include "win-dirent.h"
> ++# ifndef __MINGW32__
> ++#  include "win-dirent.h"
> ++# else
> ++# include <dirent.h>
> ++# endif
> + #else
> + # define PATH_DEV_NULL        "/dev/null"
> + # include <dirent.h>
> +--
> +2.4.0
> +
> 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 0000000..9ed30a0
> --- /dev/null
> +++ b/meta/recipes-devtools/pkgconf/pkgconf/pkg-config-native.in
> @@ -0,0 +1,6 @@
> +#! /bin/sh
> +
> +PKG_CONFIG_PATH="@PATH_NATIVE@"
> +unset PKG_CONFIG_SYSROOT_DIR
> +
> +pkg-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 0000000..695f349
> --- /dev/null
> +++ b/meta/recipes-devtools/pkgconf/pkgconf/pkg-config-wrapper
> @@ -0,0 +1,16 @@
> +#!/bin/sh
> +# pkgconf wrapper to deal with pkg-config/pkgconf compatibility issues
> +#
> +# Copyright (C) 2015 Christopher Larson <chris_larson at mentor.com>
> +# License: MIT (see COPYING.MIT at the root of the repository for terms)
> +
> +for arg; do
> +    case "$arg" in
> +        --variable|--variable=*)
> +            # pkg-config doesn't sysroot-prefix user variables
> +            unset PKG_CONFIG_SYSROOT_DIR
> +            ;;
> +    esac
> +done
> +
> +exec 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 0000000..47c55f6
> --- /dev/null
> +++ b/meta/recipes-devtools/pkgconf/pkgconf_1.3.7.bb
> @@ -0,0 +1,57 @@
> +SUMMARY = "pkgconf provides compiler and linker configuration for
> development frameworks."
> +DESCRIPTION = "pkgconf is a program which helps to configure compiler and
> linker \
> +flags for development frameworks. It is similar to pkg-config from \
> +freedesktop.org, providing additional functionality while also
> maintaining \
> +compatibility."
> +HOMEPAGE = "http://pkgconf.org"
> +BUGTRACKER = "https://github.com/pkgconf/pkgconf/issues"
> +SECTION = "devel"
> +PROVIDES += "pkgconfig"
> +RPROVIDES_${PN} += "pkgconfig"
> +DEFAULT_PREFERENCE = "-1"
> +
> +# The pkgconf license seems to be functionally equivalent to BSD-2-Clause
> or
> +# ISC, but has different wording, so needs its own name.
> +LICENSE = "pkgconf"
> +LIC_FILES_CHKSUM = "file://COPYING;md5=548a9d1db10cc0a84810c313a0e9266f"
> +
> +SRC_URI = "\
> +    https://distfiles.dereferenced.org/pkgconf/pkgconf-${PV}.tar.xz \
> +    file://0001-Minimal-tweaks-to-compile-with-Visual-C-2015.patch \
> +    file://0001-stdinc.h-fix-build-with-mingw.patch \
> +    file://pkg-config-wrapper \
> +    file://pkg-config-native.in \
> +"
> +SRC_URI[md5sum] = "ac35c34d84eeb6a03d4d61b8555d6197"
> +SRC_URI[sha256sum] = "1be7e40900c7467893c65f810211b1
> e68da3f8d5e70fddb883fc24839cad0339"
> +
> +inherit autotools update-alternatives
> +
> +EXTRA_OECONF += "--with-pkg-config-dir='${libdir}/pkgconfig:${datadir}/
> pkgconfig'"
> +
> +do_install_append () {
> +    # Install a wrapper which deals, as much as possible with pkgconf vs
> +    # pkg-config compatibility issues.
> +    install -m 0755 "${WORKDIR}/pkg-config-wrapper"
> "${D}${bindir}/pkg-config"
> +}
> +
> +do_install_append_class-native () {
> +    # Install a pkg-config-native wrapper that will use the native
> sysroot instead
> +    # of the MACHINE sysroot, for using pkg-config when building native
> tools.
> +    sed -e "s|@PATH_NATIVE@|${PKG_CONFIG_PATH}|" \
> +        < ${WORKDIR}/pkg-config-native.in > ${B}/pkg-config-native
> +    install -m755 ${B}/pkg-config-native ${D}${bindir}/pkg-config-native
> +}
> +
> +ALTERNATIVE_${PN} = "pkg-config"
> +
> +# When using the RPM generated automatic package dependencies, some
> packages
> +# will end up requiring 'pkgconfig(pkg-config)'.  Allow this behavior by
> +# specifying an appropriate provide.
> +RPROVIDES_${PN} += "pkgconfig(pkg-config)"
> +
> +# Include pkg.m4 in the main package, leaving libpkgconf dev files in -dev
> +FILES_${PN}-dev_remove = "${datadir}/aclocal"
> +FILES_${PN} += "${datadir}/aclocal"
> +
> +BBCLASSEXTEND += "native nativesdk"
> --
> 2.4.0
>
> --
> _______________________________________________
> Openembedded-core mailing list
> Openembedded-core at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-core
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/openembedded-core/attachments/20170804/7c0fe969/attachment-0002.html>


More information about the Openembedded-core mailing list