[oe] [meta-oe][PATCH 3/3] nodejs: allow use of system brotli (and make default)

Khem Raj raj.khem at gmail.com
Tue Mar 3 17:24:54 UTC 2020


can you rebase it on top of master-next and resend

On Tue, Mar 3, 2020 at 5:46 AM André Draszik <git at andred.net> wrote:
>
> From: André Draszik <andre.draszik at jci.com>
>
> Use system brotli via PACKAGECONFIG by default. So far,
> nodejs had been built using its embedded copy of brotli,
> which we generally try to avoid, for the known reasons
> (independent updates, cve & license checks, etc).
>
> The nodejs patches to enable this have been submitted.
> brotli is in meta-oe, so enabling this by default should
> not be a problem.
>
> Signed-off-by: André Draszik <andre.draszik at jci.com>
> ---
>  ...-passing-multiple-libs-to-pkg_config.patch | 41 ++++++++++++
>  ...allow-use-of-system-installed-brotli.patch | 66 +++++++++++++++++++
>  .../recipes-devtools/nodejs/nodejs_12.14.1.bb |  7 +-
>  3 files changed, 113 insertions(+), 1 deletion(-)
>  create mode 100644 meta-oe/recipes-devtools/nodejs/nodejs/0001-build-allow-passing-multiple-libs-to-pkg_config.patch
>  create mode 100644 meta-oe/recipes-devtools/nodejs/nodejs/0002-build-allow-use-of-system-installed-brotli.patch
>
> diff --git a/meta-oe/recipes-devtools/nodejs/nodejs/0001-build-allow-passing-multiple-libs-to-pkg_config.patch b/meta-oe/recipes-devtools/nodejs/nodejs/0001-build-allow-passing-multiple-libs-to-pkg_config.patch
> new file mode 100644
> index 000000000..13edf229b
> --- /dev/null
> +++ b/meta-oe/recipes-devtools/nodejs/nodejs/0001-build-allow-passing-multiple-libs-to-pkg_config.patch
> @@ -0,0 +1,41 @@
> +From fdaa0e3bef93c5c72a7258b5f1e30718e7d81f9b Mon Sep 17 00:00:00 2001
> +From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <git at andred.net>
> +Date: Mon, 2 Mar 2020 12:17:09 +0000
> +Subject: [PATCH 1/2] build: allow passing multiple libs to pkg_config
> +MIME-Version: 1.0
> +Content-Type: text/plain; charset=UTF-8
> +Content-Transfer-Encoding: 8bit
> +
> +Sometimes it's necessary to pass multiple library names to pkg-config,
> +e.g. the brotli shared libraries can be pulled in with
> +    pkg-config libbrotlienc libbrotlidec
> +
> +Update the code to handle both, strings (as used so far), and lists
> +of strings.
> +
> +Signed-off-by: André Draszik <git at andred.net>
> +---
> +Upstream-Status: Submitted [https://github.com/nodejs/node/pull/32046]
> + configure.py | 6 +++++-
> + 1 file changed, 5 insertions(+), 1 deletion(-)
> +
> +diff --git a/configure.py b/configure.py
> +index beb08df088..e3f78f2fed 100755
> +--- a/configure.py
> ++++ b/configure.py
> +@@ -680,7 +680,11 @@ def pkg_config(pkg):
> +   retval = ()
> +   for flag in ['--libs-only-l', '--cflags-only-I',
> +                '--libs-only-L', '--modversion']:
> +-    args += [flag, pkg]
> ++    args += [flag]
> ++    if isinstance(pkg, list):
> ++      args += pkg
> ++    else:
> ++      args += [pkg]
> +     try:
> +       proc = subprocess.Popen(shlex.split(pkg_config) + args,
> +                               stdout=subprocess.PIPE)
> +--
> +2.25.0
> +
> diff --git a/meta-oe/recipes-devtools/nodejs/nodejs/0002-build-allow-use-of-system-installed-brotli.patch b/meta-oe/recipes-devtools/nodejs/nodejs/0002-build-allow-use-of-system-installed-brotli.patch
> new file mode 100644
> index 000000000..fc038f3aa
> --- /dev/null
> +++ b/meta-oe/recipes-devtools/nodejs/nodejs/0002-build-allow-use-of-system-installed-brotli.patch
> @@ -0,0 +1,66 @@
> +From f0f927feee8cb1fb173835d5c3f6beb6bf7d5e54 Mon Sep 17 00:00:00 2001
> +From: =?UTF-8?q?Andr=C3=A9=20Draszik?= <git at andred.net>
> +Date: Mon, 2 Mar 2020 12:17:35 +0000
> +Subject: [PATCH 2/2] build: allow use of system-installed brotli
> +MIME-Version: 1.0
> +Content-Type: text/plain; charset=UTF-8
> +Content-Transfer-Encoding: 8bit
> +
> +brotli is available as a shared library since 2016, so it makes sense
> +to allow its use as a system-installed version.
> +
> +Some of the infrastructure was in place already (node.gyp and
> +node.gypi), but some bits in the configure script here were missing.
> +
> +Add them, keeping the default as before, to use the bundled version.
> +
> +Refs: https://github.com/google/brotli/pull/421
> +Signed-off-by: André Draszik <git at andred.net>
> +---
> +Upstream-Status: Submitted [https://github.com/nodejs/node/pull/32046]
> + configure.py | 22 ++++++++++++++++++++++
> + 1 file changed, 22 insertions(+)
> +
> +diff --git a/configure.py b/configure.py
> +index e3f78f2fed..0190e31b41 100755
> +--- a/configure.py
> ++++ b/configure.py
> +@@ -301,6 +301,27 @@ shared_optgroup.add_option('--shared-zlib-libpath',
> +     dest='shared_zlib_libpath',
> +     help='a directory to search for the shared zlib DLL')
> +
> ++shared_optgroup.add_option('--shared-brotli',
> ++    action='store_true',
> ++    dest='shared_brotli',
> ++    help='link to a shared brotli DLL instead of static linking')
> ++
> ++shared_optgroup.add_option('--shared-brotli-includes',
> ++    action='store',
> ++    dest='shared_brotli_includes',
> ++    help='directory containing brotli header files')
> ++
> ++shared_optgroup.add_option('--shared-brotli-libname',
> ++    action='store',
> ++    dest='shared_brotli_libname',
> ++    default='brotlidec,brotlienc',
> ++    help='alternative lib name to link to [default: %default]')
> ++
> ++shared_optgroup.add_option('--shared-brotli-libpath',
> ++    action='store',
> ++    dest='shared_brotli_libpath',
> ++    help='a directory to search for the shared brotli DLL')
> ++
> + shared_optgroup.add_option('--shared-cares',
> +     action='store_true',
> +     dest='shared_cares',
> +@@ -1692,6 +1713,7 @@ configure_napi(output)
> + configure_library('zlib', output)
> + configure_library('http_parser', output)
> + configure_library('libuv', output)
> ++configure_library('brotli', output, pkgname=['libbrotlidec', 'libbrotlienc'])
> + configure_library('cares', output, pkgname='libcares')
> + configure_library('nghttp2', output, pkgname='libnghttp2')
> + configure_v8(output)
> +--
> +2.25.0
> +
> diff --git a/meta-oe/recipes-devtools/nodejs/nodejs_12.14.1.bb b/meta-oe/recipes-devtools/nodejs/nodejs_12.14.1.bb
> index 49bb71e28..1ea438c5b 100644
> --- a/meta-oe/recipes-devtools/nodejs/nodejs_12.14.1.bb
> +++ b/meta-oe/recipes-devtools/nodejs/nodejs_12.14.1.bb
> @@ -20,6 +20,8 @@ SRC_URI = "http://nodejs.org/dist/v${PV}/node-v${PV}.tar.xz \
>             file://0003-Install-both-binaries-and-use-libdir.patch \
>             file://0004-v8-don-t-override-ARM-CFLAGS.patch \
>             file://big-endian.patch \
> +           file://0001-build-allow-passing-multiple-libs-to-pkg_config.patch \
> +           file://0002-build-allow-use-of-system-installed-brotli.patch \
>             "
>  SRC_URI_append_class-target = " \
>             file://0002-Using-native-binaries.patch \
> @@ -51,8 +53,9 @@ ARCHFLAGS_arm = "${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', '-
>  GYP_DEFINES_append_mipsel = " mips_arch_variant='r1' "
>  ARCHFLAGS ?= ""
>
> -PACKAGECONFIG ??= "ares icu libuv zlib"
> +PACKAGECONFIG ??= "ares brotli icu libuv zlib"
>  PACKAGECONFIG[ares] = "--shared-cares,,c-ares"
> +PACKAGECONFIG[brotli] = "--shared-brotli,,brotli"
>  PACKAGECONFIG[icu] = "--with-intl=system-icu,--without-intl,icu"
>  PACKAGECONFIG[libuv] = "--shared-libuv,,libuv"
>  PACKAGECONFIG[nghttp2] = "--shared-nghttp2,,nghttp2"
> @@ -81,6 +84,8 @@ python do_unpack() {
>      shutil.rmtree(d.getVar('S') + '/deps/openssl', True)
>      if 'ares' in d.getVar('PACKAGECONFIG'):
>          shutil.rmtree(d.getVar('S') + '/deps/cares', True)
> +    if 'brotli' in d.getVar('PACKAGECONFIG'):
> +        shutil.rmtree(d.getVar('S') + '/deps/brotli', True)
>      if 'libuv' in d.getVar('PACKAGECONFIG'):
>          shutil.rmtree(d.getVar('S') + '/deps/uv', True)
>      if 'nghttp2' in d.getVar('PACKAGECONFIG'):
> --
> 2.23.0.rc1
>
> --
> _______________________________________________
> Openembedded-devel mailing list
> Openembedded-devel at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/openembedded-devel


More information about the Openembedded-devel mailing list