From 0f304251abad457b4eb0b1eb87aa27ba97e2f1f3 Mon Sep 17 00:00:00 2001 From: Hyunjae Shin Date: Fri, 18 Jun 2021 10:45:45 +0900 Subject: [PATCH 0001/2022] webos.conf: Release webOS OSE v2.12.0 :Release Notes: Set software version as webOS OSE v2.12.0 :Detailed Notes: Set WEBOS_DISTRO_VERSION_MINOR to "12" :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: N/A Change-Id: I122deb75bf3810589e17b72b0c4986cc13ef3d4a --- meta-webos/conf/distro/webos.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/conf/distro/webos.conf b/meta-webos/conf/distro/webos.conf index 77995fa42..6e397e9d5 100644 --- a/meta-webos/conf/distro/webos.conf +++ b/meta-webos/conf/distro/webos.conf @@ -13,7 +13,7 @@ WEBOS_DISTRO_BUILD_CODENAME = "master" # g - github WEBOS_DISTRO_VERSION_MAJOR = "2" -WEBOS_DISTRO_VERSION_MINOR = "11" +WEBOS_DISTRO_VERSION_MINOR = "12" WEBOS_DISTRO_VERSION_TYPE = "g" DISTRO_VERSION = "${WEBOS_DISTRO_VERSION_MAJOR}.${WEBOS_DISTRO_VERSION_MINOR}.${WEBOS_DISTRO_VERSION_TYPE}" From c8f5d860f4b0e9bf22d2a4bb17d4c5d165a62613 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 22 Jun 2021 03:02:50 -0700 Subject: [PATCH 0002/2022] elfutils=webos3 (synchronize only) :Release Notes: Add EXTENDPRAUTO bump from internal copy of this recipe. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: N/A :Issues Addressed: [PLAT-145566] Internal builds/webosose/master/357 and the same tag on github have different content --- meta-webos/recipes-devtools/elfutils/elfutils_%.bbappend | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-devtools/elfutils/elfutils_%.bbappend b/meta-webos/recipes-devtools/elfutils/elfutils_%.bbappend index 68260dba5..683f7d087 100644 --- a/meta-webos/recipes-devtools/elfutils/elfutils_%.bbappend +++ b/meta-webos/recipes-devtools/elfutils/elfutils_%.bbappend @@ -1,6 +1,6 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO_append = "webos3" # ERROR: QA Issue: /usr/lib/elfutils/ptest/tests/run-ar.sh contained in package elfutils-ptest requires /bin/bash, but no providers found in RDEPENDS_elfutils-ptest? [file-rdeps] VIRTUAL-RUNTIME_bash ?= "bash" From a001195ea6594b5b67e4cc48aaf685e980b188c5 Mon Sep 17 00:00:00 2001 From: Minjae Kim Date: Mon, 28 Jun 2021 09:29:44 +0900 Subject: [PATCH 0003/2022] webos.inc: Update SANITY_TESTED_DISTROS for Ubuntu 20.04 Focal :Release Notes: The old version works ok with new Ubuntu releases, no changes were needed, so just add the new version and codename to *_sane variables. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: :Issues Addressed: [WRN-1695] CCC: Support ubuntu 20.04 for webOS [PLAT-120093] Update build script for Ubuntu 20.04 Change-Id: I79033381bf086a4589071cecefac2f55eadc69fb --- meta-webos/conf/distro/include/webos.inc | 1 + 1 file changed, 1 insertion(+) diff --git a/meta-webos/conf/distro/include/webos.inc b/meta-webos/conf/distro/include/webos.inc index 8e933b0ab..9e5c90ddb 100644 --- a/meta-webos/conf/distro/include/webos.inc +++ b/meta-webos/conf/distro/include/webos.inc @@ -373,6 +373,7 @@ INHERIT += "uninative" SANITY_TESTED_DISTROS ?= " \ ubuntu-18.04 \n \ + ubuntu-20.04 \n \ " INHERIT += "reproducible_build_simple" From e8f0dffe4a4217b201940dcc6e78430ea9caf448 Mon Sep 17 00:00:00 2001 From: "divvya.rosna" Date: Fri, 9 Jul 2021 12:00:48 +0530 Subject: [PATCH 0004/2022] g-media-pipeline=21.gav.21 :Release Notes: Update the function initialization for coverity issue Fix coverity issue in g-media-pipeline :Detailed Notes: g-media-pipeline: submissions/21.gav.19..submissions/21.gav.21 2bca826 Update the function initialization for coverity issue e4a01e7 Fix coverity issue in g-media-pipeline :Testing Performed: Please refer CCC ticket for details :QA Notes: NA :Issues Addressed: [WRN-2652] CCC: g-media-pipeline=21.gav.21 [WRN-2033] Update the function initialization for coverity issue Change-Id: I47306f7fa8402f4209c707d6a95b473066c292a8 --- .../recipes-multimedia/g-media-pipeline/g-media-pipeline.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb index 5aa34b433..a87f99a5d 100644 --- a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb +++ b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb @@ -33,7 +33,7 @@ WEBOS_VERSION = "1.0.0-21_ecd90bea31daca759dc40061749131f2a61b99c1" PR = "r8" WEBOS_GIT_PARAM_BRANCH_raspberrypi4 = "@gav" -WEBOS_VERSION_raspberrypi4 = "1.0.0-21.gav.19_5adaf4bd3b7ae32cf2133236af1792dcd21ab012" +WEBOS_VERSION_raspberrypi4 = "1.0.0-21.gav.21_fcb0d9d9dd7e413af0adea2a95158a1ffca41842" SRC_URI_append_raspberrypi4 = " file://0001-LunaServiceClient.cpp-include-string-to-fix-build-wi.patch" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" From 3791a6163b0cea08ebd9bf38ac6f2bd71c46dbc5 Mon Sep 17 00:00:00 2001 From: "sc.heo" Date: Tue, 8 Jun 2021 15:06:26 +0900 Subject: [PATCH 0005/2022] Enable bluetooth for ose emulator :Release Notes: Enable bluetooth for ose emulator :Detailed Notes: - Enable usb bluetooth drivers(intel) for ose emulator - Enable hfp service, ofono for ose emulator :Testing Performed: See CCC jira ticket for results. :QA Notes: NA :Issues Addressed: [WRN-1702] Enable bluetooth for OSE emulator [WRN-2588] CCC: ose: enable bluetooth for ose emulator Change-Id: I3cb87054b39ea0e88c089f71337b8afe1aa4326f --- .../packagegroups/packagegroup-webos-extended.bb | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index b2e8ac263..05905a35c 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -267,8 +267,10 @@ WEBOS_FOSS_MISSING_FROM_RDEPENDS = " \ # These packages that are installed in the qemux86 image only. RRECOMMENDS_${PN}_append_qemux86 = " \ fuse-utils \ + kernel-module-ac97-bus \ kernel-module-bluetooth \ kernel-module-btbcm \ + kernel-module-btintel \ kernel-module-btusb \ kernel-module-configs \ kernel-module-evdev \ @@ -276,11 +278,15 @@ RRECOMMENDS_${PN}_append_qemux86 = " \ kernel-module-hci-uart \ kernel-module-media \ kernel-module-rfcomm \ + kernel-module-snd-ac97-codec \ + kernel-module-snd-intel8x0 \ + kernel-module-snd-pcm \ kernel-module-snd-usb-audio \ kernel-module-snd-usbmidi-lib \ kernel-module-uinput \ kernel-module-uvcvideo \ kernel-module-v4l2-common \ + kernel-module-vboxguest \ kernel-module-videobuf2-core \ kernel-module-videobuf2-memops \ kernel-module-videobuf2-v4l2 \ @@ -293,15 +299,12 @@ RDEPENDS_${PN}_append_qemux86 = " \ com.webos.service.audiofocusmanager \ com.webos.service.audiooutput \ com.webos.service.camera \ + com.webos.service.hfp \ com.webos.service.location \ com.webos.service.mediaindexer \ com.webos.service.storageaccess \ dhcp-client \ - kernel-module-ac97-bus \ - kernel-module-snd-ac97-codec \ - kernel-module-snd-intel8x0 \ - kernel-module-snd-pcm \ - kernel-module-vboxguest \ + ofono \ v4l-utils \ vmwgfx-layout \ " From 629441b109bc66f27241ed651b521c2a64fa4b43 Mon Sep 17 00:00:00 2001 From: Minjae Kim Date: Tue, 6 Jul 2021 14:16:43 +0900 Subject: [PATCH 0006/2022] Add meta-webos-backports-3.4 from yocto 3.4 Honister :Release Notes: Adds meta-webos-backports-3.4 layers to provide develop environment. systemd v248.3 uses this layer :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: None. :Issues Addressed: [WRN-2613] CCC: systemd=v248.3 Change-Id: I2c2411b9f32978fc2175bf14791bb2bc194e218a --- .../meta-webos-backports-3.4/conf/layer.conf | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) create mode 100644 meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf diff --git a/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf b/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf new file mode 100644 index 000000000..01a7b489b --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf @@ -0,0 +1,19 @@ +# Copyright (c) 2021 LG Electronics, Inc. + +# We have conf and classes directories => add to BBPATH +BBPATH .= ":${LAYERDIR}" + +# We have recipes-* directories => add to BBFILES +BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ + ${LAYERDIR}/recipes-*/*/*.bbappend" + +BBFILE_COLLECTIONS += "meta-webos-backports-3.4" +BBFILE_PATTERN_meta-webos-backports-3.4 := "^${LAYERDIR}/" +BBFILE_PRIORITY_meta-webos-backports-3.4 = "35" + +LAYERSERIES_COMPAT_meta-webos-backports-3.4 = "dunfell" + +LAYERDEPENDS_meta-webos-backports-3.4 = " \ + core \ + openembedded-layer \ +" From 07d90957b778b3e5b6105ae3fe1a7bca3d788909 Mon Sep 17 00:00:00 2001 From: Minjae Kim Date: Tue, 6 Jul 2021 14:20:41 +0900 Subject: [PATCH 0007/2022] systemd=v248.3 add image-uefi.conf (backport newer version from Honister) :Release Notes: Backport newer version from oe-core as is in: f65757ad17 systemd-conf: Prevent systemd-network from managing veth interfaces 3798d34dc9 systemd: install new sysext tool via systemd-extra-utils 97a8f1c4b5 systemd: Add more ugly casts to fix build with musl 20026c7246 systemctl: Stop tracebacks use formated error messages ca78d0c159 systemd-conf: do not version in lockstep with systemd 0c3bea895e systemd: Fix 248.3 on musl 4cac662d7d systemd: update 247.6 -> 248.3 Add image-uefi.conf from oe-core as in: 4484c702c2 image-uefi: Set efi_file for rv32/rv64 df50c8308b image-uefi.conf: add EFI arch variable f6fa0f4384 image-uefi.conf: add config file holding configuration for UEFI images :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: None. :Issues Addressed: [WRN-2613] CCC: systemd=v248.3 Change-Id: Ie8d96cf540d385523db301f2fda7d5d9d2b0ef93 --- .../classes/systemd-boot-cfg.bbclass | 71 ++ .../classes/systemd-boot.bbclass | 35 + .../classes/systemd.bbclass | 233 ++++++ .../conf/image-uefi.conf | 21 + .../systemd/systemd-boot_248.3.bb | 70 ++ .../systemd/systemd-bootconf_1.00.bb | 32 + .../systemd/systemd-compat-units.bb | 49 ++ .../systemd/systemd-conf/journald.conf | 3 + .../systemd/systemd-conf/logind.conf | 2 + .../systemd/systemd-conf/system.conf | 2 + .../systemd/systemd-conf/system.conf-qemuall | 3 + .../systemd/systemd-conf/wired.network | 13 + .../recipes-core/systemd/systemd-conf_1.0.bb | 43 + .../systemd/systemd-machine-units_1.0.bb | 13 + .../systemd/systemd-serialgetty.bb | 52 ++ .../systemd-serialgetty/serial-getty@.service | 45 + .../systemd/systemd-systemctl-native.bb | 17 + .../systemd/systemd-systemctl/systemctl | 339 ++++++++ .../recipes-core/systemd/systemd.inc | 22 + .../systemd/systemd/00-create-volatile.conf | 7 + .../systemd/00-hostnamed-network-user.conf | 6 + ...tall-dependency-links-at-install-tim.patch | 81 ++ ...se-ROOTPREFIX-without-suffixed-slash.patch | 42 + ...test-parse-argument-Include-signal.h.patch | 29 + ...002-don-t-use-glibc-specific-qsort_r.patch | 163 ++++ ...implment-systemd-sysv-install-for-OE.patch | 41 + ...dd-__compare_fn_t-and-comparison_fn_.patch | 76 ++ ...k-parse_printf_format-implementation.patch | 435 ++++++++++ ...missing.h-check-for-missing-strndupa.patch | 602 ++++++++++++++ .../0006-Include-netinet-if_ether.h.patch | 326 ++++++++ ...OB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch | 153 ++++ ...008-add-missing-FTW_-macros-for-musl.patch | 45 + ..._register_atfork-for-non-glibc-build.patch | 43 + ...10-Use-uintmax_t-for-handling-rlim_t.patch | 104 +++ ...sable-tests-for-missing-typedefs-in-.patch | 39 + ...T_SYMLINK_NOFOLLOW-flag-to-faccessat.patch | 98 +++ ...patible-basename-for-non-glibc-syste.patch | 32 + ...uffering-when-writing-to-oom_score_a.patch | 39 + ...compliant-strerror_r-from-GNU-specif.patch | 60 ++ ...S_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch | 33 + ...ype.h-add-__compar_d_fn_t-definition.patch | 28 + ...definition-of-prctl_mm_map-structure.patch | 30 + .../systemd/0019-Handle-missing-LOCK_EX.patch | 24 + ...ible-pointer-type-struct-sockaddr_un.patch | 38 + .../0021-test-json.c-define-M_PIl.patch | 31 + ...-not-disable-buffer-in-writing-files.patch | 383 +++++++++ .../0025-Handle-__cpu_mask-usage.patch | 58 ++ .../systemd/0026-Handle-missing-gshadow.patch | 171 ++++ ...l.h-Define-MIPS-ABI-defines-for-musl.patch | 34 + .../systemd/systemd/99-default.preset | 1 + .../recipes-core/systemd/systemd/init | 104 +++ .../org.freedesktop.hostname1_no_polkit.conf | 11 + .../systemd/systemd/systemd-pager.sh | 7 + .../systemd/systemd/touchscreen.rules | 18 + .../recipes-core/systemd/systemd_248.3.bb | 772 ++++++++++++++++++ 55 files changed, 5229 insertions(+) create mode 100644 meta-webos-backports/meta-webos-backports-3.4/classes/systemd-boot-cfg.bbclass create mode 100644 meta-webos-backports/meta-webos-backports-3.4/classes/systemd-boot.bbclass create mode 100644 meta-webos-backports/meta-webos-backports-3.4/classes/systemd.bbclass create mode 100644 meta-webos-backports/meta-webos-backports-3.4/conf/image-uefi.conf create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-boot_248.3.bb create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-bootconf_1.00.bb create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-compat-units.bb create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-conf/journald.conf create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-conf/logind.conf create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-conf/system.conf create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-conf/system.conf-qemuall create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-conf/wired.network create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-conf_1.0.bb create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-machine-units_1.0.bb create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-serialgetty.bb create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-serialgetty/serial-getty@.service create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-systemctl-native.bb create mode 100755 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-systemctl/systemctl create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd.inc create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/00-create-volatile.conf create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/00-hostnamed-network-user.conf create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-systemd.pc.in-use-ROOTPREFIX-without-suffixed-slash.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-test-parse-argument-Include-signal.h.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0003-implment-systemd-sysv-install-for-OE.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0003-missing_type.h-add-__compare_fn_t-and-comparison_fn_.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0006-Include-netinet-if_ether.h.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0007-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0008-add-missing-FTW_-macros-for-musl.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0009-fix-missing-of-__register_atfork-for-non-glibc-build.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0010-Use-uintmax_t-for-handling-rlim_t.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0011-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0012-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0013-Define-glibc-compatible-basename-for-non-glibc-syste.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0014-Do-not-disable-buffering-when-writing-to-oom_score_a.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0015-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0016-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0017-missing_type.h-add-__compar_d_fn_t-definition.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0018-avoid-redefinition-of-prctl_mm_map-structure.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0019-Handle-missing-LOCK_EX.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0020-Fix-incompatible-pointer-type-struct-sockaddr_un.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0021-test-json.c-define-M_PIl.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0022-do-not-disable-buffer-in-writing-files.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0025-Handle-__cpu_mask-usage.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0026-Handle-missing-gshadow.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0028-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/99-default.preset create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/init create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/org.freedesktop.hostname1_no_polkit.conf create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/systemd-pager.sh create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/touchscreen.rules create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd_248.3.bb diff --git a/meta-webos-backports/meta-webos-backports-3.4/classes/systemd-boot-cfg.bbclass b/meta-webos-backports/meta-webos-backports-3.4/classes/systemd-boot-cfg.bbclass new file mode 100644 index 000000000..b3e0e6ad4 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/classes/systemd-boot-cfg.bbclass @@ -0,0 +1,71 @@ +SYSTEMD_BOOT_CFG ?= "${S}/loader.conf" +SYSTEMD_BOOT_ENTRIES ?= "" +SYSTEMD_BOOT_TIMEOUT ?= "10" + +# Uses MACHINE specific KERNEL_IMAGETYPE +PACKAGE_ARCH = "${MACHINE_ARCH}" + +# Need UUID utility code. +inherit fs-uuid + +python build_efi_cfg() { + s = d.getVar("S") + labels = d.getVar('LABELS') + if not labels: + bb.debug(1, "LABELS not defined, nothing to do") + return + + if labels == []: + bb.debug(1, "No labels, nothing to do") + return + + cfile = d.getVar('SYSTEMD_BOOT_CFG') + cdir = os.path.dirname(cfile) + if not os.path.exists(cdir): + os.makedirs(cdir) + try: + cfgfile = open(cfile, 'w') + except OSError: + bb.fatal('Unable to open %s' % cfile) + + cfgfile.write('# Automatically created by OE\n') + cfgfile.write('default %s\n' % (labels.split()[0])) + timeout = d.getVar('SYSTEMD_BOOT_TIMEOUT') + if timeout: + cfgfile.write('timeout %s\n' % timeout) + else: + cfgfile.write('timeout 10\n') + cfgfile.close() + + for label in labels.split(): + localdata = d.createCopy() + + entryfile = "%s/%s.conf" % (s, label) + if not os.path.exists(s): + os.makedirs(s) + d.appendVar("SYSTEMD_BOOT_ENTRIES", " " + entryfile) + try: + entrycfg = open(entryfile, "w") + except OSError: + bb.fatal('Unable to open %s' % entryfile) + + entrycfg.write('title %s\n' % label) + + kernel = localdata.getVar("KERNEL_IMAGETYPE") + entrycfg.write('linux /%s\n' % kernel) + + append = localdata.getVar('APPEND') + initrd = localdata.getVar('INITRD') + + if initrd: + entrycfg.write('initrd /initrd\n') + lb = label + if label == "install": + lb = "install-efi" + entrycfg.write('options LABEL=%s ' % lb) + if append: + append = replace_rootfs_uuid(d, append) + entrycfg.write('%s' % append) + entrycfg.write('\n') + entrycfg.close() +} diff --git a/meta-webos-backports/meta-webos-backports-3.4/classes/systemd-boot.bbclass b/meta-webos-backports/meta-webos-backports-3.4/classes/systemd-boot.bbclass new file mode 100644 index 000000000..336c4c2ff --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/classes/systemd-boot.bbclass @@ -0,0 +1,35 @@ +# Copyright (C) 2016 Intel Corporation +# +# Released under the MIT license (see COPYING.MIT) + +# systemd-boot.bbclass - The "systemd-boot" is essentially the gummiboot merged into systemd. +# The original standalone gummiboot project is dead without any more +# maintenance. +# +# Set EFI_PROVIDER = "systemd-boot" to use systemd-boot on your live images instead of grub-efi +# (images built by image-live.bbclass) + +do_bootimg[depends] += "${MLPREFIX}systemd-boot:do_deploy" + +require conf/image-uefi.conf +# Need UUID utility code. +inherit fs-uuid + +efi_populate() { + efi_populate_common "$1" systemd + + # systemd-boot requires these paths for configuration files + # they are not customizable so no point in new vars + install -d ${DEST}/loader + install -d ${DEST}/loader/entries + install -m 0644 ${SYSTEMD_BOOT_CFG} ${DEST}/loader/loader.conf + for i in ${SYSTEMD_BOOT_ENTRIES}; do + install -m 0644 ${i} ${DEST}/loader/entries + done +} + +efi_iso_populate_append() { + cp -r $iso_dir/loader ${EFIIMGDIR} +} + +inherit systemd-boot-cfg diff --git a/meta-webos-backports/meta-webos-backports-3.4/classes/systemd.bbclass b/meta-webos-backports/meta-webos-backports-3.4/classes/systemd.bbclass new file mode 100644 index 000000000..db5d10954 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/classes/systemd.bbclass @@ -0,0 +1,233 @@ +# The list of packages that should have systemd packaging scripts added. For +# each entry, optionally have a SYSTEMD_SERVICE_[package] that lists the service +# files in this package. If this variable isn't set, [package].service is used. +SYSTEMD_PACKAGES ?= "${PN}" +SYSTEMD_PACKAGES_class-native ?= "" +SYSTEMD_PACKAGES_class-nativesdk ?= "" + +# Whether to enable or disable the services on installation. +SYSTEMD_AUTO_ENABLE ??= "enable" + +# This class will be included in any recipe that supports systemd init scripts, +# even if systemd is not in DISTRO_FEATURES. As such don't make any changes +# directly but check the DISTRO_FEATURES first. +python __anonymous() { + # If the distro features have systemd but not sysvinit, inhibit update-rcd + # from doing any work so that pure-systemd images don't have redundant init + # files. + if bb.utils.contains('DISTRO_FEATURES', 'systemd', True, False, d): + d.appendVar("DEPENDS", " systemd-systemctl-native") + d.appendVar("PACKAGE_WRITE_DEPS", " systemd-systemctl-native") + if not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d): + d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1") +} + +systemd_postinst() { +if systemctl >/dev/null 2>/dev/null; then + OPTS="" + + if [ -n "$D" ]; then + OPTS="--root=$D" + fi + + if [ "${SYSTEMD_AUTO_ENABLE}" = "enable" ]; then + for service in ${SYSTEMD_SERVICE_ESCAPED}; do + systemctl ${OPTS} enable "$service" + done + fi + + if [ -z "$D" ]; then + systemctl daemon-reload + systemctl preset ${SYSTEMD_SERVICE_ESCAPED} + + if [ "${SYSTEMD_AUTO_ENABLE}" = "enable" ]; then + systemctl --no-block restart ${SYSTEMD_SERVICE_ESCAPED} + fi + fi +fi +} + +systemd_prerm() { +if systemctl >/dev/null 2>/dev/null; then + if [ -z "$D" ]; then + systemctl stop ${SYSTEMD_SERVICE_ESCAPED} + + systemctl disable ${SYSTEMD_SERVICE_ESCAPED} + fi +fi +} + + +systemd_populate_packages[vardeps] += "systemd_prerm systemd_postinst" +systemd_populate_packages[vardepsexclude] += "OVERRIDES" + + +python systemd_populate_packages() { + import re + import shlex + + if not bb.utils.contains('DISTRO_FEATURES', 'systemd', True, False, d): + return + + def get_package_var(d, var, pkg): + val = (d.getVar('%s_%s' % (var, pkg)) or "").strip() + if val == "": + val = (d.getVar(var) or "").strip() + return val + + # Check if systemd-packages already included in PACKAGES + def systemd_check_package(pkg_systemd): + packages = d.getVar('PACKAGES') + if not pkg_systemd in packages.split(): + bb.error('%s does not appear in package list, please add it' % pkg_systemd) + + + def systemd_generate_package_scripts(pkg): + bb.debug(1, 'adding systemd calls to postinst/postrm for %s' % pkg) + + paths_escaped = ' '.join(shlex.quote(s) for s in d.getVar('SYSTEMD_SERVICE_' + pkg).split()) + d.setVar('SYSTEMD_SERVICE_ESCAPED_' + pkg, paths_escaped) + + # Add pkg to the overrides so that it finds the SYSTEMD_SERVICE_pkg + # variable. + localdata = d.createCopy() + localdata.prependVar("OVERRIDES", pkg + ":") + + postinst = d.getVar('pkg_postinst_%s' % pkg) + if not postinst: + postinst = '#!/bin/sh\n' + postinst += localdata.getVar('systemd_postinst') + d.setVar('pkg_postinst_%s' % pkg, postinst) + + prerm = d.getVar('pkg_prerm_%s' % pkg) + if not prerm: + prerm = '#!/bin/sh\n' + prerm += localdata.getVar('systemd_prerm') + d.setVar('pkg_prerm_%s' % pkg, prerm) + + + # Add files to FILES_*-systemd if existent and not already done + def systemd_append_file(pkg_systemd, file_append): + appended = False + if os.path.exists(oe.path.join(d.getVar("D"), file_append)): + var_name = "FILES_" + pkg_systemd + files = d.getVar(var_name, False) or "" + if file_append not in files.split(): + d.appendVar(var_name, " " + file_append) + appended = True + return appended + + # Add systemd files to FILES_*-systemd, parse for Also= and follow recursive + def systemd_add_files_and_parse(pkg_systemd, path, service, keys): + # avoid infinite recursion + if systemd_append_file(pkg_systemd, oe.path.join(path, service)): + fullpath = oe.path.join(d.getVar("D"), path, service) + if service.find('.service') != -1: + # for *.service add *@.service + service_base = service.replace('.service', '') + systemd_add_files_and_parse(pkg_systemd, path, service_base + '@.service', keys) + if service.find('.socket') != -1: + # for *.socket add *.service and *@.service + service_base = service.replace('.socket', '') + systemd_add_files_and_parse(pkg_systemd, path, service_base + '.service', keys) + systemd_add_files_and_parse(pkg_systemd, path, service_base + '@.service', keys) + for key in keys.split(): + # recurse all dependencies found in keys ('Also';'Conflicts';..) and add to files + cmd = "grep %s %s | sed 's,%s=,,g' | tr ',' '\\n'" % (key, shlex.quote(fullpath), key) + pipe = os.popen(cmd, 'r') + line = pipe.readline() + while line: + line = line.replace('\n', '') + systemd_add_files_and_parse(pkg_systemd, path, line, keys) + line = pipe.readline() + pipe.close() + + # Check service-files and call systemd_add_files_and_parse for each entry + def systemd_check_services(): + searchpaths = [oe.path.join(d.getVar("sysconfdir"), "systemd", "system"),] + searchpaths.append(d.getVar("systemd_system_unitdir")) + systemd_packages = d.getVar('SYSTEMD_PACKAGES') + + keys = 'Also' + # scan for all in SYSTEMD_SERVICE[] + for pkg_systemd in systemd_packages.split(): + for service in get_package_var(d, 'SYSTEMD_SERVICE', pkg_systemd).split(): + path_found = '' + + # Deal with adding, for example, 'ifplugd@eth0.service' from + # 'ifplugd@.service' + base = None + at = service.find('@') + if at != -1: + ext = service.rfind('.') + base = service[:at] + '@' + service[ext:] + + for path in searchpaths: + if os.path.exists(oe.path.join(d.getVar("D"), path, service)): + path_found = path + break + elif base is not None: + if os.path.exists(oe.path.join(d.getVar("D"), path, base)): + path_found = path + break + + if path_found != '': + systemd_add_files_and_parse(pkg_systemd, path_found, service, keys) + else: + bb.fatal("Didn't find service unit '{0}', specified in SYSTEMD_SERVICE_{1}. {2}".format( + service, pkg_systemd, "Also looked for service unit '{0}'.".format(base) if base is not None else "")) + + def systemd_create_presets(pkg, action): + presetf = oe.path.join(d.getVar("PKGD"), d.getVar("systemd_unitdir"), "system-preset/98-%s.preset" % pkg) + bb.utils.mkdirhier(os.path.dirname(presetf)) + with open(presetf, 'a') as fd: + for service in d.getVar('SYSTEMD_SERVICE_%s' % pkg).split(): + fd.write("%s %s\n" % (action,service)) + d.appendVar("FILES_%s" % pkg, ' ' + oe.path.join(d.getVar("systemd_unitdir"), "system-preset/98-%s.preset" % pkg)) + + # Run all modifications once when creating package + if os.path.exists(d.getVar("D")): + for pkg in d.getVar('SYSTEMD_PACKAGES').split(): + systemd_check_package(pkg) + if d.getVar('SYSTEMD_SERVICE_' + pkg): + systemd_generate_package_scripts(pkg) + action = get_package_var(d, 'SYSTEMD_AUTO_ENABLE', pkg) + if action in ("enable", "disable"): + systemd_create_presets(pkg, action) + elif action not in ("mask", "preset"): + bb.fatal("SYSTEMD_AUTO_ENABLE_%s '%s' is not 'enable', 'disable', 'mask' or 'preset'" % (pkg, action)) + systemd_check_services() +} + +PACKAGESPLITFUNCS_prepend = "systemd_populate_packages " + +python rm_systemd_unitdir (){ + import shutil + if not bb.utils.contains('DISTRO_FEATURES', 'systemd', True, False, d): + systemd_unitdir = oe.path.join(d.getVar("D"), d.getVar('systemd_unitdir')) + if os.path.exists(systemd_unitdir): + shutil.rmtree(systemd_unitdir) + systemd_libdir = os.path.dirname(systemd_unitdir) + if (os.path.exists(systemd_libdir) and not os.listdir(systemd_libdir)): + os.rmdir(systemd_libdir) +} + +python rm_sysvinit_initddir (){ + import shutil + sysv_initddir = oe.path.join(d.getVar("D"), (d.getVar('INIT_D_DIR') or "/etc/init.d")) + + if bb.utils.contains('DISTRO_FEATURES', 'systemd', True, False, d) and \ + not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d) and \ + os.path.exists(sysv_initddir): + systemd_system_unitdir = oe.path.join(d.getVar("D"), d.getVar('systemd_system_unitdir')) + + # If systemd_system_unitdir contains anything, delete sysv_initddir + if (os.path.exists(systemd_system_unitdir) and os.listdir(systemd_system_unitdir)): + shutil.rmtree(sysv_initddir) +} + +do_install[postfuncs] += "${RMINITDIR} " +RMINITDIR_class-target = " rm_sysvinit_initddir rm_systemd_unitdir " +RMINITDIR_class-nativesdk = " rm_sysvinit_initddir rm_systemd_unitdir " +RMINITDIR = "" + diff --git a/meta-webos-backports/meta-webos-backports-3.4/conf/image-uefi.conf b/meta-webos-backports/meta-webos-backports-3.4/conf/image-uefi.conf new file mode 100644 index 000000000..6ef011e23 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/conf/image-uefi.conf @@ -0,0 +1,21 @@ +# Location of EFI files inside EFI System Partition +EFIDIR ?= "/EFI/BOOT" + +# Prefix where ESP is mounted inside rootfs. Set to empty if package is going +# to be installed to ESP directly +EFI_PREFIX ?= "/boot" + +# Location inside rootfs. +EFI_FILES_PATH = "${EFI_PREFIX}${EFIDIR}" + +# The EFI name for the architecture +EFI_ARCH ?= "INVALID" +EFI_ARCH_x86 = "ia32" +EFI_ARCH_x86-64 = "x64" +EFI_ARCH_aarch64 = "aa64" +EFI_ARCH_arm = "arm" +EFI_ARCH_riscv32 = "riscv32" +EFI_ARCH_riscv64 = "riscv64" + +# Determine name of bootloader image +EFI_BOOT_IMAGE ?= "boot${EFI_ARCH}.efi" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-boot_248.3.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-boot_248.3.bb new file mode 100644 index 000000000..249e620f4 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-boot_248.3.bb @@ -0,0 +1,70 @@ +require systemd.inc +FILESEXTRAPATHS =. "${FILE_DIRNAME}/systemd:" + +require conf/image-uefi.conf + +DEPENDS = "intltool-native libcap util-linux gnu-efi gperf-native" + +inherit meson pkgconfig gettext +inherit deploy + +LDFLAGS_prepend = "${@ " ".join(d.getVar('LD').split()[1:])} " + +do_write_config[vardeps] += "CC OBJCOPY" +do_write_config_append() { + cat >${WORKDIR}/meson-${PN}.cross <.*)\]") + kv_re = re.compile(r"^\s*(?P[^\s]+)\s*=\s*(?P.*)") + section = None + + if path.is_symlink(): + try: + path.resolve() + except FileNotFoundError: + # broken symlink, try relative to root + path = root / Path(os.readlink(str(path))).relative_to(ROOT) + + with path.open() as f: + for line in f: + if skip_re.match(line): + continue + + line = line.strip() + m = section_re.match(line) + if m: + if m.group('section') not in self.sections: + section = dict() + self.sections[m.group('section')] = section + else: + section = self.sections[m.group('section')] + continue + + while line.endswith("\\"): + line += f.readline().rstrip("\n") + + m = kv_re.match(line) + k = m.group('key') + v = m.group('value') + if k not in section: + section[k] = list() + section[k].extend(v.split()) + + def get(self, section, prop): + """Get a property from section + + Args: + section: Section to retrieve property from + prop: Property to retrieve + + Returns: + List representing all properties of type prop in section. + + Raises: + KeyError: if ``section`` or ``prop`` not found + """ + return self.sections[section][prop] + + +class Presets(): + """Class representing all systemd presets""" + def __init__(self, scope, root): + self.directives = list() + self._collect_presets(scope, root) + + def _parse_presets(self, presets): + """Parse presets out of a set of preset files""" + skip_re = re.compile(r"^\s*([#;]|$)") + directive_re = re.compile(r"^\s*(?Penable|disable)\s+(?P(.+))") + + Directive = namedtuple("Directive", "action unit_name") + for preset in presets: + with preset.open() as f: + for line in f: + m = directive_re.match(line) + if m: + directive = Directive(action=m.group('action'), + unit_name=m.group('unit_name')) + self.directives.append(directive) + elif skip_re.match(line): + pass + else: + sys.exit("Unparsed preset line in {}".format(preset)) + + def _collect_presets(self, scope, root): + """Collect list of preset files""" + presets = dict() + for location in locations: + paths = (root / location / scope).glob("*.preset") + for path in paths: + # earlier names override later ones + if path.name not in presets: + presets[path.name] = path + + self._parse_presets([v for k, v in sorted(presets.items())]) + + def state(self, unit_name): + """Return state of preset for unit_name + + Args: + presets: set of presets + unit_name: name of the unit + + Returns: + None: no matching preset + `enable`: unit_name is enabled + `disable`: unit_name is disabled + """ + for directive in self.directives: + if fnmatch.fnmatch(unit_name, directive.unit_name): + return directive.action + + return None + + +def add_link(path, target): + try: + path.parent.mkdir(parents=True) + except FileExistsError: + pass + if not path.is_symlink(): + print("ln -s {} {}".format(target, path)) + path.symlink_to(target) + + +class SystemdUnitNotFoundError(Exception): + def __init__(self, path, unit): + self.path = path + self.unit = unit + + +class SystemdUnit(): + def __init__(self, root, unit): + self.root = root + self.unit = unit + self.config = None + + def _path_for_unit(self, unit): + for location in locations: + path = self.root / location / "system" / unit + if path.exists() or path.is_symlink(): + return path + + raise SystemdUnitNotFoundError(self.root, unit) + + def _process_deps(self, config, service, location, prop, dirstem): + systemdir = self.root / SYSCONFDIR / "systemd" / "system" + + target = ROOT / location.relative_to(self.root) + try: + for dependent in config.get('Install', prop): + wants = systemdir / "{}.{}".format(dependent, dirstem) / service + add_link(wants, target) + + except KeyError: + pass + + def enable(self): + # if we're enabling an instance, first extract the actual instance + # then figure out what the template unit is + template = re.match(r"[^@]+@(?P[^\.]*)\.", self.unit) + if template: + instance = template.group('instance') + unit = re.sub(r"@[^\.]*\.", "@.", self.unit, 1) + else: + instance = None + unit = self.unit + + path = self._path_for_unit(unit) + + if path.is_symlink(): + # ignore aliases + return + + config = SystemdFile(self.root, path) + if instance == "": + try: + default_instance = config.get('Install', 'DefaultInstance')[0] + except KeyError: + # no default instance, so nothing to enable + return + + service = self.unit.replace("@.", + "@{}.".format(default_instance)) + else: + service = self.unit + + self._process_deps(config, service, path, 'WantedBy', 'wants') + self._process_deps(config, service, path, 'RequiredBy', 'requires') + + try: + for also in config.get('Install', 'Also'): + try: + SystemdUnit(self.root, also).enable() + except SystemdUnitNotFoundError as e: + sys.exit("Error: Systemctl also enable issue with %s (%s)" % (service, e.unit)) + + except KeyError: + pass + + systemdir = self.root / SYSCONFDIR / "systemd" / "system" + target = ROOT / path.relative_to(self.root) + try: + for dest in config.get('Install', 'Alias'): + alias = systemdir / dest + add_link(alias, target) + + except KeyError: + pass + + def mask(self): + systemdir = self.root / SYSCONFDIR / "systemd" / "system" + add_link(systemdir / self.unit, "/dev/null") + + +def collect_services(root): + """Collect list of service files""" + services = set() + for location in locations: + paths = (root / location / "system").glob("*") + for path in paths: + if path.is_dir(): + continue + services.add(path.name) + + return services + + +def preset_all(root): + presets = Presets('system-preset', root) + services = collect_services(root) + + for service in services: + state = presets.state(service) + + if state == "enable" or state is None: + try: + SystemdUnit(root, service).enable() + except SystemdUnitNotFoundError: + sys.exit("Error: Systemctl preset_all issue in %s" % service) + + # If we populate the systemd links we also create /etc/machine-id, which + # allows systemd to boot with the filesystem read-only before generating + # a real value and then committing it back. + # + # For the stateless configuration, where /etc is generated at runtime + # (for example on a tmpfs), this script shouldn't run at all and we + # allow systemd to completely populate /etc. + (root / SYSCONFDIR / "machine-id").touch() + + +def main(): + if sys.version_info < (3, 4, 0): + sys.exit("Python 3.4 or greater is required") + + parser = argparse.ArgumentParser() + parser.add_argument('command', nargs='?', choices=['enable', 'mask', + 'preset-all']) + parser.add_argument('service', nargs=argparse.REMAINDER) + parser.add_argument('--root') + parser.add_argument('--preset-mode', + choices=['full', 'enable-only', 'disable-only'], + default='full') + + args = parser.parse_args() + + root = Path(args.root) if args.root else ROOT + + locations.append(SYSCONFDIR / "systemd") + # Handle the usrmerge case by ignoring /lib when it's a symlink + if not (root / BASE_LIBDIR).is_symlink(): + locations.append(BASE_LIBDIR / "systemd") + locations.append(LIBDIR / "systemd") + + command = args.command + if not command: + parser.print_help() + return 0 + + if command == "mask": + for service in args.service: + try: + SystemdUnit(root, service).mask() + except SystemdUnitNotFoundError as e: + sys.exit("Error: Systemctl main mask issue in %s (%s)" % (service, e.unit)) + elif command == "enable": + for service in args.service: + try: + SystemdUnit(root, service).enable() + except SystemdUnitNotFoundError as e: + sys.exit("Error: Systemctl main enable issue in %s (%s)" % (service, e.unit)) + elif command == "preset-all": + if len(args.service) != 0: + sys.exit("Too many arguments.") + if args.preset_mode != "enable-only": + sys.exit("Only enable-only is supported as preset-mode.") + preset_all(root) + else: + raise RuntimeError() + + +if __name__ == '__main__': + main() diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd.inc new file mode 100644 index 000000000..0524a2500 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd.inc @@ -0,0 +1,22 @@ +SUMMARY = "A System and service manager" +HOMEPAGE = "http://www.freedesktop.org/wiki/Software/systemd" + +DESCRIPTION = "systemd is a system and service manager for Linux, compatible with \ +SysV and LSB init scripts. systemd provides aggressive parallelization \ +capabilities, uses socket and D-Bus activation for starting services, \ +offers on-demand starting of daemons, keeps track of processes using \ +Linux cgroups, supports snapshotting and restoring of the system \ +state, maintains mount and automount points and implements an \ +elaborate transactional dependency-based service control logic. It can \ +work as a drop-in replacement for sysvinit." + +LICENSE = "GPLv2 & LGPLv2.1" +LIC_FILES_CHKSUM = "file://LICENSE.GPL2;md5=751419260aa954499f7abaabaa882bbe \ + file://LICENSE.LGPL2.1;md5=4fbd65380cdd255951079008b364516c" + +SRCREV = "37c4cfde0ce613f0f00544d3f4e2e72bf93d9c76" +SRCBRANCH = "v248-stable" +SRC_URI = "git://github.com/systemd/systemd-stable.git;protocol=git;branch=${SRCBRANCH} \ +" + +S = "${WORKDIR}/git" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/00-create-volatile.conf b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/00-create-volatile.conf new file mode 100644 index 000000000..87cbe1e7d --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/00-create-volatile.conf @@ -0,0 +1,7 @@ +#This goes hand-in-hand with the base-files of OE-Core. The file must +# be sorted before 'systemd.conf' becuase this attempts to create a file +# inside /var/log. + + +d /var/volatile/log - - - - +d /var/volatile/tmp 1777 - - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/00-hostnamed-network-user.conf b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/00-hostnamed-network-user.conf new file mode 100644 index 000000000..6b224ba9b --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/00-hostnamed-network-user.conf @@ -0,0 +1,6 @@ +[Service] +# By running with these options instead of root, networkd is allowed to request +# a hostname change via DBUS when policykit is not present +User=systemd-network +Group=systemd-hostname +AmbientCapabilities=CAP_SYS_ADMIN diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch new file mode 100644 index 000000000..8dd22eeb7 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch @@ -0,0 +1,81 @@ +From 564830719be2017c4953589d50f21a9e856a4ecc Mon Sep 17 00:00:00 2001 +From: Chen Qi +Date: Thu, 21 Feb 2019 16:23:24 +0800 +Subject: [PATCH] binfmt: Don't install dependency links at install time for + the binfmt services + +use [Install] blocks so that they get created when the service is enabled +like a traditional service. + +The [Install] blocks were rejected upstream as they don't have a way to +"enable" it on install without static symlinks which can't be disabled, +only masked. We however can do that in a postinst. + +Upstream-Status: Denied + +Signed-off-by: Ross Burton +Signed-off-by: Khem Raj +Signed-off-by: Chen Qi +[rebased for systemd 243] +Signed-off-by: Scott Murray + +--- + units/meson.build | 6 ++---- + units/proc-sys-fs-binfmt_misc.automount | 3 +++ + units/systemd-binfmt.service.in | 4 ++++ + 3 files changed, 9 insertions(+), 4 deletions(-) + +Index: systemd-stable/units/meson.build +=================================================================== +--- systemd-stable.orig/units/meson.build ++++ systemd-stable/units/meson.build +@@ -55,8 +55,7 @@ units = [ + ['poweroff.target', '', + (with_runlevels ? 'runlevel0.target' : '')], + ['printer.target', ''], +- ['proc-sys-fs-binfmt_misc.automount', 'ENABLE_BINFMT', +- 'sysinit.target.wants/'], ++ ['proc-sys-fs-binfmt_misc.automount', 'ENABLE_BINFMT'], + ['proc-sys-fs-binfmt_misc.mount', 'ENABLE_BINFMT'], + ['reboot.target', '', + 'ctrl-alt-del.target' + (with_runlevels ? ' runlevel6.target' : '')], +@@ -166,8 +165,7 @@ in_units = [ + ['rc-local.service', 'HAVE_SYSV_COMPAT'], + ['rescue.service', ''], + ['systemd-backlight@.service', 'ENABLE_BACKLIGHT'], +- ['systemd-binfmt.service', 'ENABLE_BINFMT', +- 'sysinit.target.wants/'], ++ ['systemd-binfmt.service', 'ENABLE_BINFMT'], + ['systemd-bless-boot.service', 'ENABLE_EFI HAVE_BLKID'], + ['systemd-boot-check-no-failures.service', ''], + ['systemd-coredump@.service', 'ENABLE_COREDUMP'], +Index: systemd-stable/units/proc-sys-fs-binfmt_misc.automount +=================================================================== +--- systemd-stable.orig/units/proc-sys-fs-binfmt_misc.automount ++++ systemd-stable/units/proc-sys-fs-binfmt_misc.automount +@@ -18,3 +18,6 @@ ConditionPathIsReadWrite=/proc/sys/ + + [Automount] + Where=/proc/sys/fs/binfmt_misc ++ ++[Install] ++WantedBy=sysinit.target +Index: systemd-stable/units/systemd-binfmt.service.in +=================================================================== +--- systemd-stable.orig/units/systemd-binfmt.service.in ++++ systemd-stable/units/systemd-binfmt.service.in +@@ -14,6 +14,7 @@ Documentation=https://www.kernel.org/doc/html/latest/admin-guide/binfmt-misc.htm + Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems + DefaultDependencies=no + Conflicts=shutdown.target ++Wants=proc-sys-fs-binfmt_misc.automount + After=proc-sys-fs-binfmt_misc.automount + After=proc-sys-fs-binfmt_misc.mount + Before=sysinit.target shutdown.target +@@ -30,3 +31,6 @@ RemainAfterExit=yes + ExecStart=@rootlibexecdir@/systemd-binfmt + ExecStop=@rootlibexecdir@/systemd-binfmt --unregister + TimeoutSec=90s ++ ++[Install] ++WantedBy=sysinit.target diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-systemd.pc.in-use-ROOTPREFIX-without-suffixed-slash.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-systemd.pc.in-use-ROOTPREFIX-without-suffixed-slash.patch new file mode 100644 index 000000000..752824688 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-systemd.pc.in-use-ROOTPREFIX-without-suffixed-slash.patch @@ -0,0 +1,42 @@ +From 58860e0f248576a80ff2af256ba42713c186ae93 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Tue, 29 Sep 2020 18:01:41 -0700 +Subject: [PATCH] systemd.pc.in: use ROOTPREFIX without suffixed slash + +This complements the commit +https://github.com/poettering/systemd/commit/b612c26ceb9f56af0271fc9f07c1724d2d260a8a + +Upstream-Status: Pending +Signed-off-by: Khem Raj +--- + src/core/systemd.pc.in | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +diff --git a/src/core/systemd.pc.in b/src/core/systemd.pc.in +index b5cc8f9..21dbf30 100644 +--- a/src/core/systemd.pc.in ++++ b/src/core/systemd.pc.in +@@ -65,16 +65,16 @@ systemdshutdowndir=${systemd_shutdown_dir} + tmpfiles_dir=${prefix}/lib/tmpfiles.d + tmpfilesdir=${tmpfiles_dir} + +-sysusers_dir=${rootprefix}/lib/sysusers.d ++sysusers_dir=${prefix}/lib/sysusers.d + sysusersdir=${sysusers_dir} + +-sysctl_dir=${rootprefix}/lib/sysctl.d ++sysctl_dir=${prefix}/lib/sysctl.d + sysctldir=${sysctl_dir} + +-binfmt_dir=${rootprefix}/lib/binfmt.d ++binfmt_dir=${prefix}/lib/binfmt.d + binfmtdir=${binfmt_dir} + +-modules_load_dir=${rootprefix}/lib/modules-load.d ++modules_load_dir=${prefix}/lib/modules-load.d + modulesloaddir=${modules_load_dir} + + catalog_dir=${prefix}/lib/systemd/catalog +-- +2.25.1 + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-test-parse-argument-Include-signal.h.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-test-parse-argument-Include-signal.h.patch new file mode 100644 index 000000000..3af1daac9 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-test-parse-argument-Include-signal.h.patch @@ -0,0 +1,29 @@ +From 1adde6721ead386ccee6efe48038d6944b96319a Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Mon, 24 May 2021 18:26:27 -0700 +Subject: [PATCH] test-parse-argument: Include signal.h + +Fixes +src/test/test-parse-argument.c:49:29: error: use of undeclared identifier 'SIGABRT' + +Upstream-Status: Submitted [https://github.com/systemd/systemd/pull/19718] +Signed-off-by: Khem Raj +--- + src/test/test-parse-argument.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/test/test-parse-argument.c b/src/test/test-parse-argument.c +index 4081a9f25a..820d69f092 100644 +--- a/src/test/test-parse-argument.c ++++ b/src/test/test-parse-argument.c +@@ -3,6 +3,7 @@ + #include "parse-argument.h" + #include "stdio-util.h" + #include "tests.h" ++#include + + static void test_parse_json_argument(void) { + log_info("/* %s */", __func__); +-- +2.31.1 + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch new file mode 100644 index 000000000..4cdf66e76 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch @@ -0,0 +1,163 @@ +From 159c53612444ec1df492bae528a5a88a275b93bf Mon Sep 17 00:00:00 2001 +From: Chen Qi +Date: Mon, 25 Feb 2019 13:41:41 +0800 +Subject: [PATCH] don't use glibc-specific qsort_r + +Upstream-Status: Inappropriate [musl specific] + +Signed-off-by: Khem Raj +[Rebased for v241] +Signed-off-by: Chen Qi +[Rebased for v242] +Signed-off-by: Andrej Valek +[Rebased for v247] +Signed-off-by: Luca Boccassi + +--- + src/basic/sort-util.h | 14 ------------ + src/libsystemd/sd-hwdb/hwdb-util.c | 19 +++++++++++----- + src/shared/format-table.c | 36 ++++++++++++++++++++---------- + 3 files changed, 38 insertions(+), 31 deletions(-) + +diff --git a/src/basic/sort-util.h b/src/basic/sort-util.h +index 49586a4a24..d92a5ab0ed 100644 +--- a/src/basic/sort-util.h ++++ b/src/basic/sort-util.h +@@ -55,18 +55,4 @@ static inline void _qsort_safe(void *base, size_t nmemb, size_t size, __compar_f + _qsort_safe((p), (n), sizeof((p)[0]), (__compar_fn_t) _func_); \ + }) + +-static inline void qsort_r_safe(void *base, size_t nmemb, size_t size, __compar_d_fn_t compar, void *userdata) { +- if (nmemb <= 1) +- return; +- +- assert(base); +- qsort_r(base, nmemb, size, compar, userdata); +-} +- +-#define typesafe_qsort_r(p, n, func, userdata) \ +- ({ \ +- int (*_func_)(const typeof(p[0])*, const typeof(p[0])*, typeof(userdata)) = func; \ +- qsort_r_safe((p), (n), sizeof((p)[0]), (__compar_d_fn_t) _func_, userdata); \ +- }) +- + int cmp_int(const int *a, const int *b); +diff --git a/src/libsystemd/sd-hwdb/hwdb-util.c b/src/libsystemd/sd-hwdb/hwdb-util.c +index fd45ff0f54..ac4b63c49b 100644 +--- a/src/libsystemd/sd-hwdb/hwdb-util.c ++++ b/src/libsystemd/sd-hwdb/hwdb-util.c +@@ -126,9 +126,13 @@ static struct trie* trie_free(struct trie *trie) { + + DEFINE_TRIVIAL_CLEANUP_FUNC(struct trie*, trie_free); + +-static int trie_values_cmp(const struct trie_value_entry *a, const struct trie_value_entry *b, struct trie *trie) { +- return strcmp(trie->strings->buf + a->key_off, +- trie->strings->buf + b->key_off); ++static struct trie *trie_node_add_value_trie; ++static int trie_values_cmp(const void *v1, const void *v2) { ++ const struct trie_value_entry *a = v1; ++ const struct trie_value_entry *b = v2; ++ ++ return strcmp(trie_node_add_value_trie->strings->buf + a->key_off, ++ trie_node_add_value_trie->strings->buf + b->key_off); + } + + static int trie_node_add_value(struct trie *trie, struct trie_node *node, +@@ -156,7 +160,10 @@ static int trie_node_add_value(struct trie *trie, struct trie_node *node, + .value_off = v, + }; + +- val = typesafe_bsearch_r(&search, node->values, node->values_count, trie_values_cmp, trie); ++ trie_node_add_value_trie = trie; ++ val = bsearch(&search, node->values, node->values_count, sizeof(struct trie_value_entry), trie_values_cmp); ++ trie_node_add_value_trie = NULL; ++ + if (val) { + /* At this point we have 2 identical properties on the same match-string. + * Since we process files in order, we just replace the previous value. */ +@@ -182,7 +189,9 @@ static int trie_node_add_value(struct trie *trie, struct trie_node *node, + .line_number = line_number, + }; + node->values_count++; +- typesafe_qsort_r(node->values, node->values_count, trie_values_cmp, trie); ++ trie_node_add_value_trie = trie; ++ qsort(node->values, node->values_count, sizeof(struct trie_value_entry), trie_values_cmp); ++ trie_node_add_value_trie = NULL; + return 0; + } + +diff --git a/src/shared/format-table.c b/src/shared/format-table.c +index dccb796b26..c3ab8ac296 100644 +--- a/src/shared/format-table.c ++++ b/src/shared/format-table.c +@@ -1290,30 +1290,32 @@ static int cell_data_compare(TableData *a, size_t index_a, TableData *b, size_t + return CMP(index_a, index_b); + } + +-static int table_data_compare(const size_t *a, const size_t *b, Table *t) { ++static Table *user_table; ++static int table_data_compare(const void *x, const void *y) { ++ const size_t *a = x, *b=y; + int r; + +- assert(t); +- assert(t->sort_map); ++ assert(user_table); ++ assert(user_table->sort_map); + + /* Make sure the header stays at the beginning */ +- if (*a < t->n_columns && *b < t->n_columns) ++ if (*a < user_table->n_columns && *b < user_table->n_columns) + return 0; +- if (*a < t->n_columns) ++ if (*a < user_table->n_columns) + return -1; +- if (*b < t->n_columns) ++ if (*b < user_table->n_columns) + return 1; + + /* Order other lines by the sorting map */ +- for (size_t i = 0; i < t->n_sort_map; i++) { ++ for (size_t i = 0; i < user_table->n_sort_map; i++) { + TableData *d, *dd; + +- d = t->data[*a + t->sort_map[i]]; +- dd = t->data[*b + t->sort_map[i]]; ++ d = user_table->data[*a + user_table->sort_map[i]]; ++ dd = user_table->data[*b + user_table->sort_map[i]]; + + r = cell_data_compare(d, *a, dd, *b); + if (r != 0) +- return t->reverse_map && t->reverse_map[t->sort_map[i]] ? -r : r; ++ return user_table->reverse_map && user_table->reverse_map[user_table->sort_map[i]] ? -r : r; + } + + /* Order identical lines by the order there were originally added in */ +@@ -1952,7 +1954,12 @@ int table_print(Table *t, FILE *f) { + for (size_t i = 0; i < n_rows; i++) + sorted[i] = i * t->n_columns; + +- typesafe_qsort_r(sorted, n_rows, table_data_compare, t); ++ if (n_rows <= 1) ++ return 0; ++ assert(sorted); ++ user_table = t; ++ qsort(sorted, n_rows, sizeof(size_t), table_data_compare); ++ user_table = NULL; + } + + if (t->display_map) +@@ -2580,7 +2587,12 @@ int table_to_json(Table *t, JsonVariant **ret) { + for (size_t i = 0; i < n_rows; i++) + sorted[i] = i * t->n_columns; + +- typesafe_qsort_r(sorted, n_rows, table_data_compare, t); ++ if (n_rows <= 1) ++ return 0; ++ assert(sorted); ++ user_table = t; ++ qsort(sorted, n_rows, sizeof(size_t), table_data_compare); ++ user_table = NULL; + } + + if (t->display_map) diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0003-implment-systemd-sysv-install-for-OE.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0003-implment-systemd-sysv-install-for-OE.patch new file mode 100644 index 000000000..c6204786b --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0003-implment-systemd-sysv-install-for-OE.patch @@ -0,0 +1,41 @@ +From f9078501a1495c9991431d1435d081cd2e830328 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sat, 5 Sep 2015 06:31:47 +0000 +Subject: [PATCH] implment systemd-sysv-install for OE + +Use update-rc.d for enabling/disabling and status command +to check the status of the sysv service + +Upstream-Status: Inappropriate [OE-Specific] + +Signed-off-by: Khem Raj + +--- + src/systemctl/systemd-sysv-install.SKELETON | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/systemctl/systemd-sysv-install.SKELETON b/src/systemctl/systemd-sysv-install.SKELETON +index 8c16cf99913f..9f078a121469 100755 +--- a/src/systemctl/systemd-sysv-install.SKELETON ++++ b/src/systemctl/systemd-sysv-install.SKELETON +@@ -32,17 +32,17 @@ case "$1" in + enable) + # call the command to enable SysV init script $NAME here + # (consider optional $ROOT) +- echo "IMPLEMENT ME: enabling SysV init.d script $NAME" ++ update-rc.d -f $NAME defaults + ;; + disable) + # call the command to disable SysV init script $NAME here + # (consider optional $ROOT) +- echo "IMPLEMENT ME: disabling SysV init.d script $NAME" ++ update-rc.d -f $NAME remove + ;; + is-enabled) + # exit with 0 if $NAME is enabled, non-zero if it is disabled + # (consider optional $ROOT) +- echo "IMPLEMENT ME: checking SysV init.d script $NAME" ++ /etc/init.d/$NAME status + ;; + *) + usage ;; diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0003-missing_type.h-add-__compare_fn_t-and-comparison_fn_.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0003-missing_type.h-add-__compare_fn_t-and-comparison_fn_.patch new file mode 100644 index 000000000..9b1768d9c --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0003-missing_type.h-add-__compare_fn_t-and-comparison_fn_.patch @@ -0,0 +1,76 @@ +From 4afb8adc83348bf75964fc10af7902e04dd62637 Mon Sep 17 00:00:00 2001 +From: Chen Qi +Date: Mon, 25 Feb 2019 13:55:12 +0800 +Subject: [PATCH] missing_type.h: add __compare_fn_t and comparison_fn_t + +Make it work with musl where comparison_fn_t and __compare_fn_t +is not provided. + +Upstream-Status: Inappropriate [musl specific] + +Signed-off-by: Alex Kiernan +[Rebased for v244] +Signed-off-by: Chen Qi +[Rebased for v242] +Signed-off-by: Andrej Valek + +--- + src/basic/missing_type.h | 9 +++++++++ + src/basic/sort-util.h | 1 + + src/core/kmod-setup.c | 1 + + src/libsystemd/sd-journal/catalog.c | 1 + + 4 files changed, 12 insertions(+) + +diff --git a/src/basic/missing_type.h b/src/basic/missing_type.h +index f6233090a9..aeaf6ad5ec 100644 +--- a/src/basic/missing_type.h ++++ b/src/basic/missing_type.h +@@ -10,3 +10,12 @@ + #if !HAVE_CHAR16_T + #define char16_t uint16_t + #endif ++ ++#ifndef __GLIBC__ ++typedef int (*comparison_fn_t)(const void *, const void *); ++#endif ++ ++#ifndef __COMPAR_FN_T ++#define __COMPAR_FN_T ++typedef int (*__compar_fn_t)(const void *, const void *); ++#endif +diff --git a/src/basic/sort-util.h b/src/basic/sort-util.h +index d92a5ab0ed..a63867c716 100644 +--- a/src/basic/sort-util.h ++++ b/src/basic/sort-util.h +@@ -4,6 +4,7 @@ + #include + + #include "macro.h" ++#include "missing_type.h" + + void *xbsearch_r(const void *key, const void *base, size_t nmemb, size_t size, + __compar_d_fn_t compar, void *arg); +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index 8a7f82812a..a56f12f47f 100644 +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -10,6 +10,7 @@ + #include "kmod-setup.h" + #include "macro.h" + #include "string-util.h" ++#include "missing_type.h" + + #if HAVE_KMOD + #include "module-util.h" +diff --git a/src/libsystemd/sd-journal/catalog.c b/src/libsystemd/sd-journal/catalog.c +index aea3241d18..75e6c56a28 100644 +--- a/src/libsystemd/sd-journal/catalog.c ++++ b/src/libsystemd/sd-journal/catalog.c +@@ -28,6 +28,7 @@ + #include "string-util.h" + #include "strv.h" + #include "tmpfile-util.h" ++#include "missing_type.h" + + const char * const catalog_file_dirs[] = { + "/usr/local/lib/systemd/catalog/", diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch new file mode 100644 index 000000000..dc40a2fe8 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch @@ -0,0 +1,435 @@ +From 6c18e5f9373da3e3b38f2c5727e2aefe07fcbbd9 Mon Sep 17 00:00:00 2001 +From: Alexander Kanavin +Date: Sat, 22 May 2021 20:26:24 +0200 +Subject: [PATCH] [PATCH] add fallback parse_printf_format implementation + +Upstream-Status: Inappropriate [musl specific] + +Signed-off-by: Emil Renner Berthing +Signed-off-by: Khem Raj +Signed-off-by: Chen Qi +[rebased for systemd 243] +Signed-off-by: Scott Murray +--- + meson.build | 1 + + src/basic/meson.build | 5 + + src/basic/parse-printf-format.c | 273 +++++++++++++++++++++++ + src/basic/parse-printf-format.h | 57 +++++ + src/basic/stdio-util.h | 2 +- + src/libsystemd/sd-journal/journal-send.c | 2 +- + 6 files changed, 338 insertions(+), 2 deletions(-) + create mode 100644 src/basic/parse-printf-format.c + create mode 100644 src/basic/parse-printf-format.h + +diff --git a/meson.build b/meson.build +index 27186d63a3..2abb7b3188 100644 +--- a/meson.build ++++ b/meson.build +@@ -675,6 +675,7 @@ endif + foreach header : ['crypt.h', + 'linux/memfd.h', + 'linux/vm_sockets.h', ++ 'printf.h', + 'sys/auxv.h', + 'valgrind/memcheck.h', + 'valgrind/valgrind.h', +diff --git a/src/basic/meson.build b/src/basic/meson.build +index 60ef801a25..aba2172edd 100644 +--- a/src/basic/meson.build ++++ b/src/basic/meson.build +@@ -341,6 +341,11 @@ endforeach + + basic_sources += generated_gperf_headers + ++if conf.get('HAVE_PRINTF_H') != 1 ++ basic_sources += [files('parse-printf-format.c')] ++endif ++ ++ + ############################################################ + + arch_list = [ +diff --git a/src/basic/parse-printf-format.c b/src/basic/parse-printf-format.c +new file mode 100644 +index 0000000000..49437e5445 +--- /dev/null ++++ b/src/basic/parse-printf-format.c +@@ -0,0 +1,273 @@ ++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ ++ ++/*** ++ This file is part of systemd. ++ ++ Copyright 2014 Emil Renner Berthing ++ ++ With parts from the musl C library ++ Copyright 2005-2014 Rich Felker, et al. ++ ++ systemd is free software; you can redistribute it and/or modify it ++ under the terms of the GNU Lesser General Public License as published by ++ the Free Software Foundation; either version 2.1 of the License, or ++ (at your option) any later version. ++ ++ systemd is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public License ++ along with systemd; If not, see . ++***/ ++ ++#include ++#include ++ ++#include "parse-printf-format.h" ++ ++static const char *consume_nonarg(const char *fmt) ++{ ++ do { ++ if (*fmt == '\0') ++ return fmt; ++ } while (*fmt++ != '%'); ++ return fmt; ++} ++ ++static const char *consume_num(const char *fmt) ++{ ++ for (;*fmt >= '0' && *fmt <= '9'; fmt++) ++ /* do nothing */; ++ return fmt; ++} ++ ++static const char *consume_argn(const char *fmt, size_t *arg) ++{ ++ const char *p = fmt; ++ size_t val = 0; ++ ++ if (*p < '1' || *p > '9') ++ return fmt; ++ do { ++ val = 10*val + (*p++ - '0'); ++ } while (*p >= '0' && *p <= '9'); ++ ++ if (*p != '$') ++ return fmt; ++ *arg = val; ++ return p+1; ++} ++ ++static const char *consume_flags(const char *fmt) ++{ ++ while (1) { ++ switch (*fmt) { ++ case '#': ++ case '0': ++ case '-': ++ case ' ': ++ case '+': ++ case '\'': ++ case 'I': ++ fmt++; ++ continue; ++ } ++ return fmt; ++ } ++} ++ ++enum state { ++ BARE, ++ LPRE, ++ LLPRE, ++ HPRE, ++ HHPRE, ++ BIGLPRE, ++ ZTPRE, ++ JPRE, ++ STOP ++}; ++ ++enum type { ++ NONE, ++ PTR, ++ INT, ++ UINT, ++ ULLONG, ++ LONG, ++ ULONG, ++ SHORT, ++ USHORT, ++ CHAR, ++ UCHAR, ++ LLONG, ++ SIZET, ++ IMAX, ++ UMAX, ++ PDIFF, ++ UIPTR, ++ DBL, ++ LDBL, ++ MAXTYPE ++}; ++ ++static const short pa_types[MAXTYPE] = { ++ [NONE] = PA_INT, ++ [PTR] = PA_POINTER, ++ [INT] = PA_INT, ++ [UINT] = PA_INT, ++ [ULLONG] = PA_INT | PA_FLAG_LONG_LONG, ++ [LONG] = PA_INT | PA_FLAG_LONG, ++ [ULONG] = PA_INT | PA_FLAG_LONG, ++ [SHORT] = PA_INT | PA_FLAG_SHORT, ++ [USHORT] = PA_INT | PA_FLAG_SHORT, ++ [CHAR] = PA_CHAR, ++ [UCHAR] = PA_CHAR, ++ [LLONG] = PA_INT | PA_FLAG_LONG_LONG, ++ [SIZET] = PA_INT | PA_FLAG_LONG, ++ [IMAX] = PA_INT | PA_FLAG_LONG_LONG, ++ [UMAX] = PA_INT | PA_FLAG_LONG_LONG, ++ [PDIFF] = PA_INT | PA_FLAG_LONG_LONG, ++ [UIPTR] = PA_INT | PA_FLAG_LONG, ++ [DBL] = PA_DOUBLE, ++ [LDBL] = PA_DOUBLE | PA_FLAG_LONG_DOUBLE ++}; ++ ++#define S(x) [(x)-'A'] ++#define E(x) (STOP + (x)) ++ ++static const unsigned char states[]['z'-'A'+1] = { ++ { /* 0: bare types */ ++ S('d') = E(INT), S('i') = E(INT), ++ S('o') = E(UINT),S('u') = E(UINT),S('x') = E(UINT), S('X') = E(UINT), ++ S('e') = E(DBL), S('f') = E(DBL), S('g') = E(DBL), S('a') = E(DBL), ++ S('E') = E(DBL), S('F') = E(DBL), S('G') = E(DBL), S('A') = E(DBL), ++ S('c') = E(CHAR),S('C') = E(INT), ++ S('s') = E(PTR), S('S') = E(PTR), S('p') = E(UIPTR),S('n') = E(PTR), ++ S('m') = E(NONE), ++ S('l') = LPRE, S('h') = HPRE, S('L') = BIGLPRE, ++ S('z') = ZTPRE, S('j') = JPRE, S('t') = ZTPRE ++ }, { /* 1: l-prefixed */ ++ S('d') = E(LONG), S('i') = E(LONG), ++ S('o') = E(ULONG),S('u') = E(ULONG),S('x') = E(ULONG),S('X') = E(ULONG), ++ S('e') = E(DBL), S('f') = E(DBL), S('g') = E(DBL), S('a') = E(DBL), ++ S('E') = E(DBL), S('F') = E(DBL), S('G') = E(DBL), S('A') = E(DBL), ++ S('c') = E(INT), S('s') = E(PTR), S('n') = E(PTR), ++ S('l') = LLPRE ++ }, { /* 2: ll-prefixed */ ++ S('d') = E(LLONG), S('i') = E(LLONG), ++ S('o') = E(ULLONG),S('u') = E(ULLONG), ++ S('x') = E(ULLONG),S('X') = E(ULLONG), ++ S('n') = E(PTR) ++ }, { /* 3: h-prefixed */ ++ S('d') = E(SHORT), S('i') = E(SHORT), ++ S('o') = E(USHORT),S('u') = E(USHORT), ++ S('x') = E(USHORT),S('X') = E(USHORT), ++ S('n') = E(PTR), ++ S('h') = HHPRE ++ }, { /* 4: hh-prefixed */ ++ S('d') = E(CHAR), S('i') = E(CHAR), ++ S('o') = E(UCHAR),S('u') = E(UCHAR), ++ S('x') = E(UCHAR),S('X') = E(UCHAR), ++ S('n') = E(PTR) ++ }, { /* 5: L-prefixed */ ++ S('e') = E(LDBL),S('f') = E(LDBL),S('g') = E(LDBL), S('a') = E(LDBL), ++ S('E') = E(LDBL),S('F') = E(LDBL),S('G') = E(LDBL), S('A') = E(LDBL), ++ S('n') = E(PTR) ++ }, { /* 6: z- or t-prefixed (assumed to be same size) */ ++ S('d') = E(PDIFF),S('i') = E(PDIFF), ++ S('o') = E(SIZET),S('u') = E(SIZET), ++ S('x') = E(SIZET),S('X') = E(SIZET), ++ S('n') = E(PTR) ++ }, { /* 7: j-prefixed */ ++ S('d') = E(IMAX), S('i') = E(IMAX), ++ S('o') = E(UMAX), S('u') = E(UMAX), ++ S('x') = E(UMAX), S('X') = E(UMAX), ++ S('n') = E(PTR) ++ } ++}; ++ ++size_t parse_printf_format(const char *fmt, size_t n, int *types) ++{ ++ size_t i = 0; ++ size_t last = 0; ++ ++ memset(types, 0, n); ++ ++ while (1) { ++ size_t arg; ++ unsigned int state; ++ ++ fmt = consume_nonarg(fmt); ++ if (*fmt == '\0') ++ break; ++ if (*fmt == '%') { ++ fmt++; ++ continue; ++ } ++ arg = 0; ++ fmt = consume_argn(fmt, &arg); ++ /* flags */ ++ fmt = consume_flags(fmt); ++ /* width */ ++ if (*fmt == '*') { ++ size_t warg = 0; ++ fmt = consume_argn(fmt+1, &warg); ++ if (warg == 0) ++ warg = ++i; ++ if (warg > last) ++ last = warg; ++ if (warg <= n && types[warg-1] == NONE) ++ types[warg-1] = INT; ++ } else ++ fmt = consume_num(fmt); ++ /* precision */ ++ if (*fmt == '.') { ++ fmt++; ++ if (*fmt == '*') { ++ size_t parg = 0; ++ fmt = consume_argn(fmt+1, &parg); ++ if (parg == 0) ++ parg = ++i; ++ if (parg > last) ++ last = parg; ++ if (parg <= n && types[parg-1] == NONE) ++ types[parg-1] = INT; ++ } else { ++ if (*fmt == '-') ++ fmt++; ++ fmt = consume_num(fmt); ++ } ++ } ++ /* length modifier and conversion specifier */ ++ state = BARE; ++ do { ++ unsigned char c = *fmt++; ++ ++ if (c < 'A' || c > 'z') ++ continue; ++ state = states[state]S(c); ++ if (state == 0) ++ continue; ++ } while (state < STOP); ++ ++ if (state == E(NONE)) ++ continue; ++ ++ if (arg == 0) ++ arg = ++i; ++ if (arg > last) ++ last = arg; ++ if (arg <= n) ++ types[arg-1] = state - STOP; ++ } ++ ++ if (last > n) ++ last = n; ++ for (i = 0; i < last; i++) ++ types[i] = pa_types[types[i]]; ++ ++ return last; ++} +diff --git a/src/basic/parse-printf-format.h b/src/basic/parse-printf-format.h +new file mode 100644 +index 0000000000..47be7522d7 +--- /dev/null ++++ b/src/basic/parse-printf-format.h +@@ -0,0 +1,57 @@ ++/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ ++ ++/*** ++ This file is part of systemd. ++ ++ Copyright 2014 Emil Renner Berthing ++ ++ With parts from the GNU C Library ++ Copyright 1991-2014 Free Software Foundation, Inc. ++ ++ systemd is free software; you can redistribute it and/or modify it ++ under the terms of the GNU Lesser General Public License as published by ++ the Free Software Foundation; either version 2.1 of the License, or ++ (at your option) any later version. ++ ++ systemd is distributed in the hope that it will be useful, but ++ WITHOUT ANY WARRANTY; without even the implied warranty of ++ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ Lesser General Public License for more details. ++ ++ You should have received a copy of the GNU Lesser General Public License ++ along with systemd; If not, see . ++***/ ++ ++#pragma once ++ ++#include "config.h" ++ ++#if HAVE_PRINTF_H ++#include ++#else ++ ++#include ++ ++enum { /* C type: */ ++ PA_INT, /* int */ ++ PA_CHAR, /* int, cast to char */ ++ PA_WCHAR, /* wide char */ ++ PA_STRING, /* const char *, a '\0'-terminated string */ ++ PA_WSTRING, /* const wchar_t *, wide character string */ ++ PA_POINTER, /* void * */ ++ PA_FLOAT, /* float */ ++ PA_DOUBLE, /* double */ ++ PA_LAST ++}; ++ ++/* Flag bits that can be set in a type returned by `parse_printf_format'. */ ++#define PA_FLAG_MASK 0xff00 ++#define PA_FLAG_LONG_LONG (1 << 8) ++#define PA_FLAG_LONG_DOUBLE PA_FLAG_LONG_LONG ++#define PA_FLAG_LONG (1 << 9) ++#define PA_FLAG_SHORT (1 << 10) ++#define PA_FLAG_PTR (1 << 11) ++ ++size_t parse_printf_format(const char *fmt, size_t n, int *types); ++ ++#endif /* HAVE_PRINTF_H */ +diff --git a/src/basic/stdio-util.h b/src/basic/stdio-util.h +index 6dc1e72312..cea76b36cf 100644 +--- a/src/basic/stdio-util.h ++++ b/src/basic/stdio-util.h +@@ -1,13 +1,13 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + #pragma once + +-#include + #include + #include + #include + + #include "macro.h" + #include "memory-util.h" ++#include "parse-printf-format.h" + + #define snprintf_ok(buf, len, fmt, ...) \ + ((size_t) snprintf(buf, len, fmt, __VA_ARGS__) < (len)) +diff --git a/src/libsystemd/sd-journal/journal-send.c b/src/libsystemd/sd-journal/journal-send.c +index fd3fd7ef9c..e8e6ad555b 100644 +--- a/src/libsystemd/sd-journal/journal-send.c ++++ b/src/libsystemd/sd-journal/journal-send.c +@@ -2,7 +2,6 @@ + + #include + #include +-#include + #include + #include + #include +@@ -21,6 +20,7 @@ + #include "stdio-util.h" + #include "string-util.h" + #include "tmpfile-util.h" ++#include "parse-printf-format.h" + + #define SNDBUF_SIZE (8*1024*1024) + +-- +2.24.0 + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch new file mode 100644 index 000000000..814c28f5b --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch @@ -0,0 +1,602 @@ +From 6b0732ac7164914ce16e231e35980b849bdfc4c8 Mon Sep 17 00:00:00 2001 +From: Chen Qi +Date: Mon, 25 Feb 2019 14:18:21 +0800 +Subject: [PATCH] src/basic/missing.h: check for missing strndupa + +include missing.h for definition of strndupa + +Upstream-Status: Inappropriate [musl specific] + +Signed-off-by: Khem Raj +Signed-off-by: Chen Qi +[Rebased for v242] +Signed-off-by: Andrej Valek +[rebased for systemd 243] +Signed-off-by: Scott Murray +Signed-off-by: Alex Kiernan +[rebased for systemd 244] +[Rebased for v247] +Signed-off-by: Luca Boccassi + +--- + meson.build | 1 + + src/backlight/backlight.c | 1 + + src/basic/cgroup-util.c | 1 + + src/basic/env-util.c | 1 + + src/basic/log.c | 1 + + src/basic/missing_stdlib.h | 12 ++++++++++++ + src/basic/mkdir.c | 1 + + src/basic/mountpoint-util.c | 1 + + src/basic/parse-util.c | 1 + + src/basic/path-lookup.c | 1 + + src/basic/proc-cmdline.c | 1 + + src/basic/procfs-util.c | 1 + + src/basic/selinux-util.c | 1 + + src/basic/time-util.c | 1 + + src/boot/bless-boot.c | 1 + + src/core/dbus-cgroup.c | 1 + + src/core/dbus-execute.c | 1 + + src/core/dbus-util.c | 1 + + src/core/execute.c | 1 + + src/core/kmod-setup.c | 1 + + src/core/service.c | 1 + + src/coredump/coredump-vacuum.c | 1 + + src/journal-remote/journal-remote-main.c | 1 + + src/journal/journalctl.c | 1 + + src/libsystemd/sd-bus/bus-message.c | 1 + + src/libsystemd/sd-bus/bus-objects.c | 1 + + src/libsystemd/sd-bus/bus-socket.c | 1 + + src/libsystemd/sd-bus/sd-bus.c | 1 + + src/libsystemd/sd-bus/test-bus-benchmark.c | 1 + + src/libsystemd/sd-journal/sd-journal.c | 1 + + src/locale/keymap-util.c | 1 + + src/login/pam_systemd.c | 1 + + src/network/generator/network-generator.c | 1 + + src/nspawn/nspawn-settings.c | 1 + + src/nss-mymachines/nss-mymachines.c | 1 + + src/portable/portable.c | 1 + + src/resolve/resolvectl.c | 1 + + src/shared/bus-get-properties.c | 1 + + src/shared/bus-unit-procs.c | 1 + + src/shared/bus-unit-util.c | 1 + + src/shared/bus-util.c | 1 + + src/shared/dns-domain.c | 1 + + src/shared/journal-importer.c | 1 + + src/shared/logs-show.c | 1 + + src/shared/pager.c | 1 + + src/shared/uid-range.c | 1 + + src/socket-proxy/socket-proxyd.c | 1 + + src/test/test-hexdecoct.c | 1 + + src/udev/udev-builtin-path_id.c | 1 + + src/udev/udev-event.c | 1 + + src/udev/udev-rules.c | 1 + + 51 files changed, 62 insertions(+) + +--- a/meson.build ++++ b/meson.build +@@ -550,6 +550,7 @@ foreach ident : [ + ['execveat', '''#include '''], + ['close_range', '''#include '''], + ['epoll_pwait2', '''#include '''], ++ ['strndupa' , '''#include '''], + ] + + have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE') +--- a/src/backlight/backlight.c ++++ b/src/backlight/backlight.c +@@ -19,6 +19,7 @@ + #include "string-util.h" + #include "strv.h" + #include "util.h" ++#include "missing_stdlib.h" + + static int help(void) { + _cleanup_free_ char *link = NULL; +--- a/src/basic/cgroup-util.c ++++ b/src/basic/cgroup-util.c +@@ -38,6 +38,7 @@ + #include "unit-name.h" + #include "user-util.h" + #include "xattr-util.h" ++#include "missing_stdlib.h" + + static int cg_enumerate_items(const char *controller, const char *path, FILE **_f, const char *item) { + _cleanup_free_ char *fs = NULL; +--- a/src/basic/env-util.c ++++ b/src/basic/env-util.c +@@ -18,6 +18,7 @@ + #include "string-util.h" + #include "strv.h" + #include "utf8.h" ++#include "missing_stdlib.h" + + /* We follow bash for the character set. Different shells have different rules. */ + #define VALID_BASH_ENV_NAME_CHARS \ +--- a/src/basic/log.c ++++ b/src/basic/log.c +@@ -36,6 +36,7 @@ + #include "terminal-util.h" + #include "time-util.h" + #include "utf8.h" ++#include "missing_stdlib.h" + + #define SNDBUF_SIZE (8*1024*1024) + +--- a/src/basic/missing_stdlib.h ++++ b/src/basic/missing_stdlib.h +@@ -11,3 +11,15 @@ + # error "neither secure_getenv nor __secure_getenv are available" + # endif + #endif ++ ++/* string.h */ ++#if ! HAVE_STRNDUPA ++#define strndupa(s, n) \ ++ ({ \ ++ const char *__old = (s); \ ++ size_t __len = strnlen(__old, (n)); \ ++ char *__new = (char *)alloca(__len + 1); \ ++ __new[__len] = '\0'; \ ++ (char *)memcpy(__new, __old, __len); \ ++ }) ++#endif +--- a/src/basic/mkdir.c ++++ b/src/basic/mkdir.c +@@ -14,6 +14,7 @@ + #include "stat-util.h" + #include "stdio-util.h" + #include "user-util.h" ++#include "missing_stdlib.h" + + int mkdir_safe_internal( + const char *path, +--- a/src/basic/mountpoint-util.c ++++ b/src/basic/mountpoint-util.c +@@ -12,6 +12,7 @@ + #include "missing_stat.h" + #include "missing_syscall.h" + #include "mkdir.h" ++#include "missing_stdlib.h" + #include "mountpoint-util.h" + #include "parse-util.h" + #include "path-util.h" +--- a/src/basic/parse-util.c ++++ b/src/basic/parse-util.c +@@ -19,6 +19,7 @@ + #include "stat-util.h" + #include "string-util.h" + #include "strv.h" ++#include "missing_stdlib.h" + + int parse_boolean(const char *v) { + if (!v) +--- a/src/basic/path-lookup.c ++++ b/src/basic/path-lookup.c +@@ -15,6 +15,7 @@ + #include "strv.h" + #include "tmpfile-util.h" + #include "user-util.h" ++#include "missing_stdlib.h" + + int xdg_user_runtime_dir(char **ret, const char *suffix) { + const char *e; +--- a/src/basic/proc-cmdline.c ++++ b/src/basic/proc-cmdline.c +@@ -15,6 +15,7 @@ + #include "string-util.h" + #include "util.h" + #include "virt.h" ++#include "missing_stdlib.h" + + int proc_cmdline(char **ret) { + const char *e; +--- a/src/basic/procfs-util.c ++++ b/src/basic/procfs-util.c +@@ -11,6 +11,7 @@ + #include "procfs-util.h" + #include "stdio-util.h" + #include "string-util.h" ++#include "missing_stdlib.h" + + int procfs_tasks_get_limit(uint64_t *ret) { + _cleanup_free_ char *value = NULL; +--- a/src/basic/selinux-util.c ++++ b/src/basic/selinux-util.c +@@ -27,6 +27,7 @@ + #include "selinux-util.h" + #include "stdio-util.h" + #include "time-util.h" ++#include "missing_stdlib.h" + + #if HAVE_SELINUX + DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(context_t, context_free, NULL); +--- a/src/basic/time-util.c ++++ b/src/basic/time-util.c +@@ -27,6 +27,7 @@ + #include "string-util.h" + #include "strv.h" + #include "time-util.h" ++#include "missing_stdlib.h" + + static clockid_t map_clock_id(clockid_t c) { + +--- a/src/boot/bless-boot.c ++++ b/src/boot/bless-boot.c +@@ -18,6 +18,7 @@ + #include "util.h" + #include "verbs.h" + #include "virt.h" ++#include "missing_stdlib.h" + + static char **arg_path = NULL; + +--- a/src/core/dbus-cgroup.c ++++ b/src/core/dbus-cgroup.c +@@ -17,6 +17,7 @@ + #include "limits-util.h" + #include "path-util.h" + #include "percent-util.h" ++#include "missing_stdlib.h" + + BUS_DEFINE_PROPERTY_GET(bus_property_get_tasks_max, "t", TasksMax, tasks_max_resolve); + +--- a/src/core/dbus-execute.c ++++ b/src/core/dbus-execute.c +@@ -41,6 +41,7 @@ + #include "unit-printf.h" + #include "user-util.h" + #include "utf8.h" ++#include "missing_stdlib.h" + + BUS_DEFINE_PROPERTY_GET_ENUM(bus_property_get_exec_output, exec_output, ExecOutput); + static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_exec_input, exec_input, ExecInput); +--- a/src/core/dbus-util.c ++++ b/src/core/dbus-util.c +@@ -9,6 +9,7 @@ + #include "unit-printf.h" + #include "user-util.h" + #include "unit.h" ++#include "missing_stdlib.h" + + int bus_property_get_triggered_unit( + sd_bus *bus, +--- a/src/core/execute.c ++++ b/src/core/execute.c +@@ -96,6 +96,7 @@ + #include "unit-serialize.h" + #include "user-util.h" + #include "utmp-wtmp.h" ++#include "missing_stdlib.h" + + #define IDLE_TIMEOUT_USEC (5*USEC_PER_SEC) + #define IDLE_TIMEOUT2_USEC (1*USEC_PER_SEC) +--- a/src/core/kmod-setup.c ++++ b/src/core/kmod-setup.c +@@ -11,6 +11,7 @@ + #include "macro.h" + #include "string-util.h" + #include "missing_type.h" ++#include "missing_stdlib.h" + + #if HAVE_KMOD + #include "module-util.h" +--- a/src/core/service.c ++++ b/src/core/service.c +@@ -41,6 +41,7 @@ + #include "unit.h" + #include "utf8.h" + #include "util.h" ++#include "missing_stdlib.h" + + static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = { + [SERVICE_DEAD] = UNIT_INACTIVE, +--- a/src/coredump/coredump-vacuum.c ++++ b/src/coredump/coredump-vacuum.c +@@ -16,6 +16,7 @@ + #include "string-util.h" + #include "time-util.h" + #include "user-util.h" ++#include "missing_stdlib.h" + + #define DEFAULT_MAX_USE_LOWER (uint64_t) (1ULL*1024ULL*1024ULL) /* 1 MiB */ + #define DEFAULT_MAX_USE_UPPER (uint64_t) (4ULL*1024ULL*1024ULL*1024ULL) /* 4 GiB */ +--- a/src/journal-remote/journal-remote-main.c ++++ b/src/journal-remote/journal-remote-main.c +@@ -24,6 +24,7 @@ + #include "stat-util.h" + #include "string-table.h" + #include "strv.h" ++#include "missing_stdlib.h" + + #define PRIV_KEY_FILE CERTIFICATE_ROOT "/private/journal-remote.pem" + #define CERT_FILE CERTIFICATE_ROOT "/certs/journal-remote.pem" +--- a/src/journal/journalctl.c ++++ b/src/journal/journalctl.c +@@ -72,6 +72,7 @@ + #include "unit-name.h" + #include "user-util.h" + #include "varlink.h" ++#include "missing_stdlib.h" + + #define DEFAULT_FSS_INTERVAL_USEC (15*USEC_PER_MINUTE) + #define PROCESS_INOTIFY_INTERVAL 1024 /* Every 1,024 messages processed */ +--- a/src/libsystemd/sd-bus/bus-message.c ++++ b/src/libsystemd/sd-bus/bus-message.c +@@ -20,6 +20,7 @@ + #include "strv.h" + #include "time-util.h" + #include "utf8.h" ++#include "missing_stdlib.h" + + static int message_append_basic(sd_bus_message *m, char type, const void *p, const void **stored); + +--- a/src/libsystemd/sd-bus/bus-objects.c ++++ b/src/libsystemd/sd-bus/bus-objects.c +@@ -12,6 +12,7 @@ + #include "set.h" + #include "string-util.h" + #include "strv.h" ++#include "missing_stdlib.h" + + static int node_vtable_get_userdata( + sd_bus *bus, +--- a/src/libsystemd/sd-bus/bus-socket.c ++++ b/src/libsystemd/sd-bus/bus-socket.c +@@ -28,6 +28,7 @@ + #include "string-util.h" + #include "user-util.h" + #include "utf8.h" ++#include "missing_stdlib.h" + + #define SNDBUF_SIZE (8*1024*1024) + +--- a/src/libsystemd/sd-bus/sd-bus.c ++++ b/src/libsystemd/sd-bus/sd-bus.c +@@ -41,6 +41,7 @@ + #include "string-util.h" + #include "strv.h" + #include "user-util.h" ++#include "missing_stdlib.h" + + #define log_debug_bus_message(m) \ + do { \ +--- a/src/libsystemd/sd-bus/test-bus-benchmark.c ++++ b/src/libsystemd/sd-bus/test-bus-benchmark.c +@@ -14,6 +14,7 @@ + #include "string-util.h" + #include "time-util.h" + #include "util.h" ++#include "missing_stdlib.h" + + #define MAX_SIZE (2*1024*1024) + +--- a/src/libsystemd/sd-journal/sd-journal.c ++++ b/src/libsystemd/sd-journal/sd-journal.c +@@ -40,6 +40,7 @@ + #include "string-util.h" + #include "strv.h" + #include "syslog-util.h" ++#include "missing_stdlib.h" + + #define JOURNAL_FILES_MAX 7168 + +--- a/src/locale/keymap-util.c ++++ b/src/locale/keymap-util.c +@@ -24,6 +24,7 @@ + #include "string-util.h" + #include "strv.h" + #include "tmpfile-util.h" ++#include "missing_stdlib.h" + + static bool startswith_comma(const char *s, const char *prefix) { + s = startswith(s, prefix); +--- a/src/login/pam_systemd.c ++++ b/src/login/pam_systemd.c +@@ -31,6 +31,7 @@ + #include "locale-util.h" + #include "login-util.h" + #include "macro.h" ++#include "missing_stdlib.h" + #include "pam-util.h" + #include "parse-util.h" + #include "path-util.h" +--- a/src/network/generator/network-generator.c ++++ b/src/network/generator/network-generator.c +@@ -13,6 +13,7 @@ + #include "string-table.h" + #include "string-util.h" + #include "strv.h" ++#include "missing_stdlib.h" + + /* + # .network +--- a/src/nspawn/nspawn-settings.c ++++ b/src/nspawn/nspawn-settings.c +@@ -16,6 +16,7 @@ + #include "strv.h" + #include "user-util.h" + #include "util.h" ++#include "missing_stdlib.h" + + Settings *settings_new(void) { + Settings *s; +--- a/src/nss-mymachines/nss-mymachines.c ++++ b/src/nss-mymachines/nss-mymachines.c +@@ -21,6 +21,7 @@ + #include "nss-util.h" + #include "signal-util.h" + #include "string-util.h" ++#include "missing_stdlib.h" + + static void setup_logging(void) { + /* We need a dummy function because log_parse_environment is a macro. */ +--- a/src/portable/portable.c ++++ b/src/portable/portable.c +@@ -32,6 +32,7 @@ + #include "strv.h" + #include "tmpfile-util.h" + #include "user-util.h" ++#include "missing_stdlib.h" + + static const char profile_dirs[] = CONF_PATHS_NULSTR("systemd/portable/profile"); + +--- a/src/resolve/resolvectl.c ++++ b/src/resolve/resolvectl.c +@@ -41,6 +41,7 @@ + #include "terminal-util.h" + #include "utf8.h" + #include "verbs.h" ++#include "missing_stdlib.h" + + static int arg_family = AF_UNSPEC; + static int arg_ifindex = 0; +--- a/src/shared/bus-get-properties.c ++++ b/src/shared/bus-get-properties.c +@@ -4,6 +4,7 @@ + #include "rlimit-util.h" + #include "stdio-util.h" + #include "string-util.h" ++#include "missing_stdlib.h" + + int bus_property_get_bool( + sd_bus *bus, +--- a/src/shared/bus-unit-procs.c ++++ b/src/shared/bus-unit-procs.c +@@ -10,6 +10,7 @@ + #include "sort-util.h" + #include "string-util.h" + #include "terminal-util.h" ++#include "missing_stdlib.h" + + struct CGroupInfo { + char *cgroup_path; +--- a/src/shared/bus-unit-util.c ++++ b/src/shared/bus-unit-util.c +@@ -45,6 +45,7 @@ + #include "unit-def.h" + #include "user-util.h" + #include "utf8.h" ++#include "missing_stdlib.h" + + int bus_parse_unit_info(sd_bus_message *message, UnitInfo *u) { + assert(message); +--- a/src/shared/bus-util.c ++++ b/src/shared/bus-util.c +@@ -21,6 +21,7 @@ + #include "path-util.h" + #include "socket-util.h" + #include "stdio-util.h" ++#include "missing_stdlib.h" + + static int name_owner_change_callback(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) { + sd_event *e = userdata; +--- a/src/shared/dns-domain.c ++++ b/src/shared/dns-domain.c +@@ -17,6 +17,7 @@ + #include "string-util.h" + #include "strv.h" + #include "utf8.h" ++#include "missing_stdlib.h" + + int dns_label_unescape(const char **name, char *dest, size_t sz, DNSLabelFlags flags) { + const char *n; +--- a/src/shared/journal-importer.c ++++ b/src/shared/journal-importer.c +@@ -14,6 +14,7 @@ + #include "parse-util.h" + #include "string-util.h" + #include "unaligned.h" ++#include "missing_stdlib.h" + + enum { + IMPORTER_STATE_LINE = 0, /* waiting to read, or reading line */ +--- a/src/shared/logs-show.c ++++ b/src/shared/logs-show.c +@@ -41,6 +41,7 @@ + #include "utf8.h" + #include "util.h" + #include "web-util.h" ++#include "missing_stdlib.h" + + /* up to three lines (each up to 100 characters) or 300 characters, whichever is less */ + #define PRINT_LINE_THRESHOLD 3 +--- a/src/shared/pager.c ++++ b/src/shared/pager.c +@@ -26,6 +26,7 @@ + #include "strv.h" + #include "terminal-util.h" + #include "util.h" ++#include "missing_stdlib.h" + + static pid_t pager_pid = 0; + +--- a/src/shared/uid-range.c ++++ b/src/shared/uid-range.c +@@ -9,6 +9,7 @@ + #include "sort-util.h" + #include "uid-range.h" + #include "user-util.h" ++#include "missing_stdlib.h" + + static bool uid_range_intersect(UidRange *range, uid_t start, uid_t nr) { + assert(range); +--- a/src/socket-proxy/socket-proxyd.c ++++ b/src/socket-proxy/socket-proxyd.c +@@ -26,6 +26,7 @@ + #include "socket-util.h" + #include "string-util.h" + #include "util.h" ++#include "missing_stdlib.h" + + #define BUFFER_SIZE (256 * 1024) + +--- a/src/test/test-hexdecoct.c ++++ b/src/test/test-hexdecoct.c +@@ -6,6 +6,7 @@ + #include "hexdecoct.h" + #include "macro.h" + #include "string-util.h" ++#include "missing_stdlib.h" + + static void test_hexchar(void) { + assert_se(hexchar(0xa) == 'a'); +--- a/src/udev/udev-builtin-path_id.c ++++ b/src/udev/udev-builtin-path_id.c +@@ -22,6 +22,7 @@ + #include "sysexits.h" + #include "udev-builtin.h" + #include "udev-util.h" ++#include "missing_stdlib.h" + + _printf_(2,3) + static void path_prepend(char **path, const char *fmt, ...) { +--- a/src/udev/udev-event.c ++++ b/src/udev/udev-event.c +@@ -33,6 +33,7 @@ + #include "udev-util.h" + #include "udev-watch.h" + #include "user-util.h" ++#include "missing_stdlib.h" + + typedef struct Spawn { + sd_device *device; +--- a/src/udev/udev-rules.c ++++ b/src/udev/udev-rules.c +@@ -31,6 +31,7 @@ + #include "udev-rules.h" + #include "user-util.h" + #include "virt.h" ++#include "missing_stdlib.h" + + #define RULES_DIRS (const char* const*) CONF_PATHS_STRV("udev/rules.d") + +--- a/src/basic/percent-util.c ++++ b/src/basic/percent-util.c +@@ -3,6 +3,7 @@ + #include "percent-util.h" + #include "string-util.h" + #include "parse-util.h" ++#include "missing_stdlib.h" + + static int parse_parts_value_whole(const char *p, const char *symbol) { + const char *pc, *n; diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0006-Include-netinet-if_ether.h.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0006-Include-netinet-if_ether.h.patch new file mode 100644 index 000000000..54d714266 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0006-Include-netinet-if_ether.h.patch @@ -0,0 +1,326 @@ +From 2069f0b0d5ab8f869aeba635a347e0b11d362b30 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Thu, 26 Oct 2017 22:10:42 -0700 +Subject: [PATCH] Include netinet/if_ether.h + +Fixes +/path/to/systemd/recipe-sysroot/usr/include/netinet/if_ether.h:101:8: error: redefinition of 'struct ethhdr' + struct ethhdr { + ^~~~~~ + +and related arphdr, arpreq, and arpreq_old errors +/path/to/systemd/recipe-sysroot/usr/include/net/if_arp.h:22:8: error: redefinition of 'struct arphdr' + struct arphdr { + ^~~~~~ + +The latter requires removing some includes of net/if_arp.h to avoid +conflicting with netinet/if_ether.h. + +Upstream-Status: Inappropriate [musl specific] + +Signed-off-by: Khem Raj +Signed-off-by: Chen Qi +[rebased for systemd 243] +Signed-off-by: Scott Murray + +Upstream-Status: Inappropriate [musl specific] + +Signed-off-by: Khem Raj +Signed-off-by: Chen Qi +[rebased for systemd 243] +Signed-off-by: Scott Murray +[rebased for systemd 247] +Signed-off-by: Luca Boccassi + +--- + src/libsystemd-network/sd-dhcp6-client.c | 1 - + src/libsystemd/sd-netlink/netlink-types.c | 1 + + src/machine/machine-dbus.c | 1 + + src/network/netdev/bond.c | 1 + + src/network/netdev/bridge.c | 1 + + src/network/netdev/macsec.c | 1 + + src/network/netdev/netdev-gperf.gperf | 1 + + src/network/netdev/netdev.c | 1 + + src/network/networkd-brvlan.c | 1 + + src/network/networkd-dhcp-common.c | 4 +++- + src/network/networkd-dhcp-server.c | 4 ++-- + src/network/networkd-dhcp4.c | 2 +- + src/network/networkd-dhcp6.c | 2 +- + src/network/networkd-link.c | 2 +- + src/network/networkd-network.c | 1 + + src/network/networkd-route.c | 5 ++++- + src/network/test-network-tables.c | 1 + + src/shared/ethtool-util.c | 1 + + src/shared/ethtool-util.h | 1 + + src/udev/net/link-config.c | 1 + + src/udev/udev-builtin-net_setup_link.c | 1 + + 21 files changed, 26 insertions(+), 8 deletions(-) + +diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c +index 410bfda10e..e70ed8be92 100644 +--- a/src/libsystemd-network/sd-dhcp6-client.c ++++ b/src/libsystemd-network/sd-dhcp6-client.c +@@ -5,7 +5,6 @@ + + #include + #include +-#include + #include + + #include "sd-dhcp6-client.h" +diff --git a/src/libsystemd/sd-netlink/netlink-types.c b/src/libsystemd/sd-netlink/netlink-types.c +index ed7b9a8cd1..112c0b09e4 100644 +--- a/src/libsystemd/sd-netlink/netlink-types.c ++++ b/src/libsystemd/sd-netlink/netlink-types.c +@@ -3,6 +3,7 @@ + #include + #include + #include ++#include + #include + #include + #include +diff --git a/src/machine/machine-dbus.c b/src/machine/machine-dbus.c +index e7c4ed3c7c..3a1e4f9072 100644 +--- a/src/machine/machine-dbus.c ++++ b/src/machine/machine-dbus.c +@@ -3,6 +3,7 @@ + #include + #include + #include ++#include + + /* When we include libgen.h because we need dirname() we immediately + * undefine basename() since libgen.h defines it as a macro to the POSIX +diff --git a/src/network/netdev/bond.c b/src/network/netdev/bond.c +index cf7ca88d6f..34ab468191 100644 +--- a/src/network/netdev/bond.c ++++ b/src/network/netdev/bond.c +@@ -1,5 +1,6 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + ++#include + #include "alloc-util.h" + #include "bond.h" + #include "bond-util.h" +diff --git a/src/network/netdev/bridge.c b/src/network/netdev/bridge.c +index 38432f1578..79ccfe578e 100644 +--- a/src/network/netdev/bridge.c ++++ b/src/network/netdev/bridge.c +@@ -1,5 +1,6 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + ++#include + #include + + #include "bridge.h" +diff --git a/src/network/netdev/macsec.c b/src/network/netdev/macsec.c +index 77c5f8c4e7..04be1b4ab2 100644 +--- a/src/network/netdev/macsec.c ++++ b/src/network/netdev/macsec.c +@@ -1,5 +1,6 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + ++#include + #include + #include + #include +diff --git a/src/network/netdev/netdev-gperf.gperf b/src/network/netdev/netdev-gperf.gperf +index 8abe044890..3c54c58928 100644 +--- a/src/network/netdev/netdev-gperf.gperf ++++ b/src/network/netdev/netdev-gperf.gperf +@@ -3,6 +3,7 @@ + #if __GNUC__ >= 7 + _Pragma("GCC diagnostic ignored \"-Wimplicit-fallthrough\"") + #endif ++#include + #include + #include "bareudp.h" + #include "batadv.h" +diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c +index b31f0fa81a..c80e1ff537 100644 +--- a/src/network/netdev/netdev.c ++++ b/src/network/netdev/netdev.c +@@ -1,5 +1,6 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + ++#include + #include + #include + #include +diff --git a/src/network/networkd-brvlan.c b/src/network/networkd-brvlan.c +index 2847b336c9..4d6af8c642 100644 +--- a/src/network/networkd-brvlan.c ++++ b/src/network/networkd-brvlan.c +@@ -4,6 +4,7 @@ + ***/ + + #include ++#include + #include + #include + +diff --git a/src/network/networkd-dhcp-common.c b/src/network/networkd-dhcp-common.c +index 00d055cf8d..65821c1d31 100644 +--- a/src/network/networkd-dhcp-common.c ++++ b/src/network/networkd-dhcp-common.c +@@ -1,7 +1,8 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + + #include +-#include ++#include ++#include + + #include "bus-error.h" + #include "dhcp-internal.h" +@@ -11,6 +12,7 @@ + #include "networkd-dhcp-common.h" + #include "networkd-link.h" + #include "networkd-manager.h" ++#include + #include "networkd-network.h" + #include "parse-util.h" + #include "socket-util.h" +diff --git a/src/network/networkd-dhcp-server.c b/src/network/networkd-dhcp-server.c +index 5cdf432c27..93cffb9863 100644 +--- a/src/network/networkd-dhcp-server.c ++++ b/src/network/networkd-dhcp-server.c +@@ -1,8 +1,8 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + + #include +-#include +-#include ++#include ++#include + + #include "sd-dhcp-server.h" + +diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c +index 23dc3a45db..7ae6c2467a 100644 +--- a/src/network/networkd-dhcp4.c ++++ b/src/network/networkd-dhcp4.c +@@ -1,9 +1,9 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + ++#include + #include + #include + #include +-#include + + #include "escape.h" + #include "alloc-util.h" +diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c +index aa077d6219..4f6ce22059 100644 +--- a/src/network/networkd-dhcp6.c ++++ b/src/network/networkd-dhcp6.c +@@ -3,9 +3,9 @@ + Copyright © 2014 Intel Corporation. All rights reserved. + ***/ + ++#include + #include + #include +-#include + + #include "sd-dhcp6-client.h" + +diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c +index 8219d95b0d..c92230453b 100644 +--- a/src/network/networkd-link.c ++++ b/src/network/networkd-link.c +@@ -1,8 +1,8 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + ++#include + #include + #include +-#include + #include + #include + +diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c +index e5ffd35b6f..871ebb32c6 100644 +--- a/src/network/networkd-network.c ++++ b/src/network/networkd-network.c +@@ -1,5 +1,6 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + ++#include + #include + #include + #include +diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c +index a74541a6c9..a10549b336 100644 +--- a/src/network/networkd-route.c ++++ b/src/network/networkd-route.c +@@ -1,7 +1,10 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + + #include +-#include ++/* linux/ipv6_route.h conflicts with netinet/in.h so define manually */ ++#ifndef IP6_RT_PRIO_USER ++#define IP6_RT_PRIO_USER 1024 ++#endif + + #include "alloc-util.h" + #include "netlink-util.h" +diff --git a/src/network/test-network-tables.c b/src/network/test-network-tables.c +index ce34449554..0b5dc01182 100644 +--- a/src/network/test-network-tables.c ++++ b/src/network/test-network-tables.c +@@ -1,5 +1,6 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + ++#include + #include "bond.h" + #include "dhcp6-internal.h" + #include "dhcp6-protocol.h" +diff --git a/src/shared/ethtool-util.c b/src/shared/ethtool-util.c +index 654d36a83a..f4ed42d543 100644 +--- a/src/shared/ethtool-util.c ++++ b/src/shared/ethtool-util.c +@@ -1,5 +1,6 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + ++#include + #include + #include + #include +diff --git a/src/shared/ethtool-util.h b/src/shared/ethtool-util.h +index 11e2906681..a171df0737 100644 +--- a/src/shared/ethtool-util.h ++++ b/src/shared/ethtool-util.h +@@ -3,6 +3,7 @@ + + #include + #include ++#include + #include + + #include "conf-parser.h" +diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c +index 31e5d0cd67..f25f821364 100644 +--- a/src/udev/net/link-config.c ++++ b/src/udev/net/link-config.c +@@ -1,5 +1,6 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + ++#include + #include + #include + #include +diff --git a/src/udev/udev-builtin-net_setup_link.c b/src/udev/udev-builtin-net_setup_link.c +index 87e1fb133e..13876029d0 100644 +--- a/src/udev/udev-builtin-net_setup_link.c ++++ b/src/udev/udev-builtin-net_setup_link.c +@@ -1,5 +1,6 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + ++#include + #include "alloc-util.h" + #include "device-util.h" + #include "errno-util.h" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0007-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0007-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch new file mode 100644 index 000000000..2ff08c7fa --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0007-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch @@ -0,0 +1,153 @@ +From bca73ff2fbff2dc311040a87a4f536f89af07ad6 Mon Sep 17 00:00:00 2001 +From: Chen Qi +Date: Mon, 25 Feb 2019 14:56:21 +0800 +Subject: [PATCH] don't fail if GLOB_BRACE and GLOB_ALTDIRFUNC is not defined + +If the standard library doesn't provide brace +expansion users just won't get it. + +Dont use GNU GLOB extentions on non-glibc systems + +Conditionalize use of GLOB_ALTDIRFUNC + +Upstream-Status: Inappropriate [musl specific] + +Signed-off-by: Khem Raj +Signed-off-by: Chen Qi +[rebased for systemd 243] +Signed-off-by: Scott Murray + +--- + src/basic/glob-util.c | 12 ++++++++++++ + src/test/test-glob-util.c | 16 ++++++++++++++++ + src/tmpfiles/tmpfiles.c | 10 ++++++++++ + 3 files changed, 38 insertions(+) + +diff --git a/src/basic/glob-util.c b/src/basic/glob-util.c +index bc0278e57f..c973f82e54 100644 +--- a/src/basic/glob-util.c ++++ b/src/basic/glob-util.c +@@ -12,6 +12,12 @@ + #include "path-util.h" + #include "strv.h" + ++/* Don't fail if the standard library ++ * doesn't provide brace expansion */ ++#ifndef GLOB_BRACE ++#define GLOB_BRACE 0 ++#endif ++ + static void closedir_wrapper(void* v) { + (void) closedir(v); + } +@@ -19,6 +25,7 @@ static void closedir_wrapper(void* v) { + int safe_glob(const char *path, int flags, glob_t *pglob) { + int k; + ++#ifdef GLOB_ALTDIRFUNC + /* We want to set GLOB_ALTDIRFUNC ourselves, don't allow it to be set. */ + assert(!(flags & GLOB_ALTDIRFUNC)); + +@@ -32,9 +39,14 @@ int safe_glob(const char *path, int flags, glob_t *pglob) { + pglob->gl_lstat = lstat; + if (!pglob->gl_stat) + pglob->gl_stat = stat; ++#endif + + errno = 0; ++#ifdef GLOB_ALTDIRFUNC + k = glob(path, flags | GLOB_ALTDIRFUNC, NULL, pglob); ++#else ++ k = glob(path, flags, NULL, pglob); ++#endif + if (k == GLOB_NOMATCH) + return -ENOENT; + if (k == GLOB_NOSPACE) +diff --git a/src/test/test-glob-util.c b/src/test/test-glob-util.c +index df6444c433..79a692046e 100644 +--- a/src/test/test-glob-util.c ++++ b/src/test/test-glob-util.c +@@ -12,6 +12,12 @@ + #include "rm-rf.h" + #include "tmpfile-util.h" + ++/* Don't fail if the standard library ++ * doesn't provide brace expansion */ ++#ifndef GLOB_BRACE ++#define GLOB_BRACE 0 ++#endif ++ + static void test_glob_exists(void) { + char name[] = "/tmp/test-glob_exists.XXXXXX"; + int fd = -1; +@@ -39,11 +45,13 @@ static void test_glob_no_dot(void) { + const char *fn; + + _cleanup_globfree_ glob_t g = { ++#ifdef GLOB_ALTDIRFUNC + .gl_closedir = closedir_wrapper, + .gl_readdir = (struct dirent *(*)(void *)) readdir_no_dot, + .gl_opendir = (void *(*)(const char *)) opendir, + .gl_lstat = lstat, + .gl_stat = stat, ++#endif + }; + + int r; +@@ -51,11 +59,19 @@ static void test_glob_no_dot(void) { + assert_se(mkdtemp(template)); + + fn = strjoina(template, "/*"); ++#ifdef GLOB_ALTDIRFUNC + r = glob(fn, GLOB_NOSORT|GLOB_BRACE|GLOB_ALTDIRFUNC, NULL, &g); ++#else ++ r = glob(fn, GLOB_NOSORT|GLOB_BRACE, NULL, &g); ++#endif + assert_se(r == GLOB_NOMATCH); + + fn = strjoina(template, "/.*"); ++#ifdef GLOB_ALTDIRFUNC + r = glob(fn, GLOB_NOSORT|GLOB_BRACE|GLOB_ALTDIRFUNC, NULL, &g); ++#else ++ r = glob(fn, GLOB_NOSORT|GLOB_BRACE, NULL, &g); ++#endif + assert_se(r == GLOB_NOMATCH); + + (void) rm_rf(template, REMOVE_ROOT|REMOVE_PHYSICAL); +diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c +index 6b73d1e6d5..26b3b74275 100644 +--- a/src/tmpfiles/tmpfiles.c ++++ b/src/tmpfiles/tmpfiles.c +@@ -66,6 +66,12 @@ + #include "umask-util.h" + #include "user-util.h" + ++/* Don't fail if the standard library ++ * doesn't provide brace expansion */ ++#ifndef GLOB_BRACE ++#define GLOB_BRACE 0 ++#endif ++ + /* This reads all files listed in /etc/tmpfiles.d/?*.conf and creates + * them in the file system. This is intended to be used to create + * properly owned directories beneath /tmp, /var/tmp, /run, which are +@@ -1947,7 +1953,9 @@ finish: + + static int glob_item(Item *i, action_t action) { + _cleanup_globfree_ glob_t g = { ++#ifdef GLOB_ALTDIRFUNC + .gl_opendir = (void *(*)(const char *)) opendir_nomod, ++#endif + }; + int r = 0, k; + char **fn; +@@ -1967,7 +1975,9 @@ static int glob_item(Item *i, action_t action) { + + static int glob_item_recursively(Item *i, fdaction_t action) { + _cleanup_globfree_ glob_t g = { ++#ifdef GLOB_ALTDIRFUNC + .gl_opendir = (void *(*)(const char *)) opendir_nomod, ++#endif + }; + int r = 0, k; + char **fn; diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0008-add-missing-FTW_-macros-for-musl.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0008-add-missing-FTW_-macros-for-musl.patch new file mode 100644 index 000000000..142ca0134 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0008-add-missing-FTW_-macros-for-musl.patch @@ -0,0 +1,45 @@ +From e0d1912f0246c97e5e7b4177691363d2d077e11d Mon Sep 17 00:00:00 2001 +From: Chen Qi +Date: Mon, 25 Feb 2019 15:00:06 +0800 +Subject: [PATCH] add missing FTW_ macros for musl + +This is to avoid build failures like below for musl. + + locale-util.c:296:24: error: 'FTW_STOP' undeclared + +Upstream-Status: Inappropriate [musl specific] + +Signed-off-by: Chen Qi + +--- + src/basic/missing_type.h | 20 ++++++++++++++++++++ + 1 file changed, 20 insertions(+) + +diff --git a/src/basic/missing_type.h b/src/basic/missing_type.h +index aeaf6ad5ec..3df1084ef2 100644 +--- a/src/basic/missing_type.h ++++ b/src/basic/missing_type.h +@@ -19,3 +19,23 @@ typedef int (*comparison_fn_t)(const void *, const void *); + #define __COMPAR_FN_T + typedef int (*__compar_fn_t)(const void *, const void *); + #endif ++ ++#ifndef FTW_ACTIONRETVAL ++#define FTW_ACTIONRETVAL 16 ++#endif ++ ++#ifndef FTW_CONTINUE ++#define FTW_CONTINUE 0 ++#endif ++ ++#ifndef FTW_STOP ++#define FTW_STOP 1 ++#endif ++ ++#ifndef FTW_SKIP_SUBTREE ++#define FTW_SKIP_SUBTREE 2 ++#endif ++ ++#ifndef FTW_SKIP_SIBLINGS ++#define FTW_SKIP_SIBLINGS 3 ++#endif diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0009-fix-missing-of-__register_atfork-for-non-glibc-build.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0009-fix-missing-of-__register_atfork-for-non-glibc-build.patch new file mode 100644 index 000000000..53f0a1ba6 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0009-fix-missing-of-__register_atfork-for-non-glibc-build.patch @@ -0,0 +1,43 @@ +From bb41fe773881a8f1d9615d388320b9c6fc47bfe5 Mon Sep 17 00:00:00 2001 +From: Chen Qi +Date: Mon, 25 Feb 2019 15:03:47 +0800 +Subject: [PATCH] fix missing of __register_atfork for non-glibc builds + +Upstream-Status: Inappropriate [musl specific] + +Signed-off-by: Chen Qi + +--- + src/basic/process-util.c | 7 +++++++ + 1 file changed, 7 insertions(+) + +diff --git a/src/basic/process-util.c b/src/basic/process-util.c +index 7d4301eadb..caa9dfe3a3 100644 +--- a/src/basic/process-util.c ++++ b/src/basic/process-util.c +@@ -18,6 +18,9 @@ + #if HAVE_VALGRIND_VALGRIND_H + #include + #endif ++#ifndef __GLIBC__ ++#include ++#endif + + #include "alloc-util.h" + #include "architecture.h" +@@ -1121,11 +1124,15 @@ void reset_cached_pid(void) { + cached_pid = CACHED_PID_UNSET; + } + ++#ifdef __GLIBC__ + /* We use glibc __register_atfork() + __dso_handle directly here, as they are not included in the glibc + * headers. __register_atfork() is mostly equivalent to pthread_atfork(), but doesn't require us to link against + * libpthread, as it is part of glibc anyway. */ + extern int __register_atfork(void (*prepare) (void), void (*parent) (void), void (*child) (void), void *dso_handle); + extern void* __dso_handle _weak_; ++#else ++#define __register_atfork(prepare,parent,child,dso) pthread_atfork(prepare,parent,child) ++#endif + + pid_t getpid_cached(void) { + static bool installed = false; diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0010-Use-uintmax_t-for-handling-rlim_t.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0010-Use-uintmax_t-for-handling-rlim_t.patch new file mode 100644 index 000000000..940db4c5c --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0010-Use-uintmax_t-for-handling-rlim_t.patch @@ -0,0 +1,104 @@ +From dc40487e0ac26e3ca317429b9c3e8f01772de60a Mon Sep 17 00:00:00 2001 +From: Chen Qi +Date: Mon, 25 Feb 2019 15:12:41 +0800 +Subject: [PATCH] Use uintmax_t for handling rlim_t + +PRIu{32,64} is not right format to represent rlim_t type +therefore use %ju and typecast the rlim_t variables to +uintmax_t. + +Fixes portablility errors like + +execute.c:3446:36: error: format '%lu' expects argument of type 'long unsigned int', but argument 5 has type 'rlim_t {aka long long unsigned int}' [-Werror=format=] +| fprintf(f, "%s%s: " RLIM_FMT "\n", +| ^~~~~~~~ +| prefix, rlimit_to_string(i), c->rlimit[i]->rlim_max); +| ~~~~~~~~~~~~~~~~~~~~~~ + +Upstream-Status: Denied [https://github.com/systemd/systemd/pull/7199] + +Signed-off-by: Khem Raj +[Rebased for v241] +Signed-off-by: Chen Qi + +--- + src/basic/format-util.h | 8 +------- + src/basic/rlimit-util.c | 10 +++++----- + src/core/execute.c | 4 ++-- + 3 files changed, 8 insertions(+), 14 deletions(-) + +diff --git a/src/basic/format-util.h b/src/basic/format-util.h +index b7e18768e3..3195ab205d 100644 +--- a/src/basic/format-util.h ++++ b/src/basic/format-util.h +@@ -32,13 +32,7 @@ assert_cc(sizeof(gid_t) == sizeof(uint32_t)); + # define PRI_TIMEX "li" + #endif + +-#if SIZEOF_RLIM_T == 8 +-# define RLIM_FMT "%" PRIu64 +-#elif SIZEOF_RLIM_T == 4 +-# define RLIM_FMT "%" PRIu32 +-#else +-# error Unknown rlim_t size +-#endif ++#define RLIM_FMT "%ju" + + #if SIZEOF_DEV_T == 8 + # define DEV_FMT "%" PRIu64 +diff --git a/src/basic/rlimit-util.c b/src/basic/rlimit-util.c +index 23d108d5df..b037734ee3 100644 +--- a/src/basic/rlimit-util.c ++++ b/src/basic/rlimit-util.c +@@ -43,7 +43,7 @@ int setrlimit_closest(int resource, const struct rlimit *rlim) { + fixed.rlim_max == highest.rlim_max) + return 0; + +- log_debug("Failed at setting rlimit " RLIM_FMT " for resource RLIMIT_%s. Will attempt setting value " RLIM_FMT " instead.", rlim->rlim_max, rlimit_to_string(resource), fixed.rlim_max); ++ log_debug("Failed at setting rlimit " RLIM_FMT " for resource RLIMIT_%s. Will attempt setting value " RLIM_FMT " instead.", (uintmax_t)rlim->rlim_max, rlimit_to_string(resource), (uintmax_t)fixed.rlim_max); + + if (setrlimit(resource, &fixed) < 0) + return -errno; +@@ -308,13 +308,13 @@ int rlimit_format(const struct rlimit *rl, char **ret) { + if (rl->rlim_cur >= RLIM_INFINITY && rl->rlim_max >= RLIM_INFINITY) + s = strdup("infinity"); + else if (rl->rlim_cur >= RLIM_INFINITY) +- (void) asprintf(&s, "infinity:" RLIM_FMT, rl->rlim_max); ++ (void) asprintf(&s, "infinity:" RLIM_FMT, (uintmax_t)rl->rlim_max); + else if (rl->rlim_max >= RLIM_INFINITY) +- (void) asprintf(&s, RLIM_FMT ":infinity", rl->rlim_cur); ++ (void) asprintf(&s, RLIM_FMT ":infinity", (uintmax_t)rl->rlim_cur); + else if (rl->rlim_cur == rl->rlim_max) +- (void) asprintf(&s, RLIM_FMT, rl->rlim_cur); ++ (void) asprintf(&s, RLIM_FMT, (uintmax_t)rl->rlim_cur); + else +- (void) asprintf(&s, RLIM_FMT ":" RLIM_FMT, rl->rlim_cur, rl->rlim_max); ++ (void) asprintf(&s, RLIM_FMT ":" RLIM_FMT, (uintmax_t)rl->rlim_cur, (uintmax_t)rl->rlim_max); + + if (!s) + return -ENOMEM; +@@ -405,7 +405,7 @@ int rlimit_nofile_safe(void) { + + rl.rlim_cur = FD_SETSIZE; + if (setrlimit(RLIMIT_NOFILE, &rl) < 0) +- return log_debug_errno(errno, "Failed to lower RLIMIT_NOFILE's soft limit to " RLIM_FMT ": %m", rl.rlim_cur); ++ return log_debug_errno(errno, "Failed to lower RLIMIT_NOFILE's soft limit to " RLIM_FMT ": %m", (uintmax_t)rl.rlim_cur); + + return 1; + } +diff --git a/src/core/execute.c b/src/core/execute.c +index f82fc294c0..4696d055a8 100644 +--- a/src/core/execute.c ++++ b/src/core/execute.c +@@ -5370,9 +5370,9 @@ void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) { + for (unsigned i = 0; i < RLIM_NLIMITS; i++) + if (c->rlimit[i]) { + fprintf(f, "%sLimit%s: " RLIM_FMT "\n", +- prefix, rlimit_to_string(i), c->rlimit[i]->rlim_max); ++ prefix, rlimit_to_string(i), (uintmax_t)c->rlimit[i]->rlim_max); + fprintf(f, "%sLimit%sSoft: " RLIM_FMT "\n", +- prefix, rlimit_to_string(i), c->rlimit[i]->rlim_cur); ++ prefix, rlimit_to_string(i), (uintmax_t)c->rlimit[i]->rlim_cur); + } + + if (c->ioprio_set) { diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0011-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0011-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch new file mode 100644 index 000000000..b1d782719 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0011-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch @@ -0,0 +1,39 @@ +From f8be7b283309e4332eedc088774daac637afef7b Mon Sep 17 00:00:00 2001 +From: Chen Qi +Date: Wed, 28 Feb 2018 21:25:22 -0800 +Subject: [PATCH] test-sizeof.c: Disable tests for missing typedefs in musl + +Upstream-Status: Inappropriate [musl specific] + +Signed-off-by: Khem Raj +Signed-off-by: Chen Qi + +--- + src/test/test-sizeof.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/test/test-sizeof.c b/src/test/test-sizeof.c +index 3c9dc180fa..e1a59d408c 100644 +--- a/src/test/test-sizeof.c ++++ b/src/test/test-sizeof.c +@@ -55,8 +55,10 @@ int main(void) { + info(unsigned); + info(long unsigned); + info(long long unsigned); ++#ifdef __GLIBC__ + info(__syscall_ulong_t); + info(__syscall_slong_t); ++#endif + + info(float); + info(double); +@@ -74,7 +76,9 @@ int main(void) { + info(ssize_t); + info(time_t); + info(usec_t); ++#ifdef __GLIBC__ + info(__time_t); ++#endif + info(pid_t); + info(uid_t); + info(gid_t); diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0012-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0012-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch new file mode 100644 index 000000000..5f2178734 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0012-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch @@ -0,0 +1,98 @@ +From 06915b70735caa66987af758ebdc4207757ae758 Mon Sep 17 00:00:00 2001 +From: Andre McCurdy +Date: Tue, 10 Oct 2017 14:33:30 -0700 +Subject: [PATCH] don't pass AT_SYMLINK_NOFOLLOW flag to faccessat() + +Avoid using AT_SYMLINK_NOFOLLOW flag. It doesn't seem like the right +thing to do and it's not portable (not supported by musl). See: + + http://lists.landley.net/pipermail/toybox-landley.net/2014-September/003610.html + http://www.openwall.com/lists/musl/2015/02/05/2 + +Note that laccess() is never passing AT_EACCESS so a lot of the +discussion in the links above doesn't apply. Note also that +(currently) all systemd callers of laccess() pass mode as F_OK, so +only check for existence of a file, not access permissions. +Therefore, in this case, the only distiction between faccessat() +with (flag == 0) and (flag == AT_SYMLINK_NOFOLLOW) is the behaviour +for broken symlinks; laccess() on a broken symlink will succeed with +(flag == AT_SYMLINK_NOFOLLOW) and fail (flag == 0). + +The laccess() macros was added to systemd some time ago and it's not +clear if or why it needs to return success for broken symlinks. Maybe +just historical and not actually necessary or desired behaviour? + +Upstream-Status: Inappropriate [musl specific] + +Signed-off-by: Andre McCurdy + +--- + src/basic/fs-util.h | 23 +++++++++++++++++++++-- + src/shared/base-filesystem.c | 6 +++--- + 2 files changed, 24 insertions(+), 5 deletions(-) + +diff --git a/src/basic/fs-util.h b/src/basic/fs-util.h +index 027037f7a7..16eb379caf 100644 +--- a/src/basic/fs-util.h ++++ b/src/basic/fs-util.h +@@ -44,8 +44,27 @@ int futimens_opath(int fd, const struct timespec ts[2]); + int fd_warn_permissions(const char *path, int fd); + int stat_warn_permissions(const char *path, const struct stat *st); + +-#define laccess(path, mode) \ +- (faccessat(AT_FDCWD, (path), (mode), AT_SYMLINK_NOFOLLOW) < 0 ? -errno : 0) ++/* ++ Avoid using AT_SYMLINK_NOFOLLOW flag. It doesn't seem like the right thing to ++ do and it's not portable (not supported by musl). See: ++ ++ http://lists.landley.net/pipermail/toybox-landley.net/2014-September/003610.html ++ http://www.openwall.com/lists/musl/2015/02/05/2 ++ ++ Note that laccess() is never passing AT_EACCESS so a lot of the discussion in ++ the links above doesn't apply. Note also that (currently) all systemd callers ++ of laccess() pass mode as F_OK, so only check for existence of a file, not ++ access permissions. Therefore, in this case, the only distiction between ++ faccessat() with (flag == 0) and (flag == AT_SYMLINK_NOFOLLOW) is the ++ behaviour for broken symlinks; laccess() on a broken symlink will succeed ++ with (flag == AT_SYMLINK_NOFOLLOW) and fail (flag == 0). ++ ++ The laccess() macros was added to systemd some time ago and it's not clear if ++ or why it needs to return success for broken symlinks. Maybe just historical ++ and not actually necessary or desired behaviour? ++*/ ++ ++#define laccess(path, mode) faccessat(AT_FDCWD, (path), (mode), 0) + + int touch_file(const char *path, bool parents, usec_t stamp, uid_t uid, gid_t gid, mode_t mode); + int touch(const char *path); +diff --git a/src/shared/base-filesystem.c b/src/shared/base-filesystem.c +index 1d05409086..1ed06c31ab 100644 +--- a/src/shared/base-filesystem.c ++++ b/src/shared/base-filesystem.c +@@ -54,7 +54,7 @@ int base_filesystem_create(const char *root, uid_t uid, gid_t gid) { + return log_error_errno(errno, "Failed to open root file system: %m"); + + for (i = 0; i < ELEMENTSOF(table); i ++) { +- if (faccessat(fd, table[i].dir, F_OK, AT_SYMLINK_NOFOLLOW) >= 0) ++ if (faccessat(fd, table[i].dir, F_OK, 0) >= 0) + continue; + + if (table[i].target) { +@@ -62,7 +62,7 @@ int base_filesystem_create(const char *root, uid_t uid, gid_t gid) { + + /* check if one of the targets exists */ + NULSTR_FOREACH(s, table[i].target) { +- if (faccessat(fd, s, F_OK, AT_SYMLINK_NOFOLLOW) < 0) ++ if (faccessat(fd, s, F_OK, 0) < 0) + continue; + + /* check if a specific file exists at the target path */ +@@ -73,7 +73,7 @@ int base_filesystem_create(const char *root, uid_t uid, gid_t gid) { + if (!p) + return log_oom(); + +- if (faccessat(fd, p, F_OK, AT_SYMLINK_NOFOLLOW) < 0) ++ if (faccessat(fd, p, F_OK, 0) < 0) + continue; + } + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0013-Define-glibc-compatible-basename-for-non-glibc-syste.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0013-Define-glibc-compatible-basename-for-non-glibc-syste.patch new file mode 100644 index 000000000..51b145729 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0013-Define-glibc-compatible-basename-for-non-glibc-syste.patch @@ -0,0 +1,32 @@ +From 0c44af262cfa07c57db4b32de1f7610af47797f4 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sun, 27 May 2018 08:36:44 -0700 +Subject: [PATCH] Define glibc compatible basename() for non-glibc systems + +Fixes builds with musl, even though systemd is adamant about +using non-posix basename implementation, we have a way out + +Upstream-Status: Inappropriate [musl specific] + +Signed-off-by: Khem Raj + +--- + src/machine/machine-dbus.c | 5 +++++ + 1 file changed, 5 insertions(+) + +diff --git a/src/machine/machine-dbus.c b/src/machine/machine-dbus.c +index 3a1e4f9072..ab87b9882c 100644 +--- a/src/machine/machine-dbus.c ++++ b/src/machine/machine-dbus.c +@@ -11,6 +11,11 @@ + #include + #undef basename + ++#if !defined(__GLIBC__) ++#include ++#define basename(src) (strrchr(src,'/') ? strrchr(src,'/')+1 : src) ++#endif ++ + #include "alloc-util.h" + #include "bus-common-errors.h" + #include "bus-get-properties.h" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0014-Do-not-disable-buffering-when-writing-to-oom_score_a.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0014-Do-not-disable-buffering-when-writing-to-oom_score_a.patch new file mode 100644 index 000000000..7444d4375 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0014-Do-not-disable-buffering-when-writing-to-oom_score_a.patch @@ -0,0 +1,39 @@ +From 0f4b60e34a806055c678eb97a7ec7e21291bcf48 Mon Sep 17 00:00:00 2001 +From: Chen Qi +Date: Wed, 4 Jul 2018 15:00:44 +0800 +Subject: [PATCH] Do not disable buffering when writing to oom_score_adj + +On musl, disabling buffering when writing to oom_score_adj will +cause the following error. + + Failed to adjust OOM setting: Invalid argument + +This error appears for systemd-udevd.service and dbus.service. +This is because kernel receives '-' instead of the whole '-900' +if buffering is disabled. + +This is libc implementation specific, as glibc does not have this issue. + +Upstream-Status: Inappropriate [musl specific] + +Signed-off-by: Chen Qi +[rebased for systemd 243] +Signed-off-by: Scott Murray + +--- + src/basic/process-util.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/basic/process-util.c b/src/basic/process-util.c +index caa9dfe3a3..6101f43db5 100644 +--- a/src/basic/process-util.c ++++ b/src/basic/process-util.c +@@ -1523,7 +1523,7 @@ int set_oom_score_adjust(int value) { + sprintf(t, "%i", value); + + return write_string_file("/proc/self/oom_score_adj", t, +- WRITE_STRING_FILE_VERIFY_ON_FAILURE|WRITE_STRING_FILE_DISABLE_BUFFER); ++ WRITE_STRING_FILE_VERIFY_ON_FAILURE); + } + + int pidfd_get_pid(int fd, pid_t *ret) { diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0015-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0015-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch new file mode 100644 index 000000000..90cc70d21 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0015-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch @@ -0,0 +1,60 @@ +From c30ab62d18ce88187f5eb6c236e0977c9337f68d Mon Sep 17 00:00:00 2001 +From: Chen Qi +Date: Tue, 10 Jul 2018 15:40:17 +0800 +Subject: [PATCH] distinguish XSI-compliant strerror_r from GNU-specifi + strerror_r + +XSI-compliant strerror_r and GNU-specifi strerror_r are different. + + int strerror_r(int errnum, char *buf, size_t buflen); + /* XSI-compliant */ + + char *strerror_r(int errnum, char *buf, size_t buflen); + /* GNU-specific */ + +We need to distinguish between them. Otherwise, we'll get an int value +assigned to (char *) variable, resulting in segment fault. + +Upstream-Status: Inappropriate [musl specific] + +Signed-off-by: Chen Qi + +--- + src/libsystemd/sd-bus/bus-error.c | 5 +++++ + src/libsystemd/sd-journal/journal-send.c | 5 +++++ + 2 files changed, 10 insertions(+) + +diff --git a/src/libsystemd/sd-bus/bus-error.c b/src/libsystemd/sd-bus/bus-error.c +index 8da2024a50..9605a9b869 100644 +--- a/src/libsystemd/sd-bus/bus-error.c ++++ b/src/libsystemd/sd-bus/bus-error.c +@@ -392,7 +392,12 @@ static void bus_error_strerror(sd_bus_error *e, int error) { + return; + + errno = 0; ++#ifndef __GLIBC__ ++ strerror_r(error, m, k); ++ x = m; ++#else + x = strerror_r(error, m, k); ++#endif + if (errno == ERANGE || strlen(x) >= k - 1) { + free(m); + k *= 2; +diff --git a/src/libsystemd/sd-journal/journal-send.c b/src/libsystemd/sd-journal/journal-send.c +index e8e6ad555b..8ca5271d02 100644 +--- a/src/libsystemd/sd-journal/journal-send.c ++++ b/src/libsystemd/sd-journal/journal-send.c +@@ -348,7 +348,12 @@ static int fill_iovec_perror_and_send(const char *message, int skip, struct iove + char* j; + + errno = 0; ++#ifndef __GLIBC__ ++ strerror_r(_saved_errno_, buffer + 8 + k, n - 8 - k); ++ j = buffer + 8 + k; ++#else + j = strerror_r(_saved_errno_, buffer + 8 + k, n - 8 - k); ++#endif + if (errno == 0) { + char error[STRLEN("ERRNO=") + DECIMAL_STR_MAX(int) + 1]; + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0016-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0016-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch new file mode 100644 index 000000000..de7f9ecfa --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0016-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch @@ -0,0 +1,33 @@ +From fa86e5578256dddb296fd30128929ea7c4b792a4 Mon Sep 17 00:00:00 2001 +From: Chen Qi +Date: Mon, 25 Feb 2019 15:18:00 +0800 +Subject: [PATCH] Hide __start_BUS_ERROR_MAP and __stop_BUS_ERROR_MAP + +for currently unknown reasons they get exported to the shared libries +even without being listed in the sym file + +Upstream-Status: Pending + +Signed-off-by: Khem Raj +[Rebased for v241] +Signed-off-by: Chen Qi + +--- + src/libsystemd/sd-bus/bus-error.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/libsystemd/sd-bus/bus-error.c b/src/libsystemd/sd-bus/bus-error.c +index 9605a9b869..38b6cf90c3 100644 +--- a/src/libsystemd/sd-bus/bus-error.c ++++ b/src/libsystemd/sd-bus/bus-error.c +@@ -55,8 +55,8 @@ BUS_ERROR_MAP_ELF_REGISTER const sd_bus_error_map bus_standard_errors[] = { + }; + + /* GCC maps this magically to the beginning and end of the BUS_ERROR_MAP section */ +-extern const sd_bus_error_map __start_SYSTEMD_BUS_ERROR_MAP[]; +-extern const sd_bus_error_map __stop_SYSTEMD_BUS_ERROR_MAP[]; ++extern const sd_bus_error_map __start_SYSTEMD_BUS_ERROR_MAP[] _hidden_; ++extern const sd_bus_error_map __stop_SYSTEMD_BUS_ERROR_MAP[] _hidden_; + + /* Additional maps registered with sd_bus_error_add_map() are in this + * NULL terminated array */ diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0017-missing_type.h-add-__compar_d_fn_t-definition.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0017-missing_type.h-add-__compar_d_fn_t-definition.patch new file mode 100644 index 000000000..d9ef2b8a4 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0017-missing_type.h-add-__compar_d_fn_t-definition.patch @@ -0,0 +1,28 @@ +From 11e730694706fa354a0e43c588ef66677a777d9a Mon Sep 17 00:00:00 2001 +From: Chen Qi +Date: Mon, 25 Feb 2019 15:27:54 +0800 +Subject: [PATCH] missing_type.h: add __compar_d_fn_t definition + +Fix the following compile failure: +src/basic/util.h:71:18: error: unknown type name '__compar_d_fn_t'; did you mean '__compar_fn_t'? + +Upstream-Status: Inappropriate [musl specific] + +Signed-off-by: Chen Qi + +--- + src/basic/missing_type.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/basic/missing_type.h b/src/basic/missing_type.h +index 3df1084ef2..697aa7f58a 100644 +--- a/src/basic/missing_type.h ++++ b/src/basic/missing_type.h +@@ -13,6 +13,7 @@ + + #ifndef __GLIBC__ + typedef int (*comparison_fn_t)(const void *, const void *); ++typedef int (*__compar_d_fn_t) (const void *, const void *, void *); + #endif + + #ifndef __COMPAR_FN_T diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0018-avoid-redefinition-of-prctl_mm_map-structure.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0018-avoid-redefinition-of-prctl_mm_map-structure.patch new file mode 100644 index 000000000..3b6085423 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0018-avoid-redefinition-of-prctl_mm_map-structure.patch @@ -0,0 +1,30 @@ +From 45bae28d3da6607d33d54f4b30a500f5249aadde Mon Sep 17 00:00:00 2001 +From: Chen Qi +Date: Mon, 25 Feb 2019 15:44:54 +0800 +Subject: [PATCH] avoid redefinition of prctl_mm_map structure + +Fix the following compile failure: +error: redefinition of 'struct prctl_mm_map' + +Upstream-Status: Inappropriate [musl specific] + +Signed-off-by: Chen Qi + +--- + src/basic/missing_prctl.h | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/basic/missing_prctl.h b/src/basic/missing_prctl.h +index ab851306ba..5547cad875 100644 +--- a/src/basic/missing_prctl.h ++++ b/src/basic/missing_prctl.h +@@ -1,7 +1,9 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + #pragma once + ++#ifdef __GLIBC__ + #include ++#endif + + /* 58319057b7847667f0c9585b9de0e8932b0fdb08 (4.3) */ + #ifndef PR_CAP_AMBIENT diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0019-Handle-missing-LOCK_EX.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0019-Handle-missing-LOCK_EX.patch new file mode 100644 index 000000000..7d6433f31 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0019-Handle-missing-LOCK_EX.patch @@ -0,0 +1,24 @@ +From 6e593ff2afbe4bfe15eee2ec34e51490a38462f5 Mon Sep 17 00:00:00 2001 +From: Alex Kiernan +Date: Fri, 7 Aug 2020 15:19:27 +0000 +Subject: [PATCH] Handle missing LOCK_EX + +Upstream-Status: Inappropriate [musl specific] +Signed-off-by: Alex Kiernan + +--- + src/partition/makefs.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/partition/makefs.c b/src/partition/makefs.c +index 7c94fbfedb..42f966722d 100644 +--- a/src/partition/makefs.c ++++ b/src/partition/makefs.c +@@ -6,6 +6,7 @@ + #include + #include + #include ++#include + + #include "alloc-util.h" + #include "blockdev-util.h" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0020-Fix-incompatible-pointer-type-struct-sockaddr_un.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0020-Fix-incompatible-pointer-type-struct-sockaddr_un.patch new file mode 100644 index 000000000..1faee1c05 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0020-Fix-incompatible-pointer-type-struct-sockaddr_un.patch @@ -0,0 +1,38 @@ +From ac579b296aa29c2f1dad9425c6d795e154ec8f7c Mon Sep 17 00:00:00 2001 +From: Alex Kiernan +Date: Fri, 7 Aug 2020 15:20:17 +0000 +Subject: [PATCH] Fix incompatible pointer type struct sockaddr_un * + +| ../../../../../../workspace/sources/systemd/src/nspawn/nspawn.c: In function 'cant_be_in_netns': +| ../../../../../../workspace/sources/systemd/src/nspawn/nspawn.c:4893:25: error: passing argument 2 of 'connect' from incompatible pointer type [-Werror=incompatible-pointer-types] +| 4893 | if (connect(fd, &sa.un, SOCKADDR_UN_LEN(sa.un)) < 0) { +| | ^~~~~~ +| | | +| | struct sockaddr_un * +| In file included from ../../../../../../workspace/sources/systemd/src/systemd/sd-daemon.h:22, +| from ../../../../../../workspace/sources/systemd/src/nspawn/nspawn.c:21: +| /home/ubuntu/poky/build/tmp/work/core2-64-poky-linux-musl/systemd/1_246-r0/recipe-sysroot/usr/include/sys/socket.h:384:19: note: expected 'const struct sockaddr *' but argument is of type 'struct sockaddr_un *' +| 384 | int connect (int, const struct sockaddr *, socklen_t); +| | ^~~~~~~~~~~~~~~~~~~~~~~ +| cc1: some warnings being treated as errors + +Upstream-Status: Inappropriate [musl specific] +Signed-off-by: Alex Kiernan + +--- + src/nspawn/nspawn.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c +index a4ac8ed2bb..0c41a48d4b 100644 +--- a/src/nspawn/nspawn.c ++++ b/src/nspawn/nspawn.c +@@ -5125,7 +5125,7 @@ static int cant_be_in_netns(void) { + if (fd < 0) + return log_error_errno(errno, "Failed to allocate udev control socket: %m"); + +- if (connect(fd, &sa.un, SOCKADDR_UN_LEN(sa.un)) < 0) { ++ if (connect(fd, (struct sockaddr *)&sa.un, SOCKADDR_UN_LEN(sa.un)) < 0) { + + if (errno == ENOENT || ERRNO_IS_DISCONNECT(errno)) + return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0021-test-json.c-define-M_PIl.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0021-test-json.c-define-M_PIl.patch new file mode 100644 index 000000000..14c8ff73a --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0021-test-json.c-define-M_PIl.patch @@ -0,0 +1,31 @@ +From 6bc78df50adb48d24a2abfdf65b44b932cc5a571 Mon Sep 17 00:00:00 2001 +From: Chen Qi +Date: Mon, 25 Feb 2019 16:53:06 +0800 +Subject: [PATCH] test-json.c: define M_PIl + +Fix the following compile failure: +src/test/test-json.c:305:50: error: 'M_PIl' undeclared (first use in this function); did you mean 'M_PI'? + +Upstream-Status: Inappropriate [musl specific] + +Signed-off-by: Chen Qi + +--- + src/test/test-json.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/test/test-json.c b/src/test/test-json.c +index 1d4b11945e..572c8cf9d0 100644 +--- a/src/test/test-json.c ++++ b/src/test/test-json.c +@@ -13,6 +13,10 @@ + #include "tests.h" + #include "util.h" + ++#ifndef M_PIl ++#define M_PIl 3.141592653589793238462643383279502884L ++#endif ++ + static void test_tokenizer(const char *data, ...) { + unsigned line = 0, column = 0; + void *state = NULL; diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0022-do-not-disable-buffer-in-writing-files.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0022-do-not-disable-buffer-in-writing-files.patch new file mode 100644 index 000000000..bd627c51e --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0022-do-not-disable-buffer-in-writing-files.patch @@ -0,0 +1,383 @@ +From 7cb6579572b50ef44bc0a321a4c73cce55b0c2f2 Mon Sep 17 00:00:00 2001 +From: Chen Qi +Date: Fri, 1 Mar 2019 15:22:15 +0800 +Subject: [PATCH] do not disable buffer in writing files + +Do not disable buffer in writing files, otherwise we get +failure at boot for musl like below. + + [!!!!!!] Failed to allocate manager object. + +And there will be other failures, critical or not critical. +This is specific to musl. + +Upstream-Status: Inappropriate [musl] + +Signed-off-by: Chen Qi +[Rebased for v242] +Signed-off-by: Andrej Valek +[rebased for systemd 243] +Signed-off-by: Scott Murray + +--- + src/basic/cgroup-util.c | 10 +++++----- + src/basic/procfs-util.c | 4 ++-- + src/basic/smack-util.c | 2 +- + src/basic/sysctl-util.c | 2 +- + src/basic/util.c | 2 +- + src/binfmt/binfmt.c | 6 +++--- + src/core/main.c | 4 ++-- + src/core/smack-setup.c | 8 ++++---- + src/hibernate-resume/hibernate-resume.c | 2 +- + src/libsystemd/sd-device/sd-device.c | 2 +- + src/login/logind-dbus.c | 2 +- + src/nspawn/nspawn-cgroup.c | 2 +- + src/nspawn/nspawn.c | 6 +++--- + src/shared/cgroup-setup.c | 4 ++-- + src/sleep/sleep.c | 8 ++++---- + src/vconsole/vconsole-setup.c | 2 +- + 16 files changed, 33 insertions(+), 33 deletions(-) + +diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c +index 50c1ae1b2b..5b40e92163 100644 +--- a/src/basic/cgroup-util.c ++++ b/src/basic/cgroup-util.c +@@ -765,7 +765,7 @@ int cg_install_release_agent(const char *controller, const char *agent) { + + sc = strstrip(contents); + if (isempty(sc)) { +- r = write_string_file(fs, agent, WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file(fs, agent, 0); + if (r < 0) + return r; + } else if (!path_equal(sc, agent)) +@@ -783,7 +783,7 @@ int cg_install_release_agent(const char *controller, const char *agent) { + + sc = strstrip(contents); + if (streq(sc, "0")) { +- r = write_string_file(fs, "1", WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file(fs, "1", 0); + if (r < 0) + return r; + +@@ -810,7 +810,7 @@ int cg_uninstall_release_agent(const char *controller) { + if (r < 0) + return r; + +- r = write_string_file(fs, "0", WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file(fs, "0", 0); + if (r < 0) + return r; + +@@ -820,7 +820,7 @@ int cg_uninstall_release_agent(const char *controller) { + if (r < 0) + return r; + +- r = write_string_file(fs, "", WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file(fs, "", 0); + if (r < 0) + return r; + +@@ -1650,7 +1650,7 @@ int cg_set_attribute(const char *controller, const char *path, const char *attri + if (r < 0) + return r; + +- return write_string_file(p, value, WRITE_STRING_FILE_DISABLE_BUFFER); ++ return write_string_file(p, value, 0); + } + + int cg_get_attribute(const char *controller, const char *path, const char *attribute, char **ret) { +diff --git a/src/basic/procfs-util.c b/src/basic/procfs-util.c +index 8f9eee8d36..480f8cc0b4 100644 +--- a/src/basic/procfs-util.c ++++ b/src/basic/procfs-util.c +@@ -86,13 +86,13 @@ int procfs_tasks_set_limit(uint64_t limit) { + * decrease it, as threads-max is the much more relevant sysctl. */ + if (limit > pid_max-1) { + sprintf(buffer, "%" PRIu64, limit+1); /* Add one, since PID 0 is not a valid PID */ +- r = write_string_file("/proc/sys/kernel/pid_max", buffer, WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file("/proc/sys/kernel/pid_max", buffer, 0); + if (r < 0) + return r; + } + + sprintf(buffer, "%" PRIu64, limit); +- r = write_string_file("/proc/sys/kernel/threads-max", buffer, WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file("/proc/sys/kernel/threads-max", buffer, 0); + if (r < 0) { + uint64_t threads_max; + +diff --git a/src/basic/smack-util.c b/src/basic/smack-util.c +index 3362ee3924..80c0f2a52e 100644 +--- a/src/basic/smack-util.c ++++ b/src/basic/smack-util.c +@@ -114,7 +114,7 @@ int mac_smack_apply_pid(pid_t pid, const char *label) { + return 0; + + p = procfs_file_alloca(pid, "attr/current"); +- r = write_string_file(p, label, WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file(p, label, 0); + if (r < 0) + return r; + +diff --git a/src/basic/sysctl-util.c b/src/basic/sysctl-util.c +index c96b5cd77f..d2476d9665 100644 +--- a/src/basic/sysctl-util.c ++++ b/src/basic/sysctl-util.c +@@ -93,7 +93,7 @@ int sysctl_write_ip_property(int af, const char *ifname, const char *property, c + + log_debug("Setting '%s' to '%s'", p, value); + +- return write_string_file(p, value, WRITE_STRING_FILE_VERIFY_ON_FAILURE | WRITE_STRING_FILE_DISABLE_BUFFER); ++ return write_string_file(p, value, WRITE_STRING_FILE_VERIFY_ON_FAILURE | 0); + } + + int sysctl_read(const char *property, char **ret) { +diff --git a/src/basic/util.c b/src/basic/util.c +index 955b18bd2a..6d89c90176 100644 +--- a/src/basic/util.c ++++ b/src/basic/util.c +@@ -234,7 +234,7 @@ void disable_coredumps(void) { + if (detect_container() > 0) + return; + +- r = write_string_file("/proc/sys/kernel/core_pattern", "|/bin/false", WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file("/proc/sys/kernel/core_pattern", "|/bin/false", 0); + if (r < 0) + log_debug_errno(r, "Failed to turn off coredumps, ignoring: %m"); + } +diff --git a/src/binfmt/binfmt.c b/src/binfmt/binfmt.c +index f6b72e0bae..e9fd4d06be 100644 +--- a/src/binfmt/binfmt.c ++++ b/src/binfmt/binfmt.c +@@ -48,7 +48,7 @@ static int delete_rule(const char *rule) { + if (!fn) + return log_oom(); + +- return write_string_file(fn, "-1", WRITE_STRING_FILE_DISABLE_BUFFER); ++ return write_string_file(fn, "-1", 0); + } + + static int apply_rule(const char *rule) { +@@ -56,7 +56,7 @@ static int apply_rule(const char *rule) { + + (void) delete_rule(rule); + +- r = write_string_file("/proc/sys/fs/binfmt_misc/register", rule, WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file("/proc/sys/fs/binfmt_misc/register", rule, 0); + if (r < 0) + return log_error_errno(r, "Failed to add binary format: %m"); + +@@ -222,7 +222,7 @@ static int run(int argc, char *argv[]) { + } + + /* Flush out all rules */ +- (void) write_string_file("/proc/sys/fs/binfmt_misc/status", "-1", WRITE_STRING_FILE_DISABLE_BUFFER); ++ (void) write_string_file("/proc/sys/fs/binfmt_misc/status", "-1", 0); + + STRV_FOREACH(f, files) { + k = apply_file(*f, true); +diff --git a/src/core/main.c b/src/core/main.c +index 3ee8d0a869..ec36e3e80f 100644 +--- a/src/core/main.c ++++ b/src/core/main.c +@@ -1401,7 +1401,7 @@ static int bump_unix_max_dgram_qlen(void) { + if (v >= DEFAULT_UNIX_MAX_DGRAM_QLEN) + return 0; + +- r = write_string_filef("/proc/sys/net/unix/max_dgram_qlen", WRITE_STRING_FILE_DISABLE_BUFFER, "%lu", DEFAULT_UNIX_MAX_DGRAM_QLEN); ++ r = write_string_filef("/proc/sys/net/unix/max_dgram_qlen", 0, "%lu", DEFAULT_UNIX_MAX_DGRAM_QLEN); + if (r < 0) + return log_full_errno(IN_SET(r, -EROFS, -EPERM, -EACCES) ? LOG_DEBUG : LOG_WARNING, r, + "Failed to bump AF_UNIX datagram queue length, ignoring: %m"); +@@ -1678,7 +1678,7 @@ static void initialize_core_pattern(bool skip_setup) { + if (getpid_cached() != 1) + return; + +- r = write_string_file("/proc/sys/kernel/core_pattern", arg_early_core_pattern, WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file("/proc/sys/kernel/core_pattern", arg_early_core_pattern, 0); + if (r < 0) + log_warning_errno(r, "Failed to write '%s' to /proc/sys/kernel/core_pattern, ignoring: %m", arg_early_core_pattern); + } +diff --git a/src/core/smack-setup.c b/src/core/smack-setup.c +index 8cc1696a4f..ab7b4ba2c3 100644 +--- a/src/core/smack-setup.c ++++ b/src/core/smack-setup.c +@@ -325,17 +325,17 @@ int mac_smack_setup(bool *loaded_policy) { + } + + #ifdef SMACK_RUN_LABEL +- r = write_string_file("/proc/self/attr/current", SMACK_RUN_LABEL, WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file("/proc/self/attr/current", SMACK_RUN_LABEL, 0); + if (r < 0) + log_warning_errno(r, "Failed to set SMACK label \"" SMACK_RUN_LABEL "\" on self: %m"); +- r = write_string_file("/sys/fs/smackfs/ambient", SMACK_RUN_LABEL, WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file("/sys/fs/smackfs/ambient", SMACK_RUN_LABEL, 0); + if (r < 0) + log_warning_errno(r, "Failed to set SMACK ambient label \"" SMACK_RUN_LABEL "\": %m"); + r = write_string_file("/sys/fs/smackfs/netlabel", +- "0.0.0.0/0 " SMACK_RUN_LABEL, WRITE_STRING_FILE_DISABLE_BUFFER); ++ "0.0.0.0/0 " SMACK_RUN_LABEL, 0); + if (r < 0) + log_warning_errno(r, "Failed to set SMACK netlabel rule \"0.0.0.0/0 " SMACK_RUN_LABEL "\": %m"); +- r = write_string_file("/sys/fs/smackfs/netlabel", "127.0.0.1 -CIPSO", WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file("/sys/fs/smackfs/netlabel", "127.0.0.1 -CIPSO", 0); + if (r < 0) + log_warning_errno(r, "Failed to set SMACK netlabel rule \"127.0.0.1 -CIPSO\": %m"); + #endif +diff --git a/src/hibernate-resume/hibernate-resume.c b/src/hibernate-resume/hibernate-resume.c +index 58e35e403e..1d0beb4008 100644 +--- a/src/hibernate-resume/hibernate-resume.c ++++ b/src/hibernate-resume/hibernate-resume.c +@@ -45,7 +45,7 @@ int main(int argc, char *argv[]) { + return EXIT_FAILURE; + } + +- r = write_string_file("/sys/power/resume", major_minor, WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file("/sys/power/resume", major_minor, 0); + if (r < 0) { + log_error_errno(r, "Failed to write '%s' to /sys/power/resume: %m", major_minor); + return EXIT_FAILURE; +diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c +index d82f01a164..b8fd63346c 100644 +--- a/src/libsystemd/sd-device/sd-device.c ++++ b/src/libsystemd/sd-device/sd-device.c +@@ -1987,7 +1987,7 @@ _public_ int sd_device_set_sysattr_value(sd_device *device, const char *sysattr, + if (!value) + return -ENOMEM; + +- r = write_string_file(path, value, WRITE_STRING_FILE_DISABLE_BUFFER | WRITE_STRING_FILE_NOFOLLOW); ++ r = write_string_file(path, value, 0 | WRITE_STRING_FILE_NOFOLLOW); + if (r < 0) { + /* On failure, clear cache entry, as we do not know how it fails. */ + device_remove_cached_sysattr_value(device, sysattr); +diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c +index 3bc424b83b..5f5eef0843 100644 +--- a/src/login/logind-dbus.c ++++ b/src/login/logind-dbus.c +@@ -1330,7 +1330,7 @@ static int trigger_device(Manager *m, sd_device *d) { + if (!t) + return -ENOMEM; + +- (void) write_string_file(t, "change", WRITE_STRING_FILE_DISABLE_BUFFER); ++ (void) write_string_file(t, "change", 0); + } + + return 0; +diff --git a/src/nspawn/nspawn-cgroup.c b/src/nspawn/nspawn-cgroup.c +index cb01b25bc6..e92051268b 100644 +--- a/src/nspawn/nspawn-cgroup.c ++++ b/src/nspawn/nspawn-cgroup.c +@@ -124,7 +124,7 @@ int sync_cgroup(pid_t pid, CGroupUnified unified_requested, uid_t uid_shift) { + fn = strjoina(tree, cgroup, "/cgroup.procs"); + + sprintf(pid_string, PID_FMT, pid); +- r = write_string_file(fn, pid_string, WRITE_STRING_FILE_DISABLE_BUFFER|WRITE_STRING_FILE_MKDIR_0755); ++ r = write_string_file(fn, pid_string, WRITE_STRING_FILE_MKDIR_0755); + if (r < 0) { + log_error_errno(r, "Failed to move process: %m"); + goto finish; +diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c +index 0c41a48d4b..9c893b18e4 100644 +--- a/src/nspawn/nspawn.c ++++ b/src/nspawn/nspawn.c +@@ -2695,7 +2695,7 @@ static int reset_audit_loginuid(void) { + if (streq(p, "4294967295")) + return 0; + +- r = write_string_file("/proc/self/loginuid", "4294967295", WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file("/proc/self/loginuid", "4294967295", 0); + if (r < 0) { + log_error_errno(r, + "Failed to reset audit login UID. This probably means that your kernel is too\n" +@@ -3948,13 +3948,13 @@ static int setup_uid_map(pid_t pid) { + + xsprintf(uid_map, "/proc/" PID_FMT "/uid_map", pid); + xsprintf(line, UID_FMT " " UID_FMT " " UID_FMT "\n", 0, arg_uid_shift, arg_uid_range); +- r = write_string_file(uid_map, line, WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file(uid_map, line, 0); + if (r < 0) + return log_error_errno(r, "Failed to write UID map: %m"); + + /* We always assign the same UID and GID ranges */ + xsprintf(uid_map, "/proc/" PID_FMT "/gid_map", pid); +- r = write_string_file(uid_map, line, WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file(uid_map, line, 0); + if (r < 0) + return log_error_errno(r, "Failed to write GID map: %m"); + +diff --git a/src/shared/cgroup-setup.c b/src/shared/cgroup-setup.c +index f197f715c7..077f893177 100644 +--- a/src/shared/cgroup-setup.c ++++ b/src/shared/cgroup-setup.c +@@ -267,7 +267,7 @@ int cg_attach(const char *controller, const char *path, pid_t pid) { + + xsprintf(c, PID_FMT "\n", pid); + +- r = write_string_file(fs, c, WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file(fs, c, 0); + if (r < 0) + return r; + +@@ -799,7 +799,7 @@ int cg_enable_everywhere( + return log_debug_errno(errno, "Failed to open cgroup.subtree_control file of %s: %m", p); + } + +- r = write_string_stream(f, s, WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_stream(f, s, 0); + if (r < 0) { + log_debug_errno(r, "Failed to %s controller %s for %s (%s): %m", + FLAGS_SET(mask, bit) ? "enable" : "disable", n, p, fs); +diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c +index 262d4cea66..0523e8dc9b 100644 +--- a/src/sleep/sleep.c ++++ b/src/sleep/sleep.c +@@ -48,7 +48,7 @@ static int write_hibernate_location_info(const HibernateLocation *hibernate_loca + assert(hibernate_location->swap); + + xsprintf(resume_str, "%u:%u", major(hibernate_location->devno), minor(hibernate_location->devno)); +- r = write_string_file("/sys/power/resume", resume_str, WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file("/sys/power/resume", resume_str, 0); + if (r < 0) + return log_debug_errno(r, "Failed to write partition device to /sys/power/resume for '%s': '%s': %m", + hibernate_location->swap->device, resume_str); +@@ -75,7 +75,7 @@ static int write_hibernate_location_info(const HibernateLocation *hibernate_loca + } + + xsprintf(offset_str, "%" PRIu64, hibernate_location->offset); +- r = write_string_file("/sys/power/resume_offset", offset_str, WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file("/sys/power/resume_offset", offset_str, 0); + if (r < 0) + return log_debug_errno(r, "Failed to write swap file offset to /sys/power/resume_offset for '%s': '%s': %m", + hibernate_location->swap->device, offset_str); +@@ -92,7 +92,7 @@ static int write_mode(char **modes) { + STRV_FOREACH(mode, modes) { + int k; + +- k = write_string_file("/sys/power/disk", *mode, WRITE_STRING_FILE_DISABLE_BUFFER); ++ k = write_string_file("/sys/power/disk", *mode, 0); + if (k >= 0) + return 0; + +@@ -114,7 +114,7 @@ static int write_state(FILE **f, char **states) { + STRV_FOREACH(state, states) { + int k; + +- k = write_string_stream(*f, *state, WRITE_STRING_FILE_DISABLE_BUFFER); ++ k = write_string_stream(*f, *state, 0); + if (k >= 0) + return 0; + log_debug_errno(k, "Failed to write '%s' to /sys/power/state: %m", *state); +diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c +index d1c3febdd5..1cc68694d1 100644 +--- a/src/vconsole/vconsole-setup.c ++++ b/src/vconsole/vconsole-setup.c +@@ -116,7 +116,7 @@ static int toggle_utf8_vc(const char *name, int fd, bool utf8) { + static int toggle_utf8_sysfs(bool utf8) { + int r; + +- r = write_string_file("/sys/module/vt/parameters/default_utf8", one_zero(utf8), WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file("/sys/module/vt/parameters/default_utf8", one_zero(utf8), 0); + if (r < 0) + return log_warning_errno(r, "Failed to %s sysfs UTF-8 flag: %m", enable_disable(utf8)); + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0025-Handle-__cpu_mask-usage.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0025-Handle-__cpu_mask-usage.patch new file mode 100644 index 000000000..7d1bd6025 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0025-Handle-__cpu_mask-usage.patch @@ -0,0 +1,58 @@ +From d73755cc60f401f0f20f357752e45aeeeef8e83f Mon Sep 17 00:00:00 2001 +From: Scott Murray +Date: Fri, 13 Sep 2019 19:26:27 -0400 +Subject: [PATCH] Handle __cpu_mask usage + +Fixes errors: + +src/test/test-cpu-set-util.c:18:54: error: '__cpu_mask' undeclared (first use in this function) +src/test/test-sizeof.c:73:14: error: '__cpu_mask' undeclared (first use in this function) + +__cpu_mask is an internal type of glibc's cpu_set implementation, not +part of the POSIX definition, which is problematic when building with +musl, which does not define a matching type. From inspection of musl's +sched.h, however, it is clear that the corresponding type would be +unsigned long, which does match glibc's actual __CPU_MASK_TYPE. So, +add a typedef to cpu-set-util.h defining __cpu_mask appropriately. + +Upstream-Status: Inappropriate [musl specific] + +Signed-off-by: Scott Murray + +--- + src/shared/cpu-set-util.h | 2 ++ + src/test/test-sizeof.c | 2 +- + 2 files changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/shared/cpu-set-util.h b/src/shared/cpu-set-util.h +index 3c63a58826..4c2d4347fc 100644 +--- a/src/shared/cpu-set-util.h ++++ b/src/shared/cpu-set-util.h +@@ -6,6 +6,8 @@ + #include "macro.h" + #include "missing_syscall.h" + ++typedef unsigned long __cpu_mask; ++ + /* This wraps the libc interface with a variable to keep the allocated size. */ + typedef struct CPUSet { + cpu_set_t *set; +diff --git a/src/test/test-sizeof.c b/src/test/test-sizeof.c +index e1a59d408c..c269ea6e8c 100644 +--- a/src/test/test-sizeof.c ++++ b/src/test/test-sizeof.c +@@ -1,6 +1,5 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + +-#include + #include + #include + #include +@@ -10,6 +9,7 @@ + #include + + #include "time-util.h" ++#include "cpu-set-util.h" + + /* Print information about various types. Useful when diagnosing + * gcc diagnostics on an unfamiliar architecture. */ diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0026-Handle-missing-gshadow.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0026-Handle-missing-gshadow.patch new file mode 100644 index 000000000..068600fa4 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0026-Handle-missing-gshadow.patch @@ -0,0 +1,171 @@ +From 04e94f9a15101daa8f65a9af269d26cda2a24056 Mon Sep 17 00:00:00 2001 +From: Alex Kiernan +Date: Tue, 10 Mar 2020 11:05:20 +0000 +Subject: [PATCH] Handle missing gshadow + +gshadow usage is now present in the userdb code. Mask all uses of it to +allow compilation on musl + +Upstream-Status: Inappropriate [musl specific] +Signed-off-by: Alex Kiernan +[Rebased for v247] +Signed-off-by: Luca Boccassi + +--- + src/shared/user-record-nss.c | 20 ++++++++++++++++++++ + src/shared/user-record-nss.h | 4 ++++ + src/shared/userdb.c | 6 ++++++ + 3 files changed, 30 insertions(+) + +diff --git a/src/shared/user-record-nss.c b/src/shared/user-record-nss.c +index 88b8fc2f8f..a819d41bac 100644 +--- a/src/shared/user-record-nss.c ++++ b/src/shared/user-record-nss.c +@@ -331,8 +331,10 @@ int nss_group_to_group_record( + if (isempty(grp->gr_name)) + return -EINVAL; + ++#if ENABLE_GSHADOW + if (sgrp && !streq_ptr(sgrp->sg_namp, grp->gr_name)) + return -EINVAL; ++#endif + + g = group_record_new(); + if (!g) +@@ -348,6 +350,7 @@ int nss_group_to_group_record( + + g->gid = grp->gr_gid; + ++#if ENABLE_GSHADOW + if (sgrp) { + if (looks_like_hashed_password(utf8_only(sgrp->sg_passwd))) { + g->hashed_password = strv_new(sgrp->sg_passwd); +@@ -363,6 +366,7 @@ int nss_group_to_group_record( + if (r < 0) + return r; + } ++#endif + + r = json_build(&g->json, JSON_BUILD_OBJECT( + JSON_BUILD_PAIR("groupName", JSON_BUILD_STRING(g->group_name)), +@@ -388,6 +392,7 @@ int nss_sgrp_for_group(const struct group *grp, struct sgrp *ret_sgrp, char **re + assert(ret_sgrp); + assert(ret_buffer); + ++#if ENABLE_GSHADOW + for (;;) { + _cleanup_free_ char *buf = NULL; + struct sgrp sgrp, *result; +@@ -416,6 +421,9 @@ int nss_sgrp_for_group(const struct group *grp, struct sgrp *ret_sgrp, char **re + buflen *= 2; + buf = mfree(buf); + } ++#else ++ return -ESRCH; ++#endif + } + + int nss_group_record_by_name( +@@ -427,7 +435,9 @@ int nss_group_record_by_name( + struct group grp, *result; + bool incomplete = false; + size_t buflen = 4096; ++#if ENABLE_GSHADOW + struct sgrp sgrp, *sresult = NULL; ++#endif + int r; + + assert(name); +@@ -457,6 +467,7 @@ int nss_group_record_by_name( + buf = mfree(buf); + } + ++#if ENABLE_GSHADOW + if (with_shadow) { + r = nss_sgrp_for_group(result, &sgrp, &sbuf); + if (r < 0) { +@@ -468,6 +479,9 @@ int nss_group_record_by_name( + incomplete = true; + + r = nss_group_to_group_record(result, sresult, ret); ++#else ++ r = nss_group_to_group_record(result, NULL, ret); ++#endif + if (r < 0) + return r; + +@@ -484,7 +498,9 @@ int nss_group_record_by_gid( + struct group grp, *result; + bool incomplete = false; + size_t buflen = 4096; ++#if ENABLE_GSHADOW + struct sgrp sgrp, *sresult = NULL; ++#endif + int r; + + assert(ret); +@@ -512,6 +528,7 @@ int nss_group_record_by_gid( + buf = mfree(buf); + } + ++#if ENABLE_GSHADOW + if (with_shadow) { + r = nss_sgrp_for_group(result, &sgrp, &sbuf); + if (r < 0) { +@@ -523,6 +540,9 @@ int nss_group_record_by_gid( + incomplete = true; + + r = nss_group_to_group_record(result, sresult, ret); ++#else ++ r = nss_group_to_group_record(result, NULL, ret); ++#endif + if (r < 0) + return r; + +diff --git a/src/shared/user-record-nss.h b/src/shared/user-record-nss.h +index 22ab04d6ee..4e52e7a911 100644 +--- a/src/shared/user-record-nss.h ++++ b/src/shared/user-record-nss.h +@@ -2,7 +2,11 @@ + #pragma once + + #include ++#if ENABLE_GSHADOW + #include ++#else ++struct sgrp; ++#endif + #include + #include + +diff --git a/src/shared/userdb.c b/src/shared/userdb.c +index 613350bd46..5c821d28cd 100644 +--- a/src/shared/userdb.c ++++ b/src/shared/userdb.c +@@ -938,13 +938,16 @@ int groupdb_iterator_get(UserDBIterator *iterator, GroupRecord **ret) { + if (gr) { + _cleanup_free_ char *buffer = NULL; + bool incomplete = false; ++#if ENABLE_GSHADOW + struct sgrp sgrp; ++#endif + + if (streq_ptr(gr->gr_name, "root")) + iterator->synthesize_root = false; + if (gr->gr_gid == GID_NOBODY) + iterator->synthesize_nobody = false; + ++#if ENABLE_GSHADOW + if (!FLAGS_SET(iterator->flags, USERDB_AVOID_SHADOW)) { + r = nss_sgrp_for_group(gr, &sgrp, &buffer); + if (r < 0) { +@@ -957,6 +960,9 @@ int groupdb_iterator_get(UserDBIterator *iterator, GroupRecord **ret) { + } + + r = nss_group_to_group_record(gr, r >= 0 ? &sgrp : NULL, ret); ++#else ++ r = nss_group_to_group_record(gr, NULL, ret); ++#endif + if (r < 0) + return r; + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0028-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0028-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch new file mode 100644 index 000000000..2289404d8 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0028-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch @@ -0,0 +1,34 @@ +From 366cd28f5f93ba7c861cd32a718251770d74830e Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Mon, 12 Apr 2021 23:44:53 -0700 +Subject: [PATCH] missing_syscall.h: Define MIPS ABI defines for musl + +musl does not define _MIPS_SIM_ABI32, _MIPS_SIM_NABI32, _MIPS_SIM_ABI64 +unlike glibc where these are provided by libc headers, therefore define +them here in case they are undefined + +Upstream-Status: Pending + +Signed-off-by: Khem Raj + +--- + src/basic/missing_syscall.h | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/basic/missing_syscall.h b/src/basic/missing_syscall.h +index 1384324804..0202d00372 100644 +--- a/src/basic/missing_syscall.h ++++ b/src/basic/missing_syscall.h +@@ -20,6 +20,12 @@ + #include + #endif + ++#ifndef _MIPS_SIM_ABI32 ++#define _MIPS_SIM_ABI32 1 ++#define _MIPS_SIM_NABI32 2 ++#define _MIPS_SIM_ABI64 3 ++#endif ++ + #include "missing_keyctl.h" + #include "missing_stat.h" + #include "missing_syscall_def.h" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/99-default.preset b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/99-default.preset new file mode 100644 index 000000000..1f29b5059 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/99-default.preset @@ -0,0 +1 @@ +disable * diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/init b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/init new file mode 100644 index 000000000..ea52be482 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/init @@ -0,0 +1,104 @@ +#!/bin/sh + +### BEGIN INIT INFO +# Provides: udev +# Required-Start: mountvirtfs +# Required-Stop: +# Default-Start: S +# Default-Stop: +# Short-Description: Start udevd, populate /dev and load drivers. +### END INIT INFO + +. /etc/init.d/functions + +export TZ=/etc/localtime + +[ -d /sys/class ] || exit 1 +[ -r /proc/mounts ] || exit 1 +[ -x @UDEVD@ ] || exit 1 +[ -f /etc/default/udev-cache ] && . /etc/default/udev-cache +[ -f /etc/udev/udev.conf ] && . /etc/udev/udev.conf + +readfile () { + filename=$1 + READDATA="" + if [ -r $filename ]; then + while read line; do + READDATA="$READDATA$line" + done < $filename + fi +} + +case "$1" in + start) + export ACTION=add + # propagate /dev from /sys + echo "Starting udev" + + # mount the devtmpfs on /dev, if not already done + LANG=C awk '$2 == "/dev" && ($3 == "devtmpfs") { exit 1 }' /proc/mounts && { + mount -n -o mode=0755 -t devtmpfs none "/dev" + } + [ -e /dev/pts ] || mkdir -m 0755 /dev/pts + [ -e /dev/shm ] || mkdir -m 1777 /dev/shm + mount -a -t tmpfs 2>/dev/null + + # cache handling + if [ "$DEVCACHE" != "" ]; then + readfile /proc/version + VERSION="$READDATA" + readfile /proc/cmdline + CMDLINE="$READDATA" + readfile /proc/devices + DEVICES="$READDATA" + readfile /proc/atags + ATAGS="$READDATA" + + if [ -e $DEVCACHE ]; then + readfile /etc/udev/cache.data + if [ "$READDATA" = "$VERSION$CMDLINE$DEVICES$ATAGS" ]; then + (cd /; tar xf $DEVCACHE > /dev/null 2>&1) + not_first_boot=1 + [ "$VERBOSE" != "no" ] && echo "udev: using cache file $DEVCACHE" + [ -e /dev/shm/udev.cache ] && rm -f /dev/shm/udev.cache + else + echo "$VERSION$CMDLINE$DEVICES$ATAGS" > /dev/shm/udev.cache + fi + else + echo "$VERSION$CMDLINE$DEVICES$ATAGS" > /dev/shm/udev.cache + fi + fi + + # make_extra_nodes + killproc systemd-udevd > "/dev/null" 2>&1 + + # trigger the sorted events + echo -e '\000\000\000\000' > /proc/sys/kernel/hotplug + @UDEVD@ -d + + udevadm control --env=STARTUP=1 + if [ "$not_first_boot" != "" ];then + udevadm trigger --action=add --subsystem-nomatch=tty --subsystem-nomatch=mem --subsystem-nomatch=vc --subsystem-nomatch=vtconsole --subsystem-nomatch=misc --subsystem-nomatch=dcon --subsystem-nomatch=pci_bus --subsystem-nomatch=graphics --subsystem-nomatch=backlight --subsystem-nomatch=video4linux --subsystem-nomatch=platform + (udevadm settle --timeout=3; udevadm control --env=STARTUP=)& + else + udevadm trigger --action=add + udevadm settle + fi + ;; + stop) + echo "Stopping udevd" + start-stop-daemon --stop --name systemd-udevd --quiet + ;; + restart) + $0 stop + sleep 1 + $0 start + ;; + status) + status systemd-udevd + ;; + *) + echo "Usage: $0 {start|stop|status|restart}" + exit 1 +esac +exit 0 diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/org.freedesktop.hostname1_no_polkit.conf b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/org.freedesktop.hostname1_no_polkit.conf new file mode 100644 index 000000000..f4d0271cd --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/org.freedesktop.hostname1_no_polkit.conf @@ -0,0 +1,11 @@ + + + + + + + + + + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/systemd-pager.sh b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/systemd-pager.sh new file mode 100644 index 000000000..86e3e0ab7 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/systemd-pager.sh @@ -0,0 +1,7 @@ +# Systemd expect a color capable pager, however the less provided +# by busybox is not. This make many interaction with systemd pretty +# annoying. As a workaround we disable the systemd pager if less +# is not the GNU version. +if ! less -V > /dev/null 2>&1 ; then + export SYSTEMD_PAGER= +fi diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/touchscreen.rules b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/touchscreen.rules new file mode 100644 index 000000000..d83fd1673 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/touchscreen.rules @@ -0,0 +1,18 @@ +# There are a number of modifiers that are allowed to be used in some +# of the different fields. They provide the following subsitutions: +# +# %n the "kernel number" of the device. +# For example, 'sda3' has a "kernel number" of '3' +# %e the smallest number for that name which does not matches an existing node +# %k the kernel name for the device +# %M the kernel major number for the device +# %m the kernel minor number for the device +# %b the bus id for the device +# %c the string returned by the PROGRAM +# %s{filename} the content of a sysfs attribute +# %% the '%' char itself +# + +# Create a symlink to any touchscreen input device +SUBSYSTEM=="input", KERNEL=="event[0-9]*", ATTRS{modalias}=="input:*-e0*,3,*a0,1,*18,*", SYMLINK+="input/touchscreen0" +SUBSYSTEM=="input", KERNEL=="event[0-9]*", ATTRS{modalias}=="ads7846", SYMLINK+="input/touchscreen0" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd_248.3.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd_248.3.bb new file mode 100644 index 000000000..37607708f --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd_248.3.bb @@ -0,0 +1,772 @@ +require systemd.inc + +PROVIDES = "udev" + +PE = "1" + +DEPENDS = "intltool-native gperf-native libcap util-linux" + +SECTION = "base/shell" + +inherit useradd pkgconfig meson perlnative update-rc.d update-alternatives qemu systemd gettext bash-completion manpages features_check + +# As this recipe builds udev, respect systemd being in DISTRO_FEATURES so +# that we don't build both udev and systemd in world builds. +REQUIRED_DISTRO_FEATURES = "systemd" + +SRC_URI += " \ + file://touchscreen.rules \ + file://00-create-volatile.conf \ + ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', 'file://org.freedesktop.hostname1_no_polkit.conf', '', d)} \ + ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', 'file://00-hostnamed-network-user.conf', '', d)} \ + file://init \ + file://99-default.preset \ + file://systemd-pager.sh \ + file://0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch \ + file://0003-implment-systemd-sysv-install-for-OE.patch \ + file://0001-systemd.pc.in-use-ROOTPREFIX-without-suffixed-slash.patch \ + file://0001-test-parse-argument-Include-signal.h.patch \ + " + +# patches needed by musl +SRC_URI_append_libc-musl = " ${SRC_URI_MUSL}" +SRC_URI_MUSL = "\ + file://0002-don-t-use-glibc-specific-qsort_r.patch \ + file://0003-missing_type.h-add-__compare_fn_t-and-comparison_fn_.patch \ + file://0004-add-fallback-parse_printf_format-implementation.patch \ + file://0005-src-basic-missing.h-check-for-missing-strndupa.patch \ + file://0006-Include-netinet-if_ether.h.patch \ + file://0007-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch \ + file://0008-add-missing-FTW_-macros-for-musl.patch \ + file://0009-fix-missing-of-__register_atfork-for-non-glibc-build.patch \ + file://0010-Use-uintmax_t-for-handling-rlim_t.patch \ + file://0011-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch \ + file://0012-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch \ + file://0013-Define-glibc-compatible-basename-for-non-glibc-syste.patch \ + file://0014-Do-not-disable-buffering-when-writing-to-oom_score_a.patch \ + file://0015-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch \ + file://0016-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch \ + file://0017-missing_type.h-add-__compar_d_fn_t-definition.patch \ + file://0018-avoid-redefinition-of-prctl_mm_map-structure.patch \ + file://0019-Handle-missing-LOCK_EX.patch \ + file://0020-Fix-incompatible-pointer-type-struct-sockaddr_un.patch \ + file://0021-test-json.c-define-M_PIl.patch \ + file://0022-do-not-disable-buffer-in-writing-files.patch \ + file://0025-Handle-__cpu_mask-usage.patch \ + file://0026-Handle-missing-gshadow.patch \ + file://0028-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch \ + " + +PAM_PLUGINS = " \ + pam-plugin-unix \ + pam-plugin-loginuid \ + pam-plugin-keyinit \ +" + +PACKAGECONFIG ??= " \ + ${@bb.utils.filter('DISTRO_FEATURES', 'acl audit efi ldconfig pam selinux smack usrmerge polkit seccomp', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'rfkill', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'xkbcommon', '', d)} \ + backlight \ + binfmt \ + gshadow \ + hibernate \ + hostnamed \ + idn \ + ima \ + kmod \ + localed \ + logind \ + machined \ + myhostname \ + networkd \ + nss \ + nss-mymachines \ + nss-resolve \ + quotacheck \ + randomseed \ + resolved \ + set-time-epoch \ + sysusers \ + sysvinit \ + timedated \ + timesyncd \ + userdb \ + utmp \ + vconsole \ + xz \ +" + +PACKAGECONFIG_remove_libc-musl = " \ + gshadow \ + idn \ + localed \ + myhostname \ + nss \ + nss-mymachines \ + nss-resolve \ + sysusers \ + userdb \ + utmp \ +" + +CFLAGS_append_libc-musl = " -D__UAPI_DEF_ETHHDR=0 " + +# Some of the dependencies are weak-style recommends - if not available at runtime, +# systemd won't fail but the library-related feature will be skipped with a warning. + +# Use the upstream systemd serial-getty@.service and rely on +# systemd-getty-generator instead of using the OE-core specific +# systemd-serialgetty.bb - not enabled by default. +PACKAGECONFIG[serial-getty-generator] = "" + +PACKAGECONFIG[acl] = "-Dacl=true,-Dacl=false,acl" +PACKAGECONFIG[audit] = "-Daudit=true,-Daudit=false,audit" +PACKAGECONFIG[backlight] = "-Dbacklight=true,-Dbacklight=false" +PACKAGECONFIG[binfmt] = "-Dbinfmt=true,-Dbinfmt=false" +PACKAGECONFIG[bzip2] = "-Dbzip2=true,-Dbzip2=false,bzip2" +PACKAGECONFIG[cgroupv2] = "-Ddefault-hierarchy=unified,-Ddefault-hierarchy=hybrid" +PACKAGECONFIG[coredump] = "-Dcoredump=true,-Dcoredump=false" +PACKAGECONFIG[cryptsetup] = "-Dlibcryptsetup=true,-Dlibcryptsetup=false,cryptsetup,,cryptsetup" +PACKAGECONFIG[dbus] = "-Ddbus=true,-Ddbus=false,dbus" +PACKAGECONFIG[efi] = "-Defi=true,-Defi=false" +PACKAGECONFIG[gnu-efi] = "-Dgnu-efi=true -Defi-libdir=${STAGING_LIBDIR} -Defi-includedir=${STAGING_INCDIR}/efi,-Dgnu-efi=false,gnu-efi" +PACKAGECONFIG[elfutils] = "-Delfutils=true,-Delfutils=false,elfutils" +PACKAGECONFIG[firstboot] = "-Dfirstboot=true,-Dfirstboot=false" +# Sign the journal for anti-tampering +PACKAGECONFIG[gcrypt] = "-Dgcrypt=true,-Dgcrypt=false,libgcrypt" +PACKAGECONFIG[gnutls] = "-Dgnutls=true,-Dgnutls=false,gnutls" +PACKAGECONFIG[gshadow] = "-Dgshadow=true,-Dgshadow=false" +PACKAGECONFIG[hibernate] = "-Dhibernate=true,-Dhibernate=false" +PACKAGECONFIG[hostnamed] = "-Dhostnamed=true,-Dhostnamed=false" +PACKAGECONFIG[idn] = "-Didn=true,-Didn=false" +PACKAGECONFIG[ima] = "-Dima=true,-Dima=false" +# importd requires journal-upload/xz/zlib/bzip2/gcrypt +PACKAGECONFIG[importd] = "-Dimportd=true,-Dimportd=false" +# Update NAT firewall rules +PACKAGECONFIG[iptc] = "-Dlibiptc=true,-Dlibiptc=false,iptables" +PACKAGECONFIG[journal-upload] = "-Dlibcurl=true,-Dlibcurl=false,curl" +PACKAGECONFIG[kmod] = "-Dkmod=true,-Dkmod=false,kmod" +PACKAGECONFIG[ldconfig] = "-Dldconfig=true,-Dldconfig=false,,ldconfig" +PACKAGECONFIG[libidn] = "-Dlibidn=true,-Dlibidn=false,libidn,,libidn" +PACKAGECONFIG[libidn2] = "-Dlibidn2=true,-Dlibidn2=false,libidn2,,libidn2" +PACKAGECONFIG[localed] = "-Dlocaled=true,-Dlocaled=false" +PACKAGECONFIG[logind] = "-Dlogind=true,-Dlogind=false" +PACKAGECONFIG[lz4] = "-Dlz4=true,-Dlz4=false,lz4" +PACKAGECONFIG[machined] = "-Dmachined=true,-Dmachined=false" +PACKAGECONFIG[manpages] = "-Dman=true,-Dman=false,libxslt-native xmlto-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native" +PACKAGECONFIG[microhttpd] = "-Dmicrohttpd=true,-Dmicrohttpd=false,libmicrohttpd" +PACKAGECONFIG[myhostname] = "-Dnss-myhostname=true,-Dnss-myhostname=false,,libnss-myhostname" +PACKAGECONFIG[networkd] = "-Dnetworkd=true,-Dnetworkd=false" +PACKAGECONFIG[nss] = "-Dnss-systemd=true,-Dnss-systemd=false" +PACKAGECONFIG[nss-mymachines] = "-Dnss-mymachines=true,-Dnss-mymachines=false" +PACKAGECONFIG[nss-resolve] = "-Dnss-resolve=true,-Dnss-resolve=false" +PACKAGECONFIG[oomd] = "-Doomd=true,-Doomd=false" +PACKAGECONFIG[openssl] = "-Dopenssl=true,-Dopenssl=false,openssl" +PACKAGECONFIG[pam] = "-Dpam=true,-Dpam=false,libpam,${PAM_PLUGINS}" +PACKAGECONFIG[pcre2] = "-Dpcre2=true,-Dpcre2=false,libpcre2" +PACKAGECONFIG[polkit] = "-Dpolkit=true,-Dpolkit=false" +# If polkit is disabled and networkd+hostnamed are in use, enabling this option and +# using dbus-broker will allow networkd to be authorized to change the +# hostname without acquiring additional privileges +PACKAGECONFIG[polkit_hostnamed_fallback] = ",,,,dbus-broker,polkit" +PACKAGECONFIG[portabled] = "-Dportabled=true,-Dportabled=false" +PACKAGECONFIG[qrencode] = "-Dqrencode=true,-Dqrencode=false,qrencode,,qrencode" +PACKAGECONFIG[quotacheck] = "-Dquotacheck=true,-Dquotacheck=false" +PACKAGECONFIG[randomseed] = "-Drandomseed=true,-Drandomseed=false" +PACKAGECONFIG[resolved] = "-Dresolve=true,-Dresolve=false" +PACKAGECONFIG[rfkill] = "-Drfkill=true,-Drfkill=false" +PACKAGECONFIG[seccomp] = "-Dseccomp=true,-Dseccomp=false,libseccomp" +PACKAGECONFIG[selinux] = "-Dselinux=true,-Dselinux=false,libselinux,initscripts-sushell" +PACKAGECONFIG[smack] = "-Dsmack=true,-Dsmack=false" +PACKAGECONFIG[sysusers] = "-Dsysusers=true,-Dsysusers=false" +PACKAGECONFIG[sysvinit] = "-Dsysvinit-path=${sysconfdir}/init.d -Dsysvrcnd-path=${sysconfdir},-Dsysvinit-path= -Dsysvrcnd-path=,,systemd-compat-units update-rc.d" +# When enabled use reproducble build timestamp if set as time epoch, +# or build time if not. When disabled, time epoch is unset. +def build_epoch(d): + epoch = d.getVar('SOURCE_DATE_EPOCH') or "-1" + return '-Dtime-epoch=%d' % int(epoch) +PACKAGECONFIG[set-time-epoch] = "${@build_epoch(d)},-Dtime-epoch=0" +PACKAGECONFIG[timedated] = "-Dtimedated=true,-Dtimedated=false" +PACKAGECONFIG[timesyncd] = "-Dtimesyncd=true,-Dtimesyncd=false" +PACKAGECONFIG[usrmerge] = "-Dsplit-usr=false,-Dsplit-usr=true" +PACKAGECONFIG[sbinmerge] = "-Dsplit-bin=false,-Dsplit-bin=true" +PACKAGECONFIG[userdb] = "-Duserdb=true,-Duserdb=false" +PACKAGECONFIG[utmp] = "-Dutmp=true,-Dutmp=false" +PACKAGECONFIG[valgrind] = "-DVALGRIND=1,,valgrind" +PACKAGECONFIG[vconsole] = "-Dvconsole=true,-Dvconsole=false,,${PN}-vconsole-setup" +PACKAGECONFIG[xdg-autostart] = "-Dxdg-autostart=true,-Dxdg-autostart=false" +# Verify keymaps on locale change +PACKAGECONFIG[xkbcommon] = "-Dxkbcommon=true,-Dxkbcommon=false,libxkbcommon" +PACKAGECONFIG[xz] = "-Dxz=true,-Dxz=false,xz" +PACKAGECONFIG[zlib] = "-Dzlib=true,-Dzlib=false,zlib" + +# Helper variables to clarify locations. This mirrors the logic in systemd's +# build system. +rootprefix ?= "${root_prefix}" +rootlibdir ?= "${base_libdir}" +rootlibexecdir = "${rootprefix}/lib" + +# This links udev statically with systemd helper library. +# Otherwise udev package would depend on systemd package (which has the needed shared library), +# and always pull it into images. +EXTRA_OEMESON += "-Dlink-udev-shared=false" + +EXTRA_OEMESON += "-Dnobody-user=nobody \ + -Dnobody-group=nobody \ + -Drootlibdir=${rootlibdir} \ + -Drootprefix=${rootprefix} \ + -Ddefault-locale=C \ + -Dmode=release \ + -Dsystem-alloc-uid-min=101 \ + -Dsystem-uid-max=999 \ + -Dsystem-alloc-gid-min=101 \ + -Dsystem-gid-max=999 \ + " + +# Hardcode target binary paths to avoid using paths from sysroot +EXTRA_OEMESON += "-Dkexec-path=${sbindir}/kexec \ + -Dkmod-path=${base_bindir}/kmod \ + -Dmount-path=${base_bindir}/mount \ + -Dquotacheck-path=${sbindir}/quotacheck \ + -Dquotaon-path=${sbindir}/quotaon \ + -Dsulogin-path=${base_sbindir}/sulogin \ + -Dnologin-path=${base_sbindir}/nologin \ + -Dumount-path=${base_bindir}/umount" + +do_install() { + meson_do_install + install -d ${D}/${base_sbindir} + if ${@bb.utils.contains('PACKAGECONFIG', 'serial-getty-generator', 'false', 'true', d)}; then + # Provided by a separate recipe + rm ${D}${systemd_unitdir}/system/serial-getty* -f + fi + + # Provide support for initramfs + [ ! -e ${D}/init ] && ln -s ${rootlibexecdir}/systemd/systemd ${D}/init + [ ! -e ${D}/${base_sbindir}/udevd ] && ln -s ${rootlibexecdir}/systemd/systemd-udevd ${D}/${base_sbindir}/udevd + + install -d ${D}${sysconfdir}/udev/rules.d/ + install -d ${D}${sysconfdir}/tmpfiles.d + for rule in $(find ${WORKDIR} -maxdepth 1 -type f -name "*.rules"); do + install -m 0644 $rule ${D}${sysconfdir}/udev/rules.d/ + done + + install -m 0644 ${WORKDIR}/00-create-volatile.conf ${D}${sysconfdir}/tmpfiles.d/ + + if ${@bb.utils.contains('DISTRO_FEATURES','sysvinit','true','false',d)}; then + install -d ${D}${sysconfdir}/init.d + install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/systemd-udevd + sed -i s%@UDEVD@%${rootlibexecdir}/systemd/systemd-udevd% ${D}${sysconfdir}/init.d/systemd-udevd + install -Dm 0755 ${S}/src/systemctl/systemd-sysv-install.SKELETON ${D}${systemd_unitdir}/systemd-sysv-install + fi + + chown root:systemd-journal ${D}/${localstatedir}/log/journal + + # Delete journal README, as log can be symlinked inside volatile. + rm -f ${D}/${localstatedir}/log/README + + # journal-remote creates this at start + rm -rf ${D}/${localstatedir}/log/journal/remote + + install -d ${D}${systemd_unitdir}/system/graphical.target.wants + install -d ${D}${systemd_unitdir}/system/multi-user.target.wants + install -d ${D}${systemd_unitdir}/system/poweroff.target.wants + install -d ${D}${systemd_unitdir}/system/reboot.target.wants + install -d ${D}${systemd_unitdir}/system/rescue.target.wants + + # Create symlinks for systemd-update-utmp-runlevel.service + if ${@bb.utils.contains('PACKAGECONFIG', 'utmp', 'true', 'false', d)}; then + ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_unitdir}/system/graphical.target.wants/systemd-update-utmp-runlevel.service + ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_unitdir}/system/multi-user.target.wants/systemd-update-utmp-runlevel.service + ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_unitdir}/system/poweroff.target.wants/systemd-update-utmp-runlevel.service + ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_unitdir}/system/reboot.target.wants/systemd-update-utmp-runlevel.service + ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_unitdir}/system/rescue.target.wants/systemd-update-utmp-runlevel.service + fi + + # this file is needed to exist if networkd is disabled but timesyncd is still in use since timesyncd checks it + # for existence else it fails + if [ -s ${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf ]; then + ${@bb.utils.contains('PACKAGECONFIG', 'networkd', ':', 'sed -i -e "\$ad /run/systemd/netif/links 0755 root root -" ${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf', d)} + fi + if ! ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'true', 'false', d)}; then + echo 'L! ${sysconfdir}/resolv.conf - - - - ../run/systemd/resolve/resolv.conf' >>${D}${exec_prefix}/lib/tmpfiles.d/etc.conf + echo 'd /run/systemd/resolve 0755 root root -' >>${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf + echo 'f /run/systemd/resolve/resolv.conf 0644 root root' >>${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf + ln -s ../run/systemd/resolve/resolv.conf ${D}${sysconfdir}/resolv-conf.systemd + else + sed -i -e "s%^L! /etc/resolv.conf.*$%L! /etc/resolv.conf - - - - ../run/systemd/resolve/resolv.conf%g" ${D}${exec_prefix}/lib/tmpfiles.d/etc.conf + ln -s ../run/systemd/resolve/resolv.conf ${D}${sysconfdir}/resolv-conf.systemd + fi + if ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'false', 'true', d)}; then + rm ${D}${exec_prefix}/lib/tmpfiles.d/x11.conf + rm -r ${D}${sysconfdir}/X11 + fi + + # If polkit is setup fixup permissions and ownership + if ${@bb.utils.contains('PACKAGECONFIG', 'polkit', 'true', 'false', d)}; then + if [ -d ${D}${datadir}/polkit-1/rules.d ]; then + chmod 700 ${D}${datadir}/polkit-1/rules.d + chown polkitd:root ${D}${datadir}/polkit-1/rules.d + fi + fi + + # If polkit is not available and a fallback was requested, install a drop-in that allows networkd to + # request hostname changes via DBUS without elevating its privileges + if ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', 'true', 'false', d)}; then + install -d ${D}${systemd_unitdir}/system/systemd-hostnamed.service.d/ + install -m 0644 ${WORKDIR}/00-hostnamed-network-user.conf ${D}${systemd_unitdir}/system/systemd-hostnamed.service.d/ + install -d ${D}${datadir}/dbus-1/system.d/ + install -m 0644 ${WORKDIR}/org.freedesktop.hostname1_no_polkit.conf ${D}${datadir}/dbus-1/system.d/ + fi + + # create link for existing udev rules + ln -s ${base_bindir}/udevadm ${D}${base_sbindir}/udevadm + + # duplicate udevadm for postinst script + install -d ${D}${libexecdir} + ln ${D}${base_bindir}/udevadm ${D}${libexecdir}/${MLPREFIX}udevadm + + # install default policy for presets + # https://www.freedesktop.org/wiki/Software/systemd/Preset/#howto + install -Dm 0644 ${WORKDIR}/99-default.preset ${D}${systemd_unitdir}/system-preset/99-default.preset + + # add a profile fragment to disable systemd pager with busybox less + install -Dm 0644 ${WORKDIR}/systemd-pager.sh ${D}${sysconfdir}/profile.d/systemd-pager.sh +} + +python populate_packages_prepend (){ + systemdlibdir = d.getVar("rootlibdir") + do_split_packages(d, systemdlibdir, '^lib(.*)\.so\.*', 'lib%s', 'Systemd %s library', extra_depends='', allow_links=True) +} +PACKAGES_DYNAMIC += "^lib(udev|systemd|nss).*" + +PACKAGE_BEFORE_PN = "\ + ${PN}-gui \ + ${PN}-vconsole-setup \ + ${PN}-initramfs \ + ${PN}-analyze \ + ${PN}-kernel-install \ + ${PN}-rpm-macros \ + ${PN}-binfmt \ + ${PN}-zsh-completion \ + ${PN}-container \ + ${PN}-journal-gatewayd \ + ${PN}-journal-upload \ + ${PN}-journal-remote \ + ${PN}-extra-utils \ + ${PN}-udev-rules \ + udev \ + udev-hwdb \ +" + +SUMMARY_${PN}-container = "Tools for containers and VMs" +DESCRIPTION_${PN}-container = "Systemd tools to spawn and manage containers and virtual machines." + +SUMMARY_${PN}-journal-gatewayd = "HTTP server for journal events" +DESCRIPTION_${PN}-journal-gatewayd = "systemd-journal-gatewayd serves journal events over the network. Clients must connect using HTTP. The server listens on port 19531 by default." + +SUMMARY_${PN}-journal-upload = "Send journal messages over the network" +DESCRIPTION_${PN}-journal-upload = "systemd-journal-upload uploads journal entries to a specified URL." + +SUMMARY_${PN}-journal-remote = "Receive journal messages over the network" +DESCRIPTION_${PN}-journal-remote = "systemd-journal-remote is a command to receive serialized journal events and store them to journal files." + +SYSTEMD_PACKAGES = "${@bb.utils.contains('PACKAGECONFIG', 'binfmt', '${PN}-binfmt', '', d)} \ + ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-gatewayd', '', d)} \ + ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-remote', '', d)} \ + ${@bb.utils.contains('PACKAGECONFIG', 'journal-upload', '${PN}-journal-upload', '', d)} \ +" +SYSTEMD_SERVICE_${PN}-binfmt = "systemd-binfmt.service" + +USERADD_PACKAGES = "${PN} ${PN}-extra-utils \ + ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-gateway', '', d)} \ + ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-remote', '', d)} \ + ${@bb.utils.contains('PACKAGECONFIG', 'journal-upload', '${PN}-journal-upload', '', d)} \ +" +GROUPADD_PARAM_${PN} = "-r systemd-journal;" +GROUPADD_PARAM_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', '-r systemd-hostname;', '', d)}" +USERADD_PARAM_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'coredump', '--system -d / -M --shell /sbin/nologin systemd-coredump;', '', d)}" +USERADD_PARAM_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'networkd', '--system -d / -M --shell /sbin/nologin systemd-network;', '', d)}" +USERADD_PARAM_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'polkit', '--system --no-create-home --user-group --home-dir ${sysconfdir}/polkit-1 polkitd;', '', d)}" +USERADD_PARAM_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'resolved', '--system -d / -M --shell /sbin/nologin systemd-resolve;', '', d)}" +USERADD_PARAM_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'timesyncd', '--system -d / -M --shell /sbin/nologin systemd-timesync;', '', d)}" +USERADD_PARAM_${PN}-extra-utils = "--system -d / -M --shell /sbin/nologin systemd-bus-proxy" +USERADD_PARAM_${PN}-journal-gateway = "--system -d / -M --shell /sbin/nologin systemd-journal-gateway" +USERADD_PARAM_${PN}-journal-remote = "--system -d / -M --shell /sbin/nologin systemd-journal-remote" +USERADD_PARAM_${PN}-journal-upload = "--system -d / -M --shell /sbin/nologin systemd-journal-upload" + +FILES_${PN}-analyze = "${bindir}/systemd-analyze" + +FILES_${PN}-initramfs = "/init" +RDEPENDS_${PN}-initramfs = "${PN}" + +FILES_${PN}-gui = "${bindir}/systemadm" + +FILES_${PN}-vconsole-setup = "${rootlibexecdir}/systemd/systemd-vconsole-setup \ + ${systemd_unitdir}/system/systemd-vconsole-setup.service \ + ${systemd_unitdir}/system/sysinit.target.wants/systemd-vconsole-setup.service" + +RDEPENDS_${PN}-kernel-install += "bash" +FILES_${PN}-kernel-install = "${bindir}/kernel-install \ + ${sysconfdir}/kernel/ \ + ${exec_prefix}/lib/kernel \ + " +FILES_${PN}-rpm-macros = "${exec_prefix}/lib/rpm \ + " + +FILES_${PN}-zsh-completion = "${datadir}/zsh/site-functions" + +FILES_${PN}-binfmt = "${sysconfdir}/binfmt.d/ \ + ${exec_prefix}/lib/binfmt.d \ + ${rootlibexecdir}/systemd/systemd-binfmt \ + ${systemd_unitdir}/system/proc-sys-fs-binfmt_misc.* \ + ${systemd_unitdir}/system/systemd-binfmt.service" +RRECOMMENDS_${PN}-binfmt = "kernel-module-binfmt-misc" + +RRECOMMENDS_${PN}-vconsole-setup = "kbd kbd-consolefonts kbd-keymaps" + + +FILES_${PN}-journal-gatewayd = "${rootlibexecdir}/systemd/systemd-journal-gatewayd \ + ${systemd_system_unitdir}/systemd-journal-gatewayd.service \ + ${systemd_system_unitdir}/systemd-journal-gatewayd.socket \ + ${systemd_system_unitdir}/sockets.target.wants/systemd-journal-gatewayd.socket \ + ${datadir}/systemd/gatewayd/browse.html \ + " +SYSTEMD_SERVICE_${PN}-journal-gatewayd = "systemd-journal-gatewayd.socket" + +FILES_${PN}-journal-upload = "${rootlibexecdir}/systemd/systemd-journal-upload \ + ${systemd_system_unitdir}/systemd-journal-upload.service \ + ${sysconfdir}/systemd/journal-upload.conf \ + " +SYSTEMD_SERVICE_${PN}-journal-upload = "systemd-journal-upload.service" + +FILES_${PN}-journal-remote = "${rootlibexecdir}/systemd/systemd-journal-remote \ + ${sysconfdir}/systemd/journal-remote.conf \ + ${systemd_system_unitdir}/systemd-journal-remote.service \ + ${systemd_system_unitdir}/systemd-journal-remote.socket \ + " +SYSTEMD_SERVICE_${PN}-journal-remote = "systemd-journal-remote.socket" + + +FILES_${PN}-container = "${sysconfdir}/dbus-1/system.d/org.freedesktop.import1.conf \ + ${sysconfdir}/dbus-1/system.d/org.freedesktop.machine1.conf \ + ${sysconfdir}/systemd/system/multi-user.target.wants/machines.target \ + ${base_bindir}/machinectl \ + ${bindir}/systemd-nspawn \ + ${nonarch_libdir}/systemd/import-pubring.gpg \ + ${systemd_system_unitdir}/busnames.target.wants/org.freedesktop.import1.busname \ + ${systemd_system_unitdir}/busnames.target.wants/org.freedesktop.machine1.busname \ + ${systemd_system_unitdir}/local-fs.target.wants/var-lib-machines.mount \ + ${systemd_system_unitdir}/machines.target.wants/var-lib-machines.mount \ + ${systemd_system_unitdir}/remote-fs.target.wants/var-lib-machines.mount \ + ${systemd_system_unitdir}/machine.slice \ + ${systemd_system_unitdir}/machines.target \ + ${systemd_system_unitdir}/org.freedesktop.import1.busname \ + ${systemd_system_unitdir}/org.freedesktop.machine1.busname \ + ${systemd_system_unitdir}/systemd-importd.service \ + ${systemd_system_unitdir}/systemd-machined.service \ + ${systemd_system_unitdir}/dbus-org.freedesktop.machine1.service \ + ${systemd_system_unitdir}/var-lib-machines.mount \ + ${rootlibexecdir}/systemd/systemd-import \ + ${rootlibexecdir}/systemd/systemd-importd \ + ${rootlibexecdir}/systemd/systemd-machined \ + ${rootlibexecdir}/systemd/systemd-pull \ + ${exec_prefix}/lib/tmpfiles.d/systemd-nspawn.conf \ + ${exec_prefix}/lib/tmpfiles.d/README \ + ${systemd_system_unitdir}/systemd-nspawn@.service \ + ${libdir}/libnss_mymachines.so.2 \ + ${datadir}/dbus-1/system-services/org.freedesktop.import1.service \ + ${datadir}/dbus-1/system-services/org.freedesktop.machine1.service \ + ${datadir}/dbus-1/system.d/org.freedesktop.import1.conf \ + ${datadir}/dbus-1/system.d/org.freedesktop.machine1.conf \ + ${datadir}/polkit-1/actions/org.freedesktop.import1.policy \ + ${datadir}/polkit-1/actions/org.freedesktop.machine1.policy \ + " + +# "machinectl import-tar" uses "tar --numeric-owner", not supported by busybox. +RRECOMMENDS_${PN}-container += "\ + ${PN}-journal-gatewayd \ + ${PN}-journal-remote \ + ${PN}-journal-upload \ + kernel-module-dm-mod \ + kernel-module-loop \ + kernel-module-tun \ + tar \ + " + +FILES_${PN}-extra-utils = "\ + ${base_bindir}/systemd-escape \ + ${base_bindir}/systemd-inhibit \ + ${bindir}/systemd-detect-virt \ + ${bindir}/systemd-dissect \ + ${bindir}/systemd-path \ + ${bindir}/systemd-run \ + ${bindir}/systemd-cat \ + ${bindir}/systemd-delta \ + ${bindir}/systemd-cgls \ + ${bindir}/systemd-cgtop \ + ${bindir}/systemd-stdio-bridge \ + ${bindir}/systemd-sysext \ + ${base_bindir}/systemd-ask-password \ + ${base_bindir}/systemd-tty-ask-password-agent \ + ${systemd_unitdir}/system/systemd-ask-password-console.path \ + ${systemd_unitdir}/system/systemd-ask-password-console.service \ + ${systemd_unitdir}/system/systemd-ask-password-wall.path \ + ${systemd_unitdir}/system/systemd-ask-password-wall.service \ + ${systemd_unitdir}/system/sysinit.target.wants/systemd-ask-password-console.path \ + ${systemd_unitdir}/system/sysinit.target.wants/systemd-ask-password-wall.path \ + ${systemd_unitdir}/system/multi-user.target.wants/systemd-ask-password-wall.path \ + ${rootlibexecdir}/systemd/systemd-resolve-host \ + ${rootlibexecdir}/systemd/systemd-ac-power \ + ${rootlibexecdir}/systemd/systemd-activate \ + ${rootlibexecdir}/systemd/systemd-bus-proxyd \ + ${systemd_unitdir}/system/systemd-bus-proxyd.service \ + ${systemd_unitdir}/system/systemd-bus-proxyd.socket \ + ${rootlibexecdir}/systemd/systemd-socket-proxyd \ + ${rootlibexecdir}/systemd/systemd-reply-password \ + ${rootlibexecdir}/systemd/systemd-sleep \ + ${rootlibexecdir}/systemd/system-sleep \ + ${systemd_unitdir}/system/systemd-hibernate.service \ + ${systemd_unitdir}/system/systemd-hybrid-sleep.service \ + ${systemd_unitdir}/system/systemd-suspend.service \ + ${systemd_unitdir}/system/sleep.target \ + ${rootlibexecdir}/systemd/systemd-initctl \ + ${systemd_unitdir}/system/systemd-initctl.service \ + ${systemd_unitdir}/system/systemd-initctl.socket \ + ${systemd_unitdir}/system/sockets.target.wants/systemd-initctl.socket \ + ${rootlibexecdir}/systemd/system-generators/systemd-gpt-auto-generator \ + ${rootlibexecdir}/systemd/systemd-cgroups-agent \ +" + +FILES_${PN}-udev-rules = "\ + ${rootlibexecdir}/udev/rules.d/70-uaccess.rules \ + ${rootlibexecdir}/udev/rules.d/71-seat.rules \ + ${rootlibexecdir}/udev/rules.d/73-seat-late.rules \ + ${rootlibexecdir}/udev/rules.d/99-systemd.rules \ +" + +CONFFILES_${PN} = "${sysconfdir}/systemd/coredump.conf \ + ${sysconfdir}/systemd/journald.conf \ + ${sysconfdir}/systemd/logind.conf \ + ${sysconfdir}/systemd/networkd.conf \ + ${sysconfdir}/systemd/pstore.conf \ + ${sysconfdir}/systemd/resolved.conf \ + ${sysconfdir}/systemd/sleep.conf \ + ${sysconfdir}/systemd/system.conf \ + ${sysconfdir}/systemd/timesyncd.conf \ + ${sysconfdir}/systemd/user.conf \ +" + +FILES_${PN} = " ${base_bindir}/* \ + ${base_sbindir}/shutdown \ + ${base_sbindir}/halt \ + ${base_sbindir}/poweroff \ + ${base_sbindir}/runlevel \ + ${base_sbindir}/telinit \ + ${base_sbindir}/resolvconf \ + ${base_sbindir}/reboot \ + ${base_sbindir}/init \ + ${datadir}/dbus-1/services \ + ${datadir}/dbus-1/system-services \ + ${datadir}/polkit-1 \ + ${datadir}/${BPN} \ + ${datadir}/factory \ + ${sysconfdir}/dbus-1/ \ + ${sysconfdir}/modules-load.d/ \ + ${sysconfdir}/pam.d/ \ + ${sysconfdir}/profile.d/ \ + ${sysconfdir}/sysctl.d/ \ + ${sysconfdir}/systemd/ \ + ${sysconfdir}/tmpfiles.d/ \ + ${sysconfdir}/xdg/ \ + ${sysconfdir}/init.d/README \ + ${sysconfdir}/resolv-conf.systemd \ + ${sysconfdir}/X11/xinit/xinitrc.d/* \ + ${rootlibexecdir}/systemd/* \ + ${libdir}/pam.d \ + ${nonarch_libdir}/pam.d \ + ${systemd_unitdir}/* \ + ${base_libdir}/security/*.so \ + /cgroup \ + ${bindir}/systemd* \ + ${bindir}/busctl \ + ${bindir}/coredumpctl \ + ${bindir}/localectl \ + ${bindir}/hostnamectl \ + ${bindir}/resolvectl \ + ${bindir}/timedatectl \ + ${bindir}/bootctl \ + ${bindir}/oomctl \ + ${exec_prefix}/lib/tmpfiles.d/*.conf \ + ${exec_prefix}/lib/systemd \ + ${exec_prefix}/lib/modules-load.d \ + ${exec_prefix}/lib/sysctl.d \ + ${exec_prefix}/lib/sysusers.d \ + ${exec_prefix}/lib/environment.d \ + ${localstatedir} \ + ${rootlibexecdir}/modprobe.d/systemd.conf \ + ${rootlibexecdir}/modprobe.d/README \ + ${datadir}/dbus-1/system.d/org.freedesktop.timedate1.conf \ + ${datadir}/dbus-1/system.d/org.freedesktop.locale1.conf \ + ${datadir}/dbus-1/system.d/org.freedesktop.network1.conf \ + ${datadir}/dbus-1/system.d/org.freedesktop.resolve1.conf \ + ${datadir}/dbus-1/system.d/org.freedesktop.systemd1.conf \ + ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', '${datadir}/dbus-1/system.d/org.freedesktop.hostname1_no_polkit.conf', '', d)} \ + ${datadir}/dbus-1/system.d/org.freedesktop.hostname1.conf \ + ${datadir}/dbus-1/system.d/org.freedesktop.login1.conf \ + ${datadir}/dbus-1/system.d/org.freedesktop.timesync1.conf \ + ${datadir}/dbus-1/system.d/org.freedesktop.portable1.conf \ + ${datadir}/dbus-1/system.d/org.freedesktop.oom1.conf \ + " + +FILES_${PN}-dev += "${base_libdir}/security/*.la ${datadir}/dbus-1/interfaces/ ${sysconfdir}/rpm/macros.systemd" + +RDEPENDS_${PN} += "kmod dbus util-linux-mount util-linux-umount udev (= ${EXTENDPKGV}) systemd-udev-rules util-linux-agetty util-linux-fsck" +RDEPENDS_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'serial-getty-generator', '', 'systemd-serialgetty', d)}" +RDEPENDS_${PN} += "volatile-binds" + +RRECOMMENDS_${PN} += "systemd-extra-utils \ + udev-hwdb \ + e2fsprogs-e2fsck \ + kernel-module-autofs4 kernel-module-unix kernel-module-ipv6 kernel-module-sch-fq-codel \ + os-release \ + systemd-conf \ +" + +INSANE_SKIP_${PN} += "dev-so libdir" +INSANE_SKIP_${PN}-dbg += "libdir" +INSANE_SKIP_${PN}-doc += " libdir" + +RPROVIDES_udev = "hotplug" + +RDEPENDS_udev-hwdb += "udev" + +FILES_udev += "${base_sbindir}/udevd \ + ${rootlibexecdir}/systemd/network/99-default.link \ + ${rootlibexecdir}/systemd/systemd-udevd \ + ${rootlibexecdir}/udev/accelerometer \ + ${rootlibexecdir}/udev/ata_id \ + ${rootlibexecdir}/udev/cdrom_id \ + ${rootlibexecdir}/udev/collect \ + ${rootlibexecdir}/udev/dmi_memory_id \ + ${rootlibexecdir}/udev/fido_id \ + ${rootlibexecdir}/udev/findkeyboards \ + ${rootlibexecdir}/udev/keyboard-force-release.sh \ + ${rootlibexecdir}/udev/keymap \ + ${rootlibexecdir}/udev/mtd_probe \ + ${rootlibexecdir}/udev/scsi_id \ + ${rootlibexecdir}/udev/v4l_id \ + ${rootlibexecdir}/udev/keymaps \ + ${rootlibexecdir}/udev/rules.d/50-udev-default.rules \ + ${rootlibexecdir}/udev/rules.d/60-autosuspend.rules \ + ${rootlibexecdir}/udev/rules.d/60-autosuspend-chromiumos.rules \ + ${rootlibexecdir}/udev/rules.d/60-block.rules \ + ${rootlibexecdir}/udev/rules.d/60-cdrom_id.rules \ + ${rootlibexecdir}/udev/rules.d/60-drm.rules \ + ${rootlibexecdir}/udev/rules.d/60-evdev.rules \ + ${rootlibexecdir}/udev/rules.d/60-fido-id.rules \ + ${rootlibexecdir}/udev/rules.d/60-input-id.rules \ + ${rootlibexecdir}/udev/rules.d/60-persistent-alsa.rules \ + ${rootlibexecdir}/udev/rules.d/60-persistent-input.rules \ + ${rootlibexecdir}/udev/rules.d/60-persistent-storage.rules \ + ${rootlibexecdir}/udev/rules.d/60-persistent-storage-tape.rules \ + ${rootlibexecdir}/udev/rules.d/60-persistent-v4l.rules \ + ${rootlibexecdir}/udev/rules.d/60-sensor.rules \ + ${rootlibexecdir}/udev/rules.d/60-serial.rules \ + ${rootlibexecdir}/udev/rules.d/61-autosuspend-manual.rules \ + ${rootlibexecdir}/udev/rules.d/64-btrfs.rules \ + ${rootlibexecdir}/udev/rules.d/70-joystick.rules \ + ${rootlibexecdir}/udev/rules.d/70-memory.rules \ + ${rootlibexecdir}/udev/rules.d/70-mouse.rules \ + ${rootlibexecdir}/udev/rules.d/70-power-switch.rules \ + ${rootlibexecdir}/udev/rules.d/70-touchpad.rules \ + ${rootlibexecdir}/udev/rules.d/75-net-description.rules \ + ${rootlibexecdir}/udev/rules.d/75-probe_mtd.rules \ + ${rootlibexecdir}/udev/rules.d/78-sound-card.rules \ + ${rootlibexecdir}/udev/rules.d/80-drivers.rules \ + ${rootlibexecdir}/udev/rules.d/80-net-setup-link.rules \ + ${rootlibexecdir}/udev/rules.d/90-vconsole.rules \ + ${rootlibexecdir}/udev/rules.d/README \ + ${sysconfdir}/udev \ + ${sysconfdir}/init.d/systemd-udevd \ + ${systemd_unitdir}/system/*udev* \ + ${systemd_unitdir}/system/*.wants/*udev* \ + ${base_bindir}/systemd-hwdb \ + ${base_bindir}/udevadm \ + ${base_sbindir}/udevadm \ + ${libexecdir}/${MLPREFIX}udevadm \ + ${datadir}/bash-completion/completions/udevadm \ + ${systemd_unitdir}/system/systemd-hwdb-update.service \ + " + +FILES_udev-hwdb = "${rootlibexecdir}/udev/hwdb.d \ + " + +RCONFLICTS_${PN} = "tiny-init ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'resolvconf', '', d)}" + +INITSCRIPT_PACKAGES = "udev" +INITSCRIPT_NAME_udev = "systemd-udevd" +INITSCRIPT_PARAMS_udev = "start 03 S ." + +python __anonymous() { + if not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d): + d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1") +} + +python do_warn_musl() { + if d.getVar('TCLIBC') == "musl": + bb.warn("Using systemd with musl is not recommended since it is not supported upstream and some patches are known to be problematic.") +} +addtask warn_musl before do_configure + +ALTERNATIVE_${PN} = "halt reboot shutdown poweroff runlevel ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'resolv-conf', '', d)}" + +ALTERNATIVE_TARGET[resolv-conf] = "${sysconfdir}/resolv-conf.systemd" +ALTERNATIVE_LINK_NAME[resolv-conf] = "${sysconfdir}/resolv.conf" +ALTERNATIVE_PRIORITY[resolv-conf] ?= "50" + +ALTERNATIVE_TARGET[halt] = "${base_bindir}/systemctl" +ALTERNATIVE_LINK_NAME[halt] = "${base_sbindir}/halt" +ALTERNATIVE_PRIORITY[halt] ?= "300" + +ALTERNATIVE_TARGET[reboot] = "${base_bindir}/systemctl" +ALTERNATIVE_LINK_NAME[reboot] = "${base_sbindir}/reboot" +ALTERNATIVE_PRIORITY[reboot] ?= "300" + +ALTERNATIVE_TARGET[shutdown] = "${base_bindir}/systemctl" +ALTERNATIVE_LINK_NAME[shutdown] = "${base_sbindir}/shutdown" +ALTERNATIVE_PRIORITY[shutdown] ?= "300" + +ALTERNATIVE_TARGET[poweroff] = "${base_bindir}/systemctl" +ALTERNATIVE_LINK_NAME[poweroff] = "${base_sbindir}/poweroff" +ALTERNATIVE_PRIORITY[poweroff] ?= "300" + +ALTERNATIVE_TARGET[runlevel] = "${base_bindir}/systemctl" +ALTERNATIVE_LINK_NAME[runlevel] = "${base_sbindir}/runlevel" +ALTERNATIVE_PRIORITY[runlevel] ?= "300" + +pkg_postinst_${PN}_libc-glibc () { + sed -e '/^hosts:/s/\s*\//' \ + -e 's/\(^hosts:.*\)\(\\)\(.*\)\(\\)\(.*\)/\1\2 myhostname \3\4\5/' \ + -i $D${sysconfdir}/nsswitch.conf +} + +pkg_prerm_${PN}_libc-glibc () { + sed -e '/^hosts:/s/\s*\//' \ + -e '/^hosts:/s/\s*myhostname//' \ + -i $D${sysconfdir}/nsswitch.conf +} + +PACKAGE_WRITE_DEPS += "qemu-native" +pkg_postinst_udev-hwdb () { + if test -n "$D"; then + $INTERCEPT_DIR/postinst_intercept update_udev_hwdb ${PKG} mlprefix=${MLPREFIX} binprefix=${MLPREFIX} rootlibexecdir="${rootlibexecdir}" PREFERRED_PROVIDER_udev="${PREFERRED_PROVIDER_udev}" + else + udevadm hwdb --update + fi +} + +pkg_prerm_udev-hwdb () { + rm -f $D${sysconfdir}/udev/hwdb.bin +} From 1a5a0e25b471fe28e8d748acd47e9f52404a2cdf Mon Sep 17 00:00:00 2001 From: "sukil.hong" Date: Tue, 8 Jun 2021 15:08:45 +0900 Subject: [PATCH 0008/2022] ose: systemd=webos6 webos-fluentbit-plugins=12 :Release Notes: Add elfutils package Fix to create crash ticket in clm instead of jira :Detailed Notes: systemd: The elfutils package is used to verify backtrace information by systemd-coredump. webos-fluentbit-plugins: submissions/10..submissions/12 0f237ae Fix some bugs ee05cf3 Revert "out_jira: fix memory leak" aa39cd3 out_jira: fix memory leak c961285 Attach screenshot to ticket 91a75c1 Consider fixed version when creating ticket, and add crashed count. cdcb22c Update jira summary to include the last function in the stacktrace 8dd58c6 Attach /var/log/messages to ticket a2da338 Update to handle crashreport 9689632 Sync common modules and update Logger file b8d7704 filter_webos_systemd: Change property's default value to 'On' and add boottime :Testing Performed: See the CCC jira ticket :QA Notes: None. :Issues Addressed: [WRN-2613] CCC: systemd=webos6 webos-fluentbit-plugins=12 [WRN-2373] Upgrade the systemd version and enable systemd-coredump [WRN-2370] Add a screen-capture to bug ticket [WRN-2369] Create a bug ticket considering to backtrace and fixed history [WRN-2595] Update faultmanager and move libsegfault Change-Id: Id0a341ba88254eab6d9bb41310815180623eaf32 --- meta-webos/recipes-core/systemd/systemd_%.bbappend | 9 +++++++-- .../webos-fluentbit-plugins/webos-fluentbit-plugins.bb | 2 +- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-core/systemd/systemd_%.bbappend b/meta-webos/recipes-core/systemd/systemd_%.bbappend index 7dbb30f4c..365ddd9f7 100644 --- a/meta-webos/recipes-core/systemd/systemd_%.bbappend +++ b/meta-webos/recipes-core/systemd/systemd_%.bbappend @@ -1,6 +1,8 @@ # Copyright (c) 2017-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos5" +EXTENDPRAUTO_append = "webos6" + +inherit webos_prerelease_dep VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS_${PN}-kernel-install_append_class-target = " ${VIRTUAL-RUNTIME_bash}" @@ -18,7 +20,10 @@ PACKAGECONFIG_remove = " \ timesyncd \ " -PACKAGECONFIG_append = "${@bb.utils.contains('DISTRO', 'webos', ' coredump', '', d)}" +PACKAGECONFIG_append = " \ + ${@oe.utils.conditional('WEBOS_DISTRO_PRERELEASE', 'devel', 'coredump', '', d)} \ + ${@oe.utils.conditional('WEBOS_DISTRO_PRERELEASE', 'devel', 'elfutils', '', d)} \ +" # By default systemd's Predictable Network Interface Names policy configured for qemu # Currently we don't support this policy in qemu, so removing from systemd's configuration diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb index 0e583c1da..20f239d21 100644 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7ca DEPENDS = "glib-2.0 luna-service2 json-c libpbnjson fluentbit" RDEPENDS_${PN} = "python3-core python3-requests python3-atlassian-python-api" -WEBOS_VERSION = "1.0.0-10_7f9a2001eb150547d16379be3029c23090d3f759" +WEBOS_VERSION = "1.0.0-12_dc5d1594799e84b90a0dce0816d7dc07d5db58ef" PR = "r1" inherit webos_component From f614519a04cee3a8c5f0cd2bb9c80c93e86708fe Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Thu, 8 Apr 2021 10:45:07 +0900 Subject: [PATCH 0009/2022] Revert "webruntime-common.inc: Add path to find .inc file and remove duplicate" :Release Notes: This reverts commit 04f305b45f9e68c8280343a787557bfe5e619f8c. :Detailed Notes: The change was made when webos-pro build was upgraded to Chromium87. Now we are upgrading all builds including ose and auto, revert the change and make a proper change considering the whole build. :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [PLAT-120352] Prepare OSE/Auto build [PLAT-140636] Refactor webruntime recipes [WRN-2336] CCC: Switch OSE to chromium87 as default webruntime Change-Id: I6fd6ac2b12b237ac47aaacc329e5e2a20b1c35b5 --- meta-webos/recipes-webos/chromium/webruntime-common.inc | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-common.inc b/meta-webos/recipes-webos/chromium/webruntime-common.inc index acdd7766e..ffb38cb14 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-common.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-common.inc @@ -34,6 +34,7 @@ inherit webos_prerelease_dep inherit pythonnative REPO_VERSION := "${@['','_${WEBRUNTIME_REPO_VERSION}'][d.getVar('WEBRUNTIME_REPO_VERSION').strip() != '']}" +require webruntime-repo${REPO_VERSION}.inc WEBOS_REPO_NAME ?= "chromium84" WEBOS_GIT_PARAM_BRANCH_V8 ?= "@chromium84" @@ -47,8 +48,6 @@ SRC_URI_append = "\ ${WEBOSOSE_GIT_REPO_COMPLETE_V8};destsuffix=git/src/v8;name=v8 \ " -require recipes-webos/chromium/webruntime-repo${REPO_VERSION}.inc - ## we don't include SRCPV in PV, so we have to manually include SRCREVs in do_fetch vardeps do_fetch[vardeps] += "SRCREV_v8" SRCREV_FORMAT = "main_v8" From 4e3aff64574cc87f29643be036dfeef1009ea4ae Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Mon, 28 Dec 2020 18:35:47 +0900 Subject: [PATCH 0010/2022] ose: Add webruntime_87=6-r48.0,v87.0.4280.88 wam=r39 Add mksnapshot-cross_87=r0 :Release Notes: Add chromium87 and related changes :Detailed Notes: webruntime_87: ..submissions/6 Add chromium87 and related changes (Refer to CCC ticket for details) webruntime: r47..r48 Remove unused argument wam: r38..r39 Added runtime flags also to Chromium87 mksnapshot-cross_87: r0 Base recipe for mksnapshot of Chromium87 :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [PLAT-120352] Prepare OSE/Auto build [WRN-2336] CCC: Switch OSE to chromium87 as default webruntime Change-Id: Ia200301e94802fb604c4f377e20ba3c17d734088 --- ...0001-absei-cpp-Fix-build-with-gcc-11.patch | 39 ++++++++++++++++ .../0002-perfetto-Fix-build-with-gcc-11.patch | 43 +++++++++++++++++ .../0003-net-Fix-build-with-gcc-11.patch | 36 +++++++++++++++ .../chromium/mksnapshot-cross_87.bb | 46 +++++++++++++++++++ .../chromium/webruntime-common.inc | 6 ++- .../chromium/webruntime-repo_87.inc | 18 ++++++++ .../recipes-webos/chromium/webruntime.inc | 3 +- .../recipes-webos/chromium/webruntime_87.bb | 35 ++++++++++++++ meta-webos/recipes-webos/wam/wam.bb | 10 +++- 9 files changed, 231 insertions(+), 5 deletions(-) create mode 100644 meta-webos/recipes-webos/chromium/files/0001-absei-cpp-Fix-build-with-gcc-11.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0002-perfetto-Fix-build-with-gcc-11.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0003-net-Fix-build-with-gcc-11.patch create mode 100644 meta-webos/recipes-webos/chromium/mksnapshot-cross_87.bb create mode 100644 meta-webos/recipes-webos/chromium/webruntime-repo_87.inc create mode 100644 meta-webos/recipes-webos/chromium/webruntime_87.bb diff --git a/meta-webos/recipes-webos/chromium/files/0001-absei-cpp-Fix-build-with-gcc-11.patch b/meta-webos/recipes-webos/chromium/files/0001-absei-cpp-Fix-build-with-gcc-11.patch new file mode 100644 index 000000000..c0da3e721 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0001-absei-cpp-Fix-build-with-gcc-11.patch @@ -0,0 +1,39 @@ +From f0e4a8dcbe9663255f1aece1fe107c6ec9c09a02 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Mon, 3 May 2021 12:56:57 -0700 +Subject: [PATCH] absei-cpp: Fix build with gcc-11 + +* fixes: +http://gecko.lge.com/Errors/Details/165922 + +FAILED: obj/third_party/abseil-cpp/absl/synchronization/graphcycles_internal/graphcycles.o +i686-webos-linux-g++ -m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=TOPDIR/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/recipe-sysroot -MMD -MF obj/third_party/abseil-cpp/absl/synchronization/graphcycles_internal/graphcycles.o.d -DENABLE_BROWSER_CONTROL_WEBAPI=1 -DENABLE_SAMPLE_WEBAPI=1 -DENABLE_MEMORYMANAGER_WEBAPI=1 -DENABLE_NETWORK_ERROR_PAGE_CONTROLLER_WEBAPI=1 -DOZONE_PLATFORM_WAYLAND_EXTERNAL=1 -DOS_WEBOS=1 -DNEVA_VIDEO_HOLE=1 -DUSE_NEVA_APPRUNTIME=1 -DENABLE_WEBM_VIDEO_CODECS=1 -DUSE_CBE=1 -DUSE_PMLOG=1 -DUSE_NEVA_SUSPEND_MEDIA_CAPTURE=1 -DUSE_FILESCHEME_CODECACHE=1 -DUSE_LOCAL_STORAGE_MANAGER=1 -DWEBOS_SUBMISSION_NUMBER=16 -DUSE_LTTNG=1 -DUSE_UDEV -DUSE_AURA=1 -DUSE_GLIB=1 -DUSE_NSS_CERTS=1 -DUSE_OZONE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DCR_SYSROOT_HASH=d967bcef40477dbc39acef141ff22bf73f3e7cdb -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -DABSL_ALLOCATOR_NOTHROW=1 -I../../git/src/neva -Igen/neva -I../../git/src -Igen -I../../git/src/third_party/abseil-cpp -Wno-unused-variable -fno-strict-aliasing --param=ssp-buffer-size=4 -fstack-protector -funwind-tables -fPIC -pipe -pthread -m32 -msse2 -mfpmath=sse -mmmx -Wno-builtin-macro-redefined -D__DATE__= -D__TIME__= -D__TIMESTAMP__= -O2 -fno-ident -fdata-sections -ffunction-sections -fno-omit-frame-pointer -g0 -fvisibility=hidden -Wno-unused-local-typedefs -Wno-maybe-uninitialized -Wno-deprecated-declarations -Wno-comments -Wno-packed-not-aligned -Wno-attributes -Wno-missing-field-initializers -Wno-unused-parameter -std=gnu++14 -fno-exceptions -fno-rtti --sysroot=../../recipe-sysroot -fvisibility-inlines-hidden -Wno-narrowing -Wno-class-memaccess -c ../../git/src/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc -o obj/third_party/abseil-cpp/absl/synchronization/graphcycles_internal/graphcycles.o +../../git/src/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc: In member function 'void absl::synchronization_internal::GraphCycles::RemoveNode(void*)': +../../git/src/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc:451:26: error: 'numeric_limits' is not a member of 'std' + 451 | if (x->version == std::numeric_limits::max()) { + | ^~~~~~~~~~~~~~ +../../git/src/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc:451:49: error: expected primary-expression before '>' token + 451 | if (x->version == std::numeric_limits::max()) { + | ^ +../../git/src/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc:451:52: error: '::max' has not been declared; did you mean 'std::max'? + 451 | if (x->version == std::numeric_limits::max()) { + | ^~~ + | std::max + +Signed-off-by: Martin Jansa +--- + .../abseil-cpp/absl/synchronization/internal/graphcycles.cc | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc b/src/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +index 19f9aab5b1..ab9d7f80bc 100644 +--- a/src/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc ++++ b/src/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +@@ -36,6 +36,7 @@ + #include "absl/synchronization/internal/graphcycles.h" + + #include ++#include + #include + #include "absl/base/internal/hide_ptr.h" + #include "absl/base/internal/raw_logging.h" diff --git a/meta-webos/recipes-webos/chromium/files/0002-perfetto-Fix-build-with-gcc-11.patch b/meta-webos/recipes-webos/chromium/files/0002-perfetto-Fix-build-with-gcc-11.patch new file mode 100644 index 000000000..afeb34f9b --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0002-perfetto-Fix-build-with-gcc-11.patch @@ -0,0 +1,43 @@ +From 16ea9f8f20d47665117948e2f1ad9ba48131dfea Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Mon, 3 May 2021 20:00:38 +0000 +Subject: [PATCH] perfetto: Fix build with gcc-11 + +* fixes: +FAILED: obj/third_party/perfetto/src/trace_processor/db/lib/column.o +i686-webos-linux-g++ -m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/jenkins/mjansa/build/webos-pro/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/ +recipe-sysroot -MMD -MF obj/third_party/perfetto/src/trace_processor/db/lib/column.o.d -DENABLE_BROWSER_CONTROL_WEBAPI=1 -DENABLE_SAMPLE_WEBAPI=1 -DENABLE_MEMORYMANAGER_WEBAPI=1 -DENABLE_NETWORK_ERROR_PAGE_CONTROLLER_WEBAPI=1 -DOZONE_PLATFORM_WAYLAND_EXTERNAL=1 -DOS_WEBOS=1 -DNEVA_VIDEO_HO +LE=1 -DUSE_NEVA_APPRUNTIME=1 -DENABLE_WEBM_VIDEO_CODECS=1 -DUSE_CBE=1 -DUSE_PMLOG=1 -DUSE_NEVA_SUSPEND_MEDIA_CAPTURE=1 -DUSE_FILESCHEME_CODECACHE=1 -DUSE_LOCAL_STORAGE_MANAGER=1 -DWEBOS_SUBMISSION_NUMBER=16 -DUSE_LTTNG=1 -DUSE_UDEV -DUSE_AURA=1 -DUSE_GLIB=1 -DUSE_NSS_CERTS=1 -DUSE_OZONE=1 +-D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D_FORTIFY_SOURCE=2 -DCR_SYSROOT_HASH=d967bcef40477dbc39acef141ff22bf73f3e7cdb -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -DPERFETTO_IMPLEMENTATION -I../../git/src/nev +a -Igen/neva -I../../git/src -Igen -I../../git/src/third_party/perfetto -I../../git/src/third_party/perfetto/include -Igen/third_party/perfetto/build_config -Igen/third_party/perfetto -Wno-unused-variable -fno-strict-aliasing --param=ssp-buffer-size=4 -fstack-protector -funwind-tables -fPI +C -pipe -pthread -m32 -msse2 -mfpmath=sse -mmmx -Wno-builtin-macro-redefined -D__DATE__= -D__TIME__= -D__TIMESTAMP__= -Wall -Wno-unused-local-typedefs -Wno-maybe-uninitialized -Wno-deprecated-declarations -Wno-comments -Wno-packed-not-aligned -Wno-attributes -Wno-missing-field-initializers + -Wno-unused-parameter -O2 -fno-ident -fdata-sections -ffunction-sections -fno-omit-frame-pointer -g0 -fvisibility=hidden -std=gnu++14 -Wno-narrowing -Wno-class-memaccess -fno-exceptions -fno-rtti --sysroot=../../recipe-sysroot -fvisibility-inlines-hidden -c ../../git/src/third_party/perfe +tto/src/trace_processor/db/column.cc -o obj/third_party/perfetto/src/trace_processor/db/lib/column.o +In file included from ../../git/src/third_party/perfetto/src/trace_processor/db/column.h:22, + from ../../git/src/third_party/perfetto/src/trace_processor/db/column.cc:17: +../../git/src/third_party/perfetto/src/trace_processor/containers/string_pool.h: In static member function 'static const uint8_t* perfetto::trace_processor::StringPool::ReadSize(const uint8_t*, uint32_t*)': +../../git/src/third_party/perfetto/src/trace_processor/containers/string_pool.h:256:34: error: 'numeric_limits' is not a member of 'std' + 256 | PERFETTO_DCHECK(value < std::numeric_limits::max()); + | ^~~~~~~~~~~~~~ +../../git/src/third_party/perfetto/src/trace_processor/containers/string_pool.h:256:57: error: expected primary-expression before '>' token + 256 | PERFETTO_DCHECK(value < std::numeric_limits::max()); + | ^ +../../git/src/third_party/perfetto/src/trace_processor/containers/string_pool.h:256:60: error: '::max' has not been declared; did you mean 'std::max'? + 256 | PERFETTO_DCHECK(value < std::numeric_limits::max()); + | ^~~ +--- + .../perfetto/src/trace_processor/containers/string_pool.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/third_party/perfetto/src/trace_processor/containers/string_pool.h b/src/third_party/perfetto/src/trace_processor/containers/string_pool.h +index 11ae91cfec..558ff00e8f 100644 +--- a/src/third_party/perfetto/src/trace_processor/containers/string_pool.h ++++ b/src/third_party/perfetto/src/trace_processor/containers/string_pool.h +@@ -20,6 +20,7 @@ + #include + #include + ++#include + #include + #include + diff --git a/meta-webos/recipes-webos/chromium/files/0003-net-Fix-build-with-gcc-11.patch b/meta-webos/recipes-webos/chromium/files/0003-net-Fix-build-with-gcc-11.patch new file mode 100644 index 000000000..071e9d323 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0003-net-Fix-build-with-gcc-11.patch @@ -0,0 +1,36 @@ +From 73123d8b1a775f19bf4a0062d3889ea1ff92409a Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Mon, 3 May 2021 20:10:09 +0000 +Subject: [PATCH] net: Fix build with gcc-11 + +* fixes: +FAILED: obj/net/dns/dns/dns_server_iterator.o +i686-webos-linux-g++ -m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/jenkins/mjansa/build/webos-pro/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/recipe-sysroot -MMD -MF obj/net/dns/dns/dns_server_iterator.o.d -DENABLE_BROWSER_CONTROL_WEBAPI=1 -DENABLE_SAMPLE_WEBAPI=1 -DENABLE_MEMORYMANAGER_WEBAPI=1 -DENABLE_NETWORK_ERROR_PAGE_CONTROLLER_WEBAPI=1 -DOZONE_PLATFORM_WAYLAND_EXTERNAL=1 -DOS_WEBOS=1 -DNEVA_VIDEO_HOLE=1 -DUSE_NEVA_APPRUNTIME=1 -DENABLE_WEBM_VIDEO_CODECS=1 -DUSE_CBE=1 -DUSE_PMLOG=1 -DUSE_NEVA_SUSPEND_MEDIA_CAPTURE=1 -DUSE_FILESCHEME_CODECACHE=1 -DUSE_LOCAL_STORAGE_MANAGER=1 -DWEBOS_SUBMISSION_NUMBER=16 -DUSE_LTTNG=1 -DUSE_UDEV -DUSE_AURA=1 -DUSE_GLIB=1 -DUSE_NSS_CERTS=1 -DUSE_OZONE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D_FORTIFY_SOURCE=2 -DCR_SYSROOT_HASH=d967bcef40477dbc39acef141ff22bf73f3e7cdb -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_40 -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_40 -DUSE_LTTNG=1 -DGOOGLE_PROTOBUF_NO_RTTI -DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER -DHAVE_PTHREAD -DNET_IMPLEMENTATION -DENABLE_BUILT_IN_DNS -DUSE_GIO -DU_USING_ICU_NAMESPACE=0 -DU_ENABLE_DYLOAD=0 -DUSE_CHROMIUM_ICU=1 -DU_ENABLE_TRACING=1 -DU_ENABLE_RESOURCE_TRACING=0 -DU_STATIC_IMPLEMENTATION -DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_FILE -DUCHAR_TYPE=uint16_t -I../../git/src/neva -Igen/neva -I../../git/src -Igen -I../../git/src/third_party/perfetto/include -Igen/third_party/perfetto/build_config -Igen/third_party/perfetto -I../../git/src/third_party/protobuf/src -Igen/protoc_out -I../../git/src/third_party/protobuf/src -I../../git/src/third_party/abseil-cpp -I../../git/src/third_party/boringssl/src/include -I../../git/src/third_party/zlib -I../../git/src/third_party/ced/src -I../../git/src/third_party/icu/source/common -I../../git/src/third_party/icu/source/i18n -I../../git/src/third_party/brotli/include -Wno-unused-variable -fno-strict-aliasing --param=ssp-buffer-size=4 -fstack-protector -funwind-tables -fPIC -pipe -pthread -m32 -msse2 -mfpmath=sse -mmmx -Wno-builtin-macro-redefined -D__DATE__= -D__TIME__= -D__TIMESTAMP__= -Wall -Wno-unused-local-typedefs -Wno-maybe-uninitialized -Wno-deprecated-declarations -Wno-comments -Wno-packed-not-aligned -Wno-attributes -Wno-missing-field-initializers -Wno-unused-parameter -O2 -fno-ident -fdata-sections -ffunction-sections -fno-omit-frame-pointer -g0 -fvisibility=hidden -I/jenkins/mjansa/build/webos-pro/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/recipe-sysroot/usr/include/glib-2.0 -I/jenkins/mjansa/build/webos-pro/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/recipe-sysroot/usr/lib/glib-2.0/include -I/jenkins/mjansa/build/webos-pro/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/recipe-sysroot/usr/include/nss3 -I/jenkins/mjansa/build/webos-pro/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/recipe-sysroot/usr/include/nspr -I/jenkins/mjansa/build/webos-pro/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/recipe-sysroot/usr/include/libmount -I/jenkins/mjansa/build/webos-pro/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/recipe-sysroot/usr/include/blkid -I/jenkins/mjansa/build/webos-pro/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/recipe-sysroot/usr/include/glib-2.0 -I/jenkins/mjansa/build/webos-pro/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/recipe-sysroot/usr/lib/glib-2.0/include -std=gnu++14 -Wno-narrowing -Wno-class-memaccess -fno-exceptions -fno-rtti --sysroot=../../recipe-sysroot -fvisibility-inlines-hidden -c ../../git/src/net/dns/dns_server_iterator.cc -o obj/net/dns/dns/dns_server_iterator.o +In file included from ../../git/src/net/dns/dns_server_iterator.cc:5: +../../git/src/net/dns/dns_server_iterator.h:31:27: error: expected ')' before 'nameservers_size' + 31 | DnsServerIterator(size_t nameservers_size, + | ~ ^~~~~~~~~~~~~~~~~ + | ) +../../git/src/net/dns/dns_server_iterator.h:47:11: error: 'size_t' does not name a type + 47 | virtual size_t GetNextAttemptIndex() = 0; + | ^~~~~~ +../../git/src/net/dns/dns_server_iterator.h:12:1: note: 'size_t' is defined in header ''; did you forget to '#include '? + 11 | #include "net/dns/public/secure_dns_mode.h" + +++ |+#include + 12 | +--- + src/net/dns/dns_server_iterator.h | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/net/dns/dns_server_iterator.h b/src/net/dns/dns_server_iterator.h +index 97c42f7300..3faf289c1e 100644 +--- a/src/net/dns/dns_server_iterator.h ++++ b/src/net/dns/dns_server_iterator.h +@@ -6,6 +6,7 @@ + #define NET_DNS_DNS_SERVER_ITERATOR_H_ + + #include ++#include + + #include "net/base/net_export.h" + #include "net/dns/public/secure_dns_mode.h" diff --git a/meta-webos/recipes-webos/chromium/mksnapshot-cross_87.bb b/meta-webos/recipes-webos/chromium/mksnapshot-cross_87.bb new file mode 100644 index 000000000..979e3c1e5 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/mksnapshot-cross_87.bb @@ -0,0 +1,46 @@ +# Copyright (c) 2021 LG Electronics, Inc. + +inherit cross + +WEBRUNTIME_REPO_VERSION = "87" +require webruntime-common.inc +require webruntime-repo${REPO_VERSION}.inc + +# Intentionaly disable uninative it failed to execute x86 binary on x64 host +# 32bit executable mksnapshot is required to create snapshot for the 32bit target +UNINATIVE_LOADER = "" + +PROVIDES = "mksnapshot-cross-${TARGET_ARCH}" +PN = "mksnapshot-cross-${TARGET_ARCH}" +BPN = "mksnapshot" +PR = "r0" + +TARGET = "v8_snapshot_clang_${TARGET_CPU}/mksnapshot" + +DEPENDS = "glib-2.0-native python-native gcc-runtime" + +SRC_URI_append = " \ +file://0001-op-ds-build-Added-mksnapshot.gn-for-mksnapshot-targe.patch \ +" + +GN_ARGS_append = "\ + use_pmlog=false \ +" + +do_configure() { + export GYP_CHROMIUM_NO_ACTION=1 + export PATH="${S}/depot_tools:$PATH" + + GN_ARGS="${GN_ARGS}" + echo GN_ARGS is ${GN_ARGS} + echo BUILD_TARGETS are ${TARGET} + cd ${S}/src + gn --root=${S}/src --dotfile=mksnapshot.gn gen ${OUT_DIR} --args="${GN_ARGS}" +} + +do_install() { + echo "Installing ${PN}" + install -d ${D}${bindir} + + install ${OUT_DIR}/v8_snapshot_clang_${TARGET_CPU}/mksnapshot ${D}${bindir}/mksnapshot-cross-${TARGET_ARCH} +} diff --git a/meta-webos/recipes-webos/chromium/webruntime-common.inc b/meta-webos/recipes-webos/chromium/webruntime-common.inc index ffb38cb14..0b35efbb3 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-common.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-common.inc @@ -34,7 +34,6 @@ inherit webos_prerelease_dep inherit pythonnative REPO_VERSION := "${@['','_${WEBRUNTIME_REPO_VERSION}'][d.getVar('WEBRUNTIME_REPO_VERSION').strip() != '']}" -require webruntime-repo${REPO_VERSION}.inc WEBOS_REPO_NAME ?= "chromium84" WEBOS_GIT_PARAM_BRANCH_V8 ?= "@chromium84" @@ -98,6 +97,11 @@ GN_ARGS = "\ EXTRA_OEGN_GOLD = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', 'use_gold=true', 'use_gold=false', d)}" GN_ARGS += "${EXTRA_OEGN_GOLD}" +# The last digits in the submission format are used for typical submissions number. +# The submission formats; submissions/[number] or submissions/[branch name].[number] +WEBOS_SUBMISSION_NUMBER="${@ '${WEBOS_SUBMISSION}'.split('.')[-1] }" +GN_ARGS_append = " webos_submission_number=${WEBOS_SUBMISSION_NUMBER}" + TARGET_CPU = "${@gn_arch_name(TARGET_ARCH)}" GN_ARGS_append = " target_cpu=\"${TARGET_CPU}\"" diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc new file mode 100644 index 000000000..b3ace6b48 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc @@ -0,0 +1,18 @@ +# Copyright (c) 2021 LG Electronics, Inc. + +LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=28f5b870e5e06b9af5b96c9dd65b31c8" + +WEBOS_REPO_NAME = "chromium87" +WEBOS_VERSION = "87.0.4280.88-6_b8ed08cff6808cf7dbacc4b3d2e44c826fdd0861" + +WEBOS_REPO_NAME_V8 = "chromium-v8" +WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium87" +WEBOS_VERSION_V8 = "8.7.220.29-chromium87.4_e8a7ab899d76b1e8f48457dbb57178d6bd3a4d02" +SRCREV_v8 = "935065d097cce0090bc858746e6aee0919b222de" + +# TODO: Apply all patches from +SRC_URI += " \ + file://0001-absei-cpp-Fix-build-with-gcc-11.patch \ + file://0002-perfetto-Fix-build-with-gcc-11.patch \ + file://0003-net-Fix-build-with-gcc-11.patch \ +" diff --git a/meta-webos/recipes-webos/chromium/webruntime.inc b/meta-webos/recipes-webos/chromium/webruntime.inc index 4b25aa255..b7c001baa 100644 --- a/meta-webos/recipes-webos/chromium/webruntime.inc +++ b/meta-webos/recipes-webos/chromium/webruntime.inc @@ -22,7 +22,7 @@ DEPENDS = "virtual/gettext wayland wayland-native luna-service2 pixman freetype DEPENDS_remove_raspberrypi4 = " xproto" DEPENDS_append_raspberrypi4 = " xorgproto" -INC_PR = "r47" +INC_PR = "r48" # Enable this in webos-local.conf or in recipe to build DEPLOY_CHROMEDRIVER ?= "false" DEPLOY_WAM_DEMO ?= "false" @@ -106,7 +106,6 @@ GN_ARGS += "\ # Following options help build with icecc GN_ARGS += "\ - linux_use_bundled_binutils=false\ use_debug_fission=false\ " diff --git a/meta-webos/recipes-webos/chromium/webruntime_87.bb b/meta-webos/recipes-webos/chromium/webruntime_87.bb new file mode 100644 index 000000000..a9b194e33 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/webruntime_87.bb @@ -0,0 +1,35 @@ +# Copyright (c) 2021 LG Electronics, Inc. +WEBRUNTIME_REPO_VERSION = "87" + +require webruntime.inc +require webruntime-repo${REPO_VERSION}.inc + +PROVIDES = "virtual/webruntime" + +PR = "${INC_PR}.0" + +GN_ARGS_append = " use_x11=false" + +PACKAGECONFIG[debug] = "symbol_level=2,symbol_level=0" +PACKAGECONFIG[debug-blink] = "blink_symbol_level=1,blink_symbol_level=0" + +# Since _remove is always applied LAST, we cannot implement +# GN_ARGS_remove = "ozone_platform_wayland_external=true" here +# but thanks gn it overrides former gn args values with later ones +# so we just add appropriate args to the end of its list: +PACKAGECONFIG[google_ozone_wayland] = "\ + ozone_platform_wayland=true ozone_platform_wayland_external=false \ + use_system_libwayland=true use_wayland_gbm=false use_system_minigbm=false,\ + ozone_platform_wayland=false ozone_platform_wayland_external=true" + +PACKAGECONFIG[v8_lite] = "v8_enable_lite_mode=true,v8_enable_lite_mode=false" + +PACKAGECONFIG_remove="jumbo" + +GN_ARGS_append = " \ + libdir=\"${libdir}\"\ + includedir=\"${includedir}\"\ + enable_mojom_closure_compile=false\ + enable_js_type_check=false\ + use_local_storage_tracker=true\ +" diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index 435fb533f..ffee0893e 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -20,7 +20,7 @@ VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" WEBOS_VERSION = "1.0.2-51_aa61db4d5d16060fc50018b9d0c56252259837c5" -PR = "r38" +PR = "r39" inherit webos_enhanced_submissions inherit webos_system_bus @@ -114,7 +114,13 @@ do_configure_append() { sed -i '/--enable-aggressive-release-policy \\/a\ --enable-webrtc-platform-video-encoder \\' ${B}/webapp-mgr.sh fi - sed -i '/--enable-aggressive-release-policy \\/a\ --local-storage-limit-per-second-level-domain=10 \\' ${B}/webapp-mgr.sh + sed -i '/export WAM_MEM_FLAGS=\" \\/a\ --local-storage-limit-per-second-level-domain=10 \\' ${B}/webapp-mgr.sh + + # Extra added for chromium87 + sed -i '/--ozone-platform/d' ${B}/webapp-mgr.sh + sed -i '/export WAM_COMMON_SWITCHES=\" \\/a\ --disable-gpu-vsync \\' ${B}/webapp-mgr.sh + sed -i '/export WAM_COMMON_SWITCHES=\" \\/a\ --alsa-input-device=pulse \\' ${B}/webapp-mgr.sh + sed -i '/export WAM_COMMON_SWITCHES=\" \\/a\ --enable-accurate-seek \\' ${B}/webapp-mgr.sh } do_configure_append_qemux86() { From 5360a79c9b1c756956715e96b4c44393ba16ad77 Mon Sep 17 00:00:00 2001 From: "paramesh.kuberappa" Date: Tue, 13 Jul 2021 19:11:07 +0530 Subject: [PATCH 0011/2022] com.webos.service.bluetooth2=63 :Release Notes: Fix coverity issues for com.webos.service.bluetooth2 :Detailed Notes: com.webos.service.bluetooth2: submissions/61..submissions/63 079233a Fix for coverity issue 05a20e1 Fix for spelling correction for mRole 864b9f0 Fix Coverity issues :Testing Performed: Refer WRN-2662 for test results :QA Notes: N/A :Issues Addressed: [WRN-2662] CCC: com.webos.service.bluetooth2=63 [WRN-2504] Fix Static Analysis Issues for com.webos.service.bluetooth2 in OSE [CID-8994360] Uninitialized scalar field [CID-8994361] Uninitialized pointer read [CID-8994368] Uninitialized scalar variable Change-Id: If506d77aff72e638371f4493e6a5d43ce4831943 --- .../recipes-webos/bluetooth/com.webos.service.bluetooth2.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb index 1319f2ae5..3ca70d1b6 100644 --- a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb +++ b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb @@ -48,7 +48,7 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES = "GATT FTP OPP A2DP SPP HFP AVRCP PAN A # emulator), which means that the pairing should happen without user intervention. WEBOS_BLUETOOTH_PAIRING_IO_CAPABILITY ??= "NoInputNoOutput" -WEBOS_VERSION = "1.0.0-61_ebbd2f68ac9593161671626cd63a9d9931c92736" +WEBOS_VERSION = "1.0.0-63_e543e5e0bf9a7510ad0b2c4aa21b15e8f989bf20" PR = "r4" inherit webos_component From 37d6f271cf89d16bfcf9309b2e1060c2babd9336 Mon Sep 17 00:00:00 2001 From: "sushovan.g" Date: Thu, 15 Jul 2021 11:46:14 +0530 Subject: [PATCH 0012/2022] =?UTF-8?q?=E2=80=8Bose:=20audiod=3D32?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit :Release Notes: Implement to fix static issues :Detailed Notes: audiod: submissions/31..submissions/32 421bdcc Fix static issues in audiod :Testing Performed: Test results are updated in WRN-2813 :QA Notes: NA :Issues Addressed: [WRN-2813] CCC: ose: audiod=32 [WRN-1812] Implement to fix static issues in audiod ose ​[CID-8994221] Bad bit shift operation Change-Id: I58d2575187d6d090a5b73270e8fe6128c3b935ed --- meta-webos/recipes-multimedia/audiod/audiod.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-multimedia/audiod/audiod.bb b/meta-webos/recipes-multimedia/audiod/audiod.bb index f5dd27f78..f815e0839 100644 --- a/meta-webos/recipes-multimedia/audiod/audiod.bb +++ b/meta-webos/recipes-multimedia/audiod/audiod.bb @@ -23,7 +23,7 @@ RDEPENDS_${PN} = "\ pulseaudio-server \ " -WEBOS_VERSION = "1.0.0-31_a394e7b09268c78e97f75fbfc99370c154a480c2" +WEBOS_VERSION = "1.0.0-32_cac25f1270cb645211974403a21982cc59400cd8" PR = "r29" inherit webos_component From 684eff8a59655385741ce86fc60cf327efa75821 Mon Sep 17 00:00:00 2001 From: sushant narayan Date: Fri, 16 Jul 2021 17:17:18 +0530 Subject: [PATCH 0013/2022] ose: g-camera-pipeline=13.gav.19-r9 com.webos.service.camera=21-r4 :Release Notes: Fix Coverity issues in camera modules Add LICENSE file in module :Detailed Notes: g-camera-pipeline : submissions/13.gav.17..submissions/13.gav.19 1c6e569 Fix Coverity issue in camera pipeline fca797a Fix Coverity issue in camera pipeline com.webos.service.camera : submissions/19..submissions/21 e9d38d8 Fix Coverity issues in camera service 95a5bcf Fix Coverity issues in camera service :Testing Performed: Please refer test result in WRN-2951 :QA Notes: NA :Issues Addressed: [WRN-2951] CCC: g-camera-pipeline=13.gav.19 com.webos.service.camera=21 [WRN-1873] Coverity issues fix for camera service and pipeline Change-Id: I05d97945efef1e1a7070f567f93a1eca2d01cc61 --- .../com.webos.service.camera/com.webos.service.camera.bb | 6 +++--- .../recipes-webos/g-camera-pipeline/g-camera-pipeline.bb | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb b/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb index 66decce4f..a5914d52e 100644 --- a/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb +++ b/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb @@ -5,14 +5,14 @@ AUTHOR = "Gururaj Patil" SECTION = "webos/services" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0 luna-service2 json-c alsa-lib pmloglib udev" -WEBOS_VERSION = "1.0.0-19_9513dbeed831a43d59d45df0a258e81844e91f42" -PR = "r3" +WEBOS_VERSION = "1.0.0-21_fc8322e486488254f580ddcb49efecb8f4125b99" +PR = "r4" inherit webos_component inherit webos_cmake diff --git a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb index b07e4f484..1152880a3 100644 --- a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb +++ b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb @@ -5,7 +5,7 @@ AUTHOR = "Praveen P " SECTION = "webos/media" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " @@ -19,10 +19,10 @@ inherit webos_machine_dep inherit webos_pkgconfig WEBOS_VERSION = "1.0.0-15_e9d8253132f6745c6cbff49a6e7fdd345b50aad9" -PR = "r8" +PR = "r9" WEBOS_GIT_PARAM_BRANCH_raspberrypi4 = "@gav" -WEBOS_VERSION_raspberrypi4 = "1.0.0-13.gav.17_95a73bae5c79e5899f1677c7fb77eea22f20e81a" +WEBOS_VERSION_raspberrypi4 = "1.0.0-13.gav.19_b6a4ad582d94127dd4ba114203e93845e63d2f15" DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad pkgconfig umediaserver media-resource-calculator com.webos.service.camera" DEPENDS_append_rpi = " userland" From 429450ef42900de70467f520517141d945cf8f49 Mon Sep 17 00:00:00 2001 From: "yogish.s" Date: Thu, 15 Jul 2021 18:33:41 +0530 Subject: [PATCH 0014/2022] Make com.webos.service.power2 component affect only RPI :Release Notes: Make com.webos.service.power2 component and dependencies affect only for RPI :Detailed Notes: Make com.webos.service.power2 and it's dependencies(libpmscore and pms-support-reference) affect only RPI :Testing Performed: See WRN-2573 for results :QA Notes: N/A :Issues Addressed: [WRN-2573] CCC: Make com.webos.service.power2 component affect only RPI [WRN-2020] Removal of com.webos.service.power2 & it's dependencies Change-Id: Ib9a6f83daf9d8e7dbb580131077c46fa96beb1b0 --- .../packagegroups/packagegroup-webos-extended.bbappend | 1 + .../recipes-core/packagegroups/packagegroup-webos-extended.bb | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend index 4d1fc9530..c1bad3cb8 100644 --- a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend +++ b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend @@ -60,6 +60,7 @@ RDEPENDS_${PN}_append_rpi = " \ com.webos.service.location \ com.webos.service.mediaindexer \ com.webos.service.peripheralmanager \ + com.webos.service.power2 \ ofono \ resize-rootfs \ ${CAMERASERVICE} \ diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index 05905a35c..973d9e7ae 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -172,7 +172,6 @@ RDEPENDS_${PN} = " \ com.palm.service.devmode \ com.webos.app.mediagallery\ com.webos.service.intent \ - com.webos.service.power2 \ event-monitor \ filecache \ fluentbit \ @@ -302,6 +301,7 @@ RDEPENDS_${PN}_append_qemux86 = " \ com.webos.service.hfp \ com.webos.service.location \ com.webos.service.mediaindexer \ + com.webos.service.power2 \ com.webos.service.storageaccess \ dhcp-client \ ofono \ From 00cfc26671511877fd232bab95c43127b9d11c68 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 13 Jul 2021 02:03:18 -0700 Subject: [PATCH 0015/2022] webos-recipe-blacklist.inc: blacklist failing recipes caused by Qt upgrade :Release Notes: Blacklist recipes failing since the switch from meta-qt5 to meta-qt6. :Detailed Notes: Fixes: ERROR: Nothing RPROVIDES 'qtopcua' (but /jenkins/home/workspace/jansa/webos-dashing-dunfell/meta-qt6/recipes-qt/packagegroups/packagegroup-qt6-addons.bb RDEPENDS on or otherwise requires it) qtopcua was skipped: Recipe is blacklisted: requires widgets module enabled in qtbase, which was disabled in PLAT-18645 http://caprica.lgsvl.com:8080/Errors/Details/1509148 NOTE: Runtime target 'qtopcua' is unbuildable, removing... Missing or unbuildable dependency chain was: ['qtopcua'] NOTE: Runtime target 'packagegroup-qt6-addons' is unbuildable, removing... Missing or unbuildable dependency chain was: ['packagegroup-qt6-addons', 'qtopcua'] ERROR: Nothing RPROVIDES 'qtconnectivity-tools' (but /jenkins/home/workspace/jansa/webos-dashing-dunfell/meta-qt6/recipes-qt/packagegroups/packagegroup-qt6-addons.bb RDEPENDS on or otherwise requires it) NOTE: Runtime target 'qtconnectivity-tools' is unbuildable, removing... Missing or unbuildable dependency chain was: ['qtconnectivity-tools'] ERROR: Nothing RPROVIDES 'qtconnectivity' (but /jenkins/home/workspace/jansa/webos-dashing-dunfell/meta-qt6/recipes-qt/packagegroups/packagegroup-qt6-addons.bb RDEPENDS on or otherwise requires it) qtconnectivity was skipped: Recipe is blacklisted: requires dbus module enabled in qtbase, which was disabled in PLAT-18268 ERROR: Feature 'bluez' was enabled, but the pre-condition 'libs.bluez && features.concurrent && features.dbus' failed. http://caprica.lgsvl.com:8080/Errors/Details/1509143 NOTE: Runtime target 'qtconnectivity' is unbuildable, removing... Missing or unbuildable dependency chain was: ['qtconnectivity'] ERROR: Nothing RPROVIDES 'qtmqtt' (but /jenkins/home/workspace/jansa/webos-dashing-dunfell/meta-qt6/recipes-qt/packagegroups/packagegroup-qt6-addons.bb RDEPENDS on or otherwise requires it) qtmqtt was skipped: Recipe is blacklisted: requires widgets module enabled in qtbase, which was disabled in PLAT-18645 http://caprica.lgsvl.com:8080/Errors/Details/1509146 NOTE: Runtime target 'qtmqtt' is unbuildable, removing... Missing or unbuildable dependency chain was: ['qtmqtt'] And explicitly blacklists the failing recipes: Summary: 4 tasks failed: /jenkins/home/workspace/jansa/webos-dashing-dunfell/meta-qt6/recipes-qt/qt6/qtdeviceutilities_git.bb:do_install /jenkins/home/workspace/jansa/webos-dashing-dunfell/meta-qt6/recipes-qt/qt6/qtcharts_git.bb:do_install /jenkins/home/workspace/jansa/webos-dashing-dunfell/meta-qt6/recipes-qt/qt6/qtdatavis3d_git.bb:do_install /jenkins/home/workspace/jansa/webos-dashing-dunfell/meta-qt6/recipes-qt/qt6/qtpositioning_git.bb:do_configure Summary: There was 1 WARNING message shown. Summary: There were 10 ERROR messages shown, returning a non-zero exit code. :Testing Performed: Only build tested. :QA Notes: N/A :Issues Addressed: [WRN-2515] CCC: Update meta-qt6 to v6.2.0-beta1 Change-Id: Ibefc0ae972c9506d8007690600c149ecbf409a31 --- meta-webos/conf/distro/include/webos-recipe-blacklist.inc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/meta-webos/conf/distro/include/webos-recipe-blacklist.inc b/meta-webos/conf/distro/include/webos-recipe-blacklist.inc index d90d7c5e6..cf82cee5d 100644 --- a/meta-webos/conf/distro/include/webos-recipe-blacklist.inc +++ b/meta-webos/conf/distro/include/webos-recipe-blacklist.inc @@ -33,6 +33,13 @@ PNBLACKLIST[python3-pyqtchart] ?= "depends on blacklisted python3-pyqt5 which ne # since 5.12: PNBLACKLIST[qmllive] ?= "requires widgets module enabled in qtbase, which was disabled in PLAT-18645 http://caprica.lgsvl.com:8080/Errors/Details/1509138" PNBLACKLIST[qtconnectivity] ?= "requires dbus module enabled in qtbase, which was disabled in PLAT-18268 ERROR: Feature 'bluez' was enabled, but the pre-condition 'libs.bluez && features.concurrent && features.dbus' failed. http://caprica.lgsvl.com:8080/Errors/Details/1509143" +# since 6.2: +PNBLACKLIST[packagegroup-qt6-addons] ?= "depends on blacklisted qtconnectivity, qtmqtt, qtopcua" +PNBLACKLIST[packagegroup-qt6-modules] ?= "depends on blacklisted packagegroup-qt6-addons" +PNBLACKLIST[qtdeviceutilities] ?= "fails to build with ninja: error: unknown target 'install' http://gecko.lge.com/Errors/Details/200304" +PNBLACKLIST[qtcharts] ?= "fails to build with ninja: error: unknown target 'install' http://gecko.lge.com/Errors/Details/200305" +PNBLACKLIST[qtdatavis3d] ?= "fails to build with ninja: error: unknown target 'install' http://gecko.lge.com/Errors/Details/200303" +PNBLACKLIST[qtpositioning] ?= "requires dbus module enabled in qtbase, which was disabled in PLAT-18268 http://gecko.lge.com/Errors/Details/200302" # meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.18.bb:do_packagedata PNBLACKLIST[vboxguestdrivers] ?= "BROKEN: kernel-module-vboxguest conflicts in pkgdata with the vboxguest kernel modules we have enabled in linux-yocto" From 713a30b93a7494ee0f3203055bd586ddf61b550e Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 13 Jul 2021 02:21:47 -0700 Subject: [PATCH 0016/2022] com.webos.app.test.smack.native=r2 (fix build with Qt 6) :Release Notes: Fix compatibility with newer qtbase. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: N/A :Issues Addressed: [WRN-2515] CCC: Update meta-qt6 to v6.2.0-beta1 Change-Id: Id2ea132cb43df55e5fad451c9becf4dec88fb480 --- .../com.webos.app.test.smack.native.bb | 6 ++- .../0001-Fix-build-with-qt-6.patch | 41 +++++++++++++++++++ 2 files changed, 45 insertions(+), 2 deletions(-) create mode 100644 meta-webos-smack/recipes-webos/com.webos.app.test.smack.native/com.webos.app.test.smack.native/0001-Fix-build-with-qt-6.patch diff --git a/meta-webos-smack/recipes-webos/com.webos.app.test.smack.native/com.webos.app.test.smack.native.bb b/meta-webos-smack/recipes-webos/com.webos.app.test.smack.native/com.webos.app.test.smack.native.bb index 3192dbdb0..62ca639f7 100644 --- a/meta-webos-smack/recipes-webos/com.webos.app.test.smack.native/com.webos.app.test.smack.native.bb +++ b/meta-webos-smack/recipes-webos/com.webos.app.test.smack.native/com.webos.app.test.smack.native.bb @@ -12,8 +12,10 @@ inherit webos_qmake6 inherit webos_app inherit webos_public_repo -SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" -PR = "r1" +SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE} \ + file://0001-Fix-build-with-qt-6.patch \ +" +PR = "r2" S = "${WORKDIR}/git" DEPENDS = "qtbase qt-features-webos qtdeclarative glib-2.0" diff --git a/meta-webos-smack/recipes-webos/com.webos.app.test.smack.native/com.webos.app.test.smack.native/0001-Fix-build-with-qt-6.patch b/meta-webos-smack/recipes-webos/com.webos.app.test.smack.native/com.webos.app.test.smack.native/0001-Fix-build-with-qt-6.patch new file mode 100644 index 000000000..97e5825fd --- /dev/null +++ b/meta-webos-smack/recipes-webos/com.webos.app.test.smack.native/com.webos.app.test.smack.native/0001-Fix-build-with-qt-6.patch @@ -0,0 +1,41 @@ +From 06d3a7c0034c0f9a28c5dcd5a6a7b2fad817316b Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Tue, 13 Jul 2021 02:19:52 -0700 +Subject: [PATCH] Fix build with qt-6 + +* fixes: +| ../git/main.cpp: In function 'QString readSmackLabel()': +| ../git/main.cpp:27:12: error: variable 'QFile f' has initializer but incomplete type +| 27 | QFile f("/proc/self/attr/current"); +| | ^ +| ../git/main.cpp:28:23: error: incomplete type 'QFile' used in nested name specifier +| 28 | if (f.open(QFile::ReadOnly | QFile::Text)) { +| | ^~~~~~~~ +| ../git/main.cpp:28:41: error: incomplete type 'QFile' used in nested name specifier +| 28 | if (f.open(QFile::ReadOnly | QFile::Text)) { +| | ^~~~ + +Signed-off-by: Martin Jansa +--- + main.cpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/main.cpp b/main.cpp +index f0d71cf..1f4e9d1 100644 +--- a/main.cpp ++++ b/main.cpp +@@ -18,6 +18,7 @@ + #include + #include + #include ++#include + + #define SMACK_LABEL "webOS::App::com.webos.app.test.smack.native" + +@@ -48,4 +49,4 @@ int main(int argc, char *argv[]) + view.show(); + + return app.exec(); +-} +\ No newline at end of file ++} From 2dac1ba2a84603c8a8167767a495f060cef7b251 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 13 Jul 2021 02:54:43 -0700 Subject: [PATCH 0017/2022] webos-preferred-versions.inc: Remove unnecessary P_V assignments :Release Notes: The version from meta-webos will be used by default, because meta-webos has higher layer priority, there is no need to set P_V. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: N/A :Issues Addressed: [WRN-2515] CCC: Update meta-qt6 to v6.2.0-beta1 Change-Id: I4459c8718e0bd162d0a94c2af21af266ddd36fb6 --- meta-webos/conf/distro/include/webos-preferred-versions.inc | 3 --- 1 file changed, 3 deletions(-) diff --git a/meta-webos/conf/distro/include/webos-preferred-versions.inc b/meta-webos/conf/distro/include/webos-preferred-versions.inc index 2befed088..cc1679bea 100644 --- a/meta-webos/conf/distro/include/webos-preferred-versions.inc +++ b/meta-webos/conf/distro/include/webos-preferred-versions.inc @@ -1,4 +1 @@ # Copyright (c) 2012-2021 LG Electronics, Inc. - -PREFERRED_VERSION_qtmultimedia = "6.0.0" -PREFERRED_VERSION_qtgraphicaleffects = "6.0.0" From 5e9228f96672667e68b39e2120bc30f950c14202 Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Fri, 2 Jul 2021 08:05:10 +0900 Subject: [PATCH 0018/2022] qtbase=webos89 qtdeclarative=webos66 (rebase to v6.2.0-beta1) :Release Notes: Update bbappends as per meta-qt6 update to v6.2.0-beta1. Apply fixes for the crash issue in qemux86. :Detailed Notes: qtbase=webos89 Add 0001-Fix-binding-functor-addressing-in-QProperty.patch in replacement of 0001-Revert-QObject-port-to-new-property-system.patch. Merge 0001-Fix-compilation-error-in-QDateTime.patch into 0001-Fix-compile-error-with-g-7.5.0.patch. qtdeclarative=webos66 Add 0001-Fix-binding-functor-addressing-in-QQmlPropertyBindin.patch in replacement of 0001-Revert-QQuickItem-Make-x-y-width-height-bindable.patch. Backport two patches to fix the qml cache inconsistency issue. 0002-Completely-cache-the-result-of-qmldir-searches.patch 0003-Fix-qmldir-cache-inconsistency.patch :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-2515] CCC: Update meta-qt6 to v6.2.0-beta1 Change-Id: Ibb85c83564e7ad2f6e17695cb9e3d801e6300691 --- ...ding-functor-addressing-in-QProperty.patch | 53 ++ ...1-Fix-compilation-error-in-QDateTime.patch | 35 - .../0001-Fix-compile-error-with-g-7.5.0.patch | 27 +- ...-QObject-port-to-new-property-system.patch | 268 -------- meta-webos/recipes-qt/qt6/qtbase_git.bbappend | 16 +- ...tor-addressing-in-QQmlPropertyBindin.patch | 98 +++ ...kItem-Make-x-y-width-height-bindable.patch | 632 ------------------ ...-cache-the-result-of-qmldir-searches.patch | 47 ++ .../0003-Fix-qmldir-cache-inconsistency.patch | 199 ++++++ ...-in-knownPointingDevices-is-destroy.patch} | 0 .../recipes-qt/qt6/qtdeclarative_git.bbappend | 12 +- 11 files changed, 426 insertions(+), 961 deletions(-) create mode 100644 meta-webos/recipes-qt/qt6/qtbase/0001-Fix-binding-functor-addressing-in-QProperty.patch delete mode 100644 meta-webos/recipes-qt/qt6/qtbase/0001-Fix-compilation-error-in-QDateTime.patch delete mode 100644 meta-webos/recipes-qt/qt6/qtbase/0001-Revert-QObject-port-to-new-property-system.patch create mode 100644 meta-webos/recipes-qt/qt6/qtdeclarative/0001-Fix-binding-functor-addressing-in-QQmlPropertyBindin.patch delete mode 100644 meta-webos/recipes-qt/qt6/qtdeclarative/0001-Revert-QQuickItem-Make-x-y-width-height-bindable.patch create mode 100644 meta-webos/recipes-qt/qt6/qtdeclarative/0002-Completely-cache-the-result-of-qmldir-searches.patch create mode 100644 meta-webos/recipes-qt/qt6/qtdeclarative/0003-Fix-qmldir-cache-inconsistency.patch rename meta-webos/recipes-qt/qt6/qtdeclarative/{0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch => 0004-Check-if-a-device-in-knownPointingDevices-is-destroy.patch} (100%) diff --git a/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-binding-functor-addressing-in-QProperty.patch b/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-binding-functor-addressing-in-QProperty.patch new file mode 100644 index 000000000..04bac9d66 --- /dev/null +++ b/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-binding-functor-addressing-in-QProperty.patch @@ -0,0 +1,53 @@ +From 49da466912b9e668a73536742edb14b49d693df5 Mon Sep 17 00:00:00 2001 +From: Andrei Golubev +Date: Thu, 1 Jul 2021 15:24:46 +0200 +Subject: [PATCH] Fix binding functor addressing in QProperty + +We create the callable object at sizeof(QPBP) offset from +the beginning of the memory block. However, evaluateRecursive() +uses sizeof() + alignment when fetching that same callable from +the memory + +While on 64-bit platforms this is fine due to +sizeof(QPBP) == QPBP::getSizeEnsuringAlignment(), this is broken for +32-bit systems where there's actually alignment bits that follow the +QPBP struct in memory (and thus we cast a random memory location to +an object) +(Note: QPBP is short for QPropertyBindingPrivate) + +To fix this, change the offset for creation and destruction of the +callable to the one that uses alignment. This way, evaluateRecursive() +code becomes correct + +Fixes: QTBUG-93890 +Pick-to: 6.1 6.2 +Change-Id: Ief57051846632fa61df4b79b3f054c25062a9498 +Reviewed-by: Fabian Kosmale +Upstream-Status: Backport [https://codereview.qt-project.org/c/qt/qtbase/+/357819] +--- + src/corelib/kernel/qproperty.cpp | 5 +++-- + 1 file changed, 3 insertions(+), 2 deletions(-) + +diff --git a/src/corelib/kernel/qproperty.cpp b/src/corelib/kernel/qproperty.cpp +index d290f0a16c..965939a1fc 100644 +--- a/src/corelib/kernel/qproperty.cpp ++++ b/src/corelib/kernel/qproperty.cpp +@@ -268,7 +268,8 @@ QPropertyBindingPrivate::~QPropertyBindingPrivate() + if (firstObserver) + firstObserver.unlink(); + if (vtable->size) +- vtable->destroy(reinterpret_cast(this) + sizeof(QPropertyBindingPrivate)); ++ vtable->destroy(reinterpret_cast(this) ++ + QPropertyBindingPrivate::getSizeEnsuringAlignment()); + } + + void QPropertyBindingPrivate::unlinkAndDeref() +@@ -344,7 +345,7 @@ QUntypedPropertyBinding::QUntypedPropertyBinding(QMetaType metaType, const Bindi + { + std::byte *mem = new std::byte[QPropertyBindingPrivate::getSizeEnsuringAlignment() + vtable->size](); + d = new(mem) QPropertyBindingPrivate(metaType, vtable, std::move(location)); +- vtable->moveConstruct(mem+sizeof(QPropertyBindingPrivate), function); ++ vtable->moveConstruct(mem + QPropertyBindingPrivate::getSizeEnsuringAlignment(), function); + } + + QUntypedPropertyBinding::QUntypedPropertyBinding(QUntypedPropertyBinding &&other) diff --git a/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-compilation-error-in-QDateTime.patch b/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-compilation-error-in-QDateTime.patch deleted file mode 100644 index 98da5428b..000000000 --- a/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-compilation-error-in-QDateTime.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 2e979f9314f234aa78f55dadf61e2db9df6930b6 Mon Sep 17 00:00:00 2001 -From: Andrei Golubev -Date: Wed, 3 Mar 2021 11:59:04 +0100 -Subject: [PATCH] Fix compilation error in QDateTime - -One of the changes done in 902505a0584959fed9d0784ab5308f9d70fe68a9 -results in a compilation error: somehow an expression -"int * enum value (with underlying type qint64)" has result type -"long int" and thus the compiler cannot find matching add_overflow - -Return the qint64 cast back to overcome this -Compiler: gcc 7.5.0-3ubuntu1~18.04 - -Change-Id: Iaca882762e812bef69ec325df5f59e02082a0130 -Reviewed-by: Thiago Macieira -Upstream-Status: Backport [https://codereview.qt-project.org/c/qt/qtbase/+/337301] ---- - src/corelib/time/qdatetime.cpp | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/src/corelib/time/qdatetime.cpp b/src/corelib/time/qdatetime.cpp -index 94ea0112d4..ad0d8a17f5 100644 ---- a/src/corelib/time/qdatetime.cpp -+++ b/src/corelib/time/qdatetime.cpp -@@ -4012,7 +4012,9 @@ void QDateTime::setMSecsSinceEpoch(qint64 msecs) - status |= QDateTimePrivate::ValidWhenMask; - break; - case Qt::OffsetFromUTC: -- if (!add_overflow(msecs, d->m_offsetFromUtc * MSECS_PER_SEC, &msecs)) -+ // NB: cast to qint64 here is important to make sure a matching -+ // add_overflow is found, GCC 7.5.0 fails without this cast -+ if (!add_overflow(msecs, qint64(d->m_offsetFromUtc * MSECS_PER_SEC), &msecs)) - status |= QDateTimePrivate::ValidWhenMask; - break; - case Qt::TimeZone: diff --git a/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-compile-error-with-g-7.5.0.patch b/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-compile-error-with-g-7.5.0.patch index 5d551c283..12bfcf41f 100644 --- a/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-compile-error-with-g-7.5.0.patch +++ b/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-compile-error-with-g-7.5.0.patch @@ -1,22 +1,22 @@ -From 0723662a7a4d2d2edcda7fc0972a7b501f7c5aa1 Mon Sep 17 00:00:00 2001 +From 543a68313d7b15f0b2f0582605bfdbef8fecf1d0 Mon Sep 17 00:00:00 2001 From: Hyungchan Kim Date: Wed, 26 May 2021 17:45:05 +0900 Subject: [PATCH] Fix compile error with g++ 7.5.0 -git/src/corelib/kernel/qproperty_p.h:540:30: error: '(QItemSelectionModelPrivate::modelChanged != 0)' is not a constant expression - if constexpr (Signal != nullptr) { - ~~~~~~~^~~~~~~~~~ +This fixes a few compilation errors in a host that has g++ 7.5.0. +There is no fix from upstream as 8.1 is the minimum gcc version of Qt. Upstream-Status : Inappropriate [workaround] --- src/corelib/kernel/qproperty_p.h | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) + src/corelib/time/qdatetime.cpp | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/corelib/kernel/qproperty_p.h b/src/corelib/kernel/qproperty_p.h -index d00094c54f..2ada23f5f9 100644 +index 2883308299..1fdd50e445 100644 --- a/src/corelib/kernel/qproperty_p.h +++ b/src/corelib/kernel/qproperty_p.h -@@ -537,7 +537,7 @@ public: +@@ -540,7 +540,7 @@ public: const bool inWrapper = inBindingWrapper(storage); if (bd && !inWrapper) notify(bd); @@ -25,3 +25,16 @@ index d00094c54f..2ada23f5f9 100644 if constexpr (SignalTakesValue::value) (owner()->*Signal)(value()); else +diff --git a/src/corelib/time/qdatetime.cpp b/src/corelib/time/qdatetime.cpp +index 94ea0112d4..b641fbea8f 100644 +--- a/src/corelib/time/qdatetime.cpp ++++ b/src/corelib/time/qdatetime.cpp +@@ -4012,7 +4012,7 @@ void QDateTime::setMSecsSinceEpoch(qint64 msecs) + status |= QDateTimePrivate::ValidWhenMask; + break; + case Qt::OffsetFromUTC: +- if (!add_overflow(msecs, d->m_offsetFromUtc * MSECS_PER_SEC, &msecs)) ++ if (!add_overflow(msecs, qint64(d->m_offsetFromUtc * MSECS_PER_SEC), &msecs)) + status |= QDateTimePrivate::ValidWhenMask; + break; + case Qt::TimeZone: diff --git a/meta-webos/recipes-qt/qt6/qtbase/0001-Revert-QObject-port-to-new-property-system.patch b/meta-webos/recipes-qt/qt6/qtbase/0001-Revert-QObject-port-to-new-property-system.patch deleted file mode 100644 index e3c2ec191..000000000 --- a/meta-webos/recipes-qt/qt6/qtbase/0001-Revert-QObject-port-to-new-property-system.patch +++ /dev/null @@ -1,268 +0,0 @@ -From a9887fd70acae54d06ac560c401e4b0be953e9c8 Mon Sep 17 00:00:00 2001 -From: Hyungchan Kim -Date: Thu, 6 May 2021 16:09:04 +0900 -Subject: [PATCH] Revert "QObject: port to new property system" - -This reverts commit 1a65a4faf52f83ba3fbbba88cea1c4bb800e8de7. -It is a workaround for QTBUG-93890. - -Upstream-Status : Inappropriate [workaround] ---- - src/corelib/global/qhooks.cpp | 2 +- - src/corelib/kernel/qobject.cpp | 30 ++++-------------- - src/corelib/kernel/qobject.h | 4 +-- - src/corelib/kernel/qobject_p.h | 31 +++---------------- - .../corelib/kernel/qobject/CMakeLists.txt | 3 +- - .../corelib/kernel/qobject/tst_qobject.cpp | 11 +------ - .../other/toolsupport/tst_toolsupport.cpp | 2 +- - 7 files changed, 15 insertions(+), 68 deletions(-) - -diff --git a/src/corelib/global/qhooks.cpp b/src/corelib/global/qhooks.cpp -index 491e126b7a..c3a625bb5f 100644 ---- a/src/corelib/global/qhooks.cpp -+++ b/src/corelib/global/qhooks.cpp -@@ -67,7 +67,7 @@ quintptr Q_CORE_EXPORT qtHookData[] = { - // The required sizes and offsets are tested in tests/auto/other/toolsupport. - // When this fails and the change was intentional, adjust the test and - // adjust this value here. -- 21 -+ 20 - }; - - static_assert(QHooks::LastHookIndex == sizeof(qtHookData) / sizeof(qtHookData[0])); -diff --git a/src/corelib/kernel/qobject.cpp b/src/corelib/kernel/qobject.cpp -index b115066dce..343922581c 100644 ---- a/src/corelib/kernel/qobject.cpp -+++ b/src/corelib/kernel/qobject.cpp -@@ -1214,11 +1214,6 @@ QObjectPrivate::Connection::~Connection() - QString QObject::objectName() const - { - Q_D(const QObject); -- if (!d->extraData && QtPrivate::isAnyBindingEvaluating()) { -- QObjectPrivate *dd = const_cast(d); -- // extraData is mutable, so this should be safe -- dd->extraData = new QObjectPrivate::ExtraData(dd); -- } - return d->extraData ? d->extraData->objectName : QString(); - } - -@@ -1228,28 +1223,15 @@ QString QObject::objectName() const - void QObject::setObjectName(const QString &name) - { - Q_D(QObject); -- - if (!d->extraData) -- d->extraData = new QObjectPrivate::ExtraData(d); -- -- d->extraData->objectName.removeBindingUnlessInWrapper(); -+ d->extraData = new QObjectPrivate::ExtraData; - - if (d->extraData->objectName != name) { -- d->extraData->objectName.setValueBypassingBindings(name); -- d->extraData->objectName.notify(); // also emits a signal -+ d->extraData->objectName = name; -+ emit objectNameChanged(d->extraData->objectName, QPrivateSignal()); - } - } - --QBindable QObject::bindableObjectName() --{ -- Q_D(QObject); -- -- if (!d->extraData) -- d->extraData = new QObjectPrivate::ExtraData(d); -- -- return QBindable(&d->extraData->objectName); --} -- - /*! \fn void QObject::objectNameChanged(const QString &objectName) - - This signal is emitted after the object's name has been changed. The new object name is passed as \a objectName. -@@ -1749,7 +1731,7 @@ int QObject::startTimer(int interval, Qt::TimerType timerType) - } - int timerId = thisThreadData->eventDispatcher.loadRelaxed()->registerTimer(interval, timerType, this); - if (!d->extraData) -- d->extraData = new QObjectPrivate::ExtraData(d); -+ d->extraData = new QObjectPrivate::ExtraData; - d->extraData->runningTimers.append(timerId); - return timerId; - } -@@ -2182,7 +2164,7 @@ void QObject::installEventFilter(QObject *obj) - } - - if (!d->extraData) -- d->extraData = new QObjectPrivate::ExtraData(d); -+ d->extraData = new QObjectPrivate::ExtraData; - - // clean up unused items in the list - d->extraData->eventFilters.removeAll((QObject *)nullptr); -@@ -3989,7 +3971,7 @@ bool QObject::setProperty(const char *name, const QVariant &value) - int id = meta->indexOfProperty(name); - if (id < 0) { - if (!d->extraData) -- d->extraData = new QObjectPrivate::ExtraData(d); -+ d->extraData = new QObjectPrivate::ExtraData; - - const int idx = d->extraData->propertyNames.indexOf(name); - -diff --git a/src/corelib/kernel/qobject.h b/src/corelib/kernel/qobject.h -index c59518367d..5742db1c22 100644 ---- a/src/corelib/kernel/qobject.h -+++ b/src/corelib/kernel/qobject.h -@@ -120,8 +120,7 @@ class Q_CORE_EXPORT QObject - { - Q_OBJECT - -- Q_PROPERTY(QString objectName READ objectName WRITE setObjectName NOTIFY objectNameChanged -- BINDABLE bindableObjectName) -+ Q_PROPERTY(QString objectName READ objectName WRITE setObjectName NOTIFY objectNameChanged) - Q_DECLARE_PRIVATE(QObject) - - public: -@@ -138,7 +137,6 @@ public: - - QString objectName() const; - void setObjectName(const QString &name); -- QBindable bindableObjectName(); - - inline bool isWidgetType() const { return d_ptr->isWidget; } - inline bool isWindowType() const { return d_ptr->isWindow; } -diff --git a/src/corelib/kernel/qobject_p.h b/src/corelib/kernel/qobject_p.h -index 4f38796c81..019473018f 100644 ---- a/src/corelib/kernel/qobject_p.h -+++ b/src/corelib/kernel/qobject_p.h -@@ -61,7 +61,6 @@ - #include "QtCore/qsharedpointer.h" - #include "QtCore/qvariant.h" - #include "QtCore/qproperty.h" --#include "QtCore/private/qproperty_p.h" - - QT_BEGIN_NAMESPACE - -@@ -103,26 +102,12 @@ class Q_CORE_EXPORT QObjectPrivate : public QObjectData - public: - struct ExtraData - { -- ExtraData(QObjectPrivate *ptr) : parent(ptr) { } -- -- inline void setObjectNameForwarder(const QString &name) -- { -- parent->q_func()->setObjectName(name); -- } -- -- inline void nameChangedForwarder(const QString &name) -- { -- Q_EMIT parent->q_func()->objectNameChanged(name, QObject::QPrivateSignal()); -- } -- -+ ExtraData() {} - QList propertyNames; - QList propertyValues; - QList runningTimers; - QList> eventFilters; -- Q_OBJECT_COMPAT_PROPERTY(QObjectPrivate::ExtraData, QString, objectName, -- &QObjectPrivate::ExtraData::setObjectNameForwarder, -- &QObjectPrivate::ExtraData::nameChangedForwarder) -- QObjectPrivate *parent; -+ QString objectName; - }; - - typedef void (*StaticMetaCallFunction)(QObject *, QMetaObject::Call, int, void **); -@@ -384,9 +369,8 @@ public: - cd->ref.ref(); - connections.storeRelaxed(cd); - } -- - public: -- mutable ExtraData *extraData; // extra data set by the user -+ ExtraData *extraData; // extra data set by the user - // This atomic requires acquire/release semantics in a few places, - // e.g. QObject::moveToThread must synchronize with QCoreApplication::postEvent, - // because postEvent is thread-safe. -@@ -635,14 +619,7 @@ inline QBindingStorage *qGetBindingStorage(QObjectPrivate *o) - { - return &o->bindingStorage; - } --inline const QBindingStorage *qGetBindingStorage(const QObjectPrivate::ExtraData *ed) --{ -- return &ed->parent->bindingStorage; --} --inline QBindingStorage *qGetBindingStorage(QObjectPrivate::ExtraData *ed) --{ -- return &ed->parent->bindingStorage; --} -+ - - QT_END_NAMESPACE - -diff --git a/tests/auto/corelib/kernel/qobject/CMakeLists.txt b/tests/auto/corelib/kernel/qobject/CMakeLists.txt -index a231ef985f..7ff42f7212 100644 ---- a/tests/auto/corelib/kernel/qobject/CMakeLists.txt -+++ b/tests/auto/corelib/kernel/qobject/CMakeLists.txt -@@ -9,10 +9,9 @@ qt_internal_add_test(tst_qobject - tst_qobject.cpp - DEFINES - QT_DISABLE_DEPRECATED_BEFORE=0 -- LIBRARIES -+ PUBLIC_LIBRARIES - Qt::CorePrivate - Qt::Network -- Qt::TestPrivate - ) - - ## Scopes: -diff --git a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp -index f5c16faa56..f36a40e5df 100644 ---- a/tests/auto/corelib/kernel/qobject/tst_qobject.cpp -+++ b/tests/auto/corelib/kernel/qobject/tst_qobject.cpp -@@ -1,6 +1,6 @@ - /**************************************************************************** - ** --** Copyright (C) 2021 The Qt Company Ltd. -+** Copyright (C) 2016 The Qt Company Ltd. - ** Copyright (C) 2015 Olivier Goffart - ** Contact: https://www.qt.io/licensing/ - ** -@@ -28,7 +28,6 @@ - ****************************************************************************/ - - #include --#include - #include - #include - #include -@@ -162,7 +161,6 @@ private slots: - void functorReferencesConnection(); - void disconnectDisconnects(); - void singleShotConnection(); -- void objectNameBinding(); - }; - - struct QObjectCreatedOnShutdown -@@ -8117,13 +8115,6 @@ void tst_QObject::singleShotConnection() - } - } - --void tst_QObject::objectNameBinding() --{ -- QObject obj; -- QTestPrivate::testReadWritePropertyBasics(obj, "test1", "test2", -- "objectName"); --} -- - // Test for QtPrivate::HasQ_OBJECT_Macro - static_assert(QtPrivate::HasQ_OBJECT_Macro::Value); - static_assert(!QtPrivate::HasQ_OBJECT_Macro::Value); -diff --git a/tests/auto/other/toolsupport/tst_toolsupport.cpp b/tests/auto/other/toolsupport/tst_toolsupport.cpp -index 7ba4286a4d..2e46f022e7 100644 ---- a/tests/auto/other/toolsupport/tst_toolsupport.cpp -+++ b/tests/auto/other/toolsupport/tst_toolsupport.cpp -@@ -109,7 +109,7 @@ void tst_toolsupport::offsets_data() - QTestData &data = QTest::newRow("sizeof(QObjectPrivate::ExtraData)") - << sizeof(QObjectPrivate::ExtraData); - // Please heed the comment at the top of this file when changing this line: -- data << 64 << 128; // 4 * QList + 1 * QString + ptr -+ data << 60 << 120; // 4 * QList + 1 * QString - } - - #if RUN_MEMBER_OFFSET_TEST diff --git a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend index e0fb48a12..ac1609be9 100644 --- a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend @@ -2,7 +2,7 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos88" +EXTENDPRAUTO_append = "webos89" # Remove LGPL3-only files python do_patch_append() { @@ -82,7 +82,7 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" # Upstream-Status: Backport SRC_URI_append = " \ - file://0001-Fix-compilation-error-in-QDateTime.patch \ + file://0001-Fix-binding-functor-addressing-in-QProperty.patch \ " # Upstream-Status: Inappropriate @@ -90,20 +90,12 @@ SRC_URI_append = " \ file://9901-Disable-Faux-bolding-in-Qts-FreeType-FontEngine.patch \ " -# TODO: qtbase-native fail to build with g++ from hosttools(7.5.0) -# git/src/corelib/kernel/qobject.cpp:1239:41: required from here -# include/QtCore/6.2.0/QtCore/private/../../../../../../git/src/corelib/kernel/qproperty_p.h:540:30: error: ‘(QObjectPrivate::ExtraData::nameChangedForwarder != 0)’ is not a constant expression -# if constexpr (Signal != nullptr) { -# ~~~~~~~^~~~~~~~~~ +# TODO: qtbase-native fails to build with g++ from hosttools(7.5.0) +# Drop this once our build host has a newer version of g++. SRC_URI_append_class-native = " \ file://0001-Fix-compile-error-with-g-7.5.0.patch \ " -# TODO: It causes crash in webos emulator build (QTBUG-93890) -SRC_URI_append_qemux86_class-target = " \ - file://0001-Revert-QObject-port-to-new-property-system.patch \ -" - # Flags needed for webOS TARGET_CXXFLAGS_append = " \ -DQFONTCACHE_MIN_COST=512 \ diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Fix-binding-functor-addressing-in-QQmlPropertyBindin.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Fix-binding-functor-addressing-in-QQmlPropertyBindin.patch new file mode 100644 index 000000000..ed8620eff --- /dev/null +++ b/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Fix-binding-functor-addressing-in-QQmlPropertyBindin.patch @@ -0,0 +1,98 @@ +From 769c98a13957f595e1e1556757e46aa9acf129a2 Mon Sep 17 00:00:00 2001 +From: Fabian Kosmale +Date: Mon, 5 Jul 2021 11:14:55 +0200 +Subject: [PATCH] Fix binding functor addressing in QQmlPropertyBinding + +This mirrors the change in qtbase. + +Task-number: QTBUG-93890 +Pick-to: 6.1 6.2 +Change-Id: I761b320e4dd4b1e2884bb9c0e01b28cc15c4ac2d +Reviewed-by: Jaeyoon Jung +Reviewed-by: Andrei Golubev +Upstream-Status: Backport [https://codereview.qt-project.org/c/qt/qtdeclarative/+/358175] +--- + src/qml/qml/qqmlpropertybinding.cpp | 15 +++++++++------ + src/qml/qml/qqmlpropertybinding_p.h | 8 +++++--- + 2 files changed, 14 insertions(+), 9 deletions(-) + +diff --git a/src/qml/qml/qqmlpropertybinding.cpp b/src/qml/qml/qqmlpropertybinding.cpp +index b1ad3f1767..185fac6dcc 100644 +--- a/src/qml/qml/qqmlpropertybinding.cpp ++++ b/src/qml/qml/qqmlpropertybinding.cpp +@@ -61,10 +61,11 @@ QUntypedPropertyBinding QQmlPropertyBinding::create(QMetaType propertyType, QV4: + QV4::ExecutionContext *scope, QObject *target, + QQmlPropertyIndex targetIndex) + { +- auto buffer = new std::byte[sizeof(QQmlPropertyBinding)+sizeof(QQmlPropertyBindingJS)+jsExpressionOffsetLength()]; // QQmlPropertyBinding uses delete[] ++ auto buffer = new std::byte[QQmlPropertyBinding::getSizeEnsuringAlignment() ++ + sizeof(QQmlPropertyBindingJS)+jsExpressionOffsetLength()]; // QQmlPropertyBinding uses delete[] + auto binding = new (buffer) QQmlPropertyBinding(propertyType, target, targetIndex, + TargetData::WithoutBoundFunction); +- auto js = new(buffer + sizeof(QQmlPropertyBinding) + jsExpressionOffsetLength()) QQmlPropertyBindingJS(); ++ auto js = new(buffer + QQmlPropertyBinding::getSizeEnsuringAlignment() + jsExpressionOffsetLength()) QQmlPropertyBindingJS(); + Q_ASSERT(binding->jsExpression() == js); + Q_ASSERT(js->asBinding() == binding); + Q_UNUSED(js); +@@ -77,9 +78,10 @@ QUntypedPropertyBinding QQmlPropertyBinding::create(QMetaType propertyType, QV4: + + QUntypedPropertyBinding QQmlPropertyBinding::createFromCodeString(const QQmlPropertyData *pd, const QString& str, QObject *obj, const QQmlRefPointer &ctxt, const QString &url, quint16 lineNumber, QObject *target, QQmlPropertyIndex targetIndex) + { +- auto buffer = new std::byte[sizeof(QQmlPropertyBinding)+sizeof(QQmlPropertyBindingJS)+jsExpressionOffsetLength()]; // QQmlPropertyBinding uses delete[] ++ auto buffer = new std::byte[QQmlPropertyBinding::getSizeEnsuringAlignment() ++ + sizeof(QQmlPropertyBindingJS)+jsExpressionOffsetLength()]; // QQmlPropertyBinding uses delete[] + auto binding = new(buffer) QQmlPropertyBinding(QMetaType(pd->propType()), target, targetIndex, TargetData::WithoutBoundFunction); +- auto js = new(buffer + sizeof(QQmlPropertyBinding) + jsExpressionOffsetLength()) QQmlPropertyBindingJS(); ++ auto js = new(buffer + QQmlPropertyBinding::getSizeEnsuringAlignment() + jsExpressionOffsetLength()) QQmlPropertyBindingJS(); + Q_ASSERT(binding->jsExpression() == js); + Q_ASSERT(js->asBinding() == binding); + Q_UNUSED(js); +@@ -91,9 +93,10 @@ QUntypedPropertyBinding QQmlPropertyBinding::createFromCodeString(const QQmlProp + + QUntypedPropertyBinding QQmlPropertyBinding::createFromBoundFunction(const QQmlPropertyData *pd, QV4::BoundFunction *function, QObject *obj, const QQmlRefPointer &ctxt, QV4::ExecutionContext *scope, QObject *target, QQmlPropertyIndex targetIndex) + { +- auto buffer = new std::byte[sizeof(QQmlPropertyBinding)+sizeof(QQmlPropertyBindingJSForBoundFunction)+jsExpressionOffsetLength()]; // QQmlPropertyBinding uses delete[] ++ auto buffer = new std::byte[QQmlPropertyBinding::getSizeEnsuringAlignment() ++ + sizeof(QQmlPropertyBindingJSForBoundFunction)+jsExpressionOffsetLength()]; // QQmlPropertyBinding uses delete[] + auto binding = new(buffer) QQmlPropertyBinding(QMetaType(pd->propType()), target, targetIndex, TargetData::HasBoundFunction); +- auto js = new(buffer + sizeof(QQmlPropertyBinding) + jsExpressionOffsetLength()) QQmlPropertyBindingJSForBoundFunction(); ++ auto js = new(buffer + QQmlPropertyBinding::getSizeEnsuringAlignment() + jsExpressionOffsetLength()) QQmlPropertyBindingJSForBoundFunction(); + Q_ASSERT(binding->jsExpression() == js); + Q_ASSERT(js->asBinding() == binding); + Q_UNUSED(js); +diff --git a/src/qml/qml/qqmlpropertybinding_p.h b/src/qml/qml/qqmlpropertybinding_p.h +index 2765a13a21..341e300de4 100644 +--- a/src/qml/qml/qqmlpropertybinding_p.h ++++ b/src/qml/qml/qqmlpropertybinding_p.h +@@ -109,7 +109,7 @@ public: + { + return std::launder(reinterpret_cast( + reinterpret_cast(this) +- + sizeof(QQmlPropertyBinding) ++ + QPropertyBindingPrivate::getSizeEnsuringAlignment() + + jsExpressionOffsetLength())); + } + +@@ -146,7 +146,7 @@ public: + + static bool doEvaluate(QMetaType metaType, QUntypedPropertyData *dataPtr, void *f) { + auto address = static_cast(f); +- address -= sizeof (QPropertyBindingPrivate); // f now points to QPropertyBindingPrivate suboject ++ address -= QPropertyBindingPrivate::getSizeEnsuringAlignment(); // f now points to QPropertyBindingPrivate suboject + // and that has the same address as QQmlPropertyBinding + return reinterpret_cast(address)->evaluate(metaType, dataPtr); + } +@@ -237,10 +237,12 @@ inline const QQmlPropertyBinding *QQmlPropertyBindingJS::asBinding() const + { + return std::launder(reinterpret_cast( + reinterpret_cast(this) +- - sizeof(QQmlPropertyBinding) ++ - QPropertyBindingPrivate::getSizeEnsuringAlignment() + - QQmlPropertyBinding::jsExpressionOffsetLength())); + } + ++static_assert(sizeof(QQmlPropertyBinding) == sizeof(QPropertyBindingPrivate)); // else the whole offset computatation will break ++ + QT_END_NAMESPACE + + #endif // QQMLPROPERTYBINDING_P_H diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Revert-QQuickItem-Make-x-y-width-height-bindable.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Revert-QQuickItem-Make-x-y-width-height-bindable.patch deleted file mode 100644 index 57c3b0cf7..000000000 --- a/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Revert-QQuickItem-Make-x-y-width-height-bindable.patch +++ /dev/null @@ -1,632 +0,0 @@ -From d77344c3648a44ac391391044c17fe3200013174 Mon Sep 17 00:00:00 2001 -From: Hyungchan Kim -Date: Tue, 29 Jun 2021 19:21:21 +0900 -Subject: [PATCH] Revert "QQuickItem: Make x/y/width/height bindable" - -This reverts commit 4017505cbcd553f25779a5f449c13863b2c0622c. -It causes crash in qemux86 build. - -Program terminated with signal SIGSEGV, Segmentation fault. -0xb5d736e6 in QQmlJavaScriptExpression::evaluate(void**, QMetaType const*, int) () from /usr/lib/libQt6Qml.so.6 - -Upstream-Status: Inappropriate [workaround] ---- - src/quick/items/qquickitem.cpp | 177 ++++-------------- - src/quick/items/qquickitem.h | 13 +- - src/quick/items/qquickitem_p.h | 17 +- - .../auto/qml/qqmlbinding/tst_qqmlbinding.cpp | 4 +- - tests/auto/qml/qqmlinfo/tst_qqmlinfo.cpp | 2 +- - tests/auto/quick/qquickitem2/CMakeLists.txt | 2 - - .../auto/quick/qquickitem2/tst_qquickitem.cpp | 33 +--- - .../tst_qquickmultipointtoucharea.cpp | 12 +- - 8 files changed, 52 insertions(+), 208 deletions(-) - -diff --git a/src/quick/items/qquickitem.cpp b/src/quick/items/qquickitem.cpp -index ff269363bb..14a00cfe64 100644 ---- a/src/quick/items/qquickitem.cpp -+++ b/src/quick/items/qquickitem.cpp -@@ -3102,15 +3102,6 @@ Motifies \a t with this items local transform relative to its parent. - */ - void QQuickItemPrivate::itemToParentTransform(QTransform &t) const - { -- /* Read the current x and y values. As this is an internal method, -- we don't care about it being usable in bindings. Instead, we -- care about performance here, and thus we read the value with -- valueBypassingBindings. This avoids any checks whether we are -- in a binding (which sholdn't be too expensive, but can add up). -- */ -- -- qreal x = this->x.valueBypassingBindings(); -- qreal y = this->y.valueBypassingBindings(); - if (x || y) - t.translate(x, y); - -@@ -3793,16 +3784,14 @@ void QQuickItem::geometryChange(const QRectF &newGeometry, const QRectF &oldGeom - } - } - -- // The notify method takes care of emitting the signal, and also notifies any -- // property observers. - if (change.xChange()) -- d->x.notify(); -+ emit xChanged(); - if (change.yChange()) -- d->y.notify(); -+ emit yChanged(); - if (change.widthChange()) -- d->width.notify(); -+ emit widthChanged(); - if (change.heightChange()) -- d->height.notify(); -+ emit heightChanged(); - #if QT_CONFIG(accessibility) - if (QAccessible::isActive()) { - if (QObject *acc = QQuickAccessibleAttached::findAccessible(this)) { -@@ -6778,16 +6767,6 @@ QPointF QQuickItem::position() const - void QQuickItem::setX(qreal v) - { - Q_D(QQuickItem); -- /* There are two ways in which this function might be called: -- a) Either directly by the user, or -- b) when a binding has evaluated to a new value and it writes -- the value back -- In the first case, we want to remove an existing binding, in -- the second case, we don't want to remove the binding which -- just wrote the value. -- removeBindingUnlessInWrapper takes care of this. -- */ -- d->x.removeBindingUnlessInWrapper(); - if (qt_is_nan(v)) - return; - if (d->x == v) -@@ -6798,14 +6777,13 @@ void QQuickItem::setX(qreal v) - - d->dirty(QQuickItemPrivate::Position); - -- geometryChange(QRectF(v, d->y, d->width, d->height), -+ geometryChange(QRectF(d->x, d->y, d->width, d->height), - QRectF(oldx, d->y, d->width, d->height)); - } - - void QQuickItem::setY(qreal v) - { - Q_D(QQuickItem); -- d->y.removeBindingUnlessInWrapper(); - if (qt_is_nan(v)) - return; - if (d->y == v) -@@ -6816,9 +6794,7 @@ void QQuickItem::setY(qreal v) - - d->dirty(QQuickItemPrivate::Position); - -- // we use v instead of d->y, as that avoid a method call -- // and we have v anyway in scope -- geometryChange(QRectF(d->x, v, d->width, d->height), -+ geometryChange(QRectF(d->x, d->y, d->width, d->height), - QRectF(d->x, oldy, d->width, d->height)); - } - -@@ -6834,21 +6810,8 @@ void QQuickItem::setPosition(const QPointF &pos) - qreal oldx = d->x; - qreal oldy = d->y; - -- /* This preserves the bindings, because that was what the code used to do -- The effect of this is that you can have -- Item { -- Rectangle { -- x: someValue; y: someValue -- DragHandler {} -- } -- } -- and you can move the rectangle around; once someValue changes, the position gets -- reset again (even when a drag is currently ongoing). -- Whether we want this is up to discussion. -- */ -- -- d->x.setValueBypassingBindings(pos.x()); //TODO: investigate whether to break binding here or not -- d->y.setValueBypassingBindings(pos.y()); -+ d->x = pos.x(); -+ d->y = pos.y(); - - d->dirty(QQuickItemPrivate::Position); - -@@ -6856,19 +6819,6 @@ void QQuickItem::setPosition(const QPointF &pos) - QRectF(oldx, oldy, d->width, d->height)); - } - --/* The bindable methods return an object which supports inspection (hasBinding) and -- modification (setBinding, removeBinding) of the properties bindable state. --*/ --QBindable QQuickItem::bindableX() --{ -- return QBindable(&d_func()->x); --} -- --QBindable QQuickItem::bindableY() --{ -- return QBindable(&d_func()->y); --} -- - /*! - \property QQuickItem::width - -@@ -6883,7 +6833,6 @@ qreal QQuickItem::width() const - void QQuickItem::setWidth(qreal w) - { - Q_D(QQuickItem); -- d->width.removeBindingUnlessInWrapper(); - if (qt_is_nan(w)) - return; - -@@ -6896,14 +6845,13 @@ void QQuickItem::setWidth(qreal w) - - d->dirty(QQuickItemPrivate::Size); - -- geometryChange(QRectF(d->x, d->y, w, d->height), -+ geometryChange(QRectF(d->x, d->y, d->width, d->height), - QRectF(d->x, d->y, oldWidth, d->height)); - } - - void QQuickItem::resetWidth() - { - Q_D(QQuickItem); -- d->width.takeBinding(); - d->widthValid = false; - setImplicitWidth(implicitWidth()); - } -@@ -6935,11 +6883,6 @@ qreal QQuickItem::implicitWidth() const - return d->getImplicitWidth(); - } - --QBindable QQuickItem::bindableWidth() --{ -- return QBindable(&d_func()->width); --} -- - /*! - \qmlproperty real QtQuick::Item::implicitWidth - \qmlproperty real QtQuick::Item::implicitHeight -@@ -7013,27 +6956,21 @@ void QQuickItem::setImplicitWidth(qreal w) - Q_D(QQuickItem); - bool changed = w != d->implicitWidth; - d->implicitWidth = w; -- // this uses valueBypassingBindings simply to avoid repeated "am I in a binding" checks -- if (d->width.valueBypassingBindings() == w || widthValid()) { -+ if (d->width == w || widthValid()) { - if (changed) - d->implicitWidthChanged(); -- if (d->width.valueBypassingBindings() == w || widthValid()) -+ if (d->width == w || widthValid()) - return; - changed = false; - } - -- qreal oldWidth = d->width.valueBypassingBindings(); -- Q_ASSERT(!d->width.hasBinding()); -+ qreal oldWidth = d->width; - d->width = w; - - d->dirty(QQuickItemPrivate::Size); - -- qreal x = d->x.valueBypassingBindings(); -- qreal y = d->y.valueBypassingBindings(); -- qreal width = w; -- qreal height = d->height.valueBypassingBindings(); -- geometryChange(QRectF(x, y, width, height), -- QRectF(x, y, oldWidth, height)); -+ geometryChange(QRectF(d->x, d->y, d->width, d->height), -+ QRectF(d->x, d->y, oldWidth, d->height)); - - if (changed) - d->implicitWidthChanged(); -@@ -7045,24 +6982,7 @@ void QQuickItem::setImplicitWidth(qreal w) - bool QQuickItem::widthValid() const - { - Q_D(const QQuickItem); -- /* Logic: The width is valid if we assigned a value -- or a binding to it. Note that a binding evaluation to -- undefined (and thus calling resetWidth) is detached [1]; -- hasBinding will thus return false for it, which is -- what we want here, as resetting width should mean that -- width is invalid (until the binding evaluates to a -- non-undefined value again). -- -- [1]: A detached binding is a binding which is not set on a property. -- In the case of QQmlPropertyBinding and resettable properties, it -- still gets reevaluated when it was detached due to the binding -- returning undefined, and it gets re-attached, once the binding changes -- to a non-undefined value (unless another binding has beenset in the -- meantime). -- See QQmlPropertyBinding::isUndefined and handleUndefinedAssignment -- */ -- -- return d->widthValid || d->width.hasBinding(); -+ return d->widthValid; - } - - /*! -@@ -7079,10 +6999,6 @@ qreal QQuickItem::height() const - void QQuickItem::setHeight(qreal h) - { - Q_D(QQuickItem); -- // Note that we call removeUnlessInWrapper before returning in the -- // NaN and equal value cases; that ensures that an explicit setHeight -- // always removes the binding -- d->height.removeBindingUnlessInWrapper(); - if (qt_is_nan(h)) - return; - -@@ -7095,17 +7011,13 @@ void QQuickItem::setHeight(qreal h) - - d->dirty(QQuickItemPrivate::Size); - -- geometryChange(QRectF(d->x, d->y, d->width, h), -+ geometryChange(QRectF(d->x, d->y, d->width, d->height), - QRectF(d->x, d->y, d->width, oldHeight)); - } - - void QQuickItem::resetHeight() - { - Q_D(QQuickItem); -- // using takeBinding, we remove any existing binding from the -- // property, but preserve the existing value (and avoid some overhead -- // compared to calling setHeight(height()) -- d->height.takeBinding(); - d->heightValid = false; - setImplicitHeight(implicitHeight()); - } -@@ -7135,36 +7047,26 @@ qreal QQuickItem::implicitHeight() const - return d->getImplicitHeight(); - } - --QBindable QQuickItem::bindableHeight() --{ -- return QBindable(&d_func()->height); --} -- - void QQuickItem::setImplicitHeight(qreal h) - { - Q_D(QQuickItem); - bool changed = h != d->implicitHeight; - d->implicitHeight = h; -- if (d->height.valueBypassingBindings() == h || heightValid()) { -+ if (d->height == h || heightValid()) { - if (changed) - d->implicitHeightChanged(); -- if (d->height.valueBypassingBindings() == h || heightValid()) -+ if (d->height == h || heightValid()) - return; - changed = false; - } - -- qreal oldHeight = d->height.valueBypassingBindings(); -- Q_ASSERT(!d->height.hasBinding()); -+ qreal oldHeight = d->height; - d->height = h; - - d->dirty(QQuickItemPrivate::Size); - -- qreal x = d->x.valueBypassingBindings(); -- qreal y = d->y.valueBypassingBindings(); -- qreal width = d->width.valueBypassingBindings(); -- qreal height = d->height.valueBypassingBindings(); -- geometryChange(QRectF(x, y, width, height), -- QRectF(x, y, width, oldHeight)); -+ geometryChange(QRectF(d->x, d->y, d->width, d->height), -+ QRectF(d->x, d->y, d->width, oldHeight)); - - if (changed) - d->implicitHeightChanged(); -@@ -7184,40 +7086,32 @@ void QQuickItem::setImplicitSize(qreal w, qreal h) - - bool wDone = false; - bool hDone = false; -- qreal width = d->width.valueBypassingBindings(); -- qreal height = d->height.valueBypassingBindings(); -- if (width == w || widthValid()) { -+ if (d->width == w || widthValid()) { - if (wChanged) - d->implicitWidthChanged(); -- wDone = width == w || widthValid(); -+ wDone = d->width == w || widthValid(); - wChanged = false; - } -- if (height == h || heightValid()) { -+ if (d->height == h || heightValid()) { - if (hChanged) - d->implicitHeightChanged(); -- hDone = height == h || heightValid(); -+ hDone = d->height == h || heightValid(); - hChanged = false; - } - if (wDone && hDone) - return; - -- qreal oldWidth = width; -- qreal oldHeight = height; -- if (!wDone) { -- width = w; -+ qreal oldWidth = d->width; -+ qreal oldHeight = d->height; -+ if (!wDone) - d->width = w; -- } -- if (!hDone) { -- height = h; -+ if (!hDone) - d->height = h; -- } - - d->dirty(QQuickItemPrivate::Size); - -- qreal x = d->x.valueBypassingBindings(); -- qreal y = d->y.valueBypassingBindings(); -- geometryChange(QRectF(x, y, width, height), -- QRectF(x, y, oldWidth, oldHeight)); -+ geometryChange(QRectF(d->x, d->y, d->width, d->height), -+ QRectF(d->x, d->y, oldWidth, oldHeight)); - - if (!wDone && wChanged) - d->implicitWidthChanged(); -@@ -7231,7 +7125,7 @@ void QQuickItem::setImplicitSize(qreal w, qreal h) - bool QQuickItem::heightValid() const - { - Q_D(const QQuickItem); -- return d->heightValid || d->height.hasBinding(); -+ return d->heightValid; - } - - /*! -@@ -7253,9 +7147,6 @@ QSizeF QQuickItem::size() const - \since 5.10 - - Sets the size of the item to \a size. -- This methods preserves any existing binding on width and height; -- thus any change that triggers the binding to execute again will -- override the set values. - - \sa size, setWidth, setHeight - */ -@@ -7270,8 +7161,8 @@ void QQuickItem::setSize(const QSizeF &size) - - qreal oldHeight = d->height; - qreal oldWidth = d->width; -- d->height.setValueBypassingBindings(size.height()); -- d->width.setValueBypassingBindings(size.width()); -+ d->height = size.height(); -+ d->width = size.width(); - - d->dirty(QQuickItemPrivate::Size); - -diff --git a/src/quick/items/qquickitem.h b/src/quick/items/qquickitem.h -index 6a3a5db921..fd600f79d0 100644 ---- a/src/quick/items/qquickitem.h -+++ b/src/quick/items/qquickitem.h -@@ -46,7 +46,6 @@ - - #include - #include --#include - #include - #include - #include -@@ -106,11 +105,11 @@ class Q_QUICK_EXPORT QQuickItem : public QObject, public QQmlParserStatus - Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQmlListProperty resources READ resources DESIGNABLE false) - Q_PRIVATE_PROPERTY(QQuickItem::d_func(), QQmlListProperty children READ children NOTIFY childrenChanged DESIGNABLE false) - -- Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged BINDABLE bindableX FINAL) -- Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged BINDABLE bindableY FINAL) -+ Q_PROPERTY(qreal x READ x WRITE setX NOTIFY xChanged FINAL) -+ Q_PROPERTY(qreal y READ y WRITE setY NOTIFY yChanged FINAL) - Q_PROPERTY(qreal z READ z WRITE setZ NOTIFY zChanged FINAL) -- Q_PROPERTY(qreal width READ width WRITE setWidth NOTIFY widthChanged RESET resetWidth BINDABLE bindableWidth FINAL) -- Q_PROPERTY(qreal height READ height WRITE setHeight NOTIFY heightChanged RESET resetHeight BINDABLE bindableHeight FINAL) -+ Q_PROPERTY(qreal width READ width WRITE setWidth NOTIFY widthChanged RESET resetWidth FINAL) -+ Q_PROPERTY(qreal height READ height WRITE setHeight NOTIFY heightChanged RESET resetHeight FINAL) - - Q_PROPERTY(qreal opacity READ opacity WRITE setOpacity NOTIFY opacityChanged FINAL) - Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged) -@@ -234,22 +233,18 @@ public: - void setX(qreal); - void setY(qreal); - void setPosition(const QPointF &); -- QBindable bindableX(); -- QBindable bindableY(); - - qreal width() const; - void setWidth(qreal); - void resetWidth(); - void setImplicitWidth(qreal); - qreal implicitWidth() const; -- QBindable bindableWidth(); - - qreal height() const; - void setHeight(qreal); - void resetHeight(); - void setImplicitHeight(qreal); - qreal implicitHeight() const; -- QBindable bindableHeight(); - - QSizeF size() const; - void setSize(const QSizeF &size); -diff --git a/src/quick/items/qquickitem_p.h b/src/quick/items/qquickitem_p.h -index de6bb4aedd..99cd3a3269 100644 ---- a/src/quick/items/qquickitem_p.h -+++ b/src/quick/items/qquickitem_p.h -@@ -59,7 +59,6 @@ - #include - #include - #include --#include - - #if QT_CONFIG(quick_shadereffect) - #include -@@ -563,18 +562,10 @@ public: - - static bool canAcceptTabFocus(QQuickItem *item); - -- void setX(qreal x) {q_func()->setX(x);} -- void xChanged() {q_func()->xChanged();} -- Q_OBJECT_COMPAT_PROPERTY(QQuickItemPrivate, qreal, x, &QQuickItemPrivate::setX, &QQuickItemPrivate::xChanged); -- void setY(qreal y) {q_func()->setY(y);} -- void yChanged() {q_func()->yChanged();} -- Q_OBJECT_COMPAT_PROPERTY(QQuickItemPrivate, qreal, y, &QQuickItemPrivate::setY, &QQuickItemPrivate::yChanged); -- void setWidth(qreal width) {q_func()->setWidth(width);} -- void widthChanged() {q_func()->widthChanged();} -- Q_OBJECT_COMPAT_PROPERTY(QQuickItemPrivate, qreal, width, &QQuickItemPrivate::setWidth, &QQuickItemPrivate::widthChanged); -- void setHeight(qreal height) {q_func()->setHeight(height);} -- void heightChanged() {q_func()->heightChanged();} -- Q_OBJECT_COMPAT_PROPERTY(QQuickItemPrivate, qreal, height, &QQuickItemPrivate::setHeight, &QQuickItemPrivate::heightChanged); -+ qreal x; -+ qreal y; -+ qreal width; -+ qreal height; - qreal implicitWidth; - qreal implicitHeight; - -diff --git a/tests/auto/qml/qqmlbinding/tst_qqmlbinding.cpp b/tests/auto/qml/qqmlbinding/tst_qqmlbinding.cpp -index c0c96ca6e5..bc1d86980f 100644 ---- a/tests/auto/qml/qqmlbinding/tst_qqmlbinding.cpp -+++ b/tests/auto/qml/qqmlbinding/tst_qqmlbinding.cpp -@@ -262,8 +262,8 @@ void tst_qqmlbinding::restoreBindingWithLoop() - QCOMPARE(myItem->x(), qreal(88)); - - //original binding restored -- QString warning = c.url().toString() + QLatin1String(R"(:\d+:\d+: QML Rectangle: Binding loop detected for property "x")"); -- QTest::ignoreMessage(QtWarningMsg, QRegularExpression(warning)); -+ QString warning = c.url().toString() + QLatin1String(":9:5: QML Rectangle: Binding loop detected for property \"x\""); -+ QTest::ignoreMessage(QtWarningMsg, qPrintable(warning)); - rect->setProperty("activateBinding", false); - QCOMPARE(myItem->x(), qreal(88 + 100)); //if loop handling changes this could be 90 + 100 - -diff --git a/tests/auto/qml/qqmlinfo/tst_qqmlinfo.cpp b/tests/auto/qml/qqmlinfo/tst_qqmlinfo.cpp -index 7b7a12ee1b..bb96ba319c 100644 ---- a/tests/auto/qml/qqmlinfo/tst_qqmlinfo.cpp -+++ b/tests/auto/qml/qqmlinfo/tst_qqmlinfo.cpp -@@ -242,7 +242,7 @@ void tst_qqmlinfo::attachedObject() - QVERIFY(warningSpy.isValid()); - - const QString qmlBindingLoopMessage = "QML Rectangle: Binding loop detected for property \"width\""; -- const QString qmlBindingLoopMessageFull = component.url().toString() + ":8:9: " + qmlBindingLoopMessage; -+ const QString qmlBindingLoopMessageFull = component.url().toString() + ":7:5: " + qmlBindingLoopMessage; - QTest::ignoreMessage(QtWarningMsg, qPrintable(qmlBindingLoopMessageFull)); - - const QString cppBindingLoopMessage = "QML AttachedObject (parent or ancestor of Attached): Binding loop detected for property \"a\""; -diff --git a/tests/auto/quick/qquickitem2/CMakeLists.txt b/tests/auto/quick/qquickitem2/CMakeLists.txt -index 6ecd164787..f60d1b2d55 100644 ---- a/tests/auto/quick/qquickitem2/CMakeLists.txt -+++ b/tests/auto/quick/qquickitem2/CMakeLists.txt -@@ -22,8 +22,6 @@ qt_internal_add_test(tst_qquickitem2 - Qt::GuiPrivate - Qt::QmlPrivate - Qt::QuickPrivate -- LIBRARIES -- Qt::TestPrivate - TESTDATA ${test_data} - ) - -diff --git a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp -index 4d381d59a3..3c1abfc21a 100644 ---- a/tests/auto/quick/qquickitem2/tst_qquickitem.cpp -+++ b/tests/auto/quick/qquickitem2/tst_qquickitem.cpp -@@ -43,7 +43,6 @@ - #include "../../shared/util.h" - #include "../shared/visualtestutil.h" - #include "../../shared/platforminputcontext.h" --#include - - using namespace QQuickVisualTestUtil; - -@@ -119,8 +118,6 @@ private slots: - - void childrenProperty(); - void resourcesProperty(); -- void bindableProperties_data(); -- void bindableProperties(); - - void changeListener(); - void transformCrash(); -@@ -2850,30 +2847,6 @@ void tst_QQuickItem::resourcesProperty() - delete object; - } - --void tst_QQuickItem::bindableProperties_data() --{ -- QTest::addColumn("initialValue"); -- QTest::addColumn("newValue"); -- QTest::addColumn("property"); -- -- // can't simply use 3. or 3.0 for the numbers as qreal might -- // be float instead of double... -- QTest::addRow("x") << qreal(3) << qreal(14) << "x"; -- QTest::addRow("y") << qreal(10) << qreal(20) << "y"; -- QTest::addRow("width") << qreal(100) << qreal(200) << "width"; -- QTest::addRow("height") << qreal(50) << qreal(40) << "height"; --} -- --void tst_QQuickItem::bindableProperties() --{ -- QQuickItem item; -- QFETCH(qreal, initialValue); -- QFETCH(qreal, newValue); -- QFETCH(QString, property); -- -- QTestPrivate::testReadWritePropertyBasics(item, initialValue, newValue, property.toUtf8().constData()); --} -- - void tst_QQuickItem::propertyChanges() - { - QQuickView *window = new QQuickView(nullptr); -@@ -2998,7 +2971,7 @@ void tst_QQuickItem::childrenRectBug() - { - QQuickView *window = new QQuickView(nullptr); - -- QString warning = testFileUrl("childrenRectBug.qml").toString() + ":11:9: QML Item: Binding loop detected for property \"height\""; -+ QString warning = testFileUrl("childrenRectBug.qml").toString() + ":7:5: QML Item: Binding loop detected for property \"height\""; - QTest::ignoreMessage(QtWarningMsg, qPrintable(warning)); - QTest::ignoreMessage(QtWarningMsg, qPrintable(warning)); - -@@ -3019,11 +2992,11 @@ void tst_QQuickItem::childrenRectBug2() - { - QQuickView *window = new QQuickView(nullptr); - -- QString warning1 = testFileUrl("childrenRectBug2.qml").toString() + ":10:9: QML Item: Binding loop detected for property \"width\""; -+ QString warning1 = testFileUrl("childrenRectBug2.qml").toString() + ":7:5: QML Item: Binding loop detected for property \"width\""; - QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); - QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); - -- QString warning2 = testFileUrl("childrenRectBug2.qml").toString() + ":11:9: QML Item: Binding loop detected for property \"height\""; -+ QString warning2 = testFileUrl("childrenRectBug2.qml").toString() + ":7:5: QML Item: Binding loop detected for property \"height\""; - QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); - QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); - QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); -diff --git a/tests/auto/quick/qquickmultipointtoucharea/tst_qquickmultipointtoucharea.cpp b/tests/auto/quick/qquickmultipointtoucharea/tst_qquickmultipointtoucharea.cpp -index 056028b3f0..b5ab520055 100644 ---- a/tests/auto/quick/qquickmultipointtoucharea/tst_qquickmultipointtoucharea.cpp -+++ b/tests/auto/quick/qquickmultipointtoucharea/tst_qquickmultipointtoucharea.cpp -@@ -28,7 +28,6 @@ - - #include - #include --#include - #include - #include - #include -@@ -1052,13 +1051,10 @@ void tst_QQuickMultiPointTouchArea::mouseAsTouchpoint() - QPoint touch1(10,10); - QPoint touch2(100,10); - -- // do not break the QML bindings -- auto t1priv = QQuickItemPrivate::get(touch1rect); -- auto t2priv = QQuickItemPrivate::get(touch2rect); -- t1priv->x.setValueBypassingBindings(10); -- t1priv->y.setValueBypassingBindings(10); -- t2priv->x.setValueBypassingBindings(20); -- t2priv->y.setValueBypassingBindings(10); -+ touch1rect->setX(10); -+ touch1rect->setY(10); -+ touch2rect->setX(20); -+ touch2rect->setY(10); - - // Start with mouse, move it, touch a point, move it, touch another. - // Mouse is ignored, both touch points are heeded. diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0002-Completely-cache-the-result-of-qmldir-searches.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0002-Completely-cache-the-result-of-qmldir-searches.patch new file mode 100644 index 000000000..144852543 --- /dev/null +++ b/meta-webos/recipes-qt/qt6/qtdeclarative/0002-Completely-cache-the-result-of-qmldir-searches.patch @@ -0,0 +1,47 @@ +From 1958936d52bff66e0d7723ada0c188581d26f279 Mon Sep 17 00:00:00 2001 +From: Ulf Hermann +Date: Fri, 2 Jul 2021 10:28:57 +0200 +Subject: [PATCH] Completely cache the result of qmldir searches + +Change-Id: Ib6a41c8d20b1443d8d4296190c007f4627086602 +Reviewed-by: Fabian Kosmale +Upstream-Status: Backport [https://codereview.qt-project.org/c/qt/qtdeclarative/+/358018] +--- + src/qml/qml/qqmlimport_p.h | 14 +++++++++++--- + 1 file changed, 11 insertions(+), 3 deletions(-) + +diff --git a/src/qml/qml/qqmlimport_p.h b/src/qml/qml/qqmlimport_p.h +index 946f36b398..6f7951f00f 100644 +--- a/src/qml/qml/qqmlimport_p.h ++++ b/src/qml/qml/qqmlimport_p.h +@@ -286,8 +286,11 @@ QQmlImportDatabase::LocalQmldirResult QQmlImportDatabase::locateLocalQmldir( + QmldirCache *cache = cacheHead; + while (cache) { + if (cache->version == version) { +- if (cache->qmldirFilePath.isEmpty()) +- return QmldirNotFound; ++ if (cache->qmldirFilePath.isEmpty()) { ++ return cache->qmldirPathUrl.isEmpty() ++ ? QmldirNotFound ++ : QmldirInterceptedToRemote; ++ } + if (callback(cache->qmldirFilePath, cache->qmldirPathUrl)) + return QmldirFound; + result = QmldirRejected; +@@ -361,10 +364,15 @@ QQmlImportDatabase::LocalQmldirResult QQmlImportDatabase::locateLocalQmldir( + } + + // Nothing found? Add an empty cache entry to signal that for further requests. +- if (result == QmldirNotFound) { ++ if (result == QmldirNotFound || result == QmldirInterceptedToRemote) { + QmldirCache *cache = new QmldirCache; + cache->version = version; + cache->next = cacheHead; ++ if (result == QmldirInterceptedToRemote) { ++ // The actual value doesn't matter as long as it's not empty. ++ // We only use it to discern QmldirInterceptedToRemote from QmldirNotFound above. ++ cache->qmldirPathUrl = QStringLiteral("intercepted"); ++ } + qmldirCache.insert(uri, cache); + } + diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0003-Fix-qmldir-cache-inconsistency.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0003-Fix-qmldir-cache-inconsistency.patch new file mode 100644 index 000000000..91d5125fa --- /dev/null +++ b/meta-webos/recipes-qt/qt6/qtdeclarative/0003-Fix-qmldir-cache-inconsistency.patch @@ -0,0 +1,199 @@ +From 38e52202f1cbc18e6ec73d6b63519febf0bce1a7 Mon Sep 17 00:00:00 2001 +From: Jaeyoon Jung +Date: Thu, 15 Jul 2021 11:44:55 +0900 +Subject: [PATCH] Fix qmldir cache inconsistency + +If there are multiple qmldir entries for the same QML module in the +import list, the one that comes first should take precedence. The same +applies when constructing the qmldir cache. + +We can achieve that by inserting the entries into the cache in the same +order they appear in the completeQmldirPaths list. + +Pick-to: 6.2 +Change-Id: Ic56a0952b16c4be016180c695d79089fc132319a +Reviewed-by: Fabian Kosmale +Upstream-Status: Backport [https://codereview.qt-project.org/c/qt/qtdeclarative/+/359990] +--- + src/qml/qml/qqmlimport_p.h | 53 +++++++++---------- + .../data/importPathOrder/MyModuleTest.qml | 7 +++ + .../data/importPathOrder/MyView.qml | 3 ++ + .../importPathOrder/path1/MyModule/MyItem.qml | 6 +++ + .../importPathOrder/path1/MyModule/qmldir | 3 ++ + .../importPathOrder/path2/MyModule/MyItem.qml | 6 +++ + .../importPathOrder/path2/MyModule/qmldir | 3 ++ + tests/auto/qml/qqmlimport/tst_qqmlimport.cpp | 16 ++++++ + 8 files changed, 70 insertions(+), 27 deletions(-) + create mode 100644 tests/auto/qml/qqmlimport/data/importPathOrder/MyModuleTest.qml + create mode 100644 tests/auto/qml/qqmlimport/data/importPathOrder/MyView.qml + create mode 100644 tests/auto/qml/qqmlimport/data/importPathOrder/path1/MyModule/MyItem.qml + create mode 100644 tests/auto/qml/qqmlimport/data/importPathOrder/path1/MyModule/qmldir + create mode 100644 tests/auto/qml/qqmlimport/data/importPathOrder/path2/MyModule/MyItem.qml + create mode 100644 tests/auto/qml/qqmlimport/data/importPathOrder/path2/MyModule/qmldir + +diff --git a/src/qml/qml/qqmlimport_p.h b/src/qml/qml/qqmlimport_p.h +index 6f7951f00f..c919a7282a 100644 +--- a/src/qml/qml/qqmlimport_p.h ++++ b/src/qml/qml/qqmlimport_p.h +@@ -278,28 +278,27 @@ QQmlImportDatabase::LocalQmldirResult QQmlImportDatabase::locateLocalQmldir( + // Check cache first + + LocalQmldirResult result = QmldirNotFound; +- QmldirCache *cacheHead = nullptr; +- { +- QmldirCache **cachePtr = qmldirCache.value(uri); +- if (cachePtr) { +- cacheHead = *cachePtr; +- QmldirCache *cache = cacheHead; +- while (cache) { +- if (cache->version == version) { +- if (cache->qmldirFilePath.isEmpty()) { +- return cache->qmldirPathUrl.isEmpty() +- ? QmldirNotFound +- : QmldirInterceptedToRemote; +- } +- if (callback(cache->qmldirFilePath, cache->qmldirPathUrl)) +- return QmldirFound; +- result = QmldirRejected; ++ QmldirCache *cacheTail = nullptr; ++ ++ QmldirCache **cachePtr = qmldirCache.value(uri); ++ QmldirCache *cacheHead = cachePtr ? *cachePtr : nullptr; ++ if (cacheHead) { ++ cacheTail = cacheHead; ++ do { ++ if (cacheTail->version == version) { ++ if (cacheTail->qmldirFilePath.isEmpty()) { ++ return cacheTail->qmldirPathUrl.isEmpty() ++ ? QmldirNotFound ++ : QmldirInterceptedToRemote; + } +- cache = cache->next; ++ if (callback(cacheTail->qmldirFilePath, cacheTail->qmldirPathUrl)) ++ return QmldirFound; ++ result = QmldirRejected; + } +- } ++ } while (cacheTail->next && (cacheTail = cacheTail->next)); + } + ++ + // Do not try to construct the cache if it already had any entries for the URI. + // Otherwise we might duplicate cache entries. + if (result != QmldirNotFound) +@@ -349,15 +348,15 @@ QQmlImportDatabase::LocalQmldirResult QQmlImportDatabase::locateLocalQmldir( + cache->version = version; + cache->qmldirFilePath = qmldirAbsoluteFilePath; + cache->qmldirPathUrl = url; +- cache->next = cacheHead; +- qmldirCache.insert(uri, cache); +- cacheHead = cache; +- +- if (result != QmldirFound) { +- result = callback(qmldirAbsoluteFilePath, url) +- ? QmldirFound +- : QmldirRejected; +- } ++ cache->next = nullptr; ++ if (cacheTail) ++ cacheTail->next = cache; ++ else ++ qmldirCache.insert(uri, cache); ++ cacheTail = cache; ++ ++ if (result != QmldirFound) ++ result = callback(qmldirAbsoluteFilePath, url) ? QmldirFound : QmldirRejected; + + // Do not return here. Rather, construct the complete cache for this URI. + } +diff --git a/tests/auto/qml/qqmlimport/data/importPathOrder/MyModuleTest.qml b/tests/auto/qml/qqmlimport/data/importPathOrder/MyModuleTest.qml +new file mode 100644 +index 0000000000..5ac9ec4fb2 +--- /dev/null ++++ b/tests/auto/qml/qqmlimport/data/importPathOrder/MyModuleTest.qml +@@ -0,0 +1,7 @@ ++import QtQuick ++import MyModule ++ ++Item { ++ MyItem { objectName: "myItem1" } ++ MyView {} ++} +diff --git a/tests/auto/qml/qqmlimport/data/importPathOrder/MyView.qml b/tests/auto/qml/qqmlimport/data/importPathOrder/MyView.qml +new file mode 100644 +index 0000000000..a4fdcb51a0 +--- /dev/null ++++ b/tests/auto/qml/qqmlimport/data/importPathOrder/MyView.qml +@@ -0,0 +1,3 @@ ++import MyModule ++ ++MyItem { objectName: "myItem2" } +diff --git a/tests/auto/qml/qqmlimport/data/importPathOrder/path1/MyModule/MyItem.qml b/tests/auto/qml/qqmlimport/data/importPathOrder/path1/MyModule/MyItem.qml +new file mode 100644 +index 0000000000..3da82d1b77 +--- /dev/null ++++ b/tests/auto/qml/qqmlimport/data/importPathOrder/path1/MyModule/MyItem.qml +@@ -0,0 +1,6 @@ ++import QtQuick ++ ++Item { ++ width: 100 ++ height: 100 ++} +diff --git a/tests/auto/qml/qqmlimport/data/importPathOrder/path1/MyModule/qmldir b/tests/auto/qml/qqmlimport/data/importPathOrder/path1/MyModule/qmldir +new file mode 100644 +index 0000000000..edfd2c9462 +--- /dev/null ++++ b/tests/auto/qml/qqmlimport/data/importPathOrder/path1/MyModule/qmldir +@@ -0,0 +1,3 @@ ++module MyModule ++ ++MyItem MyItem.qml +diff --git a/tests/auto/qml/qqmlimport/data/importPathOrder/path2/MyModule/MyItem.qml b/tests/auto/qml/qqmlimport/data/importPathOrder/path2/MyModule/MyItem.qml +new file mode 100644 +index 0000000000..ed02d2df7a +--- /dev/null ++++ b/tests/auto/qml/qqmlimport/data/importPathOrder/path2/MyModule/MyItem.qml +@@ -0,0 +1,6 @@ ++import QtQuick ++ ++Item { ++ width: 200 ++ height: 200 ++} +diff --git a/tests/auto/qml/qqmlimport/data/importPathOrder/path2/MyModule/qmldir b/tests/auto/qml/qqmlimport/data/importPathOrder/path2/MyModule/qmldir +new file mode 100644 +index 0000000000..edfd2c9462 +--- /dev/null ++++ b/tests/auto/qml/qqmlimport/data/importPathOrder/path2/MyModule/qmldir +@@ -0,0 +1,3 @@ ++module MyModule ++ ++MyItem MyItem.qml +diff --git a/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp b/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp +index 4f2b4f6b13..572c8771a0 100644 +--- a/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp ++++ b/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp +@@ -205,6 +205,22 @@ void tst_QQmlImport::importPathOrder() + engine.addImportPath(qml2Imports); + expectedImportPaths.move(expectedImportPaths.indexOf(qml2Imports), 0); + QCOMPARE(engine.importPathList(), expectedImportPaths); ++ ++ // Verify if the type in the module comes first in the import path list ++ // takes the precedence. In the case below, the width of both items ++ // should be the same to that of the type defined in "path2". ++ engine.addImportPath(testFile("importPathOrder/path1")); ++ engine.addImportPath(testFile("importPathOrder/path2")); ++ QQmlComponent component(&engine, testFile("importPathOrder/MyModuleTest.qml")); ++ QScopedPointer rootItem(component.create()); ++ QVERIFY(component.errorString().isEmpty()); ++ QVERIFY(!rootItem.isNull()); ++ QQuickItem *item1 = rootItem->findChild("myItem1"); ++ QQuickItem *item2 = rootItem->findChild("myItem2"); ++ QVERIFY(item1 != nullptr); ++ QVERIFY(item2 != nullptr); ++ QCOMPARE(item1->width(), 200); ++ QCOMPARE(item2->width(), 200); + } + + Q_DECLARE_METATYPE(QQmlImports::ImportVersion) diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0004-Check-if-a-device-in-knownPointingDevices-is-destroy.patch similarity index 100% rename from meta-webos/recipes-qt/qt6/qtdeclarative/0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch rename to meta-webos/recipes-qt/qt6/qtdeclarative/0004-Check-if-a-device-in-knownPointingDevices-is-destroy.patch diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend index 85259eff9..3ded202aa 100644 --- a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend @@ -2,13 +2,16 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos65" +EXTENDPRAUTO_append = "webos67" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" # Upstream-Status: Backport, Submitted SRC_URI_append_class-target = " \ - file://0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch \ + file://0001-Fix-binding-functor-addressing-in-QQmlPropertyBindin.patch \ + file://0002-Completely-cache-the-result-of-qmldir-searches.patch \ + file://0003-Fix-qmldir-cache-inconsistency.patch \ + file://0004-Check-if-a-device-in-knownPointingDevices-is-destroy.patch \ " # Upstream-Status: Inappropriate @@ -22,11 +25,6 @@ SRC_URI_append_class-native = " \ file://0001-Allow-warnings-from-qmllint.patch \ " -# TODO: It causes crash in webos emulator build (QTBUG-93890) -SRC_URI_append_qemux86_class-target = " \ - file://0001-Revert-QQuickItem-Make-x-y-width-height-bindable.patch \ -" - # Supplement tool for qmllint inherit webos_qmake6_paths DEPENDS_append_class-native = " python3-regex-native" From a9b626ad3f580a0510bd18eae5d00269bdb4e31f Mon Sep 17 00:00:00 2001 From: Kyungjik Min Date: Sat, 10 Jul 2021 02:56:37 +0900 Subject: [PATCH 0019/2022] media-codec-interface=r2 :Release Notes: Fix package config file :Detailed Notes: Fix package config template name as .pc.in and use webOS cmake module for replacing webos variables correctly. :Testing Performed: Local build test :QA Notes: N/A :Issues Addressed: [WRN-1964] Create webOS SDK for building chromium without yocto environment [WRN-2280] Check feasibility for building webruntime with webOS SDK Change-Id: Icf09252899704d3031c222ab2e6a73ade3eb0f87 --- .../media-codec-interface.bb | 7 +++- ...module-for-replacing-webos-variables.patch | 32 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface/0001-Include-webOS-module-for-replacing-webos-variables.patch diff --git a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb index 93684c2c3..492dfe5f7 100644 --- a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb +++ b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb @@ -22,7 +22,7 @@ DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad DEPENDS_append_rpi = " virtual/libomxil" WEBOS_VERSION = "1.0.0-3_13f4a0e50c95f7ecf04be37949c0da266ba221d3" -PR = "r1" +PR = "r2" SRCREV_mcil = "ef2a9b183262a04e8246df951acf4693a18b3cd6" @@ -36,6 +36,11 @@ SRC_URI_append = "\ ${WEBOS_GIT_REPO_COMPLETE_MCIL};destsuffix=git/src/codec_impl;name=mcil \ " +FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +SRC_URI_append = "\ + file://0001-Include-webOS-module-for-replacing-webos-variables.patch \ +" + S = "${WORKDIR}/git" FILES_SOLIBSDEV = "" diff --git a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface/0001-Include-webOS-module-for-replacing-webos-variables.patch b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface/0001-Include-webOS-module-for-replacing-webos-variables.patch new file mode 100644 index 000000000..59617e055 --- /dev/null +++ b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface/0001-Include-webOS-module-for-replacing-webos-variables.patch @@ -0,0 +1,32 @@ +From 3d879e5ff146067af014898efde115115f23ad62 Mon Sep 17 00:00:00 2001 +From: Kyungjik Min +Date: Sat, 10 Jul 2021 02:35:13 +0900 +Subject: [PATCH] Include webOS module for replacing webos variables correctly + +--- + src/CMakeLists.txt | 5 ++++- + ...{media-codec-interface.pc => media-codec-interface.pc.in} | 0 + 2 files changed, 4 insertions(+), 1 deletion(-) + rename src/{media-codec-interface.pc => media-codec-interface.pc.in} (100%) + +diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt +index 18cbd41..257218e 100644 +--- a/src/CMakeLists.txt ++++ b/src/CMakeLists.txt +@@ -53,5 +53,8 @@ install(TARGETS ${MEDIA_CODEC_INTERFACE_LIB} DESTINATION lib) + install(FILES ${MEDIA_CODEC_INTERFACE_HEADERS} DESTINATION include/mcil) + + #install media-codec-interface.pc file +-install(FILES media-codec-interface.pc DESTINATION share/pkgconfig) ++include(webOS/webOS) ++webos_modules_init(1 6 3) ++configure_file(media-codec-interface.pc.in ${CMAKE_BINARY_DIR}/media-codec-interface.pc @ONLY) ++install(FILES ${CMAKE_BINARY_DIR}/media-codec-interface.pc DESTINATION share/pkgconfig) + +diff --git a/src/media-codec-interface.pc b/src/media-codec-interface.pc.in +similarity index 100% +rename from src/media-codec-interface.pc +rename to src/media-codec-interface.pc.in +-- +2.17.1 + From 621559e0f2af2edc8f653dbce12299140bdd395a Mon Sep 17 00:00:00 2001 From: Kyungjik Min Date: Mon, 19 Jul 2021 15:01:48 +0900 Subject: [PATCH 0020/2022] meta-environment=webos2 :Release Notes: Add TUNE_FEATURES variable to sdk environment :Detailed Notes: :Testing Performed: Local build test :QA Notes: N/A :Issues Addressed: [WRN-1964] Create webOS SDK for building chromium without yocto environment [WRN-2280] Check feasibility for building webruntime with webOS SDK Change-Id: Icbc8bf9fd3da265b45f32539e374dbba8efa5ed8 --- meta-webos/recipes-core/meta/meta-environment.bbappend | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-core/meta/meta-environment.bbappend b/meta-webos/recipes-core/meta/meta-environment.bbappend index 46eb99c86..d62b315e2 100644 --- a/meta-webos/recipes-core/meta/meta-environment.bbappend +++ b/meta-webos/recipes-core/meta/meta-environment.bbappend @@ -1,9 +1,10 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO_append = "webos2" # Used by mkspecs/features/webos-variables.prf toolchain_create_sdk_env_script_append() { + echo 'export TUNE_FEATURES="${TUNE_FEATURES}"' >> $script echo "export WEBOS_INSTALL_BINS=${target_exec_prefix}/bin" >> $script echo "export WEBOS_INSTALL_LIBS=${target_libdir}" >> $script echo "export WEBOS_INSTALL_HEADERS=${target_includedir}" >> $script From f4fef8d121b36b6c3a45f042f3c14bb49e5e2ffc Mon Sep 17 00:00:00 2001 From: "Muniraju A/LGSIA APP-3(muniraju.a@lge.com)" Date: Thu, 22 Jul 2021 11:27:50 +0530 Subject: [PATCH 0021/2022] ose: Add com.webos.app.camera=1-r0,v0.0.1 :Release Notes: Add Camera Application :Detailed Notes: com.webos.app.camera: ..submissions/1 2095d35 Add Camera source code c4d17c7 Initial empty repository :Testing Performed: Refer [WRN-3663] for test results :QA Notes: NA :Issues Addressed: [WRN-3663] CCC: ose: Add com.webos.app.camera=1-r0,v0.0.1 [WRN-3295] Delivery the camera app source code Change-Id: I74286a21fa0848c3e6802ddf2dc32851f38249c8 --- .../packagegroup-webos-extended.bb | 1 + .../com.webos.app.camera.bb | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index 973d9e7ae..363338448 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -229,6 +229,7 @@ RDEPENDS_${PN} = " \ " RDEPENDS_${PN}_append_webos = " \ + com.webos.app.camera \ com.webos.app.mediaviewer \ com.webos.app.imageviewer \ com.webos.app.videoplayer \ diff --git a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb new file mode 100644 index 000000000..cd237d487 --- /dev/null +++ b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb @@ -0,0 +1,25 @@ +# Copyright (c) 2021 LG Electronics, Inc. + +SUMMARY = "Camera application" +AUTHOR = "Muniraju " +SECTION = "webos/apps" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = " \ +file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ +file://oss-pkg-info.yaml;md5=3072ffcf5bdbbc376ed21c9d378d14d5 \ +" + +WEBOS_VERSION = "0.0.1-1_34b7629927a2eeb6eeb3db7563184136e3ea2213" +PR = "r0" + +inherit webos_component +inherit webos_enhanced_submissions +inherit webos_enactjs_app +inherit webos_public_repo + +WEBOS_ENACTJS_SHRINKWRAP_OVERRIDE = "false" + +SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" +S = "${WORKDIR}/git" + +WEBOS_ENACTJS_APP_ID = "com.webos.app.camera" From f0028a4fe18d4b397912068ee698c5f49c5979f9 Mon Sep 17 00:00:00 2001 From: gururaj patil Date: Thu, 22 Jul 2021 16:05:41 +0530 Subject: [PATCH 0022/2022] ose: g-camera-pipeline=13.gav.20 :Release Notes: Fix a crash in camera pipeline Add error handling in camera pipeline :Detailed Notes: g-camera-pipeline : submissions/13.gav.19..submissions/13.gav.20 6693bab Camera pipeline error handling :Testing Performed: Please refer test result in WRN-2951 :QA Notes: NA :Issues Addressed: [WRN-3655] CCC: g-camera-pipeline=13.gav.20 [WRN-3124] Fix camera pipeline crash issue [WRN-3094] [RDX_CRASH][webos] /usr/sbin/g-camera-pipeline in n/a (libgstcamsrc.so + 0x2080) Change-Id: I649afd2a2d644cca135e407369d560c552b618fd --- meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb index 1152880a3..da0358a67 100644 --- a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb +++ b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb @@ -22,7 +22,7 @@ WEBOS_VERSION = "1.0.0-15_e9d8253132f6745c6cbff49a6e7fdd345b50aad9" PR = "r9" WEBOS_GIT_PARAM_BRANCH_raspberrypi4 = "@gav" -WEBOS_VERSION_raspberrypi4 = "1.0.0-13.gav.19_b6a4ad582d94127dd4ba114203e93845e63d2f15" +WEBOS_VERSION_raspberrypi4 = "1.0.0-13.gav.20_20f5e22b8e1fae6c44a71b729415ee72d87a51e0" DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad pkgconfig umediaserver media-resource-calculator com.webos.service.camera" DEPENDS_append_rpi = " userland" From 17309094277f6141d1646ce23411380bacfdf69f Mon Sep 17 00:00:00 2001 From: "akanksha.gupta" Date: Thu, 22 Jul 2021 14:25:34 +0530 Subject: [PATCH 0023/2022] ose:luna-downloadmgr=11 :Release Notes: Fix for static issues :Detailed Notes: luna-downloadmgr: submissions/10..submissions/11 53db994 Fix static analysis issues :Testing Performed: Test Result updated in WRN-3650 :QA Notes: N/A :Issues Addressed: [WRN-3650] CCC: ose: luna-downloadmgr=11 [WRN-3216] Fix static issue for luna-downloadmgr OSE Change-Id: Iade22fca8e21e372f238f79b53a7f60ca152da0f --- meta-webos/recipes-webos/luna-downloadmgr/luna-downloadmgr.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/luna-downloadmgr/luna-downloadmgr.bb b/meta-webos/recipes-webos/luna-downloadmgr/luna-downloadmgr.bb index c61555ffe..dbde80e05 100644 --- a/meta-webos/recipes-webos/luna-downloadmgr/luna-downloadmgr.bb +++ b/meta-webos/recipes-webos/luna-downloadmgr/luna-downloadmgr.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "libpbnjson luna-service2 sqlite3 curl uriparser pmloglib jemalloc luna-prefs boost glib-2.0" RDEPENDS_${PN} = "applicationinstallerutility" -WEBOS_VERSION = "4.0.0-10_377c6231315315aa1389fe66f2fe1af32d51a06d" +WEBOS_VERSION = "4.0.0-11_0d0d19e810ade0dff8443daa4f0c845b40662b93" PR = "r11" inherit webos_component From 36142bb049925ee34328cc95254e7e694ec69088 Mon Sep 17 00:00:00 2001 From: Jimmy Ohn Date: Thu, 22 Jul 2021 11:51:48 +0900 Subject: [PATCH 0024/2022] com.webos.service.mediaindexer=15-r6 :Release Notes: Fix Coverity issue in mediaindexer service Add LICENSE file :Detailed Notes: com.webos.service.mediaindexer : submissions/13..submissions/15 297fea9 Add LICENSE file d60faca Fix coverity issues :Testing Performed: Please refer test result in WRN-3599 :QA Notes: NA :Issues Addressed: [WRN-3599] CCC: com.webos.service.mediaindexer=15-r6 [WRN-3598] Fix coverity issue for media indexer service Change-Id: I62c9953945a6ae12345ec60627e89d762127fee2 --- .../com.webos.service.mediaindexer.bb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb b/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb index 5dce5f463..35d573e46 100644 --- a/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb +++ b/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb @@ -3,10 +3,10 @@ SUMMARY = "Media indexer service" AUTHOR = "Jaehoon Lee " LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" +LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10" -WEBOS_VERSION = "1.0.0-13_e2f82b1d05c193ba40d171ad532b4fdb95814168" -PR = "r5" +WEBOS_VERSION = "1.0.0-15_76b9263fcf1d10ea9a7d706fb0e971c6d1d2c575" +PR = "r6" inherit webos_component inherit webos_enhanced_submissions From 074237e5ca1d7c327cf67c2b15a97ee6726ff65f Mon Sep 17 00:00:00 2001 From: Krishna Date: Tue, 20 Jul 2021 16:51:52 +0530 Subject: [PATCH 0025/2022] ose: com.webos.service.pdm=63-r5 :Release Notes: Fix coverity issue and license issue :Detailed Notes: Fixing the below static issues 8994255 Uninitialized pointer read 8994254 Uninitialized pointer read Added license details in root path rather than using COMMON_LICENSE_DIR in yocto recipe. com.webos.service.pdm: submissions/61..submissions/63 d062279 Fix coverity issue 1b0118d Fix license issue :Testing Performed: Refer [WRN-3556] for test results :QA Notes: NA :Issues Addressed: [WRN-3556] CCC: com.webos.service.pdm=63-r5 [WRN-3352] Verification of static issue Change-Id: I0232c92f38e95de8318f1c030f293075dcacd916 --- .../com.webos.service.pdm/com.webos.service.pdm.bb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb b/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb index fa70ea6cb..3266e9f57 100644 --- a/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb +++ b/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb @@ -5,7 +5,7 @@ DESCRIPTION = "Service for detecting and managing physical devices using netlink SECTION = "webos/services" AUTHOR = "Preetham Bhat " LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ +LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " @@ -16,8 +16,8 @@ RDEPENDS_${PN} = "fuse-utils hdparm gphoto2 gphotofs sdparm gptfdisk-sgdisk e2fs RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_pdm-plugin}" -WEBOS_VERSION = "1.0.1-61_cf23561a537ddff69b12105d3fd673b59c54f72a" -PR = "r4" +WEBOS_VERSION = "1.0.1-63_8bd7c6175eb2ca1d20dd628c99ac9f77b9cb1a90" +PR = "r5" inherit webos_component inherit webos_enhanced_submissions From dd3703aa0a2e9c564f0198cb2950c1baadb3d555 Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Wed, 21 Jul 2021 09:51:27 +0900 Subject: [PATCH 0026/2022] auto-luna-surface-manager=35-r7 libtimedautomata=5-r3 luna-surfacemanager=355-r51 qml-webos-bridge=125-r17 qml-webos-components=54-r16 qml-webos-framework=160-r33 qt-features-webos=50-r8 qtbase-plugins-webos=8-r3 qtwayland-webos=65-r14 webos-wayland-extensions=42-r5 :Release Notes: Fix the issue where VKB does not open if xinput intervenes. Improve the animation rendering quality in Qt apps. Update LIC_FILES_CHKSUM for LSM components. :Detailed Notes: auto-luna-surface-manager: submissions/34..submissions/35 2ff8af2 Add LICENSE libtimedautomata: submissions/4..submissions/5 5343ec3 Add LICENSE luna-surfacemanager: submissions/354..submissions/355 f59a4a54 Update LICENSE 4e1071ce base: Add qml application for animation test 9c3253ea Fix inconsistent keyboard focus when grabbed fd0a60ea Set objectName for WebOSSurface qml-webos-bridge: submissions/124..submissions/125 4393217 Update LICENSE qml-webos-components: submissions/53..submissions/54 62c7caf Update LICENSE qml-webos-framework: submissions/159..submissions/160 90001f7 Update LICENSE qt-features-webos: submissions/49..submissions/50 7ba4ebe Update LICENSE qtbase-plugins-webos: submissions/7..submissions/8 c831a74 Add LICENSE qtwayland-webos: submissions/64..submissions/65 0da25a0 Update LICENSE aa5afc9 Synchronize animation with frame callback webos-wayland-extensions: submissions/41..submissions/42 1804ef5 Update LICENSE :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-3180] CCC: auto-luna-surface-manager=35-r7 libtimedautomata=5-r3 luna-surfacemanager=355-r51 qml-webos-bridge=125-r17 qml-webos-components=54-r16 qml-webos-framework=160-r33 qt-features-webos=50-r8 qtbase-plugins-webos=8-r3 qtwayland-webos=65-r14 and more Change-Id: I5150bf6f469379efdbfb3f7e79a96e497edb2c8c --- .../auto-luna-surface-manager.bb | 6 +++--- .../recipes-webos/libtimedautomata/libtimedautomata.bb | 8 ++++---- .../luna-surfacemanager/luna-surfacemanager.bb | 6 +++--- .../recipes-webos/qml-webos-bridge/qml-webos-bridge.bb | 6 +++--- .../qml-webos-components/qml-webos-components.bb | 6 +++--- .../qml-webos-framework/qml-webos-framework.bb | 6 +++--- .../recipes-webos/qt-features-webos/qt-features-webos.bb | 6 +++--- .../qtbase-plugins-webos/qtbase-plugins-webos.bb | 6 +++--- .../recipes-webos/qtwayland-webos/qtwayland-webos.bb | 6 +++--- .../webos-wayland-extensions/webos-wayland-extensions.bb | 8 ++++---- 10 files changed, 32 insertions(+), 32 deletions(-) diff --git a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb index c03a90062..726ab7b7e 100644 --- a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb +++ b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb @@ -5,7 +5,7 @@ AUTHOR = "Jaeyoon Jung " SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=1bbf047e5c70344c074aaaa58a668952 \ " @@ -15,8 +15,8 @@ RDEPENDS_${PN} = " \ qtbase-plugins-webos \ " -WEBOS_VERSION = "0.0.1-34_f552d2fa5a17ab458750aff94828b348203349e2" -PR = "r6" +WEBOS_VERSION = "0.0.1-35_be8a0de5bf20f2ba903eef35a31210f0859a55bb" +PR = "r7" inherit webos_qmake6 inherit webos_enhanced_submissions diff --git a/meta-webos/recipes-webos/libtimedautomata/libtimedautomata.bb b/meta-webos/recipes-webos/libtimedautomata/libtimedautomata.bb index ed1359fe0..2bb47105b 100644 --- a/meta-webos/recipes-webos/libtimedautomata/libtimedautomata.bb +++ b/meta-webos/recipes-webos/libtimedautomata/libtimedautomata.bb @@ -1,16 +1,16 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2021 LG Electronics, Inc. SUMMARY = "Timed Automata library for Event translation" AUTHOR = "Byunggul Koh " SECTION = "webos/libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=cb8a469702ce6c0681fd122a17c16af8 \ " -WEBOS_VERSION = "0.0.1-4_10bb6c5c96789f8e572498d427790a7b0d8f038b" -PR = "r2" +WEBOS_VERSION = "0.0.1-5_efbec9b440ad9e1201b26aae868310935c32e010" +PR = "r3" inherit webos_enhanced_submissions inherit webos_public_repo diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index 150e10fa8..d2aa6b99b 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -5,14 +5,14 @@ AUTHOR = "Anupam Kaul " SECTION = "webos/libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=2c7c706c6a586a6abec428c64006d86b \ " DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0" -WEBOS_VERSION = "2.0.0-354_31bc3a31843f86adaa622097f628aa4e3b65e429" -PR = "r50" +WEBOS_VERSION = "2.0.0-355_887b8d038d64cbec6929f12a5139d96d4ad4a837" +PR = "r51" inherit webos_qmake6 inherit webos_enhanced_submissions diff --git a/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb b/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb index 85eda86fb..19fbfa9ec 100644 --- a/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb +++ b/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb @@ -5,15 +5,15 @@ AUTHOR = "Anupam Kaul " SECTION = "webos/libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=5d5cc0ac1cf0f514284f99a9777cfe5c \ " DEPENDS = "qtdeclarative luna-service2 glib-2.0" RDEPENDS_${PN} += "qml-webos-components" -WEBOS_VERSION = "1.0.0-124_b245de2ea1eb464fbe7d6b23756c1eff3fb1ba80" -PR = "r16" +WEBOS_VERSION = "1.0.0-125_7f489c3f7f76201058979c00b5095703277f815a" +PR = "r17" inherit webos_qmake6 inherit webos_enhanced_submissions diff --git a/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb b/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb index 2a8eabad7..08b2b35db 100644 --- a/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb +++ b/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb @@ -5,14 +5,14 @@ AUTHOR = "Anupam Kaul " SECTION = "webos/libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=9dc14fd8aee1928cb4947063ac388f74 \ " DEPENDS = "qtdeclarative pmloglib librdx qt-features-webos" -WEBOS_VERSION = "1.0.0-53_7daca15a4b08c2d9579b63b16f755da3dc3c08ac" -PR = "r15" +WEBOS_VERSION = "1.0.0-54_b995381efeafef72262bfd5d934ab2718c58fc5d" +PR = "r16" inherit webos_qmake6 inherit webos_machine_impl_dep diff --git a/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb b/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb index be4f59338..94d207b28 100644 --- a/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb +++ b/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb @@ -5,7 +5,7 @@ AUTHOR = "Mikko Levonmaa " SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=9e100013a76448cbe7c14134b0974453 \ " @@ -18,8 +18,8 @@ RPROVIDES_${PN}-examples = " \ eos.widgetgallery \ " -WEBOS_VERSION = "1.0.0-159_3cdfd0b4c44de9c5060638731090e1602d90ffa5" -PR = "r32" +WEBOS_VERSION = "1.0.0-160_d89ab0a01a224a6139bdfa916736df67ff6dda44" +PR = "r33" inherit webos_qmake6 inherit webos_enhanced_submissions diff --git a/meta-webos/recipes-webos/qt-features-webos/qt-features-webos.bb b/meta-webos/recipes-webos/qt-features-webos/qt-features-webos.bb index 46b12e5c1..1d6bad7c4 100644 --- a/meta-webos/recipes-webos/qt-features-webos/qt-features-webos.bb +++ b/meta-webos/recipes-webos/qt-features-webos/qt-features-webos.bb @@ -5,14 +5,14 @@ AUTHOR = "Anupam Kaul " SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=35b2f0d27bf4833f2764dfe176fa1e9c \ " DEPENDS = "qtbase" -WEBOS_VERSION = "1.0.0-49_3d1cd246bf9f2898f6eda02548619aad63f96830" -PR = "r7" +WEBOS_VERSION = "1.0.0-50_e3cd3c25717605a153d10fcccbf35893a38ebb8b" +PR = "r8" inherit webos_qmake6 inherit webos_enhanced_submissions diff --git a/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb index efdf23854..99f7a006e 100644 --- a/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb +++ b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb @@ -5,14 +5,14 @@ AUTHOR = "Elvis Lee " SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=3f3152217d6f7d50567ddadebe5f22a2 \ " DEPENDS = "qtbase" -WEBOS_VERSION = "1.0.0-7_7c83c36d7a4170126b264c1ee11abecf29b336f8" -PR = "r2" +WEBOS_VERSION = "1.0.0-8_f342c962b8cf93759939887fec52d41209cdb399" +PR = "r3" inherit webos_qmake6 inherit webos_enhanced_submissions diff --git a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb index cc63164f6..6f5513d71 100644 --- a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb +++ b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb @@ -5,14 +5,14 @@ AUTHOR = "Elvis Lee " SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=7187b1fb0318bb1af23edbf4237ee8b8 \ " DEPENDS = "qtwayland webos-wayland-extensions libxkbcommon qt-features-webos wayland-native qtwayland-native" -WEBOS_VERSION = "2.0.0-64_56a9b511166c7db8769a8016280ee1df0d532ee5" -PR = "r13" +WEBOS_VERSION = "2.0.0-65_5abdeaf4078f50edacdaf5a22c2213857f8ffc22" +PR = "r14" inherit webos_qmake6 inherit webos_enhanced_submissions diff --git a/meta-webos/recipes-webos/webos-wayland-extensions/webos-wayland-extensions.bb b/meta-webos/recipes-webos/webos-wayland-extensions/webos-wayland-extensions.bb index 77b1d84e1..f144e5a83 100644 --- a/meta-webos/recipes-webos/webos-wayland-extensions/webos-wayland-extensions.bb +++ b/meta-webos/recipes-webos/webos-wayland-extensions/webos-wayland-extensions.bb @@ -1,18 +1,18 @@ -# Copyright (c) 2013-2020 LG Electronics, Inc. +# Copyright (c) 2013-2021 LG Electronics, Inc. SUMMARY = "Wayland protocol extensions for webOS" AUTHOR = "Anupam Kaul " SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=3b9914d0b76f24145c4c707c66c944bc \ " DEPENDS = "wayland wayland-native" -WEBOS_VERSION = "1.0.0-41_ee132e082fb506e42a6a3d487b885a29e4b3156a" -PR = "r4" +WEBOS_VERSION = "1.0.0-42_bac07bee30665b5f33440c61cff1fcd8f670a24c" +PR = "r5" inherit webos_component inherit webos_cmake From ae85e9f7f543032bdf2ce90d44089c8bd17d36a8 Mon Sep 17 00:00:00 2001 From: Vibhanshu Dhote Date: Sun, 25 Jul 2021 20:16:29 +0530 Subject: [PATCH 0027/2022] com.webos.service.location=95-r2 :Release Notes: Fix Coverity issues :Detailed Notes: com.webos.service.location: submissions/92..submissions/95 d4294cb Add LICENSE file 510a923 Fix compilation issue 4c01ef5 Fix coverity issues :Testing Performed: Tested results updated in WRN-3691 :QA Notes: N/A :Issues Addressed: [WRN-3691] CCC: com.webos.service.location=95-r2 [CID-8994236] Uninitialized scalar variable Change-Id: I56fd49836680e02dd9eb7c473f04985bd2dade6b --- .../com.webos.service.location.bb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-location/com.webos.service.location/com.webos.service.location.bb b/meta-webos/recipes-location/com.webos.service.location/com.webos.service.location.bb index cf76e5f37..37b1242bb 100644 --- a/meta-webos/recipes-location/com.webos.service.location/com.webos.service.location.bb +++ b/meta-webos/recipes-location/com.webos.service.location/com.webos.service.location.bb @@ -5,14 +5,14 @@ AUTHOR = "vibhanshu.dhote " SECTION = "webos/location" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ file://oss-pkg-info.yaml;md5=7be9908f876cc5f1edaf1124d0084067 \ " DEPENDS = "glib-2.0 libpbnjson libxml2 pmloglib luna-service2 luna-prefs loc-utils boost" -WEBOS_VERSION = "1.0.0-92_46b4dabd4bc0c6c6be225548208cac0c86ffe81a" -PR = "r1" +WEBOS_VERSION = "1.0.0-95_63c28765cf2e098a3f25ac91d27144d56b21a0a4" +PR = "r2" inherit webos_component inherit webos_public_repo From 1f310fce1abcf52d67fc861e8e40577003520231 Mon Sep 17 00:00:00 2001 From: "penikelapati.kumar" Date: Tue, 22 Jun 2021 18:07:46 +0530 Subject: [PATCH 0028/2022] connman=webos19 :Release Notes: Fix connman crash :Detailed Notes: connman: webos18..webos19 Added .patch to fix connman crash :Testing Performed: Tested results updated in WRN-3682 :QA Notes: N/A :Issues Addressed: [WRN-3682] CCC: connman=webos19 [WRN-3452] [RDX_CRASH][webos] /usr/sbin/connmand in n/a (libc.so.6 + 0x1ac26) Change-Id: I3dca1e18fd01993cf117ea65773bbdd49d11ec99 --- .../connman/0022-Fix-connman-crash.patch | 44 +++++++++++++++++++ .../connman/connman_%.bbappend | 3 +- 2 files changed, 46 insertions(+), 1 deletion(-) create mode 100644 meta-webos/recipes-connectivity/connman/connman/0022-Fix-connman-crash.patch diff --git a/meta-webos/recipes-connectivity/connman/connman/0022-Fix-connman-crash.patch b/meta-webos/recipes-connectivity/connman/connman/0022-Fix-connman-crash.patch new file mode 100644 index 000000000..5eecd00d7 --- /dev/null +++ b/meta-webos/recipes-connectivity/connman/connman/0022-Fix-connman-crash.patch @@ -0,0 +1,44 @@ +From 42003869b7c824eb9b705e27bcced34ec1119045 Mon Sep 17 00:00:00 2001 +From: "penikelapati.kumar" +Date: Thu, 22 Jul 2021 16:26:18 +0530 +Subject: [PATCH] Fix connman crash + +:Release Notes: +Fix crash issue in connman + +:Detailed Notes: +when p2p listen state diabled memory not freed properly so its +crashing in interface_removed. + +:Testing Performed: +Build successfully. +Ethrenet/wifi connection successfully. + +:QA Notes: +N/A + +:Issues Addressed: +[WRN-3452] [RDX_CRASH][webos] /usr/sbin/connmand in n/a + (libc.so.6 + 0x1ac26) + +Upstream-Status: Inappropriate [webOS specific] +--- + plugins/wifi.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/plugins/wifi.c b/plugins/wifi.c +index 7107fab..ac7da59 100644 +--- a/plugins/wifi.c ++++ b/plugins/wifi.c +@@ -4195,7 +4195,7 @@ static void interface_removed(GSupplicantInterface *interface) + if (connman_technology_get_p2p_listen(p2p_technology) == false && + !__connman_peer_get_connected_exists()) { + if (!connman_technology_get_enable_p2p_listen(p2p_technology)) +- return; ++ break; + err = apply_p2p_listen_on_iface(wifi, ¶ms); + if (err == 0) + connman_technology_set_p2p_listen(p2p_technology, true); +-- +2.26.0 + diff --git a/meta-webos/recipes-connectivity/connman/connman_%.bbappend b/meta-webos/recipes-connectivity/connman/connman_%.bbappend index 33c630e23..2cccf35e4 100644 --- a/meta-webos/recipes-connectivity/connman/connman_%.bbappend +++ b/meta-webos/recipes-connectivity/connman/connman_%.bbappend @@ -2,7 +2,7 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" -EXTENDPRAUTO_append = "webos18" +EXTENDPRAUTO_append = "webos19" SYSTEMD_SERVICE_${PN}_remove = "connman.service" SRC_URI += " \ @@ -27,6 +27,7 @@ SRC_URI += " \ file://0019-Fix-connman-crash.patch \ file://0020-Fix-connman-crash-when-interface-removed.patch \ file://0021-Fix-bug-p2p-findservice-luna-fail.patch \ + file://0022-Fix-connman-crash.patch \ " do_install_append() { From 14658e3b7b08db59d1e586c0194c2b84139137b4 Mon Sep 17 00:00:00 2001 From: "hinal.raut" Date: Tue, 20 Jul 2021 18:03:05 +0530 Subject: [PATCH 0029/2022] ose: libpmscore=11-r1 luna-service2=22-r27 nyx-modules=18-r18 :Release Notes: Fix static issues in OSE Add OSS package information file Fix license issue :Detailed Notes: libpmscore: submissions/7..submissions/11 749ce94 Fix license issue 031ca79 Add OSS package information file 11e8bb6 Fix coverity issue in ose ed531e8 Fix coverity issue luna-service2: submissions/20..submissions/22 a1e2c89 Fix license issue b069002 Fix coverity issue nyx-modules: submissions/16..submissions/18 b2c1a4b Fix license issue 29082d0 Fix coverity issue :Testing Performed: Build Successful See WRN-2574 for results :QA Notes: N/A :Issues Addressed: [WRN-3414] Static issues Analyze part 2 [WRN-3651] Add oss-pkg-info yaml for libpmscore [WRN-2574] CCC: ose: libpmscore=11-r1 luna-service2=22-r27 nyx-modules=18-r18 pro: libpmscore=13 luna-service2=340 nyx-modules=120 Change-Id: I696778c8c5ce9775e4970393e197637a72404f18 --- meta-webos/recipes-webos/libpmscore/libpmscore.bb | 9 ++++++--- meta-webos/recipes-webos/luna-service2/luna-service2.bb | 6 +++--- meta-webos/recipes-webos/nyx-modules/nyx-modules.bb | 6 +++--- 3 files changed, 12 insertions(+), 9 deletions(-) diff --git a/meta-webos/recipes-webos/libpmscore/libpmscore.bb b/meta-webos/recipes-webos/libpmscore/libpmscore.bb index 50d5ae0ff..5d24b03fe 100644 --- a/meta-webos/recipes-webos/libpmscore/libpmscore.bb +++ b/meta-webos/recipes-webos/libpmscore/libpmscore.bb @@ -3,13 +3,16 @@ SUMMARY = "pmscore handles device states" AUTHOR = "Abhsiehk Srivastava " LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" +LIC_FILES_CHKSUM = " \ +file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ +file://oss-pkg-info.yaml;md5=ceae6b60c3da8e439a7f94eb5f011878 \ +" SECTION = "webos/libs" DEPENDS = "luna-service2 glib-2.0 pmloglib libpbnjson nyx-lib" -WEBOS_VERSION = "1.0.0-7_db96d74a4e10d86353520a3501c4674667fa7bf5" -PR = "r0" +WEBOS_VERSION = "1.0.0-11_f7dd5e7ec8cb39154634aab0d70667c29253e0be" +PR = "r1" inherit webos_component inherit webos_enhanced_submissions diff --git a/meta-webos/recipes-webos/luna-service2/luna-service2.bb b/meta-webos/recipes-webos/luna-service2/luna-service2.bb index a7b143f49..c941ab53d 100644 --- a/meta-webos/recipes-webos/luna-service2/luna-service2.bb +++ b/meta-webos/recipes-webos/luna-service2/luna-service2.bb @@ -5,7 +5,7 @@ AUTHOR = "Anatolii Sakhnik " SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ +file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " @@ -15,8 +15,8 @@ VIRTUAL-RUNTIME_rdx-utils ?= "rdxd" VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS_${PN} = "luna-service2-security-conf ${VIRTUAL-RUNTIME_cpushareholder} ${VIRTUAL-RUNTIME_rdx-utils} ${VIRTUAL-RUNTIME_bash}" -WEBOS_VERSION = "3.21.2-20_42864a37d2193271a9b1fc8062d3ce729ec7d32b" -PR = "r26" +WEBOS_VERSION = "3.21.2-22_1733cfabcffc582d65844b3161a53f98bc86a241" +PR = "r27" EXTRA_OECMAKE += "${@ '-DWEBOS_DISTRO_PRERELEASE:STRING="devel"' \ if d.getVar('WEBOS_DISTRO_PRERELEASE',True) != '' else ''}" diff --git a/meta-webos/recipes-webos/nyx-modules/nyx-modules.bb b/meta-webos/recipes-webos/nyx-modules/nyx-modules.bb index af6b1b265..d18ac8ade 100644 --- a/meta-webos/recipes-webos/nyx-modules/nyx-modules.bb +++ b/meta-webos/recipes-webos/nyx-modules/nyx-modules.bb @@ -5,7 +5,7 @@ AUTHOR = "Keith Derrick " SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ +file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " @@ -13,8 +13,8 @@ DEPENDS = "nyx-lib glib-2.0 luna-service2 openssl udev" RDEPENDS_${PN} = "lsb-release gzip" -WEBOS_VERSION = "7.1.0-16_14d7ac660684e6f8559675275203b8ed103510bc" -PR = "r17" +WEBOS_VERSION = "7.1.0-18_75df81a8aaf23947e80f94161197b15712e294ed" +PR = "r18" EXTRA_OECMAKE += "-DDISTRO_VERSION:STRING='${DISTRO_VERSION}' -DDISTRO_NAME:STRING='${DISTRO_NAME}${WEBOS_DISTRO_NAME_SUFFIX}' \ -DWEBOS_DISTRO_RELEASE_PLATFORMCODE:STRING='${WEBOS_DISTRO_RELEASE_PLATFORMCODE}' \ From b59962371d6a13a5d43a57d7a7e7e0555ed6dff6 Mon Sep 17 00:00:00 2001 From: Hyunjae Shin Date: Tue, 3 Aug 2021 11:46:54 +0900 Subject: [PATCH 0030/2022] webos.conf: Release webOS OSE v2.13.0 :Release Notes: Set software version as webOS OSE v2.13.0 :Detailed Notes: Set WEBOS_DISTRO_VERSION_MINOR to "13" :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: N/A Change-Id: Ic2e17880b9c36255c0d1f96edd691b5a1247946b --- meta-webos/conf/distro/webos.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/conf/distro/webos.conf b/meta-webos/conf/distro/webos.conf index 6e397e9d5..ce44dd902 100644 --- a/meta-webos/conf/distro/webos.conf +++ b/meta-webos/conf/distro/webos.conf @@ -13,7 +13,7 @@ WEBOS_DISTRO_BUILD_CODENAME = "master" # g - github WEBOS_DISTRO_VERSION_MAJOR = "2" -WEBOS_DISTRO_VERSION_MINOR = "12" +WEBOS_DISTRO_VERSION_MINOR = "13" WEBOS_DISTRO_VERSION_TYPE = "g" DISTRO_VERSION = "${WEBOS_DISTRO_VERSION_MAJOR}.${WEBOS_DISTRO_VERSION_MINOR}.${WEBOS_DISTRO_VERSION_TYPE}" From b7aad23b41ed78201f9ee6c4268bb83ea7911fa5 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 23 Jul 2021 05:43:39 -0700 Subject: [PATCH 0031/2022] busybox=webos14 rdxd=r10 ltp=webos4 ostree=webos2 (fix runtime dependency on bash and tar) :Release Notes: Adjust runtime dependencies on selected tar provider. :Detailed Notes: Fixes: ERROR: rdxd-4.0.2-213-r9 do_package_qa: QA Issue: rdxd rdepends on tar, but it isn't a build dependency, missing tar in DEPENDS or PACKAGECONFIG? [build-deps] ERROR: rdxd-4.0.2-213-r9 do_package_qa: QA run found fatal errors. Please consider fixing them. ERROR: Logfile of failure stored in: /jenkins/mjansa/build/webos/dunfell/BUILD/work/qemux86-webos-linux/rdxd/4.0.2-213-r9/temp/log.do_package_qa.23029 ERROR: Task (/jenkins/mjansa/build/webos/dunfell/meta-lg-webos/meta-webos/recipes-webos/rdxd/rdxd.bb:do_package_qa) failed with exit code '1' ERROR: ltp-20210121-r4 do_package_qa: QA Issue: ltp rdepends on tar, but it isn't a build dependency, missing tar in DEPENDS or PACKAGECONFIG? [build-deps] ERROR: ltp-20210121-r4 do_package_qa: QA run found fatal errors. Please consider fixing them. ERROR: Logfile of failure stored in: /jenkins/mjansa/build/webos/dunfell/BUILD/work/qemux86-webos-linux/ltp/20210121-r4/temp/log.do_package_qa.28069 ERROR: Task (/jenkins/mjansa/build/webos/dunfell/oe-core/meta/recipes-extended/ltp/ltp_20210121.bb:do_package_qa) failed with exit code '1 ERROR: ostree-2020.3-r0 do_package_qa: QA Issue: ostree-ptest rdepends on tar, but it isn't a build dependency, missing tar in DEPENDS or PACKAGECONFIG? [build-deps] ERROR: ostree-2020.3-r0 do_package_qa: QA run found fatal errors. Please consider fixing them. ERROR: Logfile of failure stored in: /jenkins/home/anaconda/build-webos-dunfell/build/BUILD/work/qemux86-webos-linux/ostree/2020.3-r0/temp/log.do_package_qa.81266 ERROR: Task (/jenkins/home/anaconda/build-webos-dunfell/build/meta-oe/meta-oe/recipes-extended/ostree/ostree_2020.3.bb:do_package_qa) failed with exit code '1' :Testing Performed: Only build tested. :QA Notes: None :Issues Addressed: [WRN-3690] CCC: Update lastest revision in webOS [WRN-2613] CCC: systemd=v248.3 Change-Id: Ia4b52cbabc746b20194d1f179cc07aaef5b42391 --- .../conf/distro/include/webos-preferred-providers.inc | 5 +++++ meta-webos/recipes-core/busybox/busybox_%.bbappend | 5 +++-- meta-webos/recipes-extended/ltp/ltp_%.bbappend | 8 ++++++-- meta-webos/recipes-extended/ostree/ostree_%.bbappend | 8 ++++++-- meta-webos/recipes-webos/rdxd/rdxd.bb | 7 ++++++- 5 files changed, 26 insertions(+), 7 deletions(-) diff --git a/meta-webos/conf/distro/include/webos-preferred-providers.inc b/meta-webos/conf/distro/include/webos-preferred-providers.inc index fb637ffd2..6f6e433c3 100644 --- a/meta-webos/conf/distro/include/webos-preferred-providers.inc +++ b/meta-webos/conf/distro/include/webos-preferred-providers.inc @@ -13,6 +13,11 @@ WEBOS_PREFERRED_PROVIDER_FOR_BASH = "busybox" PREFERRED_PROVIDER_bash = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'busybox', 'bash', d)}" VIRTUAL-RUNTIME_bash = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'busybox', 'bash', d)}" +# Use the busybox Tar instead of GNU Tar +WEBOS_PREFERRED_PROVIDER_FOR_TAR = "busybox" +PREFERRED_PROVIDER_tar = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_TAR', 'busybox', 'busybox', 'tar', d)}" +VIRTUAL-RUNTIME_tar = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_TAR', 'busybox', 'busybox', 'tar', d)}" + # Prefer libjpeg-turbo from meta-oe as it provides SIMD optimizations PREFERRED_PROVIDER_jpeg = "libjpeg-turbo" PREFERRED_PROVIDER_jpeg-native = "libjpeg-turbo-native" diff --git a/meta-webos/recipes-core/busybox/busybox_%.bbappend b/meta-webos/recipes-core/busybox/busybox_%.bbappend index 98b5f1858..53ed94b60 100644 --- a/meta-webos/recipes-core/busybox/busybox_%.bbappend +++ b/meta-webos/recipes-core/busybox/busybox_%.bbappend @@ -1,7 +1,7 @@ -# Copyright (c) 2012-2019 LG Electronics, Inc. +# Copyright (c) 2012-2021 LG Electronics, Inc. PKGV .= "-0webos3" -EXTENDPRAUTO_append = "webos13" +EXTENDPRAUTO_append = "webos14" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" @@ -13,3 +13,4 @@ SRC_URI += " \ RPROVIDES_${PN} += "stat" RPROVIDES_${PN} += "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RPROVIDES_${PN} += "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_TAR', 'busybox', 'tar', '', d)}" diff --git a/meta-webos/recipes-extended/ltp/ltp_%.bbappend b/meta-webos/recipes-extended/ltp/ltp_%.bbappend index 413073b44..390e2f963 100644 --- a/meta-webos/recipes-extended/ltp/ltp_%.bbappend +++ b/meta-webos/recipes-extended/ltp/ltp_%.bbappend @@ -1,11 +1,15 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos3" +EXTENDPRAUTO_append = "webos4" VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +VIRTUAL-RUNTIME_tar ?= "tar" +RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_tar}" +RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_TAR', 'busybox', 'tar', '', d)}" + inherit webos_filesystem_paths do_install_append() { diff --git a/meta-webos/recipes-extended/ostree/ostree_%.bbappend b/meta-webos/recipes-extended/ostree/ostree_%.bbappend index 8e274ef48..21ddf10c2 100644 --- a/meta-webos/recipes-extended/ostree/ostree_%.bbappend +++ b/meta-webos/recipes-extended/ostree/ostree_%.bbappend @@ -1,6 +1,6 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO_append = "webos2" VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS_${PN}-dracut_append_class-target = " ${VIRTUAL-RUNTIME_bash}" @@ -10,6 +10,10 @@ RDEPENDS_${PN}-mkinitcpio_remove_class-target = "${@oe.utils.conditional('WEBOS_ RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +VIRTUAL-RUNTIME_tar ?= "tar" +RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_tar}" +RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_TAR', 'busybox', 'tar', '', d)}" + # It should be added with: # ${@bb.utils.contains('PACKAGECONFIG', 'trivial-httpd-cmdline', '${PN}-trivial-httpd', '', d)} # like in ${PN} RDEPENDS, I've sent fix to meta-oe, just remove it for now (as we don't enable trivial-httpd-cmdline here) diff --git a/meta-webos/recipes-webos/rdxd/rdxd.bb b/meta-webos/recipes-webos/rdxd/rdxd.bb index 0b3f3c489..b76a00a81 100644 --- a/meta-webos/recipes-webos/rdxd/rdxd.bb +++ b/meta-webos/recipes-webos/rdxd/rdxd.bb @@ -13,7 +13,7 @@ DEPENDS = "glib-2.0 libpbnjson luna-prefs luna-service2 pmloglib" RDEPENDS_${PN} = "nyx-utils tar" WEBOS_VERSION = "4.0.2-15_615c867fa85e3719d8c7305fffcf476b1e372c14" -PR = "r9" +PR = "r10" PROVIDES = "librdx rdx-utils" @@ -33,3 +33,8 @@ EXTRA_OECMAKE += "-DWEBOS_USE_LEGACY_PACKAGE_MANAGER:BOOL=FALSE" VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" + +VIRTUAL-RUNTIME_tar ?= "tar" +RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_tar}" +RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_TAR', 'busybox', 'tar', '', d)}" From 3d43d65830bfd7fc4c239b2943c83fbc5efc6f7a Mon Sep 17 00:00:00 2001 From: "phanendra.koppisetti" Date: Tue, 27 Jul 2021 12:52:47 +0530 Subject: [PATCH 0032/2022] ose: com.webos.service.storageaccess=16-r4 com.webos.service.tts=20-r4 :Release Notes: Fix RDX-Crash issues in SAF and TTS :Detailed Notes: com.webos.service.storageaccess: submissions/14..submissions/16 3dd4456 Add LICENSE file 5eb2229 Fix Bugs in eject API com.webos.service.tts: submissions/18..submissions/20 79c96b7 Add LICENSE file 7f008e2 Fix for TTS crash issues :Testing Performed: Verified the SAf and TTS functionality. Test results are updated in WRN-3752 :QA Notes: NA :Issues Addressed: [WRN-3752] CCC: ose: com.webos.service.storageaccess=16 com.webos.service.tts=20 [WRN-3142] [RDX_CRASH][webos] /usr/sbin/tts-service in n/a (/usr/sbin/tts-service + 0x5a262) [WRN-3143] [RDX_CRASH][webos] /usr/sbin/tts-service in n/a (/usr/sbin/tts-service + 0x59706) [WRN-3577] [RDX_CRASH][webos] /usr/sbin/tts-service in n/a (/usr/sbin/tts-service + 0x596c0) [WRN-3118] [RDX_CRASH][webos] /usr/sbin/storageaccess in _ZN23DocumentProviderManager10addRequestERSt10 shared_ptrI11RequestDataE (storageaccess + 0x2c520) Change-Id: I34c91fe8c02694452111de5bd1c44a92e36f54ed --- .../com.webos.service.storageaccess.bb | 6 +++--- .../com.webos.service.tts/com.webos.service.tts.bb | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb b/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb index 245726fdb..cfec51451 100644 --- a/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb +++ b/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb @@ -4,7 +4,7 @@ SUMMARY = "Storage Access Framework for OSE" AUTHOR = "RajeshGopu IV " SECTION = "webos/base" LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ +LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ file://oss-pkg-info.yaml;md5=13b5f44cefd7b1b0040a056eeddf6174" DEPENDS= "glib-2.0 libxml2 luna-service2 pmloglib libgdrive libpbnjson curl gupnp" @@ -12,8 +12,8 @@ DEPENDS= "glib-2.0 libxml2 luna-service2 pmloglib libgdrive libpbnjson curl gupn COMPATIBLE_MACHINE = "^raspberrypi4$|^qemux86$" COMPATIBLE_MACHINE_raspberrypi4-64 = "^$" -WEBOS_VERSION = "1.0.0-14_1367866c96eecbbdebe8f47ff075a1d7b06a2d78" -PR = "r3" +WEBOS_VERSION = "1.0.0-16_20342cce50681c0c5b56dd9f4bdce56d9084656d" +PR = "r4" inherit webos_component inherit webos_public_repo diff --git a/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb b/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb index f4e34acbf..32daff76f 100644 --- a/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb +++ b/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb @@ -4,7 +4,7 @@ SUMMARY = "webOS text to speech service" SECTION = "webos/base" AUTHOR = "Rachana Agarwal " LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ +LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ file://oss-pkg-info.yaml;md5=eb0fefa4904ac8820261e985096d5ad4" DEPENDS = "glib-2.0 luna-service2 libpbnjson pmloglib json-c pulseaudio googleapis grpc" @@ -13,8 +13,8 @@ COMPATIBLE_MACHINE = "^raspberrypi3$|^raspberrypi4$" COMPATIBLE_MACHINE_raspberrypi3-64 = "^$" COMPATIBLE_MACHINE_raspberrypi4-64 = "^$" -WEBOS_VERSION = "1.0.0-18_8c53a4bfdc7a115456dc2e06eb9a06c74eadc4ca" -PR = "r3" +WEBOS_VERSION = "1.0.0-20_dba2c3804230e47b90b317282debcf938b6656c3" +PR = "r4" inherit webos_component inherit webos_public_repo From d79b7a6d7d27d160837aafe835f4feee1491b420 Mon Sep 17 00:00:00 2001 From: "Anish T.D/LGSIA APP-3(anish.td@lge.com)" Date: Thu, 22 Jul 2021 11:53:34 +0530 Subject: [PATCH 0033/2022] ose: com.webos.app.{imageviewer=12 settings=18-r3 videoplayer=10} MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit :Release Notes: Update Enact version in image viewer, settgins and videoplayer apps. Add LICENSE file in settings app :Detailed Notes: com.webos.app.imageviewer: submissions/11..submissions/12 08fd5b6 Update the Enact version 4.0.3 in imageviewer com.webos.app.settings: submissions/16..submissions/18 123a431 Add LICENSE file for OSE Settings app 1290d76 Update the Enact version 4.0.3 in Settings app com.webos.app.videoplayer: submissions/9..submissions/10 b299b6a Videoplayer-Added forward, rewind and back :Testing Performed: Refer [WRN-3643] for test results :QA Notes: NA :Issues Addressed: [WRN-3643] CCC: com.webos.app.{imageviewer=12, videoplayer=10} com.webos.app.settings=18-r3 [WRN-1506] Update the Enact version 4.0.3 in imageviewer [WRN-1510] Update the Enact version 4.0.3 in Settings app [WRN-3535] Videoplayer - forward and rewind buttons missing [WRN-3536] Videoplayer - Back button missing [WRN-1505] Final test and complete the code delivery Change-Id: I9d68c901237dbc9118068f160abadefc03d22b40 --- .../com.webos.app.imageviewer.bb | 2 +- .../com.webos.app.settings/com.webos.app.settings.bb | 10 ++++------ .../com.webos.app.videoplayer.bb | 2 +- 3 files changed, 6 insertions(+), 8 deletions(-) diff --git a/meta-webos/recipes-webos/com.webos.app.imageviewer/com.webos.app.imageviewer.bb b/meta-webos/recipes-webos/com.webos.app.imageviewer/com.webos.app.imageviewer.bb index c63008d55..0dae240d4 100644 --- a/meta-webos/recipes-webos/com.webos.app.imageviewer/com.webos.app.imageviewer.bb +++ b/meta-webos/recipes-webos/com.webos.app.imageviewer/com.webos.app.imageviewer.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=3072ffcf5bdbbc376ed21c9d378d14d5 \ " -WEBOS_VERSION = "0.0.1-11_5e0bb8cdd71ace924cfc073f4ac522087ed36672" +WEBOS_VERSION = "0.0.1-12_497b181dd98e61160dbc85fc473715eca67279f8" PR = "r0" inherit webos_component diff --git a/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb b/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb index db15ba545..dd858e98f 100644 --- a/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb +++ b/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb @@ -5,20 +5,18 @@ AUTHOR = "Anish TD " SECTION = "webos/apps" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ -file://oss-pkg-info.yaml;md5=82c76ba3ea1ed22d2b1b41add2fbdc19 \ + file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ + file://oss-pkg-info.yaml;md5=82c76ba3ea1ed22d2b1b41add2fbdc19 \ " -WEBOS_VERSION = "1.1.0-16_f19277827223085ce4fdb5c667bda160752041c1" -PR = "r2" +WEBOS_VERSION = "1.1.0-18_8098849eae4a2bb2710e13dfda14f7085d14bd83" +PR = "r3" inherit webos_component inherit webos_enhanced_submissions inherit webos_enactjs_app inherit webos_public_repo -WEBOS_ENACTJS_SHRINKWRAP_OVERRIDE = "false" - SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" diff --git a/meta-webos/recipes-webos/com.webos.app.videoplayer/com.webos.app.videoplayer.bb b/meta-webos/recipes-webos/com.webos.app.videoplayer/com.webos.app.videoplayer.bb index 2784a984c..bffffe993 100644 --- a/meta-webos/recipes-webos/com.webos.app.videoplayer/com.webos.app.videoplayer.bb +++ b/meta-webos/recipes-webos/com.webos.app.videoplayer/com.webos.app.videoplayer.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=3072ffcf5bdbbc376ed21c9d378d14d5 \ " -WEBOS_VERSION = "0.0.1-9_b5bb72ff72adfbdb8b15e87a83bdfdfa1e5e952a" +WEBOS_VERSION = "0.0.1-10_579208443449d64d1047f012ff4f1fa93301f0aa" PR = "r0" inherit webos_component From bf1d6d686c32044f0af7ace3b005b48d6f7b2a5a Mon Sep 17 00:00:00 2001 From: "jaewoon.kim" Date: Wed, 21 Jul 2021 14:16:46 +0900 Subject: [PATCH 0034/2022] ose: com.webos.service.uwb=8-r1 :Release Notes: Fix static analysis and add license :Detailed Notes: com.webos.service.uwb: submissions/2..submissions/8 708b33c Fix static anaysis issues(8993676,8993680) adec480 Fix static anaysis (8993676,8993680) 33ad3e5 Fix static anaysis (8993676) 35a65be Add LICENSE 4aad5f2 Fix static anaysis (8994289) :Testing Performed: Check CCC tickets :QA Notes: N/A :Issues Addressed: [WRN-3591] CCC: ose: com.webos.service.uwb=8-r1 [WRN-3592] Fix static analysis [WRN-3770] [UWB] Fix LIC_FILES_CHKSUM usage in open-source recipes [CID-8994289] Coverity Issue(Static Analysis) [CID-8993676] Coverity Issue(Static Analysis) [CID-8993680] Coverity Issue(Static Analysis) Change-Id: Ia9b9e47dba9cba05f535b476b820e8b7e0f1e275 --- .../recipes-connectivity/uwb/com.webos.service.uwb.bb | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb b/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb index 1b4d58b94..aacae28d0 100644 --- a/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb +++ b/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb @@ -3,12 +3,13 @@ SUMMARY = "Webos UwbService" AUTHOR = "Bojung.Ko " SECTION = "webos/services" -LICENSE = "CLOSED" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" DEPENDS= "glib-2.0 luna-service2 pmloglib libpbnjson" -WEBOS_VERSION = "1.0.0-2_b7957ea6fe4c00c81c464f3a7bc3cb4374f71080" -PR = "r0" +WEBOS_VERSION = "1.0.0-8_6b03f525d9b84e23b1f25a379e77939fae552b01" +PR = "r1" inherit webos_component inherit webos_public_repo From 3091b9bf8dfc8f0d28b8a486e044ab1bac4bac1c Mon Sep 17 00:00:00 2001 From: "venugopal.k" Date: Thu, 29 Jul 2021 13:04:13 +0530 Subject: [PATCH 0035/2022] ose:activitymanager=23 sam=61 :Release Notes: Fix for static issues :Detailed Notes: activitymanager: submissions/22..submissions/23 eac6f9f Fixed Static issue for activitymanager sam: submissions/60..submissions/61 892f67d Fix logically dead code static issue 7f4f1fc Fixed explicit null dereferenced static issue :Testing Performed: Test Result updated in WRN-3889 :QA Notes: N/A :Issues Addressed: [WRN-3889] CCC : activitymanager=23 sam=61 [WRN-3245] CID-8994421 Static issue analysis [WRN-3239] CID-8994422 Static issue analysis [WRN-3238] Fix static issue for activitymanager Change-Id: I0af7194a058032f16e40d00e2d576e8272d46e53 --- meta-webos/recipes-webos/activitymanager/activitymanager.bb | 2 +- meta-webos/recipes-webos/sam/sam.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/activitymanager/activitymanager.bb b/meta-webos/recipes-webos/activitymanager/activitymanager.bb index 9cef51003..42b28688c 100644 --- a/meta-webos/recipes-webos/activitymanager/activitymanager.bb +++ b/meta-webos/recipes-webos/activitymanager/activitymanager.bb @@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "luna-service2 db8 boost libpbnjson glib-2.0 pmloglib ${VIRTUAL-RUNTIME_init_manager}" -WEBOS_VERSION = "3.0.0-22_da4d4cbac563cc3c9e4c8c90ff21013d83ed487a" +WEBOS_VERSION = "3.0.0-23_603d8d73ca78aaadb494e1008fbfbff3d62c9271" PR = "r11" inherit webos_component diff --git a/meta-webos/recipes-webos/sam/sam.bb b/meta-webos/recipes-webos/sam/sam.bb index 4976a2bdb..a0f3099c4 100644 --- a/meta-webos/recipes-webos/sam/sam.bb +++ b/meta-webos/recipes-webos/sam/sam.bb @@ -14,7 +14,7 @@ RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_webos-customization}" VIRTUAL-RUNTIME_webos-customization ?= "" -WEBOS_VERSION = "2.0.0-60_abfe48e537990e72d9d52ad9a5de8df3189bf3bc" +WEBOS_VERSION = "2.0.0-61_3f84d2da1b0ebfe219106fade22c6878734fbcb7" PR = "r26" inherit webos_component From ad708985388f91dc8f2116e1fb86592f11dc15d0 Mon Sep 17 00:00:00 2001 From: "paramesh.kuberappa" Date: Wed, 28 Jul 2021 19:01:26 +0530 Subject: [PATCH 0036/2022] ose: bluetooth-sil-api=25-r3 com.webos.service.hfp=32-r5 bluetooth-sil-bluez5=64-r3 com.webos.service.bluetooth2=64-r5 webos-connman-adapter=39-r9 webos-nettools=6-r1 loc-utils=21-r3 :Release Notes: Fix LICENSE issue :Detailed Notes: bluetooth-sil-api: submissions/24..submissions/25 276e3f1 Add LICENSE file loc-utils: submissions/20..submissions/21 e4c09ae Add LICENSE file com.webos.service.hfp: submissions/31..submissions/32 679d3a8 Add LICENSE file bluetooth-sil-bluez5: submissions/63..submissions/64 0f24808 Add LICENSE file com.webos.service.bluetooth2: submissions/63..submissions/64 f0923ff Add LICENSE file webos-connman-adapter: submissions/38..submissions/39 48a355b Add LICENSE file webos-nettools: submissions/5..submissions/6 bd3fecd Add LICENSE file :Testing Performed: Tested results updated in WRN-3809 :QA Notes: N/A :Issues Addressed: [WRN-3809] CCC: bluetooth-sil-api=25-r3 com.webos.service.hfp=32-r5 bluetooth-sil-bluez5=64-r3 com.webos.service.bluetooth2=64-r5 webos-connman-adapter=39-r9 webos-nettools=6-r1 loc-utils=21-r3 [WRN-3751] Fix License and update md5sum for all connectivity components Change-Id: If64e8f4042d5731dcf2bcc74301a3c5c641611ba --- meta-webos/recipes-location/loc-utils/loc-utils.bb | 6 +++--- meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb | 6 +++--- meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb | 6 +++--- .../recipes-webos/bluetooth/com.webos.service.bluetooth2.bb | 6 +++--- meta-webos/recipes-webos/bluetooth/com.webos.service.hfp.bb | 6 +++--- .../webos-connman-adapter/webos-connman-adapter.bb | 6 +++--- meta-webos/recipes-webos/webos-nettools/webos-nettools.bb | 6 +++--- 7 files changed, 21 insertions(+), 21 deletions(-) diff --git a/meta-webos/recipes-location/loc-utils/loc-utils.bb b/meta-webos/recipes-location/loc-utils/loc-utils.bb index 9b5784aee..188bd1ab0 100644 --- a/meta-webos/recipes-location/loc-utils/loc-utils.bb +++ b/meta-webos/recipes-location/loc-utils/loc-utils.bb @@ -5,14 +5,14 @@ AUTHOR = "vibhanshu.dhote " SECTION = "webos/location" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://LICENSE;md5=2763f3ed850f8412903ea776e0526bea \ file://oss-pkg-info.yaml;md5=71729d222d4be4c1e2518bb8770abeee \ " DEPENDS = "glib-2.0 curl pmloglib" -WEBOS_VERSION = "1.0.0-20_587f1d470c825266931a62f119f00b736e0be3de" -PR = "r2" +WEBOS_VERSION = "1.0.0-21_d0236729512fee0f89ff9bb13b187f09a110481a" +PR = "r3" inherit webos_component inherit webos_public_repo diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb index 6cbd5292e..74d40f679 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb @@ -5,14 +5,14 @@ AUTHOR = "Sameer Mulla " SECTION = "webos/services" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://LICENSE;md5=2763f3ed850f8412903ea776e0526bea \ file://oss-pkg-info.yaml;md5=e07d738b032e6351a6608e81ea1b1b49 \ " DEPENDS = "glib-2.0" -WEBOS_VERSION = "1.0.0-24_1a28127c00fbd2d8d7fd746142fd9a77f4d13d0c" -PR = "r2" +WEBOS_VERSION = "1.0.0-25_63e9e3f8ee9b39f0aa82e454de320d890b51f11d" +PR = "r3" inherit webos_component inherit webos_public_repo diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb index b69abd3fb..fe8b31e2b 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb @@ -5,7 +5,7 @@ AUTHOR = "Sameeer Mulla " SECTION = "webos/services" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://LICENSE;md5=2763f3ed850f8412903ea776e0526bea \ file://oss-pkg-info.yaml;md5=92fcba59ec6480ce73cd35edd7995099 \ " @@ -17,8 +17,8 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES ??= "" # Add runtime dependency on bluez5 OBEX service when we have to support FTP RDEPENDS_${PN} += "${@ bb.utils.contains('WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES', 'FTP', 'bluez5-obex', '', d)}" -WEBOS_VERSION = "0.1.0-63_3cdee7efcecd64a35497300a0c0f92e9203b1069" -PR = "r2" +WEBOS_VERSION = "0.1.0-64_569707602027bc9a1a35f115f78a2645694bbe2c" +PR = "r3" inherit webos_component inherit webos_public_repo diff --git a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb index 3ca70d1b6..c4f054dd3 100644 --- a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb +++ b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb @@ -5,7 +5,7 @@ AUTHOR = "Sameer Mulla " SECTION = "webos/services" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://LICENSE;md5=2763f3ed850f8412903ea776e0526bea \ file://oss-pkg-info.yaml;md5=1ff1242ee7d960d745e8abafd26f2471 \ " @@ -48,8 +48,8 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES = "GATT FTP OPP A2DP SPP HFP AVRCP PAN A # emulator), which means that the pairing should happen without user intervention. WEBOS_BLUETOOTH_PAIRING_IO_CAPABILITY ??= "NoInputNoOutput" -WEBOS_VERSION = "1.0.0-63_e543e5e0bf9a7510ad0b2c4aa21b15e8f989bf20" -PR = "r4" +WEBOS_VERSION = "1.0.0-64_879009d135c517b351cca0d8bc886458bd321b11" +PR = "r5" inherit webos_component inherit webos_public_repo diff --git a/meta-webos/recipes-webos/bluetooth/com.webos.service.hfp.bb b/meta-webos/recipes-webos/bluetooth/com.webos.service.hfp.bb index ca3235d0d..757510705 100644 --- a/meta-webos/recipes-webos/bluetooth/com.webos.service.hfp.bb +++ b/meta-webos/recipes-webos/bluetooth/com.webos.service.hfp.bb @@ -4,14 +4,14 @@ SUMMARY = "Bluetooth HFP(Hands Free Profile) support service" AUTHOR = "Sameer Mulla " SECTION = "webos/services" LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ +LIC_FILES_CHKSUM = "file://LICENSE;md5=2763f3ed850f8412903ea776e0526bea \ file://oss-pkg-info.yaml;md5=63319cd2c369569050a7c0cc246fc8ba \ " DEPENDS = "glib-2.0 glib-2.0-native luna-service2 pmloglib libpbnjson" -WEBOS_VERSION = "1.0.0-31_899cd96848508ccbd3784a293cef0122cc0b0799" -PR = "r4" +WEBOS_VERSION = "1.0.0-32_f3f53f2567b90babcc19608776addc450fdcb9ac" +PR = "r5" inherit webos_component inherit webos_enhanced_submissions diff --git a/meta-webos/recipes-webos/webos-connman-adapter/webos-connman-adapter.bb b/meta-webos/recipes-webos/webos-connman-adapter/webos-connman-adapter.bb index 755ea1df0..b6b9ffd1e 100644 --- a/meta-webos/recipes-webos/webos-connman-adapter/webos-connman-adapter.bb +++ b/meta-webos/recipes-webos/webos-connman-adapter/webos-connman-adapter.bb @@ -4,7 +4,7 @@ DESCRIPTION = "webOS component for managing network connections using connman" AUTHOR = "Seokhee Lee " LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://LICENSE;md5=2763f3ed850f8412903ea776e0526bea \ file://oss-pkg-info.yaml;md5=b0cf0d697c8340cbfa56b94bdc2539fb \ " @@ -13,8 +13,8 @@ SECTION = "webos/services" DEPENDS = "luna-service2 libpbnjson glib-2.0 luna-prefs openssl glib-2.0-native wca-support-api wca-support" RDEPENDS_${PN} = "connman connman-client" -WEBOS_VERSION = "1.1.0-38_e156015daaeff2264e946bef45bc88b747ca90fc" -PR = "r8" +WEBOS_VERSION = "1.1.0-39_dc622623142035004f2354cc90cfee0e8fc3c5b3" +PR = "r9" inherit webos_component inherit webos_public_repo diff --git a/meta-webos/recipes-webos/webos-nettools/webos-nettools.bb b/meta-webos/recipes-webos/webos-nettools/webos-nettools.bb index 82962c881..7e9c1f35b 100644 --- a/meta-webos/recipes-webos/webos-nettools/webos-nettools.bb +++ b/meta-webos/recipes-webos/webos-nettools/webos-nettools.bb @@ -3,7 +3,7 @@ DESCRIPTION = "Luna-service2 service providing network utility tools like ping and arping" AUTHOR = "Rakes Pani " LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ +LIC_FILES_CHKSUM = "file://LICENSE;md5=2763f3ed850f8412903ea776e0526bea \ file://oss-pkg-info.yaml;md5=19d9ec0fe1295511ff6de5bf74c43d46 \ " @@ -14,8 +14,8 @@ RDEPENDS_${PN} = "iputils" WEBOS_REPO_NAME = "com.webos.service.nettools" -WEBOS_VERSION = "1.1.0-5_bb5fc25236a69ffc7f8eb525b69ba264a64daba0" -PR = "r0" +WEBOS_VERSION = "1.1.0-6_5ebd0866e9709d88db9c433746ccfcbc7561d48f" +PR = "r1" inherit webos_component inherit webos_public_repo From ab7b48078270c25ec783189cfb8b95061998eb8c Mon Sep 17 00:00:00 2001 From: "kalaiselvi.p" Date: Wed, 28 Jul 2021 22:28:57 +0530 Subject: [PATCH 0037/2022] ose: webruntime_87=7 :Release Notes: Fix page hang crash during scroll on display 1 :Detailed Notes: webruntime_87: submissions/6..submissions/7 1831fbc7e2 [op][n_upsable][media][custom] Add missing overrides for setMediaLayerId in camera backend 3735607e2c [op][n_upsable][ozone] Make touch event ID unique with multiple seats :Testing Performed: CCC testing :QA Notes: NA :Issues Addressed: [WRN-2320] [webOS OSE] : The page hangs and crashes while scroll action is tried to performed on display 1 [WRN-2748] Camera preview in Web application is always fullscreen [WRN-3711] CCC: ose: webruntime_87=7 Change-Id: I9fda2068050360478c3368faa45f6d3a60c27c4d --- meta-webos/recipes-webos/chromium/webruntime-repo_87.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc index b3ace6b48..fa87692cf 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=28f5b870e5e06b9af5b96c9dd65b31c8" WEBOS_REPO_NAME = "chromium87" -WEBOS_VERSION = "87.0.4280.88-6_b8ed08cff6808cf7dbacc4b3d2e44c826fdd0861" +WEBOS_VERSION = "87.0.4280.88-7_76fa38e6b103b248c21fa6fbaf40fd893293755e" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium87" From b618f3651cdf43fa23a9ee45d70938b199ecf399 Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Fri, 18 Jun 2021 13:44:51 +0900 Subject: [PATCH 0038/2022] qtwayland=webos24webosrpi1 (enable dmabuf-client-buffer) :Release Notes: Add dmabuf-client-buffer hwintegration plugin. Add options for fine-tuned configuration. :Detailed Notes: qtwayland=webos24 Add PACKAGECONFIG options for fine-tuned configuration. 0001-Add-option-for-more-features.patch is added for more options. Then define PACKAGECONFIG for webos. qtwayland=webosrpi1 Add dmabuf-client-buffer hwintegration plugin for RPi with a build fix 0001-Fix-build-error-when-finding-libdrm.patch. :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-3595] CCC: auto-luna-surface-manager=36 luna-surfacemanager=356 maliit-framework-webos=99 qtwayland-webos=66 and more Change-Id: Id97e4626fc9d2640e113355a1a6fab3777483421 --- ...-Fix-build-error-when-finding-libdrm.patch | 23 +++++ .../recipes-qt/qt6/qtwayland_git.bbappend | 12 +++ .../0001-Add-option-for-more-features.patch | 86 +++++++++++++++++++ .../recipes-qt/qt6/qtwayland_git.bbappend | 31 ++++++- 4 files changed, 148 insertions(+), 4 deletions(-) create mode 100644 meta-webos-raspberrypi/recipes-qt/qt6/qtwayland/0001-Fix-build-error-when-finding-libdrm.patch create mode 100644 meta-webos-raspberrypi/recipes-qt/qt6/qtwayland_git.bbappend create mode 100644 meta-webos/recipes-qt/qt6/qtwayland/0001-Add-option-for-more-features.patch diff --git a/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland/0001-Fix-build-error-when-finding-libdrm.patch b/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland/0001-Fix-build-error-when-finding-libdrm.patch new file mode 100644 index 000000000..8e36739d9 --- /dev/null +++ b/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland/0001-Fix-build-error-when-finding-libdrm.patch @@ -0,0 +1,23 @@ +From 204f021f68d8a20ba31033c5550530590aba6efb Mon Sep 17 00:00:00 2001 +From: Youngjin Kim +Date: Mon, 21 Jun 2021 13:48:07 +0900 +Subject: [PATCH] Fix build error when finding libdrm + +Change-Id: Ic1a066bf81ef760d57f31c3a6d08f3bbb8073b56 +Upstream-Status : Inappropriate [workaround] +--- + src/compositor/configure.cmake | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/compositor/configure.cmake b/src/compositor/configure.cmake +index 9c5864e3..06356a15 100644 +--- a/src/compositor/configure.cmake ++++ b/src/compositor/configure.cmake +@@ -28,6 +28,7 @@ if(NOT TARGET XKB::XKB) + qt_find_package(XKB 0.5.0 PROVIDED_TARGETS XKB::XKB MODULE_NAME gui QMAKE_LIB xkbcommon MARK_OPTIONAL) + endif() + ++qt_find_package(Libdrm PROVIDED_TARGETS Libdrm::Libdrm MODULE_NAME gui QMAKE_LIB drm) + + #### Tests + diff --git a/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland_git.bbappend b/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland_git.bbappend new file mode 100644 index 000000000..32ec2c393 --- /dev/null +++ b/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland_git.bbappend @@ -0,0 +1,12 @@ +# Copyright (c) 2021 LG Electronics, Inc. + +EXTENDPRAUTO_append_rpi = "webosrpi1" + +FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" + +PACKAGECONFIG_append_rpi = " dmabuf-client-buffer" + +# Upstream-Status: Inappropriate +SRC_URI_append_rpi = " \ + file://0001-Fix-build-error-when-finding-libdrm.patch \ +" diff --git a/meta-webos/recipes-qt/qt6/qtwayland/0001-Add-option-for-more-features.patch b/meta-webos/recipes-qt/qt6/qtwayland/0001-Add-option-for-more-features.patch new file mode 100644 index 000000000..5d275fc2d --- /dev/null +++ b/meta-webos/recipes-qt/qt6/qtwayland/0001-Add-option-for-more-features.patch @@ -0,0 +1,86 @@ +From 2ff13f7be73416e00bad72009a82f2e69fa207eb Mon Sep 17 00:00:00 2001 +From: Jaeyoon Jung +Date: Wed, 14 Jul 2021 19:14:46 +0900 +Subject: [PATCH] Add option for more features + +Change-Id: Id757e3102d03eecd32a090b7f607cc50f4e50dd5 +Upstream-Status : Inappropriate [webOS specific] +--- + src/client/configure.cmake | 16 ++++++++++++++++ + src/plugins/CMakeLists.txt | 8 ++++++-- + src/plugins/hardwareintegration/CMakeLists.txt | 2 +- + .../compositor/CMakeLists.txt | 4 +++- + 4 files changed, 26 insertions(+), 4 deletions(-) + +diff --git a/src/client/configure.cmake b/src/client/configure.cmake +index 11612d11..8bd0e7ce 100644 +--- a/src/client/configure.cmake ++++ b/src/client/configure.cmake +@@ -222,6 +222,22 @@ qt_feature("wayland-shm-emulation-server-buffer" PRIVATE + LABEL "Shm emulation server buffer integration" + CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_opengl + ) ++qt_feature("wayland-eglstream-controller" PRIVATE ++ LABEL "EGLStream controller" ++ CONDITION QT_FEATURE_wayland_client ++) ++qt_feature("wayland-client-hwintegration-plugins" PRIVATE ++ LABEL "Client hardware integration plugins" ++ CONDITION QT_FEATURE_wayland_client ++) ++qt_feature("wayland-platform-plugins" PRIVATE ++ LABEL "Wayland platform plugins" ++ CONDITION QT_FEATURE_wayland_client ++) ++qt_feature("wayland-decoration-plugins" PRIVATE ++ LABEL "decoration plugins" ++ CONDITION QT_FEATURE_wayland_client ++) + qt_configure_add_summary_section(NAME "Qt Wayland Drivers") + qt_configure_add_summary_entry(ARGS "wayland-egl") + qt_configure_add_summary_entry(ARGS "wayland-brcm") +diff --git a/src/plugins/CMakeLists.txt b/src/plugins/CMakeLists.txt +index ef58376a..6253156b 100644 +--- a/src/plugins/CMakeLists.txt ++++ b/src/plugins/CMakeLists.txt +@@ -2,7 +2,11 @@ + + add_subdirectory(hardwareintegration) + if(TARGET Qt::WaylandClient) +- add_subdirectory(platforms) +- add_subdirectory(decorations) ++ if(QT_FEATURE_wayland_platform_plugins) ++ add_subdirectory(platforms) ++ endif() ++ if(QT_FEATURE_wayland_decoration_plugins) ++ add_subdirectory(decorations) ++ endif() + add_subdirectory(shellintegration) + endif() +diff --git a/src/plugins/hardwareintegration/CMakeLists.txt b/src/plugins/hardwareintegration/CMakeLists.txt +index 656b43b8..5bcf1771 100644 +--- a/src/plugins/hardwareintegration/CMakeLists.txt ++++ b/src/plugins/hardwareintegration/CMakeLists.txt +@@ -1,6 +1,6 @@ + # Generated from hardwareintegration.pro. + +-if(TARGET Qt::WaylandClient) ++if(TARGET Qt::WaylandClient AND QT_FEATURE_wayland_client_hwintegration_plugins) + add_subdirectory(client) + endif() + if(TARGET Qt::WaylandCompositor) +diff --git a/src/plugins/hardwareintegration/compositor/CMakeLists.txt b/src/plugins/hardwareintegration/compositor/CMakeLists.txt +index 67ca5a4b..ead40312 100644 +--- a/src/plugins/hardwareintegration/compositor/CMakeLists.txt ++++ b/src/plugins/hardwareintegration/compositor/CMakeLists.txt +@@ -6,7 +6,9 @@ if(QT_FEATURE_wayland_dmabuf_client_buffer) + endif() + if(QT_FEATURE_wayland_egl) + add_subdirectory(wayland-egl) +- add_subdirectory(wayland-eglstream-controller) ++ if(QT_FEATURE_wayland_eglstream_controller) ++ add_subdirectory(wayland-eglstream-controller) ++ endif() + endif() + if(QT_FEATURE_wayland_brcm) + add_subdirectory(brcm-egl) diff --git a/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend b/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend index eac869a4d..532f3d645 100644 --- a/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend @@ -2,9 +2,32 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos23" - -# qtwayland-{plugins,qmlplugins} are not used in webOS -RRECOMMENDS_${PN}_remove = "${PN}-plugins ${PN}-qmlplugins" +EXTENDPRAUTO_append = "webos24" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" + +SRC_URI_append = " \ + file://0001-Add-option-for-more-features.patch \ +" + +# More options for fine-tuned configuration +PACKAGECONFIG[brcm] = "-DFEATURE_wayland_brcm=ON,-DFEATURE_wayland_brcm=OFF," +PACKAGECONFIG[drm-egl-server-buffer] = "-DFEATURE_wayland_drm_egl_server_buffer=ON,-DFEATURE_wayland_drm_egl_server_buffer=OFF," +PACKAGECONFIG[libhybris-egl-server-buffer] = "-DFEATURE_wayland_libhybris_egl_server_buffer=ON,-DFEATURE_wayland_libhybris_egl_server_buffer=OFF," +PACKAGECONFIG[shm-emulation-server-buffer] = "-DFEATURE_wayland_shm_emulation_server_buffer=ON,-DFEATURE_wayland_shm_emulation_server_buffer=OFF," +PACKAGECONFIG[vulkan-server-buffer] = "-DFEATURE_wayland_vulkan_server_buffer=ON,-DFEATURE_wayland_vulkan_server_buffer=OFF," +PACKAGECONFIG[client-fullscreen-shell-v1] = "-DFEATURE_wayland_client_fullscreen_shell_v1=ON,-DFEATURE_wayland_client_fullscreen_shell_v1=OFF," +PACKAGECONFIG[client-ivi-shell] = "-DFEATURE_wayland_client_ivi_shell=ON,-DFEATURE_wayland_client_ivi_shell=OFF," +PACKAGECONFIG[client-wl-shell] = "-DFEATURE_wayland_client_wl_shell=ON,-DFEATURE_wayland_client_wl_shell=OFF," +PACKAGECONFIG[client-xdg-shell] = "-DFEATURE_wayland_client_xdg_shell=ON,-DFEATURE_wayland_client_xdg_shell=OFF," +# options available by 0001-Add-option-to-disable-plugins.patch +PACKAGECONFIG[eglstream-controller] = "-DFEATURE_wayland_eglstream_controller=ON,-DFEATURE_wayland_eglstream_controller=OFF," +PACKAGECONFIG[client-hwintegration-plugins] = "-DFEATURE_wayland_client_hwintegration_plugins=ON,-DFEATURE_wayland_client_hwintegration_plugins=OFF," +PACKAGECONFIG[platform-plugins] = "-DFEATURE_wayland_platform_plugins=ON,-DFEATURE_wayland_platform_plugins=OFF," +PACKAGECONFIG[decoration-plugins] = "-DFEATURE_wayland_decoration_plugins=ON,-DFEATURE_wayland_decoration_plugins=OFF," + +# PACKAGECONFIG for webos +PACKAGECONFIG = "wayland-server wayland-client client-wl-shell" + +# qtwayland-qmlplugins is not used in webos +RRECOMMENDS_${PN}_remove = "${PN}-qmlplugins" From 2ffbdac097f0cdb53c5aa44abac024557edf7657 Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Thu, 22 Jul 2021 09:26:30 +0900 Subject: [PATCH 0039/2022] auto-luna-surface-manager=36 luna-surfacemanager=356 maliit-framework-webos=99 qtwayland-webos=67 :Release Notes: Support linux-dmabuf protocol in RPi4. Fix the issue with multiple VKB plugins. Improve Adaptive frame callback and cursor visibility control. :Detailed Notes: auto-luna-surface-manager: submissions/35..submissions/36 f1c7b50 Use hwcursor conditionally e0ec483 Control cursor visibility with timeout af11472 Set QT_WAYLAND_HARDWARE_INTEGRATION as linux-dmabuf-unstable-v1 luna-surfacemanager: submissions/355..submissions/356 09ec3718 Allow accessing compositor through compositor window d7606e08 Spread cursor actions to all windows 2272d695 base: Drop cursor visibility control c1ee8ffa Drop EventFilter installation b6c54eaf Print logs when frame callback delay is high 8f1583ab Mitigate delay of adaptive update timers maliit-framework-webos: submissions/98..submissions/99 19d7844 Fix plugin not unloaded even when possible qtwayland-webos: submissions/65..submissions/67 887307e Postpone loading and compiling keymap #2 9778e01 Override setVisible to keep platform window #2 e7db090 Pre-create for webos_shell_surface #2 :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-3595] CCC: auto-luna-surface-manager=36 luna-surfacemanager=356 maliit-framework-webos=99 qtwayland-webos=67 and more Change-Id: Ic7fdee207146eef160290cfdebb70260128925d5 --- .../auto-luna-surface-manager/auto-luna-surface-manager.bb | 2 +- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 2 +- .../maliit-framework-webos/maliit-framework-webos.bb | 2 +- meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb index 726ab7b7e..5531a2009 100644 --- a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb +++ b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb @@ -15,7 +15,7 @@ RDEPENDS_${PN} = " \ qtbase-plugins-webos \ " -WEBOS_VERSION = "0.0.1-35_be8a0de5bf20f2ba903eef35a31210f0859a55bb" +WEBOS_VERSION = "0.0.1-36_724dd7e1cf728d916d2d2e45586a588fca3d9836" PR = "r7" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index d2aa6b99b..a6e13712f 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0" -WEBOS_VERSION = "2.0.0-355_887b8d038d64cbec6929f12a5139d96d4ad4a837" +WEBOS_VERSION = "2.0.0-356_9b8008491fb211de06d1a319df04f6fce2fe146f" PR = "r51" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb b/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb index 4399d6547..7aa03eb01 100644 --- a/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb +++ b/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb @@ -15,7 +15,7 @@ RDEPENDS_${PN} = "qtbase-plugins configd" PACKAGECONFIG[libim] = "CONFIG+=enable-libim,CONFIG-=enable-libim,libim" -WEBOS_VERSION = "0.99.0+20-98_e6d802355739cbcf3e25cb3725203f36e5b21095" +WEBOS_VERSION = "0.99.0+20-99_27834567bb88cef1a1c0a09de8390debd266d8f8" PR = "r34" inherit webos_daemon diff --git a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb index 6f5513d71..ebcdca993 100644 --- a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb +++ b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtwayland webos-wayland-extensions libxkbcommon qt-features-webos wayland-native qtwayland-native" -WEBOS_VERSION = "2.0.0-65_5abdeaf4078f50edacdaf5a22c2213857f8ffc22" +WEBOS_VERSION = "2.0.0-67_a34838a5beaceb98d20ce0be1ab0e3c5ebfd3254" PR = "r14" inherit webos_qmake6 From dba40a2cebaf295bc710bb9cba0635126297395b Mon Sep 17 00:00:00 2001 From: "sukil.hong" Date: Fri, 16 Jul 2021 14:28:30 +0900 Subject: [PATCH 0040/2022] ose: base-files=webos14 webos-initscripts=75 webos-fluentbit-plugins=18-r2 :Release Notes: Handle core file resource limit :Detailed Notes: base-files: If the prerelease is devel image, remove the core file size limit. webos-initscripts: submissions/72..submissions/75 289de5b Fix fluent-bit scripts name 96a5e28 Update fluent-bit.service 3b2be26 Remove coreexam code 7278946 Revert "Remove crashd and rdx service files" 51dbaa1 Change fluent-bit service name webos-fluentbit-plugins: submissions/12..submissions/18 e345448 Change configuration file name 757daf0 Fix resource leak 516b4b9 Check checksum of opkg information ca9498e Update coredump_example code f0bcce3 Fix bug Components field was overwritten when updating the crash count 2229afc Add coredump_example source :Testing Performed: See the CCC jira ticket :QA Notes: :Issues Addressed: [WRN-3493] CCC: base-files=webos14 webos-initscripts=75 webos-fluentbit-plugins=18-r2 [WRN-3437] [WRN-3442] [WRN-3575] [WRN-3755] Change-Id: Ic104858f1c510ef31a426a5df1a3c37ee430b26d --- .../recipes-core/base-files/base-files_3.0.14.bbappend | 5 +++-- meta-webos/recipes-core/initscripts/webos-initscripts.bb | 2 +- .../webos-fluentbit-plugins/webos-fluentbit-plugins.bb | 6 +++--- 3 files changed, 7 insertions(+), 6 deletions(-) diff --git a/meta-webos/recipes-core/base-files/base-files_3.0.14.bbappend b/meta-webos/recipes-core/base-files/base-files_3.0.14.bbappend index 61b6a986c..537885ae0 100644 --- a/meta-webos/recipes-core/base-files/base-files_3.0.14.bbappend +++ b/meta-webos/recipes-core/base-files/base-files_3.0.14.bbappend @@ -4,8 +4,9 @@ AUTHOR = "Herb Kuta " inherit webos_filesystem_paths inherit webos_machine_impl_dep +inherit webos_prerelease_dep -EXTENDPRAUTO_append = "webos13" +EXTENDPRAUTO_append = "webos14" dirs700 = " \ ${webos_db8datadir} \ @@ -57,7 +58,7 @@ do_install_append() { do_install_append_hardware() { # For coredump handling - if ${@oe.utils.conditional('DISTRO', 'webos', 'true', 'false', d)} ; then + if ${@oe.utils.conditional('WEBOS_DISTRO_PRERELEASE', 'devel', 'true', 'false', d)}; then echo "" >> ${D}${sysconfdir}/profile echo "# Set limit of core file size" >> ${D}${sysconfdir}/profile echo "if [ $(id -u) -eq 0 ]; then" >> ${D}${sysconfdir}/profile diff --git a/meta-webos/recipes-core/initscripts/webos-initscripts.bb b/meta-webos/recipes-core/initscripts/webos-initscripts.bb index fbdd1cee5..678b70159 100644 --- a/meta-webos/recipes-core/initscripts/webos-initscripts.bb +++ b/meta-webos/recipes-core/initscripts/webos-initscripts.bb @@ -19,7 +19,7 @@ RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_init_manager} ${VIRTUAL-RUNTIME_rdx-utils} $ PROVIDES = "initscripts" RPROVIDES_${PN} = "initscripts initd-functions" -WEBOS_VERSION = "3.0.0-72_03106cb131a172998eae45833a79187400ba7283" +WEBOS_VERSION = "3.0.0-75_db4bff344f2b125f7fb81df65e122e3af8e06354" PR = "r16" inherit webos_component diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb index 20f239d21..50d11c721 100644 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb @@ -4,15 +4,15 @@ SUMMARY = "webOS fluentbit plugins" AUTHOR = "Sangwoo Kang " LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ +LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0 luna-service2 json-c libpbnjson fluentbit" RDEPENDS_${PN} = "python3-core python3-requests python3-atlassian-python-api" -WEBOS_VERSION = "1.0.0-12_dc5d1594799e84b90a0dce0816d7dc07d5db58ef" -PR = "r1" +WEBOS_VERSION = "1.0.0-18_6987f5ac7fcd64b5df3c3352fb238d0c0f3fd9d7" +PR = "r2" inherit webos_component inherit webos_enhanced_submissions From 819468ed53c9cea2a4ca631216fa8329a3e2db6d Mon Sep 17 00:00:00 2001 From: "taeyoung.hong" Date: Tue, 3 Aug 2021 14:02:48 +0900 Subject: [PATCH 0041/2022] ose: enact-dev-native=r11,v4.0.3 enact-framework=r10,v4.0.2 :Release Notes: Fix LIC_FILES_CHKSUM usage in open-source recipes :Detailed Notes: * Add the LICENSE file in each repos. * Fix LIC_FILES_CHKSUM for directing each repos' LICENSE. :Testing Performed: Verf built and locally tested :QA Notes: :Issues Addressed: [WRN-3545] [Enact] Fix LIC_FILES_CHKSUM usage in open-source recipes [WRN-4458] CCC: meta-webos: enact-dev-native=r11 enact-framework=r10 pro: enact-sandstone=r4 com.webos.app.enactsandstonesampler=r7 com.webos.app.enactmoonstonesampler=r10 auto: enact-agate=r5 com.webos.app.enactagatesampler=r4 Change-Id: Ida7541eb38a4342fd2d814d1fae9b7b705d3c1df --- .../enact-dev/enact-dev-native.bb | 8 +++--- .../enactjs-apps/enact-framework.bb | 26 +++++++++---------- 2 files changed, 16 insertions(+), 18 deletions(-) diff --git a/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb b/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb index 7882903f5..d8d7f876c 100644 --- a/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb +++ b/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb @@ -4,7 +4,7 @@ DESCRIPTION = "enact-dev command-line tools used by webOS" AUTHOR = "Jason Robitaille " SECTION = "webos/devel/tools" LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" +LIC_FILES_CHKSUM = "file://cli/LICENSE;md5=9456eea7fa7e9e4a4fcdf8e430bd36c8" # Dependencies: # - nodejs-native to get node & npm @@ -17,7 +17,7 @@ inherit native # NOTE: It's only necessary to bump PR if the recipe itself changes # No need to bump PR when changing the values of PV and SRCREV (below) -PR = "r10" +PR = "r11" S = "${WORKDIR}/git" @@ -38,8 +38,8 @@ SRCREV_FORMAT = "main_cli-legacy_jsdoc-to-ts" # tag whose hash is specified in SRCREV, so PV and SRCREV will always change # together. -PV = "4.0.2" -SRCREV = "957de13dd358c6d32df84414e40ad64a8b798aef" +PV = "4.0.3" +SRCREV = "81e067291eefb72a166f0be5d89b7d97ff8d1a78" SRCREV_cli-legacy = "bf5012e50bdca62ff596b73a55a5b5f93ccf1069" SRCREV_jsdoc-to-ts = "91e3709da01f4a8e0d57c2ed80d068789acf37eb" diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb index 8f061ea5a..14e5c9de5 100644 --- a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb +++ b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb @@ -4,7 +4,7 @@ SUMMARY = "Enact moonstone standard override used for Enact apps" AUTHOR = "Jason Robitaille " SECTION = "webos/apps" LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" +LIC_FILES_CHKSUM = "file://enact/LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e" inherit webos_enact_repo inherit webos_arch_indep @@ -22,10 +22,10 @@ SRC_URI = " \ # algorithm properly recognizes that a pre-release precedes the associated final # release (e.g., 1.0-pre.1 < 1.0). -PV = "4.0.0" +PV = "4.0.2" -SRCREV_main = "2c57bf461f8922eb9f0aff86a207f77698ab50a6" -SRCREV_enact = "5b23abc4f462392fa1f62533c7bb9bfb42260654" +SRCREV_main = "84dcafa4392e2a10511225bc011449a930607d95" +SRCREV_enact = "ef7085f13a3affc3fdab44bde183d364b354ff8d" do_fetch[vardeps] += "SRCREV_enact" SRCREV_FORMAT = "main_enact" @@ -42,8 +42,8 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ fbjs@0.8.17 \ global@4.4.0 \ hoist-non-react-statics@2.5.5 \ - iconv-lite@0.6.2 \ - ilib@14.8.0 \ + iconv-lite@0.6.3 \ + ilib@14.9.1 \ invariant@2.2.4 \ is-function@1.0.2 \ is-stream@1.1.0 \ @@ -61,7 +61,9 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ react@17.0.2 \ react-dom@17.0.2 \ react-is@17.0.2 \ - recompose@0.26.0 \ + react-lifecycles-compat@3.0.4 \ + recompose@0.30.0 \ + regenerator-runtime@0.13.9 \ safer-buffer@2.1.2 \ scheduler@0.20.2 \ setimmediate@1.0.5 \ @@ -76,14 +78,10 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ # NOTE: We only need to bump PR if we change something OTHER than # PV, SRCREV or the dependencies statement above. -PR = "r9" +PR = "r10" -# Don't need to configure or compile anything for an enactjs app, but don't use -# do_[noexec] = "1" so that recipes that inherit can still override - -do_configure() { - : -} +# Skip unneeded tasks +do_configure[noexec] = "1" do_compile() { cd ${S} From df42fa8d7eb819ed6e614780bac5d0754ef29479 Mon Sep 17 00:00:00 2001 From: "Muniraju A/LGSIA APP-3(muniraju.a@lge.com)" Date: Tue, 3 Aug 2021 11:22:49 +0530 Subject: [PATCH 0042/2022] ose: com.webos.app.camera=2 :Release Notes: Add Record, Fullscreen and Camera List :Detailed Notes: com.webos.app.camera: submissions/1..submissions/2 48876ed Added camera main screen functionality :Testing Performed: Refer [WRN-4460] for test results :QA Notes: NA :Issues Addressed: [WRN-4460] CCC: ose: com.webos.app.camera=2 [WRN-4253] Verify web Media Issue and integrate camera app into the build Change-Id: I399d0adbee8e67898610e591d5151488a899d1dc --- .../recipes-webos/com.webos.app.camera/com.webos.app.camera.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb index cd237d487..e18479c1f 100644 --- a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb +++ b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb @@ -9,7 +9,7 @@ file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ file://oss-pkg-info.yaml;md5=3072ffcf5bdbbc376ed21c9d378d14d5 \ " -WEBOS_VERSION = "0.0.1-1_34b7629927a2eeb6eeb3db7563184136e3ea2213" +WEBOS_VERSION = "0.0.1-2_6729ed09fa5c85e00b8b608079ae5b509fbc8f34" PR = "r0" inherit webos_component From 989af07d085bff7cec308fc5960d364a592efa2d Mon Sep 17 00:00:00 2001 From: "kalaiselvi.p" Date: Mon, 2 Aug 2021 20:49:50 +0530 Subject: [PATCH 0043/2022] ose: webruntime87=r48.1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit :Release Notes: Disable neva-media in chromium for Emulator :Detailed Notes: Currently there is no support for g-media-pipeline in ose emulator. But chromium has enabled support for neva-media. So disabling neva-media from chromium to not to use gmp. webruntime_87: r48.0..r48.1 Disable neva-media in chromium for Emulator :Testing Performed: CCC testing :QA Notes: NA :Issues Addressed: [WRN-3868] [webOS OSE Emulator ]: Youtube video is not playing when launching youtube through enact browser [WRN-3541] [webOS OSE Emulator ]: Video is not playing, Buffering is displayed. [WRN-4463] CCC: ose: webruntime_87=r48.1 Change-Id: Ifa002a37df87eb2d82dbdb40139191361e549ce9 --- meta-webos/recipes-webos/chromium/webruntime_87.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime_87.bb b/meta-webos/recipes-webos/chromium/webruntime_87.bb index a9b194e33..a0660fbb6 100644 --- a/meta-webos/recipes-webos/chromium/webruntime_87.bb +++ b/meta-webos/recipes-webos/chromium/webruntime_87.bb @@ -6,7 +6,7 @@ require webruntime-repo${REPO_VERSION}.inc PROVIDES = "virtual/webruntime" -PR = "${INC_PR}.0" +PR = "${INC_PR}.1" GN_ARGS_append = " use_x11=false" @@ -33,3 +33,4 @@ GN_ARGS_append = " \ enable_js_type_check=false\ use_local_storage_tracker=true\ " +PACKAGECONFIG_remove_qemux86 = "gstreamer umediaserver neva-media gav neva-webrtc" From 443ae9f8a649dfde0fb34e1eb61f3d3bcc42f083 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 30 Jul 2021 07:26:26 -0700 Subject: [PATCH 0044/2022] webos_app_generate_security_files.bbclass, webos_configure_manifest.bbclass: rename *_comment_remover() functions to *_delete_comments() :Release Notes: :Detailed Notes: _remover suffix looks too much as old-style _remove bitbake operator and now triggers a parsing error as well: ERROR: meta-webosose/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb: Variable webos_configure_manifest_comment_remover contains an operation using the old override syntax. Please convert this layer/metadata before attempting to use with a newer bitbake. ERROR: meta-webosose/meta-webos/recipes-webos/test-apps/bareapp.bb: Variable webos_app_generate_security_files_comment_remover contains an operation using the old override syntax. Please convert this layer/metadata before attempting to use with a newer bitbake. https://lists.openembedded.org/g/bitbake-devel/message/12495 :Testing Performed: CCC testing :QA Notes: None. :Issues Addressed: [WRN-4535] CCC: Clean metadata Change-Id: I655d1ebd2a96f06ca6f1c66b50c328a1742ff44b --- .../classes/webos_app_generate_security_files.bbclass | 4 ++-- meta-webos/classes/webos_configure_manifest.bbclass | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/meta-webos/classes/webos_app_generate_security_files.bbclass b/meta-webos/classes/webos_app_generate_security_files.bbclass index 2f2cf2532..604f26b46 100644 --- a/meta-webos/classes/webos_app_generate_security_files.bbclass +++ b/meta-webos/classes/webos_app_generate_security_files.bbclass @@ -122,7 +122,7 @@ def webos_app_generate_security_files_get_immediate_subdirectories(root): return [name for name in os.listdir(root) if os.path.isdir(os.path.join(root, name))] -def webos_app_generate_security_files_comment_remover(text): +def webos_app_generate_security_files_delete_comments(text): import re def replacer(match): @@ -142,7 +142,7 @@ def webos_app_generate_security_files_read_json(file): with open(file, "r") as f: content = f.read() - content = webos_app_generate_security_files_comment_remover(content) + content = webos_app_generate_security_files_delete_comments(content) return json.loads(content) fakeroot python do_configure_security() { diff --git a/meta-webos/classes/webos_configure_manifest.bbclass b/meta-webos/classes/webos_configure_manifest.bbclass index 133760442..90ce6f03b 100644 --- a/meta-webos/classes/webos_configure_manifest.bbclass +++ b/meta-webos/classes/webos_configure_manifest.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2020 LG Electronics, Inc. +# Copyright (c) 2015-2021 LG Electronics, Inc. WEBOS_SYSTEM_BUS_MANIFEST_TYPE ??= "PACKAGE" @@ -141,7 +141,7 @@ def webos_configure_manifest_service(d): return manifests -def webos_configure_manifest_comment_remover(text): +def webos_configure_manifest_delete_comments(text): import re def replacer(match): @@ -158,7 +158,7 @@ def webos_configure_manifest_application_from_appinfo(d, app_info_file): manifest = webos_configure_manifest_template() with open(app_info_file, "r") as f: - app_info = json.loads(webos_configure_manifest_comment_remover(f.read())) + app_info = json.loads(webos_configure_manifest_delete_comments(f.read())) def is_valid_version(version): From 252be5fe1530a67fda29903713f49231a3245341 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 30 Jul 2021 07:48:47 -0700 Subject: [PATCH 0045/2022] webos_certificates.bbclass: Rename webos_certificates_removefiles to webos_certificates_delete_files :Release Notes: :Detailed Notes: _removefiles suffix looks too much as old-style _remove bitbake operator and now triggers a parsing error as well: ERROR: oe-core/meta/recipes-support/ca-certificates/ca-certificates_20210119.bb: Variable webos_certificates_removefiles contains an operation using the old override syntax. Please convert this layer/metadata before attempting to use with a newer bitbake. https://lists.openembedded.org/g/bitbake-devel/message/12495 :Testing Performed: CCC testing :QA Notes: None. :Issues Addressed: [WRN-4535] CCC: Clean metadata Change-Id: I3b6a58ba39f13683796175a8b704bf9a99bf3042 --- meta-webos/classes/webos_certificates.bbclass | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/classes/webos_certificates.bbclass b/meta-webos/classes/webos_certificates.bbclass index 8c8f1c012..bf31ed113 100644 --- a/meta-webos/classes/webos_certificates.bbclass +++ b/meta-webos/classes/webos_certificates.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2013 LG Electronics, Inc. +# Copyright (c) 2013-2021 LG Electronics, Inc. # # webos_certificates # @@ -34,7 +34,7 @@ webos_certificates_linkfiles() { # Removes all files in a semicolon-separated (;) list. # arg1: Semicolon-separated list of file paths -webos_certificates_removefiles() { +webos_certificates_delete_files() { local IFS=";" for path in $1; do @@ -59,7 +59,7 @@ webos_certificates_linkcertificates() { c_rehash $DESTDIR > /dev/null 2>&1 # Remove the links we created before c_rehash and then replace them with new ones. - webos_certificates_removefiles $TEMPORARY_LINKS + webos_certificates_delete_files $TEMPORARY_LINKS # Create links to replace the previous links that were deleted. # These are the final ones that will work properly in the image, but not during build phase. From 8c7b20592e8a56e2e81caf50ec235b7b038fe385 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 4 Aug 2021 02:23:41 -0700 Subject: [PATCH 0046/2022] webos.conf: remove LOCALCONF_VERSION :Release Notes: It doesn't belong to DISTRO config. :Detailed Notes: It's set with weak-assignment in meta/conf/sanity.conf and because of this setting in DISTRO config the change in sanity.conf like in: https://git.openembedded.org/openembedded-core/commit/?id=5452f1ba337685cf89d3429e08255450ab90b96f is ignored causing: ERROR: Error executing a python function in exec_python_func() autogenerated: The stack trace of python calls that resulted in this exception/failure was: File: 'exec_python_func() autogenerated', lineno: 2, function: 0001: *** 0002:oecore_update_localconf(d) 0003: File: '/jenkins/home/anaconda/build-webos-ose-ros-honister/build/oe-core/meta/classes/sanity.bbclass', lineno: 56, function: oecore_update_localconf 0052: 0053:is a good way to visualise the changes.""" 0054: failmsg = d.expand(failmsg) 0055: *** 0056: raise NotImplementedError(failmsg) 0057:} 0058: 0059:SANITY_SITECONF_SAMPLE ?= "${COREBASE}/meta*/conf/site.conf.sample" 0060:python oecore_update_siteconf() { Exception: NotImplementedError: Your version of local.conf was generated from an older/newer version of local.conf.sample and there have been updates made to this file. Please compare the two files and merge any changes before continuing. Matching the version numbers will remove this message. "meld conf/local.conf /jenkins/home/anaconda/build-webos-ose-ros-honister/build/oe-core/meta*/conf/local.conf.sample" is a good way to visualise the changes. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [PLAT-141293] Create GPVB with Yocto 3.4 Honister [WRN-4535] CCC: Clean metadata Change-Id: Ia7caeb725a5d72235fe8b3c9fd4a42b3b037f734 --- meta-webos/conf/distro/webos.conf | 2 -- 1 file changed, 2 deletions(-) diff --git a/meta-webos/conf/distro/webos.conf b/meta-webos/conf/distro/webos.conf index ce44dd902..8cfffc7bd 100644 --- a/meta-webos/conf/distro/webos.conf +++ b/meta-webos/conf/distro/webos.conf @@ -24,8 +24,6 @@ MAINTAINER = "Joseph Park " TARGET_VENDOR = "-webos" -LOCALCONF_VERSION = "1" - require conf/distro/include/webos.inc LICENSE_FLAGS_WHITELIST_append = " commercial_x264" From 74b74b02d42c75cb4d7b6e794df104ae1ce4154a Mon Sep 17 00:00:00 2001 From: Jimmy Ohn Date: Wed, 4 Aug 2021 12:13:49 +0900 Subject: [PATCH 0047/2022] com.webos.service.mediaindexer=16 :Release Notes: Fix Coverity issue for resource leak :Detailed Notes: com.webos.service.mediaindexer : submissions/15..submissions/16 b564f5c Fix coverity issue for resource leak :Testing Performed: Please refer test result in WRN-4508 :QA Notes: NA :Issues Addressed: [WRN-4508] CCC: com.webos.service.mediaindexer=16 [WRN-4507] Fix coverity issue for resource leakage [CID-8994243] Resource leak (RESOURCE_LEAK) Change-Id: I0686964c9f5e4270ac18a3cce258f48402ebe9f5 --- .../com.webos.service.mediaindexer.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb b/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb index 35d573e46..babdffd1a 100644 --- a/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb +++ b/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb @@ -5,7 +5,7 @@ AUTHOR = "Jaehoon Lee " LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10" -WEBOS_VERSION = "1.0.0-15_76b9263fcf1d10ea9a7d706fb0e971c6d1d2c575" +WEBOS_VERSION = "1.0.0-16_0856b9721c202f887612865120412b1e29cf6087" PR = "r6" inherit webos_component From 7e9e15b7e29823884a38130c43c49bbad4caec2d Mon Sep 17 00:00:00 2001 From: Sanjay Poptani Date: Fri, 6 Aug 2021 15:37:25 +0530 Subject: [PATCH 0048/2022] com.webos.service.peripheralmanager=8-r2 :Release Notes: Fixed the crash issue for exceptions :Detailed Notes: - Try and catch block implemented - Exceptions are captured com.webos.service.peripheralmanager: submissions/7..submissions/9 78fce86 Add license file 88e73d7 implementation of Exception handling :Testing Performed: Refer [WRN-4583] for test results :QA Notes: N/A :Issues Addressed: [WRN-4583] CCC: com.webos.service.peripheralmanager=8-r2 [WRN-4064] [RDX_CRASH][webos] /usr/sbin/peripheralmanager in n/a (libc.so.6 + 0x1ac26) Change-Id: If9b7d23eb5dd9c7bf5b261c41ce7605a2ce63f67 --- .../com.webos.service.peripheralmanager.bb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb b/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb index 7deb24371..a21ccf1e8 100644 --- a/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb +++ b/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb @@ -4,14 +4,14 @@ SUMMARY = "Peripheral Manager service for webOS OSE" AUTHOR = "Yogish S " SECTION = "webosose" LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ +LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0 libpbnjson luna-service2 pmloglib " -WEBOS_VERSION = "1.0.0-7_d7b327018b60e1700755901627faae19c4708213" -PR = "r1" +WEBOS_VERSION = "1.0.0-9_b6b04b94f5641191116e3e33be0ad0e7f08b14ce" +PR = "r2" inherit webos_component inherit webos_enhanced_submissions From c98cdfa63c5bcd4193260b23984a9583679f2112 Mon Sep 17 00:00:00 2001 From: "Muniraju A/LGSIA APP-3(muniraju.a@lge.com)" Date: Mon, 9 Aug 2021 14:48:07 +0530 Subject: [PATCH 0049/2022] ose: com.webos.app.camera=3 :Release Notes: Added Fullscreen preview functionality. :Detailed Notes: com.webos.app.camera: submissions/2..submissions/3 1048e2a Added Fullscreen preview functionality :Testing Performed: Refer [WRN-4671] for test results :QA Notes: NA :Issues Addressed: [WRN-4671] CCC: ose: com.webos.app.camera=3 [WRN-4208] Take Snapshot functionality for Main Screen [WRN-4223] Add Record,Snapshot,launch video and image viewer app from full screen preview. [WRN-4237] Discuss with UX team and Change Full screen preview UI Change-Id: I047bafad313abd529b5e6477e19d1f7cadbd28f1 --- .../recipes-webos/com.webos.app.camera/com.webos.app.camera.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb index e18479c1f..9abdc2a96 100644 --- a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb +++ b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb @@ -9,7 +9,7 @@ file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ file://oss-pkg-info.yaml;md5=3072ffcf5bdbbc376ed21c9d378d14d5 \ " -WEBOS_VERSION = "0.0.1-2_6729ed09fa5c85e00b8b608079ae5b509fbc8f34" +WEBOS_VERSION = "0.0.1-3_a0b54840a5806d0994fceeb43014a17d8b5fc890" PR = "r0" inherit webos_component From 735ffe4846b23b4e24bd3f1a2feabacf18c22eb2 Mon Sep 17 00:00:00 2001 From: Cathy Park Date: Tue, 3 Aug 2021 17:42:31 +0900 Subject: [PATCH 0050/2022] qtbase=webos90 qtdeclarative=webos68 (rebase to v6.2.0-beta2) :Release Notes: Update bbappends as per meta-qt6 update to v6.2.0-beta2. Fix the issue where mouse dragging is not working in eglfs. :Detailed Notes: qtbase=webos90 Drop patches that have been merged in upstream. To address the mouse dragging issue, add 0001-Fix-button-type-to-update-coordinates-when-dragging.patch. qtdeclarative=webos68 Drop patches that have been merged in upstream. :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues [WRN-4685] CCC: Update meta-qt6 to v6.2.0-beta2 Change-Id: I08f73cc530dc7674ec9ebda09aad14e01142d292 --- ...ding-functor-addressing-in-QProperty.patch | 53 ----- ...-to-update-coordinates-when-dragging.patch | 33 +++ meta-webos/recipes-qt/qt6/qtbase_git.bbappend | 6 +- ...-in-knownPointingDevices-is-destroy.patch} | 12 +- ...tor-addressing-in-QQmlPropertyBindin.patch | 98 --------- ...-cache-the-result-of-qmldir-searches.patch | 47 ----- .../0003-Fix-qmldir-cache-inconsistency.patch | 199 ------------------ .../recipes-qt/qt6/qtdeclarative_git.bbappend | 7 +- 8 files changed, 44 insertions(+), 411 deletions(-) delete mode 100644 meta-webos/recipes-qt/qt6/qtbase/0001-Fix-binding-functor-addressing-in-QProperty.patch create mode 100644 meta-webos/recipes-qt/qt6/qtbase/0001-Fix-button-type-to-update-coordinates-when-dragging.patch rename meta-webos/recipes-qt/qt6/qtdeclarative/{0004-Check-if-a-device-in-knownPointingDevices-is-destroy.patch => 0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch} (90%) delete mode 100644 meta-webos/recipes-qt/qt6/qtdeclarative/0001-Fix-binding-functor-addressing-in-QQmlPropertyBindin.patch delete mode 100644 meta-webos/recipes-qt/qt6/qtdeclarative/0002-Completely-cache-the-result-of-qmldir-searches.patch delete mode 100644 meta-webos/recipes-qt/qt6/qtdeclarative/0003-Fix-qmldir-cache-inconsistency.patch diff --git a/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-binding-functor-addressing-in-QProperty.patch b/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-binding-functor-addressing-in-QProperty.patch deleted file mode 100644 index 04bac9d66..000000000 --- a/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-binding-functor-addressing-in-QProperty.patch +++ /dev/null @@ -1,53 +0,0 @@ -From 49da466912b9e668a73536742edb14b49d693df5 Mon Sep 17 00:00:00 2001 -From: Andrei Golubev -Date: Thu, 1 Jul 2021 15:24:46 +0200 -Subject: [PATCH] Fix binding functor addressing in QProperty - -We create the callable object at sizeof(QPBP) offset from -the beginning of the memory block. However, evaluateRecursive() -uses sizeof() + alignment when fetching that same callable from -the memory - -While on 64-bit platforms this is fine due to -sizeof(QPBP) == QPBP::getSizeEnsuringAlignment(), this is broken for -32-bit systems where there's actually alignment bits that follow the -QPBP struct in memory (and thus we cast a random memory location to -an object) -(Note: QPBP is short for QPropertyBindingPrivate) - -To fix this, change the offset for creation and destruction of the -callable to the one that uses alignment. This way, evaluateRecursive() -code becomes correct - -Fixes: QTBUG-93890 -Pick-to: 6.1 6.2 -Change-Id: Ief57051846632fa61df4b79b3f054c25062a9498 -Reviewed-by: Fabian Kosmale -Upstream-Status: Backport [https://codereview.qt-project.org/c/qt/qtbase/+/357819] ---- - src/corelib/kernel/qproperty.cpp | 5 +++-- - 1 file changed, 3 insertions(+), 2 deletions(-) - -diff --git a/src/corelib/kernel/qproperty.cpp b/src/corelib/kernel/qproperty.cpp -index d290f0a16c..965939a1fc 100644 ---- a/src/corelib/kernel/qproperty.cpp -+++ b/src/corelib/kernel/qproperty.cpp -@@ -268,7 +268,8 @@ QPropertyBindingPrivate::~QPropertyBindingPrivate() - if (firstObserver) - firstObserver.unlink(); - if (vtable->size) -- vtable->destroy(reinterpret_cast(this) + sizeof(QPropertyBindingPrivate)); -+ vtable->destroy(reinterpret_cast(this) -+ + QPropertyBindingPrivate::getSizeEnsuringAlignment()); - } - - void QPropertyBindingPrivate::unlinkAndDeref() -@@ -344,7 +345,7 @@ QUntypedPropertyBinding::QUntypedPropertyBinding(QMetaType metaType, const Bindi - { - std::byte *mem = new std::byte[QPropertyBindingPrivate::getSizeEnsuringAlignment() + vtable->size](); - d = new(mem) QPropertyBindingPrivate(metaType, vtable, std::move(location)); -- vtable->moveConstruct(mem+sizeof(QPropertyBindingPrivate), function); -+ vtable->moveConstruct(mem + QPropertyBindingPrivate::getSizeEnsuringAlignment(), function); - } - - QUntypedPropertyBinding::QUntypedPropertyBinding(QUntypedPropertyBinding &&other) diff --git a/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-button-type-to-update-coordinates-when-dragging.patch b/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-button-type-to-update-coordinates-when-dragging.patch new file mode 100644 index 000000000..3c6315712 --- /dev/null +++ b/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-button-type-to-update-coordinates-when-dragging.patch @@ -0,0 +1,33 @@ +From 1e6e4e3ab3307f6d0eaebc6efbde2cfe4be38f61 Mon Sep 17 00:00:00 2001 +From: Cathy Park +Date: Mon, 2 Aug 2021 17:53:59 +0900 +Subject: [PATCH] Fix button type to update coordinates when dragging + +A move position (x,y) can be delivered to the MouseArea only if +button is Qt::NoButton during mouse move (dragging). Otherwise +mouse move does not cause positionChanged in MouseArea. + +Task-number: QTBUG-95453 +Pick-to: 6.1 6.2 +Change-Id: I298943dc4f6f30714e940f4029c62dd52c176b93 +Upstream-Status: Submitted [https://codereview.qt-project.org/c/qt/qtbase/+/362797] +--- + src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp | 5 ++++- + 1 file changed, 4 insertions(+), 1 deletion(-) + +diff --git a/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp b/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp +index 5d6f20bd1a..2012022656 100644 +--- a/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp ++++ b/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp +@@ -204,7 +204,10 @@ void QEvdevMouseHandler::sendMouseEvent() + m_prevInvalid = false; + } + +- emit handleMouseEvent(x, y, m_abs, m_buttons, m_button, m_eventType); ++ if (m_eventType == QEvent::MouseMove) ++ emit handleMouseEvent(x, y, m_abs, m_buttons, Qt::NoButton, m_eventType); ++ else ++ emit handleMouseEvent(x, y, m_abs, m_buttons, m_button, m_eventType); + + m_prevx = m_x; + m_prevy = m_y; diff --git a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend index ac1609be9..5db8e7f98 100644 --- a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend @@ -2,7 +2,7 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos89" +EXTENDPRAUTO_append = "webos90" # Remove LGPL3-only files python do_patch_append() { @@ -80,9 +80,9 @@ PACKAGECONFIG_remove = "tests" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" -# Upstream-Status: Backport +# Upstream-Status: Submitted SRC_URI_append = " \ - file://0001-Fix-binding-functor-addressing-in-QProperty.patch \ + file://0001-Fix-button-type-to-update-coordinates-when-dragging.patch \ " # Upstream-Status: Inappropriate diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0004-Check-if-a-device-in-knownPointingDevices-is-destroy.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch similarity index 90% rename from meta-webos/recipes-qt/qt6/qtdeclarative/0004-Check-if-a-device-in-knownPointingDevices-is-destroy.patch rename to meta-webos/recipes-qt/qt6/qtdeclarative/0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch index 1da9e3bc9..dcb5669b1 100644 --- a/meta-webos/recipes-qt/qt6/qtdeclarative/0004-Check-if-a-device-in-knownPointingDevices-is-destroy.patch +++ b/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch @@ -1,4 +1,4 @@ -From 99734dce8a82c2b876f4cc2de7896d0d0ce3ccb2 Mon Sep 17 00:00:00 2001 +From bcf1ef522634fc0ceba5c81d052b05188087f278 Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Tue, 15 Jun 2021 13:49:55 +0900 Subject: [PATCH] Check if a device in knownPointingDevices is destroyed before @@ -19,10 +19,10 @@ Upstream-Status: Submitted [https://codereview.qt-project.org/c/qt/qtdeclarative 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/quick/util/qquickdeliveryagent.cpp b/src/quick/util/qquickdeliveryagent.cpp -index 2b649d01cf..cd5f6cb901 100644 +index 344024ab7c..2b602f35ef 100644 --- a/src/quick/util/qquickdeliveryagent.cpp +++ b/src/quick/util/qquickdeliveryagent.cpp -@@ -273,9 +273,16 @@ void QQuickDeliveryAgentPrivate::removeGrabber(QQuickItem *grabber, bool mouse, +@@ -269,9 +269,16 @@ void QQuickDeliveryAgentPrivate::removeGrabber(QQuickItem *grabber, bool mouse, Q_Q(QQuickDeliveryAgent); if (eventsInDelivery.isEmpty()) { // do it the expensive way @@ -42,7 +42,7 @@ index 2b649d01cf..cd5f6cb901 100644 } return; } -@@ -1543,7 +1550,6 @@ void QQuickDeliveryAgentPrivate::ensureDeviceConnected(const QPointingDevice *de +@@ -1639,7 +1646,6 @@ void QQuickDeliveryAgentPrivate::ensureDeviceConnected(const QPointingDevice *de return; knownPointingDevices.append(dev); connect(dev, &QPointingDevice::grabChanged, this, &QQuickDeliveryAgentPrivate::onGrabChanged); @@ -51,7 +51,7 @@ index 2b649d01cf..cd5f6cb901 100644 void QQuickDeliveryAgentPrivate::deliverPointerEvent(QPointerEvent *event) diff --git a/src/quick/util/qquickdeliveryagent_p_p.h b/src/quick/util/qquickdeliveryagent_p_p.h -index 0d7d5fb71d..39ce1a364a 100644 +index f9095158e8..7acdbeb31b 100644 --- a/src/quick/util/qquickdeliveryagent_p_p.h +++ b/src/quick/util/qquickdeliveryagent_p_p.h @@ -110,7 +110,7 @@ public: @@ -61,5 +61,5 @@ index 0d7d5fb71d..39ce1a364a 100644 - QList knownPointingDevices; + QList > knownPointingDevices; + uint currentHoverId = 0; #if QT_CONFIG(wheelevent) - uint lastWheelEventAccepted = 0; diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Fix-binding-functor-addressing-in-QQmlPropertyBindin.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Fix-binding-functor-addressing-in-QQmlPropertyBindin.patch deleted file mode 100644 index ed8620eff..000000000 --- a/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Fix-binding-functor-addressing-in-QQmlPropertyBindin.patch +++ /dev/null @@ -1,98 +0,0 @@ -From 769c98a13957f595e1e1556757e46aa9acf129a2 Mon Sep 17 00:00:00 2001 -From: Fabian Kosmale -Date: Mon, 5 Jul 2021 11:14:55 +0200 -Subject: [PATCH] Fix binding functor addressing in QQmlPropertyBinding - -This mirrors the change in qtbase. - -Task-number: QTBUG-93890 -Pick-to: 6.1 6.2 -Change-Id: I761b320e4dd4b1e2884bb9c0e01b28cc15c4ac2d -Reviewed-by: Jaeyoon Jung -Reviewed-by: Andrei Golubev -Upstream-Status: Backport [https://codereview.qt-project.org/c/qt/qtdeclarative/+/358175] ---- - src/qml/qml/qqmlpropertybinding.cpp | 15 +++++++++------ - src/qml/qml/qqmlpropertybinding_p.h | 8 +++++--- - 2 files changed, 14 insertions(+), 9 deletions(-) - -diff --git a/src/qml/qml/qqmlpropertybinding.cpp b/src/qml/qml/qqmlpropertybinding.cpp -index b1ad3f1767..185fac6dcc 100644 ---- a/src/qml/qml/qqmlpropertybinding.cpp -+++ b/src/qml/qml/qqmlpropertybinding.cpp -@@ -61,10 +61,11 @@ QUntypedPropertyBinding QQmlPropertyBinding::create(QMetaType propertyType, QV4: - QV4::ExecutionContext *scope, QObject *target, - QQmlPropertyIndex targetIndex) - { -- auto buffer = new std::byte[sizeof(QQmlPropertyBinding)+sizeof(QQmlPropertyBindingJS)+jsExpressionOffsetLength()]; // QQmlPropertyBinding uses delete[] -+ auto buffer = new std::byte[QQmlPropertyBinding::getSizeEnsuringAlignment() -+ + sizeof(QQmlPropertyBindingJS)+jsExpressionOffsetLength()]; // QQmlPropertyBinding uses delete[] - auto binding = new (buffer) QQmlPropertyBinding(propertyType, target, targetIndex, - TargetData::WithoutBoundFunction); -- auto js = new(buffer + sizeof(QQmlPropertyBinding) + jsExpressionOffsetLength()) QQmlPropertyBindingJS(); -+ auto js = new(buffer + QQmlPropertyBinding::getSizeEnsuringAlignment() + jsExpressionOffsetLength()) QQmlPropertyBindingJS(); - Q_ASSERT(binding->jsExpression() == js); - Q_ASSERT(js->asBinding() == binding); - Q_UNUSED(js); -@@ -77,9 +78,10 @@ QUntypedPropertyBinding QQmlPropertyBinding::create(QMetaType propertyType, QV4: - - QUntypedPropertyBinding QQmlPropertyBinding::createFromCodeString(const QQmlPropertyData *pd, const QString& str, QObject *obj, const QQmlRefPointer &ctxt, const QString &url, quint16 lineNumber, QObject *target, QQmlPropertyIndex targetIndex) - { -- auto buffer = new std::byte[sizeof(QQmlPropertyBinding)+sizeof(QQmlPropertyBindingJS)+jsExpressionOffsetLength()]; // QQmlPropertyBinding uses delete[] -+ auto buffer = new std::byte[QQmlPropertyBinding::getSizeEnsuringAlignment() -+ + sizeof(QQmlPropertyBindingJS)+jsExpressionOffsetLength()]; // QQmlPropertyBinding uses delete[] - auto binding = new(buffer) QQmlPropertyBinding(QMetaType(pd->propType()), target, targetIndex, TargetData::WithoutBoundFunction); -- auto js = new(buffer + sizeof(QQmlPropertyBinding) + jsExpressionOffsetLength()) QQmlPropertyBindingJS(); -+ auto js = new(buffer + QQmlPropertyBinding::getSizeEnsuringAlignment() + jsExpressionOffsetLength()) QQmlPropertyBindingJS(); - Q_ASSERT(binding->jsExpression() == js); - Q_ASSERT(js->asBinding() == binding); - Q_UNUSED(js); -@@ -91,9 +93,10 @@ QUntypedPropertyBinding QQmlPropertyBinding::createFromCodeString(const QQmlProp - - QUntypedPropertyBinding QQmlPropertyBinding::createFromBoundFunction(const QQmlPropertyData *pd, QV4::BoundFunction *function, QObject *obj, const QQmlRefPointer &ctxt, QV4::ExecutionContext *scope, QObject *target, QQmlPropertyIndex targetIndex) - { -- auto buffer = new std::byte[sizeof(QQmlPropertyBinding)+sizeof(QQmlPropertyBindingJSForBoundFunction)+jsExpressionOffsetLength()]; // QQmlPropertyBinding uses delete[] -+ auto buffer = new std::byte[QQmlPropertyBinding::getSizeEnsuringAlignment() -+ + sizeof(QQmlPropertyBindingJSForBoundFunction)+jsExpressionOffsetLength()]; // QQmlPropertyBinding uses delete[] - auto binding = new(buffer) QQmlPropertyBinding(QMetaType(pd->propType()), target, targetIndex, TargetData::HasBoundFunction); -- auto js = new(buffer + sizeof(QQmlPropertyBinding) + jsExpressionOffsetLength()) QQmlPropertyBindingJSForBoundFunction(); -+ auto js = new(buffer + QQmlPropertyBinding::getSizeEnsuringAlignment() + jsExpressionOffsetLength()) QQmlPropertyBindingJSForBoundFunction(); - Q_ASSERT(binding->jsExpression() == js); - Q_ASSERT(js->asBinding() == binding); - Q_UNUSED(js); -diff --git a/src/qml/qml/qqmlpropertybinding_p.h b/src/qml/qml/qqmlpropertybinding_p.h -index 2765a13a21..341e300de4 100644 ---- a/src/qml/qml/qqmlpropertybinding_p.h -+++ b/src/qml/qml/qqmlpropertybinding_p.h -@@ -109,7 +109,7 @@ public: - { - return std::launder(reinterpret_cast( - reinterpret_cast(this) -- + sizeof(QQmlPropertyBinding) -+ + QPropertyBindingPrivate::getSizeEnsuringAlignment() - + jsExpressionOffsetLength())); - } - -@@ -146,7 +146,7 @@ public: - - static bool doEvaluate(QMetaType metaType, QUntypedPropertyData *dataPtr, void *f) { - auto address = static_cast(f); -- address -= sizeof (QPropertyBindingPrivate); // f now points to QPropertyBindingPrivate suboject -+ address -= QPropertyBindingPrivate::getSizeEnsuringAlignment(); // f now points to QPropertyBindingPrivate suboject - // and that has the same address as QQmlPropertyBinding - return reinterpret_cast(address)->evaluate(metaType, dataPtr); - } -@@ -237,10 +237,12 @@ inline const QQmlPropertyBinding *QQmlPropertyBindingJS::asBinding() const - { - return std::launder(reinterpret_cast( - reinterpret_cast(this) -- - sizeof(QQmlPropertyBinding) -+ - QPropertyBindingPrivate::getSizeEnsuringAlignment() - - QQmlPropertyBinding::jsExpressionOffsetLength())); - } - -+static_assert(sizeof(QQmlPropertyBinding) == sizeof(QPropertyBindingPrivate)); // else the whole offset computatation will break -+ - QT_END_NAMESPACE - - #endif // QQMLPROPERTYBINDING_P_H diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0002-Completely-cache-the-result-of-qmldir-searches.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0002-Completely-cache-the-result-of-qmldir-searches.patch deleted file mode 100644 index 144852543..000000000 --- a/meta-webos/recipes-qt/qt6/qtdeclarative/0002-Completely-cache-the-result-of-qmldir-searches.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 1958936d52bff66e0d7723ada0c188581d26f279 Mon Sep 17 00:00:00 2001 -From: Ulf Hermann -Date: Fri, 2 Jul 2021 10:28:57 +0200 -Subject: [PATCH] Completely cache the result of qmldir searches - -Change-Id: Ib6a41c8d20b1443d8d4296190c007f4627086602 -Reviewed-by: Fabian Kosmale -Upstream-Status: Backport [https://codereview.qt-project.org/c/qt/qtdeclarative/+/358018] ---- - src/qml/qml/qqmlimport_p.h | 14 +++++++++++--- - 1 file changed, 11 insertions(+), 3 deletions(-) - -diff --git a/src/qml/qml/qqmlimport_p.h b/src/qml/qml/qqmlimport_p.h -index 946f36b398..6f7951f00f 100644 ---- a/src/qml/qml/qqmlimport_p.h -+++ b/src/qml/qml/qqmlimport_p.h -@@ -286,8 +286,11 @@ QQmlImportDatabase::LocalQmldirResult QQmlImportDatabase::locateLocalQmldir( - QmldirCache *cache = cacheHead; - while (cache) { - if (cache->version == version) { -- if (cache->qmldirFilePath.isEmpty()) -- return QmldirNotFound; -+ if (cache->qmldirFilePath.isEmpty()) { -+ return cache->qmldirPathUrl.isEmpty() -+ ? QmldirNotFound -+ : QmldirInterceptedToRemote; -+ } - if (callback(cache->qmldirFilePath, cache->qmldirPathUrl)) - return QmldirFound; - result = QmldirRejected; -@@ -361,10 +364,15 @@ QQmlImportDatabase::LocalQmldirResult QQmlImportDatabase::locateLocalQmldir( - } - - // Nothing found? Add an empty cache entry to signal that for further requests. -- if (result == QmldirNotFound) { -+ if (result == QmldirNotFound || result == QmldirInterceptedToRemote) { - QmldirCache *cache = new QmldirCache; - cache->version = version; - cache->next = cacheHead; -+ if (result == QmldirInterceptedToRemote) { -+ // The actual value doesn't matter as long as it's not empty. -+ // We only use it to discern QmldirInterceptedToRemote from QmldirNotFound above. -+ cache->qmldirPathUrl = QStringLiteral("intercepted"); -+ } - qmldirCache.insert(uri, cache); - } - diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0003-Fix-qmldir-cache-inconsistency.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0003-Fix-qmldir-cache-inconsistency.patch deleted file mode 100644 index 91d5125fa..000000000 --- a/meta-webos/recipes-qt/qt6/qtdeclarative/0003-Fix-qmldir-cache-inconsistency.patch +++ /dev/null @@ -1,199 +0,0 @@ -From 38e52202f1cbc18e6ec73d6b63519febf0bce1a7 Mon Sep 17 00:00:00 2001 -From: Jaeyoon Jung -Date: Thu, 15 Jul 2021 11:44:55 +0900 -Subject: [PATCH] Fix qmldir cache inconsistency - -If there are multiple qmldir entries for the same QML module in the -import list, the one that comes first should take precedence. The same -applies when constructing the qmldir cache. - -We can achieve that by inserting the entries into the cache in the same -order they appear in the completeQmldirPaths list. - -Pick-to: 6.2 -Change-Id: Ic56a0952b16c4be016180c695d79089fc132319a -Reviewed-by: Fabian Kosmale -Upstream-Status: Backport [https://codereview.qt-project.org/c/qt/qtdeclarative/+/359990] ---- - src/qml/qml/qqmlimport_p.h | 53 +++++++++---------- - .../data/importPathOrder/MyModuleTest.qml | 7 +++ - .../data/importPathOrder/MyView.qml | 3 ++ - .../importPathOrder/path1/MyModule/MyItem.qml | 6 +++ - .../importPathOrder/path1/MyModule/qmldir | 3 ++ - .../importPathOrder/path2/MyModule/MyItem.qml | 6 +++ - .../importPathOrder/path2/MyModule/qmldir | 3 ++ - tests/auto/qml/qqmlimport/tst_qqmlimport.cpp | 16 ++++++ - 8 files changed, 70 insertions(+), 27 deletions(-) - create mode 100644 tests/auto/qml/qqmlimport/data/importPathOrder/MyModuleTest.qml - create mode 100644 tests/auto/qml/qqmlimport/data/importPathOrder/MyView.qml - create mode 100644 tests/auto/qml/qqmlimport/data/importPathOrder/path1/MyModule/MyItem.qml - create mode 100644 tests/auto/qml/qqmlimport/data/importPathOrder/path1/MyModule/qmldir - create mode 100644 tests/auto/qml/qqmlimport/data/importPathOrder/path2/MyModule/MyItem.qml - create mode 100644 tests/auto/qml/qqmlimport/data/importPathOrder/path2/MyModule/qmldir - -diff --git a/src/qml/qml/qqmlimport_p.h b/src/qml/qml/qqmlimport_p.h -index 6f7951f00f..c919a7282a 100644 ---- a/src/qml/qml/qqmlimport_p.h -+++ b/src/qml/qml/qqmlimport_p.h -@@ -278,28 +278,27 @@ QQmlImportDatabase::LocalQmldirResult QQmlImportDatabase::locateLocalQmldir( - // Check cache first - - LocalQmldirResult result = QmldirNotFound; -- QmldirCache *cacheHead = nullptr; -- { -- QmldirCache **cachePtr = qmldirCache.value(uri); -- if (cachePtr) { -- cacheHead = *cachePtr; -- QmldirCache *cache = cacheHead; -- while (cache) { -- if (cache->version == version) { -- if (cache->qmldirFilePath.isEmpty()) { -- return cache->qmldirPathUrl.isEmpty() -- ? QmldirNotFound -- : QmldirInterceptedToRemote; -- } -- if (callback(cache->qmldirFilePath, cache->qmldirPathUrl)) -- return QmldirFound; -- result = QmldirRejected; -+ QmldirCache *cacheTail = nullptr; -+ -+ QmldirCache **cachePtr = qmldirCache.value(uri); -+ QmldirCache *cacheHead = cachePtr ? *cachePtr : nullptr; -+ if (cacheHead) { -+ cacheTail = cacheHead; -+ do { -+ if (cacheTail->version == version) { -+ if (cacheTail->qmldirFilePath.isEmpty()) { -+ return cacheTail->qmldirPathUrl.isEmpty() -+ ? QmldirNotFound -+ : QmldirInterceptedToRemote; - } -- cache = cache->next; -+ if (callback(cacheTail->qmldirFilePath, cacheTail->qmldirPathUrl)) -+ return QmldirFound; -+ result = QmldirRejected; - } -- } -+ } while (cacheTail->next && (cacheTail = cacheTail->next)); - } - -+ - // Do not try to construct the cache if it already had any entries for the URI. - // Otherwise we might duplicate cache entries. - if (result != QmldirNotFound) -@@ -349,15 +348,15 @@ QQmlImportDatabase::LocalQmldirResult QQmlImportDatabase::locateLocalQmldir( - cache->version = version; - cache->qmldirFilePath = qmldirAbsoluteFilePath; - cache->qmldirPathUrl = url; -- cache->next = cacheHead; -- qmldirCache.insert(uri, cache); -- cacheHead = cache; -- -- if (result != QmldirFound) { -- result = callback(qmldirAbsoluteFilePath, url) -- ? QmldirFound -- : QmldirRejected; -- } -+ cache->next = nullptr; -+ if (cacheTail) -+ cacheTail->next = cache; -+ else -+ qmldirCache.insert(uri, cache); -+ cacheTail = cache; -+ -+ if (result != QmldirFound) -+ result = callback(qmldirAbsoluteFilePath, url) ? QmldirFound : QmldirRejected; - - // Do not return here. Rather, construct the complete cache for this URI. - } -diff --git a/tests/auto/qml/qqmlimport/data/importPathOrder/MyModuleTest.qml b/tests/auto/qml/qqmlimport/data/importPathOrder/MyModuleTest.qml -new file mode 100644 -index 0000000000..5ac9ec4fb2 ---- /dev/null -+++ b/tests/auto/qml/qqmlimport/data/importPathOrder/MyModuleTest.qml -@@ -0,0 +1,7 @@ -+import QtQuick -+import MyModule -+ -+Item { -+ MyItem { objectName: "myItem1" } -+ MyView {} -+} -diff --git a/tests/auto/qml/qqmlimport/data/importPathOrder/MyView.qml b/tests/auto/qml/qqmlimport/data/importPathOrder/MyView.qml -new file mode 100644 -index 0000000000..a4fdcb51a0 ---- /dev/null -+++ b/tests/auto/qml/qqmlimport/data/importPathOrder/MyView.qml -@@ -0,0 +1,3 @@ -+import MyModule -+ -+MyItem { objectName: "myItem2" } -diff --git a/tests/auto/qml/qqmlimport/data/importPathOrder/path1/MyModule/MyItem.qml b/tests/auto/qml/qqmlimport/data/importPathOrder/path1/MyModule/MyItem.qml -new file mode 100644 -index 0000000000..3da82d1b77 ---- /dev/null -+++ b/tests/auto/qml/qqmlimport/data/importPathOrder/path1/MyModule/MyItem.qml -@@ -0,0 +1,6 @@ -+import QtQuick -+ -+Item { -+ width: 100 -+ height: 100 -+} -diff --git a/tests/auto/qml/qqmlimport/data/importPathOrder/path1/MyModule/qmldir b/tests/auto/qml/qqmlimport/data/importPathOrder/path1/MyModule/qmldir -new file mode 100644 -index 0000000000..edfd2c9462 ---- /dev/null -+++ b/tests/auto/qml/qqmlimport/data/importPathOrder/path1/MyModule/qmldir -@@ -0,0 +1,3 @@ -+module MyModule -+ -+MyItem MyItem.qml -diff --git a/tests/auto/qml/qqmlimport/data/importPathOrder/path2/MyModule/MyItem.qml b/tests/auto/qml/qqmlimport/data/importPathOrder/path2/MyModule/MyItem.qml -new file mode 100644 -index 0000000000..ed02d2df7a ---- /dev/null -+++ b/tests/auto/qml/qqmlimport/data/importPathOrder/path2/MyModule/MyItem.qml -@@ -0,0 +1,6 @@ -+import QtQuick -+ -+Item { -+ width: 200 -+ height: 200 -+} -diff --git a/tests/auto/qml/qqmlimport/data/importPathOrder/path2/MyModule/qmldir b/tests/auto/qml/qqmlimport/data/importPathOrder/path2/MyModule/qmldir -new file mode 100644 -index 0000000000..edfd2c9462 ---- /dev/null -+++ b/tests/auto/qml/qqmlimport/data/importPathOrder/path2/MyModule/qmldir -@@ -0,0 +1,3 @@ -+module MyModule -+ -+MyItem MyItem.qml -diff --git a/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp b/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp -index 4f2b4f6b13..572c8771a0 100644 ---- a/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp -+++ b/tests/auto/qml/qqmlimport/tst_qqmlimport.cpp -@@ -205,6 +205,22 @@ void tst_QQmlImport::importPathOrder() - engine.addImportPath(qml2Imports); - expectedImportPaths.move(expectedImportPaths.indexOf(qml2Imports), 0); - QCOMPARE(engine.importPathList(), expectedImportPaths); -+ -+ // Verify if the type in the module comes first in the import path list -+ // takes the precedence. In the case below, the width of both items -+ // should be the same to that of the type defined in "path2". -+ engine.addImportPath(testFile("importPathOrder/path1")); -+ engine.addImportPath(testFile("importPathOrder/path2")); -+ QQmlComponent component(&engine, testFile("importPathOrder/MyModuleTest.qml")); -+ QScopedPointer rootItem(component.create()); -+ QVERIFY(component.errorString().isEmpty()); -+ QVERIFY(!rootItem.isNull()); -+ QQuickItem *item1 = rootItem->findChild("myItem1"); -+ QQuickItem *item2 = rootItem->findChild("myItem2"); -+ QVERIFY(item1 != nullptr); -+ QVERIFY(item2 != nullptr); -+ QCOMPARE(item1->width(), 200); -+ QCOMPARE(item2->width(), 200); - } - - Q_DECLARE_METATYPE(QQmlImports::ImportVersion) diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend index 3ded202aa..f95e05eab 100644 --- a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend @@ -2,16 +2,13 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos67" +EXTENDPRAUTO_append = "webos68" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" # Upstream-Status: Backport, Submitted SRC_URI_append_class-target = " \ - file://0001-Fix-binding-functor-addressing-in-QQmlPropertyBindin.patch \ - file://0002-Completely-cache-the-result-of-qmldir-searches.patch \ - file://0003-Fix-qmldir-cache-inconsistency.patch \ - file://0004-Check-if-a-device-in-knownPointingDevices-is-destroy.patch \ + file://0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch \ " # Upstream-Status: Inappropriate From a593ebd3c1c0f82cfd67f02d9e0c4da2c9407743 Mon Sep 17 00:00:00 2001 From: "p.dinesh" Date: Thu, 12 Aug 2021 14:55:24 +0530 Subject: [PATCH 0051/2022] ose: com.webos.app.{imageviewer=13 videoplayer=11} :Release Notes: Aligned zoom slider height with image magnifier in imageviewer. Fixed Audio is not coming when video is playing in videoplayer. :Detailed Notes: com.webos.app.imageviewer: submissions/12..submissions/13 a8b2ef2 Fixed zoom slider not alignment with image magnifier in imageviewer. com.webos.app.videoplayer: submissions/10..submissions/11 a25126d Fixed Audio is not coming when video is playing in videoplayer app. :Testing Performed: Refer [WRN-4842] for test results :QA Notes: NA :Issues Addressed: [WRN-4842] CCC: com.webos.app.{imageviewer=13 videoplayer=11} [WRN-4837] Fix zoom slider not alignment with image magnifier in imageviewer. [WRN-4582] [WebOS OSE] : Audio is not coming when video is playing in videoplayer app. Change-Id: Ib6652d50aeccd60bff14844805db198085f47e7a --- .../com.webos.app.imageviewer/com.webos.app.imageviewer.bb | 2 +- .../com.webos.app.videoplayer/com.webos.app.videoplayer.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/com.webos.app.imageviewer/com.webos.app.imageviewer.bb b/meta-webos/recipes-webos/com.webos.app.imageviewer/com.webos.app.imageviewer.bb index 0dae240d4..1e2d3183a 100644 --- a/meta-webos/recipes-webos/com.webos.app.imageviewer/com.webos.app.imageviewer.bb +++ b/meta-webos/recipes-webos/com.webos.app.imageviewer/com.webos.app.imageviewer.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=3072ffcf5bdbbc376ed21c9d378d14d5 \ " -WEBOS_VERSION = "0.0.1-12_497b181dd98e61160dbc85fc473715eca67279f8" +WEBOS_VERSION = "0.0.1-13_21dfaf5c7af80b30f11bb9edc357667035feaac1" PR = "r0" inherit webos_component diff --git a/meta-webos/recipes-webos/com.webos.app.videoplayer/com.webos.app.videoplayer.bb b/meta-webos/recipes-webos/com.webos.app.videoplayer/com.webos.app.videoplayer.bb index bffffe993..5af5454dd 100644 --- a/meta-webos/recipes-webos/com.webos.app.videoplayer/com.webos.app.videoplayer.bb +++ b/meta-webos/recipes-webos/com.webos.app.videoplayer/com.webos.app.videoplayer.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=3072ffcf5bdbbc376ed21c9d378d14d5 \ " -WEBOS_VERSION = "0.0.1-10_579208443449d64d1047f012ff4f1fa93301f0aa" +WEBOS_VERSION = "0.0.1-11_d8847b1ff4bf374b03288492d0e8e6d669c896c3" PR = "r0" inherit webos_component From 9c45e43b0c2c8996174ec21f7a581caff6bfed18 Mon Sep 17 00:00:00 2001 From: gururaj patil Date: Thu, 12 Aug 2021 13:10:55 +0530 Subject: [PATCH 0052/2022] ose:g-camera-pipeline=16 com.webos.service.camera=22 :Release Notes: Code unification from pro to ose Fix Rpi3 Build issue for LICENSE file addition in repo :Detailed Notes: g-camera-pipeline : submissions/15..submissions/16 7ebb582 Add LICENSE file to source code repo com.webos.service.camera : submissions/21..submissions/22 1cf67b8 Code unification from PRO to OSE :Testing Performed: Please refer test result in WRN-4835 :QA Notes: NA :Issues Addressed: [WRN-4835] CCC: g-camera-pipeline=16 com.webos.service.camera=22 [WRN-4705] Add LICENSE file to source code repo [WRN-3136] Code unification from PRO to OSE Change-Id: I8d9be4782166ae67900638a0b6aeb2545044a83b --- .../com.webos.service.camera/com.webos.service.camera.bb | 2 +- meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb b/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb index a5914d52e..d97cab0d5 100644 --- a/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb +++ b/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 luna-service2 json-c alsa-lib pmloglib udev" -WEBOS_VERSION = "1.0.0-21_fc8322e486488254f580ddcb49efecb8f4125b99" +WEBOS_VERSION = "1.0.0-22_6e18aa7c4c6dedbe90edcff5c43adfba5e426457" PR = "r4" inherit webos_component diff --git a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb index da0358a67..4bd0a6c3f 100644 --- a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb +++ b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb @@ -18,7 +18,7 @@ inherit webos_machine_impl_dep inherit webos_machine_dep inherit webos_pkgconfig -WEBOS_VERSION = "1.0.0-15_e9d8253132f6745c6cbff49a6e7fdd345b50aad9" +WEBOS_VERSION = "1.0.0-16_e7fc787fdb52abb4ebd5c18f798976f6ebffad9f" PR = "r9" WEBOS_GIT_PARAM_BRANCH_raspberrypi4 = "@gav" From f71f9b0179641972309adf8b236c9a3c83094997 Mon Sep 17 00:00:00 2001 From: "ramya.hegde" Date: Fri, 13 Aug 2021 15:20:13 +0530 Subject: [PATCH 0053/2022] com.webos.service.bluetooth2=65 bluetooth-sil-bluez5=66 :Release Notes: Support for APPKEY_DELETE, APPKEY_UNBIND config parameters in mesh :Detailed Notes: com.webos.service.bluetooth2: submissions/64..submissions/65 93c3e6d APPKEY_DELETE, APPKEY_UNBIND support bluetooth-sil-bluez5: submissions/64..submissions/66 871d7ea Fixed coverity issue 0783f02 APPKEY_DELETE, APPKEY_UNBIND support 3647336 Storing of all the config requests and timers :Testing Performed: Test results are updated in WRN-4889 :QA Notes: NA :Issues Addressed: [WRN-4889] CCC: com.webos.service.bluetooth2=65 bluetooth-sil-bluez5=66 [WRN-592] Implementation of mesh/model/config/set for DELETE_APPKEY in bluetooth service [WRN-601] Implementation of mesh/model/config/set for UNBIND in bluetooth service [WRN-599] Implementation of mesh/model/config/set for DELETE_APPKEY in bluetooth-sil-bluez5 [WRN-600] Implementation of mesh/model/config/set for UNBIND in bluetooth-sil-bluez5 [WRN-603] Implementation of storing of individual config get set request [WRN-4891] Fix coverity issue in bluetooth-sil-bluez5 Change-Id: I40f8d5369288e3e33f2220b148b51f96c03ab609 --- meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb | 2 +- .../recipes-webos/bluetooth/com.webos.service.bluetooth2.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb index fe8b31e2b..66cd35169 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb @@ -17,7 +17,7 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES ??= "" # Add runtime dependency on bluez5 OBEX service when we have to support FTP RDEPENDS_${PN} += "${@ bb.utils.contains('WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES', 'FTP', 'bluez5-obex', '', d)}" -WEBOS_VERSION = "0.1.0-64_569707602027bc9a1a35f115f78a2645694bbe2c" +WEBOS_VERSION = "0.1.0-66_354378ecde341781dce7861c796889431e8cfc30" PR = "r3" inherit webos_component diff --git a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb index c4f054dd3..4749ded68 100644 --- a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb +++ b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb @@ -48,7 +48,7 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES = "GATT FTP OPP A2DP SPP HFP AVRCP PAN A # emulator), which means that the pairing should happen without user intervention. WEBOS_BLUETOOTH_PAIRING_IO_CAPABILITY ??= "NoInputNoOutput" -WEBOS_VERSION = "1.0.0-64_879009d135c517b351cca0d8bc886458bd321b11" +WEBOS_VERSION = "1.0.0-65_889be8c3435df848bb7c89c6aff9b9c287038144" PR = "r5" inherit webos_component From f86f3e1f1bce472d97e5bda0dd09f7f9d6d8835e Mon Sep 17 00:00:00 2001 From: "Muniraju A/LGSIA APP-3(muniraju.a@lge.com)" Date: Mon, 16 Aug 2021 18:35:34 +0530 Subject: [PATCH 0054/2022] ose: com.webos.app.camera=4 :Release Notes: Add footer functionality. :Detailed Notes: com.webos.app.camera: submissions/3..submissions/4 9c58e95 Added footer functionality. :Testing Performed: Refer [WRN-5298] for test results :QA Notes: NA :Issues Addressed: [WRN-5298] CCC: ose: com.webos.app.camera=4 [WRN-4191] Service Integration for Footer Icons Change-Id: I27dfd5b7ba870e1b961fc3803abb56e46172a105 --- .../recipes-webos/com.webos.app.camera/com.webos.app.camera.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb index 9abdc2a96..146e095ed 100644 --- a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb +++ b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb @@ -9,7 +9,7 @@ file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ file://oss-pkg-info.yaml;md5=3072ffcf5bdbbc376ed21c9d378d14d5 \ " -WEBOS_VERSION = "0.0.1-3_a0b54840a5806d0994fceeb43014a17d8b5fc890" +WEBOS_VERSION = "0.0.1-4_508b2ee01858090c0191543ff8b1b3ef8d046df8" PR = "r0" inherit webos_component From 39de1cd8d5c8064ed37ea0c4e7f808dad5396186 Mon Sep 17 00:00:00 2001 From: Hyungchan Kim Date: Thu, 12 Aug 2021 22:31:08 +0900 Subject: [PATCH 0055/2022] qtdeclarative=webos69 :Release Notes: Fix the build issue where a recipe that depends on qtdeclarative fails at do_configure with CMake errors. :Detailed Notes: qtdeclarative=webos69 Stage bindir and libexecdir to SYSROOT_DIRS for CMake errors like: The imported target "Qt6::qmltyperegistrar" references the file ".../recipe-sysroot/usr/libexec/qmltyperegistrar" The imported target "Qt6::qmldom" references the file ".../recipe-sysroot/usr/bin/qmldom" :Testing Performed: Build only. :QA Notes: N/A. :Issues Addressed: [WRN-5327] CCC: qtdeclarative=webos69 qttestability=29 [WRN-4537] [OSE VKB] AttributeError: 'NoneType' object has no attribute 'get_elements' Change-Id: I3181911ffe2e52c078c7b724c1cc24ffdb1ee240 --- .../recipes-qt/qt6/qtdeclarative_git.bbappend | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend index f95e05eab..31ed799f7 100644 --- a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend @@ -2,7 +2,7 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos68" +EXTENDPRAUTO_append = "webos69" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" @@ -29,3 +29,14 @@ SRC_URI_append_class-native = " file://qmllint-supplement.py" do_install_append_class-native() { install -m 755 ${WORKDIR}/qmllint-supplement.py ${D}${OE_QMAKE_PATH_QT_BINS} } + +# TODO: To workaround the build issue where a recipe that depends on +# qtdeclarative fails at do_configure with CMake errors like: +# The imported target "Qt6::qmltyperegistrar" references the file +# ".../recipe-sysroot/usr/libexec/qmltyperegistrar" +# The imported target "Qt6::qmldom" references the file +# ".../recipe-sysroot/usr/bin/qmldom" +SYSROOT_DIRS_append = " \ + ${bindir} \ + ${libexecdir} \ +" From 6065934e70b071d8b8d0048ed3c17e9d041e8b75 Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Tue, 17 Aug 2021 11:05:42 +0900 Subject: [PATCH 0056/2022] native: localization-tool-native=r6,v1.5.0 :Release Notes: Update the latest version of loctool and plugins. :Detailed Notes: The dependent loctool version has been updated to 2.14.1. According to the pseudo localization enhancement in loctool, webOS plugins have been modified and updated to work properly. :Testing Performed: See the comments of CCC ticket :QA Notes: N/A :Issues Addressed: [WRN-3776] Update ose loctool to have the latest version [WRN-5348] CCC: native: localization-tool-native=r6,v1.5.0 Change-Id: I9bdba945e26ea52acedf8dfaa2726078543e1164 --- .../localization-tool/localization-tool-native.bb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb b/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb index 5586268e3..a2a28ae09 100644 --- a/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb +++ b/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb @@ -4,9 +4,9 @@ SUMMARY = "A localization tool is written in JavaScript" AUTHOR = "Goun Lee" SECTION = "webos/devel/tools" LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" +LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" -PR = "r5" +PR = "r6" inherit pythonnative inherit webos_npm_env @@ -20,8 +20,8 @@ S = "${WORKDIR}/git" # iLib-js/ilib-loctool-webos-dist repository on GitHub. This version should correspond to the # tag whose hash is specified in SRCREV, so PV and SRCREV will always change # together. -PV = "1.4.0" -SRCREV = "986d3fdf3776da673a445c5855a3a10e1ce44a4c" +PV = "1.5.0" +SRCREV = "86b83a1bbfa3f0585300bf57c3472af000e8a1fa" # Skip the unwanted tasks do_configure[noexec] = "1" From a42a3423df8fbfeefbfdf35b58825bf9f3faf9e9 Mon Sep 17 00:00:00 2001 From: gururaj patil Date: Tue, 17 Aug 2021 13:03:58 +0530 Subject: [PATCH 0057/2022] com.webos.service.camera=23 :Release Notes: Fix get buffer issue in camera hal :Detailed Notes: com.webos.service.camera : submissions/22..submissions/23 ba32aa8 Fix get buffer issue in hal :Testing Performed: Please refer test result in WRN-5371 :QA Notes: NA :Issues Addressed: [WRN-5371] CCC: com.webos.service.camera=23 [WRN-5350] Playback failure with camsrc plugin is seen in camera pipeline Change-Id: Ibd5d8f6deb8893aec79f2b1265d8d4eecabab4bc --- .../com.webos.service.camera/com.webos.service.camera.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb b/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb index d97cab0d5..f31e90fb4 100644 --- a/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb +++ b/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 luna-service2 json-c alsa-lib pmloglib udev" -WEBOS_VERSION = "1.0.0-22_6e18aa7c4c6dedbe90edcff5c43adfba5e426457" +WEBOS_VERSION = "1.0.0-23_e1ef84c4816a8b54c2367c19c7146b6fc0b172d2" PR = "r4" inherit webos_component From cefc3ec3c337838a34d664ae455ce4fd2850d54f Mon Sep 17 00:00:00 2001 From: Muniraju A Date: Thu, 19 Aug 2021 15:16:19 +0530 Subject: [PATCH 0058/2022] ose: com.webos.app.camera=5 :Release Notes: Add Popup while taking snapshot :Detailed Notes: com.webos.app.camera: submissions/4..submissions/5 3f05f64 Added Popup for snapshot take. :Testing Performed: Refer [WRN-5476] for test results :QA Notes: NA :Issues Addressed: [WRN-5476] CCC: ose: com.webos.app.camera=5 [WRN-5465] Snapshot not stored in the /media/multimedia folder [WRN-5114] Show popup for take snapshot Change-Id: I2fbddd3774cc81fc42ce4fe9738122962da9f488 --- .../recipes-webos/com.webos.app.camera/com.webos.app.camera.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb index 146e095ed..5515e38c0 100644 --- a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb +++ b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb @@ -9,7 +9,7 @@ file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ file://oss-pkg-info.yaml;md5=3072ffcf5bdbbc376ed21c9d378d14d5 \ " -WEBOS_VERSION = "0.0.1-4_508b2ee01858090c0191543ff8b1b3ef8d046df8" +WEBOS_VERSION = "0.0.1-5_a2532a5949b3db69efabe543176a6e85b38595e1" PR = "r0" inherit webos_component From d3d91276336bf6d3bcce244466caa0fbb6efd798 Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Thu, 19 Aug 2021 06:44:09 +0530 Subject: [PATCH 0059/2022] bluetooth-sil-bluez5=67 :Release Notes: Fix crash issue of bluetooth-sil-bluez5 :Detailed Notes: bluetooth-sil-bluez5: submissions/66..submissions/67 8477a21 Fixed bluetooth crash issue :Testing Performed: Tested results updated in WRN-5462 :QA Notes: N/A :Issues Addressed: [WRN-5462] CCC: bluetooth-sil-bluez5=67 [WRN-4743] [RDX_CRASH][webos] /usr/sbin/webos-bluetooth-service in memcpy (libc.so.6 + 0x60d64) Change-Id: I995ce35ad92c020d3349a06fb5e1cf06d7530a13 --- meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb index 66cd35169..bfe9a4c7d 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb @@ -17,7 +17,7 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES ??= "" # Add runtime dependency on bluez5 OBEX service when we have to support FTP RDEPENDS_${PN} += "${@ bb.utils.contains('WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES', 'FTP', 'bluez5-obex', '', d)}" -WEBOS_VERSION = "0.1.0-66_354378ecde341781dce7861c796889431e8cfc30" +WEBOS_VERSION = "0.1.0-67_16701f6dea7d7aaacbab6d869ad03a989b7377b9" PR = "r3" inherit webos_component From 597a9986b1e7eddbf9720749c09dad3a535da521 Mon Sep 17 00:00:00 2001 From: "sanjay.poptani" Date: Thu, 19 Aug 2021 14:34:56 +0530 Subject: [PATCH 0060/2022] luna-sysservice=17-r9 :Release Notes: Fix static issue in luna-sysservice :Detailed Notes: - Fixing the below static issues CID 8994347 Explicit null dereferenced (FORWARD_NULL) luna-sysservice: submissions/15..submissions/17 6eca89d Fixed static issue db9cd0f Add license file :Testing Performed: Refer [WRN-5271] for test results :QA Notes: N/A :Issues Addressed: [WRN-5271] CCC: luna-sysservice=17-r9 [WRN-4233] Fixing of new static issue reported [CID 8994347] Explicit null dereferenced (FORWARD_NULL) Change-Id: I8eebd39b27d96a27464e4bf943f5bf5947df4518 --- meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb b/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb index dbc309c31..6017aace6 100644 --- a/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb +++ b/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb @@ -4,7 +4,7 @@ SUMMARY = "Provides preference, timezone and ringtone services" AUTHOR = "Keith Derrick " SECTION = "webos/base" LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ +LIC_FILES_CHKSUM = "file://LICENSE;md5=7bd705f8ae3d5077cbd3da7078607d8b \ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " @@ -14,8 +14,8 @@ DEPENDS = "luna-service2 libpbnjson qtbase uriparser libxml2 sqlite3 pmloglib ny RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_ntp} tzcode" -WEBOS_VERSION = "4.4.0-15_eff73f8b0ad000a697b90ee9d57332d6e6e432ee" -PR = "r8" +WEBOS_VERSION = "4.4.0-17_a6b79399204c0927ef80028faaeb995862d777a3" +PR = "r9" inherit webos_component inherit webos_public_repo From d5eeea814875a7989578b33fed516bf010145724 Mon Sep 17 00:00:00 2001 From: sushant narayan Date: Thu, 19 Aug 2021 12:03:16 +0530 Subject: [PATCH 0061/2022] ose: g-camera-pipeline=13.gav.21-r10 g-media-pipeline=21.gav.22-r9 umediaserver=24.gav.19-r17 umediaserver-configs=12 packagegroup-webos-extended=r38 :Release Notes: Add g-camera-pipeline support in OSE emulator Enable GAV architecture for umediaserver & g-media-pipeline to OSE emulator Add qemux86 support in umediaserver-configs for camera pipeline Fix the build issues due to bb recipe restructuring :Detailed Notes: g-camera-pipeline: submissions/13.gav.20..submissions/13.gav.21 207152d Adapt g-camera-pipeline component in OSE Emulator g-media-pipeline: submissions/21.gav.21..submissions/21.gav.22 66bb312 Add LICENSE file to source code repo d939813 Add GAV based g-media-pipeline to qemux86 umediaserver: submissions/24.gav.18..submissions/24.gav.19 df7a464 Add LICENSE file to source code repo umediaserver-configs: submissions/11..submissions/12 75fb658 umediaserver-config change to add camera pipeline packagegroup-webos-extended: Add g-camera-pipeline to qemux86 :Testing Performed: Please refer test result in WRN-5470 :QA Notes: NA :Issues Addressed: [WRN-5470] CCC: ose: g-camera-pipeline=13.gav.21-r10 g-media-pipeline=21.gav.22-r9 umediaserver=24.gav.19-r17 umediaserver-configs=12 [WRN-4008] Check changes required to adapt g-camera-pipeline on Emulator [WRN-2287] Add LICENSE file to media modules repo Change-Id: Iac567c49aa27d7e1f50dab5b825e8995094a286c --- .../packagegroup-webos-extended.bb | 11 +++----- .../g-media-pipeline/g-media-pipeline.bb | 25 +++++++++++-------- .../g-camera-pipeline/g-camera-pipeline.bb | 19 +++++++------- .../umediaserver/umediaserver-configs.bb | 2 +- .../umediaserver/umediaserver.bb | 16 +++++++----- 5 files changed, 39 insertions(+), 34 deletions(-) diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index 363338448..6f8186b37 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -5,7 +5,7 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" # You don't need to change this value when you're changing just RDEPENDS_${PN} variable. -PR = "r37" +PR = "r38" PACKAGE_ARCH = "${MACHINE_ARCH}" inherit packagegroup @@ -33,17 +33,12 @@ VIRTUAL-RUNTIME_com.webos.service.mediacontroller_qemux86 = "com.webos.service.m VIRTUAL-RUNTIME_com.webos.service.mediacontroller_raspberrypi4 = "com.webos.service.mediacontroller" VIRTUAL-RUNTIME_com.webos.service.mediacontroller_raspberrypi4-64 = "com.webos.service.mediacontroller" -VIRTUAL-RUNTIME_g-media-pipeline ?= "" -VIRTUAL-RUNTIME_g-media-pipeline_raspberrypi3 = "g-media-pipeline" -VIRTUAL-RUNTIME_g-media-pipeline_raspberrypi3-64 = "g-media-pipeline" -VIRTUAL-RUNTIME_g-media-pipeline_raspberrypi4 = "g-media-pipeline" -VIRTUAL-RUNTIME_g-media-pipeline_raspberrypi4-64 = "g-media-pipeline" -VIRTUAL-RUNTIME_g-media-pipeline_qemux86 = "g-media-pipeline" +VIRTUAL-RUNTIME_g-media-pipeline ?= "g-media-pipeline" VIRTUAL-RUNTIME_g-camera-pipeline ?= "" VIRTUAL-RUNTIME_g-camera-pipeline_raspberrypi4 = "g-camera-pipeline" VIRTUAL-RUNTIME_g-camera-pipeline_raspberrypi4-64 = "g-camera-pipeline" -VIRTUAL-RUNTIME_g-camera-pipeline_qemux86 = "" +VIRTUAL-RUNTIME_g-camera-pipeline_qemux86 = "g-camera-pipeline" VIRTUAL-RUNTIME_ai ?= "" VIRTUAL-RUNTIME_ai_raspberrypi3 = "com.webos.service.ai" diff --git a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb index a87f99a5d..0d0af9334 100644 --- a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb +++ b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb @@ -4,8 +4,10 @@ SUMMARY = "G media pipeline is a media pipeline which uses GStreamer" AUTHOR = "Jinwoo Ahn " SECTION = "webos/media" LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" -LIC_FILES_CHKSUM_raspberrypi4 += "file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519" +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +" inherit webos_component inherit webos_cmake @@ -24,17 +26,20 @@ inherit webos_pkgconfig # qemux86 COMPATIBLE_MACHINE = "^qemux86$|^raspberrypi3$|^raspberrypi3-64$|^raspberrypi4$|^raspberrypi4-64$" -DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad umediaserver media-resource-calculator" +# raspberrypi4 and qemux86 uses @gav branch +PR = "r9" +DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad umediaserver media-resource-calculator webos-wayland-extensions" DEPENDS_append_rpi = " virtual/libomxil" -DEPENDS_append_raspberrypi4 = " webos-wayland-extensions" +WEBOS_GIT_PARAM_BRANCH = "@gav" +WEBOS_VERSION = "1.0.0-21.gav.22_bfda47abcd88d2f27e4682ea85786464439b6144" +SRC_URI_append = " file://0001-LunaServiceClient.cpp-include-string-to-fix-build-wi.patch" -WEBOS_VERSION = "1.0.0-21_ecd90bea31daca759dc40061749131f2a61b99c1" -PR = "r8" - -WEBOS_GIT_PARAM_BRANCH_raspberrypi4 = "@gav" -WEBOS_VERSION_raspberrypi4 = "1.0.0-21.gav.21_fcb0d9d9dd7e413af0adea2a95158a1ffca41842" -SRC_URI_append_raspberrypi4 = " file://0001-LunaServiceClient.cpp-include-string-to-fix-build-wi.patch" +# raspberrypi3 uses @21.master branch +DEPENDS_remove_raspberrypi3 = "webos-wayland-extensions" +WEBOS_GIT_PARAM_BRANCH_raspberrypi3 = "@21.master" +WEBOS_VERSION_raspberrypi3 = "1.0.0-21.master.1_5780fa2b8466405a9873df1e64621f5930e00686" +SRC_URI_remove_raspberrypi3 = " file://0001-LunaServiceClient.cpp-include-string-to-fix-build-wi.patch" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" diff --git a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb index 4bd0a6c3f..34e531b37 100644 --- a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb +++ b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb @@ -18,21 +18,22 @@ inherit webos_machine_impl_dep inherit webos_machine_dep inherit webos_pkgconfig -WEBOS_VERSION = "1.0.0-16_e7fc787fdb52abb4ebd5c18f798976f6ebffad9f" -PR = "r9" - -WEBOS_GIT_PARAM_BRANCH_raspberrypi4 = "@gav" -WEBOS_VERSION_raspberrypi4 = "1.0.0-13.gav.20_20f5e22b8e1fae6c44a71b729415ee72d87a51e0" +PR = "r10" DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad pkgconfig umediaserver media-resource-calculator com.webos.service.camera" DEPENDS_append_rpi = " userland" -SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" -S = "${WORKDIR}/git" +WEBOS_GIT_PARAM_BRANCH = "@gav" +WEBOS_VERSION = "1.0.0-13.gav.21_4231a2804ba30ee1dc780e29c5d224a6903da6ae" + +WEBOS_GIT_PARAM_BRANCH_raspberrypi3 = "master" +WEBOS_VERSION_raspberrypi3 = "1.0.0-16_e7fc787fdb52abb4ebd5c18f798976f6ebffad9f" # See the restrictions in CMakeLists.txt -COMPATIBLE_MACHINE = "^raspberrypi3$" -COMPATIBLE_MACHINE_append = "|^raspberrypi4$" +COMPATIBLE_MACHINE = "^raspberrypi3$|^raspberrypi4$|^qemux86$" + +SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" +S = "${WORKDIR}/git" FILES_SOLIBSDEV = "" FILES_${PN} += "${libdir}/*.so" diff --git a/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb b/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb index dad6f896c..1c54c84d7 100644 --- a/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb +++ b/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " -WEBOS_VERSION = "1.0.0-11_0d84b406e0aebbb2b4e2eb81420f5df2997e3af3" +WEBOS_VERSION = "1.0.0-12_12cf0941d4fe3c40ef78fa9569ac4e7624e5b5a3" PR = "r7" inherit webos_cmake diff --git a/meta-webos/recipes-webos/umediaserver/umediaserver.bb b/meta-webos/recipes-webos/umediaserver/umediaserver.bb index 75daa501b..c4543c7d6 100644 --- a/meta-webos/recipes-webos/umediaserver/umediaserver.bb +++ b/meta-webos/recipes-webos/umediaserver/umediaserver.bb @@ -4,16 +4,17 @@ SUMMARY = "webOS uMediaserver daemon and utilities" AUTHOR = "Ian Cain " SECTION = "webos/base" LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" -LIC_FILES_CHKSUM_raspberrypi4 += "file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519" +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +" DEPENDS = "glib-2.0 libpbnjson libconfig swig-native libxml2 luna-service2 pmloglib boost luna-prefs" DEPENDS += "gstreamer1.0 gstreamer1.0-plugins-base" DEPENDS += "${@'' if '${WEBOS_DISTRO_PRERELEASE}' == '' else 'pmtrace'}" RDEPENDS_${PN} = "umediaserver-configs" -WEBOS_VERSION = "1.0.0-24_0407a711cbe8e747dfda50633d8b1c70b0ffc9ef" -PR = "r16" +PR = "r17" inherit webos_component inherit webos_enhanced_submissions @@ -40,8 +41,11 @@ COMPATIBLE_MACHINE_armv7ve = "(.*)" COMPATIBLE_MACHINE_x86 = "(.*)" COMPATIBLE_MACHINE_x86-64 = "(.*)" -WEBOS_GIT_PARAM_BRANCH_raspberrypi4 = "@gav" -WEBOS_VERSION_raspberrypi4 = "1.0.0-24.gav.18_dbda25cc40cc4916ec36fca4fda09a36e9a43f3e" +WEBOS_GIT_PARAM_BRANCH = "@gav" +WEBOS_VERSION = "1.0.0-24.gav.19_44e71aa82937cfbde73222669aa96ff0c060ea42" + +WEBOS_GIT_PARAM_BRANCH_raspberrypi3 = "master" +WEBOS_VERSION_raspberrypi3 = "1.0.0-26_3f1cb5df3ed06d730b90ab9c404fb3cd0a3e219b" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" From bf8668c4c4d39b77725b1c5bd66ceb31bd3139c2 Mon Sep 17 00:00:00 2001 From: Wanchang Ryu Date: Mon, 19 Jul 2021 10:33:59 +0900 Subject: [PATCH 0062/2022] webruntime=r49 (Add exportbuildscript.inc to export a build script) :Release Notes: Add exportbuildscript.inc to export a build script on SDK environment. :Detailed Notes: Building webruntime out of oe-build is required to speed up of building webruntime especially when upgrading previous models because it takes too much time to build whole dependencies of the webruntime. This patch was made by proposing build webruntime on SDK environment so that we don't need to prepare all the dependencies of the webruntime because SDK has already all packages installed. Only required things are preparing default GN_ARGS variable from the current webOS build and customizing the variables for the target SDK. 'exportbuildscript' task is added after do_configure before do_compile to generate a build script and the build script contains GN_ARGS which is used from the webOS build executing and it allows to override several GN_ARGS for the the target SDK. The script is doing mainly - The build script automatically sets TARGET_CPU based on the OECORE_TARGET_ARCH variable of the SDK environment. TARGET_CPU variable is used for gn args such as target_cpu and v8_snapshot_toolchain. - It detects arm architecture from TUNE_FEATURES variable of the SDK environment and sets arm architecture specific gn args. - Allows to override or substitute a specific argument It overrides tool chain and sysroot related variables by default to build in SDK. - Allows to remove a specific argument :Testing Performed: Build succeed and build.sh is generated on the ${B} directory :QA Notes: N/A :Issues Addressed: [WRN-1740] Implement chromium standalone build using OE configuration [WRN-5579] CCC: webruntime=r49 Change-Id: I36c78abada7b9d3f58d65d512857e9f8a1418c11 --- .../chromium/exportbuildscript.inc | 147 ++++++++++++++++++ .../recipes-webos/chromium/webruntime.inc | 3 +- 2 files changed, 149 insertions(+), 1 deletion(-) create mode 100644 meta-webos/recipes-webos/chromium/exportbuildscript.inc diff --git a/meta-webos/recipes-webos/chromium/exportbuildscript.inc b/meta-webos/recipes-webos/chromium/exportbuildscript.inc new file mode 100644 index 000000000..42f5f5309 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/exportbuildscript.inc @@ -0,0 +1,147 @@ +do_exportbuildscript () { + filename="${B}/build.sh" + cat <<'EOF' > $filename +#!/bin/bash +# This script was generated from webOS build. +# DISTRO = "${DISTRO}" +# MACHINE = "${MACHINE}" +# WEBOS_DISTRO_TOPDIR_DESCRIBE = "${WEBOS_DISTRO_TOPDIR_DESCRIBE}" +# WEBOS_DISTRO_TOPDIR_REVISION = "${WEBOS_DISTRO_TOPDIR_REVISION}" +# +# PN = ${PN} +# DEPENDS = "${DEPENDS}" +# RDEPENDS = "${RDEPENDS}" + +GN_ARGS="${GN_ARGS}" + +declare -A target_arch_to_cpu=(\ + ["aarch64"]="arm64" \ + ["arm"]="arm" \ + ["i586"]="x86" \ + ["i686"]="x86" \ + ["x86_64"]="x64" ) +TARGET_CPU="${target_arch_to_cpu["$OECORE_TARGET_ARCH"]}" + +# Use the variables on the environment script from the SDK +GN_ARGS_OVERRIDES="\ + cros_host_is_clang=false \ + cros_host_ar=\"ar\" \ + cros_host_cc=\"gcc\" \ + cros_host_cxx=\"g++\" \ + cros_host_ld=\"g++\" \ + cros_host_nm=\"nm\" \ + cros_host_extra_ldflags=\"$BUILD_LDFLAGS\" \ + cros_host_extra_cflags=\"$BUILD_CFLAGS\" \ + cros_host_extra_cppflags=\"$BUILD_CPPFLAGS\" \ + cros_host_extra_cxxflags=\"$BUILD_CXXFLAGS\" \ + cros_host_extra_lsflags=\"$BUILD_LDFLAGS\" \ + cros_host_sysroot=\"$OECORE_NATIVE_SYSROOT\" \ + cros_target_ar=\"$AR\" \ + cros_target_cc=\"$CC\" \ + cros_target_cxx=\"$CXX\" \ + target_sysroot=\"$SDKTARGETSYSROOT\" \ + v8_snapshot_toolchain=\"//build/toolchain/cros:v8_snapshot_clang_$TARGET_CPU\" \ + host_pkg_config=\"pkg-config\" \ + target_cpu=\"$TARGET_CPU\" \ +" + +# Customising target cpu related variables based on TUNE_FEATURES of the SDK +declare -A target_tune_features +for tune_feature in $TUNE_FEATURES;do + target_tune_features["$tune_feature"]=1 +done + +if [[ -n "${target_tune_features["callconvention-hard"]}" ]];then + ARM_FLOAT_ABI="hard" +else + ARM_FLOAT_ABI="softfp" +fi + +if [[ -n "${target_tune_features["armv6"]}" ]]; then + GN_ARGS_OVERRIDES="$GN_ARGS_OVERRIDES arm_arch=\"armv6\" arm_version=6 arm_float_abi=\"$ARM_FLOAT_ABI\"" + + # tcmalloc's atomicops-internals-arm-v6plus.h uses the "dmb" instruction that + # is not available on (some?) ARMv6 models, which causes the build to fail. + GN_ARGS_OVERRIDES="$GN_ARGS_OVERRIDES use_allocator=\"none\"" + + # The WebRTC code fails to build on ARMv6 when NEON is enabled. + # https://bugs.chromium.org/p/webrtc/issues/detail?id=6574 + GN_ARGS_OVERRIDES="$GN_ARGS_OVERRIDES arm_use_neon=false" +fi + +if [[ -n "${target_tune_features["armv7a"]}" ]] || [[ -n "${target_tune_features["cortexa9"]}" ]]; then + GN_ARGS_OVERRIDES="$GN_ARGS_OVERRIDES arm_arch=\"armv7-a\" arm_version=7 arm_float_abi=\"$ARM_FLOAT_ABI\"" +fi + +if [[ -n "${target_tune_features["armv7ve"]}" ]]; then + GN_ARGS_OVERRIDES="$GN_ARGS_OVERRIDES arm_arch=\"armv7ve\" arm_version=7 arm_float_abi=\"$ARM_FLOAT_ABI\"" +fi + +# Need to keep the last space to process the last arg +GN_ARGS="$GN_ARGS $GN_ARGS_OVERRIDES " +start_pos=0 +inside_quote=0 +nchars=${#GN_ARGS} +has_arg=0 +declare -A arr_webruntime_gn_args +declare -a arr_webruntime_gn_args_idx # To keep the ordering of args +for (( i = 0; i < $nchars; ++i)); do + curr_char="${GN_ARGS:$i:1}" + if [ "${curr_char}" == "\"" ];then + inside_quote=$(( ($inside_quote + 1) % 2 )) + # Ending quote also requires to close one arguemnt + # since gn seems to do that. + # e.g var1="value1"var2="value2" makes below in args.gn file + # var1 = "value1" + # var2 = "value2" + elif [ "$curr_char" != " " ];then + if [ $has_arg -eq 0 ];then + has_arg=1 + start_pos=$i + fi + continue + fi + + if [ $inside_quote -eq 0 ] && [ $has_arg -eq 1 ];then + argument="${GN_ARGS:$start_pos:$(( $i - $start_pos + 1 ))}" + key="${argument%%=*}" + arr_webruntime_gn_args["$key"]="${argument}" + arr_webruntime_gn_args_idx=( "${arr_webruntime_gn_args_idx[@]/$key}" ) + arr_webruntime_gn_args_idx+=("${argument%%=*}") + has_arg=0 + fi +done + +# Example of removing an exising argument +to_remove=( \ +) + +for remove in ${to_remove[@]}; do + unset arr_webruntime_gn_args["$remove"] + arr_webruntime_gn_args_idx=( "${arr_webruntime_gn_args_idx[@]/$remove}" ) +done + +# SDK CC and CXX has -Werror=return-type flag with the command +# and the compiler complains it when compiling chromium +arr_webruntime_gn_args["cros_target_cxx"]="${arr_webruntime_gn_args["cros_target_cxx"]/-Werror=return-type}" +arr_webruntime_gn_args["cros_target_cc"]="${arr_webruntime_gn_args["cros_target_cc"]/-Werror=return-type}" + +GN_ARGS="" +for key in ${arr_webruntime_gn_args_idx[@]} ;do + GN_ARGS="$GN_ARGS ${arr_webruntime_gn_args["$key"]}" +done + +export PATH="$(realpath ../depot_tools):$PATH" +OUT_DIR="out/Release_sdk" + +if [ ! -f $OUT_DIR/build.ninja ] || [[ $(realpath $0) -nt $OUT_DIR/build.ninja ]]; then + echo GN_ARGS is $GN_ARGS + gn gen $OUT_DIR --args="$GN_ARGS" +fi + +ninja -C $OUT_DIR ${TARGET} +EOF + chmod +x $filename +} + +addtask do_exportbuildscript before do_compile after do_configure diff --git a/meta-webos/recipes-webos/chromium/webruntime.inc b/meta-webos/recipes-webos/chromium/webruntime.inc index b7c001baa..21c3c234c 100644 --- a/meta-webos/recipes-webos/chromium/webruntime.inc +++ b/meta-webos/recipes-webos/chromium/webruntime.inc @@ -5,6 +5,7 @@ AUTHOR = "Lokesh Kumar Goel " SECTION = "webos/apps" require webruntime-common.inc +require exportbuildscript.inc inherit gettext inherit webruntime_apps @@ -22,7 +23,7 @@ DEPENDS = "virtual/gettext wayland wayland-native luna-service2 pixman freetype DEPENDS_remove_raspberrypi4 = " xproto" DEPENDS_append_raspberrypi4 = " xorgproto" -INC_PR = "r48" +INC_PR = "r49" # Enable this in webos-local.conf or in recipe to build DEPLOY_CHROMEDRIVER ?= "false" DEPLOY_WAM_DEMO ?= "false" From bd8e64f2849f49d82530dd3516e4553aa98d2ac3 Mon Sep 17 00:00:00 2001 From: Ashish23 Patel Date: Fri, 20 Aug 2021 15:48:58 +0530 Subject: [PATCH 0063/2022] com.webos.service.bluetooth2=67 bluetooth-sil-bluez5=70 bluetooth-sil-api=26 :Release Notes: Support for keyRefresh, removeNode and listProvisionedNodes mesh APIs :Detailed Notes: com.webos.service.bluetooth2: submissions/65..submissions/67 641cdd2 Fixed coverity issue ae3786f Handle hardReset device while provision 03af8bb Support for keyRefresh API f3714c7 Implementation of mesh/removeNode and mesh/listProvisionedNodes 62f31e9 Handle subscription for mesh/model/config APIs c4a647b permission check for appKeyIndex bluetooth-sil-bluez5: submissions/67..submissions/70 605fbfc Fix:Key refresh does not fail for node that is not available 9cb865f Coverity issue fix c65e609 Support for keyRefresh API 2ca8afd Handle subscription for mesh/model/config APIs d856775 Implementation of mesh/removeNode bluetooth-sil-api: submissions/25..submissions/26 6c8d2da Added support for keyRefresh API 47f5e00 Handle subscription for mesh/model/config APIs 8ebd6b1 Implementation of mesh/removeNode :Testing Performed: Test results are updated in WRN-5527 :QA Notes: NA :Issues Addressed: [WRN-5527] CCC: com.webos.service.bluetooth2=67 bluetooth-sil-bluez5=70 bluetooth-sil-api=26 [WRN-874] Handle hardReset device while provisioning [WRN-605] Implementation of mesh/keyRefresh in bluetooth-sil-api [WRN-594] Implementation of mesh/removeNode in bluetooth-sil-bluez [WRN-606] Implementation of mesh/removeNode in bluetooth-sil-api [WRN-590] Implementation of mesh/keyRefresh in bluetooth service [WRN-589] Implementation of mesh/removeNode in bluetooth service [WRN-591] Implementation of mesh/listProvisionedNodes in bluetooth service [WRN-595] Implementation of mesh/keyRefresh in bluetooth-sil-bluez5 [WRN-875] Verification of keyRefresh API [WRN-5533] Fix coverity issue in com.webos.service.bluetooth2 [WRN-5534] Fix Coverity issues in bluetooth-sil-bluez5 Change-Id: I539558a068201b5962e1d19cb1ce978a20b3e4c3 --- meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb | 2 +- meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb | 2 +- .../recipes-webos/bluetooth/com.webos.service.bluetooth2.bb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb index 74d40f679..0e6cd76b0 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0" -WEBOS_VERSION = "1.0.0-25_63e9e3f8ee9b39f0aa82e454de320d890b51f11d" +WEBOS_VERSION = "1.0.0-26_d1236c28f289d0e40f4d26c5d73ad198158e62bb" PR = "r3" inherit webos_component diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb index bfe9a4c7d..26833c0be 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb @@ -17,7 +17,7 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES ??= "" # Add runtime dependency on bluez5 OBEX service when we have to support FTP RDEPENDS_${PN} += "${@ bb.utils.contains('WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES', 'FTP', 'bluez5-obex', '', d)}" -WEBOS_VERSION = "0.1.0-67_16701f6dea7d7aaacbab6d869ad03a989b7377b9" +WEBOS_VERSION = "0.1.0-70_2559d811ba7dd8a794e4ec1fe31dc0f6354574b7" PR = "r3" inherit webos_component diff --git a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb index 4749ded68..2ae3eb5e3 100644 --- a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb +++ b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb @@ -48,7 +48,7 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES = "GATT FTP OPP A2DP SPP HFP AVRCP PAN A # emulator), which means that the pairing should happen without user intervention. WEBOS_BLUETOOTH_PAIRING_IO_CAPABILITY ??= "NoInputNoOutput" -WEBOS_VERSION = "1.0.0-65_889be8c3435df848bb7c89c6aff9b9c287038144" +WEBOS_VERSION = "1.0.0-67_1a615c56db4b7537ac42aa8786c48c8e5a24c85c" PR = "r5" inherit webos_component From 34e375b2f32e9e5d75bcad167ad68ab594c95eba Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 30 Jul 2021 03:42:16 -0700 Subject: [PATCH 0064/2022] meta-qt5-compat: remove this now unused layer :Release Notes: It's not used since the switch from meta-qt5 to meta-qt6 :Detailed Notes: :Testing Performed: Build tested. :QA Notes: NA :Issues Addressed: [PLAT-145566] Internal builds/webosose/master/357 and the same tag on github have different content Change-Id: I7c57697831f3cf75db790f5afb6a962056de41f2 --- meta-qt5-compat/conf/layer.conf | 21 ------- .../0026-Use-python3-explicitly.patch | 60 ------------------- .../recipes-qt/qt5/qtdeclarative_git.bbappend | 9 --- 3 files changed, 90 deletions(-) delete mode 100644 meta-qt5-compat/conf/layer.conf delete mode 100644 meta-qt5-compat/recipes-qt/qt5/qtdeclarative/0026-Use-python3-explicitly.patch delete mode 100644 meta-qt5-compat/recipes-qt/qt5/qtdeclarative_git.bbappend diff --git a/meta-qt5-compat/conf/layer.conf b/meta-qt5-compat/conf/layer.conf deleted file mode 100644 index 81ca1c621..000000000 --- a/meta-qt5-compat/conf/layer.conf +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2020 LG Electronics, Inc. - -# We have conf and classes directories => add to BBPATH -BBPATH .= ":${LAYERDIR}" - -# We have recipes-* directories => add to BBFILES -BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ - ${LAYERDIR}/recipes-*/*/*.bbappend" - -BBFILE_COLLECTIONS += "meta-qt5-compat" -BBFILE_PATTERN_meta-qt5-compat := "^${LAYERDIR}/" -BBFILE_PRIORITY_meta-qt5-compat = "19" - -LAYERSERIES_COMPAT_meta-qt5-compat = "dunfell" - -LAYERDEPENDS_meta-qt5-compat = " \ - qt5-layer \ -" - -# We made the neccessary changes to make meta-qt5 compatible with meta-webos -LAYERSERIES_COMPAT_qt5-layer = "dunfell" diff --git a/meta-qt5-compat/recipes-qt/qt5/qtdeclarative/0026-Use-python3-explicitly.patch b/meta-qt5-compat/recipes-qt/qt5/qtdeclarative/0026-Use-python3-explicitly.patch deleted file mode 100644 index e1067016d..000000000 --- a/meta-qt5-compat/recipes-qt/qt5/qtdeclarative/0026-Use-python3-explicitly.patch +++ /dev/null @@ -1,60 +0,0 @@ -From dc94032e6132b41bd6927357e4a57c31436294eb Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Tue, 26 Nov 2019 21:10:03 -0800 -Subject: [PATCH] Use python3 explicitly - -Signed-off-by: Khem Raj ---- - qtdeclarative.pro | 2 +- - src/3rdparty/masm/masm.pri | 4 ++-- - tests/auto/qml/ecmascripttests/test262.py | 2 +- - 3 files changed, 4 insertions(+), 4 deletions(-) - -diff --git a/qtdeclarative.pro b/qtdeclarative.pro -index 5b94da9b6..0e3496ce8 100644 ---- a/qtdeclarative.pro -+++ b/qtdeclarative.pro -@@ -2,7 +2,7 @@ CONFIG += tests_need_tools examples_need_tools - load(qt_parts) - - !python_available { -- py_out = $$system('python -c "print(1)"') -+ py_out = $$system('python3 -c "print(1)"') - !equals(py_out, 1): error("Building QtQml requires Python.") - tmp = python_available - CONFIG += $$tmp -diff --git a/src/3rdparty/masm/masm.pri b/src/3rdparty/masm/masm.pri -index 0e63ac2ce..7a30ab64e 100644 ---- a/src/3rdparty/masm/masm.pri -+++ b/src/3rdparty/masm/masm.pri -@@ -58,7 +58,7 @@ contains(DEFINES, WTF_USE_UDIS86=1) { - udis86.output = udis86_itab.h - udis86.input = ITAB - udis86.CONFIG += no_link -- udis86.commands = python $$PWD/disassembler/udis86/itab.py ${QMAKE_FILE_IN} -+ udis86.commands = python3 $$PWD/disassembler/udis86/itab.py ${QMAKE_FILE_IN} - QMAKE_EXTRA_COMPILERS += udis86 - - udis86_tab_cfile.target = $$OUT_PWD/udis86_itab.c -@@ -113,7 +113,7 @@ retgen.output = $$GENERATEDDIR/RegExpJitTables.h - retgen.script = $$PWD/yarr/create_regex_tables - retgen.input = retgen.script - retgen.CONFIG += no_link --retgen.commands = python $$retgen.script > ${QMAKE_FILE_OUT} -+retgen.commands = python3 $$retgen.script > ${QMAKE_FILE_OUT} - QMAKE_EXTRA_COMPILERS += retgen - - # Taken from WebKit/Tools/qmake/mkspecs/features/unix/default_post.prf -diff --git a/tests/auto/qml/ecmascripttests/test262.py b/tests/auto/qml/ecmascripttests/test262.py -index 19551e3ba..bf3f79a45 100755 ---- a/tests/auto/qml/ecmascripttests/test262.py -+++ b/tests/auto/qml/ecmascripttests/test262.py -@@ -1,4 +1,4 @@ --#!/usr/bin/env python -+#!/usr/bin/env python3 - ############################################################################# - ## - ## Copyright (C) 2017 The Qt Company Ltd. --- -2.24.0 - diff --git a/meta-qt5-compat/recipes-qt/qt5/qtdeclarative_git.bbappend b/meta-qt5-compat/recipes-qt/qt5/qtdeclarative_git.bbappend deleted file mode 100644 index 58913a3d1..000000000 --- a/meta-qt5-compat/recipes-qt/qt5/qtdeclarative_git.bbappend +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2020 LG Electronics, Inc. - -EXTENDPRAUTO_append = "qt5-compat1" - -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" - -SRC_URI_append = " \ - file://0026-Use-python3-explicitly.patch \ -" From f44d7bb732ecf812ef6cc9ea2eca918e10c232f9 Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Wed, 25 Aug 2021 13:01:44 +0900 Subject: [PATCH 0065/2022] luna-surfacemanager=357 :Release Notes: Fix a crash that may happen when the compositor geometry changes. :Detailed Notes: luna-surfacemanager: submissions/356..submissions/357 e53c8d5a Remove item from m_surfacesOnUpdate when destroyed :Testing Performed: See the CCC JIRA ticket. :QA Notes: :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-5546] CCC: Update meta-qt6 to v6.2.0-beta3 and luna-surfacemanager=357 Change-Id: Id6c93dd37ddcdc726251bb0a1a6a21d65b6d72fe --- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index a6e13712f..4c4f35107 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0" -WEBOS_VERSION = "2.0.0-356_9b8008491fb211de06d1a319df04f6fce2fe146f" +WEBOS_VERSION = "2.0.0-357_31c4928f4d699ee21208b4c3bbddafa6a57026a5" PR = "r51" inherit webos_qmake6 From ae023f7293a34a43979cec89a76750e471f78fe1 Mon Sep 17 00:00:00 2001 From: Cathy Park Date: Fri, 20 Aug 2021 13:26:57 +0900 Subject: [PATCH 0066/2022] qtbase=webos91 qtdeclarative=webos70 :Release Notes: Fix a regression in Qt 6.2.0 beta2. :Detailed Notes: qtbase=webos91 Update Upstream-Status of the patches. qtdeclarative=webos70 Add a fix for QTBUG-95895. 0002-qqmllistmodel-Fix-QObjects-setting-indestructible.patch. :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-5546] CCC: Update meta-qt6 to v6.2.0-beta3 and luna-surfacemanager=357 Change-Id: I1c609265b10eb493a8070989b140f6710ef2c10e --- ...-to-update-coordinates-when-dragging.patch | 2 +- meta-webos/recipes-qt/qt6/qtbase_git.bbappend | 4 +- ...-Fix-QObjects-setting-indestructible.patch | 105 ++++++++++++++++++ .../recipes-qt/qt6/qtdeclarative_git.bbappend | 5 +- 4 files changed, 111 insertions(+), 5 deletions(-) create mode 100644 meta-webos/recipes-qt/qt6/qtdeclarative/0002-qqmllistmodel-Fix-QObjects-setting-indestructible.patch diff --git a/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-button-type-to-update-coordinates-when-dragging.patch b/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-button-type-to-update-coordinates-when-dragging.patch index 3c6315712..dc0af7a0c 100644 --- a/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-button-type-to-update-coordinates-when-dragging.patch +++ b/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-button-type-to-update-coordinates-when-dragging.patch @@ -10,7 +10,7 @@ mouse move does not cause positionChanged in MouseArea. Task-number: QTBUG-95453 Pick-to: 6.1 6.2 Change-Id: I298943dc4f6f30714e940f4029c62dd52c176b93 -Upstream-Status: Submitted [https://codereview.qt-project.org/c/qt/qtbase/+/362797] +Upstream-Status: Backport [https://codereview.qt-project.org/c/qt/qtbase/+/362797] --- src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend index 5db8e7f98..f9c731556 100644 --- a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend @@ -2,7 +2,7 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos90" +EXTENDPRAUTO_append = "webos91" # Remove LGPL3-only files python do_patch_append() { @@ -80,7 +80,7 @@ PACKAGECONFIG_remove = "tests" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" -# Upstream-Status: Submitted +# Upstream-Status: Backport SRC_URI_append = " \ file://0001-Fix-button-type-to-update-coordinates-when-dragging.patch \ " diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0002-qqmllistmodel-Fix-QObjects-setting-indestructible.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0002-qqmllistmodel-Fix-QObjects-setting-indestructible.patch new file mode 100644 index 000000000..a9662b259 --- /dev/null +++ b/meta-webos/recipes-qt/qt6/qtdeclarative/0002-qqmllistmodel-Fix-QObjects-setting-indestructible.patch @@ -0,0 +1,105 @@ +From 68856b463467e679c0c52760ce0342848bf5306e Mon Sep 17 00:00:00 2001 +From: Cathy Park +Date: Thu, 19 Aug 2021 15:40:27 +0900 +Subject: [PATCH] qqmllistmodel: Fix QObjects setting indestructible + +It makes a QObject indestructable only if its ownership is determined. +This fixes an issue where a QObject created by createObject() in QML +becomes indestructable once it is appended to a ListModel. + +Fixes: QTBUG-95895 +Pick-to: 6.2 +Change-Id: I30647298977d7901dab938626e8f94b9910c21e3 +Upstream-Status: Submitted [https://codereview.qt-project.org/c/qt/qtdeclarative/+/365868] +--- + src/qmlmodels/qqmllistmodel.cpp | 2 +- + .../qml/qqmllistmodel/data/destroyObject.qml | 18 ++++++++++++++++++ + .../auto/qml/qqmllistmodel/data/dummyItem.qml | 5 +++++ + .../qml/qqmllistmodel/tst_qqmllistmodel.cpp | 17 +++++++++++++++++ + 4 files changed, 41 insertions(+), 1 deletion(-) + create mode 100644 tests/auto/qml/qqmllistmodel/data/destroyObject.qml + create mode 100644 tests/auto/qml/qqmllistmodel/data/dummyItem.qml + +diff --git a/src/qmlmodels/qqmllistmodel.cpp b/src/qmlmodels/qqmllistmodel.cpp +index a9c58d59a5..b71931cc85 100644 +--- a/src/qmlmodels/qqmllistmodel.cpp ++++ b/src/qmlmodels/qqmllistmodel.cpp +@@ -1112,7 +1112,7 @@ static void setQObjectOwnership(char *mem, QObject *o) + if (!ddata) + ddata = QQmlData::get(o, true); + +- ddata->indestructible = true; ++ ddata->indestructible = ownership != 0; + ddata->explicitIndestructibleSet = false; + + new (mem) ListElement::GuardedQObjectPointer( +diff --git a/tests/auto/qml/qqmllistmodel/data/destroyObject.qml b/tests/auto/qml/qqmllistmodel/data/destroyObject.qml +new file mode 100644 +index 0000000000..22d600d2bb +--- /dev/null ++++ b/tests/auto/qml/qqmllistmodel/data/destroyObject.qml +@@ -0,0 +1,18 @@ ++import QtQuick ++ ++Item { ++ id: root ++ property ListModel projects: ListModel {} ++ property var object ++ ++ Component.onCompleted: { ++ var comp= Qt.createComponent("dummyItem.qml"); ++ object = comp.createObject(root, {}); ++ projects.append({"name": object}); ++ } ++ ++ function destroy() { ++ object.destroy(); ++ return true; ++ } ++} +diff --git a/tests/auto/qml/qqmllistmodel/data/dummyItem.qml b/tests/auto/qml/qqmllistmodel/data/dummyItem.qml +new file mode 100644 +index 0000000000..c9939efcdf +--- /dev/null ++++ b/tests/auto/qml/qqmllistmodel/data/dummyItem.qml +@@ -0,0 +1,5 @@ ++import QtQml ++ ++QtObject { ++ property var random: null ++} +diff --git a/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp b/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp +index a9b6ec03a4..6195382998 100644 +--- a/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp ++++ b/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp +@@ -136,6 +136,7 @@ private slots: + void destroyObject(); + void emptyStringNotUndefined(); + void listElementWithTemplateString(); ++ void destroyComponentObject(); + }; + + bool tst_qqmllistmodel::compareVariantList(const QVariantList &testList, QVariant object) +@@ -1856,6 +1857,22 @@ void tst_qqmllistmodel::listElementWithTemplateString() + QVERIFY(!root.isNull()); + } + ++//QTBUG-95895 ++void tst_qqmllistmodel::destroyComponentObject() ++{ ++ QQmlEngine eng; ++ QQmlComponent component(&eng, testFileUrl("destroyObject.qml")); ++ QVERIFY(!component.isError()); ++ QScopedPointer item(qobject_cast(component.create())); ++ QVERIFY(item != 0); ++ QVariant retVal; ++ QMetaObject::invokeMethod(item.data(), ++ "destroy", ++ Qt::DirectConnection, ++ Q_RETURN_ARG(QVariant, retVal)); ++ QVERIFY(retVal.toBool()); ++} ++ + QTEST_MAIN(tst_qqmllistmodel) + + #include "tst_qqmllistmodel.moc" diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend index 31ed799f7..676309530 100644 --- a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend @@ -2,13 +2,14 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos69" +EXTENDPRAUTO_append = "webos70" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" -# Upstream-Status: Backport, Submitted +# Upstream-Status: Submitted SRC_URI_append_class-target = " \ file://0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch \ + file://0002-qqmllistmodel-Fix-QObjects-setting-indestructible.patch \ " # Upstream-Status: Inappropriate From d6511d277af6160b17f2546e74dd59af117c5b59 Mon Sep 17 00:00:00 2001 From: Muniraju A Date: Wed, 25 Aug 2021 17:30:55 +0530 Subject: [PATCH 0067/2022] ose: com.webos.app.camera=6 :Release Notes: Navigate to recorded media Fix UI Alignment issue :Detailed Notes: com.webos.app.camera: submissions/5..submissions/6 57b15d4 Show recorded media and UI issue fix :Testing Performed: Refer [WRN-5712] for test results :QA Notes: NA :Issues Addressed: [WRN-5712] CCC: ose: com.webos.app.camera=6 [WRN-5106] UI alignment issue fix [WRN-5123] Navigate to video player and image viewer App Change-Id: I203f91bded0513c5db9b85b12b477267aa433b9e --- .../recipes-webos/com.webos.app.camera/com.webos.app.camera.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb index 5515e38c0..d154fc485 100644 --- a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb +++ b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb @@ -9,7 +9,7 @@ file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ file://oss-pkg-info.yaml;md5=3072ffcf5bdbbc376ed21c9d378d14d5 \ " -WEBOS_VERSION = "0.0.1-5_a2532a5949b3db69efabe543176a6e85b38595e1" +WEBOS_VERSION = "0.0.1-6_fd3e2419d1276fb3215a996b74c289599012ad4b" PR = "r0" inherit webos_component From c186f51bd6d32bbe3d85dc9112fbc4f7390d766e Mon Sep 17 00:00:00 2001 From: "sushovan.g" Date: Fri, 20 Aug 2021 18:07:13 +0530 Subject: [PATCH 0068/2022] ose: audiod=33-r30 pulseaudio=29 :Release Notes: Enable Audio routing through second display in OSE :Detailed Notes: audiod: submissions/32..submissions/33 4043429 Fix the automatic routing of streams to bluetooth 226849c Add changes to route to first display for emulator 24a5f5c support setSoundOut for second HDMI 5d3c991 support routing to second HDMI pulseaudio:submissions/28..submissions/29 43a76e011 Fix the volume difference for master volume e2e4ce055 Add support for second HDMI playback :Testing Performed: Test results are updated in WRN-5689 :QA Notes: NA :Issues Addressed: [WRN-5689] CCC: ose audiod=33-r30 pulseaudio=29 [WRN-2093] Implementation of fix for volume level is lower than expected [WRN-4144] implement rerouting streams when device disconnected [WRN-4161] implement setSoundOut for combined and uncombined soundoutput [WRN-4169] Implement changes for qemu-x86 for hdmi config files [WRN-4946] Implement fix for automatic routing of stream to BT Change-Id: Ief807bf2b54038f98ff26994a390a2ccf9cb692d --- meta-webos/recipes-multimedia/audiod/audiod.bb | 6 +++--- meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/meta-webos/recipes-multimedia/audiod/audiod.bb b/meta-webos/recipes-multimedia/audiod/audiod.bb index f815e0839..8de7efaeb 100644 --- a/meta-webos/recipes-multimedia/audiod/audiod.bb +++ b/meta-webos/recipes-multimedia/audiod/audiod.bb @@ -5,7 +5,7 @@ AUTHOR = "Manohar Babu " SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ +file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " @@ -23,8 +23,8 @@ RDEPENDS_${PN} = "\ pulseaudio-server \ " -WEBOS_VERSION = "1.0.0-32_cac25f1270cb645211974403a21982cc59400cd8" -PR = "r29" +WEBOS_VERSION = "1.0.0-33_74ed31aea11d95bacaf22682b8c0651d0ed02357" +PR = "r30" inherit webos_component inherit webos_enhanced_submissions diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb index 45123bc2c..daaa3de7d 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb +++ b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb @@ -36,7 +36,7 @@ DEPENDS_remove = "libatomic-ops" DEPENDS += "pmloglib" -WEBOS_VERSION = "9.0-28_7e93c607d7e19ee422e3ce18652bb713abf9d5ba" +WEBOS_VERSION = "9.0-29_2cec94910d7c88c13a004843c57d0032bebeccb3" PR = "r27" inherit webos_enhanced_submissions From 2c2d79cbed64499b6ce4106ad31b73a30c6810f5 Mon Sep 17 00:00:00 2001 From: "bojung.ko" Date: Wed, 25 Aug 2021 13:15:38 +0900 Subject: [PATCH 0069/2022] ose: com.webos.service.uwb=9 :Release Notes: Fix static anaysis issues :Detailed Notes: com.webos.service.uwb: submissions/8..submissions/9 c662810 Fix static anaysis issues (8993691 and 13 others) :Testing Performed: Check CCC tickets :QA Notes: N/A :Issues Addressed: [WRN-5686] CCC: ose: com.webos.service.uwb=9 [WRN-5687] Fix static analysis issues of uwb [CID-8993691] Coverity Issue(Static Analysis) [CID-8993690] Coverity Issue(Static Analysis) [CID-8993689] Coverity Issue(Static Analysis) [CID-8993688] Coverity Issue(Static Analysis) [CID-8993687] Coverity Issue(Static Analysis) [CID-8993686] Coverity Issue(Static Analysis) [CID-8993685] Coverity Issue(Static Analysis) [CID-8993684] Coverity Issue(Static Analysis) [CID-8993683] Coverity Issue(Static Analysis) [CID-8993682] Coverity Issue(Static Analysis) [CID-8993681] Coverity Issue(Static Analysis) [CID-8993679] Coverity Issue(Static Analysis) [CID-8993678] Coverity Issue(Static Analysis) [CID-8993677] Coverity Issue(Static Analysis) Change-Id: I832b75d8c49293b9ca1a2bd732909089fc2e510d --- meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb b/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb index aacae28d0..7a4721ed8 100644 --- a/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb +++ b/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb @@ -8,7 +8,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" DEPENDS= "glib-2.0 luna-service2 pmloglib libpbnjson" -WEBOS_VERSION = "1.0.0-8_6b03f525d9b84e23b1f25a379e77939fae552b01" +WEBOS_VERSION = "1.0.0-9_09a65388199c8985c2e0384425768d0d2f3df195" PR = "r1" inherit webos_component From 0d88cf0663e6a2e1fb0f3dac8560bc400d949591 Mon Sep 17 00:00:00 2001 From: Muniraju A Date: Tue, 7 Sep 2021 11:08:09 +0530 Subject: [PATCH 0070/2022] com.webos.app.camera=0 :Release Notes: Remove com.webos.app.camera app. :Detailed Notes: Remove com.webos.app.camera app for OSE 2.13.1 release because video is not recored with audio. app will be included after fixing the audio issue and resolution support in the application. :Testing Performed: See the JIRA ticket WRN-6679 for results. :QA Notes: NA :Issues Addressed: [WRN-6679] CCC: ose: Remove com.webos.app.camera=0 [WRN-6682] Remove Camera App Change-Id: I6e27e8e7091c0393dd09d3a2439b36d28f42376f --- .../packagegroup-webos-extended.bb | 1 - .../com.webos.app.camera.bb | 25 ------------------- 2 files changed, 26 deletions(-) delete mode 100644 meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index 6f8186b37..a5e740ca5 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -224,7 +224,6 @@ RDEPENDS_${PN} = " \ " RDEPENDS_${PN}_append_webos = " \ - com.webos.app.camera \ com.webos.app.mediaviewer \ com.webos.app.imageviewer \ com.webos.app.videoplayer \ diff --git a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb deleted file mode 100644 index d154fc485..000000000 --- a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb +++ /dev/null @@ -1,25 +0,0 @@ -# Copyright (c) 2021 LG Electronics, Inc. - -SUMMARY = "Camera application" -AUTHOR = "Muniraju " -SECTION = "webos/apps" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = " \ -file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ -file://oss-pkg-info.yaml;md5=3072ffcf5bdbbc376ed21c9d378d14d5 \ -" - -WEBOS_VERSION = "0.0.1-6_fd3e2419d1276fb3215a996b74c289599012ad4b" -PR = "r0" - -inherit webos_component -inherit webos_enhanced_submissions -inherit webos_enactjs_app -inherit webos_public_repo - -WEBOS_ENACTJS_SHRINKWRAP_OVERRIDE = "false" - -SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" -S = "${WORKDIR}/git" - -WEBOS_ENACTJS_APP_ID = "com.webos.app.camera" From 16543404539b1c9b5bccef519d95fb05e38989fe Mon Sep 17 00:00:00 2001 From: Hyunjae Shin Date: Wed, 1 Sep 2021 11:19:32 +0900 Subject: [PATCH 0071/2022] webos.conf: Release webOS OSE v2.13.1 :Release Notes: Set software version as webOS OSE v2.13.1 :Detailed Notes: Set WEBOS_DISTRO_VERSION_MINOR to "13.1" :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: N/A Change-Id: I36ab876bc989a1978ae04c52c937e5fd8c021f3c --- meta-webos/conf/distro/webos.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/conf/distro/webos.conf b/meta-webos/conf/distro/webos.conf index 8cfffc7bd..ce4010b28 100644 --- a/meta-webos/conf/distro/webos.conf +++ b/meta-webos/conf/distro/webos.conf @@ -13,7 +13,7 @@ WEBOS_DISTRO_BUILD_CODENAME = "master" # g - github WEBOS_DISTRO_VERSION_MAJOR = "2" -WEBOS_DISTRO_VERSION_MINOR = "13" +WEBOS_DISTRO_VERSION_MINOR = "13.1" WEBOS_DISTRO_VERSION_TYPE = "g" DISTRO_VERSION = "${WEBOS_DISTRO_VERSION_MAJOR}.${WEBOS_DISTRO_VERSION_MINOR}.${WEBOS_DISTRO_VERSION_TYPE}" From 169bd4d90450fec10241027f224d8e24688ebd3a Mon Sep 17 00:00:00 2001 From: Ashish23 Patel Date: Thu, 26 Aug 2021 21:55:13 +0530 Subject: [PATCH 0072/2022] =?UTF-8?q?com.webos.service.bluetooth2=3D69?= =?UTF-8?q?=C2=A0bluetooth-sil-bluez5=3D74=20base-passwd=3Dwebos5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit :Release Notes: Fixing issues and added cgroup security for mesh keys :Detailed Notes: com.webos.service.bluetooth2: submissions/67..submissions/69 6ca6a8c Populating proper appKeyIndexes for keyRefresh 0c42da7 Fix crash issue while deleting the client watch 00c1901 Fix mesh/model/config/set and mesh/model/config /get value error 7e24bf7 Implementation cgroup security for mesh keys bluetooth-sil-bluez5: submissions/70..submissions/74 af440ad Coverity issue fix c5c0e09 Fix crash issue when multiple appkeys are involved b22e68f Fix crash issue when multiple appkeys are involved 456dda7 Fix mesh/model/config/set and mesh/model/config/get         value error base-passwd: webos4..webos5 added blemesh group :Testing Performed: Test results are updated in WRN-5809 :QA Notes: NA :Issues Addressed: [WRN-769] Fix issue: Deleting the client watch [WRN-771] Fix mesh/model/config/set and           mesh/model/config/get value error [WRN-593] Implementation cgroup security for mesh keys [WRN-5804] [webOS OSE]: Bluetooth service crash is observed for keyRefresh cmd. [WRN-5803] [webOS OSE]: gattProxyState and ttl            value is displayed for luna set cmd. [WRN-5873] Fix Coverity issues in bluetooth-sil-bluez5 [WRN-5809] CCC: com.webos.service.bluetooth2=69            bluetooth-sil-bluez5=74 base-passwd=webos5 Change-Id: I5b6e1b9c90c5eadea397cc4a8b6fd20e1bde4967 --- meta-webos/recipes-core/base-passwd/base-passwd/group.master | 1 + .../recipes-core/base-passwd/base-passwd_3.5.29.bbappend | 4 ++-- meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb | 2 +- .../recipes-webos/bluetooth/com.webos.service.bluetooth2.bb | 2 +- 4 files changed, 5 insertions(+), 4 deletions(-) diff --git a/meta-webos/recipes-core/base-passwd/base-passwd/group.master b/meta-webos/recipes-core/base-passwd/base-passwd/group.master index f3de3ae2d..59c01306f 100644 --- a/meta-webos/recipes-core/base-passwd/base-passwd/group.master +++ b/meta-webos/recipes-core/base-passwd/base-passwd/group.master @@ -31,3 +31,4 @@ pulse:x:507:pulse se:x:509:root,wam crashd:x:777:root,wam nogroup:x:65534:nobody,sshd +blemesh:x:2024: diff --git a/meta-webos/recipes-core/base-passwd/base-passwd_3.5.29.bbappend b/meta-webos/recipes-core/base-passwd/base-passwd_3.5.29.bbappend index 64bc383d3..382dde241 100644 --- a/meta-webos/recipes-core/base-passwd/base-passwd_3.5.29.bbappend +++ b/meta-webos/recipes-core/base-passwd/base-passwd_3.5.29.bbappend @@ -1,6 +1,6 @@ -# Copyright (c) 2017-2018 LG Electronics, Inc. +# Copyright (c) 2017-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos4" +EXTENDPRAUTO_append = "webos5" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb index 26833c0be..67b4a628c 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb @@ -17,7 +17,7 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES ??= "" # Add runtime dependency on bluez5 OBEX service when we have to support FTP RDEPENDS_${PN} += "${@ bb.utils.contains('WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES', 'FTP', 'bluez5-obex', '', d)}" -WEBOS_VERSION = "0.1.0-70_2559d811ba7dd8a794e4ec1fe31dc0f6354574b7" +WEBOS_VERSION = "0.1.0-74_0de90634aa9ae076db847ae0a1d6c2a822263203" PR = "r3" inherit webos_component diff --git a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb index 2ae3eb5e3..d0edf1fb0 100644 --- a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb +++ b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb @@ -48,7 +48,7 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES = "GATT FTP OPP A2DP SPP HFP AVRCP PAN A # emulator), which means that the pairing should happen without user intervention. WEBOS_BLUETOOTH_PAIRING_IO_CAPABILITY ??= "NoInputNoOutput" -WEBOS_VERSION = "1.0.0-67_1a615c56db4b7537ac42aa8786c48c8e5a24c85c" +WEBOS_VERSION = "1.0.0-69_adf507c700596201bc812ee2af1b83fac5da4334" PR = "r5" inherit webos_component From df0a64c7c8496c47b0d4e2d5588d428863e91d74 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Mon, 30 Aug 2021 15:22:39 +0900 Subject: [PATCH 0073/2022] ose: wam=52 :Release Notes: Rename LSM(Local Storage Manager) to LST(Local Storage Tracker) :Detailed Notes: wam: submissions/51..submissions/52 56312d65 [op][wv_api][localstorage] Rename LSM to LST :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [PLAT-116093] Issues specific to the RP "Local storage manager" implementation [WRN-5958] CCC: wam=52 Change-Id: I343c79266ebfff6a4aa931463572efb9600107a3 --- meta-webos/recipes-webos/wam/wam.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index ffee0893e..72111b22b 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -19,7 +19,7 @@ RDEPENDS_${PN} += "qtbase-plugins" VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" -WEBOS_VERSION = "1.0.2-51_aa61db4d5d16060fc50018b9d0c56252259837c5" +WEBOS_VERSION = "1.0.2-52_de185eef268ca76fa05f0ea26cbf1501f295318b" PR = "r39" inherit webos_enhanced_submissions From c19c17f5960eb6918fc59705894fcd1d9821d6a7 Mon Sep 17 00:00:00 2001 From: Myungchul Kim Date: Tue, 24 Aug 2021 17:32:25 +0900 Subject: [PATCH 0074/2022] webos-fluentbit-plugins=20-r3 webos-initscripts=76-r17 luna-service2=r28 qml-webos-components=55-r17 pmlogdaemon=13-r11 crashd=0 rdxd=0 :Release Notes: Fix fluentbit-plugins bugs and static analysis issues Remove crashd and rdxd :Detailed Notes: webos-fluentbit-plugins: submissions/18..submissions/20 2201c86 Fix python error when a ticket already exists ad2f2e7 in_coredump: Add conf file enumerates files that do not create crash report. 9b52ec3 in_coredump: Add cpp class 2353572 out_jira: Add cpp class 2eebf1c Support for 'fixed in' field with two versions 652b7b2 Update 'Found On' field 280e8e0 Fix static analysis issues webos-initscripts: submissions/75..submissions/76 b2feaec Remove rdx service file luna-service2: r27..r28 qRemove librdx qml-webos-components: submissions/54..submissions/55 4ed059a Remove rdxlog pmlogdaemon: submissions/11..submissions/13 0092c55 Remove LIBRDX_LDFLAGS in CMakeLists.txt f69d399 Remove rdx.h and its dependencies :Testing Performed: See the JIRA CCC Ticket :QA Notes: N/A :Issues Addressed: [WRN-5682] CCC: webos-fluentbit-plugins=20-r3 webos-initscripts=76-r17 luna-service2=r28 qml-webos-components=55-r17 pmlogdaemon=13-r11 crashd=0 rdxd=0 [WRN-4843] Applying the exception module to the coredump file [WRN-3652] [webOS OSE]: No issues were found to match your search" displayed [WRN-5773] Exclude rdxd and dependencies from official builds [WRN-4805] [CID-8993853] [CID-8993846] [CID-8995397] [CID-8993851] Change-Id: Icb3dea33d89662adea6afb9819f34b6867c413da --- .../initscripts/webos-initscripts.bb | 7 +- .../packagegroup-webos-extended.bb | 2 - meta-webos/recipes-webos/crashd/crashd.bb | 98 ------------------- .../luna-service2/luna-service2.bb | 5 +- .../recipes-webos/pmlogdaemon/pmlogdaemon.bb | 6 +- .../qml-webos-components.bb | 6 +- meta-webos/recipes-webos/rdxd/rdxd.bb | 40 -------- .../webos-fluentbit-plugins.bb | 8 +- 8 files changed, 15 insertions(+), 157 deletions(-) delete mode 100644 meta-webos/recipes-webos/crashd/crashd.bb delete mode 100644 meta-webos/recipes-webos/rdxd/rdxd.bb diff --git a/meta-webos/recipes-core/initscripts/webos-initscripts.bb b/meta-webos/recipes-core/initscripts/webos-initscripts.bb index 678b70159..b579f6a56 100644 --- a/meta-webos/recipes-core/initscripts/webos-initscripts.bb +++ b/meta-webos/recipes-core/initscripts/webos-initscripts.bb @@ -12,15 +12,14 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ # The dependency needs to be deleted after deleting fake initctl. DEPENDS = "systemd" -VIRTUAL-RUNTIME_rdx-utils ?= "rdxd" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_init_manager} ${VIRTUAL-RUNTIME_rdx-utils} ${VIRTUAL-RUNTIME_bash} python3" +RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_init_manager} ${VIRTUAL-RUNTIME_bash} python3" PROVIDES = "initscripts" RPROVIDES_${PN} = "initscripts initd-functions" -WEBOS_VERSION = "3.0.0-75_db4bff344f2b125f7fb81df65e122e3af8e06354" -PR = "r16" +WEBOS_VERSION = "3.0.0-76_8f6cf5df37009b90ac2eadbd9224f5b1de36b6d1" +PR = "r17" inherit webos_component inherit webos_enhanced_submissions diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index a5e740ca5..a279fb3d4 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -17,7 +17,6 @@ VIRTUAL-RUNTIME_event-monitor-network ?= "event-monitor-network" VIRTUAL-RUNTIME_memorymanager ?= "com.webos.service.memorymanager" VIRTUAL-RUNTIME_webappmanager ?= "" VIRTUAL-RUNTIME_initscripts ?= "initscripts" -VIRTUAL-RUNTIME_librdx ?= "rdxd" VIRTUAL-RUNTIME_surface-manager ?= "luna-surfacemanager-base" VIRTUAL-RUNTIME_surface-manager-conf ?= "luna-surfacemanager-conf" VIRTUAL-RUNTIME_surface-manager-extension ?= "" @@ -205,7 +204,6 @@ RDEPENDS_${PN} = " \ ${VIRTUAL-RUNTIME_event-monitor-network} \ ${VIRTUAL-RUNTIME_initscripts} \ ${VIRTUAL-RUNTIME_iotivity-node} \ - ${VIRTUAL-RUNTIME_librdx} \ ${VIRTUAL-RUNTIME_memorymanager} \ ${VIRTUAL-RUNTIME_nyx_modules_providers} \ ${VIRTUAL-RUNTIME_org.ocf.webossample} \ diff --git a/meta-webos/recipes-webos/crashd/crashd.bb b/meta-webos/recipes-webos/crashd/crashd.bb deleted file mode 100644 index 619118e4c..000000000 --- a/meta-webos/recipes-webos/crashd/crashd.bb +++ /dev/null @@ -1,98 +0,0 @@ -# Copyright (c) 2013-2020 LG Electronics, Inc. - -SUMMARY = "Crash reporting daemon" -AUTHOR = "Ed Chejlava " -SECTION = "base" -LICENSE = "LGPL-2.1+ & Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://src/libSegFault/libSegFault.c.in;endline=20;md5=4c8f61c043fd7c3b78b738ca09bcfc35 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ -" - -PNLIBSEGFAULT = "libsegfault-webos" -SUMMARY_${PNLIBSEGFAULT} = "webOS edition of libSegFault.so that is universally preloaded" - -DEPENDS = "librdx pmloglib glib-2.0 libunwind" -PROVIDES = "libsegfault" -RDEPENDS_${PN} = "${PNLIBSEGFAULT} gzip" -RPROVIDES_${PNLIBSEGFAULT} = "libsegfault" -RREPLACES_${PNLIBSEGFAULT} = "libsegfault" -RCONFLICTS_${PNLIBSEGFAULT} = "libsegfault" - -WEBOS_VERSION = "1.2.5-4_bfc3dd73a27b474eaf6051bb358a40bd1593ddc2" -PR = "r13" - -inherit webos_component -inherit webos_enhanced_submissions -inherit webos_cmake -inherit webos_daemon -inherit webos_filesystem_paths -inherit webos_public_repo -inherit webos_prerelease_dep - -SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" -S = "${WORKDIR}/git" - -EXTRA_OECMAKE += "-DWEBOS_INSTALL_CRASHDDIR:STRING=${webos_crashddir}" - -# Generate core dumps on non-production builds. -EXTRA_OECMAKE += "-DENABLE_CORE_DUMP:STRING=${@bb.utils.contains('WEBOS_DISTRO_PRERELEASE', 'devel', '1', '0', d)}" - -# webos_build_library() from cmake-modules-webos 1.0.0 RC4 doesn't support -# installation into ${base_libdir}. It also doesn't support building unversioned -# libraries, which libSegFault.so should be. Fix up the filename name so that it -# doesn't look like it's versioned, even though its SONAME is (benignly). -do_install_append() { - # If a versioned library has been built, libSegFault.so will always be a symlink - if [ -L ${D}${libdir}/libSegFault.so ]; then - rm -vf ${D}${libdir}/libSegFault.so - mv -v ${D}${libdir}/libSegFault.so.*.*.* ${D}${libdir}/libSegFault.so - rm -vf ${D}${libdir}/libSegFault.so.* - fi - # don't report fail (when using 'usrmerge' DISTRO_FEATURE, lib dir is already on root_prefix) - mv -v ${D}${libdir} ${D}${root_prefix} 2> /dev/null || true -} - -# Process PNLIBSEGFAULT first -PACKAGES =+ "${PNLIBSEGFAULT}" -# Without this, the package is named libsegfault1. Note that libSegFault.so is -# always unversioned. -DEBIANNAME_${PNLIBSEGFAULT} = "${PNLIBSEGFAULT}" - -# In order to keep in sync with glibc's libSegFault.so, an unversioned -# libSegFault.so (without a SONAME) symlink needs to go into FILES_${PNLIBSEGFAULT} -FILES_${PNLIBSEGFAULT} = "${base_libdir}/*.so*" -FILES_SOLIBSDEV = "" - -# Disable QA insanity checks that don't apply to this component -# -# dev-so: Suppress error when *.so is not a link to versioned equivalent -INSANE_SKIP_${PNLIBSEGFAULT} = "dev-so" - -pkg_postinst_${PNLIBSEGFAULT}() { - if [ -e $D${sysconfdir}/ld.so.preload -a -s $D${sysconfdir}/ld.so.preload ]; then - # remove old libSegFault entries - sed -i '/libSegFault/d' $D${sysconfdir}/ld.so.preload - if [ -s $D${sysconfdir}/ld.so.preload ]; then - # append new libSegFault.so entry - sed -i "$ a\ -${libdir}/libSegFault.so" $D${sysconfdir}/ld.so.preload - else - echo "${base_libdir}/libSegFault.so" > $D${sysconfdir}/ld.so.preload - fi - else - # When building bdk, ${sysconfdir} might not exist in the sysroot - mkdir -p $D${sysconfdir} - echo "${base_libdir}/libSegFault.so" > $D${sysconfdir}/ld.so.preload - fi -} - -pkg_prerm_${PNLIBSEGFAULT}() { - # remove libSegFault entry from /etc/ld.so.preload - sed -i '/libSegFault/d' $D${sysconfdir}/ld.so.preload - if [ ! -s $D${sysconfdir}/ld.so.preload ]; then - rm -f $D${sysconfdir}/ld.so.preload - fi -} - -SRC_URI += "file://0001-Fix-build-with-glibc-2.32.patch" diff --git a/meta-webos/recipes-webos/luna-service2/luna-service2.bb b/meta-webos/recipes-webos/luna-service2/luna-service2.bb index c941ab53d..a6dc0a155 100644 --- a/meta-webos/recipes-webos/luna-service2/luna-service2.bb +++ b/meta-webos/recipes-webos/luna-service2/luna-service2.bb @@ -11,12 +11,11 @@ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ DEPENDS = "libpbnjson pmloglib glib-2.0 gtest systemd" VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" -VIRTUAL-RUNTIME_rdx-utils ?= "rdxd" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN} = "luna-service2-security-conf ${VIRTUAL-RUNTIME_cpushareholder} ${VIRTUAL-RUNTIME_rdx-utils} ${VIRTUAL-RUNTIME_bash}" +RDEPENDS_${PN} = "luna-service2-security-conf ${VIRTUAL-RUNTIME_cpushareholder} ${VIRTUAL-RUNTIME_bash}" WEBOS_VERSION = "3.21.2-22_1733cfabcffc582d65844b3161a53f98bc86a241" -PR = "r27" +PR = "r28" EXTRA_OECMAKE += "${@ '-DWEBOS_DISTRO_PRERELEASE:STRING="devel"' \ if d.getVar('WEBOS_DISTRO_PRERELEASE',True) != '' else ''}" diff --git a/meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb b/meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb index a189d4fe6..f43b96d01 100644 --- a/meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb +++ b/meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb @@ -8,13 +8,13 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7ca file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " -DEPENDS = "pmloglib zlib glib-2.0 librdx libpbnjson pmloglib-private luna-service2" +DEPENDS = "pmloglib zlib glib-2.0 libpbnjson pmloglib-private luna-service2" # show_disk_usage.sh script uses mktemp, find, xargs, and du, all of which are # provided by busybox. RDEPENDS_${PN} = "busybox" -WEBOS_VERSION = "3.1.0-11_ead7c2ce86165d6bc349e445bb7c01bb5a003d8d" -PR = "r10" +WEBOS_VERSION = "3.1.0-13_17f40f7074f3f0a54395e6b1bc6b29af02d46fb8" +PR = "r11" inherit webos_component inherit webos_public_repo diff --git a/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb b/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb index 08b2b35db..a16524cf4 100644 --- a/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb +++ b/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb @@ -9,10 +9,10 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=9dc14fd8aee1928cb4947063ac388f74 \ " -DEPENDS = "qtdeclarative pmloglib librdx qt-features-webos" +DEPENDS = "qtdeclarative pmloglib qt-features-webos luna-service2 glib-2.0" -WEBOS_VERSION = "1.0.0-54_b995381efeafef72262bfd5d934ab2718c58fc5d" -PR = "r16" +WEBOS_VERSION = "1.0.0-55_2013bd787616f74e3d879fe115022a915cc324bd" +PR = "r17" inherit webos_qmake6 inherit webos_machine_impl_dep diff --git a/meta-webos/recipes-webos/rdxd/rdxd.bb b/meta-webos/recipes-webos/rdxd/rdxd.bb deleted file mode 100644 index b76a00a81..000000000 --- a/meta-webos/recipes-webos/rdxd/rdxd.bb +++ /dev/null @@ -1,40 +0,0 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. - -SUMMARY = "Remote diagnostics daemon and utilities" -AUTHOR = "Gayathri Srinivasan " -SECTION = "base" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ -" - -DEPENDS = "glib-2.0 libpbnjson luna-prefs luna-service2 pmloglib" -#Add tar dependency since --absolute-names support is missing in busybox tar -RDEPENDS_${PN} = "nyx-utils tar" - -WEBOS_VERSION = "4.0.2-15_615c867fa85e3719d8c7305fffcf476b1e372c14" -PR = "r10" - -PROVIDES = "librdx rdx-utils" - -inherit webos_component -inherit webos_enhanced_submissions -inherit webos_cmake -inherit webos_daemon -inherit webos_system_bus -inherit webos_library -inherit webos_distro_dep -inherit webos_public_repo - -SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" -S = "${WORKDIR}/git" - -EXTRA_OECMAKE += "-DWEBOS_USE_LEGACY_PACKAGE_MANAGER:BOOL=FALSE" - -VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" - -VIRTUAL-RUNTIME_tar ?= "tar" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_tar}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_TAR', 'busybox', 'tar', '', d)}" diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb index 50d11c721..5230f0044 100644 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb @@ -8,11 +8,11 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " -DEPENDS = "glib-2.0 luna-service2 json-c libpbnjson fluentbit" -RDEPENDS_${PN} = "python3-core python3-requests python3-atlassian-python-api" +DEPENDS = "glib-2.0 luna-service2 libpbnjson fluentbit" +RDEPENDS_${PN} = "nyx-utils python3-core python3-requests python3-atlassian-python-api" -WEBOS_VERSION = "1.0.0-18_6987f5ac7fcd64b5df3c3352fb238d0c0f3fd9d7" -PR = "r2" +WEBOS_VERSION = "1.0.0-20_c85f2e8912ee45fdad054925257990002528ae39" +PR = "r3" inherit webos_component inherit webos_enhanced_submissions From 15d35b16ff35f0f3ae0cba314b02e34c630ec0ad Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Wed, 1 Sep 2021 16:16:19 +0900 Subject: [PATCH 0075/2022] qtdeclarative=webos71 :Release Notes: Fix C++ owned object QQmlListModel getting destroyed. :Detailed Notes: qtdeclarative=webos71 Add 0002-QQmlListModel-Fix-C-owned-object-getting-destroyed.patch to address QTBUG-96167. Update 0001-qqmllistmodel-Fix-QObjects-setting-indestructible.patch with the version merged in upstream. :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-5782] CCC: luna-surfacemanager=358 qtbase-plugins-webos=9 qtwayland-webos=68 and more Change-Id: Ie5ee4b230abfcc1da2ee4884576a0891606dc2cd --- ...Fix-QObjects-setting-indestructible.patch} | 56 ++++--- ...Fix-C-owned-object-getting-destroyed.patch | 137 ++++++++++++++++++ ...-in-knownPointingDevices-is-destroy.patch} | 2 +- .../recipes-qt/qt6/qtdeclarative_git.bbappend | 9 +- 4 files changed, 180 insertions(+), 24 deletions(-) rename meta-webos/recipes-qt/qt6/qtdeclarative/{0002-qqmllistmodel-Fix-QObjects-setting-indestructible.patch => 0001-qqmllistmodel-Fix-QObjects-setting-indestructible.patch} (63%) create mode 100644 meta-webos/recipes-qt/qt6/qtdeclarative/0002-QQmlListModel-Fix-C-owned-object-getting-destroyed.patch rename meta-webos/recipes-qt/qt6/qtdeclarative/{0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch => 0003-Check-if-a-device-in-knownPointingDevices-is-destroy.patch} (97%) diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0002-qqmllistmodel-Fix-QObjects-setting-indestructible.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0001-qqmllistmodel-Fix-QObjects-setting-indestructible.patch similarity index 63% rename from meta-webos/recipes-qt/qt6/qtdeclarative/0002-qqmllistmodel-Fix-QObjects-setting-indestructible.patch rename to meta-webos/recipes-qt/qt6/qtdeclarative/0001-qqmllistmodel-Fix-QObjects-setting-indestructible.patch index a9662b259..f5752a178 100644 --- a/meta-webos/recipes-qt/qt6/qtdeclarative/0002-qqmllistmodel-Fix-QObjects-setting-indestructible.patch +++ b/meta-webos/recipes-qt/qt6/qtdeclarative/0001-qqmllistmodel-Fix-QObjects-setting-indestructible.patch @@ -1,4 +1,4 @@ -From 68856b463467e679c0c52760ce0342848bf5306e Mon Sep 17 00:00:00 2001 +From 54df41a8be6ca64149d343856a6732d40a3b3bc9 Mon Sep 17 00:00:00 2001 From: Cathy Park Date: Thu, 19 Aug 2021 15:40:27 +0900 Subject: [PATCH] qqmllistmodel: Fix QObjects setting indestructible @@ -8,15 +8,19 @@ This fixes an issue where a QObject created by createObject() in QML becomes indestructable once it is appended to a ListModel. Fixes: QTBUG-95895 -Pick-to: 6.2 Change-Id: I30647298977d7901dab938626e8f94b9910c21e3 -Upstream-Status: Submitted [https://codereview.qt-project.org/c/qt/qtdeclarative/+/365868] +Reviewed-by: Ulf Hermann +Reviewed-by: Jaeyoon Jung +Reviewed-by: Andrei Golubev +(cherry picked from commit 69e07c55ad9b49b7643ffddfedc9a558983272ad) +Reviewed-by: Qt Cherry-pick Bot +Upstream-Status: Backport [https://codereview.qt-project.org/c/qt/qtdeclarative/+/367051] --- - src/qmlmodels/qqmllistmodel.cpp | 2 +- - .../qml/qqmllistmodel/data/destroyObject.qml | 18 ++++++++++++++++++ - .../auto/qml/qqmllistmodel/data/dummyItem.qml | 5 +++++ - .../qml/qqmllistmodel/tst_qqmllistmodel.cpp | 17 +++++++++++++++++ - 4 files changed, 41 insertions(+), 1 deletion(-) + src/qmlmodels/qqmllistmodel.cpp | 2 +- + .../qml/qqmllistmodel/data/destroyObject.qml | 23 ++++++++++++++++ + .../auto/qml/qqmllistmodel/data/dummyItem.qml | 5 ++++ + .../qml/qqmllistmodel/tst_qqmllistmodel.cpp | 26 +++++++++++++++++++ + 4 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 tests/auto/qml/qqmllistmodel/data/destroyObject.qml create mode 100644 tests/auto/qml/qqmllistmodel/data/dummyItem.qml @@ -35,13 +39,13 @@ index a9c58d59a5..b71931cc85 100644 new (mem) ListElement::GuardedQObjectPointer( diff --git a/tests/auto/qml/qqmllistmodel/data/destroyObject.qml b/tests/auto/qml/qqmllistmodel/data/destroyObject.qml new file mode 100644 -index 0000000000..22d600d2bb +index 0000000000..e6b3f33bb9 --- /dev/null +++ b/tests/auto/qml/qqmllistmodel/data/destroyObject.qml -@@ -0,0 +1,18 @@ -+import QtQuick +@@ -0,0 +1,23 @@ ++import QtQml + -+Item { ++QtObject { + id: root + property ListModel projects: ListModel {} + property var object @@ -49,11 +53,16 @@ index 0000000000..22d600d2bb + Component.onCompleted: { + var comp= Qt.createComponent("dummyItem.qml"); + object = comp.createObject(root, {}); -+ projects.append({"name": object}); ++ projects.append({"obj": object}); + } + + function destroy() { -+ object.destroy(); ++ try { ++ object.destroy(); ++ } catch(e) { ++ console.warn(e); ++ return false; ++ } + return true; + } +} @@ -69,7 +78,7 @@ index 0000000000..c9939efcdf + property var random: null +} diff --git a/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp b/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp -index a9b6ec03a4..6195382998 100644 +index a9b6ec03a4..7f94180274 100644 --- a/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp +++ b/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp @@ -136,6 +136,7 @@ private slots: @@ -80,7 +89,7 @@ index a9b6ec03a4..6195382998 100644 }; bool tst_qqmllistmodel::compareVariantList(const QVariantList &testList, QVariant object) -@@ -1856,6 +1857,22 @@ void tst_qqmllistmodel::listElementWithTemplateString() +@@ -1856,6 +1857,31 @@ void tst_qqmllistmodel::listElementWithTemplateString() QVERIFY(!root.isNull()); } @@ -90,14 +99,23 @@ index a9b6ec03a4..6195382998 100644 + QQmlEngine eng; + QQmlComponent component(&eng, testFileUrl("destroyObject.qml")); + QVERIFY(!component.isError()); -+ QScopedPointer item(qobject_cast(component.create())); -+ QVERIFY(item != 0); ++ QScopedPointer obj(component.create()); ++ QVERIFY(!obj.isNull()); ++ QQmlListModel *list = qvariant_cast(obj->property("projects")); ++ QVERIFY(list != nullptr); ++ QCOMPARE(list->count(), 1); ++ QPointer created(qvariant_cast(obj->property("object"))); ++ QVERIFY(!created.isNull()); ++ QCOMPARE(list->get(0).property("obj").toQObject(), created.data()); + QVariant retVal; -+ QMetaObject::invokeMethod(item.data(), ++ QMetaObject::invokeMethod(obj.data(), + "destroy", + Qt::DirectConnection, + Q_RETURN_ARG(QVariant, retVal)); + QVERIFY(retVal.toBool()); ++ QTRY_VERIFY(created.isNull()); ++ QTRY_VERIFY(list->get(0).property("obj").isUndefined()); ++ QCOMPARE(list->count(), 1); +} + QTEST_MAIN(tst_qqmllistmodel) diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0002-QQmlListModel-Fix-C-owned-object-getting-destroyed.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0002-QQmlListModel-Fix-C-owned-object-getting-destroyed.patch new file mode 100644 index 000000000..5f5b236cc --- /dev/null +++ b/meta-webos/recipes-qt/qt6/qtdeclarative/0002-QQmlListModel-Fix-C-owned-object-getting-destroyed.patch @@ -0,0 +1,137 @@ +From fa6ff7dc41e6bb79dda79e5f8ebb9b8c5e80994b Mon Sep 17 00:00:00 2001 +From: Jaeyoon Jung +Date: Wed, 1 Sep 2021 18:47:08 +0900 +Subject: [PATCH] QQmlListModel: Fix C++ owned object getting destroyed + +If an object is explicitly set as C++ owned, it should not be turned to +destructible in any case. explicitIndestructibleSet flag is used for +that and thus it should not be unset in any case. +This fixes an issue where a C++ owned object could be destroyed by GC +when it is added to a ListModel. An object is supposed to be set as +destructible implicitly when it is used as a return value from JS unless +explicitIndestructibleSet is set. + +Fixes: QTBUG-96167 +Pick-to: 6.2 +Change-Id: Iad06847e56e29dd1b20146be108d7f747d8474dc +Upstream-Status: Submitted [https://codereview.qt-project.org/c/qt/qtdeclarative/+/368105] +--- + src/qmlmodels/qqmllistmodel.cpp | 8 ++--- + .../qqmllistmodel/data/objectOwnership.qml | 27 ++++++++++++++ + .../qml/qqmllistmodel/tst_qqmllistmodel.cpp | 35 +++++++++++++++++++ + 3 files changed, 65 insertions(+), 5 deletions(-) + create mode 100644 tests/auto/qml/qqmllistmodel/data/objectOwnership.qml + +diff --git a/src/qmlmodels/qqmllistmodel.cpp b/src/qmlmodels/qqmllistmodel.cpp +index b71931cc85..4ae6b011fa 100644 +--- a/src/qmlmodels/qqmllistmodel.cpp ++++ b/src/qmlmodels/qqmllistmodel.cpp +@@ -1095,10 +1095,8 @@ restoreQObjectOwnership(ListElement::GuardedQObjectPointer *pointer) + + // Only restore the previous state if the object hasn't become explicitly + // owned +- if (!data->explicitIndestructibleSet) { ++ if (!data->explicitIndestructibleSet) + data->indestructible = (pointer->tag() & ListElement::Indestructible); +- data->explicitIndestructibleSet = (pointer->tag() & ListElement::ExplicitlySet); +- } + } + } + +@@ -1112,8 +1110,8 @@ static void setQObjectOwnership(char *mem, QObject *o) + if (!ddata) + ddata = QQmlData::get(o, true); + +- ddata->indestructible = ownership != 0; +- ddata->explicitIndestructibleSet = false; ++ if (!ddata->explicitIndestructibleSet) ++ ddata->indestructible = ownership != 0; + + new (mem) ListElement::GuardedQObjectPointer( + o, static_cast(ownership)); +diff --git a/tests/auto/qml/qqmllistmodel/data/objectOwnership.qml b/tests/auto/qml/qqmllistmodel/data/objectOwnership.qml +new file mode 100644 +index 0000000000..0ebb29d75b +--- /dev/null ++++ b/tests/auto/qml/qqmllistmodel/data/objectOwnership.qml +@@ -0,0 +1,27 @@ ++import QtQuick ++ ++ListView { ++ id: root ++ width: 100 ++ height: 100 ++ ++ delegate: Component { ++ Item { ++ property Item myItem: refItem ++ } ++ } ++ ++ model: ListModel { ++ id: listModel ++ objectName: "listModel" ++ ++ function addItem() { ++ append({"refItem": cppOwnedItem}); ++ } ++ } ++ ++ function checkItem() { ++ root.currentIndex = 0; ++ currentItem.myItem.dummy(); ++ } ++} +diff --git a/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp b/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp +index 7f94180274..fae2b8da63 100644 +--- a/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp ++++ b/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp +@@ -137,6 +137,7 @@ private slots: + void emptyStringNotUndefined(); + void listElementWithTemplateString(); + void destroyComponentObject(); ++ void objectOwnershipFlip(); + }; + + bool tst_qqmllistmodel::compareVariantList(const QVariantList &testList, QVariant object) +@@ -1882,6 +1883,40 @@ void tst_qqmllistmodel::destroyComponentObject() + QCOMPARE(list->count(), 1); + } + ++// Used for objectOwnershipFlip ++class TestItem : public QQuickItem ++{ ++ Q_OBJECT ++public: ++ // To trigger QQmlData::setImplicitDestructible through QV4::CallArgument::toValue ++ Q_INVOKABLE TestItem* dummy() { return this; } ++}; ++ ++void tst_qqmllistmodel::objectOwnershipFlip() ++{ ++ QQmlEngine engine; ++ QQmlComponent component(&engine, testFileUrl("objectOwnership.qml")); ++ QVERIFY(!component.isError()); ++ QScopedPointer root(component.create()); ++ QVERIFY(!root.isNull()); ++ QQmlListModel *model = root->findChild("listModel"); ++ QVERIFY(model != nullptr); ++ ++ QScopedPointer item(new TestItem()); ++ item->setObjectName("cppOwnedItem"); ++ QJSEngine::setObjectOwnership(item.data(), QJSEngine::CppOwnership); ++ QCOMPARE(QJSEngine::objectOwnership(item.data()), QJSEngine::CppOwnership); ++ ++ engine.rootContext()->setContextProperty("cppOwnedItem", item.data()); ++ ++ QMetaObject::invokeMethod(model, "addItem"); ++ QCOMPARE(model->count(), 1); ++ ++ QMetaObject::invokeMethod(root.data(), "checkItem"); ++ ++ QCOMPARE(QJSEngine::objectOwnership(item.data()), QJSEngine::CppOwnership); ++} ++ + QTEST_MAIN(tst_qqmllistmodel) + + #include "tst_qqmllistmodel.moc" diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0003-Check-if-a-device-in-knownPointingDevices-is-destroy.patch similarity index 97% rename from meta-webos/recipes-qt/qt6/qtdeclarative/0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch rename to meta-webos/recipes-qt/qt6/qtdeclarative/0003-Check-if-a-device-in-knownPointingDevices-is-destroy.patch index dcb5669b1..4536f91d8 100644 --- a/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch +++ b/meta-webos/recipes-qt/qt6/qtdeclarative/0003-Check-if-a-device-in-knownPointingDevices-is-destroy.patch @@ -1,4 +1,4 @@ -From bcf1ef522634fc0ceba5c81d052b05188087f278 Mon Sep 17 00:00:00 2001 +From c81ac4495cdaf0fb7d6f9c02fd2e0ba234eef26c Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Tue, 15 Jun 2021 13:49:55 +0900 Subject: [PATCH] Check if a device in knownPointingDevices is destroyed before diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend index 676309530..1471fbbc9 100644 --- a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend @@ -2,14 +2,15 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos70" +EXTENDPRAUTO_append = "webos71" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" -# Upstream-Status: Submitted +# Upstream-Status: Backport, Submitted SRC_URI_append_class-target = " \ - file://0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch \ - file://0002-qqmllistmodel-Fix-QObjects-setting-indestructible.patch \ + file://0001-qqmllistmodel-Fix-QObjects-setting-indestructible.patch \ + file://0002-QQmlListModel-Fix-C-owned-object-getting-destroyed.patch \ + file://0003-Check-if-a-device-in-knownPointingDevices-is-destroy.patch \ " # Upstream-Status: Inappropriate From 4965a32ca21679bad1d8390a3e54534eb107c01c Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Mon, 30 Aug 2021 16:31:20 +0900 Subject: [PATCH 0076/2022] luna-surfacemanager=358 qtbase-plugins-webos=9 qtwayland-webos=68 :Release Notes: Fix the issue where an unexpected cursor shape may appear momentarily. Add test applications for animations. :Detailed Notes: luna-surfacemanager: submissions/357..submissions/358 f293c7c3 Update cursor shape only when the cursor buffer is committed c584df8e base: Add QML application for testing animations qtbase-plugins-webos: submissions/8..submissions/9 ad618e4 Fix static analysis that is uninitialized pointer field qtwayland-webos: submissions/67..submissions/68 3dca6a2 Apply transparent image for webOS specific cursor :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-5782] CCC: luna-surfacemanager=358 qtbase-plugins-webos=9 qtwayland-webos=68 and more Change-Id: I8d55468b500f7614b0398d4fc346db0f3b8f287d --- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 2 +- .../recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb | 2 +- meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index 4c4f35107..f5f5bed7a 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0" -WEBOS_VERSION = "2.0.0-357_31c4928f4d699ee21208b4c3bbddafa6a57026a5" +WEBOS_VERSION = "2.0.0-358_738d51789387303f9b92c4cd3ae9f28cb53468aa" PR = "r51" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb index 99f7a006e..dd2c9f65b 100644 --- a/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb +++ b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtbase" -WEBOS_VERSION = "1.0.0-8_f342c962b8cf93759939887fec52d41209cdb399" +WEBOS_VERSION = "1.0.0-9_6593a06a17e92fee1d10b3c36012b35d461563dd" PR = "r3" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb index ebcdca993..860255e73 100644 --- a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb +++ b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtwayland webos-wayland-extensions libxkbcommon qt-features-webos wayland-native qtwayland-native" -WEBOS_VERSION = "2.0.0-67_a34838a5beaceb98d20ce0be1ab0e3c5ebfd3254" +WEBOS_VERSION = "2.0.0-68_629f78182cb8c075dbe88377479658b3bba6cefe" PR = "r14" inherit webos_qmake6 From 8f5cf4670b8832c8abd5d55b215c741cd1d7d188 Mon Sep 17 00:00:00 2001 From: "paramesh.kuberappa" Date: Tue, 7 Sep 2021 16:24:57 +0530 Subject: [PATCH 0077/2022] com.webos.service.location=96 bluetooth-sil-bluez5=75 :Release Notes: Fix Coverity Issues in Location Service and bluetooth-sil-bluez5 module :Detailed Notes: com.webos.service.location: submissions/95..submissions/96 e853bcc Fix coverity issue for Location Service bluetooth-sil-bluez5: submissions/74..submissions/75 e30be7f Address Coverity issue :Testing Performed: Test results are updated in WRN-6704 :QA Notes: NA :Issues Addressed: [WRN-6704] CCC: com.webos.service.location=96 bluetooth-sil-bluez5=75 [WRN-5532] Fix coverity issue in location service component [WRN-6075] Fix Coverity issues in bluetooth-sil-bluez5 [CID-8981209] Unintentional integer overflow [CID-8995978] Uninitialized pointer field [CID-8996056] Uninitialized pointer field Change-Id: I8204f01a126301ad1d1126c41c835a56ca4d4e2f --- .../com.webos.service.location/com.webos.service.location.bb | 2 +- meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-location/com.webos.service.location/com.webos.service.location.bb b/meta-webos/recipes-location/com.webos.service.location/com.webos.service.location.bb index 37b1242bb..e9709fd09 100644 --- a/meta-webos/recipes-location/com.webos.service.location/com.webos.service.location.bb +++ b/meta-webos/recipes-location/com.webos.service.location/com.webos.service.location.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 libpbnjson libxml2 pmloglib luna-service2 luna-prefs loc-utils boost" -WEBOS_VERSION = "1.0.0-95_63c28765cf2e098a3f25ac91d27144d56b21a0a4" +WEBOS_VERSION = "1.0.0-96_b80970c7b2810a8bd344fb953bac2a1a6fbeb264" PR = "r2" inherit webos_component diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb index 67b4a628c..7d27f18cc 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb @@ -17,7 +17,7 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES ??= "" # Add runtime dependency on bluez5 OBEX service when we have to support FTP RDEPENDS_${PN} += "${@ bb.utils.contains('WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES', 'FTP', 'bluez5-obex', '', d)}" -WEBOS_VERSION = "0.1.0-74_0de90634aa9ae076db847ae0a1d6c2a822263203" +WEBOS_VERSION = "0.1.0-75_a9d9cb0483288289f2911c809b112f13ddf01b02" PR = "r3" inherit webos_component From ddbf77b1bf0021ecb7d27039538b91ea12527cda Mon Sep 17 00:00:00 2001 From: "venugopal.k" Date: Tue, 7 Sep 2021 14:17:29 +0530 Subject: [PATCH 0078/2022] applicationinstallerutility=4 :Release Notes: Fix arm architecture ipk installation issue :Detailed Notes: applicationinstallerutility updating the add-arch option in the install command for emulator. applicationinstallerutility: submissions/3..submissions/4 35ef239 Fix arm architecture ipk installation issue :Testing Performed: Test results are updated in WRN-6698 :QA Notes: N/A :Issues Addressed: [WRN-6698]CCC: applicationinstallerutility=4 [WRN-5799][webOS OSE] : Unable to install com.sample.waylandegl_0.0.1_arm.ipk Change-Id: Ia705c475cd4854b2375728ddad2d4d2d6c00e10d --- .../applicationinstallerutility/applicationinstallerutility.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/applicationinstallerutility/applicationinstallerutility.bb b/meta-webos/recipes-webos/applicationinstallerutility/applicationinstallerutility.bb index efb19d39a..6c15b9d53 100644 --- a/meta-webos/recipes-webos/applicationinstallerutility/applicationinstallerutility.bb +++ b/meta-webos/recipes-webos/applicationinstallerutility/applicationinstallerutility.bb @@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "pmloglib openssl glib-2.0" -WEBOS_VERSION = "3.0.0-3_bcac39f93b3d78cfd3af875f4faabbca7e8acae3" +WEBOS_VERSION = "3.0.0-4_b92c22380a52ca20f72a04d52187ec0e52148eab" PR = "r2" inherit webos_component From 4675cb234aa67515e22910f029fd1b242acf6c46 Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Wed, 8 Sep 2021 16:56:35 +0900 Subject: [PATCH 0079/2022] ilib-webapp=14,v14.9.2 enact-framework=r11 :Release Notes: Updated iLib version as 14.9.2. Update Enact's corresponding iLib dependency for 14.9.2 :Detailed Notes: Updated iLib version as 14.9.2. (https://github.com/iLib-js/iLib/releases). It includes various bug fixes: Fixed Ethiopic dates to return the correct day of the week Calculations were off by one because the Ethiopic day starts at 6am Gregorian time, not at midnight (= 12:00am Ethiopic time), and the calculations were for midnight. Fixed to return correct default script for pa-PK,ha-CM and ha-SD Fixed various bugs parsing the platform locales in ilib.getLocale() ilib-webapp: submissions/13..submissions/14 8899750 Remove white spaces 27aeda1 Sync up iLib v14.9.2 enact-framework: r10..r11 Updated Enact's corresponding iLib depdnency :Testing Performed: See jira ticket for results. :QA Notes: N/A :Issues Addressed: [WRN-5902] Update iLib to fix bugs [WRN-6636] CCC: ilib-webapp=14,v14.9.2 enact-framework={webos:r11 pro:pro14} Change-Id: I78150f09ecfa8d45c2516facba6af10124d2a10d --- meta-webos/recipes-webos/enactjs-apps/enact-framework.bb | 4 ++-- meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb index 14e5c9de5..1b564d8d7 100644 --- a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb +++ b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb @@ -43,7 +43,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ global@4.4.0 \ hoist-non-react-statics@2.5.5 \ iconv-lite@0.6.3 \ - ilib@14.9.1 \ + ilib@14.9.2 \ invariant@2.2.4 \ is-function@1.0.2 \ is-stream@1.1.0 \ @@ -78,7 +78,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ # NOTE: We only need to bump PR if we change something OTHER than # PV, SRCREV or the dependencies statement above. -PR = "r10" +PR = "r11" # Skip unneeded tasks do_configure[noexec] = "1" diff --git a/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb b/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb index 54cc0f1cc..036b214a7 100644 --- a/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb +++ b/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=be4f2e45a1215076318af43f833aa178 \ " -WEBOS_VERSION = "14.8.0-13_b054b9600215faa41536d29da7c627dc9e507ae0" +WEBOS_VERSION = "14.9.2-14_39c296094cefe480150780fd56444887a31698ad" PR = "r8" inherit webos_arch_indep From 87326b49553ab09b61afe78d5e02c5b0a2bb6a6f Mon Sep 17 00:00:00 2001 From: "taeyoung.hong" Date: Fri, 3 Sep 2021 19:49:50 +0900 Subject: [PATCH 0080/2022] ose: webos_enactjs_app: Unify webos_enactjs_app.bbclass structure :Release Notes: Unify webos_enactjs_app.bbclass structure :Detailed Notes: * Unify webos_enactjs_app.bbclass structure * Remove enact-framework-legacy :Testing Performed: Verf built and locally tested :QA Notes: :Issues Addressed: [WRN-5619] Unify webos_enactjs_app.bbclass structure [WRN-6710] CCC: Unify webos_enactjs_app.bbclass structure Change-Id: I656fd69c9e48856f1f479870eebf1a443d82d510 --- meta-webos/classes/webos_enactjs_app.bbclass | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/meta-webos/classes/webos_enactjs_app.bbclass b/meta-webos/classes/webos_enactjs_app.bbclass index 0911c9b2d..31bac83ae 100644 --- a/meta-webos/classes/webos_enactjs_app.bbclass +++ b/meta-webos/classes/webos_enactjs_app.bbclass @@ -104,12 +104,12 @@ do_compile() { # ensure an NPM shrinkwrap file exists so app has its dependencies locked in if [ ! -f npm-shrinkwrap.json ] ; then - bberror "NPM shrinkwrap file not found. Ensure a shrinkwrap is included with the app source to lock in dependencies." - exit 1 + bbwarn "NPM shrinkwrap file not found. Ensure a shrinkwrap is included with the app source to lock in dependencies." + else + cp -f npm-shrinkwrap.json npm-shrinkwrap.json.bak fi cp -f package.json package.json.bak - cp -f npm-shrinkwrap.json npm-shrinkwrap.json.bak # apply shrinkwrap override, rerouting to shared enact framework tarballs as needed if [ "${WEBOS_ENACTJS_SHRINKWRAP_OVERRIDE}" = "true" ] ; then @@ -191,7 +191,9 @@ do_compile() { fi cp -f package.json.bak package.json - cp -f npm-shrinkwrap.json.bak npm-shrinkwrap.json + if [ -f npm-shrinkwrap.json.bak ] ; then + cp -f npm-shrinkwrap.json.bak npm-shrinkwrap.json + fi cd ${working} } From 909730c68b551013308865d4ff08b53fa6ed152a Mon Sep 17 00:00:00 2001 From: Myungchul Kim Date: Fri, 10 Sep 2021 08:37:16 +0900 Subject: [PATCH 0081/2022] glibc=webos7 base-passwd=webos6 cmake-modules-webos-native=r3 Remove webos_crashddir in webos_filesystem_paths.bbclass :Release Notes: Remove left over references for crashd :Detailed Notes: crashd.bb was removed by WRN-5682, so removing references to it. glibc: Remove the handling related to libsegfault. base-passwd: Remove crashd group cmake-modules-webos-native: Remove crashd reference :Testing Performed: See the JIRA CCC Ticket :QA Notes: N/A :Issues Addressed: [WRN-6869] CCC: glibc=webos7 base-passwd=webos6 cmake-modules-webos-native=r3 Remove webos_crashddir in webos_filesystem_paths.bbclass Change-Id: I6cba28e7240aa11d046b238c9116e2daef94ea00 --- .../classes/webos_filesystem_paths.bbclass | 5 +-- .../base-passwd/base-passwd/group.master | 1 - .../base-passwd/base-passwd_3.5.29.bbappend | 2 +- .../recipes-core/glibc/glibc_%.bbappend | 18 +-------- .../cmake-modules-webos-native.bb | 4 +- ...all_vars-add-variables-originally-im.patch | 7 +--- .../0001-Fix-build-with-glibc-2.32.patch | 37 ------------------- 7 files changed, 7 insertions(+), 67 deletions(-) delete mode 100644 meta-webos/recipes-webos/crashd/crashd/0001-Fix-build-with-glibc-2.32.patch diff --git a/meta-webos/classes/webos_filesystem_paths.bbclass b/meta-webos/classes/webos_filesystem_paths.bbclass index f371eb07e..886543b20 100644 --- a/meta-webos/classes/webos_filesystem_paths.bbclass +++ b/meta-webos/classes/webos_filesystem_paths.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2020 LG Electronics, Inc. +# Copyright (c) 2012-2021 LG Electronics, Inc. # # Variables invented by webOS for standard locations @@ -167,9 +167,6 @@ webos_emulatorshareddir = "${webos_mediadir}/shared" # The presence of this file indicates that First Use has been completed. webos_firstusesentinelfile = "${webos_sysmgr_localstatedir}/preferences/ran-firstuse" -# Note that everything under localstatedir is erased by a NYX_SYSTEM_ERASE_VAR erasure. -webos_crashddir = "${webos_logdir}/crashd" - # SDK tools webos_sdkdir = "${webos_optdir}/webos/sdk" diff --git a/meta-webos/recipes-core/base-passwd/base-passwd/group.master b/meta-webos/recipes-core/base-passwd/base-passwd/group.master index 59c01306f..d553b3d3b 100644 --- a/meta-webos/recipes-core/base-passwd/base-passwd/group.master +++ b/meta-webos/recipes-core/base-passwd/base-passwd/group.master @@ -29,6 +29,5 @@ compositor:x:505:wam pulse-access:x:506:root,wam pulse:x:507:pulse se:x:509:root,wam -crashd:x:777:root,wam nogroup:x:65534:nobody,sshd blemesh:x:2024: diff --git a/meta-webos/recipes-core/base-passwd/base-passwd_3.5.29.bbappend b/meta-webos/recipes-core/base-passwd/base-passwd_3.5.29.bbappend index 382dde241..1b1dc73db 100644 --- a/meta-webos/recipes-core/base-passwd/base-passwd_3.5.29.bbappend +++ b/meta-webos/recipes-core/base-passwd/base-passwd_3.5.29.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2017-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos5" +EXTENDPRAUTO_append = "webos6" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" diff --git a/meta-webos/recipes-core/glibc/glibc_%.bbappend b/meta-webos/recipes-core/glibc/glibc_%.bbappend index a77fa5e0f..53d2dbfa2 100644 --- a/meta-webos/recipes-core/glibc/glibc_%.bbappend +++ b/meta-webos/recipes-core/glibc/glibc_%.bbappend @@ -1,6 +1,6 @@ -# Copyright (c) 2014-2020 LG Electronics, Inc. +# Copyright (c) 2014-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos6" +EXTENDPRAUTO_append = "webos7" LICENSE += "& BSD" @@ -11,17 +11,3 @@ LICENSE_${PN}-dev = "GPLv2 & LGPLv2.1 & BSD" LICENSE_${PN} = "GPLv2 & LGPLv2.1 & BSD" LICENSE_${PN}-staticdev = "GPLv2 & LGPLv2.1 & BSD" LICENSE_${PN}-utils = "GPLv2 & LGPLv2.1 & BSD" - -do_install_append() { - # prevent staging libSegFault.so in sysroot, crashd is providing the same file - # 2 runtime providers are correctly handled by RPROVIDES/RREPLACES/RCONFLICTS combo - # but populate_sysroot shows warning about staging the same file from multiple recipes. - # It's harmless in this case, because AFAIK nothing directly links with libSegFault.so. - rm -f ${D}${base_libdir}/libSegFault.so -} - -# don't pull libsegfault into every build with glibc, because we -# use libsegfault-webos which is provided by crashd, but crashd has -# quite a few of dependencies and we don't want to build them in -# each build which contains glibc and catchsegv -RDEPENDS_catchsegv_remove = "libsegfault" diff --git a/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos-native.bb b/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos-native.bb index 63345a0e8..5515f72b4 100644 --- a/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos-native.bb +++ b/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos-native.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2019 LG Electronics, Inc. +# Copyright (c) 2012-2021 LG Electronics, Inc. DESCRIPTION = "CMake modules used by webOS" LICENSE = "Apache-2.0" @@ -6,7 +6,7 @@ SECTION = "webos/devel/tools" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" WEBOS_VERSION = "1.6.3-3_a7010cb34dd263b63369c83a530890026b8c5a25" -PR = "r2" +PR = "r3" inherit webos_component inherit webos_public_repo diff --git a/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos/0001-_webos_init_install_vars-add-variables-originally-im.patch b/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos/0001-_webos_init_install_vars-add-variables-originally-im.patch index 2fd7c0dd5..4334411ce 100644 --- a/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos/0001-_webos_init_install_vars-add-variables-originally-im.patch +++ b/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos/0001-_webos_init_install_vars-add-variables-originally-im.patch @@ -30,7 +30,7 @@ diff --git a/webOS/webOS.cmake b/webOS/webOS.cmake index a666adf..37aa2ca 100644 --- a/webOS/webOS.cmake +++ b/webOS/webOS.cmake -@@ -489,6 +489,28 @@ macro(_webos_init_install_vars) +@@ -489,6 +489,23 @@ macro(_webos_init_install_vars) # The /opt/webos/tests tree contains all installed unit and/or integration test scripts and executables _webos_set_from_env(WEBOS_INSTALL_TESTSDIR webos_testsdir ${WEBOS_INSTALL_ROOT}/opt/webos/tests) @@ -51,11 +51,6 @@ index a666adf..37aa2ca 100644 + + # Path to file which indicate failure to init settingsservice + _webos_set_from_env(WEBOS_INSTALL_SETTINGSSERVICE_ERRORSENTINELFILE webos_settingsservice_errorsentinelfile ${WEBOS_INSTALL_WEBOS_LOCALSTATEDIR}/settingsservice_critical_error) -+ -+ # Note that everything under localstatedir is erased by a NYX_SYSTEM_ERASE_VAR erasure. -+ # webos_crashddir = "${webos_logdir}/crashd" -+ # we don't need to set this one from environment, it's used only in a few recipes and passed explicitly -+ # meta-webos/recipes-webos/crashd/crashd.bb:EXTRA_OECMAKE += "-DWEBOS_INSTALL_CRASHDDIR:STRING=${webos_crashddir}" endmacro() diff --git a/meta-webos/recipes-webos/crashd/crashd/0001-Fix-build-with-glibc-2.32.patch b/meta-webos/recipes-webos/crashd/crashd/0001-Fix-build-with-glibc-2.32.patch deleted file mode 100644 index 5a02d40a6..000000000 --- a/meta-webos/recipes-webos/crashd/crashd/0001-Fix-build-with-glibc-2.32.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 7de33fe46849946cf803e19d831d4a42390506cd Mon Sep 17 00:00:00 2001 -From: Martin Jansa -Date: Mon, 17 Aug 2020 17:09:14 +0000 -Subject: [PATCH] Fix build with glibc-2.32 - -* sys_siglist was moved to compat symbol in: - https://sourceware.org/git/?p=glibc.git;a=commit;h=b1ccfc061feee9ce616444ded8e1cd5acf9fa97f - -* use implementation similar to: - https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=66de2d4026054822aab89ac443e9bc726c9aae25 - -Signed-off-by: Martin Jansa ---- - src/libSegFault/libSegFault.c.in | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/libSegFault/libSegFault.c.in b/src/libSegFault/libSegFault.c.in -index 883eca9..eb42bae 100755 ---- a/src/libSegFault/libSegFault.c.in -+++ b/src/libSegFault/libSegFault.c.in -@@ -222,14 +222,14 @@ write_padded_number(int fd, unsigned long number, unsigned int base, - static void - write_strsignal(int fd, int signal) - { -- if (signal < 0 || signal >= _NSIG || _sys_siglist[signal] == NULL) -+ if (signal < 0 || signal >= _NSIG || strsignal(signal) == NULL) - { - WRITE_LITERAL("unknown signal: "); - write_number(fd, signal, 10); - } - else - { -- WRITE_STRING(_sys_siglist[signal]); -+ WRITE_STRING(strsignal(signal)); - } - } - From 30821387faeb21006eda46790afd3b80e7c3ace0 Mon Sep 17 00:00:00 2001 From: Aleksey Dotsenko Date: Fri, 28 May 2021 13:07:05 +0300 Subject: [PATCH 0082/2022] ose: wam=53-r40 :Release Notes: - Remove Qt related code and dependency from WAM - Add gtest framwork and tests for WAM - Add boost and jsoncpp dependency which replace Qt funcionality :Detailed Notes: wam: submissions/52..submissions/53 cde4c34c fixup! [op][qtless] Move to chromium coding style. ff09b771 [op][test] Fix WAM test application build on 64bit architecture. e90382fa Merge remote-tracking branch 'origin/@51.qtless' 2b3d78ed [op][qtless] Set default value for disallowScrollingInMainFrame 988467c5 [op][qtless] Temporary code clean up 1f581d11 [op][qtless] Move to chromium coding style. 2d6b8316 [op][tests] Add unit tests into KillAppTest suite. d2d764cd [op][fix] Recover killApp argumenth validation c58475f4 [op][qtless] Change build tool to cmake. 1b0b591c [op][fix] Recover launchApp argumenth validation 20f8fde1 [op][hotfix] Fix compilation errors. baee5b0b [op][tests] Update WebPageBlinkTestSuite.SetMediaCodecCapability test. 27140030 [op][qtless] Merge wrappers and helpers to remove code duplications 60ed0358 [op][qtless] Remove QT components from WAM classes interfaces. b8848358 [op][qtless] Remove usage of QT slots and signals 6ddab315 [op][qtless][logs] Add logging to console df6ac305 [op][qtless][logs] Remove pmlog usage outside log manager 96d4ddad [op][qtless] Rework WAM folder 'util'. d505c380 [op][qtless] Rework src/webos folder 12359f4c [op][qtless] Rework core folder f4e6046e [op][hotfix] Fix compilation error in the tests 0bb8bf35 [op][qtless] Rework webruntime folder 3295440b [op][qtless] Rework platform folder 61ff8a7a [op][qtless] Include jsoncpp into build. 18953b49 [op][test][plugin] Qt plugin substitution unit test. cce115f8 [op][qtless][plugin] Qt plugin substitution implementation. 5bbd942b [op][tests] Tests for PageBlink and PalmSystemBlink d9a32a08 [op][tests] Add SetInspectorEnable component test. 956e09af [op][tests] Add ClearBrowsingData component test 7da853d5 [op][test] Add "listRunningApps" test. 5623ab30 [op][tests] Add LogControl component test c34eea75 [op][tests] Add LaunchApp with parameters test 7ddc0b05 [op][test] Add "killApp" test. 28c686c8 [op][test] Add "pauseApp" test. a7486366 [op][tests] Add GetWebProcessSize component test. 610c0902 [op][tests] Add Touch events test d9529324 [op][tests] Add closeAllApps component test de17d651 [op][tests] Add WebAppManagerConfig unittests. 3f90c74c [op][tests] Add ApplicationDescription unittests. a5bd8721 [op][test] Add "webProcessCreated" test. 1856ab16 [op][tests] Add LaunchApp component test d30a01fc [op][tests] Add DeviceInfo unittests. 757a8d8f [op][tests] Test project configuration extension. 7ad50aab [op][test] Add gtest into build. 4e4fb1de [op][tests] Add interfaces for WebView and WebViewWindow 5514699b [op][tests] Add posibility to mock WebAppFactoryManager 263b1570 [op][tests] Add additional logs for luna jsons wam: r39..r40 - Remove Qt related dependency from WAM - Add gtest framwork for WAM - Add boost and jsoncpp dependency which replace Qt funcionality :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-401] Cover main WAM functionality with tests to avoid regression [WRN-402] Migration to cmake [WRN-404] QT-less implementation [WRN-400] Move to Chromium coding style [WRN-403] Add alternate logging to stderr [WRN-3725] WebOS OSE test run [WRN-6629] CCC: wam={ose: 53-r40 auto: auto16 pro: pro18} Change-Id: I9c97c3ca85727c1ee573d2104c1dcc3268fd2559 --- meta-webos/recipes-webos/wam/wam.bb | 33 +++++++++++++---------------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index 72111b22b..58ed32782 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -6,26 +6,28 @@ SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=790420e31fa17284afec484d5b2ad2d8" -DEPENDS = "virtual/webruntime qtbase luna-service2 sqlite3 librolegen nyx-lib openssl luna-prefs libpbnjson freetype serviceinstaller glib-2.0 pmloglib lttng-ust qt-features-webos" +DEPENDS = "virtual/webruntime luna-service2 sqlite3 librolegen nyx-lib openssl luna-prefs libpbnjson freetype serviceinstaller glib-2.0 pmloglib lttng-ust gtest jsoncpp boost" PROVIDES = "webappmanager-webos" # webappmgr's upstart conf expects to be able to LD_PRELOAD ptmalloc3 RDEPENDS_${PN} = "ptmalloc3" # webappmgr's upstart conf expects to have ionice available. Under OE-core, this is supplied by util-linux. RDEPENDS_${PN} += "util-linux" -RDEPENDS_${PN} += "qtbase-plugins" # webappmgr2's upstart conf expects setcpushares-task to be available VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" -WEBOS_VERSION = "1.0.2-52_de185eef268ca76fa05f0ea26cbf1501f295318b" -PR = "r39" +WEBOS_VERSION = "1.0.2-53_6ab3b45384b4c7746ee64bdf0fe847829352e847" +PR = "r40" + +WAM_BUILD_SYSTEM = "webos_qmake6" +WAM_BUILD_SYSTEM_webos = "webos_cmake" inherit webos_enhanced_submissions inherit webos_system_bus inherit webos_machine_dep -inherit webos_qmake6 +inherit ${WAM_BUILD_SYSTEM} inherit webos_lttng inherit webos_distro_variant_dep inherit webos_distro_dep @@ -40,19 +42,14 @@ WEBOS_SYSTEM_BUS_SKIP_DO_TASKS = "1" SYSTEMD_INSTALL_PATH = "${sysconfdir}/systemd/system" -OE_QMAKE_PATH_HEADERS = "${OE_QMAKE_PATH_QT_HEADERS}" - -WEBOS_QMAKE_TARGET = "${MACHINE}" - # Set the location of chromium headers -EXTRA_QMAKEVARS_PRE += "CHROMIUM_SRC_DIR=${STAGING_INCDIR}/${PREFERRED_PROVIDER_virtual/webruntime}" +EXTRA_OECMAKE += "-DCHROMIUM_SRC_DIR=${STAGING_INCDIR}/${PREFERRED_PROVIDER_virtual/webruntime}" # Enable LTTng tracing capability when enabled in webos_lttng class -EXTRA_QMAKEVARS_PRE += "${@oe.utils.conditional('WEBOS_LTTNG_ENABLED', '1', 'CONFIG+=lttng', '', d)}" +EXTRA_OECMAKE += "${@oe.utils.conditional('WEBOS_LTTNG_ENABLED', '1', '-DWEBOS_LTTNG_ENABLED:BOOLEAN=True', '', d)}" -EXTRA_QMAKEVARS_PRE += "DEFINES+=WAM_DATA_DIR=\"\"${webos_cryptofsdir}/.webappmanager/\"\"" -EXTRA_QMAKEVARS_PRE += "PREFIX=/usr" -EXTRA_QMAKEVARS_PRE += "PLATFORM=${@'PLATFORM_' + '${DISTRO}'.upper().replace('-', '_')}" +EXTRA_OECMAKE += "-DWAM_DATA_DIR=\"\"${webos_cryptofsdir}/.webappmanager/\"\"" +EXTRA_OECMAKE += "-DPLATFORM=${@'PLATFORM_' + '${DISTRO}'.upper().replace('-', '_')}" # chromium doesn't build for armv[45]* COMPATIBLE_MACHINE = "(-)" @@ -74,14 +71,11 @@ PLATFORM_DECODER_ENABLED ?= "true" # Flag to control runtime flag for platform encoder PLATFORM_ENCODER_ENABLED ?= "true" -do_configure_prepend() { +do_configure_append() { if [ -f "${S}/files/launch/systemd/webapp-mgr.sh.in" ]; then cp ${S}/files/launch/systemd/webapp-mgr.sh.in ${B}/webapp-mgr.sh fi cp ${S}/files/launch/systemd/webapp-mgr.service ${B}/webapp-mgr.service -} - -do_configure_append() { sed -i -e "s/NETWORK_STABLE_TIMEOUT/NETWORK_QUIET_TIMEOUT/gI" -e "s/network-stable-timeout/network-quiet-timeout/gI" ${B}/webapp-mgr.sh sed -i '/export WAM_COMMON_SWITCHES=\" \\/a\ --disable-in-process-stack-traces \\' ${B}/webapp-mgr.sh sed -i '/export ENABLE_BLINK_FEATURES=/ s/$/,LocalResourceCodeCache,CustomEventExtension/' ${B}/webapp-mgr.sh @@ -144,6 +138,9 @@ do_install_append() { cp -vf ${WAM_ERROR_SCRIPTS_PATH}/* ${D}${datadir}/localization/${BPN}/ } +PACKAGES =+ "${PN}-tests" +FILES_${PN}-tests = "${webos_testsdir}/* ${libexecdir}/tests/*" + FILES_${PN} += " \ ${sysconfdir}/pmlog.d \ ${SYSTEMD_INSTALL_PATH} \ From cd9e034bf3c4a5bab278e22a216d20fbc4d2c676 Mon Sep 17 00:00:00 2001 From: "mukul.jha" Date: Tue, 14 Sep 2021 17:20:47 +0530 Subject: [PATCH 0083/2022] ose: com.webos.service.storageaccess=17 :Release Notes: Fix Subscription Crash in SAF_OSE :Detailed Notes: com.webos.service.storageaccess: submissions/16..submissions/17 fa5b794 Fix Subscription Crash in SAF_OSE :Testing Performed: Verified the SAf functionality. Test results are updated in WRN-5467 :QA Notes: NA :Issues Addressed: [WRN-5467] CCC: com.webos.service.storageaccess=17 [WRN-6651] [RDX_CRASH][webos] /usr/sbin/storageaccess in n/a (n/a + 0x0) Change-Id: If571e65cf513a2bb0d2667e52a10cab3e0ddc8d9 --- .../com.webos.service.storageaccess.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb b/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb index cfec51451..dabc52d68 100644 --- a/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb +++ b/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb @@ -12,7 +12,7 @@ DEPENDS= "glib-2.0 libxml2 luna-service2 pmloglib libgdrive libpbnjson curl gupn COMPATIBLE_MACHINE = "^raspberrypi4$|^qemux86$" COMPATIBLE_MACHINE_raspberrypi4-64 = "^$" -WEBOS_VERSION = "1.0.0-16_20342cce50681c0c5b56dd9f4bdce56d9084656d" +WEBOS_VERSION = "1.0.0-17_8d99527ad0e8d42668c570293b4204f77fe1a458" PR = "r4" inherit webos_component From c7557cef5d4806483f469d175c8250294e9d06b1 Mon Sep 17 00:00:00 2001 From: "seungjun.choi" Date: Mon, 13 Sep 2021 10:12:29 +0900 Subject: [PATCH 0084/2022] qtbase=webos92 qtdeclarative=webos72 :Release Notes: Update patches as per the meta-qt6 layerpin update. :Detailed Notes: qtbase=webos92 Add 0002-Revert-QRegularExpression-fix-matching-over-null-emp.patch for the qtbase-native compile issue. Drop 0001-Fix-button-type-to-update-coordinates-when-dragging.patch as it is included in the updated layerpin. qtdeclarative=webos72 Drop 0001-qqmllistmodel-Fix-QObjects-setting-indestructible.patch as it is included in the updated layerpin. :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-6965] CCC: Update meta-qt6 to v6.2.0-beta4 Change-Id: I041d94adb24d3746bc0787dcca35e61c31f264e2 --- ...-to-update-coordinates-when-dragging.patch | 33 ----- ...xpression-fix-matching-over-null-emp.patch | 93 +++++++++++++ meta-webos/recipes-qt/qt6/qtbase_git.bbappend | 8 +- ...ix-C-owned-object-getting-destroyed.patch} | 0 ...-Fix-QObjects-setting-indestructible.patch | 123 ------------------ ...-in-knownPointingDevices-is-destroy.patch} | 0 .../recipes-qt/qt6/qtdeclarative_git.bbappend | 7 +- 7 files changed, 98 insertions(+), 166 deletions(-) delete mode 100644 meta-webos/recipes-qt/qt6/qtbase/0001-Fix-button-type-to-update-coordinates-when-dragging.patch create mode 100644 meta-webos/recipes-qt/qt6/qtbase/0002-Revert-QRegularExpression-fix-matching-over-null-emp.patch rename meta-webos/recipes-qt/qt6/qtdeclarative/{0002-QQmlListModel-Fix-C-owned-object-getting-destroyed.patch => 0001-QQmlListModel-Fix-C-owned-object-getting-destroyed.patch} (100%) delete mode 100644 meta-webos/recipes-qt/qt6/qtdeclarative/0001-qqmllistmodel-Fix-QObjects-setting-indestructible.patch rename meta-webos/recipes-qt/qt6/qtdeclarative/{0003-Check-if-a-device-in-knownPointingDevices-is-destroy.patch => 0002-Check-if-a-device-in-knownPointingDevices-is-destroy.patch} (100%) diff --git a/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-button-type-to-update-coordinates-when-dragging.patch b/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-button-type-to-update-coordinates-when-dragging.patch deleted file mode 100644 index dc0af7a0c..000000000 --- a/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-button-type-to-update-coordinates-when-dragging.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 1e6e4e3ab3307f6d0eaebc6efbde2cfe4be38f61 Mon Sep 17 00:00:00 2001 -From: Cathy Park -Date: Mon, 2 Aug 2021 17:53:59 +0900 -Subject: [PATCH] Fix button type to update coordinates when dragging - -A move position (x,y) can be delivered to the MouseArea only if -button is Qt::NoButton during mouse move (dragging). Otherwise -mouse move does not cause positionChanged in MouseArea. - -Task-number: QTBUG-95453 -Pick-to: 6.1 6.2 -Change-Id: I298943dc4f6f30714e940f4029c62dd52c176b93 -Upstream-Status: Backport [https://codereview.qt-project.org/c/qt/qtbase/+/362797] ---- - src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp | 5 ++++- - 1 file changed, 4 insertions(+), 1 deletion(-) - -diff --git a/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp b/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp -index 5d6f20bd1a..2012022656 100644 ---- a/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp -+++ b/src/platformsupport/input/evdevmouse/qevdevmousehandler.cpp -@@ -204,7 +204,10 @@ void QEvdevMouseHandler::sendMouseEvent() - m_prevInvalid = false; - } - -- emit handleMouseEvent(x, y, m_abs, m_buttons, m_button, m_eventType); -+ if (m_eventType == QEvent::MouseMove) -+ emit handleMouseEvent(x, y, m_abs, m_buttons, Qt::NoButton, m_eventType); -+ else -+ emit handleMouseEvent(x, y, m_abs, m_buttons, m_button, m_eventType); - - m_prevx = m_x; - m_prevy = m_y; diff --git a/meta-webos/recipes-qt/qt6/qtbase/0002-Revert-QRegularExpression-fix-matching-over-null-emp.patch b/meta-webos/recipes-qt/qt6/qtbase/0002-Revert-QRegularExpression-fix-matching-over-null-emp.patch new file mode 100644 index 000000000..ada6e3993 --- /dev/null +++ b/meta-webos/recipes-qt/qt6/qtbase/0002-Revert-QRegularExpression-fix-matching-over-null-emp.patch @@ -0,0 +1,93 @@ +From e3314d6167889d11a26d536f281ec2f8f9ca5427 Mon Sep 17 00:00:00 2001 +From: Jaeyoon Jung +Date: Mon, 13 Sep 2021 13:05:35 +0900 +Subject: [PATCH] Revert "QRegularExpression: fix matching over null/empty + QString(View)" + +This reverts commit 8359615cf984ed84ab358570c6a0ab0344de7b0c as it +causes a compile error with g++ 7. See also +https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53157 + +Upstream-Status : Inappropriate [workaround] +--- + src/corelib/text/qregularexpression.cpp | 16 ++---------- + .../tst_qregularexpression.cpp | 25 ++----------------- + 2 files changed, 4 insertions(+), 37 deletions(-) + +diff --git a/src/corelib/text/qregularexpression.cpp b/src/corelib/text/qregularexpression.cpp +index e055ae064a..72079c1996 100644 +--- a/src/corelib/text/qregularexpression.cpp ++++ b/src/corelib/text/qregularexpression.cpp +@@ -1174,19 +1174,7 @@ void QRegularExpressionPrivate::doMatch(QRegularExpressionMatchPrivate *priv, + pcre2_jit_stack_assign_16(matchContext, &qtPcreCallback, nullptr); + pcre2_match_data_16 *matchData = pcre2_match_data_create_from_pattern_16(compiledPattern, nullptr); + +- // PCRE does not accept a null pointer as subject string, even if +- // its length is zero. We however allow it in input: a QStringView +- // subject may have data == nullptr. In this case, to keep PCRE +- // happy, pass a pointer to a dummy character. +- constexpr char16_t dummySubject = 0; +- const char16_t * const subjectUtf16 = [&]() +- { +- const auto subjectUtf16 = priv->subject.utf16(); +- if (subjectUtf16) +- return subjectUtf16; +- Q_ASSERT(subjectLength == 0); +- return &dummySubject; +- }(); ++ const char16_t * const subjectUtf16 = priv->subject.utf16(); + + int result; + +@@ -1622,7 +1610,7 @@ QRegularExpressionMatch QRegularExpression::match(const QString &subject, + d.data()->compilePattern(); + auto priv = new QRegularExpressionMatchPrivate(*this, + subject, +- QStringView(subject), ++ qToStringViewIgnoringNull(subject), + matchType, + matchOptions); + d->doMatch(priv, offset); +diff --git a/tests/auto/corelib/text/qregularexpression/tst_qregularexpression.cpp b/tests/auto/corelib/text/qregularexpression/tst_qregularexpression.cpp +index 48d4de0aa4..f2fe382521 100644 +--- a/tests/auto/corelib/text/qregularexpression/tst_qregularexpression.cpp ++++ b/tests/auto/corelib/text/qregularexpression/tst_qregularexpression.cpp +@@ -252,11 +252,8 @@ void consistencyCheck(const QRegularExpressionMatch &match) + QVERIFY((endPos - startPos) == length); + QVERIFY(captured == capturedView); + } else { +- // A null capture can either mean no capture at all, +- // or capture of length 0 over a null subject. +- QVERIFY(startPos == endPos); +- QVERIFY(((startPos == -1) && (endPos == -1)) // no capture +- || ((startPos == 0) && (endPos == 0))); // null subject ++ QVERIFY(startPos == -1); ++ QVERIFY(endPos == -1); + QVERIFY((endPos - startPos) == length); + QVERIFY(capturedView.isNull()); + } +@@ -863,24 +860,6 @@ void tst_QRegularExpression::normalMatch_data() + << QRegularExpression::MatchOptions(QRegularExpression::NoMatchOption) + << m; + +- m.clear(); +- m.isValid = true; m.hasMatch = true; +- m.captured << QString(); +- QTest::newRow("empty-in-null-string") << QRegularExpression("") +- << QString() +- << qsizetype(0) +- << QRegularExpression::MatchOptions(QRegularExpression::NoMatchOption) +- << m; +- +- m.clear(); +- m.isValid = true; m.hasMatch = true; +- m.captured << QString(""); +- QTest::newRow("empty-in-empty-string") << QRegularExpression("") +- << QString("") +- << qsizetype(0) +- << QRegularExpression::MatchOptions(QRegularExpression::NoMatchOption) +- << m; +- + // non existing names for capturing groups + m.clear(); + m.isValid = true; m.hasMatch = true; diff --git a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend index f9c731556..398a2f6ab 100644 --- a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend @@ -2,7 +2,7 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos91" +EXTENDPRAUTO_append = "webos92" # Remove LGPL3-only files python do_patch_append() { @@ -80,11 +80,6 @@ PACKAGECONFIG_remove = "tests" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" -# Upstream-Status: Backport -SRC_URI_append = " \ - file://0001-Fix-button-type-to-update-coordinates-when-dragging.patch \ -" - # Upstream-Status: Inappropriate SRC_URI_append = " \ file://9901-Disable-Faux-bolding-in-Qts-FreeType-FontEngine.patch \ @@ -94,6 +89,7 @@ SRC_URI_append = " \ # Drop this once our build host has a newer version of g++. SRC_URI_append_class-native = " \ file://0001-Fix-compile-error-with-g-7.5.0.patch \ + file://0002-Revert-QRegularExpression-fix-matching-over-null-emp.patch \ " # Flags needed for webOS diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0002-QQmlListModel-Fix-C-owned-object-getting-destroyed.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0001-QQmlListModel-Fix-C-owned-object-getting-destroyed.patch similarity index 100% rename from meta-webos/recipes-qt/qt6/qtdeclarative/0002-QQmlListModel-Fix-C-owned-object-getting-destroyed.patch rename to meta-webos/recipes-qt/qt6/qtdeclarative/0001-QQmlListModel-Fix-C-owned-object-getting-destroyed.patch diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0001-qqmllistmodel-Fix-QObjects-setting-indestructible.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0001-qqmllistmodel-Fix-QObjects-setting-indestructible.patch deleted file mode 100644 index f5752a178..000000000 --- a/meta-webos/recipes-qt/qt6/qtdeclarative/0001-qqmllistmodel-Fix-QObjects-setting-indestructible.patch +++ /dev/null @@ -1,123 +0,0 @@ -From 54df41a8be6ca64149d343856a6732d40a3b3bc9 Mon Sep 17 00:00:00 2001 -From: Cathy Park -Date: Thu, 19 Aug 2021 15:40:27 +0900 -Subject: [PATCH] qqmllistmodel: Fix QObjects setting indestructible - -It makes a QObject indestructable only if its ownership is determined. -This fixes an issue where a QObject created by createObject() in QML -becomes indestructable once it is appended to a ListModel. - -Fixes: QTBUG-95895 -Change-Id: I30647298977d7901dab938626e8f94b9910c21e3 -Reviewed-by: Ulf Hermann -Reviewed-by: Jaeyoon Jung -Reviewed-by: Andrei Golubev -(cherry picked from commit 69e07c55ad9b49b7643ffddfedc9a558983272ad) -Reviewed-by: Qt Cherry-pick Bot -Upstream-Status: Backport [https://codereview.qt-project.org/c/qt/qtdeclarative/+/367051] ---- - src/qmlmodels/qqmllistmodel.cpp | 2 +- - .../qml/qqmllistmodel/data/destroyObject.qml | 23 ++++++++++++++++ - .../auto/qml/qqmllistmodel/data/dummyItem.qml | 5 ++++ - .../qml/qqmllistmodel/tst_qqmllistmodel.cpp | 26 +++++++++++++++++++ - 4 files changed, 55 insertions(+), 1 deletion(-) - create mode 100644 tests/auto/qml/qqmllistmodel/data/destroyObject.qml - create mode 100644 tests/auto/qml/qqmllistmodel/data/dummyItem.qml - -diff --git a/src/qmlmodels/qqmllistmodel.cpp b/src/qmlmodels/qqmllistmodel.cpp -index a9c58d59a5..b71931cc85 100644 ---- a/src/qmlmodels/qqmllistmodel.cpp -+++ b/src/qmlmodels/qqmllistmodel.cpp -@@ -1112,7 +1112,7 @@ static void setQObjectOwnership(char *mem, QObject *o) - if (!ddata) - ddata = QQmlData::get(o, true); - -- ddata->indestructible = true; -+ ddata->indestructible = ownership != 0; - ddata->explicitIndestructibleSet = false; - - new (mem) ListElement::GuardedQObjectPointer( -diff --git a/tests/auto/qml/qqmllistmodel/data/destroyObject.qml b/tests/auto/qml/qqmllistmodel/data/destroyObject.qml -new file mode 100644 -index 0000000000..e6b3f33bb9 ---- /dev/null -+++ b/tests/auto/qml/qqmllistmodel/data/destroyObject.qml -@@ -0,0 +1,23 @@ -+import QtQml -+ -+QtObject { -+ id: root -+ property ListModel projects: ListModel {} -+ property var object -+ -+ Component.onCompleted: { -+ var comp= Qt.createComponent("dummyItem.qml"); -+ object = comp.createObject(root, {}); -+ projects.append({"obj": object}); -+ } -+ -+ function destroy() { -+ try { -+ object.destroy(); -+ } catch(e) { -+ console.warn(e); -+ return false; -+ } -+ return true; -+ } -+} -diff --git a/tests/auto/qml/qqmllistmodel/data/dummyItem.qml b/tests/auto/qml/qqmllistmodel/data/dummyItem.qml -new file mode 100644 -index 0000000000..c9939efcdf ---- /dev/null -+++ b/tests/auto/qml/qqmllistmodel/data/dummyItem.qml -@@ -0,0 +1,5 @@ -+import QtQml -+ -+QtObject { -+ property var random: null -+} -diff --git a/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp b/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp -index a9b6ec03a4..7f94180274 100644 ---- a/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp -+++ b/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp -@@ -136,6 +136,7 @@ private slots: - void destroyObject(); - void emptyStringNotUndefined(); - void listElementWithTemplateString(); -+ void destroyComponentObject(); - }; - - bool tst_qqmllistmodel::compareVariantList(const QVariantList &testList, QVariant object) -@@ -1856,6 +1857,31 @@ void tst_qqmllistmodel::listElementWithTemplateString() - QVERIFY(!root.isNull()); - } - -+//QTBUG-95895 -+void tst_qqmllistmodel::destroyComponentObject() -+{ -+ QQmlEngine eng; -+ QQmlComponent component(&eng, testFileUrl("destroyObject.qml")); -+ QVERIFY(!component.isError()); -+ QScopedPointer obj(component.create()); -+ QVERIFY(!obj.isNull()); -+ QQmlListModel *list = qvariant_cast(obj->property("projects")); -+ QVERIFY(list != nullptr); -+ QCOMPARE(list->count(), 1); -+ QPointer created(qvariant_cast(obj->property("object"))); -+ QVERIFY(!created.isNull()); -+ QCOMPARE(list->get(0).property("obj").toQObject(), created.data()); -+ QVariant retVal; -+ QMetaObject::invokeMethod(obj.data(), -+ "destroy", -+ Qt::DirectConnection, -+ Q_RETURN_ARG(QVariant, retVal)); -+ QVERIFY(retVal.toBool()); -+ QTRY_VERIFY(created.isNull()); -+ QTRY_VERIFY(list->get(0).property("obj").isUndefined()); -+ QCOMPARE(list->count(), 1); -+} -+ - QTEST_MAIN(tst_qqmllistmodel) - - #include "tst_qqmllistmodel.moc" diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0003-Check-if-a-device-in-knownPointingDevices-is-destroy.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0002-Check-if-a-device-in-knownPointingDevices-is-destroy.patch similarity index 100% rename from meta-webos/recipes-qt/qt6/qtdeclarative/0003-Check-if-a-device-in-knownPointingDevices-is-destroy.patch rename to meta-webos/recipes-qt/qt6/qtdeclarative/0002-Check-if-a-device-in-knownPointingDevices-is-destroy.patch diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend index 1471fbbc9..dea4478c3 100644 --- a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend @@ -2,15 +2,14 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos71" +EXTENDPRAUTO_append = "webos72" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" # Upstream-Status: Backport, Submitted SRC_URI_append_class-target = " \ - file://0001-qqmllistmodel-Fix-QObjects-setting-indestructible.patch \ - file://0002-QQmlListModel-Fix-C-owned-object-getting-destroyed.patch \ - file://0003-Check-if-a-device-in-knownPointingDevices-is-destroy.patch \ + file://0001-QQmlListModel-Fix-C-owned-object-getting-destroyed.patch \ + file://0002-Check-if-a-device-in-knownPointingDevices-is-destroy.patch \ " # Upstream-Status: Inappropriate From 06c682c1558d508522eb57ea9ae6d22f58465afc Mon Sep 17 00:00:00 2001 From: Aleksey Dotsenko Date: Tue, 6 Jul 2021 13:23:18 +0300 Subject: [PATCH 0085/2022] jsoncpp=webos1 :Release Notes: Configure bitbake receipe to build jsoncpp without using c++ exception. :Detailed Notes: Due to WAM component does not use exceptions and should use jsoncpp library do configure jsoncpp to not use c++ exception. Add DJSON_USE_EXCEPTION=0 to CXXFLAGS. :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-438] Include jsoncpp into build. [WRN-404] QT-less implementation [WRN-7359] CCC: jsoncpp=webos1 Change-Id: I42bd774ce11b957ff3ce18429d29f7d07f643515 --- meta-webos/recipes-devtools/jsoncpp/jsoncpp_%.bbappend | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 meta-webos/recipes-devtools/jsoncpp/jsoncpp_%.bbappend diff --git a/meta-webos/recipes-devtools/jsoncpp/jsoncpp_%.bbappend b/meta-webos/recipes-devtools/jsoncpp/jsoncpp_%.bbappend new file mode 100644 index 000000000..c9ea8dc7b --- /dev/null +++ b/meta-webos/recipes-devtools/jsoncpp/jsoncpp_%.bbappend @@ -0,0 +1,5 @@ +# Copyright (c) 2021 LG Electronics, Inc. + +EXTENDPRAUTO_append = "webos1" + +CXXFLAGS_append = " -DJSON_USE_EXCEPTION=0" From a88dbf4b2c775f0c92cd21404d824396c17410d3 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Tue, 6 Jul 2021 18:10:47 +0900 Subject: [PATCH 0086/2022] ose: mksnapshot-cross_87=r1 webruntime=r49.2 webruntime_87=8 :Release Notes: Convert patch file to commit on chromium87 :Detailed Notes: webruntime_87: submissions/7..submissions/8 8510d6a28c1 [op][upsable][build] breakpad: fix build with glibc-2.34 f02df591ef8 [op][ups][build] abseil-cpp: fix build with glibc-2.34 d5865e4e296 [op][ds][build] Add mksnapshot.gn for mksnapshot target 56e075e44fb [op][n_upsable][build] net: Fix build with gcc-11 ee148db288b [op][n_upsable][build] perfetto: Fix build with gcc-11 cdd9b7c07a6 [op][n_upsable][build] abseil-cpp: Fix build with gcc-11 mksnapshot-cross_87: r0..r1 Convert patch file to commit on chromium87 webruntime: r49.1..r49.2 Convert patch file to commit on chromium87 :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-2206] Analysis the fixes for webruntime(chromium84) build [WRN-7488] CCC: ose: mksnapshot-cross_87=r1 webruntime=r49.2 webruntime_87=8 pro: webruntime_%=pro21 webruntime_87=23 Change-Id: Id37f810b4bd1ff93b91af314eb49d7144c601f92 --- ...0001-absei-cpp-Fix-build-with-gcc-11.patch | 39 ---------------- ...d-mksnapshot.gn-for-mksnapshot-targe.patch | 46 ------------------- .../0002-perfetto-Fix-build-with-gcc-11.patch | 43 ----------------- .../0003-net-Fix-build-with-gcc-11.patch | 36 --------------- .../chromium/mksnapshot-cross_87.bb | 6 +-- .../chromium/webruntime-repo_87.inc | 9 +--- .../recipes-webos/chromium/webruntime_87.bb | 2 +- 7 files changed, 3 insertions(+), 178 deletions(-) delete mode 100644 meta-webos/recipes-webos/chromium/files/0001-absei-cpp-Fix-build-with-gcc-11.patch delete mode 100644 meta-webos/recipes-webos/chromium/files/0001-op-ds-build-Added-mksnapshot.gn-for-mksnapshot-targe.patch delete mode 100644 meta-webos/recipes-webos/chromium/files/0002-perfetto-Fix-build-with-gcc-11.patch delete mode 100644 meta-webos/recipes-webos/chromium/files/0003-net-Fix-build-with-gcc-11.patch diff --git a/meta-webos/recipes-webos/chromium/files/0001-absei-cpp-Fix-build-with-gcc-11.patch b/meta-webos/recipes-webos/chromium/files/0001-absei-cpp-Fix-build-with-gcc-11.patch deleted file mode 100644 index c0da3e721..000000000 --- a/meta-webos/recipes-webos/chromium/files/0001-absei-cpp-Fix-build-with-gcc-11.patch +++ /dev/null @@ -1,39 +0,0 @@ -From f0e4a8dcbe9663255f1aece1fe107c6ec9c09a02 Mon Sep 17 00:00:00 2001 -From: Martin Jansa -Date: Mon, 3 May 2021 12:56:57 -0700 -Subject: [PATCH] absei-cpp: Fix build with gcc-11 - -* fixes: -http://gecko.lge.com/Errors/Details/165922 - -FAILED: obj/third_party/abseil-cpp/absl/synchronization/graphcycles_internal/graphcycles.o -i686-webos-linux-g++ -m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=TOPDIR/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/recipe-sysroot -MMD -MF obj/third_party/abseil-cpp/absl/synchronization/graphcycles_internal/graphcycles.o.d -DENABLE_BROWSER_CONTROL_WEBAPI=1 -DENABLE_SAMPLE_WEBAPI=1 -DENABLE_MEMORYMANAGER_WEBAPI=1 -DENABLE_NETWORK_ERROR_PAGE_CONTROLLER_WEBAPI=1 -DOZONE_PLATFORM_WAYLAND_EXTERNAL=1 -DOS_WEBOS=1 -DNEVA_VIDEO_HOLE=1 -DUSE_NEVA_APPRUNTIME=1 -DENABLE_WEBM_VIDEO_CODECS=1 -DUSE_CBE=1 -DUSE_PMLOG=1 -DUSE_NEVA_SUSPEND_MEDIA_CAPTURE=1 -DUSE_FILESCHEME_CODECACHE=1 -DUSE_LOCAL_STORAGE_MANAGER=1 -DWEBOS_SUBMISSION_NUMBER=16 -DUSE_LTTNG=1 -DUSE_UDEV -DUSE_AURA=1 -DUSE_GLIB=1 -DUSE_NSS_CERTS=1 -DUSE_OZONE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -DCR_SYSROOT_HASH=d967bcef40477dbc39acef141ff22bf73f3e7cdb -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -DABSL_ALLOCATOR_NOTHROW=1 -I../../git/src/neva -Igen/neva -I../../git/src -Igen -I../../git/src/third_party/abseil-cpp -Wno-unused-variable -fno-strict-aliasing --param=ssp-buffer-size=4 -fstack-protector -funwind-tables -fPIC -pipe -pthread -m32 -msse2 -mfpmath=sse -mmmx -Wno-builtin-macro-redefined -D__DATE__= -D__TIME__= -D__TIMESTAMP__= -O2 -fno-ident -fdata-sections -ffunction-sections -fno-omit-frame-pointer -g0 -fvisibility=hidden -Wno-unused-local-typedefs -Wno-maybe-uninitialized -Wno-deprecated-declarations -Wno-comments -Wno-packed-not-aligned -Wno-attributes -Wno-missing-field-initializers -Wno-unused-parameter -std=gnu++14 -fno-exceptions -fno-rtti --sysroot=../../recipe-sysroot -fvisibility-inlines-hidden -Wno-narrowing -Wno-class-memaccess -c ../../git/src/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc -o obj/third_party/abseil-cpp/absl/synchronization/graphcycles_internal/graphcycles.o -../../git/src/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc: In member function 'void absl::synchronization_internal::GraphCycles::RemoveNode(void*)': -../../git/src/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc:451:26: error: 'numeric_limits' is not a member of 'std' - 451 | if (x->version == std::numeric_limits::max()) { - | ^~~~~~~~~~~~~~ -../../git/src/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc:451:49: error: expected primary-expression before '>' token - 451 | if (x->version == std::numeric_limits::max()) { - | ^ -../../git/src/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc:451:52: error: '::max' has not been declared; did you mean 'std::max'? - 451 | if (x->version == std::numeric_limits::max()) { - | ^~~ - | std::max - -Signed-off-by: Martin Jansa ---- - .../abseil-cpp/absl/synchronization/internal/graphcycles.cc | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc b/src/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc -index 19f9aab5b1..ab9d7f80bc 100644 ---- a/src/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc -+++ b/src/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc -@@ -36,6 +36,7 @@ - #include "absl/synchronization/internal/graphcycles.h" - - #include -+#include - #include - #include "absl/base/internal/hide_ptr.h" - #include "absl/base/internal/raw_logging.h" diff --git a/meta-webos/recipes-webos/chromium/files/0001-op-ds-build-Added-mksnapshot.gn-for-mksnapshot-targe.patch b/meta-webos/recipes-webos/chromium/files/0001-op-ds-build-Added-mksnapshot.gn-for-mksnapshot-targe.patch deleted file mode 100644 index 8c0f1734d..000000000 --- a/meta-webos/recipes-webos/chromium/files/0001-op-ds-build-Added-mksnapshot.gn-for-mksnapshot-targe.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 89c95af4d7adae1e0a8eddb5f303caca295664a8 Mon Sep 17 00:00:00 2001 -From: Wanchang Ryu -Date: Tue, 24 Nov 2020 14:18:06 +0900 -Subject: [PATCH] [op][ds][build] Added mksnapshot.gn for mksnapshot target - -:Release Notes: -Added mksnapshot.gn for mksnapshot target - -:Detailed Notes: -Chromium default BUILD.gn contains many dependency to required component -for building chromium but theses are not required to build native -mksnapshot binary. -mksnapshot.gn is used as gn dotfile for building mksnapshot target. - -:Testing Performed: -Build webos images for various targets - -:QA Notes: -N/A - -:Issues Addressed: -[PLAT-78282] mksnapshot from webruntime fails to run when host and -target have different glibc version ---- - src/mksnapshot.gn | 9 +++++++++ - 1 file changed, 9 insertions(+) - create mode 100644 src/mksnapshot.gn - -diff --git a/src/mksnapshot.gn b/src/mksnapshot.gn -new file mode 100644 -index 0000000000..c63bf6d4de ---- /dev/null -+++ b/src/mksnapshot.gn -@@ -0,0 +1,9 @@ -+declare_args() { -+ # The v8 snapshot needs to be built by code that is compiled with a -+ # toolchain that matches the bit-width of the target CPU, but runs on -+ # the host. -+ v8_snapshot_toolchain = "" -+} -+ -+buildconfig = "//build/config/BUILDCONFIG.gn" -+root = "//v8" --- -2.17.1 - diff --git a/meta-webos/recipes-webos/chromium/files/0002-perfetto-Fix-build-with-gcc-11.patch b/meta-webos/recipes-webos/chromium/files/0002-perfetto-Fix-build-with-gcc-11.patch deleted file mode 100644 index afeb34f9b..000000000 --- a/meta-webos/recipes-webos/chromium/files/0002-perfetto-Fix-build-with-gcc-11.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 16ea9f8f20d47665117948e2f1ad9ba48131dfea Mon Sep 17 00:00:00 2001 -From: Martin Jansa -Date: Mon, 3 May 2021 20:00:38 +0000 -Subject: [PATCH] perfetto: Fix build with gcc-11 - -* fixes: -FAILED: obj/third_party/perfetto/src/trace_processor/db/lib/column.o -i686-webos-linux-g++ -m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/jenkins/mjansa/build/webos-pro/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/ -recipe-sysroot -MMD -MF obj/third_party/perfetto/src/trace_processor/db/lib/column.o.d -DENABLE_BROWSER_CONTROL_WEBAPI=1 -DENABLE_SAMPLE_WEBAPI=1 -DENABLE_MEMORYMANAGER_WEBAPI=1 -DENABLE_NETWORK_ERROR_PAGE_CONTROLLER_WEBAPI=1 -DOZONE_PLATFORM_WAYLAND_EXTERNAL=1 -DOS_WEBOS=1 -DNEVA_VIDEO_HO -LE=1 -DUSE_NEVA_APPRUNTIME=1 -DENABLE_WEBM_VIDEO_CODECS=1 -DUSE_CBE=1 -DUSE_PMLOG=1 -DUSE_NEVA_SUSPEND_MEDIA_CAPTURE=1 -DUSE_FILESCHEME_CODECACHE=1 -DUSE_LOCAL_STORAGE_MANAGER=1 -DWEBOS_SUBMISSION_NUMBER=16 -DUSE_LTTNG=1 -DUSE_UDEV -DUSE_AURA=1 -DUSE_GLIB=1 -DUSE_NSS_CERTS=1 -DUSE_OZONE=1 --D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D_FORTIFY_SOURCE=2 -DCR_SYSROOT_HASH=d967bcef40477dbc39acef141ff22bf73f3e7cdb -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -DPERFETTO_IMPLEMENTATION -I../../git/src/nev -a -Igen/neva -I../../git/src -Igen -I../../git/src/third_party/perfetto -I../../git/src/third_party/perfetto/include -Igen/third_party/perfetto/build_config -Igen/third_party/perfetto -Wno-unused-variable -fno-strict-aliasing --param=ssp-buffer-size=4 -fstack-protector -funwind-tables -fPI -C -pipe -pthread -m32 -msse2 -mfpmath=sse -mmmx -Wno-builtin-macro-redefined -D__DATE__= -D__TIME__= -D__TIMESTAMP__= -Wall -Wno-unused-local-typedefs -Wno-maybe-uninitialized -Wno-deprecated-declarations -Wno-comments -Wno-packed-not-aligned -Wno-attributes -Wno-missing-field-initializers - -Wno-unused-parameter -O2 -fno-ident -fdata-sections -ffunction-sections -fno-omit-frame-pointer -g0 -fvisibility=hidden -std=gnu++14 -Wno-narrowing -Wno-class-memaccess -fno-exceptions -fno-rtti --sysroot=../../recipe-sysroot -fvisibility-inlines-hidden -c ../../git/src/third_party/perfe -tto/src/trace_processor/db/column.cc -o obj/third_party/perfetto/src/trace_processor/db/lib/column.o -In file included from ../../git/src/third_party/perfetto/src/trace_processor/db/column.h:22, - from ../../git/src/third_party/perfetto/src/trace_processor/db/column.cc:17: -../../git/src/third_party/perfetto/src/trace_processor/containers/string_pool.h: In static member function 'static const uint8_t* perfetto::trace_processor::StringPool::ReadSize(const uint8_t*, uint32_t*)': -../../git/src/third_party/perfetto/src/trace_processor/containers/string_pool.h:256:34: error: 'numeric_limits' is not a member of 'std' - 256 | PERFETTO_DCHECK(value < std::numeric_limits::max()); - | ^~~~~~~~~~~~~~ -../../git/src/third_party/perfetto/src/trace_processor/containers/string_pool.h:256:57: error: expected primary-expression before '>' token - 256 | PERFETTO_DCHECK(value < std::numeric_limits::max()); - | ^ -../../git/src/third_party/perfetto/src/trace_processor/containers/string_pool.h:256:60: error: '::max' has not been declared; did you mean 'std::max'? - 256 | PERFETTO_DCHECK(value < std::numeric_limits::max()); - | ^~~ ---- - .../perfetto/src/trace_processor/containers/string_pool.h | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/third_party/perfetto/src/trace_processor/containers/string_pool.h b/src/third_party/perfetto/src/trace_processor/containers/string_pool.h -index 11ae91cfec..558ff00e8f 100644 ---- a/src/third_party/perfetto/src/trace_processor/containers/string_pool.h -+++ b/src/third_party/perfetto/src/trace_processor/containers/string_pool.h -@@ -20,6 +20,7 @@ - #include - #include - -+#include - #include - #include - diff --git a/meta-webos/recipes-webos/chromium/files/0003-net-Fix-build-with-gcc-11.patch b/meta-webos/recipes-webos/chromium/files/0003-net-Fix-build-with-gcc-11.patch deleted file mode 100644 index 071e9d323..000000000 --- a/meta-webos/recipes-webos/chromium/files/0003-net-Fix-build-with-gcc-11.patch +++ /dev/null @@ -1,36 +0,0 @@ -From 73123d8b1a775f19bf4a0062d3889ea1ff92409a Mon Sep 17 00:00:00 2001 -From: Martin Jansa -Date: Mon, 3 May 2021 20:10:09 +0000 -Subject: [PATCH] net: Fix build with gcc-11 - -* fixes: -FAILED: obj/net/dns/dns/dns_server_iterator.o -i686-webos-linux-g++ -m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/jenkins/mjansa/build/webos-pro/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/recipe-sysroot -MMD -MF obj/net/dns/dns/dns_server_iterator.o.d -DENABLE_BROWSER_CONTROL_WEBAPI=1 -DENABLE_SAMPLE_WEBAPI=1 -DENABLE_MEMORYMANAGER_WEBAPI=1 -DENABLE_NETWORK_ERROR_PAGE_CONTROLLER_WEBAPI=1 -DOZONE_PLATFORM_WAYLAND_EXTERNAL=1 -DOS_WEBOS=1 -DNEVA_VIDEO_HOLE=1 -DUSE_NEVA_APPRUNTIME=1 -DENABLE_WEBM_VIDEO_CODECS=1 -DUSE_CBE=1 -DUSE_PMLOG=1 -DUSE_NEVA_SUSPEND_MEDIA_CAPTURE=1 -DUSE_FILESCHEME_CODECACHE=1 -DUSE_LOCAL_STORAGE_MANAGER=1 -DWEBOS_SUBMISSION_NUMBER=16 -DUSE_LTTNG=1 -DUSE_UDEV -DUSE_AURA=1 -DUSE_GLIB=1 -DUSE_NSS_CERTS=1 -DUSE_OZONE=1 -D_FILE_OFFSET_BITS=64 -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D__STDC_CONSTANT_MACROS -D__STDC_FORMAT_MACROS -D_FORTIFY_SOURCE=2 -DCR_SYSROOT_HASH=d967bcef40477dbc39acef141ff22bf73f3e7cdb -DNDEBUG -DNVALGRIND -DDYNAMIC_ANNOTATIONS_ENABLED=0 -DGLIB_VERSION_MAX_ALLOWED=GLIB_VERSION_2_40 -DGLIB_VERSION_MIN_REQUIRED=GLIB_VERSION_2_40 -DUSE_LTTNG=1 -DGOOGLE_PROTOBUF_NO_RTTI -DGOOGLE_PROTOBUF_NO_STATIC_INITIALIZER -DHAVE_PTHREAD -DNET_IMPLEMENTATION -DENABLE_BUILT_IN_DNS -DUSE_GIO -DU_USING_ICU_NAMESPACE=0 -DU_ENABLE_DYLOAD=0 -DUSE_CHROMIUM_ICU=1 -DU_ENABLE_TRACING=1 -DU_ENABLE_RESOURCE_TRACING=0 -DU_STATIC_IMPLEMENTATION -DICU_UTIL_DATA_IMPL=ICU_UTIL_DATA_FILE -DUCHAR_TYPE=uint16_t -I../../git/src/neva -Igen/neva -I../../git/src -Igen -I../../git/src/third_party/perfetto/include -Igen/third_party/perfetto/build_config -Igen/third_party/perfetto -I../../git/src/third_party/protobuf/src -Igen/protoc_out -I../../git/src/third_party/protobuf/src -I../../git/src/third_party/abseil-cpp -I../../git/src/third_party/boringssl/src/include -I../../git/src/third_party/zlib -I../../git/src/third_party/ced/src -I../../git/src/third_party/icu/source/common -I../../git/src/third_party/icu/source/i18n -I../../git/src/third_party/brotli/include -Wno-unused-variable -fno-strict-aliasing --param=ssp-buffer-size=4 -fstack-protector -funwind-tables -fPIC -pipe -pthread -m32 -msse2 -mfpmath=sse -mmmx -Wno-builtin-macro-redefined -D__DATE__= -D__TIME__= -D__TIMESTAMP__= -Wall -Wno-unused-local-typedefs -Wno-maybe-uninitialized -Wno-deprecated-declarations -Wno-comments -Wno-packed-not-aligned -Wno-attributes -Wno-missing-field-initializers -Wno-unused-parameter -O2 -fno-ident -fdata-sections -ffunction-sections -fno-omit-frame-pointer -g0 -fvisibility=hidden -I/jenkins/mjansa/build/webos-pro/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/recipe-sysroot/usr/include/glib-2.0 -I/jenkins/mjansa/build/webos-pro/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/recipe-sysroot/usr/lib/glib-2.0/include -I/jenkins/mjansa/build/webos-pro/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/recipe-sysroot/usr/include/nss3 -I/jenkins/mjansa/build/webos-pro/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/recipe-sysroot/usr/include/nspr -I/jenkins/mjansa/build/webos-pro/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/recipe-sysroot/usr/include/libmount -I/jenkins/mjansa/build/webos-pro/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/recipe-sysroot/usr/include/blkid -I/jenkins/mjansa/build/webos-pro/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/recipe-sysroot/usr/include/glib-2.0 -I/jenkins/mjansa/build/webos-pro/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-16-r47.2/recipe-sysroot/usr/lib/glib-2.0/include -std=gnu++14 -Wno-narrowing -Wno-class-memaccess -fno-exceptions -fno-rtti --sysroot=../../recipe-sysroot -fvisibility-inlines-hidden -c ../../git/src/net/dns/dns_server_iterator.cc -o obj/net/dns/dns/dns_server_iterator.o -In file included from ../../git/src/net/dns/dns_server_iterator.cc:5: -../../git/src/net/dns/dns_server_iterator.h:31:27: error: expected ')' before 'nameservers_size' - 31 | DnsServerIterator(size_t nameservers_size, - | ~ ^~~~~~~~~~~~~~~~~ - | ) -../../git/src/net/dns/dns_server_iterator.h:47:11: error: 'size_t' does not name a type - 47 | virtual size_t GetNextAttemptIndex() = 0; - | ^~~~~~ -../../git/src/net/dns/dns_server_iterator.h:12:1: note: 'size_t' is defined in header ''; did you forget to '#include '? - 11 | #include "net/dns/public/secure_dns_mode.h" - +++ |+#include - 12 | ---- - src/net/dns/dns_server_iterator.h | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/net/dns/dns_server_iterator.h b/src/net/dns/dns_server_iterator.h -index 97c42f7300..3faf289c1e 100644 ---- a/src/net/dns/dns_server_iterator.h -+++ b/src/net/dns/dns_server_iterator.h -@@ -6,6 +6,7 @@ - #define NET_DNS_DNS_SERVER_ITERATOR_H_ - - #include -+#include - - #include "net/base/net_export.h" - #include "net/dns/public/secure_dns_mode.h" diff --git a/meta-webos/recipes-webos/chromium/mksnapshot-cross_87.bb b/meta-webos/recipes-webos/chromium/mksnapshot-cross_87.bb index 979e3c1e5..90196ce82 100644 --- a/meta-webos/recipes-webos/chromium/mksnapshot-cross_87.bb +++ b/meta-webos/recipes-webos/chromium/mksnapshot-cross_87.bb @@ -13,16 +13,12 @@ UNINATIVE_LOADER = "" PROVIDES = "mksnapshot-cross-${TARGET_ARCH}" PN = "mksnapshot-cross-${TARGET_ARCH}" BPN = "mksnapshot" -PR = "r0" +PR = "r1" TARGET = "v8_snapshot_clang_${TARGET_CPU}/mksnapshot" DEPENDS = "glib-2.0-native python-native gcc-runtime" -SRC_URI_append = " \ -file://0001-op-ds-build-Added-mksnapshot.gn-for-mksnapshot-targe.patch \ -" - GN_ARGS_append = "\ use_pmlog=false \ " diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc index fa87692cf..2c053e6e9 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc @@ -3,16 +3,9 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=28f5b870e5e06b9af5b96c9dd65b31c8" WEBOS_REPO_NAME = "chromium87" -WEBOS_VERSION = "87.0.4280.88-7_76fa38e6b103b248c21fa6fbaf40fd893293755e" +WEBOS_VERSION = "87.0.4280.88-8_a0befdeba5ab82f10ced4d3341da0531d6742b30" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium87" WEBOS_VERSION_V8 = "8.7.220.29-chromium87.4_e8a7ab899d76b1e8f48457dbb57178d6bd3a4d02" SRCREV_v8 = "935065d097cce0090bc858746e6aee0919b222de" - -# TODO: Apply all patches from -SRC_URI += " \ - file://0001-absei-cpp-Fix-build-with-gcc-11.patch \ - file://0002-perfetto-Fix-build-with-gcc-11.patch \ - file://0003-net-Fix-build-with-gcc-11.patch \ -" diff --git a/meta-webos/recipes-webos/chromium/webruntime_87.bb b/meta-webos/recipes-webos/chromium/webruntime_87.bb index a0660fbb6..5033726eb 100644 --- a/meta-webos/recipes-webos/chromium/webruntime_87.bb +++ b/meta-webos/recipes-webos/chromium/webruntime_87.bb @@ -6,7 +6,7 @@ require webruntime-repo${REPO_VERSION}.inc PROVIDES = "virtual/webruntime" -PR = "${INC_PR}.1" +PR = "${INC_PR}.2" GN_ARGS_append = " use_x11=false" From 434b0ee0fad97c9df79fd1c98318e0e7167c70d6 Mon Sep 17 00:00:00 2001 From: sushant narayan Date: Thu, 16 Sep 2021 10:26:34 +0530 Subject: [PATCH 0087/2022] ose: g-camera-pipeline=13.gav.22 :Release Notes: Fix rdx crash issue in camera pipeline :Detailed Notes: g-camera-pipeline : submissions/13.gav.21..submissions/13.gav.22 8556015 Fix RDX crash issue in camera recording :Testing Performed: Please refer test result in WRN-7516 :QA Notes: NA :Issues Addressed: [WRN-7516] CCC: g-camera-pipeline=13.gav.22 [WRN-6921] Fix rdx camera recording crash issue for OSE [WRN-5557] [RDX_CRASH][webos] /usr/sbin/g-camera-pipeline in g_type_check_instance_is_fundamentally_a (libgobject-2.0.so.0 + 0x2a6ca) Change-Id: I79cf1113e726ab3f63503badad4721a347d65778 --- meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb index 34e531b37..c702aa3f7 100644 --- a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb +++ b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb @@ -24,7 +24,7 @@ DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad DEPENDS_append_rpi = " userland" WEBOS_GIT_PARAM_BRANCH = "@gav" -WEBOS_VERSION = "1.0.0-13.gav.21_4231a2804ba30ee1dc780e29c5d224a6903da6ae" +WEBOS_VERSION = "1.0.0-13.gav.22_9dd9a1da5e0fa8e4e84148de484ca00adc7fbbbc" WEBOS_GIT_PARAM_BRANCH_raspberrypi3 = "master" WEBOS_VERSION_raspberrypi3 = "1.0.0-16_e7fc787fdb52abb4ebd5c18f798976f6ebffad9f" From 870b17afad3e9a31f04f860d23256aa71b2e468c Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Mon, 27 Sep 2021 15:45:13 +0900 Subject: [PATCH 0088/2022] ose: webruntime_87=9 :Release Notes: Fix App Shell Crash and Static Analysis issues :Detailed Notes: webruntime_87: submissions/8..submissions/9 5585e00ec6f [op][n_upsable][appruntime] Fix crash when frame gone 7adcdd61fe4 [op][n_upsable][static_analysis] Fix parse warning 7dfbb67279c [op][n_upsable][static_analysis] Fix unrecoverable parse warning 99ddb1c0924 [op][n_upsable][static_analysis] Fix "Recursion in included headers" 9a4a31c2783 fixup! [op][n_upsable][crypto] Provide PAL abstraction for OSCrypt :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-2477] [Static analysis] 8994519/8994524 Dereference after null check [WRN-2479] [Static analysis] Recursion in included headers [WRN-7473] [OSE_Static_analysis] 8987151 Unrecoverable parse warning [WRN-7474] [OSE_Static_analysis] 8986478 Parse warning [WRN-5794] [RDX_CRASH] app_shell in n/a [WRN-7961] CCC: webruntime_87={ose:9 pro:24} Change-Id: I4846da3dfa9045623de12904b4e99960e516bcd9 --- meta-webos/recipes-webos/chromium/webruntime-repo_87.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc index 2c053e6e9..4e9b3f083 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=28f5b870e5e06b9af5b96c9dd65b31c8" WEBOS_REPO_NAME = "chromium87" -WEBOS_VERSION = "87.0.4280.88-8_a0befdeba5ab82f10ced4d3341da0531d6742b30" +WEBOS_VERSION = "87.0.4280.88-9_ecb645197624db73c480d197ef6da2759860a2cb" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium87" From c665af4d795f309fb79f5c897d42d7d9c4ad87bf Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Thu, 16 Sep 2021 09:48:32 +0900 Subject: [PATCH 0089/2022] qtdeclarative=webos73 qtgraphicaleffects=v6.2.0 qtmultimedia=v6.0.0 :Release Notes: Update patches as per the meta-qt6 layerpin update. :Detailed Notes: qtdeclarative=webos73 Drop 0001-QQmlListModel-Fix-C-owned-object-getting-destroyed.patch as it is included in the updated layerpin. qtgraphicaleffects=v6.2.0 Specify QT_MODULE_BRANCH as 6.2 and update SRCREV accordingly. qtmultimedia=v6.0.0 Fix build issue by adding an override to SRCREV. :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-7517] CCC: Update meta-qt6 to v6.2.0-rc2 Change-Id: I9228219a420997b87ab78e0aed694be6a78f261d --- ...-in-knownPointingDevices-is-destroy.patch} | 0 ...Fix-C-owned-object-getting-destroyed.patch | 137 ------------------ .../recipes-qt/qt6/qtdeclarative_git.bbappend | 5 +- ...bbappend => qtgraphicaleffects_%.bbappend} | 0 ...s_6.0.0.bb => qtgraphicaleffects_6.2.0.bb} | 5 +- .../recipes-qt/qt6/qtmultimedia_6.0.0.bb | 3 +- 6 files changed, 7 insertions(+), 143 deletions(-) rename meta-webos/recipes-qt/qt6/qtdeclarative/{0002-Check-if-a-device-in-knownPointingDevices-is-destroy.patch => 0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch} (100%) delete mode 100644 meta-webos/recipes-qt/qt6/qtdeclarative/0001-QQmlListModel-Fix-C-owned-object-getting-destroyed.patch rename meta-webos/recipes-qt/qt6/{qtgraphicaleffects_6.0.0.bbappend => qtgraphicaleffects_%.bbappend} (100%) rename meta-webos/recipes-qt/qt6/{qtgraphicaleffects_6.0.0.bb => qtgraphicaleffects_6.2.0.bb} (84%) diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0002-Check-if-a-device-in-knownPointingDevices-is-destroy.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch similarity index 100% rename from meta-webos/recipes-qt/qt6/qtdeclarative/0002-Check-if-a-device-in-knownPointingDevices-is-destroy.patch rename to meta-webos/recipes-qt/qt6/qtdeclarative/0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0001-QQmlListModel-Fix-C-owned-object-getting-destroyed.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0001-QQmlListModel-Fix-C-owned-object-getting-destroyed.patch deleted file mode 100644 index 5f5b236cc..000000000 --- a/meta-webos/recipes-qt/qt6/qtdeclarative/0001-QQmlListModel-Fix-C-owned-object-getting-destroyed.patch +++ /dev/null @@ -1,137 +0,0 @@ -From fa6ff7dc41e6bb79dda79e5f8ebb9b8c5e80994b Mon Sep 17 00:00:00 2001 -From: Jaeyoon Jung -Date: Wed, 1 Sep 2021 18:47:08 +0900 -Subject: [PATCH] QQmlListModel: Fix C++ owned object getting destroyed - -If an object is explicitly set as C++ owned, it should not be turned to -destructible in any case. explicitIndestructibleSet flag is used for -that and thus it should not be unset in any case. -This fixes an issue where a C++ owned object could be destroyed by GC -when it is added to a ListModel. An object is supposed to be set as -destructible implicitly when it is used as a return value from JS unless -explicitIndestructibleSet is set. - -Fixes: QTBUG-96167 -Pick-to: 6.2 -Change-Id: Iad06847e56e29dd1b20146be108d7f747d8474dc -Upstream-Status: Submitted [https://codereview.qt-project.org/c/qt/qtdeclarative/+/368105] ---- - src/qmlmodels/qqmllistmodel.cpp | 8 ++--- - .../qqmllistmodel/data/objectOwnership.qml | 27 ++++++++++++++ - .../qml/qqmllistmodel/tst_qqmllistmodel.cpp | 35 +++++++++++++++++++ - 3 files changed, 65 insertions(+), 5 deletions(-) - create mode 100644 tests/auto/qml/qqmllistmodel/data/objectOwnership.qml - -diff --git a/src/qmlmodels/qqmllistmodel.cpp b/src/qmlmodels/qqmllistmodel.cpp -index b71931cc85..4ae6b011fa 100644 ---- a/src/qmlmodels/qqmllistmodel.cpp -+++ b/src/qmlmodels/qqmllistmodel.cpp -@@ -1095,10 +1095,8 @@ restoreQObjectOwnership(ListElement::GuardedQObjectPointer *pointer) - - // Only restore the previous state if the object hasn't become explicitly - // owned -- if (!data->explicitIndestructibleSet) { -+ if (!data->explicitIndestructibleSet) - data->indestructible = (pointer->tag() & ListElement::Indestructible); -- data->explicitIndestructibleSet = (pointer->tag() & ListElement::ExplicitlySet); -- } - } - } - -@@ -1112,8 +1110,8 @@ static void setQObjectOwnership(char *mem, QObject *o) - if (!ddata) - ddata = QQmlData::get(o, true); - -- ddata->indestructible = ownership != 0; -- ddata->explicitIndestructibleSet = false; -+ if (!ddata->explicitIndestructibleSet) -+ ddata->indestructible = ownership != 0; - - new (mem) ListElement::GuardedQObjectPointer( - o, static_cast(ownership)); -diff --git a/tests/auto/qml/qqmllistmodel/data/objectOwnership.qml b/tests/auto/qml/qqmllistmodel/data/objectOwnership.qml -new file mode 100644 -index 0000000000..0ebb29d75b ---- /dev/null -+++ b/tests/auto/qml/qqmllistmodel/data/objectOwnership.qml -@@ -0,0 +1,27 @@ -+import QtQuick -+ -+ListView { -+ id: root -+ width: 100 -+ height: 100 -+ -+ delegate: Component { -+ Item { -+ property Item myItem: refItem -+ } -+ } -+ -+ model: ListModel { -+ id: listModel -+ objectName: "listModel" -+ -+ function addItem() { -+ append({"refItem": cppOwnedItem}); -+ } -+ } -+ -+ function checkItem() { -+ root.currentIndex = 0; -+ currentItem.myItem.dummy(); -+ } -+} -diff --git a/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp b/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp -index 7f94180274..fae2b8da63 100644 ---- a/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp -+++ b/tests/auto/qml/qqmllistmodel/tst_qqmllistmodel.cpp -@@ -137,6 +137,7 @@ private slots: - void emptyStringNotUndefined(); - void listElementWithTemplateString(); - void destroyComponentObject(); -+ void objectOwnershipFlip(); - }; - - bool tst_qqmllistmodel::compareVariantList(const QVariantList &testList, QVariant object) -@@ -1882,6 +1883,40 @@ void tst_qqmllistmodel::destroyComponentObject() - QCOMPARE(list->count(), 1); - } - -+// Used for objectOwnershipFlip -+class TestItem : public QQuickItem -+{ -+ Q_OBJECT -+public: -+ // To trigger QQmlData::setImplicitDestructible through QV4::CallArgument::toValue -+ Q_INVOKABLE TestItem* dummy() { return this; } -+}; -+ -+void tst_qqmllistmodel::objectOwnershipFlip() -+{ -+ QQmlEngine engine; -+ QQmlComponent component(&engine, testFileUrl("objectOwnership.qml")); -+ QVERIFY(!component.isError()); -+ QScopedPointer root(component.create()); -+ QVERIFY(!root.isNull()); -+ QQmlListModel *model = root->findChild("listModel"); -+ QVERIFY(model != nullptr); -+ -+ QScopedPointer item(new TestItem()); -+ item->setObjectName("cppOwnedItem"); -+ QJSEngine::setObjectOwnership(item.data(), QJSEngine::CppOwnership); -+ QCOMPARE(QJSEngine::objectOwnership(item.data()), QJSEngine::CppOwnership); -+ -+ engine.rootContext()->setContextProperty("cppOwnedItem", item.data()); -+ -+ QMetaObject::invokeMethod(model, "addItem"); -+ QCOMPARE(model->count(), 1); -+ -+ QMetaObject::invokeMethod(root.data(), "checkItem"); -+ -+ QCOMPARE(QJSEngine::objectOwnership(item.data()), QJSEngine::CppOwnership); -+} -+ - QTEST_MAIN(tst_qqmllistmodel) - - #include "tst_qqmllistmodel.moc" diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend index dea4478c3..cc503d25c 100644 --- a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend @@ -2,14 +2,13 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos72" +EXTENDPRAUTO_append = "webos73" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" # Upstream-Status: Backport, Submitted SRC_URI_append_class-target = " \ - file://0001-QQmlListModel-Fix-C-owned-object-getting-destroyed.patch \ - file://0002-Check-if-a-device-in-knownPointingDevices-is-destroy.patch \ + file://0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch \ " # Upstream-Status: Inappropriate diff --git a/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.0.0.bbappend b/meta-webos/recipes-qt/qt6/qtgraphicaleffects_%.bbappend similarity index 100% rename from meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.0.0.bbappend rename to meta-webos/recipes-qt/qt6/qtgraphicaleffects_%.bbappend diff --git a/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.0.0.bb b/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb similarity index 84% rename from meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.0.0.bb rename to meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb index f90bdb221..7b4af263d 100644 --- a/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.0.0.bb +++ b/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb @@ -13,6 +13,7 @@ include recipes-qt/qt6/qt6.inc DEPENDS += "qtbase qtdeclarative" -PV = "6.0.0" +PV = "6.2.0" +QT_MODULE_BRANCH = "6.2" -SRCREV = "2910bb5d11da4261a88bd57c7251d86c51bb57d3" +SRCREV = "59ab3e11433a5157aac0f3af7c0d7fe70a373373" diff --git a/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb b/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb index fbac1b008..2757121d2 100644 --- a/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb +++ b/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb @@ -38,7 +38,8 @@ CXXFLAGS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', '-DMESA_EGL_NO_X LDFLAGS_append_x86 = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', ' -fuse-ld=bfd ', '', d)}" QT_MODULE_BRANCH = "dev" -SRCREV = "e22a4c82ee24d3d574a6be629e3049248cfba9d9" +# Needs the override since v6.2.0-rc2 +SRCREV_qtmultimedia = "e22a4c82ee24d3d574a6be629e3049248cfba9d9" PV = "6.0.0" SRC_URI += "\ From 804570c33c4e564f8001403ec32c6dfb722d4747 Mon Sep 17 00:00:00 2001 From: "janagaraj.veluchamy" Date: Thu, 30 Sep 2021 16:45:47 +0530 Subject: [PATCH 0090/2022] ose: com.webos.app.notification=10 :Release Notes: OnClick of OnCreate not working on Notification app :Detailed Notes: com.webos.app.notification: submissions/9..submissions/10 7096417 OnClick not working on Notification app :Testing Performed: Refer [WRN-8190] for test results :QA Notes: NA :Issues Addressed: [WRN-7520] OnClick of OnCreate not working on Notification app [WRN-8190] CCC: ose: com.webos.app.notification=10 Change-Id: I30c4fca7a8435ff20ece5e5d3e280ded19a11335 --- .../com.webos.app.notification/com.webos.app.notification.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb b/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb index d8a4ff0a9..4e9bea697 100644 --- a/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb +++ b/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=0ec407cd2d4a192e0c60888f4ec66dd7 \ " -WEBOS_VERSION = "0.1.0-9_25404ae1dad1d223d01389d9e6c8f0ebbdd1d062" +WEBOS_VERSION = "0.1.0-10_7051c25b964cc1d44778f77992de066078035ba5" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" PR = "r1" From 3676fc8b8cb35ba0d9682bb205c6a6a15df03761 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Thu, 30 Sep 2021 14:01:07 +0900 Subject: [PATCH 0091/2022] ose: wam=54 :Release Notes: Fix to update device information Fix Coverity Issues :Detailed Notes: wam: submissions/53..submissions/54 31924dad [op][coverity] Fix 9000198 coverity issue 678a0b7e [op][coverity] Fix 9000203 coverity issue 1ca99fd7 [op][coverity] Fix 9000204 coverity issue 0820e6cc [op][coverity] Fix 9000196 coverity issue 5ec13cbd [op][coverity] Fix 9000199 coverity issue 995919e1 [op][qtless] Fixed failure to update device info :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-7479] [OSE-RPi4] : Unable to change Menu Language. [WRN-7499] [OSE_Static_Analysis] 9000199 Parse warning [WRN-7500] [OSE_Static_Analysis] 9000196 Operands don't affect result [WRN-7501][OSE_Static_Analysis] 9000204 Argument cannot be negative [WRN-7503] [OSE_Static_Analysis] 9000203 Misuse of memcmp-style function [WRN-7505][OSE_Static_Analysis] 9000198 Big parameter passed by value [WRN-8179] CCC: wam=54 Change-Id: Ia1b5273fee2dff1107848a44296df5b7d96374da --- meta-webos/recipes-webos/wam/wam.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index 58ed32782..89f3f8075 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -18,7 +18,7 @@ RDEPENDS_${PN} += "util-linux" VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" -WEBOS_VERSION = "1.0.2-53_6ab3b45384b4c7746ee64bdf0fe847829352e847" +WEBOS_VERSION = "1.0.2-54_8de10667b88c163b669a760056d3b5dc24a3f222" PR = "r40" WAM_BUILD_SYSTEM = "webos_qmake6" From 5c89dff34c8a1f5d81a26233dbbe845e33dfbb1f Mon Sep 17 00:00:00 2001 From: "taeyoung.hong" Date: Wed, 29 Sep 2021 11:54:00 +0900 Subject: [PATCH 0092/2022] ose: enact-dev-native=v4.1.2 enact-framework=v4.0.3-r12 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit :Release Notes: Add sanitize.css module for supporting postcss-normalize :Detailed Notes: enact-dev-native 4.0.3..4.1.2: 3b753ff 4.1.2 release Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 1d74c5b WRN-8051: Added `sanitize.css` module for supporting `postcss-normalize` (#250) ba5e976 4.1.1 release 4b14d9b 4.1.1 release b87dc29 4.1.1 release 8c2511e WRN-5817: Update customization files path (#249) a27b130 4.1.0 release 51cbafd 4.1.0 release ff2d41c WRN-3088: Added a private pack option to use a custom skin (#248) 4cae8b1 WRN-2490: Added `@testing-library/react` support for "enact test" (#247) enact-framework 4.0.2..4.0.3: 6482c9fd 4.0.3 release 324c48a6 4.0.3 release c6425871 Version value updating b633910b Update a change log for 4.0.3 Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 7a55a6cd Update storybook-utils dependency to 3.0.1 c089320b WRN-792: Fix testcases for latest chrome driver (#85) :Testing Performed: Verf built and locally tested :QA Notes: N/A :Issues Addressed: [WRN-8051] [CLI] Error: Cannot find module ‘sanitize.css/page.css’ [WRN-8087] CCC: ose: enact-dev-native=v4.1.2 enact-framework=v4.0.3-r12 Change-Id: I0b7458ce0069689a7f6d04953e34db919b58f635 --- .../recipes-webos/enact-dev/enact-dev-native.bb | 4 ++-- .../recipes-webos/enactjs-apps/enact-framework.bb | 14 ++++++-------- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb b/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb index d8d7f876c..37aef179b 100644 --- a/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb +++ b/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb @@ -38,8 +38,8 @@ SRCREV_FORMAT = "main_cli-legacy_jsdoc-to-ts" # tag whose hash is specified in SRCREV, so PV and SRCREV will always change # together. -PV = "4.0.3" -SRCREV = "81e067291eefb72a166f0be5d89b7d97ff8d1a78" +PV = "4.1.2" +SRCREV = "396a8b32fce74609d33f7b3e38c6ef75a1b59357" SRCREV_cli-legacy = "bf5012e50bdca62ff596b73a55a5b5f93ccf1069" SRCREV_jsdoc-to-ts = "91e3709da01f4a8e0d57c2ed80d068789acf37eb" diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb index 1b564d8d7..2083ef8d6 100644 --- a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb +++ b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb @@ -22,10 +22,10 @@ SRC_URI = " \ # algorithm properly recognizes that a pre-release precedes the associated final # release (e.g., 1.0-pre.1 < 1.0). -PV = "4.0.2" +PV = "4.0.3" -SRCREV_main = "84dcafa4392e2a10511225bc011449a930607d95" -SRCREV_enact = "ef7085f13a3affc3fdab44bde183d364b354ff8d" +SRCREV_main = "8d4590d46fc35d64635e9e017926dc88be8fe1e2" +SRCREV_enact = "e5c7a0c9d3b8d15321f5fff3c0d17bc0ae9a786e" do_fetch[vardeps] += "SRCREV_enact" SRCREV_FORMAT = "main_enact" @@ -53,7 +53,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ min-document@2.19.0 \ node-fetch@1.7.3 \ object-assign@4.1.1 \ - parse-headers@2.0.3 \ + parse-headers@2.0.4 \ process@0.11.10 \ promise@7.3.1 \ prop-types@15.7.2 \ @@ -61,9 +61,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ react@17.0.2 \ react-dom@17.0.2 \ react-is@17.0.2 \ - react-lifecycles-compat@3.0.4 \ - recompose@0.30.0 \ - regenerator-runtime@0.13.9 \ + recompose@0.26.0 \ safer-buffer@2.1.2 \ scheduler@0.20.2 \ setimmediate@1.0.5 \ @@ -78,7 +76,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ # NOTE: We only need to bump PR if we change something OTHER than # PV, SRCREV or the dependencies statement above. -PR = "r11" +PR = "r12" # Skip unneeded tasks do_configure[noexec] = "1" From 4e4dc6b5d805acad84214191378bb784d64684d4 Mon Sep 17 00:00:00 2001 From: "premalatha.mvs" Date: Wed, 15 Sep 2021 12:11:01 +0530 Subject: [PATCH 0093/2022] ose: umediaserver=24.gav.20-r18 packagegroup-webos-extended=r39 :Release Notes: Apply boost-1.73.0 lib patch to code repo :Detailed Notes: umediaserver: submissions/24.gav.19..submissions/24.gav.20 7e8eab6 Fix build failure with boost-1.73.0 umediaserver: submissions/26..submissions/27 af89f8a Fix build failure with boost-1.73.0 packagegroup-webos-extended: Update g-media-pipeline to supported machines :Testing Performed: Please refer test result in WRN-8047 :QA Notes: NA :Issues Addressed: [WRN-8047] CCC: ose: umediaserver=24.gav.20-r18 packagegroup-webos-extended=r39 [WRN-6903] Fix build with boost-1.73.0 Change-Id: Id9f7eef670690c77406a6c4eeda9fc410a333fd4 --- .../packagegroup-webos-extended.bb | 9 ++- .../umediaserver/umediaserver.bb | 8 +-- .../0001-Fix-build-with-boost-1.73.0.patch | 49 -------------- .../0001-Fix-build-with-boost-1.73.0.patch | 66 ------------------- 4 files changed, 10 insertions(+), 122 deletions(-) delete mode 100644 meta-webos/recipes-webos/umediaserver/umediaserver/0001-Fix-build-with-boost-1.73.0.patch delete mode 100644 meta-webos/recipes-webos/umediaserver/umediaserver/raspberrypi4/0001-Fix-build-with-boost-1.73.0.patch diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index a279fb3d4..47db752a9 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -5,7 +5,7 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" # You don't need to change this value when you're changing just RDEPENDS_${PN} variable. -PR = "r38" +PR = "r39" PACKAGE_ARCH = "${MACHINE_ARCH}" inherit packagegroup @@ -32,7 +32,12 @@ VIRTUAL-RUNTIME_com.webos.service.mediacontroller_qemux86 = "com.webos.service.m VIRTUAL-RUNTIME_com.webos.service.mediacontroller_raspberrypi4 = "com.webos.service.mediacontroller" VIRTUAL-RUNTIME_com.webos.service.mediacontroller_raspberrypi4-64 = "com.webos.service.mediacontroller" -VIRTUAL-RUNTIME_g-media-pipeline ?= "g-media-pipeline" +VIRTUAL-RUNTIME_g-media-pipeline ?= "" +VIRTUAL-RUNTIME_g-media-pipeline_raspberrypi3 = "g-media-pipeline" +VIRTUAL-RUNTIME_g-media-pipeline_raspberrypi3-64 = "g-media-pipeline" +VIRTUAL-RUNTIME_g-media-pipeline_raspberrypi4 = "g-media-pipeline" +VIRTUAL-RUNTIME_g-media-pipeline_raspberrypi4-64 = "g-media-pipeline" +VIRTUAL-RUNTIME_g-media-pipeline_qemux86 = "g-media-pipeline" VIRTUAL-RUNTIME_g-camera-pipeline ?= "" VIRTUAL-RUNTIME_g-camera-pipeline_raspberrypi4 = "g-camera-pipeline" diff --git a/meta-webos/recipes-webos/umediaserver/umediaserver.bb b/meta-webos/recipes-webos/umediaserver/umediaserver.bb index c4543c7d6..020216640 100644 --- a/meta-webos/recipes-webos/umediaserver/umediaserver.bb +++ b/meta-webos/recipes-webos/umediaserver/umediaserver.bb @@ -14,7 +14,7 @@ DEPENDS += "gstreamer1.0 gstreamer1.0-plugins-base" DEPENDS += "${@'' if '${WEBOS_DISTRO_PRERELEASE}' == '' else 'pmtrace'}" RDEPENDS_${PN} = "umediaserver-configs" -PR = "r17" +PR = "r18" inherit webos_component inherit webos_enhanced_submissions @@ -42,10 +42,10 @@ COMPATIBLE_MACHINE_x86 = "(.*)" COMPATIBLE_MACHINE_x86-64 = "(.*)" WEBOS_GIT_PARAM_BRANCH = "@gav" -WEBOS_VERSION = "1.0.0-24.gav.19_44e71aa82937cfbde73222669aa96ff0c060ea42" +WEBOS_VERSION = "1.0.0-24.gav.20_775b619f47853937593088e627792b7f11a86510" WEBOS_GIT_PARAM_BRANCH_raspberrypi3 = "master" -WEBOS_VERSION_raspberrypi3 = "1.0.0-26_3f1cb5df3ed06d730b90ab9c404fb3cd0a3e219b" +WEBOS_VERSION_raspberrypi3 = "1.0.0-27_dad33357ba323a69885bc11661330ab07296b0c8" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" @@ -65,7 +65,5 @@ FILES_${PN}-python = "${libdir}/${PYTHON_DIR}/site-packages/uMediaServer/* ${dat # ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SECURITY_STRINGFORMAT = "" -SRC_URI += "file://0001-Fix-build-with-boost-1.73.0.patch" - #Remove videooutputd from OSE PACKAGECONFIG_remove_raspberrypi4 = "com.webos.service.videooutput" diff --git a/meta-webos/recipes-webos/umediaserver/umediaserver/0001-Fix-build-with-boost-1.73.0.patch b/meta-webos/recipes-webos/umediaserver/umediaserver/0001-Fix-build-with-boost-1.73.0.patch deleted file mode 100644 index 606bdecb8..000000000 --- a/meta-webos/recipes-webos/umediaserver/umediaserver/0001-Fix-build-with-boost-1.73.0.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 36df18c4f64ead85b6a9619364908fba736fdd1d Mon Sep 17 00:00:00 2001 -From: Martin Jansa -Date: Thu, 4 Jun 2020 16:08:09 -0700 -Subject: [PATCH] Fix build with boost-1.73.0 - -* fixes: -umediaserver/1.0.0-24-r12/git/src/media_client/uMediaClient.cpp:68:8: error: 'replace_if' is not a member of 'std' -umediaserver/1.0.0-24-r12/git/src/media_client/uMediaClient.cpp:68:8: error: 'replace_if' is not a member of 'std' - -and - -In file included from umediaserver/1.0.0-24-r12/recipe-sysroot/usr/include/boost/bind.hpp:30, - from umediaserver/1.0.0-24-r12/recipe-sysroot/usr/include/boost/property_tree/json_parser/detail/parser.hpp:7, - from umediaserver/1.0.0-24-r12/recipe-sysroot/usr/include/boost/property_tree/json_parser/detail/read.hpp:13, - from umediaserver/1.0.0-24-r12/recipe-sysroot/usr/include/boost/property_tree/json_parser.hpp:16, - from umediaserver/1.0.0-24-r12/git/src/utils/rmc.cpp:37: -umediaserver/1.0.0-24-r12/recipe-sysroot/usr/include/boost/bind.hpp:36:1: note: '#pragma message: The practice of declaring the Bind placeholders (_1, _2, ...) in the global namespace is deprecated. Please use + using namespace boost::placeholders, or define BOOST_BIND_GLOBAL_PLACEHOLDERS to retain the current behavior.' - 36 | BOOST_PRAGMA_MESSAGE( - | ^~~~~~~~~~~~~~~~~~~~ ---- - src/media_client/uMediaClient.cpp | 1 + - src/process_pool/ProcessPool.cpp | 2 +- - 2 files changed, 2 insertions(+), 1 deletion(-) - -diff --git a/src/media_client/uMediaClient.cpp b/src/media_client/uMediaClient.cpp -index e865c9b..cd19a18 100755 ---- a/src/media_client/uMediaClient.cpp -+++ b/src/media_client/uMediaClient.cpp -@@ -25,6 +25,7 @@ - - #include "uMediaClient.h" - -+#include - #include - #include - #include -diff --git a/src/process_pool/ProcessPool.cpp b/src/process_pool/ProcessPool.cpp -index e236f94..02b132f 100644 ---- a/src/process_pool/ProcessPool.cpp -+++ b/src/process_pool/ProcessPool.cpp -@@ -120,7 +120,7 @@ void ProcessPool::start(const std::string & type) { - std::string cmd = config.bin + " -s" + service_name; - using namespace std::placeholders; - Process::ptr_t proc = std::make_shared -- (cmd, std::bind(&ProcessPool::exited, this, _1 ,_2), config.env_vars); -+ (cmd, std::bind(&ProcessPool::exited, this, std::placeholders::_1 ,std::placeholders::_2), config.env_vars); - _started_pool.emplace(std::make_pair(service_name, proc_info_t{type, service_name, proc})); - - LOG_INFO(_log, MSGNFO_PROC_STARTED, "New process %d of type %s started.", proc->pid(), type.c_str()); diff --git a/meta-webos/recipes-webos/umediaserver/umediaserver/raspberrypi4/0001-Fix-build-with-boost-1.73.0.patch b/meta-webos/recipes-webos/umediaserver/umediaserver/raspberrypi4/0001-Fix-build-with-boost-1.73.0.patch deleted file mode 100644 index 2a5e1f921..000000000 --- a/meta-webos/recipes-webos/umediaserver/umediaserver/raspberrypi4/0001-Fix-build-with-boost-1.73.0.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 3975cb3d62fbcd23b149387323df89a5e552c67c Mon Sep 17 00:00:00 2001 -From: Martin Jansa -Date: Thu, 4 Jun 2020 16:08:09 -0700 -Subject: [PATCH] Fix build with boost-1.73.0 - -* fixes: -umediaserver/1.0.0-24.gav.5-r11/git/src/resource_manager/AppLifeManager.cpp:79:13: error: 'find_if' was not declared in this scope; did you mean 'boost::mpl::find_if'? -umediaserver/1.0.0-24.gav.5-r11/git/src/resource_manager/AppLifeManager.cpp:93:13: error: 'find_if' was not declared in this scope; did you mean 'boost::mpl::find_if'? -umediaserver/1.0.0-24.gav.5-r11/git/src/resource_manager/AppLifeManager.cpp:238:13: error: 'find_if' was not declared in this scope; did you mean 'boost::mpl::find_if'? -umediaserver/1.0.0-24.gav.5-r11/git/src/media_client/uMediaClient.cpp:68:8: error: 'replace_if' is not a member of 'std' ---- - src/media_client/uMediaClient.cpp | 1 + - src/resource_manager/AppLifeManager.cpp | 7 ++++--- - 2 files changed, 5 insertions(+), 3 deletions(-) - -diff --git a/src/media_client/uMediaClient.cpp b/src/media_client/uMediaClient.cpp -index 2955387..fa192d0 100644 ---- a/src/media_client/uMediaClient.cpp -+++ b/src/media_client/uMediaClient.cpp -@@ -25,6 +25,7 @@ - - #include "uMediaClient.h" - -+#include - #include - #include - #include -diff --git a/src/resource_manager/AppLifeManager.cpp b/src/resource_manager/AppLifeManager.cpp -index 582339b..92faa6d 100644 ---- a/src/resource_manager/AppLifeManager.cpp -+++ b/src/resource_manager/AppLifeManager.cpp -@@ -15,6 +15,7 @@ - // SPDX-License-Identifier: Apache-2.0 - - #include "AppLifeManager.h" -+#include - #include - #include - -@@ -76,7 +77,7 @@ void AppLifeManager::unregisterConnection(const std::string& connection_id) { - return (p.second.connections.find(connection_id) != p.second.connections.end()); - }; - -- auto itr = find_if(_apps.begin(), _apps.end(), func); -+ auto itr = std::find_if(_apps.begin(), _apps.end(), func); - if (itr != _apps.end()) { - itr->second.connections.erase(connection_id); - } -@@ -90,7 +91,7 @@ AppLifeManager::application_connections_t* AppLifeManager::getAppConnection(cons - return (p.second.connections.find(connection_id) != p.second.connections.end()); - }; - -- auto itr = find_if(_apps.begin(), _apps.end(), func); -+ auto itr = std::find_if(_apps.begin(), _apps.end(), func); - if (itr == _apps.end()) { - return nullptr; - } -@@ -235,7 +236,7 @@ std::string AppLifeManager::getAppId(const std::string& connection_id) - return (p.second.connections.find(connection_id) != p.second.connections.end()); - }; - -- auto itr = find_if(_apps.begin(), _apps.end(), func); -+ auto itr = std::find_if(_apps.begin(), _apps.end(), func); - if (itr != _apps.end()) { - ret = itr->second.app_id; - } From 6934f11726e3c0d9ed2c4e63e107a68bf6dc726d Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Wed, 6 Oct 2021 13:13:14 +0900 Subject: [PATCH 0094/2022] ilib-webapp=16,v14.10.0 enact-framework=r13 :Release Notes: Updated iLib version as 14.10.0. Update Enact's corresponding iLib dependency for 14.10.0 :Detailed Notes: Updated iLib version as 14.10.0. (https://github.com/iLib-js/iLib/releases). Fixed a bug where locales from the platform returned by ilib.getLocale() were not recognized properly if They have a 3 letter language name. Changed a default UnitSystem in GB from imperial to metric ilib-webapp: submissions/14..submissions/16 9278b21 Sync up iLib v14.10.0 067c291 Fix platform locale parsing enact-framework: r12..r13 Updated Enact's corresponding iLib depdnency :Testing Performed: See jira ticket for results. :QA Notes: N/A :Issues Addressed: [WRN-5287] Update iLib to fix ilib localing parsing issue [WRN-7480] Screen is not rendered in pseudo strings, when menu language is set. [WRN-8242] CCC: ilib-webapp=16,v14.10.0 enact-framework=r13 Change-Id: Id310ad39ab4b2082bae476a623732585c8bcbad4 --- meta-webos/recipes-webos/enactjs-apps/enact-framework.bb | 4 ++-- meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb index 2083ef8d6..fdfad96f6 100644 --- a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb +++ b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb @@ -43,7 +43,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ global@4.4.0 \ hoist-non-react-statics@2.5.5 \ iconv-lite@0.6.3 \ - ilib@14.9.2 \ + ilib@14.10.0 \ invariant@2.2.4 \ is-function@1.0.2 \ is-stream@1.1.0 \ @@ -76,7 +76,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ # NOTE: We only need to bump PR if we change something OTHER than # PV, SRCREV or the dependencies statement above. -PR = "r12" +PR = "r13" # Skip unneeded tasks do_configure[noexec] = "1" diff --git a/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb b/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb index 036b214a7..b5030abde 100644 --- a/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb +++ b/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=be4f2e45a1215076318af43f833aa178 \ " -WEBOS_VERSION = "14.9.2-14_39c296094cefe480150780fd56444887a31698ad" +WEBOS_VERSION = "14.10.0-16_6c1f21c19b9f9d80342401ba4fefb9ed13f78055" PR = "r8" inherit webos_arch_indep From 6f0bd71d8587642d32811e3361935070d69b8780 Mon Sep 17 00:00:00 2001 From: "jaekyu.lee" Date: Wed, 6 Oct 2021 16:41:01 +0000 Subject: [PATCH 0095/2022] meta-webos-updater: initramfs-ostree-image=webos2 :Release Notes: Fix build error(bitbake --runall patch webos-image) - deltask do_unpack :Detailed Notes: ERROR: An uncaught exception occurred in runqueue .. File "/home/builder/output/build-webos/bitbake/lib/bb/runqueue.py", line 848, in mark_active(tid='/home/builder/output/build-webos/meta-updater/recipes-core/images/initramfs-ostree-image.bb:do_unpack', depth=2): > depends = self.runtaskentries[tid].depends for depend in depends: KeyError: '/home/builder/output/build-webos/meta-updater/recipes-core/images/initramfs-ostree-image.bb:do_unpack' :Testing Performed: only build test :QA Notes: None. :Issues Addressed: [WRN-9017] Fix build issues Change-Id: I75a5b19bcb6ae3ae8de67e9ebe848f975fd4f88a --- .../recipes-core/images/initramfs-ostree-image.bbappend | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/meta-webos-updater/recipes-core/images/initramfs-ostree-image.bbappend b/meta-webos-updater/recipes-core/images/initramfs-ostree-image.bbappend index 24dc59a60..ae246fb32 100644 --- a/meta-webos-updater/recipes-core/images/initramfs-ostree-image.bbappend +++ b/meta-webos-updater/recipes-core/images/initramfs-ostree-image.bbappend @@ -1,6 +1,6 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO_append = "webos2" IMAGE_CMD_cpio_append_sota() { # meta-updater and webos.inc uses different image name, need to match it @@ -9,3 +9,8 @@ IMAGE_CMD_cpio_append_sota() { ${IMGDEPLOYDIR}/${INITRAMFS_IMAGE}-${MACHINE}.${INITRAMFS_FSTYPES} fi } + +# Fix build error (bitbake --runall patch webos-image) +# ERROR: An uncaught exception occurred in runqueue +# KeyError: '/home/builder/output/build-webos/meta-updater/recipes-core/images/initramfs-ostree-image.bb:do_unpack' +deltask do_unpack From 8d44f565bb6124d118c75c25fed7ada2781c8d6a Mon Sep 17 00:00:00 2001 From: "jaekyu.lee" Date: Wed, 13 Oct 2021 06:29:57 +0000 Subject: [PATCH 0096/2022] ose: libhangul=r3 :Release Notes: set default branch master to main :Detailed Notes: Fix build error ERROR: libhangul-0.1.0+gitAUTOINC+4a71565b28-r2 do_fetch: Fetcher failure: Unable to find revision 4a71565b289ac0503673002527584dd356f70719 in branch master .. :Testing Performed: Only build tested :QA Notes: None. :Issues Addressed: [WRN-9017] Fix build issues [WRN-9018] libhangul=r3 initramfs-ostree-image=webos2 Change-Id: I48369ff95d6deceeb02ff846f02f80c54fc6e474 --- meta-webos/recipes-upstreamable/libhangul/libhangul.bb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-upstreamable/libhangul/libhangul.bb b/meta-webos/recipes-upstreamable/libhangul/libhangul.bb index 140dfcadf..f1887c98f 100644 --- a/meta-webos/recipes-upstreamable/libhangul/libhangul.bb +++ b/meta-webos/recipes-upstreamable/libhangul/libhangul.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2016-2017 LG Electronics, Inc. +# Copyright (c) 2016-2021 LG Electronics, Inc. SUMMARY = "Hangul input method library" AUTHOR = "Pugalendhi Ganesan " @@ -7,7 +7,7 @@ SECTION = "libs" LICENSE = "LGPLv2.1" LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343" -PR = "r2" +PR = "r3" inherit gettext inherit autotools @@ -18,7 +18,7 @@ PV = "0.1.0+git${SRCPV}" EXTRA_OECONF += "--libdir=${libdir}/maliit/plugins" -SRC_URI = "git://github.com/choehwanjin/libhangul.git \ +SRC_URI = "git://github.com/choehwanjin/libhangul.git;branch=main \ file://0001-Change-the-project-to-address-code.google.com-p-libh.patch \ file://0002-Add-rule-to-auto-update-when-you-make-dist-ChangeLog.patch \ file://0003-Change-wrong-name-hangul-jongseong-dicompose-decomp.patch \ From cdb0df7f0d4d1ee592a720aa2aa5811b95a6a316 Mon Sep 17 00:00:00 2001 From: Hyunjae Shin Date: Wed, 6 Oct 2021 14:29:17 +0900 Subject: [PATCH 0097/2022] webos.conf: Release webOS OSE v2.13.2 :Release Notes: Set software version as webOS OSE v2.13.2 :Detailed Notes: Set WEBOS_DISTRO_VERSION_MINOR to "13.2" :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: N/A Change-Id: I449b259ac5610dca9375ed81296f2055cc026a5b --- meta-webos/conf/distro/webos.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/conf/distro/webos.conf b/meta-webos/conf/distro/webos.conf index ce4010b28..6cee9fdd3 100644 --- a/meta-webos/conf/distro/webos.conf +++ b/meta-webos/conf/distro/webos.conf @@ -13,7 +13,7 @@ WEBOS_DISTRO_BUILD_CODENAME = "master" # g - github WEBOS_DISTRO_VERSION_MAJOR = "2" -WEBOS_DISTRO_VERSION_MINOR = "13.1" +WEBOS_DISTRO_VERSION_MINOR = "13.2" WEBOS_DISTRO_VERSION_TYPE = "g" DISTRO_VERSION = "${WEBOS_DISTRO_VERSION_MAJOR}.${WEBOS_DISTRO_VERSION_MINOR}.${WEBOS_DISTRO_VERSION_TYPE}" From 0831370dbe5d5e8876a27de277449675faebe141 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 13 Sep 2021 05:10:32 -0700 Subject: [PATCH 0098/2022] webruntime: don't include exportbuildscript task in dependency tree :Release Notes: This caused the builds not to reuse any webruntime sstate if they are built in different directories. :Detailed Notes: Introduced in: [WRN-1740] Implement chromium standalone build using OE configuration [WRN-5579] CCC: webruntime=r49 webos-foxy-hardknott$ bitbake-diffsigs tmp-glibc/stamps/qemux86-webos-linux/webruntime/87.0.4280.88-7-r49.1.do_compile.sigdata.987beb691f78574e57a8c5b0efe53420f589bec478b1d3fea8f43cef5f426c13 ../webos-galactic-hardknott/tmp-glibc/stamps/qemux86-webos-linux/webruntime/87.0.4280.88-7-r49.1.do_compile.sigdata.cae43adc56a91ef196d3eb4b4b6b854ed16838fc1226cb5d66f9af7b75096409 NOTE: Starting bitbake server... runtaskdeps changed: chromium/webruntime_87.bb:do_exportbuildscript with hash 9bd1ad9d8700f8d9d04bf93077e8e6d8f0d65e91502f1ba663ac594cec2db667 changed to chromium/webruntime_87.bb:do_exportbuildscript with hash d601bea0c78979a9e678974f68a2bd88d44e77053233ae576652c46cbcd84482 Dependency on task chromium/webruntime_87.bb:do_exportbuildscript was added with hash d601bea0c78979a9e678974f68a2bd88d44e77053233ae576652c46cbcd84482 Dependency on task chromium/webruntime_87.bb:do_exportbuildscript was removed with hash 9bd1ad9d8700f8d9d04bf93077e8e6d8f0d65e91502f1ba663ac594cec2db667 webos-foxy-hardknott$ bitbake-diffsigs tmp-glibc/stamps/qemux86-webos-linux/webruntime/87.0.4280.88-7-r49.1.do_exportbuildscript.sigdata.9bd1ad9d8700f8d9d04bf93077e8e6d8f0d65e91502f1ba663ac594cec2db667 ../webos-galactic-hardknott/tmp-glibc/stamps/qemux86-webos-linux/webruntime/87.0.4280.88-7-r49.1.do_exportbuildscript.sigdata.d601bea0c78979a9e678974f68a2bd88d44e77053233ae576652c46cbcd84482 NOTE: Starting bitbake server... basehash changed from aef2dda45f5202eeba2cdc41331f7cea64cc2e7ece6a2669d8b4476a7bde0161 to 7f76c74af34ed2084661db31e73ef507566bce968414a72907f68629f4bb8299 Variable TOPDIR value changed from '/jenkins/mjansa/build/ros/webos-foxy-hardknott' to '/jenkins/mjansa/build/ros/webos-galactic-hardknott' List of dependencies for variable TOPDIR is set() List of dependencies for variable WEBOS_DISTRO_TOPDIR_DESCRIBE is {'TOPDIR', 'webos_base_get_metadata_git_describe'} List of dependencies for variable WEBOS_DISTRO_TOPDIR_REVISION is {'base_get_metadata_git_revision', 'TOPDIR'} Remove the dependency on this unused build.sh as it's not being used anywhere, only needed when manually exporting it to somewhere and person doing that can just call "bitbake -c exportbuildscript webruntime" explicitly to get it. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-2206] Analysis the fixes for webruntime(chromium84) build [WRN-7597] CCC: Various build fixes Change-Id: Iebf46f4e9ac73f03aea5e100cec954daf5fe051a --- meta-webos/recipes-webos/chromium/exportbuildscript.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/exportbuildscript.inc b/meta-webos/recipes-webos/chromium/exportbuildscript.inc index 42f5f5309..17849e71f 100644 --- a/meta-webos/recipes-webos/chromium/exportbuildscript.inc +++ b/meta-webos/recipes-webos/chromium/exportbuildscript.inc @@ -144,4 +144,4 @@ EOF chmod +x $filename } -addtask do_exportbuildscript before do_compile after do_configure +addtask do_exportbuildscript after do_configure From bd8c6f62bfebe3487d13e463ca695ebcefaa5f8d Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 4 Aug 2021 19:01:00 -0700 Subject: [PATCH 0099/2022] db8=r35 (update for glibc-2.34) :Release Notes: :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/210788 http://gecko.lge.com/Errors/Details/210787 :Testing Performed: CCC testing :QA Notes: None. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: I5ac1aef5ab29fa0248c4ee6597ac7671aed3cfd4 --- meta-webos/recipes-webos/db8/db8.bb | 3 +- ...ojOsInternal.h-update-for-glibc-2.34.patch | 33 +++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) create mode 100644 meta-webos/recipes-webos/db8/db8/0001-MojOsInternal.h-update-for-glibc-2.34.patch diff --git a/meta-webos/recipes-webos/db8/db8.bb b/meta-webos/recipes-webos/db8/db8.bb index 13164d829..45f6f27dc 100644 --- a/meta-webos/recipes-webos/db8/db8.bb +++ b/meta-webos/recipes-webos/db8/db8.bb @@ -22,7 +22,7 @@ RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_stat} ${VIRTUAL-RUNTIME RDEPENDS_${PN}-tests_append_class-target = " ${VIRTUAL-RUNTIME_bash}" WEBOS_VERSION = "3.2.0-15_d800ccad05c94aa79420f185ba3f87d24c1dd295" -PR = "r34" +PR = "r35" inherit webos_component inherit webos_public_repo @@ -58,3 +58,4 @@ BBCLASSEXTEND = "native" # From http://gpro.lgsvl.com/190951 SRC_URI += "file://0001-CMakeLists.txt-explicitly-link-with-libatomic-to-fix.patch" +SRC_URI += "file://0001-MojOsInternal.h-update-for-glibc-2.34.patch" diff --git a/meta-webos/recipes-webos/db8/db8/0001-MojOsInternal.h-update-for-glibc-2.34.patch b/meta-webos/recipes-webos/db8/db8/0001-MojOsInternal.h-update-for-glibc-2.34.patch new file mode 100644 index 000000000..49c9068a1 --- /dev/null +++ b/meta-webos/recipes-webos/db8/db8/0001-MojOsInternal.h-update-for-glibc-2.34.patch @@ -0,0 +1,33 @@ +From 78cdc602538af6eea6fb6c0020d146e37f7ccf59 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Wed, 4 Aug 2021 18:55:40 -0700 +Subject: [PATCH] MojOsInternal.h: update for glibc-2.34 + +* as https://sourceware.org/pipermail/libc-alpha/2021-August/129718.html says: + * The function pthread_yield has been deprecated; programs should use + the equivalent standard function sched_yield instead. + + it doesn't cause db8 build itself to fail, but some components which use + MojOsInternal.h (like keymanager) also use -Werror which causes: + recipe-sysroot/usr/include/mojodb/core/internal/MojOsInternal.h:345:38: error: 'int pthread_yield()' is deprecated: pthread_yield is deprecated, use sched_yield instead [-Werror=deprecated-declarations] + | 345 | return (MojErr) pthread_yield(); + | | ~~~~~~~~~~~~~^~ + +Signed-off-by: Martin Jansa +--- + inc/core/internal/MojOsInternal.h | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/inc/core/internal/MojOsInternal.h b/inc/core/internal/MojOsInternal.h +index 60c6105..ce72da8 100644 +--- a/inc/core/internal/MojOsInternal.h ++++ b/inc/core/internal/MojOsInternal.h +@@ -342,7 +342,7 @@ inline MojErr MojThreadDetach(MojThreadT thread) + inline MojErr MojThreadYield() + { + #ifdef __USE_GNU +- return (MojErr) pthread_yield(); ++ return (MojErr) sched_yield(); + #else + pthread_yield_np(); + return MojErrNone; From 2400f73c3707298e4488b193c6088a602d9ca03c Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 5 Aug 2021 04:07:25 -0700 Subject: [PATCH 0100/2022] lxc=webosvirt3 (fix runtime dependency on tar) :Release Notes: Adjust runtime dependencies on selected tar provider. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/211505 ERROR: lxc-4.0.6-r0 do_package_qa: QA Issue: lxc rdepends on tar, but it isn't a build dependency, missing tar in DEPENDS or PACKAGECONFIG? [build-deps] :Testing Performed: Only build tested. :QA Notes: None :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: Ic3c08fc9cf4567a192020c90a9e23e3d376d7b25 --- .../recipes-containers/lxc/lxc_%.bbappend | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/meta-webos-virtualization/recipes-containers/lxc/lxc_%.bbappend b/meta-webos-virtualization/recipes-containers/lxc/lxc_%.bbappend index 43c5f691b..20d2cde1f 100644 --- a/meta-webos-virtualization/recipes-containers/lxc/lxc_%.bbappend +++ b/meta-webos-virtualization/recipes-containers/lxc/lxc_%.bbappend @@ -1,6 +1,6 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosvirt2" +EXTENDPRAUTO_append = "webosvirt3" # ERROR: lxc-3.1.0-r0 do_package_qa: QA Issue: lxc-ptest rdepends on bash, but it isnt a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] VIRTUAL-RUNTIME_bash ?= "bash" @@ -10,3 +10,7 @@ RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFE # ERROR: lxc-3.1.0-r0 do_package_qa: QA Issue: lxc-templates rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] RDEPENDS_${PN}-templates_append_class-target = " ${VIRTUAL-RUNTIME_bash}" RDEPENDS_${PN}-templates_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" + +VIRTUAL-RUNTIME_tar ?= "tar" +RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_tar}" +RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_TAR', 'busybox', 'tar', '', d)}" From 39840f43f9947acfed26e41924545f9eb1261507 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 14 Sep 2021 07:15:14 -0700 Subject: [PATCH 0101/2022] wam=r41 (fix build with gcc-11) :Release Notes: :Detailed Notes: Fixes: FAILED: src/platform/CMakeFiles/WebAppMgr.dir/webengine/web_page_blink.cc.o /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot-native/usr/bin/i686-webos-linux/i686-webos-linux-g++ -DBOOST_ALL_NO_LIB -DBOOST_ATOMIC_DYN_LINK -DBOOST_FILESYSTEM_DYN_LINK -DWebAppMgr_EXPORTS -I/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot/usr/include/webruntime -I/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/platform -I/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/platform/webengine -I/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot/usr/include/json-c -I/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/core -I/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/util -I/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/webos -I/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot/usr/include/glib-2.0 -I/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot/usr/lib/glib-2.0/include -I/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src -m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40=/usr/src/debug/wam/1.0.2-53-r40 -fdebug-prefix-map=/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40=/usr/src/debug/wam/1.0.2-53-r40 -fdebug-prefix-map=/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot= -fdebug-prefix-map=/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot-native= -fvisibility-inlines-hidden -m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot -fno-rtti -fno-exceptions -Wall -fpermissive -funwind-tables -std=c++14 -Wno-psabi -Werror -DNDEBUG -fPIC -std=gnu++14 -MD -MT src/platform/CMakeFiles/WebAppMgr.dir/webengine/web_page_blink.cc.o -MF src/platform/CMakeFiles/WebAppMgr.dir/webengine/web_page_blink.cc.o.d -o src/platform/CMakeFiles/WebAppMgr.dir/webengine/web_page_blink.cc.o -c /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/platform/webengine/web_page_blink.cc /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/platform/webengine/web_page_blink.cc: In member function 'virtual void WebPageBlink::LoadProgressChanged(double)': /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/platform/webengine/web_page_blink.cc:691:40: error: 'numeric_limits' is not a member of 'std' 691 | std::abs(progress - 0.1f) < std::numeric_limits::epsilon(); | ^~~~~~~~~~~~~~ /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/platform/webengine/web_page_blink.cc:691:55: error: expected primary-expression before 'float' 691 | std::abs(progress - 0.1f) < std::numeric_limits::epsilon(); | ^~~~~ /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/platform/webengine/web_page_blink.cc: In member function 'double WebPageBlink::DevicePixelRatio()': /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/platform/webengine/web_page_blink.cc:1076:42: error: 'numeric_limits' is not a member of 'std' 1076 | std::abs(ratio_x - ratio_y) < std::numeric_limits::epsilon(); | ^~~~~~~~~~~~~~ /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/platform/webengine/web_page_blink.cc:1076:57: error: expected primary-expression before 'float' 1076 | std::abs(ratio_x - ratio_y) < std::numeric_limits::epsilon(); | ^~~~~ :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: I63f4746c58412e9559677373b4c4c6fdc48d2db7 --- meta-webos/recipes-webos/wam/wam.bb | 6 ++- .../wam/wam/0001-Fix-build-with-gcc-11.patch | 50 +++++++++++++++++++ 2 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 meta-webos/recipes-webos/wam/wam/0001-Fix-build-with-gcc-11.patch diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index 89f3f8075..bea360928 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -19,7 +19,7 @@ VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" WEBOS_VERSION = "1.0.2-54_8de10667b88c163b669a760056d3b5dc24a3f222" -PR = "r40" +PR = "r41" WAM_BUILD_SYSTEM = "webos_qmake6" WAM_BUILD_SYSTEM_webos = "webos_cmake" @@ -35,7 +35,9 @@ inherit webos_public_repo WAM_DATA_DIR = "${webos_execstatedir}/${BPN}" -SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" +SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE} \ + file://0001-Fix-build-with-gcc-11.patch \ +" S = "${WORKDIR}/git" WEBOS_SYSTEM_BUS_SKIP_DO_TASKS = "1" diff --git a/meta-webos/recipes-webos/wam/wam/0001-Fix-build-with-gcc-11.patch b/meta-webos/recipes-webos/wam/wam/0001-Fix-build-with-gcc-11.patch new file mode 100644 index 000000000..03b254040 --- /dev/null +++ b/meta-webos/recipes-webos/wam/wam/0001-Fix-build-with-gcc-11.patch @@ -0,0 +1,50 @@ +From 378acc43ee3218d704ff36c57ea60b3d88e21632 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Tue, 14 Sep 2021 07:11:32 -0700 +Subject: [PATCH] Fix build with gcc-11 + +:Release Notes: + +:Detailed Notes: +Fixes: +FAILED: src/platform/CMakeFiles/WebAppMgr.dir/webengine/web_page_blink.cc.o +/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot-native/usr/bin/i686-webos-linux/i686-webos-linux-g++ -DBOOST_ALL_NO_LIB -DBOOST_ATOMIC_DYN_LINK -DBOOST_FILESYSTEM_DYN_LINK -DWebAppMgr_EXPORTS -I/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot/usr/include/webruntime -I/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/platform -I/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/platform/webengine -I/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot/usr/include/json-c -I/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/core -I/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/util -I/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/webos -I/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot/usr/include/glib-2.0 -I/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot/usr/lib/glib-2.0/include -I/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src -m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40=/usr/src/debug/wam/1.0.2-53-r40 -fdebug-prefix-map=/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40=/usr/src/debug/wam/1.0.2-53-r40 -fdebug-prefix-map=/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot= -fdebug-prefix-map=/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot-native= -fvisibility-inlines-hidden -m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot -fno-rtti -fno-exceptions -Wall -fpermissive -funwind-tables -std=c++14 -Wno-psabi -Werror -DNDEBUG -fPIC -std=gnu++14 -MD -MT src/platform/CMakeFiles/WebAppMgr.dir/webengine/web_page_blink.cc.o -MF src/platform/CMakeFiles/WebAppMgr.dir/webengine/web_page_blink.cc.o.d -o src/platform/CMakeFiles/WebAppMgr.dir/webengine/web_page_blink.cc.o -c /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/platform/webengine/web_page_blink.cc +/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/platform/webengine/web_page_blink.cc: In member function 'virtual void WebPageBlink::LoadProgressChanged(double)': +/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/platform/webengine/web_page_blink.cc:691:40: error: 'numeric_limits' is not a member of 'std' + 691 | std::abs(progress - 0.1f) < std::numeric_limits::epsilon(); + | ^~~~~~~~~~~~~~ +/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/platform/webengine/web_page_blink.cc:691:55: error: expected primary-expression before 'float' + 691 | std::abs(progress - 0.1f) < std::numeric_limits::epsilon(); + | ^~~~~ +/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/platform/webengine/web_page_blink.cc: In member function 'double WebPageBlink::DevicePixelRatio()': +/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/platform/webengine/web_page_blink.cc:1076:42: error: 'numeric_limits' is not a member of 'std' + 1076 | std::abs(ratio_x - ratio_y) < std::numeric_limits::epsilon(); + | ^~~~~~~~~~~~~~ +/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/git/src/platform/webengine/web_page_blink.cc:1076:57: error: expected primary-expression before 'float' + 1076 | std::abs(ratio_x - ratio_y) < std::numeric_limits::epsilon(); + | ^~~~~ + +:Testing Performed: +Only build tested. + +:QA Notes: +No change to image. + +:Issues Addressed: +[PLAT-141293] Create GPVB with Yocto 3.4 Honister +--- + src/platform/webengine/web_page_blink.cc | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/platform/webengine/web_page_blink.cc b/src/platform/webengine/web_page_blink.cc +index 73a7e4e..c8deb61 100644 +--- a/src/platform/webengine/web_page_blink.cc ++++ b/src/platform/webengine/web_page_blink.cc +@@ -17,6 +17,7 @@ + #include "web_page_blink.h" + + #include ++#include + #include + #include + From a3680e1110efbc33cd59c83410e602d05a155d04 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 21 Aug 2020 13:52:25 -0700 Subject: [PATCH 0102/2022] systemd=smack2 (fix build with smack enabled) :Release Notes: :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth [WRN-7597] CCC: Various build fixes Change-Id: I7f5dd9b997e6be8e7977773d88b3fe178f7c562e --- ...ileio.c-fix-build-with-smack-enabled.patch | 39 +++++++++++++++++++ .../recipes-core/systemd/systemd_%.bbappend | 5 ++- 2 files changed, 42 insertions(+), 2 deletions(-) create mode 100644 meta-webos-smack/recipes-core/systemd/files/0001-fileio.c-fix-build-with-smack-enabled.patch diff --git a/meta-webos-smack/recipes-core/systemd/files/0001-fileio.c-fix-build-with-smack-enabled.patch b/meta-webos-smack/recipes-core/systemd/files/0001-fileio.c-fix-build-with-smack-enabled.patch new file mode 100644 index 000000000..90bfaab4e --- /dev/null +++ b/meta-webos-smack/recipes-core/systemd/files/0001-fileio.c-fix-build-with-smack-enabled.patch @@ -0,0 +1,39 @@ +From ba4607c9bc28fd2f93d49f5c60174994fb597bd8 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Fri, 21 Aug 2020 13:50:06 -0700 +Subject: [PATCH] fileio.c: fix build with smack enabled + +FAILED: src/basic/libbasic.a.p/fileio.c.o +aarch64-webos-linux-gcc -march=armv8-a+crc -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=/jenkins/mjansa/build/webos-auto/gatesgarth/BUILD/work/sa8155-webos-linux/systemd/1_246-r0-lg1/recipe-sysroot -Isrc/basic/libbasic.a.p -Isrc/basic -I../git/src/basic -Isrc/boot -I../git/src/boot -Isrc/home -I../git/src/home -Isrc/shared -I../git/src/shared -Isrc/systemd -I../git/src/systemd -Isrc/journal -I../git/src/journal -Isrc/journal-remote -I../git/src/journal-remote -Isrc/nspawn -I../git/src/nspawn -Isrc/resolve -I../git/src/resolve -Isrc/timesync -I../git/src/timesync -I../git/src/time-wait-sync -Isrc/login -I../git/src/login -Isrc/udev -I../git/src/udev -Isrc/libudev -I../git/src/libudev -Isrc/core -I../git/src/core -Isrc/shutdown -I../git/src/shutdown -I../git/src/xdg-autostart-generator -I../git/src/libsystemd/sd-bus -I../git/src/libsystemd/sd-device -I../git/src/libsystemd/sd-event -I../git/src/libsystemd/sd-hwdb -I../git/src/libsystemd/sd-id128 -I../git/src/libsystemd/sd-netlink -I../git/src/libsystemd/sd-network -I../git/src/libsystemd/sd-resolve -Isrc/libsystemd-network -I../git/src/libsystemd-network -I. -I../git -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -std=gnu99 -Wno-unused-parameter -Wno-missing-field-initializers -Wno-unused-result -Wno-format-signedness -Werror=undef -Wlogical-op -Wmissing-include-dirs -Wold-style-definition -Wpointer-arith -Winit-self -Wfloat-equal -Wsuggest-attribute=noreturn -Werror=missing-prototypes -Werror=implicit-function-declaration -Werror=missing-declarations -Werror=return-type -Werror=incompatible-pointer-types -Werror=format=2 -Wstrict-prototypes -Wredundant-decls -Wmissing-noreturn -Wimplicit-fallthrough=5 -Wshadow -Wendif-labels -Wstrict-aliasing=2 -Wwrite-strings -Werror=overflow -Werror=shift-count-overflow -Werror=shift-overflow=2 -Wdate-time -Wnested-externs -Wno-maybe-uninitialized -ffast-math -fno-common -fdiagnostics-show-option -fno-strict-aliasing -fvisibility=hidden -fstack-protector -fstack-protector-strong --param=ssp-buffer-size=4 -ffunction-sections -fdata-sections -Werror=shadow -include config.h -O2 -fexpensive-optimizations -frename-registers -fomit-frame-pointer -ftree-vectorize -fPIC -fPIC -pthread -fvisibility=default -MD -MQ src/basic/libbasic.a.p/fileio.c.o -MF src/basic/libbasic.a.p/fileio.c.o.d -o src/basic/libbasic.a.p/fileio.c.o -c ../git/src/basic/fileio.c +../git/src/basic/fileio.c: In function 'rename_and_apply_smack_floor_label': +../git/src/basic/fileio.c:1258:13: error: implicit declaration of function 'mac_smack_apply' [-Werror=implicit-function-declaration] + 1258 | r = mac_smack_apply(to, SMACK_ATTR_ACCESS, SMACK_FLOOR_LABEL); + | ^~~~~~~~~~~~~~~ +../git/src/basic/fileio.c:1258:13: warning: nested extern declaration of 'mac_smack_apply' [-Wnested-externs] +../git/src/basic/fileio.c:1258:33: error: 'SMACK_ATTR_ACCESS' undeclared (first use in this function) + 1258 | r = mac_smack_apply(to, SMACK_ATTR_ACCESS, SMACK_FLOOR_LABEL); + | ^~~~~~~~~~~~~~~~~ +../git/src/basic/fileio.c:1258:33: note: each undeclared identifier is reported only once for each function it appears in +../git/src/basic/fileio.c:1258:52: error: 'SMACK_FLOOR_LABEL' undeclared (first use in this function); did you mean 'SMACK_RUN_LABEL'? + 1258 | r = mac_smack_apply(to, SMACK_ATTR_ACCESS, SMACK_FLOOR_LABEL); + | ^~~~~~~~~~~~~~~~~ + | SMACK_RUN_LABEL +cc1: some warnings being treated as errors + +Signed-off-by: Martin Jansa +--- + src/basic/fileio.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/basic/fileio.c b/src/basic/fileio.c +index c3d55d209a..d94fee9234 100644 +--- a/src/basic/fileio.c ++++ b/src/basic/fileio.c +@@ -23,6 +23,7 @@ + #include "parse-util.h" + #include "path-util.h" + #include "socket-util.h" ++#include "smack-util.h" + #include "stdio-util.h" + #include "string-util.h" + #include "tmpfile-util.h" diff --git a/meta-webos-smack/recipes-core/systemd/systemd_%.bbappend b/meta-webos-smack/recipes-core/systemd/systemd_%.bbappend index 01f8a231f..03ba5760a 100644 --- a/meta-webos-smack/recipes-core/systemd/systemd_%.bbappend +++ b/meta-webos-smack/recipes-core/systemd/systemd_%.bbappend @@ -1,12 +1,13 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack1', '', d)}" +EXTENDPRAUTO_append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack2', '', d)}" FILESEXTRAPATHS_prepend := "${THISDIR}/files:" SRC_URI += "${@bb.utils.contains('DISTRO_FEATURES', 'smack', '\ file://0001-SMACK-add-loading-unconfined-label.patch \ file://0001-meson-add-smack-default-process-label-option.patch \ + file://0001-fileio.c-fix-build-with-smack-enabled.patch \ ', '', d)}" SYSTEMD_SMACK_RUN_LABEL = "System" From 375f1bbe1ce6d735c255e6c29eb491710d42a9f2 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 27 May 2021 03:10:56 -0700 Subject: [PATCH 0103/2022] systemd=smack3 (update patch to apply on 248.3) :Release Notes: Newer systemd version was backported to meta-webos-backports, but this patch wasn't ever updated, because nobody builds systemd with smack enabled anymore. :Detailed Notes: Fixes: Applying patch 0001-SMACK-add-loading-unconfined-label.patch patching file src/core/smack-setup.c Hunk #1 succeeded at 23 (offset -2 lines). Hunk #2 succeeded at 438 with fuzz 1 (offset -1 lines). :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [PLAT-141293] Create GPVB with Yocto 3.4 Honister [WRN-7597] CCC: Various build fixes Change-Id: I5d3298c82e9c01d2837b06bb6c79f16923a6ed64 --- .../0001-SMACK-add-loading-unconfined-label.patch | 10 +++++----- .../recipes-core/systemd/systemd_%.bbappend | 2 +- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/meta-webos-smack/recipes-core/systemd/files/0001-SMACK-add-loading-unconfined-label.patch b/meta-webos-smack/recipes-core/systemd/files/0001-SMACK-add-loading-unconfined-label.patch index e67feb571..1eb48ba66 100644 --- a/meta-webos-smack/recipes-core/systemd/files/0001-SMACK-add-loading-unconfined-label.patch +++ b/meta-webos-smack/recipes-core/systemd/files/0001-SMACK-add-loading-unconfined-label.patch @@ -1,4 +1,4 @@ -From e526c2be637c655b8e472538ef5a2522ce1350e4 Mon Sep 17 00:00:00 2001 +From 5d154db18e16b35bd48b4494b22d9f813cdad7ba Mon Sep 17 00:00:00 2001 From: "eugene.todoruk" Date: Thu, 28 Mar 2019 17:35:24 +0300 Subject: [PATCH] SMACK: add loading unconfined label @@ -19,10 +19,10 @@ drop FOREACH_LINE() in systemd version 244, it is replaced. 1 file changed, 67 insertions(+) diff --git a/src/core/smack-setup.c b/src/core/smack-setup.c -index b95e6239d4..1025fd63cc 100644 +index 8cc1696a4f..c2b97ad10c 100644 --- a/src/core/smack-setup.c +++ b/src/core/smack-setup.c -@@ -25,6 +25,57 @@ +@@ -23,6 +23,57 @@ #if ENABLE_SMACK @@ -80,8 +80,8 @@ index b95e6239d4..1025fd63cc 100644 static int fdopen_unlocked_at(int dfd, const char *dir, const char *name, int *status, FILE **ret_file) { int fd, r; FILE *f; -@@ -388,6 +439,22 @@ int mac_smack_setup(bool *loaded_policy) { - return r; +@@ -387,6 +438,22 @@ int mac_smack_setup(bool *loaded_policy) { + return log_emergency_errno(r, "Failed to write Smack onlycap list: %m"); } + r = write_unconfined(); diff --git a/meta-webos-smack/recipes-core/systemd/systemd_%.bbappend b/meta-webos-smack/recipes-core/systemd/systemd_%.bbappend index 03ba5760a..14550f448 100644 --- a/meta-webos-smack/recipes-core/systemd/systemd_%.bbappend +++ b/meta-webos-smack/recipes-core/systemd/systemd_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2019-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack2', '', d)}" +EXTENDPRAUTO_append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack3', '', d)}" FILESEXTRAPATHS_prepend := "${THISDIR}/files:" From 35ce36cd98dd02845478da2d4c717ef33b4a6e47 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 20 Sep 2021 09:24:28 -0700 Subject: [PATCH 0104/2022] webos_configure_manifest.bbclass: fix regexp DeprecationWarnings :Release Notes: More warnings were enabled in recent bitbake: https://git.openembedded.org/bitbake/commit/?id=bc43fbb86361a21dc2d5deb910810c5a77fdabe8 :Detailed Notes: Fixes: WARNING: classes/webos_configure_manifest.bbclass:170: DeprecationWarning: invalid escape sequence \d pattern = re.compile("^(\d+\.\d+\.\d+)" WARNING: classes/webos_configure_manifest.bbclass:171: DeprecationWarning: invalid escape sequence \. "(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?" WARNING: classes/webos_configure_manifest.bbclass:172: DeprecationWarning: invalid escape sequence \+ "(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$") :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: Ieb417b13aa20f41713bae7de9c4ac26724c92a81 --- meta-webos/classes/webos_configure_manifest.bbclass | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/classes/webos_configure_manifest.bbclass b/meta-webos/classes/webos_configure_manifest.bbclass index 90ce6f03b..6654322f2 100644 --- a/meta-webos/classes/webos_configure_manifest.bbclass +++ b/meta-webos/classes/webos_configure_manifest.bbclass @@ -167,9 +167,9 @@ def webos_configure_manifest_application_from_appinfo(d, app_info_file): according to semver.org. """ import re - pattern = re.compile("^(\d+\.\d+\.\d+)" - "(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?" - "(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$") + pattern = re.compile(r"^(\d+\.\d+\.\d+)" + r"(?:-([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?" + r"(?:\+([0-9A-Za-z-]+(?:\.[0-9A-Za-z-]+)*))?$") return re.match(pattern, version) manifest["id"] = app_info["id"] From b0e13bf8004178338dc1cd50b7db96e91517408f Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 20 Sep 2021 09:26:11 -0700 Subject: [PATCH 0105/2022] webruntime: remove version 84 :Release Notes: Remove broken version 84 and keep only 87 everybody is using. :Detailed Notes: 0001-op-ds-build-Added-mksnapshot.gn-for-mksnapshot-targe.patch still used by version 84: meta-webos/recipes-webos/chromium/mksnapshot-cross_84.bb:file://0001-op-ds-build-Added-mksnapshot.gn-for-mksnapshot-targe.patch now it produces useless warning in builds: WARNING: meta-webos/recipes-webos/chromium/mksnapshot-cross_84.bb: Unable to get checksum for mksnapshot-cross-i686 SRC_URI entry 0001-op-ds-build-Added-mksnapshot.gn-for-mksnapshot-targe.patch: file could not be found Remove other now unused patches as well: meta-webos/recipes-webos/chromium/files/0001-op-ds-build-Fix-build-error-when-target-is-arm64.patch meta-webos/recipes-webos/chromium/files/0001-Fix-build-with-gcc-11.patch :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-2206] Analysis the fixes for webruntime(chromium84) build [WRN-7597] CCC: Various build fixes Change-Id: Ie7c575226073371e9607aa72a755836152547e72 --- .../files/0001-Fix-build-with-gcc-11.patch | 25 ------- ...Fix-build-error-when-target-is-arm64.patch | 66 ------------------- .../chromium/mksnapshot-cross_84.bb | 45 ------------- .../chromium/webruntime-repo_84.inc | 20 ------ .../recipes-webos/chromium/webruntime_84.bb | 33 ---------- 5 files changed, 189 deletions(-) delete mode 100644 meta-webos/recipes-webos/chromium/files/0001-Fix-build-with-gcc-11.patch delete mode 100644 meta-webos/recipes-webos/chromium/files/0001-op-ds-build-Fix-build-error-when-target-is-arm64.patch delete mode 100644 meta-webos/recipes-webos/chromium/mksnapshot-cross_84.bb delete mode 100644 meta-webos/recipes-webos/chromium/webruntime-repo_84.inc delete mode 100644 meta-webos/recipes-webos/chromium/webruntime_84.bb diff --git a/meta-webos/recipes-webos/chromium/files/0001-Fix-build-with-gcc-11.patch b/meta-webos/recipes-webos/chromium/files/0001-Fix-build-with-gcc-11.patch deleted file mode 100644 index 8c38bdaf0..000000000 --- a/meta-webos/recipes-webos/chromium/files/0001-Fix-build-with-gcc-11.patch +++ /dev/null @@ -1,25 +0,0 @@ -From 39907eeb02bceb417715b2e5f92bddd540ef8ba9 Mon Sep 17 00:00:00 2001 -From: Martin Jansa -Date: Sat, 1 May 2021 21:16:23 +0000 -Subject: [PATCH] Fix build with gcc-11 - -Signed-off-by: Martin Jansa ---- - .../perfetto/src/trace_processor/containers/string_pool.h | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/third_party/perfetto/src/trace_processor/containers/string_pool.h b/src/third_party/perfetto/src/trace_processor/containers/string_pool.h -index 11ae91cfec..558ff00e8f 100644 ---- a/src/third_party/perfetto/src/trace_processor/containers/string_pool.h -+++ b/src/third_party/perfetto/src/trace_processor/containers/string_pool.h -@@ -20,6 +20,7 @@ - #include - #include - -+#include - #include - #include - --- -2.17.1 - diff --git a/meta-webos/recipes-webos/chromium/files/0001-op-ds-build-Fix-build-error-when-target-is-arm64.patch b/meta-webos/recipes-webos/chromium/files/0001-op-ds-build-Fix-build-error-when-target-is-arm64.patch deleted file mode 100644 index ad69b0e0d..000000000 --- a/meta-webos/recipes-webos/chromium/files/0001-op-ds-build-Fix-build-error-when-target-is-arm64.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 26638c4f91381a4c3a1b069e152c93d6e961bdd7 Mon Sep 17 00:00:00 2001 -From: Youngsoo Choi -Date: Mon, 7 Sep 2020 17:40:10 +0900 -Subject: [PATCH] [op][ds][build] Fix build error when target is arm64 - -:Release Notes: -Fix build error when target is arm64 - -:Detailed Notes: -When build target is arm64(e.g. SA8155, RPi4-64) there is an error on -libjpeg_turbo library as below. - -../../../../../../../../../../../../home2/drabble/webOS/Liberty/Upgradeto84/gpro/auto-work/chromium84-ose/src/third_party/libjpeg_turbo/simd/arm/common/jidctint-neon.c:217:30: -error: incompatible types when initializing type 'int64_t' {aka 'long int'} using type 'int64x1_t' -| 217 | int64_t bitmap_rows_4567 = vreinterpret_s64_s16(bitmap); - -It was impossible to remove only the files which occurs error with NEON -instructions remove all files, which means drop NEON instruction support -from libjpeg_turbo on arm64, as a work around. - -:Testing Performed: -Build succeeds - -:QA Notes: -Test-cases: N/A - -:Issues Addressed: -[PLAT-115645] Prepare OSE/Auto build - -Change-Id: I2cc50d0b22bca9e21b3aa7e8e2b2e8e22bf97933 -Reviewed-on: http://gpro.lge.com/c/webosauto/chromium84/+/285079 -Reviewed-by: Commit Msg Checker -Reviewed-by: Ban Word Checker -Reviewed-by: Youngsoo Choi -Tested-by: Youngsoo Choi ---- - src/third_party/libjpeg_turbo/BUILD.gn | 13 ------------- - 1 file changed, 13 deletions(-) - -diff --git a/src/third_party/libjpeg_turbo/BUILD.gn b/src/third_party/libjpeg_turbo/BUILD.gn -index 20e95f3a46..0c112fab33 100644 ---- a/src/third_party/libjpeg_turbo/BUILD.gn -+++ b/src/third_party/libjpeg_turbo/BUILD.gn -@@ -164,19 +164,6 @@ static_library("simd") { - ] - configs -= [ "//build/config/compiler:default_optimization" ] - configs += [ "//build/config/compiler:optimize_speed" ] -- } else if (current_cpu == "arm64") { -- sources = [ -- "simd/arm/arm64/jsimd.c", -- "simd/arm/arm64/jsimd_neon.S", -- "simd/arm/common/jdcolor-neon.c", -- "simd/arm/common/jdmerge-neon.c", -- "simd/arm/common/jdsample-neon.c", -- "simd/arm/common/jidctfst-neon.c", -- "simd/arm/common/jidctint-neon.c", -- "simd/arm/common/jidctred-neon.c", -- ] -- configs -= [ "//build/config/compiler:default_optimization" ] -- configs += [ "//build/config/compiler:optimize_speed" ] - } else { - sources = [ - "jsimd_none.c", --- -2.17.1 - diff --git a/meta-webos/recipes-webos/chromium/mksnapshot-cross_84.bb b/meta-webos/recipes-webos/chromium/mksnapshot-cross_84.bb deleted file mode 100644 index cfcb04fc6..000000000 --- a/meta-webos/recipes-webos/chromium/mksnapshot-cross_84.bb +++ /dev/null @@ -1,45 +0,0 @@ -# Copyright (c) 2021 LG Electronics, Inc. - -inherit cross - -WEBRUNTIME_REPO_VERSION = "84" -require webruntime-common.inc - -# Intentionaly disable uninative it failed to execute x86 binary on x64 host -# 32bit executable mksnapshot is required to create snapshot for the 32bit target -UNINATIVE_LOADER = "" - -PROVIDES = "mksnapshot-cross-${TARGET_ARCH}" -PN = "mksnapshot-cross-${TARGET_ARCH}" -BPN = "mksnapshot" -PR = "r2" - -TARGET = "v8_snapshot_clang_${TARGET_CPU}/mksnapshot" - -DEPENDS = "glib-2.0-native python-native gcc-runtime" - -SRC_URI_append = " \ -file://0001-op-ds-build-Added-mksnapshot.gn-for-mksnapshot-targe.patch \ -" - -GN_ARGS_append = "\ - use_pmlog=false \ -" - -do_configure() { - export GYP_CHROMIUM_NO_ACTION=1 - export PATH="${S}/depot_tools:$PATH" - - GN_ARGS="${GN_ARGS}" - echo GN_ARGS is ${GN_ARGS} - echo BUILD_TARGETS are ${TARGET} - cd ${S}/src - gn --root=${S}/src --dotfile=mksnapshot.gn gen ${OUT_DIR} --args="${GN_ARGS}" -} - -do_install() { - echo "Installing ${PN}" - install -d ${D}${bindir} - - install ${OUT_DIR}/v8_snapshot_clang_${TARGET_CPU}/mksnapshot ${D}${bindir}/mksnapshot-cross-${TARGET_ARCH} -} diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_84.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_84.inc deleted file mode 100644 index fcbadfb95..000000000 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_84.inc +++ /dev/null @@ -1,20 +0,0 @@ -# Copyright (c) 2021 LG Electronics, Inc. - -LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=916569994c13b72c74223963ee65895d" - -WEBOS_REPO_NAME = "chromium84" -WEBOS_VERSION = "84.0.4147.89-19_09efb52fc30562504ca095a03ff231c5a42f3027" - -WEBOS_REPO_NAME_V8 = "chromium-v8" -WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium84" -WEBOS_VERSION_V8 = "8.4.371.19-chromium84.3_d54017133984b1216f93ffae9da309db4fa9b758" -SRCREV_v8 = "b8071b2f0c803b36e56226b5c21ac180ed793ee9" - -# Fix build error for aarch64 -# http://gpro.lge.com/c/webosauto/chromium84/+/285079 -SRC_URI_append_aarch64 = "\ - file://0001-op-ds-build-Fix-build-error-when-target-is-arm64.patch \ -" -SRC_URI_append = "\ - file://0001-Fix-build-with-gcc-11.patch \ -" diff --git a/meta-webos/recipes-webos/chromium/webruntime_84.bb b/meta-webos/recipes-webos/chromium/webruntime_84.bb deleted file mode 100644 index a90f12763..000000000 --- a/meta-webos/recipes-webos/chromium/webruntime_84.bb +++ /dev/null @@ -1,33 +0,0 @@ -# Copyright (c) 2020-2021 LG Electronics, Inc. -WEBRUNTIME_REPO_VERSION = "84" -require webruntime.inc - -PROVIDES = "virtual/webruntime" - -PR = "${INC_PR}.3" - -# Since _remove is always applied LAST, we cannot implement -# GN_ARGS_remove = "ozone_platform_wayland_external=true" here -# but thanks gn it overrides former gn args values with later ones -# so we just add appropriate args to the end of its list: -PACKAGECONFIG[google_ozone_wayland] = "\ - ozone_platform_wayland=true ozone_platform_wayland_external=false,\ - ozone_platform_wayland=false ozone_platform_wayland_external=true" - -PACKAGECONFIG[v8_lite] = "v8_enable_lite_mode=true,v8_enable_lite_mode=false" - -PACKAGECONFIG_remove="jumbo" - -GN_ARGS_append = " \ - use_system_minigbm=false \ - use_wayland_gbm=false \ -" - -GN_ARGS_append = " \ - libdir=\"${libdir}\"\ - includedir=\"${includedir}\"\ -" - -# TODO: qemux86 build fails -PACKAGECONFIG_remove_qemux86 = "gstreamer umediaserver neva-media gav neva-webrtc" -#END TODO From ee6c5e51b043865cb112139d2556adc1549264c5 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 20 Sep 2021 10:01:14 -0700 Subject: [PATCH 0106/2022] webruntime=r50.* (inherit pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: BUILD_TARGETS are webos:weboswebruntime app_shell ERROR at //build/config/linux/pkg_config.gni:103:17: Script returned non-zero exit code. pkgresult = exec_script(pkg_config_script, args, "value") ^---------- Current dir: /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-8-r49.2/build/Release/ Command: python /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-8-r49.2/git/src/build/config/linux/pkg-config.py -s /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-8-r49.2/recipe-sysroot -a x86 --system_libdir lib xkbcommon Returned 1. stderr: Traceback (most recent call last): File "/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-8-r49.2/git/src/build/config/linux/pkg-config.py", line 253, in sys.exit(main()) File "/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-8-r49.2/git/src/build/config/linux/pkg-config.py", line 148, in main prefix = GetPkgConfigPrefixToStrip(options, args) File "/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-8-r49.2/git/src/build/config/linux/pkg-config.py", line 87, in GetPkgConfigPrefixToStrip "--variable=prefix"] + args, env=os.environ).decode('utf-8') File "/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-8-r49.2/recipe-sysroot-native/usr/lib/python2.7/subprocess.py", line 216, in check_output process = Popen(stdout=PIPE, *popenargs, **kwargs) File "/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-8-r49.2/recipe-sysroot-native/usr/lib/python2.7/subprocess.py", line 394, in __init__ errread, errwrite) File "/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/webruntime/87.0.4280.88-8-r49.2/recipe-sysroot-native/usr/lib/python2.7/subprocess.py", line 1047, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory See //ui/events/ozone/layout/BUILD.gn:12:3: whence it was called. pkg_config("xkbcommon") { ^------------------------ See //ui/events/BUILD.gn:74:15: which caused the file to be included. deps += [ "//ui/events/ozone/layout" ] ^------------------------- :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: Ie4f1000feedb6ea029b80285585bde53fa2d3a7a --- meta-webos/recipes-webos/chromium/webruntime.inc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime.inc b/meta-webos/recipes-webos/chromium/webruntime.inc index 21c3c234c..430e1cc25 100644 --- a/meta-webos/recipes-webos/chromium/webruntime.inc +++ b/meta-webos/recipes-webos/chromium/webruntime.inc @@ -8,6 +8,7 @@ require webruntime-common.inc require exportbuildscript.inc inherit gettext +inherit pkgconfig inherit webruntime_apps inherit webos_filesystem_paths inherit webos_lttng @@ -23,7 +24,7 @@ DEPENDS = "virtual/gettext wayland wayland-native luna-service2 pixman freetype DEPENDS_remove_raspberrypi4 = " xproto" DEPENDS_append_raspberrypi4 = " xorgproto" -INC_PR = "r49" +INC_PR = "r50" # Enable this in webos-local.conf or in recipe to build DEPLOY_CHROMEDRIVER ?= "false" DEPLOY_WAM_DEMO ?= "false" From 7ed0c6130b1ea734c9a754d57c1a450b8e7c992a Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 20 Sep 2021 09:30:20 -0700 Subject: [PATCH 0107/2022] serviceinstaller=r5 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: -- WEBOS_API_VERSION_MAJOR: 2 -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) CMake Error at /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/serviceinstaller/2.0.0-3-r4/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:610 (message): pkg-config tool not found Call Stack (most recent call first): /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/serviceinstaller/2.0.0-3-r4/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:776 (_pkg_check_modules_internal) CMakeLists.txt:28 (pkg_check_modules) :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: Id59946c19b8af793adfc2d8de743aeb3ae875300 --- meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb b/meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb index e4d16b55f..88dc69f5b 100644 --- a/meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb +++ b/meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb @@ -10,12 +10,13 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7ca DEPENDS = "librolegen glib-2.0 libpbnjson luna-service2" WEBOS_VERSION = "2.0.0-3_799c30fc706728d5e0924502bdd0733f25090a2f" -PR = "r4" +PR = "r5" inherit webos_component inherit webos_public_repo inherit webos_enhanced_submissions inherit webos_cmake +inherit webos_pkgconfig SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" From 741c905066c0a535dee5f56aeca9be9414233b86 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 20 Sep 2021 09:34:03 -0700 Subject: [PATCH 0108/2022] webos-wayland-extensions=r6 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: -- WEBOS_API_VERSION_MAJOR: 1 CMake Error at /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/webos-wayland-extensions/1.0.0-42-r5/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:610 (message): pkg-config tool not found Call Stack (most recent call first): /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/webos-wayland-extensions/1.0.0-42-r5/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:776 (_pkg_check_modules_internal) server/CMakeLists.txt:17 (pkg_check_modules) :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: Ifb8b6711e33be35382aee16a69e9ecc621e4d8fe --- .../webos-wayland-extensions/webos-wayland-extensions.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/webos-wayland-extensions/webos-wayland-extensions.bb b/meta-webos/recipes-webos/webos-wayland-extensions/webos-wayland-extensions.bb index f144e5a83..b02533ea0 100644 --- a/meta-webos/recipes-webos/webos-wayland-extensions/webos-wayland-extensions.bb +++ b/meta-webos/recipes-webos/webos-wayland-extensions/webos-wayland-extensions.bb @@ -12,10 +12,11 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "wayland wayland-native" WEBOS_VERSION = "1.0.0-42_bac07bee30665b5f33440c61cff1fcd8f670a24c" -PR = "r5" +PR = "r6" inherit webos_component inherit webos_cmake +inherit webos_pkgconfig inherit webos_enhanced_submissions inherit webos_public_repo From 840188b83806e26f4891f94e3573bfab787991d8 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 20 Sep 2021 11:50:50 -0700 Subject: [PATCH 0109/2022] media-resource-calculator=r6 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) CMake Error at media-resource-calculator/1.0.0-4-r5/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:610 (message): pkg-config tool not found Call Stack (most recent call first): media-resource-calculator/1.0.0-4-r5/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:776 (_pkg_check_modules_internal) CMakeLists.txt:40 (pkg_check_modules) :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: I1e41add673a1d745d21fc15fe37e723eceaac2bb --- .../media-resource-calculator/media-resource-calculator.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/media-resource-calculator/media-resource-calculator.bb b/meta-webos/recipes-webos/media-resource-calculator/media-resource-calculator.bb index ee16d68cf..779b014b3 100644 --- a/meta-webos/recipes-webos/media-resource-calculator/media-resource-calculator.bb +++ b/meta-webos/recipes-webos/media-resource-calculator/media-resource-calculator.bb @@ -14,11 +14,12 @@ DEPENDS = "libpbnjson" EXTRA_OECMAKE += "-DNO_TEST=1" WEBOS_VERSION = "1.0.0-8_c8079f2c44942cc4bcaee39499b0cd66da388d4d" -PR = "r5" +PR = "r6" inherit webos_component inherit webos_enhanced_submissions inherit webos_cmake +inherit webos_pkgconfig inherit webos_machine_dep inherit webos_distro_variant_dep inherit webos_public_repo From 8b943452cb64b0ee05d55cae64eed2130bbc00c3 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 20 Sep 2021 10:44:22 -0700 Subject: [PATCH 0110/2022] wam=r42 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: -- Detecting C compile features - done CMake Error at /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPackageHandleStandardArgs.cmake:230 (message): Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) Call Stack (most recent call first): /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE) /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/wam/1.0.2-53-r40/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:70 (find_package_handle_standard_args) src/CMakeLists.txt:26 (find_package) -- Configuring incomplete, errors occurred! :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: Iab2b57022d6fd93ad568b84e10d82fcaa0b54bb9 --- meta-webos/recipes-webos/wam/wam.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index bea360928..1feaee1d7 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -19,7 +19,7 @@ VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" WEBOS_VERSION = "1.0.2-54_8de10667b88c163b669a760056d3b5dc24a3f222" -PR = "r41" +PR = "r42" WAM_BUILD_SYSTEM = "webos_qmake6" WAM_BUILD_SYSTEM_webos = "webos_cmake" @@ -28,6 +28,7 @@ inherit webos_enhanced_submissions inherit webos_system_bus inherit webos_machine_dep inherit ${WAM_BUILD_SYSTEM} +inherit webos_pkgconfig inherit webos_lttng inherit webos_distro_variant_dep inherit webos_distro_dep From a884cfea55e26234d9be88b260d202478d228b20 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 21 Sep 2021 06:51:54 -0700 Subject: [PATCH 0111/2022] mksnaphost-cross=r2 (inherit pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/241331 BUILD_TARGETS are v8_snapshot_clang_x86/mksnapshot ERROR at //build/config/linux/pkg_config.gni:103:17: Script returned non-zero exit code. pkgresult = exec_script(pkg_config_script, args, "value") ^---------- Current dir: TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-i686/87.0.4280.88-8-r1/build/Release/ Command: python TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-i686/87.0.4280.88-8-r1/git/src/build/config/linux/pkg-config.py -s TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-i686/87.0.4280.88-8-r1/recipe-sysroot-native -a x86 --system_libdir lib glib-2.0 gmodule-2.0 gobject-2.0 gthread-2.0 Returned 1. stderr: Traceback (most recent call last): File "TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-i686/87.0.4280.88-8-r1/git/src/build/config/linux/pkg-config.py", line 253, in sys.exit(main()) File "TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-i686/87.0.4280.88-8-r1/git/src/build/config/linux/pkg-config.py", line 148, in main prefix = GetPkgConfigPrefixToStrip(options, args) File "TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-i686/87.0.4280.88-8-r1/git/src/build/config/linux/pkg-config.py", line 87, in GetPkgConfigPrefixToStrip "--variable=prefix"] + args, env=os.environ).decode('utf-8') File "TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-i686/87.0.4280.88-8-r1/recipe-sysroot-native/usr/lib/python2.7/subprocess.py", line 216, in check_output process = Popen(stdout=PIPE, *popenargs, **kwargs) File "TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-i686/87.0.4280.88-8-r1/recipe-sysroot-native/usr/lib/python2.7/subprocess.py", line 394, in __init__ errread, errwrite) File "TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-i686/87.0.4280.88-8-r1/recipe-sysroot-native/usr/lib/python2.7/subprocess.py", line 1047, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory See //build/config/linux/BUILD.gn:55:3: whence it was called. pkg_config("glib") { ^------------------- See //build/config/compiler/BUILD.gn:250:18: which caused the file to be included. configs += [ "//build/config/linux:compiler" ] ^------------------------------ :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: I5758e6e5d6585d097388df4e17139dd63bf99e66 --- meta-webos/recipes-webos/chromium/mksnapshot-cross_87.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/mksnapshot-cross_87.bb b/meta-webos/recipes-webos/chromium/mksnapshot-cross_87.bb index 90196ce82..114635223 100644 --- a/meta-webos/recipes-webos/chromium/mksnapshot-cross_87.bb +++ b/meta-webos/recipes-webos/chromium/mksnapshot-cross_87.bb @@ -1,6 +1,7 @@ # Copyright (c) 2021 LG Electronics, Inc. inherit cross +inherit pkgconfig WEBRUNTIME_REPO_VERSION = "87" require webruntime-common.inc @@ -13,7 +14,7 @@ UNINATIVE_LOADER = "" PROVIDES = "mksnapshot-cross-${TARGET_ARCH}" PN = "mksnapshot-cross-${TARGET_ARCH}" BPN = "mksnapshot" -PR = "r1" +PR = "r2" TARGET = "v8_snapshot_clang_${TARGET_CPU}/mksnapshot" From 9e7b7b1026200b3964a77e522797c041cf5a73e2 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 21 Sep 2021 06:54:42 -0700 Subject: [PATCH 0112/2022] event-monitor-network=r2 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/241339 -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) CMake Error at TOPDIR/BUILD/work/qemux86-webos-linux/event-monitor-network/1.0.0-5-r1/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:610 (message): pkg-config tool not found Call Stack (most recent call first): TOPDIR/BUILD/work/qemux86-webos-linux/event-monitor-network/1.0.0-5-r1/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:776 (_pkg_check_modules_internal) CMakeLists.txt:29 (pkg_check_modules) :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: I7943261a64f520f7673eb48d6fc94416154af4e5 --- .../event-monitor-network/event-monitor-network.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/event-monitor-network/event-monitor-network.bb b/meta-webos/recipes-webos/event-monitor-network/event-monitor-network.bb index 1902f5a3e..b44f29b9c 100644 --- a/meta-webos/recipes-webos/event-monitor-network/event-monitor-network.bb +++ b/meta-webos/recipes-webos/event-monitor-network/event-monitor-network.bb @@ -12,11 +12,12 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 event-monitor pmloglib libpbnjson libwebosi18n" WEBOS_VERSION = "1.0.0-5_c99401afd1464f8b74766696560bad84a10e5ab4" -PR = "r1" +PR = "r2" inherit webos_component inherit webos_enhanced_submissions inherit webos_cmake +inherit webos_pkgconfig inherit webos_event_monitor_plugin inherit webos_public_repo From aa717f47dc201e14c03fd79b8099df11e05a7494 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 21 Sep 2021 06:55:52 -0700 Subject: [PATCH 0113/2022] com.webos.service.storageaccess=r5 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/241338 -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) CMake Error at TOPDIR/BUILD/work/qemux86-webos-linux/com.webos.service.storageaccess/1.0.0-17-r4/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:610 (message): pkg-config tool not found Call Stack (most recent call first): TOPDIR/BUILD/work/qemux86-webos-linux/com.webos.service.storageaccess/1.0.0-17-r4/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:776 (_pkg_check_modules_internal) CMakeLists.txt:31 (pkg_check_modules) :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: Id155150f3049874bfefd2d01ca71d64716699e38 --- .../com.webos.service.storageaccess.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb b/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb index dabc52d68..6ae547b73 100644 --- a/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb +++ b/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb @@ -13,12 +13,13 @@ COMPATIBLE_MACHINE = "^raspberrypi4$|^qemux86$" COMPATIBLE_MACHINE_raspberrypi4-64 = "^$" WEBOS_VERSION = "1.0.0-17_8d99527ad0e8d42668c570293b4204f77fe1a458" -PR = "r4" +PR = "r5" inherit webos_component inherit webos_public_repo inherit webos_enhanced_submissions inherit webos_cmake +inherit webos_pkgconfig inherit webos_system_bus inherit webos_machine_dep inherit webos_distro_dep From e5a2ffa7f557a15a76f4ff7de3251f3510ff590c Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 21 Sep 2021 06:57:09 -0700 Subject: [PATCH 0114/2022] com.webos.service.unifiedsearch=r1 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/241337 -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) CMake Error at TOPDIR/BUILD/work/qemux86-webos-linux/com.webos.service.unifiedsearch/1.0.0-6-r0/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:610 (message): pkg-config tool not found Call Stack (most recent call first): TOPDIR/BUILD/work/qemux86-webos-linux/com.webos.service.unifiedsearch/1.0.0-6-r0/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:776 (_pkg_check_modules_internal) core/CMakeLists.txt:22 (pkg_check_modules) :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: Ic7139a60b0ab5d2f8eaf334e15fd2837e822263e --- .../com.webos.service.unifiedsearch.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.service.unifiedsearch/com.webos.service.unifiedsearch.bb b/meta-webos/recipes-webos/com.webos.service.unifiedsearch/com.webos.service.unifiedsearch.bb index d773c13ee..1461519c9 100644 --- a/meta-webos/recipes-webos/com.webos.service.unifiedsearch/com.webos.service.unifiedsearch.bb +++ b/meta-webos/recipes-webos/com.webos.service.unifiedsearch/com.webos.service.unifiedsearch.bb @@ -11,11 +11,12 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "luna-service2 libpbnjson glib-2.0 procps sqlite3" WEBOS_VERSION = "1.0.0-6_a911bcccbe9e7c5082a30173d064dca9e7c8ab21" -PR = "r0" +PR = "r1" inherit webos_component inherit webos_enhanced_submissions inherit webos_cmake +inherit webos_pkgconfig inherit webos_public_repo inherit webos_system_bus From fc2d72df9e58c4e35b82bcd19846b8cbcf778b82 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 21 Sep 2021 06:58:17 -0700 Subject: [PATCH 0115/2022] com.webos.service.uwb=r2 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/241336 -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) CMake Error at TOPDIR/BUILD/work/qemux86-webos-linux/com.webos.service.uwb/1.0.0-9-r1/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:610 (message): pkg-config tool not found Call Stack (most recent call first): TOPDIR/BUILD/work/qemux86-webos-linux/com.webos.service.uwb/1.0.0-9-r1/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:776 (_pkg_check_modules_internal) CMakeLists.txt:10 (pkg_check_modules) :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: I71239377d9e53cbbce12fbec2fac6cd265204cea --- meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb b/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb index 7a4721ed8..1fcb1f730 100644 --- a/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb +++ b/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb @@ -9,12 +9,13 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" DEPENDS= "glib-2.0 luna-service2 pmloglib libpbnjson" WEBOS_VERSION = "1.0.0-9_09a65388199c8985c2e0384425768d0d2f3df195" -PR = "r1" +PR = "r2" inherit webos_component inherit webos_public_repo inherit webos_enhanced_submissions inherit webos_cmake +inherit webos_pkgconfig inherit webos_system_bus SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" From e7d419344bfc238c7db7bfcba2dc4538a3f368af Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 21 Sep 2021 06:59:28 -0700 Subject: [PATCH 0116/2022] com.webos.service.mediaindexer=r7 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/241335 -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) Setup for WebOS-Auto build CMake Error at TOPDIR/BUILD/work/qemux86-webos-linux/com.webos.service.mediaindexer/1.0.0-16-r6/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:610 (message): pkg-config tool not found Call Stack (most recent call first): TOPDIR/BUILD/work/qemux86-webos-linux/com.webos.service.mediaindexer/1.0.0-16-r6/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:776 (_pkg_check_modules_internal) src/CMakeLists.txt:28 (pkg_check_modules) :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixe Change-Id: I64884c21281175a5fc2af6ea82b9d532b799bbf5 --- .../com.webos.service.mediaindexer.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb b/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb index babdffd1a..0a5013114 100644 --- a/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb +++ b/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb @@ -6,11 +6,12 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10" WEBOS_VERSION = "1.0.0-16_0856b9721c202f887612865120412b1e29cf6087" -PR = "r6" +PR = "r7" inherit webos_component inherit webos_enhanced_submissions inherit webos_cmake +inherit webos_pkgconfig inherit webos_system_bus inherit webos_public_repo From 107d36e425e1e6e97aeabf3c0fcaf2dee602bc13 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 21 Sep 2021 07:00:46 -0700 Subject: [PATCH 0117/2022] loc-utils=r4 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/241334 -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) CMake Error at TOPDIR/BUILD/work/qemux86-webos-linux/loc-utils/1.0.0-21-r3/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:610 (message): pkg-config tool not found Call Stack (most recent call first): TOPDIR/BUILD/work/qemux86-webos-linux/loc-utils/1.0.0-21-r3/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:776 (_pkg_check_modules_internal) CMakeLists.txt:26 (pkg_check_modules) :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: I6f30d543af22daf26b821467c1f7f7b4fc3f0c4a --- meta-webos/recipes-location/loc-utils/loc-utils.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-location/loc-utils/loc-utils.bb b/meta-webos/recipes-location/loc-utils/loc-utils.bb index 188bd1ab0..9f4502404 100644 --- a/meta-webos/recipes-location/loc-utils/loc-utils.bb +++ b/meta-webos/recipes-location/loc-utils/loc-utils.bb @@ -12,12 +12,13 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 curl pmloglib" WEBOS_VERSION = "1.0.0-21_d0236729512fee0f89ff9bb13b187f09a110481a" -PR = "r3" +PR = "r4" inherit webos_component inherit webos_public_repo inherit webos_enhanced_submissions inherit webos_cmake +inherit webos_pkgconfig SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" From a5d6441ce7003318292feb1763f5a6ba0098c4e9 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 21 Sep 2021 07:01:57 -0700 Subject: [PATCH 0118/2022] bluetooth-sil-api=r4 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/241333 -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) CMake Error at TOPDIR/BUILD/work/qemux86-webos-linux/bluetooth-sil-api/1.0.0-26-r3/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:610 (message): pkg-config tool not found Call Stack (most recent call first): TOPDIR/BUILD/work/qemux86-webos-linux/bluetooth-sil-api/1.0.0-26-r3/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:776 (_pkg_check_modules_internal) CMakeLists.txt:43 (pkg_check_modules) :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: I2f7823a33ba4f9efaf5db2c8e73b011c28de1293 --- meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb index 0e6cd76b0..a699650bc 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb @@ -12,12 +12,13 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0" WEBOS_VERSION = "1.0.0-26_d1236c28f289d0e40f4d26c5d73ad198158e62bb" -PR = "r3" +PR = "r4" inherit webos_component inherit webos_public_repo inherit webos_enhanced_submissions inherit webos_cmake +inherit webos_pkgconfig SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" From 6f9b273cd498acf057abf0045294973359cfbfe4 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 21 Sep 2021 07:45:27 -0700 Subject: [PATCH 0119/2022] luna-surfacemanager=r52 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/241649 Project ERROR: PmLogLib development package not found :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: I924ea00ed6a713dfb863fa630193c2f9c1c78217 --- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index f5f5bed7a..52e21d70d 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -12,9 +12,10 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0" WEBOS_VERSION = "2.0.0-358_738d51789387303f9b92c4cd3ae9f28cb53468aa" -PR = "r51" +PR = "r52" inherit webos_qmake6 +inherit webos_pkgconfig inherit webos_enhanced_submissions inherit webos_lttng inherit webos_public_repo From 53d8c823fb780e70dc49ea72476b65c7b057fd78 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 21 Sep 2021 07:46:32 -0700 Subject: [PATCH 0120/2022] qtwayland-webos=r15 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/241648 Project ERROR: wayland-webos-client development package not found :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: I779d88f2b7123c6f16573f64db98f1babe4de491 --- meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb index 860255e73..a84751c5b 100644 --- a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb +++ b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb @@ -12,9 +12,10 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtwayland webos-wayland-extensions libxkbcommon qt-features-webos wayland-native qtwayland-native" WEBOS_VERSION = "2.0.0-68_629f78182cb8c075dbe88377479658b3bba6cefe" -PR = "r14" +PR = "r15" inherit webos_qmake6 +inherit webos_pkgconfig inherit webos_enhanced_submissions inherit webos_lttng inherit webos_public_repo From fbc3a36f9740acfc914f562144d92282a5a6cf50 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 21 Sep 2021 07:47:32 -0700 Subject: [PATCH 0121/2022] qml-webos-components=r18 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/241647 Project ERROR: glib-2.0 development package not found :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: I9d7c75c2c92966c81708db48e183533b28b5b0cb --- .../recipes-webos/qml-webos-components/qml-webos-components.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb b/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb index a16524cf4..e8b39cd14 100644 --- a/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb +++ b/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb @@ -12,9 +12,10 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative pmloglib qt-features-webos luna-service2 glib-2.0" WEBOS_VERSION = "1.0.0-55_2013bd787616f74e3d879fe115022a915cc324bd" -PR = "r17" +PR = "r18" inherit webos_qmake6 +inherit webos_pkgconfig inherit webos_machine_impl_dep inherit webos_enhanced_submissions inherit webos_lttng From f6fe9fd6ead1ab030b17a4f66943232127ab1c80 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 21 Sep 2021 07:48:23 -0700 Subject: [PATCH 0122/2022] qml-app-components=r3 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/241646 Project ERROR: glib-2.0 development package not found :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: Ibe40deb1e5e7cce3c6ba867e8c219df1a759e6cd --- .../recipes-webos/qml-app-components/qml-app-components.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb b/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb index ac874e22d..154f69cb4 100644 --- a/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb +++ b/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb @@ -9,9 +9,10 @@ DEPENDS = "qtdeclarative luna-service2 glib-2.0" DEPENDS_append = " ${@ 'qtshadertools-native' if d.getVar('QT_VERSION', True) == '6' else '' }" WEBOS_VERSION = "1.0.0-2_fbf3fc0c2f22f9a283a33b3469fd187598609ca0" -PR = "r2" +PR = "r3" inherit webos_qmake6 +inherit webos_pkgconfig inherit webos_enhanced_submissions inherit webos_public_repo From 5ce3a7dbde1f91ac63dfc3d0ad0d257490995431 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 21 Sep 2021 08:12:38 -0700 Subject: [PATCH 0123/2022] qml-webos-framework=r34 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/241679 Project ERROR: webos-platform-interface development package not found :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: I81ae52e31c7224f3811aae9532d4d61af4fa0d77 --- .../recipes-webos/qml-webos-framework/qml-webos-framework.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb b/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb index 94d207b28..59d57cf0e 100644 --- a/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb +++ b/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb @@ -19,9 +19,10 @@ RPROVIDES_${PN}-examples = " \ " WEBOS_VERSION = "1.0.0-160_d89ab0a01a224a6139bdfa916736df67ff6dda44" -PR = "r33" +PR = "r34" inherit webos_qmake6 +inherit webos_pkgconfig inherit webos_enhanced_submissions inherit webos_machine_dep inherit webos_app_generate_security_files From 8a34e25f0a17e4bd3eff60e62bd7d950f7ebcf4f Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 21 Sep 2021 07:49:31 -0700 Subject: [PATCH 0124/2022] qml-webos-bridge=r18 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/241645 Project ERROR: glib-2.0 development package not found :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: Ic421a5dfae937a32ff82338792efbd021d89fbe1 --- meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb b/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb index 19fbfa9ec..321451b5a 100644 --- a/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb +++ b/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb @@ -13,9 +13,10 @@ DEPENDS = "qtdeclarative luna-service2 glib-2.0" RDEPENDS_${PN} += "qml-webos-components" WEBOS_VERSION = "1.0.0-125_7f489c3f7f76201058979c00b5095703277f815a" -PR = "r17" +PR = "r18" inherit webos_qmake6 +inherit webos_pkgconfig inherit webos_enhanced_submissions inherit webos_qmllint inherit webos_public_repo From f13001cfd36aa05a4f38fa54e7d006680dfea829 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 21 Sep 2021 07:50:25 -0700 Subject: [PATCH 0125/2022] bluetooth-sil-bluez5=r4 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/241644 -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) CMake Error at TOPDIR/BUILD/work/qemux86-webos-linux/bluetooth-sil-bluez5/0.1.0-75-r3/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:610 (message): pkg-config tool not found Call Stack (most recent call first): TOPDIR/BUILD/work/qemux86-webos-linux/bluetooth-sil-bluez5/0.1.0-75-r3/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:776 (_pkg_check_modules_internal) CMakeLists.txt:37 (pkg_check_modules) :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: I36866160d77aea7df4d9c604197266114be39375 --- meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb index 7d27f18cc..b0564a1d9 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb @@ -18,12 +18,13 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES ??= "" RDEPENDS_${PN} += "${@ bb.utils.contains('WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES', 'FTP', 'bluez5-obex', '', d)}" WEBOS_VERSION = "0.1.0-75_a9d9cb0483288289f2911c809b112f13ddf01b02" -PR = "r3" +PR = "r4" inherit webos_component inherit webos_public_repo inherit webos_enhanced_submissions inherit webos_cmake +inherit webos_pkgconfig inherit webos_machine_impl_dep inherit webos_machine_dep inherit webos_distro_dep From a7d61e89ce5c549d425ea968d4bdff1a6034ca6b Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 24 Sep 2021 05:16:45 -0700 Subject: [PATCH 0126/2022] com.webos.service.ai=r5 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/242522 -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) CMake Error at TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/com.webos.service.ai/1.0.0-10-r4/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:610 (message): pkg-config tool not found Call Stack (most recent call first): TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/com.webos.service.ai/1.0.0-10-r4/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:776 (_pkg_check_modules_internal) CMakeLists.txt:19 (pkg_check_modules) :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: I2b3bbcaf5aaaefdd2ce56feb8349f07e042278b3 --- .../recipes-webos/com.webos.service.ai/com.webos.service.ai.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.service.ai/com.webos.service.ai.bb b/meta-webos/recipes-webos/com.webos.service.ai/com.webos.service.ai.bb index 4d3dcd750..0d76f66e1 100644 --- a/meta-webos/recipes-webos/com.webos.service.ai/com.webos.service.ai.bb +++ b/meta-webos/recipes-webos/com.webos.service.ai/com.webos.service.ai.bb @@ -17,13 +17,14 @@ COMPATIBLE_MACHINE_raspberrypi3-64 = "^$" COMPATIBLE_MACHINE_raspberrypi4-64 = "^$" WEBOS_VERSION = "1.0.0-10_bca8a9b3669caae7173ea6196cdbfd86a88bb666" -PR = "r4" +PR = "r5" inherit systemd inherit webos_public_repo inherit webos_component inherit webos_enhanced_submissions inherit webos_cmake +inherit webos_pkgconfig inherit webos_system_bus inherit webos_machine_impl_dep From 6879889f4783ca6080b37e300bf47c2b2fb9ba5f Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 24 Sep 2021 03:50:18 -0700 Subject: [PATCH 0127/2022] com.webos.service.tts=r5 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/242463 -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) CMake Error at TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/com.webos.service.tts/1.0.0-20-r4/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:610 (message): pkg-config tool not found Call Stack (most recent call first): TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/com.webos.service.tts/1.0.0-20-r4/recipe-sysroot-native/usr/share/cmake-3.21/Modules/FindPkgConfig.cmake:776 (_pkg_check_modules_internal) src/engines/audio/pulse/CMakeLists.txt:19 (pkg_check_modules) :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: I33267091d0bac8fb1d5b2b1abd1630f9bf429c1a --- .../com.webos.service.tts/com.webos.service.tts.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb b/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb index 32daff76f..c38ea9be5 100644 --- a/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb +++ b/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb @@ -14,12 +14,13 @@ COMPATIBLE_MACHINE_raspberrypi3-64 = "^$" COMPATIBLE_MACHINE_raspberrypi4-64 = "^$" WEBOS_VERSION = "1.0.0-20_dba2c3804230e47b90b317282debcf938b6656c3" -PR = "r4" +PR = "r5" inherit webos_component inherit webos_public_repo inherit webos_enhanced_submissions inherit webos_cmake +inherit webos_pkgconfig inherit webos_system_bus SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" From f3ecdebc0535a3e75010fdfcd02654658fc88ce6 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 30 Sep 2021 01:04:08 -0700 Subject: [PATCH 0128/2022] com.webos.app.test.smack.native=r3 (inherit webos_pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through webos_pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/244787 Project ERROR: glib-2.0 development package not found :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes Change-Id: I760005a59d6919744aeb027b205506a1404f11b8 --- .../com.webos.app.test.smack.native.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos-smack/recipes-webos/com.webos.app.test.smack.native/com.webos.app.test.smack.native.bb b/meta-webos-smack/recipes-webos/com.webos.app.test.smack.native/com.webos.app.test.smack.native.bb index 62ca639f7..e025edcbd 100644 --- a/meta-webos-smack/recipes-webos/com.webos.app.test.smack.native/com.webos.app.test.smack.native.bb +++ b/meta-webos-smack/recipes-webos/com.webos.app.test.smack.native/com.webos.app.test.smack.native.bb @@ -9,13 +9,14 @@ WEBOS_VERSION = "1.0.0-1_083b69c1827edf5214dd78d8ac0cab96407b000b" inherit webos_enhanced_submissions inherit webos_qmake6 +inherit webos_pkgconfig inherit webos_app inherit webos_public_repo SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE} \ file://0001-Fix-build-with-qt-6.patch \ " -PR = "r2" +PR = "r3" S = "${WORKDIR}/git" DEPENDS = "qtbase qt-features-webos qtdeclarative glib-2.0" From 518d3a65590b01eca405381a3467d14dd1bea20f Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 30 Sep 2021 02:46:10 -0700 Subject: [PATCH 0129/2022] webos-recipe-blacklist.inc: blacklist sysdig due to our jsoncpp bbappend :Release Notes: Blacklist sysdig because it doesn't build with jsoncpp with extensions disabled. :Detailed Notes: jsoncpp bbappend was introduced in: commit a388b6aab941f399fae115139ed21f19a4a89571 Author: Aleksey Dotsenko Date: Tue Jul 6 13:23:18 2021 +0300 jsoncpp=webos1 :Release Notes: Configure bitbake receipe to build jsoncpp without using c++ exception. :Detailed Notes: Due to WAM component does not use exceptions and should use jsoncpp library do configure jsoncpp to not use c++ exception. Add DJSON_USE_EXCEPTION=0 to CXXFLAGS. and since then sysdig fails to build with: http://gecko.lge.com/Errors/Details/244788 FAILED: userspace/sysdig/sysdig : && TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0/recipe-sysroot-native/usr/bin/arm-webos-linux-gnueabi/arm-webos-linux-gnueabi-g++ -mthumb -mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a7 -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0/recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0=/usr/src/debug/sysdig/0.27.1-r0 -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0=/usr/src/debug/sysdig/0.27.1-r0 -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0/recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0/recipe-sysroot-native= -fvisibility-inlines-hidden -mthumb -mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a7 -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0/recipe-sysroot -Wall -ggdb -std=c++0x -O3 -fno-strict-aliasing -DNDEBUG -mthumb -mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a7 -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0/recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0=/usr/src/debug/sysdig/0.27.1-r0 -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0=/usr/src/debug/sysdig/0.27.1-r0 -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0/recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0/recipe-sysroot-native= -fvisibility-inlines-hidden -mthumb -mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a7 -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0/recipe-sysroot -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -fmacro-prefix-map=TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0=/usr/src/debug/sysdig/0.27.1-r0 -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0=/usr/src/debug/sysdig/0.27.1-r0 -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0/recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0/recipe-sysroot-native= -Wl,-z,relro,-z,now -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -fmacro-prefix-map=TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0=/usr/src/debug/sysdig/0.27.1-r0 -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0=/usr/src/debug/sysdig/0.27.1-r0 -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0/recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/sysdig/0.27.1-r0/recipe-sysroot-native= -Wl,-z,relro,-z,now -rdynamic userspace/sysdig/CMakeFiles/sysdig.dir/fields_info.cpp.o userspace/sysdig/CMakeFiles/sysdig.dir/sysdig.cpp.o -o userspace/sysdig/sysdig userspace/libsinsp/libsinsp.a userspace/libscap/libscap.a -lelf -lz -lcurl -ljsoncpp -ltbb -lcares -lgrpc++_unsecure -lgrpc_unsecure -lprotobuf -lcares -lgrpc++_unsecure -lgrpc_unsecure -lprotobuf -ljq -lb64 -lrt -lanl -lssl -lcrypto -lluajit-5.1 -ldl -lpthread && : userspace/libsinsp/libsinsp.a(mesos.cpp.o)(.ARM.extab.text._ZN10mesos_http9try_parseERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEES7_+0x94): error: undefined reference to 'typeinfo for Json::Exception' collect2: error: ld returned 1 exit status :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-438] Include jsoncpp into build. [WRN-404] QT-less implementation [WRN-7359] CCC: jsoncpp=webos1 [WRN-7597] CCC: Various build fixes Change-Id: Ifa23c48e588ee56586e27d57ab12b3442b74d8be --- meta-webos/conf/distro/include/webos-recipe-blacklist.inc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/meta-webos/conf/distro/include/webos-recipe-blacklist.inc b/meta-webos/conf/distro/include/webos-recipe-blacklist.inc index cf82cee5d..7b5951422 100644 --- a/meta-webos/conf/distro/include/webos-recipe-blacklist.inc +++ b/meta-webos/conf/distro/include/webos-recipe-blacklist.inc @@ -155,6 +155,8 @@ PNBLACKLIST[libpeas] ?= "ERROR: libpeas-1.25.3-r0 do_configure: meson failed: te # meta-virtualization/recipes-extended/xen/xen-tools_git.bb PNBLACKLIST[xen-tools] ?= "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', 'Fails to build with gold, details in https://lists.yoctoproject.org/g/meta-virtualization/message/5202', '', d)}" +PNBLACKLIST[sysdig] ?= "Doesn't build with jsoncpp with exceptions disabled, meta-webos/recipes-devtools/jsoncpp/jsoncpp_%.bbappend adds -DJSON_USE_EXCEPTION=0" + # meta-virtualization/recipes-extended/xen/xen-python2.bb PNBLACKLIST[xen-python2] ?= "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', 'Depends on blacklisted xen-tools', '', d)}" # meta-virtualization/recipes-extended/xen/xen_git.bb From d6e2a74d0ecd528f89a40b1e08263fd9d07d1f94 Mon Sep 17 00:00:00 2001 From: Myungchul Kim Date: Thu, 14 Oct 2021 16:11:42 +0900 Subject: [PATCH 0130/2022] webos-fluentbit-plugins=21 :Release Notes: Update webosreporter's password :Detailed Notes: webos-fluentbit-plugins: submissions/20..submissions/21 bc4f202 Update webosreporter's password :Testing Performed: See the JIRA CCC Ticket :QA Notes: N/A :Issues Addressed: [WRN-9049] CCC: webos-fluentbit-plugins=21 [WRN-8284] New jira tickets are not created, after generating a codedump event. Change-Id: Ia3ec9f4d595f2b08153b243358ac219e9ac2b3a6 --- .../webos-fluentbit-plugins/webos-fluentbit-plugins.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb index 5230f0044..a6a2e4e4b 100644 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "glib-2.0 luna-service2 libpbnjson fluentbit" RDEPENDS_${PN} = "nyx-utils python3-core python3-requests python3-atlassian-python-api" -WEBOS_VERSION = "1.0.0-20_c85f2e8912ee45fdad054925257990002528ae39" +WEBOS_VERSION = "1.0.0-21_c5cafa3fca9a717e9fa2fd48ddff83dac161f5fa" PR = "r3" inherit webos_component From b6378bd7be87080d016eaca65346da8970fc964d Mon Sep 17 00:00:00 2001 From: Krishna Date: Thu, 14 Oct 2021 07:24:01 +0530 Subject: [PATCH 0131/2022] ose: com.webos.service.pdm=64 :Release Notes: Fix for Improper productName :Detailed Notes: Removed the camera as productName and updated as per ID_MODEL com.webos.service.pdm: submissions/63..submissions/64 b3ff339 Fix for Improper productName :Testing Performed: Refer [WRN-9019] for test results :QA Notes: NA :Issues Addressed: [WRN-9019] CCC: com.webos.service.pdm=64 [WRN-8942] Improper productName Change-Id: Ib4da792602c96a9e9d7a522befcc99a7c8eedca4 --- .../com.webos.service.pdm/com.webos.service.pdm.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb b/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb index 3266e9f57..c74b4fd6c 100644 --- a/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb +++ b/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb @@ -16,7 +16,7 @@ RDEPENDS_${PN} = "fuse-utils hdparm gphoto2 gphotofs sdparm gptfdisk-sgdisk e2fs RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_pdm-plugin}" -WEBOS_VERSION = "1.0.1-63_8bd7c6175eb2ca1d20dd628c99ac9f77b9cb1a90" +WEBOS_VERSION = "1.0.1-64_1eba3b4d88b1c9f3aafa86fef18f8b87d47c7dc9" PR = "r5" inherit webos_component From 4714046a5d5f3d9cca143d5d05a45532bbbf442e Mon Sep 17 00:00:00 2001 From: "taeyoung.hong" Date: Fri, 8 Oct 2021 15:49:26 +0900 Subject: [PATCH 0132/2022] ose: enact-sandstone=r6 :Release Notes: Move sandstone from PRO layer to OSE layer :Detailed Notes: Move sandstone from PRO layer to OSE layer Move sandstone related code from PRO layer to OSE layer :Testing Performed: Verf built and locally tested :QA Notes: :Issues Addressed: [WRN-6874] Move sandstone from PRO layer to OSE layer [WRN-8410] CCC: Move sandstone from PRO layer to OSE layer Change-Id: Iaab04d02b91486f0bde103b0340a72db4927a87f --- meta-webos/classes/webos_enactjs_app.bbclass | 15 +- .../enactjs-apps/enact-sandstone.bb | 128 ++++++++++++++++++ 2 files changed, 141 insertions(+), 2 deletions(-) create mode 100644 meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb diff --git a/meta-webos/classes/webos_enactjs_app.bbclass b/meta-webos/classes/webos_enactjs_app.bbclass index 31bac83ae..3da35acc3 100644 --- a/meta-webos/classes/webos_enactjs_app.bbclass +++ b/meta-webos/classes/webos_enactjs_app.bbclass @@ -20,9 +20,9 @@ inherit webos_enactjs_env # Dependencies: # - ilib-webapp so we can override NPM ilib dependency with device submission # - mksnapshot-cross to use the mksnapshot binary to build v8 app snapshot blobs -# - enact-framework to use a shared Enact framework libraries +# - enact-framework, enact-sandstone to use a shared Enact framework libraries # - coreutils-native to use timeout utility to prevent frozen NPM processes -WEBOS_ENACTJS_APP_DEPENDS = "ilib-webapp mksnapshot-cross-${TARGET_ARCH} enact-framework coreutils-native" +WEBOS_ENACTJS_APP_DEPENDS = "ilib-webapp mksnapshot-cross-${TARGET_ARCH} enact-framework enact-sandstone coreutils-native" DEPENDS_append = " ${WEBOS_ENACTJS_APP_DEPENDS}" # chromium doesn't build for armv[45]* @@ -111,6 +111,17 @@ do_compile() { cp -f package.json package.json.bak + if [ -f ${S}/${WEBOS_ENACTJS_PROJECT_PATH}/package.json ] ; then + export ENACTJS_FRAMEWORK_VARIANT=$(${WEBOS_NODE_BIN} -e " \ + try { \ + const deps = require(process.argv[1]).dependencies || []; \ + if (Object.keys(deps).includes('@enact/sandstone')) { \ + console.log('-sandstone'); \ + } + } catch(e) {} \ + " ${S}/${WEBOS_ENACTJS_PROJECT_PATH}/package.json) + fi + # apply shrinkwrap override, rerouting to shared enact framework tarballs as needed if [ "${WEBOS_ENACTJS_SHRINKWRAP_OVERRIDE}" = "true" ] ; then bbnote "Attempting to use submission enact framework" diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb b/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb new file mode 100644 index 000000000..b5ecff792 --- /dev/null +++ b/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb @@ -0,0 +1,128 @@ +# Copyright (c) 2020-2021 LG Electronics, Inc. + +SUMMARY = "Enact Sandstone standard override used for Enact apps" +AUTHOR = "Jason Robitaille " +SECTION = "webos/apps" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://enact/LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e" + +inherit webos_enact_repo +inherit webos_arch_indep +inherit webos_enactjs_env + +S = "${WORKDIR}/git" + +SRC_URI = " \ + ${ENACTJS_GIT_REPO}/sandstone.git;name=main;nobranch=1;destsuffix=git/sandstone \ + ${ENACTJS_GIT_REPO}/enact;name=enact;nobranch=1;destsuffix=git/enact \ +" + +# NOTE: PV is the Sandstone version (which uses the Semantic Versioning spec), +# with the hyphen converted to a tilde so that the dpkg-style version-comparison +# algorithm properly recognizes that a pre-release precedes the associated final +# release (e.g., 1.0-pre.1 < 1.0). + +PV = "2.0.1" + +SRCREV = "d82b4339adb6b89b060775fc12af0904c6eb8879" +SRCREV_enact = "e5c7a0c9d3b8d15321f5fff3c0d17bc0ae9a786e" + +do_fetch[vardeps] += "SRCREV_enact" +SRCREV_FORMAT = "main_enact" + +# Ordered dependency list for Sandstone; provides shrink-wrap style locking in of package versions +WEBOS_ENACT_DEPENDENCIES ??= "\ + asap@2.0.6 \ + change-emitter@0.1.6 \ + classnames@2.3.1 \ + core-js@1.2.7 \ + direction@1.0.4 \ + dom-walk@0.1.2 \ + encoding@0.1.13 \ + fbjs@0.8.17 \ + global@4.4.0 \ + hoist-non-react-statics@2.5.5 \ + iconv-lite@0.6.3 \ + ilib@14.9.2 \ + invariant@2.2.4 \ + is-function@1.0.2 \ + is-stream@1.1.0 \ + isomorphic-fetch@2.2.1 \ + js-tokens@4.0.0 \ + loose-envify@1.4.0 \ + min-document@2.19.0 \ + node-fetch@1.7.3 \ + object-assign@4.1.1 \ + parse-headers@2.0.4 \ + process@0.11.10 \ + promise@7.3.1 \ + prop-types@15.7.2 \ + ramda@0.24.1 \ + react@17.0.2 \ + react-dom@17.0.2 \ + react-is@17.0.2 \ + react-lifecycles-compat@3.0.4 \ + recompose@0.30.0 \ + regenerator-runtime@0.13.9 \ + safer-buffer@2.1.2 \ + scheduler@0.20.2 \ + setimmediate@1.0.5 \ + symbol-observable@1.2.0 \ + ua-parser-js@0.7.28 \ + warning@4.0.3 \ + whatwg-fetch@3.6.2 \ + xhr@2.6.0 \ + xtend@4.0.2 \ +" + +# NOTE: We only need to bump PR if we change something OTHER than +# PV, SRCREV or the dependencies statement above. + +PR = "r6" + +# Skip unneeded tasks +do_configure[noexec] = "1" + +do_compile() { + cd ${S}/sandstone + ${ENACT_JSDOC_TO_TS} + + for LIB in core ui spotlight i18n webos ; do + cd ${S}/enact/packages/$LIB + ${ENACT_JSDOC_TO_TS} + done + + cd ${S} + + # cleanup any previous do_compile + rm -fr node_modules + rm -fr package + + ${WEBOS_NPM_BIN} pack --loglevel=error ./sandstone + ${WEBOS_NPM_BIN} pack --loglevel=error ./enact/packages/core + ${WEBOS_NPM_BIN} pack --loglevel=error ./enact/packages/ui + ${WEBOS_NPM_BIN} pack --loglevel=error ./enact/packages/spotlight + ${WEBOS_NPM_BIN} pack --loglevel=error ./enact/packages/i18n + ${WEBOS_NPM_BIN} pack --loglevel=error ./enact/packages/webos + ${WEBOS_NPM_BIN} pack --loglevel=error ${WEBOS_ENACT_DEPENDENCIES} + + for ARCHIVE in $(find . -name "*.tgz") ; do + tar --warning=no-unknown-keyword -xzf ${ARCHIVE} package/package.json + PKG=$(${WEBOS_NODE_BIN} -p "require('./package/package.json').name") + mkdir -p node_modules/${PKG} + mv -f ${ARCHIVE} node_modules/${PKG}/package.tgz + done + rm -fr package +} + +do_install() { + install -d ${D}${datadir}/javascript/enact-sandstone/@enact + cp -R --no-dereference --preserve=mode,links -v ${S}/node_modules/* ${D}${datadir}/javascript/enact-sandstone +} + +sysroot_stage_all_append() { + # files don't get staged by default so we must force /opt to be staged + sysroot_stage_dir ${D}${datadir} ${SYSROOT_DESTDIR}${datadir} +} + +FILES_${PN} += "${datadir}" From 00f6830d3d9bb06d8d419b4280c02a9a782b6d65 Mon Sep 17 00:00:00 2001 From: Krishna Date: Tue, 19 Oct 2021 16:46:04 +0530 Subject: [PATCH 0133/2022] ose: com.webos.service.pdm=65 :Release Notes: Fix for kernel device name :Detailed Notes: - Added /dev before the device name com.webos.service.pdm: submissions/64..submissions/65 33fbdd4 Fix for device name :Testing Performed: Refer [WRN-9190] for test results :QA Notes: NA :Issues Addressed: [WRN-9190] CCC: com.webos.service.pdm=65 [WRN-9098] KERNEL in videoDeviceList is different from actual device name. Change-Id: Ic79e856ad0f8e979a055687ba16831c7e6736ef6 --- .../com.webos.service.pdm/com.webos.service.pdm.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb b/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb index c74b4fd6c..75b08eeb7 100644 --- a/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb +++ b/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb @@ -16,7 +16,7 @@ RDEPENDS_${PN} = "fuse-utils hdparm gphoto2 gphotofs sdparm gptfdisk-sgdisk e2fs RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_pdm-plugin}" -WEBOS_VERSION = "1.0.1-64_1eba3b4d88b1c9f3aafa86fef18f8b87d47c7dc9" +WEBOS_VERSION = "1.0.1-65_bff4f110a77873c4fc5fe5a9d499aebd4b20af14" PR = "r5" inherit webos_component From 46f78d433d75b182c343abc50188310bbcdb36cb Mon Sep 17 00:00:00 2001 From: sushant narayan Date: Thu, 14 Oct 2021 12:40:35 +0530 Subject: [PATCH 0134/2022] ose: g-camera-pipeline=13.gav.23 :Release Notes: Enhance recording functionality with audio in appsrc Fix recording sync issue in camsrc :Detailed Notes: g-camera-pipeline : submissions/13.gav.22..submissions/13.gav.23 a7742cc Fix recording sync issue in camsrc f5cee12 Enhance recording functionality with audio in appsrc :Testing Performed: Please refer test result in WRN-9038 :QA Notes: NA :Issues Addressed: [WRN-9038] CCC: ose: g-camera-pipeline=13.gav.23 [WRN-8558] Analyze and Fix recording sync issue in camsrc [WRN-6911] Fix recording sync issue using appsrc in JPEG format [WRN-7428] Recorded file with 1280x720 resolution having audio & video sync issue in device mode Change-Id: I35f2cfab60e147b43a6ccaae71777a48af6f42b5 --- meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb index c702aa3f7..0bc78b4dc 100644 --- a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb +++ b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb @@ -24,7 +24,7 @@ DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad DEPENDS_append_rpi = " userland" WEBOS_GIT_PARAM_BRANCH = "@gav" -WEBOS_VERSION = "1.0.0-13.gav.22_9dd9a1da5e0fa8e4e84148de484ca00adc7fbbbc" +WEBOS_VERSION = "1.0.0-13.gav.23_ef003343fe115366073e705355e5db9853805989" WEBOS_GIT_PARAM_BRANCH_raspberrypi3 = "master" WEBOS_VERSION_raspberrypi3 = "1.0.0-16_e7fc787fdb52abb4ebd5c18f798976f6ebffad9f" From dfc668e25df3ff94b3884d56612e3f41c6654511 Mon Sep 17 00:00:00 2001 From: Kyungjik Min Date: Thu, 21 Oct 2021 16:10:11 +0900 Subject: [PATCH 0135/2022] iot: Add nyx-utils :Release Notes: Bring missing utility in iot image :Detailed Notes: :Testing Performed: Build and local test :QA Notes: N/A :Issues Addressed: [WRN-9062] [webOS OSE]: OS info is not displayed. Change-Id: I208e50bcc74903b619b8a77eab407a909e6da140 --- .../recipes-core/packagegroups/packagegroup-webos-iot-core.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-core.bb b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-core.bb index cc945d4c8..5a17abc73 100644 --- a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-core.bb +++ b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-core.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2021 LG Electronics, Inc. DESCRIPTION = "meta-webos-iot components used in webOS OSE" LICENSE = "Apache-2.0" @@ -12,6 +12,7 @@ inherit packagegroup inherit webos_machine_impl_dep VIRTUAL-RUNTIME_nyx_modules_providers ??= "\ + nyx-utils \ nyx-modules \ nyx-modules-qemux86 \ " From 79e55d751b745047221dde02458fd433a3f1b0f7 Mon Sep 17 00:00:00 2001 From: Krishna Date: Wed, 20 Oct 2021 16:49:51 +0530 Subject: [PATCH 0136/2022] ose: com.webos.service.pdm=66 :Release Notes: Fix for kernel device name :Detailed Notes: - If ID_V4L_CAPABILITIES is ":capture:" then device is recognized as video0 and its processed. com.webos.service.pdm: submissions/65..submissions/66 942b5d7 Fix for device name :Testing Performed: Refer [WRN-9220] for test results :QA Notes: NA :Issues Addressed: [WRN-9220] CCC: com.webos.service.pdm=66 [WRN-9098] KERNEL in videoDeviceList is different from actual device name. Change-Id: I32bf9e5af3481a27df80e39acf221dfe7ec16b88 --- .../com.webos.service.pdm/com.webos.service.pdm.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb b/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb index 75b08eeb7..0a1e76c36 100644 --- a/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb +++ b/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb @@ -16,7 +16,7 @@ RDEPENDS_${PN} = "fuse-utils hdparm gphoto2 gphotofs sdparm gptfdisk-sgdisk e2fs RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_pdm-plugin}" -WEBOS_VERSION = "1.0.1-65_bff4f110a77873c4fc5fe5a9d499aebd4b20af14" +WEBOS_VERSION = "1.0.1-66_3a713ee802fe7f6c35ed8a6807a48b3cd8bfbae0" PR = "r5" inherit webos_component From 7168ee47177261ef1e741470f0fb23b8bc522393 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Fri, 8 Oct 2021 15:16:44 +0900 Subject: [PATCH 0137/2022] ose: wam=55 :Release Notes: Bug fix :Detailed Notes: wam: submissions/54..submissions/55 5d3eb5d5 [op][qtless] Fix incorrect log context for web apps :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-7580] [webOS OSE] : String name "com.example.app.web " is not displaying after pmlog [WRN-8441] CCC: ose: wam=55 pro: webruntime_87=25} Change-Id: Icc99f5225b5300ef70e64024f5a6a0a044e71098 --- meta-webos/recipes-webos/wam/wam.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index 1feaee1d7..e98bb71ae 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -18,7 +18,7 @@ RDEPENDS_${PN} += "util-linux" VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" -WEBOS_VERSION = "1.0.2-54_8de10667b88c163b669a760056d3b5dc24a3f222" +WEBOS_VERSION = "1.0.2-55_233715d16eeba34c2cc71bc813dbc60280475c44" PR = "r42" WAM_BUILD_SYSTEM = "webos_qmake6" From 89b92f0b292560243eb74e77b0a8f592e042108b Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 14 Oct 2021 03:55:36 -0700 Subject: [PATCH 0138/2022] rpm=webos4 (remove unsupported options) :Release Notes: --without-abi-compliance-checker --without-api-sanity-checker were valid configure options with rpm-5, but rpm-5 was removed in 2017 with: https://git.openembedded.org/openembedded-core/commit/?id=d0365f35303db3595688a6e5290677e02a72c54e and only rpm-4 is being used. :Detailed Notes: Fixes: ERROR: rpm-native-1_4.17.0-r0 do_configure: QA Issue: rpm-native: configure was passed unrecognised options: --without-api-sanity-checker --without-abi-compliance-checker [unknown-configure-option] It's shown only with 4.17.0 version even when they were unrecognised for long time, because of interesting side-effect of bdb removal in https://github.com/rpm-software-management/rpm/commit/4290300e24c5ab17c615b6108f38438e31eeb1d0 And the interesting part is that reporting unrecognised options stops working (enable_option_checking=no gets set in generated configure) when there is AC_CONFIG_SUBDIRS in configure.ac (even when not actively being used as in https://github.com/rpm-software-management/rpm/commit/4290300e24c5ab17c615b6108f38438e31eeb1d0#diff-49473dca262eeab3b4a43002adb08b4db31020d190caaad1594b47f1d5daa810L509 when not using internal bdb), see https://git.savannah.gnu.org/cgit/autoconf.git/tree/lib/autoconf/status.m4#n1099 :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-9222] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: Ic098d077c6b4ace8d4a538ae024808c3b2cc16fa --- meta-webos/recipes-devtools/rpm/rpm_%.bbappend | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/meta-webos/recipes-devtools/rpm/rpm_%.bbappend b/meta-webos/recipes-devtools/rpm/rpm_%.bbappend index 5e658e6fd..bbce05446 100644 --- a/meta-webos/recipes-devtools/rpm/rpm_%.bbappend +++ b/meta-webos/recipes-devtools/rpm/rpm_%.bbappend @@ -1,8 +1,6 @@ -# Copyright (c) 2016-2019 LG Electronics, Inc. +# Copyright (c) 2016-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos3" - -EXTRA_OECONF += "--without-abi-compliance-checker --without-api-sanity-checker" +EXTENDPRAUTO_append = "webos4" VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" From 3ee61b210965a0cd46b1509c60f6742fb5df75a0 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 15 Oct 2021 06:34:20 -0700 Subject: [PATCH 0139/2022] com.webos.service.flowmanager=r7 (fix build with openssl-3) :Release Notes: :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-TODO] Create GPVB with Yocto 3.5 Kirkstone [WRN-9222] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I5a7ce4f4120f9d26df5961cfd094cdc4c0674290 --- .../com.webos.service.flowmanager.bb | 4 +- ...56-instead-of-ancient-md4-to-fix-bui.patch | 72 +++++++++++++++++++ 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.service.flowmanager/0001-webpack-use-sha256-instead-of-ancient-md4-to-fix-bui.patch diff --git a/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.service.flowmanager.bb b/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.service.flowmanager.bb index 4a9552ba2..c932d5ebe 100644 --- a/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.service.flowmanager.bb +++ b/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.service.flowmanager.bb @@ -18,7 +18,7 @@ inherit webos_enhanced_submissions inherit webos_npm_env require flowmanager.inc -PR = "r6" +PR = "r7" # The same restrition as nodejs (and nodejs-module-node-red) COMPATIBLE_MACHINE_armv4 = "(!.*armv4).*" @@ -44,3 +44,5 @@ do_compile_append() { } FILES_${PN} += "${webos_servicesdir}" + +SRC_URI += "file://0001-webpack-use-sha256-instead-of-ancient-md4-to-fix-bui.patch" diff --git a/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.service.flowmanager/0001-webpack-use-sha256-instead-of-ancient-md4-to-fix-bui.patch b/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.service.flowmanager/0001-webpack-use-sha256-instead-of-ancient-md4-to-fix-bui.patch new file mode 100644 index 000000000..45104ad5f --- /dev/null +++ b/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.service.flowmanager/0001-webpack-use-sha256-instead-of-ancient-md4-to-fix-bui.patch @@ -0,0 +1,72 @@ +From 11fd90cfbd17b816b4c8e3c73be3ee958866abfd Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Fri, 15 Oct 2021 06:31:41 -0700 +Subject: [PATCH] webpack: use sha256 instead of ancient md4 to fix build with + openssl-3 + +* follow the suggestion from: + https://stackoverflow.com/questions/69394632/webpack-build-failing-with-err-ossl-evp-unsupported + + to fix build with openssl-3: + +added 721 packages from 568 contributors in 37.661s + +8 packages are looking for funding + run `npm fund` for details + +npm verb exit [ 0, true ] +npm timing npm Completed in 39099ms +npm info ok + +> com.webos.service.flowmanager@1.0.0 webpack /jenkins/mjansa/build/ros/webos-foxy-kirkstone/tmp-glibc/work/qemux86-webos-linux/com.webos.service.flowmanager/1.0.0-8-r6/git +> ./node_modules/webpack/bin/webpack.js --mode=development + +internal/crypto/hash.js:46 + this[kHandle] = new _Hash(algorithm, xofLen); + ^ + +Error: error:0308010C:digital envelope routines::unsupported + at new Hash (internal/crypto/hash.js:46:19) + at Object.createHash (crypto.js:116:10) + at module.exports (/jenkins/mjansa/build/ros/webos-foxy-kirkstone/tmp-glibc/work/qemux86-webos-linux/com.webos.service.flowmanager/1.0.0-8-r6/git/node_modules/webpack/lib/util/createHash.js:135:53) + at NormalModule._initBuildHash (/jenkins/mjansa/build/ros/webos-foxy-kirkstone/tmp-glibc/work/qemux86-webos-linux/com.webos.service.flowmanager/1.0.0-8-r6/git/node_modules/webpack/lib/NormalModule.js:417:16) + at handleParseError (/jenkins/mjansa/build/ros/webos-foxy-kirkstone/tmp-glibc/work/qemux86-webos-linux/com.webos.service.flowmanager/1.0.0-8-r6/git/node_modules/webpack/lib/NormalModule.js:471:10) + at /jenkins/mjansa/build/ros/webos-foxy-kirkstone/tmp-glibc/work/qemux86-webos-linux/com.webos.service.flowmanager/1.0.0-8-r6/git/node_modules/webpack/lib/NormalModule.js:503:5 + at /jenkins/mjansa/build/ros/webos-foxy-kirkstone/tmp-glibc/work/qemux86-webos-linux/com.webos.service.flowmanager/1.0.0-8-r6/git/node_modules/webpack/lib/NormalModule.js:358:12 + at /jenkins/mjansa/build/ros/webos-foxy-kirkstone/tmp-glibc/work/qemux86-webos-linux/com.webos.service.flowmanager/1.0.0-8-r6/git/node_modules/loader-runner/lib/LoaderRunner.js:373:3 + at iterateNormalLoaders (/jenkins/mjansa/build/ros/webos-foxy-kirkstone/tmp-glibc/work/qemux86-webos-linux/com.webos.service.flowmanager/1.0.0-8-r6/git/node_modules/loader-runner/lib/LoaderRunner.js:214:10) + at Array. (/jenkins/mjansa/build/ros/webos-foxy-kirkstone/tmp-glibc/work/qemux86-webos-linux/com.webos.service.flowmanager/1.0.0-8-r6/git/node_modules/loader-runner/lib/LoaderRunner.js:205:4) + at Storage.finished (/jenkins/mjansa/build/ros/webos-foxy-kirkstone/tmp-glibc/work/qemux86-webos-linux/com.webos.service.flowmanager/1.0.0-8-r6/git/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:55:16) + at /jenkins/mjansa/build/ros/webos-foxy-kirkstone/tmp-glibc/work/qemux86-webos-linux/com.webos.service.flowmanager/1.0.0-8-r6/git/node_modules/enhanced-resolve/lib/CachedInputFileSystem.js:91:9 + at /jenkins/mjansa/build/ros/webos-foxy-kirkstone/tmp-glibc/work/qemux86-webos-linux/com.webos.service.flowmanager/1.0.0-8-r6/git/node_modules/graceful-fs/graceful-fs.js:123:16 + at FSReqCallback.readFileAfterClose [as oncomplete] (internal/fs/read_file_context.js:73:3) { + opensslErrorStack: [ 'error:03000086:digital envelope routines::initialization error' ], + library: 'digital envelope routines', + reason: 'unsupported', + code: 'ERR_OSSL_EVP_UNSUPPORTED' +} +npm ERR! code ELIFECYCLE +npm ERR! errno 1 +npm ERR! com.webos.service.flowmanager@1.0.0 webpack: `./node_modules/webpack/bin/webpack.js --mode=development` +npm ERR! Exit status 1 +npm ERR! +npm ERR! Failed at the com.webos.service.flowmanager@1.0.0 webpack script. +npm ERR! This is probably not a problem with npm. There is likely additional logging output above. + +Signed-off-by: Martin Jansa +--- + webpack.config.js | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/webpack.config.js b/webpack.config.js +index de99e0f..50e54a7 100644 +--- a/webpack.config.js ++++ b/webpack.config.js +@@ -11,6 +11,7 @@ const serverConfig = { + app: APP_DIR + '/index.js' + }, + output: { ++ hashFunction: "sha256", + filename: 'index.js', + path: BUILD_DIR + }, From 2f29443b7c35c00c1e5c44f0e6d4cccf1b0fdb54 Mon Sep 17 00:00:00 2001 From: Krishna Date: Mon, 25 Oct 2021 15:04:09 +0530 Subject: [PATCH 0140/2022] ose: com.webos.service.pdm=68 :Release Notes: Fix for Non-storage video devices subscrpion,deviceSubType and ad service file in RPI-64 :Detailed Notes: - Subscription implementation is added for getAttachedNonStorageDeviceList category as video. -Previously deviceSubType was based on ID_MODEL value now it is updated as per ID_USB_DRIVER value. -Included the physical-device-manager.service file in raspberrypi4-64. com.webos.service.pdm: submissions/66..submissions/68 c34e604 Fix for Non-storage video devices 6ba7d7c Update deviceSubType as per udev info 80b15cd Fix for Non storage Device list :Testing Performed: Refer [WRN-9636] for test results :QA Notes: NA :Issues Addressed: [WRN-9636] CCC: com.webos.service.pdm=68 [WRN-9367] Non-storage video devices does not work [WRN-9184] Non storage Device list not dispalyed and error displayed after some time. [WRN-9858] deviceSubType is wrong Change-Id: Ibc4a2a946f4dfed4eaefb34e8513cdbe8963de41 --- .../com.webos.service.pdm/com.webos.service.pdm.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb b/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb index 0a1e76c36..e9c372309 100644 --- a/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb +++ b/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb @@ -16,7 +16,7 @@ RDEPENDS_${PN} = "fuse-utils hdparm gphoto2 gphotofs sdparm gptfdisk-sgdisk e2fs RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_pdm-plugin}" -WEBOS_VERSION = "1.0.1-66_3a713ee802fe7f6c35ed8a6807a48b3cd8bfbae0" +WEBOS_VERSION = "1.0.1-68_1e46c6a0bae99f48ef9ed221fac80270e459e1f0" PR = "r5" inherit webos_component From ffa515f7721c4f355a4848cdec3ef9e72e5fcb53 Mon Sep 17 00:00:00 2001 From: "p.dinesh" Date: Thu, 28 Oct 2021 16:55:56 +0530 Subject: [PATCH 0141/2022] ose: com.webos.app.home=18 :Release Notes: Fixed on locale change to RTL languages app launcher is not scrolling. :Detailed Notes: com.webos.app.home: submissions/17..submissions/18 8e98c1b Fixed on locale change to RTL languages app launcher is not scrolling. :Testing Performed: Please see the CLM Ticket WRN-9944 :QA Notes: NA :Issues Addressed: [WRN-9944] CCC: ose: com.webos.app.home=18 [WRN-9368] [OSE-RPi4] : Launcher is not scrolling when menu language is changed to RTL Change-Id: I7ea4440fd410753c108bc812415c218d2718830f --- .../recipes-webos/com.webos.app.home/com.webos.app.home.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb b/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb index 4c1a23ebf..61e1cf435 100644 --- a/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb +++ b/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=0ec407cd2d4a192e0c60888f4ec66dd7 \ " -WEBOS_VERSION = "0.1.0-17_63e9e49fac5d48d6e11c798538d61b6140477dbd" +WEBOS_VERSION = "0.1.0-18_8accb8308fa1625c2d7478a41990a2d26180e058" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" PR = "r3" From ea1c590106c3b85f7cca58b57b8d770099c2f4d0 Mon Sep 17 00:00:00 2001 From: "shoyeb.khan" Date: Thu, 28 Oct 2021 15:57:35 +0530 Subject: [PATCH 0142/2022] bluetooth-sil-bluez5=76 :Release Notes: Fix Crash issue :Detailed Notes: submissions/75..submissions/76 09065d4 Fix for crash issue :Testing Performed: Tested results updated in WRN-9941 :QA Notes: N/A :Issues Addressed: [WRN-9941] CCC: bluetooth-sil-bluez5=76 [WRN-9641] [RDX_CRASH][webos] /usr/sbin/webos-bluetooth-service in g_atomic_ref_count_inc (libglib-2.0.so.0 + 0x4881a) Change-Id: I856261fee8659069054753d081a548f371390cef --- meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb index b0564a1d9..d545a68ab 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb @@ -17,7 +17,7 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES ??= "" # Add runtime dependency on bluez5 OBEX service when we have to support FTP RDEPENDS_${PN} += "${@ bb.utils.contains('WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES', 'FTP', 'bluez5-obex', '', d)}" -WEBOS_VERSION = "0.1.0-75_a9d9cb0483288289f2911c809b112f13ddf01b02" +WEBOS_VERSION = "0.1.0-76_2b5ddd45322fb069460f192669356b0f1232f623" PR = "r4" inherit webos_component From a4aee80822feeff10fcf5d24262a70fddba75460 Mon Sep 17 00:00:00 2001 From: Muniraju A Date: Thu, 28 Oct 2021 13:16:03 +0530 Subject: [PATCH 0143/2022] ose: Add com.webos.app.camera=8 :Release Notes: 1. Support user selected resolution for take snapshot. 2. fps modified as per camera service to recording video. 3. Known issue fix. 4. include unload API :Detailed Notes: com.webos.app.camera: ..submissions/8 a555c09 Enabled Video recording in 4:3 and 16:9 ratios ed2e4a2 Camera settings support db88749 Static issue fix 57b15d4 Show recorded media and UI issue fix 3f05f64 Added Popup for snapshot take. 9c58e95 Added footer functionality. 1048e2a Added Fullscreen preview functionality 48876ed Added camera main screen functionality 2095d35 Add Camera source code c4d17c7 Initial empty repository :Testing Performed: Refer [WRN-9934] for test results :QA Notes: NA :Issues Addressed: [WRN-9934] CCC: ose: Add com.webos.app.camera=8 [WRN-8812] Support for 4:3 ratio screen shot. [WRN-8813] Internal review comments and known issue fix [WRN-8824] camera audio fix verification in the appsrc mode using camera app [WRN-9766] clean up operation in the App close button [WRN-7260] Implement 4:3 and 16:9 aspect support in the fullscreen [WRN-7252] Create Settings component for camera App [WRN-7248] Implement 4:3 and 16:9 aspect support in the main screen [WRN-7272] camera name support in the camera app settings Change-Id: Ib6e41a9137e1a9d7aa77494db338d22ccea18b66 --- .../packagegroup-webos-extended.bb | 1 + .../com.webos.app.camera.bb | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index 47db752a9..7d8f4c001 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -227,6 +227,7 @@ RDEPENDS_${PN} = " \ " RDEPENDS_${PN}_append_webos = " \ + com.webos.app.camera \ com.webos.app.mediaviewer \ com.webos.app.imageviewer \ com.webos.app.videoplayer \ diff --git a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb new file mode 100644 index 000000000..692c32482 --- /dev/null +++ b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb @@ -0,0 +1,25 @@ +# Copyright (c) 2021 LG Electronics, Inc. + +SUMMARY = "Camera application" +AUTHOR = "Muniraju " +SECTION = "webos/apps" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = " \ +file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ +file://oss-pkg-info.yaml;md5=3072ffcf5bdbbc376ed21c9d378d14d5 \ +" + +WEBOS_VERSION = "0.0.1-8_8939a2009fb96bb16236b59c95da3b14893c8c13" +PR = "r0" + +inherit webos_component +inherit webos_enhanced_submissions +inherit webos_enactjs_app +inherit webos_public_repo + +WEBOS_ENACTJS_SHRINKWRAP_OVERRIDE = "false" + +SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" +S = "${WORKDIR}/git" + +WEBOS_ENACTJS_APP_ID = "com.webos.app.camera" \ No newline at end of file From 51e3250bcf5ff16f91acd2dd753a7a2457f1e422 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Tue, 26 Oct 2021 11:33:56 +0900 Subject: [PATCH 0144/2022] ose: webruntime_87=10 :Release Notes: Bug fix :Detailed Notes: webruntime_87: submissions/9..submission/10 75729b78817 [op][n_upsable][wayland] Do not set EGL_PLATFORM environment variable after threads are created. :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-4589] [RDX_CRASH][webos] /usr/bin/app-shell/app_shell in getenv (libc.so.6 + 0x2a368) [WRN-9799] CCC: webruntime_87={ose: 10 pro: 26} pro: wam=166 netcast-webapps=21 Change-Id: I6021c78b9c17941354d13bea88b0c86ae7175755 --- meta-webos/recipes-webos/chromium/webruntime-repo_87.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc index 4e9b3f083..99fff795d 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=28f5b870e5e06b9af5b96c9dd65b31c8" WEBOS_REPO_NAME = "chromium87" -WEBOS_VERSION = "87.0.4280.88-9_ecb645197624db73c480d197ef6da2759860a2cb" +WEBOS_VERSION = "87.0.4280.88-10_9e4a51ff951110ab1a6d88066cb6355a10cb4047" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium87" From 9d443c7b3c53d5f77a568cf2d8b5256a01b5b297 Mon Sep 17 00:00:00 2001 From: "divvya.rosna" Date: Tue, 14 Sep 2021 11:35:36 +0530 Subject: [PATCH 0145/2022] gstreamer1.0-plugins-bad=webosrpi5 umediaserver-configs=13 :Release Notes: Enable gstreamer components for rpi4-64 build Fix crash issue in wldrmallocator after porting gstreamer on top of rpi4 64-bit Add platform support for target machine rpi4-64 :Detailed Notes: Enable gstreamer components for rpi4-64 build by updating packagegroup -webos-extended for rpi4 Fix crash issue in wldrmallocator after porting gstreamer on top of rpi4 64-bit umediaserver-configs: submissions/12..submissions/13 a47e2b0 Add platform support for target machine rpi4-64 :Testing Performed: QWO-113 :QA Notes: NA :Issues Addressed: [WRN-9168] CCC: Switch official OSE image to raspberrypi4 64bit [WRN-7152] Enable gstreamer components in rpi4-64 build Change-Id: I10519223c28208e5a15b269091c71d206f67c323 --- .../packagegroup-webos-extended.bbappend | 1 - ...in-wldrmallocator-for-64bit-porting-of-rpi4.patch | 12 ++++++++++++ .../gstreamer1.0-plugins-bad_1.16.%.bbappend | 5 +++-- .../umediaserver/umediaserver-configs.bb | 2 +- 4 files changed, 16 insertions(+), 4 deletions(-) create mode 100644 meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-fix-crash-in-wldrmallocator-for-64bit-porting-of-rpi4.patch diff --git a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend index c1bad3cb8..eed597b63 100644 --- a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend +++ b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend @@ -9,7 +9,6 @@ MEDIA_append_rpi = " \ " # Until build issues caused by PLAT-44962 are fixed in PLAT-45700 MEDIA_raspberrypi3-64 = "" -MEDIA_raspberrypi4-64 = "" SAFSERVICE = "" SAFSERVICE_raspberrypi4 = " \ diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-fix-crash-in-wldrmallocator-for-64bit-porting-of-rpi4.patch b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-fix-crash-in-wldrmallocator-for-64bit-porting-of-rpi4.patch new file mode 100644 index 000000000..937608b19 --- /dev/null +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-fix-crash-in-wldrmallocator-for-64bit-porting-of-rpi4.patch @@ -0,0 +1,12 @@ +diff -ruN a/ext/wayland/wldrmallocator.c b/ext/wayland/wldrmallocator.c +--- a/ext/wayland/wldrmallocator.c 2021-09-21 12:46:10.949683969 +0530 ++++ b/ext/wayland/wldrmallocator.c 2021-09-21 12:46:38.782775348 +0530 +@@ -351,7 +351,7 @@ + struct wl_buffer * gst_wl_drm_memory_construct_wl_buffer (GstWlDisplay * display, GstMemory * mem, const GstVideoInfo * vinfo) + { + guint width, height, size, maxsize; +- guint stride, offset, memsize; ++ gsize stride, offset, memsize; + + enum wl_drm_format format; + struct wl_buffer *buffer; diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend index 6478ca8ce..eee3d780e 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend @@ -1,6 +1,6 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2021 LG Electronics, Inc. -EXTENDPRAUTO_append_rpi = "webosrpi4" +EXTENDPRAUTO_append_rpi = "webosrpi5" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" @@ -13,4 +13,5 @@ PACKAGECONFIG_remove_rpi = "faad" SRC_URI_append_rpi = " \ file://0001-waylandsink-remove-unsupported-subcompositor.patch \ file://0002-waylandsink-zero-copy-using-wl-drm-protocol.patch \ + file://0003-fix-crash-in-wldrmallocator-for-64bit-porting-of-rpi4.patch \ " diff --git a/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb b/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb index 1c54c84d7..7113ca07c 100644 --- a/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb +++ b/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " -WEBOS_VERSION = "1.0.0-12_12cf0941d4fe3c40ef78fa9569ac4e7624e5b5a3" +WEBOS_VERSION = "1.0.0-13_9a6afea61254c66a27dd46c37c7252a3b92acb4c" PR = "r7" inherit webos_cmake From b049d05b099e4aaecbe8f5c430392058cd11a1f9 Mon Sep 17 00:00:00 2001 From: Kyungjik Min Date: Fri, 29 Oct 2021 17:27:27 +0900 Subject: [PATCH 0146/2022] ose: raspberrypi4-64.conf: Enable the I2C & SPI interfaces :Release Notes: Add some kernel modules to rpi4-64 like PLAT-135669 :Detailed Notes: Enabling the I2C & SPI interfaces for RPI4-64 board as part of the peripheral manager supporting the port. :Testing Performed: Build and local test :QA Notes: N/A :Issues Addressed: [WRN-9168] CCC: Switch official OSE image to raspberrypi4 64bit [WRN-9376] [webOS OSE] : "errorText": "EBUSY" is displayed [PLAT-135669] CCC: com.webos.service.peripheralmanager=6 rpi-config_git=webosrpi10 linux-raspberrypi_%=webosrpi27 Change-Id: I70e0ce4a8546e36b255fa63f5b6f6a8813a1df35 --- meta-webos-raspberrypi/conf/machine/raspberrypi4-64.conf | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/meta-webos-raspberrypi/conf/machine/raspberrypi4-64.conf b/meta-webos-raspberrypi/conf/machine/raspberrypi4-64.conf index bd321983c..9a67288df 100644 --- a/meta-webos-raspberrypi/conf/machine/raspberrypi4-64.conf +++ b/meta-webos-raspberrypi/conf/machine/raspberrypi4-64.conf @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2021 LG Electronics, Inc. #@TYPE: Machine #@NAME: RaspberryPi 4 Development Board (64bit) @@ -9,6 +9,9 @@ MACHINEOVERRIDES = "raspberrypi4:${MACHINE}" MACHINE_EXTRA_RRECOMMENDS += "\ linux-firmware-rpidistro-bcm43455 \ bluez-firmware-rpidistro-bcm4345c0-hcd \ + kernel-module-i2c-dev \ + kernel-module-spidev \ + kernel-module-spi-bcm2835 \ " require conf/machine/include/tune-cortexa72.inc From 673fcc2b56cd934c384952e88b45eaa5f6fc633a Mon Sep 17 00:00:00 2001 From: Kyungjik Min Date: Thu, 7 Oct 2021 13:59:14 +0900 Subject: [PATCH 0147/2022] ose: libgoogleassistant=9-r6,v1.0.1 com.webos.service.ai=11-r6 lpack=webos1 Add snowboy=webos1,v1.3.0 :Release Notes: Support google assistant ai service to various cpu architectures. :Detailed Notes: Separate snowboy prebuilt library from libgoogleassistant package and relocate some configuration files between repositories. :Testing Performed: Build and local test :QA Notes: N/A :Issues Addressed: [WRN-9168] CCC: Switch official OSE image to raspberrypi4 64bit [WRN-7408] Port AI service on rpi-64bit system Change-Id: Id68802306483b8e3634961efd2992fca61837b96 --- meta-webos/conf/distro/include/webos.inc | 3 + .../packagegroup-webos-extended.bb | 14 ++--- .../recipes-devtools/lapack/lapack_%.bbappend | 9 +++ .../snowboy/snowboy/CMakeLists.txt | 55 +++++++++++++++++++ .../snowboy/snowboy/snowboy.pc.in | 10 ++++ .../snowboy/snowboy_%.bbappend | 44 +++++++++++++++ .../snowboy/snowboy_1.3.0.bb | 30 ++++++++++ .../com.webos.service.ai.bb | 9 +-- .../libgoogleassistant/libgoogleassistant.bb | 51 +++-------------- 9 files changed, 164 insertions(+), 61 deletions(-) create mode 100644 meta-webos/recipes-devtools/lapack/lapack_%.bbappend create mode 100644 meta-webos/recipes-upstreamable/snowboy/snowboy/CMakeLists.txt create mode 100644 meta-webos/recipes-upstreamable/snowboy/snowboy/snowboy.pc.in create mode 100644 meta-webos/recipes-upstreamable/snowboy/snowboy_%.bbappend create mode 100644 meta-webos/recipes-upstreamable/snowboy/snowboy_1.3.0.bb diff --git a/meta-webos/conf/distro/include/webos.inc b/meta-webos/conf/distro/include/webos.inc index 9e5c90ddb..46a947f62 100644 --- a/meta-webos/conf/distro/include/webos.inc +++ b/meta-webos/conf/distro/include/webos.inc @@ -382,5 +382,8 @@ INHERIT += "reproducible_build_simple" FONTCONFIG_CACHE_DIR = "${datadir}/fontconfig/cache" FONTCONFIG_CACHE_ENV = "FC_DEBUG=16" +# To build lapack(blas) for snowboy +FORTRAN_forcevariable_webos = ",fortran" + # Qt major version to use QT_VERSION ?= "6" diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index 7d8f4c001..37943c400 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -12,6 +12,9 @@ inherit packagegroup inherit webos_machine_impl_dep inherit webos_prerelease_dep +VIRTUAL-RUNTIME_ai ?= "com.webos.service.ai" +# The same restriction as libgoogleassistant (snowboy doesn't support i686;x86) +VIRTUAL-RUNTIME_ai_i686 = "" VIRTUAL-RUNTIME_appinstalld ?= "appinstalld2" VIRTUAL-RUNTIME_event-monitor-network ?= "event-monitor-network" VIRTUAL-RUNTIME_memorymanager ?= "com.webos.service.memorymanager" @@ -44,15 +47,6 @@ VIRTUAL-RUNTIME_g-camera-pipeline_raspberrypi4 = "g-camera-pipeline" VIRTUAL-RUNTIME_g-camera-pipeline_raspberrypi4-64 = "g-camera-pipeline" VIRTUAL-RUNTIME_g-camera-pipeline_qemux86 = "g-camera-pipeline" -VIRTUAL-RUNTIME_ai ?= "" -VIRTUAL-RUNTIME_ai_raspberrypi3 = "com.webos.service.ai" -VIRTUAL-RUNTIME_ai_raspberrypi4 = "com.webos.service.ai" -# There is only rpi-32bit keyword detection library available.(https://github.com/Kitt-AI/snowboy/tree/master/lib) -# It seems to be a library for arm-64bit(https://github.com/Kitt-AI/snowboy/tree/master/lib/aarch64-ubuntu1604), -# but it has not been verified on webOS rpi64 which cannot boot yet. -VIRTUAL-RUNTIME_ai_raspberrypi3-64 = "" -VIRTUAL-RUNTIME_ai_raspberrypi4-64 = "" - VIRTUAL-RUNTIME_pdm ?= "com.webos.service.pdm" # We're not using VIRTUAL-RUNTIME because VIRTUAL-RUNTIME is usually used for only @@ -197,7 +191,6 @@ RDEPENDS_${PN} = " \ webos-fontconfig-files \ webos-nettools \ ${MEDIA} \ - ${VIRTUAL-RUNTIME_ai} \ ${VIRTUAL-RUNTIME_appinstalld} \ ${VIRTUAL-RUNTIME_browser_fonts} \ ${VIRTUAL-RUNTIME_com.example.app.iotivity} \ @@ -235,6 +228,7 @@ RDEPENDS_${PN}_append_webos = " \ com.webos.service.uwb \ gssdp \ gupnp \ + ${VIRTUAL-RUNTIME_ai} \ ${VIRTUAL-RUNTIME_com.webos.service.mediacontroller} \ ${VIRTUAL-RUNTIME_com.webos.service.flowmanager} \ ${VIRTUAL-RUNTIME_g-camera-pipeline} \ diff --git a/meta-webos/recipes-devtools/lapack/lapack_%.bbappend b/meta-webos/recipes-devtools/lapack/lapack_%.bbappend new file mode 100644 index 000000000..e7d3444ed --- /dev/null +++ b/meta-webos/recipes-devtools/lapack/lapack_%.bbappend @@ -0,0 +1,9 @@ +# Copyright (c) 2019-2021 LG Electronics, Inc. + +EXTENDPRAUTO = "webos1" + +# enable cblas +EXTRA_OECMAKE += "-DCBLAS=ON" + +# fix configure error during FortranCInterface detect +OECMAKE_FIND_ROOT_PATH_MODE_PROGRAM = "BOTH" diff --git a/meta-webos/recipes-upstreamable/snowboy/snowboy/CMakeLists.txt b/meta-webos/recipes-upstreamable/snowboy/snowboy/CMakeLists.txt new file mode 100644 index 000000000..fa4b32b95 --- /dev/null +++ b/meta-webos/recipes-upstreamable/snowboy/snowboy/CMakeLists.txt @@ -0,0 +1,55 @@ +# @@@LICENSE +# +# Copyright (c) 2019-2021 LG Electronics, Inc. +# +# LICENSE@@@ + +cmake_minimum_required(VERSION 2.8.7) +project(snowboy-detect) + +configure_file(${CMAKE_SOURCE_DIR}/snowboy.pc.in snowboy.pc @ONLY) + +# install +install(FILES lib/${SNOWBOY_ARCH}/libsnowboy-detect.a DESTINATION ${CMAKE_INSTALL_LIBDIR}/snowboy) +install(FILES include/snowboy-detect.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +install(FILES ${CMAKE_BINARY_DIR}/snowboy.pc DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/pkgconfig) + +option (BUILD_SHARED_LIB "Build the shared library as an wrapper" OFF) +if(BUILD_SHARED_LIB) + # force build as 'C' for .cc file & set flags + SET_SOURCE_FILES_PROPERTIES(examples/C/snowboy-detect-c-wrapper.cc PROPERTIES LANGUAGE C) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fPIC -Wall ${SNOWBOY_EXTRA_FLAGS}") + + # add include files + include_directories( + ${CMAKE_SOURCE_DIR}/ + ${CMAKE_SOURCE_DIR}/examples/C + ) + + # wrapper + add_library(snowboy-detect-c SHARED examples/C/snowboy-detect-c-wrapper.cc) + set_target_properties(snowboy-detect-c PROPERTIES SOVERSION 1.3.0) + + # add static library to shared object + target_link_libraries(snowboy-detect-c PUBLIC + -Wl,--whole-archive + ${CMAKE_SOURCE_DIR}/lib/${SNOWBOY_ARCH}/libsnowboy-detect.a + -Wl,--no-whole-archive + cblas + ) + + install(TARGETS snowboy-detect-c DESTINATION ${CMAKE_INSTALL_LIBDIR}/snowboy) + install(FILES examples/C/snowboy-detect-c-wrapper.h DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) +endif() + +option (INSTALL_KEYWORD_MODELS "Install the keyword activation models. snowboy, jarvis, alexa" OFF) +if(INSTALL_KEYWORD_MODELS) + install( + FILES + resources/common.res + resources/models/snowboy.umdl + resources/models/jarvis.umdl + resources/alexa/alexa-avs-sample-app/alexa.umdl + DESTINATION /etc/snowboy/models + ) +endif() diff --git a/meta-webos/recipes-upstreamable/snowboy/snowboy/snowboy.pc.in b/meta-webos/recipes-upstreamable/snowboy/snowboy/snowboy.pc.in new file mode 100644 index 000000000..b9968780e --- /dev/null +++ b/meta-webos/recipes-upstreamable/snowboy/snowboy/snowboy.pc.in @@ -0,0 +1,10 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=@CMAKE_INSTALL_PREFIX@ +libdir=${exec_prefix}/@CMAKE_INSTALL_LIBDIR@/snowboy +includedir=${prefix}/@CMAKE_INSTALL_INCLUDEDIR@ + +Name: @PROJECT_NAME@ +Description: Snowboy keword detection library +Version: 1.3.0 +Libs: -L${libdir} -lsnowboy-detect-c +Cflags: -I${includedir} @SNOWBOY_EXTRA_FLAGS@ diff --git a/meta-webos/recipes-upstreamable/snowboy/snowboy_%.bbappend b/meta-webos/recipes-upstreamable/snowboy/snowboy_%.bbappend new file mode 100644 index 000000000..c4895ab80 --- /dev/null +++ b/meta-webos/recipes-upstreamable/snowboy/snowboy_%.bbappend @@ -0,0 +1,44 @@ +# Copyright (c) 2019-2021 LG Electronics, Inc. + +EXTENDPRAUTO_append = "webos1" + +inherit cmake + +DEPENDS += "lapack" + +FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +SRC_URI += "file://snowboy.pc.in;subdir=git" + +# snowboy offers arm/aarch64/x86-64 only for C++ implementation +COMPATIBLE_MACHINE = "rpi|aarch64|x86-64|qemux86-64" + +# match static lib for each arch +SNOWBOY_ARCH_armv6 = "rpi" +SNOWBOY_ARCH_armv7a = "rpi" +SNOWBOY_ARCH_armv7ve = "rpi" +SNOWBOY_ARCH_aarch64 = "aarch64-ubuntu1604" +SNOWBOY_ARCH_x86-64 = "ubuntu64" + +FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +SRC_URI_append = " file://CMakeLists.txt;subdir=git" + +INSANE_SKIP_${PN} += "textrel" + +# RPI 32-bit and x86-64's static library doesn't build with c++11. So we need to avoid using CXX11_ABI. +SNOWBOY_EXTRA_FLAGS ?= "-D_GLIBCXX_USE_CXX11_ABI=0" +SNOWBOY_EXTRA_FLAGS_aarch64 = "-std=c++11" + +EXTRA_OECMAKE_append = " -DBUILD_SHARED_LIB=OFF -DINSTALL_KEYWORD_MODELS=ON -DSNOWBOY_ARCH='${SNOWBOY_ARCH}' -DSNOWBOY_EXTRA_FLAGS='${SNOWBOY_EXTRA_FLAGS}'" + +FILES_${PN}-dev += "${libdir}/snowboy/*.so" +# if BUILD_SHARED_LIB is OFF, below is for fixing when populate_sdk +# Collected errors: +# * Solver encountered 1 problem(s): +# * Problem 1/1: +# * - nothing provides snowboy = 1.3.0-r0webos1 needed by snowboy-dev-1.3.0-r0webos1.raspberrypi4_64 +RDEPENDS_${PN}-dev = "" +# Otherwise, this line is unnecessary when BUILD_SHARED_LIB is ON + +# Add models package if needs keyword activation models +PACKAGES =+ "${PN}-models" +FILES_${PN}-models = "${sysconfdir}/snowboy/models/*" diff --git a/meta-webos/recipes-upstreamable/snowboy/snowboy_1.3.0.bb b/meta-webos/recipes-upstreamable/snowboy/snowboy_1.3.0.bb new file mode 100644 index 000000000..4d6969427 --- /dev/null +++ b/meta-webos/recipes-upstreamable/snowboy/snowboy_1.3.0.bb @@ -0,0 +1,30 @@ +SUMMARY = "Snowboy Hotword Detection by KITT.AI" +HOMEPAGE = "https://snowboy.kitt.ai/" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=8d385adc93db3f7e5d092b82fb2c9353" + +SRCREV = "052db3400c5f45d8ac2bbf5688ad92f37b81e2ec" +SRC_URI = "git://github.com/Kitt-AI/snowboy;protocol=https" +S = "${WORKDIR}/git" + +COMPATIBLE_MACHINE = "(machine-native|android)" + +INSANE_SKIP_${PN} += "already-stripped" + +def get_snowboy_arch(d): + machine = d.getVar('MACHINE') + if machine == "androidarm": + return "android/armv7a" + elif machine == "androidarm64": + return "android/armv8-aarch64" + else: + return "ubuntu64" + +SNOWBOY_ARCH ?= "${@get_snowboy_arch(d)}" + +do_install() { + mkdir -p ${D}${libdir} + cp ${S}/lib/${SNOWBOY_ARCH}/libsnowboy-detect.a ${D}${libdir} + mkdir -p ${D}${includedir} + cp ${S}/include/snowboy-detect.h ${D}${includedir} +} diff --git a/meta-webos/recipes-webos/com.webos.service.ai/com.webos.service.ai.bb b/meta-webos/recipes-webos/com.webos.service.ai/com.webos.service.ai.bb index 0d76f66e1..baf36d3c8 100644 --- a/meta-webos/recipes-webos/com.webos.service.ai/com.webos.service.ai.bb +++ b/meta-webos/recipes-webos/com.webos.service.ai/com.webos.service.ai.bb @@ -11,13 +11,8 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 luna-service2 json-c pmloglib libgoogleassistant" -# libgoogleassistant contains prebuilt binaries useful only on raspberrypi3 -COMPATIBLE_MACHINE = "^raspberrypi3$|^raspberrypi4$" -COMPATIBLE_MACHINE_raspberrypi3-64 = "^$" -COMPATIBLE_MACHINE_raspberrypi4-64 = "^$" - -WEBOS_VERSION = "1.0.0-10_bca8a9b3669caae7173ea6196cdbfd86a88bb666" -PR = "r5" +WEBOS_VERSION = "1.0.0-11_6bc7a16f334f58dfa4b439b6f849d79a1b72871b" +PR = "r6" inherit systemd inherit webos_public_repo diff --git a/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb b/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb index 36819f827..b8a4d83f6 100644 --- a/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb +++ b/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2021 LG Electronics, Inc. SUMMARY = "Google assistant engine library" AUTHOR = "Kyungjik Min " @@ -9,61 +9,24 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=9e4744182d366ff5258e3268c575afe2 \ " -DEPENDS = "glib-2.0 googleapis grpc json-c pmloglib pulseaudio patchelf-native" +DEPENDS = "snowboy glib-2.0 googleapis grpc json-c pmloglib pulseaudio" +RDEPENDS_${PN}_class-target = "snowboy-models" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_class-target = "${VIRTUAL-RUNTIME_bash}" +RDEPENDS_${PN}_class-target += "${VIRTUAL-RUNTIME_bash}" -WEBOS_VERSION = "1.0.0-8_b1e75f002708602247d6a2e234d85a72008a3d6f" -PR = "r5" +WEBOS_VERSION = "1.0.1-9_33a4b718c378e8b54330dece6093c7b0ea716316" +PR = "r6" inherit webos_library inherit webos_cmake inherit webos_machine_impl_dep inherit webos_enhanced_submissions inherit webos_public_repo -inherit webos_prebuilt_binaries - -# git/lib/libsnowboy-detect.a git/lib/libtatlas.so are prebuilt binaries -# for hardfp arm only which in our builds is only the raspberrypi3 MACHINE -WEBOS_PREBUILT_BINARIES_FOR = "raspberrypi3" -COMPATIBLE_MACHINE_raspberrypi3-64 = "^$" - -# Build for raspberrypi4 -WEBOS_PREBUILT_BINARIES_FOR_append = " raspberrypi4" -COMPATIBLE_MACHINE_raspberrypi4-64 = "^$" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" EXTRA_OECMAKE += "-DGOOGLEAPIS_PATH=${STAGING_INCDIR}/google" -do_configure_prepend() { - # there is this silly SONAME in prebuilt libtatlas.so: - # objdump -x image/usr/lib/libtatlas.so | grep SONAME - # SONAME /usr/local/atlas/lib/libtatlas.so - # which causes image/usr/lib/libgoogleassistant.so to need the same - # silly path: - # objdump -x image/usr/lib/libgoogleassistant.so | grep NEEDED.*tatlas - # NEEDED /usr/local/atlas/lib/libtatlas.so - # reset the SONAME before building libgoogleassistant.so - patchelf --set-soname libtatlas.so ${S}/lib/libtatlas.so -} - -do_install_append() { - install -d ${D}${sysconfdir}/googleAssistant - cp -r ${S}/tools/*.json ${D}${sysconfdir}/googleAssistant/ - cp -r ${S}/tools/*.sh ${D}${sysconfdir}/googleAssistant/ -} - -# ERROR: libgoogleassistant-1.0.0-4-r1 do_package_qa: QA Issue: ELF binary '/jenkins/mjansa/build-webos-thud/BUILD/work/raspberrypi3-webos-linux-gnueabi/libgoogleassistant/1.0.0-4-r1/packages-split/libgoogleassistant/usr/lib/libgoogleassistant.so.1.0.0' has relocations in .text [textrel] -# ERROR: libgoogleassistant-1.0.0-4-r1 do_package_qa: QA Issue: No GNU_HASH in the ELF binary /jenkins/mjansa/build-webos-thud/BUILD/work/raspberrypi3-webos-linux-gnueabi/libgoogleassistant/1.0.0-4-r1/packages-split/libgoogleassistant-dev/usr/lib/libtatlas.so, didn't pass LDFLAGS? [ldflags] -INSANE_SKIP_${PN} = "ldflags textrel" - -# ERROR: libgoogleassistant-1.0.0-4-r1 do_package_qa: QA Issue: -dev package contains non-symlink .so: libgoogleassistant-dev path '/work/raspberrypi3-webos-linux-gnueabi/libgoogleassistant/1.0.0-4-r1/packages-split/libgoogleassistant-dev/usr/lib/libtatlas.so' [dev-elf] -# /usr/lib/libtatlas.so is really elf library, but there is also -# /usr/lib/libgoogleassistant.so -> libgoogleassistant.so.1 -# which we need to explicitly add to PN-dev after -FILES_SOLIBSDEV = "" -FILES_${PN} += "${libdir}/libtatlas.so" -FILES_${PN}-dev += "${libdir}/libgoogleassistant.so" +INSANE_SKIP_${PN} = "textrel" From 0d06ba450a1a5b5921b0494d026b0fd6f800d34d Mon Sep 17 00:00:00 2001 From: Kyungjik Min Date: Thu, 14 Oct 2021 15:14:28 +0900 Subject: [PATCH 0148/2022] ose: com.webos.service.contextintentmgr=r4 com.webos.service.storageaccess=r6 com.webos.service.tts=r6 :Release Notes: Support raspberrypi 64bit system. :Detailed Notes: Remove machine architecture dependencies. :Testing Performed: Build and local test :QA Notes: N/A :Issues Addressed: [WRN-9168] CCC: Switch official OSE image to raspberrypi4 64bit [WRN-9043] Integrate missing services into rpi4-64bit system Change-Id: Ie62fbbf5585c3ca9a4c279d8d51d6b5b06aed16b --- .../packagegroup-webos-extended.bbappend | 48 +------------------ .../packagegroup-webos-extended.bb | 19 +++++--- .../com.webos.service.contextintentmgr.bb | 6 +-- .../com.webos.service.storageaccess.bb | 5 +- .../com.webos.service.tts.bb | 6 +-- 5 files changed, 17 insertions(+), 67 deletions(-) diff --git a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend index eed597b63..b19a70c06 100644 --- a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend +++ b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend @@ -3,55 +3,13 @@ # You don't need to change this value when you're changing just a RDEPENDS_${PN} variable. EXTENDPRAUTO_append_rpi = "webosrpi8" -# gst omx is used only for raspberrypi3 builds +# gst omx is used only for raspberrypi builds MEDIA_append_rpi = " \ gstreamer1.0-omx \ " # Until build issues caused by PLAT-44962 are fixed in PLAT-45700 MEDIA_raspberrypi3-64 = "" -SAFSERVICE = "" -SAFSERVICE_raspberrypi4 = " \ - com.webos.service.storageaccess \ -" - -TTSSERVICE = " \ - com.webos.service.tts \ -" - -CIMSERVICE = " \ - com.webos.service.contextintentmgr \ -" -# The same restrition as nodejs (and nodejs-module-node-red and com.webos.service.contextintentmgr) -CIMSERVICE_armv4 = "" -CIMSERVICE_armv5 = "" -CIMSERVICE_mips64 = "" - -CAMERASERVICE = " \ - com.webos.service.camera \ - g-camera-pipeline \ -" - -# TODO: Remove g-camera-pipeline, add it back after it is adapted to GAV -CAMERASERVICE_raspberrypi4 = " \ - com.webos.service.camera \ -" - -# SAF service functionality cannot be verified on webOS rpi64 which cannot boot yet -SAFSERVICE_raspberrypi4-64 = "" - -# TTS service functionality cannot be verified on webOS rpi64 which cannot boot yet -TTSSERVICE_raspberrypi3-64 = "" -TTSSERVICE_raspberrypi4-64 = "" - -# CIM service functionality not been verified on webOS rpi64 which cannot boot yet -CIMSERVICE_raspberrypi3-64 = "" -CIMSERVICE_raspberrypi4-64 = "" - -# camera service functionality cannot be verified on webOS rpi64 which cannot boot yet -CAMERASERVICE_raspberrypi3-64 = "" -CAMERASERVICE_raspberrypi4-64 = "" - RDEPENDS_${PN}_append_rpi = " \ com.webos.service.audiofocusmanager \ com.webos.service.audiooutput \ @@ -62,10 +20,6 @@ RDEPENDS_${PN}_append_rpi = " \ com.webos.service.power2 \ ofono \ resize-rootfs \ - ${CAMERASERVICE} \ - ${SAFSERVICE} \ - ${TTSSERVICE} \ - ${CIMSERVICE} \ " # TODO move this part to webOS FOTA service (not yet developped) later diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index 37943c400..e174a110a 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -17,13 +17,15 @@ VIRTUAL-RUNTIME_ai ?= "com.webos.service.ai" VIRTUAL-RUNTIME_ai_i686 = "" VIRTUAL-RUNTIME_appinstalld ?= "appinstalld2" VIRTUAL-RUNTIME_event-monitor-network ?= "event-monitor-network" -VIRTUAL-RUNTIME_memorymanager ?= "com.webos.service.memorymanager" -VIRTUAL-RUNTIME_webappmanager ?= "" VIRTUAL-RUNTIME_initscripts ?= "initscripts" +VIRTUAL-RUNTIME_memorymanager ?= "com.webos.service.memorymanager" VIRTUAL-RUNTIME_surface-manager ?= "luna-surfacemanager-base" VIRTUAL-RUNTIME_surface-manager-conf ?= "luna-surfacemanager-conf" VIRTUAL-RUNTIME_surface-manager-extension ?= "" +VIRTUAL-RUNTIME_tts ?= "com.webos.service.tts" +VIRTUAL-RUNTIME_webappmanager ?= "" VIRTUAL-RUNTIME_webos-ime ?= "" + VIRTUAL-RUNTIME_nyx_modules_providers ??= "\ nyx-modules \ nyx-modules-qemux86 \ @@ -100,14 +102,16 @@ VIRTUAL-RUNTIME_org.ocf.webossample_armv4 = "" VIRTUAL-RUNTIME_org.ocf.webossample_armv5 = "" VIRTUAL-RUNTIME_org.ocf.webossample_x86-64 = "" -VIRTUAL-RUNTIME_contextintentmgr ?= "com.webos.service.contextintentmgr" -VIRTUAL-RUNTIME_contextintentmgr_armv4 = "" -VIRTUAL-RUNTIME_contextintentmgr_armv5 = "" - VIRTUAL-RUNTIME_nodejs-module-node-red ?= "nodejs-module-node-red" VIRTUAL-RUNTIME_nodejs-module-node-red_armv4 = "" VIRTUAL-RUNTIME_nodejs-module-node-red_armv5 = "" +# The same restrition as nodejs (and nodejs-module-node-red and com.webos.service.contextintentmgr) +VIRTUAL-RUNTIME_contextintentmgr ?= "com.webos.service.contextintentmgr" +VIRTUAL-RUNTIME_contextintentmgr_armv4 = "" +VIRTUAL-RUNTIME_contextintentmgr_armv5 = "" +VIRTUAL-RUNTIME_contextintentmgr_mips64 = "" + VIRTUAL-RUNTIME_mojoservicelauncher ?= "mojoservicelauncher" VIRTUAL-RUNTIME_mojoservicelauncher_armv4 = "" VIRTUAL-RUNTIME_mojoservicelauncher_armv5 = "" @@ -224,6 +228,7 @@ RDEPENDS_${PN}_append_webos = " \ com.webos.app.mediaviewer \ com.webos.app.imageviewer \ com.webos.app.videoplayer \ + com.webos.service.storageaccess \ com.webos.service.swupdater \ com.webos.service.uwb \ gssdp \ @@ -231,7 +236,9 @@ RDEPENDS_${PN}_append_webos = " \ ${VIRTUAL-RUNTIME_ai} \ ${VIRTUAL-RUNTIME_com.webos.service.mediacontroller} \ ${VIRTUAL-RUNTIME_com.webos.service.flowmanager} \ + ${VIRTUAL-RUNTIME_contextintentmgr} \ ${VIRTUAL-RUNTIME_g-camera-pipeline} \ + ${VIRTUAL-RUNTIME_tts} \ wireless-regdb-static \ " diff --git a/meta-webos/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bb b/meta-webos/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bb index 9ac63fe92..410429a33 100644 --- a/meta-webos/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bb +++ b/meta-webos/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bb @@ -9,12 +9,8 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7ca DEPENDS = "nodejs-module-node-red" -COMPATIBLE_MACHINE = "^raspberrypi3$|^raspberrypi4$" -COMPATIBLE_MACHINE_raspberrypi3-64 = "^$" -COMPATIBLE_MACHINE_raspberrypi4-64 = "^$" - WEBOS_VERSION = "1.0.0-15_164dac6257c940674dd1e00657d40bdc200144f2" -PR = "r3" +PR = "r4" # The same restrition as nodejs (and nodejs-module-node-red) COMPATIBLE_MACHINE_armv4 = "(!.*armv4).*" diff --git a/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb b/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb index 6ae547b73..0fc0d2747 100644 --- a/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb +++ b/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb @@ -9,11 +9,8 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ DEPENDS= "glib-2.0 libxml2 luna-service2 pmloglib libgdrive libpbnjson curl gupnp" -COMPATIBLE_MACHINE = "^raspberrypi4$|^qemux86$" -COMPATIBLE_MACHINE_raspberrypi4-64 = "^$" - WEBOS_VERSION = "1.0.0-17_8d99527ad0e8d42668c570293b4204f77fe1a458" -PR = "r5" +PR = "r6" inherit webos_component inherit webos_public_repo diff --git a/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb b/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb index c38ea9be5..3b8263100 100644 --- a/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb +++ b/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb @@ -9,12 +9,8 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ DEPENDS = "glib-2.0 luna-service2 libpbnjson pmloglib json-c pulseaudio googleapis grpc" -COMPATIBLE_MACHINE = "^raspberrypi3$|^raspberrypi4$" -COMPATIBLE_MACHINE_raspberrypi3-64 = "^$" -COMPATIBLE_MACHINE_raspberrypi4-64 = "^$" - WEBOS_VERSION = "1.0.0-20_dba2c3804230e47b90b317282debcf938b6656c3" -PR = "r5" +PR = "r6" inherit webos_component inherit webos_public_repo From 1eb7355a08ebb777c8dc7b3b54c9b165f3d9f56f Mon Sep 17 00:00:00 2001 From: "jongson.kim" Date: Thu, 28 Oct 2021 20:27:03 +0900 Subject: [PATCH 0149/2022] ose: qml-app-components=4-r4 :Release Notes: Introduce StyleLoader and JsonLoader, style customization tool for qml :Detailed Notes: qml-app-components: submissions/2..submissions/4 f18d8d5 Update licenses as APACHE 2.0 90b9593 Apply local json path for each application 58d3c39 Fix bug for json not work for some case 4f17d26 Introduce StyleLoader and JsonLoader :Testing Performed: Please check CCC tickets :QA Notes: :Issues Addressed: [WRN-9947] CCC: ose: qml-app-components=4-r4 [WRN-9210] Integrate into OSE before apply T2 features [WRN-9816] Support for integrate into application Change-Id: I82872479e307825074e6000ab99344fcc4ba3687 --- .../qml-app-components/qml-app-components.bb | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb b/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb index 154f69cb4..682bca184 100644 --- a/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb +++ b/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb @@ -3,13 +3,16 @@ SUMMARY = "webOS QML app components" AUTHOR = "Jongson Kim " SECTION = "webos/libs" -LICENSE = "CLOSED" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ +" DEPENDS = "qtdeclarative luna-service2 glib-2.0" DEPENDS_append = " ${@ 'qtshadertools-native' if d.getVar('QT_VERSION', True) == '6' else '' }" -WEBOS_VERSION = "1.0.0-2_fbf3fc0c2f22f9a283a33b3469fd187598609ca0" -PR = "r3" +WEBOS_VERSION = "1.0.0-4_e147b3bc8dc6a5edbcf5f4431611bd4fcf520e3b" +PR = "r4" inherit webos_qmake6 inherit webos_pkgconfig From 9dfcea00a7738d0224b1cd8816f1d4342c05bf7c Mon Sep 17 00:00:00 2001 From: "divvya.rosna" Date: Tue, 2 Nov 2021 14:07:14 +0900 Subject: [PATCH 0150/2022] ose: com.webos.service.mediacontroller=24 :Release Notes: Fix play/pause/next/previous functionalities not working through connected BT device in 64 bit environment :Detailed Notes: com.webos.service.mediacontroller: submissions/23..submissions/24 9d7ef47 Fix play/pause/next/previous functionalities not working through connected BT device in rpi4-64 bit environment :Testing Performed: QWO-113, QWO-855, QWO-858, QWO-904 QWO-982, QWO-983, QWO-1021 :QA Notes: NA :Issues Addressed: [WRN-9168] CCC: Switch official OSE image to raspberrypi4 64bit [WRN-9219] [webOS OSE]: Next and Previous functionalities are not working through the connected BT device [WRN-9217] [webOS OSE]: Pause and Play is not working through the connected BT device Change-Id: If2d72d9b53242c9494dc8cdf419fb1910c93c061 --- .../com.webos.service.mediacontroller.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb b/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb index ddc739714..e19e86b5e 100644 --- a/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb +++ b/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 luna-service2 json-c pmloglib" -WEBOS_VERSION = "1.0.0-23_445c766ba04dbe36a94ebbd29540b886cf7c11c1" +WEBOS_VERSION = "1.0.0-24_363fbf2f0fbb2d0f3dc746e23a62bafb0acfee4d" PR = "r2" inherit webos_component From 5b1685f3981165d17df67384503c88bfa2668eb0 Mon Sep 17 00:00:00 2001 From: "jonghen.han" Date: Fri, 29 Oct 2021 14:46:23 +0900 Subject: [PATCH 0151/2022] org.ocf.webossample.{occlientbasicops=r4 ocserverbasicops=r4} :Release Notes: Add occlientbasicops and ocserverbasicops binaries in qemux86 image :Detailed Notes: Add occlientbasicops and ocserverbasicops binaries in qemux86 image :Testing Performed: Please check CCC tickets :QA Notes: :Issues Addressed: [WRN-9996] CCC: org.ocf.webossample.{occlientbasicops=r4 ocserverbasicops=r4} [WRN-9691] [webOS OSE]: "not found" displayed for "./ocserverbasicops" Change-Id: I347aabbbd405ed9114b342c8aba26ea7f2902788 --- .../org.ocf.webossample.occlientbasicops.bb | 6 ++++-- .../org.ocf.webossample.ocserverbasicops.bb | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb index 433674c8f..46dff56ec 100644 --- a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb +++ b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb @@ -23,7 +23,7 @@ SRCREV_FORMAT = "main" do_fetch[vardeps] = "SRCREV_main SRCREV_tinycbor SRCREV_mbedtls" S = "${WORKDIR}/iotivity" -PR = "r3" +PR = "r4" inherit scons pkgconfig webos_component webos_filesystem_paths @@ -55,7 +55,9 @@ do_install_append() { install -d ${D}${webos_servicesdir}/org.ocf.webossample.occlientbasicops install -v -m 0755 ${S}/out/webos/${IOTIVITY_TARGET_ARCH}/release/resource/csdk/stack/samples/webos/secure/occlientbasicops/* ${D}${webos_servicesdir}/org.ocf.webossample.occlientbasicops - + if [ "${IOTIVITY_TARGET_ARCH}" = "i686" ]; then + install -v -m 0755 ${S}/out/webos/arm/release/resource/csdk/stack/samples/webos/secure/occlientbasicops/* ${D}${webos_servicesdir}/org.ocf.webossample.occlientbasicops + fi # ACG configuration files install -d ${D}${datadir}/luna-service2/roles.d install -d ${D}${datadir}/luna-service2/services.d diff --git a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb index 8b1a9ab6b..3a0870bec 100644 --- a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb +++ b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb @@ -23,7 +23,7 @@ SRCREV_FORMAT = "main" do_fetch[vardeps] = "SRCREV_main SRCREV_tinycbor SRCREV_mbedtls" S = "${WORKDIR}/iotivity" -PR = "r3" +PR = "r4" inherit scons pkgconfig webos_component webos_filesystem_paths @@ -53,7 +53,9 @@ do_install_append() { install -d ${D}${webos_servicesdir}/org.ocf.webossample.ocserverbasicops install -v -m 0755 ${S}/out/webos/${IOTIVITY_TARGET_ARCH}/release/resource/csdk/stack/samples/webos/secure/ocserverbasicops/* ${D}${webos_servicesdir}/org.ocf.webossample.ocserverbasicops - + if [ "${IOTIVITY_TARGET_ARCH}" = "i686" ]; then + install -v -m 0755 ${S}/out/webos/arm/release/resource/csdk/stack/samples/webos/secure/ocserverbasicops/* ${D}${webos_servicesdir}/org.ocf.webossample.ocserverbasicops + fi # ACG configuration files install -d ${D}${datadir}/luna-service2/roles.d install -d ${D}${datadir}/luna-service2/services.d From 6c621b5fb7cf0e7e017640baec27edf4a30c3845 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 15 Oct 2021 08:57:53 -0700 Subject: [PATCH 0152/2022] qtmultimedia: improve the comment about SRCREV :Release Notes: :Detailed Notes: _qtmultimedia isn't an override, it's just part of variable name later used as: SRCREV = "${SRCREV_${QT_MODULE}}" Not sure why they implemented it this way, normally you would use SRCREV:pn- as an override, but then it gets a bit more complicated for recipes with multiple git repos in SRC_URI where you need to set also SRCREV_:pn- for each name= in SRC_URI. :Testing Performed: See the CCC JIRA ticket. :QA Notes: None. :Issues Addressed: [WRN-8503] CCC: Update meta-qt6 to v6.2.1 Change-Id: Id34c456e7f09157d93cee2acd3af32a1cec0ac23 --- meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb b/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb index 2757121d2..04c2178b0 100644 --- a/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb +++ b/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb @@ -38,7 +38,8 @@ CXXFLAGS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', '-DMESA_EGL_NO_X LDFLAGS_append_x86 = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', ' -fuse-ld=bfd ', '', d)}" QT_MODULE_BRANCH = "dev" -# Needs the override since v6.2.0-rc2 +# Needs the "_${QT_MODULE}" suffix (it's not an override), +# since v6.2.0-rc2 with https://code.qt.io/cgit/yocto/meta-qt6.git/commit/?id=f61b87ae78ff376c206baad10bc4184328889db7 SRCREV_qtmultimedia = "e22a4c82ee24d3d574a6be629e3049248cfba9d9" PV = "6.0.0" From e7d9d2238c47405445877dac877d2ef867c10443 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 21 Sep 2021 11:08:55 -0700 Subject: [PATCH 0153/2022] qtmultimedia=webos8 (inherit pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through pkgconfig.bbclass as we're using it here. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/241750 ERROR: Feature 'pulseaudio' was enabled, but the pre-condition 'libs.pulseaudio' failed. Similar change was already applied in meta-qt5: https://github.com/meta-qt5/meta-qt5/commit/f200be9d671ced4d2f8054c238527a7c6ed5b4b8 and upstream recipe in meta-qt6: https://code.qt.io/cgit/yocto/meta-qt6.git/commit/?id=d718354d16d1e65b0d02b360f56d23f56d083d69 :Testing Performed: See the CCC JIRA ticket. :QA Notes: No change to the image. :Issues Addressed: [WRN-8503] CCC: Update meta-qt6 to v6.2.1 Change-Id: Ibfd1369b3ee4b9e9b6e20caaef53f59c551800ef --- meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb | 8 ++++++++ meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bbappend | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb b/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb index 04c2178b0..b28a9bb13 100644 --- a/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb +++ b/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb @@ -46,3 +46,11 @@ PV = "6.0.0" SRC_URI += "\ file://0001-Fix-build-error-for-qtmultimedia-dev-branch.patch \ " + +# this is already in the upstream recipe since: +# https://code.qt.io/cgit/yocto/meta-qt6.git/commit/?id=d718354d16d1e65b0d02b360f56d23f56d083d69 +# it detects that pkgconfig is missing: +# and then fails because pulseaudio PACKAGECONFIG is enabled but isn't detected: +# ERROR: Feature 'pulseaudio' was enabled, but the pre-condition 'libs.pulseaudio' failed. +# ERROR: Error calling TOPDIR/BUILD/work/qemux86-webos-linux/qtmultimedia/6.0.0-r0/recipe-sysroot-native/usr/bin/qmake -makefile -o Makefile QT_BUILD_PARTS-=examples QT_BUILD_PARTS-=tests TOPDIR/BUILD/work/qemux86-webos-linux/qtmultimedia/6.0.0-r0/git/qtmultimedia.pro -- -alsa -pulseaudio -no-gstreamer +inherit pkgconfig diff --git a/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bbappend b/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bbappend index a524f8fef..a9b4630e2 100644 --- a/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bbappend +++ b/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2016-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos7" +EXTENDPRAUTO_append = "webos8" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" From 3b46e22c3299071a98762977c8b0dc347c70fb71 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 19 Oct 2021 03:31:20 -0700 Subject: [PATCH 0154/2022] qtgraphicaleffects: add dependency on qtdeclarative-native :Release Notes: It's not added automatically to every recipe which depends on target qtdeclarative anymore after: https://code.qt.io/cgit/yocto/meta-qt6.git/commit/?id=c3389d194cf906c384e55966376f92f52515c0ef add the dependency explicitly as other recipes do now. :Detailed Notes: :Testing Performed: See the CCC JIRA ticket. :QA Notes: No change to the image. :Issues Addressed: [WRN-8503] CCC: Update meta-qt6 to v6.2.1 Change-Id: Icd81ed84b88d83b1bb3c368a814d821f29cee563 --- meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb b/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb index 7b4af263d..ae1ec08b5 100644 --- a/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb +++ b/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb @@ -11,7 +11,7 @@ inherit qt6-cmake include recipes-qt/qt6/qt6-git.inc include recipes-qt/qt6/qt6.inc -DEPENDS += "qtbase qtdeclarative" +DEPENDS += "qtbase qtdeclarative qtdeclarative-native" PV = "6.2.0" QT_MODULE_BRANCH = "6.2" From 28c80621ebaf19727313a26a70ab1d8a01da3b00 Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Mon, 25 Oct 2021 10:00:15 +0900 Subject: [PATCH 0155/2022] qtbase=webos93 (fix patch conflict) :Release Notes: Update the patch for the g++ 7 build issue. :Detailed Notes: The existing patch that reverts the commit for the host build issue with g++ 7 is amended by adding another revert commit so that it applies without conflict. :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: [WRN-8503] CCC: Update meta-qt6 to v6.2.1 Change-Id: I2d11e66117aad75495b7df6fdbe0fbdedeed763b --- ...ts-causing-a-compile-error-with-g-7.patch} | 22 ++++++++++--------- meta-webos/recipes-qt/qt6/qtbase_git.bbappend | 4 ++-- 2 files changed, 14 insertions(+), 12 deletions(-) rename meta-webos/recipes-qt/qt6/qtbase/{0002-Revert-QRegularExpression-fix-matching-over-null-emp.patch => 0002-Revert-commits-causing-a-compile-error-with-g-7.patch} (86%) diff --git a/meta-webos/recipes-qt/qt6/qtbase/0002-Revert-QRegularExpression-fix-matching-over-null-emp.patch b/meta-webos/recipes-qt/qt6/qtbase/0002-Revert-commits-causing-a-compile-error-with-g-7.patch similarity index 86% rename from meta-webos/recipes-qt/qt6/qtbase/0002-Revert-QRegularExpression-fix-matching-over-null-emp.patch rename to meta-webos/recipes-qt/qt6/qtbase/0002-Revert-commits-causing-a-compile-error-with-g-7.patch index ada6e3993..05041c67d 100644 --- a/meta-webos/recipes-qt/qt6/qtbase/0002-Revert-QRegularExpression-fix-matching-over-null-emp.patch +++ b/meta-webos/recipes-qt/qt6/qtbase/0002-Revert-commits-causing-a-compile-error-with-g-7.patch @@ -1,11 +1,13 @@ -From e3314d6167889d11a26d536f281ec2f8f9ca5427 Mon Sep 17 00:00:00 2001 +From 54f09c2fbb037da71f4402cce2d53cc71b7e08c6 Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung -Date: Mon, 13 Sep 2021 13:05:35 +0900 -Subject: [PATCH] Revert "QRegularExpression: fix matching over null/empty - QString(View)" +Date: Mon, 25 Oct 2021 09:53:13 +0900 +Subject: [PATCH] Revert commits causing a compile error with g++ 7 -This reverts commit 8359615cf984ed84ab358570c6a0ab0344de7b0c as it -causes a compile error with g++ 7. See also +This reverts commit 7fcae4e1b51d8a9d1ba65fb1ade240ae8b204980, +"Fix compilation error with MSVC 2019 and C++20" +and commit 8359615cf984ed84ab358570c6a0ab0344de7b0c, +"QRegularExpression: fix matching over null/empty QString(View)" +as they cause a compile error with g++ 7. See also https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53157 Upstream-Status : Inappropriate [workaround] @@ -15,10 +17,10 @@ Upstream-Status : Inappropriate [workaround] 2 files changed, 4 insertions(+), 37 deletions(-) diff --git a/src/corelib/text/qregularexpression.cpp b/src/corelib/text/qregularexpression.cpp -index e055ae064a..72079c1996 100644 +index b0728bca4a..e61d77f0b7 100644 --- a/src/corelib/text/qregularexpression.cpp +++ b/src/corelib/text/qregularexpression.cpp -@@ -1174,19 +1174,7 @@ void QRegularExpressionPrivate::doMatch(QRegularExpressionMatchPrivate *priv, +@@ -1180,19 +1180,7 @@ void QRegularExpressionPrivate::doMatch(QRegularExpressionMatchPrivate *priv, pcre2_jit_stack_assign_16(matchContext, &qtPcreCallback, nullptr); pcre2_match_data_16 *matchData = pcre2_match_data_create_from_pattern_16(compiledPattern, nullptr); @@ -26,7 +28,7 @@ index e055ae064a..72079c1996 100644 - // its length is zero. We however allow it in input: a QStringView - // subject may have data == nullptr. In this case, to keep PCRE - // happy, pass a pointer to a dummy character. -- constexpr char16_t dummySubject = 0; +- const char16_t dummySubject = 0; - const char16_t * const subjectUtf16 = [&]() - { - const auto subjectUtf16 = priv->subject.utf16(); @@ -39,7 +41,7 @@ index e055ae064a..72079c1996 100644 int result; -@@ -1622,7 +1610,7 @@ QRegularExpressionMatch QRegularExpression::match(const QString &subject, +@@ -1628,7 +1616,7 @@ QRegularExpressionMatch QRegularExpression::match(const QString &subject, d.data()->compilePattern(); auto priv = new QRegularExpressionMatchPrivate(*this, subject, diff --git a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend index 398a2f6ab..b7c794573 100644 --- a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend @@ -2,7 +2,7 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos92" +EXTENDPRAUTO_append = "webos93" # Remove LGPL3-only files python do_patch_append() { @@ -89,7 +89,7 @@ SRC_URI_append = " \ # Drop this once our build host has a newer version of g++. SRC_URI_append_class-native = " \ file://0001-Fix-compile-error-with-g-7.5.0.patch \ - file://0002-Revert-QRegularExpression-fix-matching-over-null-emp.patch \ + file://0002-Revert-commits-causing-a-compile-error-with-g-7.patch \ " # Flags needed for webOS From 99570248376e5b5d3f376028979e8e398684f19d Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 8 Oct 2021 01:27:49 -0700 Subject: [PATCH 0156/2022] qtwayland=webosrpi2 (remove patch applied upstream) :Release Notes: :Detailed Notes: Resolved in upstream with: commit 5b0e54d763338808a35f07d5481460c4cdd0c008 Author: Dominik Holland Date: Thu Sep 2 18:58:48 2021 +0200 Add explicit dependency to Libdrm::Libdrm :Testing Performed: See the CCC JIRA ticket. :QA Notes: None. :Issues Addressed: [WRN-8503] CCC: Update meta-qt6 to v6.2.1 Change-Id: I928f1dc3e0d6c165f34581a888429f947fd2a386 --- ...-Fix-build-error-when-finding-libdrm.patch | 23 ------------------- .../recipes-qt/qt6/qtwayland_git.bbappend | 9 +------- 2 files changed, 1 insertion(+), 31 deletions(-) delete mode 100644 meta-webos-raspberrypi/recipes-qt/qt6/qtwayland/0001-Fix-build-error-when-finding-libdrm.patch diff --git a/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland/0001-Fix-build-error-when-finding-libdrm.patch b/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland/0001-Fix-build-error-when-finding-libdrm.patch deleted file mode 100644 index 8e36739d9..000000000 --- a/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland/0001-Fix-build-error-when-finding-libdrm.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 204f021f68d8a20ba31033c5550530590aba6efb Mon Sep 17 00:00:00 2001 -From: Youngjin Kim -Date: Mon, 21 Jun 2021 13:48:07 +0900 -Subject: [PATCH] Fix build error when finding libdrm - -Change-Id: Ic1a066bf81ef760d57f31c3a6d08f3bbb8073b56 -Upstream-Status : Inappropriate [workaround] ---- - src/compositor/configure.cmake | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/compositor/configure.cmake b/src/compositor/configure.cmake -index 9c5864e3..06356a15 100644 ---- a/src/compositor/configure.cmake -+++ b/src/compositor/configure.cmake -@@ -28,6 +28,7 @@ if(NOT TARGET XKB::XKB) - qt_find_package(XKB 0.5.0 PROVIDED_TARGETS XKB::XKB MODULE_NAME gui QMAKE_LIB xkbcommon MARK_OPTIONAL) - endif() - -+qt_find_package(Libdrm PROVIDED_TARGETS Libdrm::Libdrm MODULE_NAME gui QMAKE_LIB drm) - - #### Tests - diff --git a/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland_git.bbappend b/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland_git.bbappend index 32ec2c393..8e967af0d 100644 --- a/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland_git.bbappend +++ b/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland_git.bbappend @@ -1,12 +1,5 @@ # Copyright (c) 2021 LG Electronics, Inc. -EXTENDPRAUTO_append_rpi = "webosrpi1" - -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +EXTENDPRAUTO_append_rpi = "webosrpi2" PACKAGECONFIG_append_rpi = " dmabuf-client-buffer" - -# Upstream-Status: Inappropriate -SRC_URI_append_rpi = " \ - file://0001-Fix-build-error-when-finding-libdrm.patch \ -" From 78925b994e17c6b389d40d4f14c982bec5711328 Mon Sep 17 00:00:00 2001 From: "sc.heo" Date: Tue, 2 Nov 2021 09:59:21 +0900 Subject: [PATCH 0157/2022] ose: g-media-pipeline=21.gav.23-r9 g-camera-pipeline=13.gav.24-r10 media-resource-calculator=9-r6 media-codec-interface=r3 com.webos.service.mediacontroller=24-r3 alsa-plugins=webos2 umi=10-r4 packagegroup-webos-extended=r40 bootd=18-r14 linux-yocto=webos12 webruntime=r51.3 wam=55-r43 :Release Notes: support qemux86 64bit ose emulator :Detailed Notes: add qemux86-64 in meta files for ose emulator resolve 64bit ose emulator booting fail issue g-media-pipeline: submissions/21.gav.22..submissions/21.gav.23 92f23d3 support qemux86-64 emulator g-camera-pipeline: submissions/13.gav.23..submissions/13.gav.24 58b46db support qemux86-64 emulator media-resource-calculator: submissions/8..submissions/9 312e04b Support qemux86-64 emulator :Testing Performed: Build and local test :QA Notes: N/A :Issues Addressed: [WRN-9386] Support qemux86 64bit ose emulator build [WRN-10029] CCC: Support qemux86 64bit ose emulator Change-Id: I552855a341442bc254fc7ed9727ddbf45110786c --- .../wpa-supplicant/wpa-supplicant.service | 4 +- .../packagegroup-webos-extended.bb | 49 ++++++++++++++++++- .../linux/linux-yocto_%.bbappend | 15 +++++- .../alsa/alsa-plugins_%.bbappend | 11 ++++- .../g-media-pipeline/g-media-pipeline.bb | 5 +- .../media-codec-interface.bb | 4 +- meta-webos/recipes-multimedia/umi/umi.bb | 5 +- meta-webos/recipes-webos/bootd/bootd.bb | 5 +- .../recipes-webos/chromium/webruntime.inc | 6 ++- .../recipes-webos/chromium/webruntime_87.bb | 3 +- .../com.webos.service.mediacontroller.bb | 4 +- .../g-camera-pipeline/g-camera-pipeline.bb | 5 +- .../media-resource-calculator.bb | 5 +- meta-webos/recipes-webos/wam/wam.bb | 10 +++- 14 files changed, 109 insertions(+), 22 deletions(-) diff --git a/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.service b/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.service index f2cf668fa..0bba3e65f 100644 --- a/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.service +++ b/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.service @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2021 LG Electronics, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ [Unit] Description=webos - "%n" -ConditionHost=!qemux86 +ConditionHost=(!qemux86 && !qemux86-64) Requires=ls-hubd.service After=ls-hubd.service diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index e174a110a..0a714a566 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -5,7 +5,7 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" # You don't need to change this value when you're changing just RDEPENDS_${PN} variable. -PR = "r39" +PR = "r40" PACKAGE_ARCH = "${MACHINE_ARCH}" inherit packagegroup @@ -34,6 +34,7 @@ VIRTUAL-RUNTIME_nyx_modules_providers ??= "\ # Restricted to only these 3 MACHINEs by COMPATIBLE_MACHINE VIRTUAL-RUNTIME_com.webos.service.mediacontroller ?= "" VIRTUAL-RUNTIME_com.webos.service.mediacontroller_qemux86 = "com.webos.service.mediacontroller" +VIRTUAL-RUNTIME_com.webos.service.mediacontroller_qemux86-64 = "com.webos.service.mediacontroller" VIRTUAL-RUNTIME_com.webos.service.mediacontroller_raspberrypi4 = "com.webos.service.mediacontroller" VIRTUAL-RUNTIME_com.webos.service.mediacontroller_raspberrypi4-64 = "com.webos.service.mediacontroller" @@ -43,11 +44,13 @@ VIRTUAL-RUNTIME_g-media-pipeline_raspberrypi3-64 = "g-media-pipeline" VIRTUAL-RUNTIME_g-media-pipeline_raspberrypi4 = "g-media-pipeline" VIRTUAL-RUNTIME_g-media-pipeline_raspberrypi4-64 = "g-media-pipeline" VIRTUAL-RUNTIME_g-media-pipeline_qemux86 = "g-media-pipeline" +VIRTUAL-RUNTIME_g-media-pipeline_qemux86-64 = "g-media-pipeline" VIRTUAL-RUNTIME_g-camera-pipeline ?= "" VIRTUAL-RUNTIME_g-camera-pipeline_raspberrypi4 = "g-camera-pipeline" VIRTUAL-RUNTIME_g-camera-pipeline_raspberrypi4-64 = "g-camera-pipeline" VIRTUAL-RUNTIME_g-camera-pipeline_qemux86 = "g-camera-pipeline" +VIRTUAL-RUNTIME_g-camera-pipeline_qemux86-64 = "g-camera-pipeline" VIRTUAL-RUNTIME_pdm ?= "com.webos.service.pdm" @@ -294,6 +297,36 @@ RRECOMMENDS_${PN}_append_qemux86 = " \ ntfs-3g \ " +RRECOMMENDS_${PN}_append_qemux86-64 = " \ + fuse-utils \ + kernel-module-ac97-bus \ + kernel-module-bluetooth \ + kernel-module-btbcm \ + kernel-module-btintel \ + kernel-module-btusb \ + kernel-module-configs \ + kernel-module-evdev \ + kernel-module-fuse \ + kernel-module-hci-uart \ + kernel-module-media \ + kernel-module-rfcomm \ + kernel-module-snd-ac97-codec \ + kernel-module-snd-intel8x0 \ + kernel-module-snd-pcm \ + kernel-module-snd-usb-audio \ + kernel-module-snd-usbmidi-lib \ + kernel-module-uinput \ + kernel-module-uvcvideo \ + kernel-module-v4l2-common \ + kernel-module-vboxguest \ + kernel-module-videobuf2-core \ + kernel-module-videobuf2-memops \ + kernel-module-videobuf2-v4l2 \ + kernel-module-videobuf2-vmalloc \ + kernel-module-videodev \ + ntfs-3g \ +" + RDEPENDS_${PN}_append_qemux86 = " \ com.webos.service.audiofocusmanager \ com.webos.service.audiooutput \ @@ -308,6 +341,20 @@ RDEPENDS_${PN}_append_qemux86 = " \ v4l-utils \ vmwgfx-layout \ " +RDEPENDS_${PN}_append_qemux86-64 = " \ + com.webos.service.audiofocusmanager \ + com.webos.service.audiooutput \ + com.webos.service.camera \ + com.webos.service.hfp \ + com.webos.service.location \ + com.webos.service.mediaindexer \ + com.webos.service.power2 \ + com.webos.service.storageaccess \ + dhcp-client \ + ofono \ + v4l-utils \ + vmwgfx-layout \ +" RDEPENDS_${PN} += "${MACHINE_EXTRA_RDEPENDS}" RRECOMMENDS_${PN} += "${MACHINE_EXTRA_RRECOMMENDS}" diff --git a/meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend b/meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend index a897821f2..e24df04fb 100644 --- a/meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend +++ b/meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2015-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos11" +EXTENDPRAUTO_append = "webos12" # Assign to PE, because empty PKGE in KERNEL_IMAGE_NAME causes two hyphens. PE = "1" @@ -17,11 +17,24 @@ SRC_URI_append_qemux86 = " file://crypto.cfg \ file://file_system.cfg \ file://bluetooth_ext.cfg \ " +SRC_URI_append_qemux86-64 = " file://crypto.cfg \ + file://my_gfx.cfg \ + file://vbox_gfx.cfg \ + file://sound.cfg \ + file://enable_uinput.cfg \ + file://network_testing.cfg \ + file://0001-change-keymax-value.patch \ + file://file_system.cfg \ + file://bluetooth_ext.cfg \ +" KERNEL_FEATURES_append_qemux86 = " features/bluetooth/bluetooth-usb.scc" +KERNEL_FEATURES_append_qemux86-64 = " features/bluetooth/bluetooth-usb.scc" # needed to build gator KERNEL_FEATURES_append_qemux86 = " features/profiling/profiling.cfg" +KERNEL_FEATURES_append_qemux86-64 = " features/profiling/profiling.cfg" + KERNEL_MODULE_AUTOLOAD_append_qemux86 = "\ vboxguest \ diff --git a/meta-webos/recipes-multimedia/alsa/alsa-plugins_%.bbappend b/meta-webos/recipes-multimedia/alsa/alsa-plugins_%.bbappend index cbd100657..39d0220dd 100644 --- a/meta-webos/recipes-multimedia/alsa/alsa-plugins_%.bbappend +++ b/meta-webos/recipes-multimedia/alsa/alsa-plugins_%.bbappend @@ -1,6 +1,6 @@ -# Copyright (c) 2015-2017 LG Electronics, Inc. +# Copyright (c) 2015-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO_append = "webos2" # We don't have speexdsp in our layers PACKAGECONFIG_remove = "speexdsp" @@ -13,3 +13,10 @@ SRC_URI_append_emulator = " file://99-pulseaudio-qemu-emulator.conf" do_install_append_emulator() { install -v -m 644 ${WORKDIR}/99-pulseaudio-qemu-emulator.conf ${D}${datadir}/alsa/alsa.conf.d/99-pulseaudio-default.conf } + +FILESEXTRAPATHS_prepend_qemux86-64 := "${THISDIR}/${BPN}:" +SRC_URI_append_qemux86-64 = " file://99-pulseaudio-qemu-emulator.conf" + +do_install_append_qemux86-64() { + install -v -m 644 ${WORKDIR}/99-pulseaudio-qemu-emulator.conf ${D}${datadir}/alsa/alsa.conf.d/99-pulseaudio-default.conf +} diff --git a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb index 0d0af9334..2a4333281 100644 --- a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb +++ b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb @@ -24,7 +24,8 @@ inherit webos_pkgconfig # raspberrypi4 # raspberrypi4-64 # qemux86 -COMPATIBLE_MACHINE = "^qemux86$|^raspberrypi3$|^raspberrypi3-64$|^raspberrypi4$|^raspberrypi4-64$" +# qemux86-64 +COMPATIBLE_MACHINE = "^qemux86$|^qemux86-64$|^raspberrypi3$|^raspberrypi3-64$|^raspberrypi4$|^raspberrypi4-64$" # raspberrypi4 and qemux86 uses @gav branch PR = "r9" @@ -32,7 +33,7 @@ DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad DEPENDS_append_rpi = " virtual/libomxil" WEBOS_GIT_PARAM_BRANCH = "@gav" -WEBOS_VERSION = "1.0.0-21.gav.22_bfda47abcd88d2f27e4682ea85786464439b6144" +WEBOS_VERSION = "1.0.0-21.gav.23_0890c1cfc02fd7f3d71763d5e2b73c1a49487c6a" SRC_URI_append = " file://0001-LunaServiceClient.cpp-include-string-to-fix-build-wi.patch" # raspberrypi3 uses @21.master branch diff --git a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb index 492dfe5f7..8d242a9e8 100644 --- a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb +++ b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb @@ -16,13 +16,13 @@ inherit webos_machine_impl_dep inherit webos_machine_dep inherit webos_pkgconfig -COMPATIBLE_MACHINE = "^qemux86$|^raspberrypi3$|^raspberrypi3-64$|^raspberrypi4$|^raspberrypi4-64$" +COMPATIBLE_MACHINE = "^qemux86$|^qemux86-64$|^raspberrypi3$|^raspberrypi3-64$|^raspberrypi4$|^raspberrypi4-64$" DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad umediaserver media-resource-calculator" DEPENDS_append_rpi = " virtual/libomxil" WEBOS_VERSION = "1.0.0-3_13f4a0e50c95f7ecf04be37949c0da266ba221d3" -PR = "r2" +PR = "r3" SRCREV_mcil = "ef2a9b183262a04e8246df951acf4693a18b3cd6" diff --git a/meta-webos/recipes-multimedia/umi/umi.bb b/meta-webos/recipes-multimedia/umi/umi.bb index 6ceea86f1..832467eac 100644 --- a/meta-webos/recipes-multimedia/umi/umi.bb +++ b/meta-webos/recipes-multimedia/umi/umi.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2021 LG Electronics, Inc. SUMMARY = "AudioOutputd adaptation layer (UMI) API definition and test harness" SECTION = "webos/libs" @@ -19,9 +19,10 @@ inherit webos_public_repo DEPENDS = "glib-2.0 pmloglib libpbnjson alsa-lib" WEBOS_VERSION = "1.0.0-10_5562fabff79cce1fcd85034ff0273fc56cb806cd" -PR = "r3" +PR = "r4" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" EXTRA_OECMAKE_append_qemux86 = " -DWEBOS_SOC:STRING=qemux86" +EXTRA_OECMAKE_append_qemux86-64 = " -DWEBOS_SOC:STRING=qemux86" diff --git a/meta-webos/recipes-webos/bootd/bootd.bb b/meta-webos/recipes-webos/bootd/bootd.bb index bebf836fd..64ba0d01c 100644 --- a/meta-webos/recipes-webos/bootd/bootd.bb +++ b/meta-webos/recipes-webos/bootd/bootd.bb @@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "luna-service2 libpbnjson pmloglib glib-2.0 boost" WEBOS_VERSION = "2.0.0-18_8c9332daa3d0d8b492710d47dc7c7c8d7caefb49" -PR = "r13" +PR = "r14" inherit webos_component inherit webos_enhanced_submissions @@ -35,6 +35,9 @@ SRC_URI_append_qemux86 = " \ file://0001-display-count-check-for-emulator.patch \ " +SRC_URI_append_qemux86-64 = " \ + file://0001-display-count-check-for-emulator.patch \ +" # LTTNG option # WEBOS_LTTNG_ENABLED = "0" EXTRA_OECMAKE += " ${@bb.utils.contains('WEBOS_LTTNG_ENABLED', '1', '-DWEBOS_LTTNG_ENABLED:BOOLEAN=True', '', d)}" diff --git a/meta-webos/recipes-webos/chromium/webruntime.inc b/meta-webos/recipes-webos/chromium/webruntime.inc index 430e1cc25..36a446a21 100644 --- a/meta-webos/recipes-webos/chromium/webruntime.inc +++ b/meta-webos/recipes-webos/chromium/webruntime.inc @@ -24,7 +24,7 @@ DEPENDS = "virtual/gettext wayland wayland-native luna-service2 pixman freetype DEPENDS_remove_raspberrypi4 = " xproto" DEPENDS_append_raspberrypi4 = " xorgproto" -INC_PR = "r50" +INC_PR = "r51" # Enable this in webos-local.conf or in recipe to build DEPLOY_CHROMEDRIVER ?= "false" DEPLOY_WAM_DEMO ?= "false" @@ -184,6 +184,10 @@ modify_run_app_shell_append_qemux86() { # Disable media hardware acceleration sed -i '/--disable-web-security\\/a\ --disable-web-media-player-neva\\' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} } +modify_run_app_shell_append_qemux86-64() { + # Disable media hardware acceleration + sed -i '/--disable-web-security\\/a\ --disable-web-media-player-neva\\' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} +} WINDOW_SIZE ?= "1920,1080" CACHE_DIR ?= "${webos_homedir}/webbrowser" diff --git a/meta-webos/recipes-webos/chromium/webruntime_87.bb b/meta-webos/recipes-webos/chromium/webruntime_87.bb index 5033726eb..4a9d3fe8d 100644 --- a/meta-webos/recipes-webos/chromium/webruntime_87.bb +++ b/meta-webos/recipes-webos/chromium/webruntime_87.bb @@ -6,7 +6,7 @@ require webruntime-repo${REPO_VERSION}.inc PROVIDES = "virtual/webruntime" -PR = "${INC_PR}.2" +PR = "${INC_PR}.3" GN_ARGS_append = " use_x11=false" @@ -34,3 +34,4 @@ GN_ARGS_append = " \ use_local_storage_tracker=true\ " PACKAGECONFIG_remove_qemux86 = "gstreamer umediaserver neva-media gav neva-webrtc" +PACKAGECONFIG_remove_qemux86-64 = "gstreamer umediaserver neva-media gav neva-webrtc" diff --git a/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb b/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb index e19e86b5e..d2a646a85 100644 --- a/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb +++ b/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb @@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 luna-service2 json-c pmloglib" WEBOS_VERSION = "1.0.0-24_363fbf2f0fbb2d0f3dc746e23a62bafb0acfee4d" -PR = "r2" +PR = "r3" inherit webos_component inherit webos_cmake @@ -26,7 +26,7 @@ inherit webos_daemon SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" -COMPATIBLE_MACHINE = "^qemux86$|^raspberrypi4$|^raspberrypi4-64$" +COMPATIBLE_MACHINE = "^qemux86$|^qemux86-64$|^raspberrypi4$|^raspberrypi4-64$" FILES_${PN} += "${libdir}/*.so" FILES_SOLIBSDEV = "" diff --git a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb index 0bc78b4dc..1eca461be 100644 --- a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb +++ b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb @@ -24,13 +24,14 @@ DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad DEPENDS_append_rpi = " userland" WEBOS_GIT_PARAM_BRANCH = "@gav" -WEBOS_VERSION = "1.0.0-13.gav.23_ef003343fe115366073e705355e5db9853805989" +WEBOS_VERSION = "1.0.0-13.gav.24_63de3a9a912af9caa2dbe03d367b5db22379745b" + WEBOS_GIT_PARAM_BRANCH_raspberrypi3 = "master" WEBOS_VERSION_raspberrypi3 = "1.0.0-16_e7fc787fdb52abb4ebd5c18f798976f6ebffad9f" # See the restrictions in CMakeLists.txt -COMPATIBLE_MACHINE = "^raspberrypi3$|^raspberrypi4$|^qemux86$" +COMPATIBLE_MACHINE = "^raspberrypi3$|^raspberrypi4$|^qemux86$|^qemux86-64$" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" diff --git a/meta-webos/recipes-webos/media-resource-calculator/media-resource-calculator.bb b/meta-webos/recipes-webos/media-resource-calculator/media-resource-calculator.bb index 779b014b3..91e90e90c 100644 --- a/meta-webos/recipes-webos/media-resource-calculator/media-resource-calculator.bb +++ b/meta-webos/recipes-webos/media-resource-calculator/media-resource-calculator.bb @@ -13,7 +13,7 @@ DEPENDS = "libpbnjson" EXTRA_OECMAKE += "-DNO_TEST=1" -WEBOS_VERSION = "1.0.0-8_c8079f2c44942cc4bcaee39499b0cd66da388d4d" +WEBOS_VERSION = "1.0.0-9_d685d5e7c8828b252dba18833046a7c4fcd97f95" PR = "r6" inherit webos_component @@ -33,4 +33,5 @@ S = "${WORKDIR}/git" # raspberrypi4 # raspberrypi4-64 # qemux86 -COMPATIBLE_MACHINE = "^qemux86$|^raspberrypi3$|^raspberrypi3-64$|^raspberrypi4$|^raspberrypi4-64$" +# qemux86-64 +COMPATIBLE_MACHINE = "^qemux86$|^qemux86-64$|^raspberrypi3$|^raspberrypi3-64$|^raspberrypi4$|^raspberrypi4-64$" diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index e98bb71ae..7d806144c 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -19,7 +19,7 @@ VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" WEBOS_VERSION = "1.0.2-55_233715d16eeba34c2cc71bc813dbc60280475c44" -PR = "r42" +PR = "r43" WAM_BUILD_SYSTEM = "webos_qmake6" WAM_BUILD_SYSTEM_webos = "webos_cmake" @@ -128,6 +128,14 @@ do_configure_append_qemux86() { fi } +do_configure_append_qemux86-64() { + # Remove this condition once webos wam is synchronized to get systemd initscripts + if [ -f "${B}/webapp-mgr.sh" ]; then + # Disable media hardware acceleration + sed -i '/--enable-aggressive-release-policy \\/a\ --disable-web-media-player-neva \\' ${B}/webapp-mgr.sh + fi +} + do_install_append() { install -d ${D}${sysconfdir}/pmlog.d install -d ${D}${sysconfdir}/wam From b9c4620b55b0a1d3d3c67814180223075768ec79 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Wed, 28 Jul 2021 16:33:59 +0900 Subject: [PATCH 0158/2022] ose: Add webruntime_91=3-r51.0,v91.0.4472.114 Add mksnapshot-cross_91=r0 webruntime_87=r51.3 umediaserver=r19 :Release Notes: Add chromium91 and related changes :Detailed Notes: webruntime_91: r49.3 Base recipe for Chromium91 mksnapshot-cross_91: r0 Base recipe for mksnapshot of Chromium91 umediaserver: r18..r19 Add patch to cleanup message handler thread :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-3095] Create RP fork of neva 1.5 release [WRN-6489] Prepare OSE build with chromium91 [WRN-9719] CCC: Switch to chromium91 as default webruntime Change-Id: I22f314b7d8ee4228f58fd334e486f715ce72152a --- .../chromium/mksnapshot-cross_91.bb | 42 ++++++++++++++++ .../chromium/webruntime-common.inc | 2 +- .../chromium/webruntime-repo_91.inc | 12 +++++ .../recipes-webos/chromium/webruntime.inc | 2 +- .../recipes-webos/chromium/webruntime_87.bb | 1 - .../recipes-webos/chromium/webruntime_91.bb | 48 ++++++++++++++++++ .../umediaserver/umediaserver.bb | 4 +- ...is-added-for-cleanup-message-handler.patch | 50 +++++++++++++++++++ 8 files changed, 157 insertions(+), 4 deletions(-) create mode 100644 meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb create mode 100644 meta-webos/recipes-webos/chromium/webruntime-repo_91.inc create mode 100644 meta-webos/recipes-webos/chromium/webruntime_91.bb create mode 100644 meta-webos/recipes-webos/umediaserver/umediaserver/0001-waitForStop-API-is-added-for-cleanup-message-handler.patch diff --git a/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb b/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb new file mode 100644 index 000000000..f47559256 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb @@ -0,0 +1,42 @@ +# Copyright (c) 2021 LG Electronics, Inc. + +inherit cross + +WEBRUNTIME_REPO_VERSION = "91" +require webruntime-common.inc +require webruntime-repo${REPO_VERSION}.inc + +# Intentionaly disable uninative it failed to execute x86 binary on x64 host +# 32bit executable mksnapshot is required to create snapshot for the 32bit target +UNINATIVE_LOADER = "" + +PROVIDES = "mksnapshot-cross-${TARGET_ARCH}" +PN = "mksnapshot-cross-${TARGET_ARCH}" +BPN = "mksnapshot" +PR = "r0" + +TARGET = "v8_snapshot_clang_${TARGET_CPU}/mksnapshot" + +DEPENDS = "glib-2.0-native python-native gcc-runtime" + +GN_ARGS_append = "\ + use_pmlog=false \ +" + +do_configure() { + export GYP_CHROMIUM_NO_ACTION=1 + export PATH="${S}/depot_tools:$PATH" + + GN_ARGS="${GN_ARGS}" + echo GN_ARGS is ${GN_ARGS} + echo BUILD_TARGETS are ${TARGET} + cd ${S}/src + gn --root=${S}/src --dotfile=mksnapshot.gn gen ${OUT_DIR} --args="${GN_ARGS}" +} + +do_install() { + echo "Installing ${PN}" + install -d ${D}${bindir} + + install ${OUT_DIR}/v8_snapshot_clang_${TARGET_CPU}/mksnapshot ${D}${bindir}/mksnapshot-cross-${TARGET_ARCH} +} diff --git a/meta-webos/recipes-webos/chromium/webruntime-common.inc b/meta-webos/recipes-webos/chromium/webruntime-common.inc index 0b35efbb3..36d66ad06 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-common.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-common.inc @@ -131,7 +131,7 @@ do_configure() { export PATH="${S}/depot_tools:$PATH" GN_ARGS="${GN_ARGS}" - echo GN_ARGS is ${GN_ARGS} + echo GN_ARGS is "${GN_ARGS}" echo BUILD_TARGETS are ${TARGET} cd ${S}/src gn gen ${OUT_DIR} --args="${GN_ARGS}" diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc new file mode 100644 index 000000000..3d904839e --- /dev/null +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -0,0 +1,12 @@ +# Copyright (c) 2021 LG Electronics, Inc. + +LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=c31f1ae166739be9ca186deacf4b32e4" + +WEBOS_REPO_NAME = "chromium91" +WEBOS_VERSION = "91.0.4472.114-3_f64b405ebd97e0c382ccf1fc40fc4c3a96e937e7" + +WEBOS_REPO_NAME_V8 = "chromium-v8" +WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" +WEBOS_VERSION_V8 = "8.7.220.29-chromium91.1_89712e7f20774931327815ca5dfea0723ab39e82" +SRCREV_v8 = "57d88e7607e88c7bbb942d993de261ed7cd6c5a4" + diff --git a/meta-webos/recipes-webos/chromium/webruntime.inc b/meta-webos/recipes-webos/chromium/webruntime.inc index 36a446a21..fe6d4c4c2 100644 --- a/meta-webos/recipes-webos/chromium/webruntime.inc +++ b/meta-webos/recipes-webos/chromium/webruntime.inc @@ -78,7 +78,7 @@ GN_ARGS_append = " \ use_cbe=true\ use_cups=false\ use_kerberos=false\ - use_local_storage_manager=true\ + use_local_storage_tracker=true\ use_ozone=true\ use_pmlog=true\ use_system_debugger_abort=true\ diff --git a/meta-webos/recipes-webos/chromium/webruntime_87.bb b/meta-webos/recipes-webos/chromium/webruntime_87.bb index 4a9d3fe8d..1101c059f 100644 --- a/meta-webos/recipes-webos/chromium/webruntime_87.bb +++ b/meta-webos/recipes-webos/chromium/webruntime_87.bb @@ -31,7 +31,6 @@ GN_ARGS_append = " \ includedir=\"${includedir}\"\ enable_mojom_closure_compile=false\ enable_js_type_check=false\ - use_local_storage_tracker=true\ " PACKAGECONFIG_remove_qemux86 = "gstreamer umediaserver neva-media gav neva-webrtc" PACKAGECONFIG_remove_qemux86-64 = "gstreamer umediaserver neva-media gav neva-webrtc" diff --git a/meta-webos/recipes-webos/chromium/webruntime_91.bb b/meta-webos/recipes-webos/chromium/webruntime_91.bb new file mode 100644 index 000000000..9b8effe3d --- /dev/null +++ b/meta-webos/recipes-webos/chromium/webruntime_91.bb @@ -0,0 +1,48 @@ +# Copyright (c) 2021 LG Electronics, Inc. +WEBRUNTIME_REPO_VERSION = "91" + +require webruntime.inc +require webruntime-repo${REPO_VERSION}.inc + +PROVIDES = "virtual/webruntime" + +PR = "${INC_PR}.0" + +PACKAGECONFIG[debug] = "symbol_level=2 optimize_for_size=true use_debug_fission=true,symbol_level=0" +PACKAGECONFIG[debug-blink] = "blink_symbol_level=2,blink_symbol_level=1" + +PACKAGECONFIG[v8_lite] = "v8_enable_lite_mode=true,v8_enable_lite_mode=false" + +# FIXME(neva): LTTng impl is incompatible with Perfetto feature in Chromium v.91 +# https://chromium-review.googlesource.com/c/chromium/src/+/2632755 +PACKAGECONFIG[lttng] = "use_lttng=false,," + +PACKAGECONFIG_remove="jumbo" + +GN_ARGS_append = " use_x11=false" +GN_ARGS_remove = "ozone_platform_wayland_external=true" +GN_ARGS_remove = "use_xkbcommon=true" +PACKAGECONFIG[google_ozone_wayland] = "import(\"//neva/gow.gn\")" +PACKAGECONFIG[intel_ozone_wayland] = "import(\"//neva/iow.gn\")" +PACKAGECONFIG += "intel_ozone_wayland" + +# TODO: get rid of this when it will be removed on RP side from +# meta-lg-webos/meta-webos/recipes-webos/chromium/webruntime.inc +GN_ARGS_remove = "linux_use_bundled_binutils=false" + +# TODO: get rid of this when (and if) we adopt GPU info collector patch +GN_ARGS_remove = "use_webos_gpu_info_collector=true" +# TODO: get rid of this when we adopt system debugger patch +GN_ARGS_remove = "use_system_debugger_abort=true" + +GN_ARGS_append = " \ + libdir=\"${libdir}\"\ + includedir=\"${includedir}\"\ + enable_mojom_closure_compile=false\ + enable_js_type_check=false\ +" + +# TODO: qemux86 build fails +PACKAGECONFIG_remove_qemux86 = "gstreamer umediaserver neva-media gav" +#END TODO + diff --git a/meta-webos/recipes-webos/umediaserver/umediaserver.bb b/meta-webos/recipes-webos/umediaserver/umediaserver.bb index 020216640..47a54e6cd 100644 --- a/meta-webos/recipes-webos/umediaserver/umediaserver.bb +++ b/meta-webos/recipes-webos/umediaserver/umediaserver.bb @@ -14,7 +14,7 @@ DEPENDS += "gstreamer1.0 gstreamer1.0-plugins-base" DEPENDS += "${@'' if '${WEBOS_DISTRO_PRERELEASE}' == '' else 'pmtrace'}" RDEPENDS_${PN} = "umediaserver-configs" -PR = "r18" +PR = "r19" inherit webos_component inherit webos_enhanced_submissions @@ -65,5 +65,7 @@ FILES_${PN}-python = "${libdir}/${PYTHON_DIR}/site-packages/uMediaServer/* ${dat # ~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SECURITY_STRINGFORMAT = "" +SRC_URI += "file://0001-waitForStop-API-is-added-for-cleanup-message-handler.patch" + #Remove videooutputd from OSE PACKAGECONFIG_remove_raspberrypi4 = "com.webos.service.videooutput" diff --git a/meta-webos/recipes-webos/umediaserver/umediaserver/0001-waitForStop-API-is-added-for-cleanup-message-handler.patch b/meta-webos/recipes-webos/umediaserver/umediaserver/0001-waitForStop-API-is-added-for-cleanup-message-handler.patch new file mode 100644 index 000000000..9351b35f3 --- /dev/null +++ b/meta-webos/recipes-webos/umediaserver/umediaserver/0001-waitForStop-API-is-added-for-cleanup-message-handler.patch @@ -0,0 +1,50 @@ +From 417aaa040c6937c49e62c38084e05b7fcabe3340 Mon Sep 17 00:00:00 2001 +From: Wanchang Ryu +Date: Thu, 3 Sep 2020 10:36:19 +0900 +Subject: [PATCH] waitForStop API is added for cleanup message handler thread + +uMediaClient creates a thread for dispatching message from uMediaServer +and it calls derived virtual method when dispatching message. +There is a race condition between destructing and dispatching message. +Event dispatch still can be happened even after called derived class's +destructor since the thread for message dispatching is cleaned up on +the destructor of the base class. + +This CL added |waitForStop| API to cleanup message thread before exiting +destructor of derived class. +--- + include/public/uMediaClient.h | 1 + + src/media_client/uMediaClient.cpp | 5 +++++ + 2 files changed, 6 insertions(+) + +diff --git a/include/public/uMediaClient.h b/include/public/uMediaClient.h +index f39bdd61..8ff92f34 100755 +--- a/include/public/uMediaClient.h ++++ b/include/public/uMediaClient.h +@@ -431,6 +431,7 @@ public : + + void run(); + void stop(); ++ void waitForStop(); + + protected : + UMSConnector *connection; +diff --git a/src/media_client/uMediaClient.cpp b/src/media_client/uMediaClient.cpp +index 17b4d841..57e3eb5a 100755 +--- a/src/media_client/uMediaClient.cpp ++++ b/src/media_client/uMediaClient.cpp +@@ -2535,6 +2535,11 @@ void uMediaClient::stop() + connection->stop(); + } + ++void uMediaClient::waitForStop() { ++ stop(); ++ pthread_join(message_thread, NULL); ++} ++ + // ----------------------------------------------- + // --- utility functions to create JSON arguments + +-- +2.17.1 + From 3d6f67c14d7dce3e5d49420f50222ca83e1c7505 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Mon, 18 Oct 2021 13:52:32 +0900 Subject: [PATCH 0159/2022] ose: Keep chromium87 as default webruntime :Release Notes: Keep chromium87 as default webruntime for webos :Detailed Notes: Chromium91 recipe is added but keep chromium87 as a default webruntime until switching to chromium91. :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-1059] Prepare build with new chromium [WRN-9719] CCC: Switch to chromium91 as default webruntime Change-Id: If59ee71869b046feb7b8478c81384b106cad41d4 --- meta-webos/conf/distro/include/webos-preferred-versions.inc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/meta-webos/conf/distro/include/webos-preferred-versions.inc b/meta-webos/conf/distro/include/webos-preferred-versions.inc index cc1679bea..e29c1a193 100644 --- a/meta-webos/conf/distro/include/webos-preferred-versions.inc +++ b/meta-webos/conf/distro/include/webos-preferred-versions.inc @@ -1 +1,4 @@ # Copyright (c) 2012-2021 LG Electronics, Inc. + +PREFERRED_VERSION_webruntime = "87.%" +PREFERRED_VERSION_mksnapshot-cross-${TARGET_ARCH} = "87.%" From a3dc651a016e1334ab08673cbc207ea9f805b6c7 Mon Sep 17 00:00:00 2001 From: Hotaek Jung Date: Mon, 12 Jul 2021 19:16:26 +0900 Subject: [PATCH 0160/2022] linux-raspberrypi_%=webosrpi29 webos-initscripts=77 systemd_%=webos7 com.webos.service.memorymanager=49-r6 wam=r43 :Release Notes: Enable systemd-oomd in OSE Add systemd-oomd service link Add Dbus signal handling Fix coding rule violation :Detailed Notes: kernel: webosrpi28..webosrpi29 Enable cgroup v2 and especially memory.swap.* in kernel systemd: webos6..webos7 Enable systemd-oomd in OSE Reassign boot order in systemd-oomd Add webos sdbus interface Update Memory Manager to use systemd-oomd systemd-oomd check sam and webappmgr for memory pressure webos-initscripts: submissions/76..submissions/77 b685fd9 Add systemd-oomd service link com.webos.service.memorymanager: submissions/48..submissions/49 fd92629 Fix coding rule violation 7764020 Add Dbus signal handling :Testing Performed: Local Test:OK :QA Notes: :Issues Addressed: [WRN-9972] CCC:linux-raspberrypi_%=webosrpi29 webos-initscripts=77 systemd_%=webos7 com.webos.service.memorymanager=49-r6 wam=r43 [WRN-5378] Implementation of MemoryPressured Signal Change-Id: Ica892b403d0c809100926cce785dce899c1b3b59 --- .../linux/linux-raspberrypi/oomd.cfg | 1 + .../linux/linux-raspberrypi_%.bbappend | 5 +- .../initscripts/webos-initscripts.bb | 2 +- .../systemd/0001-depend-on-swapon.patch | 13 + .../systemd/0002-add-webos-interface.patch | 257 ++++++++++++++++++ .../systemd/systemd/0003-oomd-conf.patch | 12 + .../recipes-core/systemd/systemd_%.bbappend | 13 +- .../com.webos.service.memorymanager.bb | 6 +- meta-webos/recipes-webos/wam/wam.bb | 2 + .../wam/wam/0002-add_oomd_option.patch | 9 + 10 files changed, 313 insertions(+), 7 deletions(-) create mode 100644 meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi/oomd.cfg create mode 100644 meta-webos/recipes-core/systemd/systemd/0001-depend-on-swapon.patch create mode 100644 meta-webos/recipes-core/systemd/systemd/0002-add-webos-interface.patch create mode 100644 meta-webos/recipes-core/systemd/systemd/0003-oomd-conf.patch create mode 100644 meta-webos/recipes-webos/wam/wam/0002-add_oomd_option.patch diff --git a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi/oomd.cfg b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi/oomd.cfg new file mode 100644 index 000000000..72452cf33 --- /dev/null +++ b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi/oomd.cfg @@ -0,0 +1 @@ +CONFIG_PSI=y diff --git a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend index c6722b44f..9b9d56986 100644 --- a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend +++ b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2017-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosrpi28" +EXTENDPRAUTO_append = "webosrpi29" -CMDLINE_append = " rw cgroup_memory=1 cgroup_enable=memory" +CMDLINE_append = " rw cgroup_memory=1 cgroup_enable=memory swapaccount=1" CMDLINE_remove_sota = "root=/dev/mmcblk0p2 rootfstype=ext4 rootwait rw" SHRT_VER = "${@oe.utils.trim_version('${PV}', 2)}" @@ -18,6 +18,7 @@ SRC_URI += "\ file://bridge.cfg \ file://gps.cfg \ file://usb-serial-ftdi-sio.cfg \ + file://oomd.cfg \ " KERNEL_MODULE_AUTOLOAD_append = " \ diff --git a/meta-webos/recipes-core/initscripts/webos-initscripts.bb b/meta-webos/recipes-core/initscripts/webos-initscripts.bb index b579f6a56..289f9bc4f 100644 --- a/meta-webos/recipes-core/initscripts/webos-initscripts.bb +++ b/meta-webos/recipes-core/initscripts/webos-initscripts.bb @@ -18,7 +18,7 @@ RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_init_manager} ${VIRTUAL-RUNTIME_bash} python PROVIDES = "initscripts" RPROVIDES_${PN} = "initscripts initd-functions" -WEBOS_VERSION = "3.0.0-76_8f6cf5df37009b90ac2eadbd9224f5b1de36b6d1" +WEBOS_VERSION = "3.0.0-77_a01e51e7a57bc482615365145f1d68998809b420" PR = "r17" inherit webos_component diff --git a/meta-webos/recipes-core/systemd/systemd/0001-depend-on-swapon.patch b/meta-webos/recipes-core/systemd/systemd/0001-depend-on-swapon.patch new file mode 100644 index 000000000..5ecf039ea --- /dev/null +++ b/meta-webos/recipes-core/systemd/systemd/0001-depend-on-swapon.patch @@ -0,0 +1,13 @@ +diff --git a/units/systemd-oomd.service.in b/units/systemd-oomd.service.in +index f264a1bef0..f141c94873 100644 +--- a/units/systemd-oomd.service.in ++++ b/units/systemd-oomd.service.in +@@ -12,6 +12,8 @@ Description=Userspace Out-Of-Memory (OOM) Killer + Documentation=man:systemd-oomd.service(8) + DefaultDependencies=no + Before=multi-user.target shutdown.target ++Wants=swap-on.service ++After=swap-on.service + Conflicts=shutdown.target + ConditionControlGroupController=v2 + ConditionPathExists=/proc/pressure/cpu diff --git a/meta-webos/recipes-core/systemd/systemd/0002-add-webos-interface.patch b/meta-webos/recipes-core/systemd/systemd/0002-add-webos-interface.patch new file mode 100644 index 000000000..1fda6ef12 --- /dev/null +++ b/meta-webos/recipes-core/systemd/systemd/0002-add-webos-interface.patch @@ -0,0 +1,257 @@ +diff --git a/src/oom/com.webos.MemoryManager1.conf b/src/oom/com.webos.MemoryManager1.conf +new file mode 100644 +index 0000000000..cef8430362 +--- /dev/null ++++ b/src/oom/com.webos.MemoryManager1.conf +@@ -0,0 +1,40 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/src/oom/meson.build b/src/oom/meson.build +index 4e1c8543c8..ee4c7b13fa 100644 +--- a/src/oom/meson.build ++++ b/src/oom/meson.build +@@ -8,6 +8,10 @@ systemd_oomd_sources = files(''' + oomd-util.c + oomd-util.h + oomd.c ++ webos-manager-bus.c ++ webos-manager-bus.h ++ webos-manager.c ++ webos-manager.h + '''.split()) + + oomctl_sources = files(''' +@@ -18,6 +22,9 @@ if conf.get('ENABLE_OOMD') == 1 + install_data('org.freedesktop.oom1.conf', + install_dir : dbuspolicydir) + ++ install_data('com.webos.MemoryManager1.conf', ++ install_dir : dbuspolicydir) ++ + install_data('org.freedesktop.oom1.service', + install_dir : dbussystemservicedir) + +diff --git a/src/oom/oomd-manager.c b/src/oom/oomd-manager.c +index 49dc5eb26e..009fee55e8 100644 +--- a/src/oom/oomd-manager.c ++++ b/src/oom/oomd-manager.c +@@ -11,6 +11,8 @@ + #include "oomd-manager.h" + #include "path-util.h" + #include "percent-util.h" ++#include "webos-manager.h" ++#include "webos-manager-bus.h" + + typedef struct ManagedOOMReply { + ManagedOOMMode mode; +@@ -351,6 +353,9 @@ static int monitor_swap_contexts_handler(sd_event_source *s, uint64_t usec, void + m->system_context.swap_used, m->system_context.swap_total, + PERMYRIAD_AS_PERCENT_FORMAT_VAL(m->swap_used_limit_permyriad)); + ++ // send MemoryPressure signal ++ send_signal_pressure(m, WEBOS_SIGNAL_TYPE_SWAP); ++ + r = get_monitored_cgroup_contexts_candidates(m->monitored_swap_cgroup_contexts, &candidates); + if (r == -ENOMEM) + return log_oom(); +@@ -472,6 +477,8 @@ static int monitor_memory_pressure_contexts_handler(sd_event_source *s, uint64_t + log_debug_errno(r, "Failed to update monitored memory pressure candidate cgroup contexts, ignoring: %m"); + else + clear_candidates = NULL; ++ // send MemoryPressure signal ++ send_signal_pressure(m, WEBOS_SIGNAL_TYPE_PSI); + + r = oomd_kill_by_pgscan_rate(m->monitored_mem_pressure_cgroup_contexts_candidates, t->path, m->dry_run, &selected); + if (r == -ENOMEM) +diff --git a/src/oom/oomd.c b/src/oom/oomd.c +index deb7b094d5..9645c64bcd 100644 +--- a/src/oom/oomd.c ++++ b/src/oom/oomd.c +@@ -15,6 +15,8 @@ + #include "pretty-print.c" + #include "psi-util.h" + #include "signal-util.h" ++#include "webos-manager.h" ++#include "webos-manager-bus.h" + + static bool arg_dry_run = false; + static int arg_swap_used_limit_permyriad = -1; +@@ -175,6 +177,9 @@ static int run(int argc, char *argv[]) { + + log_debug("systemd-oomd started%s.", arg_dry_run ? " in dry run mode" : ""); + ++ r = webos_manager_start(m); ++ if (r < 0) ++ return log_error_errno(r, "Failed to start up daemon: %m"); + r = sd_event_loop(m->event); + if (r < 0) + return log_error_errno(r, "Event loop failed: %m"); +diff --git a/src/oom/webos-manager-bus.c b/src/oom/webos-manager-bus.c +new file mode 100644 +index 0000000000..67809314d4 +--- /dev/null ++++ b/src/oom/webos-manager-bus.c +@@ -0,0 +1,31 @@ ++/* SPDX-License-Identifier: LGPL-2.1-or-later */ ++ ++#include "bus-common-errors.h" ++#include "bus-polkit.h" ++#include "oomd-manager.h" ++#include "webos-manager-bus.h" ++ ++static const sd_bus_vtable webos_manager_vtable[] = { ++ SD_BUS_VTABLE_START(0), ++ SD_BUS_SIGNAL_WITH_NAMES("MemoryPressured", ++ "u", ++ SD_BUS_PARAM(Above), ++ 0), ++ SD_BUS_VTABLE_END ++}; ++ ++const BusObjectImplementation webos_manager_object = { ++ "/com/webos/MemoryManager1", ++ "com.webos.MemoryManager1", ++ .vtables = BUS_VTABLES(webos_manager_vtable), ++}; ++ ++int send_signal_pressure(Manager *m,int type) ++{ ++ return sd_bus_emit_signal(m->bus, ++ "/com/webos/MemoryManager1", ++ "com.webos.MemoryManager1", ++ "MemoryPressured", ++ "u", type); ++} ++ +diff --git a/src/oom/webos-manager-bus.h b/src/oom/webos-manager-bus.h +new file mode 100644 +index 0000000000..cc816c7934 +--- /dev/null ++++ b/src/oom/webos-manager-bus.h +@@ -0,0 +1,10 @@ ++/* SPDX-License-Identifier: LGPL-2.1-or-later */ ++#pragma once ++ ++#include "bus-object.h" ++ ++#define WEBOS_SIGNAL_TYPE_SWAP 0 ++#define WEBOS_SIGNAL_TYPE_PSI 1 ++ ++extern const BusObjectImplementation webos_manager_object; ++int send_signal_pressure(Manager *m, int type); +diff --git a/src/oom/webos-manager.c b/src/oom/webos-manager.c +new file mode 100644 +index 0000000000..5a0c04d668 +--- /dev/null ++++ b/src/oom/webos-manager.c +@@ -0,0 +1,45 @@ ++/* SPDX-License-Identifier: LGPL-2.1-or-later */ ++ ++#include "bus-util.h" ++#include "bus-polkit.h" ++#include "bus-log-control-api.h" ++#include "webos-manager.h" ++#include "webos-manager-bus.h" ++ ++static int webos_manager_connect_bus(Manager *m) { ++ int r; ++ ++ r = bus_open_system_watch_bind_with_description(&m->bus, "bus-api-webos"); ++ if (r < 0) ++ return log_error_errno(r, "Failed to connect to bus: %m"); ++ ++ r = bus_add_implementation(m->bus, &webos_manager_object, m); ++ if (r < 0) ++ return r; ++ ++ r = bus_log_control_api_register(m->bus); ++ if (r < 0) ++ return r; ++ ++ r = sd_bus_request_name_async(m->bus, NULL, "com.webos.MemoryManager1", 0, NULL, NULL); ++ if (r < 0) ++ return log_error_errno(r, "Failed to request name: %m"); ++ ++ r = sd_bus_attach_event(m->bus, m->event, 0); ++ if (r < 0) ++ return log_error_errno(r, "Failed to attach bus to event loop: %m"); ++ ++ return 0; ++} ++ ++int webos_manager_start(Manager *m) { ++ int r; ++ ++ assert(m); ++ ++ r = webos_manager_connect_bus(m); ++ if (r < 0) ++ return r; ++ ++ return 0; ++} +diff --git a/src/oom/webos-manager.h b/src/oom/webos-manager.h +new file mode 100644 +index 0000000000..bed7413c6a +--- /dev/null ++++ b/src/oom/webos-manager.h +@@ -0,0 +1,7 @@ ++/* SPDX-License-Identifier: LGPL-2.1-or-later */ ++#pragma once ++ ++#include "sd-event.h" ++#include "oomd-manager.h" ++ ++int webos_manager_start(Manager *m); +diff --git a/units/systemd-oomd.service.in b/units/systemd-oomd.service.in +index f264a1bef0..31c5921413 100644 +--- a/units/systemd-oomd.service.in ++++ b/units/systemd-oomd.service.in +@@ -22,7 +24,7 @@ ConditionPathExists=/proc/pressure/memory + AmbientCapabilities=CAP_KILL CAP_DAC_OVERRIDE + BusName=org.freedesktop.oom1 + CapabilityBoundingSet=CAP_KILL CAP_DAC_OVERRIDE +-ExecStart=@rootlibexecdir@/systemd-oomd ++ExecStart=@rootlibexecdir@/systemd-oomd --dry-run + IPAddressDeny=any + LockPersonality=yes + MemoryDenyWriteExecute=yes + diff --git a/meta-webos/recipes-core/systemd/systemd/0003-oomd-conf.patch b/meta-webos/recipes-core/systemd/systemd/0003-oomd-conf.patch new file mode 100644 index 000000000..6b458460a --- /dev/null +++ b/meta-webos/recipes-core/systemd/systemd/0003-oomd-conf.patch @@ -0,0 +1,12 @@ +diff --git a/src/oom/oomd.conf b/src/oom/oomd.conf +index b3a457f887..7c0265f302 100644 +--- a/src/oom/oomd.conf ++++ b/src/oom/oomd.conf +@@ -16,5 +16,5 @@ + + [OOM] + #SwapUsedLimit=90% +-#DefaultMemoryPressureLimit=60% +-#DefaultMemoryPressureDurationSec=30s ++DefaultMemoryPressureLimit=0.05% ++DefaultMemoryPressureDurationSec=1s diff --git a/meta-webos/recipes-core/systemd/systemd_%.bbappend b/meta-webos/recipes-core/systemd/systemd_%.bbappend index 365ddd9f7..36747199d 100644 --- a/meta-webos/recipes-core/systemd/systemd_%.bbappend +++ b/meta-webos/recipes-core/systemd/systemd_%.bbappend @@ -1,6 +1,13 @@ # Copyright (c) 2017-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos6" +EXTENDPRAUTO_append = "webos7" +FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" + +SRC_URI_append_webos = " \ + file://0001-depend-on-swapon.patch \ + file://0002-add-webos-interface.patch \ + file://0003-oomd-conf.patch \ +" inherit webos_prerelease_dep @@ -21,10 +28,14 @@ PACKAGECONFIG_remove = " \ " PACKAGECONFIG_append = " \ + ${@oe.utils.conditional('DISTRO', 'webos', 'oomd', '', d)} \ + ${@oe.utils.conditional('DISTRO', 'webos', 'cgroupv2', '', d)} \ ${@oe.utils.conditional('WEBOS_DISTRO_PRERELEASE', 'devel', 'coredump', '', d)} \ ${@oe.utils.conditional('WEBOS_DISTRO_PRERELEASE', 'devel', 'elfutils', '', d)} \ " +FILES_${PN} += "${@oe.utils.conditional('DISTRO', 'webos','${datadir}/dbus-1/system.d/com.webos.MemoryManager1.conf', '', d)}" + # By default systemd's Predictable Network Interface Names policy configured for qemu # Currently we don't support this policy in qemu, so removing from systemd's configuration do_install_append_qemuall() { diff --git a/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager.bb b/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager.bb index 6ae1beb49..1802c05bc 100644 --- a/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager.bb +++ b/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager.bb @@ -9,10 +9,10 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " -DEPENDS = "glib-2.0 luna-service2 libpbnjson pmloglib procps" +DEPENDS = "glib-2.0 glib-2.0-native luna-service2 libpbnjson pmloglib procps" -WEBOS_VERSION = "1.0.0-48_1c3994e31f4299c76227a78d9236b7dcbf716d8e" -PR = "r5" +WEBOS_VERSION = "1.0.0-49_d2acfefe0e099bc278349b48152b664129f0575d" +PR = "r6" inherit webos_component inherit webos_cmake diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index 7d806144c..317da09b9 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -38,7 +38,9 @@ WAM_DATA_DIR = "${webos_execstatedir}/${BPN}" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE} \ file://0001-Fix-build-with-gcc-11.patch \ + file://0002-add_oomd_option.patch \ " + S = "${WORKDIR}/git" WEBOS_SYSTEM_BUS_SKIP_DO_TASKS = "1" diff --git a/meta-webos/recipes-webos/wam/wam/0002-add_oomd_option.patch b/meta-webos/recipes-webos/wam/wam/0002-add_oomd_option.patch new file mode 100644 index 000000000..0a895afe7 --- /dev/null +++ b/meta-webos/recipes-webos/wam/wam/0002-add_oomd_option.patch @@ -0,0 +1,9 @@ +diff --git a/files/launch/systemd/webapp-mgr.service b/files/launch/systemd/webapp-mgr.service +index e7703fa..c5ca32e 100644 +--- a/files/launch/systemd/webapp-mgr.service ++++ b/files/launch/systemd/webapp-mgr.service +@@ -31,3 +31,4 @@ ExecStart=/etc/systemd/system/scripts/webapp-mgr.sh + ExecStartPost=-/bin/chgrp compositor /dev/mem + ExecStartPost=-/bin/chmod 660 /dev/mem + Restart=on-failure ++ManagedOOMMemoryPressure=kill From 103c3f1b6a050f108e2cdc1152aaadd266eb2a45 Mon Sep 17 00:00:00 2001 From: Kyungjik Min Date: Fri, 5 Nov 2021 13:09:01 +0900 Subject: [PATCH 0161/2022] webruntime_91=r51.1 :Release Notes: Fix webos pro qemux86-64 build issue :Detailed Notes: Fix webruntime_91 build issue for webos pro qemux86-64 :Testing Performed: Only build test :QA Notes: N/A :Issues Addressed: [WRN-9386] Support qemux86 64bit ose emulator build [WRN-10029] CCC: Support qemux86 64bit ose emulator Change-Id: Idfc13b2564b820fdf23657791db92886d66d8299 Reviewed-on: http://gpro.lge.com/c/webos-pro/meta-lg-webos/+/318802 Reviewed-by: Commit Msg Checker Reviewed-by: Ban Word Checker Reviewed-by: Hyunjae Shin Tested-by: Hyunjae Shin --- meta-webos/recipes-webos/chromium/webruntime_91.bb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime_91.bb b/meta-webos/recipes-webos/chromium/webruntime_91.bb index 9b8effe3d..d5ac8e0a2 100644 --- a/meta-webos/recipes-webos/chromium/webruntime_91.bb +++ b/meta-webos/recipes-webos/chromium/webruntime_91.bb @@ -6,7 +6,7 @@ require webruntime-repo${REPO_VERSION}.inc PROVIDES = "virtual/webruntime" -PR = "${INC_PR}.0" +PR = "${INC_PR}.1" PACKAGECONFIG[debug] = "symbol_level=2 optimize_for_size=true use_debug_fission=true,symbol_level=0" PACKAGECONFIG[debug-blink] = "blink_symbol_level=2,blink_symbol_level=1" @@ -42,7 +42,8 @@ GN_ARGS_append = " \ enable_js_type_check=false\ " -# TODO: qemux86 build fails +# TODO: qemux build fails PACKAGECONFIG_remove_qemux86 = "gstreamer umediaserver neva-media gav" +PACKAGECONFIG_remove_qemux86-64 = "gstreamer umediaserver neva-media gav" #END TODO From b09c0c8bf783502a5a9dbff41b4aa93d632b82d1 Mon Sep 17 00:00:00 2001 From: "jaewoon.kim" Date: Thu, 4 Nov 2021 16:00:31 +0900 Subject: [PATCH 0162/2022] ose: com.webos.service.uwb=10 :Release Notes: Update udev rules for LGE UWB Module :Detailed Notes: com.webos.service.uwb: submissions/9..submissions/10 20e6014 Update udev rules for LGE UWB Module :Testing Performed: Check CCC tickets :QA Notes: N/A :Issues Addressed: [WRN-10202] CCC: com.webos.service.uwb=10 pro: linux-rockhopper=r20 Change-Id: I6d54a76a260d54e6258e94b405e9315e46af846b --- meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb b/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb index 1fcb1f730..2a7c49a50 100644 --- a/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb +++ b/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb @@ -8,7 +8,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" DEPENDS= "glib-2.0 luna-service2 pmloglib libpbnjson" -WEBOS_VERSION = "1.0.0-9_09a65388199c8985c2e0384425768d0d2f3df195" +WEBOS_VERSION = "1.0.0-10_badc9990f7ed05eb6c0bc41d01d65a3cee531353" PR = "r2" inherit webos_component From 757c3311b24fad78b25f562ca1048cad29acdfc3 Mon Sep 17 00:00:00 2001 From: "sc.heo" Date: Tue, 9 Nov 2021 17:57:55 +0900 Subject: [PATCH 0163/2022] ose: wpa-supplicant=webos4 :Release Notes: Fix wpa-supplicant service is not started on Rpi4 :Detailed Notes: Modify ConditionHost=!qemux86* to start wpa-supplicant service :Testing Performed: See CCC jira ticket for results. :QA Notes: NA :Issues Addressed: [WRN-10724] CCC: wpa-supplicant=webos4 [WRN-10688] [OSE-RPi4] : WiFi list is not displayed in settings app. Change-Id: I5c90ce8dd6bdf6346d5db97408beb2fb0f9a5c35 --- .../wpa-supplicant/wpa-supplicant/wpa-supplicant.service | 2 +- .../wpa-supplicant/wpa-supplicant_%.bbappend | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.service b/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.service index 0bba3e65f..278424675 100644 --- a/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.service +++ b/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.service @@ -18,7 +18,7 @@ [Unit] Description=webos - "%n" -ConditionHost=(!qemux86 && !qemux86-64) +ConditionHost=!qemux86* Requires=ls-hubd.service After=ls-hubd.service diff --git a/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend b/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend index c78fdf040..9cd803c4b 100644 --- a/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend +++ b/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2017-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos3" +EXTENDPRAUTO_append = "webos4" FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" From 3c0d5c6179486df5e51696267b9bf23dc470da70 Mon Sep 17 00:00:00 2001 From: "sushovan.g" Date: Tue, 2 Nov 2021 16:10:41 +0530 Subject: [PATCH 0164/2022] ose: pulseaudio=30-r28 :Release Notes: Add ladspa module and fix ladspa sink assert issue :Detailed Notes: pulseaudio: submissions/29..submissions/30 56b4038fb Fix for ladspa sink assert issue :Testing Performed: Please refer test result in WRN-10705 :QA Notes: NA :Issues Addressed: [WRN-10705] CCC: pulseaudio=30-r28 [WRN-10687] Assertion occurred during loading of LADSPA module Change-Id: I863d9f9e2d571222867cd377fa285068595efd14 --- meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb index daaa3de7d..08e2272ae 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb +++ b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb @@ -36,8 +36,8 @@ DEPENDS_remove = "libatomic-ops" DEPENDS += "pmloglib" -WEBOS_VERSION = "9.0-29_2cec94910d7c88c13a004843c57d0032bebeccb3" -PR = "r27" +WEBOS_VERSION = "9.0-30_7390ae117ba7a4a30421bee9788e7f0a9cea3d27" +PR = "r28" inherit webos_enhanced_submissions @@ -103,6 +103,7 @@ RDEPENDS_pulseaudio-server_append = "\ pulseaudio-module-rtp-recv \ pulseaudio-module-loopback \ pulseaudio-module-combine-sink \ + pulseaudio-module-ladspa-sink \ ${@bb.utils.contains('PACKAGECONFIG', 'bluez5', '\ pulseaudio-lib-bluez5-util \ pulseaudio-module-bluetooth-discover \ From 84a2cea3313db19d136fd31067d81e11909a4a9c Mon Sep 17 00:00:00 2001 From: Heegoo Han Date: Thu, 4 Nov 2021 16:17:43 +0900 Subject: [PATCH 0165/2022] ose: qtbase-plugins-webos=r4 :Release Notes: Add virtual touch implementation for emulator :Detailed Notes: Add virtual touch implementation for emulator and it will be used on TAF for emulator CAT :Testing Performed: boot emulator and run event-device-creator if it is not launched go http://gpro.lge.com/admin/repos/webos-pro/automation-tests and clone the automation-tests repository cd automation-tests sudo ./qa-test-runner.py -i 127.0.0.1 -p 6622 -d Auto.qemux86 ./service/integration_tests/input_generator/touch_drag_key_press_test.py See the CCC jira ticket :QA Notes: :Issues Addressed: [WRN-10365] CCC: ose: qtbase-plugins-webos=r4 [WRN-8885] Implement virtual touch for ose emulator Change-Id: I9d6d8d55643df64dfbca3f252c10522b3fc883f7 --- .../qtbase-plugins-webos.bb | 5 +- .../0001-virtual-touch-for-emulator.patch | 131 ++++++++++++++++++ 2 files changed, 135 insertions(+), 1 deletion(-) create mode 100644 meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos/0001-virtual-touch-for-emulator.patch diff --git a/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb index dd2c9f65b..792c835ac 100644 --- a/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb +++ b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb @@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtbase" WEBOS_VERSION = "1.0.0-9_6593a06a17e92fee1d10b3c36012b35d461563dd" -PR = "r3" +PR = "r4" inherit webos_qmake6 inherit webos_enhanced_submissions @@ -29,6 +29,9 @@ PACKAGECONFIG ??= "" # Emulator PACKAGECONFIG[emulator] = "CONFIG+=emulator,,nyx-lib" PACKAGECONFIG_append_emulator = " emulator" +SRC_URI_append_emulator = " \ + file://0001-virtual-touch-for-emulator.patch \ +" # Multi-plane composition PACKAGECONFIG[plane-composition] = "CONFIG+=plane_composition,," diff --git a/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos/0001-virtual-touch-for-emulator.patch b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos/0001-virtual-touch-for-emulator.patch new file mode 100644 index 000000000..6b47c8974 --- /dev/null +++ b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos/0001-virtual-touch-for-emulator.patch @@ -0,0 +1,131 @@ +From c4df08911d1e6ead0f17c7bcaa8398cbd0ce3ff7 Mon Sep 17 00:00:00 2001 +From: Heegoo Han +Date: Thu, 4 Nov 2021 16:14:14 +0900 +Subject: [PATCH] virtual touch for emulator + +--- + src/eglfs_webos/weboseglfsintegration.cpp | 73 ++++++++++++++++++++++- + src/eglfs_webos/weboseglfsintegration.h | 2 - + 2 files changed, 72 insertions(+), 3 deletions(-) + +diff --git a/src/eglfs_webos/weboseglfsintegration.cpp b/src/eglfs_webos/weboseglfsintegration.cpp +index 56f4671..2c00a3f 100644 +--- a/src/eglfs_webos/weboseglfsintegration.cpp ++++ b/src/eglfs_webos/weboseglfsintegration.cpp +@@ -127,6 +127,77 @@ void WebOSEglFSIntegration::createInputHandlers() + if ((m_emulatorKeyboardManager) && (m_emulatorMouseManager)) { + connect(m_emulatorKeyboardManager, &QEmulatorKeyboardManager::handleKeycodeSignal, m_emulatorMouseManager, &QEmulatorMouseManager::handleKeycodeSlot); + } ++ ++ // HACK: implement virtual touch for emulator. ++ QOutputMapping::set(&m_mappingHelper); ++ ++ if (!m_configJson.isEmpty()) { ++ for (int i = 0; i < m_configJson.array().size(); i++) { ++ const QJsonObject object = m_configJson.array().at(i).toObject(); ++ const QJsonArray outputs = object.value(QLatin1String("outputs")).toArray(); ++ for (int j = 0; j < outputs.size(); j++) { ++ const QJsonObject output = outputs.at(j).toObject(); ++ if (!m_useFixedAssociationForTouch) { ++ QString touchDevice = output.value(QLatin1String("touchDevice")).toString(); ++ if (!touchDevice.isEmpty()) ++ m_useFixedAssociationForTouch = true; ++ } ++ ++ const QVariantMap outputSettings = outputs.at(j).toObject().toVariantMap(); ++ if (outputSettings.contains(QStringLiteral("name"))) { ++ const QString name = outputSettings.value(QStringLiteral("name")).toString(); ++ if (m_outputSettings.contains(name)) ++ qWarning() << "Output" << name << "is duplicated"; ++ m_outputSettings.insert(name, outputSettings); ++ } ++ } ++ } ++ } ++ ++ qDebug() << "useFixedAssociationForTouch:" << m_useFixedAssociationForTouch; ++ ++ m_touchDiscovery = WebOSDeviceDiscoveryUDevSorted::create(QDeviceDiscovery::Device_Touchpad | QDeviceDiscovery::Device_Touchscreen, this); ++ ++ QStringList scannedTouchDevices = m_touchDiscovery->scanConnectedDevices(); ++ if (m_useFixedAssociationForTouch) ++ prepareFixedOutputMapping(scannedTouchDevices, QLatin1String("touchDevice")); ++ else ++ prepareOutputMapping(scannedTouchDevices); ++ ++ QString touchDevs = initializeDevices(scannedTouchDevices); ++ ++ bool useDummyTouchDevice = false; ++ // to disable device discovery in QEvdevTouchManager when no device is connected. ++ if (touchDevs.isEmpty()) { ++ touchDevs = "/dev/null"; ++ useDummyTouchDevice = true; ++ } ++ ++ QString env = QString::fromLocal8Bit(qgetenv("QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS")); ++ qDebug() << "createInputHandlers, touchDevs" << touchDevs << env; ++ if (!env.isEmpty()) { ++ env.append(":" + touchDevs); ++ qWarning() << "Updating QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS to" << env; ++ qputenv("QT_QPA_EVDEV_TOUCHSCREEN_PARAMETERS", env.toUtf8()); ++ } ++ ++ m_touchMgr = new QEvdevTouchManager(QLatin1String("EvdevTouch"), touchDevs, this); ++ // Remove the null device to prevent reading it ++ if (m_touchMgr && useDummyTouchDevice) ++ m_touchMgr->removeDevice("/dev/null"); ++ ++ if (m_touchDiscovery && m_touchMgr) { ++ connect(m_touchDiscovery, &QDeviceDiscovery::deviceDetected, ++ this, &WebOSEglFSIntegration::arrangeTouchDevices); ++ connect(m_touchDiscovery, &QDeviceDiscovery::deviceRemoved, ++ this, &WebOSEglFSIntegration::removeTouchDevice); ++ } ++ ++ connect(this, &WebOSEglFSIntegration::platformWindowCreated, this, &WebOSEglFSIntegration::handleWindowCreated); ++ ++ m_initTimer.setSingleShot(true); ++ connect(&m_initTimer, &QTimer::timeout, this, &WebOSEglFSIntegration::updateWindowMapping); ++ // End of HACK: + } + #else + void WebOSEglFSIntegration::createInputHandlers() +@@ -245,6 +316,7 @@ void WebOSEglFSIntegration::createInputHandlers() + m_initTimer.setSingleShot(true); + connect(&m_initTimer, &QTimer::timeout, this, &WebOSEglFSIntegration::updateWindowMapping); + } ++#endif + + QPlatformWindow *WebOSEglFSIntegration::createPlatformWindow(QWindow *window) const + { +@@ -277,7 +349,6 @@ void WebOSEglFSIntegration::updateWindowMapping() + arrangeTouchDevices(); + arrangeKbdDevices(); + } +-#endif + + void WebOSEglFSIntegration::prepareOutputMapping(const QStringList &devices) + { +diff --git a/src/eglfs_webos/weboseglfsintegration.h b/src/eglfs_webos/weboseglfsintegration.h +index 0777721..b14747e 100644 +--- a/src/eglfs_webos/weboseglfsintegration.h ++++ b/src/eglfs_webos/weboseglfsintegration.h +@@ -66,7 +66,6 @@ public: + void removeTouchDevice(const QString &deviceNode); + void arrangeKbdDevices(); + void removeKbdDevice(const QString &deviceNode); +-#if not defined(EMULATOR) + QPlatformWindow *createPlatformWindow(QWindow *window) const override; + + public slots: +@@ -76,7 +75,6 @@ public slots: + + signals: + void platformWindowCreated(QWindow *) const; +-#endif + + private: + QVector m_windows; +-- +2.17.1 + From 80cd325c69c145f28b1e80bffd168a740ba1c15e Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 3 Nov 2021 01:02:31 -0700 Subject: [PATCH 0166/2022] vmwgfx-layout gator iotivity com.example.{app,service}.iotivity org.ocf.webossample.oc{client,server}basicops: fix protocol value in SRC_URI :Release Notes: It should be https, not http. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: None. :Issues Addressed: [WRN-10062] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I012741fffd287141abaf9a66930e398e041524ca --- meta-webos/recipes-core/gator/gator_git.bb | 2 +- meta-webos/recipes-core/iotivity/iotivity_git.bb | 14 +++++++------- .../recipes-utils/vmwgfx-layout/vmwgfx-layout.bb | 4 ++-- .../com.example.app.iotivity.bb | 2 +- .../com.example.service.iotivity.bb | 2 +- .../org.ocf.webossample.occlientbasicops.bb | 6 +++--- .../org.ocf.webossample.ocserverbasicops.bb | 6 +++--- 7 files changed, 18 insertions(+), 18 deletions(-) diff --git a/meta-webos/recipes-core/gator/gator_git.bb b/meta-webos/recipes-core/gator/gator_git.bb index 6a6d868d3..4e5fb943f 100644 --- a/meta-webos/recipes-core/gator/gator_git.bb +++ b/meta-webos/recipes-core/gator/gator_git.bb @@ -11,7 +11,7 @@ SRCREV = "3ff46fedd4d097813156069edab9704cc65e0a42" PV = "6.7+git${SRCPV}" PR = "r4" -SRC_URI = "git://github.com/ARM-software/gator.git;protocol=http;branch=main \ +SRC_URI = "git://github.com/ARM-software/gator.git;protocol=https;branch=main \ file://0001-disable-stripping-debug-info.patch \ file://0001-gator_main.c-gator_backtrace.c-fix-build-with-linux-.patch \ file://Mali_events_disable.patch \ diff --git a/meta-webos/recipes-core/iotivity/iotivity_git.bb b/meta-webos/recipes-core/iotivity/iotivity_git.bb index d1b66bf9a..129e7d7ed 100644 --- a/meta-webos/recipes-core/iotivity/iotivity_git.bb +++ b/meta-webos/recipes-core/iotivity/iotivity_git.bb @@ -24,13 +24,13 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE.md;md5=86d3f3a95c324c9479bd8986968f4327" SRC_URI = " \ - git://github.com/iotivity/iotivity.git;branch=webos;protocol=http;name=main \ - git://github.com/intel/tinycbor.git;destsuffix=git/extlibs/tinycbor/tinycbor;protocol=http;name=tinycbor \ - git://github.com/google/googletest.git;destsuffix=git/extlibs/gtest/googletest-release-1.7.0;protocol=http;nobranch=1;name=gtest \ - git://github.com/dascandy/hippomocks.git;destsuffix=git/extlibs/hippomocks/hippomocks;protocol=http;name=hippomocks \ - git://github.com/ARMmbed/mbedtls.git;destsuffix=git/extlibs/mbedtls/mbedtls;protocol=http;branch=mbedtls-2.4;name=mbedtls \ - git://github.com/miloyip/rapidjson.git;destsuffix=git/extlibs/rapidjson/rapidjson;protocol=http;name=rapidjson \ - git://github.com/dthaler/libcoap.git;destsuffix=git/extlibs/libcoap/libcoap;protocol=http;branch=develop;name=libcoap \ + git://github.com/iotivity/iotivity.git;branch=webos;protocol=https;name=main \ + git://github.com/intel/tinycbor.git;destsuffix=git/extlibs/tinycbor/tinycbor;protocol=https;name=tinycbor \ + git://github.com/google/googletest.git;destsuffix=git/extlibs/gtest/googletest-release-1.7.0;protocol=https;nobranch=1;name=gtest \ + git://github.com/dascandy/hippomocks.git;destsuffix=git/extlibs/hippomocks/hippomocks;protocol=https;name=hippomocks \ + git://github.com/ARMmbed/mbedtls.git;destsuffix=git/extlibs/mbedtls/mbedtls;protocol=https;branch=mbedtls-2.4;name=mbedtls \ + git://github.com/miloyip/rapidjson.git;destsuffix=git/extlibs/rapidjson/rapidjson;protocol=https;name=rapidjson \ + git://github.com/dthaler/libcoap.git;destsuffix=git/extlibs/libcoap/libcoap;protocol=https;branch=develop;name=libcoap \ file://0001-hippomocks-fix-build-for-MIPS.patch;patchdir=extlibs/hippomocks/hippomocks \ file://0001-OCApi.h-prevent-multiple-definitions-of-OC-detail-oc.patch \ file://0002-Fix-segmentation-fault.patch \ diff --git a/meta-webos/recipes-utils/vmwgfx-layout/vmwgfx-layout.bb b/meta-webos/recipes-utils/vmwgfx-layout/vmwgfx-layout.bb index a83b7c380..71550cc68 100644 --- a/meta-webos/recipes-utils/vmwgfx-layout/vmwgfx-layout.bb +++ b/meta-webos/recipes-utils/vmwgfx-layout/vmwgfx-layout.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2021 LG Electronics, Inc. SUMMARY = "Simple setlayout command tool for vmwgfx drm driver" LICENSE = "Apache-2.0" @@ -13,7 +13,7 @@ SRCREV = "8e43168d508abc2702a97f8b264ab08330465608" inherit systemd inherit webos_cmake -SRC_URI = "git://github.com/sparkleholic/vmwgfx-layout.git;branch=master;protocol=http \ +SRC_URI = "git://github.com/sparkleholic/vmwgfx-layout.git;branch=master;protocol=https \ file://0001-Set-2-outputs-to-call-DRM_IOCTL_VMW_UPDATE_LAYOUT-fo.patch \ " S = "${WORKDIR}/git" diff --git a/meta-webos/recipes-webos/com.example.app.iotivity/com.example.app.iotivity.bb b/meta-webos/recipes-webos/com.example.app.iotivity/com.example.app.iotivity.bb index 9b205a38b..9c25bbdcd 100644 --- a/meta-webos/recipes-webos/com.example.app.iotivity/com.example.app.iotivity.bb +++ b/meta-webos/recipes-webos/com.example.app.iotivity/com.example.app.iotivity.bb @@ -10,7 +10,7 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE.md;md5=86d3f3a95c324c9479bd8986968f4327" SRC_URI = " \ - git://github.com/iotivity/iotivity.git;branch=webos;protocol=http;name=main \ + git://github.com/iotivity/iotivity.git;branch=webos;protocol=https;name=main \ file://0001-webOS-Apply-new-ACG-policy-in-test-applications.patch \ file://0001-webOS-Apply-proper-ACG-group-name-in-test-appl.patch \ file://0001-webOS-Fix-bug-that-API-is-not-called.patch \ diff --git a/meta-webos/recipes-webos/com.example.service.iotivity/com.example.service.iotivity.bb b/meta-webos/recipes-webos/com.example.service.iotivity/com.example.service.iotivity.bb index 56c9efc35..3c546b93b 100644 --- a/meta-webos/recipes-webos/com.example.service.iotivity/com.example.service.iotivity.bb +++ b/meta-webos/recipes-webos/com.example.service.iotivity/com.example.service.iotivity.bb @@ -10,7 +10,7 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE.md;md5=86d3f3a95c324c9479bd8986968f4327" SRC_URI = " \ - git://github.com/iotivity/iotivity.git;branch=webos;protocol=http;name=main \ + git://github.com/iotivity/iotivity.git;branch=webos;protocol=https;name=main \ file://0001-webOS-Apply-new-ACG-policy-in-test-applications.patch \ file://0001-webOS-Apply-proper-ACG-group-name-in-test-appl.patch \ file://0001-webOS-Fix-bug-that-API-is-not-called.patch \ diff --git a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb index 46dff56ec..5e8771764 100644 --- a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb +++ b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb @@ -10,9 +10,9 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE.md;md5=86d3f3a95c324c9479bd8986968f4327" SRC_URI += " \ - git://github.com/iotivity/iotivity.git;branch=webos;protocol=http;name=main;destsuffix=iotivity \ - git://github.com/intel/tinycbor.git;destsuffix=iotivity/extlibs/tinycbor/tinycbor;protocol=http;name=tinycbor \ - git://github.com/ARMmbed/mbedtls.git;destsuffix=iotivity/extlibs/mbedtls/mbedtls;protocol=http;branch=mbedtls-2.4;name=mbedtls \ + git://github.com/iotivity/iotivity.git;branch=webos;protocol=https;name=main;destsuffix=iotivity \ + git://github.com/intel/tinycbor.git;destsuffix=iotivity/extlibs/tinycbor/tinycbor;protocol=https;name=tinycbor \ + git://github.com/ARMmbed/mbedtls.git;destsuffix=iotivity/extlibs/mbedtls/mbedtls;protocol=https;branch=mbedtls-2.4;name=mbedtls \ " SRCREV_main = "8fe09d4c9859d3ff32b4e8ca2ed996a156fccb81" diff --git a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb index 3a0870bec..da80b1fb7 100644 --- a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb +++ b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb @@ -10,9 +10,9 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE.md;md5=86d3f3a95c324c9479bd8986968f4327" SRC_URI += " \ - git://github.com/iotivity/iotivity.git;branch=webos;protocol=http;name=main;destsuffix=iotivity \ - git://github.com/intel/tinycbor.git;destsuffix=iotivity/extlibs/tinycbor/tinycbor;protocol=http;name=tinycbor \ - git://github.com/ARMmbed/mbedtls.git;destsuffix=iotivity/extlibs/mbedtls/mbedtls;protocol=http;branch=mbedtls-2.4;name=mbedtls \ + git://github.com/iotivity/iotivity.git;branch=webos;protocol=https;name=main;destsuffix=iotivity \ + git://github.com/intel/tinycbor.git;destsuffix=iotivity/extlibs/tinycbor/tinycbor;protocol=https;name=tinycbor \ + git://github.com/ARMmbed/mbedtls.git;destsuffix=iotivity/extlibs/mbedtls/mbedtls;protocol=https;branch=mbedtls-2.4;name=mbedtls \ " SRCREV_main = "8fe09d4c9859d3ff32b4e8ca2ed996a156fccb81" From c4d873707c694e0c56a853d4e11fea246f6bcee0 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 3 Nov 2021 00:59:21 -0700 Subject: [PATCH 0167/2022] Recipes: add explicit branch parameter and use https:// instead of git:// for github.com :Release Notes: github decided that nobody should use git:// https://github.blog/2021-09-01-improving-git-protocol-security-github/#no-more-unauthenticated-git :Detailed Notes: Starting today all the builds were failing to fetch the metadata layers from github like: 2021-11-01T18:53:26 INFO _main_ Updating [meta-ros] fatal: remote error: The unauthenticated git protocol on port 9418 is no longer supported. Please see https://github.blog/2021-09-01-improving-git-protocol-security-github/ for more information. this was just a "test" as they said: "November 2, 2021: We'll also run several short brownouts on this date." and it will be completely disabled on January 11 2022. created with openembedded-core/scripts/contrib/convert-srcuri.py but our bbclasses with variables like WEBOS_PORTS_GIT_REPO_COMPLETE need to be fixed manually (in the next commit). :Testing Performed: Only build tested. :QA Notes: None. :Issues Addressed: [WRN-10062] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I3a8dc70c1fd85f1ed8ab15f0a90e18de06c8f47e --- .../recipes-devtools/guilder/guider_3.9.7.bb | 2 +- .../recipes-core/systemd/systemd.inc | 2 +- meta-webos-iot/recipes-devtools/uftrace/uftrace_%.bbappend | 4 ++-- .../gstreamer/gstreamer1.0-webos-common.inc | 4 ++-- .../recipes-connectivity/iotivity-node/iotivity-node_git.bb | 2 +- meta-webos/recipes-core/iotivity/iotivity_git.bb | 6 +++--- .../recipes-upstreamable/fluentbit/fluentbit_1.7.4.bb | 2 +- .../recipes-upstreamable/googleapis/googleapis_git.bb | 4 ++-- .../recipes-upstreamable/gtkmm-utils/gtkmm-utils_0.4.1.bb | 4 ++-- .../recipes-upstreamable/leveldb-tl/leveldb-tl_0.1.6.bb | 4 ++-- meta-webos/recipes-upstreamable/libbson/libbson_git.bb | 4 ++-- meta-webos/recipes-upstreamable/libhangul/libhangul.bb | 2 +- .../recipes-upstreamable/node-gyp/node-gyp-native_git.bb | 4 ++-- meta-webos/recipes-upstreamable/pyzy/pyzy.bb | 4 ++-- meta-webos/recipes-upstreamable/snowboy/snowboy_1.3.0.bb | 2 +- .../recipes-upstreamable/sp-measure/sp-measure_git.bb | 4 ++-- .../recipes-upstreamable/sp-memusage/sp-memusage_git.bb | 4 ++-- meta-webos/recipes-upstreamable/sqlcipher/sqlcipher.bb | 4 ++-- meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb | 4 ++-- meta-webos/recipes-upstreamable/uchardet/uchardet_0.0.1.bb | 4 ++-- meta-webos/recipes-webos/enact-dev/enact-dev-native.bb | 6 +++--- meta-webos/recipes-webos/enactjs-apps/enact-framework.bb | 4 ++-- meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb | 4 ++-- meta-webos/recipes-webos/libgdrive/libgdrive.bb | 6 +++--- .../localization-tool/localization-tool-native.bb | 2 +- .../org.ocf.webossample.occlientbasicops.bb | 2 +- .../org.ocf.webossample.ocserverbasicops.bb | 2 +- 27 files changed, 48 insertions(+), 48 deletions(-) diff --git a/meta-webos-backports/meta-webos-backports-3.2/recipes-devtools/guilder/guider_3.9.7.bb b/meta-webos-backports/meta-webos-backports-3.2/recipes-devtools/guilder/guider_3.9.7.bb index 7ff1ffd50..d3e118908 100644 --- a/meta-webos-backports/meta-webos-backports-3.2/recipes-devtools/guilder/guider_3.9.7.bb +++ b/meta-webos-backports/meta-webos-backports-3.2/recipes-devtools/guilder/guider_3.9.7.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=2c1c00f9d3ed9e24fa69b932b7e7aff2" PV = "3.9.7+git${SRCPV}" -SRC_URI = "git://github.com/iipeace/${BPN}" +SRC_URI = "git://github.com/iipeace/${BPN};branch=master;protocol=https" SRCREV = "459b5189a46023fc98e19888b196bdc2674022fd" S = "${WORKDIR}/git" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd.inc index 0524a2500..626dc3232 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd.inc +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd.inc @@ -16,7 +16,7 @@ LIC_FILES_CHKSUM = "file://LICENSE.GPL2;md5=751419260aa954499f7abaabaa882bbe \ SRCREV = "37c4cfde0ce613f0f00544d3f4e2e72bf93d9c76" SRCBRANCH = "v248-stable" -SRC_URI = "git://github.com/systemd/systemd-stable.git;protocol=git;branch=${SRCBRANCH} \ +SRC_URI = "git://github.com/systemd/systemd-stable.git;protocol=https;branch=${SRCBRANCH} \ " S = "${WORKDIR}/git" diff --git a/meta-webos-iot/recipes-devtools/uftrace/uftrace_%.bbappend b/meta-webos-iot/recipes-devtools/uftrace/uftrace_%.bbappend index 7a324915a..7becbb734 100644 --- a/meta-webos-iot/recipes-devtools/uftrace/uftrace_%.bbappend +++ b/meta-webos-iot/recipes-devtools/uftrace/uftrace_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2021 LG Electronics, Inc. SRCREV = "${AUTOREV}" -SRC_URI = "git://github.com/namhyung/${BPN}" +SRC_URI = "git://github.com/namhyung/${BPN};branch=master;protocol=https" diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-webos-common.inc b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-webos-common.inc index f98cfcf55..e9ff99be9 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-webos-common.inc +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-webos-common.inc @@ -1,8 +1,8 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2021 LG Electronics, Inc. # inherit ${@'webos_public_repo webos_enhanced_submissions' if '${MACHINE}'.startswith('raspberrypi3') or '${MACHINE}'.startswith('raspberrypi4') else ''} -# GST_COMMON_GIT_rpi = "git://anongit.freedesktop.org/gstreamer/common" +# GST_COMMON_GIT_rpi = "git://anongit.freedesktop.org/gstreamer/common;branch=master" # SRCREV_common_rpi = "46d420818ed8172022caf4503894076b18b1e153" # SRCREV_FORMAT_rpi = "main_common" diff --git a/meta-webos/recipes-connectivity/iotivity-node/iotivity-node_git.bb b/meta-webos/recipes-connectivity/iotivity-node/iotivity-node_git.bb index ada060cff..586ef3f64 100644 --- a/meta-webos/recipes-connectivity/iotivity-node/iotivity-node_git.bb +++ b/meta-webos/recipes-connectivity/iotivity-node/iotivity-node_git.bb @@ -13,7 +13,7 @@ LIC_FILES_CHKSUM = "file://index.js;beginline=1;endline=13;md5=bafd0234b0f43def6 DEPENDS = "nodejs-native glib-2.0 iotivity" RDEPENDS_${PN} += "iotivity-resource iotivity-tools" -SRC_URI = "git://github.com/otcshare/iotivity-node.git;protocol=https" +SRC_URI = "git://github.com/otcshare/iotivity-node.git;protocol=https;branch=master" SRCREV = "c6aab8e6126c06516090dd13e812fee0d16b8cc7" SRC_URI += "file://0001-Add-new-api-for-register-custom-cbor-files.patch \ file://0002-Build-Do-not-purge-build-scripts-after-build.patch \ diff --git a/meta-webos/recipes-core/iotivity/iotivity_git.bb b/meta-webos/recipes-core/iotivity/iotivity_git.bb index 129e7d7ed..a5cc925a2 100644 --- a/meta-webos/recipes-core/iotivity/iotivity_git.bb +++ b/meta-webos/recipes-core/iotivity/iotivity_git.bb @@ -25,11 +25,11 @@ LIC_FILES_CHKSUM = "file://LICENSE.md;md5=86d3f3a95c324c9479bd8986968f4327" SRC_URI = " \ git://github.com/iotivity/iotivity.git;branch=webos;protocol=https;name=main \ - git://github.com/intel/tinycbor.git;destsuffix=git/extlibs/tinycbor/tinycbor;protocol=https;name=tinycbor \ + git://github.com/intel/tinycbor.git;destsuffix=git/extlibs/tinycbor/tinycbor;protocol=https;name=tinycbor;branch=master \ git://github.com/google/googletest.git;destsuffix=git/extlibs/gtest/googletest-release-1.7.0;protocol=https;nobranch=1;name=gtest \ - git://github.com/dascandy/hippomocks.git;destsuffix=git/extlibs/hippomocks/hippomocks;protocol=https;name=hippomocks \ + git://github.com/dascandy/hippomocks.git;destsuffix=git/extlibs/hippomocks/hippomocks;protocol=https;name=hippomocks;branch=master \ git://github.com/ARMmbed/mbedtls.git;destsuffix=git/extlibs/mbedtls/mbedtls;protocol=https;branch=mbedtls-2.4;name=mbedtls \ - git://github.com/miloyip/rapidjson.git;destsuffix=git/extlibs/rapidjson/rapidjson;protocol=https;name=rapidjson \ + git://github.com/miloyip/rapidjson.git;destsuffix=git/extlibs/rapidjson/rapidjson;protocol=https;name=rapidjson;branch=master \ git://github.com/dthaler/libcoap.git;destsuffix=git/extlibs/libcoap/libcoap;protocol=https;branch=develop;name=libcoap \ file://0001-hippomocks-fix-build-for-MIPS.patch;patchdir=extlibs/hippomocks/hippomocks \ file://0001-OCApi.h-prevent-multiple-definitions-of-OC-detail-oc.patch \ diff --git a/meta-webos/recipes-upstreamable/fluentbit/fluentbit_1.7.4.bb b/meta-webos/recipes-upstreamable/fluentbit/fluentbit_1.7.4.bb index 25f0e186a..71dda21b3 100644 --- a/meta-webos/recipes-upstreamable/fluentbit/fluentbit_1.7.4.bb +++ b/meta-webos/recipes-upstreamable/fluentbit/fluentbit_1.7.4.bb @@ -19,7 +19,7 @@ PR = "r0" PV = "1.7.4" SRCREV = "d638a11725ecdaf683be6167709c4712559cde79" -SRC_URI = "git://github.com/fluent/fluent-bit.git;branch=1.7 \ +SRC_URI = "git://github.com/fluent/fluent-bit.git;branch=1.7;protocol=https \ file://0001-mbedtls-Fix-build-failure-on-gcc-11.patch \ file://0002-mbedtls-Fix-GCC-warning-in-ssl_calc_finished_tls_sha.patch \ " diff --git a/meta-webos/recipes-upstreamable/googleapis/googleapis_git.bb b/meta-webos/recipes-upstreamable/googleapis/googleapis_git.bb index c204cca76..786db6d6c 100644 --- a/meta-webos/recipes-upstreamable/googleapis/googleapis_git.bb +++ b/meta-webos/recipes-upstreamable/googleapis/googleapis_git.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2019 LG Electronics, Inc. +# Copyright (c) 2018-2021 LG Electronics, Inc. DESCRIPTION = "Public interface definitions of Google APIs" AUTHOR = "Kyungjik Min " @@ -11,7 +11,7 @@ PR = "r0" DEPENDS = "grpc-native" -SRC_URI = "git://github.com/googleapis/googleapis.git" +SRC_URI = "git://github.com/googleapis/googleapis.git;branch=master;protocol=https" SRCREV = "9efcd835514288b21ce37182d75cc75c18b16541" S = "${WORKDIR}/git" diff --git a/meta-webos/recipes-upstreamable/gtkmm-utils/gtkmm-utils_0.4.1.bb b/meta-webos/recipes-upstreamable/gtkmm-utils/gtkmm-utils_0.4.1.bb index 550676921..1af32f2fe 100644 --- a/meta-webos/recipes-upstreamable/gtkmm-utils/gtkmm-utils_0.4.1.bb +++ b/meta-webos/recipes-upstreamable/gtkmm-utils/gtkmm-utils_0.4.1.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2016 LG Electronics, Inc. +# Copyright (c) 2013-2021 LG Electronics, Inc. DESCRIPTION = "C++ utility and widget library based on glibmm and gtkmm" HOMEPAGE = "http://code.google.com/p/gtkmm-utils/" @@ -15,7 +15,7 @@ PR = "r2" SRCREV = "997e27bdef8e2bd4504fad1afb7cfd0b5b4eef68" SRC_URI = " \ - git://github.com/markoa/${BPN}.git \ + git://github.com/markoa/${BPN}.git;branch=master;protocol=https \ file://0001-configure-add-option-to-disable-building-gtkmm-utils.patch \ file://0002-Fix-includes-with-newer-glib.patch \ file://0003-Fix-log-definition.patch \ diff --git a/meta-webos/recipes-upstreamable/leveldb-tl/leveldb-tl_0.1.6.bb b/meta-webos/recipes-upstreamable/leveldb-tl/leveldb-tl_0.1.6.bb index 444598dd7..a8898ec1d 100644 --- a/meta-webos/recipes-upstreamable/leveldb-tl/leveldb-tl_0.1.6.bb +++ b/meta-webos/recipes-upstreamable/leveldb-tl/leveldb-tl_0.1.6.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 LG Electronics, Inc. +# Copyright (c) 2014-2021 LG Electronics, Inc. SUMMARY = "LevelDB Template Library" DESCRIPTION = "Template library to build a more complex storage schema with leveldb as a backend" @@ -11,7 +11,7 @@ DEPENDS = "leveldb" DEPENDS_append_class-target = " gtest" PR = "r3" -SRC_URI = "git://github.com/ony/${BPN};branch=gcc-4.7" +SRC_URI = "git://github.com/ony/${BPN};branch=gcc-4.7;protocol=https" # Use gcc-4.7/v0.1.6 tag. It's backport of gcc-4.8 branch, # so it would work fine with both compiler versions diff --git a/meta-webos/recipes-upstreamable/libbson/libbson_git.bb b/meta-webos/recipes-upstreamable/libbson/libbson_git.bb index d5b65f348..28f99c190 100644 --- a/meta-webos/recipes-upstreamable/libbson/libbson_git.bb +++ b/meta-webos/recipes-upstreamable/libbson/libbson_git.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2018 LG Electronics, Inc. +# Copyright (c) 2014-2021 LG Electronics, Inc. SUMMARY = "A BSON utility library" DESCRIPTION = "libbson is a library providing useful routines related to building, parsing, and iterating BSON documents." @@ -12,7 +12,7 @@ PR = "r2" PV = "0.98.0+git${SRCPV}" # corresponds to 0.98.0 SRCREV = "b2d142f48676124e80578b5d491bd9aec50e748d" -SRC_URI = "git://github.com/mongodb/${BPN} \ +SRC_URI = "git://github.com/mongodb/${BPN};branch=master;protocol=https \ file://0001-Update-CMakelist-file-to-install-lib-correctly.patch" S = "${WORKDIR}/git" diff --git a/meta-webos/recipes-upstreamable/libhangul/libhangul.bb b/meta-webos/recipes-upstreamable/libhangul/libhangul.bb index f1887c98f..98d6196d2 100644 --- a/meta-webos/recipes-upstreamable/libhangul/libhangul.bb +++ b/meta-webos/recipes-upstreamable/libhangul/libhangul.bb @@ -18,7 +18,7 @@ PV = "0.1.0+git${SRCPV}" EXTRA_OECONF += "--libdir=${libdir}/maliit/plugins" -SRC_URI = "git://github.com/choehwanjin/libhangul.git;branch=main \ +SRC_URI = "git://github.com/choehwanjin/libhangul.git;branch=main;protocol=https \ file://0001-Change-the-project-to-address-code.google.com-p-libh.patch \ file://0002-Add-rule-to-auto-update-when-you-make-dist-ChangeLog.patch \ file://0003-Change-wrong-name-hangul-jongseong-dicompose-decomp.patch \ diff --git a/meta-webos/recipes-upstreamable/node-gyp/node-gyp-native_git.bb b/meta-webos/recipes-upstreamable/node-gyp/node-gyp-native_git.bb index 762f43dcb..a65d1cd4b 100644 --- a/meta-webos/recipes-upstreamable/node-gyp/node-gyp-native_git.bb +++ b/meta-webos/recipes-upstreamable/node-gyp/node-gyp-native_git.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2020 LG Electronics, Inc. +# Copyright (c) 2013-2021 LG Electronics, Inc. DESCRIPTION = "Node.js native addon build tool" HOMEPAGE = "https://github.com/nodejs/node-gyp" @@ -8,7 +8,7 @@ DEPENDS = "nodejs-native node-gyp-packages-native" PV = "6.1.0+git${SRCPV}" SRCREV = "d1dea13fe44bc65ee3ea8441c08c9a3d03d6d63d" -SRC_URI = "git://github.com/nodejs/node-gyp.git" +SRC_URI = "git://github.com/nodejs/node-gyp.git;branch=master;protocol=https" S = "${WORKDIR}/git" diff --git a/meta-webos/recipes-upstreamable/pyzy/pyzy.bb b/meta-webos/recipes-upstreamable/pyzy/pyzy.bb index 49feb21d4..5c7368bc5 100644 --- a/meta-webos/recipes-upstreamable/pyzy/pyzy.bb +++ b/meta-webos/recipes-upstreamable/pyzy/pyzy.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2021 LG Electronics, Inc. SUMMARY = "The Chinese PinYin and Bopomofo conversion library" AUTHOR = "Pugalendhi Ganesan " @@ -16,7 +16,7 @@ SRCREV = "d7747466562cb8b4bc2934708e29b7643c7bedbc" PV = "0.1.0+git${SRCPV}" PR = "r1" -SRC_URI = "git://github.com/pyzy/pyzy.git \ +SRC_URI = "git://github.com/pyzy/pyzy.git;branch=master;protocol=https \ file://0001-Fix-Narrowing-conversion-from-int-to-char-bug.patch \ file://0002-Remove-Cursor-line-from-auxiliary-text.patch \ file://0003-Add-pyzy-wrapper-for-webOS.patch \ diff --git a/meta-webos/recipes-upstreamable/snowboy/snowboy_1.3.0.bb b/meta-webos/recipes-upstreamable/snowboy/snowboy_1.3.0.bb index 4d6969427..4b4e1adfb 100644 --- a/meta-webos/recipes-upstreamable/snowboy/snowboy_1.3.0.bb +++ b/meta-webos/recipes-upstreamable/snowboy/snowboy_1.3.0.bb @@ -4,7 +4,7 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=8d385adc93db3f7e5d092b82fb2c9353" SRCREV = "052db3400c5f45d8ac2bbf5688ad92f37b81e2ec" -SRC_URI = "git://github.com/Kitt-AI/snowboy;protocol=https" +SRC_URI = "git://github.com/Kitt-AI/snowboy;protocol=https;branch=master" S = "${WORKDIR}/git" COMPATIBLE_MACHINE = "(machine-native|android)" diff --git a/meta-webos/recipes-upstreamable/sp-measure/sp-measure_git.bb b/meta-webos/recipes-upstreamable/sp-measure/sp-measure_git.bb index 3c453448a..99c3ea983 100644 --- a/meta-webos/recipes-upstreamable/sp-measure/sp-measure_git.bb +++ b/meta-webos/recipes-upstreamable/sp-measure/sp-measure_git.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2016 LG Electronics, Inc. +# Copyright (c) 2013-2021 LG Electronics, Inc. SUMMARY = "A library for measuring resource consumption (CPU, memory)" LICENSE = "LGPLv2.1" @@ -10,7 +10,7 @@ PV = "1.3.5+git${SRCPV}" inherit autotools-brokensep -SRC_URI = "git://github.com/maemo-tools-old/${BPN}.git \ +SRC_URI = "git://github.com/maemo-tools-old/${BPN}.git;branch=master;protocol=https \ file://build-fixes-for-compiling-in-OE.patch \ file://do-not-compile-doc-directory-if-doxygen-is-missing.patch \ " diff --git a/meta-webos/recipes-upstreamable/sp-memusage/sp-memusage_git.bb b/meta-webos/recipes-upstreamable/sp-memusage/sp-memusage_git.bb index 3aeb9eecf..9ffbbaa07 100644 --- a/meta-webos/recipes-upstreamable/sp-memusage/sp-memusage_git.bb +++ b/meta-webos/recipes-upstreamable/sp-memusage/sp-memusage_git.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2020 LG Electronics, Inc. +# Copyright (c) 2013-2021 LG Electronics, Inc. SUMMARY = "A collection of memory usage monitoring tools and scripts" LICENSE = "GPL-2.0" @@ -13,7 +13,7 @@ PV = "1.3.2+git${SRCPV}" inherit autotools-brokensep -SRC_URI = "git://github.com/maemo-tools-old/${BPN}.git \ +SRC_URI = "git://github.com/maemo-tools-old/${BPN}.git;branch=master;protocol=https \ file://build-fixes.patch \ " S = "${WORKDIR}/git" diff --git a/meta-webos/recipes-upstreamable/sqlcipher/sqlcipher.bb b/meta-webos/recipes-upstreamable/sqlcipher/sqlcipher.bb index ae9f8477c..d5b3e0959 100644 --- a/meta-webos/recipes-upstreamable/sqlcipher/sqlcipher.bb +++ b/meta-webos/recipes-upstreamable/sqlcipher/sqlcipher.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2017 LG Electronics, Inc. +# Copyright (c) 2013-2021 LG Electronics, Inc. SUMMARY = "Open Source Full Database Encryption for SQLite" DESCRIPTION = "SQLCipher is an open source library that provides transparent, secure 256-bit AES encryption of SQLite database files." @@ -12,7 +12,7 @@ PV = "3.4.2" inherit autotools SRCREV = "c6f709fca81c910ba133aaf6330c28e01ccfe5f8" -SRC_URI = "git://github.com/${BPN}/${BPN}" +SRC_URI = "git://github.com/${BPN}/${BPN};branch=master;protocol=https" EXTRA_OECONF = "--disable-tcl CFLAGS=-DSQLITE_HAS_CODEC" EXTRA_OEMAKE='"LIBTOOL=${STAGING_BINDIR_CROSS}/${HOST_SYS}-libtool"' diff --git a/meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb b/meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb index e16fe2638..bbdb1e629 100644 --- a/meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb +++ b/meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2021 LG Electronics, Inc. SUMMARY = "Pinyin input method library" AUTHOR = "pugalendhi Ganesan " @@ -23,7 +23,7 @@ SRC_URI[arpa.sha256sum] = "751bab7c55ea93a2cedfb0fbb7eb09f67d4da9c2c55496e5f31eb SRC_URI[dict.md5sum] = "2055f50a0f942b49d4417d801388eba5" SRC_URI[dict.sha256sum] = "af70bc2bcd7af7468495774fed9e3a2de434650119fbc3d3388c2bcf7e0acb01" -SRC_URI = "git://github.com/sunpinyin/sunpinyin.git;protocol=https \ +SRC_URI = "git://github.com/sunpinyin/sunpinyin.git;protocol=https;branch=master \ https://downloads.sourceforge.net/project/open-gram/lm_sc.3gm.arpa-20140820.tar.bz2;name=arpa \ https://downloads.sourceforge.net/project/open-gram/dict.utf8-20131214.tar.bz2;name=dict \ file://0001-Change-scon-to-download-open-gram-dictionary.patch \ diff --git a/meta-webos/recipes-upstreamable/uchardet/uchardet_0.0.1.bb b/meta-webos/recipes-upstreamable/uchardet/uchardet_0.0.1.bb index a386725c8..66cefbd05 100644 --- a/meta-webos/recipes-upstreamable/uchardet/uchardet_0.0.1.bb +++ b/meta-webos/recipes-upstreamable/uchardet/uchardet_0.0.1.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2016 LG Electronics, Inc. +# Copyright (c) 2013-2021 LG Electronics, Inc. DESCRIPTION = "uchardet is a C language binding of the original C++ \ implementation of the universal charset detection library by Mozilla." @@ -11,7 +11,7 @@ PR = "r1" # there is no tag for 0.0.1 version, but content of this revision matches # with uchardet-0.0.1.tar.gz SRCREV = "56a4c0d86c1c89ae3f756480fdec03ba5f7e7323" -SRC_URI = "git://github.com/BYVoid/${BPN}.git" +SRC_URI = "git://github.com/BYVoid/${BPN}.git;branch=master;protocol=https" S = "${WORKDIR}/git" inherit cmake diff --git a/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb b/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb index 37aef179b..fa15fefb9 100644 --- a/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb +++ b/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb @@ -22,9 +22,9 @@ PR = "r11" S = "${WORKDIR}/git" SRC_URI = " \ - ${ENACTJS_GIT_REPO}/cli.git;name=main;nobranch=1;destsuffix=git/cli \ - ${ENACTJS_GIT_REPO}/cli.git;name=cli-legacy;nobranch=1;destsuffix=git/cli-legacy \ - ${ENACTJS_GIT_REPO}/jsdoc-to-ts.git;name=jsdoc-to-ts;nobranch=1;destsuffix=git/jsdoc-to-ts \ + ${ENACTJS_GIT_REPO}/cli.git;name=main${WEBOS_GIT_PROTOCOL};nobranch=1;destsuffix=git/cli \ + ${ENACTJS_GIT_REPO}/cli.git;name=cli-legacy${WEBOS_GIT_PROTOCOL};nobranch=1;destsuffix=git/cli-legacy \ + ${ENACTJS_GIT_REPO}/jsdoc-to-ts.git;name=jsdoc-to-ts${WEBOS_GIT_PROTOCOL};nobranch=1;destsuffix=git/jsdoc-to-ts \ " # we don't include SRCPV in PV, so we have to manually include SRCREVs in do_fetch vardeps diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb index fdfad96f6..f56d55c5c 100644 --- a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb +++ b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb @@ -13,8 +13,8 @@ inherit webos_enactjs_env S = "${WORKDIR}/git" SRC_URI = " \ - ${ENACTJS_GIT_REPO}/moonstone.git;name=main;nobranch=1;destsuffix=git/moonstone \ - ${ENACTJS_GIT_REPO}/enact;name=enact;nobranch=1;destsuffix=git/enact \ + ${ENACTJS_GIT_REPO}/moonstone.git;name=main${WEBOS_GIT_PROTOCOL};nobranch=1;destsuffix=git/moonstone \ + ${ENACTJS_GIT_REPO}/enact;name=enact${WEBOS_GIT_PROTOCOL};nobranch=1;destsuffix=git/enact \ " # NOTE: PV is the Moonstone version (which uses the Semantic Versioning spec), diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb b/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb index b5ecff792..011c946e2 100644 --- a/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb +++ b/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb @@ -13,8 +13,8 @@ inherit webos_enactjs_env S = "${WORKDIR}/git" SRC_URI = " \ - ${ENACTJS_GIT_REPO}/sandstone.git;name=main;nobranch=1;destsuffix=git/sandstone \ - ${ENACTJS_GIT_REPO}/enact;name=enact;nobranch=1;destsuffix=git/enact \ + ${ENACTJS_GIT_REPO}/sandstone.git;name=main${WEBOS_GIT_PROTOCOL};nobranch=1;destsuffix=git/sandstone \ + ${ENACTJS_GIT_REPO}/enact;name=enact${WEBOS_GIT_PROTOCOL};nobranch=1;destsuffix=git/enact \ " # NOTE: PV is the Sandstone version (which uses the Semantic Versioning spec), diff --git a/meta-webos/recipes-webos/libgdrive/libgdrive.bb b/meta-webos/recipes-webos/libgdrive/libgdrive.bb index ce1453a15..d143ed003 100644 --- a/meta-webos/recipes-webos/libgdrive/libgdrive.bb +++ b/meta-webos/recipes-webos/libgdrive/libgdrive.bb @@ -17,9 +17,9 @@ SRCREV_FORMAT = "libgdrive" SRCREV_libgdrive = "a7838bcf55fbbc6cfb66209bb2db1fbe82758924" SRCREV_common = "d4276cb79d2bccb47431d530e6e3738df49cabd2" SRCREV_coner = "22dd8e36e96bf38d35896add347a733ad9ed541c" -SRC_URI = "git://github.com/allenbo/libgdrive.git;name=libgdrive \ - git://github.com/allenbo/common.git;name=common;destsuffix=git/common \ - git://github.com/allenbo/JConer.git;name=coner;destsuffix=git/jconer \ +SRC_URI = "git://github.com/allenbo/libgdrive.git;name=libgdrive;branch=master;protocol=https \ + git://github.com/allenbo/common.git;name=common;destsuffix=git/common;branch=master;protocol=https \ + git://github.com/allenbo/JConer.git;name=coner;destsuffix=git/jconer;branch=master;protocol=https \ file://0001-patch-for-jconer-in-SAF.patch;patchdir=jconer \ file://0001-patch-for-libgdrive-in-SAF.patch \ " diff --git a/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb b/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb index a2a28ae09..fddd55e7f 100644 --- a/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb +++ b/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb @@ -13,7 +13,7 @@ inherit webos_npm_env inherit native DEPENDS = "nodejs-native node-gyp-packages-native" -SRC_URI = "git://github.com/iLib-js/ilib-loctool-webos-dist.git;branch=master" +SRC_URI = "git://github.com/iLib-js/ilib-loctool-webos-dist.git;branch=master;protocol=https" S = "${WORKDIR}/git" # PV is the version of the ilib-loctool-webos-dist distribution, as tagged in the diff --git a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb index 5e8771764..9e7b7dd12 100644 --- a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb +++ b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://LICENSE.md;md5=86d3f3a95c324c9479bd8986968f4327" SRC_URI += " \ git://github.com/iotivity/iotivity.git;branch=webos;protocol=https;name=main;destsuffix=iotivity \ - git://github.com/intel/tinycbor.git;destsuffix=iotivity/extlibs/tinycbor/tinycbor;protocol=https;name=tinycbor \ + git://github.com/intel/tinycbor.git;destsuffix=iotivity/extlibs/tinycbor/tinycbor;protocol=https;name=tinycbor;branch=master \ git://github.com/ARMmbed/mbedtls.git;destsuffix=iotivity/extlibs/mbedtls/mbedtls;protocol=https;branch=mbedtls-2.4;name=mbedtls \ " diff --git a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb index da80b1fb7..2b6f74497 100644 --- a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb +++ b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://LICENSE.md;md5=86d3f3a95c324c9479bd8986968f4327" SRC_URI += " \ git://github.com/iotivity/iotivity.git;branch=webos;protocol=https;name=main;destsuffix=iotivity \ - git://github.com/intel/tinycbor.git;destsuffix=iotivity/extlibs/tinycbor/tinycbor;protocol=https;name=tinycbor \ + git://github.com/intel/tinycbor.git;destsuffix=iotivity/extlibs/tinycbor/tinycbor;protocol=https;name=tinycbor;branch=master \ git://github.com/ARMmbed/mbedtls.git;destsuffix=iotivity/extlibs/mbedtls/mbedtls;protocol=https;branch=mbedtls-2.4;name=mbedtls \ " From 084c0976f586f834e0fe687cf96f63d7c1d63f2a Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 3 Nov 2021 01:09:00 -0700 Subject: [PATCH 0168/2022] webos_{public,enact}_repo.bbclass: include WEBOS_GIT_PROTOCOL in *_COMPLETE variables :Release Notes: github decided that nobody should use git:// https://github.blog/2021-09-01-improving-git-protocol-security-github/#no-more-unauthenticated-git :Detailed Notes: Starting today all the builds were failing to fetch the metadata layers from github like: 2021-11-01T18:53:26 INFO _main_ Updating [meta-ros] fatal: remote error: The unauthenticated git protocol on port 9418 is no longer supported. Please see https://github.blog/2021-09-01-improving-git-protocol-security-github/ for more information. this was just a "test" as they said: "November 2, 2021: We'll also run several short brownouts on this date." and it will be completely disabled on January 11 2022. created with openembedded-core/scripts/contrib/convert-srcuri.py but our bbclasses with variables like WEBOS_PORTS_GIT_REPO_COMPLETE need to be fixed manually (in the next commit). :Testing Performed: Only build tested. :QA Notes: None. :Issues Addressed: [WRN-10062] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: Ia2bff4ab3ca6ca0082bae154bc2dfa9674026269 --- meta-webos/classes/webos_enact_repo.bbclass | 6 ++++-- meta-webos/conf/distro/include/webos-repositories.inc | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/meta-webos/classes/webos_enact_repo.bbclass b/meta-webos/classes/webos_enact_repo.bbclass index a199de70c..778127567 100644 --- a/meta-webos/classes/webos_enact_repo.bbclass +++ b/meta-webos/classes/webos_enact_repo.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2018 LG Electronics, Inc. +# Copyright (c) 2018-2021 LG Electronics, Inc. # The default repo name is the "base" component name (no -native, etc.) WEBOS_REPO_NAME ??= "${BPN}" @@ -8,6 +8,8 @@ WEBOS_GIT_BRANCH ?= ";branch=${WEBOS_GIT_PARAM_BRANCH}" # Default is empty but webos_enhanced_submissions.bbclass will always set the value WEBOS_GIT_PARAM_TAG ?= "" WEBOS_GIT_TAG ?= ";tag=${WEBOS_GIT_PARAM_TAG}" +WEBOS_GIT_PARAM_PROTOCOL ?= "https" +WEBOS_GIT_PROTOCOL = ";protocol=${WEBOS_GIT_PARAM_PROTOCOL}" ENACTJS_GIT_REPO ?= "git://github.com/enactjs" -ENACTJS_GIT_REPO_COMPLETE ?= "${ENACTJS_GIT_REPO}/${WEBOS_REPO_NAME}${WEBOS_GIT_TAG}${WEBOS_GIT_BRANCH}" +ENACTJS_GIT_REPO_COMPLETE ?= "${ENACTJS_GIT_REPO}/${WEBOS_REPO_NAME}${WEBOS_GIT_PROTOCOL}${WEBOS_GIT_TAG}${WEBOS_GIT_BRANCH}" diff --git a/meta-webos/conf/distro/include/webos-repositories.inc b/meta-webos/conf/distro/include/webos-repositories.inc index c3c844987..f30602f08 100644 --- a/meta-webos/conf/distro/include/webos-repositories.inc +++ b/meta-webos/conf/distro/include/webos-repositories.inc @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2019 LG Electronics, Inc. +# Copyright (c) 2012-2021 LG Electronics, Inc. # The default repo name is the "base" component name (no -native, etc.) WEBOS_REPO_NAME ??= "${BPN}" @@ -8,8 +8,10 @@ WEBOS_GIT_BRANCH ?= ";branch=${WEBOS_GIT_PARAM_BRANCH}" # Default is empty but webos_enhanced_submissions.bbclass will always set the value WEBOS_GIT_PARAM_TAG ?= "" WEBOS_GIT_TAG ?= ";tag=${WEBOS_GIT_PARAM_TAG}" +WEBOS_GIT_PARAM_PROTOCOL ?= "https" +WEBOS_GIT_PROTOCOL = ";protocol=${WEBOS_GIT_PARAM_PROTOCOL}" WEBOSOSE_GIT_REPO ?= "git://github.com/webosose" -WEBOSOSE_GIT_PARAM_PROTOCOL ?= "git" +WEBOSOSE_GIT_PARAM_PROTOCOL ?= "https" WEBOSOSE_GIT_PROTOCOL = ";protocol=${WEBOSOSE_GIT_PARAM_PROTOCOL}" WEBOSOSE_GIT_REPO_COMPLETE ?= "${WEBOSOSE_GIT_REPO}/${WEBOS_REPO_NAME}${WEBOS_GIT_TAG}${WEBOS_GIT_BRANCH}${WEBOSOSE_GIT_PROTOCOL}" From 1f63cf659e9612e8e49bd6a5f6a316fdab27f6f3 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 5 Nov 2021 15:51:45 -0700 Subject: [PATCH 0169/2022] media-codec-interface=r4 (set branch parameter in MCILs SRC_URI) :Release Notes: :Detailed Notes: Fixes: WARNING: media-codec-interface-1.0.0-3-r3 do_fetch: URL: git://gpro.lge.com/webosose/media-codec-ose;protocol=ssh;destsuffix=git/src/codec_impl;name=mcil does not set any branch parameter. The future default branch used by tools and repositories is uncertain and we will therefore soon require this is set in all git urls. :Testing Performed: Only build tested. :QA Notes: None. :Issues Addressed: [WRN-10062] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I3f2273f913cdc32ea401a86ee1da1787aec10b1b --- .../media-codec-interface/media-codec-interface.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb index 8d242a9e8..352bbdb91 100644 --- a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb +++ b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb @@ -22,13 +22,13 @@ DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad DEPENDS_append_rpi = " virtual/libomxil" WEBOS_VERSION = "1.0.0-3_13f4a0e50c95f7ecf04be37949c0da266ba221d3" -PR = "r3" +PR = "r4" SRCREV_mcil = "ef2a9b183262a04e8246df951acf4693a18b3cd6" WEBOS_REPO_NAME_MCIL ?= "media-codec-ose" WEBOS_GIT_REPO_MCIL ?= "${WEBOSOSE_GIT_REPO}" -WEBOS_GIT_REPO_COMPLETE_MCIL ?= "${WEBOS_GIT_REPO_MCIL}/${WEBOS_REPO_NAME_MCIL}${WEBOSOSE_GIT_PROTOCOL}" +WEBOS_GIT_REPO_COMPLETE_MCIL ?= "${WEBOS_GIT_REPO_MCIL}/${WEBOS_REPO_NAME_MCIL}${WEBOSOSE_GIT_PROTOCOL};branch=master" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE};name=main" From d7ba966331e932e7d4de57d87e7733c4fdd4ff83 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 5 Nov 2021 03:23:12 -0700 Subject: [PATCH 0170/2022] webruntime-common: avoid using _append with += :Release Notes: See https://lists.openembedded.org/g/bitbake-devel/message/12877 :Detailed Notes: Operations like XXX:append += "YYY" are almost always wrong and this is a common mistake made in the metadata. Newest bitbake now shows warning for cases like this. Fixes: WARNING: /OE/meta-webos/recipes-webos/chromium/webruntime_87.bb: GN_ARGS:append:armv6 += is not a recommended operator combination, please replace it. WARNING: /OE/meta-webos/recipes-webos/chromium/webruntime_87.bb: GN_ARGS:append:armv6 += is not a recommended operator combination, please replace it. WARNING: /OE/meta-webos/recipes-webos/chromium/webruntime_91.bb: GN_ARGS:append:armv6 += is not a recommended operator combination, please replace it. WARNING: /OE/meta-webos/recipes-webos/chromium/webruntime_91.bb: GN_ARGS:append:armv6 += is not a recommended operator combination, please replace it. WARNING: /OE/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb: GN_ARGS:append:armv6 += is not a recommended operator combination, please replace it. WARNING: /OE/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb: GN_ARGS:append:armv6 += is not a recommended operator combination, please replace it. WARNING: /OE/meta-webos/recipes-webos/chromium/mksnapshot-cross_87.bb: GN_ARGS:append:armv6 += is not a recommended operator combination, please replace it. WARNING: /OE/meta-webos/recipes-webos/chromium/mksnapshot-cross_87.bb: GN_ARGS:append:armv6 += is not a recommended operator combination, please replace it. :Testing Performed: Only build tested. :QA Notes: None. :Issues Addressed: [WRN-10062] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I907c902bd4f5e18ad02414f5bd47382649250dc3 --- meta-webos/recipes-webos/chromium/webruntime-common.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-common.inc b/meta-webos/recipes-webos/chromium/webruntime-common.inc index 36d66ad06..8bfa603d4 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-common.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-common.inc @@ -112,10 +112,10 @@ GN_ARGS_append_armv7a = " arm_arch=\"armv7-a\" arm_version=7 arm_float_abi=\"${A GN_ARGS_append_armv7ve = " arm_arch=\"armv7ve\" arm_version=7 arm_float_abi=\"${ARM_FLOAT_ABI}\"" # tcmalloc's atomicops-internals-arm-v6plus.h uses the "dmb" instruction that # is not available on (some?) ARMv6 models, which causes the build to fail. -GN_ARGS_append_armv6 += 'use_allocator="none"' +GN_ARGS_append_armv6 = ' use_allocator="none"' # The WebRTC code fails to build on ARMv6 when NEON is enabled. # https://bugs.chromium.org/p/webrtc/issues/detail?id=6574 -GN_ARGS_append_armv6 += 'arm_use_neon=false' +GN_ARGS_append_armv6 = ' arm_use_neon=false' # Doesn't build for armv[45]* COMPATIBLE_MACHINE = "(-)" From ef825ae018e595aaa9d2acdc786d37b8207558fc Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 5 Nov 2021 03:42:37 -0700 Subject: [PATCH 0171/2022] systemd=v249.3 (backport newer version from Honister) :Release Notes: Update to the version included in final Honister. :Detailed Notes: It was updated 2 more times in honister development 248.3 -> 249.1 in: https://git.openembedded.org/openembedded-core/commit/?h=honister&id=323ec445dfe22860cd450c303db5ed8fcb4e791c 249.1 -> 249.3 in: https://git.openembedded.org/openembedded-core/commit/?h=honister&id=88cfba0762fe3bb6f593901f9a673b373534b756 Keep older LIC_FILES_CHKSUM in meta-webos-backports-3.4/recipes-core/systemd/systemd-serialgetty.bb until the upgrade to hardknott and keep protocol=https in meta-webos-backports-3.4/recipes-core/systemd/systemd.inc :Testing Performed: Only build tested. :QA Notes: None. :Issues Addressed: [WRN-10062] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: Iff906005463a9c52e13489a7766f4c3aeb208ce0 --- .../classes/systemd-boot.bbclass | 2 +- .../classes/systemd.bbclass | 44 ++-- .../conf/image-uefi.conf | 12 +- ...md-boot_248.3.bb => systemd-boot_249.3.bb} | 20 +- .../systemd/systemd-bootconf_1.00.bb | 6 +- .../systemd/systemd-compat-units.bb | 8 +- .../recipes-core/systemd/systemd-conf_1.0.bb | 10 +- .../systemd/systemd-machine-units_1.0.bb | 4 +- .../systemd/systemd-serialgetty.bb | 20 +- .../systemd/systemd-systemctl/systemctl | 5 +- .../recipes-core/systemd/systemd.inc | 4 +- ...tall-dependency-links-at-install-tim.patch | 38 +-- ...002-don-t-use-glibc-specific-qsort_r.patch | 104 ++++---- ...dd-__compare_fn_t-and-comparison_fn_.patch | 4 +- ...k-parse_printf_format-implementation.patch | 16 +- ...missing.h-check-for-missing-strndupa.patch | 180 +++++++++---- .../0006-Include-netinet-if_ether.h.patch | 169 ++++++++---- ...OB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch | 20 +- ...008-add-missing-FTW_-macros-for-musl.patch | 18 +- ..._register_atfork-for-non-glibc-build.patch | 6 +- ...10-Use-uintmax_t-for-handling-rlim_t.patch | 12 +- ...sable-tests-for-missing-typedefs-in-.patch | 2 +- ...T_SYMLINK_NOFOLLOW-flag-to-faccessat.patch | 16 +- ...patible-basename-for-non-glibc-syste.patch | 4 +- ...uffering-when-writing-to-oom_score_a.patch | 6 +- ...compliant-strerror_r-from-GNU-specif.patch | 6 +- ...S_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch | 4 +- ...ype.h-add-__compar_d_fn_t-definition.patch | 2 +- ...definition-of-prctl_mm_map-structure.patch | 2 +- .../systemd/0019-Handle-missing-LOCK_EX.patch | 2 +- ...ible-pointer-type-struct-sockaddr_un.patch | 6 +- .../0021-test-json.c-define-M_PIl.patch | 2 +- ...-not-disable-buffer-in-writing-files.patch | 131 +++++----- .../0025-Handle-__cpu_mask-usage.patch | 2 +- .../systemd/0026-Handle-missing-gshadow.patch | 16 +- ...l.h-Define-MIPS-ABI-defines-for-musl.patch | 4 +- .../{systemd_248.3.bb => systemd_249.3.bb} | 243 +++++++++--------- 37 files changed, 667 insertions(+), 483 deletions(-) rename meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/{systemd-boot_248.3.bb => systemd-boot_249.3.bb} (79%) rename meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/{systemd_248.3.bb => systemd_249.3.bb} (81%) diff --git a/meta-webos-backports/meta-webos-backports-3.4/classes/systemd-boot.bbclass b/meta-webos-backports/meta-webos-backports-3.4/classes/systemd-boot.bbclass index 336c4c2ff..57ec0acbc 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/classes/systemd-boot.bbclass +++ b/meta-webos-backports/meta-webos-backports-3.4/classes/systemd-boot.bbclass @@ -28,7 +28,7 @@ efi_populate() { done } -efi_iso_populate_append() { +efi_iso_populate:append() { cp -r $iso_dir/loader ${EFIIMGDIR} } diff --git a/meta-webos-backports/meta-webos-backports-3.4/classes/systemd.bbclass b/meta-webos-backports/meta-webos-backports-3.4/classes/systemd.bbclass index db5d10954..09ec52792 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/classes/systemd.bbclass +++ b/meta-webos-backports/meta-webos-backports-3.4/classes/systemd.bbclass @@ -1,9 +1,9 @@ # The list of packages that should have systemd packaging scripts added. For -# each entry, optionally have a SYSTEMD_SERVICE_[package] that lists the service +# each entry, optionally have a SYSTEMD_SERVICE:[package] that lists the service # files in this package. If this variable isn't set, [package].service is used. SYSTEMD_PACKAGES ?= "${PN}" -SYSTEMD_PACKAGES_class-native ?= "" -SYSTEMD_PACKAGES_class-nativesdk ?= "" +SYSTEMD_PACKAGES:class-native ?= "" +SYSTEMD_PACKAGES:class-nativesdk ?= "" # Whether to enable or disable the services on installation. SYSTEMD_AUTO_ENABLE ??= "enable" @@ -70,7 +70,7 @@ python systemd_populate_packages() { return def get_package_var(d, var, pkg): - val = (d.getVar('%s_%s' % (var, pkg)) or "").strip() + val = (d.getVar('%s:%s' % (var, pkg)) or "").strip() if val == "": val = (d.getVar(var) or "").strip() return val @@ -85,39 +85,39 @@ python systemd_populate_packages() { def systemd_generate_package_scripts(pkg): bb.debug(1, 'adding systemd calls to postinst/postrm for %s' % pkg) - paths_escaped = ' '.join(shlex.quote(s) for s in d.getVar('SYSTEMD_SERVICE_' + pkg).split()) - d.setVar('SYSTEMD_SERVICE_ESCAPED_' + pkg, paths_escaped) + paths_escaped = ' '.join(shlex.quote(s) for s in d.getVar('SYSTEMD_SERVICE:' + pkg).split()) + d.setVar('SYSTEMD_SERVICE_ESCAPED:' + pkg, paths_escaped) - # Add pkg to the overrides so that it finds the SYSTEMD_SERVICE_pkg + # Add pkg to the overrides so that it finds the SYSTEMD_SERVICE:pkg # variable. localdata = d.createCopy() localdata.prependVar("OVERRIDES", pkg + ":") - postinst = d.getVar('pkg_postinst_%s' % pkg) + postinst = d.getVar('pkg_postinst:%s' % pkg) if not postinst: postinst = '#!/bin/sh\n' postinst += localdata.getVar('systemd_postinst') - d.setVar('pkg_postinst_%s' % pkg, postinst) + d.setVar('pkg_postinst:%s' % pkg, postinst) - prerm = d.getVar('pkg_prerm_%s' % pkg) + prerm = d.getVar('pkg_prerm:%s' % pkg) if not prerm: prerm = '#!/bin/sh\n' prerm += localdata.getVar('systemd_prerm') - d.setVar('pkg_prerm_%s' % pkg, prerm) + d.setVar('pkg_prerm:%s' % pkg, prerm) - # Add files to FILES_*-systemd if existent and not already done + # Add files to FILES:*-systemd if existent and not already done def systemd_append_file(pkg_systemd, file_append): appended = False if os.path.exists(oe.path.join(d.getVar("D"), file_append)): - var_name = "FILES_" + pkg_systemd + var_name = "FILES:" + pkg_systemd files = d.getVar(var_name, False) or "" if file_append not in files.split(): d.appendVar(var_name, " " + file_append) appended = True return appended - # Add systemd files to FILES_*-systemd, parse for Also= and follow recursive + # Add systemd files to FILES:*-systemd, parse for Also= and follow recursive def systemd_add_files_and_parse(pkg_systemd, path, service, keys): # avoid infinite recursion if systemd_append_file(pkg_systemd, oe.path.join(path, service)): @@ -174,32 +174,32 @@ python systemd_populate_packages() { if path_found != '': systemd_add_files_and_parse(pkg_systemd, path_found, service, keys) else: - bb.fatal("Didn't find service unit '{0}', specified in SYSTEMD_SERVICE_{1}. {2}".format( + bb.fatal("Didn't find service unit '{0}', specified in SYSTEMD_SERVICE:{1}. {2}".format( service, pkg_systemd, "Also looked for service unit '{0}'.".format(base) if base is not None else "")) def systemd_create_presets(pkg, action): presetf = oe.path.join(d.getVar("PKGD"), d.getVar("systemd_unitdir"), "system-preset/98-%s.preset" % pkg) bb.utils.mkdirhier(os.path.dirname(presetf)) with open(presetf, 'a') as fd: - for service in d.getVar('SYSTEMD_SERVICE_%s' % pkg).split(): + for service in d.getVar('SYSTEMD_SERVICE:%s' % pkg).split(): fd.write("%s %s\n" % (action,service)) - d.appendVar("FILES_%s" % pkg, ' ' + oe.path.join(d.getVar("systemd_unitdir"), "system-preset/98-%s.preset" % pkg)) + d.appendVar("FILES:%s" % pkg, ' ' + oe.path.join(d.getVar("systemd_unitdir"), "system-preset/98-%s.preset" % pkg)) # Run all modifications once when creating package if os.path.exists(d.getVar("D")): for pkg in d.getVar('SYSTEMD_PACKAGES').split(): systemd_check_package(pkg) - if d.getVar('SYSTEMD_SERVICE_' + pkg): + if d.getVar('SYSTEMD_SERVICE:' + pkg): systemd_generate_package_scripts(pkg) action = get_package_var(d, 'SYSTEMD_AUTO_ENABLE', pkg) if action in ("enable", "disable"): systemd_create_presets(pkg, action) elif action not in ("mask", "preset"): - bb.fatal("SYSTEMD_AUTO_ENABLE_%s '%s' is not 'enable', 'disable', 'mask' or 'preset'" % (pkg, action)) + bb.fatal("SYSTEMD_AUTO_ENABLE:%s '%s' is not 'enable', 'disable', 'mask' or 'preset'" % (pkg, action)) systemd_check_services() } -PACKAGESPLITFUNCS_prepend = "systemd_populate_packages " +PACKAGESPLITFUNCS:prepend = "systemd_populate_packages " python rm_systemd_unitdir (){ import shutil @@ -227,7 +227,7 @@ python rm_sysvinit_initddir (){ } do_install[postfuncs] += "${RMINITDIR} " -RMINITDIR_class-target = " rm_sysvinit_initddir rm_systemd_unitdir " -RMINITDIR_class-nativesdk = " rm_sysvinit_initddir rm_systemd_unitdir " +RMINITDIR:class-target = " rm_sysvinit_initddir rm_systemd_unitdir " +RMINITDIR:class-nativesdk = " rm_sysvinit_initddir rm_systemd_unitdir " RMINITDIR = "" diff --git a/meta-webos-backports/meta-webos-backports-3.4/conf/image-uefi.conf b/meta-webos-backports/meta-webos-backports-3.4/conf/image-uefi.conf index 6ef011e23..04a151f3a 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/conf/image-uefi.conf +++ b/meta-webos-backports/meta-webos-backports-3.4/conf/image-uefi.conf @@ -10,12 +10,12 @@ EFI_FILES_PATH = "${EFI_PREFIX}${EFIDIR}" # The EFI name for the architecture EFI_ARCH ?= "INVALID" -EFI_ARCH_x86 = "ia32" -EFI_ARCH_x86-64 = "x64" -EFI_ARCH_aarch64 = "aa64" -EFI_ARCH_arm = "arm" -EFI_ARCH_riscv32 = "riscv32" -EFI_ARCH_riscv64 = "riscv64" +EFI_ARCH:x86 = "ia32" +EFI_ARCH:x86-64 = "x64" +EFI_ARCH:aarch64 = "aa64" +EFI_ARCH:arm = "arm" +EFI_ARCH:riscv32 = "riscv32" +EFI_ARCH:riscv64 = "riscv64" # Determine name of bootloader image EFI_BOOT_IMAGE ?= "boot${EFI_ARCH}.efi" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-boot_248.3.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-boot_249.3.bb similarity index 79% rename from meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-boot_248.3.bb rename to meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-boot_249.3.bb index 249e620f4..b3d4e31e0 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-boot_248.3.bb +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-boot_249.3.bb @@ -3,15 +3,15 @@ FILESEXTRAPATHS =. "${FILE_DIRNAME}/systemd:" require conf/image-uefi.conf -DEPENDS = "intltool-native libcap util-linux gnu-efi gperf-native" +DEPENDS = "intltool-native libcap util-linux gnu-efi gperf-native python3-jinja2-native" inherit meson pkgconfig gettext inherit deploy -LDFLAGS_prepend = "${@ " ".join(d.getVar('LD').split()[1:])} " +LDFLAGS:prepend = "${@ " ".join(d.getVar('LD').split()[1:])} " do_write_config[vardeps] += "CC OBJCOPY" -do_write_config_append() { +do_write_config:append() { cat >${WORKDIR}/meson-${PN}.cross <[^\.]*)\.", self.unit) @@ -227,7 +227,8 @@ class SystemdUnit(): try: for also in config.get('Install', 'Also'): try: - SystemdUnit(self.root, also).enable() + if caller_unit != also: + SystemdUnit(self.root, also).enable(unit) except SystemdUnitNotFoundError as e: sys.exit("Error: Systemctl also enable issue with %s (%s)" % (service, e.unit)) diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd.inc index 626dc3232..13b8b61af 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd.inc +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd.inc @@ -14,8 +14,8 @@ LICENSE = "GPLv2 & LGPLv2.1" LIC_FILES_CHKSUM = "file://LICENSE.GPL2;md5=751419260aa954499f7abaabaa882bbe \ file://LICENSE.LGPL2.1;md5=4fbd65380cdd255951079008b364516c" -SRCREV = "37c4cfde0ce613f0f00544d3f4e2e72bf93d9c76" -SRCBRANCH = "v248-stable" +SRCREV = "090378dcb1de5ca66900503210e85d63075fa70a" +SRCBRANCH = "v249-stable" SRC_URI = "git://github.com/systemd/systemd-stable.git;protocol=https;branch=${SRCBRANCH} \ " diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch index 8dd22eeb7..d3af734e0 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch @@ -1,4 +1,4 @@ -From 564830719be2017c4953589d50f21a9e856a4ecc Mon Sep 17 00:00:00 2001 +From 08cd165f5db0e68a499b80c4b1744a4206948259 Mon Sep 17 00:00:00 2001 From: Chen Qi Date: Thu, 21 Feb 2019 16:23:24 +0800 Subject: [PATCH] binfmt: Don't install dependency links at install time for @@ -25,11 +25,11 @@ Signed-off-by: Scott Murray units/systemd-binfmt.service.in | 4 ++++ 3 files changed, 9 insertions(+), 4 deletions(-) -Index: systemd-stable/units/meson.build -=================================================================== ---- systemd-stable.orig/units/meson.build -+++ systemd-stable/units/meson.build -@@ -55,8 +55,7 @@ units = [ +diff --git a/units/meson.build b/units/meson.build +index 17e9ead9c1..e5502be620 100644 +--- a/units/meson.build ++++ b/units/meson.build +@@ -59,8 +59,7 @@ units = [ ['poweroff.target', '', (with_runlevels ? 'runlevel0.target' : '')], ['printer.target', ''], @@ -39,9 +39,9 @@ Index: systemd-stable/units/meson.build ['proc-sys-fs-binfmt_misc.mount', 'ENABLE_BINFMT'], ['reboot.target', '', 'ctrl-alt-del.target' + (with_runlevels ? ' runlevel6.target' : '')], -@@ -166,8 +165,7 @@ in_units = [ - ['rc-local.service', 'HAVE_SYSV_COMPAT'], +@@ -178,8 +177,7 @@ in_units = [ ['rescue.service', ''], + ['serial-getty@.service', ''], ['systemd-backlight@.service', 'ENABLE_BACKLIGHT'], - ['systemd-binfmt.service', 'ENABLE_BINFMT', - 'sysinit.target.wants/'], @@ -49,21 +49,21 @@ Index: systemd-stable/units/meson.build ['systemd-bless-boot.service', 'ENABLE_EFI HAVE_BLKID'], ['systemd-boot-check-no-failures.service', ''], ['systemd-coredump@.service', 'ENABLE_COREDUMP'], -Index: systemd-stable/units/proc-sys-fs-binfmt_misc.automount -=================================================================== ---- systemd-stable.orig/units/proc-sys-fs-binfmt_misc.automount -+++ systemd-stable/units/proc-sys-fs-binfmt_misc.automount -@@ -18,3 +18,6 @@ ConditionPathIsReadWrite=/proc/sys/ +diff --git a/units/proc-sys-fs-binfmt_misc.automount b/units/proc-sys-fs-binfmt_misc.automount +index 172c8757ab..f65d8930c6 100644 +--- a/units/proc-sys-fs-binfmt_misc.automount ++++ b/units/proc-sys-fs-binfmt_misc.automount +@@ -19,3 +19,6 @@ ConditionPathIsReadWrite=/proc/sys/ [Automount] Where=/proc/sys/fs/binfmt_misc + +[Install] +WantedBy=sysinit.target -Index: systemd-stable/units/systemd-binfmt.service.in -=================================================================== ---- systemd-stable.orig/units/systemd-binfmt.service.in -+++ systemd-stable/units/systemd-binfmt.service.in +diff --git a/units/systemd-binfmt.service.in b/units/systemd-binfmt.service.in +index fdafce7ff7..4efc05e495 100644 +--- a/units/systemd-binfmt.service.in ++++ b/units/systemd-binfmt.service.in @@ -14,6 +14,7 @@ Documentation=https://www.kernel.org/doc/html/latest/admin-guide/binfmt-misc.htm Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems DefaultDependencies=no @@ -73,8 +73,8 @@ Index: systemd-stable/units/systemd-binfmt.service.in After=proc-sys-fs-binfmt_misc.mount Before=sysinit.target shutdown.target @@ -30,3 +31,6 @@ RemainAfterExit=yes - ExecStart=@rootlibexecdir@/systemd-binfmt - ExecStop=@rootlibexecdir@/systemd-binfmt --unregister + ExecStart={{ROOTLIBEXECDIR}}/systemd-binfmt + ExecStop={{ROOTLIBEXECDIR}}/systemd-binfmt --unregister TimeoutSec=90s + +[Install] diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch index 4cdf66e76..15fa0c454 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch @@ -1,4 +1,4 @@ -From 159c53612444ec1df492bae528a5a88a275b93bf Mon Sep 17 00:00:00 2001 +From 40acdb90031cfeb7140cee5205bce24f8c91d857 Mon Sep 17 00:00:00 2001 From: Chen Qi Date: Mon, 25 Feb 2019 13:41:41 +0800 Subject: [PATCH] don't use glibc-specific qsort_r @@ -14,9 +14,9 @@ Signed-off-by: Andrej Valek Signed-off-by: Luca Boccassi --- - src/basic/sort-util.h | 14 ------------ - src/libsystemd/sd-hwdb/hwdb-util.c | 19 +++++++++++----- - src/shared/format-table.c | 36 ++++++++++++++++++++---------- + src/basic/sort-util.h | 14 -------------- + src/shared/format-table.c | 36 ++++++++++++++++++++++++------------ + src/shared/hwdb-util.c | 19 ++++++++++++++----- 3 files changed, 38 insertions(+), 31 deletions(-) diff --git a/src/basic/sort-util.h b/src/basic/sort-util.h @@ -42,55 +42,11 @@ index 49586a4a24..d92a5ab0ed 100644 - }) - int cmp_int(const int *a, const int *b); -diff --git a/src/libsystemd/sd-hwdb/hwdb-util.c b/src/libsystemd/sd-hwdb/hwdb-util.c -index fd45ff0f54..ac4b63c49b 100644 ---- a/src/libsystemd/sd-hwdb/hwdb-util.c -+++ b/src/libsystemd/sd-hwdb/hwdb-util.c -@@ -126,9 +126,13 @@ static struct trie* trie_free(struct trie *trie) { - - DEFINE_TRIVIAL_CLEANUP_FUNC(struct trie*, trie_free); - --static int trie_values_cmp(const struct trie_value_entry *a, const struct trie_value_entry *b, struct trie *trie) { -- return strcmp(trie->strings->buf + a->key_off, -- trie->strings->buf + b->key_off); -+static struct trie *trie_node_add_value_trie; -+static int trie_values_cmp(const void *v1, const void *v2) { -+ const struct trie_value_entry *a = v1; -+ const struct trie_value_entry *b = v2; -+ -+ return strcmp(trie_node_add_value_trie->strings->buf + a->key_off, -+ trie_node_add_value_trie->strings->buf + b->key_off); - } - - static int trie_node_add_value(struct trie *trie, struct trie_node *node, -@@ -156,7 +160,10 @@ static int trie_node_add_value(struct trie *trie, struct trie_node *node, - .value_off = v, - }; - -- val = typesafe_bsearch_r(&search, node->values, node->values_count, trie_values_cmp, trie); -+ trie_node_add_value_trie = trie; -+ val = bsearch(&search, node->values, node->values_count, sizeof(struct trie_value_entry), trie_values_cmp); -+ trie_node_add_value_trie = NULL; -+ - if (val) { - /* At this point we have 2 identical properties on the same match-string. - * Since we process files in order, we just replace the previous value. */ -@@ -182,7 +189,9 @@ static int trie_node_add_value(struct trie *trie, struct trie_node *node, - .line_number = line_number, - }; - node->values_count++; -- typesafe_qsort_r(node->values, node->values_count, trie_values_cmp, trie); -+ trie_node_add_value_trie = trie; -+ qsort(node->values, node->values_count, sizeof(struct trie_value_entry), trie_values_cmp); -+ trie_node_add_value_trie = NULL; - return 0; - } - diff --git a/src/shared/format-table.c b/src/shared/format-table.c -index dccb796b26..c3ab8ac296 100644 +index 4c4e4593d8..17b329f315 100644 --- a/src/shared/format-table.c +++ b/src/shared/format-table.c -@@ -1290,30 +1290,32 @@ static int cell_data_compare(TableData *a, size_t index_a, TableData *b, size_t +@@ -1282,30 +1282,32 @@ static int cell_data_compare(TableData *a, size_t index_a, TableData *b, size_t return CMP(index_a, index_b); } @@ -133,7 +89,7 @@ index dccb796b26..c3ab8ac296 100644 } /* Order identical lines by the order there were originally added in */ -@@ -1952,7 +1954,12 @@ int table_print(Table *t, FILE *f) { +@@ -1944,7 +1946,12 @@ int table_print(Table *t, FILE *f) { for (size_t i = 0; i < n_rows; i++) sorted[i] = i * t->n_columns; @@ -147,7 +103,7 @@ index dccb796b26..c3ab8ac296 100644 } if (t->display_map) -@@ -2580,7 +2587,12 @@ int table_to_json(Table *t, JsonVariant **ret) { +@@ -2572,7 +2579,12 @@ int table_to_json(Table *t, JsonVariant **ret) { for (size_t i = 0; i < n_rows; i++) sorted[i] = i * t->n_columns; @@ -161,3 +117,47 @@ index dccb796b26..c3ab8ac296 100644 } if (t->display_map) +diff --git a/src/shared/hwdb-util.c b/src/shared/hwdb-util.c +index d7626aed95..2003fac7c3 100644 +--- a/src/shared/hwdb-util.c ++++ b/src/shared/hwdb-util.c +@@ -127,9 +127,13 @@ static struct trie* trie_free(struct trie *trie) { + + DEFINE_TRIVIAL_CLEANUP_FUNC(struct trie*, trie_free); + +-static int trie_values_cmp(const struct trie_value_entry *a, const struct trie_value_entry *b, struct trie *trie) { +- return strcmp(trie->strings->buf + a->key_off, +- trie->strings->buf + b->key_off); ++static struct trie *trie_node_add_value_trie; ++static int trie_values_cmp(const void *v1, const void *v2) { ++ const struct trie_value_entry *a = v1; ++ const struct trie_value_entry *b = v2; ++ ++ return strcmp(trie_node_add_value_trie->strings->buf + a->key_off, ++ trie_node_add_value_trie->strings->buf + b->key_off); + } + + static int trie_node_add_value(struct trie *trie, struct trie_node *node, +@@ -157,7 +161,10 @@ static int trie_node_add_value(struct trie *trie, struct trie_node *node, + .value_off = v, + }; + +- val = typesafe_bsearch_r(&search, node->values, node->values_count, trie_values_cmp, trie); ++ trie_node_add_value_trie = trie; ++ val = bsearch(&search, node->values, node->values_count, sizeof(struct trie_value_entry), trie_values_cmp); ++ trie_node_add_value_trie = NULL; ++ + if (val) { + /* At this point we have 2 identical properties on the same match-string. + * Since we process files in order, we just replace the previous value. */ +@@ -183,7 +190,9 @@ static int trie_node_add_value(struct trie *trie, struct trie_node *node, + .line_number = line_number, + }; + node->values_count++; +- typesafe_qsort_r(node->values, node->values_count, trie_values_cmp, trie); ++ trie_node_add_value_trie = trie; ++ qsort(node->values, node->values_count, sizeof(struct trie_value_entry), trie_values_cmp); ++ trie_node_add_value_trie = NULL; + return 0; + } + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0003-missing_type.h-add-__compare_fn_t-and-comparison_fn_.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0003-missing_type.h-add-__compare_fn_t-and-comparison_fn_.patch index 9b1768d9c..d0110a238 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0003-missing_type.h-add-__compare_fn_t-and-comparison_fn_.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0003-missing_type.h-add-__compare_fn_t-and-comparison_fn_.patch @@ -1,4 +1,4 @@ -From 4afb8adc83348bf75964fc10af7902e04dd62637 Mon Sep 17 00:00:00 2001 +From 2a2f95b6dc16d2ea7a8e9349c6b19cc50c34777b Mon Sep 17 00:00:00 2001 From: Chen Qi Date: Mon, 25 Feb 2019 13:55:12 +0800 Subject: [PATCH] missing_type.h: add __compare_fn_t and comparison_fn_t @@ -63,7 +63,7 @@ index 8a7f82812a..a56f12f47f 100644 #if HAVE_KMOD #include "module-util.h" diff --git a/src/libsystemd/sd-journal/catalog.c b/src/libsystemd/sd-journal/catalog.c -index aea3241d18..75e6c56a28 100644 +index ce8d47ccc3..00845f9776 100644 --- a/src/libsystemd/sd-journal/catalog.c +++ b/src/libsystemd/sd-journal/catalog.c @@ -28,6 +28,7 @@ diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch index dc40a2fe8..1d61367da 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch @@ -1,7 +1,7 @@ -From 6c18e5f9373da3e3b38f2c5727e2aefe07fcbbd9 Mon Sep 17 00:00:00 2001 +From b19f800e178516d4f4d344457647e4a018bd6855 Mon Sep 17 00:00:00 2001 From: Alexander Kanavin Date: Sat, 22 May 2021 20:26:24 +0200 -Subject: [PATCH] [PATCH] add fallback parse_printf_format implementation +Subject: [PATCH] add fallback parse_printf_format implementation Upstream-Status: Inappropriate [musl specific] @@ -10,6 +10,7 @@ Signed-off-by: Khem Raj Signed-off-by: Chen Qi [rebased for systemd 243] Signed-off-by: Scott Murray + --- meson.build | 1 + src/basic/meson.build | 5 + @@ -22,10 +23,10 @@ Signed-off-by: Scott Murray create mode 100644 src/basic/parse-printf-format.h diff --git a/meson.build b/meson.build -index 27186d63a3..2abb7b3188 100644 +index 738879eb21..1aa20b8246 100644 --- a/meson.build +++ b/meson.build -@@ -675,6 +675,7 @@ endif +@@ -656,6 +656,7 @@ endif foreach header : ['crypt.h', 'linux/memfd.h', 'linux/vm_sockets.h', @@ -34,10 +35,10 @@ index 27186d63a3..2abb7b3188 100644 'valgrind/memcheck.h', 'valgrind/valgrind.h', diff --git a/src/basic/meson.build b/src/basic/meson.build -index 60ef801a25..aba2172edd 100644 +index 9b016ce5e8..a9ce21b02e 100644 --- a/src/basic/meson.build +++ b/src/basic/meson.build -@@ -341,6 +341,11 @@ endforeach +@@ -322,6 +322,11 @@ endforeach basic_sources += generated_gperf_headers @@ -430,6 +431,3 @@ index fd3fd7ef9c..e8e6ad555b 100644 #define SNDBUF_SIZE (8*1024*1024) --- -2.24.0 - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch index 814c28f5b..0462d52d5 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch @@ -1,4 +1,4 @@ -From 6b0732ac7164914ce16e231e35980b849bdfc4c8 Mon Sep 17 00:00:00 2001 +From db6551741a3654d8e75aff93ea00fbff579f7b02 Mon Sep 17 00:00:00 2001 From: Chen Qi Date: Mon, 25 Feb 2019 14:18:21 +0800 Subject: [PATCH] src/basic/missing.h: check for missing strndupa @@ -29,9 +29,9 @@ Signed-off-by: Luca Boccassi src/basic/mountpoint-util.c | 1 + src/basic/parse-util.c | 1 + src/basic/path-lookup.c | 1 + + src/basic/percent-util.c | 1 + src/basic/proc-cmdline.c | 1 + src/basic/procfs-util.c | 1 + - src/basic/selinux-util.c | 1 + src/basic/time-util.c | 1 + src/boot/bless-boot.c | 1 + src/core/dbus-cgroup.c | 1 + @@ -72,16 +72,20 @@ Signed-off-by: Luca Boccassi src/udev/udev-rules.c | 1 + 51 files changed, 62 insertions(+) +diff --git a/meson.build b/meson.build +index 1aa20b8246..aafee71eb4 100644 --- a/meson.build +++ b/meson.build -@@ -550,6 +550,7 @@ foreach ident : [ - ['execveat', '''#include '''], - ['close_range', '''#include '''], - ['epoll_pwait2', '''#include '''], -+ ['strndupa' , '''#include '''], - ] +@@ -480,6 +480,7 @@ foreach ident : ['secure_getenv', '__secure_getenv'] + endforeach - have = cc.has_function(ident[0], prefix : ident[1], args : '-D_GNU_SOURCE') + foreach ident : [ ++ ['strndupa' , '''#include '''], + ['memfd_create', '''#include '''], + ['gettid', '''#include + #include '''], +diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c +index 7c0970a60c..c129ff0f4f 100644 --- a/src/backlight/backlight.c +++ b/src/backlight/backlight.c @@ -19,6 +19,7 @@ @@ -92,6 +96,8 @@ Signed-off-by: Luca Boccassi static int help(void) { _cleanup_free_ char *link = NULL; +diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c +index 1ff6160dc8..c9efd862a2 100644 --- a/src/basic/cgroup-util.c +++ b/src/basic/cgroup-util.c @@ -38,6 +38,7 @@ @@ -102,6 +108,8 @@ Signed-off-by: Luca Boccassi static int cg_enumerate_items(const char *controller, const char *path, FILE **_f, const char *item) { _cleanup_free_ char *fs = NULL; +diff --git a/src/basic/env-util.c b/src/basic/env-util.c +index 81b1e3f10e..8fedcfd1cd 100644 --- a/src/basic/env-util.c +++ b/src/basic/env-util.c @@ -18,6 +18,7 @@ @@ -112,6 +120,8 @@ Signed-off-by: Luca Boccassi /* We follow bash for the character set. Different shells have different rules. */ #define VALID_BASH_ENV_NAME_CHARS \ +diff --git a/src/basic/log.c b/src/basic/log.c +index fb183ea9e7..82e7bdff60 100644 --- a/src/basic/log.c +++ b/src/basic/log.c @@ -36,6 +36,7 @@ @@ -122,6 +132,8 @@ Signed-off-by: Luca Boccassi #define SNDBUF_SIZE (8*1024*1024) +diff --git a/src/basic/missing_stdlib.h b/src/basic/missing_stdlib.h +index 8c76f93eb2..9068bfb4f0 100644 --- a/src/basic/missing_stdlib.h +++ b/src/basic/missing_stdlib.h @@ -11,3 +11,15 @@ @@ -140,6 +152,8 @@ Signed-off-by: Luca Boccassi + (char *)memcpy(__new, __old, __len); \ + }) +#endif +diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c +index f91f8f7a08..fb31596216 100644 --- a/src/basic/mkdir.c +++ b/src/basic/mkdir.c @@ -14,6 +14,7 @@ @@ -150,9 +164,11 @@ Signed-off-by: Luca Boccassi int mkdir_safe_internal( const char *path, +diff --git a/src/basic/mountpoint-util.c b/src/basic/mountpoint-util.c +index 8c836a1b74..2eb7e5a634 100644 --- a/src/basic/mountpoint-util.c +++ b/src/basic/mountpoint-util.c -@@ -12,6 +12,7 @@ +@@ -11,6 +11,7 @@ #include "missing_stat.h" #include "missing_syscall.h" #include "mkdir.h" @@ -160,6 +176,8 @@ Signed-off-by: Luca Boccassi #include "mountpoint-util.h" #include "parse-util.h" #include "path-util.h" +diff --git a/src/basic/parse-util.c b/src/basic/parse-util.c +index b79c885dfd..6dabda5691 100644 --- a/src/basic/parse-util.c +++ b/src/basic/parse-util.c @@ -19,6 +19,7 @@ @@ -170,6 +188,8 @@ Signed-off-by: Luca Boccassi int parse_boolean(const char *v) { if (!v) +diff --git a/src/basic/path-lookup.c b/src/basic/path-lookup.c +index 05eb17d66c..b6026aab28 100644 --- a/src/basic/path-lookup.c +++ b/src/basic/path-lookup.c @@ -15,6 +15,7 @@ @@ -180,6 +200,20 @@ Signed-off-by: Luca Boccassi int xdg_user_runtime_dir(char **ret, const char *suffix) { const char *e; +diff --git a/src/basic/percent-util.c b/src/basic/percent-util.c +index 06f20fd61e..8159d721bb 100644 +--- a/src/basic/percent-util.c ++++ b/src/basic/percent-util.c +@@ -3,6 +3,7 @@ + #include "percent-util.h" + #include "string-util.h" + #include "parse-util.h" ++#include "missing_stdlib.h" + + static int parse_parts_value_whole(const char *p, const char *symbol) { + const char *pc, *n; +diff --git a/src/basic/proc-cmdline.c b/src/basic/proc-cmdline.c +index 410b8a3eb5..f2c4355609 100644 --- a/src/basic/proc-cmdline.c +++ b/src/basic/proc-cmdline.c @@ -15,6 +15,7 @@ @@ -190,6 +224,8 @@ Signed-off-by: Luca Boccassi int proc_cmdline(char **ret) { const char *e; +diff --git a/src/basic/procfs-util.c b/src/basic/procfs-util.c +index 9234ccaf85..8c57094225 100644 --- a/src/basic/procfs-util.c +++ b/src/basic/procfs-util.c @@ -11,6 +11,7 @@ @@ -200,19 +236,11 @@ Signed-off-by: Luca Boccassi int procfs_tasks_get_limit(uint64_t *ret) { _cleanup_free_ char *value = NULL; ---- a/src/basic/selinux-util.c -+++ b/src/basic/selinux-util.c -@@ -27,6 +27,7 @@ - #include "selinux-util.h" - #include "stdio-util.h" - #include "time-util.h" -+#include "missing_stdlib.h" - - #if HAVE_SELINUX - DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(context_t, context_free, NULL); +diff --git a/src/basic/time-util.c b/src/basic/time-util.c +index 5d162e8ffe..1cde8e4262 100644 --- a/src/basic/time-util.c +++ b/src/basic/time-util.c -@@ -27,6 +27,7 @@ +@@ -26,6 +26,7 @@ #include "string-util.h" #include "strv.h" #include "time-util.h" @@ -220,6 +248,8 @@ Signed-off-by: Luca Boccassi static clockid_t map_clock_id(clockid_t c) { +diff --git a/src/boot/bless-boot.c b/src/boot/bless-boot.c +index 3fc319ca27..90064c90f3 100644 --- a/src/boot/bless-boot.c +++ b/src/boot/bless-boot.c @@ -18,6 +18,7 @@ @@ -230,19 +260,23 @@ Signed-off-by: Luca Boccassi static char **arg_path = NULL; +diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c +index 84c3caf3a5..0fa84eaa38 100644 --- a/src/core/dbus-cgroup.c +++ b/src/core/dbus-cgroup.c -@@ -17,6 +17,7 @@ - #include "limits-util.h" +@@ -20,6 +20,7 @@ + #include "parse-util.h" #include "path-util.h" #include "percent-util.h" +#include "missing_stdlib.h" BUS_DEFINE_PROPERTY_GET(bus_property_get_tasks_max, "t", TasksMax, tasks_max_resolve); +diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c +index 50daef6702..1cc6d91e64 100644 --- a/src/core/dbus-execute.c +++ b/src/core/dbus-execute.c -@@ -41,6 +41,7 @@ +@@ -42,6 +42,7 @@ #include "unit-printf.h" #include "user-util.h" #include "utf8.h" @@ -250,6 +284,8 @@ Signed-off-by: Luca Boccassi BUS_DEFINE_PROPERTY_GET_ENUM(bus_property_get_exec_output, exec_output, ExecOutput); static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_exec_input, exec_input, ExecInput); +diff --git a/src/core/dbus-util.c b/src/core/dbus-util.c +index ca9b399d8c..b864480a8c 100644 --- a/src/core/dbus-util.c +++ b/src/core/dbus-util.c @@ -9,6 +9,7 @@ @@ -260,9 +296,11 @@ Signed-off-by: Luca Boccassi int bus_property_get_triggered_unit( sd_bus *bus, +diff --git a/src/core/execute.c b/src/core/execute.c +index 2a337b55a2..2a64675c5f 100644 --- a/src/core/execute.c +++ b/src/core/execute.c -@@ -96,6 +96,7 @@ +@@ -98,6 +98,7 @@ #include "unit-serialize.h" #include "user-util.h" #include "utmp-wtmp.h" @@ -270,6 +308,8 @@ Signed-off-by: Luca Boccassi #define IDLE_TIMEOUT_USEC (5*USEC_PER_SEC) #define IDLE_TIMEOUT2_USEC (1*USEC_PER_SEC) +diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c +index a56f12f47f..6b8729ef67 100644 --- a/src/core/kmod-setup.c +++ b/src/core/kmod-setup.c @@ -11,6 +11,7 @@ @@ -280,6 +320,8 @@ Signed-off-by: Luca Boccassi #if HAVE_KMOD #include "module-util.h" +diff --git a/src/core/service.c b/src/core/service.c +index cb0a528f0d..740d305710 100644 --- a/src/core/service.c +++ b/src/core/service.c @@ -41,6 +41,7 @@ @@ -290,6 +332,8 @@ Signed-off-by: Luca Boccassi static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = { [SERVICE_DEAD] = UNIT_INACTIVE, +diff --git a/src/coredump/coredump-vacuum.c b/src/coredump/coredump-vacuum.c +index 95c3fca661..d4a9f27b08 100644 --- a/src/coredump/coredump-vacuum.c +++ b/src/coredump/coredump-vacuum.c @@ -16,6 +16,7 @@ @@ -300,6 +344,8 @@ Signed-off-by: Luca Boccassi #define DEFAULT_MAX_USE_LOWER (uint64_t) (1ULL*1024ULL*1024ULL) /* 1 MiB */ #define DEFAULT_MAX_USE_UPPER (uint64_t) (4ULL*1024ULL*1024ULL*1024ULL) /* 4 GiB */ +diff --git a/src/journal-remote/journal-remote-main.c b/src/journal-remote/journal-remote-main.c +index ae1d43756a..24de98c9f3 100644 --- a/src/journal-remote/journal-remote-main.c +++ b/src/journal-remote/journal-remote-main.c @@ -24,6 +24,7 @@ @@ -310,6 +356,8 @@ Signed-off-by: Luca Boccassi #define PRIV_KEY_FILE CERTIFICATE_ROOT "/private/journal-remote.pem" #define CERT_FILE CERTIFICATE_ROOT "/certs/journal-remote.pem" +diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c +index c8fb726d42..858a425d12 100644 --- a/src/journal/journalctl.c +++ b/src/journal/journalctl.c @@ -72,6 +72,7 @@ @@ -320,6 +368,8 @@ Signed-off-by: Luca Boccassi #define DEFAULT_FSS_INTERVAL_USEC (15*USEC_PER_MINUTE) #define PROCESS_INOTIFY_INTERVAL 1024 /* Every 1,024 messages processed */ +diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c +index 20f7396c74..3471311ef5 100644 --- a/src/libsystemd/sd-bus/bus-message.c +++ b/src/libsystemd/sd-bus/bus-message.c @@ -20,6 +20,7 @@ @@ -330,6 +380,8 @@ Signed-off-by: Luca Boccassi static int message_append_basic(sd_bus_message *m, char type, const void *p, const void **stored); +diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c +index bfd42aea7d..daefc56e3e 100644 --- a/src/libsystemd/sd-bus/bus-objects.c +++ b/src/libsystemd/sd-bus/bus-objects.c @@ -12,6 +12,7 @@ @@ -340,9 +392,11 @@ Signed-off-by: Luca Boccassi static int node_vtable_get_userdata( sd_bus *bus, +diff --git a/src/libsystemd/sd-bus/bus-socket.c b/src/libsystemd/sd-bus/bus-socket.c +index 378774fe8b..2694c177d5 100644 --- a/src/libsystemd/sd-bus/bus-socket.c +++ b/src/libsystemd/sd-bus/bus-socket.c -@@ -28,6 +28,7 @@ +@@ -27,6 +27,7 @@ #include "string-util.h" #include "user-util.h" #include "utf8.h" @@ -350,9 +404,11 @@ Signed-off-by: Luca Boccassi #define SNDBUF_SIZE (8*1024*1024) +diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c +index a32e2f5e20..97fd3aec82 100644 --- a/src/libsystemd/sd-bus/sd-bus.c +++ b/src/libsystemd/sd-bus/sd-bus.c -@@ -41,6 +41,7 @@ +@@ -42,6 +42,7 @@ #include "string-util.h" #include "strv.h" #include "user-util.h" @@ -360,6 +416,8 @@ Signed-off-by: Luca Boccassi #define log_debug_bus_message(m) \ do { \ +diff --git a/src/libsystemd/sd-bus/test-bus-benchmark.c b/src/libsystemd/sd-bus/test-bus-benchmark.c +index 13c08fe295..9aae83486e 100644 --- a/src/libsystemd/sd-bus/test-bus-benchmark.c +++ b/src/libsystemd/sd-bus/test-bus-benchmark.c @@ -14,6 +14,7 @@ @@ -370,6 +428,8 @@ Signed-off-by: Luca Boccassi #define MAX_SIZE (2*1024*1024) +diff --git a/src/libsystemd/sd-journal/sd-journal.c b/src/libsystemd/sd-journal/sd-journal.c +index 5728c537bc..94885b0bf6 100644 --- a/src/libsystemd/sd-journal/sd-journal.c +++ b/src/libsystemd/sd-journal/sd-journal.c @@ -40,6 +40,7 @@ @@ -380,6 +440,8 @@ Signed-off-by: Luca Boccassi #define JOURNAL_FILES_MAX 7168 +diff --git a/src/locale/keymap-util.c b/src/locale/keymap-util.c +index d2f0566dbc..3b7746557e 100644 --- a/src/locale/keymap-util.c +++ b/src/locale/keymap-util.c @@ -24,6 +24,7 @@ @@ -390,6 +452,8 @@ Signed-off-by: Luca Boccassi static bool startswith_comma(const char *s, const char *prefix) { s = startswith(s, prefix); +diff --git a/src/login/pam_systemd.c b/src/login/pam_systemd.c +index f8bd17eefe..9633fbc152 100644 --- a/src/login/pam_systemd.c +++ b/src/login/pam_systemd.c @@ -31,6 +31,7 @@ @@ -400,6 +464,8 @@ Signed-off-by: Luca Boccassi #include "pam-util.h" #include "parse-util.h" #include "path-util.h" +diff --git a/src/network/generator/network-generator.c b/src/network/generator/network-generator.c +index 60e074e99b..a728e3b7a1 100644 --- a/src/network/generator/network-generator.c +++ b/src/network/generator/network-generator.c @@ -13,6 +13,7 @@ @@ -410,9 +476,11 @@ Signed-off-by: Luca Boccassi /* # .network +diff --git a/src/nspawn/nspawn-settings.c b/src/nspawn/nspawn-settings.c +index 3847fe4ec4..3696b57baa 100644 --- a/src/nspawn/nspawn-settings.c +++ b/src/nspawn/nspawn-settings.c -@@ -16,6 +16,7 @@ +@@ -17,6 +17,7 @@ #include "strv.h" #include "user-util.h" #include "util.h" @@ -420,6 +488,8 @@ Signed-off-by: Luca Boccassi Settings *settings_new(void) { Settings *s; +diff --git a/src/nss-mymachines/nss-mymachines.c b/src/nss-mymachines/nss-mymachines.c +index 44715bb3e5..bc1e688b5e 100644 --- a/src/nss-mymachines/nss-mymachines.c +++ b/src/nss-mymachines/nss-mymachines.c @@ -21,6 +21,7 @@ @@ -430,9 +500,11 @@ Signed-off-by: Luca Boccassi static void setup_logging(void) { /* We need a dummy function because log_parse_environment is a macro. */ +diff --git a/src/portable/portable.c b/src/portable/portable.c +index 4cf5fb4f0a..577dc5c8d7 100644 --- a/src/portable/portable.c +++ b/src/portable/portable.c -@@ -32,6 +32,7 @@ +@@ -34,6 +34,7 @@ #include "strv.h" #include "tmpfile-util.h" #include "user-util.h" @@ -440,6 +512,8 @@ Signed-off-by: Luca Boccassi static const char profile_dirs[] = CONF_PATHS_NULSTR("systemd/portable/profile"); +diff --git a/src/resolve/resolvectl.c b/src/resolve/resolvectl.c +index 7d13ed3905..ddc37115b8 100644 --- a/src/resolve/resolvectl.c +++ b/src/resolve/resolvectl.c @@ -41,6 +41,7 @@ @@ -450,6 +524,8 @@ Signed-off-by: Luca Boccassi static int arg_family = AF_UNSPEC; static int arg_ifindex = 0; +diff --git a/src/shared/bus-get-properties.c b/src/shared/bus-get-properties.c +index feb6d3807f..eb11d29e50 100644 --- a/src/shared/bus-get-properties.c +++ b/src/shared/bus-get-properties.c @@ -4,6 +4,7 @@ @@ -460,6 +536,8 @@ Signed-off-by: Luca Boccassi int bus_property_get_bool( sd_bus *bus, +diff --git a/src/shared/bus-unit-procs.c b/src/shared/bus-unit-procs.c +index 6f4a71138c..4a46de2c1b 100644 --- a/src/shared/bus-unit-procs.c +++ b/src/shared/bus-unit-procs.c @@ -10,6 +10,7 @@ @@ -470,9 +548,11 @@ Signed-off-by: Luca Boccassi struct CGroupInfo { char *cgroup_path; +diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c +index d3a5b25d18..003594e2d7 100644 --- a/src/shared/bus-unit-util.c +++ b/src/shared/bus-unit-util.c -@@ -45,6 +45,7 @@ +@@ -47,6 +47,7 @@ #include "unit-def.h" #include "user-util.h" #include "utf8.h" @@ -480,6 +560,8 @@ Signed-off-by: Luca Boccassi int bus_parse_unit_info(sd_bus_message *message, UnitInfo *u) { assert(message); +diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c +index 64ca67993c..31e3d148ea 100644 --- a/src/shared/bus-util.c +++ b/src/shared/bus-util.c @@ -21,6 +21,7 @@ @@ -490,6 +572,8 @@ Signed-off-by: Luca Boccassi static int name_owner_change_callback(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) { sd_event *e = userdata; +diff --git a/src/shared/dns-domain.c b/src/shared/dns-domain.c +index 787bb8fec9..009589a16f 100644 --- a/src/shared/dns-domain.c +++ b/src/shared/dns-domain.c @@ -17,6 +17,7 @@ @@ -500,9 +584,11 @@ Signed-off-by: Luca Boccassi int dns_label_unescape(const char **name, char *dest, size_t sz, DNSLabelFlags flags) { const char *n; +diff --git a/src/shared/journal-importer.c b/src/shared/journal-importer.c +index 9e11dc09c1..f9954c1520 100644 --- a/src/shared/journal-importer.c +++ b/src/shared/journal-importer.c -@@ -14,6 +14,7 @@ +@@ -15,6 +15,7 @@ #include "parse-util.h" #include "string-util.h" #include "unaligned.h" @@ -510,6 +596,8 @@ Signed-off-by: Luca Boccassi enum { IMPORTER_STATE_LINE = 0, /* waiting to read, or reading line */ +diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c +index e63c59bd94..dd9773c009 100644 --- a/src/shared/logs-show.c +++ b/src/shared/logs-show.c @@ -41,6 +41,7 @@ @@ -520,6 +608,8 @@ Signed-off-by: Luca Boccassi /* up to three lines (each up to 100 characters) or 300 characters, whichever is less */ #define PRINT_LINE_THRESHOLD 3 +diff --git a/src/shared/pager.c b/src/shared/pager.c +index 4bbad7e37b..eefcdd068c 100644 --- a/src/shared/pager.c +++ b/src/shared/pager.c @@ -26,6 +26,7 @@ @@ -530,6 +620,8 @@ Signed-off-by: Luca Boccassi static pid_t pager_pid = 0; +diff --git a/src/shared/uid-range.c b/src/shared/uid-range.c +index 5d5bf7f21d..f1002ffa6c 100644 --- a/src/shared/uid-range.c +++ b/src/shared/uid-range.c @@ -9,6 +9,7 @@ @@ -540,6 +632,8 @@ Signed-off-by: Luca Boccassi static bool uid_range_intersect(UidRange *range, uid_t start, uid_t nr) { assert(range); +diff --git a/src/socket-proxy/socket-proxyd.c b/src/socket-proxy/socket-proxyd.c +index 6e3ee0d76b..7727e33d95 100644 --- a/src/socket-proxy/socket-proxyd.c +++ b/src/socket-proxy/socket-proxyd.c @@ -26,6 +26,7 @@ @@ -550,6 +644,8 @@ Signed-off-by: Luca Boccassi #define BUFFER_SIZE (256 * 1024) +diff --git a/src/test/test-hexdecoct.c b/src/test/test-hexdecoct.c +index c9d318b8d1..fcb8d40805 100644 --- a/src/test/test-hexdecoct.c +++ b/src/test/test-hexdecoct.c @@ -6,6 +6,7 @@ @@ -560,6 +656,8 @@ Signed-off-by: Luca Boccassi static void test_hexchar(void) { assert_se(hexchar(0xa) == 'a'); +diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c +index 65c40de4c8..4ef9a0c6c8 100644 --- a/src/udev/udev-builtin-path_id.c +++ b/src/udev/udev-builtin-path_id.c @@ -22,6 +22,7 @@ @@ -570,9 +668,11 @@ Signed-off-by: Luca Boccassi _printf_(2,3) static void path_prepend(char **path, const char *fmt, ...) { +diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c +index b28089be71..a7e2232299 100644 --- a/src/udev/udev-event.c +++ b/src/udev/udev-event.c -@@ -33,6 +33,7 @@ +@@ -34,6 +34,7 @@ #include "udev-util.h" #include "udev-watch.h" #include "user-util.h" @@ -580,23 +680,15 @@ Signed-off-by: Luca Boccassi typedef struct Spawn { sd_device *device; +diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c +index bf997fc0ed..e3f5f1f2e2 100644 --- a/src/udev/udev-rules.c +++ b/src/udev/udev-rules.c -@@ -31,6 +31,7 @@ - #include "udev-rules.h" +@@ -33,6 +33,7 @@ + #include "udev-util.h" #include "user-util.h" #include "virt.h" +#include "missing_stdlib.h" #define RULES_DIRS (const char* const*) CONF_PATHS_STRV("udev/rules.d") ---- a/src/basic/percent-util.c -+++ b/src/basic/percent-util.c -@@ -3,6 +3,7 @@ - #include "percent-util.h" - #include "string-util.h" - #include "parse-util.h" -+#include "missing_stdlib.h" - - static int parse_parts_value_whole(const char *p, const char *symbol) { - const char *pc, *n; diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0006-Include-netinet-if_ether.h.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0006-Include-netinet-if_ether.h.patch index 54d714266..855607e6a 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0006-Include-netinet-if_ether.h.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0006-Include-netinet-if_ether.h.patch @@ -1,4 +1,4 @@ -From 2069f0b0d5ab8f869aeba635a347e0b11d362b30 Mon Sep 17 00:00:00 2001 +From d7ae3aadc70555932e03349907f8be04d03a50ee Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Thu, 26 Oct 2017 22:10:42 -0700 Subject: [PATCH] Include netinet/if_ether.h @@ -33,31 +33,77 @@ Signed-off-by: Scott Murray Signed-off-by: Luca Boccassi --- - src/libsystemd-network/sd-dhcp6-client.c | 1 - - src/libsystemd/sd-netlink/netlink-types.c | 1 + - src/machine/machine-dbus.c | 1 + - src/network/netdev/bond.c | 1 + - src/network/netdev/bridge.c | 1 + - src/network/netdev/macsec.c | 1 + - src/network/netdev/netdev-gperf.gperf | 1 + - src/network/netdev/netdev.c | 1 + - src/network/networkd-brvlan.c | 1 + - src/network/networkd-dhcp-common.c | 4 +++- - src/network/networkd-dhcp-server.c | 4 ++-- - src/network/networkd-dhcp4.c | 2 +- - src/network/networkd-dhcp6.c | 2 +- - src/network/networkd-link.c | 2 +- - src/network/networkd-network.c | 1 + - src/network/networkd-route.c | 5 ++++- - src/network/test-network-tables.c | 1 + - src/shared/ethtool-util.c | 1 + - src/shared/ethtool-util.h | 1 + - src/udev/net/link-config.c | 1 + - src/udev/udev-builtin-net_setup_link.c | 1 + - 21 files changed, 26 insertions(+), 8 deletions(-) + src/basic/linux/in6.h | 14 +++++++------- + src/libsystemd-network/sd-dhcp6-client.c | 1 - + src/libsystemd/sd-netlink/netlink-types.c | 1 + + src/machine/machine-dbus.c | 1 + + src/network/netdev/bond.c | 1 + + src/network/netdev/bridge.c | 1 + + src/network/netdev/macsec.c | 1 + + src/network/netdev/netdev-gperf.gperf | 1 + + src/network/netdev/netdev.c | 1 + + src/network/networkd-bridge-vlan.c | 1 + + src/network/networkd-dhcp-common.c | 4 +++- + src/network/networkd-dhcp-server.c | 4 ++-- + src/network/networkd-dhcp4.c | 2 +- + src/network/networkd-dhcp6.c | 2 +- + src/network/networkd-link.c | 2 +- + src/network/networkd-network.c | 1 + + src/network/networkd-route.c | 1 + + src/network/networkd-setlink.c | 2 +- + src/network/test-network-tables.c | 1 + + src/shared/ethtool-util.c | 1 + + src/shared/ethtool-util.h | 1 + + src/udev/net/link-config.c | 1 + + src/udev/udev-builtin-net_setup_link.c | 1 + + 23 files changed, 31 insertions(+), 15 deletions(-) +diff --git a/src/basic/linux/in6.h b/src/basic/linux/in6.h +index 5ad396a57e..1dc007fe13 100644 +--- a/src/basic/linux/in6.h ++++ b/src/basic/linux/in6.h +@@ -1,10 +1,10 @@ + /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ + /* +- * Types and definitions for AF_INET6 +- * Linux INET6 implementation ++ * Types and definitions for AF_INET6 ++ * Linux INET6 implementation + * + * Authors: +- * Pedro Roque ++ * Pedro Roque + * + * Sources: + * IPv6 Program Interfaces for BSD Systems +@@ -19,8 +19,8 @@ + * 2 of the License, or (at your option) any later version. + */ + +-#ifndef _UAPI_LINUX_IN6_H +-#define _UAPI_LINUX_IN6_H ++#ifndef _LINUX_IN6_H ++#define _LINUX_IN6_H + + #include + #include +@@ -97,7 +97,7 @@ struct in6_flowlabel_req { + + + /* +- * Bitmask constant declarations to help applications select out the ++ * Bitmask constant declarations to help applications select out the + * flow label and priority fields. + * + * Note that this are in host byte order while the flowinfo field of +@@ -298,4 +298,4 @@ struct in6_flowlabel_req { + * ... + * MRT6_MAX + */ +-#endif /* _UAPI_LINUX_IN6_H */ ++#endif /* _LINUX_IN6_H */ diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c -index 410bfda10e..e70ed8be92 100644 +index e8c47f429a..359922c1b3 100644 --- a/src/libsystemd-network/sd-dhcp6-client.c +++ b/src/libsystemd-network/sd-dhcp6-client.c @@ -5,7 +5,6 @@ @@ -69,7 +115,7 @@ index 410bfda10e..e70ed8be92 100644 #include "sd-dhcp6-client.h" diff --git a/src/libsystemd/sd-netlink/netlink-types.c b/src/libsystemd/sd-netlink/netlink-types.c -index ed7b9a8cd1..112c0b09e4 100644 +index beb926d40b..41de212242 100644 --- a/src/libsystemd/sd-netlink/netlink-types.c +++ b/src/libsystemd/sd-netlink/netlink-types.c @@ -3,6 +3,7 @@ @@ -81,7 +127,7 @@ index ed7b9a8cd1..112c0b09e4 100644 #include #include diff --git a/src/machine/machine-dbus.c b/src/machine/machine-dbus.c -index e7c4ed3c7c..3a1e4f9072 100644 +index 0022a980c5..fc22e51409 100644 --- a/src/machine/machine-dbus.c +++ b/src/machine/machine-dbus.c @@ -3,6 +3,7 @@ @@ -93,7 +139,7 @@ index e7c4ed3c7c..3a1e4f9072 100644 /* When we include libgen.h because we need dirname() we immediately * undefine basename() since libgen.h defines it as a macro to the POSIX diff --git a/src/network/netdev/bond.c b/src/network/netdev/bond.c -index cf7ca88d6f..34ab468191 100644 +index a7a4adce45..eb111a6c48 100644 --- a/src/network/netdev/bond.c +++ b/src/network/netdev/bond.c @@ -1,5 +1,6 @@ @@ -104,7 +150,7 @@ index cf7ca88d6f..34ab468191 100644 #include "bond.h" #include "bond-util.h" diff --git a/src/network/netdev/bridge.c b/src/network/netdev/bridge.c -index 38432f1578..79ccfe578e 100644 +index 99fb9e1c3c..ecc6ca91bf 100644 --- a/src/network/netdev/bridge.c +++ b/src/network/netdev/bridge.c @@ -1,5 +1,6 @@ @@ -126,7 +172,7 @@ index 77c5f8c4e7..04be1b4ab2 100644 #include #include diff --git a/src/network/netdev/netdev-gperf.gperf b/src/network/netdev/netdev-gperf.gperf -index 8abe044890..3c54c58928 100644 +index 9dd081425e..130e5b3d3c 100644 --- a/src/network/netdev/netdev-gperf.gperf +++ b/src/network/netdev/netdev-gperf.gperf @@ -3,6 +3,7 @@ @@ -138,7 +184,7 @@ index 8abe044890..3c54c58928 100644 #include "bareudp.h" #include "batadv.h" diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c -index b31f0fa81a..c80e1ff537 100644 +index 53534d4873..1cfda9469f 100644 --- a/src/network/netdev/netdev.c +++ b/src/network/netdev/netdev.c @@ -1,5 +1,6 @@ @@ -148,10 +194,10 @@ index b31f0fa81a..c80e1ff537 100644 #include #include #include -diff --git a/src/network/networkd-brvlan.c b/src/network/networkd-brvlan.c -index 2847b336c9..4d6af8c642 100644 ---- a/src/network/networkd-brvlan.c -+++ b/src/network/networkd-brvlan.c +diff --git a/src/network/networkd-bridge-vlan.c b/src/network/networkd-bridge-vlan.c +index 3153bf6984..687a26b057 100644 +--- a/src/network/networkd-bridge-vlan.c ++++ b/src/network/networkd-bridge-vlan.c @@ -4,6 +4,7 @@ ***/ @@ -161,7 +207,7 @@ index 2847b336c9..4d6af8c642 100644 #include diff --git a/src/network/networkd-dhcp-common.c b/src/network/networkd-dhcp-common.c -index 00d055cf8d..65821c1d31 100644 +index 249d780887..edd2e9adf8 100644 --- a/src/network/networkd-dhcp-common.c +++ b/src/network/networkd-dhcp-common.c @@ -1,7 +1,8 @@ @@ -173,8 +219,8 @@ index 00d055cf8d..65821c1d31 100644 +#include #include "bus-error.h" - #include "dhcp-internal.h" -@@ -11,6 +12,7 @@ + #include "dhcp-identifier.h" +@@ -13,6 +14,7 @@ #include "networkd-dhcp-common.h" #include "networkd-link.h" #include "networkd-manager.h" @@ -183,7 +229,7 @@ index 00d055cf8d..65821c1d31 100644 #include "parse-util.h" #include "socket-util.h" diff --git a/src/network/networkd-dhcp-server.c b/src/network/networkd-dhcp-server.c -index 5cdf432c27..93cffb9863 100644 +index 9e2faa5675..fd8d817569 100644 --- a/src/network/networkd-dhcp-server.c +++ b/src/network/networkd-dhcp-server.c @@ -1,8 +1,8 @@ @@ -198,7 +244,7 @@ index 5cdf432c27..93cffb9863 100644 #include "sd-dhcp-server.h" diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c -index 23dc3a45db..7ae6c2467a 100644 +index f80adcdbcf..3311e2a718 100644 --- a/src/network/networkd-dhcp4.c +++ b/src/network/networkd-dhcp4.c @@ -1,9 +1,9 @@ @@ -213,7 +259,7 @@ index 23dc3a45db..7ae6c2467a 100644 #include "escape.h" #include "alloc-util.h" diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c -index aa077d6219..4f6ce22059 100644 +index 2b72b618fc..d0d4cfb384 100644 --- a/src/network/networkd-dhcp6.c +++ b/src/network/networkd-dhcp6.c @@ -3,9 +3,9 @@ @@ -228,7 +274,7 @@ index aa077d6219..4f6ce22059 100644 #include "sd-dhcp6-client.h" diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c -index 8219d95b0d..c92230453b 100644 +index 9421ce1aa6..3e37cbcc39 100644 --- a/src/network/networkd-link.c +++ b/src/network/networkd-link.c @@ -1,8 +1,8 @@ @@ -239,10 +285,10 @@ index 8219d95b0d..c92230453b 100644 #include -#include #include - #include - + #include + #include diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c -index e5ffd35b6f..871ebb32c6 100644 +index 850b4f449e..6f85d41328 100644 --- a/src/network/networkd-network.c +++ b/src/network/networkd-network.c @@ -1,5 +1,6 @@ @@ -253,23 +299,32 @@ index e5ffd35b6f..871ebb32c6 100644 #include #include diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c -index a74541a6c9..a10549b336 100644 +index 77a93beca9..3bf9ae8837 100644 --- a/src/network/networkd-route.c +++ b/src/network/networkd-route.c -@@ -1,7 +1,10 @@ +@@ -1,5 +1,6 @@ /* SPDX-License-Identifier: LGPL-2.1-or-later */ ++#include #include --#include -+/* linux/ipv6_route.h conflicts with netinet/in.h so define manually */ -+#ifndef IP6_RT_PRIO_USER -+#define IP6_RT_PRIO_USER 1024 -+#endif + #include + #include +diff --git a/src/network/networkd-setlink.c b/src/network/networkd-setlink.c +index 10c312c480..e44fbb5c35 100644 +--- a/src/network/networkd-setlink.c ++++ b/src/network/networkd-setlink.c +@@ -1,8 +1,8 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ - #include "alloc-util.h" + #include ++#include + #include +-#include + + #include "missing_network.h" #include "netlink-util.h" diff --git a/src/network/test-network-tables.c b/src/network/test-network-tables.c -index ce34449554..0b5dc01182 100644 +index f55e524ae9..83d5c7cef3 100644 --- a/src/network/test-network-tables.c +++ b/src/network/test-network-tables.c @@ -1,5 +1,6 @@ @@ -280,7 +335,7 @@ index ce34449554..0b5dc01182 100644 #include "dhcp6-internal.h" #include "dhcp6-protocol.h" diff --git a/src/shared/ethtool-util.c b/src/shared/ethtool-util.c -index 654d36a83a..f4ed42d543 100644 +index f77f6943ca..0e1506e04b 100644 --- a/src/shared/ethtool-util.c +++ b/src/shared/ethtool-util.c @@ -1,5 +1,6 @@ @@ -291,7 +346,7 @@ index 654d36a83a..f4ed42d543 100644 #include #include diff --git a/src/shared/ethtool-util.h b/src/shared/ethtool-util.h -index 11e2906681..a171df0737 100644 +index 7d28766624..e98a25418b 100644 --- a/src/shared/ethtool-util.h +++ b/src/shared/ethtool-util.h @@ -3,6 +3,7 @@ @@ -303,7 +358,7 @@ index 11e2906681..a171df0737 100644 #include "conf-parser.h" diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c -index 31e5d0cd67..f25f821364 100644 +index 8dfe23691b..e269856337 100644 --- a/src/udev/net/link-config.c +++ b/src/udev/net/link-config.c @@ -1,5 +1,6 @@ @@ -314,7 +369,7 @@ index 31e5d0cd67..f25f821364 100644 #include #include diff --git a/src/udev/udev-builtin-net_setup_link.c b/src/udev/udev-builtin-net_setup_link.c -index 87e1fb133e..13876029d0 100644 +index d40251331c..89566c05f5 100644 --- a/src/udev/udev-builtin-net_setup_link.c +++ b/src/udev/udev-builtin-net_setup_link.c @@ -1,5 +1,6 @@ diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0007-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0007-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch index 2ff08c7fa..28846935e 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0007-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0007-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch @@ -1,4 +1,4 @@ -From bca73ff2fbff2dc311040a87a4f536f89af07ad6 Mon Sep 17 00:00:00 2001 +From e2d70a1735fc6b9d3c079814831ab0b1b2a9d1e0 Mon Sep 17 00:00:00 2001 From: Chen Qi Date: Mon, 25 Feb 2019 14:56:21 +0800 Subject: [PATCH] don't fail if GLOB_BRACE and GLOB_ALTDIRFUNC is not defined @@ -24,7 +24,7 @@ Signed-off-by: Scott Murray 3 files changed, 38 insertions(+) diff --git a/src/basic/glob-util.c b/src/basic/glob-util.c -index bc0278e57f..c973f82e54 100644 +index e026b29478..815e56ef68 100644 --- a/src/basic/glob-util.c +++ b/src/basic/glob-util.c @@ -12,6 +12,12 @@ @@ -64,7 +64,7 @@ index bc0278e57f..c973f82e54 100644 return -ENOENT; if (k == GLOB_NOSPACE) diff --git a/src/test/test-glob-util.c b/src/test/test-glob-util.c -index df6444c433..79a692046e 100644 +index 50b4924679..09c0a20aee 100644 --- a/src/test/test-glob-util.c +++ b/src/test/test-glob-util.c @@ -12,6 +12,12 @@ @@ -78,9 +78,9 @@ index df6444c433..79a692046e 100644 +#endif + static void test_glob_exists(void) { - char name[] = "/tmp/test-glob_exists.XXXXXX"; - int fd = -1; -@@ -39,11 +45,13 @@ static void test_glob_no_dot(void) { + log_info("/* %s */", __func__); + +@@ -41,11 +47,13 @@ static void test_glob_no_dot(void) { const char *fn; _cleanup_globfree_ glob_t g = { @@ -94,7 +94,7 @@ index df6444c433..79a692046e 100644 }; int r; -@@ -51,11 +59,19 @@ static void test_glob_no_dot(void) { +@@ -55,11 +63,19 @@ static void test_glob_no_dot(void) { assert_se(mkdtemp(template)); fn = strjoina(template, "/*"); @@ -115,7 +115,7 @@ index df6444c433..79a692046e 100644 (void) rm_rf(template, REMOVE_ROOT|REMOVE_PHYSICAL); diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c -index 6b73d1e6d5..26b3b74275 100644 +index 7e85c50634..145c48a685 100644 --- a/src/tmpfiles/tmpfiles.c +++ b/src/tmpfiles/tmpfiles.c @@ -66,6 +66,12 @@ @@ -131,7 +131,7 @@ index 6b73d1e6d5..26b3b74275 100644 /* This reads all files listed in /etc/tmpfiles.d/?*.conf and creates * them in the file system. This is intended to be used to create * properly owned directories beneath /tmp, /var/tmp, /run, which are -@@ -1947,7 +1953,9 @@ finish: +@@ -1990,7 +1996,9 @@ finish: static int glob_item(Item *i, action_t action) { _cleanup_globfree_ glob_t g = { @@ -141,7 +141,7 @@ index 6b73d1e6d5..26b3b74275 100644 }; int r = 0, k; char **fn; -@@ -1967,7 +1975,9 @@ static int glob_item(Item *i, action_t action) { +@@ -2010,7 +2018,9 @@ static int glob_item(Item *i, action_t action) { static int glob_item_recursively(Item *i, fdaction_t action) { _cleanup_globfree_ glob_t g = { diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0008-add-missing-FTW_-macros-for-musl.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0008-add-missing-FTW_-macros-for-musl.patch index 142ca0134..444e12385 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0008-add-missing-FTW_-macros-for-musl.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0008-add-missing-FTW_-macros-for-musl.patch @@ -1,4 +1,4 @@ -From e0d1912f0246c97e5e7b4177691363d2d077e11d Mon Sep 17 00:00:00 2001 +From 3410d82c9d07aee3e951fc6ae0b41fc1a594e00d Mon Sep 17 00:00:00 2001 From: Chen Qi Date: Mon, 25 Feb 2019 15:00:06 +0800 Subject: [PATCH] add missing FTW_ macros for musl @@ -10,10 +10,10 @@ This is to avoid build failures like below for musl. Upstream-Status: Inappropriate [musl specific] Signed-off-by: Chen Qi - --- src/basic/missing_type.h | 20 ++++++++++++++++++++ - 1 file changed, 20 insertions(+) + src/shared/mount-setup.c | 1 + + 2 files changed, 21 insertions(+) diff --git a/src/basic/missing_type.h b/src/basic/missing_type.h index aeaf6ad5ec..3df1084ef2 100644 @@ -43,3 +43,15 @@ index aeaf6ad5ec..3df1084ef2 100644 +#ifndef FTW_SKIP_SIBLINGS +#define FTW_SKIP_SIBLINGS 3 +#endif +diff --git a/src/shared/mount-setup.c b/src/shared/mount-setup.c +index ef3527e9a7..c1cab40eb8 100644 +--- a/src/shared/mount-setup.c ++++ b/src/shared/mount-setup.c +@@ -32,6 +32,7 @@ + #include "strv.h" + #include "user-util.h" + #include "virt.h" ++#include "missing_type.h" + + typedef enum MountMode { + MNT_NONE = 0, diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0009-fix-missing-of-__register_atfork-for-non-glibc-build.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0009-fix-missing-of-__register_atfork-for-non-glibc-build.patch index 53f0a1ba6..4670c232a 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0009-fix-missing-of-__register_atfork-for-non-glibc-build.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0009-fix-missing-of-__register_atfork-for-non-glibc-build.patch @@ -1,4 +1,4 @@ -From bb41fe773881a8f1d9615d388320b9c6fc47bfe5 Mon Sep 17 00:00:00 2001 +From 1e3bc870ded807cff0d3771dd89a850d020df032 Mon Sep 17 00:00:00 2001 From: Chen Qi Date: Mon, 25 Feb 2019 15:03:47 +0800 Subject: [PATCH] fix missing of __register_atfork for non-glibc builds @@ -12,7 +12,7 @@ Signed-off-by: Chen Qi 1 file changed, 7 insertions(+) diff --git a/src/basic/process-util.c b/src/basic/process-util.c -index 7d4301eadb..caa9dfe3a3 100644 +index 14259ea8df..18681838ef 100644 --- a/src/basic/process-util.c +++ b/src/basic/process-util.c @@ -18,6 +18,9 @@ @@ -25,7 +25,7 @@ index 7d4301eadb..caa9dfe3a3 100644 #include "alloc-util.h" #include "architecture.h" -@@ -1121,11 +1124,15 @@ void reset_cached_pid(void) { +@@ -1202,11 +1205,15 @@ void reset_cached_pid(void) { cached_pid = CACHED_PID_UNSET; } diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0010-Use-uintmax_t-for-handling-rlim_t.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0010-Use-uintmax_t-for-handling-rlim_t.patch index 940db4c5c..e6bb37a65 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0010-Use-uintmax_t-for-handling-rlim_t.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0010-Use-uintmax_t-for-handling-rlim_t.patch @@ -1,4 +1,4 @@ -From dc40487e0ac26e3ca317429b9c3e8f01772de60a Mon Sep 17 00:00:00 2001 +From eeacb75025d8f537d54c35256c5730c9aab15cde Mon Sep 17 00:00:00 2001 From: Chen Qi Date: Mon, 25 Feb 2019 15:12:41 +0800 Subject: [PATCH] Use uintmax_t for handling rlim_t @@ -23,9 +23,9 @@ Signed-off-by: Chen Qi --- src/basic/format-util.h | 8 +------- - src/basic/rlimit-util.c | 10 +++++----- + src/basic/rlimit-util.c | 12 ++++++------ src/core/execute.c | 4 ++-- - 3 files changed, 8 insertions(+), 14 deletions(-) + 3 files changed, 9 insertions(+), 15 deletions(-) diff --git a/src/basic/format-util.h b/src/basic/format-util.h index b7e18768e3..3195ab205d 100644 @@ -47,7 +47,7 @@ index b7e18768e3..3195ab205d 100644 #if SIZEOF_DEV_T == 8 # define DEV_FMT "%" PRIu64 diff --git a/src/basic/rlimit-util.c b/src/basic/rlimit-util.c -index 23d108d5df..b037734ee3 100644 +index 23d108d5df..3e6fb438d7 100644 --- a/src/basic/rlimit-util.c +++ b/src/basic/rlimit-util.c @@ -43,7 +43,7 @@ int setrlimit_closest(int resource, const struct rlimit *rlim) { @@ -87,10 +87,10 @@ index 23d108d5df..b037734ee3 100644 return 1; } diff --git a/src/core/execute.c b/src/core/execute.c -index f82fc294c0..4696d055a8 100644 +index 2a64675c5f..dca1e0e3b6 100644 --- a/src/core/execute.c +++ b/src/core/execute.c -@@ -5370,9 +5370,9 @@ void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) { +@@ -5391,9 +5391,9 @@ void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) { for (unsigned i = 0; i < RLIM_NLIMITS; i++) if (c->rlimit[i]) { fprintf(f, "%sLimit%s: " RLIM_FMT "\n", diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0011-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0011-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch index b1d782719..897e332f3 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0011-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0011-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch @@ -1,4 +1,4 @@ -From f8be7b283309e4332eedc088774daac637afef7b Mon Sep 17 00:00:00 2001 +From fa29a572faaeb6fb9ed0bc6802d17139773e1908 Mon Sep 17 00:00:00 2001 From: Chen Qi Date: Wed, 28 Feb 2018 21:25:22 -0800 Subject: [PATCH] test-sizeof.c: Disable tests for missing typedefs in musl diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0012-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0012-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch index 5f2178734..3bf706fc5 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0012-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0012-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch @@ -1,4 +1,4 @@ -From 06915b70735caa66987af758ebdc4207757ae758 Mon Sep 17 00:00:00 2001 +From 88c8922f9e4d221402d9cb2e04b9c82e89125827 Mon Sep 17 00:00:00 2001 From: Andre McCurdy Date: Tue, 10 Oct 2017 14:33:30 -0700 Subject: [PATCH] don't pass AT_SYMLINK_NOFOLLOW flag to faccessat() @@ -32,10 +32,10 @@ Signed-off-by: Andre McCurdy 2 files changed, 24 insertions(+), 5 deletions(-) diff --git a/src/basic/fs-util.h b/src/basic/fs-util.h -index 027037f7a7..16eb379caf 100644 +index 7f15b558ca..4263298cad 100644 --- a/src/basic/fs-util.h +++ b/src/basic/fs-util.h -@@ -44,8 +44,27 @@ int futimens_opath(int fd, const struct timespec ts[2]); +@@ -47,8 +47,27 @@ int futimens_opath(int fd, const struct timespec ts[2]); int fd_warn_permissions(const char *path, int fd); int stat_warn_permissions(const char *path, const struct stat *st); @@ -66,19 +66,19 @@ index 027037f7a7..16eb379caf 100644 int touch_file(const char *path, bool parents, usec_t stamp, uid_t uid, gid_t gid, mode_t mode); int touch(const char *path); diff --git a/src/shared/base-filesystem.c b/src/shared/base-filesystem.c -index 1d05409086..1ed06c31ab 100644 +index 016eb7b82a..b1967f9f2f 100644 --- a/src/shared/base-filesystem.c +++ b/src/shared/base-filesystem.c -@@ -54,7 +54,7 @@ int base_filesystem_create(const char *root, uid_t uid, gid_t gid) { +@@ -53,7 +53,7 @@ int base_filesystem_create(const char *root, uid_t uid, gid_t gid) { return log_error_errno(errno, "Failed to open root file system: %m"); - for (i = 0; i < ELEMENTSOF(table); i ++) { + for (size_t i = 0; i < ELEMENTSOF(table); i++) { - if (faccessat(fd, table[i].dir, F_OK, AT_SYMLINK_NOFOLLOW) >= 0) + if (faccessat(fd, table[i].dir, F_OK, 0) >= 0) continue; if (table[i].target) { -@@ -62,7 +62,7 @@ int base_filesystem_create(const char *root, uid_t uid, gid_t gid) { +@@ -61,7 +61,7 @@ int base_filesystem_create(const char *root, uid_t uid, gid_t gid) { /* check if one of the targets exists */ NULSTR_FOREACH(s, table[i].target) { @@ -87,7 +87,7 @@ index 1d05409086..1ed06c31ab 100644 continue; /* check if a specific file exists at the target path */ -@@ -73,7 +73,7 @@ int base_filesystem_create(const char *root, uid_t uid, gid_t gid) { +@@ -72,7 +72,7 @@ int base_filesystem_create(const char *root, uid_t uid, gid_t gid) { if (!p) return log_oom(); diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0013-Define-glibc-compatible-basename-for-non-glibc-syste.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0013-Define-glibc-compatible-basename-for-non-glibc-syste.patch index 51b145729..74008714c 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0013-Define-glibc-compatible-basename-for-non-glibc-syste.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0013-Define-glibc-compatible-basename-for-non-glibc-syste.patch @@ -1,4 +1,4 @@ -From 0c44af262cfa07c57db4b32de1f7610af47797f4 Mon Sep 17 00:00:00 2001 +From e07e9b998ad61b09555bc809aa15de9d2516787a Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Sun, 27 May 2018 08:36:44 -0700 Subject: [PATCH] Define glibc compatible basename() for non-glibc systems @@ -15,7 +15,7 @@ Signed-off-by: Khem Raj 1 file changed, 5 insertions(+) diff --git a/src/machine/machine-dbus.c b/src/machine/machine-dbus.c -index 3a1e4f9072..ab87b9882c 100644 +index fc22e51409..1fed07b941 100644 --- a/src/machine/machine-dbus.c +++ b/src/machine/machine-dbus.c @@ -11,6 +11,11 @@ diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0014-Do-not-disable-buffering-when-writing-to-oom_score_a.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0014-Do-not-disable-buffering-when-writing-to-oom_score_a.patch index 7444d4375..c5e20cbb8 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0014-Do-not-disable-buffering-when-writing-to-oom_score_a.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0014-Do-not-disable-buffering-when-writing-to-oom_score_a.patch @@ -1,4 +1,4 @@ -From 0f4b60e34a806055c678eb97a7ec7e21291bcf48 Mon Sep 17 00:00:00 2001 +From 2f048d13e100158320bda248635b3c533ac9717b Mon Sep 17 00:00:00 2001 From: Chen Qi Date: Wed, 4 Jul 2018 15:00:44 +0800 Subject: [PATCH] Do not disable buffering when writing to oom_score_adj @@ -25,10 +25,10 @@ Signed-off-by: Scott Murray 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/basic/process-util.c b/src/basic/process-util.c -index caa9dfe3a3..6101f43db5 100644 +index 18681838ef..0fa71ccce0 100644 --- a/src/basic/process-util.c +++ b/src/basic/process-util.c -@@ -1523,7 +1523,7 @@ int set_oom_score_adjust(int value) { +@@ -1606,7 +1606,7 @@ int set_oom_score_adjust(int value) { sprintf(t, "%i", value); return write_string_file("/proc/self/oom_score_adj", t, diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0015-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0015-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch index 90cc70d21..39804bd36 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0015-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0015-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch @@ -1,4 +1,4 @@ -From c30ab62d18ce88187f5eb6c236e0977c9337f68d Mon Sep 17 00:00:00 2001 +From 45148529792c0cda32fdd61610c8d5a700d541fa Mon Sep 17 00:00:00 2001 From: Chen Qi Date: Tue, 10 Jul 2018 15:40:17 +0800 Subject: [PATCH] distinguish XSI-compliant strerror_r from GNU-specifi @@ -25,10 +25,10 @@ Signed-off-by: Chen Qi 2 files changed, 10 insertions(+) diff --git a/src/libsystemd/sd-bus/bus-error.c b/src/libsystemd/sd-bus/bus-error.c -index 8da2024a50..9605a9b869 100644 +index 7483b46a11..c49be29e46 100644 --- a/src/libsystemd/sd-bus/bus-error.c +++ b/src/libsystemd/sd-bus/bus-error.c -@@ -392,7 +392,12 @@ static void bus_error_strerror(sd_bus_error *e, int error) { +@@ -404,7 +404,12 @@ static void bus_error_strerror(sd_bus_error *e, int error) { return; errno = 0; diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0016-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0016-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch index de7f9ecfa..365e2a36f 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0016-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0016-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch @@ -1,4 +1,4 @@ -From fa86e5578256dddb296fd30128929ea7c4b792a4 Mon Sep 17 00:00:00 2001 +From 02a2772889d6cb08c9ca0561b52e7a9a80e50497 Mon Sep 17 00:00:00 2001 From: Chen Qi Date: Mon, 25 Feb 2019 15:18:00 +0800 Subject: [PATCH] Hide __start_BUS_ERROR_MAP and __stop_BUS_ERROR_MAP @@ -17,7 +17,7 @@ Signed-off-by: Chen Qi 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/libsystemd/sd-bus/bus-error.c b/src/libsystemd/sd-bus/bus-error.c -index 9605a9b869..38b6cf90c3 100644 +index c49be29e46..90731bd7e7 100644 --- a/src/libsystemd/sd-bus/bus-error.c +++ b/src/libsystemd/sd-bus/bus-error.c @@ -55,8 +55,8 @@ BUS_ERROR_MAP_ELF_REGISTER const sd_bus_error_map bus_standard_errors[] = { diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0017-missing_type.h-add-__compar_d_fn_t-definition.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0017-missing_type.h-add-__compar_d_fn_t-definition.patch index d9ef2b8a4..8a6c03f31 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0017-missing_type.h-add-__compar_d_fn_t-definition.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0017-missing_type.h-add-__compar_d_fn_t-definition.patch @@ -1,4 +1,4 @@ -From 11e730694706fa354a0e43c588ef66677a777d9a Mon Sep 17 00:00:00 2001 +From 47c4ac80689077b1eb86cf05b4326b1ac345aedf Mon Sep 17 00:00:00 2001 From: Chen Qi Date: Mon, 25 Feb 2019 15:27:54 +0800 Subject: [PATCH] missing_type.h: add __compar_d_fn_t definition diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0018-avoid-redefinition-of-prctl_mm_map-structure.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0018-avoid-redefinition-of-prctl_mm_map-structure.patch index 3b6085423..e75935a28 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0018-avoid-redefinition-of-prctl_mm_map-structure.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0018-avoid-redefinition-of-prctl_mm_map-structure.patch @@ -1,4 +1,4 @@ -From 45bae28d3da6607d33d54f4b30a500f5249aadde Mon Sep 17 00:00:00 2001 +From 2cb33d8896a4ad2d3b489fed51f17d5e45dfb4fc Mon Sep 17 00:00:00 2001 From: Chen Qi Date: Mon, 25 Feb 2019 15:44:54 +0800 Subject: [PATCH] avoid redefinition of prctl_mm_map structure diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0019-Handle-missing-LOCK_EX.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0019-Handle-missing-LOCK_EX.patch index 7d6433f31..629c10362 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0019-Handle-missing-LOCK_EX.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0019-Handle-missing-LOCK_EX.patch @@ -1,4 +1,4 @@ -From 6e593ff2afbe4bfe15eee2ec34e51490a38462f5 Mon Sep 17 00:00:00 2001 +From 200a2a2e4f04a7b7078dd455fafbd6774240e30b Mon Sep 17 00:00:00 2001 From: Alex Kiernan Date: Fri, 7 Aug 2020 15:19:27 +0000 Subject: [PATCH] Handle missing LOCK_EX diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0020-Fix-incompatible-pointer-type-struct-sockaddr_un.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0020-Fix-incompatible-pointer-type-struct-sockaddr_un.patch index 1faee1c05..ea6e82f46 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0020-Fix-incompatible-pointer-type-struct-sockaddr_un.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0020-Fix-incompatible-pointer-type-struct-sockaddr_un.patch @@ -1,4 +1,4 @@ -From ac579b296aa29c2f1dad9425c6d795e154ec8f7c Mon Sep 17 00:00:00 2001 +From 6445b7737a89256f35adc56701a5c47b48618ced Mon Sep 17 00:00:00 2001 From: Alex Kiernan Date: Fri, 7 Aug 2020 15:20:17 +0000 Subject: [PATCH] Fix incompatible pointer type struct sockaddr_un * @@ -24,10 +24,10 @@ Signed-off-by: Alex Kiernan 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c -index a4ac8ed2bb..0c41a48d4b 100644 +index 04685fecba..90b12bb5bd 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c -@@ -5125,7 +5125,7 @@ static int cant_be_in_netns(void) { +@@ -5354,7 +5354,7 @@ static int cant_be_in_netns(void) { if (fd < 0) return log_error_errno(errno, "Failed to allocate udev control socket: %m"); diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0021-test-json.c-define-M_PIl.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0021-test-json.c-define-M_PIl.patch index 14c8ff73a..60c12b074 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0021-test-json.c-define-M_PIl.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0021-test-json.c-define-M_PIl.patch @@ -1,4 +1,4 @@ -From 6bc78df50adb48d24a2abfdf65b44b932cc5a571 Mon Sep 17 00:00:00 2001 +From ae71bf2b97dc9d4760defd83463c1d305f332f22 Mon Sep 17 00:00:00 2001 From: Chen Qi Date: Mon, 25 Feb 2019 16:53:06 +0800 Subject: [PATCH] test-json.c: define M_PIl diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0022-do-not-disable-buffer-in-writing-files.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0022-do-not-disable-buffer-in-writing-files.patch index bd627c51e..6998bf0dd 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0022-do-not-disable-buffer-in-writing-files.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0022-do-not-disable-buffer-in-writing-files.patch @@ -1,4 +1,4 @@ -From 7cb6579572b50ef44bc0a321a4c73cce55b0c2f2 Mon Sep 17 00:00:00 2001 +From 3198690c2dbb4b457a04ef21914dc4d531540273 Mon Sep 17 00:00:00 2001 From: Chen Qi Date: Fri, 1 Mar 2019 15:22:15 +0800 Subject: [PATCH] do not disable buffer in writing files @@ -22,7 +22,6 @@ Signed-off-by: Scott Murray --- src/basic/cgroup-util.c | 10 +++++----- src/basic/procfs-util.c | 4 ++-- - src/basic/smack-util.c | 2 +- src/basic/sysctl-util.c | 2 +- src/basic/util.c | 2 +- src/binfmt/binfmt.c | 6 +++--- @@ -30,19 +29,20 @@ Signed-off-by: Scott Murray src/core/smack-setup.c | 8 ++++---- src/hibernate-resume/hibernate-resume.c | 2 +- src/libsystemd/sd-device/sd-device.c | 2 +- - src/login/logind-dbus.c | 2 +- src/nspawn/nspawn-cgroup.c | 2 +- src/nspawn/nspawn.c | 6 +++--- src/shared/cgroup-setup.c | 4 ++-- + src/shared/mount-util.c | 4 ++-- + src/shared/smack-util.c | 2 +- src/sleep/sleep.c | 8 ++++---- src/vconsole/vconsole-setup.c | 2 +- - 16 files changed, 33 insertions(+), 33 deletions(-) + 16 files changed, 34 insertions(+), 34 deletions(-) diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c -index 50c1ae1b2b..5b40e92163 100644 +index c9efd862a2..b3708ea925 100644 --- a/src/basic/cgroup-util.c +++ b/src/basic/cgroup-util.c -@@ -765,7 +765,7 @@ int cg_install_release_agent(const char *controller, const char *agent) { +@@ -766,7 +766,7 @@ int cg_install_release_agent(const char *controller, const char *agent) { sc = strstrip(contents); if (isempty(sc)) { @@ -51,7 +51,7 @@ index 50c1ae1b2b..5b40e92163 100644 if (r < 0) return r; } else if (!path_equal(sc, agent)) -@@ -783,7 +783,7 @@ int cg_install_release_agent(const char *controller, const char *agent) { +@@ -784,7 +784,7 @@ int cg_install_release_agent(const char *controller, const char *agent) { sc = strstrip(contents); if (streq(sc, "0")) { @@ -60,7 +60,7 @@ index 50c1ae1b2b..5b40e92163 100644 if (r < 0) return r; -@@ -810,7 +810,7 @@ int cg_uninstall_release_agent(const char *controller) { +@@ -811,7 +811,7 @@ int cg_uninstall_release_agent(const char *controller) { if (r < 0) return r; @@ -69,7 +69,7 @@ index 50c1ae1b2b..5b40e92163 100644 if (r < 0) return r; -@@ -820,7 +820,7 @@ int cg_uninstall_release_agent(const char *controller) { +@@ -821,7 +821,7 @@ int cg_uninstall_release_agent(const char *controller) { if (r < 0) return r; @@ -78,7 +78,7 @@ index 50c1ae1b2b..5b40e92163 100644 if (r < 0) return r; -@@ -1650,7 +1650,7 @@ int cg_set_attribute(const char *controller, const char *path, const char *attri +@@ -1651,7 +1651,7 @@ int cg_set_attribute(const char *controller, const char *path, const char *attri if (r < 0) return r; @@ -88,7 +88,7 @@ index 50c1ae1b2b..5b40e92163 100644 int cg_get_attribute(const char *controller, const char *path, const char *attribute, char **ret) { diff --git a/src/basic/procfs-util.c b/src/basic/procfs-util.c -index 8f9eee8d36..480f8cc0b4 100644 +index 8c57094225..0cf6ec752b 100644 --- a/src/basic/procfs-util.c +++ b/src/basic/procfs-util.c @@ -86,13 +86,13 @@ int procfs_tasks_set_limit(uint64_t limit) { @@ -107,21 +107,8 @@ index 8f9eee8d36..480f8cc0b4 100644 if (r < 0) { uint64_t threads_max; -diff --git a/src/basic/smack-util.c b/src/basic/smack-util.c -index 3362ee3924..80c0f2a52e 100644 ---- a/src/basic/smack-util.c -+++ b/src/basic/smack-util.c -@@ -114,7 +114,7 @@ int mac_smack_apply_pid(pid_t pid, const char *label) { - return 0; - - p = procfs_file_alloca(pid, "attr/current"); -- r = write_string_file(p, label, WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file(p, label, 0); - if (r < 0) - return r; - diff --git a/src/basic/sysctl-util.c b/src/basic/sysctl-util.c -index c96b5cd77f..d2476d9665 100644 +index 8913e6ff85..29e6ec0755 100644 --- a/src/basic/sysctl-util.c +++ b/src/basic/sysctl-util.c @@ -93,7 +93,7 @@ int sysctl_write_ip_property(int af, const char *ifname, const char *property, c @@ -147,7 +134,7 @@ index 955b18bd2a..6d89c90176 100644 log_debug_errno(r, "Failed to turn off coredumps, ignoring: %m"); } diff --git a/src/binfmt/binfmt.c b/src/binfmt/binfmt.c -index f6b72e0bae..e9fd4d06be 100644 +index 29530bb691..3ecf6a45a2 100644 --- a/src/binfmt/binfmt.c +++ b/src/binfmt/binfmt.c @@ -48,7 +48,7 @@ static int delete_rule(const char *rule) { @@ -168,7 +155,7 @@ index f6b72e0bae..e9fd4d06be 100644 if (r < 0) return log_error_errno(r, "Failed to add binary format: %m"); -@@ -222,7 +222,7 @@ static int run(int argc, char *argv[]) { +@@ -223,7 +223,7 @@ static int run(int argc, char *argv[]) { } /* Flush out all rules */ @@ -178,10 +165,10 @@ index f6b72e0bae..e9fd4d06be 100644 STRV_FOREACH(f, files) { k = apply_file(*f, true); diff --git a/src/core/main.c b/src/core/main.c -index 3ee8d0a869..ec36e3e80f 100644 +index b32a19a1d8..4e1238853e 100644 --- a/src/core/main.c +++ b/src/core/main.c -@@ -1401,7 +1401,7 @@ static int bump_unix_max_dgram_qlen(void) { +@@ -1402,7 +1402,7 @@ static int bump_unix_max_dgram_qlen(void) { if (v >= DEFAULT_UNIX_MAX_DGRAM_QLEN) return 0; @@ -190,7 +177,7 @@ index 3ee8d0a869..ec36e3e80f 100644 if (r < 0) return log_full_errno(IN_SET(r, -EROFS, -EPERM, -EACCES) ? LOG_DEBUG : LOG_WARNING, r, "Failed to bump AF_UNIX datagram queue length, ignoring: %m"); -@@ -1678,7 +1678,7 @@ static void initialize_core_pattern(bool skip_setup) { +@@ -1679,7 +1679,7 @@ static void initialize_core_pattern(bool skip_setup) { if (getpid_cached() != 1) return; @@ -200,10 +187,10 @@ index 3ee8d0a869..ec36e3e80f 100644 log_warning_errno(r, "Failed to write '%s' to /proc/sys/kernel/core_pattern, ignoring: %m", arg_early_core_pattern); } diff --git a/src/core/smack-setup.c b/src/core/smack-setup.c -index 8cc1696a4f..ab7b4ba2c3 100644 +index 79c4808473..b111ce0a11 100644 --- a/src/core/smack-setup.c +++ b/src/core/smack-setup.c -@@ -325,17 +325,17 @@ int mac_smack_setup(bool *loaded_policy) { +@@ -323,17 +323,17 @@ int mac_smack_setup(bool *loaded_policy) { } #ifdef SMACK_RUN_LABEL @@ -239,10 +226,10 @@ index 58e35e403e..1d0beb4008 100644 log_error_errno(r, "Failed to write '%s' to /sys/power/resume: %m", major_minor); return EXIT_FAILURE; diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c -index d82f01a164..b8fd63346c 100644 +index 388128bf33..695f535ff4 100644 --- a/src/libsystemd/sd-device/sd-device.c +++ b/src/libsystemd/sd-device/sd-device.c -@@ -1987,7 +1987,7 @@ _public_ int sd_device_set_sysattr_value(sd_device *device, const char *sysattr, +@@ -2096,7 +2096,7 @@ _public_ int sd_device_set_sysattr_value(sd_device *device, const char *sysattr, if (!value) return -ENOMEM; @@ -251,19 +238,6 @@ index d82f01a164..b8fd63346c 100644 if (r < 0) { /* On failure, clear cache entry, as we do not know how it fails. */ device_remove_cached_sysattr_value(device, sysattr); -diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c -index 3bc424b83b..5f5eef0843 100644 ---- a/src/login/logind-dbus.c -+++ b/src/login/logind-dbus.c -@@ -1330,7 +1330,7 @@ static int trigger_device(Manager *m, sd_device *d) { - if (!t) - return -ENOMEM; - -- (void) write_string_file(t, "change", WRITE_STRING_FILE_DISABLE_BUFFER); -+ (void) write_string_file(t, "change", 0); - } - - return 0; diff --git a/src/nspawn/nspawn-cgroup.c b/src/nspawn/nspawn-cgroup.c index cb01b25bc6..e92051268b 100644 --- a/src/nspawn/nspawn-cgroup.c @@ -278,10 +252,10 @@ index cb01b25bc6..e92051268b 100644 log_error_errno(r, "Failed to move process: %m"); goto finish; diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c -index 0c41a48d4b..9c893b18e4 100644 +index 90b12bb5bd..6a1dafa094 100644 --- a/src/nspawn/nspawn.c +++ b/src/nspawn/nspawn.c -@@ -2695,7 +2695,7 @@ static int reset_audit_loginuid(void) { +@@ -2751,7 +2751,7 @@ static int reset_audit_loginuid(void) { if (streq(p, "4294967295")) return 0; @@ -290,19 +264,21 @@ index 0c41a48d4b..9c893b18e4 100644 if (r < 0) { log_error_errno(r, "Failed to reset audit login UID. This probably means that your kernel is too\n" -@@ -3948,13 +3948,13 @@ static int setup_uid_map(pid_t pid) { +@@ -4148,7 +4148,7 @@ static int setup_uid_map( + return log_oom(); xsprintf(uid_map, "/proc/" PID_FMT "/uid_map", pid); - xsprintf(line, UID_FMT " " UID_FMT " " UID_FMT "\n", 0, arg_uid_shift, arg_uid_range); -- r = write_string_file(uid_map, line, WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file(uid_map, line, 0); +- r = write_string_file(uid_map, s, WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file(uid_map, s, 0); if (r < 0) return log_error_errno(r, "Failed to write UID map: %m"); - /* We always assign the same UID and GID ranges */ +@@ -4158,7 +4158,7 @@ static int setup_uid_map( + return log_oom(); + xsprintf(uid_map, "/proc/" PID_FMT "/gid_map", pid); -- r = write_string_file(uid_map, line, WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file(uid_map, line, 0); +- r = write_string_file(uid_map, s, WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file(uid_map, s, 0); if (r < 0) return log_error_errno(r, "Failed to write GID map: %m"); @@ -328,11 +304,44 @@ index f197f715c7..077f893177 100644 if (r < 0) { log_debug_errno(r, "Failed to %s controller %s for %s (%s): %m", FLAGS_SET(mask, bit) ? "enable" : "disable", n, p, fs); +diff --git a/src/shared/mount-util.c b/src/shared/mount-util.c +index 594efea989..d243b45bc4 100644 +--- a/src/shared/mount-util.c ++++ b/src/shared/mount-util.c +@@ -1019,13 +1019,13 @@ static int make_userns(uid_t uid_shift, uid_t uid_range) { + xsprintf(line, UID_FMT " " UID_FMT " " UID_FMT "\n", 0, uid_shift, uid_range); + + xsprintf(uid_map, "/proc/" PID_FMT "/uid_map", pid); +- r = write_string_file(uid_map, line, WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file(uid_map, line, 0); + if (r < 0) + return log_error_errno(r, "Failed to write UID map: %m"); + + /* We always assign the same UID and GID ranges */ + xsprintf(uid_map, "/proc/" PID_FMT "/gid_map", pid); +- r = write_string_file(uid_map, line, WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file(uid_map, line, 0); + if (r < 0) + return log_error_errno(r, "Failed to write GID map: %m"); + +diff --git a/src/shared/smack-util.c b/src/shared/smack-util.c +index 3362ee3924..80c0f2a52e 100644 +--- a/src/shared/smack-util.c ++++ b/src/shared/smack-util.c +@@ -114,7 +114,7 @@ int mac_smack_apply_pid(pid_t pid, const char *label) { + return 0; + + p = procfs_file_alloca(pid, "attr/current"); +- r = write_string_file(p, label, WRITE_STRING_FILE_DISABLE_BUFFER); ++ r = write_string_file(p, label, 0); + if (r < 0) + return r; + diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c -index 262d4cea66..0523e8dc9b 100644 +index a3aeb24633..d3e68e1b94 100644 --- a/src/sleep/sleep.c +++ b/src/sleep/sleep.c -@@ -48,7 +48,7 @@ static int write_hibernate_location_info(const HibernateLocation *hibernate_loca +@@ -46,7 +46,7 @@ static int write_hibernate_location_info(const HibernateLocation *hibernate_loca assert(hibernate_location->swap); xsprintf(resume_str, "%u:%u", major(hibernate_location->devno), minor(hibernate_location->devno)); @@ -341,7 +350,7 @@ index 262d4cea66..0523e8dc9b 100644 if (r < 0) return log_debug_errno(r, "Failed to write partition device to /sys/power/resume for '%s': '%s': %m", hibernate_location->swap->device, resume_str); -@@ -75,7 +75,7 @@ static int write_hibernate_location_info(const HibernateLocation *hibernate_loca +@@ -73,7 +73,7 @@ static int write_hibernate_location_info(const HibernateLocation *hibernate_loca } xsprintf(offset_str, "%" PRIu64, hibernate_location->offset); @@ -350,7 +359,7 @@ index 262d4cea66..0523e8dc9b 100644 if (r < 0) return log_debug_errno(r, "Failed to write swap file offset to /sys/power/resume_offset for '%s': '%s': %m", hibernate_location->swap->device, offset_str); -@@ -92,7 +92,7 @@ static int write_mode(char **modes) { +@@ -90,7 +90,7 @@ static int write_mode(char **modes) { STRV_FOREACH(mode, modes) { int k; @@ -359,7 +368,7 @@ index 262d4cea66..0523e8dc9b 100644 if (k >= 0) return 0; -@@ -114,7 +114,7 @@ static int write_state(FILE **f, char **states) { +@@ -112,7 +112,7 @@ static int write_state(FILE **f, char **states) { STRV_FOREACH(state, states) { int k; diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0025-Handle-__cpu_mask-usage.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0025-Handle-__cpu_mask-usage.patch index 7d1bd6025..06702765e 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0025-Handle-__cpu_mask-usage.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0025-Handle-__cpu_mask-usage.patch @@ -1,4 +1,4 @@ -From d73755cc60f401f0f20f357752e45aeeeef8e83f Mon Sep 17 00:00:00 2001 +From b04518c464b526f8b9adc9ce3c08b1881db47989 Mon Sep 17 00:00:00 2001 From: Scott Murray Date: Fri, 13 Sep 2019 19:26:27 -0400 Subject: [PATCH] Handle __cpu_mask usage diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0026-Handle-missing-gshadow.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0026-Handle-missing-gshadow.patch index 068600fa4..dc6330582 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0026-Handle-missing-gshadow.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0026-Handle-missing-gshadow.patch @@ -1,4 +1,4 @@ -From 04e94f9a15101daa8f65a9af269d26cda2a24056 Mon Sep 17 00:00:00 2001 +From 0c8935128b39864b07dfee39cfa9d35d48f056aa Mon Sep 17 00:00:00 2001 From: Alex Kiernan Date: Tue, 10 Mar 2020 11:05:20 +0000 Subject: [PATCH] Handle missing gshadow @@ -14,8 +14,8 @@ Signed-off-by: Luca Boccassi --- src/shared/user-record-nss.c | 20 ++++++++++++++++++++ src/shared/user-record-nss.h | 4 ++++ - src/shared/userdb.c | 6 ++++++ - 3 files changed, 30 insertions(+) + src/shared/userdb.c | 7 ++++++- + 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/shared/user-record-nss.c b/src/shared/user-record-nss.c index 88b8fc2f8f..a819d41bac 100644 @@ -139,27 +139,27 @@ index 22ab04d6ee..4e52e7a911 100644 #include diff --git a/src/shared/userdb.c b/src/shared/userdb.c -index 613350bd46..5c821d28cd 100644 +index 91ac7c3832..20881ece84 100644 --- a/src/shared/userdb.c +++ b/src/shared/userdb.c -@@ -938,13 +938,16 @@ int groupdb_iterator_get(UserDBIterator *iterator, GroupRecord **ret) { +@@ -1047,13 +1047,15 @@ int groupdb_iterator_get(UserDBIterator *iterator, GroupRecord **ret) { if (gr) { _cleanup_free_ char *buffer = NULL; bool incomplete = false; +#if ENABLE_GSHADOW struct sgrp sgrp; +- +#endif - if (streq_ptr(gr->gr_name, "root")) iterator->synthesize_root = false; if (gr->gr_gid == GID_NOBODY) iterator->synthesize_nobody = false; +#if ENABLE_GSHADOW - if (!FLAGS_SET(iterator->flags, USERDB_AVOID_SHADOW)) { + if (!FLAGS_SET(iterator->flags, USERDB_SUPPRESS_SHADOW)) { r = nss_sgrp_for_group(gr, &sgrp, &buffer); if (r < 0) { -@@ -957,6 +960,9 @@ int groupdb_iterator_get(UserDBIterator *iterator, GroupRecord **ret) { +@@ -1066,6 +1068,9 @@ int groupdb_iterator_get(UserDBIterator *iterator, GroupRecord **ret) { } r = nss_group_to_group_record(gr, r >= 0 ? &sgrp : NULL, ret); diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0028-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0028-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch index 2289404d8..ff96a720c 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0028-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0028-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch @@ -1,4 +1,4 @@ -From 366cd28f5f93ba7c861cd32a718251770d74830e Mon Sep 17 00:00:00 2001 +From f5d7fee9620cbcf52be8f8ba477890d28cadfbc8 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Mon, 12 Apr 2021 23:44:53 -0700 Subject: [PATCH] missing_syscall.h: Define MIPS ABI defines for musl @@ -16,7 +16,7 @@ Signed-off-by: Khem Raj 1 file changed, 6 insertions(+) diff --git a/src/basic/missing_syscall.h b/src/basic/missing_syscall.h -index 1384324804..0202d00372 100644 +index 9e3a165857..4d59b3e7b0 100644 --- a/src/basic/missing_syscall.h +++ b/src/basic/missing_syscall.h @@ -20,6 +20,12 @@ diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd_248.3.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd_249.3.bb similarity index 81% rename from meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd_248.3.bb rename to meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd_249.3.bb index 37607708f..f8c85dabf 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd_248.3.bb +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd_249.3.bb @@ -4,7 +4,7 @@ PROVIDES = "udev" PE = "1" -DEPENDS = "intltool-native gperf-native libcap util-linux" +DEPENDS = "intltool-native gperf-native libcap util-linux python3-jinja2-native" SECTION = "base/shell" @@ -14,8 +14,7 @@ inherit useradd pkgconfig meson perlnative update-rc.d update-alternatives qemu # that we don't build both udev and systemd in world builds. REQUIRED_DISTRO_FEATURES = "systemd" -SRC_URI += " \ - file://touchscreen.rules \ +SRC_URI += "file://touchscreen.rules \ file://00-create-volatile.conf \ ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', 'file://org.freedesktop.hostname1_no_polkit.conf', '', d)} \ ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', 'file://00-hostnamed-network-user.conf', '', d)} \ @@ -29,7 +28,7 @@ SRC_URI += " \ " # patches needed by musl -SRC_URI_append_libc-musl = " ${SRC_URI_MUSL}" +SRC_URI:append:libc-musl = " ${SRC_URI_MUSL}" SRC_URI_MUSL = "\ file://0002-don-t-use-glibc-specific-qsort_r.patch \ file://0003-missing_type.h-add-__compare_fn_t-and-comparison_fn_.patch \ @@ -94,10 +93,11 @@ PACKAGECONFIG ??= " \ userdb \ utmp \ vconsole \ - xz \ + wheel-group \ + zstd \ " -PACKAGECONFIG_remove_libc-musl = " \ +PACKAGECONFIG:remove:libc-musl = " \ gshadow \ idn \ localed \ @@ -110,7 +110,7 @@ PACKAGECONFIG_remove_libc-musl = " \ utmp \ " -CFLAGS_append_libc-musl = " -D__UAPI_DEF_ETHHDR=0 " +CFLAGS:append:libc-musl = " -D__UAPI_DEF_ETHHDR=0 " # Some of the dependencies are weak-style recommends - if not available at runtime, # systemd won't fail but the library-related feature will be skipped with a warning. @@ -128,11 +128,14 @@ PACKAGECONFIG[bzip2] = "-Dbzip2=true,-Dbzip2=false,bzip2" PACKAGECONFIG[cgroupv2] = "-Ddefault-hierarchy=unified,-Ddefault-hierarchy=hybrid" PACKAGECONFIG[coredump] = "-Dcoredump=true,-Dcoredump=false" PACKAGECONFIG[cryptsetup] = "-Dlibcryptsetup=true,-Dlibcryptsetup=false,cryptsetup,,cryptsetup" +PACKAGECONFIG[tpm2] = "-Dtpm2=true,-Dtpm2=false,tpm2-tss,tpm2-tss libtss2 libtss2-tcti-device" PACKAGECONFIG[dbus] = "-Ddbus=true,-Ddbus=false,dbus" PACKAGECONFIG[efi] = "-Defi=true,-Defi=false" PACKAGECONFIG[gnu-efi] = "-Dgnu-efi=true -Defi-libdir=${STAGING_LIBDIR} -Defi-includedir=${STAGING_INCDIR}/efi,-Dgnu-efi=false,gnu-efi" PACKAGECONFIG[elfutils] = "-Delfutils=true,-Delfutils=false,elfutils" PACKAGECONFIG[firstboot] = "-Dfirstboot=true,-Dfirstboot=false" +PACKAGECONFIG[repart] = "-Drepart=true,-Drepart=false" +PACKAGECONFIG[homed] = "-Dhomed=true,-Dhomed=false" # Sign the journal for anti-tampering PACKAGECONFIG[gcrypt] = "-Dgcrypt=true,-Dgcrypt=false,libgcrypt" PACKAGECONFIG[gnutls] = "-Dgnutls=true,-Dgnutls=false,gnutls" @@ -195,11 +198,13 @@ PACKAGECONFIG[userdb] = "-Duserdb=true,-Duserdb=false" PACKAGECONFIG[utmp] = "-Dutmp=true,-Dutmp=false" PACKAGECONFIG[valgrind] = "-DVALGRIND=1,,valgrind" PACKAGECONFIG[vconsole] = "-Dvconsole=true,-Dvconsole=false,,${PN}-vconsole-setup" +PACKAGECONFIG[wheel-group] = "-Dwheel-group=true, -Dwheel-group=false" PACKAGECONFIG[xdg-autostart] = "-Dxdg-autostart=true,-Dxdg-autostart=false" # Verify keymaps on locale change PACKAGECONFIG[xkbcommon] = "-Dxkbcommon=true,-Dxkbcommon=false,libxkbcommon" PACKAGECONFIG[xz] = "-Dxz=true,-Dxz=false,xz" PACKAGECONFIG[zlib] = "-Dzlib=true,-Dzlib=false,zlib" +PACKAGECONFIG[zstd] = "-Dzstd=true,-Dzstd=false,zstd" # Helper variables to clarify locations. This mirrors the logic in systemd's # build system. @@ -239,7 +244,7 @@ do_install() { install -d ${D}/${base_sbindir} if ${@bb.utils.contains('PACKAGECONFIG', 'serial-getty-generator', 'false', 'true', d)}; then # Provided by a separate recipe - rm ${D}${systemd_unitdir}/system/serial-getty* -f + rm ${D}${systemd_system_unitdir}/serial-getty* -f fi # Provide support for initramfs @@ -258,7 +263,7 @@ do_install() { install -d ${D}${sysconfdir}/init.d install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/systemd-udevd sed -i s%@UDEVD@%${rootlibexecdir}/systemd/systemd-udevd% ${D}${sysconfdir}/init.d/systemd-udevd - install -Dm 0755 ${S}/src/systemctl/systemd-sysv-install.SKELETON ${D}${systemd_unitdir}/systemd-sysv-install + install -Dm 0755 ${S}/src/systemctl/systemd-sysv-install.SKELETON ${D}${systemd_system_unitdir}d-sysv-install fi chown root:systemd-journal ${D}/${localstatedir}/log/journal @@ -269,19 +274,19 @@ do_install() { # journal-remote creates this at start rm -rf ${D}/${localstatedir}/log/journal/remote - install -d ${D}${systemd_unitdir}/system/graphical.target.wants - install -d ${D}${systemd_unitdir}/system/multi-user.target.wants - install -d ${D}${systemd_unitdir}/system/poweroff.target.wants - install -d ${D}${systemd_unitdir}/system/reboot.target.wants - install -d ${D}${systemd_unitdir}/system/rescue.target.wants + install -d ${D}${systemd_system_unitdir}/graphical.target.wants + install -d ${D}${systemd_system_unitdir}/multi-user.target.wants + install -d ${D}${systemd_system_unitdir}/poweroff.target.wants + install -d ${D}${systemd_system_unitdir}/reboot.target.wants + install -d ${D}${systemd_system_unitdir}/rescue.target.wants # Create symlinks for systemd-update-utmp-runlevel.service if ${@bb.utils.contains('PACKAGECONFIG', 'utmp', 'true', 'false', d)}; then - ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_unitdir}/system/graphical.target.wants/systemd-update-utmp-runlevel.service - ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_unitdir}/system/multi-user.target.wants/systemd-update-utmp-runlevel.service - ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_unitdir}/system/poweroff.target.wants/systemd-update-utmp-runlevel.service - ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_unitdir}/system/reboot.target.wants/systemd-update-utmp-runlevel.service - ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_unitdir}/system/rescue.target.wants/systemd-update-utmp-runlevel.service + ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/graphical.target.wants/systemd-update-utmp-runlevel.service + ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/multi-user.target.wants/systemd-update-utmp-runlevel.service + ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/poweroff.target.wants/systemd-update-utmp-runlevel.service + ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/reboot.target.wants/systemd-update-utmp-runlevel.service + ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/rescue.target.wants/systemd-update-utmp-runlevel.service fi # this file is needed to exist if networkd is disabled but timesyncd is still in use since timesyncd checks it @@ -314,8 +319,8 @@ do_install() { # If polkit is not available and a fallback was requested, install a drop-in that allows networkd to # request hostname changes via DBUS without elevating its privileges if ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', 'true', 'false', d)}; then - install -d ${D}${systemd_unitdir}/system/systemd-hostnamed.service.d/ - install -m 0644 ${WORKDIR}/00-hostnamed-network-user.conf ${D}${systemd_unitdir}/system/systemd-hostnamed.service.d/ + install -d ${D}${systemd_system_unitdir}/systemd-hostnamed.service.d/ + install -m 0644 ${WORKDIR}/00-hostnamed-network-user.conf ${D}${systemd_system_unitdir}/systemd-hostnamed.service.d/ install -d ${D}${datadir}/dbus-1/system.d/ install -m 0644 ${WORKDIR}/org.freedesktop.hostname1_no_polkit.conf ${D}${datadir}/dbus-1/system.d/ fi @@ -329,13 +334,13 @@ do_install() { # install default policy for presets # https://www.freedesktop.org/wiki/Software/systemd/Preset/#howto - install -Dm 0644 ${WORKDIR}/99-default.preset ${D}${systemd_unitdir}/system-preset/99-default.preset + install -Dm 0644 ${WORKDIR}/99-default.preset ${D}${systemd_system_unitdir}-preset/99-default.preset # add a profile fragment to disable systemd pager with busybox less install -Dm 0644 ${WORKDIR}/systemd-pager.sh ${D}${sysconfdir}/profile.d/systemd-pager.sh } -python populate_packages_prepend (){ +python populate_packages:prepend (){ systemdlibdir = d.getVar("rootlibdir") do_split_packages(d, systemdlibdir, '^lib(.*)\.so\.*', 'lib%s', 'Systemd %s library', extra_depends='', allow_links=True) } @@ -360,96 +365,96 @@ PACKAGE_BEFORE_PN = "\ udev-hwdb \ " -SUMMARY_${PN}-container = "Tools for containers and VMs" -DESCRIPTION_${PN}-container = "Systemd tools to spawn and manage containers and virtual machines." +SUMMARY:${PN}-container = "Tools for containers and VMs" +DESCRIPTION:${PN}-container = "Systemd tools to spawn and manage containers and virtual machines." -SUMMARY_${PN}-journal-gatewayd = "HTTP server for journal events" -DESCRIPTION_${PN}-journal-gatewayd = "systemd-journal-gatewayd serves journal events over the network. Clients must connect using HTTP. The server listens on port 19531 by default." +SUMMARY:${PN}-journal-gatewayd = "HTTP server for journal events" +DESCRIPTION:${PN}-journal-gatewayd = "systemd-journal-gatewayd serves journal events over the network. Clients must connect using HTTP. The server listens on port 19531 by default." -SUMMARY_${PN}-journal-upload = "Send journal messages over the network" -DESCRIPTION_${PN}-journal-upload = "systemd-journal-upload uploads journal entries to a specified URL." +SUMMARY:${PN}-journal-upload = "Send journal messages over the network" +DESCRIPTION:${PN}-journal-upload = "systemd-journal-upload uploads journal entries to a specified URL." -SUMMARY_${PN}-journal-remote = "Receive journal messages over the network" -DESCRIPTION_${PN}-journal-remote = "systemd-journal-remote is a command to receive serialized journal events and store them to journal files." +SUMMARY:${PN}-journal-remote = "Receive journal messages over the network" +DESCRIPTION:${PN}-journal-remote = "systemd-journal-remote is a command to receive serialized journal events and store them to journal files." SYSTEMD_PACKAGES = "${@bb.utils.contains('PACKAGECONFIG', 'binfmt', '${PN}-binfmt', '', d)} \ ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-gatewayd', '', d)} \ ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-remote', '', d)} \ ${@bb.utils.contains('PACKAGECONFIG', 'journal-upload', '${PN}-journal-upload', '', d)} \ " -SYSTEMD_SERVICE_${PN}-binfmt = "systemd-binfmt.service" +SYSTEMD_SERVICE:${PN}-binfmt = "systemd-binfmt.service" USERADD_PACKAGES = "${PN} ${PN}-extra-utils \ ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-gateway', '', d)} \ ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-remote', '', d)} \ ${@bb.utils.contains('PACKAGECONFIG', 'journal-upload', '${PN}-journal-upload', '', d)} \ " -GROUPADD_PARAM_${PN} = "-r systemd-journal;" -GROUPADD_PARAM_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', '-r systemd-hostname;', '', d)}" -USERADD_PARAM_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'coredump', '--system -d / -M --shell /sbin/nologin systemd-coredump;', '', d)}" -USERADD_PARAM_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'networkd', '--system -d / -M --shell /sbin/nologin systemd-network;', '', d)}" -USERADD_PARAM_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'polkit', '--system --no-create-home --user-group --home-dir ${sysconfdir}/polkit-1 polkitd;', '', d)}" -USERADD_PARAM_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'resolved', '--system -d / -M --shell /sbin/nologin systemd-resolve;', '', d)}" -USERADD_PARAM_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'timesyncd', '--system -d / -M --shell /sbin/nologin systemd-timesync;', '', d)}" -USERADD_PARAM_${PN}-extra-utils = "--system -d / -M --shell /sbin/nologin systemd-bus-proxy" -USERADD_PARAM_${PN}-journal-gateway = "--system -d / -M --shell /sbin/nologin systemd-journal-gateway" -USERADD_PARAM_${PN}-journal-remote = "--system -d / -M --shell /sbin/nologin systemd-journal-remote" -USERADD_PARAM_${PN}-journal-upload = "--system -d / -M --shell /sbin/nologin systemd-journal-upload" - -FILES_${PN}-analyze = "${bindir}/systemd-analyze" - -FILES_${PN}-initramfs = "/init" -RDEPENDS_${PN}-initramfs = "${PN}" - -FILES_${PN}-gui = "${bindir}/systemadm" - -FILES_${PN}-vconsole-setup = "${rootlibexecdir}/systemd/systemd-vconsole-setup \ - ${systemd_unitdir}/system/systemd-vconsole-setup.service \ - ${systemd_unitdir}/system/sysinit.target.wants/systemd-vconsole-setup.service" - -RDEPENDS_${PN}-kernel-install += "bash" -FILES_${PN}-kernel-install = "${bindir}/kernel-install \ +GROUPADD_PARAM:${PN} = "-r systemd-journal;" +GROUPADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', '-r systemd-hostname;', '', d)}" +USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'coredump', '--system -d / -M --shell /sbin/nologin systemd-coredump;', '', d)}" +USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'networkd', '--system -d / -M --shell /sbin/nologin systemd-network;', '', d)}" +USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'polkit', '--system --no-create-home --user-group --home-dir ${sysconfdir}/polkit-1 polkitd;', '', d)}" +USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'resolved', '--system -d / -M --shell /sbin/nologin systemd-resolve;', '', d)}" +USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'timesyncd', '--system -d / -M --shell /sbin/nologin systemd-timesync;', '', d)}" +USERADD_PARAM:${PN}-extra-utils = "--system -d / -M --shell /sbin/nologin systemd-bus-proxy" +USERADD_PARAM:${PN}-journal-gateway = "--system -d / -M --shell /sbin/nologin systemd-journal-gateway" +USERADD_PARAM:${PN}-journal-remote = "--system -d / -M --shell /sbin/nologin systemd-journal-remote" +USERADD_PARAM:${PN}-journal-upload = "--system -d / -M --shell /sbin/nologin systemd-journal-upload" + +FILES:${PN}-analyze = "${bindir}/systemd-analyze" + +FILES:${PN}-initramfs = "/init" +RDEPENDS:${PN}-initramfs = "${PN}" + +FILES:${PN}-gui = "${bindir}/systemadm" + +FILES:${PN}-vconsole-setup = "${rootlibexecdir}/systemd/systemd-vconsole-setup \ + ${systemd_system_unitdir}/systemd-vconsole-setup.service \ + ${systemd_system_unitdir}/sysinit.target.wants/systemd-vconsole-setup.service" + +RDEPENDS:${PN}-kernel-install += "bash" +FILES:${PN}-kernel-install = "${bindir}/kernel-install \ ${sysconfdir}/kernel/ \ ${exec_prefix}/lib/kernel \ " -FILES_${PN}-rpm-macros = "${exec_prefix}/lib/rpm \ +FILES:${PN}-rpm-macros = "${exec_prefix}/lib/rpm \ " -FILES_${PN}-zsh-completion = "${datadir}/zsh/site-functions" +FILES:${PN}-zsh-completion = "${datadir}/zsh/site-functions" -FILES_${PN}-binfmt = "${sysconfdir}/binfmt.d/ \ +FILES:${PN}-binfmt = "${sysconfdir}/binfmt.d/ \ ${exec_prefix}/lib/binfmt.d \ ${rootlibexecdir}/systemd/systemd-binfmt \ - ${systemd_unitdir}/system/proc-sys-fs-binfmt_misc.* \ - ${systemd_unitdir}/system/systemd-binfmt.service" -RRECOMMENDS_${PN}-binfmt = "kernel-module-binfmt-misc" + ${systemd_system_unitdir}/proc-sys-fs-binfmt_misc.* \ + ${systemd_system_unitdir}/systemd-binfmt.service" +RRECOMMENDS:${PN}-binfmt = "kernel-module-binfmt-misc" -RRECOMMENDS_${PN}-vconsole-setup = "kbd kbd-consolefonts kbd-keymaps" +RRECOMMENDS:${PN}-vconsole-setup = "kbd kbd-consolefonts kbd-keymaps" -FILES_${PN}-journal-gatewayd = "${rootlibexecdir}/systemd/systemd-journal-gatewayd \ +FILES:${PN}-journal-gatewayd = "${rootlibexecdir}/systemd/systemd-journal-gatewayd \ ${systemd_system_unitdir}/systemd-journal-gatewayd.service \ ${systemd_system_unitdir}/systemd-journal-gatewayd.socket \ ${systemd_system_unitdir}/sockets.target.wants/systemd-journal-gatewayd.socket \ ${datadir}/systemd/gatewayd/browse.html \ " -SYSTEMD_SERVICE_${PN}-journal-gatewayd = "systemd-journal-gatewayd.socket" +SYSTEMD_SERVICE:${PN}-journal-gatewayd = "systemd-journal-gatewayd.socket" -FILES_${PN}-journal-upload = "${rootlibexecdir}/systemd/systemd-journal-upload \ +FILES:${PN}-journal-upload = "${rootlibexecdir}/systemd/systemd-journal-upload \ ${systemd_system_unitdir}/systemd-journal-upload.service \ ${sysconfdir}/systemd/journal-upload.conf \ " -SYSTEMD_SERVICE_${PN}-journal-upload = "systemd-journal-upload.service" +SYSTEMD_SERVICE:${PN}-journal-upload = "systemd-journal-upload.service" -FILES_${PN}-journal-remote = "${rootlibexecdir}/systemd/systemd-journal-remote \ +FILES:${PN}-journal-remote = "${rootlibexecdir}/systemd/systemd-journal-remote \ ${sysconfdir}/systemd/journal-remote.conf \ ${systemd_system_unitdir}/systemd-journal-remote.service \ ${systemd_system_unitdir}/systemd-journal-remote.socket \ " -SYSTEMD_SERVICE_${PN}-journal-remote = "systemd-journal-remote.socket" +SYSTEMD_SERVICE:${PN}-journal-remote = "systemd-journal-remote.socket" -FILES_${PN}-container = "${sysconfdir}/dbus-1/system.d/org.freedesktop.import1.conf \ +FILES:${PN}-container = "${sysconfdir}/dbus-1/system.d/org.freedesktop.import1.conf \ ${sysconfdir}/dbus-1/system.d/org.freedesktop.machine1.conf \ ${sysconfdir}/systemd/system/multi-user.target.wants/machines.target \ ${base_bindir}/machinectl \ @@ -485,7 +490,7 @@ FILES_${PN}-container = "${sysconfdir}/dbus-1/system.d/org.freedesktop.import1.c " # "machinectl import-tar" uses "tar --numeric-owner", not supported by busybox. -RRECOMMENDS_${PN}-container += "\ +RRECOMMENDS:${PN}-container += "\ ${PN}-journal-gatewayd \ ${PN}-journal-remote \ ${PN}-journal-upload \ @@ -495,7 +500,7 @@ RRECOMMENDS_${PN}-container += "\ tar \ " -FILES_${PN}-extra-utils = "\ +FILES:${PN}-extra-utils = "\ ${base_bindir}/systemd-escape \ ${base_bindir}/systemd-inhibit \ ${bindir}/systemd-detect-virt \ @@ -510,43 +515,43 @@ FILES_${PN}-extra-utils = "\ ${bindir}/systemd-sysext \ ${base_bindir}/systemd-ask-password \ ${base_bindir}/systemd-tty-ask-password-agent \ - ${systemd_unitdir}/system/systemd-ask-password-console.path \ - ${systemd_unitdir}/system/systemd-ask-password-console.service \ - ${systemd_unitdir}/system/systemd-ask-password-wall.path \ - ${systemd_unitdir}/system/systemd-ask-password-wall.service \ - ${systemd_unitdir}/system/sysinit.target.wants/systemd-ask-password-console.path \ - ${systemd_unitdir}/system/sysinit.target.wants/systemd-ask-password-wall.path \ - ${systemd_unitdir}/system/multi-user.target.wants/systemd-ask-password-wall.path \ + ${systemd_system_unitdir}/systemd-ask-password-console.path \ + ${systemd_system_unitdir}/systemd-ask-password-console.service \ + ${systemd_system_unitdir}/systemd-ask-password-wall.path \ + ${systemd_system_unitdir}/systemd-ask-password-wall.service \ + ${systemd_system_unitdir}/sysinit.target.wants/systemd-ask-password-console.path \ + ${systemd_system_unitdir}/sysinit.target.wants/systemd-ask-password-wall.path \ + ${systemd_system_unitdir}/multi-user.target.wants/systemd-ask-password-wall.path \ ${rootlibexecdir}/systemd/systemd-resolve-host \ ${rootlibexecdir}/systemd/systemd-ac-power \ ${rootlibexecdir}/systemd/systemd-activate \ ${rootlibexecdir}/systemd/systemd-bus-proxyd \ - ${systemd_unitdir}/system/systemd-bus-proxyd.service \ - ${systemd_unitdir}/system/systemd-bus-proxyd.socket \ + ${systemd_system_unitdir}/systemd-bus-proxyd.service \ + ${systemd_system_unitdir}/systemd-bus-proxyd.socket \ ${rootlibexecdir}/systemd/systemd-socket-proxyd \ ${rootlibexecdir}/systemd/systemd-reply-password \ ${rootlibexecdir}/systemd/systemd-sleep \ ${rootlibexecdir}/systemd/system-sleep \ - ${systemd_unitdir}/system/systemd-hibernate.service \ - ${systemd_unitdir}/system/systemd-hybrid-sleep.service \ - ${systemd_unitdir}/system/systemd-suspend.service \ - ${systemd_unitdir}/system/sleep.target \ + ${systemd_system_unitdir}/systemd-hibernate.service \ + ${systemd_system_unitdir}/systemd-hybrid-sleep.service \ + ${systemd_system_unitdir}/systemd-suspend.service \ + ${systemd_system_unitdir}/sleep.target \ ${rootlibexecdir}/systemd/systemd-initctl \ - ${systemd_unitdir}/system/systemd-initctl.service \ - ${systemd_unitdir}/system/systemd-initctl.socket \ - ${systemd_unitdir}/system/sockets.target.wants/systemd-initctl.socket \ + ${systemd_system_unitdir}/systemd-initctl.service \ + ${systemd_system_unitdir}/systemd-initctl.socket \ + ${systemd_system_unitdir}/sockets.target.wants/systemd-initctl.socket \ ${rootlibexecdir}/systemd/system-generators/systemd-gpt-auto-generator \ ${rootlibexecdir}/systemd/systemd-cgroups-agent \ " -FILES_${PN}-udev-rules = "\ +FILES:${PN}-udev-rules = "\ ${rootlibexecdir}/udev/rules.d/70-uaccess.rules \ ${rootlibexecdir}/udev/rules.d/71-seat.rules \ ${rootlibexecdir}/udev/rules.d/73-seat-late.rules \ ${rootlibexecdir}/udev/rules.d/99-systemd.rules \ " -CONFFILES_${PN} = "${sysconfdir}/systemd/coredump.conf \ +CONFFILES:${PN} = "${sysconfdir}/systemd/coredump.conf \ ${sysconfdir}/systemd/journald.conf \ ${sysconfdir}/systemd/logind.conf \ ${sysconfdir}/systemd/networkd.conf \ @@ -558,7 +563,7 @@ CONFFILES_${PN} = "${sysconfdir}/systemd/coredump.conf \ ${sysconfdir}/systemd/user.conf \ " -FILES_${PN} = " ${base_bindir}/* \ +FILES:${PN} = " ${base_bindir}/* \ ${base_sbindir}/shutdown \ ${base_sbindir}/halt \ ${base_sbindir}/poweroff \ @@ -618,15 +623,16 @@ FILES_${PN} = " ${base_bindir}/* \ ${datadir}/dbus-1/system.d/org.freedesktop.timesync1.conf \ ${datadir}/dbus-1/system.d/org.freedesktop.portable1.conf \ ${datadir}/dbus-1/system.d/org.freedesktop.oom1.conf \ + ${datadir}/dbus-1/system.d/org.freedesktop.home1.conf \ " -FILES_${PN}-dev += "${base_libdir}/security/*.la ${datadir}/dbus-1/interfaces/ ${sysconfdir}/rpm/macros.systemd" +FILES:${PN}-dev += "${base_libdir}/security/*.la ${datadir}/dbus-1/interfaces/ ${sysconfdir}/rpm/macros.systemd" -RDEPENDS_${PN} += "kmod dbus util-linux-mount util-linux-umount udev (= ${EXTENDPKGV}) systemd-udev-rules util-linux-agetty util-linux-fsck" -RDEPENDS_${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'serial-getty-generator', '', 'systemd-serialgetty', d)}" -RDEPENDS_${PN} += "volatile-binds" +RDEPENDS:${PN} += "kmod dbus util-linux-mount util-linux-umount udev (= ${EXTENDPKGV}) systemd-udev-rules util-linux-agetty util-linux-fsck" +RDEPENDS:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'serial-getty-generator', '', 'systemd-serialgetty', d)}" +RDEPENDS:${PN} += "volatile-binds" -RRECOMMENDS_${PN} += "systemd-extra-utils \ +RRECOMMENDS:${PN} += "systemd-extra-utils \ udev-hwdb \ e2fsprogs-e2fsck \ kernel-module-autofs4 kernel-module-unix kernel-module-ipv6 kernel-module-sch-fq-codel \ @@ -634,15 +640,15 @@ RRECOMMENDS_${PN} += "systemd-extra-utils \ systemd-conf \ " -INSANE_SKIP_${PN} += "dev-so libdir" -INSANE_SKIP_${PN}-dbg += "libdir" -INSANE_SKIP_${PN}-doc += " libdir" +INSANE_SKIP:${PN} += "dev-so libdir" +INSANE_SKIP:${PN}-dbg += "libdir" +INSANE_SKIP:${PN}-doc += " libdir" -RPROVIDES_udev = "hotplug" +RPROVIDES:udev = "hotplug" -RDEPENDS_udev-hwdb += "udev" +RDEPENDS:udev-hwdb += "udev" -FILES_udev += "${base_sbindir}/udevd \ +FILES:udev += "${base_sbindir}/udevd \ ${rootlibexecdir}/systemd/network/99-default.link \ ${rootlibexecdir}/systemd/systemd-udevd \ ${rootlibexecdir}/udev/accelerometer \ @@ -686,32 +692,39 @@ FILES_udev += "${base_sbindir}/udevd \ ${rootlibexecdir}/udev/rules.d/78-sound-card.rules \ ${rootlibexecdir}/udev/rules.d/80-drivers.rules \ ${rootlibexecdir}/udev/rules.d/80-net-setup-link.rules \ + ${rootlibexecdir}/udev/rules.d/81-net-dhcp.rules \ ${rootlibexecdir}/udev/rules.d/90-vconsole.rules \ ${rootlibexecdir}/udev/rules.d/README \ ${sysconfdir}/udev \ ${sysconfdir}/init.d/systemd-udevd \ - ${systemd_unitdir}/system/*udev* \ - ${systemd_unitdir}/system/*.wants/*udev* \ + ${systemd_system_unitdir}/*udev* \ + ${systemd_system_unitdir}/*.wants/*udev* \ ${base_bindir}/systemd-hwdb \ ${base_bindir}/udevadm \ ${base_sbindir}/udevadm \ ${libexecdir}/${MLPREFIX}udevadm \ ${datadir}/bash-completion/completions/udevadm \ - ${systemd_unitdir}/system/systemd-hwdb-update.service \ + ${systemd_system_unitdir}/systemd-hwdb-update.service \ " -FILES_udev-hwdb = "${rootlibexecdir}/udev/hwdb.d \ +FILES:udev-hwdb = "${rootlibexecdir}/udev/hwdb.d \ " -RCONFLICTS_${PN} = "tiny-init ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'resolvconf', '', d)}" +RCONFLICTS:${PN} = "tiny-init ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'resolvconf', '', d)}" INITSCRIPT_PACKAGES = "udev" -INITSCRIPT_NAME_udev = "systemd-udevd" -INITSCRIPT_PARAMS_udev = "start 03 S ." +INITSCRIPT_NAME:udev = "systemd-udevd" +INITSCRIPT_PARAMS:udev = "start 03 S ." python __anonymous() { if not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d): d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1") + + if bb.utils.contains('PACKAGECONFIG', 'repart', True, False, d) and not bb.utils.contains('PACKAGECONFIG', 'openssl', True, False, d): + bb.error("PACKAGECONFIG[repart] requires PACKAGECONFIG[openssl]") + + if bb.utils.contains('PACKAGECONFIG', 'homed', True, False, d) and not bb.utils.contains('PACKAGECONFIG', 'userdb openssl cryptsetup', True, False, d): + bb.error("PACKAGECONFIG[homed] requires PACKAGECONFIG[userdb], PACKAGECONFIG[openssl] and PACKAGECONFIG[cryptsetup]") } python do_warn_musl() { @@ -720,7 +733,7 @@ python do_warn_musl() { } addtask warn_musl before do_configure -ALTERNATIVE_${PN} = "halt reboot shutdown poweroff runlevel ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'resolv-conf', '', d)}" +ALTERNATIVE:${PN} = "halt reboot shutdown poweroff runlevel ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'resolv-conf', '', d)}" ALTERNATIVE_TARGET[resolv-conf] = "${sysconfdir}/resolv-conf.systemd" ALTERNATIVE_LINK_NAME[resolv-conf] = "${sysconfdir}/resolv.conf" @@ -746,20 +759,20 @@ ALTERNATIVE_TARGET[runlevel] = "${base_bindir}/systemctl" ALTERNATIVE_LINK_NAME[runlevel] = "${base_sbindir}/runlevel" ALTERNATIVE_PRIORITY[runlevel] ?= "300" -pkg_postinst_${PN}_libc-glibc () { +pkg_postinst:${PN}:libc-glibc () { sed -e '/^hosts:/s/\s*\//' \ -e 's/\(^hosts:.*\)\(\\)\(.*\)\(\\)\(.*\)/\1\2 myhostname \3\4\5/' \ -i $D${sysconfdir}/nsswitch.conf } -pkg_prerm_${PN}_libc-glibc () { +pkg_prerm:${PN}:libc-glibc () { sed -e '/^hosts:/s/\s*\//' \ -e '/^hosts:/s/\s*myhostname//' \ -i $D${sysconfdir}/nsswitch.conf } PACKAGE_WRITE_DEPS += "qemu-native" -pkg_postinst_udev-hwdb () { +pkg_postinst:udev-hwdb () { if test -n "$D"; then $INTERCEPT_DIR/postinst_intercept update_udev_hwdb ${PKG} mlprefix=${MLPREFIX} binprefix=${MLPREFIX} rootlibexecdir="${rootlibexecdir}" PREFERRED_PROVIDER_udev="${PREFERRED_PROVIDER_udev}" else @@ -767,6 +780,6 @@ pkg_postinst_udev-hwdb () { fi } -pkg_prerm_udev-hwdb () { +pkg_prerm:udev-hwdb () { rm -f $D${sysconfdir}/udev/hwdb.bin } From 43e58cbba234edbdb4f23410a12aad745b22868f Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 5 Nov 2021 03:06:49 -0700 Subject: [PATCH 0172/2022] systemd=webos8 (update patches to apply on 249.3 version) :Release Notes: Also add proper .patch headers and use BPN in FILESEXTRAPATHS. :Detailed Notes: Fixes: ERROR: systemd-1_249.3-r0 do_patch: Applying patch '0002-add-webos-interface.patch' on target directory '/jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/systemd/1_249.3-r0/git' Command Error: 'quilt --quiltrc /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/systemd/1_249.3-r0/recipe-sysroot-native/etc/quiltrc push' exited with 0 Output: stdout: Applying patch 0002-add-webos-interface.patch patching file src/oom/com.webos.MemoryManager1.conf patching file src/oom/meson.build patching file src/oom/oomd-manager.c Hunk #3 succeeded at 473 (offset -4 lines). patching file src/oom/oomd.c patching file src/oom/webos-manager-bus.c patching file src/oom/webos-manager-bus.h patching file src/oom/webos-manager.c patching file src/oom/webos-manager.h patching file units/systemd-oomd.service.in Hunk #1 FAILED at 22. 1 out of 1 hunk FAILED -- rejects in file units/systemd-oomd.service.in Patch 0002-add-webos-interface.patch does not apply (enforce with -f) stderr: ERROR: Logfile of failure stored in: /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/systemd/1_249.3-r0/temp/log.do_patch.1987716 ERROR: Task (/jenkins/mjansa/build/webos/honister/oe-core/meta/recipes-core/systemd/systemd_249.3.bb:do_patch) failed with exit code '1' :Testing Performed: Only build tested. :QA Notes: None. :Issues Addressed: [WRN-10062] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I549e0ffb796e88fe6c1221ff84f3c7dc5638ba29 --- ...0001-systemd-oomd-depend-on-swap-on.patch} | 11 +++++- ...e.patch => 0002-Add-webos-interface.patch} | 37 +++++++++++++++---- .../systemd/systemd/0003-oomd-conf.patch | 12 ------ .../0003-systemd-oomd-modify-oomd.conf.patch | 21 +++++++++++ .../recipes-core/systemd/systemd_%.bbappend | 10 ++--- 5 files changed, 65 insertions(+), 26 deletions(-) rename meta-webos/recipes-core/systemd/systemd/{0001-depend-on-swapon.patch => 0001-systemd-oomd-depend-on-swap-on.patch} (60%) rename meta-webos/recipes-core/systemd/systemd/{0002-add-webos-interface.patch => 0002-Add-webos-interface.patch} (86%) delete mode 100644 meta-webos/recipes-core/systemd/systemd/0003-oomd-conf.patch create mode 100644 meta-webos/recipes-core/systemd/systemd/0003-systemd-oomd-modify-oomd.conf.patch diff --git a/meta-webos/recipes-core/systemd/systemd/0001-depend-on-swapon.patch b/meta-webos/recipes-core/systemd/systemd/0001-systemd-oomd-depend-on-swap-on.patch similarity index 60% rename from meta-webos/recipes-core/systemd/systemd/0001-depend-on-swapon.patch rename to meta-webos/recipes-core/systemd/systemd/0001-systemd-oomd-depend-on-swap-on.patch index 5ecf039ea..f1fd37412 100644 --- a/meta-webos/recipes-core/systemd/systemd/0001-depend-on-swapon.patch +++ b/meta-webos/recipes-core/systemd/systemd/0001-systemd-oomd-depend-on-swap-on.patch @@ -1,5 +1,14 @@ +From e30822273d616cf65f4891a7f932eacd6743100a Mon Sep 17 00:00:00 2001 +From: Hotaek Jung +Date: Mon, 12 Jul 2021 19:16:26 +0900 +Subject: [PATCH] systemd-oomd: depend on swap-on + +--- + units/systemd-oomd.service.in | 2 ++ + 1 file changed, 2 insertions(+) + diff --git a/units/systemd-oomd.service.in b/units/systemd-oomd.service.in -index f264a1bef0..f141c94873 100644 +index 0d2d409881..ca3ca8f0a3 100644 --- a/units/systemd-oomd.service.in +++ b/units/systemd-oomd.service.in @@ -12,6 +12,8 @@ Description=Userspace Out-Of-Memory (OOM) Killer diff --git a/meta-webos/recipes-core/systemd/systemd/0002-add-webos-interface.patch b/meta-webos/recipes-core/systemd/systemd/0002-Add-webos-interface.patch similarity index 86% rename from meta-webos/recipes-core/systemd/systemd/0002-add-webos-interface.patch rename to meta-webos/recipes-core/systemd/systemd/0002-Add-webos-interface.patch index 1fda6ef12..a456a9840 100644 --- a/meta-webos/recipes-core/systemd/systemd/0002-add-webos-interface.patch +++ b/meta-webos/recipes-core/systemd/systemd/0002-Add-webos-interface.patch @@ -1,3 +1,25 @@ +From 645e429184f7e3212e16fa1e3060220ae0a2acf1 Mon Sep 17 00:00:00 2001 +From: Hotaek Jung +Date: Mon, 12 Jul 2021 19:16:26 +0900 +Subject: [PATCH] Add webos interface + +--- + src/oom/com.webos.MemoryManager1.conf | 40 ++++++++++++++++++++++++ + src/oom/meson.build | 7 +++++ + src/oom/oomd-manager.c | 7 +++++ + src/oom/oomd.c | 5 +++ + src/oom/webos-manager-bus.c | 31 ++++++++++++++++++ + src/oom/webos-manager-bus.h | 10 ++++++ + src/oom/webos-manager.c | 45 +++++++++++++++++++++++++++ + src/oom/webos-manager.h | 7 +++++ + units/systemd-oomd.service.in | 2 +- + 9 files changed, 153 insertions(+), 1 deletion(-) + create mode 100644 src/oom/com.webos.MemoryManager1.conf + create mode 100644 src/oom/webos-manager-bus.c + create mode 100644 src/oom/webos-manager-bus.h + create mode 100644 src/oom/webos-manager.c + create mode 100644 src/oom/webos-manager.h + diff --git a/src/oom/com.webos.MemoryManager1.conf b/src/oom/com.webos.MemoryManager1.conf new file mode 100644 index 0000000000..cef8430362 @@ -70,7 +92,7 @@ index 4e1c8543c8..ee4c7b13fa 100644 install_dir : dbussystemservicedir) diff --git a/src/oom/oomd-manager.c b/src/oom/oomd-manager.c -index 49dc5eb26e..009fee55e8 100644 +index 9cae0c9c8a..a0ca22fd17 100644 --- a/src/oom/oomd-manager.c +++ b/src/oom/oomd-manager.c @@ -11,6 +11,8 @@ @@ -92,7 +114,7 @@ index 49dc5eb26e..009fee55e8 100644 r = get_monitored_cgroup_contexts_candidates(m->monitored_swap_cgroup_contexts, &candidates); if (r == -ENOMEM) return log_oom(); -@@ -472,6 +477,8 @@ static int monitor_memory_pressure_contexts_handler(sd_event_source *s, uint64_t +@@ -468,6 +473,8 @@ static int monitor_memory_pressure_contexts_handler(sd_event_source *s, uint64_t log_debug_errno(r, "Failed to update monitored memory pressure candidate cgroup contexts, ignoring: %m"); else clear_candidates = NULL; @@ -126,7 +148,7 @@ index deb7b094d5..9645c64bcd 100644 return log_error_errno(r, "Event loop failed: %m"); diff --git a/src/oom/webos-manager-bus.c b/src/oom/webos-manager-bus.c new file mode 100644 -index 0000000000..67809314d4 +index 0000000000..70302125d3 --- /dev/null +++ b/src/oom/webos-manager-bus.c @@ -0,0 +1,31 @@ @@ -242,16 +264,15 @@ index 0000000000..bed7413c6a + +int webos_manager_start(Manager *m); diff --git a/units/systemd-oomd.service.in b/units/systemd-oomd.service.in -index f264a1bef0..31c5921413 100644 +index 8dfc22356e..eaba17cfe5 100644 --- a/units/systemd-oomd.service.in +++ b/units/systemd-oomd.service.in -@@ -22,7 +24,7 @@ ConditionPathExists=/proc/pressure/memory +@@ -25,7 +25,7 @@ ConditionPathExists=/proc/pressure/memory AmbientCapabilities=CAP_KILL CAP_DAC_OVERRIDE BusName=org.freedesktop.oom1 CapabilityBoundingSet=CAP_KILL CAP_DAC_OVERRIDE --ExecStart=@rootlibexecdir@/systemd-oomd -+ExecStart=@rootlibexecdir@/systemd-oomd --dry-run +-ExecStart={{ROOTLIBEXECDIR}}/systemd-oomd ++ExecStart={{ROOTLIBEXECDIR}}/systemd-oomd --dry-run IPAddressDeny=any LockPersonality=yes MemoryDenyWriteExecute=yes - diff --git a/meta-webos/recipes-core/systemd/systemd/0003-oomd-conf.patch b/meta-webos/recipes-core/systemd/systemd/0003-oomd-conf.patch deleted file mode 100644 index 6b458460a..000000000 --- a/meta-webos/recipes-core/systemd/systemd/0003-oomd-conf.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff --git a/src/oom/oomd.conf b/src/oom/oomd.conf -index b3a457f887..7c0265f302 100644 ---- a/src/oom/oomd.conf -+++ b/src/oom/oomd.conf -@@ -16,5 +16,5 @@ - - [OOM] - #SwapUsedLimit=90% --#DefaultMemoryPressureLimit=60% --#DefaultMemoryPressureDurationSec=30s -+DefaultMemoryPressureLimit=0.05% -+DefaultMemoryPressureDurationSec=1s diff --git a/meta-webos/recipes-core/systemd/systemd/0003-systemd-oomd-modify-oomd.conf.patch b/meta-webos/recipes-core/systemd/systemd/0003-systemd-oomd-modify-oomd.conf.patch new file mode 100644 index 000000000..66c98f83c --- /dev/null +++ b/meta-webos/recipes-core/systemd/systemd/0003-systemd-oomd-modify-oomd.conf.patch @@ -0,0 +1,21 @@ +From b2f676e891c6c2873a3be575922db4942d6dcd5d Mon Sep 17 00:00:00 2001 +From: Hotaek Jung +Date: Mon, 12 Jul 2021 19:16:26 +0900 +Subject: [PATCH] systemd-oomd: modify oomd.conf + +--- + src/oom/oomd.conf | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/oom/oomd.conf b/src/oom/oomd.conf +index b3a457f887..e19052d0f8 100644 +--- a/src/oom/oomd.conf ++++ b/src/oom/oomd.conf +@@ -16,5 +16,5 @@ + + [OOM] + #SwapUsedLimit=90% +-#DefaultMemoryPressureLimit=60% +-#DefaultMemoryPressureDurationSec=30s ++DefaultMemoryPressureLimit=0.05% ++DefaultMemoryPressureDurationSec=1s diff --git a/meta-webos/recipes-core/systemd/systemd_%.bbappend b/meta-webos/recipes-core/systemd/systemd_%.bbappend index 36747199d..d78f717a3 100644 --- a/meta-webos/recipes-core/systemd/systemd_%.bbappend +++ b/meta-webos/recipes-core/systemd/systemd_%.bbappend @@ -1,12 +1,12 @@ # Copyright (c) 2017-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos7" -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" +EXTENDPRAUTO_append = "webos8" +FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" SRC_URI_append_webos = " \ - file://0001-depend-on-swapon.patch \ - file://0002-add-webos-interface.patch \ - file://0003-oomd-conf.patch \ + file://0001-systemd-oomd-depend-on-swap-on.patch \ + file://0002-Add-webos-interface.patch \ + file://0003-systemd-oomd-modify-oomd.conf.patch \ " inherit webos_prerelease_dep From 68ed9ac97fea5ff4a14431742d6a393d315da958 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 29 Jul 2021 03:45:02 -0700 Subject: [PATCH 0173/2022] systemd=smack4 (update patch to apply on 249.1) :Release Notes: :Detailed Notes: Fixes: ERROR: systemd-1_249.1-r0-lg1 do_patch: Fuzz detected: Applying patch 0001-meson-add-smack-default-process-label-option.patch patching file meson.build Hunk #1 succeeded at 1017 with fuzz 2 (offset 145 lines). patching file meson_options.txt Hunk #1 succeeded at 332 (offset 91 lines). The context lines in the patches can be updated with devtool: devtool modify systemd devtool finish --force-patch-refresh systemd Don't forget to review changes done by devtool! ERROR: systemd-1_249.1-r0-lg1 do_patch: QA Issue: Patch log indicates that patches do not apply cleanly. [patch-fuzz] Adjust 0001-fileio.c-fix-build-with-smack-enabled.patch to include src/shared, because after the cleanup from: commit 8d40961c3c64cbeebe8ca5b47693f277c6763e28 Author: Yu Watanabe Date: Mon Jan 4 23:36:00 2021 +0900 meson: slightly disentangle code dependencies But, still sd-id128 is used in src/basic. the src/shared with smack-util.h is no longer included when building src/basic. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [PLAT-141293] Create GPVB with Yocto 3.4 Honister [WRN-10062] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: Ia4ed473ef4e9c193ea15a1fd70fd9762f2b3f781 --- ...1-SMACK-add-loading-unconfined-label.patch | 2 +- ...ileio.c-fix-build-with-smack-enabled.patch | 22 +++++++++++++++---- ...d-smack-default-process-label-option.patch | 14 ++++++------ .../recipes-core/systemd/systemd_%.bbappend | 2 +- 4 files changed, 27 insertions(+), 13 deletions(-) diff --git a/meta-webos-smack/recipes-core/systemd/files/0001-SMACK-add-loading-unconfined-label.patch b/meta-webos-smack/recipes-core/systemd/files/0001-SMACK-add-loading-unconfined-label.patch index 1eb48ba66..2bccac0b4 100644 --- a/meta-webos-smack/recipes-core/systemd/files/0001-SMACK-add-loading-unconfined-label.patch +++ b/meta-webos-smack/recipes-core/systemd/files/0001-SMACK-add-loading-unconfined-label.patch @@ -84,7 +84,7 @@ index 8cc1696a4f..c2b97ad10c 100644 return log_emergency_errno(r, "Failed to write Smack onlycap list: %m"); } -+ r = write_unconfined(); ++ r = write_unconfined(); + switch(r) { + case -ENOENT: + log_debug("Smack is not enabled in the kernel."); diff --git a/meta-webos-smack/recipes-core/systemd/files/0001-fileio.c-fix-build-with-smack-enabled.patch b/meta-webos-smack/recipes-core/systemd/files/0001-fileio.c-fix-build-with-smack-enabled.patch index 90bfaab4e..2f223b134 100644 --- a/meta-webos-smack/recipes-core/systemd/files/0001-fileio.c-fix-build-with-smack-enabled.patch +++ b/meta-webos-smack/recipes-core/systemd/files/0001-fileio.c-fix-build-with-smack-enabled.patch @@ -1,4 +1,4 @@ -From ba4607c9bc28fd2f93d49f5c60174994fb597bd8 Mon Sep 17 00:00:00 2001 +From ef79a7645f3c0a42b76ac5b8e63bb01dcf0f0bc7 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 21 Aug 2020 13:50:06 -0700 Subject: [PATCH] fileio.c: fix build with smack enabled @@ -22,11 +22,12 @@ cc1: some warnings being treated as errors Signed-off-by: Martin Jansa --- - src/basic/fileio.c | 1 + - 1 file changed, 1 insertion(+) + src/basic/fileio.c | 1 + + src/basic/meson.build | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/basic/fileio.c b/src/basic/fileio.c -index c3d55d209a..d94fee9234 100644 +index 99a44fdea2..5561315e70 100644 --- a/src/basic/fileio.c +++ b/src/basic/fileio.c @@ -23,6 +23,7 @@ @@ -37,3 +38,16 @@ index c3d55d209a..d94fee9234 100644 #include "stdio-util.h" #include "string-util.h" #include "tmpfile-util.h" +diff --git a/src/basic/meson.build b/src/basic/meson.build +index 9b016ce5e8..eb1e43bfad 100644 +--- a/src/basic/meson.build ++++ b/src/basic/meson.build +@@ -370,7 +370,7 @@ libbasic = static_library( + 'basic', + basic_sources, + fundamental_sources, +- include_directories : basic_includes, ++ include_directories : [basic_includes, include_directories('../shared')], + dependencies : [versiondep, + threads, + libcap, diff --git a/meta-webos-smack/recipes-core/systemd/files/0001-meson-add-smack-default-process-label-option.patch b/meta-webos-smack/recipes-core/systemd/files/0001-meson-add-smack-default-process-label-option.patch index ac566a9db..ab6864d14 100644 --- a/meta-webos-smack/recipes-core/systemd/files/0001-meson-add-smack-default-process-label-option.patch +++ b/meta-webos-smack/recipes-core/systemd/files/0001-meson-add-smack-default-process-label-option.patch @@ -1,4 +1,4 @@ -From 9b69bf2a8f1f47cfd89cf76102b75ab6afa7c3ad Mon Sep 17 00:00:00 2001 +From a7059bf28303504e77650d18806230c041af6fc8 Mon Sep 17 00:00:00 2001 From: "eugene.todoruk" Date: Wed, 29 May 2019 12:32:32 +0300 Subject: [PATCH] meson: add smack-default-process-label option @@ -9,12 +9,12 @@ Subject: [PATCH] meson: add smack-default-process-label option 2 files changed, 7 insertions(+) diff --git a/meson.build b/meson.build -index 79b762faeb..b0e13f5df1 100644 +index c6167b93eb..f79a2d0f8f 100644 --- a/meson.build +++ b/meson.build -@@ -872,6 +872,11 @@ if smack_run_label != '' - conf.set_quoted('SMACK_RUN_LABEL', smack_run_label) - endif +@@ -1017,6 +1017,11 @@ conf.set10('HAVE_APPARMOR', have) + conf.set10('HAVE_SMACK_RUN_LABEL', get_option('smack-run-label') != '') + conf.set_quoted('SMACK_RUN_LABEL', get_option('smack-run-label')) +smack_default_process_label = get_option('smack-default-process-label') +if smack_default_process_label != '' @@ -25,10 +25,10 @@ index 79b762faeb..b0e13f5df1 100644 install_polkit = false install_polkit_pkla = false diff --git a/meson_options.txt b/meson_options.txt -index 5dc898eb80..f5e0146664 100644 +index 82ef983d22..3831b758bc 100644 --- a/meson_options.txt +++ b/meson_options.txt -@@ -241,6 +241,8 @@ option('smack', type : 'boolean', +@@ -332,6 +332,8 @@ option('smack', type : 'boolean', description : 'SMACK support') option('smack-run-label', type : 'string', description : 'run systemd --system itself with a specific SMACK label') diff --git a/meta-webos-smack/recipes-core/systemd/systemd_%.bbappend b/meta-webos-smack/recipes-core/systemd/systemd_%.bbappend index 14550f448..c585ff346 100644 --- a/meta-webos-smack/recipes-core/systemd/systemd_%.bbappend +++ b/meta-webos-smack/recipes-core/systemd/systemd_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2019-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack3', '', d)}" +EXTENDPRAUTO_append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack4', '', d)}" FILESEXTRAPATHS_prepend := "${THISDIR}/files:" From d654113c41018a246dc53391bac2eaf25cc63417 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 5 Nov 2021 15:02:11 -0700 Subject: [PATCH 0174/2022] mksnapshot-cross=91-r1 (inherit pkgconfig) :Release Notes: Newer oe-core doesn't pull many default dependencies anymore: https://lists.openembedded.org/g/openembedded-core/message/156185 add explicit dependency on pkgconfig through pkgconfig.bbclass as we're using it here. :Detailed Notes: This needs pkgconfig inherit, just like the verions 87 in: commit dba580d2175fdfb71dfc4347d0c4a45299844c39 Author: Martin Jansa Date: Tue Sep 21 06:51:54 2021 -0700 mksnaphost-cross=r2 (inherit pkgconfig) Fixes: http://gecko.lge.com/Errors/Details/241331 BUILD_TARGETS are v8_snapshot_clang_x86/mksnapshot ERROR at //build/config/linux/pkg_config.gni:103:17: Script returned non-zero exit code. pkgresult = exec_script(pkg_config_script, args, "value") ^---------- Current dir: TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-i686/87.0.4280.88-8-r1/build/Release/ Command: python TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-i686/87.0.4280.88-8-r1/git/src/build/config/linux/pkg-config.py -s TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-i686/87.0.4280.88-8-r1/recipe-sysroot-native -a x86 --system_libdir lib glib-2.0 gmodule-2.0 gobject-2.0 gthread-2.0 Returned 1. stderr: Traceback (most recent call last): File "TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-i686/87.0.4280.88-8-r1/git/src/build/config/linux/pkg-config.py", line 253, in sys.exit(main()) File "TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-i686/87.0.4280.88-8-r1/git/src/build/config/linux/pkg-config.py", line 148, in main prefix = GetPkgConfigPrefixToStrip(options, args) File "TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-i686/87.0.4280.88-8-r1/git/src/build/config/linux/pkg-config.py", line 87, in GetPkgConfigPrefixToStrip "--variable=prefix"] + args, env=os.environ).decode('utf-8') File "TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-i686/87.0.4280.88-8-r1/recipe-sysroot-native/usr/lib/python2.7/subprocess.py", line 216, in check_output process = Popen(stdout=PIPE, *popenargs, **kwargs) File "TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-i686/87.0.4280.88-8-r1/recipe-sysroot-native/usr/lib/python2.7/subprocess.py", line 394, in __init__ errread, errwrite) File "TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-i686/87.0.4280.88-8-r1/recipe-sysroot-native/usr/lib/python2.7/subprocess.py", line 1047, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory See //build/config/linux/BUILD.gn:55:3: whence it was called. pkg_config("glib") { ^------------------- See //build/config/compiler/BUILD.gn:250:18: which caused the file to be included. configs += [ "//build/config/linux:compiler" ] ^------------------------------ :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRN-7597] CCC: Various build fixes [WRN-3095] Create RP fork of neva 1.5 release [WRN-6489] Prepare OSE build with chromium91 [WRN-10062] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: If97c2f3309933fa0d22f9f560c2b84fc66743ee5 --- meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb b/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb index f47559256..8d8457dcc 100644 --- a/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb +++ b/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb @@ -1,6 +1,7 @@ # Copyright (c) 2021 LG Electronics, Inc. inherit cross +inherit pkgconfig WEBRUNTIME_REPO_VERSION = "91" require webruntime-common.inc @@ -13,7 +14,7 @@ UNINATIVE_LOADER = "" PROVIDES = "mksnapshot-cross-${TARGET_ARCH}" PN = "mksnapshot-cross-${TARGET_ARCH}" BPN = "mksnapshot" -PR = "r0" +PR = "r1" TARGET = "v8_snapshot_clang_${TARGET_CPU}/mksnapshot" From 06baa7fadef8368d9b6825488c5051b9ce7558a3 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sun, 7 Nov 2021 04:13:15 -0800 Subject: [PATCH 0175/2022] libgoogleassistant=r7 com.webos.service.ai=r7 (add COMPATIBLE_MACHINE restriction) :Release Notes: From meta-webos/recipes-upstreamable/snowboy/snowboy_%.bbappend :Detailed Notes: Fixes: ERROR: Nothing PROVIDES 'snowboy' (but /jenkins/home/anaconda/build-webos-ose-kirkstone/build/meta-webosose/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb DEPENDS on or otherwise requires it) snowboy was skipped: incompatible with machine qemux86 (not in COMPATIBLE_MACHINE) ERROR: Nothing RPROVIDES 'libgoogleassistant-dev' (but /jenkins/home/anaconda/build-webos-ose-kirkstone/build/meta-webosose/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb RDEPENDS on or otherwise requires it) No eligible RPROVIDERs exist for 'libgoogleassistant-dev' NOTE: Runtime target 'libgoogleassistant-dev' is unbuildable, removing... Missing or unbuildable dependency chain was: ['libgoogleassistant-dev'] ERROR: Nothing RPROVIDES 'snowboy-models' (but /jenkins/home/anaconda/build-webos-ose-kirkstone/build/meta-webosose/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb RDEPENDS on or otherwise requires it) snowboy RPROVIDES snowboy-models but was skipped: incompatible with machine qemux86 (not in COMPATIBLE_MACHINE) NOTE: Runtime target 'snowboy-models' is unbuildable, removing... Missing or unbuildable dependency chain was: ['snowboy-models'] ERROR: Nothing RPROVIDES 'libgoogleassistant' (but /jenkins/home/anaconda/build-webos-ose-kirkstone/build/meta-webosose/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb RDEPENDS on or otherwise requires it) No eligible RPROVIDERs exist for 'libgoogleassistant' NOTE: Runtime target 'libgoogleassistant' is unbuildable, removing... Missing or unbuildable dependency chain was: ['libgoogleassistant'] ERROR: Nothing RPROVIDES 'com.webos.service.ai-dev' (but /jenkins/home/anaconda/build-webos-ose-kirkstone/build/meta-webosose/meta-webos/recipes-webos/com.webos.service.ai/com.webos.service.ai.bb RDEPENDS on or otherwise requires it) No eligible RPROVIDERs exist for 'com.webos.service.ai-dev' NOTE: Runtime target 'com.webos.service.ai-dev' is unbuildable, removing... Missing or unbuildable dependency chain was: ['com.webos.service.ai-dev'] ERROR: Nothing RPROVIDES 'com.webos.service.ai' (but /jenkins/home/anaconda/build-webos-ose-kirkstone/build/meta-webosose/meta-webos/recipes-webos/com.webos.service.ai/com.webos.service.ai.bb RDEPENDS on or otherwise requires it) No eligible RPROVIDERs exist for 'com.webos.service.ai' NOTE: Runtime target 'com.webos.service.ai' is unbuildable, removing... Missing or unbuildable dependency chain was: ['com.webos.service.ai'] :Testing Performed: Only build tested. :QA Notes: None. :Issues Addressed: [WRN-10062] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I36c30bd5c22bfeee84e3363bd36c3f554e1f5156 --- .../com.webos.service.ai/com.webos.service.ai.bb | 7 ++++++- .../recipes-webos/libgoogleassistant/libgoogleassistant.bb | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/com.webos.service.ai/com.webos.service.ai.bb b/meta-webos/recipes-webos/com.webos.service.ai/com.webos.service.ai.bb index baf36d3c8..900be4fd9 100644 --- a/meta-webos/recipes-webos/com.webos.service.ai/com.webos.service.ai.bb +++ b/meta-webos/recipes-webos/com.webos.service.ai/com.webos.service.ai.bb @@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 luna-service2 json-c pmloglib libgoogleassistant" WEBOS_VERSION = "1.0.0-11_6bc7a16f334f58dfa4b439b6f849d79a1b72871b" -PR = "r6" +PR = "r7" inherit systemd inherit webos_public_repo @@ -25,3 +25,8 @@ inherit webos_machine_impl_dep SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" + +# The same restriction as in +# meta-webos/recipes-upstreamable/snowboy/snowboy_%.bbappend +# libgoogleassistant depends on snowboy +COMPATIBLE_MACHINE = "rpi|aarch64|x86-64|qemux86-64" diff --git a/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb b/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb index b8a4d83f6..30e28f6d7 100644 --- a/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb +++ b/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb @@ -16,7 +16,7 @@ VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS_${PN}_class-target += "${VIRTUAL-RUNTIME_bash}" WEBOS_VERSION = "1.0.1-9_33a4b718c378e8b54330dece6093c7b0ea716316" -PR = "r6" +PR = "r7" inherit webos_library inherit webos_cmake @@ -30,3 +30,8 @@ S = "${WORKDIR}/git" EXTRA_OECMAKE += "-DGOOGLEAPIS_PATH=${STAGING_INCDIR}/google" INSANE_SKIP_${PN} = "textrel" + +# The same restriction as in +# meta-webos/recipes-upstreamable/snowboy/snowboy_%.bbappend +# as this depends on snowboy +COMPATIBLE_MACHINE = "rpi|aarch64|x86-64|qemux86-64" From 2c2cb0c93d2b9430caf476fcb9a69e229da4f3ca Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 5 Nov 2021 06:14:29 -0700 Subject: [PATCH 0176/2022] audiod=r31 (move /media/internal/systemsounds to /usr/share/systemsounds) :Release Notes: /media directory isn't handled by OTA and should be empty as new empty-dirs QA checks. :Detailed Notes: Fixes: NOTE: Running task 1613 of 1615 (/jenkins/mjansa/build/webos/kirkstone/meta-lg-webos/meta-webos/recipes-multimedia/audiod/audiod.bb:do_package_qa) NOTE: recipe audiod-1.0.0-33-r30: task do_package_qa: Started ERROR: audiod-1.0.0-33-r30 do_package_qa: QA Issue: audiod installs files in /media, but it is expected to be empty [empty-dirs] ERROR: audiod-1.0.0-33-r30 do_package_qa: Fatal QA errors were found, failing task. ERROR: Logfile of failure stored in: /jenkins/mjansa/build/webos/kirkstone/BUILD/work/qemux86-webos-linux/audiod/1.0.0-33-r30/temp/log.do_package_qa.1239246 NOTE: recipe audiod-1.0.0-33-r30: task do_package_qa: Failed ERROR: Task (/jenkins/mjansa/build/webos/kirkstone/meta-lg-webos/meta-webos/recipes-multimedia/audiod/audiod.bb:do_package_qa) failed with exit code '1' Also remove 2 unused patches which were removed from SRC_URI in: commit 810fa42572ed7469e40737aaf301a82080c75bbe Author: Velicheti Sita Date: Thu Aug 13 17:33:55 2020 +0000 ose: audiod=19-r29 pulseaudio=22-r23 And remove /data and ${datadir}/alsa from FILES:${PN}, these don't exist. :Testing Performed: Only build tested. :QA Notes: None. :Issues Addressed: [WRN-10062] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell [PLAT-86306] [webOS OSE]: Error text "Invalid 'name' string parameter is displayed". Change-Id: I2a977cecfbc56bec2250817c778ba585e1d684a4 --- .../recipes-multimedia/audiod/audiod.bb | 8 +-- ...-Drop-2nd-call-to-find_package-Boost.patch | 61 ------------------- ...ove-systemsounds-from-media-internal.patch | 36 +++++++++++ .../0001-Fix-build-with-boost-1.73.0.patch | 33 ---------- 4 files changed, 40 insertions(+), 98 deletions(-) delete mode 100644 meta-webos/recipes-multimedia/audiod/audiod/0001-CMakeLists.txt-Drop-2nd-call-to-find_package-Boost.patch create mode 100644 meta-webos/recipes-multimedia/audiod/audiod/0001-CmakeLists.txt-move-systemsounds-from-media-internal.patch delete mode 100644 meta-webos/recipes-multimedia/audiod/audiod/0001-Fix-build-with-boost-1.73.0.patch diff --git a/meta-webos/recipes-multimedia/audiod/audiod.bb b/meta-webos/recipes-multimedia/audiod/audiod.bb index 8de7efaeb..570fe4dbd 100644 --- a/meta-webos/recipes-multimedia/audiod/audiod.bb +++ b/meta-webos/recipes-multimedia/audiod/audiod.bb @@ -24,7 +24,7 @@ RDEPENDS_${PN} = "\ " WEBOS_VERSION = "1.0.0-33_74ed31aea11d95bacaf22682b8c0651d0ed02357" -PR = "r30" +PR = "r31" inherit webos_component inherit webos_enhanced_submissions @@ -46,6 +46,6 @@ EXTRA_OECMAKE += "${@bb.utils.contains('WEBOS_LTTNG_ENABLED', '1', '-DWEBOS_LTTN EXTRA_OECMAKE += "-DAUDIOD_PALM_LEGACY:BOOLEAN=True" EXTRA_OECMAKE += "-DAUDIOD_TEST_API:BOOLEAN=True" -FILES_${PN} += "${datadir}/alsa/" -FILES_${PN} += "/data" -FILES_${PN} += "${webos_mediadir}/internal" +FILES:${PN} += "${datadir}/systemsounds" + +SRC_URI += "file://0001-CmakeLists.txt-move-systemsounds-from-media-internal.patch" diff --git a/meta-webos/recipes-multimedia/audiod/audiod/0001-CMakeLists.txt-Drop-2nd-call-to-find_package-Boost.patch b/meta-webos/recipes-multimedia/audiod/audiod/0001-CMakeLists.txt-Drop-2nd-call-to-find_package-Boost.patch deleted file mode 100644 index 2cf08bb2f..000000000 --- a/meta-webos/recipes-multimedia/audiod/audiod/0001-CMakeLists.txt-Drop-2nd-call-to-find_package-Boost.patch +++ /dev/null @@ -1,61 +0,0 @@ -From ce75c59f23289b8765673233bac7052ccf850752 Mon Sep 17 00:00:00 2001 -From: Martin Jansa -Date: Wed, 1 Jan 2020 10:17:49 -0800 -Subject: [PATCH] CMakeLists.txt: Drop 2nd call to find_package Boost - -* fixes build with Boost 1.72.0 where it was failing, because this call has - Boost_USE_MULTITHREADED OFF - and the later call has - Boost_USE_MULTITHREADED ON - --- Adding -DWEBOS_TARGET_MACHINE_QEMUX86 -CMake Error at /jenkins/mjansa/build-ros/webos-dashing-master/tmp-glibc/work/qemux86-webos-linux/audiod/1.0.0-12-r25/recipe-sysroot/usr/lib/cmake/Boost-1.72.0/BoostConfig.cmake:120 (find_package): - Found package configuration file: - - /jenkins/mjansa/build-ros/webos-dashing-master/tmp-glibc/work/qemux86-webos-linux/audiod/1.0.0-12-r25/recipe-sysroot/usr/lib/cmake/boost_regex-1.72.0/boost_regex-config.cmake - - but it set boost_regex_FOUND to FALSE so package "boost_regex" is - considered to be NOT FOUND. Reason given by package: - - No suitable build variant has been found. - - The following variants have been tried and rejected: - - * libboost_regex.so.1.72.0 (multithreaded, Boost_USE_MULTITHREADED=OFF) - - * libboost_regex.a (static, Boost_USE_STATIC_LIBS=OFF) - -Call Stack (most recent call first): - /jenkins/mjansa/build-ros/webos-dashing-master/tmp-glibc/work/qemux86-webos-linux/audiod/1.0.0-12-r25/recipe-sysroot/usr/lib/cmake/Boost-1.72.0/BoostConfig.cmake:185 (boost_find_component) - /jenkins/mjansa/build-ros/webos-dashing-master/tmp-glibc/work/qemux86-webos-linux/audiod/1.0.0-12-r25/recipe-sysroot-native/usr/share/cmake-3.16/Modules/FindBoost.cmake:443 (find_package) - CMakeLists.txt:35 (find_package) - --- Configuring incomplete, errors occurred! -See also "/jenkins/mjansa/build-ros/webos-dashing-master/tmp-glibc/work/qemux86-webos-linux/audiod/1.0.0-12-r25/build/CMakeFiles/CMakeOutput.log". - -Signed-off-by: Martin Jansa ---- - CMakeLists.txt | 7 ------- - 1 file changed, 7 deletions(-) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index c800a07..e983a26 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -28,13 +28,6 @@ webos_add_compiler_flags(ALL "-Wall") - - webos_machine_dep() - --# These variables can change the default behaviour and need to be set before calling find_package --set(Boost_USE_STATIC_LIBS OFF) --set(Boost_USE_MULTITHREADED OFF) --set(Boost_USE_STATIC_RUNTIME OFF) --find_package(Boost REQUIRED COMPONENTS regex system filesystem) --include_directories(Boost_INCLUDE_DIRS) -- - include(FindPkgConfig) - - pkg_check_modules(GLIB2 REQUIRED glib-2.0) --- -2.17.1 - diff --git a/meta-webos/recipes-multimedia/audiod/audiod/0001-CmakeLists.txt-move-systemsounds-from-media-internal.patch b/meta-webos/recipes-multimedia/audiod/audiod/0001-CmakeLists.txt-move-systemsounds-from-media-internal.patch new file mode 100644 index 000000000..d6bee58a8 --- /dev/null +++ b/meta-webos/recipes-multimedia/audiod/audiod/0001-CmakeLists.txt-move-systemsounds-from-media-internal.patch @@ -0,0 +1,36 @@ +From 041394a10565ca6b0914c5f0b621f83305a6fc03 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Fri, 5 Nov 2021 07:00:12 -0700 +Subject: [PATCH] CmakeLists.txt: move systemsounds from /media/internal to + /usr/data + +Signed-off-by: Martin Jansa +--- + CMakeLists.txt | 4 ++-- + include/log.h | 0 + src/modules/deviceManager/udevDeviceManager.h | 0 + 3 files changed, 2 insertions(+), 2 deletions(-) + mode change 100755 => 100644 include/log.h + mode change 100755 => 100644 src/modules/deviceManager/udevDeviceManager.h + +diff --git a/CMakeLists.txt b/CMakeLists.txt +index b0eccfe..b0b7399 100644 +--- a/CMakeLists.txt ++++ b/CMakeLists.txt +@@ -136,8 +136,8 @@ SET (modules_files + + add_definitions(-DDEVICE_NAME="Unknown") + add_definitions(-DDEVICE_ENUM=eDevice_unknown) +- add_definitions(-DSYSTEMSOUNDS_PATH="/media/internal/systemsounds/") +- install(DIRECTORY "${PROJECT_SOURCE_DIR}/files/share/sounds/systemsounds" DESTINATION ${WEBOS_INSTALL_MEDIADIR}/internal FILES_MATCHING PATTERN "*.pcm") ++ add_definitions(-DSYSTEMSOUNDS_PATH="${WEBOS_INSTALL_DATADIR}/systemsounds/") ++ install(DIRECTORY "${PROJECT_SOURCE_DIR}/files/share/sounds/systemsounds" DESTINATION ${WEBOS_INSTALL_DATADIR} FILES_MATCHING PATTERN "*.pcm") + install(FILES files/config/audiod_sink_volume_policy_config.json DESTINATION ${WEBOS_INSTALL_WEBOS_SYSCONFDIR}/audiod) + install(FILES files/config/audiod_source_volume_policy_config.json DESTINATION ${WEBOS_INSTALL_WEBOS_SYSCONFDIR}/audiod) + install(FILES files/config/audiod_module_config.json DESTINATION ${WEBOS_INSTALL_WEBOS_SYSCONFDIR}/audiod) +diff --git a/include/log.h b/include/log.h +old mode 100755 +new mode 100644 +diff --git a/src/modules/deviceManager/udevDeviceManager.h b/src/modules/deviceManager/udevDeviceManager.h +old mode 100755 +new mode 100644 diff --git a/meta-webos/recipes-multimedia/audiod/audiod/0001-Fix-build-with-boost-1.73.0.patch b/meta-webos/recipes-multimedia/audiod/audiod/0001-Fix-build-with-boost-1.73.0.patch deleted file mode 100644 index 5148c9d87..000000000 --- a/meta-webos/recipes-multimedia/audiod/audiod/0001-Fix-build-with-boost-1.73.0.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 2a231a003b8c4320b585fad92ee77adbad9fda47 Mon Sep 17 00:00:00 2001 -From: Martin Jansa -Date: Thu, 4 Jun 2020 16:15:22 -0700 -Subject: [PATCH] Fix build with boost-1.73.0 - -audiod/1.0.0-13-r25/git/src/state.cpp:90:75: error: '_1' was not declared in this scope -audiod/1.0.0-13-r25/git/src/state.cpp:225:76: error: '_1' was not declared in this scope ---- - src/state.cpp | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/state.cpp b/src/state.cpp -index 1feeeaf..2fc55a3 100644 ---- a/src/state.cpp -+++ b/src/state.cpp -@@ -87,7 +87,7 @@ public: - PhoneCallHandler() - { - IPC_SharedAudiodProperties::getInstance()->mPhoneStatus.sendChanges -- (boost::bind(&PhoneCallHandler::phoneStatusChanged, this, _1)); -+ (boost::bind(&PhoneCallHandler::phoneStatusChanged, this, boost::placeholders::_1)); - } - - void phoneStatusChanged(const EPhoneStatus & phoneStatus) -@@ -222,7 +222,7 @@ void State::init() - gAudiodProperties->mDisplayOn.sendChanges(&onDisplayOnChanged); - gAudiodProperties->mAudiodCmd.setSetPropertyBehavior(new SetAudiodCommandBehavior()); - gAudiodProperties->mRecordingAudio.sendChanges(boost:: -- bind(&State::setMediaServerIsRecording, &gState, _1)); -+ bind(&State::setMediaServerIsRecording, &gState, boost::placeholders::_1)); - try - { - gAudiodProperties->mRingerOn.set(false); From 6f1d0fcec2fb90d56ab2c0ab2bc6af5f50f32988 Mon Sep 17 00:00:00 2001 From: "charles20.kelvin" Date: Tue, 9 Nov 2021 20:00:43 +0530 Subject: [PATCH 0177/2022] ose: luna-service2=23 :Release Notes: Fix memory leak in OSE :Detailed Notes: luna-service2: submissions/22..submissions/23 cb41d1b Fix Memory Leak issue :Testing Performed: Build Successful See WRN-8226 for results :QA Notes: N/A :Issues Addressed: [WRN-8226] Memory leak at Luna Service when handle luna request [WRN-10743] CCC: ose: luna-service2=23 Change-Id: I125e79f62f314dd8965ef4107a7455826fdec18a --- meta-webos/recipes-webos/luna-service2/luna-service2.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/luna-service2/luna-service2.bb b/meta-webos/recipes-webos/luna-service2/luna-service2.bb index a6dc0a155..07b2c491e 100644 --- a/meta-webos/recipes-webos/luna-service2/luna-service2.bb +++ b/meta-webos/recipes-webos/luna-service2/luna-service2.bb @@ -14,7 +14,7 @@ VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS_${PN} = "luna-service2-security-conf ${VIRTUAL-RUNTIME_cpushareholder} ${VIRTUAL-RUNTIME_bash}" -WEBOS_VERSION = "3.21.2-22_1733cfabcffc582d65844b3161a53f98bc86a241" +WEBOS_VERSION = "3.21.2-23_2275e2850db459dc951d1140b08d54dfefd48dfa" PR = "r28" EXTRA_OECMAKE += "${@ '-DWEBOS_DISTRO_PRERELEASE:STRING="devel"' \ From b9eca5ea5084c9ccc9d9dca841751ddd8a813bc9 Mon Sep 17 00:00:00 2001 From: "gajendra.kn" Date: Thu, 11 Nov 2021 16:40:04 +0530 Subject: [PATCH 0178/2022] ose: luna-sysservice=18 :Release Notes: Fix crash issue in TzParser :Detailed Notes: - Service crash is observed while getTimeZoneRules for Asia/Seoul - Fix is provided in parsing the zoneinfo file luna-sysservice: submissions/17..submissions/18 77a843d Fix crash issue in TzParser :Testing Performed: Refer WRN-7600 for test results :QA Notes: N/A :Issues Addressed: [WRN-10749] [OSE] method timezone/gettimeZoneRules' test steps 3, 5 raise FAIL [WRN-7600] CCC : ose: luna-sysservice=18 Change-Id: Ic513cf2adfb071e20c0d2ff90305608766551401 --- meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb b/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb index 6017aace6..31464c57e 100644 --- a/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb +++ b/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb @@ -14,7 +14,7 @@ DEPENDS = "luna-service2 libpbnjson qtbase uriparser libxml2 sqlite3 pmloglib ny RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_ntp} tzcode" -WEBOS_VERSION = "4.4.0-17_a6b79399204c0927ef80028faaeb995862d777a3" +WEBOS_VERSION = "4.4.0-18_0e7133b7d1600df5ba3dc02266f6ea9ebe5669b0" PR = "r9" inherit webos_component From e2989dc1a2b4421d6eb5d88fb4bf76827aa2c3eb Mon Sep 17 00:00:00 2001 From: Wanchang Ryu Date: Tue, 2 Nov 2021 17:37:48 +0900 Subject: [PATCH 0179/2022] ose: webruntime=r52 :Release Notes: - Modified exportbuildscript to support chromium91 build. - Fix build issue with x86 architecture :Detailed Notes: This patch is for supporting chromium91 standalone build. - Considering more syntax for GN_ARGS statememt - Disable sdk sysroot for building executable for host - Use host-pkg-config tool for building executable for host This patch also includes a fix for x86 target machine. :Testing Performed: - Run exportbuildscript task for webruntime. - Copy generated build.sh to chromium91 directory - Prepare sdk env and build chromium91 by build.sh Check build completed without an error. :QA Notes: :Issues Addressed: [WRN-9961] Support chromium build separation [WRN-4746] Cleanup options for x64 cross build [WRN-10723] ose: webruntime=r52 Change-Id: I6385c0decd25dc3e62c397b298a3600283c15343 --- .../chromium/exportbuildscript.inc | 48 +++++++++++++++++-- .../chromium/webruntime-common.inc | 1 - .../recipes-webos/chromium/webruntime.inc | 2 +- 3 files changed, 44 insertions(+), 7 deletions(-) diff --git a/meta-webos/recipes-webos/chromium/exportbuildscript.inc b/meta-webos/recipes-webos/chromium/exportbuildscript.inc index 17849e71f..162f95720 100644 --- a/meta-webos/recipes-webos/chromium/exportbuildscript.inc +++ b/meta-webos/recipes-webos/chromium/exportbuildscript.inc @@ -35,16 +35,26 @@ GN_ARGS_OVERRIDES="\ cros_host_extra_cppflags=\"$BUILD_CPPFLAGS\" \ cros_host_extra_cxxflags=\"$BUILD_CXXFLAGS\" \ cros_host_extra_lsflags=\"$BUILD_LDFLAGS\" \ - cros_host_sysroot=\"$OECORE_NATIVE_SYSROOT\" \ cros_target_ar=\"$AR\" \ cros_target_cc=\"$CC\" \ cros_target_cxx=\"$CXX\" \ target_sysroot=\"$SDKTARGETSYSROOT\" \ v8_snapshot_toolchain=\"//build/toolchain/cros:v8_snapshot_clang_$TARGET_CPU\" \ - host_pkg_config=\"pkg-config\" \ + host_pkg_config=\"$(pwd)/host-pkg-config\" \ target_cpu=\"$TARGET_CPU\" \ " +cat << 'HOSTPKGCFG' > host-pkg-config +#!/bin/bash +unset PKG_CONFIG_PATH +unset PKG_CONFIG_LIBDIR +unset PKG_CONFIG_SYSROOT_DIR + +/usr/bin/pkg-config "$@" +HOSTPKGCFG + +chmod +x host-pkg-config + # Customising target cpu related variables based on TUNE_FEATURES of the SDK declare -A target_tune_features for tune_feature in $TUNE_FEATURES;do @@ -85,8 +95,17 @@ nchars=${#GN_ARGS} has_arg=0 declare -A arr_webruntime_gn_args declare -a arr_webruntime_gn_args_idx # To keep the ordering of args +is_assignment=false +maybe_lvalue=true +# Only interesting the statement which assigns key=value to modify the value. +# Store assignment statement as key=value into assoicated array +# and other statements are stored as position=statement. for (( i = 0; i < $nchars; ++i)); do curr_char="${GN_ARGS:$i:1}" + if [ $maybe_lvalue ]; then + [[ $curr_char == "=" ]] && is_assignment=true + [[ $curr_char =~ '[a-zA-Z0-9.]' ]] || maybe_lvalue=false + fi if [ "${curr_char}" == "\"" ];then inside_quote=$(( ($inside_quote + 1) % 2 )) # Ending quote also requires to close one arguemnt @@ -94,6 +113,10 @@ for (( i = 0; i < $nchars; ++i)); do # e.g var1="value1"var2="value2" makes below in args.gn file # var1 = "value1" # var2 = "value2" + # Hence if the current statement is assignment + # it need to check statement is completed. + # Otherwise continue to next char + [ "$is_assignment" = false ] && continue elif [ "$curr_char" != " " ];then if [ $has_arg -eq 0 ];then has_arg=1 @@ -105,10 +128,18 @@ for (( i = 0; i < $nchars; ++i)); do if [ $inside_quote -eq 0 ] && [ $has_arg -eq 1 ];then argument="${GN_ARGS:$start_pos:$(( $i - $start_pos + 1 ))}" key="${argument%%=*}" + [ "$is_assignment" = false ] && key="$start_pos" arr_webruntime_gn_args["$key"]="${argument}" - arr_webruntime_gn_args_idx=( "${arr_webruntime_gn_args_idx[@]/$key}" ) - arr_webruntime_gn_args_idx+=("${argument%%=*}") + tmp_array=() + # Replace previous key=value with new key=value + for value in "${arr_webruntime_gn_args_idx[@]}";do + [[ $value != $key ]] && tmp_array+=($value) + done + arr_webruntime_gn_args_idx=("${tmp_array[@]}" "$key") + unset tmp_array has_arg=0 + is_assignment=false + maybe_lvalue=true fi done @@ -139,7 +170,14 @@ if [ ! -f $OUT_DIR/build.ninja ] || [[ $(realpath $0) -nt $OUT_DIR/build.ninja ] gn gen $OUT_DIR --args="$GN_ARGS" fi -ninja -C $OUT_DIR ${TARGET} +# Limit jobs up to # of cpus - 2 not to use 100% cpu +JOBS_CPU=$(($(nproc --all) - 2)) +# Limit jobs based on available memory (2G per one job) to avoid OOM +JOBS_RAM=$(($(free -g | grep Mem | awk '{ print $7}') / 2 )) +JOBS_MAX=$(($JOBS_CPU > $JOBS_RAM ? $JOBS_RAM : $JOBS_CPU)) +echo "Using -j $JOBS_MAX" + +ninja -j $JOBS_MAX -C $OUT_DIR ${TARGET} EOF chmod +x $filename } diff --git a/meta-webos/recipes-webos/chromium/webruntime-common.inc b/meta-webos/recipes-webos/chromium/webruntime-common.inc index 8bfa603d4..1ebd0d85e 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-common.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-common.inc @@ -83,7 +83,6 @@ GN_ARGS = "\ is_debug=false\ is_component_build=false\ target_os=\"linux\"\ - target_sysroot=\"${STAGING_DIR_HOST}\"\ cros_host_sysroot=\"/\"\ treat_warnings_as_errors=false\ use_custom_libcxx=false\ diff --git a/meta-webos/recipes-webos/chromium/webruntime.inc b/meta-webos/recipes-webos/chromium/webruntime.inc index fe6d4c4c2..2169f4e27 100644 --- a/meta-webos/recipes-webos/chromium/webruntime.inc +++ b/meta-webos/recipes-webos/chromium/webruntime.inc @@ -24,7 +24,7 @@ DEPENDS = "virtual/gettext wayland wayland-native luna-service2 pixman freetype DEPENDS_remove_raspberrypi4 = " xproto" DEPENDS_append_raspberrypi4 = " xorgproto" -INC_PR = "r51" +INC_PR = "r52" # Enable this in webos-local.conf or in recipe to build DEPLOY_CHROMEDRIVER ?= "false" DEPLOY_WAM_DEMO ?= "false" From 0e2a0fbe1e09fe5ab40ae6d4b88c754dd9abde3a Mon Sep 17 00:00:00 2001 From: Hotaek Jung Date: Fri, 12 Nov 2021 11:34:37 +0900 Subject: [PATCH 0180/2022] ose: com.webos.service.memorymanager=50 :Release Notes: Fix coverity issue :Detailed Notes: com.webos.service.memorymanager:submissions/49..submissions/50 9dd9406 Fix coverity issue :Testing Performed: Local Test:OK :QA Notes: :Issues Addressed: [WRN-10862] CCC: com.webos.service.memorymanager=50 [CID 9001422] Uninitialized scalar variable [CID 9001423] Uninitialized scalar field [CID 9001424] Uninitialized scalar variable Change-Id: I068681b188eb181eecc50b59147c29f86a9af4da --- .../com.webos.service.memorymanager.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager.bb b/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager.bb index 1802c05bc..6c8c5c34f 100644 --- a/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager.bb +++ b/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 glib-2.0-native luna-service2 libpbnjson pmloglib procps" -WEBOS_VERSION = "1.0.0-49_d2acfefe0e099bc278349b48152b664129f0575d" +WEBOS_VERSION = "1.0.0-50_a1b1c4f17a78ebb82fbccc67608d09901b10b446" PR = "r6" inherit webos_component From cbc3a481122dc7f51f05f7311e25154736346df5 Mon Sep 17 00:00:00 2001 From: Kyungjik Min Date: Mon, 22 Nov 2021 15:25:52 +0900 Subject: [PATCH 0181/2022] linux-firmware-rpidistro: Change branch to buster :Release Notes: :Detailed Notes: Change branch to buster temporarily until applying updated meta-raspberrypi :Testing Performed: :QA Notes: N/A :Issues Addressed: Change-Id: I2718111857680f1cd8fd0abb8884d1633c1b4b3c --- .../linux-firmware-rpidistro_git.bbappend | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 meta-webos-raspberrypi/recipes-kernel/linux-firmware-rpidistro/linux-firmware-rpidistro_git.bbappend diff --git a/meta-webos-raspberrypi/recipes-kernel/linux-firmware-rpidistro/linux-firmware-rpidistro_git.bbappend b/meta-webos-raspberrypi/recipes-kernel/linux-firmware-rpidistro/linux-firmware-rpidistro_git.bbappend new file mode 100644 index 000000000..923ae401c --- /dev/null +++ b/meta-webos-raspberrypi/recipes-kernel/linux-firmware-rpidistro/linux-firmware-rpidistro_git.bbappend @@ -0,0 +1,2 @@ +# Change branch to buster temporarily until applying updated meta-raspberrypi +SRC_URI = "git://github.com/RPi-Distro/firmware-nonfree;branch=buster;protocol=https" From 1e48d4b08920c96fd285072e1a573f8c310d4238 Mon Sep 17 00:00:00 2001 From: Hyunjae Shin Date: Fri, 12 Nov 2021 07:40:56 +0900 Subject: [PATCH 0182/2022] webos.conf: Release webOS OSE v2.14.0 :Release Notes: Set software version as webOS OSE v2.14.0 :Detailed Notes: Set WEBOS_DISTRO_VERSION_MINOR to "14.0" :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: N/A Change-Id: I8a63c0006c5085878a093db3a4bd605ff2203093 --- meta-webos/conf/distro/webos.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/conf/distro/webos.conf b/meta-webos/conf/distro/webos.conf index 6cee9fdd3..e2792cc28 100644 --- a/meta-webos/conf/distro/webos.conf +++ b/meta-webos/conf/distro/webos.conf @@ -13,7 +13,7 @@ WEBOS_DISTRO_BUILD_CODENAME = "master" # g - github WEBOS_DISTRO_VERSION_MAJOR = "2" -WEBOS_DISTRO_VERSION_MINOR = "13.2" +WEBOS_DISTRO_VERSION_MINOR = "14.0" WEBOS_DISTRO_VERSION_TYPE = "g" DISTRO_VERSION = "${WEBOS_DISTRO_VERSION_MAJOR}.${WEBOS_DISTRO_VERSION_MINOR}.${WEBOS_DISTRO_VERSION_TYPE}" From 802523880a6f402b84fa3b6c530d3e78d54a9060 Mon Sep 17 00:00:00 2001 From: Myungchul Kim Date: Mon, 1 Nov 2021 08:01:09 +0900 Subject: [PATCH 0183/2022] webos-fluentbit-plugins=24 webos-initscripts=78 :Release Notes: Add in_bugreport plugin :Detailed Notes: webos-fluentbit-plugins: submissions/21..submissions/24 c466bcf Enable bugreport for unofficial version 68918fc Check jira username / password on /setConfig 4cfcc59 out_jira: Download jira config from server a45b1f5 Update some minor issues 27a40fa Fix Out-of-bounds read bbd52c9 Redefine the path of files created for crash report de6728a Update code based on code review 89251c7 in_bugreport: Encrypt jira password c418538 in_bugreport: Deprecate unused methods of bugreport service 87a168d in_bugreport: Implement details of F9~F12 db6ad40 in_bugreport: Add get/setConfig and createBug method badf42d Add in_bugreport plugin webos-initscripts: submissions/77..submissions/78 b88052d Add revious_boot_logs.tar.gz symlink in 31-var.conf :Testing Performed: See the CCC jira ticket :QA Notes: N/A :Issues Addressed: [WRN-10933] CCC: webos-fluentbit-plugins=24 webos-initscripts=78 [WRN-9796] Check jira id/pw on /setConfig [WRN-9794] Get jira info from server [WRN-8041] Redefine the path of files created for crash report [WRN-8039] Remove bugreport node service [WRN-8038] Reimplement bugreportd as fluentbit input plugin Change-Id: I4e0ab7374eb3a628bf0e8bbcd4135002e6564653 --- meta-webos/recipes-core/initscripts/webos-initscripts.bb | 2 +- .../webos-fluentbit-plugins/webos-fluentbit-plugins.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-core/initscripts/webos-initscripts.bb b/meta-webos/recipes-core/initscripts/webos-initscripts.bb index 289f9bc4f..cf60402a0 100644 --- a/meta-webos/recipes-core/initscripts/webos-initscripts.bb +++ b/meta-webos/recipes-core/initscripts/webos-initscripts.bb @@ -18,7 +18,7 @@ RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_init_manager} ${VIRTUAL-RUNTIME_bash} python PROVIDES = "initscripts" RPROVIDES_${PN} = "initscripts initd-functions" -WEBOS_VERSION = "3.0.0-77_a01e51e7a57bc482615365145f1d68998809b420" +WEBOS_VERSION = "3.0.0-78_761f02ebd1ea776912443c56764d0a8bb5f691cb" PR = "r17" inherit webos_component diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb index a6a2e4e4b..8f73a6353 100644 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "glib-2.0 luna-service2 libpbnjson fluentbit" RDEPENDS_${PN} = "nyx-utils python3-core python3-requests python3-atlassian-python-api" -WEBOS_VERSION = "1.0.0-21_c5cafa3fca9a717e9fa2fd48ddff83dac161f5fa" +WEBOS_VERSION = "1.0.0-24_ed89f928ef110b937ae97744ab0498700940fdcb" PR = "r3" inherit webos_component From a21d641d1c11278df929e45af009743b3f3f87eb Mon Sep 17 00:00:00 2001 From: "manjuraehmad.momin" Date: Mon, 15 Nov 2021 11:25:19 +0530 Subject: [PATCH 0184/2022] ose: notificationmgr=19 :Release Notes: Fix closeAlert and closeToast api issue in notificationmgr :Detailed Notes: - Update data type to std::size_t to store position found using std::string::rfind() notificationmgr: submissions/18..submissions/19 86045a8 Fix closeAlert, closeToast api issue :Testing Performed: Refer WRN-10925 for test results :QA Notes: N/A :Issues Addressed: [WRN-10741] [OSE] method closeAlert's test step 6 raise FAIL. [WRN-10742] [OSE] method closeToast's test step 7 raise FAIL [WRN-10925] CCC : ose: notificationmgr=19 Change-Id: I5866f450b7ba61eb3c03f72b4c963c6e8c79ec39 --- meta-webos/recipes-webos/notificationmgr/notificationmgr.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb b/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb index 56284c8cf..46a5cf5c1 100644 --- a/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb +++ b/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb @@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7ca DEPENDS = "glib-2.0 luna-service2 libpbnjson pmloglib boost libxml++" -WEBOS_VERSION = "1.0.0-18_b288659a13e8509a5de280abd98b0b15505e27d5" +WEBOS_VERSION = "1.0.0-19_c45801ac37686aa5552a5218ab50103677aada67" PR = "r9" inherit webos_component From f9061c0a7cd5840412492dc775f7c1291736090c Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Tue, 26 Oct 2021 10:25:26 +0900 Subject: [PATCH 0185/2022] luna-surfacemanager=359 qtwayland-webos=69 :Release Notes: Fix various LSM issues. :Detailed Notes: luna-surfacemanager: submissions/358..submissions/359 84be328f Cleanup resources to avoid segmentation fault 2a8f00b1 Export WebOSKeyboard 057e2eb4 Export WebOSShellSurface b387d3d1 Move firstRegister to member variable a00e1308 Revert "base: Add audioService in LS" cd94736f Fix crash when using NoExtensions 9d429525 Drop misleading debug messages 1acd1bf5 Allow designated pluginDir to WebOSCompositorPluginLoader e1e35c8d base: Add multiple rects animation test qtwayland-webos: submissions/68..submissions/69 6783cf6 Add Vulkan as supported surface type :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-10738] CCC: luna-surfacemanager=359 qtwayland-webos=69 and more Change-Id: Id388d0c43040b529605874a81e4b8a1b198a0024 --- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 2 +- meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index 52e21d70d..19e8eab5c 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0" -WEBOS_VERSION = "2.0.0-358_738d51789387303f9b92c4cd3ae9f28cb53468aa" +WEBOS_VERSION = "2.0.0-359_3157dcafdb52081b50217aac32f93374278c4064" PR = "r52" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb index a84751c5b..347d170c0 100644 --- a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb +++ b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtwayland webos-wayland-extensions libxkbcommon qt-features-webos wayland-native qtwayland-native" -WEBOS_VERSION = "2.0.0-68_629f78182cb8c075dbe88377479658b3bba6cefe" +WEBOS_VERSION = "2.0.0-69_5c950b0e604b83527ae3bb83440082cb7cebacbc" PR = "r15" inherit webos_qmake6 From 3bef4a1a71640b1cb823be85b19f7a78c0a3a89c Mon Sep 17 00:00:00 2001 From: "shoyeb.khan" Date: Wed, 24 Nov 2021 13:53:28 +0530 Subject: [PATCH 0186/2022] com.webos.service.bluetooth2=70 :Release Notes: Check for scan devices before calling provision :Detailed Notes: submissions/69..submissions/70 08cb8a5 Fix for API test method createAppKey fail :Testing Performed: Tested results updated in WRN-11809 :QA Notes: N/A :Issues Addressed: [WRN-11809] CCC: com.webos.service.bluetooth2=70 [WRN-10745] [OSE] Valid test steps for com.webos.service.bluetooth2's method createAppKey raise FAIL. [WRN-11743] [OSE] Valid test step for com.webos.service.bluetooth2's method mesh/keyRefresh raise FAIL. Change-Id: Idac89ef894a73a939b4f53bb978bc712e65dfff5 --- .../recipes-webos/bluetooth/com.webos.service.bluetooth2.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb index d0edf1fb0..f17cee619 100644 --- a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb +++ b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb @@ -48,7 +48,7 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES = "GATT FTP OPP A2DP SPP HFP AVRCP PAN A # emulator), which means that the pairing should happen without user intervention. WEBOS_BLUETOOTH_PAIRING_IO_CAPABILITY ??= "NoInputNoOutput" -WEBOS_VERSION = "1.0.0-69_adf507c700596201bc812ee2af1b83fac5da4334" +WEBOS_VERSION = "1.0.0-70_1342f4f1ed34557759415a2565e7b60c53d7fdb2" PR = "r5" inherit webos_component From 70c56533195aa640aa0a25554bf2deac7c31c1f4 Mon Sep 17 00:00:00 2001 From: sanjay poptani Date: Thu, 25 Nov 2021 13:33:40 +0530 Subject: [PATCH 0187/2022] luna-sysservice=19 :Release Notes: Implementation of softwareInfo/query api :Detailed Notes: Implemented below methods - softwareInfo/query api() - Returns versions of nodejs luna-sysservice: submissions/18..submissions/19 4de5170 Implementation of softwareInfo/query api :Testing Performed: Refer [WRN-11989] for test results :QA Notes: NA :Issues Addressed: [WRN-11989] CCC:luna-sysservice=19 [WRN-6302] Implementation of softwareInfo API in OSE Change-Id: I4ead4f90e8981d70d7d28ab00fab750486051338 --- meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb b/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb index 31464c57e..6394cf025 100644 --- a/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb +++ b/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb @@ -14,7 +14,7 @@ DEPENDS = "luna-service2 libpbnjson qtbase uriparser libxml2 sqlite3 pmloglib ny RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_ntp} tzcode" -WEBOS_VERSION = "4.4.0-18_0e7133b7d1600df5ba3dc02266f6ea9ebe5669b0" +WEBOS_VERSION = "4.4.0-19_2472a6b16e7b875f8daec46c322bf2a94f81201d" PR = "r9" inherit webos_component From 91f61ccce55299c1f21839af2aecb02cae7ae5b4 Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Mon, 29 Nov 2021 13:34:15 +0900 Subject: [PATCH 0188/2022] ilib-webapp=19,v14.11.1 enact-framework=r14 :Release Notes: Updated iLib version as 14.11.1. Update Enact's corresponding iLib dependency for 14.11.1 :Detailed Notes: Updated iLib version as 14.11.1. (https://github.com/iLib-js/iLib/releases). Added the ability to set additional path to Loader. Additional paths can be set through newly add Loader's addPath(), and iLib reads resources with higher priority. The added path can be removed by removePath() to Loader's path list. ilib-webapp: submissions/16..submissions/19 887892b Sync up iLib 14.11.1 699c1c0 Update code to return string propery if matched string exist only original res 35634ab Add feature to set addtional path in Loader d017358 Added the ability to take multiple paths in ResBundle 9278b21 Sync up iLib v14.10.0 enact-framework: r13..r14 Updated Enact's corresponding iLib dependency :Testing Performed: See jira ticket for results. :QA Notes: N/A :Issues Addressed: [WRN-11193] Update the latest vesion of iLib to RP [WRN-12025] CCC: ilib-webapp=19,v14.11.1 enact-framework=r14 Change-Id: Ife0d83faeb2f00a349d1dd60ab41356d0c1941cf --- meta-webos/recipes-webos/enactjs-apps/enact-framework.bb | 4 ++-- meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb index f56d55c5c..3565d437e 100644 --- a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb +++ b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb @@ -43,7 +43,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ global@4.4.0 \ hoist-non-react-statics@2.5.5 \ iconv-lite@0.6.3 \ - ilib@14.10.0 \ + ilib@14.11.1 \ invariant@2.2.4 \ is-function@1.0.2 \ is-stream@1.1.0 \ @@ -76,7 +76,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ # NOTE: We only need to bump PR if we change something OTHER than # PV, SRCREV or the dependencies statement above. -PR = "r13" +PR = "r14" # Skip unneeded tasks do_configure[noexec] = "1" diff --git a/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb b/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb index b5030abde..e751bfb0d 100644 --- a/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb +++ b/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=be4f2e45a1215076318af43f833aa178 \ " -WEBOS_VERSION = "14.10.0-16_6c1f21c19b9f9d80342401ba4fefb9ed13f78055" +WEBOS_VERSION = "14.11.1-19_bcf4e4a4c1d2d11c80bbd7e6d40d41b4e9335f21" PR = "r8" inherit webos_arch_indep From 1fdf6a627380f158131c9c9ccca6e5f8c5a48aac Mon Sep 17 00:00:00 2001 From: "premalatha.mvs" Date: Thu, 18 Nov 2021 10:38:45 +0530 Subject: [PATCH 0189/2022] ose: umediaserver=24.gav.21 umediaserver-configs=14 com.webos.service.camera=24 g-camera-pipeline=13.gav.25 :Release Notes: Fix camera modules issues :Detailed Notes: Add qemux86-64 in umediaserver & umediaserver-configs to support camera pipeline Fix the camera preview flicker issue in DMABUF mode umediaserver: submissions/24.gav.20..submissions/24.gav.21 87ec319 Support camera pipeline in qemux86-64 emulator umediaserver-configs: submissions/13..submissions/14 449bb31 Support camera pipeline in qemux86-64 emulator com.webos.service.camera: submissions/23..submissions/24 bfead47 Add destroy dmabuf fd g-camera-pipeline: submissions/13.gav.24..submissions/13.gav.25 1410e38 Fix camera preview flicker issue in DMABUF mode :Testing Performed: Local build and verification done :QA Notes: NA :Issues Addressed: [WRN-11180] CCC: ose: umediaserver=24.gav.21 umediaserver-configs=14 com.webos.service.camera=24 g-camera-pipeline=13.gav.25 [WRN-10719] [OSE Emulator] [Linux 18.04]Not able to load/preview the camera device in emulator [WRN-9356] [webOS OSE] : Preview is Flickering When passing Media ID [WRN-11166] [webOS OSE] Flicker is observed in recorded file Change-Id: Ie3dc119a3a85c2dd29c1def0f546ad4dd654ae55 --- .../com.webos.service.camera/com.webos.service.camera.bb | 2 +- meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb | 2 +- meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb | 2 +- meta-webos/recipes-webos/umediaserver/umediaserver.bb | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb b/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb index f31e90fb4..ff3db9231 100644 --- a/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb +++ b/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 luna-service2 json-c alsa-lib pmloglib udev" -WEBOS_VERSION = "1.0.0-23_e1ef84c4816a8b54c2367c19c7146b6fc0b172d2" +WEBOS_VERSION = "1.0.0-24_c224e49bb3eaafc8b5895ed358194909415a20a4" PR = "r4" inherit webos_component diff --git a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb index 1eca461be..b1b04c6ef 100644 --- a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb +++ b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb @@ -24,7 +24,7 @@ DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad DEPENDS_append_rpi = " userland" WEBOS_GIT_PARAM_BRANCH = "@gav" -WEBOS_VERSION = "1.0.0-13.gav.24_63de3a9a912af9caa2dbe03d367b5db22379745b" +WEBOS_VERSION = "1.0.0-13.gav.25_a0e5c3a25cac8e857b2aecebcbc81e64190ef909" WEBOS_GIT_PARAM_BRANCH_raspberrypi3 = "master" diff --git a/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb b/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb index 7113ca07c..f8cfb0f8c 100644 --- a/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb +++ b/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " -WEBOS_VERSION = "1.0.0-13_9a6afea61254c66a27dd46c37c7252a3b92acb4c" +WEBOS_VERSION = "1.0.0-14_c86ef2e55ed374db383e8ca8946b7c2c73c9a61d" PR = "r7" inherit webos_cmake diff --git a/meta-webos/recipes-webos/umediaserver/umediaserver.bb b/meta-webos/recipes-webos/umediaserver/umediaserver.bb index 47a54e6cd..6b0b87358 100644 --- a/meta-webos/recipes-webos/umediaserver/umediaserver.bb +++ b/meta-webos/recipes-webos/umediaserver/umediaserver.bb @@ -42,7 +42,7 @@ COMPATIBLE_MACHINE_x86 = "(.*)" COMPATIBLE_MACHINE_x86-64 = "(.*)" WEBOS_GIT_PARAM_BRANCH = "@gav" -WEBOS_VERSION = "1.0.0-24.gav.20_775b619f47853937593088e627792b7f11a86510" +WEBOS_VERSION = "1.0.0-24.gav.21_568cdc04e1ba1f3b99267a32dc4adfb9dac43edc" WEBOS_GIT_PARAM_BRANCH_raspberrypi3 = "master" WEBOS_VERSION_raspberrypi3 = "1.0.0-27_dad33357ba323a69885bc11661330ab07296b0c8" From 44860e4f4884fb1b84a48cfc758092bf5ab4cf81 Mon Sep 17 00:00:00 2001 From: "ayyappu.varunkumar" Date: Fri, 19 Nov 2021 16:27:50 +0530 Subject: [PATCH 0190/2022] ose: db8=17-r36 :Release Notes: Fix LICENSE issue & db's load API failure :Detailed Notes: db8: submissions/15..submissions/17 f89ea60 Fix license issue 61d81c8 Fix load API failure :Testing Performed: Build Successful See WRN-11087 for results :QA Notes: N/A :Issues Addressed: [WRN-11087] CCC: pro:credentialsmanager=2 db8={ose:17-r36 pro:17} [WRN-10819] [OSE] Valid test step for com.webos.service.db's method load raise FAIL Change-Id: I9319f968585373c51029df8c123aba22ac4669d3 --- meta-webos/recipes-webos/db8/db8.bb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-webos/db8/db8.bb b/meta-webos/recipes-webos/db8/db8.bb index 45f6f27dc..8672ef07e 100644 --- a/meta-webos/recipes-webos/db8/db8.bb +++ b/meta-webos/recipes-webos/db8/db8.bb @@ -5,7 +5,7 @@ SECTION = "webos/base" AUTHOR = "Maksym Sditanov " LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ +file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " @@ -21,8 +21,8 @@ VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_stat} ${VIRTUAL-RUNTIME_bash}" RDEPENDS_${PN}-tests_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -WEBOS_VERSION = "3.2.0-15_d800ccad05c94aa79420f185ba3f87d24c1dd295" -PR = "r35" +WEBOS_VERSION = "3.2.0-17_01e4377cada38dd59d431e7d74944c17adf9e549" +PR = "r36" inherit webos_component inherit webos_public_repo From 1ceebac82e7a46be468931a2950bf8147db43a34 Mon Sep 17 00:00:00 2001 From: Siyeon Seo Date: Tue, 2 Nov 2021 17:42:46 +0900 Subject: [PATCH 0191/2022] luna-surfacemanager=360 qml-webos-bridge=126 qml-webos-framework=161-r35 qtwayland-webos=70 :Release Notes: Support the extra l10n file path for QML apps. Fix the issue where a qtwayland client may crash on closing. :Detailed Notes: luna-surfacemanager: submissions/359..submissions/360 168865d9 Null check before dereferencing nativeInterface be09726c Allow resetting static variables to make it testable qml-webos-bridge: submissions/125..submissions/126 88430a4 Add loading extra translation file qml-webos-framework: submissions/160..submissions/161 221d270 Fix file mode 1fbe7a2 Add localization example app #2 6401cc9 Add localization example app qml-webos-framework=r35 Update DEPENDS and FILES_${PN}-examples for the new l10n example. qtwayland-webos: submissions/69..submissions/70 58fdf0d Check if surface is null in pointer_leave :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-12028] CCC: luna-surfacemanager=360 qml-webos-bridge=126 qml-webos-framework=161-r35 qtwayland-webos=70 and more Change-Id: Ib85cad422e864b0db9b8558d78c98ec7a2e8829d --- .../luna-surfacemanager/luna-surfacemanager.bb | 2 +- .../qml-webos-bridge/qml-webos-bridge.bb | 2 +- .../qml-webos-framework/qml-webos-framework.bb | 11 +++++++---- .../recipes-webos/qtwayland-webos/qtwayland-webos.bb | 2 +- 4 files changed, 10 insertions(+), 7 deletions(-) diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index 19e8eab5c..5d0f8d4af 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0" -WEBOS_VERSION = "2.0.0-359_3157dcafdb52081b50217aac32f93374278c4064" +WEBOS_VERSION = "2.0.0-360_5c3a00a694cc9c4ef33e910a7a20a241445b1083" PR = "r52" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb b/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb index 321451b5a..8896abd90 100644 --- a/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb +++ b/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb @@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative luna-service2 glib-2.0" RDEPENDS_${PN} += "qml-webos-components" -WEBOS_VERSION = "1.0.0-125_7f489c3f7f76201058979c00b5095703277f815a" +WEBOS_VERSION = "1.0.0-126_5279a79c5525127f6ab5d865343f418cad6dbfb7" PR = "r18" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb b/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb index 59d57cf0e..2a7d2d549 100644 --- a/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb +++ b/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=9e100013a76448cbe7c14134b0974453 \ " -DEPENDS = "qt-features-webos qtdeclarative qtwayland-webos pmloglib luna-service2" +DEPENDS = "qt-features-webos qtdeclarative qtwayland-webos pmloglib luna-service2 qttools-native" DEPENDS_append = " ${@ 'qtshadertools-native' if d.getVar('QT_VERSION', True) == '6' else '' }" RDEPENDS_${PN} = "qtgraphicaleffects-qmlplugins" @@ -18,8 +18,8 @@ RPROVIDES_${PN}-examples = " \ eos.widgetgallery \ " -WEBOS_VERSION = "1.0.0-160_d89ab0a01a224a6139bdfa916736df67ff6dda44" -PR = "r34" +WEBOS_VERSION = "1.0.0-161_a6969a4cb6e95949af68e316c8414951b0c8fc9b" +PR = "r35" inherit webos_qmake6 inherit webos_pkgconfig @@ -42,7 +42,10 @@ WEBOS_QMLLINT_EXTRA_VALIDATION = "1" FILES_${PN} += "${OE_QMAKE_PATH_QML}/Eos/*" PACKAGES += "${PN}-examples" -FILES_${PN}-examples += "${webos_applicationsdir}/*" +FILES_${PN}-examples += " \ + ${webos_applicationsdir}/* \ + ${datadir}/qml/locales/${BPN}/ \ +" # unit-tests PACKAGES =+ "${PN}-tests" diff --git a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb index 347d170c0..494beb09d 100644 --- a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb +++ b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtwayland webos-wayland-extensions libxkbcommon qt-features-webos wayland-native qtwayland-native" -WEBOS_VERSION = "2.0.0-69_5c950b0e604b83527ae3bb83440082cb7cebacbc" +WEBOS_VERSION = "2.0.0-70_c04c1b3f861f866debb637909cf91e866ded3638" PR = "r15" inherit webos_qmake6 From 4b4182228aacf0014cbd5edda2b5e0e4ce39379f Mon Sep 17 00:00:00 2001 From: "shoyeb.khan" Date: Thu, 2 Dec 2021 12:13:12 +0530 Subject: [PATCH 0192/2022] bluez5=webos26 :Release Notes: Fix BLE Mesh provision failure :Detailed Notes: bluez5: webos25..webos26 When a node is created/provisioned/imported, the new node's agent is removed. The corresponding pointer in the node structure needs to be set to NULL to avoid pointing to freed memory. :Testing Performed: Tested results updated in WRN-12143 :QA Notes: NA :Issues Addressed: [WRN-12143] CCC: bluez5=webos26 [WRN-11804] [webOS OSE]: BLE Mesh Provision is not happening. Change-Id: Ic48f1b2b66702688ece9998051d2f6cab7b01a6b --- .../0029-Fix-provision-failed-issue.patch | 54 +++++++++++++++++++ .../bluez5/bluez5_%.bbappend | 3 +- 2 files changed, 56 insertions(+), 1 deletion(-) create mode 100644 meta-webos/recipes-connectivity/bluez5/bluez5/0029-Fix-provision-failed-issue.patch diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0029-Fix-provision-failed-issue.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0029-Fix-provision-failed-issue.patch new file mode 100644 index 000000000..f834ad061 --- /dev/null +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0029-Fix-provision-failed-issue.patch @@ -0,0 +1,54 @@ +From 18480fd20b967d2be566c1d0d4b0622da842e18e Mon Sep 17 00:00:00 2001 +From: "shoyeb.khan" +Date: Thu, 2 Dec 2021 11:55:45 +0530 +Subject: [PATCH] Fix provision failed issue + +:Release Notes: +Fix provision failed issue + +:Detailed Notes: +When a node is created/provisioned/imported, +the new node's agent is removed. +The corresponding pointer in the node structure needs +to be set to NULL to avoid pointing to freed memory. + +:Testing Performed: +Built and tested + +:QA Notes: +NA + +:Issues Addressed: +[WRN-11804] [webOS OSE]: BLE Mesh Provision + is not happening. + +Upstream-Status: Inappropriate[webos specific] +--- + mesh/node.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/mesh/node.c b/mesh/node.c +index f7ac5ff..079ad9a 100644 +--- a/mesh/node.c ++++ b/mesh/node.c +@@ -1121,6 +1121,8 @@ static void convert_node_to_storage(struct mesh_node *node, + { + const struct l_queue_entry *entry; + ++ memset(db_node, 0, sizeof(struct mesh_config_node)); ++ + db_node->cid = node->comp.cid; + db_node->pid = node->comp.pid; + db_node->vid = node->comp.vid; +@@ -2325,7 +2327,7 @@ void node_finalize_new_node(struct mesh_node *node, struct mesh_io *io) + + free_node_dbus_resources(node); + mesh_agent_remove(node->agent); +- ++ node->agent = NULL; + node->busy = false; + + /* Register callback for the node's io */ +-- +2.17.1 + diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend b/meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend index c0ccf994d..ab95258ed 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend +++ b/meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend @@ -2,7 +2,7 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" -EXTENDPRAUTO_append = "webos25" +EXTENDPRAUTO_append = "webos26" RRECOMMENDS_${PN} += " \ glibc-gconv-utf-16 \ @@ -38,6 +38,7 @@ SRC_URI += " \ file://0026-Revert-a2dp-Add-reverse-discovery.patch \ file://0027-Add-support-for-meshd-to-use-RAW-channel.patch \ file://0028-Enable-mesh-fixed-ell-undefined-symbol-error.patch \ + file://0029-Fix-provision-failed-issue.patch \ file://main.conf \ file://brcm43438.service \ file://obex.service \ From b247c5f081d08f1400ced11ad009588adc9e66cb Mon Sep 17 00:00:00 2001 From: "jonghen.han" Date: Mon, 29 Nov 2021 11:55:00 +0900 Subject: [PATCH 0193/2022] org.ocf.webossample.{occlientbasicops=r5 ocserverbasicops=r5} :Release Notes: Add occlientbasicops and ocserverbasicops binaries in raspberrypi4-64 image :Detailed Notes: org.ocf.webossample.occlientbasicops: r4..r5 Add occlientbasicops binaries in raspberrypi4-64image org.ocf.webossample.ocserverbasicops: r4..r5 Add ocserverbasicops binaries in raspberrypi4-64image :Testing Performed: Please refer to WRN-12055 :QA Notes: :Issues Addressed: [WRN-12055] CCC: org.ocf.webossample.{occlientbasicops=r5 ocserverbasicops=r5} [WRN-11811] [webOS OSE] : Not found is displayed for ./ocserverbasicops Change-Id: I5143ec4a7de845c93e9817346330244af032d493 --- .../org.ocf.webossample.occlientbasicops.bb | 6 ++---- .../org.ocf.webossample.ocserverbasicops.bb | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb index 9e7b7dd12..19baa8ec2 100644 --- a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb +++ b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb @@ -23,7 +23,7 @@ SRCREV_FORMAT = "main" do_fetch[vardeps] = "SRCREV_main SRCREV_tinycbor SRCREV_mbedtls" S = "${WORKDIR}/iotivity" -PR = "r4" +PR = "r5" inherit scons pkgconfig webos_component webos_filesystem_paths @@ -55,9 +55,7 @@ do_install_append() { install -d ${D}${webos_servicesdir}/org.ocf.webossample.occlientbasicops install -v -m 0755 ${S}/out/webos/${IOTIVITY_TARGET_ARCH}/release/resource/csdk/stack/samples/webos/secure/occlientbasicops/* ${D}${webos_servicesdir}/org.ocf.webossample.occlientbasicops - if [ "${IOTIVITY_TARGET_ARCH}" = "i686" ]; then - install -v -m 0755 ${S}/out/webos/arm/release/resource/csdk/stack/samples/webos/secure/occlientbasicops/* ${D}${webos_servicesdir}/org.ocf.webossample.occlientbasicops - fi + install -v -m 0755 ${S}/out/webos/arm/release/resource/csdk/stack/samples/webos/secure/occlientbasicops/* ${D}${webos_servicesdir}/org.ocf.webossample.occlientbasicops # ACG configuration files install -d ${D}${datadir}/luna-service2/roles.d install -d ${D}${datadir}/luna-service2/services.d diff --git a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb index 2b6f74497..762713ada 100644 --- a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb +++ b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb @@ -23,7 +23,7 @@ SRCREV_FORMAT = "main" do_fetch[vardeps] = "SRCREV_main SRCREV_tinycbor SRCREV_mbedtls" S = "${WORKDIR}/iotivity" -PR = "r4" +PR = "r5" inherit scons pkgconfig webos_component webos_filesystem_paths @@ -53,9 +53,7 @@ do_install_append() { install -d ${D}${webos_servicesdir}/org.ocf.webossample.ocserverbasicops install -v -m 0755 ${S}/out/webos/${IOTIVITY_TARGET_ARCH}/release/resource/csdk/stack/samples/webos/secure/ocserverbasicops/* ${D}${webos_servicesdir}/org.ocf.webossample.ocserverbasicops - if [ "${IOTIVITY_TARGET_ARCH}" = "i686" ]; then - install -v -m 0755 ${S}/out/webos/arm/release/resource/csdk/stack/samples/webos/secure/ocserverbasicops/* ${D}${webos_servicesdir}/org.ocf.webossample.ocserverbasicops - fi + install -v -m 0755 ${S}/out/webos/arm/release/resource/csdk/stack/samples/webos/secure/ocserverbasicops/* ${D}${webos_servicesdir}/org.ocf.webossample.ocserverbasicops # ACG configuration files install -d ${D}${datadir}/luna-service2/roles.d install -d ${D}${datadir}/luna-service2/services.d From a3697874fb0ac2e26c06622d545592d32c23e294 Mon Sep 17 00:00:00 2001 From: "sushovan.g" Date: Thu, 2 Dec 2021 11:23:33 +0530 Subject: [PATCH 0194/2022] ose: audiod=34 :Release Notes: Fix for usb sound card on emulator :Detailed Notes: audiod: submissions/33..submissions/34 69b29bb Fix for usb sound card on emulator :Testing Performed: Local build and verification done :QA Notes: NA :Issues Addressed: [WRN-12140] CCC: ose: audiod=34 [WRN-11813] [OSE Emulator] [Linux 18.04] display_usb1 is not displaying in the logs. Change-Id: Ia0aa0574d1453174ac859f4dbc71dfc4e341b8e8 --- meta-webos/recipes-multimedia/audiod/audiod.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-multimedia/audiod/audiod.bb b/meta-webos/recipes-multimedia/audiod/audiod.bb index 570fe4dbd..74f738df0 100644 --- a/meta-webos/recipes-multimedia/audiod/audiod.bb +++ b/meta-webos/recipes-multimedia/audiod/audiod.bb @@ -23,7 +23,7 @@ RDEPENDS_${PN} = "\ pulseaudio-server \ " -WEBOS_VERSION = "1.0.0-33_74ed31aea11d95bacaf22682b8c0651d0ed02357" +WEBOS_VERSION = "1.0.0-34_92400a08ffb30408d7042a709e0b7a64994ccb15" PR = "r31" inherit webos_component From 2d5a592e5552ef1e03abca2b6ca92c93db616bc7 Mon Sep 17 00:00:00 2001 From: sanjay poptani Date: Fri, 3 Dec 2021 14:01:30 +0530 Subject: [PATCH 0195/2022] ose: com.webos.service.peripheralmanager=10 :Release Notes: Adding new parameters for uart/read and i2c/list :Detailed Notes: - config parameter is added to open uart port in canonical mode - verbose parameter is added to i2c/list to return slaveAddress - "dataType" is added to uart/read API com.webos.service.peripheralmanager: submissions/9..submissions/10 a846b21 Implementing uart & i2c API request :Testing Performed: Refer [WRN-12187] for test results :QA Notes: N/A :Issues Addressed: [WRN-10588] Implementation of peripheral manager API changes [WRN-12187] CCC: ose: com.webos.service.peripheralmanager=10 Change-Id: I0f59e31c5cb50d20ce9bba96a063922a7037764a --- .../com.webos.service.peripheralmanager.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb b/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb index a21ccf1e8..ecc9a57ea 100644 --- a/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb +++ b/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb @@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "glib-2.0 libpbnjson luna-service2 pmloglib " -WEBOS_VERSION = "1.0.0-9_b6b04b94f5641191116e3e33be0ad0e7f08b14ce" +WEBOS_VERSION = "1.0.0-10_a43754015d56190ec36d183295f972080d1ebd90" PR = "r2" inherit webos_component From 30843a577d703709be42dc9a2197a74b4e36f504 Mon Sep 17 00:00:00 2001 From: Myungchul Kim Date: Fri, 3 Dec 2021 10:59:21 +0900 Subject: [PATCH 0196/2022] com.webos.service.memorymanager=51 webos-fluentbit-plugins=25 webos-initscripts=79 :Release Notes: Fix memstay issue in emulator Fix screenshot issue on rpi4-64 Remove bugreportd.service :Detailed Notes: com.webos.service.memorymanager: submissions/50..submissions/51 4c94fe1 Fix OSE Emulator Issue webos-fluentbit-plugins: submissions/24..submissions/25 326c0ab Fix bug screenshot is not generated for Raspberrypi4_64 webos-initscripts: submissions/78..submissions/79 ec34cc8 Remove bugreport.service symbolic link :Testing Performed: See the CCC jira ticket :QA Notes: N/A :Issues Addressed: [WRN-12205] CCC: com.webos.service.memorymanager=51 webos-fluentbit-plugins=25 webos-initscripts=79 [WRN-11069] [OSE Emulator][Linux 18.04] Memstay command is not working properly. [WRN-9212] [OSE-RPi4-CCC] : New jira tickets are not created, after generating a codedump event. Change-Id: Ib5bf2ecef322baa629fc1c8dc73a761f903245ec --- meta-webos/recipes-core/initscripts/webos-initscripts.bb | 2 +- .../com.webos.service.memorymanager.bb | 2 +- .../webos-fluentbit-plugins/webos-fluentbit-plugins.bb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-core/initscripts/webos-initscripts.bb b/meta-webos/recipes-core/initscripts/webos-initscripts.bb index cf60402a0..8367bff2c 100644 --- a/meta-webos/recipes-core/initscripts/webos-initscripts.bb +++ b/meta-webos/recipes-core/initscripts/webos-initscripts.bb @@ -18,7 +18,7 @@ RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_init_manager} ${VIRTUAL-RUNTIME_bash} python PROVIDES = "initscripts" RPROVIDES_${PN} = "initscripts initd-functions" -WEBOS_VERSION = "3.0.0-78_761f02ebd1ea776912443c56764d0a8bb5f691cb" +WEBOS_VERSION = "3.0.0-79_7a5d586e809a92e99781d54b12d01646b8d63fc0" PR = "r17" inherit webos_component diff --git a/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager.bb b/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager.bb index 6c8c5c34f..8b109cc05 100644 --- a/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager.bb +++ b/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 glib-2.0-native luna-service2 libpbnjson pmloglib procps" -WEBOS_VERSION = "1.0.0-50_a1b1c4f17a78ebb82fbccc67608d09901b10b446" +WEBOS_VERSION = "1.0.0-51_1270ef783da6c95a6bd09dccdfe4cdbc47f5ae8a" PR = "r6" inherit webos_component diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb index 8f73a6353..afcad3fca 100644 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "glib-2.0 luna-service2 libpbnjson fluentbit" RDEPENDS_${PN} = "nyx-utils python3-core python3-requests python3-atlassian-python-api" -WEBOS_VERSION = "1.0.0-24_ed89f928ef110b937ae97744ab0498700940fdcb" +WEBOS_VERSION = "1.0.0-25_75c0855341a397e9c8dfc342dc57f1a74bdd0779" PR = "r3" inherit webos_component From 9ee8d6498ffb9fef54113874e633035c33be5b8c Mon Sep 17 00:00:00 2001 From: Hyunjae Shin Date: Mon, 6 Dec 2021 15:27:44 +0900 Subject: [PATCH 0197/2022] Revert "linux-firmware-rpidistro: Change branch to buster" This reverts commit cbc3a481122dc7f51f05f7311e25154736346df5. --- .../linux-firmware-rpidistro_git.bbappend | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 meta-webos-raspberrypi/recipes-kernel/linux-firmware-rpidistro/linux-firmware-rpidistro_git.bbappend diff --git a/meta-webos-raspberrypi/recipes-kernel/linux-firmware-rpidistro/linux-firmware-rpidistro_git.bbappend b/meta-webos-raspberrypi/recipes-kernel/linux-firmware-rpidistro/linux-firmware-rpidistro_git.bbappend deleted file mode 100644 index 923ae401c..000000000 --- a/meta-webos-raspberrypi/recipes-kernel/linux-firmware-rpidistro/linux-firmware-rpidistro_git.bbappend +++ /dev/null @@ -1,2 +0,0 @@ -# Change branch to buster temporarily until applying updated meta-raspberrypi -SRC_URI = "git://github.com/RPi-Distro/firmware-nonfree;branch=buster;protocol=https" From af74b82098e1f5c3dd5cfb6b4932a6b0ee9ac42e Mon Sep 17 00:00:00 2001 From: sushant narayan Date: Tue, 7 Dec 2021 16:42:44 +0530 Subject: [PATCH 0198/2022] ose: g-camera-pipeline=13.gav.26 :Release Notes: RDX crash issues fix in camera pipeline :Detailed Notes: g-camera-pipeline : submissions/13.gav.25..submissions/13.gav.26 da2f0b9 Fix crash issues in camera pipeline :Testing Performed: Please refer test result in WRN-12771 :QA Notes: NA :Issues Addressed: [WRN-12771] CCC: ose: g-camera-pipeline=13.gav.26 [WRN-12057] [RDX_CRASH][webos] /usr/sbin/g-camera-pipeline in n/a (n/a + 0x0) [WRN-12088] [RDX_CRASH][webos] /usr/sbin/g-camera-pipeline in n/a (libc.so.6 + 0x1ac26) Change-Id: I232cdeae058623641be598dfca5e892a4eee7a87 --- meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb index b1b04c6ef..0a7c64ff8 100644 --- a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb +++ b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb @@ -24,7 +24,7 @@ DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad DEPENDS_append_rpi = " userland" WEBOS_GIT_PARAM_BRANCH = "@gav" -WEBOS_VERSION = "1.0.0-13.gav.25_a0e5c3a25cac8e857b2aecebcbc81e64190ef909" +WEBOS_VERSION = "1.0.0-13.gav.26_e153a18d97245a5db980b31d4b63c157c9789d56" WEBOS_GIT_PARAM_BRANCH_raspberrypi3 = "master" From 28ad15552c8a4745a0ccabdb65abab11f24cda7d Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Fri, 19 Nov 2021 16:41:37 +0900 Subject: [PATCH 0199/2022] webos_qmllint.bbclass qtdeclarative=webos74 (drop patch for qmllint) :Release Notes: Add qmllint options and drop the related qtdeclarative patch. :Detailed Notes: webos_qmllint.bbclass Add qmllint options to treat warnings as just information. qtdeclarative=webos74 Drop 0001-Allow-warnings-from-qmllint.patch as it is no longer needed by qmllint options added. :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-12127] CCC: Update meta-qt6 to v6.2.2 Change-Id: I91dec19ae6ce33896daead3fda775781b8103def --- meta-webos/classes/webos_qmllint.bbclass | 16 +++++++++++- .../0001-Allow-warnings-from-qmllint.patch | 25 ------------------- .../recipes-qt/qt6/qtdeclarative_git.bbappend | 7 +----- 3 files changed, 16 insertions(+), 32 deletions(-) delete mode 100644 meta-webos/recipes-qt/qt6/qtdeclarative/0001-Allow-warnings-from-qmllint.patch diff --git a/meta-webos/classes/webos_qmllint.bbclass b/meta-webos/classes/webos_qmllint.bbclass index 8080fe29d..680ea7e15 100644 --- a/meta-webos/classes/webos_qmllint.bbclass +++ b/meta-webos/classes/webos_qmllint.bbclass @@ -10,7 +10,21 @@ inherit qt6-paths WEBOS_QMLLINT_EXTRA_VALIDATION ?= "0" WEBOS_QMLLINT_ERROR_ON_WARNING ?= "0" WEBOS_QMLLINT_ERROR_LOG ?= "${T}/qmllint_error.log" -WEBOS_QMLLINT_OPTIONS ?= "${@ '--no-unqualified-id -I ${STAGING_DIR_NATIVE}${OE_QMAKE_PATH_QML}' if d.getVar('QT_VERSION', True) != '5' else '' }" +WEBOS_QMLLINT_OPTIONS ?= "${@ ' \ + --alias info \ + --deprecated info \ + --import info \ + --inheritance-cycle info \ + --multiline-strings info \ + --property info \ + --required info \ + --signal info \ + --type info \ + --unqualified info \ + --unused-imports info \ + --with info \ + -I ${STAGING_DIR_NATIVE}${OE_QMAKE_PATH_QML}' \ + if d.getVar('QT_VERSION', True) != '5' else '' }" do_compile_prepend () { bbnote "Checking QML syntax error and problematic pattern (Step 1): .qml or .js files stored as qresource" diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Allow-warnings-from-qmllint.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Allow-warnings-from-qmllint.patch deleted file mode 100644 index a27e6114a..000000000 --- a/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Allow-warnings-from-qmllint.patch +++ /dev/null @@ -1,25 +0,0 @@ -From c1f12946c4229d55ec7d8783f1a1d15ca243fdfc Mon Sep 17 00:00:00 2001 -From: Hyungchan Kim -Date: Fri, 7 May 2021 14:05:36 +0900 -Subject: [PATCH] Allow warnings from qmllint - -Do not exit qmllint with warnings. - -Upstream-Status: Inappropriate [workaround] ---- - tools/qmllint/findwarnings.cpp | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/tools/qmllint/findwarnings.cpp b/tools/qmllint/findwarnings.cpp -index c677e112dd..296373345c 100644 ---- a/tools/qmllint/findwarnings.cpp -+++ b/tools/qmllint/findwarnings.cpp -@@ -256,7 +256,7 @@ bool FindWarningVisitor::check() - CheckIdentifiers check(&m_logger, m_code, m_rootScopeImports, m_filePath); - check(m_scopesById, m_signalHandlers, m_memberAccessChains, m_globalScope, m_rootId); - -- return !m_logger.hasWarnings() && !m_logger.hasErrors(); -+ return !m_logger.hasErrors(); - } - - bool FindWarningVisitor::visit(QQmlJS::AST::PatternElement *element) diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend index cc503d25c..4b5876609 100644 --- a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend @@ -2,7 +2,7 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos73" +EXTENDPRAUTO_append = "webos74" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" @@ -17,11 +17,6 @@ SRC_URI_append = " \ file://0002-Revert-Don-t-hide-the-inputMethod-when-finishing-the.patch \ " -# Needed to workaround qmllint error -SRC_URI_append_class-native = " \ - file://0001-Allow-warnings-from-qmllint.patch \ -" - # Supplement tool for qmllint inherit webos_qmake6_paths DEPENDS_append_class-native = " python3-regex-native" From 47e00d3622a0b624566255611545e3aaa2c80958 Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Fri, 19 Nov 2021 09:48:16 +0900 Subject: [PATCH 0200/2022] qtbase=webos94 qtdeclarative=webos75 qtwayland=webos25 (rebase patches to v6.2.2) :Release Notes: Rebase patches to v6.2.2. Apply patches only to the SRCREV of meta-qt6 we use. :Detailed Notes: qtbase=webos94 Rebase patches to v6.2.2. Apply patches only to the SRCREV of meta-qt6 we use. qtdeclarative=webos75 Apply patches only to the SRCREV of meta-qt6 we use. qtwayland=webos25 Drop 0001-Add-option-for-more-features.patch and related PACKAGECONFIG options. Instead remove files unnecessary or conflict with qtwayland-webos by do_install_append. :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-12127] CCC: Update meta-qt6 to v6.2.2 Change-Id: I0fdb0b9a5013408f605c2c0da4dfca6f3b15807a --- .../0001-Fix-compile-error-with-g-7.5.0.patch | 16 ++-- ...its-causing-a-compile-error-with-g-7.patch | 2 +- ...x-bolding-in-Qts-FreeType-FontEngine.patch | 11 +-- meta-webos/recipes-qt/qt6/qtbase_git.bbappend | 13 +-- .../recipes-qt/qt6/qtdeclarative_git.bbappend | 12 ++- .../0001-Add-option-for-more-features.patch | 86 ------------------- .../recipes-qt/qt6/qtwayland_git.bbappend | 18 ++-- 7 files changed, 39 insertions(+), 119 deletions(-) delete mode 100644 meta-webos/recipes-qt/qt6/qtwayland/0001-Add-option-for-more-features.patch diff --git a/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-compile-error-with-g-7.5.0.patch b/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-compile-error-with-g-7.5.0.patch index 12bfcf41f..bfd0543d0 100644 --- a/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-compile-error-with-g-7.5.0.patch +++ b/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-compile-error-with-g-7.5.0.patch @@ -1,4 +1,4 @@ -From 543a68313d7b15f0b2f0582605bfdbef8fecf1d0 Mon Sep 17 00:00:00 2001 +From 560baf686515dcacd94dbc26895a974048dcc308 Mon Sep 17 00:00:00 2001 From: Hyungchan Kim Date: Wed, 26 May 2021 17:45:05 +0900 Subject: [PATCH] Fix compile error with g++ 7.5.0 @@ -13,23 +13,23 @@ Upstream-Status : Inappropriate [workaround] 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/corelib/kernel/qproperty_p.h b/src/corelib/kernel/qproperty_p.h -index 2883308299..1fdd50e445 100644 +index 71f4f9f5e9..1bf3d490f1 100644 --- a/src/corelib/kernel/qproperty_p.h +++ b/src/corelib/kernel/qproperty_p.h -@@ -540,7 +540,7 @@ public: - const bool inWrapper = inBindingWrapper(storage); - if (bd && !inWrapper) - notify(bd); +@@ -551,7 +551,7 @@ public: + if (!inBindingWrapper(storage)) + notify(bd); + } - if constexpr (Signal != nullptr) { + if constexpr (!std::is_same_v) { if constexpr (SignalTakesValue::value) (owner()->*Signal)(value()); else diff --git a/src/corelib/time/qdatetime.cpp b/src/corelib/time/qdatetime.cpp -index 94ea0112d4..b641fbea8f 100644 +index f0841ca853..98e20ae921 100644 --- a/src/corelib/time/qdatetime.cpp +++ b/src/corelib/time/qdatetime.cpp -@@ -4012,7 +4012,7 @@ void QDateTime::setMSecsSinceEpoch(qint64 msecs) +@@ -4000,7 +4000,7 @@ void QDateTime::setMSecsSinceEpoch(qint64 msecs) status |= QDateTimePrivate::ValidWhenMask; break; case Qt::OffsetFromUTC: diff --git a/meta-webos/recipes-qt/qt6/qtbase/0002-Revert-commits-causing-a-compile-error-with-g-7.patch b/meta-webos/recipes-qt/qt6/qtbase/0002-Revert-commits-causing-a-compile-error-with-g-7.patch index 05041c67d..588679706 100644 --- a/meta-webos/recipes-qt/qt6/qtbase/0002-Revert-commits-causing-a-compile-error-with-g-7.patch +++ b/meta-webos/recipes-qt/qt6/qtbase/0002-Revert-commits-causing-a-compile-error-with-g-7.patch @@ -1,4 +1,4 @@ -From 54f09c2fbb037da71f4402cce2d53cc71b7e08c6 Mon Sep 17 00:00:00 2001 +From 6062916b3c9537745be032eb8d218593f9ff490a Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Mon, 25 Oct 2021 09:53:13 +0900 Subject: [PATCH] Revert commits causing a compile error with g++ 7 diff --git a/meta-webos/recipes-qt/qt6/qtbase/9901-Disable-Faux-bolding-in-Qts-FreeType-FontEngine.patch b/meta-webos/recipes-qt/qt6/qtbase/9901-Disable-Faux-bolding-in-Qts-FreeType-FontEngine.patch index 1033cf0b2..0e011339e 100644 --- a/meta-webos/recipes-qt/qt6/qtbase/9901-Disable-Faux-bolding-in-Qts-FreeType-FontEngine.patch +++ b/meta-webos/recipes-qt/qt6/qtbase/9901-Disable-Faux-bolding-in-Qts-FreeType-FontEngine.patch @@ -1,4 +1,4 @@ -From b567443edc6beb02d43c47739b687de8424b0c7b Mon Sep 17 00:00:00 2001 +From f501a8a29d84dcb10ee4520897ceb3ce515bf42b Mon Sep 17 00:00:00 2001 From: Roman Genhel Date: Fri, 18 Sep 2020 11:56:37 +0300 Subject: [PATCH] Disable Faux bolding in Qts FreeType FontEngine @@ -13,18 +13,19 @@ Upstream-Status : Inappropriate [webOS specific] 1 file changed, 2 insertions(+) diff --git a/src/gui/text/freetype/qfontengine_ft.cpp b/src/gui/text/freetype/qfontengine_ft.cpp -index 42cf147901..ac214812ae 100644 +index 4ad7740cdb..4e551234f7 100644 --- a/src/gui/text/freetype/qfontengine_ft.cpp +++ b/src/gui/text/freetype/qfontengine_ft.cpp -@@ -748,12 +748,14 @@ bool QFontEngineFT::init(FaceId faceId, bool antialias, GlyphFormat format, +@@ -748,6 +748,7 @@ bool QFontEngineFT::init(FaceId faceId, bool antialias, GlyphFormat format, FT_Set_Transform(face, &matrix, nullptr); freetype->matrix = matrix; // fake bold +#ifndef Q_OS_WEBOS if ((fontDef.weight >= QFont::Bold) && !(face->style_flags & FT_STYLE_FLAG_BOLD) && !FT_IS_FIXED_WIDTH(face) && !qEnvironmentVariableIsSet("QT_NO_SYNTHESIZED_BOLD")) { if (const TT_OS2 *os2 = reinterpret_cast(FT_Get_Sfnt_Table(face, ft_sfnt_os2))) { - if (os2->usWeightClass < 700 && fontDef.pixelSize < 64) - embolden = true; + if (os2->usWeightClass < 700 && +@@ -756,6 +757,7 @@ bool QFontEngineFT::init(FaceId faceId, bool antialias, GlyphFormat format, + } } } +#endif diff --git a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend index b7c794573..ceebf5b25 100644 --- a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend @@ -2,7 +2,7 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos93" +EXTENDPRAUTO_append = "webos94" # Remove LGPL3-only files python do_patch_append() { @@ -80,16 +80,19 @@ PACKAGECONFIG_remove = "tests" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +# Apply webOS specific patches to only SRCREV tested +WEBOS_PATCH_SRCREV = "eae95814a46386f8930eeae5486513a78a7a4ddc" +PATCHTOOL = "git" + # Upstream-Status: Inappropriate SRC_URI_append = " \ - file://9901-Disable-Faux-bolding-in-Qts-FreeType-FontEngine.patch \ + file://9901-Disable-Faux-bolding-in-Qts-FreeType-FontEngine.patch;rev=${WEBOS_PATCH_SRCREV} \ " - # TODO: qtbase-native fails to build with g++ from hosttools(7.5.0) # Drop this once our build host has a newer version of g++. SRC_URI_append_class-native = " \ - file://0001-Fix-compile-error-with-g-7.5.0.patch \ - file://0002-Revert-commits-causing-a-compile-error-with-g-7.patch \ + file://0001-Fix-compile-error-with-g-7.5.0.patch;rev=${WEBOS_PATCH_SRCREV} \ + file://0002-Revert-commits-causing-a-compile-error-with-g-7.patch;rev=${WEBOS_PATCH_SRCREV} \ " # Flags needed for webOS diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend index 4b5876609..30116765a 100644 --- a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend @@ -2,19 +2,23 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos74" +EXTENDPRAUTO_append = "webos75" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +# Apply webOS specific patches to only SRCREV tested +WEBOS_PATCH_SRCREV = "00c352c4d4b61f8c7a6243768bc5375c3dca3e76" +PATCHTOOL = "git" + # Upstream-Status: Backport, Submitted SRC_URI_append_class-target = " \ - file://0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch \ + file://0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch;rev=${WEBOS_PATCH_SRCREV} \ " # Upstream-Status: Inappropriate SRC_URI_append = " \ - file://0001-Revert-use-boolean-for-when-property.patch \ - file://0002-Revert-Don-t-hide-the-inputMethod-when-finishing-the.patch \ + file://0001-Revert-use-boolean-for-when-property.patch;rev=${WEBOS_PATCH_SRCREV} \ + file://0002-Revert-Don-t-hide-the-inputMethod-when-finishing-the.patch;rev=${WEBOS_PATCH_SRCREV} \ " # Supplement tool for qmllint diff --git a/meta-webos/recipes-qt/qt6/qtwayland/0001-Add-option-for-more-features.patch b/meta-webos/recipes-qt/qt6/qtwayland/0001-Add-option-for-more-features.patch deleted file mode 100644 index 5d275fc2d..000000000 --- a/meta-webos/recipes-qt/qt6/qtwayland/0001-Add-option-for-more-features.patch +++ /dev/null @@ -1,86 +0,0 @@ -From 2ff13f7be73416e00bad72009a82f2e69fa207eb Mon Sep 17 00:00:00 2001 -From: Jaeyoon Jung -Date: Wed, 14 Jul 2021 19:14:46 +0900 -Subject: [PATCH] Add option for more features - -Change-Id: Id757e3102d03eecd32a090b7f607cc50f4e50dd5 -Upstream-Status : Inappropriate [webOS specific] ---- - src/client/configure.cmake | 16 ++++++++++++++++ - src/plugins/CMakeLists.txt | 8 ++++++-- - src/plugins/hardwareintegration/CMakeLists.txt | 2 +- - .../compositor/CMakeLists.txt | 4 +++- - 4 files changed, 26 insertions(+), 4 deletions(-) - -diff --git a/src/client/configure.cmake b/src/client/configure.cmake -index 11612d11..8bd0e7ce 100644 ---- a/src/client/configure.cmake -+++ b/src/client/configure.cmake -@@ -222,6 +222,22 @@ qt_feature("wayland-shm-emulation-server-buffer" PRIVATE - LABEL "Shm emulation server buffer integration" - CONDITION QT_FEATURE_wayland_client AND QT_FEATURE_opengl - ) -+qt_feature("wayland-eglstream-controller" PRIVATE -+ LABEL "EGLStream controller" -+ CONDITION QT_FEATURE_wayland_client -+) -+qt_feature("wayland-client-hwintegration-plugins" PRIVATE -+ LABEL "Client hardware integration plugins" -+ CONDITION QT_FEATURE_wayland_client -+) -+qt_feature("wayland-platform-plugins" PRIVATE -+ LABEL "Wayland platform plugins" -+ CONDITION QT_FEATURE_wayland_client -+) -+qt_feature("wayland-decoration-plugins" PRIVATE -+ LABEL "decoration plugins" -+ CONDITION QT_FEATURE_wayland_client -+) - qt_configure_add_summary_section(NAME "Qt Wayland Drivers") - qt_configure_add_summary_entry(ARGS "wayland-egl") - qt_configure_add_summary_entry(ARGS "wayland-brcm") -diff --git a/src/plugins/CMakeLists.txt b/src/plugins/CMakeLists.txt -index ef58376a..6253156b 100644 ---- a/src/plugins/CMakeLists.txt -+++ b/src/plugins/CMakeLists.txt -@@ -2,7 +2,11 @@ - - add_subdirectory(hardwareintegration) - if(TARGET Qt::WaylandClient) -- add_subdirectory(platforms) -- add_subdirectory(decorations) -+ if(QT_FEATURE_wayland_platform_plugins) -+ add_subdirectory(platforms) -+ endif() -+ if(QT_FEATURE_wayland_decoration_plugins) -+ add_subdirectory(decorations) -+ endif() - add_subdirectory(shellintegration) - endif() -diff --git a/src/plugins/hardwareintegration/CMakeLists.txt b/src/plugins/hardwareintegration/CMakeLists.txt -index 656b43b8..5bcf1771 100644 ---- a/src/plugins/hardwareintegration/CMakeLists.txt -+++ b/src/plugins/hardwareintegration/CMakeLists.txt -@@ -1,6 +1,6 @@ - # Generated from hardwareintegration.pro. - --if(TARGET Qt::WaylandClient) -+if(TARGET Qt::WaylandClient AND QT_FEATURE_wayland_client_hwintegration_plugins) - add_subdirectory(client) - endif() - if(TARGET Qt::WaylandCompositor) -diff --git a/src/plugins/hardwareintegration/compositor/CMakeLists.txt b/src/plugins/hardwareintegration/compositor/CMakeLists.txt -index 67ca5a4b..ead40312 100644 ---- a/src/plugins/hardwareintegration/compositor/CMakeLists.txt -+++ b/src/plugins/hardwareintegration/compositor/CMakeLists.txt -@@ -6,7 +6,9 @@ if(QT_FEATURE_wayland_dmabuf_client_buffer) - endif() - if(QT_FEATURE_wayland_egl) - add_subdirectory(wayland-egl) -- add_subdirectory(wayland-eglstream-controller) -+ if(QT_FEATURE_wayland_eglstream_controller) -+ add_subdirectory(wayland-eglstream-controller) -+ endif() - endif() - if(QT_FEATURE_wayland_brcm) - add_subdirectory(brcm-egl) diff --git a/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend b/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend index 532f3d645..1b7595253 100644 --- a/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend @@ -2,14 +2,10 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos24" +EXTENDPRAUTO_append = "webos25" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" -SRC_URI_append = " \ - file://0001-Add-option-for-more-features.patch \ -" - # More options for fine-tuned configuration PACKAGECONFIG[brcm] = "-DFEATURE_wayland_brcm=ON,-DFEATURE_wayland_brcm=OFF," PACKAGECONFIG[drm-egl-server-buffer] = "-DFEATURE_wayland_drm_egl_server_buffer=ON,-DFEATURE_wayland_drm_egl_server_buffer=OFF," @@ -20,14 +16,16 @@ PACKAGECONFIG[client-fullscreen-shell-v1] = "-DFEATURE_wayland_client_fullscreen PACKAGECONFIG[client-ivi-shell] = "-DFEATURE_wayland_client_ivi_shell=ON,-DFEATURE_wayland_client_ivi_shell=OFF," PACKAGECONFIG[client-wl-shell] = "-DFEATURE_wayland_client_wl_shell=ON,-DFEATURE_wayland_client_wl_shell=OFF," PACKAGECONFIG[client-xdg-shell] = "-DFEATURE_wayland_client_xdg_shell=ON,-DFEATURE_wayland_client_xdg_shell=OFF," -# options available by 0001-Add-option-to-disable-plugins.patch -PACKAGECONFIG[eglstream-controller] = "-DFEATURE_wayland_eglstream_controller=ON,-DFEATURE_wayland_eglstream_controller=OFF," -PACKAGECONFIG[client-hwintegration-plugins] = "-DFEATURE_wayland_client_hwintegration_plugins=ON,-DFEATURE_wayland_client_hwintegration_plugins=OFF," -PACKAGECONFIG[platform-plugins] = "-DFEATURE_wayland_platform_plugins=ON,-DFEATURE_wayland_platform_plugins=OFF," -PACKAGECONFIG[decoration-plugins] = "-DFEATURE_wayland_decoration_plugins=ON,-DFEATURE_wayland_decoration_plugins=OFF," # PACKAGECONFIG for webos PACKAGECONFIG = "wayland-server wayland-client client-wl-shell" # qtwayland-qmlplugins is not used in webos RRECOMMENDS_${PN}_remove = "${PN}-qmlplugins" + +do_install_append() { + # Remove files unnecessary or conflict with qtwayland-webos + rm -rf ${D}${QT6_INSTALL_PLUGINSDIR}/platforms \ + ${D}${QT6_INSTALL_PLUGINSDIR}/{wayland-decoration-client,wayland-graphics-integration-client} \ + ${D}${QT6_INSTALL_PLUGINSDIR}/wayland-graphics-integration-server/libqt-wayland-compositor-wayland-eglstream-controller.so +} From 13f72c6c0fd7401b6548a105f734fb5377826c89 Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Fri, 19 Nov 2021 16:42:37 +0900 Subject: [PATCH 0201/2022] qtbase=webos95 (workaround issue with meta-qt6/dev) :Release Notes: Make sure openssl not set in PACKAGECONFIG_class-native. :Detailed Notes: qtbase=webos95 Remove openssl from PACKAGECONFIG_class-native to avoid a build error. :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-12127] CCC: Update meta-qt6 to v6.2.2 Change-Id: I574cc33994aa3a3972583e3719700e4b9acec6d3 --- meta-webos/recipes-qt/qt6/qtbase_git.bbappend | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend index ceebf5b25..bd55d4dcc 100644 --- a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend @@ -2,7 +2,7 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos94" +EXTENDPRAUTO_append = "webos95" # Remove LGPL3-only files python do_patch_append() { @@ -102,3 +102,12 @@ TARGET_CXXFLAGS_append = " \ VIRTUAL-RUNTIME_gpu-libs ?= "" RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_gpu-libs}" + +# Workaround needed since https://codereview.qt-project.org/c/yocto/meta-qt6/+/366219 +# otherwise you get: +# ERROR: Nothing RPROVIDES 'libssl-native' (but virtual:native:/home/noelma/work/webos/build-webos/meta-qt6/recipes-qt/qt6/qtbase_git.bb RDEPENDS on or otherwise requires it) +# NOTE: Runtime target 'libssl-native' is unbuildable, removing... +# Missing or unbuildable dependency chain was: ['libssl-native'] +# ERROR: Required build target 'qtbase' has no buildable providers. +# Missing or unbuildable dependency chain was: ['qtbase', 'qtbase-native', 'libssl-native'] +PACKAGECONFIG_class-native_remove = "openssl" From db9e8d3868355c885fae296d4344e9fdbfb79eb3 Mon Sep 17 00:00:00 2001 From: "taeyoung.hong" Date: Fri, 8 Oct 2021 14:15:01 +0900 Subject: [PATCH 0202/2022] ose: enact-dev-native=v4.1.6 enact-framework=r15 enact-sandstone=r7,v2.1.0 :Release Notes: Update enact version of RP :Detailed Notes: enact-dev-native 4.1.2..4.1.6: a578422 4.1.6 release 84704bf 4.1.6 release bd65fd8 4.1.5 release 4b47241 4.1.5 release b753ecd WRN-10013: Remove script for adding skin name (#255) 76cd65b Change package-lock.json to npm-shrinkwrap.json (#253) 04a6272 4.1.4 release e63166b 4.1.4 release 80cd416 WRN-8331: Update dependencies (#252) 2875ddb 4.1.3 release 8847f6a 4.1.3 release 5d4332e 4.1.3 release 23afd5d WRN-8067: Update PostCSS packages (#251) enact-sandstone 2.0.1..2.1.0: 391ae759 2.1.0 release b44987b4 Version value updating 3e506c96 Update dependency Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) cd207d8e Update a change log for 2.1.0 Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) fb7aeeb4 WRN-1236: Updated panels sampler to render VirtualGrisList within panel with fixed items (#1113) 1868f980 WRN-10979: Support color customization (#1110) 61b853f1 PLAT-143623: Added extra screenshot tests for RadioItem (#925) fd2bb021 PLAT-143533: Added screenshot tests for Spinner (#913) 03e76c10 WRN-10109: Fix strange results in the screenshot test (#1106) 6741301d WRN-6719: Revert ContextualPopupDecorator arrow patch (#1105) 0ed3638b WRN-8901: Migrated unit tests to React Testing-Library (#1092) e76def58 Merge branch 'release/2.0.x' into develop c2fa409c 2.0.4 release 982130b1 Version value updating 5db5f133 Update a change log for 2.0.4 Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 243efb78 Update dependency 745c36b2 WRN-9962: Add new icons bluetooth, moodmode and changepassword (#1099) 69a23ff5 Update a change log for 2.0.4 Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) fce12783 Use node14 instead of lts for Travis test (#1096) 620e5830 WRN-8939: Fix font rules in some locales (#1094) e7c9fa89 2.0.3 release 50032bf2 Version value updating d7dd4882 Update dependency 5f2cdfee Update a change log for 2.0.3 Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 3c5b07e2 Update dependency 7a545897 WRN-9173: TimePicker: Fixed disabled color of separator (#1090) 36154a1e WRN-8939: Add India region font entries to fontGenerator (#1088) 786ea3fa PLAT-143566: Added screenshot tests for VirtualList and VirtualGridList (#942) 9184982d WRN-7507: Remove recompose in Heading (#1086) dea1036a PLAT-143552: Added screenshot tests for ProgressButton (#922) f079f852 2.0.2 release f53be222 Version value updating 283386a3 Update dependency 60b856ce Update changelogs for 2.0.2 e55ef9ce WRN-7521: Update Sandstone_Icons.ttf adding `spanner` icon Enact-DCO-1.0-Signed-off-by: Seungho Park 1e2393d9 WRN-8227: change light skink progressbar color for visibility (#1085) 3a09769f WRN-7521: Adding a new icon `spanner` (#1084) a7367b58 WRN-7368: VirtualList: Ignore keyEvent when the data-index is unreliable (#1082) :Testing Performed: Verf built and locally tested :QA Notes: N/A :Issues Addressed: [WRN-10981] Update enact version of RP [WRN-12079] CCC: Enact: Update Enact Version Change-Id: Ie2e62c0cc38e66a3bb201512473394b72c7b99c8 --- .../enact-dev/enact-dev-native.bb | 4 +-- .../enactjs-apps/enact-framework.bb | 8 ++--- .../enactjs-apps/enact-sandstone.bb | 29 ++++--------------- 3 files changed, 11 insertions(+), 30 deletions(-) diff --git a/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb b/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb index fa15fefb9..7cc47786e 100644 --- a/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb +++ b/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb @@ -38,8 +38,8 @@ SRCREV_FORMAT = "main_cli-legacy_jsdoc-to-ts" # tag whose hash is specified in SRCREV, so PV and SRCREV will always change # together. -PV = "4.1.2" -SRCREV = "396a8b32fce74609d33f7b3e38c6ef75a1b59357" +PV = "4.1.6" +SRCREV = "af42d9de312dab537e8a7539b434d1c3ef42cbb7" SRCREV_cli-legacy = "bf5012e50bdca62ff596b73a55a5b5f93ccf1069" SRCREV_jsdoc-to-ts = "91e3709da01f4a8e0d57c2ed80d068789acf37eb" diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb index 3565d437e..b134e1f74 100644 --- a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb +++ b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb @@ -25,7 +25,7 @@ SRC_URI = " \ PV = "4.0.3" SRCREV_main = "8d4590d46fc35d64635e9e017926dc88be8fe1e2" -SRCREV_enact = "e5c7a0c9d3b8d15321f5fff3c0d17bc0ae9a786e" +SRCREV_enact = "d2d5262c8d026fbfd8fa635e5364491dc83cba7c" do_fetch[vardeps] += "SRCREV_enact" SRCREV_FORMAT = "main_enact" @@ -39,7 +39,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ direction@1.0.4 \ dom-walk@0.1.2 \ encoding@0.1.13 \ - fbjs@0.8.17 \ + fbjs@0.8.18 \ global@4.4.0 \ hoist-non-react-statics@2.5.5 \ iconv-lite@0.6.3 \ @@ -66,7 +66,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ scheduler@0.20.2 \ setimmediate@1.0.5 \ symbol-observable@1.2.0 \ - ua-parser-js@0.7.28 \ + ua-parser-js@0.7.31 \ warning@4.0.3 \ whatwg-fetch@3.6.2 \ xhr@2.6.0 \ @@ -76,7 +76,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ # NOTE: We only need to bump PR if we change something OTHER than # PV, SRCREV or the dependencies statement above. -PR = "r14" +PR = "r15" # Skip unneeded tasks do_configure[noexec] = "1" diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb b/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb index 011c946e2..97e5c07b8 100644 --- a/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb +++ b/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb @@ -22,55 +22,36 @@ SRC_URI = " \ # algorithm properly recognizes that a pre-release precedes the associated final # release (e.g., 1.0-pre.1 < 1.0). -PV = "2.0.1" +PV = "2.1.0" -SRCREV = "d82b4339adb6b89b060775fc12af0904c6eb8879" -SRCREV_enact = "e5c7a0c9d3b8d15321f5fff3c0d17bc0ae9a786e" +SRCREV = "e69d6dcdf0993bc00b79495af68c1796dc027193" +SRCREV_enact = "d2d5262c8d026fbfd8fa635e5364491dc83cba7c" do_fetch[vardeps] += "SRCREV_enact" SRCREV_FORMAT = "main_enact" # Ordered dependency list for Sandstone; provides shrink-wrap style locking in of package versions WEBOS_ENACT_DEPENDENCIES ??= "\ - asap@2.0.6 \ - change-emitter@0.1.6 \ classnames@2.3.1 \ - core-js@1.2.7 \ direction@1.0.4 \ dom-walk@0.1.2 \ - encoding@0.1.13 \ - fbjs@0.8.17 \ global@4.4.0 \ - hoist-non-react-statics@2.5.5 \ - iconv-lite@0.6.3 \ - ilib@14.9.2 \ + ilib@14.11.1 \ invariant@2.2.4 \ is-function@1.0.2 \ - is-stream@1.1.0 \ - isomorphic-fetch@2.2.1 \ js-tokens@4.0.0 \ loose-envify@1.4.0 \ min-document@2.19.0 \ - node-fetch@1.7.3 \ object-assign@4.1.1 \ parse-headers@2.0.4 \ process@0.11.10 \ - promise@7.3.1 \ prop-types@15.7.2 \ ramda@0.24.1 \ react@17.0.2 \ react-dom@17.0.2 \ react-is@17.0.2 \ - react-lifecycles-compat@3.0.4 \ - recompose@0.30.0 \ - regenerator-runtime@0.13.9 \ - safer-buffer@2.1.2 \ scheduler@0.20.2 \ - setimmediate@1.0.5 \ - symbol-observable@1.2.0 \ - ua-parser-js@0.7.28 \ warning@4.0.3 \ - whatwg-fetch@3.6.2 \ xhr@2.6.0 \ xtend@4.0.2 \ " @@ -78,7 +59,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ # NOTE: We only need to bump PR if we change something OTHER than # PV, SRCREV or the dependencies statement above. -PR = "r6" +PR = "r7" # Skip unneeded tasks do_configure[noexec] = "1" From 44553b00266c66e61816756bc89f06faab188352 Mon Sep 17 00:00:00 2001 From: "shoyeb.khan" Date: Thu, 9 Dec 2021 15:43:22 +0530 Subject: [PATCH 0203/2022] bluetooth-sil-bluez5=77 :Release Notes: Fix RDX crash in Bluetooth Service :Detailed Notes: Unregister registered function by calling g_bus_unwatch_name bluetooth-sil-bluez5: submissions/76..submissions/77 e5dbab0 Fix for crash issue :Testing Performed: Tested results updated in WRN-12846 :QA Notes: N/A :Issues Addressed: [WRN-12846] CCC: bluetooth-sil-bluez5=77 [WRN-12128] [RDX_CRASH][webos] /usr/sbin/webos-bluetooth-service in n/a (n/a + 0x0) Change-Id: I4b544c88ccaa4167ffdd5ef3c2269cf922a77515 --- meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb index d545a68ab..1ce699159 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb @@ -17,7 +17,7 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES ??= "" # Add runtime dependency on bluez5 OBEX service when we have to support FTP RDEPENDS_${PN} += "${@ bb.utils.contains('WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES', 'FTP', 'bluez5-obex', '', d)}" -WEBOS_VERSION = "0.1.0-76_2b5ddd45322fb069460f192669356b0f1232f623" +WEBOS_VERSION = "0.1.0-77_1916b7be5f4e38a45a9c3c0690c642a4a997034a" PR = "r4" inherit webos_component From 0312d69ca47975b58b5768b144f69c75384502b7 Mon Sep 17 00:00:00 2001 From: Hyunjae Shin Date: Wed, 8 Dec 2021 07:46:34 +0900 Subject: [PATCH 0204/2022] webos.conf: Release webOS OSE v2.14.1 :Release Notes: Set software version as webOS OSE v2.14.1 :Detailed Notes: Set WEBOS_DISTRO_VERSION_MINOR to "14.1" :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: N/A Change-Id: I9f644af745be14b27404dc33442b10f9dfe26f44 --- meta-webos/conf/distro/webos.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/conf/distro/webos.conf b/meta-webos/conf/distro/webos.conf index e2792cc28..cf1764da5 100644 --- a/meta-webos/conf/distro/webos.conf +++ b/meta-webos/conf/distro/webos.conf @@ -13,7 +13,7 @@ WEBOS_DISTRO_BUILD_CODENAME = "master" # g - github WEBOS_DISTRO_VERSION_MAJOR = "2" -WEBOS_DISTRO_VERSION_MINOR = "14.0" +WEBOS_DISTRO_VERSION_MINOR = "14.1" WEBOS_DISTRO_VERSION_TYPE = "g" DISTRO_VERSION = "${WEBOS_DISTRO_VERSION_MAJOR}.${WEBOS_DISTRO_VERSION_MINOR}.${WEBOS_DISTRO_VERSION_TYPE}" From c00b8da6f91bf27f626d0b91a3b910875271c4f4 Mon Sep 17 00:00:00 2001 From: "seonmi1.jin" Date: Mon, 13 Dec 2021 15:25:47 +0900 Subject: [PATCH 0205/2022] ose: webos-fonts=13 :Release Notes: Update Noto fonts :Detailed Notes: submissions/12..submissions/13 5836dc0 Update fonts :Testing Performed: See the CCC ticket :QA Notes: NA :Issues Addressed: [WRN-739] Update webOS OSE fonts [WRN-12888] CCC: ose: webos-fonts=13 Change-Id: Ib8fb566bebbb73adfed6bf176fefc86f86c3b125 --- meta-webos/recipes-webos/webos-fonts/webos-fonts.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/webos-fonts/webos-fonts.bb b/meta-webos/recipes-webos/webos-fonts/webos-fonts.bb index 14ad57736..c10a54b6a 100644 --- a/meta-webos/recipes-webos/webos-fonts/webos-fonts.bb +++ b/meta-webos/recipes-webos/webos-fonts/webos-fonts.bb @@ -2,7 +2,7 @@ require ${BPN}.inc -WEBOS_VERSION = "1.0.0-12_cb1ac34b24377df14381549a0b62b275f157714c" +WEBOS_VERSION = "1.0.0-13_a2527577ba5245352883939bd1a2be3d333c5248" PR = "r0" inherit webos_arch_indep From 3dad3e76826b70ad2d316b59fb7e59f25b7e36ae Mon Sep 17 00:00:00 2001 From: "charles20.kelvin" Date: Thu, 18 Nov 2021 18:27:51 +0530 Subject: [PATCH 0206/2022] ose: db8=18 luna-service2=25 cmake-modules-webos-native=5-r4 :Release Notes: Indirect/Proxy Calls support in LS2 Added new APIs in DB8 Mojo library to support luna indirect proxy calls. Add webos_sysbus_proxyagentssdir macro to support proxy feature in LS2 Add _webos_install_system_bus_files for proxy-agents file :Detailed Notes: Activity manager is using DB8's APIs createRequest and send to communicate with LS2. Currently there is no way to request indirect calls. Added APIs in DB8 Mojo library to support LS2 indirect calls. db8: submissions/17..submissions/18 8f94db5 Added new APIs in DB8 Mojo library to support luna indirect/ proxy calls. The Proxy implementation for support of indirect calls includes - Added proxy calls support in LS2 library and hub - Includes changes Luna module - This feature will help in preventing piggybacking of non privileged apps/services on privileged components. - The features has the implementation for supporting Proxy calls, When activity manager / notification manager calls backs, they call Luna API with OEM trust level, Proxy Calls are made so that the callbacks are made with the trust level of the caller. - Added Integration test cases for Proxy calls. luna-service2: submissions/23..submissions/25 9a2a7e4 Adopt Proxy calls changes for 64 bit LS2 8976237 Indirect/Proxy Calls support in LS2 This patch helps to define the proxy-agents.d directory and deploy proxy-agent file cmake-modules-webos-native: submissions/3..submissions/5 c3a5d82 Fix license issue eb6172c Add macro to support proxy-agents directory :Testing Performed: Build Success Refer WRN-10986 for test results :QA Notes: N/A :Issues Addressed: [WRN-10986] CCC: db8={ose:18} luna-service2={ose:25} ose: cmake-modules-webos-native=5-r4 [WRN-11512] Verify Proxy changes in verification image and Address review comments [WRN-8356] cmake-modules-webos-native and conf changes for proxy-agents [WRN-1446] Analyze integration test case code for proxy calls [WRN-10404] Proxy Testing on board [WRN-809] Proxy for permission flow implementation [WRN-808] Implement framework for Proxy Calls [WRN-9535] Create indirect calls integration test cases [WRN-812] Adapt proxy changes [WRN-8355] Whitelisting implementation of proxy-agents in Hub [WRN-1150] Add Proxy integration test code [WRN-7090] Handle proxy connections in LS2 library [WRN-7754] Add LS2 Proxy calls support in DB8 Mojo library [WRN-8626] Proxy calls support in DB8 Mojo library [WRN-7754] Add LS2 Proxy calls support in DB8 Mojo library Change-Id: I166f4a6368018d20102f77f13725871227f3d92e --- .../cmake-modules-webos/cmake-modules-webos-native.bb | 6 +++--- meta-webos/recipes-webos/db8/db8.bb | 2 +- meta-webos/recipes-webos/luna-service2/luna-service2.bb | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos-native.bb b/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos-native.bb index 5515f72b4..a89451ce2 100644 --- a/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos-native.bb +++ b/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos-native.bb @@ -3,10 +3,10 @@ DESCRIPTION = "CMake modules used by webOS" LICENSE = "Apache-2.0" SECTION = "webos/devel/tools" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" +LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10" -WEBOS_VERSION = "1.6.3-3_a7010cb34dd263b63369c83a530890026b8c5a25" -PR = "r3" +WEBOS_VERSION = "1.6.3-5_7056e27bcabc4656baa1a4e972a7b0f345f4b02d" +PR = "r4" inherit webos_component inherit webos_public_repo diff --git a/meta-webos/recipes-webos/db8/db8.bb b/meta-webos/recipes-webos/db8/db8.bb index 8672ef07e..63a604ab2 100644 --- a/meta-webos/recipes-webos/db8/db8.bb +++ b/meta-webos/recipes-webos/db8/db8.bb @@ -21,7 +21,7 @@ VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_stat} ${VIRTUAL-RUNTIME_bash}" RDEPENDS_${PN}-tests_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -WEBOS_VERSION = "3.2.0-17_01e4377cada38dd59d431e7d74944c17adf9e549" +WEBOS_VERSION = "3.2.0-18_98fe9007a708a4831e3694b8afd8c3a260343aa5" PR = "r36" inherit webos_component diff --git a/meta-webos/recipes-webos/luna-service2/luna-service2.bb b/meta-webos/recipes-webos/luna-service2/luna-service2.bb index 07b2c491e..80c438b1c 100644 --- a/meta-webos/recipes-webos/luna-service2/luna-service2.bb +++ b/meta-webos/recipes-webos/luna-service2/luna-service2.bb @@ -14,7 +14,7 @@ VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS_${PN} = "luna-service2-security-conf ${VIRTUAL-RUNTIME_cpushareholder} ${VIRTUAL-RUNTIME_bash}" -WEBOS_VERSION = "3.21.2-23_2275e2850db459dc951d1140b08d54dfefd48dfa" +WEBOS_VERSION = "3.21.2-25_b81da83baba14a77e2ade4b7cf27cfff49c3cc01" PR = "r28" EXTRA_OECMAKE += "${@ '-DWEBOS_DISTRO_PRERELEASE:STRING="devel"' \ From 02c292086f4f1031bab5eb381e895f691a34d583 Mon Sep 17 00:00:00 2001 From: "akanksha.gupta" Date: Tue, 2 Nov 2021 16:16:55 +0530 Subject: [PATCH 0207/2022] ose:activitymanager=25 appinstalld2=36 :Release Notes: Support for proxy call with caller's role Added defualt trust level of external apps to dev :Detailed Notes: activitymanager: submissions/23..submissions/25 9009c78 Add activity manager proxy-agent file dbd4cc5 Added support for proxy calls with callers role appinstalld2: submissions/35..submissions/36 2a7ec8d Default trust level for external apps to "dev" :Testing Performed: Test Result updated in WRN-10067 :QA Notes: N/A :Issues Addressed: [WRN-10067] CCC: ose: activitymanager=25 appinstalld2=36 [WRN-3140] Implementation to support proxy call with callers role [WRN-3141] Verification of proxy call implementation [WRN-10514]: Analyze external apps trustLevels to "dev" Change-Id: Ibd7cc0917a1c52fb729c2b1d5f4bdf320df8a35c --- meta-webos/recipes-webos/activitymanager/activitymanager.bb | 2 +- meta-webos/recipes-webos/appinstalld2/appinstalld2.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/activitymanager/activitymanager.bb b/meta-webos/recipes-webos/activitymanager/activitymanager.bb index 42b28688c..04bddcfc3 100644 --- a/meta-webos/recipes-webos/activitymanager/activitymanager.bb +++ b/meta-webos/recipes-webos/activitymanager/activitymanager.bb @@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "luna-service2 db8 boost libpbnjson glib-2.0 pmloglib ${VIRTUAL-RUNTIME_init_manager}" -WEBOS_VERSION = "3.0.0-23_603d8d73ca78aaadb494e1008fbfbff3d62c9271" +WEBOS_VERSION = "3.0.0-25_c88abdd043783215abb9f722b6a8ebb99bda0ace" PR = "r11" inherit webos_component diff --git a/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb b/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb index c14ab9045..39a7d70a7 100644 --- a/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb +++ b/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "glib-2.0 luna-service2 libpbnjson pmloglib pmtrace boost icu" RDEPENDS_${PN} = "applicationinstallerutility ecryptfs-utils librolegen" -WEBOS_VERSION = "1.0.0-35_7fadf021243881a8d371fcb336971b5787faabb9" +WEBOS_VERSION = "1.0.0-36_8c8df6e829d2ea7be1c33010afecc8a3c41b76e5" PR = "r4" inherit webos_component From d29e8d362532d3e978f823af2a1fed370fbd4c1c Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Thu, 16 Dec 2021 08:35:02 +0900 Subject: [PATCH 0208/2022] ose: auto-luna-surface-manager=37 :Release Notes: Fix the keyboard focus issue in System UI views. :Detailed Notes: auto-luna-surface-manager: submissions/36..submissions/37 37dbea1 Enable key events for WebOSAutoSystemUIView :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-12983] CCC: auto-luna-surface-manager=37 Change-Id: I115a25a8ab161794c8c01e135a3ad046ac4a43c7 --- .../auto-luna-surface-manager/auto-luna-surface-manager.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb index 5531a2009..6c169431b 100644 --- a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb +++ b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb @@ -15,7 +15,7 @@ RDEPENDS_${PN} = " \ qtbase-plugins-webos \ " -WEBOS_VERSION = "0.0.1-36_724dd7e1cf728d916d2d2e45586a588fca3d9836" +WEBOS_VERSION = "0.0.1-37_777edd72d0b986e8e9656fa115bd040446276849" PR = "r7" inherit webos_qmake6 From 63ae1ee32a31496ce56a4bbd000e852c4f9eb0ec Mon Sep 17 00:00:00 2001 From: "p.dinesh" Date: Wed, 15 Dec 2021 18:41:09 +0530 Subject: [PATCH 0209/2022] com.webos.app.enactbrowser=49 :Release Notes: Fix websites displaying multiple times in history :Detailed Notes: com.webos.app.enactbrowser: submissions/48..submissions/49 924e3d0 Browsed websites displaying multiple times in history. :Testing Performed: Please check CCC tickets. :QA Notes: NA :Issues Addressed: [WRN-12981] CCC: com.webos.app.enactbrowser=49 [WRN-9361] [OSE-RPi4] : Browsed websites displaying multiple times in history. Change-Id: I2746b31ce8d3e0a1c17d6f2c45a6bc00e692e96f --- .../com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb index c12336bf8..e313642c7 100644 --- a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb +++ b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb @@ -1,7 +1,7 @@ # Copyright (c) 2018-2021 LG Electronics, Inc. SUMMARY = "Enact Based Web Browser" -AUTHOR = "Mikyung Kim " +AUTHOR = "Anish.td " SECTION = "webos/apps" LICENSE = "LicenseRef-EnactBrowser-Evaluation" LIC_FILES_CHKSUM = " \ @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=72b3e3cef46e5ab3e175e5b515dc3b18 \ " -WEBOS_VERSION = "1.0.0-48_1bb8f409d6376d2a7fb14043c3fb310adcc82a5a" +WEBOS_VERSION = "1.0.0-49_ee995d5f4affd66ca013cc912a5816ecbf692832" PR = "r16" inherit webos_public_repo From e737bc8485d8e4817f836a5591db3f2dc4cd8fe3 Mon Sep 17 00:00:00 2001 From: "akanksha.gupta" Date: Tue, 21 Dec 2021 19:11:51 +0530 Subject: [PATCH 0210/2022] ose:activitymanager=28 :Release Notes: Addressed ActivityManager issues. Instead of LSProxyCalls, LSCall is used for the following condition: If the destination service is "com.palm.bus" If the requester service and target service are same If the creator is com.webos.lunasend :Detailed Notes: activitymanager: submissions/25..submissions/28 374f0a5 Use LSCall if caller is com.webos.lunasend 0d87d0d Use LSCall if caller and callee are same 6f961df Use LSCall for target service "com.palm.bus" :Testing Performed: Test Result updated in WRN-13497 :QA Notes: N/A :Issues Addressed: [WRN-13497] CCC: activitymanager=28 [WRN-13389] Analyze and Fix activitymanager issue [WRN-12999] jobs are running after reboot [WRN-13001] LUNASERVICE ERROR -1028 is occurred [WRN-13391] "com.palm.configurator is not running." error is displayed [WRN-13449] State changing flow of mojomediadbspace is different for am-monitor [WRN-13450] "returnValue": true displayed for com.palm.activitymanager/cancel Change-Id: I91394dbcdd24fda23f99c9191e97dbb7cc07056e --- meta-webos/recipes-webos/activitymanager/activitymanager.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/activitymanager/activitymanager.bb b/meta-webos/recipes-webos/activitymanager/activitymanager.bb index 04bddcfc3..e4b30d6e5 100644 --- a/meta-webos/recipes-webos/activitymanager/activitymanager.bb +++ b/meta-webos/recipes-webos/activitymanager/activitymanager.bb @@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "luna-service2 db8 boost libpbnjson glib-2.0 pmloglib ${VIRTUAL-RUNTIME_init_manager}" -WEBOS_VERSION = "3.0.0-25_c88abdd043783215abb9f722b6a8ebb99bda0ace" +WEBOS_VERSION = "3.0.0-28_04cfbd927d37a51c185d03950900f03c77dba9de" PR = "r11" inherit webos_component From 83d7186fa8c70ae3cb744fe6263f7299d2172c70 Mon Sep 17 00:00:00 2001 From: "jongson.kim" Date: Tue, 21 Dec 2021 16:04:31 +0900 Subject: [PATCH 0211/2022] =?UTF-8?q?ose:=C2=A0qml-app-components=3D5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit :Release Notes: StyleLoader - component/resource customization features for qml :Detailed Notes: qml-app-components: submissions/4..submissions/5 050dd50 Introduce component/qmlObject StyleLoader 6c12a4b Introduce image/getImage function to manage image url df4a7e2 Introduce easyflashmount script 2c069d1 Update license notices :Testing Performed: BAT/CAT, Functionality testcases - Please check the CCC ticket :Issues Addressed: [WRN-13484] CCC: ose: qml-app-components=5 [WRN-13463] Integrate into OSE for T2 features [WRN-9208] Write codes for custom-module for qml customization. [WRN-9028] Write initial code for image customization [WRN-13464] Finalize TCs for new features [WRN-13448] Enhance stability for qml components Change-Id: Id20055258950d4a85905f47f4f86fd18282c21ff --- .../recipes-webos/qml-app-components/qml-app-components.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb b/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb index 682bca184..a7d4b5b73 100644 --- a/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb +++ b/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative luna-service2 glib-2.0" DEPENDS_append = " ${@ 'qtshadertools-native' if d.getVar('QT_VERSION', True) == '6' else '' }" -WEBOS_VERSION = "1.0.0-4_e147b3bc8dc6a5edbcf5f4431611bd4fcf520e3b" +WEBOS_VERSION = "1.0.0-5_176952582c70131e26b4ae68ac4e5ff257ee03cc" PR = "r4" inherit webos_qmake6 From bd64892923d434079c4b0fa3b9bd2c7dfc0ce1b6 Mon Sep 17 00:00:00 2001 From: sanjay poptani Date: Tue, 14 Dec 2021 11:16:59 +0530 Subject: [PATCH 0212/2022] luna-sysservice=20 :Release Notes: Revise enhanced security groups :Detailed Notes: - Moved softwareInfo/query from oem to dev - Added to new group software.query. luna-sysservice: submissions/19..submissions/20 c10eca1 Migrate to enhanced ACG :Testing Performed: Refer [WRN-13483] for test results :QA Notes: NA :Issues Addressed: [WRN-13483] CCC: luna-sysservice=20 [WRN-12839] verification and CCC task for API ACG(OSE) Change-Id: Ia9d1104e50819ec79a8801f4f63cf4e17ed07e32 --- meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb b/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb index 6394cf025..cee618f82 100644 --- a/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb +++ b/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb @@ -14,7 +14,7 @@ DEPENDS = "luna-service2 libpbnjson qtbase uriparser libxml2 sqlite3 pmloglib ny RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_ntp} tzcode" -WEBOS_VERSION = "4.4.0-19_2472a6b16e7b875f8daec46c322bf2a94f81201d" +WEBOS_VERSION = "4.4.0-20_6da3eade3c0a3b08e660097e8a57a58260cf68e1" PR = "r9" inherit webos_component From 9732cf72d7e54f79ee089ba7dcf5758cc8330d96 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Wed, 15 Dec 2021 16:44:00 +0900 Subject: [PATCH 0213/2022] ose: webruntime_87=11 webruntime_91=r52.2 wam=56 :Release Notes: - WAM error page refactoring - Bug fixes :Detailed Notes: webruntime_87: submissions/10..submissions/11 cfd33bbf717 [op][errorpage] Remove unnecessary error page generation implementation. e7a2896d5f8 fixup! [op][ds][native_scroll] Introduce a new command line flag for adjusting mouse wheel scroll distance webruntime_91: r52.1..r52.2 Re-enable LTTng build of web runtime. wam: submissions/55..submissions/56 53e2571 [op][tests][errorpage] Error page implementation tests. 7d98b1d [op][errorpage] Extend WAM error page handling. cfd8078 [op][life_cycle] Improve checks for killApp reasons. 7d7cd45 [op][qtless][life_cycle] Unregister from running list apps on closing. a3b7fa7 [op][qtless] Include LTTNG into WAM build :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-11807] stuttering gets worse when you press key for a long time in User Agreements page [WRN-11100] [RDX_CRASH][webos] /usr/bin/WebAppMgr in _ZNK12WebPageBlink16RenderProcessPidEv (libWebAppMgr.so.1.0 + 0x2ff20) [WRN-12118] [RDX_CRASH][webos] /usr/bin/WebAppMgr in _ZNK10WebAppBase10InstanceIdB5cxx11Ev (libWebAppMgrCore.so.1.0 + 0x25094) [WRN-12163] [RDX_CRASH][webos] /usr/bin/WebAppMgr in _ZNK12WebPageBlink16RenderProcessPidEv (libWebAppMgr.so.1.0 + 0x2ff24) [WRN-12866] [RDX_CRASH][webos] /usr/bin/WebAppMgr in n/a (libcbe.so + 0x313a304) [WRN-7585] : Include LTTNG into WAM build [WRN-7447] Remove override error page [WRN-7448] remove Launch() bridge [WRN-7449] Remove V8 Launch() code injection [WRN-10941] WAM error page implementation closeup. [WRN-7460] Error page test cases execution. [WRN-12099] Strings are not displayed in Trace-file. [WRN-12984] CCC: ose: webruntime_87=11 wam=56 webruntime_91={ose: r52.2 pro:pro.12} pro: v8=chromium91.3 Change-Id: I4132ac480cf20e2af43c1a268ae4031f36eb4c3d --- meta-webos/recipes-webos/chromium/webruntime-repo_87.inc | 2 +- meta-webos/recipes-webos/chromium/webruntime_91.bb | 6 +----- meta-webos/recipes-webos/wam/wam.bb | 2 +- 3 files changed, 3 insertions(+), 7 deletions(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc index 99fff795d..292ebf28f 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=28f5b870e5e06b9af5b96c9dd65b31c8" WEBOS_REPO_NAME = "chromium87" -WEBOS_VERSION = "87.0.4280.88-10_9e4a51ff951110ab1a6d88066cb6355a10cb4047" +WEBOS_VERSION = "87.0.4280.88-11_2aef2811320afb9a448930558f9183231c433b49" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium87" diff --git a/meta-webos/recipes-webos/chromium/webruntime_91.bb b/meta-webos/recipes-webos/chromium/webruntime_91.bb index d5ac8e0a2..1ba216d4c 100644 --- a/meta-webos/recipes-webos/chromium/webruntime_91.bb +++ b/meta-webos/recipes-webos/chromium/webruntime_91.bb @@ -6,17 +6,13 @@ require webruntime-repo${REPO_VERSION}.inc PROVIDES = "virtual/webruntime" -PR = "${INC_PR}.1" +PR = "${INC_PR}.2" PACKAGECONFIG[debug] = "symbol_level=2 optimize_for_size=true use_debug_fission=true,symbol_level=0" PACKAGECONFIG[debug-blink] = "blink_symbol_level=2,blink_symbol_level=1" PACKAGECONFIG[v8_lite] = "v8_enable_lite_mode=true,v8_enable_lite_mode=false" -# FIXME(neva): LTTng impl is incompatible with Perfetto feature in Chromium v.91 -# https://chromium-review.googlesource.com/c/chromium/src/+/2632755 -PACKAGECONFIG[lttng] = "use_lttng=false,," - PACKAGECONFIG_remove="jumbo" GN_ARGS_append = " use_x11=false" diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index 317da09b9..00455b537 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -18,7 +18,7 @@ RDEPENDS_${PN} += "util-linux" VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" -WEBOS_VERSION = "1.0.2-55_233715d16eeba34c2cc71bc813dbc60280475c44" +WEBOS_VERSION = "1.0.2-56_1faf20c6a14e8d3ede826e170097f6c4e68324be" PR = "r43" WAM_BUILD_SYSTEM = "webos_qmake6" From 9c20ce74d4dee3612929d842e8fab5b46da7992f Mon Sep 17 00:00:00 2001 From: "jeehyun.lee" Date: Tue, 21 Dec 2021 17:03:14 +0900 Subject: [PATCH 0214/2022] com.webos.service.mediaindexer=17-r8 :Release Notes: modify license identification :Detailed Notes: com.webos.service.mediaindexer: submissions/16..submissions/17 bdb59fc Add oss-pkg-info.yaml 0f00ca0 delete the LGE Proprietary license :Testing Performed: See the CCC jira ticket for results :QA Notes: NA :Issues Addressed: [WRN-13481] Add OSS package information file to MediaIndexer [WRN-13487] CCC: com.webos.service.mediaindexer=17-r8 Change-Id: I8ee07eb2980178c439522c69a6aad36408c5127f --- .../com.webos.service.mediaindexer.bb | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb b/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb index 0a5013114..852aa05b2 100644 --- a/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb +++ b/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb @@ -3,10 +3,12 @@ SUMMARY = "Media indexer service" AUTHOR = "Jaehoon Lee " LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10" +LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + " -WEBOS_VERSION = "1.0.0-16_0856b9721c202f887612865120412b1e29cf6087" -PR = "r7" +WEBOS_VERSION = "1.0.0-17_fc620525ae820a32bd6c2e7d2e3be8007d3ac328" +PR = "r8" inherit webos_component inherit webos_enhanced_submissions From ab385bb5e4028de0538f7c33f997e27ed501448b Mon Sep 17 00:00:00 2001 From: Hotaek Jung Date: Tue, 23 Nov 2021 10:42:42 +0900 Subject: [PATCH 0215/2022] systemd_%=webos9 wam=r44 webos-initscripts=81 :Release Notes: Change the scope of memory.pressure to system slice and some value :Detailed Notes: systemd: webos8..webos9 change pressure limit from 0.05 to 0.2 change memory.pressure from full to some wam: r43..r44 remove the patch inserting option for oomd monitoring from wam.service file webos-initscript: submissions/79..submissions/81 233ecf7 Fix no handling for *.slice ac2e716 Change the scope of the monitoring cgroups to system slice :Testing Performed: Local Test : OK :QA Notes: :Issues Addressed: [WRN-13009] [OSE-RPi4] : The number of the running apps is equal to 10 [WRN-13465] CCC: systemd_%=webos9 wam=r44 webos-initscripts=81 Change-Id: I6c75a71f4a70f93156eddc3548fe058f7f1f5168 --- .../recipes-core/initscripts/webos-initscripts.bb | 2 +- .../0003-systemd-oomd-modify-oomd.conf.patch | 2 +- .../systemd/systemd/0004-systemd-oomd-to-some.patch | 13 +++++++++++++ .../systemd/0005-systemd-oomd-change-duration.patch | 12 ++++++++++++ meta-webos/recipes-core/systemd/systemd_%.bbappend | 4 +++- meta-webos/recipes-webos/wam/wam.bb | 3 +-- .../wam/wam/0002-add_oomd_option.patch | 9 --------- 7 files changed, 31 insertions(+), 14 deletions(-) create mode 100644 meta-webos/recipes-core/systemd/systemd/0004-systemd-oomd-to-some.patch create mode 100644 meta-webos/recipes-core/systemd/systemd/0005-systemd-oomd-change-duration.patch delete mode 100644 meta-webos/recipes-webos/wam/wam/0002-add_oomd_option.patch diff --git a/meta-webos/recipes-core/initscripts/webos-initscripts.bb b/meta-webos/recipes-core/initscripts/webos-initscripts.bb index 8367bff2c..3f9d95e98 100644 --- a/meta-webos/recipes-core/initscripts/webos-initscripts.bb +++ b/meta-webos/recipes-core/initscripts/webos-initscripts.bb @@ -18,7 +18,7 @@ RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_init_manager} ${VIRTUAL-RUNTIME_bash} python PROVIDES = "initscripts" RPROVIDES_${PN} = "initscripts initd-functions" -WEBOS_VERSION = "3.0.0-79_7a5d586e809a92e99781d54b12d01646b8d63fc0" +WEBOS_VERSION = "3.0.0-81_f5674f46df823203daaf8cafb037be0d086d4dd8" PR = "r17" inherit webos_component diff --git a/meta-webos/recipes-core/systemd/systemd/0003-systemd-oomd-modify-oomd.conf.patch b/meta-webos/recipes-core/systemd/systemd/0003-systemd-oomd-modify-oomd.conf.patch index 66c98f83c..b1017da8d 100644 --- a/meta-webos/recipes-core/systemd/systemd/0003-systemd-oomd-modify-oomd.conf.patch +++ b/meta-webos/recipes-core/systemd/systemd/0003-systemd-oomd-modify-oomd.conf.patch @@ -17,5 +17,5 @@ index b3a457f887..e19052d0f8 100644 #SwapUsedLimit=90% -#DefaultMemoryPressureLimit=60% -#DefaultMemoryPressureDurationSec=30s -+DefaultMemoryPressureLimit=0.05% ++DefaultMemoryPressureLimit=0.2% +DefaultMemoryPressureDurationSec=1s diff --git a/meta-webos/recipes-core/systemd/systemd/0004-systemd-oomd-to-some.patch b/meta-webos/recipes-core/systemd/systemd/0004-systemd-oomd-to-some.patch new file mode 100644 index 000000000..cfc85360a --- /dev/null +++ b/meta-webos/recipes-core/systemd/systemd/0004-systemd-oomd-to-some.patch @@ -0,0 +1,13 @@ +diff --git a/src/oom/oomd-util.c b/src/oom/oomd-util.c +index 5bf81479c9..44f1f2c364 100644 +--- a/src/oom/oomd-util.c ++++ b/src/oom/oomd-util.c +@@ -294,7 +294,7 @@ int oomd_cgroup_context_acquire(const char *path, OomdCGroupContext **ret) { + if (r < 0) + return log_debug_errno(r, "Error getting cgroup memory pressure path from %s: %m", path); + +- r = read_resource_pressure(p, PRESSURE_TYPE_FULL, &ctx->memory_pressure); ++ r = read_resource_pressure(p, PRESSURE_TYPE_SOME, &ctx->memory_pressure); + if (r < 0) + return log_debug_errno(r, "Error parsing memory pressure from %s: %m", p); + diff --git a/meta-webos/recipes-core/systemd/systemd/0005-systemd-oomd-change-duration.patch b/meta-webos/recipes-core/systemd/systemd/0005-systemd-oomd-change-duration.patch new file mode 100644 index 000000000..fe9b71ee8 --- /dev/null +++ b/meta-webos/recipes-core/systemd/systemd/0005-systemd-oomd-change-duration.patch @@ -0,0 +1,12 @@ +diff -uNr systemd_org/src/oom/oomd-manager.h systemd/src/oom/oomd-manager.h +--- systemd_org/src/oom/oomd-manager.h 2021-12-22 18:30:06.043055789 +0900 ++++ systemd/src/oom/oomd-manager.h 2021-12-23 10:34:54.359782129 +0900 +@@ -23,7 +23,7 @@ + #define THRESHOLD_SWAP_USED_PERCENT 5 + + #define RECLAIM_DURATION_USEC (30 * USEC_PER_SEC) +-#define POST_ACTION_DELAY_USEC (15 * USEC_PER_SEC) ++#define POST_ACTION_DELAY_USEC (1 * USEC_PER_SEC) + + typedef struct Manager Manager; + diff --git a/meta-webos/recipes-core/systemd/systemd_%.bbappend b/meta-webos/recipes-core/systemd/systemd_%.bbappend index d78f717a3..66f4b6784 100644 --- a/meta-webos/recipes-core/systemd/systemd_%.bbappend +++ b/meta-webos/recipes-core/systemd/systemd_%.bbappend @@ -1,12 +1,14 @@ # Copyright (c) 2017-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos8" +EXTENDPRAUTO_append = "webos9" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" SRC_URI_append_webos = " \ file://0001-systemd-oomd-depend-on-swap-on.patch \ file://0002-Add-webos-interface.patch \ file://0003-systemd-oomd-modify-oomd.conf.patch \ + file://0004-systemd-oomd-to-some.patch \ + file://0005-systemd-oomd-change-duration.patch \ " inherit webos_prerelease_dep diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index 00455b537..db8d17272 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -19,7 +19,7 @@ VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" WEBOS_VERSION = "1.0.2-56_1faf20c6a14e8d3ede826e170097f6c4e68324be" -PR = "r43" +PR = "r44" WAM_BUILD_SYSTEM = "webos_qmake6" WAM_BUILD_SYSTEM_webos = "webos_cmake" @@ -38,7 +38,6 @@ WAM_DATA_DIR = "${webos_execstatedir}/${BPN}" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE} \ file://0001-Fix-build-with-gcc-11.patch \ - file://0002-add_oomd_option.patch \ " S = "${WORKDIR}/git" diff --git a/meta-webos/recipes-webos/wam/wam/0002-add_oomd_option.patch b/meta-webos/recipes-webos/wam/wam/0002-add_oomd_option.patch deleted file mode 100644 index 0a895afe7..000000000 --- a/meta-webos/recipes-webos/wam/wam/0002-add_oomd_option.patch +++ /dev/null @@ -1,9 +0,0 @@ -diff --git a/files/launch/systemd/webapp-mgr.service b/files/launch/systemd/webapp-mgr.service -index e7703fa..c5ca32e 100644 ---- a/files/launch/systemd/webapp-mgr.service -+++ b/files/launch/systemd/webapp-mgr.service -@@ -31,3 +31,4 @@ ExecStart=/etc/systemd/system/scripts/webapp-mgr.sh - ExecStartPost=-/bin/chgrp compositor /dev/mem - ExecStartPost=-/bin/chmod 660 /dev/mem - Restart=on-failure -+ManagedOOMMemoryPressure=kill From 49cafccc6bc9a279d9848cb25ded60bae66fa8e1 Mon Sep 17 00:00:00 2001 From: "manjuraehmad.momin" Date: Wed, 22 Dec 2021 15:14:27 +0530 Subject: [PATCH 0216/2022] ose: com.webos.service.pdm=69 :Release Notes: Add groupSubDevices parameter to getAttachedNonStorageDeviceList :Detailed Notes: Add groupSubDevices parameter to getAttachedNonStorageDeviceList api of com.webos.service.pdm com.webos.service.pdm: submissions/68..submissions/69 e3d73c0 Support multi video device :Testing Performed: Refer WRN-13546 for test results :QA Notes: N/A :Issues Addressed: [WRN-13546] CCC : ose: com.webos.service.pdm=69 [WRN-12096] Non-storage video devices in Logitech BRIO Camera Change-Id: I62ea6783e55a6e8c2d64b6c9f885ee9df21fd570 --- .../com.webos.service.pdm/com.webos.service.pdm.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb b/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb index e9c372309..69f171581 100644 --- a/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb +++ b/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb @@ -16,7 +16,7 @@ RDEPENDS_${PN} = "fuse-utils hdparm gphoto2 gphotofs sdparm gptfdisk-sgdisk e2fs RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_pdm-plugin}" -WEBOS_VERSION = "1.0.1-68_1e46c6a0bae99f48ef9ed221fac80270e459e1f0" +WEBOS_VERSION = "1.0.1-69_863dd16e6634f0f5f6964a9f87db78f2c4fee20f" PR = "r5" inherit webos_component From be0f454e753ada09629ec2ef48221038da21c78c Mon Sep 17 00:00:00 2001 From: "lalit.shanker" Date: Fri, 24 Dec 2021 10:46:41 +0530 Subject: [PATCH 0217/2022] ose: db8=20 :Release Notes: Add group permission for db8 services :Detailed Notes: Add group permission for db8 services. Permissions for DB8 groups are added to allow method to be called by activities. db8: submissions/18..submissions/20 bbe8a01 Added group permission in static for db8 services e629de8 Added group permission for db8 services :Testing Performed: Build Success Refer WRN-13589 for test results :QA Notes: N/A :Issues Addressed: [WRN-13589] CCC: ose: db8=20 [WRN-13234] Added group permission for db8 services Change-Id: Ib8093b22abf886463a74fc56fee4ac7ac4dc14d6 --- meta-webos/recipes-webos/db8/db8.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/db8/db8.bb b/meta-webos/recipes-webos/db8/db8.bb index 63a604ab2..90348fba2 100644 --- a/meta-webos/recipes-webos/db8/db8.bb +++ b/meta-webos/recipes-webos/db8/db8.bb @@ -21,7 +21,7 @@ VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_stat} ${VIRTUAL-RUNTIME_bash}" RDEPENDS_${PN}-tests_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -WEBOS_VERSION = "3.2.0-18_98fe9007a708a4831e3694b8afd8c3a260343aa5" +WEBOS_VERSION = "3.2.0-20_1ba9dae12c33a7a6b6161333172463161d93d9fd" PR = "r36" inherit webos_component From d954b90c1a2a28543356e961b65514546f38ca6b Mon Sep 17 00:00:00 2001 From: "lalit.shanker" Date: Fri, 24 Dec 2021 16:18:37 +0530 Subject: [PATCH 0218/2022] ose: activitymanager=29 :Release Notes: Instead of using LSCall, use LSCallProxy if requester service and caller service are same. :Detailed Notes: activitymanager: submissions/28..submissions/29 b146a9f Use LSCallProxy if requester and destination service same :Testing Performed: Test Result updated in WRN-13601 :QA Notes: N/A :Issues Addressed: [WRN-13601] CCC: ose: activitymanager=29 [WRN-13385] Code changes to call LSCallProxy if caller and callee are same Change-Id: I7f305b027f2bfef6ca61a2a64445bdca4573775a --- meta-webos/recipes-webos/activitymanager/activitymanager.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/activitymanager/activitymanager.bb b/meta-webos/recipes-webos/activitymanager/activitymanager.bb index e4b30d6e5..c74257110 100644 --- a/meta-webos/recipes-webos/activitymanager/activitymanager.bb +++ b/meta-webos/recipes-webos/activitymanager/activitymanager.bb @@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "luna-service2 db8 boost libpbnjson glib-2.0 pmloglib ${VIRTUAL-RUNTIME_init_manager}" -WEBOS_VERSION = "3.0.0-28_04cfbd927d37a51c185d03950900f03c77dba9de" +WEBOS_VERSION = "3.0.0-29_f828935d78361b413460178d805bc441ef0ecbbb" PR = "r11" inherit webos_component From 578095caa164ed6b7aecab96668bc07b116aabf4 Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Tue, 21 Dec 2021 19:03:45 +0900 Subject: [PATCH 0219/2022] qtbase=webos96 qtwayland=webos26 (backport presentation_time protocol) :Release Notes: Introduce presentation_time protocol. :Detailed Notes: qtbase=webos96 Add 0001-Support-to-get-timing-from-pagefilp.patch. qtwayland=webos26 Add 0001-Support-presentation-time-protocol.patch and 0002-Use-scope-resolution-operator-for-request.patch. :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-13268] CCC: qtbase=webos96 qtwayland=webos26 auto-luna-surface-manager=38 luna-surfacemanager=361-r53 qml-webos-components=56 qtbase-plugins-webos=10 qtwayland-webos=71-r16 and more Change-Id: I261b23ccc24410352c2232e6827b0c0d5eefa498 --- ...-Support-to-get-timing-from-pagefilp.patch | 76 ++ meta-webos/recipes-qt/qt6/qtbase_git.bbappend | 7 +- ...1-Support-presentation-time-protocol.patch | 1048 +++++++++++++++++ ...cope-resolution-operator-for-request.patch | 35 + .../recipes-qt/qt6/qtwayland_git.bbappend | 12 +- 5 files changed, 1176 insertions(+), 2 deletions(-) create mode 100644 meta-webos/recipes-qt/qt6/qtbase/0001-Support-to-get-timing-from-pagefilp.patch create mode 100644 meta-webos/recipes-qt/qt6/qtwayland/0001-Support-presentation-time-protocol.patch create mode 100644 meta-webos/recipes-qt/qt6/qtwayland/0002-Use-scope-resolution-operator-for-request.patch diff --git a/meta-webos/recipes-qt/qt6/qtbase/0001-Support-to-get-timing-from-pagefilp.patch b/meta-webos/recipes-qt/qt6/qtbase/0001-Support-to-get-timing-from-pagefilp.patch new file mode 100644 index 000000000..ed2855518 --- /dev/null +++ b/meta-webos/recipes-qt/qt6/qtbase/0001-Support-to-get-timing-from-pagefilp.patch @@ -0,0 +1,76 @@ +From efba7ee751563a57f29d7ea1e076fb1bc188b11f Mon Sep 17 00:00:00 2001 +From: Elvis Lee +Date: Wed, 29 Sep 2021 11:19:11 +0900 +Subject: [PATCH] Support to get timing from pagefilp + +Handle the timing from drmEvent when page flip finished. +The information can be used to optimize rendering timing. + +Change-Id: I14612ca48a8fea5208aa74949d7543787e860c5f +Reviewed-by: Elvis Lee +Reviewed-by: Laszlo Agocs +Upstream-Status: Backport [https://codereview.qt-project.org/c/qt/qtbase/+/384012] +--- + .../eglfs_kms_support/qeglfskmseventreader.cpp | 7 ++++--- + .../eglfs_kms_support/qeglfskmsscreen.cpp | 9 +++++++++ + .../eglfs_kms_support/qeglfskmsscreen_p.h | 1 + + 3 files changed, 14 insertions(+), 3 deletions(-) + +diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmseventreader.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmseventreader.cpp +index 67606f895f..a3ac9205a9 100644 +--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmseventreader.cpp ++++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmseventreader.cpp +@@ -39,6 +39,7 @@ + + #include "qeglfskmseventreader_p.h" + #include "qeglfskmsdevice_p.h" ++#include "qeglfskmsscreen_p.h" + #include + #include + #include +@@ -50,12 +51,12 @@ Q_DECLARE_LOGGING_CATEGORY(qLcEglfsKmsDebug) + static void pageFlipHandler(int fd, unsigned int sequence, unsigned int tv_sec, unsigned int tv_usec, void *user_data) + { + Q_UNUSED(fd); +- Q_UNUSED(sequence); +- Q_UNUSED(tv_sec); +- Q_UNUSED(tv_usec); + + QEglFSKmsEventReaderThread *t = static_cast(QThread::currentThread()); + t->eventHost()->handlePageFlipCompleted(user_data); ++ ++ QEglFSKmsScreen *screen = static_cast(user_data); ++ screen->pageFlipped(sequence, tv_sec, tv_usec); + } + + class RegisterWaitFlipEvent : public QEvent +diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp +index 0a77e3e642..3bbdd55d34 100644 +--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp ++++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen.cpp +@@ -254,4 +254,13 @@ void QEglFSKmsScreen::setPowerState(QPlatformScreen::PowerState state) + m_powerState = state; + } + ++/* Informs exact page flip timing which can be used rendering optimization. ++ Consider this is from drm event reader thread. */ ++void QEglFSKmsScreen::pageFlipped(unsigned int sequence, unsigned int tv_sec, unsigned int tv_usec) ++{ ++ Q_UNUSED(sequence); ++ Q_UNUSED(tv_sec); ++ Q_UNUSED(tv_usec); ++} ++ + QT_END_NAMESPACE +diff --git a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen_p.h b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen_p.h +index db0aca0bd2..16ed6f4c30 100644 +--- a/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen_p.h ++++ b/src/plugins/platforms/eglfs/deviceintegration/eglfs_kms_support/qeglfskmsscreen_p.h +@@ -115,6 +115,7 @@ public: + bool isCursorOutOfRange() const { return m_cursorOutOfRange; } + void setCursorOutOfRange(bool b) { m_cursorOutOfRange = b; } + ++ virtual void pageFlipped(unsigned int sequence, unsigned int tv_sec, unsigned int tv_usec); + protected: + QEglFSKmsDevice *m_device; + diff --git a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend index bd55d4dcc..9055e018e 100644 --- a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend @@ -2,7 +2,7 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos95" +EXTENDPRAUTO_append = "webos96" # Remove LGPL3-only files python do_patch_append() { @@ -84,6 +84,11 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" WEBOS_PATCH_SRCREV = "eae95814a46386f8930eeae5486513a78a7a4ddc" PATCHTOOL = "git" +# Upstream-Status: Backport +SRC_URI_append = " \ + file://0001-Support-to-get-timing-from-pagefilp.patch;rev=${WEBOS_PATCH_SRCREV} \ +" + # Upstream-Status: Inappropriate SRC_URI_append = " \ file://9901-Disable-Faux-bolding-in-Qts-FreeType-FontEngine.patch;rev=${WEBOS_PATCH_SRCREV} \ diff --git a/meta-webos/recipes-qt/qt6/qtwayland/0001-Support-presentation-time-protocol.patch b/meta-webos/recipes-qt/qt6/qtwayland/0001-Support-presentation-time-protocol.patch new file mode 100644 index 000000000..77b7b1fc6 --- /dev/null +++ b/meta-webos/recipes-qt/qt6/qtwayland/0001-Support-presentation-time-protocol.patch @@ -0,0 +1,1048 @@ +From 00b411e4612db059c8061a3fa5f491b335c0aeba Mon Sep 17 00:00:00 2001 +From: Elvis Lee +Date: Thu, 26 Aug 2021 17:32:09 +0900 +Subject: [PATCH] Support presentation-time protocol + +With the protocol, client knows accurate presentation timing +which can support vsync-based rendering for smooth video +playback with video/audio synchronization. + +Also, the protocol provides metrics from client to on-screen +for optimizing frame latency. + +Tested with weston-presentation-shm client which also requires +xdg shell. + +Change-Id: I3b286420e7221aa1c9b81bf7ae9ae70d3cbe6eb6 +Reviewed-by: Eskil Abrahamsen Blomfeldt +Upstream-Status: Backport [https://codereview.qt-project.org/c/qt/qtwayland/+/383985] +--- + src/3rdparty/protocol/presentation-time.xml | 266 +++++++++++++ + src/3rdparty/protocol/qt_attribution.json | 17 + + src/compositor/CMakeLists.txt | 2 + + src/compositor/extensions/extensions.pri | 4 + + .../extensions/qwaylandpresentationtime.cpp | 355 ++++++++++++++++++ + .../extensions/qwaylandpresentationtime_p.h | 63 ++++ + .../extensions/qwaylandpresentationtime_p_p.h | 107 ++++++ + .../compositor-extensions/CMakeLists.txt | 1 + + .../presentationtime/CMakeLists.txt | 19 + + ...aylandcompositorpresentationtimeplugin.cpp | 59 +++ + sync.profile | 2 + + 11 files changed, 895 insertions(+) + create mode 100644 src/3rdparty/protocol/presentation-time.xml + create mode 100644 src/compositor/extensions/qwaylandpresentationtime.cpp + create mode 100644 src/compositor/extensions/qwaylandpresentationtime_p.h + create mode 100644 src/compositor/extensions/qwaylandpresentationtime_p_p.h + create mode 100644 src/imports/compositor-extensions/presentationtime/CMakeLists.txt + create mode 100644 src/imports/compositor-extensions/presentationtime/qwaylandcompositorpresentationtimeplugin.cpp + +diff --git a/src/3rdparty/protocol/presentation-time.xml b/src/3rdparty/protocol/presentation-time.xml +new file mode 100644 +index 00000000..d1731f03 +--- /dev/null ++++ b/src/3rdparty/protocol/presentation-time.xml +@@ -0,0 +1,266 @@ ++ ++ ++ ++ ++ ++ Copyright © 2013-2014 Collabora, Ltd. ++ ++ Permission is hereby granted, free of charge, to any person obtaining a ++ copy of this software and associated documentation files (the "Software"), ++ to deal in the Software without restriction, including without limitation ++ the rights to use, copy, modify, merge, publish, distribute, sublicense, ++ and/or sell copies of the Software, and to permit persons to whom the ++ Software is furnished to do so, subject to the following conditions: ++ ++ The above copyright notice and this permission notice (including the next ++ paragraph) shall be included in all copies or substantial portions of the ++ Software. ++ ++ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL ++ THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING ++ FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER ++ DEALINGS IN THE SOFTWARE. ++ ++ ++ ++ ++ ++ ++ ++ The main feature of this interface is accurate presentation ++ timing feedback to ensure smooth video playback while maintaining ++ audio/video synchronization. Some features use the concept of a ++ presentation clock, which is defined in the ++ presentation.clock_id event. ++ ++ A content update for a wl_surface is submitted by a ++ wl_surface.commit request. Request 'feedback' associates with ++ the wl_surface.commit and provides feedback on the content ++ update, particularly the final realized presentation time. ++ ++ ++ ++ When the final realized presentation time is available, e.g. ++ after a framebuffer flip completes, the requested ++ presentation_feedback.presented events are sent. The final ++ presentation time can differ from the compositor's predicted ++ display update time and the update's target time, especially ++ when the compositor misses its target vertical blanking period. ++ ++ ++ ++ ++ These fatal protocol errors may be emitted in response to ++ illegal presentation requests. ++ ++ ++ ++ ++ ++ ++ ++ Informs the server that the client will no longer be using ++ this protocol object. Existing objects created by this object ++ are not affected. ++ ++ ++ ++ ++ ++ Request presentation feedback for the current content submission ++ on the given surface. This creates a new presentation_feedback ++ object, which will deliver the feedback information once. If ++ multiple presentation_feedback objects are created for the same ++ submission, they will all deliver the same information. ++ ++ For details on what information is returned, see the ++ presentation_feedback interface. ++ ++ ++ ++ ++ ++ ++ ++ This event tells the client in which clock domain the ++ compositor interprets the timestamps used by the presentation ++ extension. This clock is called the presentation clock. ++ ++ The compositor sends this event when the client binds to the ++ presentation interface. The presentation clock does not change ++ during the lifetime of the client connection. ++ ++ The clock identifier is platform dependent. On Linux/glibc, ++ the identifier value is one of the clockid_t values accepted ++ by clock_gettime(). clock_gettime() is defined by ++ POSIX.1-2001. ++ ++ Timestamps in this clock domain are expressed as tv_sec_hi, ++ tv_sec_lo, tv_nsec triples, each component being an unsigned ++ 32-bit value. Whole seconds are in tv_sec which is a 64-bit ++ value combined from tv_sec_hi and tv_sec_lo, and the ++ additional fractional part in tv_nsec as nanoseconds. Hence, ++ for valid timestamps tv_nsec must be in [0, 999999999]. ++ ++ Note that clock_id applies only to the presentation clock, ++ and implies nothing about e.g. the timestamps used in the ++ Wayland core protocol input events. ++ ++ Compositors should prefer a clock which does not jump and is ++ not slewed e.g. by NTP. The absolute value of the clock is ++ irrelevant. Precision of one millisecond or better is ++ recommended. Clients must be able to query the current clock ++ value directly, not by asking the compositor. ++ ++ ++ ++ ++ ++ ++ ++ ++ A presentation_feedback object returns an indication that a ++ wl_surface content update has become visible to the user. ++ One object corresponds to one content update submission ++ (wl_surface.commit). There are two possible outcomes: the ++ content update is presented to the user, and a presentation ++ timestamp delivered; or, the user did not see the content ++ update because it was superseded or its surface destroyed, ++ and the content update is discarded. ++ ++ Once a presentation_feedback object has delivered a 'presented' ++ or 'discarded' event it is automatically destroyed. ++ ++ ++ ++ ++ As presentation can be synchronized to only one output at a ++ time, this event tells which output it was. This event is only ++ sent prior to the presented event. ++ ++ As clients may bind to the same global wl_output multiple ++ times, this event is sent for each bound instance that matches ++ the synchronized output. If a client has not bound to the ++ right wl_output global at all, this event is not sent. ++ ++ ++ ++ ++ ++ ++ These flags provide information about how the presentation of ++ the related content update was done. The intent is to help ++ clients assess the reliability of the feedback and the visual ++ quality with respect to possible tearing and timings. The ++ flags are: ++ ++ VSYNC: ++ The presentation was synchronized to the "vertical retrace" by ++ the display hardware such that tearing does not happen. ++ Relying on user space scheduling is not acceptable for this ++ flag. If presentation is done by a copy to the active ++ frontbuffer, then it must guarantee that tearing cannot ++ happen. ++ ++ HW_CLOCK: ++ The display hardware provided measurements that the hardware ++ driver converted into a presentation timestamp. Sampling a ++ clock in user space is not acceptable for this flag. ++ ++ HW_COMPLETION: ++ The display hardware signalled that it started using the new ++ image content. The opposite of this is e.g. a timer being used ++ to guess when the display hardware has switched to the new ++ image content. ++ ++ ZERO_COPY: ++ The presentation of this update was done zero-copy. This means ++ the buffer from the client was given to display hardware as ++ is, without copying it. Compositing with OpenGL counts as ++ copying, even if textured directly from the client buffer. ++ Possible zero-copy cases include direct scanout of a ++ fullscreen surface and a surface on a hardware overlay. ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ The associated content update was displayed to the user at the ++ indicated time (tv_sec_hi/lo, tv_nsec). For the interpretation of ++ the timestamp, see presentation.clock_id event. ++ ++ The timestamp corresponds to the time when the content update ++ turned into light the first time on the surface's main output. ++ Compositors may approximate this from the framebuffer flip ++ completion events from the system, and the latency of the ++ physical display path if known. ++ ++ This event is preceded by all related sync_output events ++ telling which output's refresh cycle the feedback corresponds ++ to, i.e. the main output for the surface. Compositors are ++ recommended to choose the output containing the largest part ++ of the wl_surface, or keeping the output they previously ++ chose. Having a stable presentation output association helps ++ clients predict future output refreshes (vblank). ++ ++ The 'refresh' argument gives the compositor's prediction of how ++ many nanoseconds after tv_sec, tv_nsec the very next output ++ refresh may occur. This is to further aid clients in ++ predicting future refreshes, i.e., estimating the timestamps ++ targeting the next few vblanks. If such prediction cannot ++ usefully be done, the argument is zero. ++ ++ If the output does not have a constant refresh rate, explicit ++ video mode switches excluded, then the refresh argument must ++ be zero. ++ ++ The 64-bit value combined from seq_hi and seq_lo is the value ++ of the output's vertical retrace counter when the content ++ update was first scanned out to the display. This value must ++ be compatible with the definition of MSC in ++ GLX_OML_sync_control specification. Note, that if the display ++ path has a non-zero latency, the time instant specified by ++ this counter may differ from the timestamp's. ++ ++ If the output does not have a concept of vertical retrace or a ++ refresh cycle, or the output device is self-refreshing without ++ a way to query the refresh count, then the arguments seq_hi ++ and seq_lo must be zero. ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ The content update was never displayed to the user. ++ ++ ++ ++ ++ +diff --git a/src/3rdparty/protocol/qt_attribution.json b/src/3rdparty/protocol/qt_attribution.json +index 9b565a5a..5ec23c19 100644 +--- a/src/3rdparty/protocol/qt_attribution.json ++++ b/src/3rdparty/protocol/qt_attribution.json +@@ -234,5 +234,22 @@ + "License": "MIT License", + "LicenseFile": "MIT_LICENSE.txt", + "Copyright": "Copyright (c) 2017, NVIDIA CORPORATION. All rights reserved." ++ }, ++ ++ { ++ "Id": "presentation-time.xml", ++ "Name": "Presentation Time Protocol", ++ "QDocModule": "qtwaylandcompositor", ++ "QtUsage": "Used in the Qt Wayland Compositor", ++ "Files": "presentation-time.xml", ++ ++ "Description": "The presentaton time protocol is a way to get presentation timing feedback.", ++ "Homepage": "https://wayland.freedesktop.org", ++ "Version": "1", ++ "DownloadLocation": "https://gitlab.freedesktop.org/wayland/wayland-protocols/raw/1.18/stable/presentation-time/presentation-time.xml", ++ "LicenseId": "MIT", ++ "License": "MIT License", ++ "LicenseFile": "MIT_LICENSE.txt", ++ "Copyright": "Copyright © 2013, 2014 Collabora, Ltd." + } + ] +diff --git a/src/compositor/CMakeLists.txt b/src/compositor/CMakeLists.txt +index b6a7b89d..345b36f0 100644 +--- a/src/compositor/CMakeLists.txt ++++ b/src/compositor/CMakeLists.txt +@@ -92,6 +92,7 @@ qt6_generate_wayland_protocol_server_sources(WaylandCompositor + FILES + ${CMAKE_CURRENT_SOURCE_DIR}/../3rdparty/protocol/idle-inhibit-unstable-v1.xml + ${CMAKE_CURRENT_SOURCE_DIR}/../3rdparty/protocol/ivi-application.xml ++ ${CMAKE_CURRENT_SOURCE_DIR}/../3rdparty/protocol/presentation-time.xml + ${CMAKE_CURRENT_SOURCE_DIR}/../3rdparty/protocol/scaler.xml + ${CMAKE_CURRENT_SOURCE_DIR}/../3rdparty/protocol/text-input-unstable-v2.xml + ${CMAKE_CURRENT_SOURCE_DIR}/../3rdparty/protocol/viewporter.xml +@@ -149,6 +150,7 @@ qt_internal_extend_target(WaylandCompositor CONDITION QT_FEATURE_wayland_composi + extensions/qwaylandquickxdgoutputv1.cpp extensions/qwaylandquickxdgoutputv1.h + extensions/qwaylandwlshellintegration.cpp extensions/qwaylandwlshellintegration_p.h + extensions/qwaylandxdgshellintegration.cpp extensions/qwaylandxdgshellintegration_p.h ++ extensions/qwaylandpresentationtime.cpp extensions/qwaylandpresentationtime_p.h extensions/qwaylandpresentationtime_p_p.h + LIBRARIES + Qt::QmlPrivate + Qt::QuickPrivate +diff --git a/src/compositor/extensions/extensions.pri b/src/compositor/extensions/extensions.pri +index f00eae57..a3d329b8 100644 +--- a/src/compositor/extensions/extensions.pri ++++ b/src/compositor/extensions/extensions.pri +@@ -18,6 +18,7 @@ WAYLANDSERVERSOURCES += \ + ../3rdparty/protocol/ivi-application.xml \ + ../3rdparty/protocol/idle-inhibit-unstable-v1.xml \ + ../extensions/qt-texture-sharing-unstable-v1.xml \ ++ ../3rdparty/protocol/presentation-time.xml \ + + HEADERS += \ + extensions/qwlqttouch_p.h \ +@@ -82,6 +83,8 @@ qtConfig(wayland-compositor-quick) { + extensions/qwaylandwlshellintegration_p.h \ + extensions/qwaylandquickxdgoutputv1.h \ + extensions/qwaylandxdgshellintegration_p.h \ ++ extensions/qwaylandpresentationtime_p.h \ ++ extensions/qwaylandpresentationtime_p_p.h \ + + SOURCES += \ + extensions/qwaylandquickshellintegration.cpp \ +@@ -90,6 +93,7 @@ qtConfig(wayland-compositor-quick) { + extensions/qwaylandwlshellintegration.cpp \ + extensions/qwaylandquickxdgoutputv1.cpp \ + extensions/qwaylandxdgshellintegration.cpp \ ++ extensions/qwaylandpresentationtime.cpp \ + + qtConfig(opengl) { + HEADERS += \ +diff --git a/src/compositor/extensions/qwaylandpresentationtime.cpp b/src/compositor/extensions/qwaylandpresentationtime.cpp +new file mode 100644 +index 00000000..81bed5e8 +--- /dev/null ++++ b/src/compositor/extensions/qwaylandpresentationtime.cpp +@@ -0,0 +1,355 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2021 LG Electronics Inc. ++** Contact: http://www.qt.io/licensing/ ++** ++** This file is part of the QtWaylandCompositor module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:GPL$ ++** Commercial License Usage ++** Licensees holding valid commercial Qt licenses may use this file in ++** accordance with the commercial license agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and The Qt Company. For licensing terms ++** and conditions see https://www.qt.io/terms-conditions. For further ++** information use the contact form at https://www.qt.io/contact-us. ++** ++** GNU General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU ++** General Public License version 3 or (at your option) any later version ++** approved by the KDE Free Qt Foundation. The licenses are as published by ++** the Free Software Foundation and appearing in the file LICENSE.GPL3 ++** included in the packaging of this file. Please review the following ++** information to ensure the GNU General Public License requirements will ++** be met: https://www.gnu.org/licenses/gpl-3.0.html. ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++#include "qwaylandpresentationtime_p.h" ++#include "qwaylandpresentationtime_p_p.h" ++ ++#include ++#include ++#include ++#include ++ ++QT_BEGIN_NAMESPACE ++ ++/*! ++ * \qmltype PresentationTime ++ * \instantiates QWaylandPresentationTime ++ * \inqmlmodule QtWayland.Compositor.PresentationTime ++ * \since 6.3 ++ * \brief Provides tracking the timing when a frame is presented on screen. ++ * ++ * The PresentationTime extension provides a way to track rendering timing ++ * for a surface. Client can request feedbacks associated with a surface, ++ * then compositor send events for the feedback with the time when the surface ++ * is presented on-screen. ++ * ++ * PresentationTime corresponds to the Wayland \c wp_presentation interface. ++ * ++ * To provide the functionality of the presentationtime extension in a compositor, create ++ * an instance of the PresentationTime component and add it to the list of extensions ++ * supported by the compositor: ++ * ++ * Then, call sendFeedback() when a surface is presented on screen. ++ * Usually, the timing can be obtained from drm page flip event. ++ * ++ * \qml ++ * import QtWayland.Compositor.PresentationTime ++ * ++ * WaylandCompositor { ++ * PresentationTime { ++ * id: presentationTime ++ * } ++ * } ++ * \endqml ++ */ ++ ++/*! ++ * \class QWaylandPresentationTime ++ * \inmodule QtWaylandCompositor ++ * \since 6.3 ++ * \brief The QWaylandPresentationTime class is an extension to get timing for on-screen presentation. ++ * ++ * The QWaylandPresentationTime extension provides a way to track rendering timing ++ * for a surface. Client can request feedbacks associated with a surface, ++ * then compositor send events for the feedback with the time when the surface ++ * is presented on-screen. ++ * ++ * QWaylandPresentationTime corresponds to the Wayland \c wp_presentation interface. ++ */ ++ ++ ++/*! ++ * Constructs a QWaylandPresentationTime object for \a compositor. ++ */ ++QWaylandPresentationTime::QWaylandPresentationTime(QWaylandCompositor *compositor) ++ : QWaylandCompositorExtensionTemplate(compositor, *new QWaylandPresentationTimePrivate) ++{ ++ ++} ++ ++/*! ++ * Constructs an empty QWaylandPresentationTime object. ++ */ ++QWaylandPresentationTime::QWaylandPresentationTime() ++ : QWaylandCompositorExtensionTemplate(*new QWaylandPresentationTimePrivate) ++{ ++} ++ ++/*! ++ * Initializes the extension. ++ */ ++void QWaylandPresentationTime::initialize() ++{ ++ Q_D(QWaylandPresentationTime); ++ ++ if (isInitialized()) { ++ qWarning() << "QWaylandPresentationTime is already initialized"; ++ return; ++ } ++ ++ QWaylandCompositor *compositor = this->compositor(); ++ if (compositor == nullptr) { ++ qWarning() << "Failed to find QWaylandCompositor when initializing QWaylandPresentationTime"; ++ return; ++ } ++ ++ QWaylandCompositorExtensionTemplate::initialize(); ++ ++ d->init(compositor->display(), /* version */ 1); ++} ++ ++QWaylandCompositor *QWaylandPresentationTime::compositor() const ++{ ++ return qobject_cast(extensionContainer()); ++} ++ ++/*! ++ * \qmlmethod void QWaylandCompositor::PresentationTime::sendFeedback(Window window, int sequence, int sec, int nsec) ++ * ++ * Interface to notify that a frame is presented on screen. ++ * If your platform support drm event, page_flip_handler is proper timing to send it. ++ */ ++ ++/*! ++ * Interface to notify that a frame is presented on screen. ++ * If your platform support drm event, page_flip_handler is proper timing to send it. ++ */ ++void QWaylandPresentationTime::sendFeedback(QQuickWindow *window, quint64 sequence, quint64 tv_sec, quint32 tv_nsec) ++{ ++ if (!window) ++ return; ++ ++ quint32 refresh_nsec = window->screen()->refreshRate() != 0 ? 1000000000 / window->screen()->refreshRate() : 0; ++ ++ emit presented(sequence, tv_sec, tv_nsec, refresh_nsec); ++} ++ ++/*! ++ * Returns the Wayland interface for the QWaylandPresentationTime. ++ */ ++const struct wl_interface *QWaylandPresentationTime::interface() ++{ ++ return QWaylandPresentationTimePrivate::interface(); ++} ++ ++/*! ++ * \internal ++ */ ++QByteArray QWaylandPresentationTime::interfaceName() ++{ ++ return QWaylandPresentationTimePrivate::interfaceName(); ++} ++ ++PresentationFeedback::PresentationFeedback(QWaylandPresentationTime *pTime, QWaylandSurface *surface, struct ::wl_client *client, uint32_t id, int version) ++ : wp_presentation_feedback(client, id, version) ++ , m_presentationTime(pTime) ++{ ++ setSurface(surface); ++} ++ ++void PresentationFeedback::setSurface(QWaylandSurface *qwls) ++{ ++ if (!qwls) { ++ discard(); ++ return; ++ } ++ ++ m_surface = qwls; ++ ++ connect(qwls, &QWaylandSurface::damaged, this, &PresentationFeedback::onSurfaceCommit); ++ connect(qwls, &QWaylandSurface::destroyed, this, &PresentationFeedback::discard); ++ ++ QWaylandView *view = qwls ? qwls->primaryView() : nullptr; ++ //The surface has not committed yet. ++ if (!view) { ++ connect(qwls, &QWaylandSurface::hasContentChanged, this, &PresentationFeedback::onSurfaceMapped); ++ return; ++ } ++ ++ maybeConnectToWindow(view); ++} ++ ++void PresentationFeedback::onSurfaceCommit() ++{ ++ // There is a new commit before sync so that discard this feedback. ++ if (m_committed) { ++ discard(); ++ return; ++ } ++ m_committed = true; ++} ++ ++void PresentationFeedback::onSurfaceMapped() ++{ ++ QWaylandView *view = m_surface->primaryView(); ++ if (!view) { ++ qWarning() << "The mapped surface has no view"; ++ discard(); ++ return; ++ } ++ ++ maybeConnectToWindow(view); ++} ++ ++void PresentationFeedback::maybeConnectToWindow(QWaylandView *view) ++{ ++ QWaylandQuickItem *item = view ? qobject_cast(view->renderObject()) : nullptr; ++ if (!item) { ++ qWarning() << "QWaylandPresentationTime only works with QtQuick compositors" << view; ++ discard(); ++ return; ++ } ++ ++ connect(item, &QQuickItem::windowChanged, this, &PresentationFeedback::onWindowChanged); ++ // wait for having window ++ if (!item->window()) { ++ return; ++ } ++ ++ connectToWindow(item->window()); ++} ++ ++void PresentationFeedback::onWindowChanged() ++{ ++ QWaylandQuickItem *item = qobject_cast(sender()); ++ QQuickWindow *window = item ? item->window() : nullptr; ++ ++ if (!window) { ++ qWarning() << "QWaylandPresentationTime only works with QtQuick compositors" << item; ++ discard(); ++ /* Actually, the commit is not discarded yet. If the related item has new window, ++ the commit can be presented on screen. So we can choose not to discard the feedback ++ until item has new window or the surface is destroyed. */ ++ return; ++ } ++ ++ // Check if the connected window is changed ++ if (m_connectedWindow && m_connectedWindow != window) ++ m_connectedWindow->disconnect(this); ++ ++ connectToWindow(window); ++} ++ ++void PresentationFeedback::connectToWindow(QQuickWindow *window) ++{ ++ if (!window) { ++ discard(); ++ return; ++ } ++ ++ m_connectedWindow = window; ++ ++ connect(window, &QQuickWindow::beforeSynchronizing, this, &PresentationFeedback::onSync); ++} ++ ++void PresentationFeedback::onSync() ++{ ++ QQuickWindow *window = qobject_cast(sender()); ++ ++ if (m_committed) { ++ disconnect(m_surface, &QWaylandSurface::damaged, this, &PresentationFeedback::onSurfaceCommit); ++ disconnect(window, &QQuickWindow::beforeSynchronizing, this, &PresentationFeedback::onSync); ++ connect(window, &QQuickWindow::afterFrameEnd, this, &PresentationFeedback::onSwapped); ++ } ++} ++ ++void PresentationFeedback::onSwapped() ++{ ++ QQuickWindow *window = qobject_cast(sender()); ++ ++ disconnect(window, &QQuickWindow::afterFrameEnd, this, &PresentationFeedback::onSwapped); ++ connect(m_presentationTime, &QWaylandPresentationTime::presented, this, &PresentationFeedback::sendPresented); ++} ++ ++void PresentationFeedback::discard() ++{ ++ send_discarded(); ++ destroy(); ++} ++ ++void PresentationFeedback::sendSyncOutput() ++{ ++ QWaylandCompositor *compositor = presentationTime()->compositor(); ++ if (!compositor) { ++ qWarning() << "No compositor container to send sync_output"; ++ return; ++ } ++ ++ QWaylandView *view = surface()->primaryView(); ++ QWaylandOutput *output = view ? view->output() : nullptr; ++ struct ::wl_resource *r = output ? output->resourceForClient(QWaylandClient::fromWlClient(compositor, resource()->client())) : nullptr; ++ ++ if (r) ++ send_sync_output(r); ++} ++ ++void PresentationFeedback::sendPresented(quint64 sequence, quint64 tv_sec, quint32 tv_nsec, quint32 refresh_nsec) ++{ ++ sendSyncOutput(); ++ ++ send_presented(tv_sec >> 32, tv_sec, tv_nsec, refresh_nsec, sequence >> 32, sequence, ++ QtWaylandServer::wp_presentation_feedback::kind_vsync ++ | QtWaylandServer::wp_presentation_feedback::kind_hw_clock ++ | QtWaylandServer::wp_presentation_feedback::kind_hw_completion); ++ ++ destroy(); ++} ++ ++void PresentationFeedback::destroy() ++{ ++ wl_resource_destroy(resource()->handle); ++} ++ ++void PresentationFeedback::wp_presentation_feedback_destroy_resource(Resource *resource) ++{ ++ Q_UNUSED(resource); ++ delete this; ++} ++ ++QWaylandPresentationTimePrivate::QWaylandPresentationTimePrivate() ++{ ++} ++ ++void QWaylandPresentationTimePrivate::wp_presentation_bind_resource(Resource *resource) ++{ ++ send_clock_id(resource->handle, CLOCK_MONOTONIC); ++} ++ ++void QWaylandPresentationTimePrivate::wp_presentation_feedback(Resource *resource, struct ::wl_resource *surface, uint32_t callback) ++{ ++ Q_Q(QWaylandPresentationTime); ++ ++ QWaylandSurface *qwls = QWaylandSurface::fromResource(surface); ++ if (!qwls) ++ return; ++ ++ new PresentationFeedback(q, qwls, resource->client(), callback, /* version */ 1); ++} ++ ++QT_END_NAMESPACE +diff --git a/src/compositor/extensions/qwaylandpresentationtime_p.h b/src/compositor/extensions/qwaylandpresentationtime_p.h +new file mode 100644 +index 00000000..0e66063d +--- /dev/null ++++ b/src/compositor/extensions/qwaylandpresentationtime_p.h +@@ -0,0 +1,63 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2021 LG Electronics Inc. ++** Contact: http://www.qt.io/licensing/ ++** ++** This file is part of the QtWaylandCompositor module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:GPL$ ++** Commercial License Usage ++** Licensees holding valid commercial Qt licenses may use this file in ++** accordance with the commercial license agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and The Qt Company. For licensing terms ++** and conditions see https://www.qt.io/terms-conditions. For further ++** information use the contact form at https://www.qt.io/contact-us. ++** ++** GNU General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU ++** General Public License version 3 or (at your option) any later version ++** approved by the KDE Free Qt Foundation. The licenses are as published by ++** the Free Software Foundation and appearing in the file LICENSE.GPL3 ++** included in the packaging of this file. Please review the following ++** information to ensure the GNU General Public License requirements will ++** be met: https://www.gnu.org/licenses/gpl-3.0.html. ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++#ifndef QWAYLANDPRESENTATIONTIME_P_H ++#define QWAYLANDPRESENTATIONTIME_P_H ++ ++#include ++#include ++ ++QT_BEGIN_NAMESPACE ++ ++class QQuickWindow; ++class QWaylandPresentationTimePrivate; ++ ++class Q_WAYLAND_COMPOSITOR_EXPORT QWaylandPresentationTime : public QWaylandCompositorExtensionTemplate ++{ ++ Q_OBJECT ++ Q_DECLARE_PRIVATE(QWaylandPresentationTime) ++public: ++ QWaylandPresentationTime(); ++ QWaylandPresentationTime(QWaylandCompositor *compositor); ++ ++ QWaylandCompositor *compositor() const; ++ void initialize() override; ++ ++ Q_INVOKABLE void sendFeedback(QQuickWindow *window, quint64 sequence, quint64 tv_sec, quint32 tv_nsec); ++ ++ static const struct wl_interface *interface(); ++ static QByteArray interfaceName(); ++ ++signals: ++ void presented(quint64 sequence, quint64 tv_sec, quint32 tv_nsec, quint32 refresh_nsec); ++}; ++ ++QT_END_NAMESPACE ++ ++#endif +diff --git a/src/compositor/extensions/qwaylandpresentationtime_p_p.h b/src/compositor/extensions/qwaylandpresentationtime_p_p.h +new file mode 100644 +index 00000000..7f984958 +--- /dev/null ++++ b/src/compositor/extensions/qwaylandpresentationtime_p_p.h +@@ -0,0 +1,107 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2021 LG Electronics Inc. ++** Contact: http://www.qt.io/licensing/ ++** ++** This file is part of the QtWaylandCompositor module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:GPL$ ++** Commercial License Usage ++** Licensees holding valid commercial Qt licenses may use this file in ++** accordance with the commercial license agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and The Qt Company. For licensing terms ++** and conditions see https://www.qt.io/terms-conditions. For further ++** information use the contact form at https://www.qt.io/contact-us. ++** ++** GNU General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU ++** General Public License version 3 or (at your option) any later version ++** approved by the KDE Free Qt Foundation. The licenses are as published by ++** the Free Software Foundation and appearing in the file LICENSE.GPL3 ++** included in the packaging of this file. Please review the following ++** information to ensure the GNU General Public License requirements will ++** be met: https://www.gnu.org/licenses/gpl-3.0.html. ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++#ifndef QWAYLANDPRESENTATIONTIME_P_P_H ++#define QWAYLANDPRESENTATIONTIME_P_P_H ++ ++// ++// W A R N I N G ++// ------------- ++// ++// This file is not part of the Qt API. It exists purely as an ++// implementation detail. This header file may change from version to ++// version without notice, or even be removed. ++// ++// We mean it. ++// ++ ++#include ++#include ++ ++#include ++#include ++#include ++ ++QT_BEGIN_NAMESPACE ++ ++ ++class QWaylandSurface; ++class QWaylandView; ++class QQuickWindow; ++ ++class PresentationFeedback : public QObject, public QtWaylandServer::wp_presentation_feedback ++{ ++ Q_OBJECT ++public: ++ PresentationFeedback(QWaylandPresentationTime *, QWaylandSurface *, struct ::wl_client *, uint32_t, int); ++ ++ void setSurface(QWaylandSurface *); ++ QWaylandSurface *surface() { return m_surface; } ++ ++ void destroy(); ++ void sendSyncOutput(); ++ ++private Q_SLOTS: ++ void discard(); ++ void onSurfaceCommit(); ++ void onSurfaceMapped(); ++ void onWindowChanged(); ++ void onSync(); ++ void onSwapped(); ++ void sendPresented(quint64 sequence, quint64 tv_sec, quint32 tv_nsec, quint32 refresh_nsec); ++ ++private: ++ QWaylandPresentationTime *presentationTime() { return m_presentationTime; } ++ void maybeConnectToWindow(QWaylandView *); ++ void connectToWindow(QQuickWindow *); ++ ++ void wp_presentation_feedback_destroy_resource(Resource *resource) override; ++ ++public: ++ QWaylandPresentationTime *m_presentationTime = nullptr; ++ QWaylandSurface *m_surface = nullptr; ++ QQuickWindow *m_connectedWindow = nullptr; ++ ++ bool m_committed = false; ++}; ++ ++class QWaylandPresentationTimePrivate : public QWaylandCompositorExtensionPrivate, public QtWaylandServer::wp_presentation ++{ ++ Q_DECLARE_PUBLIC(QWaylandPresentationTime) ++public: ++ QWaylandPresentationTimePrivate(); ++ ++protected: ++ void wp_presentation_feedback(Resource *resource, struct ::wl_resource *surface, uint32_t callback) override; ++ void wp_presentation_bind_resource(Resource *resource) override; ++}; ++ ++QT_END_NAMESPACE ++ ++#endif +diff --git a/src/imports/compositor-extensions/CMakeLists.txt b/src/imports/compositor-extensions/CMakeLists.txt +index 27c7cb06..4dee752a 100644 +--- a/src/imports/compositor-extensions/CMakeLists.txt ++++ b/src/imports/compositor-extensions/CMakeLists.txt +@@ -3,3 +3,4 @@ + add_subdirectory(xdgshell) + add_subdirectory(iviapplication) + add_subdirectory(wlshell) ++add_subdirectory(presentationtime) +diff --git a/src/imports/compositor-extensions/presentationtime/CMakeLists.txt b/src/imports/compositor-extensions/presentationtime/CMakeLists.txt +new file mode 100644 +index 00000000..d94a438b +--- /dev/null ++++ b/src/imports/compositor-extensions/presentationtime/CMakeLists.txt +@@ -0,0 +1,19 @@ ++##################################################################### ++## qwaylandcompositorpresentationtimeplugin Plugin: ++##################################################################### ++ ++qt_internal_add_qml_module(WaylandCompositorPresentationTime ++ URI "QtWayland.Compositor.PresentationTime" ++ VERSION "${PROJECT_VERSION}" ++ CLASS_NAME QWaylandCompositorPresentationTimePlugin ++ PLUGIN_TARGET WaylandCompositorPresentationTime ++ NO_PLUGIN_OPTIONAL ++ NO_GENERATE_PLUGIN_SOURCE ++ NO_GENERATE_QMLTYPES ++ SOURCES ++ qwaylandcompositorpresentationtimeplugin.cpp ++ LIBRARIES ++ Qt::Core ++ Qt::Gui ++ Qt::WaylandCompositorPrivate ++) +diff --git a/src/imports/compositor-extensions/presentationtime/qwaylandcompositorpresentationtimeplugin.cpp b/src/imports/compositor-extensions/presentationtime/qwaylandcompositorpresentationtimeplugin.cpp +new file mode 100644 +index 00000000..05ae4a46 +--- /dev/null ++++ b/src/imports/compositor-extensions/presentationtime/qwaylandcompositorpresentationtimeplugin.cpp +@@ -0,0 +1,59 @@ ++/**************************************************************************** ++** ++** Copyright (C) 2021 LG Electronics Inc. ++** Contact: https://www.qt.io/licensing/ ++** ++** This file is part of the QtWaylandCompositor module of the Qt Toolkit. ++** ++** $QT_BEGIN_LICENSE:GPL$ ++** Commercial License Usage ++** Licensees holding valid commercial Qt licenses may use this file in ++** accordance with the commercial license agreement provided with the ++** Software or, alternatively, in accordance with the terms contained in ++** a written agreement between you and The Qt Company. For licensing terms ++** and conditions see https://www.qt.io/terms-conditions. For further ++** information use the contact form at https://www.qt.io/contact-us. ++** ++** GNU General Public License Usage ++** Alternatively, this file may be used under the terms of the GNU ++** General Public License version 3 or (at your option) any later version ++** approved by the KDE Free Qt Foundation. The licenses are as published by ++** the Free Software Foundation and appearing in the file LICENSE.GPL3 ++** included in the packaging of this file. Please review the following ++** information to ensure the GNU General Public License requirements will ++** be met: https://www.gnu.org/licenses/gpl-3.0.html. ++** ++** $QT_END_LICENSE$ ++** ++****************************************************************************/ ++ ++#include ++#include ++ ++#include ++#include ++ ++QT_BEGIN_NAMESPACE ++ ++Q_COMPOSITOR_DECLARE_QUICK_EXTENSION_CLASS(QWaylandPresentationTime) ++ ++class QWaylandCompositorPresentationTimePlugin : public QQmlExtensionPlugin ++{ ++ Q_OBJECT ++ Q_PLUGIN_METADATA(IID QQmlExtensionInterface_iid) ++public: ++ void registerTypes(const char *uri) override ++ { ++ Q_ASSERT(QLatin1String(uri) == QLatin1String("QtWayland.Compositor.PresentationTime")); ++ defineModule(uri); ++ } ++ ++ static void defineModule(const char *uri) ++ { ++ qmlRegisterModule(uri, QT_VERSION_MAJOR, QT_VERSION_MINOR); ++ qmlRegisterType(uri, 1, 0, "PresentationTime"); ++ } ++}; ++QT_END_NAMESPACE ++ ++#include "qwaylandcompositorpresentationtimeplugin.moc" +diff --git a/sync.profile b/sync.profile +index 1a88e443..9f5b80c2 100644 +--- a/sync.profile ++++ b/sync.profile +@@ -72,6 +72,7 @@ + "^qwayland-server-xdg-decoration-unstable-v1.h", + "^qwayland-server-xdg-output-unstable-v1.h", + "^qwayland-server-xdg-shell.h", ++ "^qwayland-server-presentation-time.h", + "^wayland-hardware-integration-server-protocol.h", + "^wayland-idle-inhibit-unstable-v1-server-protocol.h", + "^wayland-ivi-application-server-protocol.h", +@@ -88,6 +89,7 @@ + "^wayland-xdg-decoration-unstable-v1-server-protocol.h", + "^wayland-xdg-output-unstable-v1-server-protocol.h", + "^wayland-xdg-shell-server-protocol.h", ++ "^wayland-presentation-time-server-protocol.h", + ], + "$basedir/src/plugins/hardwareintegration/compositor/linux-dmabuf-unstable-v1" => [ + "^qwayland-server-linux-dmabuf-unstable-v1.h", diff --git a/meta-webos/recipes-qt/qt6/qtwayland/0002-Use-scope-resolution-operator-for-request.patch b/meta-webos/recipes-qt/qt6/qtwayland/0002-Use-scope-resolution-operator-for-request.patch new file mode 100644 index 000000000..8028e95f2 --- /dev/null +++ b/meta-webos/recipes-qt/qt6/qtwayland/0002-Use-scope-resolution-operator-for-request.patch @@ -0,0 +1,35 @@ +From 143cb1c9f31a9b56ede16f0720986c391b3c3962 Mon Sep 17 00:00:00 2001 +From: Youngjin Kim +Date: Thu, 2 Sep 2021 10:14:32 +0900 +Subject: [PATCH] Use scope resolution operator for request + +If the combination of the name of the protocol interface and the name of +its request is same as another interface name, it can cause problem in +calling the constructor instead of method generated by wayland-scanner +when calling request. +For example, if you have an interface named "foo" and its request named +"bar", it might conflict with another interface named "foo_bar". +A real example for this is presentation_time protocol which has +a request "feedback" in the interface "wp_presentation" while it also +has another interface named as "wp_presentation_feedback". + +Pick-to: 6.3 +Change-Id: I7c007978d4aa404d10441643d5461372f33954e5 +Upstream-Status: Submitted [https://codereview.qt-project.org/c/qt/qtwayland/+/387466] +--- + src/qtwaylandscanner/qtwaylandscanner.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/qtwaylandscanner/qtwaylandscanner.cpp b/src/qtwaylandscanner/qtwaylandscanner.cpp +index 93f4b68f..f84673d4 100644 +--- a/src/qtwaylandscanner/qtwaylandscanner.cpp ++++ b/src/qtwaylandscanner/qtwaylandscanner.cpp +@@ -1236,7 +1236,7 @@ bool Scanner::process() + printf("\n"); + } + int actualArgumentCount = new_id ? int(e.arguments.size()) - 1 : int(e.arguments.size()); +- printf(" %s%s_%s(\n", new_id ? "return " : "", interfaceName, e.name.constData()); ++ printf(" %s::%s_%s(\n", new_id ? "return " : "", interfaceName, e.name.constData()); + printf(" m_%s%s", interfaceName, actualArgumentCount > 0 ? "," : ""); + bool needsComma = false; + for (const WaylandArgument &a : e.arguments) { diff --git a/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend b/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend index 1b7595253..67e0caf90 100644 --- a/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend @@ -2,10 +2,20 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos25" +EXTENDPRAUTO_append = "webos26" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +# Apply webOS specific patches to only SRCREV tested +WEBOS_PATCH_SRCREV = "e9ac64ab5e5364ae4d309227422588417463efdd" +PATCHTOOL = "git" + +# Upstream-Status: Backport +SRC_URI_append = " \ + file://0001-Support-presentation-time-protocol.patch;rev=${WEBOS_PATCH_SRCREV} \ + file://0002-Use-scope-resolution-operator-for-request.patch;rev=${WEBOS_PATCH_SRCREV} \ +" + # More options for fine-tuned configuration PACKAGECONFIG[brcm] = "-DFEATURE_wayland_brcm=ON,-DFEATURE_wayland_brcm=OFF," PACKAGECONFIG[drm-egl-server-buffer] = "-DFEATURE_wayland_drm_egl_server_buffer=ON,-DFEATURE_wayland_drm_egl_server_buffer=OFF," From 7712f26ace190a1abf740c965828ef43b135535a Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Thu, 23 Dec 2021 10:33:22 +0900 Subject: [PATCH 0220/2022] auto-luna-surface-manager=38 luna-surfacemanager=361-r53 qml-webos-components=56 qtbase-plugins-webos=10 qtwayland-webos=71-r16 :Release Notes: Implement presentation_time protocol in LSM. :Detailed Notes: auto-luna-surface-manager: submissions/37..submissions/38 6b661e7 Support presentation time luna-surfacemanager: submissions/360..submissions/361 6887c0a9 base: Test for measuring frame latency bada129f Prevent handling events out of the current window cd5156ff Fix hover problem 179d8c69 base: Add text related hovering c85e1b0b Make WebOSSurfaceItem::hasSecuredContent() virtual ca86fbdb Add WebOSCoreCompositor::createSurfaceItem() and positionUpdated 435ebab6 base: Add a test app for Overlay luna-surfacemanager=r53 Add qtwayland-webos to DEPENDS. qml-webos-components: submissions/55..submissions/56 f49bdc7 Support debug graph for general data qtbase-plugins-webos: submissions/9..submissions/10 6e02fca Support pageFliped to get flip timing d07d469 Support page_flip_notifier for webOS qtwayland-webos: submissions/70..submissions/71 ea5ae17 Implement client for presentation time protocol qtwayland-webos=r16 Add wayland-protocols to DEPENDS. :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-13268] CCC: qtbase=webos96 qtwayland=webos26 auto-luna-surface-manager=38 luna-surfacemanager=361-r53 qml-webos-components=56 qtbase-plugins-webos=10 qtwayland-webos=71-r16 and more Change-Id: I60c9d87553b7fbb355c5af991d6136be1f33bd0b --- .../auto-luna-surface-manager/auto-luna-surface-manager.bb | 2 +- .../luna-surfacemanager/luna-surfacemanager.bb | 6 +++--- .../qml-webos-components/qml-webos-components.bb | 2 +- .../qtbase-plugins-webos/qtbase-plugins-webos.bb | 2 +- meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb | 6 +++--- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb index 6c169431b..e778f6680 100644 --- a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb +++ b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb @@ -15,7 +15,7 @@ RDEPENDS_${PN} = " \ qtbase-plugins-webos \ " -WEBOS_VERSION = "0.0.1-37_777edd72d0b986e8e9656fa115bd040446276849" +WEBOS_VERSION = "0.0.1-38_4a63b31f3956172cea497d621d42e2939a8970d3" PR = "r7" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index 5d0f8d4af..c2423177d 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -9,10 +9,10 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=2c7c706c6a586a6abec428c64006d86b \ " -DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0" +DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0 qtwayland-webos" -WEBOS_VERSION = "2.0.0-360_5c3a00a694cc9c4ef33e910a7a20a241445b1083" -PR = "r52" +WEBOS_VERSION = "2.0.0-361_d7a69e76ba6f56d2f978c14d8c247362fae02d68" +PR = "r53" inherit webos_qmake6 inherit webos_pkgconfig diff --git a/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb b/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb index e8b39cd14..22fed23ee 100644 --- a/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb +++ b/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative pmloglib qt-features-webos luna-service2 glib-2.0" -WEBOS_VERSION = "1.0.0-55_2013bd787616f74e3d879fe115022a915cc324bd" +WEBOS_VERSION = "1.0.0-56_65071125e880b3de2bb3494cae3e1d4e680eb5a1" PR = "r18" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb index 792c835ac..bb4983540 100644 --- a/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb +++ b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtbase" -WEBOS_VERSION = "1.0.0-9_6593a06a17e92fee1d10b3c36012b35d461563dd" +WEBOS_VERSION = "1.0.0-10_88f577a5f756ba2ea2972d6866e4822d8d4d8c06" PR = "r4" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb index 494beb09d..dcf13a32d 100644 --- a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb +++ b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb @@ -9,10 +9,10 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=7187b1fb0318bb1af23edbf4237ee8b8 \ " -DEPENDS = "qtwayland webos-wayland-extensions libxkbcommon qt-features-webos wayland-native qtwayland-native" +DEPENDS = "qtwayland webos-wayland-extensions libxkbcommon qt-features-webos wayland-native qtwayland-native wayland-protocols" -WEBOS_VERSION = "2.0.0-70_c04c1b3f861f866debb637909cf91e866ded3638" -PR = "r15" +WEBOS_VERSION = "2.0.0-71_88f8849841415fad01233b373110531065ee1f78" +PR = "r16" inherit webos_qmake6 inherit webos_pkgconfig From 9493a8713b7ae1c0835d5fb73d191ae6fec3581e Mon Sep 17 00:00:00 2001 From: "kalaiselvi.p" Date: Fri, 24 Dec 2021 21:22:06 +0530 Subject: [PATCH 0221/2022] ose: Add test.redirection.backgroundmedia=20-r5.0 :Release Notes: Added test.redirection.backgroundmedia app to verify background media feature. :Detailed Notes: test-apps : submissions/19..submissions/20 6fe0c1b Add test.redirection.backgroundmedia app for webosose :Testing Performed: Refer the CCC ticket :QA Notes: Test-cases: QWO-854, QWO-856 :Issues Addressed: [WRN-13628] CCC:ose: Add test.redirection.backgroundmedia=20-r5.0 [WRN-13006] [OSE-RPi4] : PAUSE button is not working on bluetooth device Change-Id: If6272c09f9e72f633a6b01ac321fb3aab63dabbe --- .../packagegroups/packagegroup-webos-extended.bb | 3 ++- .../test-apps/test.redirection.backgroundmedia.bb | 8 ++++++++ .../recipes-webos/test-apps/webos-open-test-apps.inc | 6 +++--- 3 files changed, 13 insertions(+), 4 deletions(-) create mode 100644 meta-webos/recipes-webos/test-apps/test.redirection.backgroundmedia.bb diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index 0a714a566..2a59ef78f 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. DESCRIPTION = "meta-webos components used in webOS OSE" LICENSE = "Apache-2.0" @@ -65,6 +65,7 @@ WEBOS_PACKAGESET_TESTAPPS = " \ com.webos.app.test.webosose \ com.webos.app.test.webrtc \ com.webos.app.test.youtube \ + test.redirection.backgroundmedia \ " MEDIA = " \ diff --git a/meta-webos/recipes-webos/test-apps/test.redirection.backgroundmedia.bb b/meta-webos/recipes-webos/test-apps/test.redirection.backgroundmedia.bb new file mode 100644 index 000000000..e4ad20817 --- /dev/null +++ b/meta-webos/recipes-webos/test-apps/test.redirection.backgroundmedia.bb @@ -0,0 +1,8 @@ +# Copyright (c) 2022 LG Electronics, Inc. + +SUMMARY = "Background Media Test Application" +AUTHOR = "Kalaiselvi P " + +require webos-open-test-apps.inc + +PR = "${INC_PR}.0" diff --git a/meta-webos/recipes-webos/test-apps/webos-open-test-apps.inc b/meta-webos/recipes-webos/test-apps/webos-open-test-apps.inc index 8f28300a5..eff856c92 100644 --- a/meta-webos/recipes-webos/test-apps/webos-open-test-apps.inc +++ b/meta-webos/recipes-webos/test-apps/webos-open-test-apps.inc @@ -1,11 +1,11 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. SECTION = "webos/apps" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" -WEBOS_VERSION = "1.0.0-19_2f910fb7ca5634bf88fc9985095f4840c7f6b487" -INC_PR = "r4" +WEBOS_VERSION = "1.0.0-20_0b300d2ba87b842e07492a72690c572f2730d740" +INC_PR = "r5" EXTRA_INHERIT ?= "webos_arch_indep webos_cmake" From dfb743202794c05f7c0a4edbb5d5551e14ffe5bd Mon Sep 17 00:00:00 2001 From: "taeyoung.hong" Date: Tue, 4 Jan 2022 09:33:26 +0900 Subject: [PATCH 0222/2022] ose: enact-framework=r16,v4.0.4 enact-sandstone=r8,v2.1.2 :Release Notes: Merge the fixed version of the sampler focusing issue on RP :Detailed Notes: enact-moonstone 4.0.3..4.0.4: 97f2e43e Version value updating 948b77b0 Update a change log for 4.0.4 Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 78267658 Update dependencies Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 0057401c Remove unused QA sample Item integrated with other components (#99) 13ed6469 WRN-4747: Replaced recompose usages (#97) f19b861f fixed video url (#95) fdbec03a WRN-6745: Cross-Platform Enact: Input field not in view when Expandable opens in Horizontal orientation (#92) 3548fde7 WRN-6747: Fixed tooltip arrow position and shape (#94) d48c44b1 WRN-6746: qa-VirtualGridListNative with 'Horizontal' on displays the paging controls in the wrong direction. (#88) 2e481b3d WRN-6719: Revert ContextualPopupDecorator arrow patch (#91) 60574d45 Use node14 instead of lts for Travis test (#90) 8efff539 WRN-6418: Need to add native samples. (#87) enact-sandstone 2.1.0..2.1.2: 63275acd Update a change log for 2.1.2 Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 91e2e76f Update dependency Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 08ee1c82 Update dependency Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) ff42f0f6 Version value updating 3f1ea616 Update a changelog for 2.1.1 Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) be180775 Update dependencies Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) a2dfa4cf WRN-8252: Remove workaround code related to picker animation (#1125) 8648d1f5 WRN-12669: Button - Icon not centered for rtl locale (#1122) d2d130fa fixed sampler and qa-sampler global controls for large text and high contrast (#1124) aa11aa42 fixed slider tooltip arrow position in qa-sampler (#1121) 293f925c PLAT-143537: Add screenshot and UI tests for DayPicker (#917) e41b9111 WRN-11796: update qa-videoplayer sample (#1114) 3202df2c Remove unused QA sample Item integrated with other components (#1116) cb381ed3 WRN-12073: Add Scroller with long contents sample into the qa-Sampler (#1117) 4633e7d4 WRN-9482 : [Sandstone] QA Sampler: Migrate storybook/addon-knobs to addon-controls (#1104) cb65dead WRN-8262: Sampler: Migrate storybook/addon-knobs to addon-controls (#1091) 736e5842 WRN-5603: Fixed `FormCheckboxItem`'s checkbox color in disabled focused state (#1112) 5f333d31 WRN-10744: Fixed VideoPlayer to return the current state of the media (#1108) :Testing Performed: Verf built and locally tested :QA Notes: N/A :Issues Addressed: [WRN-13515] Merge the fixed version of the sampler focusing issue on RP [WRN-13516] CCC: enact-framework=r16,v4.0.4 enact-sandstone={ose: r8,v2.1.2 pro: pro2} enactmoonstonesampler=v4.0.4 enactsandstonesampler=v2.1.2 Change-Id: I6e62fd2e76b3a0c05c6351730dd9babbd2d35865 --- .../enact-dev/enact-dev-native.bb | 4 +-- .../enactjs-apps/enact-framework.bb | 29 ++++--------------- .../enactjs-apps/enact-sandstone.bb | 12 ++++---- 3 files changed, 14 insertions(+), 31 deletions(-) diff --git a/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb b/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb index 7cc47786e..dddfdfb93 100644 --- a/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb +++ b/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2016-2021 LG Electronics, Inc. +# Copyright (c) 2016-2022 LG Electronics, Inc. DESCRIPTION = "enact-dev command-line tools used by webOS" AUTHOR = "Jason Robitaille " @@ -41,7 +41,7 @@ SRCREV_FORMAT = "main_cli-legacy_jsdoc-to-ts" PV = "4.1.6" SRCREV = "af42d9de312dab537e8a7539b434d1c3ef42cbb7" SRCREV_cli-legacy = "bf5012e50bdca62ff596b73a55a5b5f93ccf1069" -SRCREV_jsdoc-to-ts = "91e3709da01f4a8e0d57c2ed80d068789acf37eb" +SRCREV_jsdoc-to-ts = "344e1bf9fe3615380be513a8f7a7bab7a3f71b1b" # Skip unneeded tasks do_configure[noexec] = "1" diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb index b134e1f74..16e72b69a 100644 --- a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb +++ b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "Enact moonstone standard override used for Enact apps" AUTHOR = "Jason Robitaille " @@ -22,53 +22,36 @@ SRC_URI = " \ # algorithm properly recognizes that a pre-release precedes the associated final # release (e.g., 1.0-pre.1 < 1.0). -PV = "4.0.3" +PV = "4.0.4" -SRCREV_main = "8d4590d46fc35d64635e9e017926dc88be8fe1e2" -SRCREV_enact = "d2d5262c8d026fbfd8fa635e5364491dc83cba7c" +SRCREV_main = "1ce8ae701d66551db1db279fef5927509d683470" +SRCREV_enact = "ae1ef854432b0dedd75b0f104f6c2d3b1033753f" do_fetch[vardeps] += "SRCREV_enact" SRCREV_FORMAT = "main_enact" # Ordered dependency list for Moonstone; provides shrink-wrap style locking in of package versions WEBOS_ENACT_DEPENDENCIES ??= "\ - asap@2.0.6 \ - change-emitter@0.1.6 \ classnames@2.3.1 \ - core-js@1.2.7 \ direction@1.0.4 \ dom-walk@0.1.2 \ - encoding@0.1.13 \ - fbjs@0.8.18 \ global@4.4.0 \ - hoist-non-react-statics@2.5.5 \ - iconv-lite@0.6.3 \ ilib@14.11.1 \ invariant@2.2.4 \ is-function@1.0.2 \ - is-stream@1.1.0 \ - isomorphic-fetch@2.2.1 \ js-tokens@4.0.0 \ loose-envify@1.4.0 \ min-document@2.19.0 \ - node-fetch@1.7.3 \ object-assign@4.1.1 \ parse-headers@2.0.4 \ process@0.11.10 \ - promise@7.3.1 \ - prop-types@15.7.2 \ + prop-types@15.8.0 \ ramda@0.24.1 \ react@17.0.2 \ react-dom@17.0.2 \ react-is@17.0.2 \ - recompose@0.26.0 \ - safer-buffer@2.1.2 \ scheduler@0.20.2 \ - setimmediate@1.0.5 \ - symbol-observable@1.2.0 \ - ua-parser-js@0.7.31 \ warning@4.0.3 \ - whatwg-fetch@3.6.2 \ xhr@2.6.0 \ xtend@4.0.2 \ " @@ -76,7 +59,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ # NOTE: We only need to bump PR if we change something OTHER than # PV, SRCREV or the dependencies statement above. -PR = "r15" +PR = "r16" # Skip unneeded tasks do_configure[noexec] = "1" diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb b/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb index 97e5c07b8..65f14531b 100644 --- a/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb +++ b/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2021 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. SUMMARY = "Enact Sandstone standard override used for Enact apps" AUTHOR = "Jason Robitaille " @@ -22,10 +22,10 @@ SRC_URI = " \ # algorithm properly recognizes that a pre-release precedes the associated final # release (e.g., 1.0-pre.1 < 1.0). -PV = "2.1.0" +PV = "2.1.2" -SRCREV = "e69d6dcdf0993bc00b79495af68c1796dc027193" -SRCREV_enact = "d2d5262c8d026fbfd8fa635e5364491dc83cba7c" +SRCREV = "74bb529f7703bccf409b37fc9076bcff0c03f604" +SRCREV_enact = "ae1ef854432b0dedd75b0f104f6c2d3b1033753f" do_fetch[vardeps] += "SRCREV_enact" SRCREV_FORMAT = "main_enact" @@ -45,7 +45,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ object-assign@4.1.1 \ parse-headers@2.0.4 \ process@0.11.10 \ - prop-types@15.7.2 \ + prop-types@15.8.0 \ ramda@0.24.1 \ react@17.0.2 \ react-dom@17.0.2 \ @@ -59,7 +59,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ # NOTE: We only need to bump PR if we change something OTHER than # PV, SRCREV or the dependencies statement above. -PR = "r7" +PR = "r8" # Skip unneeded tasks do_configure[noexec] = "1" From 0f01de93ca426bd56cb5ce7d39c5c4fdec55b2e6 Mon Sep 17 00:00:00 2001 From: "p.dinesh" Date: Thu, 6 Jan 2022 14:29:37 +0530 Subject: [PATCH 0223/2022] com.webos.app.enactbrowser=50 :Release Notes: Fix to notify error message during internet disconnection :Detailed Notes: com.webos.app.enactbrowser: submissions/49..submissions/50 4317a56 Error message is not displayed when internet is disconnected :Testing Performed: Please check CCC tickets. :QA Notes: NA :Issues Addressed: [WRN-14591] CCC: com.webos.app.enactbrowser=50 [WRN-13705] [webOS-OSE] :Error message is not displayed. Change-Id: I2cd1c74dab690ff2fbfde6b29d6d8787e5ff0ad1 --- .../com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb index e313642c7..dea599243 100644 --- a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb +++ b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2021 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "Enact Based Web Browser" AUTHOR = "Anish.td " @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=72b3e3cef46e5ab3e175e5b515dc3b18 \ " -WEBOS_VERSION = "1.0.0-49_ee995d5f4affd66ca013cc912a5816ecbf692832" +WEBOS_VERSION = "1.0.0-50_9bb677b9cd1c2c2f546fe7149cb20070e3146f78" PR = "r16" inherit webos_public_repo From f2b6b4adf8e645bb121540086e9fac9301aab782 Mon Sep 17 00:00:00 2001 From: Hotaek Jung Date: Tue, 28 Dec 2021 16:56:03 +0900 Subject: [PATCH 0224/2022] com.webos.service.memorymanager=52 webos-initscript=82 :Release Notes: Add checking memory in requireMemory Remove system.slice :Detailed Notes: com.webos.service.memorymanager: submissions/51..submissions/52 dcbca21 Add checking memory in requireMemory webos-initscripts: submissions/81..submissions/82 d13fda2 Remove system.slice :Testing Performed: Check CCC test results :QA Notes: :Issues Addressed: [WRN-14582] CCC: com.webos.service.memorymanager=52 webos-initscript=82 [WRN-13594] [RDX_CRASH][webos] /var/rootdirs/home/root/memgrab in n/a (libc.so.6 + 0x3abd0) Change-Id: I0e841ca6514943650fe4ce8a7e7ba31106f970fc --- meta-webos/recipes-core/initscripts/webos-initscripts.bb | 4 ++-- .../com.webos.service.memorymanager.bb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/meta-webos/recipes-core/initscripts/webos-initscripts.bb b/meta-webos/recipes-core/initscripts/webos-initscripts.bb index 3f9d95e98..9f5528934 100644 --- a/meta-webos/recipes-core/initscripts/webos-initscripts.bb +++ b/meta-webos/recipes-core/initscripts/webos-initscripts.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2021 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "Systemd service files for system services" AUTHOR = "Sangwoo Kang " @@ -18,7 +18,7 @@ RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_init_manager} ${VIRTUAL-RUNTIME_bash} python PROVIDES = "initscripts" RPROVIDES_${PN} = "initscripts initd-functions" -WEBOS_VERSION = "3.0.0-81_f5674f46df823203daaf8cafb037be0d086d4dd8" +WEBOS_VERSION = "3.0.0-82_831e1faabe5a69a0f44c0741b099b8d1eab251db" PR = "r17" inherit webos_component diff --git a/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager.bb b/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager.bb index 8b109cc05..8702a116c 100644 --- a/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager.bb +++ b/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2021 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. SUMMARY = "Memory Manager" AUTHOR = "Sangwoo Kang " @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 glib-2.0-native luna-service2 libpbnjson pmloglib procps" -WEBOS_VERSION = "1.0.0-51_1270ef783da6c95a6bd09dccdfe4cdbc47f5ae8a" +WEBOS_VERSION = "1.0.0-52_57bec9e60709001d9a135076a54b24d4d7646fd7" PR = "r6" inherit webos_component From 39bca2557e3249be1b171f66f7ce7dd77f086412 Mon Sep 17 00:00:00 2001 From: "divvya.rosna" Date: Fri, 31 Dec 2021 12:56:48 +0530 Subject: [PATCH 0225/2022] gstreamer1.0-plugins-bad=webosrpi6 g-media-pipeline=21.gav.26-r10 :Release Notes: Remove drmbuffer support from waylandsink Remove use-drmbuf property of wayalndsink Fix build error with gcc-10 and enable use-drmbuf property of waylandsink Remove the LGE proprietary license related information Remove use-drmbuf property of wayalndsink and disable videoconvert in gst_element.conf file for raspberrypi4 for media playback :Detailed Notes: Remove drmbuffer support related code from waylandsink The playback is enbaled with dmabuffer as linux-dmabuf protocol support is enabled g-media-pipeline: submissions/21.gav.23..submissions/21.gav.26 cd56b05 Remove use-drmbuf property of wayalndsink 5690799 Fix build error with gcc-10 and enable use-drmbuf property of wayalndsink 0eeb789 Remove the LGE proprietary license related information 371ff56 Remove use-drmbuf property of wayalndsink and disable videoconvert in gst_element.conf file for raspberrypi4 for media playback :Testing Performed: Please refer CCC ticket for details :QA Notes: NA :Issues Addressed: [WRN-14537] CCC: gstreamer1.0-plugins-bad=webosrpi6 g-media-pipeline=21.gav.26-r10 [WRN-14148] Update meta changes after rebase and trigger TAS reports [WRN-11247] Remove use-drmbuf property in gst_element.conf file for raspberrypi4 [WRN-12985] Update license details for files in g-media-pipeline Change-Id: Idcd831cb95d0cf2d11c6236bafe7fb2152b2a411 --- ...sink-zero-copy-using-wl-drm-protocol.patch | 1172 ----------------- ...mallocator-for-64bit-porting-of-rpi4.patch | 12 - .../gstreamer1.0-plugins-bad_1.16.%.bbappend | 10 +- .../g-media-pipeline/g-media-pipeline.bb | 8 +- 4 files changed, 6 insertions(+), 1196 deletions(-) delete mode 100644 meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-waylandsink-zero-copy-using-wl-drm-protocol.patch delete mode 100644 meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-fix-crash-in-wldrmallocator-for-64bit-porting-of-rpi4.patch diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-waylandsink-zero-copy-using-wl-drm-protocol.patch b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-waylandsink-zero-copy-using-wl-drm-protocol.patch deleted file mode 100644 index 9e7a25dab..000000000 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-waylandsink-zero-copy-using-wl-drm-protocol.patch +++ /dev/null @@ -1,1172 +0,0 @@ -From fb9ec0817bf828cc93b62bc89f7abf82bf92147b Mon Sep 17 00:00:00 2001 -From: Pankaj Maharana -Date: Thu, 3 Oct 2019 17:05:37 +0530 -Subject: [PATCH] rpi: gstreamer1.0*=1.16.0 gstreamer1.0-plugins-{bad, - ---- - ext/wayland/Makefile.am | 10 +- - ext/wayland/gstwaylandsink.c | 88 ++++++-- - ext/wayland/gstwaylandsink.h | 1 + - ext/wayland/meson.build | 2 + - ext/wayland/wldisplay.c | 101 ++++++++- - ext/wayland/wldisplay.h | 9 + - ext/wayland/wldrmallocator.c | 398 +++++++++++++++++++++++++++++++++++ - ext/wayland/wldrmallocator.h | 82 ++++++++ - ext/wayland/wlvideoformat.c | 85 +++++++- - ext/wayland/wlvideoformat.h | 6 + - 10 files changed, 762 insertions(+), 20 deletions(-) - create mode 100644 ext/wayland/wldrmallocator.c - create mode 100644 ext/wayland/wldrmallocator.h - -diff --git a/ext/wayland/Makefile.am b/ext/wayland/Makefile.am -index 95bb97e..21db342 100644 ---- a/ext/wayland/Makefile.am -+++ b/ext/wayland/Makefile.am -@@ -7,12 +7,15 @@ BUILT_SOURCES = \ - linux-dmabuf-unstable-v1-client-protocol.h \ - fullscreen-shell-unstable-v1-protocol.c \ - fullscreen-shell-unstable-v1-client-protocol.h \ -- xdg-shell-protocol.c \ -+ wayland-drm-protocol.c \ -+ wayland-drm-client-protocol.h \ -+ xdg-shell-protocol.c \ - xdg-shell-client-protocol.h - - libgstwaylandsink_la_SOURCES = \ - gstwaylandsink.c \ -- wlshmallocator.c \ -+ wldrmallocator.c \ -+ wlshmallocator.c \ - wlbuffer.c \ - wldisplay.c \ - wlwindow.c \ -@@ -23,12 +26,14 @@ nodist_libgstwaylandsink_la_SOURCES = \ - viewporter-protocol.c \ - linux-dmabuf-unstable-v1-protocol.c \ - fullscreen-shell-unstable-v1-protocol.c \ -+ wayland-drm-protocol.c \ - xdg-shell-protocol.c - - libgstwaylandsink_la_CFLAGS = \ - $(GST_PLUGINS_BAD_CFLAGS) \ - $(GST_PLUGINS_BASE_CFLAGS) \ - $(GST_CFLAGS) \ -+ $(DRM_CFLAGS) \ - $(WAYLAND_CFLAGS) - libgstwaylandsink_la_LIBADD = \ - $(top_builddir)/gst-libs/gst/wayland/libgstwayland-$(GST_API_VERSION).la \ -@@ -40,6 +45,7 @@ libgstwaylandsink_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) - - noinst_HEADERS = \ - gstwaylandsink.h \ -+ wldrmallocator.h \ - wlshmallocator.h \ - wlbuffer.h \ - wldisplay.h \ -diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c -index 0a82960..cc7e9b3 100644 ---- a/ext/wayland/gstwaylandsink.c -+++ b/ext/wayland/gstwaylandsink.c -@@ -44,6 +44,7 @@ - #include "gstwaylandsink.h" - #include "wlvideoformat.h" - #include "wlbuffer.h" -+#include "wldrmallocator.h" - #include "wlshmallocator.h" - #include "wllinuxdmabuf.h" - -@@ -62,7 +63,8 @@ enum - { - PROP_0, - PROP_DISPLAY, -- PROP_FULLSCREEN -+ PROP_FULLSCREEN, -+ PROP_USEDRMBUF - }; - - GST_DEBUG_CATEGORY (gstwayland_debug); -@@ -73,12 +75,16 @@ GST_DEBUG_CATEGORY (gstwayland_debug); - "RGB16, BGR16, YUY2, YVYU, UYVY, AYUV, NV12, NV21, NV16, " \ - "YUV9, YVU9, Y41B, I420, YV12, Y42B, v308 }" - -+#define DRM_VIDEO_FORMATS \ -+ "{ BGRx, BGRA, xRGB, RGBA, ABGR, ARGB, RGB16, YUY2, NV12, NV16, " \ -+ "YUV9, Y41B, I420, Y42B, v308 }" -+ - static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink", - GST_PAD_SINK, - GST_PAD_ALWAYS, - GST_STATIC_CAPS (GST_VIDEO_CAPS_MAKE (WL_VIDEO_FORMATS) ";" - GST_VIDEO_CAPS_MAKE_WITH_FEATURES (GST_CAPS_FEATURE_MEMORY_DMABUF, -- WL_VIDEO_FORMATS)) -+ WL_VIDEO_FORMATS) ";" GST_VIDEO_CAPS_MAKE (DRM_VIDEO_FORMATS)) - ); - - static void gst_wayland_sink_get_property (GObject * object, -@@ -208,6 +214,11 @@ gst_wayland_sink_class_init (GstWaylandSinkClass * klass) - g_param_spec_boolean ("fullscreen", "Fullscreen", - "Whether the surface should be made fullscreen ", FALSE, - G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); -+ -+ g_object_class_install_property (gobject_class, PROP_USEDRMBUF, -+ g_param_spec_boolean ("use-drmbuf", "Wayland Allocation name", "Wayland " -+ "Use DRM based memory for allocation", FALSE, G_PARAM_WRITABLE)); -+ - } - - static void -@@ -250,6 +261,11 @@ gst_wayland_sink_get_property (GObject * object, - g_value_set_boolean (value, sink->fullscreen); - GST_OBJECT_UNLOCK (sink); - break; -+ case PROP_USEDRMBUF: -+ GST_OBJECT_LOCK (sink); -+ g_value_set_boolean (value, sink->use_drmbuf); -+ GST_OBJECT_UNLOCK (sink); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -273,6 +289,11 @@ gst_wayland_sink_set_property (GObject * object, - gst_wayland_sink_set_fullscreen (sink, g_value_get_boolean (value)); - GST_OBJECT_UNLOCK (sink); - break; -+ case PROP_USEDRMBUF: -+ GST_OBJECT_LOCK (sink); -+ sink->use_drmbuf = g_value_get_boolean (value); -+ GST_OBJECT_UNLOCK (sink); -+ break; - default: - G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); - break; -@@ -490,7 +511,8 @@ gst_wayland_sink_get_caps (GstBaseSink * bsink, GstCaps * filter) - g_mutex_lock (&sink->display_lock); - - if (sink->display) { -- GValue shm_list = G_VALUE_INIT, dmabuf_list = G_VALUE_INIT; -+ GValue drmbuf_list = G_VALUE_INIT; -+ GValue shm_list = G_VALUE_INIT, dmabuf_list = G_VALUE_INIT; - GValue value = G_VALUE_INIT; - GArray *formats; - gint i; -@@ -498,6 +520,7 @@ gst_wayland_sink_get_caps (GstBaseSink * bsink, GstCaps * filter) - - g_value_init (&shm_list, GST_TYPE_LIST); - g_value_init (&dmabuf_list, GST_TYPE_LIST); -+ g_value_init (&drmbuf_list, GST_TYPE_LIST); - - /* Add corresponding shm formats */ - formats = sink->display->shm_formats; -@@ -523,6 +546,20 @@ gst_wayland_sink_get_caps (GstBaseSink * bsink, GstCaps * filter) - gst_structure_take_value (gst_caps_get_structure (caps, 1), "format", - &dmabuf_list); - -+ if (sink->use_drmbuf) { -+ /* Add corresponding drm formats */ -+ formats = sink->display->drmbuf_formats; -+ for (i = 0; i < formats->len; i++) { -+ g_value_init (&value, G_TYPE_STRING); -+ fmt = g_array_index (formats, uint32_t, i); -+ g_value_set_static_string (&value, gst_wl_drm_format_to_string (fmt)); -+ gst_value_list_append_and_take_value (&drmbuf_list, &value); -+ } -+ -+ gst_structure_take_value (gst_caps_get_structure (caps, 2), "format", -+ &drmbuf_list); -+ } -+ - GST_DEBUG_OBJECT (sink, "display caps: %" GST_PTR_FORMAT, caps); - } - -@@ -553,8 +590,11 @@ gst_wayland_sink_create_pool (GstWaylandSink * sink, GstCaps * caps) - structure = gst_buffer_pool_get_config (pool); - gst_buffer_pool_config_set_params (structure, caps, size, 2, 0); - -- alloc = gst_wl_shm_allocator_get (); -- gst_buffer_pool_config_set_allocator (structure, alloc, NULL); -+ if (sink->use_drmbuf) -+ alloc = gst_wl_drm_allocator_get (sink->display->fd); -+ else -+ alloc = gst_wl_shm_allocator_get (); -+ gst_buffer_pool_config_set_allocator (structure, alloc, NULL); - if (!gst_buffer_pool_set_config (pool, structure)) { - g_object_unref (pool); - pool = NULL; -@@ -589,6 +629,16 @@ gst_wayland_sink_post_video_info_message (GstWaylandSink * sink, - return ret; - } - -+static void -+gst_wayland_sink_wait_authenticated (GstWaylandSink * sink) -+{ -+ while (!sink->display->authenticated) { -+ GST_DEBUG_OBJECT (sink, "waiting for authentication"); -+ wl_display_roundtrip (sink->display->display); -+ } -+ GST_DEBUG_OBJECT (sink, "aunthenticated : %d", sink->display->authenticated ); -+} -+ - static gboolean - gst_wayland_sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - { -@@ -599,7 +649,13 @@ gst_wayland_sink_set_caps (GstBaseSink * bsink, GstCaps * caps) - - sink = GST_WAYLAND_SINK (bsink); - -- GST_DEBUG_OBJECT (sink, "set caps %" GST_PTR_FORMAT, caps); -+ gst_wayland_sink_wait_authenticated (sink); -+ -+ while (!sink->display->authenticated) { -+ GST_DEBUG_OBJECT (sink, "not authenticated yet"); -+ } -+ -+ GST_DEBUG_OBJECT (sink, "set caps %" GST_PTR_FORMAT, caps); - - /* extract info from caps */ - if (!gst_video_info_from_caps (&sink->video_info, caps)) -@@ -674,8 +730,11 @@ gst_wayland_sink_propose_allocation (GstBaseSink * bsink, GstQuery * query) - if (pool) - g_object_unref (pool); - -- alloc = gst_wl_shm_allocator_get (); -- gst_query_add_allocation_param (query, alloc, NULL); -+ if (sink->use_drmbuf) -+ alloc = gst_wl_drm_allocator_get (sink->display->fd); -+ else -+ alloc = gst_wl_shm_allocator_get (); -+ gst_query_add_allocation_param (query, alloc, NULL); - gst_query_add_allocation_meta (query, GST_VIDEO_META_API_TYPE, NULL); - g_object_unref (alloc); - -@@ -760,7 +819,7 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer) - } - sink->old_time = cur_time; - -- GST_DEBUG_OBJECT (sink, "Showing frame %d", sink->frame_count); -+ GST_LOG_OBJECT (sink, "Showing frame %d", sink->frame_count); - sink->frame_count++; - - if (G_UNLIKELY (!sink->window)) { -@@ -796,8 +855,8 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer) - - /* drop buffers until we get a frame callback */ - if (sink->redraw_pending) { -- GST_LOG_OBJECT (sink, "buffer %p dropped (redraw pending)", buffer); -- goto done; -+ GST_DEBUG_OBJECT (sink, "buffer %p dropped (redraw pending)", buffer); -+ goto done; - } - - /* make sure that the application has called set_render_rectangle() */ -@@ -832,7 +891,12 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer) - "display, creating it", buffer); - - format = GST_VIDEO_INFO_FORMAT (&sink->video_info); -- if (gst_wl_display_check_format_for_dmabuf (sink->display, format)) { -+ if (!wbuf && sink->use_drmbuf && -+ gst_wl_display_check_format_for_drm (sink->display, format)) { -+ wbuf = gst_wl_drm_memory_construct_wl_buffer (sink->display, mem, &sink->video_info); -+ } -+ -+ if (gst_wl_display_check_format_for_dmabuf (sink->display, format)) { - guint i, nb_dmabuf = 0; - - for (i = 0; i < gst_buffer_n_memory (buffer); i++) -diff --git a/ext/wayland/gstwaylandsink.h b/ext/wayland/gstwaylandsink.h -index 3f4faae..fbb6573 100644 ---- a/ext/wayland/gstwaylandsink.h -+++ b/ext/wayland/gstwaylandsink.h -@@ -71,6 +71,7 @@ struct _GstWaylandSink - gint64 old_time; - gint frame_cnt_in_sec; - guint frame_count; -+ gboolean use_drmbuf; - }; - - struct _GstWaylandSinkClass -diff --git a/ext/wayland/meson.build b/ext/wayland/meson.build -index 3c377ee..58dfdff 100644 ---- a/ext/wayland/meson.build -+++ b/ext/wayland/meson.build -@@ -1,5 +1,6 @@ - wl_sources = [ - 'gstwaylandsink.c', -+ 'wldrmallocator.c', - 'wlshmallocator.c', - 'wlbuffer.c', - 'wldisplay.c', -@@ -15,6 +16,7 @@ if use_wayland - - protocol_defs = [ - ['/stable/viewporter/viewporter.xml', 'viewporter-protocol.c', 'viewporter-client-protocol.h'], -+ ['/stable/wayland-drm/wayland-drm.xml', 'wayland-drm-protocol.c', 'wayland-drm-client-protocol.h'], - ['/unstable/linux-dmabuf/linux-dmabuf-unstable-v1.xml', - 'linux-dmabuf-unstable-v1-protocol.c', 'linux-dmabuf-unstable-v1-client-protocol.h'], - ['/unstable/fullscreen-shell/fullscreen-shell-unstable-v1.xml', -diff --git a/ext/wayland/wldisplay.c b/ext/wayland/wldisplay.c -index f3155e9..7e889a4 100644 ---- a/ext/wayland/wldisplay.c -+++ b/ext/wayland/wldisplay.c -@@ -26,6 +26,9 @@ - #include "wlbuffer.h" - #include "wlvideoformat.h" - -+#include -+#include -+#include - #include - - GST_DEBUG_CATEGORY_EXTERN (gstwayland_debug); -@@ -46,10 +49,12 @@ static void - gst_wl_display_init (GstWlDisplay * self) - { - self->shm_formats = g_array_new (FALSE, FALSE, sizeof (uint32_t)); -- self->dmabuf_formats = g_array_new (FALSE, FALSE, sizeof (uint32_t)); -+ self->drmbuf_formats = g_array_new (FALSE, FALSE, sizeof (uint32_t)); -+ self->dmabuf_formats = g_array_new (FALSE, FALSE, sizeof (uint32_t)); - self->wl_fd_poll = gst_poll_new (TRUE); - self->buffers = g_hash_table_new (g_direct_hash, g_direct_equal); -- g_mutex_init (&self->buffers_mutex); -+ self->fd = -1; -+ g_mutex_init (&self->buffers_mutex); - } - - static void -@@ -73,10 +78,14 @@ gst_wl_display_finalize (GObject * gobject) - g_hash_table_remove_all (self->buffers); - - g_array_unref (self->shm_formats); -- g_array_unref (self->dmabuf_formats); -+ g_array_unref (self->drmbuf_formats); -+ g_array_unref (self->dmabuf_formats); - gst_poll_free (self->wl_fd_poll); - g_hash_table_unref (self->buffers); - g_mutex_clear (&self->buffers_mutex); -+ -+ if (self->fd != -1) -+ close(self->fd); - - if (self->viewporter) - wp_viewporter_destroy (self->viewporter); -@@ -84,7 +93,10 @@ gst_wl_display_finalize (GObject * gobject) - if (self->shm) - wl_shm_destroy (self->shm); - -- if (self->dmabuf) -+ if (self->drm) -+ wl_drm_destroy (self->drm); -+ -+ if (self->dmabuf) - zwp_linux_dmabuf_v1_destroy (self->dmabuf); - - if (self->wl_shell) -@@ -142,6 +154,61 @@ static const struct zwp_linux_dmabuf_v1_listener dmabuf_listener = { - dmabuf_format, - }; - -+/* For wl_drm_listener */ -+static void -+drm_handle_device (void *data, struct wl_drm *drm, const char *device) -+{ -+ GstWlDisplay *d = data; -+ drm_magic_t magic; -+ -+ d->fd = open (device, O_RDWR); -+ if (d->fd == -1) { -+ GST_ERROR ("Failed open device (%s)", device); -+ return; -+ } else { -+ GST_DEBUG ("Opened drm device (%s) : fd (%d)", device, d->fd); -+ } -+ -+ drmGetMagic (d->fd, &magic); -+ wl_drm_authenticate (d->drm, magic); -+} -+ -+static void -+drm_handle_format (void *data, struct wl_drm *drm, uint32_t format) -+{ -+ GstWlDisplay *self = data; -+ g_array_append_val (self->drmbuf_formats, format); -+ GST_DEBUG ("value %" GST_FOURCC_FORMAT, GST_FOURCC_ARGS (format)); -+} -+ -+static void -+drm_handle_authenticated (void *data, struct wl_drm *drm) -+{ -+ GstWlDisplay *d = data; -+ d->authenticated = 1; -+ GST_DEBUG ("d->authenticated: %d\n", d->authenticated); -+} -+ -+static void -+drm_handle_capabilities (void *data, -+ struct wl_drm *wl_drm, uint32_t capabilities) -+{ -+ GstWlDisplay *d = data; -+ -+ if (capabilities & WL_DRM_CAPABILITY_PRIME) { -+ d->has_prime_cap = 1; -+ } else { -+ GST_DEBUG ("wayland capability PRIME not supported"); -+ } -+} -+ -+static const struct wl_drm_listener drm_listener = { -+ drm_handle_device, -+ drm_handle_format, -+ drm_handle_authenticated, -+ drm_handle_capabilities -+}; -+ - gboolean - gst_wl_display_check_format_for_shm (GstWlDisplay * display, - GstVideoFormat format) -@@ -163,6 +230,27 @@ gst_wl_display_check_format_for_shm (GstWlDisplay * display, - return FALSE; - } - -+gboolean -+gst_wl_display_check_format_for_drm (GstWlDisplay * display, -+ GstVideoFormat format) -+{ -+ enum wl_drm_format drm_fmt; -+ GArray *formats; -+ guint i; -+ -+ drm_fmt = gst_video_format_to_wl_drm_format (format); -+ if (drm_fmt == (enum wl_drm_format) -1) -+ return FALSE; -+ -+ formats = display->drmbuf_formats; -+ for (i = 0; i < formats->len; i++) { -+ if (g_array_index (formats, uint32_t, i) == drm_fmt) -+ return TRUE; -+ } -+ -+ return FALSE; -+} -+ - gboolean - gst_wl_display_check_format_for_dmabuf (GstWlDisplay * display, - GstVideoFormat format) -@@ -202,7 +290,6 @@ registry_handle_global (void *data, struct wl_registry *registry, - uint32_t id, const char *interface, uint32_t version) - { - GstWlDisplay *self = data; -- GST_DEBUG (" setup wayland interface : %s", interface); - - if (g_strcmp0 (interface, "wl_compositor") == 0) { - self->compositor = wl_registry_bind (registry, id, &wl_compositor_interface, -@@ -226,6 +313,9 @@ registry_handle_global (void *data, struct wl_registry *registry, - self->dmabuf = - wl_registry_bind (registry, id, &zwp_linux_dmabuf_v1_interface, 1); - zwp_linux_dmabuf_v1_add_listener (self->dmabuf, &dmabuf_listener, self); -+ } else if (g_strcmp0 (interface, "wl_drm") == 0) { -+ self->drm = wl_registry_bind (registry, id, &wl_drm_interface, 2); -+ wl_drm_add_listener (self->drm, &drm_listener, self); - } - } - -@@ -328,6 +418,7 @@ gst_wl_display_new_existing (struct wl_display * display, - - VERIFY_INTERFACE_EXISTS (compositor, "wl_compositor"); - VERIFY_INTERFACE_EXISTS (shm, "wl_shm"); -+ VERIFY_INTERFACE_EXISTS (drm, "wl_drm"); - - #undef VERIFY_INTERFACE_EXISTS - -diff --git a/ext/wayland/wldisplay.h b/ext/wayland/wldisplay.h -index aaa3235..fb586a4 100644 ---- a/ext/wayland/wldisplay.h -+++ b/ext/wayland/wldisplay.h -@@ -28,6 +28,7 @@ - #include "viewporter-client-protocol.h" - #include "linux-dmabuf-unstable-v1-client-protocol.h" - #include "fullscreen-shell-unstable-v1-client-protocol.h" -+#include "wayland-drm-client-protocol.h" - - G_BEGIN_DECLS - -@@ -57,9 +58,11 @@ struct _GstWlDisplay - struct xdg_wm_base *xdg_wm_base; - struct zwp_fullscreen_shell_v1 *fullscreen_shell; - struct wl_shm *shm; -+ struct wl_drm *drm; - struct wp_viewporter *viewporter; - struct zwp_linux_dmabuf_v1 *dmabuf; - GArray *shm_formats; -+ GArray *drmbuf_formats; - GArray *dmabuf_formats; - - /* private */ -@@ -70,6 +73,10 @@ struct _GstWlDisplay - GMutex buffers_mutex; - GHashTable *buffers; - gboolean shutting_down; -+ -+ int fd; -+ int authenticated; -+ gboolean has_prime_cap; - }; - - struct _GstWlDisplayClass -@@ -89,6 +96,8 @@ void gst_wl_display_unregister_buffer (GstWlDisplay * self, gpointer buf); - - gboolean gst_wl_display_check_format_for_shm (GstWlDisplay * display, - GstVideoFormat format); -+gboolean gst_wl_display_check_format_for_drm (GstWlDisplay * display, -+ GstVideoFormat format); - gboolean gst_wl_display_check_format_for_dmabuf (GstWlDisplay * display, - GstVideoFormat format); - -diff --git a/ext/wayland/wldrmallocator.c b/ext/wayland/wldrmallocator.c -new file mode 100644 -index 0000000..c9a617a ---- /dev/null -+++ b/ext/wayland/wldrmallocator.c -@@ -0,0 +1,398 @@ -+/* -+ * GStreamer -+ * -+ * Copyright (C) 2012 Texas Instruments -+ * -+ * Authors: -+ * Pooja Prajod -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation -+ * version 2.1 of the License. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+/** -+ * SECTION:GstWlDrmAllocator -+ * @short_description: GStreamer DRM allocator support -+ * -+ * Since: 1.6.3 -+ */ -+ -+ -+#include "wldrmallocator.h" -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+ -+#include "wayland-drm-client-protocol.h" -+ -+GST_DEBUG_CATEGORY (drmallocator_debug); -+#define GST_CAT_DEFAULT drmallocator_debug -+ -+#define GST_DRM_MEMORY_TYPE GST_ALLOCATOR_DMABUF -+ -+struct drm_bo -+{ -+ void *ptr; -+ size_t size; -+ unsigned handle; -+ unsigned int refs; -+}; -+ -+struct _GstWlDrmAllocatorPrivate -+{ -+ int fd; -+ /* protected by GstWlDrmAllocator object lock */ -+ GList *mem_cache; -+ GstAllocator *dmabuf_alloc; -+}; -+ -+#define parent_class gst_wl_drm_allocator_parent_class -+G_DEFINE_TYPE_WITH_CODE (GstWlDrmAllocator, gst_wl_drm_allocator, -+ GST_TYPE_FD_ALLOCATOR, G_ADD_PRIVATE (GstWlDrmAllocator); -+ GST_DEBUG_CATEGORY_INIT (GST_CAT_DEFAULT, "waylandalloc", 0, -+ "Wl Drm allocator")); -+ -+enum -+{ -+ PROP_DRM_FD = 1, -+ PROP_N, -+}; -+ -+static GParamSpec *g_props[PROP_N] = { NULL, }; -+ -+/* Copied from gst_v4l2_object_extrapolate_stride() */ -+static gint -+gst_wl_drm_extrapolate_stride (const GstVideoFormatInfo * finfo, gint plane, -+ gint stride) -+{ -+ gint estride; -+ -+ switch (finfo->format) { -+ case GST_VIDEO_FORMAT_NV12: -+ case GST_VIDEO_FORMAT_NV12_64Z32: -+ case GST_VIDEO_FORMAT_NV21: -+ case GST_VIDEO_FORMAT_NV16: -+ case GST_VIDEO_FORMAT_NV61: -+ case GST_VIDEO_FORMAT_NV24: -+ estride = (plane == 0 ? 1 : 2) * -+ GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (finfo, plane, stride); -+ break; -+ default: -+ estride = GST_VIDEO_FORMAT_INFO_SCALE_WIDTH (finfo, plane, stride); -+ break; -+ } -+ -+ return estride; -+} -+ -+static GstMemory * -+gst_wl_drm_allocator_alloc (GstAllocator * allocator, gsize size, -+ GstAllocationParams * params) -+{ -+ GstWlDrmAllocator *alloc = GST_WL_DRM_ALLOCATOR (allocator); -+ int fd = -1; -+ GstMemory *mem; -+ -+ /* Variable for DRM Dumb Buffers */ -+ struct drm_mode_create_dumb creq; -+ struct drm_mode_destroy_dumb dreq; -+ int ret; -+ -+ GST_DEBUG_OBJECT (alloc, "Wl DRM Memory alloc"); -+ -+ memset (&creq, 0, sizeof (struct drm_mode_create_dumb)); -+ /* -+ We have only total size as argument to _allocator_alloc. -+ Since the DDR storage is linear, it is as good as saying -+ the buffer is of width = size and height = 1 -+ */ -+ creq.width = size; -+ creq.height = 1; -+ creq.bpp = 8; -+ -+ /* Create a DRM dumb buffer */ -+ ret = drmIoctl (alloc->priv->fd, DRM_IOCTL_MODE_CREATE_DUMB, &creq); -+ if (ret < 0) { -+ GST_ERROR_OBJECT (alloc, "Create DRM dumb buffer failed"); -+ return NULL; -+ } -+ -+ /* Get a dmabuf fd from the dumb buffer handle */ -+ drmPrimeHandleToFD (alloc->priv->fd, creq.handle, DRM_CLOEXEC, &fd); -+ if (fd < 0) { -+ GST_ERROR_OBJECT (alloc, "Invalid fd returned: %d", fd); -+ goto fail; -+ } -+ -+ if (G_UNLIKELY (alloc->priv->dmabuf_alloc == NULL)) -+ alloc->priv->dmabuf_alloc = gst_dmabuf_allocator_new (); -+ -+ /* Get a dmabuf gstmemory with the fd */ -+ mem = gst_dmabuf_allocator_alloc (alloc->priv->dmabuf_alloc, fd, 0); -+ -+ if (G_UNLIKELY (!mem)) { -+ GST_ERROR_OBJECT (alloc, "GstDmaBufMemory allocation failed"); -+ close (fd); -+ goto fail; -+ } -+ -+ return mem; -+ -+fail: -+ memset (&dreq, 0, sizeof (struct drm_mode_destroy_dumb)); -+ dreq.handle = creq.handle; -+ drmIoctl (alloc->priv->fd, DRM_IOCTL_MODE_DESTROY_DUMB, &dreq); -+ return NULL; -+} -+ -+static void -+gst_wl_drm_allocator_free (GstAllocator * allocator, GstMemory * mem) -+{ -+ GstWlDrmAllocator *alloc; -+ -+ uint32_t handle = 0; -+ int fd = -1; -+ -+ alloc = GST_WL_DRM_ALLOCATOR (allocator); -+ -+ GST_LOG_OBJECT (alloc, "DRM Memory free"); -+ -+ g_return_if_fail (GST_IS_ALLOCATOR (allocator)); -+ g_return_if_fail (mem != NULL); -+ g_return_if_fail (gst_is_wl_drm_memory (mem)); -+ -+ fd = gst_dmabuf_memory_get_fd (mem); -+ drmPrimeFDToHandle(alloc->priv->fd, fd, &handle); -+ -+ /* Incase there are some mapped memory, we unmap and ready it to be cleaned*/ -+ GST_ALLOCATOR_CLASS (parent_class)->free (allocator, mem); -+ -+ if (handle) { -+ struct drm_mode_destroy_dumb dreq; -+ memset(&dreq, 0, sizeof(struct drm_mode_destroy_dumb)); -+ dreq.handle = handle; -+ drmIoctl (alloc->priv->fd, DRM_IOCTL_MODE_DESTROY_DUMB, &dreq); -+ } -+ -+ close (fd); -+} -+ -+static void -+gst_wl_drm_allocator_set_property (GObject * object, guint prop_id, -+ const GValue * value, GParamSpec * pspec) -+{ -+ GstWlDrmAllocator *alloc; -+ -+ alloc = GST_WL_DRM_ALLOCATOR (object); -+ -+ switch (prop_id) { -+ case PROP_DRM_FD:{ -+ int fd = g_value_get_int (value); -+ GST_DEBUG ("wayland : priv->fd (%d)", fd); -+ if (fd > -1) -+ alloc->priv->fd = fd; -+ break; -+ } -+ default: -+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -+ break; -+ } -+} -+ -+static void -+gst_wl_drm_allocator_get_property (GObject * object, guint prop_id, -+ GValue * value, GParamSpec * pspec) -+{ -+ GstWlDrmAllocator *alloc; -+ -+ alloc = GST_WL_DRM_ALLOCATOR (object); -+ -+ switch (prop_id) { -+ case PROP_DRM_FD: -+ GST_DEBUG ("wayland : priv->fd (%d)", alloc->priv->fd); -+ g_value_set_int (value, alloc->priv->fd); -+ break; -+ default: -+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -+ break; -+ } -+} -+ -+static void -+gst_wl_drm_allocator_finalize (GObject * obj) -+{ -+ GstWlDrmAllocator *alloc; -+ -+ alloc = GST_WL_DRM_ALLOCATOR (obj); -+ -+ GST_LOG_OBJECT (alloc, "DRM Allocator finalize"); -+ -+ close (alloc->priv->fd); -+ -+ G_OBJECT_CLASS (parent_class)->finalize (obj); -+} -+ -+static void -+gst_wl_drm_allocator_class_init (GstWlDrmAllocatorClass * klass) -+{ -+ GObjectClass *gobject_class; -+ GstAllocatorClass *allocator_class; -+ -+ allocator_class = GST_ALLOCATOR_CLASS (klass); -+ gobject_class = G_OBJECT_CLASS (klass); -+ -+ allocator_class->alloc = GST_DEBUG_FUNCPTR (gst_wl_drm_allocator_alloc); -+ allocator_class->free = GST_DEBUG_FUNCPTR (gst_wl_drm_allocator_free); -+ -+ -+ gobject_class->set_property = gst_wl_drm_allocator_set_property; -+ gobject_class->get_property = gst_wl_drm_allocator_get_property; -+ gobject_class->finalize = gst_wl_drm_allocator_finalize; -+ -+ g_props[PROP_DRM_FD] = g_param_spec_int ("drm-fd", "DRM fd", -+ "DRM file descriptor", -1, G_MAXINT, -1, -+ G_PARAM_READWRITE | G_PARAM_CONSTRUCT); -+ -+ g_object_class_install_properties (gobject_class, PROP_N, g_props); -+} -+ -+static void -+gst_wl_drm_allocator_init (GstWlDrmAllocator * allocator) -+{ -+ GstAllocator *alloc; -+ -+ alloc = GST_ALLOCATOR_CAST (allocator); -+ -+ allocator->priv = gst_wl_drm_allocator_get_instance_private (allocator); -+ allocator->priv->fd = -1; -+ -+ GST_DEBUG_OBJECT (allocator, "wayland : fd (%d)", allocator->priv->fd); -+ -+ alloc->mem_type = GST_DRM_MEMORY_TYPE; -+ -+ GST_OBJECT_FLAG_UNSET (allocator, GST_ALLOCATOR_FLAG_CUSTOM_ALLOC); -+} -+ -+static void -+gst_wl_drm_allocator_register (gint fd) -+{ -+ gst_allocator_register (GST_ALLOCATOR_WL_DRM, -+ g_object_new (GST_TYPE_WL_DRM_ALLOCATOR, "name", -+ "WlDrmMemory::allocator", "drm-fd", fd, NULL)); -+} -+ -+GstAllocator * -+gst_wl_drm_allocator_get (gint fd) -+{ -+ GstAllocator *alloc; -+ alloc = gst_allocator_find (GST_ALLOCATOR_WL_DRM); -+ if (!alloc) { -+ gst_wl_drm_allocator_register (fd); -+ alloc = gst_allocator_find (GST_ALLOCATOR_WL_DRM); -+ } -+ return alloc; -+} -+ -+gboolean -+gst_is_wl_drm_memory (GstMemory * mem) -+{ -+ return gst_memory_is_type (mem, GST_DRM_MEMORY_TYPE); -+} -+ -+static gboolean -+gst_wl_drm_validate_video_info (const GstVideoInfo * vinfo) -+{ -+ gint height = GST_VIDEO_INFO_HEIGHT (vinfo); -+ gint base_stride = GST_VIDEO_INFO_PLANE_STRIDE (vinfo, 0); -+ gsize base_offs = GST_VIDEO_INFO_PLANE_OFFSET (vinfo, 0); -+ gint i; -+ gsize offs = 0; -+ -+ for (i = 0; i < GST_VIDEO_INFO_N_PLANES (vinfo); i++) { -+ guint32 estride; -+ -+ /* Overwrite the video info's stride and offset using the pitch calculcated -+ * by the kms driver. */ -+ estride = gst_wl_drm_extrapolate_stride (vinfo->finfo, i, base_stride); -+ -+ if (estride != GST_VIDEO_INFO_PLANE_STRIDE (vinfo, i)) -+ return FALSE; -+ -+ if (GST_VIDEO_INFO_PLANE_OFFSET (vinfo, i) - base_offs != offs) -+ return FALSE; -+ -+ /* Note that we cannot negotiate special padding betweem each planes, -+ * hence using the display height here. */ -+ offs += -+ estride * GST_VIDEO_FORMAT_INFO_SCALE_HEIGHT (vinfo->finfo, i, height); -+ } -+ -+ if (vinfo->size < offs) -+ return FALSE; -+ -+ return TRUE; -+} -+ -+struct wl_buffer * gst_wl_drm_memory_construct_wl_buffer (GstWlDisplay * display, GstMemory * mem, const GstVideoInfo * vinfo) -+{ -+ guint width, height, size, maxsize; -+ guint stride, offset, memsize; -+ -+ enum wl_drm_format format; -+ struct wl_buffer *buffer; -+ gint prime_fd; -+ -+ prime_fd = gst_dmabuf_memory_get_fd (mem); -+ if (prime_fd < 0 ) { -+ GST_DEBUG_OBJECT (display, "Invalid prime_fd = %d", prime_fd); -+ return NULL; -+ } -+ -+ GST_DEBUG_OBJECT (display, "mem (%p), prime_fd = %d", mem, prime_fd); -+ -+ if (!gst_wl_drm_validate_video_info (vinfo)) { -+ GST_DEBUG_OBJECT (display, "Unsupported strides and offsets."); -+ return NULL; -+ } -+ -+ width = GST_VIDEO_INFO_WIDTH (vinfo); -+ height = GST_VIDEO_INFO_HEIGHT (vinfo); -+ format = gst_video_format_to_wl_drm_format (GST_VIDEO_INFO_FORMAT (vinfo)); -+ stride = GST_VIDEO_INFO_PLANE_STRIDE (vinfo, 0); -+ size = GST_VIDEO_INFO_SIZE (vinfo); -+ memsize = gst_memory_get_sizes (mem, &offset, &maxsize); -+ -+ g_return_val_if_fail (gst_is_dmabuf_memory (mem), NULL); -+ g_return_val_if_fail (size <= memsize, NULL); -+ g_return_val_if_fail (gst_wl_display_check_format_for_drm (display, -+ GST_VIDEO_INFO_FORMAT (vinfo)), NULL); -+ -+ buffer = wl_drm_create_linear_prime_buffer (display->drm, prime_fd, -+ width, height, format, 0, stride); -+ -+ if (buffer) { -+ GST_DEBUG_OBJECT (display, "Creating wl_buffer from DRM of size %" -+ G_GSSIZE_FORMAT " (%d x %d, stride %d), format %s", size, width, height, -+ stride, gst_wl_drm_format_to_string (format)); -+ return buffer; -+ } -+ -+ GST_DEBUG_OBJECT (display, "Failed to create wl_buffer: prime_fd (%d)", -+ prime_fd); -+ return NULL; -+} -diff --git a/ext/wayland/wldrmallocator.h b/ext/wayland/wldrmallocator.h -new file mode 100644 -index 0000000..4eb203d ---- /dev/null -+++ b/ext/wayland/wldrmallocator.h -@@ -0,0 +1,82 @@ -+/* -+ * GStreamer -+ * -+ * Copyright (C) 2012 Texas Instruments -+ * -+ * Authors: -+ * Pooja Prajod -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Lesser General Public -+ * License as published by the Free Software Foundation -+ * version 2.1 of the License. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Lesser General Public License for more details. -+ * -+ * You should have received a copy of the GNU Lesser General Public -+ * License along with this library; if not, write to the Free Software -+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -+ */ -+ -+/** -+ * SECTION:GstWlDrmAllocator -+ * @short_description: GStreamer DRM allocator support -+ * -+ * Since: 1.6.3 -+ */ -+ -+#ifndef __WL_DRM_ALLOCATOR_H__ -+#define __WL_DRM_ALLOCATOR_H__ -+ -+#include -+#include -+#include -+#include -+ -+#include -+#include -+#include -+ -+#include -+ -+#include "wldisplay.h" -+ -+G_BEGIN_DECLS -+ -+#define GST_TYPE_WL_DRM_ALLOCATOR (gst_wl_drm_allocator_get_type ()) -+#define GST_WL_DRM_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_WL_DRM_ALLOCATOR, GstWlDrmAllocator)) -+#define GST_IS_WL_DRM_ALLOCATOR(obj) (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_WL_DRM_ALLOCATOR)) -+#define GST_WL_DRM_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_WL_DRM_ALLOCATOR, GstWlDrmAllocatorClass)) -+#define GST_IS_WL_DRM_ALLOCATOR_CLASS(klass) (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_WL_DRM_ALLOCATOR)) -+#define GST_WL_DRM_ALLOCATOR_GET_CLASS(obj) (G_TYPE_INSTANCE_GET_CLASS ((obj), GST_TYPE_WL_DRM_ALLOCATOR, GstWlDrmAllocatorClass)) -+ -+#define GST_ALLOCATOR_WL_DRM "wl_drm" -+ -+typedef struct _GstWlDrmAllocator GstWlDrmAllocator; -+typedef struct _GstWlDrmAllocatorClass GstWlDrmAllocatorClass; -+typedef struct _GstWlDrmAllocatorPrivate GstWlDrmAllocatorPrivate; -+ -+struct _GstWlDrmAllocator -+{ -+ GstAllocator parent; -+ GstWlDrmAllocatorPrivate *priv; -+}; -+ -+struct _GstWlDrmAllocatorClass -+{ -+ GstAllocatorClass parent_class; -+}; -+ -+GType gst_wl_drm_allocator_get_type (void) G_GNUC_CONST; -+ -+GstAllocator * gst_wl_drm_allocator_get (gint fd); -+ -+gboolean gst_is_wl_drm_memory (GstMemory * mem); -+struct wl_buffer * gst_wl_drm_memory_construct_wl_buffer (GstWlDisplay * display, GstMemory * mem, const GstVideoInfo * info); -+ -+G_END_DECLS -+ -+#endif /* __WL_DRM_ALLOCATOR_H__ */ -diff --git a/ext/wayland/wlvideoformat.c b/ext/wayland/wlvideoformat.c -index 77cfac8..f91f7d6 100644 ---- a/ext/wayland/wlvideoformat.c -+++ b/ext/wayland/wlvideoformat.c -@@ -36,6 +36,12 @@ typedef struct - GstVideoFormat gst_format; - } wl_ShmVideoFormat; - -+typedef struct -+{ -+ enum wl_drm_format wl_format; -+ GstVideoFormat gst_format; -+} wl_DrmVideoFormat; -+ - typedef struct - { - guint wl_format; -@@ -83,6 +89,41 @@ static const wl_ShmVideoFormat shm_formats[] = { - {WL_SHM_FORMAT_YUV444, GST_VIDEO_FORMAT_v308}, - }; - -+static const wl_DrmVideoFormat drmbuf_formats[] = { -+#if G_BYTE_ORDER == G_BIG_ENDIAN -+ {WL_DRM_FORMAT_XRGB8888, GST_VIDEO_FORMAT_xRGB}, -+ {WL_DRM_FORMAT_ARGB8888, GST_VIDEO_FORMAT_ARGB}, -+ {WL_DRM_FORMAT_XBGR8888, GST_VIDEO_FORMAT_xBGR}, -+ {WL_DRM_FORMAT_RGBX8888, GST_VIDEO_FORMAT_RGBx}, -+ {WL_DRM_FORMAT_BGRX8888, GST_VIDEO_FORMAT_BGRx}, -+ {WL_DRM_FORMAT_ABGR8888, GST_VIDEO_FORMAT_ABGR}, -+ {WL_DRM_FORMAT_RGBA8888, GST_VIDEO_FORMAT_RGBA}, -+ {WL_DRM_FORMAT_BGRA8888, GST_VIDEO_FORMAT_BGRA}, -+ {WL_DRM_FORMAT_RGB888, GST_VIDEO_FORMAT_RGB}, -+ {WL_DRM_FORMAT_BGR888, GST_VIDEO_FORMAT_BGR}, -+#else -+ {WL_DRM_FORMAT_XRGB8888, GST_VIDEO_FORMAT_BGRx}, -+ {WL_DRM_FORMAT_ARGB8888, GST_VIDEO_FORMAT_BGRA}, -+ {WL_DRM_FORMAT_XBGR8888, GST_VIDEO_FORMAT_RGBx}, -+ {WL_DRM_FORMAT_RGBX8888, GST_VIDEO_FORMAT_xBGR}, -+ {WL_DRM_FORMAT_BGRX8888, GST_VIDEO_FORMAT_xRGB}, -+ {WL_DRM_FORMAT_ABGR8888, GST_VIDEO_FORMAT_RGBA}, -+ {WL_DRM_FORMAT_RGBA8888, GST_VIDEO_FORMAT_ABGR}, -+ {WL_DRM_FORMAT_BGRA8888, GST_VIDEO_FORMAT_ARGB}, -+ {WL_DRM_FORMAT_RGB888, GST_VIDEO_FORMAT_BGR}, -+ {WL_DRM_FORMAT_BGR888, GST_VIDEO_FORMAT_RGB}, -+#endif -+ {WL_DRM_FORMAT_RGB565, GST_VIDEO_FORMAT_RGB16}, -+ {WL_DRM_FORMAT_YUV410, GST_VIDEO_FORMAT_YUV9}, -+ {WL_DRM_FORMAT_YUV411, GST_VIDEO_FORMAT_Y41B}, -+ {WL_DRM_FORMAT_YUV420, GST_VIDEO_FORMAT_I420}, -+ {WL_DRM_FORMAT_YUV422, GST_VIDEO_FORMAT_Y42B}, -+ {WL_DRM_FORMAT_YUV444, GST_VIDEO_FORMAT_v308}, -+ {WL_DRM_FORMAT_NV12, GST_VIDEO_FORMAT_NV12}, -+ {WL_DRM_FORMAT_NV16, GST_VIDEO_FORMAT_NV16}, -+ {WL_DRM_FORMAT_YUYV, GST_VIDEO_FORMAT_YUY2}, -+}; -+ - static const wl_DmabufVideoFormat dmabuf_formats[] = { - #if G_BYTE_ORDER == G_BIG_ENDIAN - {DRM_FORMAT_XRGB8888, GST_VIDEO_FORMAT_xRGB}, -@@ -112,6 +153,16 @@ static const wl_DmabufVideoFormat dmabuf_formats[] = { - {DRM_FORMAT_NV12, GST_VIDEO_FORMAT_NV12}, - }; - -+const gchar * -+gst_wl_gst_video_format_to_string (GstVideoFormat format) -+{ -+ const gchar *unknown_format = "UNKNOWN"; -+ if (format <= GST_VIDEO_FORMAT_UNKNOWN || -+ format > GST_VIDEO_FORMAT_NV24) -+ return unknown_format; -+ return gst_video_format_to_string(format); -+} -+ - enum wl_shm_format - gst_video_format_to_wl_shm_format (GstVideoFormat format) - { -@@ -125,6 +176,19 @@ gst_video_format_to_wl_shm_format (GstVideoFormat format) - return -1; - } - -+enum wl_drm_format -+gst_video_format_to_wl_drm_format (GstVideoFormat format) -+{ -+ guint i; -+ -+ for (i = 0; i < G_N_ELEMENTS (drmbuf_formats); i++) -+ if (drmbuf_formats[i].gst_format == format) -+ return drmbuf_formats[i].wl_format; -+ -+ GST_WARNING ("wayland drm video format not found"); -+ return -1; -+} -+ - gint - gst_video_format_to_wl_dmabuf_format (GstVideoFormat format) - { -@@ -150,6 +214,18 @@ gst_wl_shm_format_to_video_format (enum wl_shm_format wl_format) - return GST_VIDEO_FORMAT_UNKNOWN; - } - -+GstVideoFormat -+gst_wl_drm_format_to_video_format (enum wl_drm_format wl_format) -+{ -+ guint i; -+ -+ for (i = 0; i < G_N_ELEMENTS (drmbuf_formats); i++) -+ if (drmbuf_formats[i].wl_format == wl_format) -+ return drmbuf_formats[i].gst_format; -+ -+ return GST_VIDEO_FORMAT_UNKNOWN; -+} -+ - GstVideoFormat - gst_wl_dmabuf_format_to_video_format (guint wl_format) - { -@@ -165,10 +241,17 @@ gst_wl_dmabuf_format_to_video_format (guint wl_format) - const gchar * - gst_wl_shm_format_to_string (enum wl_shm_format wl_format) - { -- return gst_video_format_to_string -+ return gst_wl_gst_video_format_to_string - (gst_wl_shm_format_to_video_format (wl_format)); - } - -+const gchar * -+gst_wl_drm_format_to_string (enum wl_drm_format drm_format) -+{ -+ return gst_wl_gst_video_format_to_string -+ (gst_wl_drm_format_to_video_format (drm_format)); -+} -+ - const gchar * - gst_wl_dmabuf_format_to_string (guint wl_format) - { -diff --git a/ext/wayland/wlvideoformat.h b/ext/wayland/wlvideoformat.h -index 331f582..362f55d 100644 ---- a/ext/wayland/wlvideoformat.h -+++ b/ext/wayland/wlvideoformat.h -@@ -28,13 +28,19 @@ - #include - #include - -+#include "wayland-drm-client-protocol.h" -+ - G_BEGIN_DECLS - -+const gchar *gst_wl_gst_video_format_to_string (GstVideoFormat format); - enum wl_shm_format gst_video_format_to_wl_shm_format (GstVideoFormat format); -+enum wl_drm_format gst_video_format_to_wl_drm_format (GstVideoFormat format); - gint gst_video_format_to_wl_dmabuf_format (GstVideoFormat format); - GstVideoFormat gst_wl_shm_format_to_video_format (enum wl_shm_format wl_format); -+GstVideoFormat gst_wl_drm_format_to_video_format (enum wl_drm_format wl_format); - GstVideoFormat gst_wl_dmabuf_format_to_video_format (guint wl_format); - const gchar *gst_wl_shm_format_to_string (enum wl_shm_format wl_format); -+const gchar *gst_wl_drm_format_to_string (enum wl_drm_format wl_format); - const gchar *gst_wl_dmabuf_format_to_string (guint wl_format); - - G_END_DECLS diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-fix-crash-in-wldrmallocator-for-64bit-porting-of-rpi4.patch b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-fix-crash-in-wldrmallocator-for-64bit-porting-of-rpi4.patch deleted file mode 100644 index 937608b19..000000000 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-fix-crash-in-wldrmallocator-for-64bit-porting-of-rpi4.patch +++ /dev/null @@ -1,12 +0,0 @@ -diff -ruN a/ext/wayland/wldrmallocator.c b/ext/wayland/wldrmallocator.c ---- a/ext/wayland/wldrmallocator.c 2021-09-21 12:46:10.949683969 +0530 -+++ b/ext/wayland/wldrmallocator.c 2021-09-21 12:46:38.782775348 +0530 -@@ -351,7 +351,7 @@ - struct wl_buffer * gst_wl_drm_memory_construct_wl_buffer (GstWlDisplay * display, GstMemory * mem, const GstVideoInfo * vinfo) - { - guint width, height, size, maxsize; -- guint stride, offset, memsize; -+ gsize stride, offset, memsize; - - enum wl_drm_format format; - struct wl_buffer *buffer; diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend index eee3d780e..11849788b 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend @@ -1,6 +1,6 @@ -# Copyright (c) 2018-2021 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. -EXTENDPRAUTO_append_rpi = "webosrpi5" +EXTENDPRAUTO_append_rpi = "webosrpi6" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" @@ -10,8 +10,4 @@ PACKAGECONFIG_append_rpi = " kms wayland" PACKAGECONFIG_remove_rpi = "faad" -SRC_URI_append_rpi = " \ - file://0001-waylandsink-remove-unsupported-subcompositor.patch \ - file://0002-waylandsink-zero-copy-using-wl-drm-protocol.patch \ - file://0003-fix-crash-in-wldrmallocator-for-64bit-porting-of-rpi4.patch \ -" +SRC_URI_append_rpi = " file://0001-waylandsink-remove-unsupported-subcompositor.patch" diff --git a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb index 2a4333281..3e428623c 100644 --- a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb +++ b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2021 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "G media pipeline is a media pipeline which uses GStreamer" AUTHOR = "Jinwoo Ahn " @@ -28,19 +28,17 @@ inherit webos_pkgconfig COMPATIBLE_MACHINE = "^qemux86$|^qemux86-64$|^raspberrypi3$|^raspberrypi3-64$|^raspberrypi4$|^raspberrypi4-64$" # raspberrypi4 and qemux86 uses @gav branch -PR = "r9" +PR = "r10" DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad umediaserver media-resource-calculator webos-wayland-extensions" DEPENDS_append_rpi = " virtual/libomxil" WEBOS_GIT_PARAM_BRANCH = "@gav" -WEBOS_VERSION = "1.0.0-21.gav.23_0890c1cfc02fd7f3d71763d5e2b73c1a49487c6a" -SRC_URI_append = " file://0001-LunaServiceClient.cpp-include-string-to-fix-build-wi.patch" +WEBOS_VERSION = "1.0.0-21.gav.26_923294c807f952965968f2b02e43955bfd9db3fc" # raspberrypi3 uses @21.master branch DEPENDS_remove_raspberrypi3 = "webos-wayland-extensions" WEBOS_GIT_PARAM_BRANCH_raspberrypi3 = "@21.master" WEBOS_VERSION_raspberrypi3 = "1.0.0-21.master.1_5780fa2b8466405a9873df1e64621f5930e00686" -SRC_URI_remove_raspberrypi3 = " file://0001-LunaServiceClient.cpp-include-string-to-fix-build-wi.patch" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" From d630c514257fdaa8bdc9e0eed8b708a4c324c26b Mon Sep 17 00:00:00 2001 From: "sushovan.g" Date: Wed, 5 Jan 2022 10:37:22 +0530 Subject: [PATCH 0226/2022] ose:audiod=35 pulseaudio=31 :Release Notes: Implement support for track volume :Detailed Notes: audiod : submissions/34..submissions/35 af4f364 Limit number of tracks a07e8f3 handle the missed unregister calls 60101ec remove streamType parameter from setTrackVolume API a42b10e implement changes for unregistered streams 2061eb6 implement stopping playback for wrong streamtype a1632fb support multiple stream open and close 479bee0 add trackManager Module 006b553 Implement unregisterTrack API 97bfb86 add trackRegister API 19f44ec implement for storing sink-input index c5abffd [App Volume] implement to get sinkindex and app name ffc6079 Implement setAppVolume API pulseaudio: submissions/30..submissions/31 e39ee99a4 implement kill playback feature 182d28bcd Support track volume feature :Testing Performed: Test results are updated in WRN-14518 :QA Notes: NA :Issues Addressed: [WRN-14518] CCC: audiod=35 pulseaudio=31 [WRN-9560] implement and verify pulseaudio track id changes [WRN-12475] implement limit for number of tracks registered [WRN-12470] implement code changes for pipeline status [WRN-10482] remove streamType parameter from setTrackVolume [WRN-10480] implement changes for unregistered playback [WRN-10488] implement changes for stopping playback for wrong streamtype [WRN-10463] implement the changes for multiple streams [WRN-10225] Implement event handling for track manager module [WRN-9552] implement and verify audiod skeleton code for trackVolume Change-Id: If7dd85f44eb637453782f8e7834642305ef7dbb7 --- meta-webos/recipes-multimedia/audiod/audiod.bb | 4 ++-- meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/meta-webos/recipes-multimedia/audiod/audiod.bb b/meta-webos/recipes-multimedia/audiod/audiod.bb index 74f738df0..0f14a9b78 100644 --- a/meta-webos/recipes-multimedia/audiod/audiod.bb +++ b/meta-webos/recipes-multimedia/audiod/audiod.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2021 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "webOS Audiod daemon and utilities" AUTHOR = "Manohar Babu " @@ -23,7 +23,7 @@ RDEPENDS_${PN} = "\ pulseaudio-server \ " -WEBOS_VERSION = "1.0.0-34_92400a08ffb30408d7042a709e0b7a64994ccb15" +WEBOS_VERSION = "1.0.0-35_7aa5d5b4bad1216ed4169fb5bc8add54aece2f9c" PR = "r31" inherit webos_component diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb index 08e2272ae..19f49a5d3 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb +++ b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2021 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. require recipes-multimedia/pulseaudio/pulseaudio.inc @@ -36,7 +36,7 @@ DEPENDS_remove = "libatomic-ops" DEPENDS += "pmloglib" -WEBOS_VERSION = "9.0-30_7390ae117ba7a4a30421bee9788e7f0a9cea3d27" +WEBOS_VERSION = "9.0-31_3367e01ce42031ea1e1c5c643e8dee0f949b1a5e" PR = "r28" inherit webos_enhanced_submissions From 80d937f76aebaecdebe252c63201f2225cb1f84c Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Wed, 5 Jan 2022 19:37:50 +0900 Subject: [PATCH 0227/2022] luna-surfacemanager=362 qml-webos-bridge=127 :Release Notes: Improve Qt app rendering performance :Detailed Notes: luna-surfacemanager: submissions/361..submissions/362 33bc94b base: Adjust to handle json object in LS qml-webos-bridge: submissions/126..submissions/127 196c82f Pass some lists as QVariant into qml 15f91ce Make configurable wait time between responses c86a07c Spread service responses over time :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-14462] CCC: luna-surfacemanager=362 qml-webos-bridge=127 Change-Id: I2ee3fdfd35cb76ac21f074d30266131b4cda86cd --- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 4 ++-- meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index c2423177d..bf655de27 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "The core of the Luna Surface Manager (compositor)" AUTHOR = "Anupam Kaul " @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0 qtwayland-webos" -WEBOS_VERSION = "2.0.0-361_d7a69e76ba6f56d2f978c14d8c247362fae02d68" +WEBOS_VERSION = "2.0.0-362_3f931bfb7244118facaa46572f48774a7cfa0026" PR = "r53" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb b/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb index 8896abd90..06703f7c6 100644 --- a/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb +++ b/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "webOS QML LS2 bridge" AUTHOR = "Anupam Kaul " @@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative luna-service2 glib-2.0" RDEPENDS_${PN} += "qml-webos-components" -WEBOS_VERSION = "1.0.0-126_5279a79c5525127f6ab5d865343f418cad6dbfb7" +WEBOS_VERSION = "1.0.0-127_5eaac8692103b9f67c9da7f6d69a6ce6bb2c4dd2" PR = "r18" inherit webos_qmake6 From a8198bf1db7677a7705f3207502b0945b1d44d11 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Wed, 5 Jan 2022 15:07:51 +0900 Subject: [PATCH 0228/2022] ose: webruntime_87=12 :Release Notes: Bug fix :Detailed Notes: webruntime_87: submissions/11..submissions/12 0648836205b [op][n_upsable][error_page] Show error page only if error is in main frame :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-13817] [webOS OSE]: Connection error page is displayed when launching YouTube [WRN-14506] CCC: ose: webruntime_87=12 Change-Id: Iac5ef851d1eabe619f5f9dec2fdfa38877ef472d --- meta-webos/recipes-webos/chromium/webruntime-repo_87.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc index 292ebf28f..81fd916de 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc @@ -1,9 +1,9 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=28f5b870e5e06b9af5b96c9dd65b31c8" WEBOS_REPO_NAME = "chromium87" -WEBOS_VERSION = "87.0.4280.88-11_2aef2811320afb9a448930558f9183231c433b49" +WEBOS_VERSION = "87.0.4280.88-12_7c9f2fe947810b7ea95f3609e0795f674ad4bfe4" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium87" From 8d4d34f838db10d63e9b123c18aea86e0e16fb9c Mon Sep 17 00:00:00 2001 From: "venugopal.k" Date: Wed, 12 Jan 2022 20:12:23 +0530 Subject: [PATCH 0229/2022] ose: sam=62 :Release Notes: Add com.webos.applicationManager group in allowedName :Detailed Notes: Added com.webos.applicationManager group in the "com.webos.sam.groups.json" to match it with the role file "com.webos.sam.role.json". sam: submissions/61..submissions/62 2ee4235 Added com.webos.applicationManager group in allowedName :Testing Performed: Test Result updated in WRN-14817 :QA Notes: N/A :Issues Addressed: [WRN-14817] CCC : ose :sam=62 [WRN-13924][webOS OSE]: state of com.webos.app.sam-qml closing>stop>launching>foreground. Change-Id: Ic97633a67fd8de329db6c53ad1dc185c084cdbff --- meta-webos/recipes-webos/sam/sam.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/sam/sam.bb b/meta-webos/recipes-webos/sam/sam.bb index a0f3099c4..7f4a37498 100644 --- a/meta-webos/recipes-webos/sam/sam.bb +++ b/meta-webos/recipes-webos/sam/sam.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. DESCRIPTION = "System Application Manager" AUTHOR = "Sangwoo Kang " @@ -14,7 +14,7 @@ RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_webos-customization}" VIRTUAL-RUNTIME_webos-customization ?= "" -WEBOS_VERSION = "2.0.0-61_3f84d2da1b0ebfe219106fade22c6878734fbcb7" +WEBOS_VERSION = "2.0.0-62_504be77613971f264dcc4c1c61728153445d1ad4" PR = "r26" inherit webos_component From d5bdde41799b97c565439a4ffdd602f71ca901a6 Mon Sep 17 00:00:00 2001 From: "sc.heo" Date: Fri, 7 Jan 2022 08:23:16 +0900 Subject: [PATCH 0230/2022] linux-yocto=webos13 :Release Notes: Enable oomd in kernel for ose emulator :Detailed Notes: Currently systemd-oomd is enalbed only for rpi4. So enable oomd in kernel for ose emulator to resolve WRN-14431 issue. :Testing Performed: See CCC jira ticket for results. :QA Notes: N/A :Issues Addressed: [WRN-14600] CCC: linux-yocto=webos13 [WRN-14431] [OSE Emulator][Linux 18.04] The Type-Killing is not displayed and running list are displayed. Change-Id: I9f782142a9d449507f45e7e231f4d7c8741f4fc1 --- meta-webos/recipes-kernel/linux/linux-yocto/oomd.cfg | 1 + meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) create mode 100644 meta-webos/recipes-kernel/linux/linux-yocto/oomd.cfg diff --git a/meta-webos/recipes-kernel/linux/linux-yocto/oomd.cfg b/meta-webos/recipes-kernel/linux/linux-yocto/oomd.cfg new file mode 100644 index 000000000..72452cf33 --- /dev/null +++ b/meta-webos/recipes-kernel/linux/linux-yocto/oomd.cfg @@ -0,0 +1 @@ +CONFIG_PSI=y diff --git a/meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend b/meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend index e24df04fb..fd878bec0 100644 --- a/meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend +++ b/meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend @@ -1,6 +1,6 @@ -# Copyright (c) 2015-2021 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos12" +EXTENDPRAUTO_append = "webos13" # Assign to PE, because empty PKGE in KERNEL_IMAGE_NAME causes two hyphens. PE = "1" @@ -16,6 +16,7 @@ SRC_URI_append_qemux86 = " file://crypto.cfg \ file://0001-change-keymax-value.patch \ file://file_system.cfg \ file://bluetooth_ext.cfg \ + file://oomd.cfg \ " SRC_URI_append_qemux86-64 = " file://crypto.cfg \ file://my_gfx.cfg \ @@ -26,6 +27,7 @@ SRC_URI_append_qemux86-64 = " file://crypto.cfg \ file://0001-change-keymax-value.patch \ file://file_system.cfg \ file://bluetooth_ext.cfg \ + file://oomd.cfg \ " KERNEL_FEATURES_append_qemux86 = " features/bluetooth/bluetooth-usb.scc" From 7448fe60deed109a88effe1ad2c626b9e0327e73 Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Mon, 10 Jan 2022 18:45:21 +0900 Subject: [PATCH 0231/2022] auto-luna-surface-manager=39 luna-surfacemanager=363 qml-webos-bridge=128 qtbase-plugins-webos=11 :Release Notes: Handle Keyboard and Mouse in OSE Fix power suspend mode issue :Detailed Notes: auto-luna-surface-manager: submissions/38..submissions/39 e356092 Launch Settings app upon F1 key c5c33ea Launch Home app upon Windows key 2afb833 Disable timeout for cursor to show it always luna-surfacemanager: submissions/362..submissions/363 b484a46 Install key filter for secondary windows qml-webos-bridge: submissions/127..submissions/128 829fc1a Spread responses for designated methods only qtbase-plugins-webos: submissions/10..submissions/11 4dc0ec3 Make keyboard focus on current mouse window :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-14669] CCC: auto-luna-surface-manager=39 luna-surfacemanager=363 qml-webos-bridge=128 qtbase-plugins-webos=11 Change-Id: Iaa51e13ee9c6d88cfd33be5c3f7f181604a32e1d --- .../auto-luna-surface-manager/auto-luna-surface-manager.bb | 4 ++-- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 2 +- meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb | 2 +- .../qtbase-plugins-webos/qtbase-plugins-webos.bb | 4 ++-- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb index e778f6680..31b2d59da 100644 --- a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb +++ b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "Surface Manager for webOS Auto Reference UX" AUTHOR = "Jaeyoon Jung " @@ -15,7 +15,7 @@ RDEPENDS_${PN} = " \ qtbase-plugins-webos \ " -WEBOS_VERSION = "0.0.1-38_4a63b31f3956172cea497d621d42e2939a8970d3" +WEBOS_VERSION = "0.0.1-39_52ae0dcd3b1923bce9287bb1923fcd45871b318c" PR = "r7" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index bf655de27..0c663a426 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0 qtwayland-webos" -WEBOS_VERSION = "2.0.0-362_3f931bfb7244118facaa46572f48774a7cfa0026" +WEBOS_VERSION = "2.0.0-363_b951ffc9f569ff58c2fde62f6119ad35e2f7f87c" PR = "r53" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb b/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb index 06703f7c6..4d661deff 100644 --- a/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb +++ b/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb @@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative luna-service2 glib-2.0" RDEPENDS_${PN} += "qml-webos-components" -WEBOS_VERSION = "1.0.0-127_5eaac8692103b9f67c9da7f6d69a6ce6bb2c4dd2" +WEBOS_VERSION = "1.0.0-128_1a07996a078dd0a06f2896f1079cf2a5e25e41cc" PR = "r18" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb index bb4983540..f6a70e1f2 100644 --- a/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb +++ b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2021 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. SUMMARY = "webOS extension for qtbase plugins" AUTHOR = "Elvis Lee " @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtbase" -WEBOS_VERSION = "1.0.0-10_88f577a5f756ba2ea2972d6866e4822d8d4d8c06" +WEBOS_VERSION = "1.0.0-11_2f4b435c79dc99e5add85cb658a49aff54420faf" PR = "r4" inherit webos_qmake6 From 218e957ec3ef84e067aa33c48587dac1bdf509af Mon Sep 17 00:00:00 2001 From: "lalit.shanker" Date: Wed, 12 Jan 2022 15:04:57 +0530 Subject: [PATCH 0232/2022] ose: luna-service2=26 :Release Notes: LS call cancel bug fix and verification :Detailed Notes: luna-service2: submissions/25..submissions/26 40ff06e LS Call cancel bug fix :Testing Performed: Build Success Refer WRN-14895 for test results :QA Notes: N/A :Issues Addressed: [WRN-14895] CCC: luna-service2={ose:26 pro:344} [WRN-14072] LS call cancel bug fix and verification Change-Id: I7771289c683598a4b686f79298ee94fe41f90193 --- meta-webos/recipes-webos/luna-service2/luna-service2.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/luna-service2/luna-service2.bb b/meta-webos/recipes-webos/luna-service2/luna-service2.bb index 80c438b1c..b57f0cec0 100644 --- a/meta-webos/recipes-webos/luna-service2/luna-service2.bb +++ b/meta-webos/recipes-webos/luna-service2/luna-service2.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS Luna System Bus library, daemon, and utilities" AUTHOR = "Anatolii Sakhnik " @@ -14,7 +14,7 @@ VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS_${PN} = "luna-service2-security-conf ${VIRTUAL-RUNTIME_cpushareholder} ${VIRTUAL-RUNTIME_bash}" -WEBOS_VERSION = "3.21.2-25_b81da83baba14a77e2ade4b7cf27cfff49c3cc01" +WEBOS_VERSION = "3.21.2-26_090febd0c42c556e43a6ac06ea9c6cc2fe627f0b" PR = "r28" EXTRA_OECMAKE += "${@ '-DWEBOS_DISTRO_PRERELEASE:STRING="devel"' \ From 8958c873f050272a7df7e78bab142dba3cf22df1 Mon Sep 17 00:00:00 2001 From: "akanksha.gupta" Date: Wed, 12 Jan 2022 15:35:25 +0530 Subject: [PATCH 0233/2022] activitymanager=30 :Release Notes: Remove com.webos.lunasend check in activitymanager :Detailed Notes: activitymanager: submissions/29..submissions/30 35c14dd Remove com.webos.lunasend check :Testing Performed: Test Result updated in WRN-14807 :QA Notes: N/A :Issues Addressed: [WRN-14807] CCC: activitymanager=30 [WRN-14252] Analyze issue Cannot replace existing activity tvPowerd [WRN-14253] Verify ActivityManager tvPowerd test cases for WRN-14611 [WRN-14611] "returnValue : false" is displayed while creating activity. Change-Id: Ifa8bd49f1d3a968d3c661a88fefb01458b62023c --- meta-webos/recipes-webos/activitymanager/activitymanager.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/activitymanager/activitymanager.bb b/meta-webos/recipes-webos/activitymanager/activitymanager.bb index c74257110..e8b8dc7fd 100644 --- a/meta-webos/recipes-webos/activitymanager/activitymanager.bb +++ b/meta-webos/recipes-webos/activitymanager/activitymanager.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. DESCRIPTION = "webOS component to manage all running activities." AUTHOR = "Ludovic Legrand " @@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "luna-service2 db8 boost libpbnjson glib-2.0 pmloglib ${VIRTUAL-RUNTIME_init_manager}" -WEBOS_VERSION = "3.0.0-29_f828935d78361b413460178d805bc441ef0ecbbb" +WEBOS_VERSION = "3.0.0-30_1af21315a64f99247660b7c4e6f5648bceb4f737" PR = "r11" inherit webos_component From ad967e7ceafb2e516a202453b2f53bb20d85a709 Mon Sep 17 00:00:00 2001 From: sushant narayan Date: Tue, 18 Jan 2022 11:48:38 +0530 Subject: [PATCH 0234/2022] ose: g-camera-pipeline=13.gav.27 :Release Notes: RDX crash issues fix in camera pipeline for device mode :Detailed Notes: g-camera-pipeline : submissions/13.gav.26..submissions/13.gav.27 066cc73 Fix crash issue for device mode in camera pipeline :Testing Performed: Please refer test result in WRN-15523 :QA Notes: NA :Issues Addressed: [WRN-15523] CCC: ose: g-camera-pipeline=13.gav.27 [WRN-14265] [RDX_CRASH][webos] /usr/sbin/g-camera-pipeline in _ZN16V4l2CameraPlugin18releaseMmapBuffersEv (libv4l2-camera-plugin.so + 0x300c) Change-Id: I98d81e9a046512d42202365210bde778a3e64ccd --- .../recipes-webos/g-camera-pipeline/g-camera-pipeline.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb index 0a7c64ff8..f736dff83 100644 --- a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb +++ b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "g-camera-pipeline is a player which uses GStreamer" AUTHOR = "Praveen P " @@ -24,7 +24,7 @@ DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad DEPENDS_append_rpi = " userland" WEBOS_GIT_PARAM_BRANCH = "@gav" -WEBOS_VERSION = "1.0.0-13.gav.26_e153a18d97245a5db980b31d4b63c157c9789d56" +WEBOS_VERSION = "1.0.0-13.gav.27_e68fd50c6837edd62501448bcdf75e2c8a766a01" WEBOS_GIT_PARAM_BRANCH_raspberrypi3 = "master" From 653c21393ea48bb8f36809e05f123fedff3179e8 Mon Sep 17 00:00:00 2001 From: "jongson.kim" Date: Mon, 17 Jan 2022 18:56:44 +0900 Subject: [PATCH 0235/2022] ose: com.webos.app.mediagallery=16 qml-app-components=6 :Release Notes: Add additional setup method for StyleLoader Fix mediagallery bugs :Detailed Notes: com.webos.app.mediagallery: submissions/15..submissions/16 68f477d Remove size x1.5 trick that from webOSAuto 872c14e Fix license notices to Apache qml-app-components: submissions/5..submissions/6 8ad6884 Add json file path setter as v0.2 :Testing Performed: Please check CCC tickets :QA Notes: :Issues Addressed: [WRN-15520] CCC: ose: com.webos.app.mediagallery=16 qml-app-components=6 [WRN-14140] Qml-App-Component : Enhance StyleLoader default path customization [WRN-14122] Some license texts are not apache, but LGE closed [WRN-11985] MediaGallery app sets window larger than it needs Change-Id: I278f8017c6bdba60ec731a1d98b30267a83ce533 --- .../com.webos.app.mediagallery/com.webos.app.mediagallery.bb | 4 ++-- .../recipes-webos/qml-app-components/qml-app-components.bb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/meta-webos/recipes-webos/com.webos.app.mediagallery/com.webos.app.mediagallery.bb b/meta-webos/recipes-webos/com.webos.app.mediagallery/com.webos.app.mediagallery.bb index 0d65eb954..27690005e 100644 --- a/meta-webos/recipes-webos/com.webos.app.mediagallery/com.webos.app.mediagallery.bb +++ b/meta-webos/recipes-webos/com.webos.app.mediagallery/com.webos.app.mediagallery.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2021 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. # Confidential computer software. Valid license from LG required for # possession, use or copying. Consistent with FAR 12.211 and 12.212, @@ -19,7 +19,7 @@ DEPENDS_append = " ${@ 'qtshadertools-native' if d.getVar('QT_VERSION', True) == RDEPENDS_${PN} += "qml-webos-framework qml-webos-bridge" -WEBOS_VERSION = "1.0.0-15_2726294995afb54941df42713727f6ba9d86fcba" +WEBOS_VERSION = "1.0.0-16_dc86d074c62414f5f7e560145ebe237ff9d87ecc" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" PR = "r2" diff --git a/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb b/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb index a7d4b5b73..f0dffd231 100644 --- a/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb +++ b/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "webOS QML app components" AUTHOR = "Jongson Kim " @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative luna-service2 glib-2.0" DEPENDS_append = " ${@ 'qtshadertools-native' if d.getVar('QT_VERSION', True) == '6' else '' }" -WEBOS_VERSION = "1.0.0-5_176952582c70131e26b4ae68ac4e5ff257ee03cc" +WEBOS_VERSION = "1.0.0-6_ad9b0aee66408b214d5f4d61b9912ed411da2f00" PR = "r4" inherit webos_qmake6 From afed7a69d604c6e54e696280fc0f839d92b14190 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Wed, 12 Jan 2022 12:22:50 +0900 Subject: [PATCH 0236/2022] ose: wam=57 :Release Notes: Fix bug which Settings app launches on wrong display :Detailed Notes: wam: submissions/56..submissions/57 be198a0 [op][error_page] Update the network error page :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-13927] [OSE-RPi4] : Settings app is appeared on the Display #0 instead of Display #1 [WRN-14739] CCC: ose: wam=57 Change-Id: I47fb5de5a6968c21c70641eb990ca0bea71ef916 --- meta-webos/recipes-webos/wam/wam.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index db8d17272..d33f3eaca 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2021 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. SUMMARY = "WebAppMgr is responsible for running web applications on webOS" AUTHOR = "Lokesh Kumar Goel " @@ -18,7 +18,7 @@ RDEPENDS_${PN} += "util-linux" VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" -WEBOS_VERSION = "1.0.2-56_1faf20c6a14e8d3ede826e170097f6c4e68324be" +WEBOS_VERSION = "1.0.2-57_f111853b803ecb1ea70ea7ea5887fe7ebbef2280" PR = "r44" WAM_BUILD_SYSTEM = "webos_qmake6" From 4114ce9f32f7ddc60917e1e1c6b925c4f260e6b8 Mon Sep 17 00:00:00 2001 From: "venugopal.k" Date: Thu, 20 Jan 2022 15:40:13 +0530 Subject: [PATCH 0237/2022] ose: appinstalld2=37 :Release Notes: Revert the default trust level for external apps from dev to oem :Detailed Notes: appinstalld2: submissions/36..submissions/37 89b7f32 Revert "Default trust level for external apps to "dev"" :Testing Performed: Test Result updated in WRN-15652 :QA Notes: N/A :Issues Addressed: [WRN-15577] Revert default trustlevel dev to oem [WRN-15652] CCC: appinstalld2=37 Change-Id: If4d1fa6f685f3ce9b048246b5b534754be72fddd --- meta-webos/recipes-webos/appinstalld2/appinstalld2.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb b/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb index 39a7d70a7..fec3283ed 100644 --- a/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb +++ b/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "Application Install Service" AUTHOR = "Sangwoo Kang " @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "glib-2.0 luna-service2 libpbnjson pmloglib pmtrace boost icu" RDEPENDS_${PN} = "applicationinstallerutility ecryptfs-utils librolegen" -WEBOS_VERSION = "1.0.0-36_8c8df6e829d2ea7be1c33010afecc8a3c41b76e5" +WEBOS_VERSION = "1.0.0-37_df8107da7a26b683a84098a9e0dee83cb333008e" PR = "r4" inherit webos_component From ad30ec5b030d064f2e413256dc504eb3b30e3ae5 Mon Sep 17 00:00:00 2001 From: "divvya.rosna" Date: Thu, 20 Jan 2022 10:58:55 +0530 Subject: [PATCH 0238/2022] ose: g-media-pipeline=21.gav.27 :Release Notes: Add app based track volume support in media pipeline :Detailed Notes: g-media-pipeline: submissions/21.gav.26..submissions/21.gav.27 3ebf9df Add app based track volume support in media pipeline :Testing Performed: Please refer CCC ticket for details :QA Notes: NA :Issues Addressed: [WRN-15638] CCC: g-media-pipeline=21.gav.27 [WRN-15202] Resolve merge conflicts on latest changes and incorporate review comments [WRN-11388] Implement changes for adding luna api for registertrack and settrackvolume call [WRN-11391] Implement callback function for registerTrack API for getting trackid value [WRN-7353] Fix issues regarding property for pulsesink not set correct [WRN-15167] Update meta changes for g-media-pipeline and verification of CCC binary Change-Id: Idf95a60cb8d50717b93cf7bbf28d626d0bad7440 --- .../recipes-multimedia/g-media-pipeline/g-media-pipeline.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb index 3e428623c..659f9061a 100644 --- a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb +++ b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb @@ -33,7 +33,7 @@ DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad DEPENDS_append_rpi = " virtual/libomxil" WEBOS_GIT_PARAM_BRANCH = "@gav" -WEBOS_VERSION = "1.0.0-21.gav.26_923294c807f952965968f2b02e43955bfd9db3fc" +WEBOS_VERSION = "1.0.0-21.gav.27_cabe0c9d864e04ba1882b664717ebfc1da163c9b" # raspberrypi3 uses @21.master branch DEPENDS_remove_raspberrypi3 = "webos-wayland-extensions" From a0edaa8e34a65435eafbb0a75ec0c2929f1d2be9 Mon Sep 17 00:00:00 2001 From: Joonhyung Hwang Date: Thu, 16 Dec 2021 10:09:42 +0900 Subject: [PATCH 0239/2022] ose: webruntime_91=r52.3 :Release Notes: Disable the crypto feature for Raspberry Pi 4, because it is not supported. :Detailed Notes: Currently, the compiler uses -mcpu=armv8-a+crc+crypto for the webruntime and generates AES instructions (e.g., AESE) in the binary. They cause the SIGILL (illegal instruction) signal because the AES instructions are not supported by Raspberry Pi 4. This patch disables the crypto feature to avoid crashes. See the following links for more information: https://bugzilla.yoctoproject.org/show_bug.cgi?id=14641 https://github.com/agherzan/meta-raspberrypi/issues/964 This patch will be unnecessary when the upstream fixes are available. :Testing Performed: In a web app, load an HTTPS page that is not cached. :QA Notes: Test-cases: QWO-491 :Issues Addressed: [WRN-12904] CCC: Switch OSE to chromium91 as default webruntime Change-Id: I903fcd4f6c785a584e9fdb237a72621cb2d250da --- meta-webos/recipes-webos/chromium/webruntime_91.bb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime_91.bb b/meta-webos/recipes-webos/chromium/webruntime_91.bb index 1ba216d4c..7ee561e1f 100644 --- a/meta-webos/recipes-webos/chromium/webruntime_91.bb +++ b/meta-webos/recipes-webos/chromium/webruntime_91.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. WEBRUNTIME_REPO_VERSION = "91" require webruntime.inc @@ -6,7 +6,7 @@ require webruntime-repo${REPO_VERSION}.inc PROVIDES = "virtual/webruntime" -PR = "${INC_PR}.2" +PR = "${INC_PR}.3" PACKAGECONFIG[debug] = "symbol_level=2 optimize_for_size=true use_debug_fission=true,symbol_level=0" PACKAGECONFIG[debug-blink] = "blink_symbol_level=2,blink_symbol_level=1" @@ -43,3 +43,4 @@ PACKAGECONFIG_remove_qemux86 = "gstreamer umediaserver neva-media gav" PACKAGECONFIG_remove_qemux86-64 = "gstreamer umediaserver neva-media gav" #END TODO +TUNE_FEATURES_remove_raspberrypi4-64 = "crypto" From d0e53c48e580a6c23e65b0110be601ec65d25968 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Wed, 27 Oct 2021 14:38:15 +0900 Subject: [PATCH 0240/2022] ose: webruntime_91=8 v8=chromium91.3 :Release Notes: Add chromium91 and related changes :Detailed Notes: webruntime_91: submissions/3..submissions/8 Add chromium91 and related changes (Refer to CCC ticket for details) v8: submissions/chromium91.1..submissions/chromium91.3 Add chromium91 and related changes b958ec542d [op][upsable][trace] Prevent crash with std::isprint usage in serialization trace. 5ca615d4a2 [op][ds][version] Add webOS submission number to v8 version 57d88e7607 Make v8 heap constraints configurable 9793fee8d7 Add LTTng tracepoints support 8e16715f1a Report exceptions to console running mksnapshot 0006361f03 Trace heap growing factor more accurately 9abc2ba8c7 Allow to use v8 non-ICU timezone database :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-6489] Prepare OSE build with chromium91 [WRN-4544] Chromium v91 upgrade for OSE [WRN-12904] CCC: Switch OSE to chromium91 as default webruntime Change-Id: I988ba4edcfe0f46129ccff8fcda5b44f9d99bb0d --- meta-webos/recipes-webos/chromium/webruntime-repo_91.inc | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc index 3d904839e..0dd24bc7e 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -1,12 +1,12 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=c31f1ae166739be9ca186deacf4b32e4" WEBOS_REPO_NAME = "chromium91" -WEBOS_VERSION = "91.0.4472.114-3_f64b405ebd97e0c382ccf1fc40fc4c3a96e937e7" +WEBOS_VERSION = "91.0.4472.114-8_5c04c7a49dd6321fcb333c19c7cb3f036c7fc7bb" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" -WEBOS_VERSION_V8 = "8.7.220.29-chromium91.1_89712e7f20774931327815ca5dfea0723ab39e82" -SRCREV_v8 = "57d88e7607e88c7bbb942d993de261ed7cd6c5a4" +WEBOS_VERSION_V8 = "8.7.220.29-chromium91.3_7e5684397e1522f3b5b7ea8155c2f1e22fa1cdd2" +SRCREV_v8 = "b958ec542dcb086f422a1216a959be38a4cc0339" From 3da4870ed0f252a45e66331f0466263da1468670 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Tue, 26 Oct 2021 16:24:18 +0900 Subject: [PATCH 0241/2022] Switch to chromium91 as default webruntime :Release Notes: Switch to chromium91 as default webruntime :Detailed Notes: This reverts commit 4503f0a1aadd92ccda26b97eacbb4185e5e84642. When the preferred version is not given, the lastest webruntime will be the default. :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-6489] Prepare OSE build with chromium91 [WRN-4544] Chromium v91 upgrade for OSE [WRN-12904] CCC: Switch OSE to chromium91 as default webruntime Change-Id: I3fe5906cb9b0ace7a24dfd4bcc0cb243e7a27acc --- meta-webos/conf/distro/include/webos-preferred-versions.inc | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/meta-webos/conf/distro/include/webos-preferred-versions.inc b/meta-webos/conf/distro/include/webos-preferred-versions.inc index e29c1a193..68658e8d0 100644 --- a/meta-webos/conf/distro/include/webos-preferred-versions.inc +++ b/meta-webos/conf/distro/include/webos-preferred-versions.inc @@ -1,4 +1 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. - -PREFERRED_VERSION_webruntime = "87.%" -PREFERRED_VERSION_mksnapshot-cross-${TARGET_ARCH} = "87.%" +# Copyright (c) 2012-2022 LG Electronics, Inc. From c45d27dc39ec4da16d1322fa16ba58d91e761f75 Mon Sep 17 00:00:00 2001 From: Thomas George C Date: Fri, 21 Jan 2022 16:52:22 +0530 Subject: [PATCH 0242/2022] ose: audiod=36 pulseaudio=32 :Release Notes: Fix Static issue and BT disconnection issue :Detailed Notes: audiod : submissions/35..submissions/36 9655bcc Static issue fixes pulseaudio: submissions/31..submissions/32 afc80693e Fix BT disconnection issue :Testing Performed: Test results are updated in WRN-15739 :QA Notes: NA :Issues Addressed: [WRN-15739] CCC: audiod:36 pulseaudio:32 [WRN-14661] [WebOS OSE] : Bluetooth device is getting disconnected within few seconds [CID-9001369] Using invalid iterator [CID-9002640] Using invalid iterator [CID-9052837] Structurally dead code Change-Id: Ie529b5a23d1211446a5a26035fbce3e1fdcd7372 --- meta-webos/recipes-multimedia/audiod/audiod.bb | 2 +- meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-multimedia/audiod/audiod.bb b/meta-webos/recipes-multimedia/audiod/audiod.bb index 0f14a9b78..b5c324e32 100644 --- a/meta-webos/recipes-multimedia/audiod/audiod.bb +++ b/meta-webos/recipes-multimedia/audiod/audiod.bb @@ -23,7 +23,7 @@ RDEPENDS_${PN} = "\ pulseaudio-server \ " -WEBOS_VERSION = "1.0.0-35_7aa5d5b4bad1216ed4169fb5bc8add54aece2f9c" +WEBOS_VERSION = "1.0.0-36_8c2e23529060703975f7a887df1ddb86e6d86f22" PR = "r31" inherit webos_component diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb index 19f49a5d3..f5ccfbb16 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb +++ b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb @@ -36,7 +36,7 @@ DEPENDS_remove = "libatomic-ops" DEPENDS += "pmloglib" -WEBOS_VERSION = "9.0-31_3367e01ce42031ea1e1c5c643e8dee0f949b1a5e" +WEBOS_VERSION = "9.0-32_30846a9e09c185241eb7d371d54fe9810fd4bb13" PR = "r28" inherit webos_enhanced_submissions From 9666bf615cbe3109475af81a4f9d493a8df2a59a Mon Sep 17 00:00:00 2001 From: YoungeunKim Date: Tue, 25 Jan 2022 12:51:54 +0900 Subject: [PATCH 0243/2022] ose: luna-service2-security-conf=24 :Release Notes: Add systemservice API to "arescli.interface" group :Detailed Notes: luna-service2-security-conf: submissions/23..submissions/24 bcf930d Add systemservice APIs to arescli.interface group :Testing Performed: Refer [WRN-15731] for test results :QA Notes: N/A :Issues Addressed: [WRN-15731] CCC: ose: luna-service2-security-conf=24 [WRN-11265] Add systemservice's softwareinfo API permission for ares-cli Change-Id: I712f26326479a6cbda3eff94c16da1d652a94abf --- .../luna-service2-security-conf.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/luna-service2-security-conf/luna-service2-security-conf.bb b/meta-webos/recipes-webos/luna-service2-security-conf/luna-service2-security-conf.bb index 51ecd7d60..dbd543577 100644 --- a/meta-webos/recipes-webos/luna-service2-security-conf/luna-service2-security-conf.bb +++ b/meta-webos/recipes-webos/luna-service2-security-conf/luna-service2-security-conf.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2021 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. SUMMARY = "webOS LS2 security configuration" AUTHOR = "Anatolii Sakhnik " @@ -9,7 +9,7 @@ file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " -WEBOS_VERSION = "1.0.2-23_d5cf2bd0b11d801d6177bd6cc54633843c24b033" +WEBOS_VERSION = "1.0.2-24_408d29b850749c79ecd6356ed8917df53116b4b3" PR = "r6" inherit webos_component From ad368b7512007964facaed848eb9d8d713950541 Mon Sep 17 00:00:00 2001 From: "Krishna Bhat/LGSIA Platform Core-1(krishna.bhat@lge.com)" Date: Mon, 24 Jan 2022 16:53:00 +0530 Subject: [PATCH 0244/2022] ose: com.webos.service.contextintentmgr=16 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit :Release Notes: Fix google assistance custom action fact generator node not able to launch youtube app :Detailed Notes: com.webos.service.contextintentmgr: submissions/15..submissions/16 ea91032 A Fix for google custom action for generate fact :Testing Performed: Please check CCC tickets :QA Notes: N/A :Issues Addressed: [WRN-15708] CCC: ose: com.webos.service.contextintentmgr=16 [WRN-15426] [webOS OSE]: Youtube is not launching Change-Id: Ie11751c549615b7bec441342dcd3c0a403d81a03 --- .../com.webos.service.contextintentmgr.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bb b/meta-webos/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bb index 410429a33..314e5eb9e 100644 --- a/meta-webos/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bb +++ b/meta-webos/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2021 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "Node-red based context intent manager (CIM)" AUTHOR = "Tirthadeep Roy " @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7ca DEPENDS = "nodejs-module-node-red" -WEBOS_VERSION = "1.0.0-15_164dac6257c940674dd1e00657d40bdc200144f2" +WEBOS_VERSION = "1.0.0-16_81772cbd310891d4df004000a9b1af3173a8185e" PR = "r4" # The same restrition as nodejs (and nodejs-module-node-red) From a729a711e03147d902184b3b1fa398732ebca961 Mon Sep 17 00:00:00 2001 From: Myungchul Kim Date: Thu, 27 Jan 2022 08:22:04 +0900 Subject: [PATCH 0245/2022] webos-fluentbit-plugins=27 :Release Notes: Update webosreporter password policy :Detailed Notes: webos-fluentbit-plugins: submissions/25..submissions/27 1c9a912 Add returnValue to createBug success response 2695230 Fix webos_issue.py update issue 297f5fb Remove retired methods ae07152 Add issue key in createBug 1ce8e53 Support closing jira issue a55f937 Modify to read screenshot list on request 3943441 Rename config file : webos_config_1_base.json 5b844e0 Download jira password and retry work, if login failed. :Testing Performed: See the CCC jira ticket :QA Notes: N/A :Issues Addressed: [WRN-15816] CCC: webos-fluentbit-plugins=27 [WRN-13836] Manage webosreporter password [WRN-13956] Response issue key in createBug Change-Id: If22e9f6acda8ae5501d41768642e66e0e0d932e5 --- .../webos-fluentbit-plugins/webos-fluentbit-plugins.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb index afcad3fca..6d4570471 100644 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "webOS fluentbit plugins" AUTHOR = "Sangwoo Kang " @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "glib-2.0 luna-service2 libpbnjson fluentbit" RDEPENDS_${PN} = "nyx-utils python3-core python3-requests python3-atlassian-python-api" -WEBOS_VERSION = "1.0.0-25_75c0855341a397e9c8dfc342dc57f1a74bdd0779" +WEBOS_VERSION = "1.0.0-27_e1ff73fdbb0ca15942759dd06cafcc09e82f7650" PR = "r3" inherit webos_component From c7b379bb4438a94ed4a75c4f10fbf7007c4d27ea Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Wed, 29 Dec 2021 18:25:01 +0900 Subject: [PATCH 0246/2022] luna-surfacemanager=364 qtwayland-webos=72 :Release Notes: Fix build issues with newer meta-qt6. Support unittest cases :Detailed Notes: luna-surfacemanager: submissions/363..submissions/364 b6c8a2e Add virtual WebOSWaylandSeat::setCursorSurfaceInternal() 1892d43 Export UnixSignalHandler 5c1998d Add WebOSCoreCompositor::createInputMethodManager ccbf1b6 Introduce WaylandInputMethodContextDelegate and WaylandTextModelDelegate qtwayland-webos: submissions/71..submissions/72 1deb6a5 Drop unnecessary header inclusion e3c965d Drop WebOSShellIntegration::display() :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-15812] CCC: luna-surfacemanager=364 qtwayland-webos=72 and more Change-Id: I39db20f04e9ac2459804f8d7fb0cf22e7511f105 --- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 2 +- meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index 0c663a426..e80e46fe0 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0 qtwayland-webos" -WEBOS_VERSION = "2.0.0-363_b951ffc9f569ff58c2fde62f6119ad35e2f7f87c" +WEBOS_VERSION = "2.0.0-364_f401268017182e6891c245c091a8e1e0fde16bdc" PR = "r53" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb index dcf13a32d..4351785f8 100644 --- a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb +++ b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2016-2021 LG Electronics, Inc. +# Copyright (c) 2016-2022 LG Electronics, Inc. SUMMARY = "webOS extension for Qtwayland" AUTHOR = "Elvis Lee " @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtwayland webos-wayland-extensions libxkbcommon qt-features-webos wayland-native qtwayland-native wayland-protocols" -WEBOS_VERSION = "2.0.0-71_88f8849841415fad01233b373110531065ee1f78" +WEBOS_VERSION = "2.0.0-72_d292ab1e0ac44c7f14b6136b1a6921a3c9fb215a" PR = "r16" inherit webos_qmake6 From 2959bd927cce314ff269aebb30c4386fc2dc64e8 Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Mon, 10 Jan 2022 08:09:55 +0900 Subject: [PATCH 0247/2022] qtbase=webos97 qtwayland=webos27 (apply patches conditionally) :Release Notes: Apply patches conditionally so that they don't conflict with a newer Qt version. Fix a crash when touch device is removed. :Detailed Notes: qtbase=webos97 Add 0002-evdev-Prevent-race-condition-in-touch-events-process.patch Apply the patch below if PV is less than the version where it is merged. 0001-Support-to-get-timing-from-pagefilp.patch 0002-evdev-Prevent-race-condition-in-touch-events-process.patch qtwayland=webos27 Apply the patch below if PV is less than the version where it is merged. 0001-Support-presentation-time-protocol.patch Apply the patch below with no condition as it hasn't been merged yet. 0002-Use-scope-resolution-operator-for-request.patch I tried to use 'maxrev' option in SRC_URI but found that it doesn't work as documented. The implementation isn't correct as it compares commit hashes as string instead of the order in the commit history. 'maxver' is the option not documented, but works as expected. :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-15812] CCC: luna-surfacemanager=364 qtwayland-webos=72 and more Change-Id: Ic641e5c307f1811a27a342f4bc787eb6f49b294c --- ...ce-condition-in-touch-events-process.patch | 96 +++++++++++++++++++ meta-webos/recipes-qt/qt6/qtbase_git.bbappend | 7 +- .../recipes-qt/qt6/qtwayland_git.bbappend | 10 +- 3 files changed, 104 insertions(+), 9 deletions(-) create mode 100644 meta-webos/recipes-qt/qt6/qtbase/0002-evdev-Prevent-race-condition-in-touch-events-process.patch diff --git a/meta-webos/recipes-qt/qt6/qtbase/0002-evdev-Prevent-race-condition-in-touch-events-process.patch b/meta-webos/recipes-qt/qt6/qtbase/0002-evdev-Prevent-race-condition-in-touch-events-process.patch new file mode 100644 index 000000000..a721d6f8a --- /dev/null +++ b/meta-webos/recipes-qt/qt6/qtbase/0002-evdev-Prevent-race-condition-in-touch-events-process.patch @@ -0,0 +1,96 @@ +From 7b7965aca49a01f5494667a7c53a3a71d20c5418 Mon Sep 17 00:00:00 2001 +From: Jungi Byun +Date: Tue, 21 Dec 2021 14:37:36 +0900 +Subject: [PATCH] evdev: Prevent race condition in touch events processing + +Unlike other input devices, touch devices are managed by corresponding +handler threads which are not the main thread. InputEvent that is +inherited by TouchEvent has a constant pointer member for device, but in +touch events case, handler threads may destroy the device which is +pointed by events while processing these events in main thread, +and this may cause critical potential issues such as crash. In order to +prevent this race condition, move device of QEvdevTouchScreenHandler +into main thread and delete this device later if QGuiApplication +instance exists when handler thread quits, and check event's device is +valid when processing touch events. + +Change-Id: I02583238d97d768abcc544ee882160eda3178282 +Reviewed-by: Elvis Lee +Reviewed-by: Shawn Rutledge +Upstream-Status: Backport [https://codereview.qt-project.org/c/qt/qtbase/+/387428] + +%% original patch: 0002-evdev-Prevent-race-condition-in-touch-events-process.patch +--- + src/gui/kernel/qguiapplication.cpp | 3 ++ + .../input/evdevtouch/qevdevtouchhandler.cpp | 39 ++++++++++++++++++- + 2 files changed, 41 insertions(+), 1 deletion(-) + +diff --git a/src/gui/kernel/qguiapplication.cpp b/src/gui/kernel/qguiapplication.cpp +index cfe1e48e04..a03be84423 100644 +--- a/src/gui/kernel/qguiapplication.cpp ++++ b/src/gui/kernel/qguiapplication.cpp +@@ -2786,6 +2786,9 @@ void QGuiApplicationPrivate::processContextMenuEvent(QWindowSystemInterfacePriva + + void QGuiApplicationPrivate::processTouchEvent(QWindowSystemInterfacePrivate::TouchEvent *e) + { ++ if (!QInputDevicePrivate::isRegistered(e->device)) ++ return; ++ + modifier_buttons = e->modifiers; + QPointingDevice *device = const_cast(static_cast(e->device)); + QPointingDevicePrivate *devPriv = QPointingDevicePrivate::get(device); +diff --git a/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp b/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp +index eb693426d9..c318b2220e 100644 +--- a/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp ++++ b/src/platformsupport/input/evdevtouch/qevdevtouchhandler.cpp +@@ -474,9 +474,46 @@ void QEvdevTouchScreenHandler::registerPointingDevice() + QWindowSystemInterface::registerInputDevice(m_device); + } + ++/*! \internal ++ ++ QEvdevTouchScreenHandler::unregisterPointingDevice can be called by several cases. ++ ++ First of all, the case that an application is terminated, and destroy all input devices ++ immediately to unregister in this case. ++ ++ Secondly, the case that removing a device without touch events for the device while the ++ application is still running. In this case, the destructor of QEvdevTouchScreenHandler from ++ the connection with QDeviceDiscovery::deviceRemoved in QEvdevTouchManager calls this method. ++ And this method moves a device into the main thread and then deletes it later but there is no ++ touch events for the device so that the device would be deleted in appropriate time. ++ ++ Finally, this case is similar as the second one but with touch events, that is, a device is ++ removed while touch events are given to the device and the application is still running. ++ In this case, this method is called by readData with ENODEV error and the destructor of ++ QEvdevTouchScreenHandler. So in order to prevent accessing the device which is already nullptr, ++ check the nullity of a device first. And as same as the second case, move the device into the ++ main thread and then delete it later. But in this case, cannot guarantee which event is ++ handled first since the list or queue where posting QDeferredDeleteEvent and appending touch ++ events are different. ++ If touch events are handled first, there is no problem because the device which is used for ++ these events is registered. However if QDeferredDeleteEvent for deleting the device is ++ handled first, this may cause a crash due to using unregistered device when processing touch ++ events later. In order to prevent processing such touch events, check a device which is used ++ for touch events is registered when processing touch events. ++ ++ see QGuiApplicationPrivate::processTouchEvent(). ++ */ + void QEvdevTouchScreenHandler::unregisterPointingDevice() + { +- delete m_device; ++ if (!m_device) ++ return; ++ ++ if (QGuiApplication::instance()) { ++ m_device->moveToThread(QGuiApplication::instance()->thread()); ++ m_device->deleteLater(); ++ } else { ++ delete m_device; ++ } + m_device = nullptr; + } + +-- +2.17.1 + diff --git a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend index 9055e018e..37679a813 100644 --- a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend @@ -1,8 +1,8 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. inherit webos_qt_global -EXTENDPRAUTO_append = "webos96" +EXTENDPRAUTO_append = "webos97" # Remove LGPL3-only files python do_patch_append() { @@ -86,7 +86,8 @@ PATCHTOOL = "git" # Upstream-Status: Backport SRC_URI_append = " \ - file://0001-Support-to-get-timing-from-pagefilp.patch;rev=${WEBOS_PATCH_SRCREV} \ + file://0001-Support-to-get-timing-from-pagefilp.patch;maxver=6.2.* \ + file://0002-evdev-Prevent-race-condition-in-touch-events-process.patch;maxver=6.2.* \ " # Upstream-Status: Inappropriate diff --git a/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend b/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend index 67e0caf90..9028d6b9c 100644 --- a/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend @@ -1,19 +1,17 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. inherit webos_qt_global -EXTENDPRAUTO_append = "webos26" +EXTENDPRAUTO_append = "webos27" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" -# Apply webOS specific patches to only SRCREV tested -WEBOS_PATCH_SRCREV = "e9ac64ab5e5364ae4d309227422588417463efdd" PATCHTOOL = "git" # Upstream-Status: Backport SRC_URI_append = " \ - file://0001-Support-presentation-time-protocol.patch;rev=${WEBOS_PATCH_SRCREV} \ - file://0002-Use-scope-resolution-operator-for-request.patch;rev=${WEBOS_PATCH_SRCREV} \ + file://0001-Support-presentation-time-protocol.patch;maxver=6.2.* \ + file://0002-Use-scope-resolution-operator-for-request.patch \ " # More options for fine-tuned configuration From e118ad4f2e805b945cd4604e86d943bf922461bc Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Tue, 25 Jan 2022 11:14:29 +0900 Subject: [PATCH 0248/2022] ose: webruntime_91=9 :Release Notes: Implement GPU vsync provider for wayland :Detailed Notes: webruntime_91: submissions/8..submissions/9 f9507fb211 [oe][n_upsable][wayland] Implement GPU vsync provider for wayland :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-14954] Apply presention_time protocol to chromium [WRN-15727] CCC: webruntime_91={ose:9 pro:pro.15} Change-Id: I0f2ed6d34f5f06294aebb39dfa2936ac43c17f65 --- meta-webos/recipes-webos/chromium/webruntime-repo_91.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc index 0dd24bc7e..63b125793 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=c31f1ae166739be9ca186deacf4b32e4" WEBOS_REPO_NAME = "chromium91" -WEBOS_VERSION = "91.0.4472.114-8_5c04c7a49dd6321fcb333c19c7cb3f036c7fc7bb" +WEBOS_VERSION = "91.0.4472.114-9_16f0acc8622ac263e25cec3c6de09b133d2aefce" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" From 7ec59d8e860088e3cfaa209c19fa9fa73f6654f8 Mon Sep 17 00:00:00 2001 From: "karthick.sundaram" Date: Thu, 27 Jan 2022 17:51:56 +0530 Subject: [PATCH 0249/2022] ose: webruntime_91=r52.4 :Release Notes: Enable build flag use_neva_media_player_camera :Detailed Notes: In Chromium91, media_player_camera.cc/.h files are moved under use_neva_media_player_camera build flag. This patchset enables the flag to use MediaPlayerCamera. :Testing Performed: 1. swipe up from the bottom of the OSE device 2. Launch Camera app from Launcher 3. verify the camera preview is visible. :QA Notes: Test-cases: QWO-1457, QWO-1463, QWO-1475 :Issues Addressed: [WRN-15710] Camera preview is not displayed on the screen [WRN-15982] CCC: ose: webruntime_91=r52.4 Change-Id: I01e5b8c25085222763e02006cdb3e1e1c60894e6 --- meta-webos/recipes-webos/chromium/webruntime_91.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime_91.bb b/meta-webos/recipes-webos/chromium/webruntime_91.bb index 7ee561e1f..6878f82ac 100644 --- a/meta-webos/recipes-webos/chromium/webruntime_91.bb +++ b/meta-webos/recipes-webos/chromium/webruntime_91.bb @@ -6,7 +6,7 @@ require webruntime-repo${REPO_VERSION}.inc PROVIDES = "virtual/webruntime" -PR = "${INC_PR}.3" +PR = "${INC_PR}.4" PACKAGECONFIG[debug] = "symbol_level=2 optimize_for_size=true use_debug_fission=true,symbol_level=0" PACKAGECONFIG[debug-blink] = "blink_symbol_level=2,blink_symbol_level=1" @@ -36,6 +36,7 @@ GN_ARGS_append = " \ includedir=\"${includedir}\"\ enable_mojom_closure_compile=false\ enable_js_type_check=false\ + use_neva_media_player_camera=true\ " # TODO: qemux build fails From 7e90d08bba273c57b43cc5411895353194995609 Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Tue, 8 Feb 2022 14:48:06 +0900 Subject: [PATCH 0250/2022] luna-surfacemanager=365 :Release Notes: Support to compile with Qt6.3 :Detailed Notes: luna-surfacemanager: submissions/364..submissions/365 ef9b8a1 Fix QMutableEventPoint::from for Qt 6.3 :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: [WRN-16516] CCC: luna-surfacemanager=365 Refer to the CCC JIRA ticket for related issues. Change-Id: I9a0af3f00c425734baf9cc70d6009f71b9fbc29f --- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index e80e46fe0..28418e49a 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0 qtwayland-webos" -WEBOS_VERSION = "2.0.0-364_f401268017182e6891c245c091a8e1e0fde16bdc" +WEBOS_VERSION = "2.0.0-365_6be4705de7582cc8f4467e603aa6a16810459946" PR = "r53" inherit webos_qmake6 From b4fb32299c00892eb81f7a564008a0b790862d37 Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Mon, 7 Feb 2022 13:42:29 +0900 Subject: [PATCH 0251/2022] ilib-webapp=20,v14.12.0 enact-framework=r17 :Release Notes: Updated iLib version as 14.12.0. Update Enact's corresponding iLib dependency for 14.12.0 :Detailed Notes: Updated iLib version as 14.12.0. (https://github.com/iLib-js/iLib/releases). Updated support: UCD v14.0.0, CLDR 40.0.0 and ISO 15924 Updated to route the code flow via NodeLoader when a platform is IoTjs ilib-webapp: submissions/19..submissions/20 785c0cf Sync up iLib 14.12.0 enact-framework: r16..r17 Updated Enact's corresponding iLib dependency :Testing Performed: See jira ticket for results. :QA Notes: N/A :Issues Addressed: [WRN-15779] Apply the latest version of iLib to webOS [WRN-15778] CCC: ilib-webapp=19,v14.20.0 enact-framework=r17 Change-Id: Ia9fda6d6416597c11b9ca52a0b05e856c83685c2 --- meta-webos/recipes-webos/enactjs-apps/enact-framework.bb | 4 ++-- meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb index 16e72b69a..dc7e897e7 100644 --- a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb +++ b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb @@ -36,7 +36,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ direction@1.0.4 \ dom-walk@0.1.2 \ global@4.4.0 \ - ilib@14.11.1 \ + ilib@14.12.0 \ invariant@2.2.4 \ is-function@1.0.2 \ js-tokens@4.0.0 \ @@ -59,7 +59,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ # NOTE: We only need to bump PR if we change something OTHER than # PV, SRCREV or the dependencies statement above. -PR = "r16" +PR = "r17" # Skip unneeded tasks do_configure[noexec] = "1" diff --git a/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb b/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb index e751bfb0d..8ccecebd6 100644 --- a/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb +++ b/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "iLib code and locale data" AUTHOR = "Goun Lee " @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=be4f2e45a1215076318af43f833aa178 \ " -WEBOS_VERSION = "14.11.1-19_bcf4e4a4c1d2d11c80bbd7e6d40d41b4e9335f21" +WEBOS_VERSION = "14.12.0-20_bad63708db54e590cd9cf3ec49c7ab53d9cf7c34" PR = "r8" inherit webos_arch_indep From 0c91685f4beee4807eb71a911f9cd494fe706c43 Mon Sep 17 00:00:00 2001 From: "sc.heo" Date: Tue, 8 Feb 2022 11:28:55 +0900 Subject: [PATCH 0252/2022] linux-yocto=webos14 webos-initscripts=83 :Release Notes: Enable swap and zram for emulator :Detailed Notes: webos-initscripts : submissions/82..submissions/83 ca8c850 Enable swap-on service and zram-on service for emulator linux-yocto: add zram.cfg for emulator There is missing zram kernel configuration for emulator. Add zram configuration for emulator's kernel. :Testing Performed: local build & verified :QA Notes: NA :Issues Addressed: [WRN-15944] Enable swap and zram for ose emulator Change-Id: Ia5f347e92e0745c5d1d16a290464a54ee456e715 --- meta-webos/recipes-core/initscripts/webos-initscripts.bb | 2 +- meta-webos/recipes-kernel/linux/linux-yocto/zram.cfg | 2 ++ meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend | 4 +++- 3 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 meta-webos/recipes-kernel/linux/linux-yocto/zram.cfg diff --git a/meta-webos/recipes-core/initscripts/webos-initscripts.bb b/meta-webos/recipes-core/initscripts/webos-initscripts.bb index 9f5528934..9d7c602ae 100644 --- a/meta-webos/recipes-core/initscripts/webos-initscripts.bb +++ b/meta-webos/recipes-core/initscripts/webos-initscripts.bb @@ -18,7 +18,7 @@ RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_init_manager} ${VIRTUAL-RUNTIME_bash} python PROVIDES = "initscripts" RPROVIDES_${PN} = "initscripts initd-functions" -WEBOS_VERSION = "3.0.0-82_831e1faabe5a69a0f44c0741b099b8d1eab251db" +WEBOS_VERSION = "3.0.0-83_75a7d1c58ce9701732119a40e493d393a45a8e89" PR = "r17" inherit webos_component diff --git a/meta-webos/recipes-kernel/linux/linux-yocto/zram.cfg b/meta-webos/recipes-kernel/linux/linux-yocto/zram.cfg new file mode 100644 index 000000000..6c0506a55 --- /dev/null +++ b/meta-webos/recipes-kernel/linux/linux-yocto/zram.cfg @@ -0,0 +1,2 @@ +CONFIG_ZSMALLOC=y +CONFIG_ZRAM=y diff --git a/meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend b/meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend index fd878bec0..89ecb090d 100644 --- a/meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend +++ b/meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2015-2022 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos13" +EXTENDPRAUTO_append = "webos14" # Assign to PE, because empty PKGE in KERNEL_IMAGE_NAME causes two hyphens. PE = "1" @@ -17,6 +17,7 @@ SRC_URI_append_qemux86 = " file://crypto.cfg \ file://file_system.cfg \ file://bluetooth_ext.cfg \ file://oomd.cfg \ + file://zram.cfg \ " SRC_URI_append_qemux86-64 = " file://crypto.cfg \ file://my_gfx.cfg \ @@ -28,6 +29,7 @@ SRC_URI_append_qemux86-64 = " file://crypto.cfg \ file://file_system.cfg \ file://bluetooth_ext.cfg \ file://oomd.cfg \ + file://zram.cfg \ " KERNEL_FEATURES_append_qemux86 = " features/bluetooth/bluetooth-usb.scc" From 1c9766c39a77d9914fda37f64ea8b7c59aab7035 Mon Sep 17 00:00:00 2001 From: "mark.yang" Date: Wed, 9 Feb 2022 17:09:06 +0900 Subject: [PATCH 0253/2022] ose: u-boot=2021.07 :Release Notes: u-boot backport from yocto 3.4(honister) :Detailed Notes: There is a problem that dhcp client couldn't get IP assignment in the u-boot boot-mode, because of some u-boot=2020.01 bug in yocto 3.1(dunfell) :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: [WRN-16711] CCC: u-boot=2021.07 [WRN-15745] Support NFS booting for Qt CI [WRN-15818] Support dhcp in u-boot on raspberrypi4-64 Change-Id: Id9f851622086a096372d284b32e184f217000d75 --- .../classes/uboot-config.bbclass | 127 +++++ .../classes/uboot-extlinux-config.bbclass | 158 ++++++ .../classes/uboot-sign.bbclass | 494 ++++++++++++++++++ ...iscv32-Use-double-float-ABI-for-rv32.patch | 42 ++ ...ls-image-host-fix-wrong-return-value.patch | 41 ++ .../recipes-bsp/u-boot/libubootenv_0.3.2.bb | 26 + .../recipes-bsp/u-boot/u-boot-common.inc | 22 + .../recipes-bsp/u-boot/u-boot-tools.inc | 81 +++ .../u-boot/u-boot-tools_2021.07.bb | 4 + .../recipes-bsp/u-boot/u-boot.inc | 359 +++++++++++++ .../recipes-bsp/u-boot/u-boot_2021.07.bb | 6 + ...-by-disable-usb-and-enable-bootcount.patch | 37 +- .../0002-Speed-up-boot-for-raspberrypi4.patch | 28 +- 13 files changed, 1399 insertions(+), 26 deletions(-) create mode 100644 meta-webos-backports/meta-webos-backports-3.4/classes/uboot-config.bbclass create mode 100644 meta-webos-backports/meta-webos-backports-3.4/classes/uboot-extlinux-config.bbclass create mode 100644 meta-webos-backports/meta-webos-backports-3.4/classes/uboot-sign.bbclass create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/files/0001-riscv32-Use-double-float-ABI-for-rv32.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/files/0001-tools-image-host-fix-wrong-return-value.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/libubootenv_0.3.2.bb create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-common.inc create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-tools.inc create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-tools_2021.07.bb create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot.inc create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot_2021.07.bb diff --git a/meta-webos-backports/meta-webos-backports-3.4/classes/uboot-config.bbclass b/meta-webos-backports/meta-webos-backports-3.4/classes/uboot-config.bbclass new file mode 100644 index 000000000..07a303d0a --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/classes/uboot-config.bbclass @@ -0,0 +1,127 @@ +# Handle U-Boot config for a machine +# +# The format to specify it, in the machine, is: +# +# UBOOT_CONFIG ??= +# UBOOT_CONFIG[foo] = "config,images,binary" +# +# or +# +# UBOOT_MACHINE = "config" +# +# Copyright 2013, 2014 (C) O.S. Systems Software LTDA. + +def removesuffix(s, suffix): + if suffix and s.endswith(suffix): + return s[:-len(suffix)] + return s + +# Some versions of u-boot use .bin and others use .img. By default use .bin +# but enable individual recipes to change this value. +UBOOT_SUFFIX ??= "bin" +UBOOT_BINARY ?= "u-boot.${UBOOT_SUFFIX}" +UBOOT_BINARYNAME ?= "${@os.path.splitext(d.getVar("UBOOT_BINARY"))[0]}" +UBOOT_IMAGE ?= "${UBOOT_BINARYNAME}-${MACHINE}-${PV}-${PR}.${UBOOT_SUFFIX}" +UBOOT_SYMLINK ?= "${UBOOT_BINARYNAME}-${MACHINE}.${UBOOT_SUFFIX}" +UBOOT_MAKE_TARGET ?= "all" + +# Output the ELF generated. Some platforms can use the ELF file and directly +# load it (JTAG booting, QEMU) additionally the ELF can be used for debugging +# purposes. +UBOOT_ELF ?= "" +UBOOT_ELF_SUFFIX ?= "elf" +UBOOT_ELF_IMAGE ?= "u-boot-${MACHINE}-${PV}-${PR}.${UBOOT_ELF_SUFFIX}" +UBOOT_ELF_BINARY ?= "u-boot.${UBOOT_ELF_SUFFIX}" +UBOOT_ELF_SYMLINK ?= "u-boot-${MACHINE}.${UBOOT_ELF_SUFFIX}" + +# Some versions of u-boot build an SPL (Second Program Loader) image that +# should be packaged along with the u-boot binary as well as placed in the +# deploy directory. For those versions they can set the following variables +# to allow packaging the SPL. +SPL_SUFFIX ?= "" +SPL_BINARY ?= "" +SPL_DELIMITER ?= "${@'.' if d.getVar("SPL_SUFFIX") else ''}" +SPL_BINARYFILE ?= "${@os.path.basename(d.getVar("SPL_BINARY"))}" +SPL_BINARYNAME ?= "${@removesuffix(d.getVar("SPL_BINARYFILE"), "." + d.getVar("SPL_SUFFIX"))}" +SPL_IMAGE ?= "${SPL_BINARYNAME}-${MACHINE}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX}" +SPL_SYMLINK ?= "${SPL_BINARYNAME}-${MACHINE}${SPL_DELIMITER}${SPL_SUFFIX}" + +# Additional environment variables or a script can be installed alongside +# u-boot to be used automatically on boot. This file, typically 'uEnv.txt' +# or 'boot.scr', should be packaged along with u-boot as well as placed in the +# deploy directory. Machine configurations needing one of these files should +# include it in the SRC_URI and set the UBOOT_ENV parameter. +UBOOT_ENV_SUFFIX ?= "txt" +UBOOT_ENV ?= "" +UBOOT_ENV_BINARY ?= "${UBOOT_ENV}.${UBOOT_ENV_SUFFIX}" +UBOOT_ENV_IMAGE ?= "${UBOOT_ENV}-${MACHINE}-${PV}-${PR}.${UBOOT_ENV_SUFFIX}" +UBOOT_ENV_SYMLINK ?= "${UBOOT_ENV}-${MACHINE}.${UBOOT_ENV_SUFFIX}" + +# Default name of u-boot initial env, but enable individual recipes to change +# this value. +UBOOT_INITIAL_ENV ?= "${PN}-initial-env" + +# U-Boot EXTLINUX variables. U-Boot searches for /boot/extlinux/extlinux.conf +# to find EXTLINUX conf file. +UBOOT_EXTLINUX_INSTALL_DIR ?= "/boot/extlinux" +UBOOT_EXTLINUX_CONF_NAME ?= "extlinux.conf" +UBOOT_EXTLINUX_SYMLINK ?= "${UBOOT_EXTLINUX_CONF_NAME}-${MACHINE}-${PR}" + +# Options for the device tree compiler passed to mkimage '-D' feature: +UBOOT_MKIMAGE_DTCOPTS ??= "" +SPL_MKIMAGE_DTCOPTS ??= "" + +# mkimage command +UBOOT_MKIMAGE ?= "uboot-mkimage" +UBOOT_MKIMAGE_SIGN ?= "${UBOOT_MKIMAGE}" + +# Arguments passed to mkimage for signing +UBOOT_MKIMAGE_SIGN_ARGS ?= "" +SPL_MKIMAGE_SIGN_ARGS ?= "" + +# Options to deploy the u-boot device tree +UBOOT_DTB ?= "" +UBOOT_DTB_BINARY ??= "" + +python () { + ubootmachine = d.getVar("UBOOT_MACHINE") + ubootconfigflags = d.getVarFlags('UBOOT_CONFIG') + ubootbinary = d.getVar('UBOOT_BINARY') + ubootbinaries = d.getVar('UBOOT_BINARIES') + # The "doc" varflag is special, we don't want to see it here + ubootconfigflags.pop('doc', None) + ubootconfig = (d.getVar('UBOOT_CONFIG') or "").split() + + if not ubootmachine and not ubootconfig: + PN = d.getVar("PN") + FILE = os.path.basename(d.getVar("FILE")) + bb.debug(1, "To build %s, see %s for instructions on \ + setting up your machine config" % (PN, FILE)) + raise bb.parse.SkipRecipe("Either UBOOT_MACHINE or UBOOT_CONFIG must be set in the %s machine configuration." % d.getVar("MACHINE")) + + if ubootmachine and ubootconfig: + raise bb.parse.SkipRecipe("You cannot use UBOOT_MACHINE and UBOOT_CONFIG at the same time.") + + if ubootconfigflags and ubootbinaries: + raise bb.parse.SkipRecipe("You cannot use UBOOT_BINARIES as it is internal to uboot_config.bbclass.") + + if len(ubootconfig) > 0: + for config in ubootconfig: + for f, v in ubootconfigflags.items(): + if config == f: + items = v.split(',') + if items[0] and len(items) > 3: + raise bb.parse.SkipRecipe('Only config,images,binary can be specified!') + d.appendVar('UBOOT_MACHINE', ' ' + items[0]) + # IMAGE_FSTYPES appending + if len(items) > 1 and items[1]: + bb.debug(1, "Appending '%s' to IMAGE_FSTYPES." % items[1]) + d.appendVar('IMAGE_FSTYPES', ' ' + items[1]) + if len(items) > 2 and items[2]: + bb.debug(1, "Appending '%s' to UBOOT_BINARIES." % items[2]) + d.appendVar('UBOOT_BINARIES', ' ' + items[2]) + else: + bb.debug(1, "Appending '%s' to UBOOT_BINARIES." % ubootbinary) + d.appendVar('UBOOT_BINARIES', ' ' + ubootbinary) + break +} diff --git a/meta-webos-backports/meta-webos-backports-3.4/classes/uboot-extlinux-config.bbclass b/meta-webos-backports/meta-webos-backports-3.4/classes/uboot-extlinux-config.bbclass new file mode 100644 index 000000000..dcebe7ff3 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/classes/uboot-extlinux-config.bbclass @@ -0,0 +1,158 @@ +# uboot-extlinux-config.bbclass +# +# This class allow the extlinux.conf generation for U-Boot use. The +# U-Boot support for it is given to allow the Generic Distribution +# Configuration specification use by OpenEmbedded-based products. +# +# External variables: +# +# UBOOT_EXTLINUX_CONSOLE - Set to "console=ttyX" to change kernel boot +# default console. +# UBOOT_EXTLINUX_LABELS - A list of targets for the automatic config. +# UBOOT_EXTLINUX_KERNEL_ARGS - Add additional kernel arguments. +# UBOOT_EXTLINUX_KERNEL_IMAGE - Kernel image name. +# UBOOT_EXTLINUX_FDTDIR - Device tree directory. +# UBOOT_EXTLINUX_FDT - Device tree file. +# UBOOT_EXTLINUX_INITRD - Indicates a list of filesystem images to +# concatenate and use as an initrd (optional). +# UBOOT_EXTLINUX_MENU_DESCRIPTION - Name to use as description. +# UBOOT_EXTLINUX_ROOT - Root kernel cmdline. +# UBOOT_EXTLINUX_TIMEOUT - Timeout before DEFAULT selection is made. +# Measured in 1/10 of a second. +# UBOOT_EXTLINUX_DEFAULT_LABEL - Target to be selected by default after +# the timeout period +# +# If there's only one label system will boot automatically and menu won't be +# created. If you want to use more than one labels, e.g linux and alternate, +# use overrides to set menu description, console and others variables. +# +# Ex: +# +# UBOOT_EXTLINUX_LABELS ??= "default fallback" +# +# UBOOT_EXTLINUX_DEFAULT_LABEL ??= "Linux Default" +# UBOOT_EXTLINUX_TIMEOUT ??= "30" +# +# UBOOT_EXTLINUX_KERNEL_IMAGE_default ??= "../zImage" +# UBOOT_EXTLINUX_MENU_DESCRIPTION_default ??= "Linux Default" +# +# UBOOT_EXTLINUX_KERNEL_IMAGE_fallback ??= "../zImage-fallback" +# UBOOT_EXTLINUX_MENU_DESCRIPTION_fallback ??= "Linux Fallback" +# +# Results: +# +# menu title Select the boot mode +# TIMEOUT 30 +# DEFAULT Linux Default +# LABEL Linux Default +# KERNEL ../zImage +# FDTDIR ../ +# APPEND root=/dev/mmcblk2p2 rootwait rw console=${console} +# LABEL Linux Fallback +# KERNEL ../zImage-fallback +# FDTDIR ../ +# APPEND root=/dev/mmcblk2p2 rootwait rw console=${console} +# +# Copyright (C) 2016, O.S. Systems Software LTDA. All Rights Reserved +# Released under the MIT license (see packages/COPYING) +# +# The kernel has an internal default console, which you can override with +# a console=...some_tty... +UBOOT_EXTLINUX_CONSOLE ??= "console=${console},${baudrate}" +UBOOT_EXTLINUX_LABELS ??= "linux" +UBOOT_EXTLINUX_FDT ??= "" +UBOOT_EXTLINUX_FDTDIR ??= "../" +UBOOT_EXTLINUX_KERNEL_IMAGE ??= "../${KERNEL_IMAGETYPE}" +UBOOT_EXTLINUX_KERNEL_ARGS ??= "rootwait rw" +UBOOT_EXTLINUX_MENU_DESCRIPTION:linux ??= "${DISTRO_NAME}" + +UBOOT_EXTLINUX_CONFIG = "${B}/extlinux.conf" + +python do_create_extlinux_config() { + if d.getVar("UBOOT_EXTLINUX") != "1": + return + + if not d.getVar('WORKDIR'): + bb.error("WORKDIR not defined, unable to package") + + labels = d.getVar('UBOOT_EXTLINUX_LABELS') + if not labels: + bb.fatal("UBOOT_EXTLINUX_LABELS not defined, nothing to do") + + if not labels.strip(): + bb.fatal("No labels, nothing to do") + + cfile = d.getVar('UBOOT_EXTLINUX_CONFIG') + if not cfile: + bb.fatal('Unable to read UBOOT_EXTLINUX_CONFIG') + + localdata = bb.data.createCopy(d) + + try: + with open(cfile, 'w') as cfgfile: + cfgfile.write('# Generic Distro Configuration file generated by OpenEmbedded\n') + + if len(labels.split()) > 1: + cfgfile.write('menu title Select the boot mode\n') + + timeout = localdata.getVar('UBOOT_EXTLINUX_TIMEOUT') + if timeout: + cfgfile.write('TIMEOUT %s\n' % (timeout)) + + if len(labels.split()) > 1: + default = localdata.getVar('UBOOT_EXTLINUX_DEFAULT_LABEL') + if default: + cfgfile.write('DEFAULT %s\n' % (default)) + + # Need to deconflict the labels with existing overrides + label_overrides = labels.split() + default_overrides = localdata.getVar('OVERRIDES').split(':') + # We're keeping all the existing overrides that aren't used as a label + # an override for that label will be added back in while we're processing that label + keep_overrides = list(filter(lambda x: x not in label_overrides, default_overrides)) + + for label in labels.split(): + + localdata.setVar('OVERRIDES', ':'.join(keep_overrides + [label])) + + extlinux_console = localdata.getVar('UBOOT_EXTLINUX_CONSOLE') + + menu_description = localdata.getVar('UBOOT_EXTLINUX_MENU_DESCRIPTION') + if not menu_description: + menu_description = label + + root = localdata.getVar('UBOOT_EXTLINUX_ROOT') + if not root: + bb.fatal('UBOOT_EXTLINUX_ROOT not defined') + + kernel_image = localdata.getVar('UBOOT_EXTLINUX_KERNEL_IMAGE') + fdtdir = localdata.getVar('UBOOT_EXTLINUX_FDTDIR') + + fdt = localdata.getVar('UBOOT_EXTLINUX_FDT') + + if fdt: + cfgfile.write('LABEL %s\n\tKERNEL %s\n\tFDT %s\n' % + (menu_description, kernel_image, fdt)) + elif fdtdir: + cfgfile.write('LABEL %s\n\tKERNEL %s\n\tFDTDIR %s\n' % + (menu_description, kernel_image, fdtdir)) + else: + cfgfile.write('LABEL %s\n\tKERNEL %s\n' % (menu_description, kernel_image)) + + kernel_args = localdata.getVar('UBOOT_EXTLINUX_KERNEL_ARGS') + + initrd = localdata.getVar('UBOOT_EXTLINUX_INITRD') + if initrd: + cfgfile.write('\tINITRD %s\n'% initrd) + + kernel_args = root + " " + kernel_args + cfgfile.write('\tAPPEND %s %s\n' % (kernel_args, extlinux_console)) + + except OSError: + bb.fatal('Unable to open %s' % (cfile)) +} +UBOOT_EXTLINUX_VARS = "CONSOLE MENU_DESCRIPTION ROOT KERNEL_IMAGE FDTDIR FDT KERNEL_ARGS INITRD" +do_create_extlinux_config[vardeps] += "${@' '.join(['UBOOT_EXTLINUX_%s_%s' % (v, l) for v in d.getVar('UBOOT_EXTLINUX_VARS').split() for l in d.getVar('UBOOT_EXTLINUX_LABELS').split()])}" +do_create_extlinux_config[vardepsexclude] += "OVERRIDES" + +addtask create_extlinux_config before do_install do_deploy after do_compile diff --git a/meta-webos-backports/meta-webos-backports-3.4/classes/uboot-sign.bbclass b/meta-webos-backports/meta-webos-backports-3.4/classes/uboot-sign.bbclass new file mode 100644 index 000000000..c39b30f43 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/classes/uboot-sign.bbclass @@ -0,0 +1,494 @@ +# This file is part of U-Boot verified boot support and is intended to be +# inherited from u-boot recipe and from kernel-fitimage.bbclass. +# +# The signature procedure requires the user to generate an RSA key and +# certificate in a directory and to define the following variable: +# +# UBOOT_SIGN_KEYDIR = "/keys/directory" +# UBOOT_SIGN_KEYNAME = "dev" # keys name in keydir (eg. "dev.crt", "dev.key") +# UBOOT_MKIMAGE_DTCOPTS = "-I dts -O dtb -p 2000" +# UBOOT_SIGN_ENABLE = "1" +# +# As verified boot depends on fitImage generation, following is also required: +# +# KERNEL_CLASSES ?= " kernel-fitimage " +# KERNEL_IMAGETYPE ?= "fitImage" +# +# The signature support is limited to the use of CONFIG_OF_SEPARATE in U-Boot. +# +# The tasks sequence is set as below, using DEPLOY_IMAGE_DIR as common place to +# treat the device tree blob: +# +# * u-boot:do_install:append +# Install UBOOT_DTB_BINARY to datadir, so that kernel can use it for +# signing, and kernel will deploy UBOOT_DTB_BINARY after signs it. +# +# * virtual/kernel:do_assemble_fitimage +# Sign the image +# +# * u-boot:do_deploy[postfuncs] +# Deploy files like UBOOT_DTB_IMAGE, UBOOT_DTB_SYMLINK and others. +# +# For more details on signature process, please refer to U-Boot documentation. + +# We need some variables from u-boot-config +inherit uboot-config + +# Enable use of a U-Boot fitImage +UBOOT_FITIMAGE_ENABLE ?= "0" + +# Signature activation - these require their respective fitImages +UBOOT_SIGN_ENABLE ?= "0" +SPL_SIGN_ENABLE ?= "0" + +# Default value for deployment filenames. +UBOOT_DTB_IMAGE ?= "u-boot-${MACHINE}-${PV}-${PR}.dtb" +UBOOT_DTB_BINARY ?= "u-boot.dtb" +UBOOT_DTB_SYMLINK ?= "u-boot-${MACHINE}.dtb" +UBOOT_NODTB_IMAGE ?= "u-boot-nodtb-${MACHINE}-${PV}-${PR}.bin" +UBOOT_NODTB_BINARY ?= "u-boot-nodtb.bin" +UBOOT_NODTB_SYMLINK ?= "u-boot-nodtb-${MACHINE}.bin" +UBOOT_ITS_IMAGE ?= "u-boot-its-${MACHINE}-${PV}-${PR}" +UBOOT_ITS ?= "u-boot.its" +UBOOT_ITS_SYMLINK ?= "u-boot-its-${MACHINE}" +UBOOT_FITIMAGE_IMAGE ?= "u-boot-fitImage-${MACHINE}-${PV}-${PR}" +UBOOT_FITIMAGE_BINARY ?= "u-boot-fitImage" +UBOOT_FITIMAGE_SYMLINK ?= "u-boot-fitImage-${MACHINE}" +SPL_DIR ?= "spl" +SPL_DTB_IMAGE ?= "u-boot-spl-${MACHINE}-${PV}-${PR}.dtb" +SPL_DTB_BINARY ?= "u-boot-spl.dtb" +SPL_DTB_SYMLINK ?= "u-boot-spl-${MACHINE}.dtb" +SPL_NODTB_IMAGE ?= "u-boot-spl-nodtb-${MACHINE}-${PV}-${PR}.bin" +SPL_NODTB_BINARY ?= "u-boot-spl-nodtb.bin" +SPL_NODTB_SYMLINK ?= "u-boot-spl-nodtb-${MACHINE}.bin" + +# U-Boot fitImage description +UBOOT_FIT_DESC ?= "U-Boot fitImage for ${DISTRO_NAME}/${PV}/${MACHINE}" + +# Kernel / U-Boot fitImage Hash Algo +FIT_HASH_ALG ?= "sha256" +UBOOT_FIT_HASH_ALG ?= "sha256" + +# Kernel / U-Boot fitImage Signature Algo +FIT_SIGN_ALG ?= "rsa2048" +UBOOT_FIT_SIGN_ALG ?= "rsa2048" + +# Generate keys for signing Kernel / U-Boot fitImage +FIT_GENERATE_KEYS ?= "0" +UBOOT_FIT_GENERATE_KEYS ?= "0" + +# Size of private keys in number of bits +FIT_SIGN_NUMBITS ?= "2048" +UBOOT_FIT_SIGN_NUMBITS ?= "2048" + +# args to openssl genrsa (Default is just the public exponent) +FIT_KEY_GENRSA_ARGS ?= "-F4" +UBOOT_FIT_KEY_GENRSA_ARGS ?= "-F4" + +# args to openssl req (Default is -batch for non interactive mode and +# -new for new certificate) +FIT_KEY_REQ_ARGS ?= "-batch -new" +UBOOT_FIT_KEY_REQ_ARGS ?= "-batch -new" + +# Standard format for public key certificate +FIT_KEY_SIGN_PKCS ?= "-x509" +UBOOT_FIT_KEY_SIGN_PKCS ?= "-x509" + +# Functions on this bbclass can apply to either U-boot or Kernel, +# depending on the scenario +UBOOT_PN = "${@d.getVar('PREFERRED_PROVIDER_u-boot') or 'u-boot'}" +KERNEL_PN = "${@d.getVar('PREFERRED_PROVIDER_virtual/kernel')}" + +# We need u-boot-tools-native if we're creating a U-Boot fitImage +python() { + if d.getVar('UBOOT_FITIMAGE_ENABLE') == '1': + depends = d.getVar("DEPENDS") + depends = "%s u-boot-tools-native dtc-native" % depends + d.setVar("DEPENDS", depends) +} + +concat_dtb_helper() { + if [ -e "${UBOOT_DTB_BINARY}" ]; then + ln -sf ${UBOOT_DTB_IMAGE} ${DEPLOYDIR}/${UBOOT_DTB_BINARY} + ln -sf ${UBOOT_DTB_IMAGE} ${DEPLOYDIR}/${UBOOT_DTB_SYMLINK} + fi + + if [ -f "${UBOOT_NODTB_BINARY}" ]; then + install ${UBOOT_NODTB_BINARY} ${DEPLOYDIR}/${UBOOT_NODTB_IMAGE} + ln -sf ${UBOOT_NODTB_IMAGE} ${DEPLOYDIR}/${UBOOT_NODTB_SYMLINK} + ln -sf ${UBOOT_NODTB_IMAGE} ${DEPLOYDIR}/${UBOOT_NODTB_BINARY} + fi + + # If we're not using a signed u-boot fit, concatenate SPL w/o DTB & U-Boot DTB + # with public key (otherwise it will be deployed by the equivalent + # concat_spl_dtb_helper function - cf. kernel-fitimage.bbclass for more details) + if [ "${SPL_SIGN_ENABLE}" != "1" ] ; then + deployed_uboot_dtb_binary='${DEPLOY_DIR_IMAGE}/${UBOOT_DTB_IMAGE}' + if [ "x${UBOOT_SUFFIX}" = "ximg" -o "x${UBOOT_SUFFIX}" = "xrom" ] && \ + [ -e "$deployed_uboot_dtb_binary" ]; then + oe_runmake EXT_DTB=$deployed_uboot_dtb_binary + install ${UBOOT_BINARY} ${DEPLOYDIR}/${UBOOT_IMAGE} + elif [ -e "${DEPLOYDIR}/${UBOOT_NODTB_IMAGE}" -a -e "$deployed_uboot_dtb_binary" ]; then + cd ${DEPLOYDIR} + cat ${UBOOT_NODTB_IMAGE} $deployed_uboot_dtb_binary | tee ${B}/${CONFIG_B_PATH}/${UBOOT_BINARY} > ${UBOOT_IMAGE} + + if [ -n "${UBOOT_CONFIG}" ] + then + for config in ${UBOOT_MACHINE}; do + i=$(expr $i + 1); + for type in ${UBOOT_CONFIG}; do + j=$(expr $j + 1); + if [ $j -eq $i ] + then + cp ${UBOOT_IMAGE} ${B}/${CONFIG_B_PATH}/u-boot-$type.${UBOOT_SUFFIX} + fi + done + done + fi + else + bbwarn "Failure while adding public key to u-boot binary. Verified boot won't be available." + fi + fi +} + +concat_spl_dtb_helper() { + + # We only deploy symlinks to the u-boot-spl.dtb,as the KERNEL_PN will + # be responsible for deploying the real file + if [ -e "${SPL_DIR}/${SPL_DTB_BINARY}" ] ; then + ln -sf ${SPL_DTB_IMAGE} ${DEPLOYDIR}/${SPL_DTB_SYMLINK} + ln -sf ${SPL_DTB_IMAGE} ${DEPLOYDIR}/${SPL_DTB_BINARY} + fi + + # Concatenate the SPL nodtb binary and u-boot.dtb + deployed_spl_dtb_binary='${DEPLOY_DIR_IMAGE}/${SPL_DTB_IMAGE}' + if [ -e "${DEPLOYDIR}/${SPL_NODTB_IMAGE}" -a -e "$deployed_spl_dtb_binary" ] ; then + cd ${DEPLOYDIR} + cat ${SPL_NODTB_IMAGE} $deployed_spl_dtb_binary | tee ${B}/${CONFIG_B_PATH}/${SPL_BINARY} > ${SPL_IMAGE} + else + bbwarn "Failure while adding public key to spl binary. Verified U-Boot boot won't be available." + fi +} + + +concat_dtb() { + if [ "${UBOOT_SIGN_ENABLE}" = "1" -a "${PN}" = "${UBOOT_PN}" -a -n "${UBOOT_DTB_BINARY}" ]; then + mkdir -p ${DEPLOYDIR} + if [ -n "${UBOOT_CONFIG}" ]; then + for config in ${UBOOT_MACHINE}; do + CONFIG_B_PATH="${config}" + cd ${B}/${config} + concat_dtb_helper + done + else + CONFIG_B_PATH="" + cd ${B} + concat_dtb_helper + fi + fi +} + +concat_spl_dtb() { + if [ "${SPL_SIGN_ENABLE}" = "1" -a "${PN}" = "${UBOOT_PN}" -a -n "${SPL_DTB_BINARY}" ]; then + mkdir -p ${DEPLOYDIR} + if [ -n "${UBOOT_CONFIG}" ]; then + for config in ${UBOOT_MACHINE}; do + CONFIG_B_PATH="${config}" + cd ${B}/${config} + concat_spl_dtb_helper + done + else + CONFIG_B_PATH="" + cd ${B} + concat_spl_dtb_helper + fi + fi +} + + +# Install UBOOT_DTB_BINARY to datadir, so that kernel can use it for +# signing, and kernel will deploy UBOOT_DTB_BINARY after signs it. +install_helper() { + if [ -f "${UBOOT_DTB_BINARY}" ]; then + # UBOOT_DTB_BINARY is a symlink to UBOOT_DTB_IMAGE, so we + # need both of them. + install -Dm 0644 ${UBOOT_DTB_BINARY} ${D}${datadir}/${UBOOT_DTB_IMAGE} + ln -sf ${UBOOT_DTB_IMAGE} ${D}${datadir}/${UBOOT_DTB_BINARY} + else + bbwarn "${UBOOT_DTB_BINARY} not found" + fi +} + +# Install SPL dtb and u-boot nodtb to datadir, +install_spl_helper() { + if [ -f "${SPL_DIR}/${SPL_DTB_BINARY}" ]; then + install -Dm 0644 ${SPL_DIR}/${SPL_DTB_BINARY} ${D}${datadir}/${SPL_DTB_IMAGE} + ln -sf ${SPL_DTB_IMAGE} ${D}${datadir}/${SPL_DTB_BINARY} + else + bbwarn "${SPL_DTB_BINARY} not found" + fi + if [ -f "${UBOOT_NODTB_BINARY}" ] ; then + install -Dm 0644 ${UBOOT_NODTB_BINARY} ${D}${datadir}/${UBOOT_NODTB_IMAGE} + ln -sf ${UBOOT_NODTB_IMAGE} ${D}${datadir}/${UBOOT_NODTB_BINARY} + else + bbwarn "${UBOOT_NODTB_BINARY} not found" + fi + + # We need to install a 'stub' u-boot-fitimage + its to datadir, + # so that the KERNEL_PN can use the correct filename when + # assembling and deploying them + touch ${D}/${datadir}/${UBOOT_FITIMAGE_IMAGE} + touch ${D}/${datadir}/${UBOOT_ITS_IMAGE} +} + +do_install:append() { + if [ "${PN}" = "${UBOOT_PN}" ]; then + if [ -n "${UBOOT_CONFIG}" ]; then + for config in ${UBOOT_MACHINE}; do + cd ${B}/${config} + if [ "${UBOOT_SIGN_ENABLE}" = "1" -o "${UBOOT_FITIMAGE_ENABLE}" = "1" ] && \ + [ -n "${UBOOT_DTB_BINARY}" ]; then + install_helper + fi + if [ "${SPL_SIGN_ENABLE}" = "1" -a -n "${SPL_DTB_BINARY}" ]; then + install_spl_helper + fi + done + else + cd ${B} + if [ "${UBOOT_SIGN_ENABLE}" = "1" -o "${UBOOT_FITIMAGE_ENABLE}" = "1" ] && \ + [ -n "${UBOOT_DTB_BINARY}" ]; then + install_helper + fi + if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" -a -n "${SPL_DTB_BINARY}" ]; then + install_spl_helper + fi + fi + fi +} + +do_uboot_generate_rsa_keys() { + if [ "${SPL_SIGN_ENABLE}" = "0" ] && [ "${UBOOT_FIT_GENERATE_KEYS}" = "1" ]; then + bbwarn "UBOOT_FIT_GENERATE_KEYS is set to 1 eventhough SPL_SIGN_ENABLE is set to 0. The keys will not be generated as they won't be used." + fi + + if [ "${SPL_SIGN_ENABLE}" = "1" ] && [ "${UBOOT_FIT_GENERATE_KEYS}" = "1" ]; then + + # Generate keys only if they don't already exist + if [ ! -f "${SPL_SIGN_KEYDIR}/${SPL_SIGN_KEYNAME}".key ] || \ + [ ! -f "${SPL_SIGN_KEYDIR}/${SPL_SIGN_KEYNAME}".crt ]; then + + # make directory if it does not already exist + mkdir -p "${SPL_SIGN_KEYDIR}" + + echo "Generating RSA private key for signing U-Boot fitImage" + openssl genrsa ${UBOOT_FIT_KEY_GENRSA_ARGS} -out \ + "${SPL_SIGN_KEYDIR}/${SPL_SIGN_KEYNAME}".key \ + "${UBOOT_FIT_SIGN_NUMBITS}" + + echo "Generating certificate for signing U-Boot fitImage" + openssl req ${FIT_KEY_REQ_ARGS} "${UBOOT_FIT_KEY_SIGN_PKCS}" \ + -key "${SPL_SIGN_KEYDIR}/${SPL_SIGN_KEYNAME}".key \ + -out "${SPL_SIGN_KEYDIR}/${SPL_SIGN_KEYNAME}".crt + fi + fi + +} + +addtask uboot_generate_rsa_keys before do_uboot_assemble_fitimage after do_compile + +# Create a ITS file for the U-boot FIT, for use when +# we want to sign it so that the SPL can verify it +uboot_fitimage_assemble() { + uboot_its="${1}" + uboot_nodtb_bin="${2}" + uboot_dtb="${3}" + uboot_bin="${4}" + spl_dtb="${5}" + uboot_csum="${UBOOT_FIT_HASH_ALG}" + uboot_sign_algo="${UBOOT_FIT_SIGN_ALG}" + uboot_sign_keyname="${SPL_SIGN_KEYNAME}" + + rm -f ${uboot_its} ${uboot_bin} + + # First we create the ITS script + cat << EOF >> ${uboot_its} +/dts-v1/; + +/ { + description = "${UBOOT_FIT_DESC}"; + #address-cells = <1>; + + images { + uboot { + description = "U-Boot image"; + data = /incbin/("${uboot_nodtb_bin}"); + type = "standalone"; + os = "u-boot"; + arch = "${UBOOT_ARCH}"; + compression = "none"; + load = <${UBOOT_LOADADDRESS}>; + entry = <${UBOOT_ENTRYPOINT}>; +EOF + + if [ "${SPL_SIGN_ENABLE}" = "1" ] ; then + cat << EOF >> ${uboot_its} + signature { + algo = "${uboot_csum},${uboot_sign_algo}"; + key-name-hint = "${uboot_sign_keyname}"; + }; +EOF + fi + + cat << EOF >> ${uboot_its} + }; + fdt { + description = "U-Boot FDT"; + data = /incbin/("${uboot_dtb}"); + type = "flat_dt"; + arch = "${UBOOT_ARCH}"; + compression = "none"; +EOF + + if [ "${SPL_SIGN_ENABLE}" = "1" ] ; then + cat << EOF >> ${uboot_its} + signature { + algo = "${uboot_csum},${uboot_sign_algo}"; + key-name-hint = "${uboot_sign_keyname}"; + }; +EOF + fi + + cat << EOF >> ${uboot_its} + }; + }; + + configurations { + default = "conf"; + conf { + description = "Boot with signed U-Boot FIT"; + loadables = "uboot"; + fdt = "fdt"; + }; + }; +}; +EOF + + # + # Assemble the U-boot FIT image + # + ${UBOOT_MKIMAGE} \ + ${@'-D "${SPL_MKIMAGE_DTCOPTS}"' if len('${SPL_MKIMAGE_DTCOPTS}') else ''} \ + -f ${uboot_its} \ + ${uboot_bin} + + if [ "${SPL_SIGN_ENABLE}" = "1" ] ; then + # + # Sign the U-boot FIT image and add public key to SPL dtb + # + ${UBOOT_MKIMAGE_SIGN} \ + ${@'-D "${SPL_MKIMAGE_DTCOPTS}"' if len('${SPL_MKIMAGE_DTCOPTS}') else ''} \ + -F -k "${SPL_SIGN_KEYDIR}" \ + -K "${spl_dtb}" \ + -r ${uboot_bin} \ + ${SPL_MKIMAGE_SIGN_ARGS} + fi + +} + +do_uboot_assemble_fitimage() { + # This function runs in KERNEL_PN context. The reason for that is that we need to + # support the scenario where UBOOT_SIGN_ENABLE is placing the Kernel fitImage's + # pubkey in the u-boot.dtb file, so that we can use it when building the U-Boot + # fitImage itself. + if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" ] && \ + [ -n "${SPL_DTB_BINARY}" -a "${PN}" = "${KERNEL_PN}" ] ; then + if [ "${UBOOT_SIGN_ENABLE}" != "1" ]; then + # If we're not signing the Kernel fitImage, that means + # we need to copy the u-boot.dtb from staging ourselves + cp -P ${STAGING_DATADIR}/u-boot*.dtb ${B} + fi + # As we are in the kernel context, we need to copy u-boot-spl.dtb from staging first. + # Unfortunately, need to glob on top of ${SPL_DTB_BINARY} since _IMAGE and _SYMLINK + # will contain U-boot's PV + # Similarly, we need to get the filename for the 'stub' u-boot-fitimage + its in + # staging so that we can use it for creating the image with the correct filename + # in the KERNEL_PN context. + # As for the u-boot.dtb (with fitimage's pubkey), it should come from the dependent + # do_assemble_fitimage task + cp -P ${STAGING_DATADIR}/u-boot-spl*.dtb ${B} + cp -P ${STAGING_DATADIR}/u-boot-nodtb*.bin ${B} + rm -rf ${B}/u-boot-fitImage-* ${B}/u-boot-its-* + kernel_uboot_fitimage_name=`basename ${STAGING_DATADIR}/u-boot-fitImage-*` + kernel_uboot_its_name=`basename ${STAGING_DATADIR}/u-boot-its-*` + cd ${B} + uboot_fitimage_assemble ${kernel_uboot_its_name} ${UBOOT_NODTB_BINARY} \ + ${UBOOT_DTB_BINARY} ${kernel_uboot_fitimage_name} \ + ${SPL_DTB_BINARY} + fi +} + +addtask uboot_assemble_fitimage before do_deploy after do_compile + +do_deploy:prepend:pn-${UBOOT_PN}() { + if [ "${UBOOT_SIGN_ENABLE}" = "1" -a -n "${UBOOT_DTB_BINARY}" ] ; then + concat_dtb + fi + + if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" ] ; then + # Deploy the u-boot-nodtb binary and symlinks... + if [ -f "${SPL_DIR}/${SPL_NODTB_BINARY}" ] ; then + echo "Copying u-boot-nodtb binary..." + install -m 0644 ${SPL_DIR}/${SPL_NODTB_BINARY} ${DEPLOYDIR}/${SPL_NODTB_IMAGE} + ln -sf ${SPL_NODTB_IMAGE} ${DEPLOYDIR}/${SPL_NODTB_SYMLINK} + ln -sf ${SPL_NODTB_IMAGE} ${DEPLOYDIR}/${SPL_NODTB_BINARY} + fi + + + # We only deploy the symlinks to the uboot-fitImage and uboot-its + # images, as the KERNEL_PN will take care of deploying the real file + ln -sf ${UBOOT_FITIMAGE_IMAGE} ${DEPLOYDIR}/${UBOOT_FITIMAGE_BINARY} + ln -sf ${UBOOT_FITIMAGE_IMAGE} ${DEPLOYDIR}/${UBOOT_FITIMAGE_SYMLINK} + ln -sf ${UBOOT_ITS_IMAGE} ${DEPLOYDIR}/${UBOOT_ITS} + ln -sf ${UBOOT_ITS_IMAGE} ${DEPLOYDIR}/${UBOOT_ITS_SYMLINK} + fi + + if [ "${SPL_SIGN_ENABLE}" = "1" -a -n "${SPL_DTB_BINARY}" ] ; then + concat_spl_dtb + fi + + +} + +do_deploy:append:pn-${UBOOT_PN}() { + # If we're creating a u-boot fitImage, point u-boot.bin + # symlink since it might get used by image recipes + if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" ] ; then + ln -sf ${UBOOT_FITIMAGE_IMAGE} ${DEPLOYDIR}/${UBOOT_BINARY} + ln -sf ${UBOOT_FITIMAGE_IMAGE} ${DEPLOYDIR}/${UBOOT_SYMLINK} + fi +} + +python () { + if ( (d.getVar('UBOOT_SIGN_ENABLE') == '1' + or d.getVar('UBOOT_FITIMAGE_ENABLE') == '1') + and d.getVar('PN') == d.getVar('UBOOT_PN') + and d.getVar('UBOOT_DTB_BINARY')): + + # Make "bitbake u-boot -cdeploy" deploys the signed u-boot.dtb + # and/or the U-Boot fitImage + d.appendVarFlag('do_deploy', 'depends', ' %s:do_deploy' % d.getVar('KERNEL_PN')) + + if d.getVar('UBOOT_FITIMAGE_ENABLE') == '1' and d.getVar('PN') == d.getVar('KERNEL_PN'): + # As the U-Boot fitImage is created by the KERNEL_PN, we need + # to make sure that the u-boot-spl.dtb and u-boot-spl-nodtb.bin + # files are in the staging dir for it's use + d.appendVarFlag('do_uboot_assemble_fitimage', 'depends', ' %s:do_populate_sysroot' % d.getVar('UBOOT_PN')) + + # If the Kernel fitImage is being signed, we need to + # create the U-Boot fitImage after it + if d.getVar('UBOOT_SIGN_ENABLE') == '1': + d.appendVarFlag('do_uboot_assemble_fitimage', 'depends', ' %s:do_assemble_fitimage' % d.getVar('KERNEL_PN')) + d.appendVarFlag('do_uboot_assemble_fitimage', 'depends', ' %s:do_assemble_fitimage_initramfs' % d.getVar('KERNEL_PN')) + +} diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/files/0001-riscv32-Use-double-float-ABI-for-rv32.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/files/0001-riscv32-Use-double-float-ABI-for-rv32.patch new file mode 100644 index 000000000..0ed3de491 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/files/0001-riscv32-Use-double-float-ABI-for-rv32.patch @@ -0,0 +1,42 @@ +From 66dfe0fa886f6289add06d1af8642ce2b5302852 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Tue, 9 Feb 2021 16:40:12 -0800 +Subject: [PATCH] riscv32: Use double-float ABI for rv32 + +So it can use libgcc built with OE toolchain +Fixes +error: "can't link hard-float modules with soft-float modules" + +Signed-off-by: Khem Raj +Upstream-Status: Inappropriate [embedded specific] +--- + arch/riscv/Makefile | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile +index 0b80eb8d86..7324946f48 100644 +--- a/arch/riscv/Makefile ++++ b/arch/riscv/Makefile +@@ -9,7 +9,9 @@ ifeq ($(CONFIG_ARCH_RV64I),y) + endif + ifeq ($(CONFIG_ARCH_RV32I),y) + ARCH_BASE = rv32im +- ABI = ilp32 ++ ABI = ilp32d ++ ARCH_D = d ++ ARCH_F = f + endif + ifeq ($(CONFIG_RISCV_ISA_A),y) + ARCH_A = a +@@ -24,7 +26,7 @@ ifeq ($(CONFIG_CMODEL_MEDANY),y) + CMODEL = medany + endif + +-ARCH_FLAGS = -march=$(ARCH_BASE)$(ARCH_A)$(ARCH_C) -mabi=$(ABI) \ ++ARCH_FLAGS = -march=$(ARCH_BASE)$(ARCH_A)$(ARCH_F)$(ARCH_D)$(ARCH_C) -mabi=$(ABI) \ + -mcmodel=$(CMODEL) + + PLATFORM_CPPFLAGS += $(ARCH_FLAGS) +-- +2.30.0 + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/files/0001-tools-image-host-fix-wrong-return-value.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/files/0001-tools-image-host-fix-wrong-return-value.patch new file mode 100644 index 000000000..81687203e --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/files/0001-tools-image-host-fix-wrong-return-value.patch @@ -0,0 +1,41 @@ +From 77fe3ad2ab2953ccdf6e9417cbecc060b45d3e55 Mon Sep 17 00:00:00 2001 +From: Ming Liu +Date: Sun, 30 May 2021 10:32:08 +0200 +Subject: [PATCH] tools: image-host: fix wrong return value + +The return value '-ENOSPC' of fit_set_timestamp function does not match +the caller fit_image_write_sig's expection which is '-FDT_ERR_NOSPACE'. + +Fix it by not calling fit_set_timestamp, but call fdt_setprop instead. + +This fixes a following mkimage error: +| Can't write signature for 'signature@1' signature node in +| 'conf@imx6ull-colibri-wifi-eval-v3.dtb' conf node: +| mkimage Can't add hashes to FIT blob: -1 + +Upstream-Status: Submitted [ https://patchwork.ozlabs.org/project/uboot/patch/20210531070451.6561-1-liu.ming50@gmail.com ] + +Signed-off-by: Ming Liu +--- + tools/image-host.c | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/tools/image-host.c b/tools/image-host.c +index 270d36fe45..73095461a7 100644 +--- a/tools/image-host.c ++++ b/tools/image-host.c +@@ -132,8 +132,10 @@ static int fit_image_write_sig(void *fit, int noffset, uint8_t *value, + if (!ret) { + time_t timestamp = imagetool_get_source_date(cmdname, + time(NULL)); ++ uint32_t t = cpu_to_uimage(timestamp); + +- ret = fit_set_timestamp(fit, noffset, timestamp); ++ ret = fdt_setprop(fit, noffset, FIT_TIMESTAMP_PROP, &t, ++ sizeof(uint32_t)); + } + if (region_prop && !ret) { + uint32_t strdata[2]; +-- +2.29.0 + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/libubootenv_0.3.2.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/libubootenv_0.3.2.bb new file mode 100644 index 000000000..6906e5362 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/libubootenv_0.3.2.bb @@ -0,0 +1,26 @@ +SUMMARY = "U-Boot libraries and tools to access environment" + +DESCRIPTION = "This package contains tools and libraries to read \ +and modify U-Boot environment. \ +It provides a hardware-independent replacement for fw_printenv/setenv utilities \ +provided by U-Boot" + +HOMEPAGE = "https://github.com/sbabic/libubootenv" +LICENSE = "LGPL-2.1" +LIC_FILES_CHKSUM = "file://Licenses/lgpl-2.1.txt;md5=4fbd65380cdd255951079008b364516c" +SECTION = "libs" + +SRC_URI = "git://github.com/sbabic/libubootenv;protocol=https;branch=master" +SRCREV = "ba7564f5006d09bec51058cf4f5ac90d4dc18b3c" + +S = "${WORKDIR}/git" + +inherit cmake lib_package + +EXTRA_OECMAKE = "-DCMAKE_BUILD_TYPE=Release" + +DEPENDS = "zlib" +PROVIDES += "u-boot-fw-utils" +RPROVIDES:${PN}-bin += "u-boot-fw-utils" + +BBCLASSEXTEND = "native" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-common.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-common.inc new file mode 100644 index 000000000..2423e9ca1 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-common.inc @@ -0,0 +1,22 @@ +HOMEPAGE = "http://www.denx.de/wiki/U-Boot/WebHome" +DESCRIPTION = "U-Boot, a boot loader for Embedded boards based on PowerPC, \ +ARM, MIPS and several other processors, which can be installed in a boot \ +ROM and used to initialize and test the hardware or to download and run \ +application code." +SECTION = "bootloaders" +DEPENDS += "flex-native bison-native" + +LICENSE = "GPLv2+" +LIC_FILES_CHKSUM = "file://Licenses/README;md5=5a7450c57ffe5ae63fd732446b988025" +PE = "1" + +# We use the revision in order to avoid having to fetch it from the +# repo during parse +SRCREV = "840658b093976390e9537724f802281c9c8439f5" + +SRC_URI = "git://git.denx.de/u-boot.git;branch=master \ + " + +S = "${WORKDIR}/git" +B = "${WORKDIR}/build" +do_configure[cleandirs] = "${B}" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-tools.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-tools.inc new file mode 100644 index 000000000..7eda6a089 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-tools.inc @@ -0,0 +1,81 @@ +SUMMARY = "U-Boot bootloader tools" +DEPENDS += "openssl" + +PROVIDES = "${MLPREFIX}u-boot-mkimage ${MLPREFIX}u-boot-mkenvimage" +PROVIDES:class-native = "u-boot-mkimage-native u-boot-mkenvimage-native" + +PACKAGES += "${PN}-mkimage ${PN}-mkenvimage" + +# Required for backward compatibility with "u-boot-mkimage-xxx.bb" +RPROVIDES:${PN}-mkimage = "u-boot-mkimage" +RREPLACES:${PN}-mkimage = "u-boot-mkimage" +RCONFLICTS:${PN}-mkimage = "u-boot-mkimage" + +EXTRA_OEMAKE:class-target = 'CROSS_COMPILE="${TARGET_PREFIX}" CC="${CC} ${CFLAGS} ${LDFLAGS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" STRIP=true V=1' +EXTRA_OEMAKE:class-native = 'CC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" STRIP=true V=1' +EXTRA_OEMAKE:class-nativesdk = 'CROSS_COMPILE="${HOST_PREFIX}" CC="${CC} ${CFLAGS} ${LDFLAGS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" STRIP=true V=1' + +SED_CONFIG_EFI = '-e "s/CONFIG_EFI_LOADER=.*/# CONFIG_EFI_LOADER is not set/"' +SED_CONFIG_EFI:x86 = '' +SED_CONFIG_EFI:x86-64 = '' +SED_CONFIG_EFI:arm = '' +SED_CONFIG_EFI:armeb = '' +SED_CONFIG_EFI:aarch64 = '' + +do_compile () { + # Yes, this is crazy. If you build on a system with git < 2.14 from scratch, the tree will + # be marked as "dirty" and the version will include "-dirty", leading to a reproducibility problem. + # The issue is the inode count for Licnses/README changing due to do_populate_lic hardlinking a + # copy of the file. We avoid this by ensuring the index is updated with a "git diff" before the + # u-boot machinery tries to determine the version. + # + # build$ ../git/scripts/setlocalversion ../git + # "" + # build$ ln ../git/ + # build$ ln ../git/README ../foo + # build$ ../git/scripts/setlocalversion ../git + # ""-dirty + # (i.e. creating a hardlink dirties the index) + cd ${S}; git diff; cd ${B} + + oe_runmake -C ${S} sandbox_defconfig O=${B} + + # Disable CONFIG_CMD_LICENSE, license.h is not used by tools and + # generating it requires bin2header tool, which for target build + # is built with target tools and thus cannot be executed on host. + sed -i -e "s/CONFIG_CMD_LICENSE=.*/# CONFIG_CMD_LICENSE is not set/" ${SED_CONFIG_EFI} ${B}/.config + + oe_runmake -C ${S} cross_tools NO_SDL=1 O=${B} +} + +do_install () { + install -d ${D}${bindir} + + # mkimage + install -m 0755 tools/mkimage ${D}${bindir}/uboot-mkimage + ln -sf uboot-mkimage ${D}${bindir}/mkimage + + # mkenvimage + install -m 0755 tools/mkenvimage ${D}${bindir}/uboot-mkenvimage + ln -sf uboot-mkenvimage ${D}${bindir}/mkenvimage + + # dumpimage + install -m 0755 tools/dumpimage ${D}${bindir}/uboot-dumpimage + ln -sf uboot-dumpimage ${D}${bindir}/dumpimage + + # fit_check_sign + install -m 0755 tools/fit_check_sign ${D}${bindir}/uboot-fit_check_sign + ln -sf uboot-fit_check_sign ${D}${bindir}/fit_check_sign +} + +ALLOW_EMPTY:${PN} = "1" +FILES:${PN} = "" +FILES:${PN}-mkimage = "${bindir}/uboot-mkimage ${bindir}/mkimage ${bindir}/uboot-dumpimage ${bindir}/dumpimage ${bindir}/uboot-fit_check_sign ${bindir}/fit_check_sign" +FILES:${PN}-mkenvimage = "${bindir}/uboot-mkenvimage ${bindir}/mkenvimage" + +RDEPENDS:${PN}-mkimage += "dtc" +RDEPENDS:${PN} += "${PN}-mkimage ${PN}-mkenvimage" +RDEPENDS:${PN}:class-native = "" + +BBCLASSEXTEND = "native nativesdk" + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-tools_2021.07.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-tools_2021.07.bb new file mode 100644 index 000000000..d0c0f30a9 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-tools_2021.07.bb @@ -0,0 +1,4 @@ +require u-boot-common.inc +require u-boot-tools.inc + +SRC_URI:append = " file://0001-tools-image-host-fix-wrong-return-value.patch" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot.inc new file mode 100644 index 000000000..f27fdd599 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot.inc @@ -0,0 +1,359 @@ +SUMMARY = "Universal Boot Loader for embedded devices" +PROVIDES = "virtual/bootloader" + +PACKAGE_ARCH = "${MACHINE_ARCH}" + +DEPENDS += "kern-tools-native" + +inherit uboot-config uboot-extlinux-config uboot-sign deploy cml1 python3native kernel-arch + +DEPENDS += "swig-native" + +EXTRA_OEMAKE = 'CROSS_COMPILE=${TARGET_PREFIX} CC="${TARGET_PREFIX}gcc ${TOOLCHAIN_OPTIONS}" V=1' +EXTRA_OEMAKE += 'HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}"' +EXTRA_OEMAKE += 'STAGING_INCDIR=${STAGING_INCDIR_NATIVE} STAGING_LIBDIR=${STAGING_LIBDIR_NATIVE}' + +PACKAGECONFIG ??= "openssl" +# u-boot will compile its own tools during the build, with specific +# configurations (aka when CONFIG_FIT_SIGNATURE is enabled) openssl is needed as +# a host build dependency. +PACKAGECONFIG[openssl] = ",,openssl-native" + +# Allow setting an additional version string that will be picked up by the +# u-boot build system and appended to the u-boot version. If the .scmversion +# file already exists it will not be overwritten. +UBOOT_LOCALVERSION ?= "" + +do_configure () { + if [ -n "${UBOOT_CONFIG}" ]; then + unset i j + for config in ${UBOOT_MACHINE}; do + i=$(expr $i + 1); + for type in ${UBOOT_CONFIG}; do + j=$(expr $j + 1); + if [ $j -eq $i ]; then + oe_runmake -C ${S} O=${B}/${config} ${config} + if [ -n "${@' '.join(find_cfgs(d))}" ]; then + merge_config.sh -m -O ${B}/${config} ${B}/${config}/.config ${@" ".join(find_cfgs(d))} + oe_runmake -C ${S} O=${B}/${config} oldconfig + fi + fi + done + unset j + done + unset i + DEVTOOL_DISABLE_MENUCONFIG=true + else + if [ -n "${UBOOT_MACHINE}" ]; then + oe_runmake -C ${S} O=${B} ${UBOOT_MACHINE} + else + oe_runmake -C ${S} O=${B} oldconfig + fi + merge_config.sh -m .config ${@" ".join(find_cfgs(d))} + cml1_do_configure + fi +} + +do_compile () { + if [ "${@bb.utils.filter('DISTRO_FEATURES', 'ld-is-gold', d)}" ]; then + sed -i 's/$(CROSS_COMPILE)ld$/$(CROSS_COMPILE)ld.bfd/g' ${S}/config.mk + fi + + unset LDFLAGS + unset CFLAGS + unset CPPFLAGS + + if [ ! -e ${B}/.scmversion -a ! -e ${S}/.scmversion ] + then + echo ${UBOOT_LOCALVERSION} > ${B}/.scmversion + echo ${UBOOT_LOCALVERSION} > ${S}/.scmversion + fi + + if [ -n "${UBOOT_CONFIG}" -o -n "${UBOOT_DELTA_CONFIG}" ] + then + unset i j k + for config in ${UBOOT_MACHINE}; do + i=$(expr $i + 1); + for type in ${UBOOT_CONFIG}; do + j=$(expr $j + 1); + if [ $j -eq $i ] + then + oe_runmake -C ${S} O=${B}/${config} ${UBOOT_MAKE_TARGET} + for binary in ${UBOOT_BINARIES}; do + k=$(expr $k + 1); + if [ $k -eq $i ]; then + cp ${B}/${config}/${binary} ${B}/${config}/${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX} + fi + done + + # Generate the uboot-initial-env + if [ -n "${UBOOT_INITIAL_ENV}" ]; then + oe_runmake -C ${S} O=${B}/${config} u-boot-initial-env + cp ${B}/${config}/u-boot-initial-env ${B}/${config}/u-boot-initial-env-${type} + fi + + unset k + fi + done + unset j + done + unset i + else + oe_runmake -C ${S} O=${B} ${UBOOT_MAKE_TARGET} + + # Generate the uboot-initial-env + if [ -n "${UBOOT_INITIAL_ENV}" ]; then + oe_runmake -C ${S} O=${B} u-boot-initial-env + fi + fi +} + +do_install () { + if [ -n "${UBOOT_CONFIG}" ] + then + for config in ${UBOOT_MACHINE}; do + i=$(expr $i + 1); + for type in ${UBOOT_CONFIG}; do + j=$(expr $j + 1); + if [ $j -eq $i ] + then + install -D -m 644 ${B}/${config}/${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} + ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARY}-${type} + ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARY} + + # Install the uboot-initial-env + if [ -n "${UBOOT_INITIAL_ENV}" ]; then + install -D -m 644 ${B}/${config}/u-boot-initial-env-${type} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} + ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}-${MACHINE}-${type} + ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}-${type} + ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV} + fi + fi + done + unset j + done + unset i + else + install -D -m 644 ${B}/${UBOOT_BINARY} ${D}/boot/${UBOOT_IMAGE} + ln -sf ${UBOOT_IMAGE} ${D}/boot/${UBOOT_BINARY} + + # Install the uboot-initial-env + if [ -n "${UBOOT_INITIAL_ENV}" ]; then + install -D -m 644 ${B}/u-boot-initial-env ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} + ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}-${MACHINE} + ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV} + fi + fi + + if [ -n "${UBOOT_ELF}" ] + then + if [ -n "${UBOOT_CONFIG}" ] + then + for config in ${UBOOT_MACHINE}; do + i=$(expr $i + 1); + for type in ${UBOOT_CONFIG}; do + j=$(expr $j + 1); + if [ $j -eq $i ] + then + install -m 644 ${B}/${config}/${UBOOT_ELF} ${D}/boot/u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} + ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${D}/boot/${UBOOT_BINARY}-${type} + ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${D}/boot/${UBOOT_BINARY} + fi + done + unset j + done + unset i + else + install -m 644 ${B}/${UBOOT_ELF} ${D}/boot/${UBOOT_ELF_IMAGE} + ln -sf ${UBOOT_ELF_IMAGE} ${D}/boot/${UBOOT_ELF_BINARY} + fi + fi + + if [ -e ${WORKDIR}/fw_env.config ] ; then + install -d ${D}${sysconfdir} + install -m 644 ${WORKDIR}/fw_env.config ${D}${sysconfdir}/fw_env.config + fi + + if [ -n "${SPL_BINARY}" ] + then + if [ -n "${UBOOT_CONFIG}" ] + then + for config in ${UBOOT_MACHINE}; do + i=$(expr $i + 1); + for type in ${UBOOT_CONFIG}; do + j=$(expr $j + 1); + if [ $j -eq $i ] + then + install -m 644 ${B}/${config}/${SPL_BINARY} ${D}/boot/${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} + ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${D}/boot/${SPL_BINARYFILE}-${type} + ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${D}/boot/${SPL_BINARYFILE} + fi + done + unset j + done + unset i + else + install -m 644 ${B}/${SPL_BINARY} ${D}/boot/${SPL_IMAGE} + ln -sf ${SPL_IMAGE} ${D}/boot/${SPL_BINARYFILE} + fi + fi + + if [ -n "${UBOOT_ENV}" ] + then + install -m 644 ${WORKDIR}/${UBOOT_ENV_BINARY} ${D}/boot/${UBOOT_ENV_IMAGE} + ln -sf ${UBOOT_ENV_IMAGE} ${D}/boot/${UBOOT_ENV_BINARY} + fi + + if [ "${UBOOT_EXTLINUX}" = "1" ] + then + install -Dm 0644 ${UBOOT_EXTLINUX_CONFIG} ${D}/${UBOOT_EXTLINUX_INSTALL_DIR}/${UBOOT_EXTLINUX_CONF_NAME} + fi +} + +PACKAGE_BEFORE_PN += "${PN}-env ${PN}-extlinux" + +RPROVIDES:${PN}-env += "u-boot-default-env" +ALLOW_EMPTY:${PN}-env = "1" +FILES:${PN}-env = " \ + ${@ '${sysconfdir}/${UBOOT_INITIAL_ENV}*' if d.getVar('UBOOT_INITIAL_ENV') else ''} \ + ${sysconfdir}/fw_env.config \ +" + +FILES:${PN}-extlinux = "${UBOOT_EXTLINUX_INSTALL_DIR}/${UBOOT_EXTLINUX_CONF_NAME}" +RDEPENDS:${PN} += "${@bb.utils.contains('UBOOT_EXTLINUX', '1', '${PN}-extlinux', '', d)}" + +FILES:${PN} = "/boot ${datadir}" +RDEPENDS:${PN} += "${PN}-env" + +do_deploy () { + if [ -n "${UBOOT_CONFIG}" ] + then + for config in ${UBOOT_MACHINE}; do + i=$(expr $i + 1); + for type in ${UBOOT_CONFIG}; do + j=$(expr $j + 1); + if [ $j -eq $i ] + then + install -D -m 644 ${B}/${config}/${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX} ${DEPLOYDIR}/${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} + cd ${DEPLOYDIR} + ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_SYMLINK}-${type} + ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_SYMLINK} + ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_BINARY}-${type} + ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_BINARY} + + # Deploy the uboot-initial-env + if [ -n "${UBOOT_INITIAL_ENV}" ]; then + install -D -m 644 ${B}/${config}/u-boot-initial-env-${type} ${DEPLOYDIR}/${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} + cd ${DEPLOYDIR} + ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} ${UBOOT_INITIAL_ENV}-${MACHINE}-${type} + ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} ${UBOOT_INITIAL_ENV}-${type} + fi + fi + done + unset j + done + unset i + else + install -D -m 644 ${B}/${UBOOT_BINARY} ${DEPLOYDIR}/${UBOOT_IMAGE} + + cd ${DEPLOYDIR} + rm -f ${UBOOT_BINARY} ${UBOOT_SYMLINK} + ln -sf ${UBOOT_IMAGE} ${UBOOT_SYMLINK} + ln -sf ${UBOOT_IMAGE} ${UBOOT_BINARY} + + # Deploy the uboot-initial-env + if [ -n "${UBOOT_INITIAL_ENV}" ]; then + install -D -m 644 ${B}/u-boot-initial-env ${DEPLOYDIR}/${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} + cd ${DEPLOYDIR} + ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} ${UBOOT_INITIAL_ENV}-${MACHINE} + ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} ${UBOOT_INITIAL_ENV} + fi + fi + + if [ -e ${WORKDIR}/fw_env.config ] ; then + install -D -m 644 ${WORKDIR}/fw_env.config ${DEPLOYDIR}/fw_env.config-${MACHINE}-${PV}-${PR} + cd ${DEPLOYDIR} + ln -sf fw_env.config-${MACHINE}-${PV}-${PR} fw_env.config-${MACHINE} + ln -sf fw_env.config-${MACHINE}-${PV}-${PR} fw_env.config + fi + + if [ -n "${UBOOT_ELF}" ] + then + if [ -n "${UBOOT_CONFIG}" ] + then + for config in ${UBOOT_MACHINE}; do + i=$(expr $i + 1); + for type in ${UBOOT_CONFIG}; do + j=$(expr $j + 1); + if [ $j -eq $i ] + then + install -m 644 ${B}/${config}/${UBOOT_ELF} ${DEPLOYDIR}/u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} + ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_BINARY}-${type} + ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_BINARY} + ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_SYMLINK}-${type} + ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_SYMLINK} + fi + done + unset j + done + unset i + else + install -m 644 ${B}/${UBOOT_ELF} ${DEPLOYDIR}/${UBOOT_ELF_IMAGE} + ln -sf ${UBOOT_ELF_IMAGE} ${DEPLOYDIR}/${UBOOT_ELF_BINARY} + ln -sf ${UBOOT_ELF_IMAGE} ${DEPLOYDIR}/${UBOOT_ELF_SYMLINK} + fi + fi + + + if [ -n "${SPL_BINARY}" ] + then + if [ -n "${UBOOT_CONFIG}" ] + then + for config in ${UBOOT_MACHINE}; do + i=$(expr $i + 1); + for type in ${UBOOT_CONFIG}; do + j=$(expr $j + 1); + if [ $j -eq $i ] + then + install -m 644 ${B}/${config}/${SPL_BINARY} ${DEPLOYDIR}/${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} + rm -f ${DEPLOYDIR}/${SPL_BINARYFILE} ${DEPLOYDIR}/${SPL_SYMLINK} + ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${DEPLOYDIR}/${SPL_BINARYFILE}-${type} + ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${DEPLOYDIR}/${SPL_BINARYFILE} + ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${DEPLOYDIR}/${SPL_SYMLINK}-${type} + ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${DEPLOYDIR}/${SPL_SYMLINK} + fi + done + unset j + done + unset i + else + install -m 644 ${B}/${SPL_BINARY} ${DEPLOYDIR}/${SPL_IMAGE} + rm -f ${DEPLOYDIR}/${SPL_BINARYNAME} ${DEPLOYDIR}/${SPL_SYMLINK} + ln -sf ${SPL_IMAGE} ${DEPLOYDIR}/${SPL_BINARYNAME} + ln -sf ${SPL_IMAGE} ${DEPLOYDIR}/${SPL_SYMLINK} + fi + fi + + + if [ -n "${UBOOT_ENV}" ] + then + install -m 644 ${WORKDIR}/${UBOOT_ENV_BINARY} ${DEPLOYDIR}/${UBOOT_ENV_IMAGE} + rm -f ${DEPLOYDIR}/${UBOOT_ENV_BINARY} ${DEPLOYDIR}/${UBOOT_ENV_SYMLINK} + ln -sf ${UBOOT_ENV_IMAGE} ${DEPLOYDIR}/${UBOOT_ENV_BINARY} + ln -sf ${UBOOT_ENV_IMAGE} ${DEPLOYDIR}/${UBOOT_ENV_SYMLINK} + fi + + if [ "${UBOOT_EXTLINUX}" = "1" ] + then + install -m 644 ${UBOOT_EXTLINUX_CONFIG} ${DEPLOYDIR}/${UBOOT_EXTLINUX_SYMLINK} + ln -sf ${UBOOT_EXTLINUX_SYMLINK} ${DEPLOYDIR}/${UBOOT_EXTLINUX_CONF_NAME}-${MACHINE} + ln -sf ${UBOOT_EXTLINUX_SYMLINK} ${DEPLOYDIR}/${UBOOT_EXTLINUX_CONF_NAME} + fi + + if [ -n "${UBOOT_DTB}" ] + then + install -m 644 ${B}/arch/${UBOOT_ARCH}/dts/${UBOOT_DTB_BINARY} ${DEPLOYDIR}/ + fi +} + +addtask deploy before do_build after do_compile diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot_2021.07.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot_2021.07.bb new file mode 100644 index 000000000..c8dbe477e --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot_2021.07.bb @@ -0,0 +1,6 @@ +require u-boot-common.inc +require u-boot.inc + +SRC_URI:append = " file://0001-riscv32-Use-double-float-ABI-for-rv32.patch" + +DEPENDS += "bc-native dtc-native python3-setuptools-native" diff --git a/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot/0001-Speed-up-boot-by-disable-usb-and-enable-bootcount.patch b/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot/0001-Speed-up-boot-by-disable-usb-and-enable-bootcount.patch index 15426993a..b823bc28f 100644 --- a/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot/0001-Speed-up-boot-by-disable-usb-and-enable-bootcount.patch +++ b/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot/0001-Speed-up-boot-by-disable-usb-and-enable-bootcount.patch @@ -1,33 +1,32 @@ -From ffd572dcb4f61ef5c617563c9075881ceb5f5109 Mon Sep 17 00:00:00 2001 +From 6a579f41e16d00921f8dc3bfda913395a595e6c8 Mon Sep 17 00:00:00 2001 From: JeongBong Seo -Date: Wed, 17 Jul 2019 11:30:34 +0900 -Subject: [PATCH] Speed up boot by disable usb and enable bootcount +Date: Wed, 9 Feb 2022 12:00:57 +0900 +Subject: [PATCH 1/2] Speed up boot by disable usb and enable bootcount -* PREBOOT was moved from rpi.h to Kconfig in v2019.10-rc2: - commit 37304aaf60bf92a5dc3ef222ba520698bd862a44 - Author: Simon Glass - Date: Sat Jul 20 20:51:14 2019 -0600 +PREBOOT was moved from rpi.h to Kconfig in v2019.10-rc2: +commit 37304aaf60bf92a5dc3ef222ba520698bd862a44 +Author: Simon Glass +Date: Sat Jul 20 20:51:14 2019 -0600 - Convert CONFIG_USE_PREBOOT and CONFIG_PREBOOT to Kconfig + Convert CONFIG_USE_PREBOOT and CONFIG_PREBOOT to Kconfig --- - configs/rpi_3_32b_defconfig | 7 +++++-- + configs/rpi_3_32b_defconfig | 6 +++++- include/configs/rpi.h | 6 +++--- - 2 files changed, 8 insertions(+), 5 deletions(-) + 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/configs/rpi_3_32b_defconfig b/configs/rpi_3_32b_defconfig -index c2417a0ec9..98477f9c6a 100644 +index f4fdb455f4..2c2506c3e1 100644 --- a/configs/rpi_3_32b_defconfig +++ b/configs/rpi_3_32b_defconfig -@@ -7,8 +7,6 @@ CONFIG_SYS_MALLOC_F_LEN=0x2000 - CONFIG_NR_DRAM_BANKS=1 +@@ -9,7 +9,6 @@ CONFIG_ENV_SIZE=0x4000 + CONFIG_DEFAULT_DEVICE_TREE="bcm2837-rpi-3-b" CONFIG_DISTRO_DEFAULTS=y CONFIG_OF_BOARD_SETUP=y -CONFIG_USE_PREBOOT=y --CONFIG_PREBOOT="usb start" - CONFIG_MISC_INIT_R=y # CONFIG_DISPLAY_CPUINFO is not set # CONFIG_DISPLAY_BOARDINFO is not set -@@ -44,3 +42,8 @@ CONFIG_SYS_WHITE_ON_BLACK=y + CONFIG_MISC_INIT_R=y +@@ -43,3 +42,8 @@ CONFIG_SYS_WHITE_ON_BLACK=y CONFIG_CONSOLE_SCROLL_LINES=10 CONFIG_PHYS_TO_BUS=y CONFIG_OF_LIBFDT_OVERLAY=y @@ -37,10 +36,10 @@ index c2417a0ec9..98477f9c6a 100644 + +CONFIG_BOOTDELAY=0 diff --git a/include/configs/rpi.h b/include/configs/rpi.h -index 77d2d5458a..f8b6c707ce 100644 +index 834f1cd236..19498e879f 100644 --- a/include/configs/rpi.h +++ b/include/configs/rpi.h -@@ -86,9 +86,9 @@ +@@ -106,9 +106,9 @@ /* Environment */ #define ENV_DEVICE_SETTINGS \ @@ -54,5 +53,5 @@ index 77d2d5458a..f8b6c707ce 100644 #ifdef CONFIG_ARM64 #define FDT_HIGH "ffffffffffffffff" -- -2.17.1 +2.25.1 diff --git a/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot/0002-Speed-up-boot-for-raspberrypi4.patch b/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot/0002-Speed-up-boot-for-raspberrypi4.patch index 59152f56d..195810ee1 100644 --- a/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot/0002-Speed-up-boot-for-raspberrypi4.patch +++ b/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot/0002-Speed-up-boot-for-raspberrypi4.patch @@ -1,17 +1,31 @@ -From 53e10e07fad23b654de9e7bdee2a792fcee4d68f Mon Sep 17 00:00:00 2001 +From b5dc7328c736df776c6945f063d32d11a1e46bda Mon Sep 17 00:00:00 2001 From: JeongBong Seo -Date: Wed, 18 Mar 2020 19:25:47 +0900 -Subject: Speed up boot for raspberrypi4 +Date: Wed, 9 Feb 2022 12:05:35 +0900 +Subject: [PATCH 2/2] Speed up boot for raspberrypi4 --- configs/rpi_4_32b_defconfig | 5 +++++ - 1 files changed, 5 insertions(+), 0 deletions(-) + configs/rpi_4_defconfig | 5 +++++ + 2 files changed, 10 insertions(+) diff --git a/configs/rpi_4_32b_defconfig b/configs/rpi_4_32b_defconfig -index a31a617a5f..e60be126fe 100644 +index 47ea466454..908275bd01 100644 --- a/configs/rpi_4_32b_defconfig +++ b/configs/rpi_4_32b_defconfig -@@ -31,3 +31,8 @@ CONFIG_SYS_WHITE_ON_BLACK=y +@@ -59,3 +59,8 @@ CONFIG_PHYS_TO_BUS=y + CONFIG_ADDR_MAP=y + CONFIG_SYS_NUM_ADDR_MAP=2 + CONFIG_OF_LIBFDT_OVERLAY=y ++ ++CONFIG_BOOTCOUNT_LIMIT=y ++CONFIG_BOOTCOUNT_ENV=y ++ ++CONFIG_BOOTDELAY=0 +diff --git a/configs/rpi_4_defconfig b/configs/rpi_4_defconfig +index 9cd1477107..431b300b8d 100644 +--- a/configs/rpi_4_defconfig ++++ b/configs/rpi_4_defconfig +@@ -57,3 +57,8 @@ CONFIG_SYS_WHITE_ON_BLACK=y CONFIG_CONSOLE_SCROLL_LINES=10 CONFIG_PHYS_TO_BUS=y CONFIG_OF_LIBFDT_OVERLAY=y @@ -21,5 +35,5 @@ index a31a617a5f..e60be126fe 100644 + +CONFIG_BOOTDELAY=0 -- -2.17.1 +2.25.1 From 855d8233c81646f4e4094d4bcaa3a0bf785960b1 Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Wed, 9 Feb 2022 16:52:21 +0900 Subject: [PATCH 0254/2022] luna-surfacemanager=366 :Release Notes: Fix crash on launching secondary VKB :Detailed Notes: luna-surfacemanager: submissions/365..submissions/366 e5b3ffb6 Fix to call initialize for WaylandInputMethod :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: [WRN-16654] CCC: luna-surfacemanager=366 Change-Id: I75bb30f90fd17d962389c197997f83fad696f460 --- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index 28418e49a..00b9df472 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0 qtwayland-webos" -WEBOS_VERSION = "2.0.0-365_6be4705de7582cc8f4467e603aa6a16810459946" +WEBOS_VERSION = "2.0.0-366_1f5e3c9d51b33b8d1283606098f3b8ad39b110d7" PR = "r53" inherit webos_qmake6 From 725dad1ed789515d096c99f9d9315c4ae8f97a2a Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Thu, 10 Feb 2022 11:37:12 +0900 Subject: [PATCH 0255/2022] ose: webruntime_91=10 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit :Release Notes: - Patch propagation from other builds - Bug fixes :Detailed Notes: webruntime_91: submissions/9..submissions/10 ce77ff8e78 [op][n_upsable][ozone] Retry SetWindowProperty 00545dfb05 [op][n_upsable][media] Re-enabled fix for punch-hole with blending 2f4884ab5c [op][n_upsable][input] Fix crash while text touch selecting 21f8756f2b fixup! [op][n_upsable][web_security] Check access to local file for media 3dc4a53849 [op][upsable][a11y] Restore original parents of aria-owns owned children when owner is removed 9695356e8b [op][n_upsable][web_security] Check access to local file for media 9656af9f40 [op][n_upsable][cursor] Fix crash processing CSS cursor rules fot webOS 5cabfff676 [op][n_upsable][media] Support for enabling use_neva_v4l2_codec in chromium v.91. 6c48d155fa fixup! [op][n_upsable][web_security] Do not throw exceptions on illegal local files 853c3e0677 [op][ds][ozone][cursor] Fix SetCursorNative so as not to set custom type cursor e58bf2e059 fixup! [oe][ds][multi-instance][media] Make an app id unique for media playback :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-16709] CCC: webruntime_91={ose:10 pro:pro.16} [WRN-15717] Audio is not heard on Secondary display [WRN-11933] [wam][cursor] Fix SetCursorNative so as not to set custom type cursor [WRN-12892] (file:///tmp/alibaba/html.html) is not opened [WRN-6650] Build error when enable use_neva_v4l2_codec for Chromium m91. [WRN-12879] Progress knob doesn't slide fully to extreme right & Crash is observed  [WRN-14587] TC3 video play button is changed and loading symbol is displayed. [WRN-13457] [ch87][accessibility] Do not speak when relaunching and redirect page [WRN-15959] Webapp crash when proceed some special step on textbox [WRN-15709] [OSE-RPi4] : Video is not playing on background media black screen is displaying [WRN-14630] [OSE Emulator] [Linux 18.04]- Home screen with Black screen is displayed in the background instead of Bare-app in the Background Change-Id: I2ec3cd73c0cb38ebd84c7c3e23d6982d1aa9b536 --- meta-webos/recipes-webos/chromium/webruntime-repo_91.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc index 63b125793..86382da08 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=c31f1ae166739be9ca186deacf4b32e4" WEBOS_REPO_NAME = "chromium91" -WEBOS_VERSION = "91.0.4472.114-9_16f0acc8622ac263e25cec3c6de09b133d2aefce" +WEBOS_VERSION = "91.0.4472.114-10_1eeccb6a304a8098dee3f8e88736e937ddfdb1eb" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" From bd7f4426a80c0e52798066835d2590464eecaec5 Mon Sep 17 00:00:00 2001 From: "karthick.sundaram" Date: Thu, 10 Feb 2022 15:39:48 +0530 Subject: [PATCH 0256/2022] ose: webruntime_91=11 :Release Notes: - Bug fix :Detailed Notes: webruntime_91: submissions/10..submissions/11 7deca0fa8a fixup! [oe][ds][media] Remove unsupported mimes and codecs for OSE :Testing Performed: CCC testing :QA Notes: Test-cases: QWO-1582 :Issues Addressed: [WRN-16643] Coverity issue 9003398 Uninitialized scalar variable [WRN-16723] CCC: ose: webruntime_91=11 Change-Id: I09d9629bb1f47329260a532e45f5c5cd29060112 --- meta-webos/recipes-webos/chromium/webruntime-repo_91.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc index 86382da08..7fa5e60d8 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=c31f1ae166739be9ca186deacf4b32e4" WEBOS_REPO_NAME = "chromium91" -WEBOS_VERSION = "91.0.4472.114-10_1eeccb6a304a8098dee3f8e88736e937ddfdb1eb" +WEBOS_VERSION = "91.0.4472.114-11_4f9259097dfad39ce048ee21a33abd4defbe3c01" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" From 55af72a930e2d48bfdbb2f12b7bd3baf505906ba Mon Sep 17 00:00:00 2001 From: "hyunjae92.shin" Date: Wed, 26 Jan 2022 12:57:44 +0900 Subject: [PATCH 0257/2022] webos.conf: Release webOS OSE v2.15.0 :Release Notes: Set software version as webOS OSE v2.15.0 :Detailed Notes: Set WEBOS_DISTRO_VERSION_MINOR to "15.0" :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: N/A Change-Id: Ia8f17676abf38277dd41805fc94c9d9540543626 --- meta-webos/conf/distro/webos.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/conf/distro/webos.conf b/meta-webos/conf/distro/webos.conf index cf1764da5..d3832e3fb 100644 --- a/meta-webos/conf/distro/webos.conf +++ b/meta-webos/conf/distro/webos.conf @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. DISTRO = "webos" DISTRO_NAME = "webOS OSE" @@ -13,7 +13,7 @@ WEBOS_DISTRO_BUILD_CODENAME = "master" # g - github WEBOS_DISTRO_VERSION_MAJOR = "2" -WEBOS_DISTRO_VERSION_MINOR = "14.1" +WEBOS_DISTRO_VERSION_MINOR = "15.0" WEBOS_DISTRO_VERSION_TYPE = "g" DISTRO_VERSION = "${WEBOS_DISTRO_VERSION_MAJOR}.${WEBOS_DISTRO_VERSION_MINOR}.${WEBOS_DISTRO_VERSION_TYPE}" From cad5a02abbd5593264556b87331becdeb3047cea Mon Sep 17 00:00:00 2001 From: JeongBong Seo Date: Wed, 18 Aug 2021 10:10:27 +0900 Subject: [PATCH 0258/2022] Add python3-docker-compose=v1.21.2 docker-simple-webserver=v0.1.0-r0 :Release Notes: Use more recent version of docker compose Add a simple docker webserver :Detailed Notes: python3-docker-compose: (v1.16.1)..v1.21.2 The 'thud' branch of meta-virtualization looks not well maintained and the docker-compose doesn't work properly. By upgrading the package to v1.21.2, it works as expected. docker-simple-webserver: ..v0.1.0 Add a simple webserver container service :Testing Performed: Build and runtime tested. See the CCC ticket. :QA Notes: :Issues Addressed: [WRN-4808] python3-docker-compose=v1.21.2 docker-simple-webserver=v0.1.0-r0 [WRN-3129] Add a simple web server service by using docker Change-Id: Ia4251e33a65ae33ff2cd2991fee3c5a2251a8c3e --- meta-webos-virtualization/conf/layer.conf | 8 ++++ .../packagegroup-webos-extended.bbappend | 6 ++- .../docker-simple-webserver.bb | 36 +++++++++++++++ .../docker-simple-webserver_0.1.0.tar.bz2 | Bin 0 -> 1080 bytes ...upport-newer-minor-version-of-reques.patch | 43 ++++++++++++++++++ .../python3-docker-compose_1.21.2.bb | 32 +++++++++++++ 6 files changed, 123 insertions(+), 2 deletions(-) create mode 100644 meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver.bb create mode 100644 meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver/docker-simple-webserver_0.1.0.tar.bz2 create mode 100644 meta-webos-virtualization/recipes-upstreamable/docker-compose/files/0001-docker-compose-support-newer-minor-version-of-reques.patch create mode 100644 meta-webos-virtualization/recipes-upstreamable/docker-compose/python3-docker-compose_1.21.2.bb diff --git a/meta-webos-virtualization/conf/layer.conf b/meta-webos-virtualization/conf/layer.conf index d3da8d060..af8be6d5e 100644 --- a/meta-webos-virtualization/conf/layer.conf +++ b/meta-webos-virtualization/conf/layer.conf @@ -16,3 +16,11 @@ LAYERDEPENDS_meta-webos-virtualization = "\ virtualization-layer \ meta-webos \ " + +PNBLACKLIST[ipxe] ?= "Depends on syslinux which isn't available for arm COMPATIBLE_HOST" +PNBLACKLIST[nagios-core] ?= "Depends on apache2 from meta-webserver layer which we don't include" +PNBLACKLIST[nagios-plugins] ?= "Depends on blacklisted nagios-core" +PNBLACKLIST[nagios-nrpe] ?= "Depends on blacklisted nagios-core" +PNBLACKLIST[nagios-nsca] ?= "Depends on blacklisted nagios-core" + +PREFERRED_VERSION_python3-docker-compose ?= "1.21.2" diff --git a/meta-webos-virtualization/recipes-core/packagegroups/packagegroup-webos-extended.bbappend b/meta-webos-virtualization/recipes-core/packagegroups/packagegroup-webos-extended.bbappend index 9c6fe3a79..09978fecb 100644 --- a/meta-webos-virtualization/recipes-core/packagegroups/packagegroup-webos-extended.bbappend +++ b/meta-webos-virtualization/recipes-core/packagegroups/packagegroup-webos-extended.bbappend @@ -1,7 +1,9 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosvirt1" +EXTENDPRAUTO_append = "webosvirt2" RDEPENDS_${PN}_append = " \ ${@bb.utils.contains('DISTRO_FEATURES', 'virtualization', 'docker-moby', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'virtualization', 'docker-simple-webserver', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'virtualization', 'python3-docker-compose', '', d)} \ " diff --git a/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver.bb b/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver.bb new file mode 100644 index 000000000..4e9e44f23 --- /dev/null +++ b/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver.bb @@ -0,0 +1,36 @@ +# Copyright (c) 2021 LG Electronics, Inc. + +SUMMARY = "Simple webserver container with docker-compose" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +inherit systemd webos_filesystem_paths + +PV = "0.1.0" +PR = "r0" + +SRC_URI = "file://docker-simple-webserver_${PV}.tar.bz2" +SRC_URI[md5sum] = "7b24cf1e091a13933b82effa635d418a" +SRC_URI[sha256sum] = "274032c6a3c854cc3d9412ec73b05ffc28527e31b57e4fed685f2c36f57974d5" + +S = "${WORKDIR}/docker-simple-webserver" + +do_install() { + # install systemd service file + install -d ${D}${sysconfdir}/systemd/system + install -m 644 ${S}/docker-simple-webserver.service ${D}${sysconfdir}/systemd/system + + # don't start service automatically + sed -i '/\[Install\]/,+2d' ${D}${sysconfdir}/systemd/system/docker-simple-webserver.service + + # install docker daemon file to access webosdev.lge.com regisgry + install -d ${D}${webos_mountablestoragedir}/docker + install -m 644 ${S}/daemon.json ${D}${webos_mountablestoragedir}/docker + + # copy docker-compose file and related files + install -d ${D}${datadir} + cp -rav ${S}/docker-simple-webserver ${D}${datadir} +} + +FILES_${PN} += "${webos_mountablestoragedir}" +SYSTEMD_SERVICE_${PN} = "docker-simple-webserver.service" diff --git a/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver/docker-simple-webserver_0.1.0.tar.bz2 b/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver/docker-simple-webserver_0.1.0.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..971d46e8baf7446078d1732f7490524856f1e986 GIT binary patch literal 1080 zcmV-81jqYAT4*^jL0KkKS&9dB3jhLD|CHX4076>l|KC6D-|Bz=|LOq%03d(}Py^oP z<%L&6N;$(wO*GWNrj3MX$UxI0LrpZ%pfm=CPf%nAlStD_f2p95ew1i>o~DL?&>8>$ z0MG&I2@(V&Kqf?+N2G?-JrMMsgf!D9lSlyd2dSXpp_5GwGBh;E$TBiCG6NGvO#o!b z#4wUcO{wBfM8pjYYH6ShhSW3~8USbj4^LFP&YZ)>XEjo~VuR2m;lR*|2#_lhJ(R?O z63`_qhW+?jd<7+h=F;T3BOrzV$srl~d3%3dwe98pB@5ys4*@637fbK?F`u(1h6!=0 zOIRAfDw9D%E3jEvL9Aq~1l>6!0-ARvJUuYww6IL17?aj;{)&gAO6xD?6Y+@SM!^N; zh?xyCM9Yd|2MCnw|8b@VE@>Bmidm0UBGipgQs;5xR%t>Wv)Iaw6f0k)z${Q9UAkHY zw!?c#|2#)Y;@P`Iw-jM%y!Sz z)CD)cv4UP^#%r7;B>vN*e^xc|emsCI8acqmN2w=^qE~wB4%BhL{k zYP;K>Ne8zvfY0aUq^D?8X&p~g)ow^B5Nixvf$)ivkD|^pd}AF>MAJKZSQvOAGD%+E zAsEB*IF@-4NFmmM5LBE^OTS*|BXp=;Xzt-C*!*5|bSRwLrHNiic@0u-I8779uIS{ zVzgl*BPl@?6kWSZStD&Y0c!LP4Hd5Z;DM>otsgpYUw} literal 0 HcmV?d00001 diff --git a/meta-webos-virtualization/recipes-upstreamable/docker-compose/files/0001-docker-compose-support-newer-minor-version-of-reques.patch b/meta-webos-virtualization/recipes-upstreamable/docker-compose/files/0001-docker-compose-support-newer-minor-version-of-reques.patch new file mode 100644 index 000000000..3263dc87d --- /dev/null +++ b/meta-webos-virtualization/recipes-upstreamable/docker-compose/files/0001-docker-compose-support-newer-minor-version-of-reques.patch @@ -0,0 +1,43 @@ +From b4655b5e7f1e5b87a758dfd7af01a49a40ed148a Mon Sep 17 00:00:00 2001 +From: Li Zhou +Date: Thu, 10 Oct 2019 15:46:20 +0800 +Subject: [PATCH] docker-compose: support newer minor version of requests + +Signed-off-by: Ofek Lev + +Upstream-Status: Backport + +Signed-off-by: Li Zhou +--- + requirements.txt | 2 +- + setup.py | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/requirements.txt b/requirements.txt +index 93a0cce..42bde41 100644 +--- a/requirements.txt ++++ b/requirements.txt +@@ -16,7 +16,7 @@ pypiwin32==219; sys_platform == 'win32' and python_version < '3.6' + pypiwin32==220; sys_platform == 'win32' and python_version >= '3.6' + PySocks==1.6.7 + PyYAML==3.12 +-requests==2.18.4 ++requests==2.19.1 + six==1.10.0 + texttable==0.9.1 + urllib3==1.21.1 +diff --git a/setup.py b/setup.py +index 422ba54..a74ee0f 100644 +--- a/setup.py ++++ b/setup.py +@@ -33,7 +33,7 @@ install_requires = [ + 'cached-property >= 1.2.0, < 2', + 'docopt >= 0.6.1, < 0.7', + 'PyYAML >= 3.10, < 4', +- 'requests >= 2.6.1, != 2.11.0, != 2.12.2, != 2.18.0, < 2.19', ++ 'requests >= 2.6.1, != 2.11.0, != 2.12.2, != 2.18.0, < 2.20', + 'texttable >= 0.9.0, < 0.10', + 'websocket-client >= 0.32.0, < 1.0', + 'docker >= 3.3.0, < 4.0', +-- +1.9.1 diff --git a/meta-webos-virtualization/recipes-upstreamable/docker-compose/python3-docker-compose_1.21.2.bb b/meta-webos-virtualization/recipes-upstreamable/docker-compose/python3-docker-compose_1.21.2.bb new file mode 100644 index 000000000..30a1497c3 --- /dev/null +++ b/meta-webos-virtualization/recipes-upstreamable/docker-compose/python3-docker-compose_1.21.2.bb @@ -0,0 +1,32 @@ +SUMMARY = "Multi-container orchestration for Docker" +HOMEPAGE = "https://www.docker.com/" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=435b266b3899aa8a959f17d41c56def8" + +SRC_URI += "file://0001-docker-compose-support-newer-minor-version-of-reques.patch" + +inherit pypi setuptools3 + +SRC_URI[md5sum] = "a243f59b2d286c41ff6ed1c4d4b50996" +SRC_URI[sha256sum] = "68b07193755440d5f8d4f47e6f3484212afc255d5b785a81353ea1e9298c1c2c" + +RDEPENDS_${PN} = "\ + ${PYTHON_PN}-cached-property \ + ${PYTHON_PN}-certifi \ + ${PYTHON_PN}-chardet \ + ${PYTHON_PN}-colorama \ + ${PYTHON_PN}-docker \ + ${PYTHON_PN}-docker-pycreds \ + ${PYTHON_PN}-dockerpty \ + ${PYTHON_PN}-docopt \ + ${PYTHON_PN}-idna \ + ${PYTHON_PN}-jsonschema \ + ${PYTHON_PN}-pyyaml \ + ${PYTHON_PN}-requests \ + ${PYTHON_PN}-six \ + ${PYTHON_PN}-terminal \ + ${PYTHON_PN}-texttable \ + ${PYTHON_PN}-urllib3 \ + ${PYTHON_PN}-websocket-client \ + ${PYTHON_PN}-fcntl \ + " From f1dd6a26f947b3d88b0ce16e854dae0ecdd43f68 Mon Sep 17 00:00:00 2001 From: Kyungjik Min Date: Mon, 14 Feb 2022 13:41:38 +0900 Subject: [PATCH 0259/2022] docker-simple-webserver=r1 :Release Notes: :Detailed Notes: 'a' option of 'cp' has possibility to raise the host contamination QA error like http://gecko.lge.com:8000/Builds/Details/825210 :Testing Performed: Only build test :QA Notes: N/A :Issues Addressed: N/A Change-Id: Ibd82fd978ca8bd3dd9b719016ad436e74188baa7 --- .../docker-simple-webserver/docker-simple-webserver.bb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver.bb b/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver.bb index 4e9e44f23..16058b918 100644 --- a/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver.bb +++ b/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "Simple webserver container with docker-compose" LICENSE = "Apache-2.0" @@ -7,7 +7,7 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7ca inherit systemd webos_filesystem_paths PV = "0.1.0" -PR = "r0" +PR = "r1" SRC_URI = "file://docker-simple-webserver_${PV}.tar.bz2" SRC_URI[md5sum] = "7b24cf1e091a13933b82effa635d418a" @@ -29,7 +29,7 @@ do_install() { # copy docker-compose file and related files install -d ${D}${datadir} - cp -rav ${S}/docker-simple-webserver ${D}${datadir} + cp -rv ${S}/docker-simple-webserver ${D}${datadir} } FILES_${PN} += "${webos_mountablestoragedir}" From 6c673c789d4dc176013982f80e4018551c1e3598 Mon Sep 17 00:00:00 2001 From: "jongson.kim" Date: Tue, 15 Feb 2022 17:09:49 +0900 Subject: [PATCH 0260/2022] ose: com.webos.app.mediagallery=17 :Release Notes: Apply keyboard/mouse support. :Detailed Notes: com.webos.app.mediagallery: submissions/16..submissions/17 30f806d Apply keyboard & mouse support for mediagallery app. :Testing Performed: Please check CCC tickets. :QA Notes: :Issues Addressed: [WRN-17335] CCC: com.webos.app.mediagallery=17 [WRN-14130] Change application to provide mouse/keyboard support. Change-Id: Ie69f483b77ac81c1f3c9085a36c48384e80c7155 --- .../com.webos.app.mediagallery/com.webos.app.mediagallery.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.mediagallery/com.webos.app.mediagallery.bb b/meta-webos/recipes-webos/com.webos.app.mediagallery/com.webos.app.mediagallery.bb index 27690005e..ca793d970 100644 --- a/meta-webos/recipes-webos/com.webos.app.mediagallery/com.webos.app.mediagallery.bb +++ b/meta-webos/recipes-webos/com.webos.app.mediagallery/com.webos.app.mediagallery.bb @@ -19,7 +19,7 @@ DEPENDS_append = " ${@ 'qtshadertools-native' if d.getVar('QT_VERSION', True) == RDEPENDS_${PN} += "qml-webos-framework qml-webos-bridge" -WEBOS_VERSION = "1.0.0-16_dc86d074c62414f5f7e560145ebe237ff9d87ecc" +WEBOS_VERSION = "1.0.0-17_4fe324a62ee8d06e344e935f17cbda3d3e568b59" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" PR = "r2" From 3ac6841367afa51907eaee4c5035e2b49f9dcb67 Mon Sep 17 00:00:00 2001 From: "ayyappu.varunkumar" Date: Thu, 17 Feb 2022 20:17:31 +0530 Subject: [PATCH 0261/2022] ose: luna-service2=27 :Release Notes: Fix static issues :Detailed Notes: Fix static issues CID-9053209 Copy-paste error luna-service2: submissions/26..submissions/27 679d7b8 Fix static issue :Testing Performed: Test results are updated in WRN-17489 :QA Notes: NA :Issues Addressed: [WRN-17489] CCC: ose: luna-service2=27 [WRN-17024] Fix static issue in webosose/luna-service2 component Change-Id: I8b20dbada8a2f4d1f83e6dbb6c4887062b087518 --- meta-webos/recipes-webos/luna-service2/luna-service2.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/luna-service2/luna-service2.bb b/meta-webos/recipes-webos/luna-service2/luna-service2.bb index b57f0cec0..3cc0dbb85 100644 --- a/meta-webos/recipes-webos/luna-service2/luna-service2.bb +++ b/meta-webos/recipes-webos/luna-service2/luna-service2.bb @@ -14,7 +14,7 @@ VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS_${PN} = "luna-service2-security-conf ${VIRTUAL-RUNTIME_cpushareholder} ${VIRTUAL-RUNTIME_bash}" -WEBOS_VERSION = "3.21.2-26_090febd0c42c556e43a6ac06ea9c6cc2fe627f0b" +WEBOS_VERSION = "3.21.2-27_0ee0f9692363f615f9e70c251827be79810d4f27" PR = "r28" EXTRA_OECMAKE += "${@ '-DWEBOS_DISTRO_PRERELEASE:STRING="devel"' \ From 062e884b865197d277bf5fe2a5c99b76133c2118 Mon Sep 17 00:00:00 2001 From: Kyungjik Min Date: Tue, 22 Feb 2022 19:40:44 +0900 Subject: [PATCH 0262/2022] webos_oss_pkg_info.bbclass: Fix to the correct path to find license.manifest :Release Notes: :Detailed Notes: license.manifest file is under IMAGE_NAME path not IMAGE_BASENAME path When we use IMAGE_BASENAME path to find license.manifest, the production builds which has MANUFACTURING_VERSION causes build error like DEBUG: Executing python function do_write_oss_pkg_info ERROR: There is no TOPDIR/BUILD/deploy/licenses/${IMAGE_BASENAME}/license.manifest DEBUG: Python function do_write_oss_pkg_info finished :Testing Performed: Only build test :QA Notes: N/A :Issues Addressed: [WRN-17751] Fix build error when manufacturing version is set Change-Id: I8dfd178ee3d4213699aab42b80c0057b06a63ea4 --- meta-webos/classes/webos_oss_pkg_info.bbclass | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/meta-webos/classes/webos_oss_pkg_info.bbclass b/meta-webos/classes/webos_oss_pkg_info.bbclass index ef997211a..225c8dea7 100644 --- a/meta-webos/classes/webos_oss_pkg_info.bbclass +++ b/meta-webos/classes/webos_oss_pkg_info.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. # # webos_oss_pkg_info # @@ -15,12 +15,11 @@ do_write_oss_pkg_info[doc] = "Collects oss package information of the image" do_write_oss_pkg_info[nostamp] = "1" python do_write_oss_pkg_info() { - imagename = d.getVar("IMAGE_BASENAME") - machine = d.getVar("MACHINE") + imagename = d.getVar("IMAGE_NAME") oss_filename = d.getVar("OSS_FILENAME") - manifest = os.path.join(os.path.join(d.getVar("OSS_DEPLOY_DIR"), "%s-%s" % (imagename, machine)), "license.manifest") - default_oss = os.path.join(d.getVar("TOPDIR")+'/build-templates', "%s-%s-%s" % (imagename, machine, oss_filename)) - target_oss = os.path.join(d.getVar("DEPLOY_DIR_IMAGE"), "%s-%s" % (imagename, oss_filename)) + manifest = os.path.join(os.path.join(d.getVar("OSS_DEPLOY_DIR"), "%s" % imagename), "license.manifest") + default_oss = os.path.join(d.getVar("TOPDIR")+'/build-templates', "%s-%s" % (imagename, oss_filename)) + target_oss = os.path.join(d.getVar("DEPLOY_DIR_IMAGE"), "%s-%s" % (d.getVar("IMAGE_BASENAME"), oss_filename)) if os.path.isfile(manifest): with open(target_oss, "w") as output: From 2ea1415d4cb7c3328a6c4260e2c7e6e98ff8f23b Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Wed, 16 Feb 2022 13:44:21 +0900 Subject: [PATCH 0263/2022] auto-luna-surface-manager=40 luna-surfacemanager=367 qml-webos-framework=162 qtwayland-webos=74 :Release Notes: Fix LSM, MaliitServer crash Fix null check and uninitialized pointer :Detailed Notes: auto-luna-surface-manager: submissions/39..submissions/40 4123be9 Move the pageFlipNotifier setting into the setPageFlipNotifier function luna-surfacemanager: submissions/366..submissions/367 1d208deb Fix static analysis defects b82d44f8 Move the call order of pageFlipNotifier function after showWindow qml-webos-framework: submissions/161..submissions/162 8f4f4b3 Fix null check qtwayland-webos: submissions/72..submissions/74 6b094d0 Fix ensureDisplayScreen for Qt6 version 6b8ebea Make display always has not fake screen :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-17385] CCC: auto-luna-surface-manager=40 luna-surfacemanager=367 qml-webos-framework=162 Change-Id: I19137dd6cc3c18acaa726f5609f4abf3065d78b7 --- .../auto-luna-surface-manager/auto-luna-surface-manager.bb | 2 +- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 2 +- .../recipes-webos/qml-webos-framework/qml-webos-framework.bb | 4 ++-- meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb index 31b2d59da..c17b41b37 100644 --- a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb +++ b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb @@ -15,7 +15,7 @@ RDEPENDS_${PN} = " \ qtbase-plugins-webos \ " -WEBOS_VERSION = "0.0.1-39_52ae0dcd3b1923bce9287bb1923fcd45871b318c" +WEBOS_VERSION = "0.0.1-40_2221f883a23126adb9ba0a0d5bee133ee0d312c9" PR = "r7" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index 00b9df472..7b43df2a1 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0 qtwayland-webos" -WEBOS_VERSION = "2.0.0-366_1f5e3c9d51b33b8d1283606098f3b8ad39b110d7" +WEBOS_VERSION = "2.0.0-367_b14e03da1678f7d9380aaf17c7ff5f3cfcf4cce7" PR = "r53" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb b/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb index 2a7d2d549..f0c107ba9 100644 --- a/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb +++ b/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2021 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "QML widgets and runtime framework for webOS apps" AUTHOR = "Mikko Levonmaa " @@ -18,7 +18,7 @@ RPROVIDES_${PN}-examples = " \ eos.widgetgallery \ " -WEBOS_VERSION = "1.0.0-161_a6969a4cb6e95949af68e316c8414951b0c8fc9b" +WEBOS_VERSION = "1.0.0-162_348932a776c5188993170d237e77fb58e289c8d2" PR = "r35" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb index 4351785f8..62423e4df 100644 --- a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb +++ b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtwayland webos-wayland-extensions libxkbcommon qt-features-webos wayland-native qtwayland-native wayland-protocols" -WEBOS_VERSION = "2.0.0-72_d292ab1e0ac44c7f14b6136b1a6921a3c9fb215a" +WEBOS_VERSION = "2.0.0-74_a250dcf460bc704adaaeb4d900a6aa9ff856caea" PR = "r16" inherit webos_qmake6 From a64584ea2a01251ae0cbee7908cddb18f86cadbe Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Fri, 11 Feb 2022 18:13:02 +0900 Subject: [PATCH 0264/2022] qtdeclarative=webos76 qtwayland=webos28 :Release Notes: Backport the fix for QQuickState::when. Apply the patch until the specific version. :Detailed Notes: qtdeclarative=webos76 Add 0001-Correctly-handle-QQuickState-when.patch in replacement of 0001-Revert-use-boolean-for-when-property.patch to address QTBUG-86695. qtwayland=webos28 Apply 0002-Use-scope-resolution-operator-for-request.patch until 6.2 since it has been merged in 6.3. :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: [WRN-17385] CCC: qtdeclarative=webos76 qtwayland=webos28 Change-Id: I91ed1d4f4bd6bb9ce15f14847ed0711d56250288 --- ...e-in-knownPointingDevices-is-destroy.patch | 6 +- ...01-Correctly-handle-QQuickState-when.patch | 117 +++++++++++++ ...Revert-use-boolean-for-when-property.patch | 156 ------------------ ...e-the-inputMethod-when-finishing-the.patch | 9 +- .../recipes-qt/qt6/qtdeclarative_git.bbappend | 14 +- .../recipes-qt/qt6/qtwayland_git.bbappend | 4 +- 6 files changed, 134 insertions(+), 172 deletions(-) create mode 100644 meta-webos/recipes-qt/qt6/qtdeclarative/0001-Correctly-handle-QQuickState-when.patch delete mode 100644 meta-webos/recipes-qt/qt6/qtdeclarative/0001-Revert-use-boolean-for-when-property.patch diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch index 4536f91d8..d772341e3 100644 --- a/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch +++ b/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch @@ -1,4 +1,4 @@ -From c81ac4495cdaf0fb7d6f9c02fd2e0ba234eef26c Mon Sep 17 00:00:00 2001 +From efd9cc70922656a364315fa0f0aed19e598129af Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Tue, 15 Jun 2021 13:49:55 +0900 Subject: [PATCH] Check if a device in knownPointingDevices is destroyed before @@ -19,7 +19,7 @@ Upstream-Status: Submitted [https://codereview.qt-project.org/c/qt/qtdeclarative 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/src/quick/util/qquickdeliveryagent.cpp b/src/quick/util/qquickdeliveryagent.cpp -index 344024ab7c..2b602f35ef 100644 +index 0cea513b78..a8b7bccb74 100644 --- a/src/quick/util/qquickdeliveryagent.cpp +++ b/src/quick/util/qquickdeliveryagent.cpp @@ -269,9 +269,16 @@ void QQuickDeliveryAgentPrivate::removeGrabber(QQuickItem *grabber, bool mouse, @@ -42,7 +42,7 @@ index 344024ab7c..2b602f35ef 100644 } return; } -@@ -1639,7 +1646,6 @@ void QQuickDeliveryAgentPrivate::ensureDeviceConnected(const QPointingDevice *de +@@ -1642,7 +1649,6 @@ void QQuickDeliveryAgentPrivate::ensureDeviceConnected(const QPointingDevice *de return; knownPointingDevices.append(dev); connect(dev, &QPointingDevice::grabChanged, this, &QQuickDeliveryAgentPrivate::onGrabChanged); diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Correctly-handle-QQuickState-when.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Correctly-handle-QQuickState-when.patch new file mode 100644 index 000000000..8a79cab00 --- /dev/null +++ b/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Correctly-handle-QQuickState-when.patch @@ -0,0 +1,117 @@ +From 45467e95f37ac209828c49fad1b6051ed2c0e0ad Mon Sep 17 00:00:00 2001 +From: Fabian Kosmale +Date: Mon, 7 Feb 2022 15:48:30 +0100 +Subject: [PATCH] Correctly handle QQuickState::when + +64c1fbe96c68b1286a70242ff4922be140128cb2 fixed that one could not assign +a constant value to QQuickState::when. However, as alluded to by a +comment in QQState's code, this caused state oscillation, breaking clean +transitions between two states. +The reason for this issue is that as soon as once of the when condition +changes, we check the when condition of all states. However, in the case +of logically exclusive cases we can run into the issue that the binding +of the second state has not been re-evaluated yet. Thus, we might end up +with all states being false, even though the second one becomes true +immediately afterwards. + +To avoid this issue, we force the reevaluation of the binding. However, +instead of doing this by using a QQmlBinding property (with all the +tooling and runtime issues that it would entail), we keep using a normal +property. We then ask the engine for the binding, and if it exists, we +reevaluate it to obtain the current value. + +Fixes: QTBUG-86695 +Change-Id: Id10a3549935794b93b29450b0f5dfb6d1df691a1 +Reviewed-by: Ulf Hermann +(cherry picked from commit a8c729d83979fb0b9939044d246e73b1d578e65b) +Reviewed-by: Andrei Golubev +Upstream-Status: Backport [https://codereview.qt-project.org/c/qt/qtdeclarative/+/394606] +--- + src/quick/util/qquickstategroup.cpp | 10 ++++++++- + .../qquickstates/data/noStateOsciallation.qml | 22 +++++++++++++++++++ + .../quick/qquickstates/tst_qquickstates.cpp | 15 +++++++++++++ + 3 files changed, 46 insertions(+), 1 deletion(-) + create mode 100644 tests/auto/quick/qquickstates/data/noStateOsciallation.qml + +diff --git a/src/quick/util/qquickstategroup.cpp b/src/quick/util/qquickstategroup.cpp +index b86333943c..afde0e2f24 100644 +--- a/src/quick/util/qquickstategroup.cpp ++++ b/src/quick/util/qquickstategroup.cpp +@@ -376,7 +376,15 @@ bool QQuickStateGroupPrivate::updateAutoState() + QQuickState *state = states.at(ii); + if (state->isWhenKnown()) { + if (state->isNamed()) { +- if (state->when()) { ++ bool whenValue = state->when(); ++ const QQmlProperty whenProp(state, u"when"_qs); ++ const auto potentialWhenBinding = QQmlAnyBinding::ofProperty(whenProp); ++ Q_ASSERT(!potentialWhenBinding.isUntypedPropertyBinding()); ++ // if there is a binding, the value in when might not be up-to-date at this point ++ // so we manually reevaluate the binding ++ if (auto abstractBinding = dynamic_cast( potentialWhenBinding.asAbstractBinding())) ++ whenValue = abstractBinding->evaluate().toBool(); ++ if (whenValue) { + if (stateChangeDebug()) + qWarning() << "Setting auto state due to expression"; + if (currentState != state->name()) { +diff --git a/tests/auto/quick/qquickstates/data/noStateOsciallation.qml b/tests/auto/quick/qquickstates/data/noStateOsciallation.qml +new file mode 100644 +index 0000000000..f0d7aeeb6d +--- /dev/null ++++ b/tests/auto/quick/qquickstates/data/noStateOsciallation.qml +@@ -0,0 +1,22 @@ ++import QtQuick 2.15 ++ ++Item { ++ id: root ++ property int number: 2 ++ property int stateChangeCounter: 0 ++ ++ Item { ++ id: item ++ onStateChanged: ++stateChangeCounter ++ states: [ ++ State { ++ name: "n1" ++ when: root.number === 1 ++ }, ++ State { ++ name: "n2" ++ when: root.number === 2 ++ } ++ ] ++ } ++} +diff --git a/tests/auto/quick/qquickstates/tst_qquickstates.cpp b/tests/auto/quick/qquickstates/tst_qquickstates.cpp +index 87d39228f4..5120f40a3f 100644 +--- a/tests/auto/quick/qquickstates/tst_qquickstates.cpp ++++ b/tests/auto/quick/qquickstates/tst_qquickstates.cpp +@@ -199,6 +199,7 @@ private slots: + void revertListMemoryLeak(); + void duplicateStateName(); + void trivialWhen(); ++ void noStateOsciallation(); + void parentChangeCorrectReversal(); + void revertNullObjectBinding(); + void bindableProperties(); +@@ -1714,6 +1715,20 @@ void tst_qquickstates::trivialWhen() + QVERIFY(root); + } + ++void tst_qquickstates::noStateOsciallation() ++{ ++ QQmlEngine engine; ++ QQmlComponent component(&engine, testFileUrl("noStateOsciallation.qml")); ++ QScopedPointer root {component.create()}; ++ QVERIFY(root); ++ // set to 1 on initial transition from "" to "n2" ++ QCOMPARE(root->property("stateChangeCounter").toInt(), 1); ++ root->setProperty("number", 1); ++ // setting number to 1 changes directly from "n2" to "n1" ++ // without any intermediate transition to "" ++ QCOMPARE(root->property("stateChangeCounter").toInt(), 2); ++} ++ + void tst_qquickstates::parentChangeCorrectReversal() + { + QQmlEngine engine; diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Revert-use-boolean-for-when-property.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Revert-use-boolean-for-when-property.patch deleted file mode 100644 index 9058295e6..000000000 --- a/meta-webos/recipes-qt/qt6/qtdeclarative/0001-Revert-use-boolean-for-when-property.patch +++ /dev/null @@ -1,156 +0,0 @@ -From fa0d1427e2de4bc3c1e114240a2f17e950ffaf3a Mon Sep 17 00:00:00 2001 -From: Hyungchan Kim -Date: Fri, 2 Apr 2021 09:50:32 +0900 -Subject: [PATCH] Revert "use boolean for when property" - -This reverts commit 64c1fbe96c68b1286a70242ff4922be140128cb2. -It breaks State::when behavior as reported in QTBUG-86695. - -Upstream-Status: Inappropriate [workaround] ---- - src/quick/util/qquickstate.cpp | 9 ++++----- - src/quick/util/qquickstate_p.h | 8 +++++--- - src/quick/util/qquickstate_p_p.h | 5 ++--- - src/quick/util/qquickstategroup.cpp | 5 +++-- - tests/auto/quick/qquickstates/data/trivialWhen.qml | 5 ----- - tests/auto/quick/qquickstates/tst_qquickstates.cpp | 11 ----------- - 6 files changed, 14 insertions(+), 29 deletions(-) - delete mode 100644 tests/auto/quick/qquickstates/data/trivialWhen.qml - -diff --git a/src/quick/util/qquickstate.cpp b/src/quick/util/qquickstate.cpp -index b67de72105..685d0df716 100644 ---- a/src/quick/util/qquickstate.cpp -+++ b/src/quick/util/qquickstate.cpp -@@ -192,7 +192,7 @@ bool QQuickState::isNamed() const - bool QQuickState::isWhenKnown() const - { - Q_D(const QQuickState); -- return d->whenKnown; -+ return d->when != nullptr; - } - - /*! -@@ -219,16 +219,15 @@ bool QQuickState::isWhenKnown() const - } - \endqml - */ --bool QQuickState::when() const -+QQmlBinding *QQuickState::when() const - { - Q_D(const QQuickState); -- return d->when; -+ return d->when.data(); - } - --void QQuickState::setWhen(bool when) -+void QQuickState::setWhen(QQmlBinding *when) - { - Q_D(QQuickState); -- d->whenKnown = true; - d->when = when; - if (d->group) - d->group->updateAutoState(); -diff --git a/src/quick/util/qquickstate_p.h b/src/quick/util/qquickstate_p.h -index a6c3f68bb1..292fa431f0 100644 ---- a/src/quick/util/qquickstate_p.h -+++ b/src/quick/util/qquickstate_p.h -@@ -157,7 +157,7 @@ class Q_QUICK_PRIVATE_EXPORT QQuickState : public QObject - Q_OBJECT - - Q_PROPERTY(QString name READ name WRITE setName) -- Q_PROPERTY(bool when READ when WRITE setWhen) -+ Q_PROPERTY(QQmlBinding *when READ when WRITE setWhen) - Q_PROPERTY(QString extend READ extends WRITE setExtends) - Q_PROPERTY(QQmlListProperty changes READ changes) - Q_CLASSINFO("DefaultProperty", "changes") -@@ -173,9 +173,11 @@ public: - void setName(const QString &); - bool isNamed() const; - -+ /*'when' is a QQmlBinding to limit state changes oscillation -+ due to the unpredictable order of evaluation of bound expressions*/ - bool isWhenKnown() const; -- bool when() const; -- void setWhen(bool); -+ QQmlBinding *when() const; -+ void setWhen(QQmlBinding *); - - QString extends() const; - void setExtends(const QString &); -diff --git a/src/quick/util/qquickstate_p_p.h b/src/quick/util/qquickstate_p_p.h -index d75cfc32ee..2eea67f644 100644 ---- a/src/quick/util/qquickstate_p_p.h -+++ b/src/quick/util/qquickstate_p_p.h -@@ -201,13 +201,12 @@ class QQuickStatePrivate : public QObjectPrivate - - public: - QQuickStatePrivate() -- : when(false), whenKnown(false), named(false), inState(false), group(nullptr) {} -+ : named(false), inState(false), group(nullptr) {} - - typedef QList SimpleActionList; - - QString name; -- bool when; -- bool whenKnown; -+ QQmlBinding::Ptr when; - bool named; - - struct OperationGuard : public QQmlGuard -diff --git a/src/quick/util/qquickstategroup.cpp b/src/quick/util/qquickstategroup.cpp -index b86333943c..e7d456cb02 100644 ---- a/src/quick/util/qquickstategroup.cpp -+++ b/src/quick/util/qquickstategroup.cpp -@@ -376,9 +376,10 @@ bool QQuickStateGroupPrivate::updateAutoState() - QQuickState *state = states.at(ii); - if (state->isWhenKnown()) { - if (state->isNamed()) { -- if (state->when()) { -+ if (state->when() && state->when()->evaluate().toBool()) { - if (stateChangeDebug()) -- qWarning() << "Setting auto state due to expression"; -+ qWarning() << "Setting auto state due to:" -+ << state->when()->expression(); - if (currentState != state->name()) { - q->setState(state->name()); - return true; -diff --git a/tests/auto/quick/qquickstates/data/trivialWhen.qml b/tests/auto/quick/qquickstates/data/trivialWhen.qml -deleted file mode 100644 -index 9f7f3161e9..0000000000 ---- a/tests/auto/quick/qquickstates/data/trivialWhen.qml -+++ /dev/null -@@ -1,5 +0,0 @@ --import QtQuick 2.12 -- --State { -- when: true --} -diff --git a/tests/auto/quick/qquickstates/tst_qquickstates.cpp b/tests/auto/quick/qquickstates/tst_qquickstates.cpp -index cbc36ad1b5..12890a24d7 100644 ---- a/tests/auto/quick/qquickstates/tst_qquickstates.cpp -+++ b/tests/auto/quick/qquickstates/tst_qquickstates.cpp -@@ -198,7 +198,6 @@ private slots: - void QTBUG_38492(); - void revertListMemoryLeak(); - void duplicateStateName(); -- void trivialWhen(); - void parentChangeCorrectReversal(); - void revertNullObjectBinding(); - void bindableProperties(); -@@ -1692,16 +1691,6 @@ void tst_qquickstates::duplicateStateName() - QVERIFY(!item.isNull()); - } - --// QTBUG-76838 --void tst_qquickstates::trivialWhen() --{ -- QQmlEngine engine; -- -- QQmlComponent c(&engine, testFileUrl("trivialWhen.qml")); -- QScopedPointer root(c.create()); -- QVERIFY(root); --} -- - void tst_qquickstates::parentChangeCorrectReversal() - { - QQmlEngine engine; diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/0002-Revert-Don-t-hide-the-inputMethod-when-finishing-the.patch b/meta-webos/recipes-qt/qt6/qtdeclarative/0002-Revert-Don-t-hide-the-inputMethod-when-finishing-the.patch index afc8cf1bd..45615fac7 100644 --- a/meta-webos/recipes-qt/qt6/qtdeclarative/0002-Revert-Don-t-hide-the-inputMethod-when-finishing-the.patch +++ b/meta-webos/recipes-qt/qt6/qtdeclarative/0002-Revert-Don-t-hide-the-inputMethod-when-finishing-the.patch @@ -1,4 +1,4 @@ -From 7fff5212e03134f1a76a81219f1abe95dd790394 Mon Sep 17 00:00:00 2001 +From eef03385338dc2b40b2bd5ed86d6c6150bcbe677 Mon Sep 17 00:00:00 2001 From: Beomjoong Yun Date: Wed, 9 Jun 2021 15:41:43 +0900 Subject: [PATCH] Revert "Don't hide the inputMethod when finishing the edit" @@ -13,10 +13,10 @@ Upstream-Status: Inappropriate [webOS specific] 1 file changed, 2 insertions(+) diff --git a/src/quick/items/qquicktextinput.cpp b/src/quick/items/qquicktextinput.cpp -index f0cb66fa40..e0adac786b 100644 +index 42720c6753..7f45e938b6 100644 --- a/src/quick/items/qquicktextinput.cpp +++ b/src/quick/items/qquicktextinput.cpp -@@ -4417,6 +4417,8 @@ void QQuickTextInputPrivate::processKeyEvent(QKeyEvent* event) +@@ -4424,6 +4424,8 @@ void QQuickTextInputPrivate::processKeyEvent(QKeyEvent* event) QInputMethod *inputMethod = QGuiApplication::inputMethod(); inputMethod->commit(); @@ -25,6 +25,3 @@ index f0cb66fa40..e0adac786b 100644 if (activeFocus) { // If we lost focus after hiding the virtual keyboard, we've already emitted --- -2.17.1 - diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend index 30116765a..fa4400ae0 100644 --- a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend @@ -1,8 +1,8 @@ -# Copyright (c) 2014-2021 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. inherit webos_qt_global -EXTENDPRAUTO_append = "webos75" +EXTENDPRAUTO_append = "webos76" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" @@ -10,14 +10,18 @@ FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" WEBOS_PATCH_SRCREV = "00c352c4d4b61f8c7a6243768bc5375c3dca3e76" PATCHTOOL = "git" -# Upstream-Status: Backport, Submitted -SRC_URI_append_class-target = " \ +# Upstream-Status: Backport +SRC_URI_append = " \ + file://0001-Correctly-handle-QQuickState-when.patch;maxver=6.2.3 \ +" + +# Upstream-Status: Submitted +SRC_URI_append = " \ file://0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch;rev=${WEBOS_PATCH_SRCREV} \ " # Upstream-Status: Inappropriate SRC_URI_append = " \ - file://0001-Revert-use-boolean-for-when-property.patch;rev=${WEBOS_PATCH_SRCREV} \ file://0002-Revert-Don-t-hide-the-inputMethod-when-finishing-the.patch;rev=${WEBOS_PATCH_SRCREV} \ " diff --git a/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend b/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend index 9028d6b9c..edab715e5 100644 --- a/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend @@ -2,7 +2,7 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos27" +EXTENDPRAUTO_append = "webos28" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" @@ -11,7 +11,7 @@ PATCHTOOL = "git" # Upstream-Status: Backport SRC_URI_append = " \ file://0001-Support-presentation-time-protocol.patch;maxver=6.2.* \ - file://0002-Use-scope-resolution-operator-for-request.patch \ + file://0002-Use-scope-resolution-operator-for-request.patch;maxver=6.2.* \ " # More options for fine-tuned configuration From 7776d1e2d9d06b317800162823521c46aa4ab64c Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Tue, 4 Jan 2022 19:26:57 +0900 Subject: [PATCH 0265/2022] qtbase=webos98 (drop workaround for old g++) :Release Notes: Remove workaround patches for g++ 7.5. :Detailed Notes: qtbase=webos98 Drop workaround patches below as we have upgraded g++ to the version required for building Qt 6. 0001-Fix-compile-error-with-g-7.5.0.patch 0002-Revert-commits-causing-a-compile-error-with-g-7.patch :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: [WRN-17385] CCC: qtbase=webos98 (drop workaround for old g++) Refer to the CCC JIRA ticket for related issues. Change-Id: I3ae927da997ea8bd8a1f4818d3edde845b88e0bb --- .../0001-Fix-compile-error-with-g-7.5.0.patch | 40 -------- ...its-causing-a-compile-error-with-g-7.patch | 95 ------------------- meta-webos/recipes-qt/qt6/qtbase_git.bbappend | 8 +- 3 files changed, 1 insertion(+), 142 deletions(-) delete mode 100644 meta-webos/recipes-qt/qt6/qtbase/0001-Fix-compile-error-with-g-7.5.0.patch delete mode 100644 meta-webos/recipes-qt/qt6/qtbase/0002-Revert-commits-causing-a-compile-error-with-g-7.patch diff --git a/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-compile-error-with-g-7.5.0.patch b/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-compile-error-with-g-7.5.0.patch deleted file mode 100644 index bfd0543d0..000000000 --- a/meta-webos/recipes-qt/qt6/qtbase/0001-Fix-compile-error-with-g-7.5.0.patch +++ /dev/null @@ -1,40 +0,0 @@ -From 560baf686515dcacd94dbc26895a974048dcc308 Mon Sep 17 00:00:00 2001 -From: Hyungchan Kim -Date: Wed, 26 May 2021 17:45:05 +0900 -Subject: [PATCH] Fix compile error with g++ 7.5.0 - -This fixes a few compilation errors in a host that has g++ 7.5.0. -There is no fix from upstream as 8.1 is the minimum gcc version of Qt. - -Upstream-Status : Inappropriate [workaround] ---- - src/corelib/kernel/qproperty_p.h | 2 +- - src/corelib/time/qdatetime.cpp | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/corelib/kernel/qproperty_p.h b/src/corelib/kernel/qproperty_p.h -index 71f4f9f5e9..1bf3d490f1 100644 ---- a/src/corelib/kernel/qproperty_p.h -+++ b/src/corelib/kernel/qproperty_p.h -@@ -551,7 +551,7 @@ public: - if (!inBindingWrapper(storage)) - notify(bd); - } -- if constexpr (Signal != nullptr) { -+ if constexpr (!std::is_same_v) { - if constexpr (SignalTakesValue::value) - (owner()->*Signal)(value()); - else -diff --git a/src/corelib/time/qdatetime.cpp b/src/corelib/time/qdatetime.cpp -index f0841ca853..98e20ae921 100644 ---- a/src/corelib/time/qdatetime.cpp -+++ b/src/corelib/time/qdatetime.cpp -@@ -4000,7 +4000,7 @@ void QDateTime::setMSecsSinceEpoch(qint64 msecs) - status |= QDateTimePrivate::ValidWhenMask; - break; - case Qt::OffsetFromUTC: -- if (!add_overflow(msecs, d->m_offsetFromUtc * MSECS_PER_SEC, &msecs)) -+ if (!add_overflow(msecs, qint64(d->m_offsetFromUtc * MSECS_PER_SEC), &msecs)) - status |= QDateTimePrivate::ValidWhenMask; - break; - case Qt::TimeZone: diff --git a/meta-webos/recipes-qt/qt6/qtbase/0002-Revert-commits-causing-a-compile-error-with-g-7.patch b/meta-webos/recipes-qt/qt6/qtbase/0002-Revert-commits-causing-a-compile-error-with-g-7.patch deleted file mode 100644 index 588679706..000000000 --- a/meta-webos/recipes-qt/qt6/qtbase/0002-Revert-commits-causing-a-compile-error-with-g-7.patch +++ /dev/null @@ -1,95 +0,0 @@ -From 6062916b3c9537745be032eb8d218593f9ff490a Mon Sep 17 00:00:00 2001 -From: Jaeyoon Jung -Date: Mon, 25 Oct 2021 09:53:13 +0900 -Subject: [PATCH] Revert commits causing a compile error with g++ 7 - -This reverts commit 7fcae4e1b51d8a9d1ba65fb1ade240ae8b204980, -"Fix compilation error with MSVC 2019 and C++20" -and commit 8359615cf984ed84ab358570c6a0ab0344de7b0c, -"QRegularExpression: fix matching over null/empty QString(View)" -as they cause a compile error with g++ 7. See also -https://gcc.gnu.org/bugzilla/show_bug.cgi?id=53157 - -Upstream-Status : Inappropriate [workaround] ---- - src/corelib/text/qregularexpression.cpp | 16 ++---------- - .../tst_qregularexpression.cpp | 25 ++----------------- - 2 files changed, 4 insertions(+), 37 deletions(-) - -diff --git a/src/corelib/text/qregularexpression.cpp b/src/corelib/text/qregularexpression.cpp -index b0728bca4a..e61d77f0b7 100644 ---- a/src/corelib/text/qregularexpression.cpp -+++ b/src/corelib/text/qregularexpression.cpp -@@ -1180,19 +1180,7 @@ void QRegularExpressionPrivate::doMatch(QRegularExpressionMatchPrivate *priv, - pcre2_jit_stack_assign_16(matchContext, &qtPcreCallback, nullptr); - pcre2_match_data_16 *matchData = pcre2_match_data_create_from_pattern_16(compiledPattern, nullptr); - -- // PCRE does not accept a null pointer as subject string, even if -- // its length is zero. We however allow it in input: a QStringView -- // subject may have data == nullptr. In this case, to keep PCRE -- // happy, pass a pointer to a dummy character. -- const char16_t dummySubject = 0; -- const char16_t * const subjectUtf16 = [&]() -- { -- const auto subjectUtf16 = priv->subject.utf16(); -- if (subjectUtf16) -- return subjectUtf16; -- Q_ASSERT(subjectLength == 0); -- return &dummySubject; -- }(); -+ const char16_t * const subjectUtf16 = priv->subject.utf16(); - - int result; - -@@ -1628,7 +1616,7 @@ QRegularExpressionMatch QRegularExpression::match(const QString &subject, - d.data()->compilePattern(); - auto priv = new QRegularExpressionMatchPrivate(*this, - subject, -- QStringView(subject), -+ qToStringViewIgnoringNull(subject), - matchType, - matchOptions); - d->doMatch(priv, offset); -diff --git a/tests/auto/corelib/text/qregularexpression/tst_qregularexpression.cpp b/tests/auto/corelib/text/qregularexpression/tst_qregularexpression.cpp -index 48d4de0aa4..f2fe382521 100644 ---- a/tests/auto/corelib/text/qregularexpression/tst_qregularexpression.cpp -+++ b/tests/auto/corelib/text/qregularexpression/tst_qregularexpression.cpp -@@ -252,11 +252,8 @@ void consistencyCheck(const QRegularExpressionMatch &match) - QVERIFY((endPos - startPos) == length); - QVERIFY(captured == capturedView); - } else { -- // A null capture can either mean no capture at all, -- // or capture of length 0 over a null subject. -- QVERIFY(startPos == endPos); -- QVERIFY(((startPos == -1) && (endPos == -1)) // no capture -- || ((startPos == 0) && (endPos == 0))); // null subject -+ QVERIFY(startPos == -1); -+ QVERIFY(endPos == -1); - QVERIFY((endPos - startPos) == length); - QVERIFY(capturedView.isNull()); - } -@@ -863,24 +860,6 @@ void tst_QRegularExpression::normalMatch_data() - << QRegularExpression::MatchOptions(QRegularExpression::NoMatchOption) - << m; - -- m.clear(); -- m.isValid = true; m.hasMatch = true; -- m.captured << QString(); -- QTest::newRow("empty-in-null-string") << QRegularExpression("") -- << QString() -- << qsizetype(0) -- << QRegularExpression::MatchOptions(QRegularExpression::NoMatchOption) -- << m; -- -- m.clear(); -- m.isValid = true; m.hasMatch = true; -- m.captured << QString(""); -- QTest::newRow("empty-in-empty-string") << QRegularExpression("") -- << QString("") -- << qsizetype(0) -- << QRegularExpression::MatchOptions(QRegularExpression::NoMatchOption) -- << m; -- - // non existing names for capturing groups - m.clear(); - m.isValid = true; m.hasMatch = true; diff --git a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend index 37679a813..31764c802 100644 --- a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend @@ -2,7 +2,7 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos97" +EXTENDPRAUTO_append = "webos98" # Remove LGPL3-only files python do_patch_append() { @@ -94,12 +94,6 @@ SRC_URI_append = " \ SRC_URI_append = " \ file://9901-Disable-Faux-bolding-in-Qts-FreeType-FontEngine.patch;rev=${WEBOS_PATCH_SRCREV} \ " -# TODO: qtbase-native fails to build with g++ from hosttools(7.5.0) -# Drop this once our build host has a newer version of g++. -SRC_URI_append_class-native = " \ - file://0001-Fix-compile-error-with-g-7.5.0.patch;rev=${WEBOS_PATCH_SRCREV} \ - file://0002-Revert-commits-causing-a-compile-error-with-g-7.patch;rev=${WEBOS_PATCH_SRCREV} \ -" # Flags needed for webOS TARGET_CXXFLAGS_append = " \ From 1b2d78af743ba9100866ce5cc244778dfe884cf3 Mon Sep 17 00:00:00 2001 From: "p.dinesh" Date: Mon, 21 Feb 2022 16:36:28 +0530 Subject: [PATCH 0266/2022] ose: com.webos.app.notification=11 :Release Notes: Make xmlhttprequest when app is in foreground :Detailed Notes: com.webos.app.notification: submissions/10..submissions/11 0faba2e Fix for Alert not displayed :Testing Performed: Please see the CLM Ticket WRN-17680 :QA Notes: NA :Issues Addressed: [WRN-17680] CCC: com.webos.app.notification=11 [WRN-15752] [OSE-RPi4]-Ticket created pop up not displayed. Change-Id: Ia1df99f6267340f47a87328b11a63eb347f2cf16 --- .../com.webos.app.notification/com.webos.app.notification.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb b/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb index 4e9bea697..76646eb95 100644 --- a/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb +++ b/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "General System Launcher application" AUTHOR = "Kiho Choi" @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=0ec407cd2d4a192e0c60888f4ec66dd7 \ " -WEBOS_VERSION = "0.1.0-10_7051c25b964cc1d44778f77992de066078035ba5" +WEBOS_VERSION = "0.1.0-11_94cf9d3ef58e06231f2637ba8eef4a8af6ccf7b8" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" PR = "r1" From 7deabfa7197b89c94565c4ae616b5409a95eb4cf Mon Sep 17 00:00:00 2001 From: "mark.yang" Date: Tue, 22 Feb 2022 12:13:04 +0900 Subject: [PATCH 0267/2022] ose: rpi-u-boot-scr=webosrpi3 :Release Notes: Add guidance for nfs boot. :Detailed Notes: Details in here http://collab.lge.com/main/display/SDES/04.+webOS+OSE+NFS+Boot :Testing Performed: Local test suite :QA Notes: NA :Issues Addressed: [WRN-17440] Support automated webOS OSE NFS Boot Change-Id: Ieccc484f483af5740eb6d25f7569138b03b0cd76 --- .../rpi-u-boot-scr/files/uEnv.sota.txt.in | 17 +++++++++++++++-- .../rpi-u-boot-scr/rpi-u-boot-scr.bbappend | 4 ++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/meta-webos-raspberrypi/recipes-bsp/rpi-u-boot-scr/files/uEnv.sota.txt.in b/meta-webos-raspberrypi/recipes-bsp/rpi-u-boot-scr/files/uEnv.sota.txt.in index d829a5753..7363cf219 100644 --- a/meta-webos-raspberrypi/recipes-bsp/rpi-u-boot-scr/files/uEnv.sota.txt.in +++ b/meta-webos-raspberrypi/recipes-bsp/rpi-u-boot-scr/files/uEnv.sota.txt.in @@ -2,13 +2,26 @@ bootcmd_resetvars=setenv kernel_image; setenv bootargs; setenv kernel_image2; se bootcmd_otenv=run bootcmd_resetvars; load mmc 0:2 $loadaddr /boot/loader/uEnv.txt; env import -t $loadaddr $filesize bootcmd_rollbackenv=setenv kernel_image ${kernel_image2}; setenv bootargs ${bootargs2} +# =========== BEGIN: rootfs as '/dev/mmblk0p2' =========== # +## Warn: If you want to use nfs, please comment out this block bootcmd_args_fdt=fdt addr ${fdt_addr} && fdt get value bootargs_fdt /chosen bootargs bootcmd_args=setenv bootargs "$bootargs $bootargs_fdt ostree_root=/dev/mmcblk0p2 root=/dev/ram0 rw rootwait rootdelay=2 ramdisk_size=8192 panic=1" +bootcmd_load=load mmc 0:2 $kernel_addr_r "/boot"$kernel_image; load mmc 0:2 $ramdisk_addr_r "/boot"$ramdisk_image +bootcmd_run=@@KERNEL_BOOTCMD@@ ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr} +# =========== END: rootfs as '/dev/mmblk0p2' ============= # + +# =========== BEGIN: rootfs via NFS ====================== # +## Warn: Fill in NFS Server IP at , rootfs path at in the bootargs +## In my case, NFS Server: 10.177.xxx.xx and It exports /nfs/client1 for rootfs, so that nfsroot=10.177.xxx.xx:/nfs/client1 +## You can get the rootfs for nfs from official build artifacts at fileserver as .tar.bz2 +#bootcmd_args_fdt=fdt addr ${fdt_addr} +#bootcmd_args=setenv bootargs "earlyprintk dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/nfs rootfstype=nfs nfsroot=:,v3,tcp ip=dhcp rootwait noinitrdit" +#bootcmd_load=load mmc 0:2 $kernel_addr_r "/boot"$kernel_image +#bootcmd_run=booti ${kernel_addr_r} - ${fdt_addr} +# =========== END: rootfs via NFS ======================== # bootcmd_getroot=setexpr ostree_root gsub "^.*ostree=([^ ]*).*$" "\\\\1" "${bootargs}"; -bootcmd_load=load mmc 0:2 $kernel_addr_r "/boot"$kernel_image; load mmc 0:2 $ramdisk_addr_r "/boot"$ramdisk_image -bootcmd_run=@@KERNEL_BOOTCMD@@ ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr} bootcmd_create_envfile=if test ! -e mmc 0:1 uboot.env; then saveenv; fi; diff --git a/meta-webos-raspberrypi/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bbappend b/meta-webos-raspberrypi/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bbappend index 3774f1bc7..96d61c92f 100644 --- a/meta-webos-raspberrypi/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bbappend +++ b/meta-webos-raspberrypi/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bbappend @@ -1,6 +1,6 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosrpi2" +EXTENDPRAUTO_append = "webosrpi3" FILESEXTRAPATHS_prepend := "${THISDIR}/files:" From 3ccf552285de65f57949b0e18c50949ba16e3b60 Mon Sep 17 00:00:00 2001 From: Myungchul Kim Date: Fri, 25 Feb 2022 13:38:23 +0900 Subject: [PATCH 0268/2022] com.webos.service.swupdater=0 webos-fluentbit-plugins=29 :Release Notes: Remove com.webos.service.swupdater Add input simulator in fluentbit plugins :Detailed Notes: Remove the service as all APIs are retired. webos-fluentbit-plugins: submissions/27..submissions/29 79cb182 webos_issue.py: set default components to PM 1922f09 Add input_simulator supporting capture and playback modes :Testing Performed: See the CCC jira ticket :QA Notes: N/A :Issues Addressed: [WRN-18267] CCC: com.webos.service.swupdater=0 webos-fluentbit-plugins=29 [WRN-14423] Implement input simulator for input record and play Change-Id: Ib1f5d5ddddefb73848f0e5e2226a7453a1778947 --- .../packagegroup-webos-extended.bb | 1 - .../com.webos.service.swupdater.bb | 32 ------------------- .../webos-fluentbit-plugins.bb | 2 +- 3 files changed, 1 insertion(+), 34 deletions(-) delete mode 100644 meta-webos/recipes-webos/com.webos.service.swupdater/com.webos.service.swupdater.bb diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index 2a59ef78f..3150ecf65 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -233,7 +233,6 @@ RDEPENDS_${PN}_append_webos = " \ com.webos.app.imageviewer \ com.webos.app.videoplayer \ com.webos.service.storageaccess \ - com.webos.service.swupdater \ com.webos.service.uwb \ gssdp \ gupnp \ diff --git a/meta-webos/recipes-webos/com.webos.service.swupdater/com.webos.service.swupdater.bb b/meta-webos/recipes-webos/com.webos.service.swupdater/com.webos.service.swupdater.bb deleted file mode 100644 index 8a7d480af..000000000 --- a/meta-webos/recipes-webos/com.webos.service.swupdater/com.webos.service.swupdater.bb +++ /dev/null @@ -1,32 +0,0 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. - -DESCRIPTION = "webOS update agent" -AUTHOR = "Sangwoo Kang " -SECTION = "webos/daemon" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2714381d01eb5a6e963e62a212e277be \ -" - -DEPENDS = "curl glib-2.0 libpbnjson luna-service2 pmloglib" - -WEBOS_VERSION = "1.0.0-23_e00bf9b9fb23241b0f4dce06ca5a787932f04bee" -PR = "r3" - -inherit webos_cmake -inherit webos_component -inherit webos_daemon -inherit webos_enhanced_submissions -inherit webos_public_repo -inherit webos_system_bus - -SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" -S = "${WORKDIR}/git" - -PACKAGECONFIG ??= "ostree" -PACKAGECONFIG[ostree] = "-DLIBOSTREE=ON,-DLIBOSTREE=OFF,ostree" - -EXTRA_OECMAKE = "\ - -DHAWKBIT_ADDRESS=http://10.178.84.116:8080 \ - -DHAWKBIT_TOKEN=377b83e10b9f894883e98351875151cb \ -" diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb index 6d4570471..c0ebbfc50 100644 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "glib-2.0 luna-service2 libpbnjson fluentbit" RDEPENDS_${PN} = "nyx-utils python3-core python3-requests python3-atlassian-python-api" -WEBOS_VERSION = "1.0.0-27_e1ff73fdbb0ca15942759dd06cafcc09e82f7650" +WEBOS_VERSION = "1.0.0-29_8fe0afaa9acc8cfaa7eb2598f843fe7d95061b12" PR = "r3" inherit webos_component From 1e6a5186ca4a3a6c3b5eb92c563b8cdf1b688cc6 Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Wed, 2 Mar 2022 16:09:45 +0900 Subject: [PATCH 0269/2022] ilib-webapp=21,v14.13.0 enact-framework=r18 :Release Notes: Update iLib version as 14.13.0. Update iLib to apply correct default clock for CN :Detailed Notes: Updated iLib version as 14.13.0. (https://github.com/iLib-js/iLib/releases). Applied cldr40 change correctly regarding default clock for CN Added new unit types for power, pressure, and force includes unit conversion and formatting ilib-webapp: submissions/20..submissions/21 6736c67 Sync up iLib 14.13.0 enact-framework: r17..r18 Updated Enact's corresponding iLib dependency :Testing Performed: See jira ticket for results. :QA Notes: N/A :Issues Addressed: [WRN-5903] Update iLib to apply correct default clock for CN [WRN-17851] CCC: ilib-webapp=21,v14.13.0 enact-framework=r18 Change-Id: Ibacfb89bc153d7ff8a9b0abce89c8678626fe8b6 --- meta-webos/recipes-webos/enactjs-apps/enact-framework.bb | 4 ++-- meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb index dc7e897e7..c6bade5d4 100644 --- a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb +++ b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb @@ -36,7 +36,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ direction@1.0.4 \ dom-walk@0.1.2 \ global@4.4.0 \ - ilib@14.12.0 \ + ilib@14.13.0 \ invariant@2.2.4 \ is-function@1.0.2 \ js-tokens@4.0.0 \ @@ -59,7 +59,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ # NOTE: We only need to bump PR if we change something OTHER than # PV, SRCREV or the dependencies statement above. -PR = "r17" +PR = "r18" # Skip unneeded tasks do_configure[noexec] = "1" diff --git a/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb b/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb index 8ccecebd6..12f7b7aa3 100644 --- a/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb +++ b/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=be4f2e45a1215076318af43f833aa178 \ " -WEBOS_VERSION = "14.12.0-20_bad63708db54e590cd9cf3ec49c7ab53d9cf7c34" +WEBOS_VERSION = "14.13.0-21_c160f6c44dc29143410d0c7fbb68c9b33caeadf8" PR = "r8" inherit webos_arch_indep From 2b7ae7b7b8e21586b85a0dfa9e9aa16984951a58 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Wed, 2 Mar 2022 13:48:35 +0900 Subject: [PATCH 0270/2022] ose: webruntime_91=12 :Release Notes: - glibc-2.34 build fixes - Popup blocker for Enact browser :Detailed Notes: webruntime_91: submissions/11..submissions/12 2e1baa2ffd [op][n_upsable][app_shell] PopUp blocker feature using JS Injection 5b3a3e0bcc [op][n_upsable][app_shell] Implement site filter using JS Injection f06876e1c3 [op][n_upsable][app_shell] Implement URLDatabase using sqlite 6b29edc477 [op][upsable][build] breakpad: fix build with glibc-2.34 91cab725d2 [op][ups][build] abseil-cpp: fix build with glibc-2.34 :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-4171] Implement all functionalities of allowURLDatabase from shell_content_browser_client.cc [WRN-7277] WebView interface implementation for SiteFilter feature [WRN-662] Implement popup block feature functionality [WRN-18202] CCC: webruntime_91={ose:12 pro:pro.17} Change-Id: Ie5656acb2269abb5059b0e8a49aba6813929a676 --- meta-webos/recipes-webos/chromium/webruntime-repo_91.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc index 7fa5e60d8..773058128 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=c31f1ae166739be9ca186deacf4b32e4" WEBOS_REPO_NAME = "chromium91" -WEBOS_VERSION = "91.0.4472.114-11_4f9259097dfad39ce048ee21a33abd4defbe3c01" +WEBOS_VERSION = "91.0.4472.114-12_49e8b3dd250a71fb8953bfec39956fd3f5479d73" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" From 746d031652790aa3dd9b2761fca8dc73505aa8ac Mon Sep 17 00:00:00 2001 From: Hyungchan Kim Date: Wed, 23 Feb 2022 16:56:33 +0900 Subject: [PATCH 0271/2022] luna-surfacemanager=368-r54 :Release Notes: Support unit test with gcov coverage :Detailed Notes: luna-surfacemanager: submissions/367..submissions/368 0aba8d2 Allow to access surface group members 90e87a2 Custom inputManager creation a5ad58c Fix problem in installing generated private headers e187720 Export VideoOutputdCommunicator and VideoWindowInformer 7afd2c7 Allow overriding WebOSForeign and WebOSExported and WebOSImported luna-surfacemanager=r54 Add luna-surfacemanager-gcov package :Testing Performed: See the CCC JIRA ticket :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRN-18564] CCC: luna-surfacemanager=368-r54 Change-Id: Ia45638f87b21ec927d7006107111c9e5201c72fb --- .../luna-surfacemanager/luna-surfacemanager.bb | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index 7b43df2a1..ed0afe342 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,8 +11,8 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0 qtwayland-webos" -WEBOS_VERSION = "2.0.0-367_b14e03da1678f7d9380aaf17c7ff5f3cfcf4cce7" -PR = "r53" +WEBOS_VERSION = "2.0.0-368_bbcf324c6b91dcfb932d1a87ecb61d3f22318890" +PR = "r54" inherit webos_qmake6 inherit webos_pkgconfig @@ -45,8 +45,16 @@ do_install_append() { install -d ${D}${datadir}/webos-keymap ${STAGING_DIR_NATIVE}${OE_QMAKE_PATH_QT_BINS}/generate_qmap ${D}${datadir}/webos-keymap/webos-keymap.qmap fi + + if ${@bb.utils.contains('IMAGE_FEATURES', 'webos-test', 'true', 'false', d)}; then + mkdir -p ${D}${libdir}/${BPN} + find ${B} -name \*.gcno -exec cp -t ${D}${libdir}/${BPN} {} \; + fi } +TARGET_CXXFLAGS_append = " ${@bb.utils.contains('IMAGE_FEATURES', 'webos-test', '--coverage -fprofile-dir=/tmp/luna-surfacemanager-gcov -O0', '', d)}" +TARGET_LDFLAGS_append = " ${@bb.utils.contains('IMAGE_FEATURES', 'webos-test', '--coverage', '', d)}" + VIRTUAL-RUNTIME_gpu-libs ?= "" RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_gpu-libs}" @@ -67,6 +75,12 @@ PACKAGECONFIG[cursor-theme] = "CONFIG+=cursor_theme,," PACKAGECONFIG_webos = "compositor cursor-theme" +PACKAGE_BEFORE_PN = "${PN}-gcov" + +FILES_${PN}-gcov = " \ + ${libdir}/${BPN}/*.gcno \ +" + PACKAGES =+ "${PN}-conf ${PN}-base ${PN}-base-tests" FILES_${PN}-conf += " \ From e58055b0b4c3080b32fcd9c339de1f3189d45709 Mon Sep 17 00:00:00 2001 From: "paramesh.kuberappa" Date: Mon, 7 Mar 2022 14:22:24 +0530 Subject: [PATCH 0272/2022] com.webos.service.mediaindexer=19 :Release Notes: Fix Thumbnail generation issue for video in USB :Detailed Notes: com.webos.service.mediaindexer: submissions/17..submissions/19 5d9b07d Fix coverity issues for mediaindexer component 5818214 Fix Thumbnail generation issue in OSE :Testing Performed: Test results are updated in WRN-18606 :QA Notes: NA :Issues Addressed: [WRN-18606] CCC: com.webos.service.mediaindexer=19 [WRN-15587] [OSE-RPi4] :Thumbnails are not displayed for few videos [WRN-17999] Fix Coverity Issues for MediaIndexer component in OSE Change-Id: I05d8684bcf321abfa1990b2784abbff4080cadeb --- .../com.webos.service.mediaindexer.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb b/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb index 852aa05b2..bfafc5cd4 100644 --- a/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb +++ b/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2021 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. SUMMARY = "Media indexer service" AUTHOR = "Jaehoon Lee " @@ -7,7 +7,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " -WEBOS_VERSION = "1.0.0-17_fc620525ae820a32bd6c2e7d2e3be8007d3ac328" +WEBOS_VERSION = "1.0.0-19_da31ffd538555aec12529dea813257a2ee7c0c21" PR = "r8" inherit webos_component From 27c16993462ac448150c11848f69056b5be35430 Mon Sep 17 00:00:00 2001 From: "mark.yang" Date: Wed, 23 Feb 2022 18:24:51 +0900 Subject: [PATCH 0273/2022] pkg_dependency.bbclass: Add more package information :Release Notes: :Detailed Notes: 'recipe' indicates which recipe created this package. 'install_file' shows installed files from this package. and 'license' and 'section' of this package had been added. :Testing Performed: Local test suite :QA Notes: N/A :Issues Addressed: [WRN-17702] Add more package information in dependency.json Change-Id: I417f1a7c188fd566492b4f5da0aaea534a651900 --- meta-webos/classes/pkg_dependency.bbclass | 47 ++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/meta-webos/classes/pkg_dependency.bbclass b/meta-webos/classes/pkg_dependency.bbclass index db2bcb82d..ee392fe69 100644 --- a/meta-webos/classes/pkg_dependency.bbclass +++ b/meta-webos/classes/pkg_dependency.bbclass @@ -1,11 +1,51 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. # Write package dependency data as a json file python create_pkg_dependency_data () { from oe.rootfs import image_list_installed_packages + import os import subprocess import json + rootfs_dir = d.getVar('IMAGE_ROOTFS') + ipkconf_target = d.getVar('IPKGCONF_TARGET') + + def initOpkgInfoFromIpkConf(): + with open(ipkconf_target, 'r', encoding='utf-8') as ipkconf_fd: + ipk_info_dir = '' + for var in ipkconf_fd: + if var.startswith('option info_dir'): + opkg_info_path = rootfs_dir + var.strip().split()[-1] + break + if not os.path.exists(opkg_info_path): + bb.fatal("[ERROR] Cannot find opkg info directory while creating package info data.") + return opkg_info_path + + opkg_info_path = initOpkgInfoFromIpkConf() + + def getInfo(pkg, key): + key_match_val=dict({'recipe': 'Source', 'license': 'License', 'section': 'Section'}) + pkg_control = os.path.join(opkg_info_path, f'{pkg}.control') + if not os.path.exists(pkg_control): + bb.warn(f"[WARN] There isn\'t {pkg}.control, couldn\'t get {key} of {pkg}") + else: + with open(pkg_control, 'r', encoding='utf-8') as pkg_control_fd: + for var in pkg_control_fd: + if var.startswith(key_match_val[key]): + return var.strip().split(':')[-1].strip() + + def getInstall_files(pkg): + pkg_list = os.path.join(opkg_info_path, f'{pkg}.list') + if not os.path.exists(pkg_list): + bb.warn(f"[WARN] There isn\'t {pkg}.list, couldn\'t get install_files from {pkg}") + else: + pkg_list_fd = open(pkg_list, 'r', encoding='utf-8') + file_list=list() + for var in pkg_list_fd: + file_list.append(var.strip().split()[0]) + pkg_list_fd.close() + return file_list + output = dict() installed_packages = image_list_installed_packages(d) @@ -29,6 +69,11 @@ python create_pkg_dependency_data () { output[pkg].update({"version":val["ver"]}) output[pkg].update({"arch":val["arch"]}) output[pkg].update({"ipk":val["filename"]}) + + output[pkg]['recipe'] = getInfo(pkg,'recipe') + output[pkg]['license'] = getInfo(pkg,'license') + output[pkg]['section'] = getInfo(pkg,'section') + output[pkg]['install_file'] = getInstall_files(pkg) for dep in val["deps"]: if '[REC]' in dep: if output.get(dep.split()[0]): From 16c35bbd49d83c0ae267edd3474b01d236ad4889 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Fri, 4 Mar 2022 15:42:52 +0900 Subject: [PATCH 0274/2022] ose: webruntime_91=13 :Release Notes: Fix Video Play for file name with special characters Fix App title and Icons display :Detailed Notes: webruntime_91: submissions/12..submissions/13 06d44f5ebd fixup! [op][n_upsable][web_security] Check access to local file for media e5142a78ed fixup! [op][n_upsable][media] Fix crash in ForeignVideoWindowProvider e1dda8653e [oe][ds][gpu] Bypass the error when shared image is not cleared :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-16831] App titles and icons are not displayed on screen [WRN-12914] Video is not playing. [WRN-16336] Video is not playing and loading spinner is displayed [WRN-18496] CCC: ose: webruntime_91=13 Change-Id: I29f363c4fd810150ada6f2edbd932bf1a5a2381c --- meta-webos/recipes-webos/chromium/webruntime-repo_91.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc index 773058128..3b25ab569 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=c31f1ae166739be9ca186deacf4b32e4" WEBOS_REPO_NAME = "chromium91" -WEBOS_VERSION = "91.0.4472.114-12_49e8b3dd250a71fb8953bfec39956fd3f5479d73" +WEBOS_VERSION = "91.0.4472.114-13_bf7656914f8cd80cafbf4e90bd21fdaccf795f14" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" From d38db85ee2d279744e6ce77f185b8923f37fca53 Mon Sep 17 00:00:00 2001 From: "sc.heo" Date: Tue, 8 Mar 2022 18:02:48 +0900 Subject: [PATCH 0275/2022] ose: qtbase-plugins-webos=r5 :Release Notes: Disable mouse wheel on touch mode for emulator :Detailed Notes: Disable mouse wheel on touch mode for emulator In emulator, we don't have touch screen and we use mouse as input of both mouse and touch input. So we made 2 mode(mouse mode, touch simulation mode).Default is touch simulation mode. You can change mouse mode via left Alt key. Touch simulation mode means that we covert mouse event into touch event. If we use mouse wheel and touch input together, wheel is not working correctly. So we disable mouse wheel on touch simulation mode, only process mouse wheel on touch mode. :Testing Performed: See CCC ticket for results. :QA Notes: N/A :Issues Addressed: [WRN-18604] CCC: qtbase-plugins-webos=r5 [WRN-17480] [webOS OSE Emulator]Scroll is not functioning after scrolling one display after the other. Change-Id: Ia049edc7faa2d307e43490a88540a17a5d5c4988 --- .../qtbase-plugins-webos.bb | 3 +- ...use-wheel-on-touch-mode-for-emulator.patch | 35 +++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) create mode 100644 meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos/0002-Disable-mouse-wheel-on-touch-mode-for-emulator.patch diff --git a/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb index f6a70e1f2..72e7d86c3 100644 --- a/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb +++ b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb @@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtbase" WEBOS_VERSION = "1.0.0-11_2f4b435c79dc99e5add85cb658a49aff54420faf" -PR = "r4" +PR = "r5" inherit webos_qmake6 inherit webos_enhanced_submissions @@ -31,6 +31,7 @@ PACKAGECONFIG[emulator] = "CONFIG+=emulator,,nyx-lib" PACKAGECONFIG_append_emulator = " emulator" SRC_URI_append_emulator = " \ file://0001-virtual-touch-for-emulator.patch \ + file://0002-Disable-mouse-wheel-on-touch-mode-for-emulator.patch \ " # Multi-plane composition diff --git a/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos/0002-Disable-mouse-wheel-on-touch-mode-for-emulator.patch b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos/0002-Disable-mouse-wheel-on-touch-mode-for-emulator.patch new file mode 100644 index 000000000..b23df9d75 --- /dev/null +++ b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos/0002-Disable-mouse-wheel-on-touch-mode-for-emulator.patch @@ -0,0 +1,35 @@ +From 9f72100e7b318942b55f7a11bded8c2235a967cd Mon Sep 17 00:00:00 2001 +From: "sc.heo" +Date: Tue, 8 Mar 2022 17:56:04 +0900 +Subject: [PATCH] Disable mouse wheel on touch mode for emulator + +--- + src/eglfs_webos/emulator/qemulatormousemanager.cpp | 12 +++++++++++- + 1 file changed, 11 insertions(+), 1 deletion(-) + +diff --git a/src/eglfs_webos/emulator/qemulatormousemanager.cpp b/src/eglfs_webos/emulator/qemulatormousemanager.cpp +index 7b0e780..c333473 100644 +--- a/src/eglfs_webos/emulator/qemulatormousemanager.cpp ++++ b/src/eglfs_webos/emulator/qemulatormousemanager.cpp +@@ -261,7 +261,17 @@ void QEmulatorMouseManager::handleMouseEvent(int x, int y, bool abs, Qt::MouseBu + void QEmulatorMouseManager::handleWheelEvent(QPoint delta) + { + QPoint pos(m_x + m_xoffset, m_y + m_yoffset); +- QWindowSystemInterface::handleWheelEvent(0, pos, pos, QPoint(), delta, QGuiApplicationPrivate::inputDeviceManager()->keyboardModifiers()); ++ ++ // In emulator, we don't have touch screen and we use mouse as input of both mouse and touch input. ++ // So we made 2 mode(mouse mode, touch simulation mode).Default is touch simulation mode. You can change mouse mode via left Alt key. ++ // Touch simulation mode means that we covert mouse event into touch event. ++ // If we use mouse wheel and touch input together, wheel is not working correctly. ++ // So we disable mouse wheel on touch simulation mode, only process mouse wheel on touch mode. ++ if (!m_isTouch) {//mouse mode ++ QWindowSystemInterface::handleWheelEvent(0, pos, pos, QPoint(), delta, QGuiApplicationPrivate::inputDeviceManager()->keyboardModifiers()); ++ } else{//touch simulation mode ++ qWarning("In emulator, no process WheelEvent on touch simulation mode"); ++ } + } + + void QEmulatorMouseManager::addMouse(const QString &deviceNode) +-- +2.17.1 + From 1ed05429934380af9054f31f1d97622db2c25a09 Mon Sep 17 00:00:00 2001 From: Kyungjik Min Date: Mon, 14 Mar 2022 14:58:37 +0900 Subject: [PATCH 0276/2022] ose: libgoogleassistant=10 :Release Notes: Fix stack smashing when the stop luna-api came :Detailed Notes: libgoogleassistant: submissions/9..submissions/10 a8dc21b Fix stack smashing :Testing Performed: See the JIRA ticket. :QA Notes: N/A :Issues Addressed: [WRN-18992] CCC: libgoogleassistant=10 [WRN-10725] [webOS OSE]: Call stop is not working [WRN-10977] [OSE] Valid test step for com.webos.service.ai.voice's method stop raises FAIL [WRN-11109] [OSE] Invaild test steps for method stop exist gaps between test case and automation test set Change-Id: I458747ee6cb929960beb6f8893e92e4c97a157dd --- .../recipes-webos/libgoogleassistant/libgoogleassistant.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb b/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb index 30e28f6d7..82177d324 100644 --- a/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb +++ b/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2021 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "Google assistant engine library" AUTHOR = "Kyungjik Min " @@ -15,7 +15,7 @@ RDEPENDS_${PN}_class-target = "snowboy-models" VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS_${PN}_class-target += "${VIRTUAL-RUNTIME_bash}" -WEBOS_VERSION = "1.0.1-9_33a4b718c378e8b54330dece6093c7b0ea716316" +WEBOS_VERSION = "1.0.1-10_b8610f05673d48b498e38cb774d6f1056c3b5522" PR = "r7" inherit webos_library From 4a00cfe345e59b32c6033b2a63d6eeae1b7507c3 Mon Sep 17 00:00:00 2001 From: "myunghoon.chun" Date: Fri, 19 Nov 2021 01:59:13 +0900 Subject: [PATCH 0277/2022] Add meta-webos-backports-{3.2,3.3} layer Yocto 3.2 Gatesgarth and Yocto 3.3 Hardknott :Release Notes: Adds meta-webos-backports-{3.2,3.3} layers to provide development environment. :Detailed Notes: :Testing Performed: build tested. :QA Notes: No changes to image. :Issues Addressed: Change-Id: If6a6751527170998abba6fa84a2e5bdc6e1c9aad --- meta-webos-backports/README.md | 2 ++ .../meta-webos-backports-3.2/conf/layer.conf | 6 +++--- .../meta-webos-backports-3.3/conf/layer.conf | 14 ++++++++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) create mode 100644 meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf diff --git a/meta-webos-backports/README.md b/meta-webos-backports/README.md index a0e563eb6..c7b3c0e9b 100644 --- a/meta-webos-backports/README.md +++ b/meta-webos-backports/README.md @@ -21,5 +21,7 @@ If you're looking for backports from thud to sumo, check sumo branch. If you're looking for backports from warrior to thud, check thud branch. If you're looking for backports from zeus to warrior, check warrior branch. If you're looking for backports from dunfell to zeus, check zeus branch. +Backports from 3.2 (Gatesgarth) to 3.1 (Dunfell) are in "meta-webos-backports-3.2" subdirectory. +Backports from 3.3 (Hardknott) to 3.1 (Dunfell) are in "meta-webos-backports-3.3" subdirectory. See https://wiki.yoctoproject.org/wiki/Releases for complete list of releases. diff --git a/meta-webos-backports/meta-webos-backports-3.2/conf/layer.conf b/meta-webos-backports/meta-webos-backports-3.2/conf/layer.conf index 72286642a..68e8ada6c 100644 --- a/meta-webos-backports/meta-webos-backports-3.2/conf/layer.conf +++ b/meta-webos-backports/meta-webos-backports-3.2/conf/layer.conf @@ -9,11 +9,11 @@ BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ BBFILE_COLLECTIONS += "meta-webos-backports-3.2" BBFILE_PATTERN_meta-webos-backports-3.2 := "^${LAYERDIR}/" -BBFILE_PRIORITY_meta-webos-backports-3.2 = "33" - -LAYERSERIES_COMPAT_meta-webos-backports-3.2 = "dunfell" LAYERDEPENDS_meta-webos-backports-3.2 = " \ core \ openembedded-layer \ " +BBFILE_PRIORITY_meta-webos-backports-3.2 = "30" + +LAYERSERIES_COMPAT_meta-webos-backports-3.2 = "dunfell" diff --git a/meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf b/meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf new file mode 100644 index 000000000..1efe45b30 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf @@ -0,0 +1,14 @@ +# Copyright (c) 2021 LG Electronics, Inc. + +# We have conf and classes directories => add to BBPATH +BBPATH .= ":${LAYERDIR}" + +# We have recipes-* directories => add to BBFILES +BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ + ${LAYERDIR}/recipes-*/*/*.bbappend" + +BBFILE_COLLECTIONS += "meta-webos-backports-3.3" +BBFILE_PATTERN_meta-webos-backports-3.3 := "^${LAYERDIR}/" +BBFILE_PRIORITY_meta-webos-backports-3.3 = "31" + +LAYERSERIES_COMPAT_meta-webos-backports-3.3 = "dunfell" From 3eef48916b6ecf90429761fb884ab27d8072ae66 Mon Sep 17 00:00:00 2001 From: "eunsik0.lee" Date: Fri, 19 Nov 2021 11:22:45 +0900 Subject: [PATCH 0278/2022] tzdata=v2020e tzcode-native=v2020e :Release Notes: Update tzdata from 2020a to latest 2020e. :Detailed Notes: Our current tzdata-2020a is released on 2020-04-24 and the latest 2020e is released on 2020-12-24. 2020e includes the change of timestamp, DST and etc. :Testing Performed: MiniBat Test done. :Issues Addressed: Change-Id: I9036304335a6be2d4741cdb6c0db4178fdaca6ad --- .../packagegroup-webos-extended.bb | 1 + .../tzcode/tzcode-native_2020e.bb | 29 +++ .../tzdata/tzdata_2020e.bb | 220 ++++++++++++++++++ 3 files changed, 250 insertions(+) create mode 100644 meta-webos/recipes-upstreamable/tzcode/tzcode-native_2020e.bb create mode 100644 meta-webos/recipes-upstreamable/tzdata/tzdata_2020e.bb diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index 3150ecf65..d37105d10 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -149,6 +149,7 @@ VIRTUAL-RUNTIME_unifiedsearch ?= "com.webos.service.unifiedsearch com.webos.serv # subset should there be a device that will only be used within some region. WEBOS_PACKAGESET_TZDATA ?= " \ tzdata \ + tzdata-core \ tzdata-africa \ tzdata-americas \ tzdata-antarctica \ diff --git a/meta-webos/recipes-upstreamable/tzcode/tzcode-native_2020e.bb b/meta-webos/recipes-upstreamable/tzcode/tzcode-native_2020e.bb new file mode 100644 index 000000000..6983b852a --- /dev/null +++ b/meta-webos/recipes-upstreamable/tzcode/tzcode-native_2020e.bb @@ -0,0 +1,29 @@ +# note that we allow for us to use data later than our code version +# +SUMMARY = "tzcode, timezone zoneinfo utils -- zic, zdump, tzselect" +LICENSE = "PD & BSD & BSD-3-Clause" + +LIC_FILES_CHKSUM = "file://LICENSE;md5=c679c9d6b02bc2757b3eaf8f53c43fba" + +SRC_URI =" http://www.iana.org/time-zones/repository/releases/tzcode${PV}.tar.gz;name=tzcode \ + http://www.iana.org/time-zones/repository/releases/tzdata${PV}.tar.gz;name=tzdata \ + " +UPSTREAM_CHECK_URI = "http://www.iana.org/time-zones" + +SRC_URI[tzcode.md5sum] = "7320f6fb86f7d579feddfe52edc4984c" +SRC_URI[tzcode.sha256sum] = "3e10308976b09305d15cb4a32ff75483421f2063bfa24a9be366a027e7cd2902" +SRC_URI[tzdata.md5sum] = "69931af503dd781745dcd7ef1e7814e5" +SRC_URI[tzdata.sha256sum] = "0be1ba329eae29ae1b54057c3547b3e672f73b3ae7643aa87dac85122bec037e" + +S = "${WORKDIR}" + +inherit native + +EXTRA_OEMAKE += "cc='${CC}'" + +do_install () { + install -d ${D}${bindir}/ + install -m 755 zic ${D}${bindir}/ + install -m 755 zdump ${D}${bindir}/ + install -m 755 tzselect ${D}${bindir}/ +} diff --git a/meta-webos/recipes-upstreamable/tzdata/tzdata_2020e.bb b/meta-webos/recipes-upstreamable/tzdata/tzdata_2020e.bb new file mode 100644 index 000000000..f44f82d10 --- /dev/null +++ b/meta-webos/recipes-upstreamable/tzdata/tzdata_2020e.bb @@ -0,0 +1,220 @@ +SUMMARY = "Timezone data" +HOMEPAGE = "http://www.iana.org/time-zones" +SECTION = "base" +LICENSE = "PD & BSD & BSD-3-Clause" +LIC_FILES_CHKSUM = "file://LICENSE;md5=c679c9d6b02bc2757b3eaf8f53c43fba" + +DEPENDS = "tzcode-native" + +SRC_URI = "http://www.iana.org/time-zones/repository/releases/tzdata${PV}.tar.gz;name=tzdata" +UPSTREAM_CHECK_URI = "http://www.iana.org/time-zones" + +SRC_URI[tzdata.md5sum] = "69931af503dd781745dcd7ef1e7814e5" +SRC_URI[tzdata.sha256sum] = "0be1ba329eae29ae1b54057c3547b3e672f73b3ae7643aa87dac85122bec037e" + +inherit allarch + +RCONFLICTS_${PN} = "timezones timezone-africa timezone-america timezone-antarctica \ + timezone-arctic timezone-asia timezone-atlantic \ + timezone-australia timezone-europe timezone-indian \ + timezone-iso3166.tab timezone-pacific timezone-zone.tab" + +S = "${WORKDIR}" + +DEFAULT_TIMEZONE ?= "Universal" +INSTALL_TIMEZONE_FILE ?= "1" + +TZONES= "africa antarctica asia australasia europe northamerica southamerica \ + factory etcetera backward \ + " +# pacificnew + +do_compile () { + for zone in ${TZONES}; do \ + ${STAGING_BINDIR_NATIVE}/zic -b fat -d ${WORKDIR}${datadir}/zoneinfo -L /dev/null \ + ${S}/${zone} ; \ + ${STAGING_BINDIR_NATIVE}/zic -b fat -d ${WORKDIR}${datadir}/zoneinfo/posix -L /dev/null \ + ${S}/${zone} ; \ + ${STAGING_BINDIR_NATIVE}/zic -b fat -d ${WORKDIR}${datadir}/zoneinfo/right -L ${S}/leapseconds \ + ${S}/${zone} ; \ + done +} + +do_install () { + install -d ${D}/$exec_prefix ${D}${datadir}/zoneinfo + cp -pPR ${S}/$exec_prefix ${D}/ + # libc is removing zoneinfo files from package + cp -pP "${S}/zone.tab" ${D}${datadir}/zoneinfo + cp -pP "${S}/zone1970.tab" ${D}${datadir}/zoneinfo + cp -pP "${S}/iso3166.tab" ${D}${datadir}/zoneinfo + cp -pP "${S}/leapseconds" ${D}${datadir}/zoneinfo + cp -pP "${S}/leap-seconds.list" ${D}${datadir}/zoneinfo + + # Install default timezone + if [ -e ${D}${datadir}/zoneinfo/${DEFAULT_TIMEZONE} ]; then + install -d ${D}${sysconfdir} + if [ "${INSTALL_TIMEZONE_FILE}" = "1" ]; then + echo ${DEFAULT_TIMEZONE} > ${D}${sysconfdir}/timezone + fi + ln -s ${datadir}/zoneinfo/${DEFAULT_TIMEZONE} ${D}${sysconfdir}/localtime + else + bberror "DEFAULT_TIMEZONE is set to an invalid value." + exit 1 + fi + + chown -R root:root ${D} +} + +pkg_postinst_${PN} () { + etc_lt="$D${sysconfdir}/localtime" + src="$D${sysconfdir}/timezone" + + if [ -e ${src} ] ; then + tz=$(sed -e 's:#.*::' -e 's:[[:space:]]*::g' -e '/^$/d' "${src}") + fi + + if [ ! -z "${tz}" -a ! -e "$D${datadir}/zoneinfo/${tz}" ] ; then + echo "You have an invalid TIMEZONE setting in ${src}" + echo "Your ${etc_lt} has been reset to Universal; enjoy!" + tz="Universal" + echo "Updating ${etc_lt} with $D${datadir}/zoneinfo/${tz}" + if [ -L ${etc_lt} ] ; then + rm -f "${etc_lt}" + fi + ln -s "${datadir}/zoneinfo/${tz}" "${etc_lt}" + fi +} + +# Packages primarily organized by directory with a major city +# in most time zones in the base package + +TZ_PACKAGES = " \ + tzdata-core tzdata-misc tzdata-posix tzdata-right tzdata-africa \ + tzdata-americas tzdata-antarctica tzdata-arctic tzdata-asia \ + tzdata-atlantic tzdata-australia tzdata-europe tzdata-pacific" +PACKAGES = "${TZ_PACKAGES} ${PN}" + +FILES_tzdata-africa += "${datadir}/zoneinfo/Africa/*" +RPROVIDES_tzdata-africa = "tzdata-africa" + +FILES_tzdata-americas += "${datadir}/zoneinfo/America/* \ + ${datadir}/zoneinfo/US/* \ + ${datadir}/zoneinfo/Brazil/* \ + ${datadir}/zoneinfo/Canada/* \ + ${datadir}/zoneinfo/Mexico/* \ + ${datadir}/zoneinfo/Chile/*" +RPROVIDES_tzdata-americas = "tzdata-americas" + +FILES_tzdata-antarctica += "${datadir}/zoneinfo/Antarctica/*" +RPROVIDES_tzdata-antarctica = "tzdata-antarctica" + +FILES_tzdata-arctic += "${datadir}/zoneinfo/Arctic/*" +RPROVIDES_tzdata-arctic = "tzdata-arctic" + +FILES_tzdata-asia += "${datadir}/zoneinfo/Asia/* \ + ${datadir}/zoneinfo/Indian/* \ + ${datadir}/zoneinfo/Mideast/*" +RPROVIDES_tzdata-asia = "tzdata-asia" + +FILES_tzdata-atlantic += "${datadir}/zoneinfo/Atlantic/*" +RPROVIDES_tzdata-atlantic = "tzdata-atlantic" + +FILES_tzdata-australia += "${datadir}/zoneinfo/Australia/*" +RPROVIDES_tzdata-australia = "tzdata-australia" + +FILES_tzdata-europe += "${datadir}/zoneinfo/Europe/*" +RPROVIDES_tzdata-europe = "tzdata-europe" + +FILES_tzdata-pacific += "${datadir}/zoneinfo/Pacific/*" +RPROVIDES_tzdata-pacific = "tzdata-pacific" + +FILES_tzdata-posix += "${datadir}/zoneinfo/posix/*" +RPROVIDES_tzdata-posix = "tzdata-posix" + +FILES_tzdata-right += "${datadir}/zoneinfo/right/*" +RPROVIDES_tzdata-right = "tzdata-right" + +FILES_tzdata-misc += "${datadir}/zoneinfo/Cuba \ + ${datadir}/zoneinfo/Egypt \ + ${datadir}/zoneinfo/Eire \ + ${datadir}/zoneinfo/Factory \ + ${datadir}/zoneinfo/GB-Eire \ + ${datadir}/zoneinfo/Hongkong \ + ${datadir}/zoneinfo/Iceland \ + ${datadir}/zoneinfo/Iran \ + ${datadir}/zoneinfo/Israel \ + ${datadir}/zoneinfo/Jamaica \ + ${datadir}/zoneinfo/Japan \ + ${datadir}/zoneinfo/Kwajalein \ + ${datadir}/zoneinfo/Libya \ + ${datadir}/zoneinfo/Navajo \ + ${datadir}/zoneinfo/Poland \ + ${datadir}/zoneinfo/Portugal \ + ${datadir}/zoneinfo/Singapore \ + ${datadir}/zoneinfo/Turkey" +RPROVIDES_tzdata-misc = "tzdata-misc" + +FILES_tzdata-core += " \ + ${sysconfdir}/localtime \ + ${sysconfdir}/timezone \ + ${datadir}/zoneinfo/leapseconds \ + ${datadir}/zoneinfo/leap-seconds.list \ + ${datadir}/zoneinfo/Pacific/Honolulu \ + ${datadir}/zoneinfo/America/Anchorage \ + ${datadir}/zoneinfo/America/Los_Angeles \ + ${datadir}/zoneinfo/America/Denver \ + ${datadir}/zoneinfo/America/Chicago \ + ${datadir}/zoneinfo/America/New_York \ + ${datadir}/zoneinfo/America/Caracas \ + ${datadir}/zoneinfo/America/Sao_Paulo \ + ${datadir}/zoneinfo/Europe/London \ + ${datadir}/zoneinfo/Europe/Paris \ + ${datadir}/zoneinfo/Africa/Cairo \ + ${datadir}/zoneinfo/Europe/Moscow \ + ${datadir}/zoneinfo/Asia/Dubai \ + ${datadir}/zoneinfo/Asia/Karachi \ + ${datadir}/zoneinfo/Asia/Dhaka \ + ${datadir}/zoneinfo/Asia/Bangkok \ + ${datadir}/zoneinfo/Asia/Hong_Kong \ + ${datadir}/zoneinfo/Asia/Tokyo \ + ${datadir}/zoneinfo/Australia/Darwin \ + ${datadir}/zoneinfo/Australia/Adelaide \ + ${datadir}/zoneinfo/Australia/Brisbane \ + ${datadir}/zoneinfo/Australia/Sydney \ + ${datadir}/zoneinfo/Pacific/Noumea \ + ${datadir}/zoneinfo/CET \ + ${datadir}/zoneinfo/CST6CDT \ + ${datadir}/zoneinfo/EET \ + ${datadir}/zoneinfo/EST \ + ${datadir}/zoneinfo/EST5EDT \ + ${datadir}/zoneinfo/GB \ + ${datadir}/zoneinfo/GMT \ + ${datadir}/zoneinfo/GMT+0 \ + ${datadir}/zoneinfo/GMT-0 \ + ${datadir}/zoneinfo/GMT0 \ + ${datadir}/zoneinfo/Greenwich \ + ${datadir}/zoneinfo/HST \ + ${datadir}/zoneinfo/MET \ + ${datadir}/zoneinfo/MST \ + ${datadir}/zoneinfo/MST7MDT \ + ${datadir}/zoneinfo/NZ \ + ${datadir}/zoneinfo/NZ-CHAT \ + ${datadir}/zoneinfo/PRC \ + ${datadir}/zoneinfo/PST8PDT \ + ${datadir}/zoneinfo/ROC \ + ${datadir}/zoneinfo/ROK \ + ${datadir}/zoneinfo/UCT \ + ${datadir}/zoneinfo/UTC \ + ${datadir}/zoneinfo/Universal \ + ${datadir}/zoneinfo/W-SU \ + ${datadir}/zoneinfo/WET \ + ${datadir}/zoneinfo/Zulu \ + ${datadir}/zoneinfo/zone.tab \ + ${datadir}/zoneinfo/zone1970.tab \ + ${datadir}/zoneinfo/iso3166.tab \ + ${datadir}/zoneinfo/Etc/*" + +CONFFILES_tzdata-core = "${sysconfdir}/localtime ${sysconfdir}/timezone" + +ALLOW_EMPTY_${PN} = "1" +RDEPENDS_${PN} = "${TZ_PACKAGES}" From a47bdecc89b0178584a34813561222c9a909fab1 Mon Sep 17 00:00:00 2001 From: "kyungnam.bae" Date: Sun, 21 Nov 2021 00:58:03 +0900 Subject: [PATCH 0279/2022] Add libsrtp=v2.3.0 :Release Notes: Add libsrtp2-1 :Detailed Notes: webOS22 new module CANON Camera and LG Cast use libsrtp :Testing Performed: :Issues Addressed: Change-Id: I5d8c1094ff6c3ed361b352ed521ed38c79f8822b --- .../recipes-support/libsrtp/libsrtp_2.3.0.bb | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 meta-webos-backports/meta-webos-backports-3.3/recipes-support/libsrtp/libsrtp_2.3.0.bb diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-support/libsrtp/libsrtp_2.3.0.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-support/libsrtp/libsrtp_2.3.0.bb new file mode 100644 index 000000000..c2f4c4ead --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-support/libsrtp/libsrtp_2.3.0.bb @@ -0,0 +1,21 @@ +DESCRIPTION = "library implementing Secure RTP (RFC 3711)" +HOMEPAGE = "https://github.com/cisco/libsrtp" +SECTION = "libs" + +LICENSE = "BSD-3-Clause" +LIC_FILES_CHKSUM = "file://LICENSE;md5=2909fcf6f09ffff8430463d91c08c4e1" + +S = "${WORKDIR}/git" +SRCREV = "d02d21111e379c297e93a9033d7b653135f732ee" +SRC_URI = "git://github.com/cisco/libsrtp.git" + +inherit autotools pkgconfig + +EXTRA_OEMAKE += "shared_library" + +do_configure_prepend() { + cp ${STAGING_DATADIR_NATIVE}/automake-*/ar-lib ${S} +} + +ALLOW_EMPTY_${PN} = "1" + From 01f44fab7d4aaeada1cea48342c7a73fa07f25c0 Mon Sep 17 00:00:00 2001 From: "kwangshik.kim" Date: Sun, 21 Nov 2021 23:11:44 +0900 Subject: [PATCH 0280/2022] libtool=webos1 (patch to fix libtool filters sanitizer flags) :Release Notes: From https://savannah.gnu.org/patch/?8775 founded by pulseaudio build :Detailed Notes: from: https://wiki.gentoo.org/wiki/AddressSanitizer/Problems When linking shared libraries libtool will filter the LDFLAGS and only allows known good flags. The current version of libtool is unaware of Address Sanitizer and will therefore also filter the -fsanitize=address flag from the linker call. This breaks the compilation. This has been fixed upstream and this fix is part of the libtool ebuild in the asantoo overlay. This fix is not part of a libtool release yet. It will take a while until this change takes effect. The problem is that the libtool scripts are bundled with applications. Therefore even if upstream libtool allows the -fsanitize=address flag, this change has to be made on the systems of the upstream packagers. As the number of packages affected by this is huge the asantoo-base package in the overlay installs a Portage hook that will automatically patch all applications that ship an affected libtool script (the problem is in the ltmain.sh file). :Testing Performed: refer to CCC :Issues Addressed: Change-Id: I881ffbc2a01ca4f7d1ced78da63aacb7b08dc1fc --- .../libtool/libtool-cross_%.bbappend | 6 ++++ .../libtool/libtool-native_%.bbappend | 6 ++++ ...ng-linking-with-fsanitize-address-or.patch | 29 +++++++++++++++++++ .../libtool/nativesdk-libtool_%.bbappend | 6 ++++ 4 files changed, 47 insertions(+) create mode 100644 meta-webos/recipes-devtools/libtool/libtool-cross_%.bbappend create mode 100644 meta-webos/recipes-devtools/libtool/libtool-native_%.bbappend create mode 100644 meta-webos/recipes-devtools/libtool/libtool/0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch create mode 100644 meta-webos/recipes-devtools/libtool/nativesdk-libtool_%.bbappend diff --git a/meta-webos/recipes-devtools/libtool/libtool-cross_%.bbappend b/meta-webos/recipes-devtools/libtool/libtool-cross_%.bbappend new file mode 100644 index 000000000..1fbc87be6 --- /dev/null +++ b/meta-webos/recipes-devtools/libtool/libtool-cross_%.bbappend @@ -0,0 +1,6 @@ +# Copyright (c) 2021 LG Electronics, Inc. + +EXTENDPRAUTO_append = "webos1" + +FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +SRC_URI += "file://0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch" diff --git a/meta-webos/recipes-devtools/libtool/libtool-native_%.bbappend b/meta-webos/recipes-devtools/libtool/libtool-native_%.bbappend new file mode 100644 index 000000000..1fbc87be6 --- /dev/null +++ b/meta-webos/recipes-devtools/libtool/libtool-native_%.bbappend @@ -0,0 +1,6 @@ +# Copyright (c) 2021 LG Electronics, Inc. + +EXTENDPRAUTO_append = "webos1" + +FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +SRC_URI += "file://0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch" diff --git a/meta-webos/recipes-devtools/libtool/libtool/0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch b/meta-webos/recipes-devtools/libtool/libtool/0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch new file mode 100644 index 000000000..7875fa18b --- /dev/null +++ b/meta-webos/recipes-devtools/libtool/libtool/0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch @@ -0,0 +1,29 @@ +From db91ec9c1bdc60f5b18d86e434e05e606ce1bfe1 Mon Sep 17 00:00:00 2001 +From: "kwangshik.kim" +Date: Fri, 7 May 2021 08:42:17 +0000 +Subject: [PATCH] libtool fix clang linking with fsanitize address or + +--- + build-aux/ltmain.in | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in +index 7d9ce99..6944743 100644 +--- a/build-aux/ltmain.in ++++ b/build-aux/ltmain.in +@@ -5424,9 +5424,11 @@ func_mode_link () + # --sysroot=* for sysroot support + # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization + # -stdlib=* select c++ std lib with clang ++ # -fsanitize=* Clang memory and address sanitizer + -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ + -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ +- -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) ++ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ ++ -specs=*|-fsanitize=*) + func_quote_for_eval "$arg" + arg=$func_quote_for_eval_result + func_append compile_command " $arg" +-- +2.17.1 + diff --git a/meta-webos/recipes-devtools/libtool/nativesdk-libtool_%.bbappend b/meta-webos/recipes-devtools/libtool/nativesdk-libtool_%.bbappend new file mode 100644 index 000000000..1fbc87be6 --- /dev/null +++ b/meta-webos/recipes-devtools/libtool/nativesdk-libtool_%.bbappend @@ -0,0 +1,6 @@ +# Copyright (c) 2021 LG Electronics, Inc. + +EXTENDPRAUTO_append = "webos1" + +FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +SRC_URI += "file://0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch" From eba219529de6b5ba1e463989342a141c546c5372 Mon Sep 17 00:00:00 2001 From: "young.yeo" Date: Sun, 28 Nov 2021 22:00:59 +0900 Subject: [PATCH 0281/2022] libtool=webos2 (fix build error nativesdk-libtool) :Release Notes: Fix Build error for nativesdk-libtool :Detailed Notes: FILESEXTRAPATHS_prepend := "${THISDIR}/libtool:" Fix build error below patch. patch to fix libtool filters sanitizer flags https://wall.lge.com/c/webos-pro/meta-lg-webos/+/323231 ERROR: Fetcher failure for URL: 'file://0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch'. Unable to fetch URL from any source. :Testing Performed: refer to CCC :Issues Addressed: Change-Id: I1d4c6ea917332d58abb4c4c2cd3322b2ac52047b --- .../recipes-devtools/libtool/nativesdk-libtool_%.bbappend | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-devtools/libtool/nativesdk-libtool_%.bbappend b/meta-webos/recipes-devtools/libtool/nativesdk-libtool_%.bbappend index 1fbc87be6..686f5a792 100644 --- a/meta-webos/recipes-devtools/libtool/nativesdk-libtool_%.bbappend +++ b/meta-webos/recipes-devtools/libtool/nativesdk-libtool_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO_append = "webos2" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS_prepend := "${THISDIR}/libtool:" SRC_URI += "file://0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch" From 06e5298d9f5c47679b679081d9930f8d1c776142 Mon Sep 17 00:00:00 2001 From: Seonghyup Park Date: Sun, 28 Nov 2021 23:14:18 +0900 Subject: [PATCH 0282/2022] tzdata=webos7 (Use oe-core recipe) :Release Notes: Remove recipe in meta-lg-webos to use newer version of recipe provided by oe-core :Detailed Notes: * tzdata: 2020e -> 2021a * tzcode: 2020e -> 2021a and add '-b fat' option at co_compile :Testing Performed: build tested :Issues Addressed: Change-Id: I773cf46967b9deac07735aa63305671d4e8b3e1f --- .../recipes-extended/tzdata/tzdata.bbappend | 16 +- .../tzcode/tzcode-native_2020e.bb | 29 --- .../tzdata/tzdata_2020e.bb | 220 ------------------ 3 files changed, 8 insertions(+), 257 deletions(-) delete mode 100644 meta-webos/recipes-upstreamable/tzcode/tzcode-native_2020e.bb delete mode 100644 meta-webos/recipes-upstreamable/tzdata/tzdata_2020e.bb diff --git a/meta-webos/recipes-extended/tzdata/tzdata.bbappend b/meta-webos/recipes-extended/tzdata/tzdata.bbappend index 47e0a7ed0..869afe069 100644 --- a/meta-webos/recipes-extended/tzdata/tzdata.bbappend +++ b/meta-webos/recipes-extended/tzdata/tzdata.bbappend @@ -12,14 +12,14 @@ SRC_URI += "file://etcetera.patch" inherit webos_filesystem_paths do_compile () { - for zone in ${TZONES}; do \ - ${STAGING_BINDIR_NATIVE}/zic -b fat -d ${WORKDIR}${datadir}/zoneinfo -L /dev/null \ - ${S}/${zone} ; \ - ${STAGING_BINDIR_NATIVE}/zic -b fat -d ${WORKDIR}${datadir}/zoneinfo/posix -L /dev/null \ - ${S}/${zone} ; \ - ${STAGING_BINDIR_NATIVE}/zic -b fat -d ${WORKDIR}${datadir}/zoneinfo/right -L ${S}/leapseconds \ - ${S}/${zone} ; \ - done + for zone in ${TZONES}; do \ + ${STAGING_BINDIR_NATIVE}/zic -b fat -d ${WORKDIR}${datadir}/zoneinfo -L /dev/null \ + ${S}/${zone} ; \ + ${STAGING_BINDIR_NATIVE}/zic -b fat -d ${WORKDIR}${datadir}/zoneinfo/posix -L /dev/null \ + ${S}/${zone} ; \ + ${STAGING_BINDIR_NATIVE}/zic -b fat -d ${WORKDIR}${datadir}/zoneinfo/right -L ${S}/leapseconds \ + ${S}/${zone} ; \ + done } do_install_append() { diff --git a/meta-webos/recipes-upstreamable/tzcode/tzcode-native_2020e.bb b/meta-webos/recipes-upstreamable/tzcode/tzcode-native_2020e.bb deleted file mode 100644 index 6983b852a..000000000 --- a/meta-webos/recipes-upstreamable/tzcode/tzcode-native_2020e.bb +++ /dev/null @@ -1,29 +0,0 @@ -# note that we allow for us to use data later than our code version -# -SUMMARY = "tzcode, timezone zoneinfo utils -- zic, zdump, tzselect" -LICENSE = "PD & BSD & BSD-3-Clause" - -LIC_FILES_CHKSUM = "file://LICENSE;md5=c679c9d6b02bc2757b3eaf8f53c43fba" - -SRC_URI =" http://www.iana.org/time-zones/repository/releases/tzcode${PV}.tar.gz;name=tzcode \ - http://www.iana.org/time-zones/repository/releases/tzdata${PV}.tar.gz;name=tzdata \ - " -UPSTREAM_CHECK_URI = "http://www.iana.org/time-zones" - -SRC_URI[tzcode.md5sum] = "7320f6fb86f7d579feddfe52edc4984c" -SRC_URI[tzcode.sha256sum] = "3e10308976b09305d15cb4a32ff75483421f2063bfa24a9be366a027e7cd2902" -SRC_URI[tzdata.md5sum] = "69931af503dd781745dcd7ef1e7814e5" -SRC_URI[tzdata.sha256sum] = "0be1ba329eae29ae1b54057c3547b3e672f73b3ae7643aa87dac85122bec037e" - -S = "${WORKDIR}" - -inherit native - -EXTRA_OEMAKE += "cc='${CC}'" - -do_install () { - install -d ${D}${bindir}/ - install -m 755 zic ${D}${bindir}/ - install -m 755 zdump ${D}${bindir}/ - install -m 755 tzselect ${D}${bindir}/ -} diff --git a/meta-webos/recipes-upstreamable/tzdata/tzdata_2020e.bb b/meta-webos/recipes-upstreamable/tzdata/tzdata_2020e.bb deleted file mode 100644 index f44f82d10..000000000 --- a/meta-webos/recipes-upstreamable/tzdata/tzdata_2020e.bb +++ /dev/null @@ -1,220 +0,0 @@ -SUMMARY = "Timezone data" -HOMEPAGE = "http://www.iana.org/time-zones" -SECTION = "base" -LICENSE = "PD & BSD & BSD-3-Clause" -LIC_FILES_CHKSUM = "file://LICENSE;md5=c679c9d6b02bc2757b3eaf8f53c43fba" - -DEPENDS = "tzcode-native" - -SRC_URI = "http://www.iana.org/time-zones/repository/releases/tzdata${PV}.tar.gz;name=tzdata" -UPSTREAM_CHECK_URI = "http://www.iana.org/time-zones" - -SRC_URI[tzdata.md5sum] = "69931af503dd781745dcd7ef1e7814e5" -SRC_URI[tzdata.sha256sum] = "0be1ba329eae29ae1b54057c3547b3e672f73b3ae7643aa87dac85122bec037e" - -inherit allarch - -RCONFLICTS_${PN} = "timezones timezone-africa timezone-america timezone-antarctica \ - timezone-arctic timezone-asia timezone-atlantic \ - timezone-australia timezone-europe timezone-indian \ - timezone-iso3166.tab timezone-pacific timezone-zone.tab" - -S = "${WORKDIR}" - -DEFAULT_TIMEZONE ?= "Universal" -INSTALL_TIMEZONE_FILE ?= "1" - -TZONES= "africa antarctica asia australasia europe northamerica southamerica \ - factory etcetera backward \ - " -# pacificnew - -do_compile () { - for zone in ${TZONES}; do \ - ${STAGING_BINDIR_NATIVE}/zic -b fat -d ${WORKDIR}${datadir}/zoneinfo -L /dev/null \ - ${S}/${zone} ; \ - ${STAGING_BINDIR_NATIVE}/zic -b fat -d ${WORKDIR}${datadir}/zoneinfo/posix -L /dev/null \ - ${S}/${zone} ; \ - ${STAGING_BINDIR_NATIVE}/zic -b fat -d ${WORKDIR}${datadir}/zoneinfo/right -L ${S}/leapseconds \ - ${S}/${zone} ; \ - done -} - -do_install () { - install -d ${D}/$exec_prefix ${D}${datadir}/zoneinfo - cp -pPR ${S}/$exec_prefix ${D}/ - # libc is removing zoneinfo files from package - cp -pP "${S}/zone.tab" ${D}${datadir}/zoneinfo - cp -pP "${S}/zone1970.tab" ${D}${datadir}/zoneinfo - cp -pP "${S}/iso3166.tab" ${D}${datadir}/zoneinfo - cp -pP "${S}/leapseconds" ${D}${datadir}/zoneinfo - cp -pP "${S}/leap-seconds.list" ${D}${datadir}/zoneinfo - - # Install default timezone - if [ -e ${D}${datadir}/zoneinfo/${DEFAULT_TIMEZONE} ]; then - install -d ${D}${sysconfdir} - if [ "${INSTALL_TIMEZONE_FILE}" = "1" ]; then - echo ${DEFAULT_TIMEZONE} > ${D}${sysconfdir}/timezone - fi - ln -s ${datadir}/zoneinfo/${DEFAULT_TIMEZONE} ${D}${sysconfdir}/localtime - else - bberror "DEFAULT_TIMEZONE is set to an invalid value." - exit 1 - fi - - chown -R root:root ${D} -} - -pkg_postinst_${PN} () { - etc_lt="$D${sysconfdir}/localtime" - src="$D${sysconfdir}/timezone" - - if [ -e ${src} ] ; then - tz=$(sed -e 's:#.*::' -e 's:[[:space:]]*::g' -e '/^$/d' "${src}") - fi - - if [ ! -z "${tz}" -a ! -e "$D${datadir}/zoneinfo/${tz}" ] ; then - echo "You have an invalid TIMEZONE setting in ${src}" - echo "Your ${etc_lt} has been reset to Universal; enjoy!" - tz="Universal" - echo "Updating ${etc_lt} with $D${datadir}/zoneinfo/${tz}" - if [ -L ${etc_lt} ] ; then - rm -f "${etc_lt}" - fi - ln -s "${datadir}/zoneinfo/${tz}" "${etc_lt}" - fi -} - -# Packages primarily organized by directory with a major city -# in most time zones in the base package - -TZ_PACKAGES = " \ - tzdata-core tzdata-misc tzdata-posix tzdata-right tzdata-africa \ - tzdata-americas tzdata-antarctica tzdata-arctic tzdata-asia \ - tzdata-atlantic tzdata-australia tzdata-europe tzdata-pacific" -PACKAGES = "${TZ_PACKAGES} ${PN}" - -FILES_tzdata-africa += "${datadir}/zoneinfo/Africa/*" -RPROVIDES_tzdata-africa = "tzdata-africa" - -FILES_tzdata-americas += "${datadir}/zoneinfo/America/* \ - ${datadir}/zoneinfo/US/* \ - ${datadir}/zoneinfo/Brazil/* \ - ${datadir}/zoneinfo/Canada/* \ - ${datadir}/zoneinfo/Mexico/* \ - ${datadir}/zoneinfo/Chile/*" -RPROVIDES_tzdata-americas = "tzdata-americas" - -FILES_tzdata-antarctica += "${datadir}/zoneinfo/Antarctica/*" -RPROVIDES_tzdata-antarctica = "tzdata-antarctica" - -FILES_tzdata-arctic += "${datadir}/zoneinfo/Arctic/*" -RPROVIDES_tzdata-arctic = "tzdata-arctic" - -FILES_tzdata-asia += "${datadir}/zoneinfo/Asia/* \ - ${datadir}/zoneinfo/Indian/* \ - ${datadir}/zoneinfo/Mideast/*" -RPROVIDES_tzdata-asia = "tzdata-asia" - -FILES_tzdata-atlantic += "${datadir}/zoneinfo/Atlantic/*" -RPROVIDES_tzdata-atlantic = "tzdata-atlantic" - -FILES_tzdata-australia += "${datadir}/zoneinfo/Australia/*" -RPROVIDES_tzdata-australia = "tzdata-australia" - -FILES_tzdata-europe += "${datadir}/zoneinfo/Europe/*" -RPROVIDES_tzdata-europe = "tzdata-europe" - -FILES_tzdata-pacific += "${datadir}/zoneinfo/Pacific/*" -RPROVIDES_tzdata-pacific = "tzdata-pacific" - -FILES_tzdata-posix += "${datadir}/zoneinfo/posix/*" -RPROVIDES_tzdata-posix = "tzdata-posix" - -FILES_tzdata-right += "${datadir}/zoneinfo/right/*" -RPROVIDES_tzdata-right = "tzdata-right" - -FILES_tzdata-misc += "${datadir}/zoneinfo/Cuba \ - ${datadir}/zoneinfo/Egypt \ - ${datadir}/zoneinfo/Eire \ - ${datadir}/zoneinfo/Factory \ - ${datadir}/zoneinfo/GB-Eire \ - ${datadir}/zoneinfo/Hongkong \ - ${datadir}/zoneinfo/Iceland \ - ${datadir}/zoneinfo/Iran \ - ${datadir}/zoneinfo/Israel \ - ${datadir}/zoneinfo/Jamaica \ - ${datadir}/zoneinfo/Japan \ - ${datadir}/zoneinfo/Kwajalein \ - ${datadir}/zoneinfo/Libya \ - ${datadir}/zoneinfo/Navajo \ - ${datadir}/zoneinfo/Poland \ - ${datadir}/zoneinfo/Portugal \ - ${datadir}/zoneinfo/Singapore \ - ${datadir}/zoneinfo/Turkey" -RPROVIDES_tzdata-misc = "tzdata-misc" - -FILES_tzdata-core += " \ - ${sysconfdir}/localtime \ - ${sysconfdir}/timezone \ - ${datadir}/zoneinfo/leapseconds \ - ${datadir}/zoneinfo/leap-seconds.list \ - ${datadir}/zoneinfo/Pacific/Honolulu \ - ${datadir}/zoneinfo/America/Anchorage \ - ${datadir}/zoneinfo/America/Los_Angeles \ - ${datadir}/zoneinfo/America/Denver \ - ${datadir}/zoneinfo/America/Chicago \ - ${datadir}/zoneinfo/America/New_York \ - ${datadir}/zoneinfo/America/Caracas \ - ${datadir}/zoneinfo/America/Sao_Paulo \ - ${datadir}/zoneinfo/Europe/London \ - ${datadir}/zoneinfo/Europe/Paris \ - ${datadir}/zoneinfo/Africa/Cairo \ - ${datadir}/zoneinfo/Europe/Moscow \ - ${datadir}/zoneinfo/Asia/Dubai \ - ${datadir}/zoneinfo/Asia/Karachi \ - ${datadir}/zoneinfo/Asia/Dhaka \ - ${datadir}/zoneinfo/Asia/Bangkok \ - ${datadir}/zoneinfo/Asia/Hong_Kong \ - ${datadir}/zoneinfo/Asia/Tokyo \ - ${datadir}/zoneinfo/Australia/Darwin \ - ${datadir}/zoneinfo/Australia/Adelaide \ - ${datadir}/zoneinfo/Australia/Brisbane \ - ${datadir}/zoneinfo/Australia/Sydney \ - ${datadir}/zoneinfo/Pacific/Noumea \ - ${datadir}/zoneinfo/CET \ - ${datadir}/zoneinfo/CST6CDT \ - ${datadir}/zoneinfo/EET \ - ${datadir}/zoneinfo/EST \ - ${datadir}/zoneinfo/EST5EDT \ - ${datadir}/zoneinfo/GB \ - ${datadir}/zoneinfo/GMT \ - ${datadir}/zoneinfo/GMT+0 \ - ${datadir}/zoneinfo/GMT-0 \ - ${datadir}/zoneinfo/GMT0 \ - ${datadir}/zoneinfo/Greenwich \ - ${datadir}/zoneinfo/HST \ - ${datadir}/zoneinfo/MET \ - ${datadir}/zoneinfo/MST \ - ${datadir}/zoneinfo/MST7MDT \ - ${datadir}/zoneinfo/NZ \ - ${datadir}/zoneinfo/NZ-CHAT \ - ${datadir}/zoneinfo/PRC \ - ${datadir}/zoneinfo/PST8PDT \ - ${datadir}/zoneinfo/ROC \ - ${datadir}/zoneinfo/ROK \ - ${datadir}/zoneinfo/UCT \ - ${datadir}/zoneinfo/UTC \ - ${datadir}/zoneinfo/Universal \ - ${datadir}/zoneinfo/W-SU \ - ${datadir}/zoneinfo/WET \ - ${datadir}/zoneinfo/Zulu \ - ${datadir}/zoneinfo/zone.tab \ - ${datadir}/zoneinfo/zone1970.tab \ - ${datadir}/zoneinfo/iso3166.tab \ - ${datadir}/zoneinfo/Etc/*" - -CONFFILES_tzdata-core = "${sysconfdir}/localtime ${sysconfdir}/timezone" - -ALLOW_EMPTY_${PN} = "1" -RDEPENDS_${PN} = "${TZ_PACKAGES}" From 2edb3a5a6836cea4672cce1a3814f0061c7c4986 Mon Sep 17 00:00:00 2001 From: "sungmo.yang" Date: Wed, 1 Dec 2021 16:11:15 +0900 Subject: [PATCH 0283/2022] libsndfile Fix CVE-2017-14245 sfe_copy_data_fp :Release Notes: sfe_copy_data_fp: check value of "max" variable for being normal :Detailed Notes: <> 3f3c29e4c7 libsndfile Fix CVE-2017-14245 sfe_copy_data_fp :Testing Performed: Pulseaudio featurebat: OK build: OK :Issues Addressed: Change-Id: I1c88d3307afef21d86ee25c5154cd480f09b6055 --- .../libsndfile1/CVE-2017-14245.patch | 118 ++++++++++++++++++ .../libsndfile/libsndfile1_%.bbappend | 8 ++ 2 files changed, 126 insertions(+) create mode 100644 meta-webos/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-14245.patch create mode 100644 meta-webos/recipes-multimedia/libsndfile/libsndfile1_%.bbappend diff --git a/meta-webos/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-14245.patch b/meta-webos/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-14245.patch new file mode 100644 index 000000000..963f69a7c --- /dev/null +++ b/meta-webos/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-14245.patch @@ -0,0 +1,118 @@ +From eefeb1f16754b1609fe8c12213dfa6c42c402b26 Mon Sep 17 00:00:00 2001 +From: Fabian Greffrath +Date: Wed, 27 Sep 2017 14:46:18 +0200 +Subject: [PATCH] sfe_copy_data_fp: check value of "max" variable for being + normal + +and check elements of the data[] array for being finite. + +Both checks use functions provided by the header as declared +by the C99 standard. + +- add + +Fixes #317 +CVE-2017-14245 +CVE-2017-14246 +--- + programs/common.c | 20 ++++++++++++++++---- + programs/common.h | 2 +- + programs/sndfile-convert.c | 6 +++++- + 3 files changed, 22 insertions(+), 6 deletions(-) + +diff --git a/programs/common.c b/programs/common.c +index 3fc4e3d5..282ee33b 100644 +--- a/programs/common.c ++++ b/programs/common.c +@@ -36,6 +36,7 @@ + #include + #include + #include ++#include + + #include + +@@ -45,7 +46,7 @@ + + #define MIN(x, y) ((x) < (y) ? (x) : (y)) + +-void ++int + sfe_copy_data_fp (SNDFILE *outfile, SNDFILE *infile, int channels, int normalize) + { static double data [BUFFER_LEN], max ; + int frames, readcount, k ; +@@ -54,6 +55,8 @@ sfe_copy_data_fp (SNDFILE *outfile, SNDFILE *infile, int channels, int normalize + readcount = frames ; + + sf_command (infile, SFC_CALC_SIGNAL_MAX, &max, sizeof (max)) ; ++ if (!isnormal (max)) /* neither zero, subnormal, infinite, nor NaN */ ++ return 1 ; + + if (!normalize && max < 1.0) + { while (readcount > 0) +@@ -67,12 +70,16 @@ sfe_copy_data_fp (SNDFILE *outfile, SNDFILE *infile, int channels, int normalize + while (readcount > 0) + { readcount = sf_readf_double (infile, data, frames) ; + for (k = 0 ; k < readcount * channels ; k++) +- data [k] /= max ; ++ { data [k] /= max ; ++ ++ if (!isfinite (data [k])) /* infinite or NaN */ ++ return 1; ++ } + sf_writef_double (outfile, data, readcount) ; + } ; + } ; + +- return ; ++ return 0 ; + } /* sfe_copy_data_fp */ + + void +@@ -252,7 +259,12 @@ sfe_apply_metadata_changes (const char * filenames [2], const METADATA_INFO * in + + /* If the input file is not the same as the output file, copy the data. */ + if ((infileminor == SF_FORMAT_DOUBLE) || (infileminor == SF_FORMAT_FLOAT)) +- sfe_copy_data_fp (outfile, infile, sfinfo.channels, SF_FALSE) ; ++ { if (sfe_copy_data_fp (outfile, infile, sfinfo.channels, SF_FALSE) != 0) ++ { printf ("Error : Not able to decode input file '%s'\n", filenames [0]) ; ++ error_code = 1 ; ++ goto cleanup_exit ; ++ } ; ++ } + else + sfe_copy_data_int (outfile, infile, sfinfo.channels) ; + } ; +diff --git a/programs/common.h b/programs/common.h +index eda2d7d7..986277ee 100644 +--- a/programs/common.h ++++ b/programs/common.h +@@ -62,7 +62,7 @@ typedef SF_BROADCAST_INFO_VAR (2048) SF_BROADCAST_INFO_2K ; + + void sfe_apply_metadata_changes (const char * filenames [2], const METADATA_INFO * info) ; + +-void sfe_copy_data_fp (SNDFILE *outfile, SNDFILE *infile, int channels, int normalize) ; ++int sfe_copy_data_fp (SNDFILE *outfile, SNDFILE *infile, int channels, int normalize) ; + + void sfe_copy_data_int (SNDFILE *outfile, SNDFILE *infile, int channels) ; + +diff --git a/programs/sndfile-convert.c b/programs/sndfile-convert.c +index dff7f793..e6de5935 100644 +--- a/programs/sndfile-convert.c ++++ b/programs/sndfile-convert.c +@@ -335,7 +335,11 @@ main (int argc, char * argv []) + || (outfileminor == SF_FORMAT_DOUBLE) || (outfileminor == SF_FORMAT_FLOAT) + || (infileminor == SF_FORMAT_DOUBLE) || (infileminor == SF_FORMAT_FLOAT) + || (infileminor == SF_FORMAT_VORBIS) || (outfileminor == SF_FORMAT_VORBIS)) +- sfe_copy_data_fp (outfile, infile, sfinfo.channels, normalize) ; ++ { if (sfe_copy_data_fp (outfile, infile, sfinfo.channels, normalize) != 0) ++ { printf ("Error : Not able to decode input file %s.\n", infilename) ; ++ return 1 ; ++ } ; ++ } + else + sfe_copy_data_int (outfile, infile, sfinfo.channels) ; + +-- +2.17.1 + diff --git a/meta-webos/recipes-multimedia/libsndfile/libsndfile1_%.bbappend b/meta-webos/recipes-multimedia/libsndfile/libsndfile1_%.bbappend new file mode 100644 index 000000000..b3e29ccee --- /dev/null +++ b/meta-webos/recipes-multimedia/libsndfile/libsndfile1_%.bbappend @@ -0,0 +1,8 @@ +# Copyright (c) 2021 LG Electronics, Inc. + +EXTENDPRAUTO_append = "webos1" + +FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" + +SRC_URI += "file://CVE-2017-14245.patch" + From baafa70316883a1bbba24e1140fc250338c5f66d Mon Sep 17 00:00:00 2001 From: "byungki80.kim" Date: Tue, 7 Dec 2021 00:48:36 +0900 Subject: [PATCH 0284/2022] procps=v3.3.17 :Release Notes: Backport newer version of procps, because cpu abnormal usages on v3.3.16 :Detailed Notes: v3.3.16..v3.3.17 19a508e (tag: v3.3.17) NEWS: tweak wording associated with li 1f74877 library: Version has revision incremented f9dd869 build-sys: Don't require po4a for installation 73f1f65 nls: Fix translation problems fffcc4e nls: Update the translation files f0c5cf2 build-sys: Ignore temp directory for POTFILES.in 0ffb087 (tag: v3.3.17rc1) misc: Update NEWS to next version f8a861f nls: Minor update to po files e0e88bc build-sys: One more man-po build fix e780a60 build-sys: Update build to install translated manpages 4aae73e build-sys: Fix version directory ddce2c3 docs: vmstat.8 - swap is not virtual memory 8ff0dcb top: tweak cmd/cmdline logic for a possible bad locale 0d38626 library: let's make 'escaped_copy' multibyte aware too eea5626 library: help ensure 'escape_str' isn't executed twice c76144e top: added utf8 multibyte support to additional fields be22291 ps: extend utf8 multibyte support to additional fields 9165f79 top: correct one spelling oops in a programmer comment c64584a misc: Add NEWS for ps sorting 173d521 ps: add lots of sorting functions 5f859b3 pgrep: Remove memory leak f3afe3c If you use echo -e $(put sgr0)"text" - reset color at 3dcaf97 ps: Add NEWS and test for exe output b556bf5 ps: new format option 'exe' now shows executable path fa38963 build-sys: Make pwait test dependent on pwait built 3c1fed7 w: Use POSIX functions where available c2e69b3 NEWS: Add notice for pidof -q b067ecc pidof: allow to suppress output 79097e5 kill: Fix argument handling for negative PIDs 3549f49 Supporting bright colors with ncurses a23c941 Support simple 8 bit ansi escape sequences ffa5566 Spaces to tabs a3a5db1 Add comments and limit to standard colors 8d0928f bugfix - increment endpointer when parsing color_esca 486a3e3 Support simple 8 bit ansi escape sequences 1b9ea61 Increase BUFFSIZE to handle very large /proc/stat fil 4a54ae9 testsuite: Add pwait tests 09327c2 pgrep: add pwait 5d15506 Convert spaces to tabs in watch.c e0f47aa watch: Support wide char ncurses on mac with enable- b0c8e34 misc: fix typos in manual pages 584c65b pkill manpage to document '-e' option bf6c096 pidof: new option to show cmdline-less PIDs (kernel 3134357 Set TZ to avoid repeated stat("/etc/localtime") bfaa431 docs: Consistent style across watch.1 fc93e29 misc: Document sysctl change bug 2a5b865 top: a small safeguard added to the ATEOJ_RPTHSH logic cb13448 free,slabtop,uptime: complain about extra ops d748966 watch: Add no linewrap option d10c8fc top: just a small tweak to that history hash algorithm 3e1c00d ps: Match on truncated 16 char for -C 6e1715d top: fix additional SEGVs if no tasks were displayable f57a030 top: fix potential SEGV when no tasks were displayable 7a19961 top: update user/system cpu % graph content (man page) 5646506 build-sys: updated autoscan for that configure.ac file 762249e top: even more useless cosemetic stuff (only comments) 072a850 top: more useless cosemetic changes (chiefly comments) e319650 misc: eliminate a couple of miscellaneous gcc warnings 71d49f1 top: for consistency, reposition a few man page macros 723f146 build-sys: suppress '-Wunused-result' with AM_CPPFLAGS 78053c8 top: address several 'mandoc -Tlint' errors & warnings 3e92b4c top: make that 'cpu_prt' function a tad more efficient 246c5fa top: make the 'cpu_tics' function a tad more efficient 354b5a5 vmstat and watch manpage slight fixes 63691d6 top: raise the amount by which top's stat buffer grows 8ebdaf8 NEWS: updated for those recent utf-8 translation fixes c509d9b top: provide for zero length character in utf8 support bb1a79f library: correct that 'escape_str_utf8' guy's behavior e3249eb top: some miscellaneous accumulated tweaks and cleanup cc032cb docs: some manpage fixes f0fb35b top: fix a minor startup flaw for the '2 abreast' mode f73d8d1 top: help the '#define PRETEND48CPU' be more realistic f858e56 top: preserved those new '4' and '!' toggles in rcfile ad6917e top: warn users if rcfile save prevents older top read 6db0d5e top: reduce minimum terminal width with 2 abreast mode e5ddd7f top: address each of the most recent coverity warnings ae4ad63 NEWS: acknowledge those two new top command provisions a8a6005 top: bump up that PRETEND8CPUS #define to PRETEND48CPU f6a40a8 top: add '!' toggle for combined cpus display, man doc 5e1e14b top: add '!' toggle for combined cpus display, program f939809 top: add '4' toggle for 2 abreast cpu display, man doc fca48e7 top: add '4' toggle for 2 abreast cpu display, program 43a8d03 top: eliminate a long standing extraneous comment line 0930cfc build-sys: Some version fixes 77b60ae NEWS: add pgrep older than item 9975595 pgrep.c: simplifying uptime call 79a4eb6 pgrep.c: Replacing seconds_since_boot with uptime as 41b9e62 pgrep.c: change to allow 'older than' style selection 06df067 Add information on WATCH_INTERVAL env var to watch do c1214a5 Add ability to specify watch interval using environme a68d628 vmstat: Add NEWS and revert comment from prev 01c1b23 Use wide columns for r/b too in wide mode b52a267 Fixes small bug in struct proc_t documentation. 4090fa7 build-sys: Enable testing of sigqueue 7d55409 pgrep: use sigqueue to pass value with the signal. 5335851 kill: Adjust documentation for sigqueue 2b804a5 kill: use sigqueue to pass value with the signal. 1f5e037 INSTALL.md: Replace blockquotes with code blocks 91a396d free: Adjust space to really use 9 chars c833a62 Fix user and group name to number conversion for uid/g fd7c66d top: updated man page and copyright dates to year 2020 8e0c33b library: adapted to the latest lxc conventions (again) 95c1fbe NEWS: Add item for previous entry 2d32ee1 pidof: show worker threads 9275b38 NEWS: fix top alpha order, add 'e' command line switch f7dc5b1 top: for symmetry with 'E' add 'e' command line switch d936092 ps: eliminated inadvertent trailing double semi-colons 2d94282 top: eliminate inadvertent trailing double semi-colons 4c23fcf docs: Mention stime in ps.1 0afe595 NEWS: Fix location of sysctl update 24a1574 sysctl: config directory order 5cd29e5 top: restore configuration file backward compatibility ed34b12 top: restore one line of code to sig_endpgm() function 6164fbb NEWS: Add missing pgrep note 7db6542 ps: for abnormal end allow core dumps (fix qualys bug) 9e4c2cc top: at abnormal end allow core dumps (fix qualys bug) ba5f1e5 top: reposition some data due to a translation comment 00028aa top: whack insidious bug surrounding auto-sized fields bb96fc4 pgrep: check sanity of SC_ARG_MAX :Testing Performed: :Issues Addressed: Change-Id: I11107846a1b2edcd1f915840513461ae657070d4 --- .../procps/0001-w.c-correct-musl-builds.patch | 44 ++++++++ ...02-proc-escape.c-add-missing-include.patch | 23 ++++ .../procps/procps/sysctl.conf | 67 ++++++++++++ .../recipes-extended/procps/procps_3.3.17.bb | 103 ++++++++++++++++++ 4 files changed, 237 insertions(+) create mode 100644 meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/0001-w.c-correct-musl-builds.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/0002-proc-escape.c-add-missing-include.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/sysctl.conf create mode 100644 meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps_3.3.17.bb diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/0001-w.c-correct-musl-builds.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/0001-w.c-correct-musl-builds.patch new file mode 100644 index 000000000..035bec6f0 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/0001-w.c-correct-musl-builds.patch @@ -0,0 +1,44 @@ +From 22f8d25567b8d64bdbab0fb0b4915b4362561d9b Mon Sep 17 00:00:00 2001 +From: Alexander Kanavin +Date: Wed, 24 Feb 2021 21:14:31 +0000 +Subject: [PATCH] w.c: correct musl builds + +No need to redefine UT_ stuff to something that does not exist. + +UT_ is already provided in musl but via utmp.h header, so include +it always. + +Upstream-Status: Submitted [https://gitlab.com/procps-ng/procps/-/merge_requests/126] +Signed-off-by: Alexander Kanavin +--- + w.c | 9 +-------- + 1 file changed, 1 insertion(+), 8 deletions(-) + +diff --git a/w.c b/w.c +index 9d07ac9..d10639b 100644 +--- a/w.c ++++ b/w.c +@@ -57,9 +57,8 @@ + #include + #ifdef HAVE_UTMPX_H + # include +-#else +-# include + #endif ++#include + #include + + static int ignoreuser = 0; /* for '-u' */ +@@ -72,12 +71,6 @@ typedef struct utmpx utmp_t; + typedef struct utmp utmp_t; + #endif + +-#if !defined(UT_HOSTSIZE) || defined(__UT_HOSTSIZE) +-# define UT_HOSTSIZE __UT_HOSTSIZE +-# define UT_LINESIZE __UT_LINESIZE +-# define UT_NAMESIZE __UT_NAMESIZE +-#endif +- + #ifdef W_SHOWFROM + # define FROM_STRING "on" + #else diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/0002-proc-escape.c-add-missing-include.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/0002-proc-escape.c-add-missing-include.patch new file mode 100644 index 000000000..5fa1ac9d7 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/0002-proc-escape.c-add-missing-include.patch @@ -0,0 +1,23 @@ +From 4f964821398dff7ab21fec63da15e1e00b2e9277 Mon Sep 17 00:00:00 2001 +From: Alexander Kanavin +Date: Wed, 24 Feb 2021 21:16:14 +0000 +Subject: [PATCH] proc/escape.c: add missing include + +Upstream-Status: Submitted [https://gitlab.com/procps-ng/procps/-/merge_requests/126] +Signed-off-by: Alexander Kanavin +--- + proc/escape.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/proc/escape.c b/proc/escape.c +index 2e8fb7d..e1f4612 100644 +--- a/proc/escape.c ++++ b/proc/escape.c +@@ -21,6 +21,7 @@ + #include + #include + #include ++#include + #include "procps.h" + #include "escape.h" + #include "readproc.h" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/sysctl.conf b/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/sysctl.conf new file mode 100644 index 000000000..253f3701b --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/sysctl.conf @@ -0,0 +1,67 @@ +# This configuration taken from procps v3.3.15 +# Commented out kernel/pid_max=10000 line +# +# /etc/sysctl.conf - Configuration file for setting system variables +# See sysctl.conf (5) for information. + +# you can have the CD-ROM close when you use it, and open +# when you are done. +#dev.cdrom.autoeject = 1 +#dev.cdrom.autoclose = 1 + +# protection from the SYN flood attack +net/ipv4/tcp_syncookies=1 + +# see the evil packets in your log files +net/ipv4/conf/all/log_martians=1 + +# makes you vulnerable or not :-) +net/ipv4/conf/all/accept_redirects=0 +net/ipv4/conf/all/accept_source_route=0 +net/ipv4/icmp_echo_ignore_broadcasts =1 + +# needed for routing, including masquerading or NAT +#net/ipv4/ip_forward=1 + +# sets the port range used for outgoing connections +#net.ipv4.ip_local_port_range = 32768 61000 + +# Broken routers and obsolete firewalls will corrupt the window scaling +# and ECN. Set these values to 0 to disable window scaling and ECN. +# This may, rarely, cause some performance loss when running high-speed +# TCP/IP over huge distances or running TCP/IP over connections with high +# packet loss and modern routers. This sure beats dropped connections. +#net.ipv4.tcp_ecn = 0 + +# Swapping too much or not enough? Disks spinning up when you'd +# rather they didn't? Tweak these. +#vm.vfs_cache_pressure = 100 +#vm.laptop_mode = 0 +#vm.swappiness = 60 + +#kernel.printk_ratelimit_burst = 10 +#kernel.printk_ratelimit = 5 +#kernel.panic_on_oops = 0 + +# Reboot 600 seconds after a panic +#kernel.panic = 600 + +# enable SysRq key (note: console security issues) +#kernel.sysrq = 1 + +# Change name of core file to start with the command name +# so you get things like: emacs.core mozilla-bin.core X.core +#kernel.core_pattern = %e.core + +# NIS/YP domain (not always equal to DNS domain) +#kernel.domainname = example.com +#kernel.hostname = darkstar + +# This limits PID values to 4 digits, which allows tools like ps +# to save screen space. +#kernel/pid_max=10000 + +# Protects against creating or following links under certain conditions +# See https://www.kernel.org/doc/Documentation/sysctl/fs.txt +#fs.protected_hardlinks = 1 +#fs.protected_symlinks = 1 diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps_3.3.17.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps_3.3.17.bb new file mode 100644 index 000000000..1d08f0167 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps_3.3.17.bb @@ -0,0 +1,103 @@ +SUMMARY = "System and process monitoring utilities" +DESCRIPTION = "Procps contains a set of system utilities that provide system information about processes using \ +the /proc filesystem. The package includes the programs ps, top, vmstat, w, kill, and skill." +HOMEPAGE = "https://gitlab.com/procps-ng/procps" +SECTION = "base" +LICENSE = "GPLv2+ & LGPLv2+" +LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ + file://COPYING.LIB;md5=4cf66a4984120007c9881cc871cf49db \ + " + +DEPENDS = "ncurses" + +inherit autotools gettext pkgconfig update-alternatives + +SRC_URI = "git://gitlab.com/procps-ng/procps.git;protocol=https \ + file://sysctl.conf \ + file://0001-w.c-correct-musl-builds.patch \ + file://0002-proc-escape.c-add-missing-include.patch \ + " +SRCREV = "19a508ea121c0c4ac6d0224575a036de745eaaf8" + +S = "${WORKDIR}/git" + +# Upstream has a custom autogen.sh which invokes po/update-potfiles as they +# don't ship a po/POTFILES.in (which is silly). Without that file gettext +# doesn't believe po/ is a gettext directory and won't generate po/Makefile. +do_configure_prepend() { + ( cd ${S} && po/update-potfiles ) +} + +EXTRA_OECONF = "--enable-skill --disable-modern-top" + +PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}" +PACKAGECONFIG[systemd] = "--with-systemd,--without-systemd,systemd" + +do_install_append () { + install -d ${D}${base_bindir} + [ "${bindir}" != "${base_bindir}" ] && for i in ${base_bindir_progs}; do mv ${D}${bindir}/$i ${D}${base_bindir}/$i; done + install -d ${D}${base_sbindir} + [ "${sbindir}" != "${base_sbindir}" ] && for i in ${base_sbindir_progs}; do mv ${D}${sbindir}/$i ${D}${base_sbindir}/$i; done + if [ "${base_sbindir}" != "${sbindir}" ]; then + rmdir ${D}${sbindir} + fi + + install -d ${D}${sysconfdir} + install -m 0644 ${WORKDIR}/sysctl.conf ${D}${sysconfdir}/sysctl.conf + if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then + install -d ${D}${sysconfdir}/sysctl.d + ln -sf ../sysctl.conf ${D}${sysconfdir}/sysctl.d/99-sysctl.conf + fi +} + +CONFFILES_${PN} = "${sysconfdir}/sysctl.conf" + +bindir_progs = "free pkill pmap pgrep pwdx skill snice top uptime w" +base_bindir_progs += "kill pidof ps watch" +base_sbindir_progs += "sysctl" + +ALTERNATIVE_PRIORITY = "200" +ALTERNATIVE_PRIORITY[pidof] = "150" + +ALTERNATIVE_${PN} = "${bindir_progs} ${base_bindir_progs} ${base_sbindir_progs}" + +ALTERNATIVE_${PN}-doc = "kill.1 uptime.1" +ALTERNATIVE_LINK_NAME[kill.1] = "${mandir}/man1/kill.1" +ALTERNATIVE_LINK_NAME[uptime.1] = "${mandir}/man1/uptime.1" + +python __anonymous() { + for prog in d.getVar('base_bindir_progs').split(): + d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_bindir'), prog)) + + for prog in d.getVar('base_sbindir_progs').split(): + d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_sbindir'), prog)) +} + +# 'ps' isn't suitable for use as a security tool so whitelist this CVE. +# https://bugzilla.redhat.com/show_bug.cgi?id=1575473#c3 +CVE_CHECK_WHITELIST += "CVE-2018-1121" + +PROCPS_PACKAGES = "${PN}-lib \ + ${PN}-ps \ + ${PN}-sysctl" + +PACKAGE_BEFORE_PN = "${PROCPS_PACKAGES}" +RDEPENDS_${PN} += "${PROCPS_PACKAGES}" + +RDEPENDS_${PN}-ps += "${PN}-lib" +RDEPENDS_${PN}-sysctl += "${PN}-lib" + +FILES_${PN}-lib = "${libdir}" +FILES_${PN}-ps = "${base_bindir}/ps.${BPN}" +FILES_${PN}-sysctl = "${base_sbindir}/sysctl.${BPN} ${sysconfdir}/sysctl.conf ${sysconfdir}/sysctl.d" + +ALTERNATIVE_${PN}_remove = "ps" +ALTERNATIVE_${PN}_remove = "sysctl" + +ALTERNATIVE_${PN}-ps = "ps" +ALTERNATIVE_TARGET[ps] = "${base_bindir}/ps" +ALTERNATIVE_LINK_NAME[ps] = "${base_bindir}/ps" + +ALTERNATIVE_${PN}-sysctl = "sysctl" +ALTERNATIVE_TARGET[sysctl] = "${base_sbindir}/sysctl" +ALTERNATIVE_LINK_NAME[sysctl] = "${base_sbindir}/sysctl" From 9cb1878f1ac56387c7245cc40ef1be083ee40e98 Mon Sep 17 00:00:00 2001 From: "young.yeo" Date: Tue, 7 Dec 2021 01:04:51 +0900 Subject: [PATCH 0285/2022] sstate.bbclass : To fix errors about read-only sstate mirrors :Release Notes: Fix errors about read-only sstate mirrors This patch should be removed when yocto version up. :Detailed Notes: https://git.openembedded.org/openembedded-core /commit/?h=dunfell&id=f2360f796016cce93610a080ff07c8047bda6ee8 If a read-only sstate mirror is used in conjunction with hash equiv, then OSError will be raised when an sstate-cache hit is achieved. This is because sstate_task_postfunc will try to "touch" the symlinks that point to the read-only sstate mirror when sstate_report_unihash has changed SSTATE_PKG. :Testing Performed: build tested :QA Notes: No changes to image :Issues Addressed: Change-Id: I5098b7632406bc9a1db40a439931d86892f138ec --- meta-webos/classes/sstate.bbclass | 107 ++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 meta-webos/classes/sstate.bbclass diff --git a/meta-webos/classes/sstate.bbclass b/meta-webos/classes/sstate.bbclass new file mode 100644 index 000000000..324248819 --- /dev/null +++ b/meta-webos/classes/sstate.bbclass @@ -0,0 +1,107 @@ +# Copyright (c) 2021 LG Electronics, Inc. +# +# Intercept the upstream sstate.bbclass +# to fix errors about read-only sstate mirrors. +# + +require ${COREBASE}/meta/classes/sstate.bbclass + +inherit webos_deploy + +def sstate_package(ss, d): + import oe.path + + tmpdir = d.getVar('TMPDIR') + + sstatebuild = d.expand("${WORKDIR}/sstate-build-%s/" % ss['task']) + d.setVar("SSTATE_CURRTASK", ss['task']) + bb.utils.remove(sstatebuild, recurse=True) + bb.utils.mkdirhier(sstatebuild) + for state in ss['dirs']: + if not os.path.exists(state[1]): + continue + srcbase = state[0].rstrip("/").rsplit('/', 1)[0] + # Find and error for absolute symlinks. We could attempt to relocate but its not + # clear where the symlink is relative to in this context. We could add that markup + # to sstate tasks but there aren't many of these so better just avoid them entirely. + for walkroot, dirs, files in os.walk(state[1]): + for file in files + dirs: + srcpath = os.path.join(walkroot, file) + if not os.path.islink(srcpath): + continue + link = os.readlink(srcpath) + if not os.path.isabs(link): + continue + if not link.startswith(tmpdir): + continue + bb.error("sstate found an absolute path symlink %s pointing at %s. Please replace this with a relative link." % (srcpath, link)) + bb.debug(2, "Preparing tree %s for packaging at %s" % (state[1], sstatebuild + state[0])) + os.rename(state[1], sstatebuild + state[0]) + + workdir = d.getVar('WORKDIR') + sharedworkdir = os.path.join(d.getVar('TMPDIR'), "work-shared") + for plain in ss['plaindirs']: + pdir = plain.replace(workdir, sstatebuild) + if sharedworkdir in plain: + pdir = plain.replace(sharedworkdir, sstatebuild) + bb.utils.mkdirhier(plain) + bb.utils.mkdirhier(pdir) + os.rename(plain, pdir) + + d.setVar('SSTATE_BUILDDIR', sstatebuild) + d.setVar('SSTATE_INSTDIR', sstatebuild) + + if d.getVar('SSTATE_SKIP_CREATION') == '1': + return + + sstate_create_package = ['sstate_report_unihash', 'sstate_create_package'] + if d.getVar('SSTATE_SIG_KEY'): + sstate_create_package.append('sstate_sign_package') + + for f in (d.getVar('SSTATECREATEFUNCS') or '').split() + \ + sstate_create_package + \ + (d.getVar('SSTATEPOSTCREATEFUNCS') or '').split(): + # All hooks should run in SSTATE_BUILDDIR. + bb.build.exec_func(f, d, (sstatebuild,)) + + # SSTATE_PKG may have been changed by sstate_report_unihash + siginfo = d.getVar('SSTATE_PKG') + ".siginfo" + if not os.path.exists(siginfo): + bb.siggen.dump_this_task(siginfo, d) + else: + try: + os.utime(siginfo, None) + except PermissionError: + pass + except OSError as e: + # Handle read-only file systems gracefully + if e.errno != errno.EROFS: + raise e + + return + +python sstate_eventhandler() { + d = e.data + writtensstate = d.getVar('SSTATE_CURRTASK') + if not writtensstate: + taskname = d.getVar("BB_RUNTASK")[3:] + spec = d.getVar('SSTATE_PKGSPEC') + swspec = d.getVar('SSTATE_SWSPEC') + if taskname in ["fetch", "unpack", "patch", "populate_lic", "preconfigure"] and swspec: + d.setVar("SSTATE_PKGSPEC", "${SSTATE_SWSPEC}") + d.setVar("SSTATE_EXTRAPATH", "") + d.setVar("SSTATE_CURRTASK", taskname) + siginfo = d.getVar('SSTATE_PKG') + ".siginfo" + if not os.path.exists(siginfo): + bb.siggen.dump_this_task(siginfo, d) + else: + try: + os.utime(siginfo, None) + except PermissionError: + pass + except OSError as e: + # Handle read-only file systems gracefully + if e.errno != errno.EROFS: + raise e + +} From 199ddbcf6da14b66cdb55af836f0b61e51d1d7fe Mon Sep 17 00:00:00 2001 From: "young.yeo" Date: Tue, 7 Dec 2021 15:26:22 +0900 Subject: [PATCH 0286/2022] sstate.bbclass: fix error handling when sstate mirrors is ro :Release Notes: Fix error handling when sstate mirrors is ro. These patchs should be removed when yocto version up. :Detailed Notes: The commit dd555537fc35c5f934af09d601d70772eb5955ae 'sstate.bbclass: fix errors about read-only sstate mirrors' adds an additional exception handler to silently mask read only rootfs errors thrown during the touch. The exception handler checks the error type with the python module errno but this module needs to be imported as it don't exist. Example of the error: File: 'exec_python_func() autogenerated', lineno: 2, function: 0001: *** 0002:sstate_task_postfunc(d) 0003: File: '/home/builder/src/base/poky/meta/classes/sstate.bbclass', lineno: 778, function: sstate_task_postfunc 0774: 0775: omask = os.umask(0o002) 0776: if omask != 0o002: 0777: bb.note("Using umask 0o002 (not %0o) for sstate packaging" % omask) *** 0778: sstate_package(shared_state, d) 0779: os.umask(omask) 0780: 0781: sstateinst = d.getVar("SSTATE_INSTDIR") 0782: d.setVar('SSTATE_FIXMEDIR', shared_state['fixmedir']) File: '/home/builder/src/base/poky/meta/classes/sstate.bbclass', lineno: 708, function: sstate_package 0704: except PermissionError: 0705: pass 0706: except OSError as e: 0707: # Handle read-only file systems gracefully *** 0708: if e.errno != errno.EROFS: 0709: raise e 0710: 0711: return 0712: Exception: NameError: name 'errno' is not defined :Testing Performed: build tested :QA Notes: No changes to image :Issues Addressed: Change-Id: Ib1b5170088d31c6fd9f62ab11511b1a27fd43235 --- meta-webos/classes/sstate.bbclass | 2 ++ 1 file changed, 2 insertions(+) diff --git a/meta-webos/classes/sstate.bbclass b/meta-webos/classes/sstate.bbclass index 324248819..09d7cccf1 100644 --- a/meta-webos/classes/sstate.bbclass +++ b/meta-webos/classes/sstate.bbclass @@ -75,6 +75,7 @@ def sstate_package(ss, d): pass except OSError as e: # Handle read-only file systems gracefully + import errno if e.errno != errno.EROFS: raise e @@ -101,6 +102,7 @@ python sstate_eventhandler() { pass except OSError as e: # Handle read-only file systems gracefully + import errno if e.errno != errno.EROFS: raise e From 9c5f738fc9d08679ad2262253e34189e2e1a3d47 Mon Sep 17 00:00:00 2001 From: "young.yeo" Date: Tue, 7 Dec 2021 15:26:35 +0900 Subject: [PATCH 0287/2022] sstate.bbclass: Ignore sstate signing key :Release Notes: sstate: Ignore sstate signing key :Detailed Notes: What key is used to sign sstate artefacts should not affect the hash of the object, otherwise everyone would need to use the same signing key. :Testing Performed: build tested :QA Notes: No changes to image :Issues Addressed: Change-Id: I423427d0e154c60f1a71b0206e2c68941f3ca03c --- meta-webos/classes/sstate.bbclass | 2 ++ 1 file changed, 2 insertions(+) diff --git a/meta-webos/classes/sstate.bbclass b/meta-webos/classes/sstate.bbclass index 09d7cccf1..37ca5d09f 100644 --- a/meta-webos/classes/sstate.bbclass +++ b/meta-webos/classes/sstate.bbclass @@ -8,6 +8,8 @@ require ${COREBASE}/meta/classes/sstate.bbclass inherit webos_deploy +sstate_package[vardepsexclude] += "SSTATE_SIG_KEY" + def sstate_package(ss, d): import oe.path From d153b25cdbe0dd3a9a79c7b530a09d18e3683cba Mon Sep 17 00:00:00 2001 From: "myunghoon.chun" Date: Tue, 7 Dec 2021 16:09:42 +0900 Subject: [PATCH 0288/2022] iotop=webos2(Fix syntax error on python3) :Release Notes: Fix syntax error on python3 :Detailed Notes: Traceback (most recent call last): File "/usr/lib/python3.8/site-packages/iotop/data.py", line 394 self.cmdline = '[' + `self.pid` + ']' + self.cmdline SyntaxError: invalid syntax Traceback (most recent call last): File "/usr/lib/python3.8/site-packages/iotop/data.py", line 493, in refresh_processes for (key, value) in self.processes.items(): RuntimeError: dictionary changed size during iteration :Testing Performed: :Issues Addressed: Change-Id: I18bec7e1269d923923258c4586428c1f4cf482c2 --- ...otop_not_disappear_result_when_exited_thread.patch | 11 +++++++---- meta-webos/recipes-extended/iotop/iotop_%.bbappend | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/meta-webos/recipes-extended/iotop/iotop/iotop_not_disappear_result_when_exited_thread.patch b/meta-webos/recipes-extended/iotop/iotop/iotop_not_disappear_result_when_exited_thread.patch index 5e97f7ee3..9deb8ff87 100644 --- a/meta-webos/recipes-extended/iotop/iotop/iotop_not_disappear_result_when_exited_thread.patch +++ b/meta-webos/recipes-extended/iotop/iotop/iotop_not_disappear_result_when_exited_thread.patch @@ -1,4 +1,4 @@ -From 118dc100098c768906f9bb7ee6706491f666c984 Mon Sep 17 00:00:00 2001 +From 7acb1ccc9e17695e278c4b5bab75a4e8f22abbaf Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sun, 26 Jan 2020 01:42:46 -0800 Subject: [PATCH] don't let result disappear when thread exits @@ -9,7 +9,7 @@ Signed-off-by: Martin Jansa 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/iotop/data.py b/iotop/data.py -index 3874974..864d28c 100644 +index 3874974..70d75ca 100644 --- a/iotop/data.py +++ b/iotop/data.py @@ -43,7 +43,8 @@ except (ImportError, RuntimeError): @@ -87,7 +87,7 @@ index 3874974..864d28c 100644 + stats_delta.blkio_delay_total /= nr_threads + stats_delta.swapin_delay_total /= nr_threads + elif self.pid < overPid: -+ self.cmdline = '[' + `self.pid` + ']' + self.cmdline ++ self.cmdline = '[' + repr(self.pid) + ']' + self.cmdline + self.pid = overPid+overIndex + overIndex = overIndex+1 @@ -97,10 +97,13 @@ index 3874974..864d28c 100644 self.processes = dict([(pid, process) for pid, process in self.processes.items() if process.update_stats()]) -+ for (key, value) in self.processes.items(): ++ for (key, value) in list(self.processes.items()): + if key!= value.pid: + self.processes[value.pid] = value + del self.processes[key] return total_read_and_write +-- +2.17.1 + diff --git a/meta-webos/recipes-extended/iotop/iotop_%.bbappend b/meta-webos/recipes-extended/iotop/iotop_%.bbappend index c963a76bb..f0b7bee90 100644 --- a/meta-webos/recipes-extended/iotop/iotop_%.bbappend +++ b/meta-webos/recipes-extended/iotop/iotop_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2015-2019 LG Electronics, Inc. -EXTENDPRAUTO = "webos1" +EXTENDPRAUTO = "webos2" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" SRC_URI += "file://iotop_not_disappear_result_when_exited_thread.patch" From 5a02da0e426480ca8d0b6029446ec8859af20c9c Mon Sep 17 00:00:00 2001 From: "jaekyu.lee" Date: Fri, 14 Jan 2022 01:18:18 +0900 Subject: [PATCH 0289/2022] meta-webos-backports-3.3: fix priority and layer depends :Release Notes: Resolve Build dependencies for distros :Detailed Notes: fix priority and layer depends :Testing Performed: Build Successful :QA Notes: NA :Issues Addressed: [WRN-10081] o22 sync-up SCM Support Activities Change-Id: Ifce1fae85b1962bc17fa5d61dda87adc85fff8e6 --- .../meta-webos-backports-3.3/conf/layer.conf | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf b/meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf index 1efe45b30..9f208f43e 100644 --- a/meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf +++ b/meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. # We have conf and classes directories => add to BBPATH BBPATH .= ":${LAYERDIR}" @@ -9,6 +9,11 @@ BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ BBFILE_COLLECTIONS += "meta-webos-backports-3.3" BBFILE_PATTERN_meta-webos-backports-3.3 := "^${LAYERDIR}/" -BBFILE_PRIORITY_meta-webos-backports-3.3 = "31" +BBFILE_PRIORITY_meta-webos-backports-3.3 = "34" LAYERSERIES_COMPAT_meta-webos-backports-3.3 = "dunfell" + +LAYERDEPENDS_meta-webos-backports-3.3 = " \ +core \ +openembedded-layer \ +" From cc091cad0d49928185f0df67cd985d0e1575c10a Mon Sep 17 00:00:00 2001 From: "seungwook.cha" Date: Fri, 21 Jan 2022 14:53:26 +0900 Subject: [PATCH 0290/2022] Add meta-webos-backports-3.3 patches for media components :Release Notes: Add meta-webos-backports-3.3 patches for media components :Detailed Notes: Add meta-webos-backports-3.3 patches to upgrade gstreamer version from 1.16.2 to 1.18.2 This commit is based on: http://gpro.lge.com/c/webos-pro/meta-lg-webos/+/324682 :Testing Performed: :QA Notes: :Issues Addressed: [WRN-15027] Change-Id: I6220dc95e3602838a18a128a1d2c62aa9b1e92a9 --- ...ct-has-a-different-signature-on-musl.patch | 38 +++ .../gstreamer/gst-devtools_1.18.2.bb | 42 +++ ...001-Make-player-examples-installable.patch | 37 +++ .../gstreamer/gst-examples/gst-player.desktop | 10 + .../gstreamer/gst-examples_1.18.2.bb | 32 +++ .../gstreamer/gstreamer1.0-libav_1.18.2.bb | 22 ++ .../gstreamer/gstreamer1.0-meta-base.bb | 68 +++++ .../gstreamer/gstreamer1.0-omx_1.18.2.bb | 46 ++++ ...ialized-warnings-when-compiling-with.patch | 28 ++ ...-avoid-including-sys-poll.h-directly.patch | 30 ++ ...-sentinals-for-gst_structure_get-etc.patch | 88 ++++++ ...issing-opencv-data-dir-in-yocto-buil.patch | 49 ++++ .../0005-msdk-fix-includedir-path.patch | 31 +++ .../gstreamer1.0-plugins-bad_1.18.2.bb | 147 ++++++++++ ...et-caps-from-src-pad-when-query-caps.patch | 44 +++ ...parse-enhance-SSA-text-lines-parsing.patch | 229 ++++++++++++++++ ...iv-fb-Make-sure-config.h-is-included.patch | 32 +++ ...004-glimagesink-Downrank-to-marginal.patch | 32 +++ .../gstreamer1.0-plugins-base_1.18.2.bb | 94 +++++++ .../gstreamer/gstreamer1.0-plugins-common.inc | 50 ++++ ...t-gstqtgl.h-instead-of-gst-gl-gstglf.patch | 56 ++++ .../gstreamer1.0-plugins-good_1.18.2.bb | 72 +++++ .../gstreamer1.0-plugins-packaging.inc | 70 +++++ .../gstreamer1.0-plugins-ugly_1.18.2.bb | 39 +++ .../gstreamer/gstreamer1.0-ptest.inc | 23 ++ .../gstreamer/gstreamer1.0-python_1.18.2.bb | 22 ++ .../gstreamer1.0-rtsp-server_1.18.2.bb | 31 +++ .../gstreamer/gstreamer1.0-vaapi_1.18.2.bb | 52 ++++ ...der.c-when-env-var-is-set-do-not-fal.patch | 66 +++++ ...002-Remove-unused-valgrind-detection.patch | 112 ++++++++ ...meson-Add-option-for-installed-tests.patch | 257 ++++++++++++++++++ .../gstreamer/gstreamer1.0_1.18.2.bb | 69 +++++ 32 files changed, 2018 insertions(+) create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools/0001-connect-has-a-different-signature-on-musl.patch create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools_1.18.2.bb create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples/0001-Make-player-examples-installable.patch create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples/gst-player.desktop create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples_1.18.2.bb create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.18.2.bb create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-meta-base.bb create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.18.2.bb create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-fix-maybe-uninitialized-warnings-when-compiling-with.patch create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-avoid-including-sys-poll.h-directly.patch create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-ensure-valid-sentinals-for-gst_structure_get-etc.patch create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-msdk-fix-includedir-path.patch create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.2.bb create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-ENGR00312515-get-caps-from-src-pad-when-query-caps.patch create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-ssaparse-enhance-SSA-text-lines-parsing.patch create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-viv-fb-Make-sure-config.h-is-included.patch create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0004-glimagesink-Downrank-to-marginal.patch create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.2.bb create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-qt-include-ext-qt-gstqtgl.h-instead-of-gst-gl-gstglf.patch create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.2.bb create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.18.2.bb create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-ptest.inc create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-python_1.18.2.bb create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.18.2.bb create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.18.2.bb create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0001-gst-gstpluginloader.c-when-env-var-is-set-do-not-fal.patch create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0002-Remove-unused-valgrind-detection.patch create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0003-meson-Add-option-for-installed-tests.patch create mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0_1.18.2.bb diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools/0001-connect-has-a-different-signature-on-musl.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools/0001-connect-has-a-different-signature-on-musl.patch new file mode 100755 index 000000000..c0e458135 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools/0001-connect-has-a-different-signature-on-musl.patch @@ -0,0 +1,38 @@ +From 73b1002eda17451db1f58431b42c25203f1d3097 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Sun, 9 Sep 2018 17:38:10 -0700 +Subject: [PATCH] connect has a different signature on musl + +On linux when not using glibc and using musl for C library, connect +API has a different signature, this patch fixes this so it can compile +on musl, the functionality should remain same as it is immediately +typcasted to struct sockaddr_in* type inside the function before use + +Upstream-Status: Pending + +Signed-off-by: Khem Raj +--- + validate/plugins/fault_injection/socket_interposer.c | 7 ++++++- + 1 file changed, 6 insertions(+), 1 deletion(-) + +diff --git a/validate/plugins/fault_injection/socket_interposer.c b/validate/plugins/fault_injection/socket_interposer.c +index 53c1ebb..ad7adf8 100644 +--- a/validate/plugins/fault_injection/socket_interposer.c ++++ b/validate/plugins/fault_injection/socket_interposer.c +@@ -100,10 +100,15 @@ socket_interposer_set_callback (struct sockaddr_in *addrin, + } + + int +-connect (int socket, const struct sockaddr_in *addrin, socklen_t address_len) ++#if defined(__linux__) && !defined(__GLIBC__) ++connect (int socket, const struct sockaddr *addr, socklen_t address_len) ++#else ++connect (int socket, const struct sockaddr_in *addr, socklen_t address_len) ++#endif + { + size_t i; + int override_errno = 0; ++ struct sockaddr_in* addrin = (struct sockaddr_in*)addr; + typedef ssize_t (*real_connect_fn) (int, const struct sockaddr_in *, + socklen_t); + static real_connect_fn real_connect = 0; diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools_1.18.2.bb new file mode 100755 index 000000000..9fd9e0be9 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools_1.18.2.bb @@ -0,0 +1,42 @@ +SUMMARY = "Gstreamer validation tool" +DESCRIPTION = "A Tool to test GStreamer components" +HOMEPAGE = "https://gstreamer.freedesktop.org/documentation/gst-devtools/index.html" +SECTION = "multimedia" + +LICENSE = "LGPLv2.1" +LIC_FILES_CHKSUM = "file://validate/COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343" + +#S = "${WORKDIR}/gst-devtools-${PV}" + +SRC_URI = "https://gstreamer.freedesktop.org/src/gst-devtools/gst-devtools-${PV}.tar.xz \ + file://0001-connect-has-a-different-signature-on-musl.patch \ + " + +SRC_URI[sha256sum] = "6ea73d718bf1f9692218540ff88479c51d67c0b477fa56d6812fc7b739d30a56" + +DEPENDS = "json-glib glib-2.0 glib-2.0-native gstreamer1.0 gstreamer1.0-plugins-base" +RRECOMMENDS_${PN} = "git" + +FILES_${PN} += "${datadir}/gstreamer-1.0/* ${libdir}/gst-validate-launcher/* ${libdir}/gstreamer-1.0/*" + +inherit meson pkgconfig gettext upstream-version-is-even gobject-introspection + +# TODO: put this in a gettext.bbclass patch +def gettext_oemeson(d): + if d.getVar('USE_NLS') == 'no': + return '-Dnls=disabled' + # Remove the NLS bits if USE_NLS is no or INHIBIT_DEFAULT_DEPS is set + if d.getVar('INHIBIT_DEFAULT_DEPS') and not oe.utils.inherits(d, 'cross-canadian'): + return '-Dnls=disabled' + return '-Dnls=enabled' + +EXTRA_OEMESON += " \ + -Ddoc=disabled \ + -Ddebug_viewer=disabled \ + -Dtests=disabled \ + -Dvalidate=enabled \ + ${@gettext_oemeson(d)} \ +" + +GIR_MESON_ENABLE_FLAG = "enabled" +GIR_MESON_DISABLE_FLAG = "disabled" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples/0001-Make-player-examples-installable.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples/0001-Make-player-examples-installable.patch new file mode 100755 index 000000000..ab93c1324 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples/0001-Make-player-examples-installable.patch @@ -0,0 +1,37 @@ +From 7924016fce2d0b435891a335cdae52fc939c7e3b Mon Sep 17 00:00:00 2001 +From: Jussi Kukkonen +Date: Thu, 17 Aug 2017 11:07:02 +0300 +Subject: [PATCH] Make player examples installable + +Signed-off-by: Jussi Kukkonen +Upstream-Status: Denied [Upstream considers these code examples, for now a least] + +https://bugzilla.gnome.org/show_bug.cgi?id=777827 + +--- + playback/player/gst-play/meson.build | 1 + + playback/player/gtk/meson.build | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/playback/player/gst-play/meson.build b/playback/player/gst-play/meson.build +index 8ec021d..977cc5c 100644 +--- a/playback/player/gst-play/meson.build ++++ b/playback/player/gst-play/meson.build +@@ -2,5 +2,6 @@ executable('gst-play', + ['gst-play.c', + 'gst-play-kb.c', + 'gst-play-kb.h'], ++ install: true, + dependencies : [gst_dep, gstplayer_dep, m_dep]) + +diff --git a/playback/player/gtk/meson.build b/playback/player/gtk/meson.build +index f7a7419..6281130 100644 +--- a/playback/player/gtk/meson.build ++++ b/playback/player/gtk/meson.build +@@ -13,5 +13,6 @@ if gtk_dep.found() + gtk_play_resources, + 'gtk-video-renderer.h', + 'gtk-video-renderer.c'], ++ install: true, + dependencies : [glib_dep, gobject_dep, gmodule_dep, gst_dep, gsttag_dep, gstplayer_dep, gtk_dep, x11_dep]) + endif diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples/gst-player.desktop b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples/gst-player.desktop new file mode 100755 index 000000000..7ddd456a1 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples/gst-player.desktop @@ -0,0 +1,10 @@ +[Desktop Entry] +Name=Media Player +Comment=Basic media player +Icon=multimedia-player +TryExec=gtk-play +Exec=gtk-play +StartupNotify=true +Terminal=false +Type=Application +Categories=GTK;AudioVideo; diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples_1.18.2.bb new file mode 100755 index 000000000..54a4b5df1 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples_1.18.2.bb @@ -0,0 +1,32 @@ +SUMMARY = "GStreamer examples (including gtk-play, gst-play)" +LICENSE = "LGPL-2.0+" +LIC_FILES_CHKSUM = "file://playback/player/gtk/gtk-play.c;beginline=1;endline=20;md5=f8c72dae3d36823ec716a9ebcae593b9" + +DEPENDS = "glib-2.0 gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad gtk+3 libsoup-2.4 json-glib glib-2.0-native" + +SRC_URI = "git://gitlab.freedesktop.org/gstreamer/gst-examples.git;protocol=https;branch=1.18 \ + file://0001-Make-player-examples-installable.patch \ + file://gst-player.desktop \ + " + +SRCREV = "45086d8ef2d75244d9d5c8f69c0f0e1dfd4200b3" + +S = "${WORKDIR}/git" + +inherit meson pkgconfig features_check + +UPSTREAM_CHECK_GITTAGREGEX = "(?P\d+\.(\d*[02468])+(\.\d+)+)" + +ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}" + +do_install_append() { + install -m 0644 -D ${WORKDIR}/gst-player.desktop ${D}${datadir}/applications/gst-player.desktop +} + +RDEPENDS_${PN} = "gstreamer1.0-plugins-base-playback" +RRECOMMENDS_${PN} = "gstreamer1.0-plugins-base-meta \ + gstreamer1.0-plugins-good-meta \ + gstreamer1.0-plugins-bad-meta \ + ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "gstreamer1.0-libav", "", d)} \ + ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "gstreamer1.0-plugins-ugly-meta", "", d)}" +RPROVIDES_${PN} += "gst-player gst-player-bin" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.18.2.bb new file mode 100755 index 000000000..b638814aa --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.18.2.bb @@ -0,0 +1,22 @@ +SUMMARY = "Libav-based GStreamer 1.x plugin" +HOMEPAGE = "http://gstreamer.freedesktop.org/" +SECTION = "multimedia" + +# ffmpeg has comercial license flags so add it as we need ffmpeg as a dependency +LICENSE_FLAGS = "commercial" +LICENSE = "LGPLv2+" +LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d \ + file://ext/libav/gstav.h;beginline=1;endline=18;md5=a752c35267d8276fd9ca3db6994fca9c \ + " + +SRC_URI = "https://gstreamer.freedesktop.org/src/gst-libav/gst-libav-${PV}.tar.xz" +SRC_URI[sha256sum] = "36969ad44c5f0756a8a90215410710d6c39713d58f6cee13d663be9774557f49" + +S = "${WORKDIR}/gst-libav-${PV}" + +DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base ffmpeg" + +inherit meson pkgconfig upstream-version-is-even + +FILES_${PN} += "${libdir}/gstreamer-1.0/*.so" +FILES_${PN}-staticdev += "${libdir}/gstreamer-1.0/*.a" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-meta-base.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-meta-base.bb new file mode 100755 index 000000000..016e17670 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-meta-base.bb @@ -0,0 +1,68 @@ +SUMMARY = "Gstreamer1.0 package groups" +LICENSE = "MIT" + +# Due to use of COMBINED_FEATURES +PACKAGE_ARCH = "${MACHINE_ARCH}" + +inherit packagegroup + +COMMERCIAL_PLUGINS = "${COMMERCIAL_AUDIO_PLUGINS} ${COMMERCIAL_VIDEO_PLUGINS}" +DEPENDS_UGLY="${@'gstreamer1.0-plugins-ugly' if 'ugly' in COMMERCIAL_PLUGINS.split('-') else ''}" +DEPENDS_BAD="${@'gstreamer1.0-plugins-bad' if 'bad' in COMMERCIAL_PLUGINS.split('-') else ''}" +DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good ${DEPENDS_UGLY} ${DEPENDS_BAD}" + +PACKAGES = "\ + gstreamer1.0-meta-base \ + gstreamer1.0-meta-x11-base \ + gstreamer1.0-meta-audio \ + gstreamer1.0-meta-debug \ + gstreamer1.0-meta-video" + +ALLOW_EMPTY_gstreamer1.0-meta-base = "1" +ALLOW_EMPTY_gstreamer1.0-meta-x11-base = "1" +ALLOW_EMPTY_gstreamer1.0-meta-audio = "1" +ALLOW_EMPTY_gstreamer1.0-meta-debug = "1" +ALLOW_EMPTY_gstreamer1.0-meta-video = "1" + +RDEPENDS_gstreamer1.0-meta-base = "\ + ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'gstreamer1.0-meta-x11-base', '', d)} \ + gstreamer1.0 \ + gstreamer1.0-plugins-base-playback \ + gstreamer1.0-plugins-base-gio \ + ${@bb.utils.contains('COMBINED_FEATURES', 'alsa', 'gstreamer1.0-plugins-base-alsa', '',d)} \ + gstreamer1.0-plugins-base-volume \ + gstreamer1.0-plugins-base-audioconvert \ + gstreamer1.0-plugins-base-audioresample \ + gstreamer1.0-plugins-base-typefindfunctions \ + gstreamer1.0-plugins-base-videoscale \ + gstreamer1.0-plugins-base-videoconvert \ + gstreamer1.0-plugins-good-autodetect \ + gstreamer1.0-plugins-good-soup" + +RRECOMMENDS_gstreamer1.0-meta-x11-base = "\ + gstreamer1.0-plugins-base-ximagesink \ + gstreamer1.0-plugins-base-xvimagesink" + +RDEPENDS_gstreamer1.0-meta-audio = "\ + gstreamer1.0-meta-base \ + gstreamer1.0-plugins-base-vorbis \ + gstreamer1.0-plugins-base-ogg \ + gstreamer1.0-plugins-good-wavparse \ + gstreamer1.0-plugins-good-flac \ + ${COMMERCIAL_AUDIO_PLUGINS}" + +RDEPENDS_gstreamer1.0-meta-debug = "\ + gstreamer1.0-meta-base \ + gstreamer1.0-plugins-good-debug \ + gstreamer1.0-plugins-base-audiotestsrc \ + gstreamer1.0-plugins-base-videotestsrc" + +RDEPENDS_gstreamer1.0-meta-video = "\ + gstreamer1.0-meta-base \ + gstreamer1.0-plugins-good-avi \ + gstreamer1.0-plugins-good-matroska \ + gstreamer1.0-plugins-base-theora \ + ${COMMERCIAL_VIDEO_PLUGINS}" + +RRECOMMENDS_gstreamer1.0-meta-video = "\ + gstreamer1.0-meta-audio" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.18.2.bb new file mode 100755 index 000000000..686fcc265 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.18.2.bb @@ -0,0 +1,46 @@ +SUMMARY = "OpenMAX IL plugins for GStreamer" +HOMEPAGE = "http://gstreamer.freedesktop.org/" +SECTION = "multimedia" + +LICENSE = "LGPLv2.1" +LICENSE_FLAGS = "commercial" +LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \ + file://omx/gstomx.h;beginline=1;endline=21;md5=5c8e1fca32704488e76d2ba9ddfa935f" + +SRC_URI = "https://gstreamer.freedesktop.org/src/gst-omx/gst-omx-${PV}.tar.xz" + +SRC_URI[sha256sum] = "4c05d64544eecf4aaf5b337789916c67ed720317dfb2c8c8c335720fcc5c7cf4" + +S = "${WORKDIR}/gst-omx-${PV}" + +DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad virtual/libomxil" + +inherit meson pkgconfig upstream-version-is-even + +GSTREAMER_1_0_OMX_TARGET ?= "bellagio" +GSTREAMER_1_0_OMX_CORE_NAME ?= "${libdir}/libomxil-bellagio.so.0" + +EXTRA_OEMESON += "-Dtarget=${GSTREAMER_1_0_OMX_TARGET}" + +python __anonymous () { + omx_target = d.getVar("GSTREAMER_1_0_OMX_TARGET") + if omx_target in ['generic', 'bellagio']: + # Bellagio headers are incomplete (they are missing the OMX_VERSION_MAJOR,# + # OMX_VERSION_MINOR, OMX_VERSION_REVISION, and OMX_VERSION_STEP macros); + # appending a directory path to gst-omx' internal OpenMAX IL headers fixes this + d.appendVar("CFLAGS", " -I${S}/omx/openmax") + elif omx_target == "rpi": + # Dedicated Raspberry Pi OpenMAX IL support makes this package machine specific + d.setVar("PACKAGE_ARCH", d.getVar("MACHINE_ARCH")) +} + +set_omx_core_name() { + sed -i -e "s;^core-name=.*;core-name=${GSTREAMER_1_0_OMX_CORE_NAME};" "${D}${sysconfdir}/xdg/gstomx.conf" +} +do_install[postfuncs] += " set_omx_core_name " + +FILES_${PN} += "${libdir}/gstreamer-1.0/*.so" +FILES_${PN}-staticdev += "${libdir}/gstreamer-1.0/*.a" + +VIRTUAL-RUNTIME_libomxil ?= "libomxil" +RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_libomxil}" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-fix-maybe-uninitialized-warnings-when-compiling-with.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-fix-maybe-uninitialized-warnings-when-compiling-with.patch new file mode 100755 index 000000000..13a673cd5 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-fix-maybe-uninitialized-warnings-when-compiling-with.patch @@ -0,0 +1,28 @@ +From f08ab3ac2ce43ac91d3bf65b26f26436690f499b Mon Sep 17 00:00:00 2001 +From: Andre McCurdy +Date: Tue, 26 Jan 2016 15:16:01 -0800 +Subject: [PATCH 1/4] fix maybe-uninitialized warnings when compiling with -Os + +Upstream-Status: Pending + +Signed-off-by: Andre McCurdy +--- + gst-libs/gst/codecparsers/gstvc1parser.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/gst-libs/gst/codecparsers/gstvc1parser.c b/gst-libs/gst/codecparsers/gstvc1parser.c +index 2c60ced..e8226d8 100644 +--- a/gst-libs/gst/codecparsers/gstvc1parser.c ++++ b/gst-libs/gst/codecparsers/gstvc1parser.c +@@ -1730,7 +1730,7 @@ gst_vc1_parse_sequence_layer (const guint8 * data, gsize size, + GstVC1SeqLayer * seqlayer) + { + guint32 tmp; +- guint8 tmp8; ++ guint8 tmp8 = 0; + guint8 structA[8] = { 0, }; + guint8 structB[12] = { 0, }; + GstBitReader br; +-- +2.28.0 + diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-avoid-including-sys-poll.h-directly.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-avoid-including-sys-poll.h-directly.patch new file mode 100755 index 000000000..ead6897f6 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-avoid-including-sys-poll.h-directly.patch @@ -0,0 +1,30 @@ +From 3b05e91720c10fcf6e0e408595b7217f6fa145c2 Mon Sep 17 00:00:00 2001 +From: Andre McCurdy +Date: Wed, 3 Feb 2016 18:05:41 -0800 +Subject: [PATCH 2/4] avoid including directly + +musl libc generates warnings if is included directly. + +Upstream-Status: Pending + +Signed-off-by: Andre McCurdy +--- + sys/dvb/gstdvbsrc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/sys/dvb/gstdvbsrc.c b/sys/dvb/gstdvbsrc.c +index ca6b92a..b2772db 100644 +--- a/sys/dvb/gstdvbsrc.c ++++ b/sys/dvb/gstdvbsrc.c +@@ -97,7 +97,7 @@ + #include + #include + #include +-#include ++#include + #include + #include + #include +-- +2.28.0 + diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-ensure-valid-sentinals-for-gst_structure_get-etc.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-ensure-valid-sentinals-for-gst_structure_get-etc.patch new file mode 100755 index 000000000..88fbc40dc --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-ensure-valid-sentinals-for-gst_structure_get-etc.patch @@ -0,0 +1,88 @@ +From 5ed27de9f662fe063b8b3d5d4335aa64cd4718c9 Mon Sep 17 00:00:00 2001 +From: Andre McCurdy +Date: Tue, 9 Feb 2016 14:00:00 -0800 +Subject: [PATCH 3/4] ensure valid sentinals for gst_structure_get() etc + +For GStreamer functions declared with G_GNUC_NULL_TERMINATED, +ie __attribute__((__sentinel__)), gcc will generate a warning if the +last parameter passed to the function is not NULL (where a valid NULL +in this context is defined as zero with any pointer type). + +The C callers to such functions within gst-plugins-bad use the C NULL +definition (ie ((void*)0)), which is a valid sentinel. + +However the C++ NULL definition (ie 0L), is not a valid sentinel +without an explicit cast to a pointer type. + +Upstream-Status: Pending + +Signed-off-by: Andre McCurdy +--- + sys/decklink/gstdecklink.cpp | 10 +++++----- + sys/decklink/gstdecklinkaudiosrc.cpp | 2 +- + sys/decklink/gstdecklinkvideosink.cpp | 2 +- + 3 files changed, 7 insertions(+), 7 deletions(-) + +diff --git a/sys/decklink/gstdecklink.cpp b/sys/decklink/gstdecklink.cpp +index 4dac7e1..43762ce 100644 +--- a/sys/decklink/gstdecklink.cpp ++++ b/sys/decklink/gstdecklink.cpp +@@ -674,7 +674,7 @@ gst_decklink_mode_get_generic_structure (GstDecklinkModeEnum e) + "pixel-aspect-ratio", GST_TYPE_FRACTION, mode->par_n, mode->par_d, + "interlace-mode", G_TYPE_STRING, + mode->interlaced ? "interleaved" : "progressive", +- "framerate", GST_TYPE_FRACTION, mode->fps_n, mode->fps_d, NULL); ++ "framerate", GST_TYPE_FRACTION, mode->fps_n, mode->fps_d, (void*)NULL); + + return s; + } +@@ -699,16 +699,16 @@ gst_decklink_mode_get_structure (GstDecklinkModeEnum e, BMDPixelFormat f, + case bmdFormat8BitYUV: /* '2vuy' */ + gst_structure_set (s, "format", G_TYPE_STRING, "UYVY", + "colorimetry", G_TYPE_STRING, mode->colorimetry, +- "chroma-site", G_TYPE_STRING, "mpeg2", NULL); ++ "chroma-site", G_TYPE_STRING, "mpeg2", (void*)NULL); + break; + case bmdFormat10BitYUV: /* 'v210' */ +- gst_structure_set (s, "format", G_TYPE_STRING, "v210", NULL); ++ gst_structure_set (s, "format", G_TYPE_STRING, "v210", (void*)NULL); + break; + case bmdFormat8BitARGB: /* 'ARGB' */ +- gst_structure_set (s, "format", G_TYPE_STRING, "ARGB", NULL); ++ gst_structure_set (s, "format", G_TYPE_STRING, "ARGB", (void*)NULL); + break; + case bmdFormat8BitBGRA: /* 'BGRA' */ +- gst_structure_set (s, "format", G_TYPE_STRING, "BGRA", NULL); ++ gst_structure_set (s, "format", G_TYPE_STRING, "BGRA", (void*)NULL); + break; + case bmdFormat10BitRGB: /* 'r210' Big-endian RGB 10-bit per component with SMPTE video levels (64-960). Packed as 2:10:10:10 */ + case bmdFormat12BitRGB: /* 'R12B' Big-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component */ +diff --git a/sys/decklink/gstdecklinkaudiosrc.cpp b/sys/decklink/gstdecklinkaudiosrc.cpp +index 2fef934..c47229a 100644 +--- a/sys/decklink/gstdecklinkaudiosrc.cpp ++++ b/sys/decklink/gstdecklinkaudiosrc.cpp +@@ -379,7 +379,7 @@ gst_decklink_audio_src_start (GstDecklinkAudioSrc * self) + g_mutex_unlock (&self->input->lock); + + if (videosrc) { +- g_object_get (videosrc, "connection", &vconn, NULL); ++ g_object_get (videosrc, "connection", &vconn, (void *) NULL); + gst_object_unref (videosrc); + + switch (vconn) { +diff --git a/sys/decklink/gstdecklinkvideosink.cpp b/sys/decklink/gstdecklinkvideosink.cpp +index e3a6775..f1a5aae 100644 +--- a/sys/decklink/gstdecklinkvideosink.cpp ++++ b/sys/decklink/gstdecklinkvideosink.cpp +@@ -286,7 +286,7 @@ reset_framerate (GstCapsFeatures * features, GstStructure * structure, + gpointer user_data) + { + gst_structure_set (structure, "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, +- G_MAXINT, 1, NULL); ++ G_MAXINT, 1, (void *) NULL); + + return TRUE; + } +-- +2.28.0 + diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch new file mode 100755 index 000000000..b81670906 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch @@ -0,0 +1,49 @@ +From f19ff66640f2f472c4e9d9055253032d34e125c6 Mon Sep 17 00:00:00 2001 +From: Andrey Zhizhikin +Date: Mon, 27 Jan 2020 10:22:35 +0000 +Subject: [PATCH 4/4] opencv: resolve missing opencv data dir in yocto build + +When Yocto build is performed, opencv searches for data dir using simple +'test' command, this fails because pkg-config provides an absolute +path on the target which needs to be prepended by PKG_CONFIG_SYSROOT_DIR +in order for the 'test' utility to pick up the absolute path. + +Upstream-Status: Inappropriate [OE-specific] + +Signed-off-by: Andrey Zhizhikin +--- + ext/opencv/meson.build | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/ext/opencv/meson.build b/ext/opencv/meson.build +index 0b0b3fc..0ed3344 100644 +--- a/ext/opencv/meson.build ++++ b/ext/opencv/meson.build +@@ -78,20 +78,21 @@ else + endif + + if opencv_found ++ pkgconf_sysroot = run_command(python3, '-c', 'import os; print(os.environ.get("PKG_CONFIG_SYSROOT_DIR"))').stdout().strip() + opencv_prefix = opencv_dep.get_pkgconfig_variable('prefix') + gstopencv_cargs += ['-DOPENCV_PREFIX="' + opencv_prefix + '"'] + + # Check the data dir used by opencv for its xml data files + # Use prefix from pkg-config to be compatible with cross-compilation +- r = run_command('test', '-d', opencv_prefix + '/share/opencv') ++ r = run_command('test', '-d', pkgconf_sysroot + opencv_prefix + '/share/opencv') + if r.returncode() == 0 + gstopencv_cargs += '-DOPENCV_PATH_NAME="opencv"' + else +- r = run_command('test', '-d', opencv_prefix + '/share/OpenCV') ++ r = run_command('test', '-d', pkgconf_sysroot + opencv_prefix + '/share/OpenCV') + if r.returncode() == 0 + gstopencv_cargs += '-DOPENCV_PATH_NAME="OpenCV"' + else +- r = run_command('test', '-d', opencv_prefix + '/share/opencv4') ++ r = run_command('test', '-d', pkgconf_sysroot + opencv_prefix + '/share/opencv4') + if r.returncode() == 0 + gstopencv_cargs += '-DOPENCV_PATH_NAME="opencv4"' + else +-- +2.28.0 + diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-msdk-fix-includedir-path.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-msdk-fix-includedir-path.patch new file mode 100755 index 000000000..cb3bb7d36 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-msdk-fix-includedir-path.patch @@ -0,0 +1,31 @@ +From 1f00d5026118ebd48e4ccf83d32d67155c4e7f60 Mon Sep 17 00:00:00 2001 +From: Naveen Saini +Date: Wed, 30 Dec 2020 16:37:47 +0800 +Subject: [PATCH] msdk: fix includedir path + +In cross compilation, need to prepend PKG_CONFIG_SYSROOT_DIR to the dir path. + +Upstream-Status: Inappropriate [OE-specific] + +Signed-off-by: Naveen Saini +--- + sys/msdk/meson.build | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/sys/msdk/meson.build b/sys/msdk/meson.build +index 6346c9451..068f38548 100644 +--- a/sys/msdk/meson.build ++++ b/sys/msdk/meson.build +@@ -40,7 +40,9 @@ endif + + mfx_dep = dependency('libmfx', required: false) + if mfx_dep.found() ++ pkgconf_sysroot = run_command(python3, '-c', 'import os; print(os.environ.get("PKG_CONFIG_SYSROOT_DIR"))').stdout().strip() + mfx_incdir = mfx_dep.get_pkgconfig_variable('includedir') ++ mfx_incdir = pkgconf_sysroot + mfx_incdir + mfx_inc = [] + else + # Old versions of MediaSDK don't provide a pkg-config file +-- +2.17.1 + diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.2.bb new file mode 100755 index 000000000..6d0c988b7 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.2.bb @@ -0,0 +1,147 @@ +require gstreamer1.0-plugins-common.inc + +SRC_URI = "https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-${PV}.tar.xz \ + file://0001-fix-maybe-uninitialized-warnings-when-compiling-with.patch \ + file://0002-avoid-including-sys-poll.h-directly.patch \ + file://0003-ensure-valid-sentinals-for-gst_structure_get-etc.patch \ + file://0004-opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch \ + file://0005-msdk-fix-includedir-path.patch \ + " +SRC_URI[sha256sum] = "8ad5822f1118fe46a19af54422b74e3a16d79a6800dcb173b49e199a496b341a" + +S = "${WORKDIR}/gst-plugins-bad-${PV}" + +LICENSE = "GPLv2+ & LGPLv2+ & LGPLv2.1+" +LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c" + +DEPENDS += "gstreamer1.0-plugins-base" + +inherit gobject-introspection + +PACKAGECONFIG ??= " \ + ${GSTREAMER_ORC} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} \ + ${@bb.utils.filter('DISTRO_FEATURES', 'directfb vulkan', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'gl', '', d)} \ + bz2 closedcaption curl dash dtls hls rsvg sbc smoothstreaming sndfile \ + ttml uvch264 webp \ +" + +PACKAGECONFIG[aom] = "-Daom=enabled,-Daom=disabled,aom" +PACKAGECONFIG[assrender] = "-Dassrender=enabled,-Dassrender=disabled,libass" +PACKAGECONFIG[bluez] = "-Dbluez=enabled,-Dbluez=disabled,bluez5" +PACKAGECONFIG[bz2] = "-Dbz2=enabled,-Dbz2=disabled,bzip2" +PACKAGECONFIG[closedcaption] = "-Dclosedcaption=enabled,-Dclosedcaption=disabled,pango cairo" +PACKAGECONFIG[curl] = "-Dcurl=enabled,-Dcurl=disabled,curl" +PACKAGECONFIG[dash] = "-Ddash=enabled,-Ddash=disabled,libxml2" +PACKAGECONFIG[dc1394] = "-Ddc1394=enabled,-Ddc1394=disabled,libdc1394" +PACKAGECONFIG[directfb] = "-Ddirectfb=enabled,-Ddirectfb=disabled,directfb" +PACKAGECONFIG[dtls] = "-Ddtls=enabled,-Ddtls=disabled,openssl" +PACKAGECONFIG[faac] = "-Dfaac=enabled,-Dfaac=disabled,faac" +PACKAGECONFIG[faad] = "-Dfaad=enabled,-Dfaad=disabled,faad2" +PACKAGECONFIG[fluidsynth] = "-Dfluidsynth=enabled,-Dfluidsynth=disabled,fluidsynth" +PACKAGECONFIG[hls] = "-Dhls=enabled -Dhls-crypto=nettle,-Dhls=disabled,nettle" +# the gl packageconfig enables OpenGL elements that haven't been ported +# to -base yet. They depend on the gstgl library in -base, so we do +# not add GL dependencies here, since these are taken care of in -base. +PACKAGECONFIG[gl] = "-Dgl=enabled,-Dgl=disabled," +PACKAGECONFIG[kms] = "-Dkms=enabled,-Dkms=disabled,libdrm" +PACKAGECONFIG[libde265] = "-Dlibde265=enabled,-Dlibde265=disabled,libde265" +PACKAGECONFIG[libmms] = "-Dlibmms=enabled,-Dlibmms=disabled,libmms" +PACKAGECONFIG[libssh2] = "-Dcurl-ssh2=enabled,-Dcurl-ssh2=disabled,libssh2" +PACKAGECONFIG[lcms2] = "-Dcolormanagement=enabled,-Dcolormanagement=disabled,lcms" +PACKAGECONFIG[modplug] = "-Dmodplug=enabled,-Dmodplug=disabled,libmodplug" +PACKAGECONFIG[msdk] = "-Dmsdk=enabled,-Dmsdk=disabled,intel-mediasdk" +PACKAGECONFIG[neon] = "-Dneon=enabled,-Dneon=disabled,neon" +PACKAGECONFIG[openal] = "-Dopenal=enabled,-Dopenal=disabled,openal-soft" +PACKAGECONFIG[opencv] = "-Dopencv=enabled,-Dopencv=disabled,opencv" +PACKAGECONFIG[openh264] = "-Dopenh264=enabled,-Dopenh264=disabled,openh264" +PACKAGECONFIG[openjpeg] = "-Dopenjpeg=enabled,-Dopenjpeg=disabled,openjpeg" +PACKAGECONFIG[openmpt] = "-Dopenmpt=enabled,-Dopenmpt=disabled,libopenmpt" +# the opus encoder/decoder elements are now in the -base package, +# but the opus parser remains in -bad +PACKAGECONFIG[opusparse] = "-Dopus=enabled,-Dopus=disabled,libopus" +PACKAGECONFIG[resindvd] = "-Dresindvd=enabled,-Dresindvd=disabled,libdvdread libdvdnav" +PACKAGECONFIG[rsvg] = "-Drsvg=enabled,-Drsvg=disabled,librsvg" +PACKAGECONFIG[rtmp] = "-Drtmp=enabled,-Drtmp=disabled,rtmpdump" +PACKAGECONFIG[sbc] = "-Dsbc=enabled,-Dsbc=disabled,sbc" +PACKAGECONFIG[sctp] = "-Dsctp=enabled,-Dsctp=disabled" +PACKAGECONFIG[smoothstreaming] = "-Dsmoothstreaming=enabled,-Dsmoothstreaming=disabled,libxml2" +PACKAGECONFIG[sndfile] = "-Dsndfile=enabled,-Dsndfile=disabled,libsndfile1" +PACKAGECONFIG[srt] = "-Dsrt=enabled,-Dsrt=disabled,srt" +PACKAGECONFIG[srtp] = "-Dsrtp=enabled,-Dsrtp=disabled,libsrtp" +PACKAGECONFIG[tinyalsa] = "-Dtinyalsa=enabled,-Dtinyalsa=disabled,tinyalsa" +PACKAGECONFIG[ttml] = "-Dttml=enabled,-Dttml=disabled,libxml2 pango cairo" +PACKAGECONFIG[uvch264] = "-Duvch264=enabled,-Duvch264=disabled,libusb1 libgudev" +PACKAGECONFIG[v4l2codecs] = "-Dv4l2codecs=enabled,-Dv4l2codecs=disabled,libgudev" +PACKAGECONFIG[va] = "-Dva=enabled,-Dva=disabled,libva" +PACKAGECONFIG[voaacenc] = "-Dvoaacenc=enabled,-Dvoaacenc=disabled,vo-aacenc" +PACKAGECONFIG[voamrwbenc] = "-Dvoamrwbenc=enabled,-Dvoamrwbenc=disabled,vo-amrwbenc" +PACKAGECONFIG[vulkan] = "-Dvulkan=enabled,-Dvulkan=disabled,vulkan-loader shaderc-native" +PACKAGECONFIG[wayland] = "-Dwayland=enabled,-Dwayland=disabled,wayland-native wayland wayland-protocols libdrm" +PACKAGECONFIG[webp] = "-Dwebp=enabled,-Dwebp=disabled,libwebp" +PACKAGECONFIG[webrtc] = "-Dwebrtc=enabled,-Dwebrtc=disabled,libnice" +PACKAGECONFIG[webrtcdsp] = "-Dwebrtcdsp=enabled,-Dwebrtcdsp=disabled,webrtc-audio-processing" +PACKAGECONFIG[zbar] = "-Dzbar=enabled,-Dzbar=disabled,zbar" +PACKAGECONFIG[x265] = "-Dx265=enabled,-Dx265=disabled,x265" + +EXTRA_OEMESON += " \ + -Ddoc=disabled \ + -Ddecklink=enabled \ + -Ddvb=enabled \ + -Dfbdev=enabled \ + -Dipcpipeline=enabled \ + -Dshm=enabled \ + -Dtranscode=enabled \ + -Dandroidmedia=disabled \ + -Dapplemedia=disabled \ + -Davtp=disabled \ + -Dbs2b=disabled \ + -Dchromaprint=disabled \ + -Dd3dvideosink=disabled \ + -Dd3d11=disabled \ + -Ddirectsound=disabled \ + -Ddts=disabled \ + -Dfdkaac=disabled \ + -Dflite=disabled \ + -Dgme=disabled \ + -Dgsm=disabled \ + -Diqa=disabled \ + -Dkate=disabled \ + -Dladspa=disabled \ + -Dlv2=disabled \ + -Dmagicleap=disabled \ + -Dmediafoundation=disabled \ + -Dmicrodns=disabled \ + -Dmpeg2enc=disabled \ + -Dmplex=disabled \ + -Dmusepack=disabled \ + -Dnvcodec=disabled \ + -Dofa=disabled \ + -Dopenexr=disabled \ + -Dopenni2=disabled \ + -Dopensles=disabled \ + -Dsoundtouch=disabled \ + -Dspandsp=disabled \ + -Dsvthevcenc=disabled \ + -Dteletext=disabled \ + -Dwasapi=disabled \ + -Dwasapi2=disabled \ + -Dwildmidi=disabled \ + -Dwinks=disabled \ + -Dwinscreencap=disabled \ + -Dwpe=disabled \ + -Dzxing=disabled \ +" + +export OPENCV_PREFIX = "${STAGING_DIR_TARGET}${prefix}" + +ARM_INSTRUCTION_SET_armv4 = "arm" +ARM_INSTRUCTION_SET_armv5 = "arm" + +FILES_${PN}-freeverb += "${datadir}/gstreamer-1.0/presets/GstFreeverb.prs" +FILES_${PN}-opencv += "${datadir}/gst-plugins-bad/1.0/opencv*" +FILES_${PN}-transcode += "${datadir}/gstreamer-1.0/encoding-profiles" +FILES_${PN}-voamrwbenc += "${datadir}/gstreamer-1.0/presets/GstVoAmrwbEnc.prs" + diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-ENGR00312515-get-caps-from-src-pad-when-query-caps.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-ENGR00312515-get-caps-from-src-pad-when-query-caps.patch new file mode 100755 index 000000000..d5d983837 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-ENGR00312515-get-caps-from-src-pad-when-query-caps.patch @@ -0,0 +1,44 @@ +From f9d48cd85ee68207733b1b91a00453462c33524a Mon Sep 17 00:00:00 2001 +From: zhouming +Date: Wed, 14 May 2014 10:16:20 +0800 +Subject: [PATCH 1/4] ENGR00312515: get caps from src pad when query caps + +https://bugzilla.gnome.org/show_bug.cgi?id=728312 + +Upstream-Status: Pending + +Signed-off-by: zhouming +--- + gst-libs/gst/tag/gsttagdemux.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + mode change 100644 => 100755 gst-libs/gst/tag/gsttagdemux.c + +diff --git a/gst-libs/gst/tag/gsttagdemux.c b/gst-libs/gst/tag/gsttagdemux.c +old mode 100644 +new mode 100755 +index f545857..62d10ef +--- a/gst-libs/gst/tag/gsttagdemux.c ++++ b/gst-libs/gst/tag/gsttagdemux.c +@@ -1777,6 +1777,19 @@ gst_tag_demux_pad_query (GstPad * pad, GstObject * parent, GstQuery * query) + } + break; + } ++ case GST_QUERY_CAPS: ++ { ++ ++ /* We can hijack caps query if we typefind already */ ++ if (demux->priv->src_caps) { ++ gst_query_set_caps_result (query, demux->priv->src_caps); ++ res = TRUE; ++ } else { ++ res = gst_pad_query_default (pad, parent, query); ++ } ++ break; ++ } ++ + default: + res = gst_pad_query_default (pad, parent, query); + break; +-- +2.28.0 + diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-ssaparse-enhance-SSA-text-lines-parsing.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-ssaparse-enhance-SSA-text-lines-parsing.patch new file mode 100755 index 000000000..e453a500c --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-ssaparse-enhance-SSA-text-lines-parsing.patch @@ -0,0 +1,229 @@ +From f587861bbe12ad0b10370f835592746aafedbf56 Mon Sep 17 00:00:00 2001 +From: Mingke Wang +Date: Thu, 19 Mar 2015 14:17:10 +0800 +Subject: [PATCH 2/4] ssaparse: enhance SSA text lines parsing. + +some parser will pass in the original ssa text line which starts with "Dialog:" +and there's are maybe multiple Dialog lines in one input buffer. + +Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=747496] + +Signed-off-by: Mingke Wang +--- + gst/subparse/gstssaparse.c | 150 +++++++++++++++++++++++++++++++++---- + 1 file changed, 134 insertions(+), 16 deletions(-) + mode change 100644 => 100755 gst/subparse/gstssaparse.c + +diff --git a/gst/subparse/gstssaparse.c b/gst/subparse/gstssaparse.c +old mode 100644 +new mode 100755 +index c849c08..4b9636c +--- a/gst/subparse/gstssaparse.c ++++ b/gst/subparse/gstssaparse.c +@@ -262,6 +262,7 @@ gst_ssa_parse_remove_override_codes (GstSsaParse * parse, gchar * txt) + * gst_ssa_parse_push_line: + * @parse: caller element + * @txt: text to push ++ * @size: text size need to be parse + * @start: timestamp for the buffer + * @duration: duration for the buffer + * +@@ -271,27 +272,133 @@ gst_ssa_parse_remove_override_codes (GstSsaParse * parse, gchar * txt) + * Returns: result of the push of the created buffer + */ + static GstFlowReturn +-gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt, ++gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt, gint size, + GstClockTime start, GstClockTime duration) + { + GstFlowReturn ret; + GstBuffer *buf; +- gchar *t, *escaped; ++ gchar *t, *text, *p, *escaped, *p_start, *p_end; + gint num, i, len; ++ GstClockTime start_time = G_MAXUINT64, end_time = 0; + +- num = atoi (txt); +- GST_LOG_OBJECT (parse, "Parsing line #%d at %" GST_TIME_FORMAT, +- num, GST_TIME_ARGS (start)); +- +- /* skip all non-text fields before the actual text */ ++ p = text = g_malloc(size + 1); ++ *p = '\0'; + t = txt; +- for (i = 0; i < 8; ++i) { +- t = strchr (t, ','); ++ ++ /* there are may have multiple dialogue lines at a time */ ++ while (*t) { ++ /* ignore leading white space characters */ ++ while (isspace(*t)) ++ t++; ++ ++ /* ignore Format: and Style: lines */ ++ if (strncmp(t, "Format:", 7) == 0 || strncmp(t, "Style:", 6) == 0) { ++ while (*t != '\0' && *t != '\n') { ++ t++; ++ } ++ } ++ ++ if (*t == '\0') ++ break; ++ ++ /* continue with next line */ ++ if (*t == '\n') { ++ t++; ++ continue; ++ } ++ ++ if(strncmp(t, "Dialogue:", 9) != 0) { ++ /* not started with "Dialogue:", it must be a line trimmed by demuxer */ ++ num = atoi (t); ++ GST_LOG_OBJECT (parse, "Parsing line #%d at %" GST_TIME_FORMAT, ++ num, GST_TIME_ARGS (start)); ++ ++ /* skip all non-text fields before the actual text */ ++ for (i = 0; i < 8; ++i) { ++ t = strchr (t, ','); ++ if (t == NULL) ++ break; ++ ++t; ++ } ++ } else { ++ /* started with "Dialogue:", update timestamp and duration */ ++ /* time format are like Dialog:Mark,0:00:01.02,0:00:03.04,xx,xxx,... */ ++ guint hour, min, sec, msec, len; ++ GstClockTime tmp; ++ gchar t_str[12] = {0}; ++ ++ /* find the first ',' */ ++ p_start = strchr (t, ','); ++ if (p_start) ++ p_end = strchr (++p_start, ','); ++ ++ if (p_start && p_end) { ++ /* copy text between first ',' and second ',' */ ++ strncpy(t_str, p_start, p_end - p_start); ++ if (sscanf (t_str, "%u:%u:%u.%u", &hour, &min, &sec, &msec) == 4) { ++ tmp = ((hour*3600) + (min*60) + sec) * GST_SECOND + msec*GST_MSECOND; ++ GST_DEBUG_OBJECT (parse, "Get start time:%02d:%02d:%02d:%03d\n", ++ hour, min, sec, msec); ++ if (start_time > tmp) ++ start_time = tmp; ++ } else { ++ GST_WARNING_OBJECT (parse, ++ "failed to parse ssa start timestamp string :%s", t_str); ++ } ++ ++ p_start = p_end; ++ p_end = strchr (++p_start, ','); ++ if (p_end) { ++ /* copy text between second ',' and third ',' */ ++ strncpy(t_str, p_start, p_end - p_start); ++ if (sscanf (t_str, "%u:%u:%u.%u", &hour, &min, &sec, &msec) == 4) { ++ tmp = ((hour*3600) + (min*60) + sec)*GST_SECOND + msec*GST_MSECOND; ++ GST_DEBUG_OBJECT(parse, "Get end time:%02d:%02d:%02d:%03d\n", ++ hour, min, sec, msec); ++ if (end_time < tmp) ++ end_time = tmp; ++ } else { ++ GST_WARNING_OBJECT (parse, ++ "failed to parse ssa end timestamp string :%s", t_str); ++ } ++ } ++ } ++ ++ /* now skip all non-text fields before the actual text */ ++ for (i = 0; i <= 8; ++i) { ++ t = strchr (t, ','); ++ if (t == NULL) ++ break; ++ ++t; ++ } ++ } ++ ++ /* line end before expected number of ',', not a Dialogue line */ + if (t == NULL) +- return GST_FLOW_ERROR; +- ++t; ++ break; ++ ++ /* if not the first line, and the last character of previous line is '\0', ++ * then replace it with '\N' */ ++ if (p != text && *p == '\0') { ++ *p++ = '\\'; ++ *p++ = 'N'; ++ } ++ ++ /* copy all actual text of this line */ ++ while ((*t != '\0') && (*t != '\n')) ++ *p++ = *t++; ++ ++ /* add a terminator at the end */ ++ *p = '\0'; ++ } ++ ++ /* not valid text found in this buffer return OK to let caller unref buffer */ ++ if (strlen(text) <= 0) { ++ GST_WARNING_OBJECT (parse, "Not valid text found in this buffer\n"); ++ return GST_FLOW_ERROR; + } + ++ t = text; + GST_LOG_OBJECT (parse, "Text : %s", t); + + if (gst_ssa_parse_remove_override_codes (parse, t)) { +@@ -309,13 +416,22 @@ gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt, + gst_buffer_fill (buf, 0, escaped, len + 1); + gst_buffer_set_size (buf, len); + g_free (escaped); ++ g_free(t); ++ ++ if (start_time != G_MAXUINT64) ++ GST_BUFFER_TIMESTAMP (buf) = start_time; ++ else ++ GST_BUFFER_TIMESTAMP (buf) = start; + +- GST_BUFFER_TIMESTAMP (buf) = start; +- GST_BUFFER_DURATION (buf) = duration; ++ if (end_time > start_time) ++ GST_BUFFER_DURATION (buf) = end_time - start_time; ++ else ++ GST_BUFFER_DURATION (buf) = duration; + + GST_LOG_OBJECT (parse, "Pushing buffer with timestamp %" GST_TIME_FORMAT +- " and duration %" GST_TIME_FORMAT, GST_TIME_ARGS (start), +- GST_TIME_ARGS (duration)); ++ " and duration %" GST_TIME_FORMAT, ++ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), ++ GST_TIME_ARGS (GST_BUFFER_DURATION (buf))); + + ret = gst_pad_push (parse->srcpad, buf); + +@@ -335,6 +451,7 @@ gst_ssa_parse_chain (GstPad * sinkpad, GstObject * parent, GstBuffer * buf) + GstClockTime ts; + gchar *txt; + GstMapInfo map; ++ gint size; + + if (G_UNLIKELY (!parse->framed)) + goto not_framed; +@@ -352,13 +469,14 @@ gst_ssa_parse_chain (GstPad * sinkpad, GstObject * parent, GstBuffer * buf) + /* make double-sure it's 0-terminated and all */ + gst_buffer_map (buf, &map, GST_MAP_READ); + txt = g_strndup ((gchar *) map.data, map.size); ++ size = map.size; + gst_buffer_unmap (buf, &map); + + if (txt == NULL) + goto empty_text; + + ts = GST_BUFFER_TIMESTAMP (buf); +- ret = gst_ssa_parse_push_line (parse, txt, ts, GST_BUFFER_DURATION (buf)); ++ ret = gst_ssa_parse_push_line (parse, txt, size, ts, GST_BUFFER_DURATION (buf)); + + if (ret != GST_FLOW_OK && GST_CLOCK_TIME_IS_VALID (ts)) { + GstSegment segment; +-- +2.28.0 + diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-viv-fb-Make-sure-config.h-is-included.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-viv-fb-Make-sure-config.h-is-included.patch new file mode 100755 index 000000000..2af83ff8b --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-viv-fb-Make-sure-config.h-is-included.patch @@ -0,0 +1,32 @@ +From 153f3b83a3fed77785bd1420bed8bbafa2d791b3 Mon Sep 17 00:00:00 2001 +From: Carlos Rafael Giani +Date: Tue, 21 May 2019 14:01:11 +0200 +Subject: [PATCH 3/4] viv-fb: Make sure config.h is included + +This prevents build errors due to missing GST_API_* symbols + +Upstream-Status: Pending + +Signed-off-by: Carlos Rafael Giani +--- + gst-libs/gst/gl/gl-prelude.h | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/gst-libs/gst/gl/gl-prelude.h b/gst-libs/gst/gl/gl-prelude.h +index 05e1f62..96ce5e6 100644 +--- a/gst-libs/gst/gl/gl-prelude.h ++++ b/gst-libs/gst/gl/gl-prelude.h +@@ -22,6 +22,10 @@ + #ifndef __GST_GL_PRELUDE_H__ + #define __GST_GL_PRELUDE_H__ + ++#ifdef HAVE_CONFIG_H ++#include "config.h" ++#endif ++ + #include + + #ifdef BUILDING_GST_GL +-- +2.28.0 + diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0004-glimagesink-Downrank-to-marginal.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0004-glimagesink-Downrank-to-marginal.patch new file mode 100755 index 000000000..f45ea65ef --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0004-glimagesink-Downrank-to-marginal.patch @@ -0,0 +1,32 @@ +From 79841a02ee754eba736cb32aaf2ed2b2fc0483d4 Mon Sep 17 00:00:00 2001 +From: Alexander Kanavin +Date: Thu, 24 Sep 2015 19:47:32 +0300 +Subject: [PATCH 4/4] glimagesink: Downrank to marginal + +On desktop, where there is good OpenGL, xvimagesink will come up first, +on other platforms, OpenGL can't be trusted because it's either software (like +in a VM) or broken (like on embedded)., so let ximagesink come above. + +Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=751684] + +Signed-off-by: Alexander Kanavin +--- + ext/gl/gstopengl.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/ext/gl/gstopengl.c b/ext/gl/gstopengl.c +index 302e845..463be9c 100644 +--- a/ext/gl/gstopengl.c ++++ b/ext/gl/gstopengl.c +@@ -127,7 +127,7 @@ plugin_init (GstPlugin * plugin) + #endif + + if (!gst_element_register (plugin, "glimagesink", +- GST_RANK_SECONDARY, gst_gl_image_sink_bin_get_type ())) { ++ GST_RANK_MARGINAL, gst_gl_image_sink_bin_get_type ())) { + return FALSE; + } + +-- +2.28.0 + diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.2.bb new file mode 100755 index 000000000..531d577b0 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.2.bb @@ -0,0 +1,94 @@ +require gstreamer1.0-plugins-common.inc + +LICENSE = "GPLv2+ & LGPLv2+" +LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d" + +SRC_URI = "https://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-${PV}.tar.xz \ + file://0001-ENGR00312515-get-caps-from-src-pad-when-query-caps.patch \ + file://0003-viv-fb-Make-sure-config.h-is-included.patch \ + file://0002-ssaparse-enhance-SSA-text-lines-parsing.patch \ + file://0004-glimagesink-Downrank-to-marginal.patch \ + " +SRC_URI[sha256sum] = "dd04fb1f7826e2f6d9b4d66fc22f19cc6a47c301e13041f0ee3d7f65c89b05ac" + +S = "${WORKDIR}/gst-plugins-base-${PV}" + +DEPENDS += "iso-codes util-linux zlib" + +inherit gobject-introspection + +PACKAGES_DYNAMIC =+ "^libgst.*" + +# opengl packageconfig factored out to make it easy for distros +# and BSP layers to choose OpenGL APIs/platforms/window systems +PACKAGECONFIG_GL ?= "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'gles2 egl', '', d)}" + +PACKAGECONFIG ??= " \ + ${GSTREAMER_ORC} \ + ${PACKAGECONFIG_GL} \ + ${@bb.utils.filter('DISTRO_FEATURES', 'alsa x11', d)} \ + jpeg ogg pango png theora vorbis \ + ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland egl', '', d)} \ +" + +OPENGL_APIS = 'opengl gles2' +OPENGL_PLATFORMS = 'egl' + +X11DEPENDS = "virtual/libx11 libsm libxrender libxv" +X11ENABLEOPTS = "-Dx11=enabled -Dxvideo=enabled -Dxshm=enabled" +X11DISABLEOPTS = "-Dx11=disabled -Dxvideo=disabled -Dxshm=disabled" + +PACKAGECONFIG[alsa] = "-Dalsa=enabled,-Dalsa=disabled,alsa-lib" +PACKAGECONFIG[cdparanoia] = "-Dcdparanoia=enabled,-Dcdparanoia=disabled,cdparanoia" +PACKAGECONFIG[jpeg] = "-Dgl-jpeg=enabled,-Dgl-jpeg=disabled,jpeg" +PACKAGECONFIG[ogg] = "-Dogg=enabled,-Dogg=disabled,libogg" +PACKAGECONFIG[opus] = "-Dopus=enabled,-Dopus=disabled,libopus" +PACKAGECONFIG[pango] = "-Dpango=enabled,-Dpango=disabled,pango" +PACKAGECONFIG[png] = "-Dgl-png=enabled,-Dgl-png=disabled,libpng" +PACKAGECONFIG[theora] = "-Dtheora=enabled,-Dtheora=disabled,libtheora" +PACKAGECONFIG[tremor] = "-Dtremor=enabled,-Dtremor=disabled,tremor" +PACKAGECONFIG[visual] = "-Dlibvisual=enabled,-Dlibvisual=disabled,libvisual" +PACKAGECONFIG[vorbis] = "-Dvorbis=enabled,-Dvorbis=disabled,libvorbis" +PACKAGECONFIG[x11] = "${X11ENABLEOPTS},${X11DISABLEOPTS},${X11DEPENDS}" + +# OpenGL API packageconfigs +PACKAGECONFIG[opengl] = ",,virtual/libgl libglu" +PACKAGECONFIG[gles2] = ",,virtual/libgles2" + +# OpenGL platform packageconfigs +PACKAGECONFIG[egl] = ",,virtual/egl" + +# OpenGL window systems (except for X11) +PACKAGECONFIG[gbm] = ",,virtual/libgbm libgudev libdrm" +PACKAGECONFIG[wayland] = ",,wayland-native wayland wayland-protocols libdrm" +PACKAGECONFIG[dispmanx] = ",,virtual/libomxil" + +OPENGL_WINSYS_append = "${@bb.utils.contains('PACKAGECONFIG', 'x11', ' x11', '', d)}" +OPENGL_WINSYS_append = "${@bb.utils.contains('PACKAGECONFIG', 'gbm', ' gbm', '', d)}" +OPENGL_WINSYS_append = "${@bb.utils.contains('PACKAGECONFIG', 'wayland', ' wayland', '', d)}" +OPENGL_WINSYS_append = "${@bb.utils.contains('PACKAGECONFIG', 'dispmanx', ' dispmanx', '', d)}" +OPENGL_WINSYS_append = "${@bb.utils.contains('PACKAGECONFIG', 'egl', ' egl', '', d)}" + +EXTRA_OEMESON += " \ + -Ddoc=disabled \ + -Dgl-graphene=disabled \ + ${@get_opengl_cmdline_list('gl_api', d.getVar('OPENGL_APIS'), d)} \ + ${@get_opengl_cmdline_list('gl_platform', d.getVar('OPENGL_PLATFORMS'), d)} \ + ${@get_opengl_cmdline_list('gl_winsys', d.getVar('OPENGL_WINSYS'), d)} \ +" + +FILES_${PN}-dev += "${libdir}/gstreamer-1.0/include/gst/gl/gstglconfig.h" +FILES_${MLPREFIX}libgsttag-1.0 += "${datadir}/gst-plugins-base/1.0/license-translations.dict" + +def get_opengl_cmdline_list(switch_name, options, d): + selected_options = [] + if bb.utils.contains('DISTRO_FEATURES', 'opengl', True, False, d): + for option in options.split(): + if bb.utils.contains('PACKAGECONFIG', option, True, False, d): + selected_options += [option] + if selected_options: + return '-D' + switch_name + '=' + ','.join(selected_options) + else: + return '' + +CVE_PRODUCT += "gst-plugins-base" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc new file mode 100755 index 000000000..dba96e0f6 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc @@ -0,0 +1,50 @@ +# This .inc file contains the common setup for the gstreamer1.0-plugins-* +# plugin set recipes. + +# SUMMARY is set in the actual .bb recipes +HOMEPAGE = "https://gstreamer.freedesktop.org/" +BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer" +SECTION = "multimedia" + +DEPENDS = "gstreamer1.0 glib-2.0-native" + +inherit gettext meson pkgconfig upstream-version-is-even + +require gstreamer1.0-plugins-packaging.inc + +# Orc enables runtime JIT compilation of data processing routines from Orc +# bytecode to SIMD instructions for various architectures (currently SSE, MMX, +# MIPS, Altivec and NEON are supported). +# This value is used in the PACKAGECONFIG values for each plugin set recipe. +# By modifying it, Orc can be enabled/disabled in all of these recipes at once. +GSTREAMER_ORC ?= "orc" +# workaround to disable orc on mips to fix the build failure +# {standard input}: Assembler messages: +# {standard input}:46587: Error: branch out of range +GSTREAMER_ORC_mips = "" +PACKAGECONFIG[orc] = "-Dorc=enabled,-Dorc=disabled,orc orc-native" + +# TODO: put this in a gettext.bbclass patch (with variables to allow for +# configuring the option name and the enabled/disabled values). +def gettext_oemeson(d): + if d.getVar('USE_NLS') == 'no': + return '-Dnls=disabled' + # Remove the NLS bits if USE_NLS is no or INHIBIT_DEFAULT_DEPS is set + if d.getVar('INHIBIT_DEFAULT_DEPS') and not oe.utils.inherits(d, 'cross-canadian'): + return '-Dnls=disabled' + return '-Dnls=enabled' + +# Not all plugin sets contain examples, so the -Dexamples +# option needs to be added conditionally. +GST_PLUGIN_SET_HAS_EXAMPLES ?= "1" + +EXTRA_OEMESON += " \ + ${@bb.utils.contains('GST_PLUGIN_SET_HAS_EXAMPLES', '1', '-Dexamples=disabled', '', d)} \ + ${@gettext_oemeson(d)} \ +" + +GIR_MESON_ENABLE_FLAG = "enabled" +GIR_MESON_DISABLE_FLAG = "disabled" + +# Dynamically generate packages for all enabled plugins +PACKAGES_DYNAMIC = "^${PN}-.*" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-qt-include-ext-qt-gstqtgl.h-instead-of-gst-gl-gstglf.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-qt-include-ext-qt-gstqtgl.h-instead-of-gst-gl-gstglf.patch new file mode 100755 index 000000000..788d75205 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-qt-include-ext-qt-gstqtgl.h-instead-of-gst-gl-gstglf.patch @@ -0,0 +1,56 @@ +From bf8b2fa0f6870589d036f0f33c140a3f85b530a0 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Tue, 31 Mar 2020 21:23:28 -0700 +Subject: [PATCH] qt: include ext/qt/gstqtgl.h instead of gst/gl/gstglfuncs.h + +gst/gl/gstglfuncs.h is included via ext/qt/gstqtgl.h which has logic to +prefer qt headers definitions for GLsync + +This helps in fixing build errors like below + +/mnt/b/yoe/build/tmp/work/cortexa7t2hf-neon-vfpv4-yoe-linux-gnueabi/gstreamer1.0-plugins-good/1.16.2-r0/recipe-sysroot/usr/include/QtGui/qopengles2ext.h:24:26: error: conflicting declaration 'typedef struct __GLsync* GLsync' + 24 | typedef struct __GLsync *GLsync; + | ^~~~~~ +In file included from /mnt/b/yoe/build/tmp/work/cortexa7t2hf-neon-vfpv4-yoe-linux-gnueabi/gstreamer1.0-plugins-good/1.16.2-r0/recipe-sysroot/usr/include/gstreamer-1.0/gst/gl/gstglfuncs.h:84, + from ../gst-plugins-good-1.16.2/ext/qt/gstqsgtexture.cc:30: +/mnt/b/yoe/build/tmp/work/cortexa7t2hf-neon-vfpv4-yoe-linux-gnueabi/gstreamer1.0-plugins-good/1.16.2-r0/recipe-sysroot/usr/include/gstreamer-1.0/gst/gl/glprototypes/gstgl_compat.h:40:18: note: previous declaration as 'typedef void* GLsync +' + 40 | typedef gpointer GLsync; + | ^~~~~~ + +Upstream-Status: Pending +Signed-off-by: Khem Raj +--- + ext/qt/gstqsgtexture.cc | 2 +- + ext/qt/qtwindow.cc | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/ext/qt/gstqsgtexture.cc b/ext/qt/gstqsgtexture.cc +index a05d26e..4cc9fc6 100644 +--- a/ext/qt/gstqsgtexture.cc ++++ b/ext/qt/gstqsgtexture.cc +@@ -27,7 +27,7 @@ + + #include + #include +-#include ++#include + #include "gstqsgtexture.h" + + #define GST_CAT_DEFAULT gst_qsg_texture_debug +diff --git a/ext/qt/qtwindow.cc b/ext/qt/qtwindow.cc +index 9360c33..0dfd3f1 100644 +--- a/ext/qt/qtwindow.cc ++++ b/ext/qt/qtwindow.cc +@@ -25,7 +25,7 @@ + #include + + #include +-#include ++#include + #include "qtwindow.h" + #include "gstqsgtexture.h" + #include "gstqtglutility.h" +-- +2.28.0 + diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.2.bb new file mode 100755 index 000000000..2e076bf88 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.2.bb @@ -0,0 +1,72 @@ +require gstreamer1.0-plugins-common.inc + +SRC_URI = "https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-${PV}.tar.xz \ + file://0001-qt-include-ext-qt-gstqtgl.h-instead-of-gst-gl-gstglf.patch \ + " + +SRC_URI[sha256sum] = "f71752dde434d9ec55fa5e8d2e2a3be3fc6eb5b34f397b065f84aead25b449a4" + +S = "${WORKDIR}/gst-plugins-good-${PV}" + +LICENSE = "GPLv2+ & LGPLv2.1+" +LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \ + file://gst/replaygain/rganalysis.c;beginline=1;endline=23;md5=b60ebefd5b2f5a8e0cab6bfee391a5fe" + +DEPENDS += "gstreamer1.0-plugins-base libcap zlib" +RPROVIDES_${PN}-pulseaudio += "${PN}-pulse" +RPROVIDES_${PN}-soup += "${PN}-souphttpsrc" + +PACKAGECONFIG ??= " \ + ${GSTREAMER_ORC} \ + ${@bb.utils.filter('DISTRO_FEATURES', 'pulseaudio x11', d)} \ + ${@bb.utils.contains('TUNE_FEATURES', 'm64', 'asm', '', d)} \ + bz2 cairo flac gdk-pixbuf gudev jpeg lame libpng mpg123 soup speex taglib v4l2 \ +" + +X11DEPENDS = "virtual/libx11 libsm libxrender libxfixes libxdamage" +X11ENABLEOPTS = "-Dximagesrc=enabled -Dximagesrc-xshm=enabled -Dximagesrc-xfixes=enabled -Dximagesrc-xdamage=enabled" +X11DISABLEOPTS = "-Dximagesrc=disabled -Dximagesrc-xshm=disabled -Dximagesrc-xfixes=disabled -Dximagesrc-xdamage=disabled" + +QT5WAYLANDDEPENDS = "${@bb.utils.contains("DISTRO_FEATURES", "wayland", "qtwayland", "", d)}" + +PACKAGECONFIG[asm] = "-Dasm=enabled,-Dasm=disabled,nasm-native" +PACKAGECONFIG[bz2] = "-Dbz2=enabled,-Dbz2=disabled,bzip2" +PACKAGECONFIG[cairo] = "-Dcairo=enabled,-Dcairo=disabled,cairo" +PACKAGECONFIG[dv1394] = "-Ddv1394=enabled,-Ddv1394=disabled,libiec61883 libavc1394 libraw1394" +PACKAGECONFIG[flac] = "-Dflac=enabled,-Dflac=disabled,flac" +PACKAGECONFIG[gdk-pixbuf] = "-Dgdk-pixbuf=enabled,-Dgdk-pixbuf=disabled,gdk-pixbuf" +PACKAGECONFIG[gtk] = "-Dgtk3=enabled,-Dgtk3=disabled,gtk+3" +PACKAGECONFIG[gudev] = "-Dv4l2-gudev=enabled,-Dv4l2-gudev=disabled,libgudev" +PACKAGECONFIG[jack] = "-Djack=enabled,-Djack=disabled,jack" +PACKAGECONFIG[jpeg] = "-Djpeg=enabled,-Djpeg=disabled,jpeg" +PACKAGECONFIG[lame] = "-Dlame=enabled,-Dlame=disabled,lame" +PACKAGECONFIG[libpng] = "-Dpng=enabled,-Dpng=disabled,libpng" +PACKAGECONFIG[libv4l2] = "-Dv4l2-libv4l2=enabled,-Dv4l2-libv4l2=disabled,v4l-utils" +PACKAGECONFIG[mpg123] = "-Dmpg123=enabled,-Dmpg123=disabled,mpg123" +PACKAGECONFIG[pulseaudio] = "-Dpulse=enabled,-Dpulse=disabled,pulseaudio" +PACKAGECONFIG[qt5] = "-Dqt5=enabled,-Dqt5=disabled,qtbase qtdeclarative qtbase-native ${QT5WAYLANDDEPENDS}" +PACKAGECONFIG[soup] = "-Dsoup=enabled,-Dsoup=disabled,libsoup-2.4" +PACKAGECONFIG[speex] = "-Dspeex=enabled,-Dspeex=disabled,speex" +PACKAGECONFIG[rpi] = "-Drpicamsrc=enabled,-Drpicamsrc=disabled,userland" +PACKAGECONFIG[taglib] = "-Dtaglib=enabled,-Dtaglib=disabled,taglib" +PACKAGECONFIG[v4l2] = "-Dv4l2=enabled -Dv4l2-probe=true,-Dv4l2=disabled -Dv4l2-probe=false" +PACKAGECONFIG[vpx] = "-Dvpx=enabled,-Dvpx=disabled,libvpx" +PACKAGECONFIG[wavpack] = "-Dwavpack=enabled,-Dwavpack=disabled,wavpack" +PACKAGECONFIG[x11] = "${X11ENABLEOPTS},${X11DISABLEOPTS},${X11DEPENDS}" + +EXTRA_OEMESON += " \ + -Ddoc=disabled \ + -Daalib=disabled \ + -Ddirectsound=disabled \ + -Ddv=disabled \ + -Dlibcaca=disabled \ + -Doss=enabled \ + -Doss4=disabled \ + -Dosxaudio=disabled \ + -Dosxvideo=disabled \ + -Dshout2=disabled \ + -Dtwolame=disabled \ + -Dwaveform=disabled \ +" + +FILES_${PN}-equalizer += "${datadir}/gstreamer-1.0/presets/*.prs" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc new file mode 100755 index 000000000..9a7a1b6af --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc @@ -0,0 +1,70 @@ +# This .inc file contains functionality for automatically splitting +# built plugins into individual packages for each plugin. A -meta +# package is also set up that has no files of its own, but contains +# the names of all plugin packages in its RDEPENDS list. +# +# This is mainly used by the gstreamer1.0-plugins-* plugin set recipes, +# but can be used in any recipe that produces GStreamer plugins. + +PACKAGESPLITFUNCS_prepend = " split_gstreamer10_packages " +PACKAGESPLITFUNCS_append = " set_gstreamer10_metapkg_rdepends " + +python split_gstreamer10_packages () { + gst_libdir = d.expand('${libdir}/gstreamer-1.0') + postinst = d.getVar('plugin_postinst') + glibdir = d.getVar('libdir') + + # GStreamer libraries + do_split_packages(d, glibdir, r'^lib(.*)\.so\.*', 'lib%s', 'GStreamer 1.0 %s library', extra_depends='', allow_links=True) + # GStreamer plugin shared objects + do_split_packages(d, gst_libdir, r'libgst(.*)\.so$', d.expand('${PN}-%s'), 'GStreamer 1.0 plugin for %s', postinst=postinst, extra_depends='') + # GObject introspection files for GStreamer plugins + do_split_packages(d, glibdir+'/girepository-1.0', r'Gst(.*)-1.0\.typelib$', d.expand('${PN}-%s-typelib'), 'GStreamer 1.0 typelib file for %s', postinst=postinst, extra_depends='') + # Static GStreamer libraries for development + do_split_packages(d, gst_libdir, r'libgst(.*)\.a$', d.expand('${PN}-%s-staticdev'), 'GStreamer 1.0 plugin for %s (static development files)', extra_depends='${PN}-staticdev') +} + +python set_gstreamer10_metapkg_rdepends () { + import os + import oe.utils + + # Go through all generated packages (excluding the main package and + # the -meta package itself) and add them to the -meta package as RDEPENDS. + + pn = d.getVar('PN') + metapkg = pn + '-meta' + d.setVar('ALLOW_EMPTY_' + metapkg, "1") + d.setVar('FILES_' + metapkg, "") + blacklist = [ pn, pn + '-meta' ] + metapkg_rdepends = [] + pkgdest = d.getVar('PKGDEST') + for pkg in oe.utils.packages_filter_out_system(d): + if pkg not in blacklist and pkg not in metapkg_rdepends: + # See if the package is empty by looking at the contents of its PKGDEST subdirectory. + # If this subdirectory is empty, then the package is. + # Empty packages do not get added to the meta package's RDEPENDS + pkgdir = os.path.join(pkgdest, pkg) + if os.path.exists(pkgdir): + dir_contents = os.listdir(pkgdir) or [] + else: + dir_contents = [] + is_empty = len(dir_contents) == 0 + if not is_empty: + metapkg_rdepends.append(pkg) + d.setVar('RDEPENDS_' + metapkg, ' '.join(metapkg_rdepends)) + d.setVar('DESCRIPTION_' + metapkg, pn + ' meta package') +} + +# each plugin-dev depends on PN-dev, plugin-staticdev on PN-staticdev +# so we need them even when empty (like in gst-plugins-good case) +ALLOW_EMPTY_${PN} = "1" +ALLOW_EMPTY_${PN}-dev = "1" +ALLOW_EMPTY_${PN}-staticdev = "1" + +PACKAGES += "${PN}-apps ${PN}-meta ${PN}-glib" + +FILES_${PN} = "" +FILES_${PN}-apps = "${bindir}" +FILES_${PN}-glib = "${datadir}/glib-2.0" + +RRECOMMENDS_${PN} += "${PN}-meta" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.18.2.bb new file mode 100755 index 000000000..e482aa10b --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.18.2.bb @@ -0,0 +1,39 @@ +require gstreamer1.0-plugins-common.inc + +LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \ + file://tests/check/elements/xingmux.c;beginline=1;endline=21;md5=4c771b8af188724855cb99cadd390068" + +LICENSE = "GPLv2+ & LGPLv2.1+ & LGPLv2+" +LICENSE_FLAGS = "commercial" + +SRC_URI = " \ + https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-${PV}.tar.xz \ + " +SRC_URI[sha256sum] = "a337a022ed472209b38cab5918dc2f4e7a6adc1f4afacd226a6345e5cb668bdb" + +S = "${WORKDIR}/gst-plugins-ugly-${PV}" + +DEPENDS += "gstreamer1.0-plugins-base" + +GST_PLUGIN_SET_HAS_EXAMPLES = "0" + +PACKAGECONFIG ??= " \ + ${GSTREAMER_ORC} \ + a52dec mpeg2dec \ +" + +PACKAGECONFIG[a52dec] = "-Da52dec=enabled,-Da52dec=disabled,liba52" +PACKAGECONFIG[amrnb] = "-Damrnb=enabled,-Damrnb=disabled,opencore-amr" +PACKAGECONFIG[amrwb] = "-Damrwbdec=enabled,-Damrwbdec=disabled,opencore-amr" +PACKAGECONFIG[cdio] = "-Dcdio=enabled,-Dcdio=disabled,libcdio" +PACKAGECONFIG[dvdread] = "-Ddvdread=enabled,-Ddvdread=disabled,libdvdread" +PACKAGECONFIG[mpeg2dec] = "-Dmpeg2dec=enabled,-Dmpeg2dec=disabled,mpeg2dec" +PACKAGECONFIG[x264] = "-Dx264=enabled,-Dx264=disabled,x264" + +EXTRA_OEMESON += " \ + -Ddoc=disabled \ + -Dsidplay=disabled \ +" + +FILES_${PN}-amrnb += "${datadir}/gstreamer-1.0/presets/GstAmrnbEnc.prs" +FILES_${PN}-x264 += "${datadir}/gstreamer-1.0/presets/GstX264Enc.prs" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-ptest.inc b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-ptest.inc new file mode 100755 index 000000000..b69806704 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-ptest.inc @@ -0,0 +1,23 @@ +inherit ptest-gnome + +TEST_FILES_PATH = "${datadir}/installed-tests/gstreamer-1.0/test-files" +RUN_PTEST_FILE = "${D}${PTEST_PATH}/run-ptest" + +EXTRA_OEMESON += "-Dtest-files-path=${TEST_FILES_PATH}" + +GST_TEST_SUITE_NAME ?= "gstreamer-1.0" + +# Using do_install_ptest_base instead of do_install_ptest, since +# the default do_install_ptest_base is hardcoded to expect Makefiles. +do_install_ptest_base() { + # Generate run-ptest file + echo "#!/usr/bin/env sh" > "${RUN_PTEST_FILE}" + echo "gnome-desktop-testing-runner ${GST_TEST_SUITE_NAME}" >> "${RUN_PTEST_FILE}" + chmod 0755 "${RUN_PTEST_FILE}" + + # Install additional files required by tests + if [ -d "${S}/tests/files" ] ; then + install -d "${D}/${TEST_FILES_PATH}" + install -m 0644 "${S}/tests/files"/* "${D}/${TEST_FILES_PATH}" + fi +} diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-python_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-python_1.18.2.bb new file mode 100755 index 000000000..5711744b4 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-python_1.18.2.bb @@ -0,0 +1,22 @@ +SUMMARY = "Python bindings for GStreamer 1.0" +HOMEPAGE = "http://cgit.freedesktop.org/gstreamer/gst-python/" +SECTION = "multimedia" + +LICENSE = "LGPLv2.1" +LIC_FILES_CHKSUM = "file://COPYING;md5=c34deae4e395ca07e725ab0076a5f740" + +SRC_URI = "https://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.xz" +SRC_URI[sha256sum] = "e19d0f760b353e88161b3712193cffbd79bf1314418da792b5fec4d8ecef389c" + +DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base python3-pygobject" +RDEPENDS_${PN} += "gstreamer1.0 gstreamer1.0-plugins-base python3-pygobject" + +PNREAL = "gst-python" + +S = "${WORKDIR}/${PNREAL}-${PV}" + +# gobject-introspection is mandatory and cannot be configured +REQUIRED_DISTRO_FEATURES = "gobject-introspection-data" +UNKNOWN_CONFIGURE_WHITELIST_append = " introspection" + +inherit meson pkgconfig distutils3-base upstream-version-is-even gobject-introspection features_check diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.18.2.bb new file mode 100755 index 000000000..b680aa38d --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.18.2.bb @@ -0,0 +1,31 @@ +SUMMARY = "A library on top of GStreamer for building an RTSP server" +HOMEPAGE = "http://cgit.freedesktop.org/gstreamer/gst-rtsp-server/" +SECTION = "multimedia" +LICENSE = "LGPLv2" +LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d" + +DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base" + +PNREAL = "gst-rtsp-server" + +SRC_URI = "https://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.xz" + +SRC_URI[sha256sum] = "973922aba65a1672a131527dee965fb09bab4bb996c351f0ee7f42f0d5b954e2" + +S = "${WORKDIR}/${PNREAL}-${PV}" + +inherit meson pkgconfig upstream-version-is-even gobject-introspection + +EXTRA_OEMESON += " \ + -Ddoc=disabled \ + -Dexamples=disabled \ + -Dtests=disabled \ +" + +GIR_MESON_ENABLE_FLAG = "enabled" +GIR_MESON_DISABLE_FLAG = "disabled" + +# Starting with 1.8.0 gst-rtsp-server includes dependency-less plugins as well +require gstreamer1.0-plugins-packaging.inc + +CVE_PRODUCT += "gst-rtsp-server" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.18.2.bb new file mode 100755 index 000000000..f237191d5 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.18.2.bb @@ -0,0 +1,52 @@ +SUMMARY = "VA-API support to GStreamer" +DESCRIPTION = "gstreamer-vaapi consists of a collection of VA-API \ +based plugins for GStreamer and helper libraries: `vaapidecode', \ +`vaapiconvert', and `vaapisink'." + +REALPN = "gstreamer-vaapi" + +LICENSE = "LGPLv2.1+" +LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c" + +SRC_URI = "https://gstreamer.freedesktop.org/src/${REALPN}/${REALPN}-${PV}.tar.xz" + +SRC_URI[sha256sum] = "8c7b2c74fda095d83dea67accde6a68ba9f608d97ed969fdcf278930f9b1c7c0" + +S = "${WORKDIR}/${REALPN}-${PV}" +DEPENDS = "libva gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad" + +inherit meson pkgconfig features_check upstream-version-is-even + +REQUIRED_DISTRO_FEATURES ?= "opengl" + +EXTRA_OEMESON += " \ + -Ddoc=disabled \ + -Dexamples=disabled \ + -Dtests=enabled \ +" + +PACKAGES =+ "${PN}-tests" + +# OpenGL packageconfig factored out to make it easy for distros +# and BSP layers to pick either glx, egl, or no GL. By default, +# try detecting X11 first, and if found (with OpenGL), use GLX, +# otherwise try to check if EGL can be used. +PACKAGECONFIG_GL ?= "${@bb.utils.contains('DISTRO_FEATURES', 'x11 opengl', 'glx', \ + bb.utils.contains('DISTRO_FEATURES', 'opengl', 'egl', \ + '', d), d)}" + +PACKAGECONFIG ??= "drm encoders \ + ${PACKAGECONFIG_GL} \ + ${@bb.utils.filter('DISTRO_FEATURES', 'wayland x11', d)}" + +PACKAGECONFIG[drm] = "-Dwith_drm=yes,-Dwith_drm=no,udev libdrm" +PACKAGECONFIG[egl] = "-Dwith_egl=yes,-Dwith_egl=no,virtual/egl" +PACKAGECONFIG[encoders] = "-Dwith_encoders=yes,-Dwith_encoders=no" +PACKAGECONFIG[glx] = "-Dwith_glx=yes,-Dwith_glx=no,virtual/libgl" +PACKAGECONFIG[wayland] = "-Dwith_wayland=yes,-Dwith_wayland=no,wayland-native wayland wayland-protocols" +PACKAGECONFIG[x11] = "-Dwith_x11=yes,-Dwith_x11=no,virtual/libx11 libxrandr libxrender" + +FILES_${PN} += "${libdir}/gstreamer-*/*.so" +FILES_${PN}-dbg += "${libdir}/gstreamer-*/.debug" +FILES_${PN}-dev += "${libdir}/gstreamer-*/*.a" +FILES_${PN}-tests = "${bindir}/*" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0001-gst-gstpluginloader.c-when-env-var-is-set-do-not-fal.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0001-gst-gstpluginloader.c-when-env-var-is-set-do-not-fal.patch new file mode 100755 index 000000000..fe58e718a --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0001-gst-gstpluginloader.c-when-env-var-is-set-do-not-fal.patch @@ -0,0 +1,66 @@ +From fd8f49dba8c09d47425da80f5faab3bfa4a7c962 Mon Sep 17 00:00:00 2001 +From: Jose Quaresma +Date: Sat, 10 Oct 2020 19:09:03 +0000 +Subject: [PATCH 1/3] gstpluginloader: when env var is set do not fall through + to system plugin scanner + +If we set a custom GST_PLUGIN_SCANNER env var, then we probably want to use that and only that. + +Falling through to the one installed on the system is problamatic in cross-compilation +environemnts, regardless of whether one pointed to by the env var succeeded or failed. + +taken from: +http://cgit.openembedded.org/openembedded-core/commit/meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-gst-gstpluginloader.c-when-env-var-is-set-do-not-fal.patch?id=0db7ba34ca41b107042306d13a6f0162885c123b + +Upstream-Status: Submitted [https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/669] +Signed-off-by: Jose Quaresma +--- + gst/gstpluginloader.c | 15 +++++++-------- + 1 file changed, 7 insertions(+), 8 deletions(-) + +diff --git a/gst/gstpluginloader.c b/gst/gstpluginloader.c +index d1e404d98..c626bf263 100644 +--- a/gst/gstpluginloader.c ++++ b/gst/gstpluginloader.c +@@ -464,20 +464,19 @@ gst_plugin_loader_spawn (GstPluginLoader * loader) + if (loader->child_running) + return TRUE; + +- /* Find the gst-plugin-scanner: first try the env-var if it is set, +- * otherwise use the installed version */ ++ /* Find the gst-plugin-scanner */ + env = g_getenv ("GST_PLUGIN_SCANNER_1_0"); + if (env == NULL) + env = g_getenv ("GST_PLUGIN_SCANNER"); + + if (env != NULL && *env != '\0') { ++ /* use the env-var if it is set */ + GST_LOG ("Trying GST_PLUGIN_SCANNER env var: %s", env); + helper_bin = g_strdup (env); + res = gst_plugin_loader_try_helper (loader, helper_bin); + g_free (helper_bin); +- } +- +- if (!res) { ++ } else { ++ /* use the installed version */ + GST_LOG ("Trying installed plugin scanner"); + + #ifdef G_OS_WIN32 +@@ -497,10 +496,10 @@ gst_plugin_loader_spawn (GstPluginLoader * loader) + #endif + res = gst_plugin_loader_try_helper (loader, helper_bin); + g_free (helper_bin); ++ } + +- if (!res) { +- GST_INFO ("No gst-plugin-scanner available, or not working"); +- } ++ if (!res) { ++ GST_INFO ("No gst-plugin-scanner available, or not working"); + } + + return loader->child_running; +-- +2.29.2 + diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0002-Remove-unused-valgrind-detection.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0002-Remove-unused-valgrind-detection.patch new file mode 100755 index 000000000..96abef17b --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0002-Remove-unused-valgrind-detection.patch @@ -0,0 +1,112 @@ +From 598d108e2c438d8f2ecd3bf948fa3ebbd3681490 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= +Date: Fri, 14 Aug 2020 16:38:26 +0100 +Subject: [PATCH 2/3] Remove unused valgrind detection + +Having this just to log a debug message in case we're +running inside valgrind doesn't seem very useful, and +the code that used to use this no longer exists it seems. + +Part-of: + +Upstream-Status: Backport [a2cbf75523cdf8a4df1baa7007d86ef455972245] + +Signed-off-by: Jose Quaresma +--- + gst/gst_private.h | 2 -- + gst/gstinfo.c | 39 --------------------------------------- + meson.build | 1 - + 3 files changed, 42 deletions(-) + +diff --git a/gst/gst_private.h b/gst/gst_private.h +index eefd044d9..8252ede51 100644 +--- a/gst/gst_private.h ++++ b/gst/gst_private.h +@@ -116,8 +116,6 @@ G_GNUC_INTERNAL gboolean _priv_plugin_deps_env_vars_changed (GstPlugin * plugin + + G_GNUC_INTERNAL gboolean _priv_plugin_deps_files_changed (GstPlugin * plugin); + +-G_GNUC_INTERNAL gboolean _priv_gst_in_valgrind (void); +- + /* init functions called from gst_init(). */ + G_GNUC_INTERNAL void _priv_gst_quarks_initialize (void); + G_GNUC_INTERNAL void _priv_gst_mini_object_initialize (void); +diff --git a/gst/gstinfo.c b/gst/gstinfo.c +index 5d317877b..097f8b20d 100644 +--- a/gst/gstinfo.c ++++ b/gst/gstinfo.c +@@ -305,36 +305,6 @@ static gboolean pretty_tags = PRETTY_TAGS_DEFAULT; + static volatile gint G_GNUC_MAY_ALIAS __default_level = GST_LEVEL_DEFAULT; + static volatile gint G_GNUC_MAY_ALIAS __use_color = GST_DEBUG_COLOR_MODE_ON; + +-/* FIXME: export this? */ +-gboolean +-_priv_gst_in_valgrind (void) +-{ +- static enum +- { +- GST_VG_UNCHECKED, +- GST_VG_NO_VALGRIND, +- GST_VG_INSIDE +- } +- in_valgrind = GST_VG_UNCHECKED; +- +- if (in_valgrind == GST_VG_UNCHECKED) { +-#ifdef HAVE_VALGRIND_VALGRIND_H +- if (RUNNING_ON_VALGRIND) { +- GST_CAT_INFO (GST_CAT_GST_INIT, "we're running inside valgrind"); +- in_valgrind = GST_VG_INSIDE; +- } else { +- GST_CAT_LOG (GST_CAT_GST_INIT, "not doing extra valgrind stuff"); +- in_valgrind = GST_VG_NO_VALGRIND; +- } +-#else +- in_valgrind = GST_VG_NO_VALGRIND; +-#endif +- g_assert (in_valgrind == GST_VG_NO_VALGRIND || +- in_valgrind == GST_VG_INSIDE); +- } +- return (in_valgrind == GST_VG_INSIDE); +-} +- + static gchar * + _replace_pattern_in_gst_debug_file_name (gchar * name, const char *token, + guint val) +@@ -463,9 +433,6 @@ _priv_gst_debug_init (void) + _priv_GST_CAT_PROTECTION = + _gst_debug_category_new ("GST_PROTECTION", 0, "protection"); + +- /* print out the valgrind message if we're in valgrind */ +- _priv_gst_in_valgrind (); +- + env = g_getenv ("GST_DEBUG_OPTIONS"); + if (env != NULL) { + if (strstr (env, "full_tags") || strstr (env, "full-tags")) +@@ -2503,12 +2470,6 @@ gst_debug_construct_win_color (guint colorinfo) + return 0; + } + +-gboolean +-_priv_gst_in_valgrind (void) +-{ +- return FALSE; +-} +- + void + _gst_debug_dump_mem (GstDebugCategory * cat, const gchar * file, + const gchar * func, gint line, GObject * obj, const gchar * msg, +diff --git a/meson.build b/meson.build +index ce1921aa4..7a84d0981 100644 +--- a/meson.build ++++ b/meson.build +@@ -200,7 +200,6 @@ check_headers = [ + 'sys/wait.h', + 'ucontext.h', + 'unistd.h', +- 'valgrind/valgrind.h', + 'sys/resource.h', + 'sys/uio.h', + ] +-- +2.29.2 + diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0003-meson-Add-option-for-installed-tests.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0003-meson-Add-option-for-installed-tests.patch new file mode 100755 index 000000000..bf5e57249 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0003-meson-Add-option-for-installed-tests.patch @@ -0,0 +1,257 @@ +From cf8077a7e3ab0ae236ebde79b7fc0b02eac658de Mon Sep 17 00:00:00 2001 +From: Carlos Rafael Giani +Date: Fri, 25 Oct 2019 00:06:26 +0200 +Subject: [PATCH 3/3] meson: Add option for installed tests + +This adds an option for producing installed versions of the unit tests. +These versions don't need meson to run (only a small shell script). This +makes it easier to run cross compiled tests on a target machine. + +Upstream-Status: Pending + +Signed-off-by: Carlos Rafael Giani +--- + build-aux/gen-installed-test-desc.py | 18 ++++++ + build-aux/gen-installed-test-shscript.py | 25 ++++++++ + meson_options.txt | 2 + + tests/check/meson.build | 46 +++++++++++++- + tests/files/testfile | 80 ++++++++++++++++++++++++ + 5 files changed, 170 insertions(+), 1 deletion(-) + create mode 100644 build-aux/gen-installed-test-desc.py + create mode 100644 build-aux/gen-installed-test-shscript.py + create mode 100644 tests/files/testfile + +diff --git a/build-aux/gen-installed-test-desc.py b/build-aux/gen-installed-test-desc.py +new file mode 100644 +index 000000000..69e8a0faf +--- /dev/null ++++ b/build-aux/gen-installed-test-desc.py +@@ -0,0 +1,18 @@ ++import sys ++import os ++import argparse ++ ++def write_template(filename, data): ++ with open(filename, 'w') as f: ++ f.write(data) ++ ++def build_template(testdir, testname): ++ return "[Test]\nType=session\nExec={}\n".format(os.path.join(testdir, testname)) ++ ++argparser = argparse.ArgumentParser(description='Generate installed-test data.') ++argparser.add_argument('--test-execdir', metavar='dir', required=True, help='Installed test directory') ++argparser.add_argument('--testname', metavar='name', required=True, help='Installed test name') ++argparser.add_argument('--output', metavar='file', required=True, help='Output file') ++args = argparser.parse_args() ++ ++write_template(args.output, build_template(args.test_execdir, args.testname)) +diff --git a/build-aux/gen-installed-test-shscript.py b/build-aux/gen-installed-test-shscript.py +new file mode 100644 +index 000000000..5da86fb37 +--- /dev/null ++++ b/build-aux/gen-installed-test-shscript.py +@@ -0,0 +1,25 @@ ++import sys ++import os ++import argparse ++ ++def write_template(filename, data): ++ with open(filename, 'w') as f: ++ f.write(data) ++ ++def build_template(testdir, testname): ++ return ''.join([ ++ "#!/usr/bin/env sh\n", ++ "export GST_STATE_IGNORE_ELEMENTS=''\n", ++ "export CK_DEFAULT_TIMEOUT=20\n", ++ "export GST_PLUGIN_LOADING_WHITELIST='gstreamer'\n", ++ "{}\n".format(os.path.join(testdir, testname)), ++ ]) ++ ++argparser = argparse.ArgumentParser(description='Generate installed-test data.') ++argparser.add_argument('--test-execdir', metavar='dir', required=True, help='Installed test directory') ++argparser.add_argument('--testname', metavar='name', required=True, help='Installed test name') ++argparser.add_argument('--output', metavar='file', required=True, help='Output file') ++args = argparser.parse_args() ++ ++write_template(args.output, build_template(args.test_execdir, args.testname)) ++os.chmod(args.output, 0o755) +diff --git a/meson_options.txt b/meson_options.txt +index 72c3997e2..346c423d4 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -15,6 +15,8 @@ option('poisoning', type : 'boolean', value : false, description : 'Enable poiso + option('memory-alignment', type: 'combo', + choices : ['1', '2', '4', '8', '16', '32', '64', '128', '256', '512', '1024', '2048', '4096', '8192', 'malloc', 'pagesize'], + value: 'malloc') ++option('installed-tests', type : 'boolean', value : false, description : 'enable installed tests') ++option('test-files-path', type : 'string', description : 'Path where to find test files') + + # Feature options + option('check', type : 'feature', value : 'auto', description : 'Build unit test libraries') +diff --git a/tests/check/meson.build b/tests/check/meson.build +index a617cf159..e629131c5 100644 +--- a/tests/check/meson.build ++++ b/tests/check/meson.build +@@ -120,11 +120,17 @@ if add_languages('cpp', native: false, required: false) + ] + endif + ++test_files_path = get_option('test-files-path') ++if test_files_path == '' ++ test_files_path = meson.current_source_dir() + '/../files' ++endif ++message('Using path "@0@" as the path to read test files from'.format(test_files_path)) ++ + test_defines = [ + '-UG_DISABLE_ASSERT', + '-UG_DISABLE_CAST_CHECKS', + '-DGST_CHECK_TEST_ENVIRONMENT_BEACON="GST_STATE_IGNORE_ELEMENTS"', +- '-DTESTFILE="' + meson.current_source_dir() + '/meson.build"', ++ '-DTESTFILE="@0@"'.format(test_files_path + '/testfile'), + '-DGST_DISABLE_DEPRECATED', + ] + +@@ -138,6 +144,14 @@ endif + glib_deps = [gio_dep, gobject_dep, gmodule_dep, glib_dep] + gst_deps = [gst_dep, gst_base_dep, gst_check_dep, gst_net_dep, gst_controller_dep] + ++installed_tests_datadir = join_paths(prefix, get_option('datadir'), 'installed-tests', 'gstreamer-1.0') ++installed_tests_execdir = join_paths(prefix, libexecdir, 'installed-tests', 'gstreamer-1.0') ++installed_tests_enabled = get_option('installed-tests') ++ ++python = import('python').find_installation() ++gen_installed_test_desc = files('../../build-aux/gen-installed-test-desc.py') ++gen_installed_test_shscript = files('../../build-aux/gen-installed-test-shscript.py') ++ + foreach t : core_tests + fname = t[0] + test_name = fname.split('.')[0].underscorify() +@@ -151,8 +165,38 @@ foreach t : core_tests + include_directories : [configinc], + link_with : link_with_libs, + dependencies : test_deps + glib_deps + gst_deps, ++ install_dir: installed_tests_execdir, ++ install: installed_tests_enabled + ) + ++ if installed_tests_enabled ++ installed_test_shscript = test_name + '.sh' ++ shscript = custom_target (test_name + '_shscript', ++ output: installed_test_shscript, ++ command: [ ++ python, ++ gen_installed_test_shscript, ++ '--test-execdir=@0@'.format(installed_tests_execdir), ++ '--testname=@0@'.format(test_name), ++ '--output=@0@'.format(join_paths('@OUTDIR@', installed_test_shscript)), ++ ], ++ install: true, ++ install_dir: installed_tests_execdir) ++ ++ installed_test_desc = test_name + '.test' ++ data = custom_target(test_name + '_desc', ++ output: installed_test_desc, ++ command: [ ++ python, ++ gen_installed_test_desc, ++ '--test-execdir=@0@'.format(installed_tests_execdir), ++ '--testname=@0@'.format(installed_test_shscript), ++ '--output=@0@'.format(join_paths('@OUTDIR@', installed_test_desc)), ++ ], ++ install: true, ++ install_dir: installed_tests_datadir) ++ endif ++ + env = environment() + env.set('GST_PLUGIN_PATH_1_0', meson.build_root()) + env.set('GST_PLUGIN_SYSTEM_PATH_1_0', '') +diff --git a/tests/files/testfile b/tests/files/testfile +new file mode 100644 +index 000000000..89954e0e2 +--- /dev/null ++++ b/tests/files/testfile +@@ -0,0 +1,80 @@ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ ++................................................................................ +-- +2.29.2 + diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0_1.18.2.bb new file mode 100755 index 000000000..cce0f9922 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0_1.18.2.bb @@ -0,0 +1,69 @@ +SUMMARY = "GStreamer 1.0 multimedia framework" +DESCRIPTION = "GStreamer is a multimedia framework for encoding and decoding video and sound. \ +It supports a wide range of formats including mp3, ogg, avi, mpeg and quicktime." +HOMEPAGE = "http://gstreamer.freedesktop.org/" +BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer" +SECTION = "multimedia" +LICENSE = "LGPLv2+" + +DEPENDS = "glib-2.0 glib-2.0-native libxml2 bison-native flex-native" + +inherit meson pkgconfig gettext upstream-version-is-even gobject-introspection + +LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d \ + file://gst/gst.h;beginline=1;endline=21;md5=e059138481205ee2c6fc1c079c016d0d" + +S = "${WORKDIR}/gstreamer-${PV}" + +SRC_URI = "https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.xz \ + file://0001-gst-gstpluginloader.c-when-env-var-is-set-do-not-fal.patch \ + file://0002-Remove-unused-valgrind-detection.patch \ + file://0003-meson-Add-option-for-installed-tests.patch \ + " +SRC_URI[sha256sum] = "66cdeb4f970c2e55932a2f427177d438fe2c55c0b6d29e80fda80263f2ae5446" + +PACKAGECONFIG ??= "${@bb.utils.contains('PTEST_ENABLED', '1', 'tests', '', d)} \ + check \ + debug \ + tools" + +PACKAGECONFIG[debug] = "-Dgst_debug=true,-Dgst_debug=false" +PACKAGECONFIG[tracer-hooks] = "-Dtracer_hooks=true,-Dtracer_hooks=false" +PACKAGECONFIG[check] = "-Dcheck=enabled,-Dcheck=disabled" +PACKAGECONFIG[tests] = "-Dtests=enabled -Dinstalled-tests=true,-Dtests=disabled -Dinstalled-tests=false" +PACKAGECONFIG[unwind] = "-Dlibunwind=enabled,-Dlibunwind=disabled,libunwind" +PACKAGECONFIG[dw] = "-Dlibdw=enabled,-Dlibdw=disabled,elfutils" +PACKAGECONFIG[bash-completion] = "-Dbash-completion=enabled,-Dbash-completion=disabled,bash-completion" +PACKAGECONFIG[tools] = "-Dtools=enabled,-Dtools=disabled" +PACKAGECONFIG[setcap] = "-Dptp-helper-permissions=capabilities,,libcap libcap-native" + +# TODO: put this in a gettext.bbclass patch +def gettext_oemeson(d): + if d.getVar('USE_NLS') == 'no': + return '-Dnls=disabled' + # Remove the NLS bits if USE_NLS is no or INHIBIT_DEFAULT_DEPS is set + if d.getVar('INHIBIT_DEFAULT_DEPS') and not oe.utils.inherits(d, 'cross-canadian'): + return '-Dnls=disabled' + return '-Dnls=enabled' + +EXTRA_OEMESON += " \ + -Ddoc=disabled \ + -Dexamples=disabled \ + -Ddbghelp=disabled \ + ${@gettext_oemeson(d)} \ +" + +GIR_MESON_ENABLE_FLAG = "enabled" +GIR_MESON_DISABLE_FLAG = "disabled" + +PACKAGES += "${PN}-bash-completion" + +# Add the core element plugins to the main package +FILES_${PN} += "${libdir}/gstreamer-1.0/*.so" +FILES_${PN}-dev += "${libdir}/gstreamer-1.0/*.a ${libdir}/gstreamer-1.0/include" +FILES_${PN}-bash-completion += "${datadir}/bash-completion/completions/ ${datadir}/bash-completion/helpers/gst*" +FILES_${PN}-dbg += "${datadir}/gdb ${datadir}/gstreamer-1.0/gdb" + +CVE_PRODUCT = "gstreamer" + +require gstreamer1.0-ptest.inc From 351d2b512e0d43912e47d96b7ef0f9d3e5310356 Mon Sep 17 00:00:00 2001 From: "jaekyu.lee" Date: Sun, 20 Feb 2022 01:58:10 +0900 Subject: [PATCH 0291/2022] libtool=webos2 :Release Notes: patch refresh for fix build error :Detailed Notes: patch refresh for fix build error :Testing Performed: Only build test :QA Notes: N/A :Issues Addressed: [WRN-16371] Change-Id: I1962c5907d560dd2867d394f124016e026d51db7 --- ...clang-linking-with-fsanitize-address-or.patch | 16 ++++++++-------- .../recipes-devtools/libtool/libtool_%.bbappend | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/meta-webos/recipes-devtools/libtool/libtool/0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch b/meta-webos/recipes-devtools/libtool/libtool/0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch index 7875fa18b..5f5f961ee 100644 --- a/meta-webos/recipes-devtools/libtool/libtool/0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch +++ b/meta-webos/recipes-devtools/libtool/libtool/0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch @@ -1,6 +1,6 @@ -From db91ec9c1bdc60f5b18d86e434e05e606ce1bfe1 Mon Sep 17 00:00:00 2001 -From: "kwangshik.kim" -Date: Fri, 7 May 2021 08:42:17 +0000 +From b421a1d2f2406bb1fe7219b430da57832057fc94 Mon Sep 17 00:00:00 2001 +From: "jaekyu.lee" +Date: Mon, 22 Nov 2021 14:53:08 +0900 Subject: [PATCH] libtool fix clang linking with fsanitize address or --- @@ -8,18 +8,18 @@ Subject: [PATCH] libtool fix clang linking with fsanitize address or 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in -index 7d9ce99..6944743 100644 +index bdda9b4..40a2e1d 100644 --- a/build-aux/ltmain.in +++ b/build-aux/ltmain.in -@@ -5424,9 +5424,11 @@ func_mode_link () - # --sysroot=* for sysroot support +@@ -5425,9 +5425,11 @@ func_mode_link () # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -stdlib=* select c++ std lib with clang + # -f*-prefix-map* needed for lto linking + # -fsanitize=* Clang memory and address sanitizer -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -- -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) -+ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ +- -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*|-f*-prefix-map*) ++ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*|-f*-prefix-map*| \ + -specs=*|-fsanitize=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result diff --git a/meta-webos/recipes-devtools/libtool/libtool_%.bbappend b/meta-webos/recipes-devtools/libtool/libtool_%.bbappend index ed5f48b50..8764a0ab9 100644 --- a/meta-webos/recipes-devtools/libtool/libtool_%.bbappend +++ b/meta-webos/recipes-devtools/libtool/libtool_%.bbappend @@ -1,6 +1,6 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO_append = "webos2" VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" From 854d6d0eac3655c416570d5baf3e0be893a801a7 Mon Sep 17 00:00:00 2001 From: "jaekyu.lee" Date: Fri, 11 Feb 2022 22:53:48 +0900 Subject: [PATCH 0292/2022] backports-3.3: libsrtp=2.3.0 Fix build error :Release Notes: Resolve Build dependencies for distros :Detailed Notes: :Testing Performed: Build Successful :QA Notes: :Issues Addressed: [WRN-10081] Change-Id: I0c166e960b840321b0f59709aaa08e7223bc80ac --- .../recipes-support/libsrtp/libsrtp_2.3.0.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-support/libsrtp/libsrtp_2.3.0.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-support/libsrtp/libsrtp_2.3.0.bb index c2f4c4ead..c8dce5150 100644 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-support/libsrtp/libsrtp_2.3.0.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-support/libsrtp/libsrtp_2.3.0.bb @@ -7,7 +7,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=2909fcf6f09ffff8430463d91c08c4e1" S = "${WORKDIR}/git" SRCREV = "d02d21111e379c297e93a9033d7b653135f732ee" -SRC_URI = "git://github.com/cisco/libsrtp.git" +SRC_URI = "git://github.com/cisco/libsrtp.git;branch=main" inherit autotools pkgconfig From 8907062222a3ac73095fc36c8893b24a8a127ac3 Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Wed, 2 Mar 2022 17:48:14 +0900 Subject: [PATCH 0293/2022] luna-surface-manager=369 qml-webos-bridge=129 qt-features-webos=51 qtwayland-webos=75 webos-wayland-extensions=43 :Release Notes: webos4tv sync up :Detailed Notes: qml-webos-bridge: submissions/128..submissions/129 cbbce57 Fix the bug to get the correct translation data qt-features-webos: submissions/50..submissions/51 334ce71 Add new keycode for Yandex 9d04454 Add new keycode for 22Y webos-wayland-extensions: submissions/42..submissions/43 7158292 Align surface to the crop region :Testing Performed: :QA Notes: :Issues Addressed: TBD Change-Id: If1520baee953a69a94272cfd3ada57b21cada6f2 --- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 2 +- meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb | 2 +- .../recipes-webos/qt-features-webos/qt-features-webos.bb | 4 ++-- meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb | 2 +- .../webos-wayland-extensions/webos-wayland-extensions.bb | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index ed0afe342..7d79148a9 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0 qtwayland-webos" -WEBOS_VERSION = "2.0.0-368_bbcf324c6b91dcfb932d1a87ecb61d3f22318890" +WEBOS_VERSION = "2.0.0-369_bfea82856754c95b38436ca1b5d04d38703ad4a2" PR = "r54" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb b/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb index 4d661deff..d2b479f56 100644 --- a/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb +++ b/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb @@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative luna-service2 glib-2.0" RDEPENDS_${PN} += "qml-webos-components" -WEBOS_VERSION = "1.0.0-128_1a07996a078dd0a06f2896f1079cf2a5e25e41cc" +WEBOS_VERSION = "1.0.0-129_6f44cfcb4f33f3f8d6997c5bbcf88ba7bb9e5e3a" PR = "r18" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qt-features-webos/qt-features-webos.bb b/meta-webos/recipes-webos/qt-features-webos/qt-features-webos.bb index 1d6bad7c4..5e02d9ea5 100644 --- a/meta-webos/recipes-webos/qt-features-webos/qt-features-webos.bb +++ b/meta-webos/recipes-webos/qt-features-webos/qt-features-webos.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "Common Qt features for webOS components" AUTHOR = "Anupam Kaul " @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtbase" -WEBOS_VERSION = "1.0.0-50_e3cd3c25717605a153d10fcccbf35893a38ebb8b" +WEBOS_VERSION = "1.0.0-51_a6e68f215a9f795c7ee84200dead431ed95e6dab" PR = "r8" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb index 62423e4df..f33a2664a 100644 --- a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb +++ b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtwayland webos-wayland-extensions libxkbcommon qt-features-webos wayland-native qtwayland-native wayland-protocols" -WEBOS_VERSION = "2.0.0-74_a250dcf460bc704adaaeb4d900a6aa9ff856caea" +WEBOS_VERSION = "2.0.0-75_2e2923c36fec79131b289480b92c94346f6e62bd" PR = "r16" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/webos-wayland-extensions/webos-wayland-extensions.bb b/meta-webos/recipes-webos/webos-wayland-extensions/webos-wayland-extensions.bb index b02533ea0..0938517bf 100644 --- a/meta-webos/recipes-webos/webos-wayland-extensions/webos-wayland-extensions.bb +++ b/meta-webos/recipes-webos/webos-wayland-extensions/webos-wayland-extensions.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "Wayland protocol extensions for webOS" AUTHOR = "Anupam Kaul " @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "wayland wayland-native" -WEBOS_VERSION = "1.0.0-42_bac07bee30665b5f33440c61cff1fcd8f670a24c" +WEBOS_VERSION = "1.0.0-43_a0fe7d92b4d6c935f626ccd64087b372850b5d65" PR = "r6" inherit webos_component From 01385497f4c08410bde67b74c340eec909edb986 Mon Sep 17 00:00:00 2001 From: "Muniraju A/LGSIA APP-3(muniraju.a@lge.com)" Date: Tue, 22 Mar 2022 12:26:41 +0530 Subject: [PATCH 0294/2022] com.webos.app.enactbrowser=51 :Release Notes: Site Filter UI changes :Detailed Notes: com.webos.app.enactbrowser: submissions/50..submissions/51 bd40a89 Sitefilter UI changes :Testing Performed: Please check CCC tickets. :QA Notes: NA :Issues Addressed: [WRN-19329] CCC: com.webos.app.enactbrowser=51 [WRN-18910] Integrating testing with webEngine changes Change-Id: I040dc2bd9c17c87df641cb29a923c6b9ae8fc605 --- .../com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb index dea599243..4c59e234b 100644 --- a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb +++ b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=72b3e3cef46e5ab3e175e5b515dc3b18 \ " -WEBOS_VERSION = "1.0.0-50_9bb677b9cd1c2c2f546fe7149cb20070e3146f78" +WEBOS_VERSION = "1.0.0-51_95ef5379e8618915ed9adb7a0e41d833db45e3ae" PR = "r16" inherit webos_public_repo From 8be70549bfd4d3eb15480db77c6558b49a305344 Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Mon, 21 Mar 2022 19:56:06 +0900 Subject: [PATCH 0295/2022] qtwayland-webos=76 :Release Notes: Fix build error with Qt 6.3 :Detailed Notes: qtwayland-webos: submissions/75..submissions/76 16f8539 Fix error with Qt 6.3 :Testing Performed: See the CCC Jira Ticket. :QA Notes: N/A :Issues Addressed: [WRN-19290] CCC: qtwayland-webos=76 Change-Id: Iaa69367f0e4db5612f8d1d9717ccd888c09f521d --- meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb index f33a2664a..9396c7cdc 100644 --- a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb +++ b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtwayland webos-wayland-extensions libxkbcommon qt-features-webos wayland-native qtwayland-native wayland-protocols" -WEBOS_VERSION = "2.0.0-75_2e2923c36fec79131b289480b92c94346f6e62bd" +WEBOS_VERSION = "2.0.0-76_a1637db6357c2eb9d09ad6629b5a09209e5bc92a" PR = "r16" inherit webos_qmake6 From bce2a8aed296246b662a5254515a3ffb8a371073 Mon Sep 17 00:00:00 2001 From: Hyunjae Shin Date: Tue, 8 Mar 2022 16:59:41 +0900 Subject: [PATCH 0296/2022] webos-repositories.inc: Add kernel git repository :Release Notes: build-webos ref: http://gpro.lge.com/c/webos/build-webos/+/327170 :Detailed Notes: Deploy the ebd kernel repository to github :Testing Performed: Build Test. :QA Notes: NA :Issues Addressed: [WRN-18270] CCC: linux-raspberrypi=webosrpi30 ebd=r0-3,v1.0.0 Change-Id: Icfd597848c632bc54cff9b1eb0ee849d25aa8643 --- meta-webos/conf/distro/include/webos-repositories.inc | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/meta-webos/conf/distro/include/webos-repositories.inc b/meta-webos/conf/distro/include/webos-repositories.inc index f30602f08..68678026b 100644 --- a/meta-webos/conf/distro/include/webos-repositories.inc +++ b/meta-webos/conf/distro/include/webos-repositories.inc @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # The default repo name is the "base" component name (no -native, etc.) WEBOS_REPO_NAME ??= "${BPN}" @@ -15,3 +15,8 @@ WEBOSOSE_GIT_REPO ?= "git://github.com/webosose" WEBOSOSE_GIT_PARAM_PROTOCOL ?= "https" WEBOSOSE_GIT_PROTOCOL = ";protocol=${WEBOSOSE_GIT_PARAM_PROTOCOL}" WEBOSOSE_GIT_REPO_COMPLETE ?= "${WEBOSOSE_GIT_REPO}/${WEBOS_REPO_NAME}${WEBOS_GIT_TAG}${WEBOS_GIT_BRANCH}${WEBOSOSE_GIT_PROTOCOL}" + +WEBOS_KERNEL_GIT_REPO ?= "${WEBOSOSE_GIT_REPO}" +WEBOS_KERNEL_GIT_PARAM_PROTOCOL ?= "${WEBOSOSE_GIT_PARAM_PROTOCOL}" +WEBOS_KERNEL_GIT_PROTOCOL = ";protocol=${WEBOS_KERNEL_GIT_PARAM_PROTOCOL}" +WEBOS_KERNEL_GIT_REPO_COMPLETE ?= "${WEBOS_KERNEL_GIT_REPO}/${WEBOS_REPO_NAME}${WEBOS_GIT_TAG}${WEBOS_GIT_BRANCH}${WEBOS_KERNEL_GIT_PROTOCOL}" From 26008d6697fc56771e56af5a575d2d65a3c04fae Mon Sep 17 00:00:00 2001 From: "jehn.kim" Date: Tue, 22 Feb 2022 11:00:05 +0900 Subject: [PATCH 0297/2022] ose: linux-raspberrypi=webosrpi30 :Release Notes: Add configuration CONFIG_UPROBES :Detailed Notes: linux-raspberrypi: webosrpi29..webosrpi30 Added the below config for ebpf feature CONFIG_UPROBES :Testing Performed: Test results are updated in WRN-18270 :QA Notes: NA :Issues Addressed: [WRN-18270] CCC: linux-raspberrypi=webosrpi30 ebd=r0-3,v1.0.0 [WRN-17382] Implement EBD (eBPF dynamic trace tool) - webOS OSE [WRN-16423] Introduction EBD (eBPF dynamic trace tool) [WRN-17872] Architecture Review of "Introduction EBD (eBPF dynamic trace tool)" Change-Id: Ib95eabdc50160dffbd852ea4fd543ce39baad48c --- .../recipes-kernel/linux/linux-raspberrypi/ebpf.cfg | 8 ++++++++ .../recipes-kernel/linux/linux-raspberrypi_%.bbappend | 5 +++-- 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi/ebpf.cfg diff --git a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi/ebpf.cfg b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi/ebpf.cfg new file mode 100644 index 000000000..85354f4a9 --- /dev/null +++ b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi/ebpf.cfg @@ -0,0 +1,8 @@ +CONFIG_UPROBE_EVENTS=y +CONFIG_KPROBE_EVENTS=y +CONFIG_PERF_EVENTS=y +CONFIG_TRACING_SUPPORT=y +CONFIG_FTRACE=y +CONFIG_BPF_SYSCALL=y +CONFIG_BPF_EVENTS=y +CONFIG_HAVE_EBPF_JIT=y diff --git a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend index 9b9d56986..70ea7e26c 100644 --- a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend +++ b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend @@ -1,6 +1,6 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosrpi29" +EXTENDPRAUTO_append = "webosrpi30" CMDLINE_append = " rw cgroup_memory=1 cgroup_enable=memory swapaccount=1" CMDLINE_remove_sota = "root=/dev/mmcblk0p2 rootfstype=ext4 rootwait rw" @@ -19,6 +19,7 @@ SRC_URI += "\ file://gps.cfg \ file://usb-serial-ftdi-sio.cfg \ file://oomd.cfg \ + file://ebpf.cfg \ " KERNEL_MODULE_AUTOLOAD_append = " \ From 09e59d8a116c5a893a808fcd1ece96857273a2b8 Mon Sep 17 00:00:00 2001 From: Eunseon Lee Date: Wed, 2 Mar 2022 12:26:34 +0900 Subject: [PATCH 0298/2022] ose: ebd=r0-3,v1.0.0 :Release Notes: EBD is a powerful eBPF dynamic tracing tool based on CO-RE & BTF. This tool allows to trace critical problems such as memory leaks, profiles, and potential deadlocks with oneline command without re-compile. :Detailed Notes: ebd: ..submissions/3 d115ef46 libbpf-tools/profile: Exclude use of Kconfig for PAGE_OFFSET 9198b1a8 ebd: Sort tool list 49e9f7e0 Add memleak and lsan to .gitignore 3163ba6c libbpf-tools/profile: Add to ebd executable 9f30516d libbpf-tools/profile: Modifications for bcc version of ebd 82e4e848 libbpf-tools/vmlinux_defs.h: Add vmlinux_defs.h for kernel macros 5fb38234 libbpf-tools/profile: add dso info and symbol offset to backtrace e2675108 libbpf-tools/profile: sort output f30ab255 libbpf-tools: add profile b521bb1e libbpf-tools/ebd: fix compile error a3a4a0ce libbpf-tools/ebd: Initial commit 8cebe0d4 libbpf-tools: Move remove_btf patch to webos 64329086 libbpf-tools/lsan: Add lsan to Makefile.ebd e9724738 libbpf-tools/memleak: Add Makefile for webOS build 8a5d13cd libbpf-tools/memleak: Add skeleton header to using on webos 2b0949cd libbpf-tools/lsan: Implement lsan logic 521cd3d5 libbpf-tools/memleak: Add sorting by size 74500b87 libbpf-tools/memleak: Add support user memory allocation f29130b1 libbpf-tools/lsan: Add initial commit 0705153b libbpf-tools/memleak: Support another alloc functions c238f4f3 libbpf-tools/memleak: Add repeat output b3423e04 libbpf-tools/memleak: Add symbol and address for kernel 728f4cb1 libbpf-tools/memleak: Add initial commit 1bbb4a03 bpftool: Seperate executables by architecture 552fdf69 vmlinux: Add and change vmlinux header as kernel v5.4's :Testing Performed: Tested results updated in WRN-18270 :QA Notes: N/A :Issues Addressed: [WRN-18270] CCC: linux-raspberrypi=webosrpi30 ebd=r0-3,v1.0.0 [WRN-16423] Introduction EBD (eBPF dynamic trace tool) [WRN-17382] Implement EBD (eBPF dynamic trace tool) - webOS OSE [WRN-17872] Architecture Review of "Introduction EBD (eBPF dynamic trace tool)" Change-Id: Ia8938da665126a68d4febdd4ea3754de89f6acf7 --- .../packagegroup-webos-extended.bb | 1 + meta-webos/recipes-kernel/ebd/ebd.bb | 41 +++++++++++++++++++ .../ebd/ebd/remove_btf_dependency.patch | 25 +++++++++++ 3 files changed, 67 insertions(+) create mode 100644 meta-webos/recipes-kernel/ebd/ebd.bb create mode 100644 meta-webos/recipes-kernel/ebd/ebd/remove_btf_dependency.patch diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index d37105d10..9a615b4d0 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -235,6 +235,7 @@ RDEPENDS_${PN}_append_webos = " \ com.webos.app.videoplayer \ com.webos.service.storageaccess \ com.webos.service.uwb \ + ebd \ gssdp \ gupnp \ ${VIRTUAL-RUNTIME_ai} \ diff --git a/meta-webos/recipes-kernel/ebd/ebd.bb b/meta-webos/recipes-kernel/ebd/ebd.bb new file mode 100644 index 000000000..155327853 --- /dev/null +++ b/meta-webos/recipes-kernel/ebd/ebd.bb @@ -0,0 +1,41 @@ +# Copyright (c) 2022 LG Electronics, Inc. + +SUMMARY = "Enhanced eBPF Debugger" +AUTHOR = "Kim Jaehyun " +SECTION = "console/tools" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e3fc50a88d0a364313df4b21ef20c29e" + +PR = "r0" + +inherit webos_public_repo +inherit webos_enhanced_submissions + +WEBOS_REPO_NAME = "ebd-core" +WEBOS_GIT_PARAM_BRANCH = "webos-5.4" + +SRC_URI = " \ + ${WEBOS_KERNEL_GIT_REPO_COMPLETE} \ + git://github.com/libbpf/libbpf.git;protocol=http;destsuffix=git/src/cc/libbpf;name=libbpf \ + file://remove_btf_dependency.patch \ +" + +WEBOS_VERSION = "1.0.0-3_00e6dcdd1ec324baf75f503fe3906cb8e37c59f1" + +SRCREV_libbpf = "26e768783ce99bd16540a5064cee8677818d2358" + +S = "${WORKDIR}/git" + +DEPENDS = "zlib elfutils" + +do_compile() { + cd ${S}/libbpf-tools + oe_runmake -f Makefile.ebd ARCH=${TARGET_ARCH} LDFLAGS=-static OUTPUT=${WORKDIR}/build +} + +do_install() { + install -d ${D}${bindir} + install -v -m 0755 ${WORKDIR}/build/bin/* ${D}${bindir} +} + +FILES_${PN} = "${bindir}/ebd" diff --git a/meta-webos/recipes-kernel/ebd/ebd/remove_btf_dependency.patch b/meta-webos/recipes-kernel/ebd/ebd/remove_btf_dependency.patch new file mode 100644 index 000000000..828cfedbe --- /dev/null +++ b/meta-webos/recipes-kernel/ebd/ebd/remove_btf_dependency.patch @@ -0,0 +1,25 @@ +diff --git a/src/cc/libbpf/src/libbpf.c b/src/cc/libbpf/src/libbpf.c +index 7fcea11..c5b85c0 100644 +--- a/src/cc/libbpf/src/libbpf.c ++++ b/src/cc/libbpf/src/libbpf.c +@@ -2887,7 +2890,7 @@ static int bpf_object__load_vmlinux_btf(struct bpf_object *obj, bool force) + if (err) { + pr_warn("Error loading vmlinux BTF: %d\n", err); + obj->btf_vmlinux = NULL; +- return err; ++ //return err; + } + return 0; + } +@@ -5489,6 +5493,11 @@ bpf_object__relocate_core(struct bpf_object *obj, const char *targ_btf_path) + const char *sec_name; + int i, err = 0, insn_idx, sec_idx; + ++ if (!obj->btf_vmlinux) { ++ pr_warn("No valid BTF, skipping relocation\n"); ++ return 0; ++ } ++ + if (obj->btf_ext->core_relo_info.len == 0) + return 0; + From 9b4c8524e71ea81be0b6fa79b9587ed5603c1898 Mon Sep 17 00:00:00 2001 From: "venugopal.k" Date: Thu, 24 Mar 2022 16:08:16 +0530 Subject: [PATCH 0299/2022] activitymanager=31 :Release Notes: Use LSCall if caller is com.palm.lunabus :Detailed Notes: activitymanager: submissions/30..submissions/31 5c58702 Use LSCall if caller is com.palm.lunabus :Testing Performed: Test Result updated in WRN-19542 :QA Notes: N/A :Issues Addressed: [WRN-19542] CCC: activitymanager=31 [WRN-19199] : 2 jobs listed for systemctl list-jobs |tee. [WRN-19475]: No response received from com.palm.configurator/run. Change-Id: Ifb3f993ec7ef580fb079dd67083771ccebe75162 --- meta-webos/recipes-webos/activitymanager/activitymanager.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/activitymanager/activitymanager.bb b/meta-webos/recipes-webos/activitymanager/activitymanager.bb index e8b8dc7fd..f518b45e1 100644 --- a/meta-webos/recipes-webos/activitymanager/activitymanager.bb +++ b/meta-webos/recipes-webos/activitymanager/activitymanager.bb @@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "luna-service2 db8 boost libpbnjson glib-2.0 pmloglib ${VIRTUAL-RUNTIME_init_manager}" -WEBOS_VERSION = "3.0.0-30_1af21315a64f99247660b7c4e6f5648bceb4f737" +WEBOS_VERSION = "3.0.0-31_98f0e91eef90e5f8c2b4c22d1164d0b824d39995" PR = "r11" inherit webos_component From f6f201085426f7f95c438f715f88d71ddc677a40 Mon Sep 17 00:00:00 2001 From: "sushovan.g" Date: Thu, 24 Mar 2022 13:23:39 +0530 Subject: [PATCH 0300/2022] ose: audiod=37 pulseaudio=33 :Release Notes: Implement fix for palerts and setSourceInputVolume :Detailed Notes: audiod : submissions/36..submissions/37 a92c403 Update the source volume policy config 537d6ae Fix for emulator issue for palerts pulseaudio : submissions/32..submissions/33 63130bdaa Fix source output volume issue :Testing Performed: Test results are updated in WRN-19534 :QA Notes: NA :Issues Addressed: [WRN-19519] [OSE] Recording volume is not being applied from setSourceInputVolume API [WRN-19516] [OSE_Emulator] Palerts stream is not heard in pc speaker [WRN-19534] CCC : audiod=37 pulseaudio=33 Change-Id: Id2c23a679fd6283792426165b337878690ebcc2e --- meta-webos/recipes-multimedia/audiod/audiod.bb | 2 +- meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-multimedia/audiod/audiod.bb b/meta-webos/recipes-multimedia/audiod/audiod.bb index b5c324e32..29078e8bd 100644 --- a/meta-webos/recipes-multimedia/audiod/audiod.bb +++ b/meta-webos/recipes-multimedia/audiod/audiod.bb @@ -23,7 +23,7 @@ RDEPENDS_${PN} = "\ pulseaudio-server \ " -WEBOS_VERSION = "1.0.0-36_8c2e23529060703975f7a887df1ddb86e6d86f22" +WEBOS_VERSION = "1.0.0-37_6d94cf26af1696b8d907a886cc3600748d04d9af" PR = "r31" inherit webos_component diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb index f5ccfbb16..8a23fe124 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb +++ b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb @@ -36,7 +36,7 @@ DEPENDS_remove = "libatomic-ops" DEPENDS += "pmloglib" -WEBOS_VERSION = "9.0-32_30846a9e09c185241eb7d371d54fe9810fd4bb13" +WEBOS_VERSION = "9.0-33_4216d63902b6f13d37dbbe0b56948677cdc22b68" PR = "r28" inherit webos_enhanced_submissions From 73e3c9bf1344736aea5cfefa3e9d997a98f8cc31 Mon Sep 17 00:00:00 2001 From: "divvya.rosna" Date: Tue, 11 Jan 2022 15:16:35 +0530 Subject: [PATCH 0301/2022] ose: gstreamer1.0-plugins-bad=webosrpi7 g-media-pipeline=21.gav.28 :Release Notes: Add rtpsrc plugin in gstreamer bad plugin Add streaming support for UDP/RTP/RTSP protocol in media pipeline :Detailed Notes: Add rtpsrc plugin in gstreamer bad plugin for enabling rtp streaming playback in media pipeilne g-media-pipeline: submissions/21.gav.27..submissions/21.gav.28 1a7f2eb Add streaming support for UDP/RTP/RTSP protocol in media pipeline :Testing Performed: Please refer CCC ticket for details :QA Notes: NA :Issues Addressed: [WRN-19291] CCC: gstreamer1.0-plugins-bad=webosrpi7 g-media-pipeline=21.gav.28 [WRN-18861] Add rtpjitterbuffer and analyse timestamp in src side for rtsp playback [WRN-17041] Implement callback functions for decodebin and rtpsrc pad-added signal [WRN-18876] Create g-media-pipeline changes for final integration for streaming support [WRN-17047] Fix the issues found in verification of rtp static pipeline [WRN-18879] Code Review and review comments incorporation for the all the changes sumbitted [WRN-18014] Implement changes to delegate player type to corresponding class player Change-Id: I569205f8ce9c0c175cd31a26720324aac7f81c8a --- ...anagerbad-add-RTP-streaming-elements.patch | 1965 +++++++++++++++++ .../gstreamer1.0-plugins-bad_1.16.%.bbappend | 7 +- .../g-media-pipeline/g-media-pipeline.bb | 2 +- 3 files changed, 1971 insertions(+), 3 deletions(-) create mode 100644 meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-rtpmanagerbad-add-RTP-streaming-elements.patch diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-rtpmanagerbad-add-RTP-streaming-elements.patch b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-rtpmanagerbad-add-RTP-streaming-elements.patch new file mode 100644 index 000000000..8f7bc5b79 --- /dev/null +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-rtpmanagerbad-add-RTP-streaming-elements.patch @@ -0,0 +1,1965 @@ +From 3ef737605a3df19c4d52736203038037bcaf4ae2 Mon Sep 17 00:00:00 2001 +From: Marc Leeman +Date: Mon, 3 Jun 2019 20:08:23 +0000 +Subject: [PATCH] rtpmanagerbad: add RTP streaming elements + +This is a re-implementation of the RTP elements that are submitted in +2013 to handle RTP streams. The elements handle a correct connection +for the bi-directional use of the RTCP sockets. + +https://bugzilla.gnome.org/show_bug.cgi?id=703111 + +The rtpsink and rtpsrc elements add an URI interface so that streams +can be decoded with decodebin using the rtp:// interface. + +The code can be used as follows + +``` +gst-launch-1.0 videotestsrc ! x264enc ! rtph264pay config-interval=3 ! rtpsink uri=rtp://239.1.1.1:1234 + +gst-launch-1.0 videotestsrc ! x264enc ! rtph264pay config-interval=1 ! rtpsink uri=rtp://239.1.2.3:5000 +gst-launch-1.0 rtpsrc uri=rtp://239.1.2.3:5000?encoding-name=H264 ! rtph264depay ! avdec_h264 ! videoconvert ! xvimagesink + +gst-launch-1.0 videotestsrc ! avenc_mpeg4 ! rtpmp4vpay config-interval=1 ! rtpsink uri=rtp://239.1.2.3:5000 +gst-launch-1.0 rtpsrc uri=rtp://239.1.2.3:5000?encoding-name=MP4V-ES ! rtpmp4vdepay ! avdec_mpeg4 ! videoconvert ! xvimagesink +``` + +rtpmanagerbad: add pkg-config +rtpmanagerbad: Rtp should be uppercase +rtpmanagerbad: add G_OS_WIN32 for shielding unix headers +rtpmanagerbad: remove Since from documentation +rtpmanagerbad: rename lib name from nrtp to rtpmanagerbad +rtpmanagerbad: sync meson.build with other modules +rtpmanagerbad: add Makefile.am +rtpmanagerbad: use GstElement to count pads +rtpmanagerbad: use gst_bin_set_suppressed_flags +rtpmanagerbad: check element creation +rtpmanagerbad: post message when trying to access missing rtpbin +rtpmanagerbad: return FALSE with g_return tests +rtpmanagerbad: use gsocket multicast check +rtpmanagerbad: use gst_caps_new_empty_simple iso gst_caps_from_string +rtpmanagerbad: sync with gstrtppayloads.h +rtpmanagerbad: correct media type X-GST +rtpmanagerbad: test if a compatible pad was found +rtpmanagerbad: remove evil copy of GstRTPPayloadInfo +rtpmanagerbad: add gio_dep to meson +rtpmanagerbad: revert to old glib boilerplate + +GStreamer 1.16 does not yet support the newer GLib templates, so revert. + +rtpmanagerbad: return GST_STATE_CHANGE_NO_PREROLL for live sources + +for live sources, NO_PREROLL should be returned for PLAYING->PAUSED and +READY->PAUSED transitions. + +rtpmanagerbad: use GstElement pad counting +rtpmanagerbad: just use template name to request pad +rtpmanagerbad: remove commented code +rtpmanagerbad: use funnel to send multiple streams on one socket +rtpmanagerbad: avoid beaches + +beaches should only be used during the summer, so rewrite the code to +return explicitly and avoid beaches during the winter. + +rtpmanagerbad: add copyright to test code +rtpmanagerbad: g_free is NULL safe +rtpmanagerbad: do not trace rtpbin +rtpmanagerbad: return NULL explitly +rtpmanagerbad: warn when data port is not even + +According to RFC 3550, RTP data should be sent on even ports, while RTCP +is sent on the following odd port. + +rtpmanagerbad: document port allocation in rtpsink/src +rtpmanagerbad: improve uri description +rtpmanagerbad: add comment re-use socket +rtpmanagerbad: rename gst_object_set_properties_from_uri_query +rtpmanagerbad: loan prop/val setter from rist +rtpmanagerbad: rtpsrc: fix unitialised pointer +rtpmanagerbad: fix silly typo +rtpmanagerbad: test for empty key/value +rtpmanagerbad: rtpsrc: deprecate ssrc collision to INFO +rtpmanagerbad: sync debug with rist +rtpmanagerbad: small strings allocated on stack +rtpmanagerbad: correct rename +rtpmanagerbad: add locking on prop setters/getters + +Locking is added because the URI allows to access the properties too. + +rtpmanagerbad: allow for RTCP through NAT +rtpmanagerbad: move gio to header file +rtpmanagerbad: free small strings too +rtpmanagerbad: ttl_mc for ttl on dynudpsink +rtpmanagerbad: add comments on the URI registered +rtpmanagerbad: correct macro after file rename +rtpmanagerbad: code style +rtpmanagerbad: handle wrong URIs in setter +rtpmanagerbad: nit URI notation correction + +In an URI, the first key/value pair should not have an ampersand, the +parser did not die though. +--- + configure.ac | 2 + + gst/meson.build | 2 +- + gst/rtp/Makefile.am | 17 + + gst/rtp/gstrtp-utils.c | 39 ++ + gst/rtp/gstrtp-utils.h | 8 + + gst/rtp/gstrtpsink.c | 581 +++++++++++++++++++++++++ + gst/rtp/gstrtpsink.h | 72 ++++ + gst/rtp/gstrtpsrc.c | 731 ++++++++++++++++++++++++++++++++ + gst/rtp/gstrtpsrc.h | 76 ++++ + gst/rtp/meson.build | 15 + + gst/rtp/plugin.c | 28 ++ + meson_options.txt | 1 + + tests/check/Makefile.am | 8 + + tests/check/elements/.gitignore | 2 + + tests/check/elements/rtpsink.c | 56 +++ + tests/check/elements/rtpsrc.c | 58 +++ + tests/check/meson.build | 2 + + 17 files changed, 1697 insertions(+), 1 deletion(-) + create mode 100644 gst/rtp/Makefile.am + create mode 100644 gst/rtp/gstrtp-utils.c + create mode 100644 gst/rtp/gstrtp-utils.h + create mode 100644 gst/rtp/gstrtpsink.c + create mode 100644 gst/rtp/gstrtpsink.h + create mode 100644 gst/rtp/gstrtpsrc.c + create mode 100644 gst/rtp/gstrtpsrc.h + create mode 100644 gst/rtp/meson.build + create mode 100644 gst/rtp/plugin.c + create mode 100644 tests/check/elements/rtpsink.c + create mode 100644 tests/check/elements/rtpsrc.c + +diff --git a/configure.ac b/configure.ac +index 5712e739c..8f4b741af 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -478,6 +478,7 @@ AG_GST_CHECK_PLUGIN(pnm) + AG_GST_CHECK_PLUGIN(proxy) + AG_GST_CHECK_PLUGIN(rawparse) + AG_GST_CHECK_PLUGIN(removesilence) ++AG_GST_CHECK_PLUGIN(rtp) + AG_GST_CHECK_PLUGIN(sdp) + AG_GST_CHECK_PLUGIN(segmentclip) + AG_GST_CHECK_PLUGIN(siren) +@@ -2561,6 +2562,7 @@ gst/pnm/Makefile + gst/proxy/Makefile + gst/rawparse/Makefile + gst/removesilence/Makefile ++gst/rtp/Makefile + gst/sdp/Makefile + gst/segmentclip/Makefile + gst/siren/Makefile +diff --git a/gst/meson.build b/gst/meson.build +index f6b306c1e..3266c6e20 100644 +--- a/gst/meson.build ++++ b/gst/meson.build +@@ -8,7 +8,7 @@ foreach plugin : ['accurip', 'adpcmdec', 'adpcmenc', 'aiff', 'asfmux', + 'ivfparse', 'ivtc', 'jp2kdecimator', 'jpegformat', 'librfb', + 'midi', 'mpegdemux', 'mpegpsmux', 'mpegtsdemux', 'mpegtsmux', + 'mxf', 'netsim', 'onvif', 'pcapparse', 'pnm', 'proxy', +- 'rawparse', 'removesilence', 'sdp', 'segmentclip', 'siren', ++ 'rawparse', 'removesilence', 'rtp', 'sdp', 'segmentclip', 'siren', + 'smooth', 'speed', 'subenc', 'timecode', + 'videofilters', 'videoframe_audiolevel', 'videoparsers', + 'videosignal', 'vmnc', 'y4m', 'yadif'] +diff --git a/gst/rtp/Makefile.am b/gst/rtp/Makefile.am +new file mode 100644 +index 000000000..2d8dd1bdd +--- /dev/null ++++ b/gst/rtp/Makefile.am +@@ -0,0 +1,17 @@ ++plugin_LTLIBRARIES = libgstrtpmanagerbad.la ++ ++libgstrtpmanagerbad_la_SOURCES = \ ++ gstrtp-utils.c \ ++ gstrtpsink.c \ ++ gstrtpsrc.c \ ++ plugin.c ++ ++libgstrtpmanagerbad_la_CFLAGS = $(GST_BASE_CFLAGS) $(GST_CFLAGS) ++libgstrtpmanagerbad_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) ++libgstrtpmanagerbad_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) ++ ++noinst_HEADERS = \ ++ gstrtp-utils.h \ ++ gstrtpcaps.h \ ++ gstrtpsink.h \ ++ gstrtpsrc.h +diff --git a/gst/rtp/gstrtp-utils.c b/gst/rtp/gstrtp-utils.c +new file mode 100644 +index 000000000..fc06bba79 +--- /dev/null ++++ b/gst/rtp/gstrtp-utils.c +@@ -0,0 +1,39 @@ ++/* ++ * See: https://bugzilla.gnome.org/show_bug.cgi?id=779765 ++ */ ++ ++#include "gstrtp-utils.h" ++ ++static void ++gst_rtp_utils_uri_query_foreach (const gchar * key, const gchar * value, ++ GObject * src) ++{ ++ if (key == NULL) { ++ GST_WARNING_OBJECT (src, "Refusing to use empty key."); ++ return; ++ } ++ ++ if (value == NULL) { ++ GST_WARNING_OBJECT (src, "Refusing to use NULL for key %s.", key); ++ return; ++ } ++ ++ GST_DEBUG_OBJECT (src, "Setting property '%s' to '%s'", key, value); ++ gst_util_set_object_arg (src, key, value); ++} ++ ++void ++gst_rtp_utils_set_properties_from_uri_query (GObject * obj, const GstUri * uri) ++{ ++ GHashTable *hash_table; ++ ++ g_return_if_fail (uri != NULL); ++ hash_table = gst_uri_get_query_table (uri); ++ ++ if (hash_table) { ++ g_hash_table_foreach (hash_table, ++ (GHFunc) gst_rtp_utils_uri_query_foreach, obj); ++ ++ g_hash_table_unref (hash_table); ++ } ++} +diff --git a/gst/rtp/gstrtp-utils.h b/gst/rtp/gstrtp-utils.h +new file mode 100644 +index 000000000..62ec2aafa +--- /dev/null ++++ b/gst/rtp/gstrtp-utils.h +@@ -0,0 +1,8 @@ ++#ifndef __GST_RTP_UTILS_H__ ++#define __GST_RTP_UTILS_H__ ++ ++#include ++ ++void gst_rtp_utils_set_properties_from_uri_query (GObject * obj, const GstUri * uri); ++ ++#endif +diff --git a/gst/rtp/gstrtpsink.c b/gst/rtp/gstrtpsink.c +new file mode 100644 +index 000000000..23b6df959 +--- /dev/null ++++ b/gst/rtp/gstrtpsink.c +@@ -0,0 +1,581 @@ ++/* GStreamer ++ * Copyright (C) <2018> Marc Leeman ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Library General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Library General Public License for more details. ++ * ++ * You should have received a copy of the GNU Library General Public ++ * License along with this library; if not, write to the ++ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, ++ * Boston, MA 02110-1301, USA. ++ */ ++ ++/** ++ * SECTION: gstrtsinkp ++ * @title: GstRtpSink ++ * @short description: element with Uri interface to stream RTP data to ++ * the network. ++ * ++ * RTP (RFC 3550) is a protocol to stream media over the network while ++ * retaining the timing information and providing enough information to ++ * reconstruct the correct timing domain by the receiver. ++ * ++ * The RTP data port should be even, while the RTCP port should be ++ * odd. The URI that is entered defines the data port, the RTCP port will ++ * be allocated to the next port. ++ * ++ * This element hooks up the correct sockets to support both RTP as the ++ * accompanying RTCP layer. ++ * ++ * This Bin handles streaming RTP payloaded data on the network. ++ * ++ * This element also implements the URI scheme `rtp://` allowing to send ++ * data on the network by bins that allow use the URI to determine the sink. ++ * The RTP URI handler also allows setting properties through the URI query. ++ */ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++ ++#include "gstrtpsink.h" ++#include "gstrtp-utils.h" ++ ++GST_DEBUG_CATEGORY_STATIC (gst_rtp_sink_debug); ++#define GST_CAT_DEFAULT gst_rtp_sink_debug ++ ++#define DEFAULT_PROP_URI "rtp://0.0.0.0:5004" ++#define DEFAULT_PROP_TTL 64 ++#define DEFAULT_PROP_TTL_MC 1 ++ ++enum ++{ ++ PROP_0, ++ ++ PROP_URI, ++ PROP_TTL, ++ PROP_TTL_MC, ++ ++ PROP_LAST ++}; ++ ++static void gst_rtp_sink_uri_handler_init (gpointer g_iface, ++ gpointer iface_data); ++ ++#define gst_rtp_sink_parent_class parent_class ++G_DEFINE_TYPE_WITH_CODE (GstRtpSink, gst_rtp_sink, GST_TYPE_BIN, ++ G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER, gst_rtp_sink_uri_handler_init); ++ GST_DEBUG_CATEGORY_INIT (gst_rtp_sink_debug, "rtpsink", 0, "RTP Sink")); ++ ++#define GST_RTP_SINK_GET_LOCK(obj) (&((GstRtpSink*)(obj))->lock) ++#define GST_RTP_SINK_LOCK(obj) (g_mutex_lock (GST_RTP_SINK_GET_LOCK(obj))) ++#define GST_RTP_SINK_UNLOCK(obj) (g_mutex_unlock (GST_RTP_SINK_GET_LOCK(obj))) ++ ++static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink_%u", ++ GST_PAD_SINK, ++ GST_PAD_REQUEST, ++ GST_STATIC_CAPS ("application/x-rtp")); ++ ++static GstStateChangeReturn ++gst_rtp_sink_change_state (GstElement * element, GstStateChange transition); ++ ++static void ++gst_rtp_sink_set_property (GObject * object, guint prop_id, ++ const GValue * value, GParamSpec * pspec) ++{ ++ GstRtpSink *self = GST_RTP_SINK (object); ++ ++ switch (prop_id) { ++ case PROP_URI:{ ++ GstUri *uri = NULL; ++ ++ GST_RTP_SINK_LOCK (object); ++ uri = gst_uri_from_string (g_value_get_string (value)); ++ if (uri == NULL) ++ break; ++ ++ if (self->uri) ++ gst_uri_unref (self->uri); ++ self->uri = uri; ++ /* RTP data ports should be even according to RFC 3550, while the ++ * RTCP is sent on odd ports. Just warn if there is a mismatch. */ ++ if (gst_uri_get_port (self->uri) % 2) ++ GST_WARNING_OBJECT (self, ++ "Port %u is not even, this is not standard (see RFC 3550).", ++ gst_uri_get_port (self->uri)); ++ ++ gst_rtp_utils_set_properties_from_uri_query (G_OBJECT (self), self->uri); ++ GST_RTP_SINK_UNLOCK (object); ++ break; ++ } ++ case PROP_TTL: ++ self->ttl = g_value_get_int (value); ++ break; ++ case PROP_TTL_MC: ++ self->ttl_mc = g_value_get_int (value); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ break; ++ } ++} ++ ++static void ++gst_rtp_sink_get_property (GObject * object, guint prop_id, ++ GValue * value, GParamSpec * pspec) ++{ ++ GstRtpSink *self = GST_RTP_SINK (object); ++ ++ switch (prop_id) { ++ case PROP_URI: ++ GST_RTP_SINK_LOCK (object); ++ if (self->uri) ++ g_value_take_string (value, gst_uri_to_string (self->uri)); ++ else ++ g_value_set_string (value, NULL); ++ GST_RTP_SINK_UNLOCK (object); ++ break; ++ case PROP_TTL: ++ g_value_set_int (value, self->ttl); ++ break; ++ case PROP_TTL_MC: ++ g_value_set_int (value, self->ttl_mc); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ break; ++ } ++} ++ ++static void ++gst_rtp_sink_finalize (GObject * gobject) ++{ ++ GstRtpSink *self = GST_RTP_SINK (gobject); ++ ++ if (self->uri) ++ gst_uri_unref (self->uri); ++ ++ g_mutex_clear (&self->lock); ++ G_OBJECT_CLASS (parent_class)->finalize (gobject); ++} ++ ++static gboolean ++gst_rtp_sink_setup_elements (GstRtpSink * self) ++{ ++ /*GstPad *pad; */ ++ GSocket *socket; ++ GInetAddress *addr; ++ gchar name[48]; ++ GstCaps *caps; ++ ++ /* Should not be NULL */ ++ g_return_val_if_fail (self->uri != NULL, FALSE); ++ ++ /* if not already configured */ ++ if (self->funnel_rtp == NULL) { ++ self->funnel_rtp = gst_element_factory_make ("funnel", NULL); ++ if (self->funnel_rtp == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "funnel_rtp element is not available")); ++ return FALSE; ++ } ++ ++ self->funnel_rtcp = gst_element_factory_make ("funnel", NULL); ++ if (self->funnel_rtcp == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "funnel_rtcp element is not available")); ++ return FALSE; ++ } ++ ++ self->rtp_sink = gst_element_factory_make ("udpsink", NULL); ++ if (self->rtp_sink == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "rtp_sink element is not available")); ++ return FALSE; ++ } ++ ++ self->rtcp_src = gst_element_factory_make ("udpsrc", NULL); ++ if (self->rtcp_src == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "rtcp_src element is not available")); ++ return FALSE; ++ } ++ ++ self->rtcp_sink = gst_element_factory_make ("udpsink", NULL); ++ if (self->rtcp_sink == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "rtcp_sink element is not available")); ++ return FALSE; ++ } ++ ++ gst_bin_add (GST_BIN (self), self->funnel_rtp); ++ gst_bin_add (GST_BIN (self), self->funnel_rtcp); ++ ++ /* Add elements as needed, since udpsrc/udpsink for RTCP share a socket, ++ * not all at the same moment */ ++ g_object_set (self->rtp_sink, ++ "host", gst_uri_get_host (self->uri), ++ "port", gst_uri_get_port (self->uri), ++ "ttl", self->ttl, "ttl-mc", self->ttl_mc, NULL); ++ ++ gst_bin_add (GST_BIN (self), self->rtp_sink); ++ ++ g_object_set (self->rtcp_sink, ++ "host", gst_uri_get_host (self->uri), ++ "port", gst_uri_get_port (self->uri) + 1, ++ "ttl", self->ttl, "ttl-mc", self->ttl_mc, ++ /* Set false since we're reusing a socket */ ++ "auto-multicast", FALSE, NULL); ++ ++ gst_bin_add (GST_BIN (self), self->rtcp_sink); ++ ++ /* no need to set address if unicast */ ++ caps = gst_caps_new_empty_simple ("application/x-rtcp"); ++ g_object_set (self->rtcp_src, ++ "port", gst_uri_get_port (self->uri) + 1, "caps", caps, NULL); ++ gst_caps_unref (caps); ++ ++ addr = g_inet_address_new_from_string (gst_uri_get_host (self->uri)); ++ if (g_inet_address_get_is_multicast (addr)) { ++ g_object_set (self->rtcp_src, "address", gst_uri_get_host (self->uri), ++ NULL); ++ } ++ g_object_unref (addr); ++ ++ gst_bin_add (GST_BIN (self), self->rtcp_src); ++ ++ gst_element_link (self->funnel_rtp, self->rtp_sink); ++ gst_element_link (self->funnel_rtcp, self->rtcp_sink); ++ ++ gst_element_sync_state_with_parent (self->funnel_rtp); ++ gst_element_sync_state_with_parent (self->funnel_rtcp); ++ gst_element_sync_state_with_parent (self->rtp_sink); ++ gst_element_sync_state_with_parent (self->rtcp_src); ++ ++ g_object_get (G_OBJECT (self->rtcp_src), "used-socket", &socket, NULL); ++ g_object_set (G_OBJECT (self->rtcp_sink), "socket", socket, NULL); ++ ++ gst_element_sync_state_with_parent (self->rtcp_sink); ++ ++ } ++ ++ /* pads are all named */ ++ g_snprintf (name, 48, "send_rtp_src_%u", GST_ELEMENT (self)->numpads); ++ gst_element_link_pads (self->rtpbin, name, self->funnel_rtp, "sink_%u"); ++ ++ g_snprintf (name, 48, "send_rtcp_src_%u", GST_ELEMENT (self)->numpads); ++ gst_element_link_pads (self->rtpbin, name, self->funnel_rtcp, "sink_%u"); ++ ++ g_snprintf (name, 48, "recv_rtcp_sink_%u", GST_ELEMENT (self)->numpads); ++ gst_element_link_pads (self->rtcp_src, "src", self->rtpbin, name); ++ ++ return TRUE; ++} ++ ++static GstPad * ++gst_rtp_sink_request_new_pad (GstElement * element, ++ GstPadTemplate * templ, const gchar * name, const GstCaps * caps) ++{ ++ GstRtpSink *self = GST_RTP_SINK (element); ++ GstPad *pad = NULL; ++ ++ if (self->rtpbin == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "rtpbin element is not available")); ++ return NULL; ++ } ++ ++ if (gst_rtp_sink_setup_elements (self) == FALSE) ++ return NULL; ++ ++ GST_RTP_SINK_LOCK (self); ++ ++ pad = gst_element_get_request_pad (self->rtpbin, "send_rtp_sink_%u"); ++ g_return_val_if_fail (pad != NULL, NULL); ++ ++ GST_RTP_SINK_UNLOCK (self); ++ ++ return pad; ++} ++ ++static void ++gst_rtp_sink_release_pad (GstElement * element, GstPad * pad) ++{ ++ GstRtpSink *self = GST_RTP_SINK (element); ++ GstPad *rpad = gst_ghost_pad_get_target (GST_GHOST_PAD (pad)); ++ ++ GST_RTP_SINK_LOCK (self); ++ gst_element_release_request_pad (self->rtpbin, rpad); ++ gst_object_unref (rpad); ++ ++ gst_pad_set_active (pad, FALSE); ++ gst_element_remove_pad (GST_ELEMENT (self), pad); ++ ++ GST_RTP_SINK_UNLOCK (self); ++} ++ ++static void ++gst_rtp_sink_class_init (GstRtpSinkClass * klass) ++{ ++ GObjectClass *gobject_class = G_OBJECT_CLASS (klass); ++ GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass); ++ ++ gobject_class->set_property = gst_rtp_sink_set_property; ++ gobject_class->get_property = gst_rtp_sink_get_property; ++ gobject_class->finalize = gst_rtp_sink_finalize; ++ gstelement_class->change_state = gst_rtp_sink_change_state; ++ ++ gstelement_class->request_new_pad = ++ GST_DEBUG_FUNCPTR (gst_rtp_sink_request_new_pad); ++ gstelement_class->release_pad = GST_DEBUG_FUNCPTR (gst_rtp_sink_release_pad); ++ ++ /** ++ * GstRtpSink:uri: ++ * ++ * uri to stream RTP to. All GStreamer parameters can be ++ * encoded in the URI, this URI format is RFC compliant. ++ */ ++ g_object_class_install_property (gobject_class, PROP_URI, ++ g_param_spec_string ("uri", "URI", ++ "URI in the form of rtp://host:port?query", DEFAULT_PROP_URI, ++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ ++ /** ++ * GstRtpSink:ttl: ++ * ++ * Set the unicast TTL parameter. ++ */ ++ g_object_class_install_property (gobject_class, PROP_TTL, ++ g_param_spec_int ("ttl", "Unicast TTL", ++ "Used for setting the unicast TTL parameter", ++ 0, 255, DEFAULT_PROP_TTL, ++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ ++ /** ++ * GstRtpSink:ttl-mc: ++ * ++ * Set the multicast TTL parameter. ++ */ ++ g_object_class_install_property (gobject_class, PROP_TTL_MC, ++ g_param_spec_int ("ttl-mc", "Multicast TTL", ++ "Used for setting the multicast TTL parameter", 0, 255, ++ DEFAULT_PROP_TTL_MC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ ++ gst_element_class_add_pad_template (gstelement_class, ++ gst_static_pad_template_get (&sink_template)); ++ ++ gst_element_class_set_static_metadata (gstelement_class, ++ "RTP Sink element", ++ "Generic/Bin/Sink", ++ "Simple RTP sink", "Marc Leeman "); ++} ++ ++static void ++gst_rtp_sink_rtpbin_element_added_cb (GstBin * element, ++ GstElement * new_element, gpointer data) ++{ ++ GstRtpSink *self = GST_RTP_SINK (data); ++ GST_INFO_OBJECT (self, ++ "Element %" GST_PTR_FORMAT " added element %" GST_PTR_FORMAT ".", element, ++ new_element); ++} ++ ++static void ++gst_rtp_sink_rtpbin_pad_added_cb (GstElement * element, GstPad * pad, ++ gpointer data) ++{ ++ GstRtpSink *self = GST_RTP_SINK (data); ++ GstCaps *caps = gst_pad_query_caps (pad, NULL); ++ GstPad *upad; ++ ++ /* Expose RTP data pad only */ ++ GST_INFO_OBJECT (self, ++ "Element %" GST_PTR_FORMAT " added pad %" GST_PTR_FORMAT "with caps %" ++ GST_PTR_FORMAT ".", element, pad, caps); ++ ++ /* Sanity checks */ ++ if (GST_PAD_DIRECTION (pad) == GST_PAD_SINK) { ++ /* Src pad, do not expose */ ++ gst_caps_unref (caps); ++ return; ++ } ++ ++ if (G_LIKELY (caps)) { ++ GstCaps *ref_caps = gst_caps_new_empty_simple ("application/x-rtcp"); ++ ++ if (gst_caps_can_intersect (caps, ref_caps)) { ++ /* SRC RTCP caps, do not expose */ ++ gst_caps_unref (ref_caps); ++ gst_caps_unref (caps); ++ ++ return; ++ } ++ gst_caps_unref (ref_caps); ++ } else { ++ GST_ERROR_OBJECT (self, "Pad with no caps detected."); ++ gst_caps_unref (caps); ++ ++ return; ++ } ++ gst_caps_unref (caps); ++ ++ upad = gst_element_get_compatible_pad (self->funnel_rtp, pad, NULL); ++ if (upad == NULL) { ++ GST_ERROR_OBJECT (self, "No compatible pad found to link pad."); ++ gst_caps_unref (caps); ++ ++ return; ++ } ++ GST_INFO_OBJECT (self, "Linking with pad %" GST_PTR_FORMAT ".", upad); ++ gst_pad_link (pad, upad); ++ gst_object_unref (upad); ++} ++ ++static void ++gst_rtp_sink_rtpbin_pad_removed_cb (GstElement * element, GstPad * pad, ++ gpointer data) ++{ ++ GstRtpSink *self = GST_RTP_SINK (data); ++ GST_INFO_OBJECT (self, ++ "Element %" GST_PTR_FORMAT " removed pad %" GST_PTR_FORMAT ".", element, ++ pad); ++} ++ ++static gboolean ++gst_rtp_sink_setup_rtpbin (GstRtpSink * self) ++{ ++ self->rtpbin = gst_element_factory_make ("rtpbin", NULL); ++ if (self->rtpbin == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "rtpbin element is not available")); ++ return FALSE; ++ } ++ ++ /* Add rtpbin callbacks to monitor the operation of rtpbin */ ++ g_signal_connect (self->rtpbin, "element-added", ++ G_CALLBACK (gst_rtp_sink_rtpbin_element_added_cb), self); ++ g_signal_connect (self->rtpbin, "pad-added", ++ G_CALLBACK (gst_rtp_sink_rtpbin_pad_added_cb), self); ++ g_signal_connect (self->rtpbin, "pad-removed", ++ G_CALLBACK (gst_rtp_sink_rtpbin_pad_removed_cb), self); ++ ++ gst_bin_add (GST_BIN (self), self->rtpbin); ++ ++ gst_element_sync_state_with_parent (self->rtpbin); ++ ++ return TRUE; ++} ++ ++static GstStateChangeReturn ++gst_rtp_sink_change_state (GstElement * element, GstStateChange transition) ++{ ++ GstRtpSink *self = GST_RTP_SINK (element); ++ GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; ++ ++ GST_DEBUG_OBJECT (self, "changing state: %s => %s", ++ gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)), ++ gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition))); ++ ++ switch (transition) { ++ case GST_STATE_CHANGE_NULL_TO_READY: ++ break; ++ case GST_STATE_CHANGE_READY_TO_PAUSED: ++ break; ++ default: ++ break; ++ } ++ ++ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); ++ if (ret == GST_STATE_CHANGE_FAILURE) ++ return ret; ++ ++ switch (transition) { ++ case GST_STATE_CHANGE_READY_TO_PAUSED: ++ break; ++ case GST_STATE_CHANGE_PAUSED_TO_READY: ++ break; ++ default: ++ break; ++ } ++ ++ return ret; ++} ++ ++ ++static void ++gst_rtp_sink_init (GstRtpSink * self) ++{ ++ self->rtpbin = NULL; ++ self->funnel_rtp = NULL; ++ self->funnel_rtcp = NULL; ++ self->rtp_sink = NULL; ++ self->rtcp_src = NULL; ++ self->rtcp_sink = NULL; ++ ++ self->uri = gst_uri_from_string (DEFAULT_PROP_URI); ++ self->ttl = DEFAULT_PROP_TTL; ++ self->ttl_mc = DEFAULT_PROP_TTL_MC; ++ ++ if (gst_rtp_sink_setup_rtpbin (self) == FALSE) ++ return; ++ ++ GST_OBJECT_FLAG_SET (GST_OBJECT (self), GST_ELEMENT_FLAG_SINK); ++ gst_bin_set_suppressed_flags (GST_BIN (self), ++ GST_ELEMENT_FLAG_SOURCE | GST_ELEMENT_FLAG_SINK); ++ ++ g_mutex_init (&self->lock); ++} ++ ++static guint ++gst_rtp_sink_uri_get_type (GType type) ++{ ++ return GST_URI_SINK; ++} ++ ++static const gchar *const * ++gst_rtp_sink_uri_get_protocols (GType type) ++{ ++ static const gchar *protocols[] = { (char *) "rtp", NULL }; ++ ++ return protocols; ++} ++ ++static gchar * ++gst_rtp_sink_uri_get_uri (GstURIHandler * handler) ++{ ++ GstRtpSink *self = (GstRtpSink *) handler; ++ ++ return gst_uri_to_string (self->uri); ++} ++ ++static gboolean ++gst_rtp_sink_uri_set_uri (GstURIHandler * handler, const gchar * uri, ++ GError ** error) ++{ ++ GstRtpSink *self = (GstRtpSink *) handler; ++ ++ g_object_set (G_OBJECT (self), "uri", uri, NULL); ++ ++ return TRUE; ++} ++ ++static void ++gst_rtp_sink_uri_handler_init (gpointer g_iface, gpointer iface_data) ++{ ++ GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface; ++ ++ iface->get_type = gst_rtp_sink_uri_get_type; ++ iface->get_protocols = gst_rtp_sink_uri_get_protocols; ++ iface->get_uri = gst_rtp_sink_uri_get_uri; ++ iface->set_uri = gst_rtp_sink_uri_set_uri; ++} ++ ++/* ex: set tabstop=2 shiftwidth=2 expandtab: */ +diff --git a/gst/rtp/gstrtpsink.h b/gst/rtp/gstrtpsink.h +new file mode 100644 +index 000000000..6f3fec0ac +--- /dev/null ++++ b/gst/rtp/gstrtpsink.h +@@ -0,0 +1,72 @@ ++/* GStreamer ++ * Copyright (C) 2019 Marc Leeman ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Library General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Library General Public License for more details. ++ * ++ * You should have received a copy of the GNU Library General Public ++ * License along with this library; if not, write to the ++ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, ++ * Boston, MA 02110-1301, USA. ++ */ ++ ++#ifndef __GST_RTP_SINK_H__ ++#define __GST_RTP_SINK_H__ ++ ++#include ++ ++G_BEGIN_DECLS ++#define GST_TYPE_RTP_SINK \ ++ (gst_rtp_sink_get_type()) ++#define GST_RTP_SINK(obj) \ ++ (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_RTP_SINK, GstRtpSink)) ++#define GST_RTP_SINK_CAST(obj) \ ++ ((GstRtpSink *) obj) ++#define GST_RTP_SINK_CLASS(klass) \ ++ (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_RTP_SINK, GstRtpSinkClass)) ++#define GST_IS_RTP_SINK(obj) \ ++ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_RTP_SINK)) ++#define GST_IS_RTP_SINK_CLASS(klass) \ ++ (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_RTP_SINK)) ++ ++typedef struct _GstRtpSink GstRtpSink; ++typedef struct _GstRtpSinkClass GstRtpSinkClass; ++ ++struct _GstRtpSink ++{ ++ GstBin parent; ++ ++ GstBin parent_instance; ++ ++ /* Properties */ ++ GstUri *uri; ++ gint ttl; ++ gint ttl_mc; ++ ++ /* Internal elements */ ++ GstElement *rtpbin; ++ GstElement *funnel_rtp; ++ GstElement *funnel_rtcp; ++ GstElement *rtp_sink; ++ GstElement *rtcp_src; ++ GstElement *rtcp_sink; ++ ++ GMutex lock; ++}; ++ ++struct _GstRtpSinkClass ++{ ++ GstBinClass parent; ++}; ++ ++GType gst_rtp_sink_get_type (void); ++ ++G_END_DECLS ++#endif /* __GST_RTP_SINK_H__ */ +diff --git a/gst/rtp/gstrtpsrc.c b/gst/rtp/gstrtpsrc.c +new file mode 100644 +index 000000000..bf958603b +--- /dev/null ++++ b/gst/rtp/gstrtpsrc.c +@@ -0,0 +1,731 @@ ++/* GStreamer ++ * Copyright (C) <2018> Marc Leeman ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Library General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Library General Public License for more details. ++ * ++ * You should have received a copy of the GNU Library General Public ++ * License along with this library; if not, write to the ++ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, ++ * Boston, MA 02110-1301, USA. ++ */ ++ ++/** ++ * SECTION: gstrtpsrc ++ * @title: GstRtpSrc ++ * @short description: element with Uri interface to get RTP data from ++ * the network. ++ * ++ * RTP (RFC 3550) is a protocol to stream media over the network while ++ * retaining the timing information and providing enough information to ++ * reconstruct the correct timing domain by the receiver. ++ * ++ * The RTP data port should be even, while the RTCP port should be ++ * odd. The URI that is entered defines the data port, the RTCP port will ++ * be allocated to the next port. ++ * ++ * This element hooks up the correct sockets to support both RTP as the ++ * accompanying RTCP layer. ++ * ++ * This Bin handles taking in of data from the network and provides the ++ * RTP payloaded data. ++ * ++ * This element also implements the URI scheme `rtp://` allowing to render ++ * RTP streams in GStreamer based media players. The RTP URI handler also ++ * allows setting properties through the URI query. ++ */ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++ ++#include "gstrtpsrc.h" ++#include "gstrtp-utils.h" ++ ++GST_DEBUG_CATEGORY_STATIC (gst_rtp_src_debug); ++#define GST_CAT_DEFAULT gst_rtp_src_debug ++ ++#define DEFAULT_PROP_TTL 64 ++#define DEFAULT_PROP_TTL_MC 1 ++#define DEFAULT_PROP_ENCODING_NAME NULL ++#define DEFAULT_PROP_LATENCY 200 ++ ++#define DEFAULT_PROP_URI "rtp://0.0.0.0:5004" ++ ++enum ++{ ++ PROP_0, ++ ++ PROP_URI, ++ PROP_TTL, ++ PROP_TTL_MC, ++ PROP_ENCODING_NAME, ++ PROP_LATENCY, ++ ++ PROP_LAST ++}; ++ ++static void gst_rtp_src_uri_handler_init (gpointer g_iface, ++ gpointer iface_data); ++ ++#define gst_rtp_src_parent_class parent_class ++G_DEFINE_TYPE_WITH_CODE (GstRtpSrc, gst_rtp_src, GST_TYPE_BIN, ++ G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER, gst_rtp_src_uri_handler_init); ++ GST_DEBUG_CATEGORY_INIT (gst_rtp_src_debug, "rtpsrc", 0, "RTP Source")); ++ ++#define GST_RTP_SRC_GET_LOCK(obj) (&((GstRtpSrc*)(obj))->lock) ++#define GST_RTP_SRC_LOCK(obj) (g_mutex_lock (GST_RTP_SRC_GET_LOCK(obj))) ++#define GST_RTP_SRC_UNLOCK(obj) (g_mutex_unlock (GST_RTP_SRC_GET_LOCK(obj))) ++ ++static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src_%u", ++ GST_PAD_SRC, ++ GST_PAD_SOMETIMES, ++ GST_STATIC_CAPS ("application/x-rtp")); ++ ++static GstStateChangeReturn ++gst_rtp_src_change_state (GstElement * element, GstStateChange transition); ++ ++/** ++ * gst_rtp_src_rtpbin_erquest_pt_map_cb: ++ * @self: The current #GstRtpSrc object ++ * ++ * #GstRtpBin callback to map a pt on RTP caps. ++ * ++ * Returns: (transfer none): the guess on the RTP caps based on the PT ++ * and caps. ++ */ ++static GstCaps * ++gst_rtp_src_rtpbin_request_pt_map_cb (GstElement * rtpbin, guint session_id, ++ guint pt, gpointer data) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (data); ++ const GstRTPPayloadInfo *p = NULL; ++ ++ GST_DEBUG_OBJECT (self, ++ "Requesting caps for session-id 0x%x and pt %u.", session_id, pt); ++ ++ /* the encoding-name has more relevant information */ ++ if (self->encoding_name != NULL) { ++ /* Unfortunately, the media needs to be passed in the function. Since ++ * it is not known, try for video if video not found. */ ++ p = gst_rtp_payload_info_for_name ("video", self->encoding_name); ++ if (p == NULL) ++ p = gst_rtp_payload_info_for_name ("audio", self->encoding_name); ++ ++ } ++ ++ /* Static payload types, this is a simple lookup */ ++ if (!GST_RTP_PAYLOAD_IS_DYNAMIC (pt)) { ++ p = gst_rtp_payload_info_for_pt (pt); ++ } ++ ++ if (p != NULL) { ++ GstCaps *ret = gst_caps_new_simple ("application/x-rtp", ++ "encoding-name", G_TYPE_STRING, p->encoding_name, ++ "clock-rate", G_TYPE_INT, p->clock_rate, ++ "media", G_TYPE_STRING, p->media, NULL); ++ ++ GST_DEBUG_OBJECT (self, "Decided on caps %" GST_PTR_FORMAT, ret); ++ ++ return ret; ++ } ++ ++ GST_DEBUG_OBJECT (self, "Could not determine caps based on pt and" ++ " the encoding-name was not set."); ++ return NULL; ++} ++ ++static void ++gst_rtp_src_set_property (GObject * object, guint prop_id, ++ const GValue * value, GParamSpec * pspec) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (object); ++ GstCaps *caps; ++ ++ switch (prop_id) { ++ case PROP_URI:{ ++ GstUri *uri = NULL; ++ ++ GST_RTP_SRC_LOCK (object); ++ uri = gst_uri_from_string (g_value_get_string (value)); ++ if (uri == NULL) ++ break; ++ ++ if (self->uri) ++ gst_uri_unref (self->uri); ++ self->uri = uri; ++ if (gst_uri_get_port (self->uri) % 2) ++ GST_WARNING_OBJECT (self, ++ "Port %u is not even, this is not standard (see RFC 3550).", ++ gst_uri_get_port (self->uri)); ++ gst_rtp_utils_set_properties_from_uri_query (G_OBJECT (self), self->uri); ++ GST_RTP_SRC_UNLOCK (object); ++ break; ++ } ++ case PROP_TTL: ++ self->ttl = g_value_get_int (value); ++ break; ++ case PROP_TTL_MC: ++ self->ttl_mc = g_value_get_int (value); ++ break; ++ case PROP_ENCODING_NAME: ++ g_free (self->encoding_name); ++ self->encoding_name = g_value_dup_string (value); ++ if (self->rtp_src) { ++ caps = gst_rtp_src_rtpbin_request_pt_map_cb (NULL, 0, 96, self); ++ g_object_set (G_OBJECT (self->rtp_src), "caps", caps, NULL); ++ gst_caps_unref (caps); ++ } ++ break; ++ case PROP_LATENCY: ++ self->latency = g_value_get_uint (value); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ break; ++ } ++} ++ ++static void ++gst_rtp_src_get_property (GObject * object, guint prop_id, ++ GValue * value, GParamSpec * pspec) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (object); ++ ++ switch (prop_id) { ++ case PROP_URI: ++ GST_RTP_SRC_LOCK (object); ++ if (self->uri) ++ g_value_take_string (value, gst_uri_to_string (self->uri)); ++ else ++ g_value_set_string (value, NULL); ++ GST_RTP_SRC_UNLOCK (object); ++ break; ++ case PROP_TTL: ++ g_value_set_int (value, self->ttl); ++ break; ++ case PROP_TTL_MC: ++ g_value_set_int (value, self->ttl_mc); ++ break; ++ case PROP_ENCODING_NAME: ++ g_value_set_string (value, self->encoding_name); ++ break; ++ case PROP_LATENCY: ++ g_value_set_uint (value, self->latency); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ break; ++ } ++} ++ ++static void ++gst_rtp_src_finalize (GObject * gobject) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (gobject); ++ ++ if (self->uri) ++ gst_uri_unref (self->uri); ++ g_free (self->encoding_name); ++ ++ g_mutex_clear (&self->lock); ++ G_OBJECT_CLASS (parent_class)->finalize (gobject); ++} ++ ++static void ++gst_rtp_src_class_init (GstRtpSrcClass * klass) ++{ ++ GObjectClass *gobject_class = G_OBJECT_CLASS (klass); ++ GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass); ++ ++ gobject_class->set_property = gst_rtp_src_set_property; ++ gobject_class->get_property = gst_rtp_src_get_property; ++ gobject_class->finalize = gst_rtp_src_finalize; ++ gstelement_class->change_state = gst_rtp_src_change_state; ++ ++ /** ++ * GstRtpSrc:uri: ++ * ++ * uri to an RTP from. All GStreamer parameters can be ++ * encoded in the URI, this URI format is RFC compliant. ++ */ ++ g_object_class_install_property (gobject_class, PROP_URI, ++ g_param_spec_string ("uri", "URI", ++ "URI in the form of rtp://host:port?query", DEFAULT_PROP_URI, ++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ ++ /** ++ * GstRtpSrc:ttl: ++ * ++ * Set the unicast TTL parameter. In RTP this of importance for RTCP. ++ */ ++ g_object_class_install_property (gobject_class, PROP_TTL, ++ g_param_spec_int ("ttl", "Unicast TTL", ++ "Used for setting the unicast TTL parameter", ++ 0, 255, DEFAULT_PROP_TTL, ++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ ++ /** ++ * GstRtpSrc:ttl-mc: ++ * ++ * Set the multicast TTL parameter. In RTP this of importance for RTCP. ++ */ ++ g_object_class_install_property (gobject_class, PROP_TTL_MC, ++ g_param_spec_int ("ttl-mc", "Multicast TTL", ++ "Used for setting the multicast TTL parameter", 0, 255, ++ DEFAULT_PROP_TTL_MC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ ++ /** ++ * GstRtpSrc:encoding-name: ++ * ++ * Set the encoding name of the stream to use. This is a short-hand for ++ * the full caps and maps typically to the encoding-name in the RTP caps. ++ */ ++ g_object_class_install_property (gobject_class, PROP_ENCODING_NAME, ++ g_param_spec_string ("encoding-name", "Caps encoding name", ++ "Encoding name use to determine caps parameters", ++ DEFAULT_PROP_ENCODING_NAME, ++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ ++ /** ++ * GstRtpSrc:latency: ++ * ++ * Set the size of the latency buffer in the ++ * GstRtpBin/GstRtpJitterBuffer to compensate for network jitter. ++ */ ++ g_object_class_install_property (gobject_class, PROP_LATENCY, ++ g_param_spec_uint ("latency", "Buffer latency in ms", ++ "Default amount of ms to buffer in the jitterbuffers", 0, ++ G_MAXUINT, DEFAULT_PROP_LATENCY, ++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ ++ gst_element_class_add_pad_template (gstelement_class, ++ gst_static_pad_template_get (&src_template)); ++ ++ gst_element_class_set_static_metadata (gstelement_class, ++ "RTP Source element", ++ "Generic/Bin/Src", ++ "Simple RTP src", "Marc Leeman "); ++} ++ ++static void ++gst_rtp_src_rtpbin_pad_added_cb (GstElement * element, GstPad * pad, ++ gpointer data) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (data); ++ GstCaps *caps = gst_pad_query_caps (pad, NULL); ++ GstPad *upad; ++ gchar name[48]; ++ ++ /* Expose RTP data pad only */ ++ GST_INFO_OBJECT (self, ++ "Element %" GST_PTR_FORMAT " added pad %" GST_PTR_FORMAT "with caps %" ++ GST_PTR_FORMAT ".", element, pad, caps); ++ ++ /* Sanity checks */ ++ if (GST_PAD_DIRECTION (pad) == GST_PAD_SINK) { ++ /* Sink pad, do not expose */ ++ gst_caps_unref (caps); ++ return; ++ } ++ ++ if (G_LIKELY (caps)) { ++ GstCaps *ref_caps = gst_caps_new_empty_simple ("application/x-rtcp"); ++ ++ if (gst_caps_can_intersect (caps, ref_caps)) { ++ /* SRC RTCP caps, do not expose */ ++ gst_caps_unref (ref_caps); ++ gst_caps_unref (caps); ++ ++ return; ++ } ++ gst_caps_unref (ref_caps); ++ } else { ++ GST_ERROR_OBJECT (self, "Pad with no caps detected."); ++ gst_caps_unref (caps); ++ ++ return; ++ } ++ gst_caps_unref (caps); ++ ++ GST_RTP_SRC_LOCK (self); ++ g_snprintf (name, 48, "src_%u", GST_ELEMENT (self)->numpads); ++ upad = gst_ghost_pad_new (name, pad); ++ ++ gst_pad_set_active (upad, TRUE); ++ gst_element_add_pad (GST_ELEMENT (self), upad); ++ ++ GST_RTP_SRC_UNLOCK (self); ++} ++ ++static void ++gst_rtp_src_rtpbin_pad_removed_cb (GstElement * element, GstPad * pad, ++ gpointer data) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (data); ++ GST_INFO_OBJECT (self, ++ "Element %" GST_PTR_FORMAT " removed pad %" GST_PTR_FORMAT ".", element, ++ pad); ++} ++ ++static void ++gst_rtp_src_rtpbin_on_ssrc_collision_cb (GstElement * rtpbin, guint session_id, ++ guint ssrc, gpointer data) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (data); ++ ++ GST_INFO_OBJECT (self, ++ "Dectected an SSRC collision: session-id 0x%x, ssrc 0x%x.", session_id, ++ ssrc); ++} ++ ++static void ++gst_rtp_src_rtpbin_on_new_ssrc_cb (GstElement * rtpbin, guint session_id, ++ guint ssrc, gpointer data) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (data); ++ ++ GST_INFO_OBJECT (self, "Dectected a new SSRC: session-id 0x%x, ssrc 0x%x.", ++ session_id, ssrc); ++} ++ ++static GstPadProbeReturn ++gst_rtp_src_on_recv_rtcp (GstPad * pad, GstPadProbeInfo * info, ++ gpointer user_data) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (user_data); ++ GstBuffer *buffer; ++ GstNetAddressMeta *meta; ++ ++ if (info->type == GST_PAD_PROBE_TYPE_BUFFER_LIST) { ++ GstBufferList *buffer_list = info->data; ++ buffer = gst_buffer_list_get (buffer_list, 0); ++ } else { ++ buffer = info->data; ++ } ++ ++ meta = gst_buffer_get_net_address_meta (buffer); ++ ++ GST_OBJECT_LOCK (self); ++ g_clear_object (&self->rtcp_send_addr); ++ self->rtcp_send_addr = g_object_ref (meta->addr); ++ GST_OBJECT_UNLOCK (self); ++ ++ return GST_PAD_PROBE_OK; ++} ++ ++static inline void ++gst_rtp_src_attach_net_address_meta (GstRtpSrc * self, GstBuffer * buffer) ++{ ++ GST_OBJECT_LOCK (self); ++ if (self->rtcp_send_addr) ++ gst_buffer_add_net_address_meta (buffer, self->rtcp_send_addr); ++ GST_OBJECT_UNLOCK (self); ++} ++ ++static GstPadProbeReturn ++gst_rtp_src_on_send_rtcp (GstPad * pad, GstPadProbeInfo * info, ++ gpointer user_data) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (user_data); ++ ++ if (info->type == GST_PAD_PROBE_TYPE_BUFFER_LIST) { ++ GstBufferList *buffer_list = info->data; ++ GstBuffer *buffer; ++ gint i; ++ ++ info->data = buffer_list = gst_buffer_list_make_writable (buffer_list); ++ for (i = 0; i < gst_buffer_list_length (buffer_list); i++) { ++ buffer = gst_buffer_list_get (buffer_list, i); ++ gst_rtp_src_attach_net_address_meta (self, buffer); ++ } ++ } else { ++ GstBuffer *buffer = info->data; ++ info->data = buffer = gst_buffer_make_writable (buffer); ++ gst_rtp_src_attach_net_address_meta (self, buffer); ++ } ++ ++ return GST_PAD_PROBE_OK; ++} ++ ++static gboolean ++gst_rtp_src_setup_elements (GstRtpSrc * self) ++{ ++ GstPad *pad; ++ GSocket *socket; ++ GInetAddress *addr; ++ gchar name[48]; ++ GstCaps *caps; ++ gchar *address; ++ guint rtcp_port; ++ ++ /* Construct the RTP receiver pipeline. ++ * ++ * udpsrc -> [recv_rtp_sink_%u] -------- [recv_rtp_src_%u_%u_%u] ++ * | rtpbin | ++ * udpsrc -> [recv_rtcp_sink_%u] -------- [send_rtcp_src_%u] -> udpsink ++ * ++ * This pipeline is fixed for now, note that optionally an FEC stream could ++ * be added later. ++ */ ++ ++ /* Should not be NULL */ ++ g_return_val_if_fail (self->uri != NULL, FALSE); ++ ++ self->rtpbin = gst_element_factory_make ("rtpbin", NULL); ++ if (self->rtpbin == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "rtpbin element is not available")); ++ return FALSE; ++ } ++ ++ self->rtp_src = gst_element_factory_make ("udpsrc", NULL); ++ if (self->rtp_src == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "rtp_src element is not available")); ++ return FALSE; ++ } ++ ++ self->rtcp_src = gst_element_factory_make ("udpsrc", NULL); ++ if (self->rtcp_src == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "rtcp_src element is not available")); ++ return FALSE; ++ } ++ ++ self->rtcp_sink = gst_element_factory_make ("dynudpsink", NULL); ++ if (self->rtcp_sink == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "rtcp_sink element is not available")); ++ return FALSE; ++ } ++ ++ /* Add rtpbin callbacks to monitor the operation of rtpbin */ ++ g_signal_connect (self->rtpbin, "pad-added", ++ G_CALLBACK (gst_rtp_src_rtpbin_pad_added_cb), self); ++ g_signal_connect (self->rtpbin, "pad-removed", ++ G_CALLBACK (gst_rtp_src_rtpbin_pad_removed_cb), self); ++ g_signal_connect (self->rtpbin, "request-pt-map", ++ G_CALLBACK (gst_rtp_src_rtpbin_request_pt_map_cb), self); ++ g_signal_connect (self->rtpbin, "on-new-ssrc", ++ G_CALLBACK (gst_rtp_src_rtpbin_on_new_ssrc_cb), self); ++ g_signal_connect (self->rtpbin, "on-ssrc-collision", ++ G_CALLBACK (gst_rtp_src_rtpbin_on_ssrc_collision_cb), self); ++ ++ g_object_set (self->rtpbin, "latency", self->latency, NULL); ++ ++ /* Add elements as needed, since udpsrc/udpsink for RTCP share a socket, ++ * not all at the same moment */ ++ gst_bin_add (GST_BIN (self), self->rtpbin); ++ gst_bin_add (GST_BIN (self), self->rtp_src); ++ ++ g_object_set (self->rtp_src, ++ "address", gst_uri_get_host (self->uri), ++ "port", gst_uri_get_port (self->uri), NULL); ++ ++ gst_bin_add (GST_BIN (self), self->rtcp_sink); ++ ++ /* no need to set address if unicast */ ++ caps = gst_caps_new_empty_simple ("application/x-rtcp"); ++ g_object_set (self->rtcp_src, ++ "port", gst_uri_get_port (self->uri) + 1, "caps", caps, NULL); ++ gst_caps_unref (caps); ++ ++ addr = g_inet_address_new_from_string (gst_uri_get_host (self->uri)); ++ if (g_inet_address_get_is_multicast (addr)) { ++ g_object_set (self->rtcp_src, "address", gst_uri_get_host (self->uri), ++ NULL); ++ } ++ g_object_unref (addr); ++ ++ g_object_set (self->rtcp_sink, ++ "host", gst_uri_get_host (self->uri), ++ "port", gst_uri_get_port (self->uri) + 1, ++ "ttl", self->ttl, "ttl-mc", self->ttl_mc, ++ /* Set false since we're reusing a socket */ ++ "auto-multicast", FALSE, NULL); ++ ++ gst_bin_add (GST_BIN (self), self->rtcp_src); ++ ++ /* share the socket created by the source */ ++ g_object_get (G_OBJECT (self->rtcp_src), "used-socket", &socket, ++ "address", &address, "port", &rtcp_port, NULL); ++ ++ addr = g_inet_address_new_from_string (address); ++ g_free (address); ++ ++ if (g_inet_address_get_is_multicast (addr)) { ++ /* mc-ttl is not supported by dynudpsink */ ++ g_socket_set_multicast_ttl (socket, self->ttl_mc); ++ /* In multicast, send RTCP to the multicast group */ ++ self->rtcp_send_addr = g_inet_socket_address_new (addr, rtcp_port); ++ } else { ++ /* In unicast, send RTCP to the detected sender address */ ++ pad = gst_element_get_static_pad (self->rtcp_src, "src"); ++ self->rtcp_recv_probe = gst_pad_add_probe (pad, ++ GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_BUFFER_LIST, ++ gst_rtp_src_on_recv_rtcp, self, NULL); ++ gst_object_unref (pad); ++ } ++ g_object_unref (addr); ++ ++ pad = gst_element_get_static_pad (self->rtcp_sink, "sink"); ++ self->rtcp_send_probe = gst_pad_add_probe (pad, ++ GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_BUFFER_LIST, ++ gst_rtp_src_on_send_rtcp, self, NULL); ++ gst_object_unref (pad); ++ ++ g_object_set (G_OBJECT (self->rtcp_sink), "socket", socket, NULL); ++ ++ /* pads are all named */ ++ g_snprintf (name, 48, "recv_rtp_sink_%u", GST_ELEMENT (self)->numpads); ++ gst_element_link_pads (self->rtp_src, "src", self->rtpbin, name); ++ ++ g_snprintf (name, 48, "recv_rtcp_sink_%u", GST_ELEMENT (self)->numpads); ++ gst_element_link_pads (self->rtcp_src, "src", self->rtpbin, name); ++ ++ gst_element_sync_state_with_parent (self->rtpbin); ++ gst_element_sync_state_with_parent (self->rtp_src); ++ gst_element_sync_state_with_parent (self->rtcp_sink); ++ ++ g_snprintf (name, 48, "send_rtcp_src_%u", GST_ELEMENT (self)->numpads); ++ gst_element_link_pads (self->rtpbin, name, self->rtcp_sink, "sink"); ++ ++ gst_element_sync_state_with_parent (self->rtcp_src); ++ ++ return TRUE; ++} ++ ++static void ++gst_rtp_src_stop (GstRtpSrc * self) ++{ ++ GstPad *pad; ++ ++ if (self->rtcp_recv_probe) { ++ pad = gst_element_get_static_pad (self->rtcp_src, "src"); ++ gst_pad_remove_probe (pad, self->rtcp_recv_probe); ++ self->rtcp_recv_probe = 0; ++ gst_object_unref (pad); ++ } ++ ++ pad = gst_element_get_static_pad (self->rtcp_sink, "sink"); ++ gst_pad_remove_probe (pad, self->rtcp_send_probe); ++ self->rtcp_send_probe = 0; ++ gst_object_unref (pad); ++} ++ ++static GstStateChangeReturn ++gst_rtp_src_change_state (GstElement * element, GstStateChange transition) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (element); ++ GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; ++ ++ GST_DEBUG_OBJECT (self, "Changing state: %s => %s", ++ gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)), ++ gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition))); ++ ++ switch (transition) { ++ case GST_STATE_CHANGE_NULL_TO_READY: ++ if (gst_rtp_src_setup_elements (self) == FALSE) ++ return GST_STATE_CHANGE_FAILURE; ++ break; ++ default: ++ break; ++ } ++ ++ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); ++ if (ret == GST_STATE_CHANGE_FAILURE) ++ return ret; ++ ++ switch (transition) { ++ case GST_STATE_CHANGE_READY_TO_PAUSED: ++ ret = GST_STATE_CHANGE_NO_PREROLL; ++ break; ++ case GST_STATE_CHANGE_PLAYING_TO_PAUSED: ++ ret = GST_STATE_CHANGE_NO_PREROLL; ++ break; ++ case GST_STATE_CHANGE_READY_TO_NULL: ++ gst_rtp_src_stop (self); ++ break; ++ default: ++ break; ++ } ++ ++ return ret; ++} ++ ++static void ++gst_rtp_src_init (GstRtpSrc * self) ++{ ++ self->rtpbin = NULL; ++ self->rtp_src = NULL; ++ self->rtcp_src = NULL; ++ self->rtcp_sink = NULL; ++ ++ self->uri = gst_uri_from_string (DEFAULT_PROP_URI); ++ self->ttl = DEFAULT_PROP_TTL; ++ self->ttl_mc = DEFAULT_PROP_TTL_MC; ++ self->encoding_name = DEFAULT_PROP_ENCODING_NAME; ++ self->latency = DEFAULT_PROP_LATENCY; ++ ++ GST_OBJECT_FLAG_SET (GST_OBJECT (self), GST_ELEMENT_FLAG_SOURCE); ++ gst_bin_set_suppressed_flags (GST_BIN (self), ++ GST_ELEMENT_FLAG_SOURCE | GST_ELEMENT_FLAG_SINK); ++ ++ g_mutex_init (&self->lock); ++} ++ ++static guint ++gst_rtp_src_uri_get_type (GType type) ++{ ++ return GST_URI_SRC; ++} ++ ++static const gchar *const * ++gst_rtp_src_uri_get_protocols (GType type) ++{ ++ static const gchar *protocols[] = { (char *) "rtp", NULL }; ++ ++ return protocols; ++} ++ ++static gchar * ++gst_rtp_src_uri_get_uri (GstURIHandler * handler) ++{ ++ GstRtpSrc *self = (GstRtpSrc *) handler; ++ ++ return gst_uri_to_string (self->uri); ++} ++ ++static gboolean ++gst_rtp_src_uri_set_uri (GstURIHandler * handler, const gchar * uri, ++ GError ** error) ++{ ++ GstRtpSrc *self = (GstRtpSrc *) handler; ++ ++ g_object_set (G_OBJECT (self), "uri", uri, NULL); ++ ++ return TRUE; ++} ++ ++static void ++gst_rtp_src_uri_handler_init (gpointer g_iface, gpointer iface_data) ++{ ++ GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface; ++ ++ iface->get_type = gst_rtp_src_uri_get_type; ++ iface->get_protocols = gst_rtp_src_uri_get_protocols; ++ iface->get_uri = gst_rtp_src_uri_get_uri; ++ iface->set_uri = gst_rtp_src_uri_set_uri; ++} ++ ++/* ex: set tabstop=2 shiftwidth=2 expandtab: */ +diff --git a/gst/rtp/gstrtpsrc.h b/gst/rtp/gstrtpsrc.h +new file mode 100644 +index 000000000..4bc3535ef +--- /dev/null ++++ b/gst/rtp/gstrtpsrc.h +@@ -0,0 +1,76 @@ ++/* GStreamer ++ * Copyright (C) 2019 Marc Leeman ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Library General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Library General Public License for more details. ++ * ++ * You should have received a copy of the GNU Library General Public ++ * License along with this library; if not, write to the ++ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, ++ * Boston, MA 02110-1301, USA. ++ */ ++ ++#ifndef __GST_RTP_SRC_H__ ++#define __GST_RTP_SRC_H__ ++ ++#include ++#include ++ ++G_BEGIN_DECLS ++#define GST_TYPE_RTP_SRC \ ++ (gst_rtp_src_get_type()) ++#define GST_RTP_SRC(obj) \ ++ (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_RTP_SRC, GstRtpSrc)) ++#define GST_RTP_SRC_CAST(obj) \ ++ ((GstRtpSrc *) obj) ++#define GST_RTP_SRC_CLASS(klass) \ ++ (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_RTP_SRC, GstRtpSrcClass)) ++#define GST_IS_RTP_SRC(obj) \ ++ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_RTP_SRC)) ++#define GST_IS_RTP_SRC_CLASS(klass) \ ++ (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_RTP_SRC)) ++ ++typedef struct _GstRtpSrc GstRtpSrc; ++typedef struct _GstRtpSrcClass GstRtpSrcClass; ++ ++struct _GstRtpSrc ++{ ++ GstBin parent; ++ ++ /* Properties */ ++ GstUri *uri; ++ gint ttl; ++ gint ttl_mc; ++ gint latency; ++ gchar *encoding_name; ++ guint latency_ms; ++ ++ /* Internal elements */ ++ GstElement *rtpbin; ++ GstElement *rtp_src; ++ GstElement *rtcp_src; ++ GstElement *rtcp_sink; ++ ++ gulong rtcp_recv_probe; ++ gulong rtcp_send_probe; ++ GSocketAddress *rtcp_send_addr; ++ ++ GMutex lock; ++}; ++ ++struct _GstRtpSrcClass ++{ ++ GstBinClass parent; ++}; ++ ++GType gst_rtp_src_get_type (void); ++ ++G_END_DECLS ++#endif /* __GST_RTP_SRC_H__ */ +diff --git a/gst/rtp/meson.build b/gst/rtp/meson.build +new file mode 100644 +index 000000000..bb21dae5b +--- /dev/null ++++ b/gst/rtp/meson.build +@@ -0,0 +1,15 @@ ++gst_plugins_rtp_sources = [ ++ 'plugin.c', ++ 'gstrtpsink.c', ++ 'gstrtpsrc.c', ++ 'gstrtp-utils.c', ++] ++ ++gstrtp = library('gstrtpmanagerbad', ++ gst_plugins_rtp_sources, ++ dependencies: [gio_dep, gst_dep, gstbase_dep, gstrtp_dep, gstnet_dep, gstcontroller_dep], ++ include_directories: [configinc], ++ install: true, ++ c_args: gst_plugins_bad_args, ++ install_dir: plugins_install_dir, ++) +diff --git a/gst/rtp/plugin.c b/gst/rtp/plugin.c +new file mode 100644 +index 000000000..8c1d71f8b +--- /dev/null ++++ b/gst/rtp/plugin.c +@@ -0,0 +1,28 @@ ++#ifdef HAVE_CONFIG_H ++#include "config.h" ++#endif ++ ++#include "gstrtpsink.h" ++#include "gstrtpsrc.h" ++ ++ ++static gboolean ++plugin_init (GstPlugin * plugin) ++{ ++ ++ gboolean ret = FALSE; ++ ++ ret |= gst_element_register (plugin, "rtpsrc", ++ GST_RANK_PRIMARY + 1, GST_TYPE_RTP_SRC); ++ ++ ret |= gst_element_register (plugin, "rtpsink", ++ GST_RANK_PRIMARY + 1, GST_TYPE_RTP_SINK); ++ ++ return ret; ++} ++ ++GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, ++ GST_VERSION_MINOR, ++ rtpmanagerbad, ++ "GStreamer RTP Plugins", ++ plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN); +diff --git a/meson_options.txt b/meson_options.txt +index 111679ec9..0c30c253d 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -49,6 +49,7 @@ option('pnm', type : 'feature', value : 'auto') + option('proxy', type : 'feature', value : 'auto') + option('rawparse', type : 'feature', value : 'auto') + option('removesilence', type : 'feature', value : 'auto') ++option('rtp', type : 'feature', value : 'auto') + option('sdp', type : 'feature', value : 'auto') + option('segmentclip', type : 'feature', value : 'auto') + option('siren', type : 'feature', value : 'auto') +diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am +index a05bc5792..dbc746fd7 100644 +--- a/tests/check/Makefile.am ++++ b/tests/check/Makefile.am +@@ -290,6 +290,8 @@ check_PROGRAMS = \ + elements/pnm \ + elements/rtponvifparse \ + elements/rtponviftimestamp \ ++ elements/rtpsrc \ ++ elements/rtpsink \ + elements/id3mux \ + pipelines/mxf \ + libs/isoff \ +@@ -578,6 +580,12 @@ elements_rtponvifparse_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_L + elements_rtponviftimestamp_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS) + elements_rtponviftimestamp_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD) + ++elements_rtpsrc_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS) ++elements_rtpsrc_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD) ++ ++elements_rtpsink_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS) ++elements_rtpsink_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD) ++ + EXTRA_DIST = gst-plugins-bad.supp $(uvch264_dist_data) + + orc_bayer_CFLAGS = $(ORC_CFLAGS) +diff --git a/tests/check/elements/rtpsink.c b/tests/check/elements/rtpsink.c +new file mode 100644 +index 000000000..bb6c5b30d +--- /dev/null ++++ b/tests/check/elements/rtpsink.c +@@ -0,0 +1,56 @@ ++/* GStreamer ++ * Copyright (C) <2018> Marc Leeman ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Library General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Library General Public License for more details. ++ * ++ * You should have received a copy of the GNU Library General Public ++ * License along with this library; if not, write to the ++ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, ++ * Boston, MA 02110-1301, USA. ++ */ ++ ++#include ++ ++GST_START_TEST (test_uri_to_properties) ++{ ++ GstElement *rtpsink; ++ ++ gint ttl, ttl_mc; ++ ++ rtpsink = gst_element_factory_make ("rtpsink", NULL); ++ ++ /* Sets properties to non-default values (make sure this stays in sync) */ ++ g_object_set (rtpsink, "uri", "rtp://1.230.1.2?" "ttl=8" "&ttl-mc=9", NULL); ++ ++ g_object_get (rtpsink, "ttl", &ttl, "ttl_mc", &ttl_mc, NULL); ++ ++ /* Make sure these values are in sync with the one from the URI. */ ++ g_assert_cmpint (ttl, ==, 8); ++ g_assert_cmpint (ttl_mc, ==, 9); ++ ++ gst_object_unref (rtpsink); ++} ++ ++GST_END_TEST; ++ ++static Suite * ++rtpsink_suite (void) ++{ ++ Suite *s = suite_create ("rtpsink"); ++ TCase *tc_chain = tcase_create ("general"); ++ ++ suite_add_tcase (s, tc_chain); ++ tcase_add_test (tc_chain, test_uri_to_properties); ++ ++ return s; ++} ++ ++GST_CHECK_MAIN (rtpsink); +diff --git a/tests/check/elements/rtpsrc.c b/tests/check/elements/rtpsrc.c +new file mode 100644 +index 000000000..6e1f1327c +--- /dev/null ++++ b/tests/check/elements/rtpsrc.c +@@ -0,0 +1,58 @@ ++/* GStreamer ++ * Copyright (C) <2018> Marc Leeman ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Library General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Library General Public License for more details. ++ * ++ * You should have received a copy of the GNU Library General Public ++ * License along with this library; if not, write to the ++ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, ++ * Boston, MA 02110-1301, USA. ++ */ ++ ++#include ++ ++GST_START_TEST (test_uri_to_properties) ++{ ++ GstElement *rtpsrc; ++ guint latency, ttl, ttl_mc; ++ ++ rtpsrc = gst_element_factory_make ("rtpsrc", NULL); ++ ++ /* Sets properties to non-default values (make sure this stays in sync) */ ++ g_object_set (rtpsrc, "uri", "rtp://1.230.1.2?" ++ "latency=300" "&ttl=8" "&ttl-mc=9", NULL); ++ ++ g_object_get (rtpsrc, ++ "latency", &latency, "ttl-mc", &ttl_mc, "ttl", &ttl, NULL); ++ ++ /* Make sure these values are in sync with the one from the URI. */ ++ g_assert_cmpuint (latency, ==, 300); ++ g_assert_cmpint (ttl, ==, 8); ++ g_assert_cmpint (ttl_mc, ==, 9); ++ ++ gst_object_unref (rtpsrc); ++} ++ ++GST_END_TEST; ++ ++static Suite * ++rtpsrc_suite (void) ++{ ++ Suite *s = suite_create ("rtpsrc"); ++ TCase *tc_chain = tcase_create ("general"); ++ ++ suite_add_tcase (s, tc_chain); ++ tcase_add_test (tc_chain, test_uri_to_properties); ++ ++ return s; ++} ++ ++GST_CHECK_MAIN (rtpsrc); +diff --git a/tests/check/meson.build b/tests/check/meson.build +index cd77fb4b3..5eb401d42 100644 +--- a/tests/check/meson.build ++++ b/tests/check/meson.build +@@ -47,6 +47,8 @@ base_tests = [ + [['elements/pnm.c']], + [['elements/rtponvifparse.c']], + [['elements/rtponviftimestamp.c']], ++ [['elements/rtpsrc.c']], ++ [['elements/rtpsink.c']], + [['elements/videoframe-audiolevel.c']], + [['elements/viewfinderbin.c']], + [['libs/h264parser.c'], false, [gstcodecparsers_dep]], +-- +2.17.1 + diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend index 11849788b..910deae49 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2018-2022 LG Electronics, Inc. -EXTENDPRAUTO_append_rpi = "webosrpi6" +EXTENDPRAUTO_append_rpi = "webosrpi7" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" @@ -10,4 +10,7 @@ PACKAGECONFIG_append_rpi = " kms wayland" PACKAGECONFIG_remove_rpi = "faad" -SRC_URI_append_rpi = " file://0001-waylandsink-remove-unsupported-subcompositor.patch" +SRC_URI_append_rpi = " \ + file://0001-waylandsink-remove-unsupported-subcompositor.patch \ + file://0001-rtpmanagerbad-add-RTP-streaming-elements.patch \ +" diff --git a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb index 659f9061a..6b2ff824e 100644 --- a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb +++ b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb @@ -33,7 +33,7 @@ DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad DEPENDS_append_rpi = " virtual/libomxil" WEBOS_GIT_PARAM_BRANCH = "@gav" -WEBOS_VERSION = "1.0.0-21.gav.27_cabe0c9d864e04ba1882b664717ebfc1da163c9b" +WEBOS_VERSION = "1.0.0-21.gav.28_1264733b844bb487118cac43f20c0eaa7dbbd16a" # raspberrypi3 uses @21.master branch DEPENDS_remove_raspberrypi3 = "webos-wayland-extensions" From fcb58746b0b2a018ad24ec1a84f59e814a4cadcf Mon Sep 17 00:00:00 2001 From: "manjuraehmad.momin" Date: Sat, 19 Mar 2022 18:41:27 +0530 Subject: [PATCH 0302/2022] ose: nyx-lib=7 packagegroup-webos-extended=webosrpi9 nyx-modules=webosrpi5-20 Add com.webos.service.cec=2-r0,v1.0.0 :Release Notes: HDMI-CEC is a feature of HDMI which allows controlling devices connected through HDMI. With this feature RPI device can control connected HDMI CEC device volume, power, OSD. Add HDMI CEC nyx-modules and update nyx-lib that implement HDMI CEC feature abstraction layer. :Detailed Notes: nyx-lib: submissions/6..submissions/7 5a9ea11 CEC nyx-lib implementation nyx-mudules: submissions/18..submissions/20 8576bbf Fix static issue for cec nyx-module ad69287 CEC nyx-module implementation com.webos.service.cec: ..submissions/2 6d244b5 Add deviceType in getConfig 33a0e8c MessageQueue is setting previous values in sendCommand 845a7d3 Update License 9c10bd5 Update com.webos.service.cec as dynamic service 790be8b Update Cec Default Handler to match getConfig format 232761e Fix test issues ca679d7 Integrate nyx-response to CEC-service a00f19d Do code cleanup and handle review comments 5c00764 Add Default CEC handler 4623f18 Add Cec Handler support 5728484 Integrate CeCHandler with CeCLunaService 81881e1 Update api request and response structure a38a17f Revert scan api subscription 8d51acb Address comments in message queue 9a1efc0 Add cec message queue 944cf29 Address review comments d12405d Handle scan api subscription 35bb463 Implement api request validation and send response 33007cb Update luna service implementation 6dc3b46 Initial code for hdmi cec service c62dc44 Initial empty repository :Testing Performed: Build Successful :QA Notes: :Issues Addressed: [WRN-19254] CCC: nyx-lib=7 packagegroup-webos-extended=webosrpi9 nyx-modules=webosrpi5-20 Add com.webos.service.cec=2-r0,v1.0.0 [WRN-18789] Implement functions and callbacks for cec nyx module [WRN-11895] NYX-response Handling and Integration [WRN-18926] Add Default CEC handler [WRN-11896] Integrate CeCHandler with CeCLunaService [WRN-11891] Integrate the callback & functions with nyx-module interfaces [WRN-10801] Add recipe file for com.webos.service.cec Change-Id: Ib60d967781fb1b5f7b153be90da47e138a0bc325 --- .../packagegroup-webos-extended.bbappend | 12 +++++++-- .../nyx-modules/nyx-modules.bbappend | 10 ++++--- .../com.webos.service.cec.bb | 26 +++++++++++++++++++ meta-webos/recipes-webos/nyx-lib/nyx-lib.bb | 4 +-- 4 files changed, 45 insertions(+), 7 deletions(-) create mode 100644 meta-webos/recipes-webos/com.webos.service.cec/com.webos.service.cec.bb diff --git a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend index b19a70c06..00f22162e 100644 --- a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend +++ b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend @@ -1,7 +1,7 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. # You don't need to change this value when you're changing just a RDEPENDS_${PN} variable. -EXTENDPRAUTO_append_rpi = "webosrpi8" +EXTENDPRAUTO_append_rpi = "webosrpi9" # gst omx is used only for raspberrypi builds MEDIA_append_rpi = " \ @@ -10,7 +10,15 @@ MEDIA_append_rpi = " \ # Until build issues caused by PLAT-44962 are fixed in PLAT-45700 MEDIA_raspberrypi3-64 = "" +CECSERVICE_raspberrypi4-64 = " \ + com.webos.service.cec \ +" + +# CEC service functionality is supported only for webOS OSE rpi4-64 +CECSERVICE_raspberrypi4 = "" + RDEPENDS_${PN}_append_rpi = " \ + ${CECSERVICE} \ com.webos.service.audiofocusmanager \ com.webos.service.audiooutput \ com.webos.service.hfp \ diff --git a/meta-webos-raspberrypi/recipes-webos/nyx-modules/nyx-modules.bbappend b/meta-webos-raspberrypi/recipes-webos/nyx-modules/nyx-modules.bbappend index 5f7491aed..0b1d4fbbe 100644 --- a/meta-webos-raspberrypi/recipes-webos/nyx-modules/nyx-modules.bbappend +++ b/meta-webos-raspberrypi/recipes-webos/nyx-modules/nyx-modules.bbappend @@ -1,7 +1,11 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosrpi4" +EXTENDPRAUTO_append = "webosrpi5" DEPENDS_append = " nmeaparser" -NYX_MODULES_REQUIRED_append = "NYXMOD_OW_GPS;" +RDEPENDS_${PN} += "libcec-tools" + +WEBOS_VERSION = "7.1.0-20_7927148603cb9869421a7a3c35eef273cf085b21" + +NYX_MODULES_REQUIRED_append = "NYXMOD_OW_GPS;NYXMOD_OW_CEC;" diff --git a/meta-webos/recipes-webos/com.webos.service.cec/com.webos.service.cec.bb b/meta-webos/recipes-webos/com.webos.service.cec/com.webos.service.cec.bb new file mode 100644 index 000000000..4bc2fc268 --- /dev/null +++ b/meta-webos/recipes-webos/com.webos.service.cec/com.webos.service.cec.bb @@ -0,0 +1,26 @@ +# Copyright (c) 2022 LG Electronics, Inc. + +SUMMARY = "HDMI CEC service for webOS OSE" +AUTHOR = "Manjuraehmad Momin " +SECTION = "webosose" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +" + +DEPENDS = "glib-2.0 libpbnjson luna-service2 pmloglib nyx-lib" + +COMPATIBLE_MACHINE = "^raspberrypi4-64$" + +WEBOS_VERSION = "1.0.0-2_508f0214b108659b65a7c07d96e6d081444cedb2" +PR = "r0" + +inherit webos_component +inherit webos_enhanced_submissions +inherit webos_cmake +inherit webos_daemon +inherit webos_system_bus +inherit webos_public_repo + +SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" +S = "${WORKDIR}/git" diff --git a/meta-webos/recipes-webos/nyx-lib/nyx-lib.bb b/meta-webos/recipes-webos/nyx-lib/nyx-lib.bb index d4aaa3236..b7cc5fec5 100644 --- a/meta-webos/recipes-webos/nyx-lib/nyx-lib.bb +++ b/meta-webos/recipes-webos/nyx-lib/nyx-lib.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2020 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS portability layer - library" AUTHOR = "Keith Derrick " @@ -22,7 +22,7 @@ SECTION = "webos/libs" DEPENDS = "glib-2.0 pmloglib" -WEBOS_VERSION = "7.3.0-6_73d95d35aef24b473f453ad9256e153d3dec7b0c" +WEBOS_VERSION = "7.3.0-7_522472452cac7f6b51d363b82908cd18dbd47370" PR = "r8" inherit webos_component From a22d39c288f97d483f60d5ef7d94da123146e500 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Wed, 23 Mar 2022 09:52:39 +0900 Subject: [PATCH 0303/2022] ose: webruntime_91=14 :Release Notes: Implement Cookie management for Enact browser Fix Play/Pause not working on Bluetooth device Fix Reddit Favicon not appear on first tap of web browser :Detailed Notes: webruntime_91: submissions/13..submissions/14 4fa834ef5e fixup! [op][n_upsable][app_shell] Implement Cookie Management using JS Injection 14e4a3fc83 [op][n_upsable][app_shell] Implement Cookie Management using JS Injection d5eebe0504 [op][n_ups][browser][app_shell] Disable Badging API f977972288 fixup! [op][n_upsable][media] Implement MediaSessionObserver for WebOS 36009fdf8d fixup! [op][n_upsable][app_shell] Implement site filter using JS Injection :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-18922] Implement the Error event response to Enact for Site filter feature. [WRN-18401] Play/Pause button is not working on Bluetooth Device [WRN-17419] [OSE-RPi4] : Reddit Favicon is not appears on the first tap of the web browser and web page displayed blank [WRN-670] Implement cookie management feature functionality [WRN-19399] CCC: ose: webruntime_91=14 Change-Id: Ia44651e1dc0244162dc9e0ea5dcace5792f8be74 --- meta-webos/recipes-webos/chromium/webruntime-repo_91.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc index 3b25ab569..b85d688b1 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=c31f1ae166739be9ca186deacf4b32e4" WEBOS_REPO_NAME = "chromium91" -WEBOS_VERSION = "91.0.4472.114-13_bf7656914f8cd80cafbf4e90bd21fdaccf795f14" +WEBOS_VERSION = "91.0.4472.114-14_4c08b35e3f353406cd2f82c13e50d324f7e6c6ea" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" From 3e1bd266aba5e210a054a8d3163f0252f257a49e Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Wed, 29 Dec 2021 14:47:55 +0900 Subject: [PATCH 0304/2022] ose: Add webruntime_94=1-r52.0,v94.0.4606.128 Add mksnapshot-cross_94=r0 :Release Notes: Add chromium94 and related changes :Detailed Notes: webruntime_94: r52.0 Base recipe for Chromium94 mksnapshot-cross_94: r0 Base recipe for mksnapshot of Chromium94 :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-13460] Setup repo and build for new chromium [WRN-19451] CCC: Switch to chromium94 as default webruntime Change-Id: I39dd31640f2bebdc1b778630d1fb783b14ce63c3 --- .../chromium/mksnapshot-cross_94.bb | 43 +++++++++++++++ .../chromium/webruntime-repo_94.inc | 11 ++++ .../recipes-webos/chromium/webruntime_94.bb | 52 +++++++++++++++++++ 3 files changed, 106 insertions(+) create mode 100644 meta-webos/recipes-webos/chromium/mksnapshot-cross_94.bb create mode 100644 meta-webos/recipes-webos/chromium/webruntime-repo_94.inc create mode 100644 meta-webos/recipes-webos/chromium/webruntime_94.bb diff --git a/meta-webos/recipes-webos/chromium/mksnapshot-cross_94.bb b/meta-webos/recipes-webos/chromium/mksnapshot-cross_94.bb new file mode 100644 index 000000000..58a988fb7 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/mksnapshot-cross_94.bb @@ -0,0 +1,43 @@ +# Copyright (c) 2022 LG Electronics, Inc. + +inherit cross +inherit pkgconfig + +WEBRUNTIME_REPO_VERSION = "94" +require webruntime-common.inc +require webruntime-repo${REPO_VERSION}.inc + +# Intentionaly disable uninative it failed to execute x86 binary on x64 host +# 32bit executable mksnapshot is required to create snapshot for the 32bit target +UNINATIVE_LOADER = "" + +PROVIDES = "mksnapshot-cross-${TARGET_ARCH}" +PN = "mksnapshot-cross-${TARGET_ARCH}" +BPN = "mksnapshot" +PR = "r1" + +TARGET = "v8_snapshot_clang_${TARGET_CPU}/mksnapshot" + +DEPENDS = "glib-2.0-native python-native gcc-runtime" + +GN_ARGS_append = "\ + use_pmlog=false \ +" + +do_configure() { + export GYP_CHROMIUM_NO_ACTION=1 + export PATH="${S}/depot_tools:$PATH" + + GN_ARGS="${GN_ARGS}" + echo GN_ARGS is ${GN_ARGS} + echo BUILD_TARGETS are ${TARGET} + cd ${S}/src + gn --root=${S}/src --dotfile=mksnapshot.gn gen ${OUT_DIR} --args="${GN_ARGS}" +} + +do_install() { + echo "Installing ${PN}" + install -d ${D}${bindir} + + install ${OUT_DIR}/v8_snapshot_clang_${TARGET_CPU}/mksnapshot ${D}${bindir}/mksnapshot-cross-${TARGET_ARCH} +} diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_94.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_94.inc new file mode 100644 index 000000000..d1fee285b --- /dev/null +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_94.inc @@ -0,0 +1,11 @@ +# Copyright (c) 2022 LG Electronics, Inc. + +LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=dac1866e82f07906c382718584e415e5" + +WEBOS_REPO_NAME = "chromium94" + +WEBOS_REPO_NAME_V8 = "chromium-v8" +WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium94" +WEBOS_VERSION_V8 = "9.1.269.36-chromium94.1_41a8a1fdbb4d78a52855d378e3d6600f29015fc8" +SRCREV_v8 = "36c5abcbfb0919dc2be3ffebb3b0cc146ac8a45e" + diff --git a/meta-webos/recipes-webos/chromium/webruntime_94.bb b/meta-webos/recipes-webos/chromium/webruntime_94.bb new file mode 100644 index 000000000..d4675a1a2 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/webruntime_94.bb @@ -0,0 +1,52 @@ +# Copyright (c) 2022 LG Electronics, Inc. +WEBRUNTIME_REPO_VERSION = "94" + +require webruntime.inc +require webruntime-repo${REPO_VERSION}.inc + +PROVIDES = "virtual/webruntime" + +PR = "${INC_PR}.0" + +PACKAGECONFIG[debug] = "symbol_level=2 optimize_for_size=true use_debug_fission=true,symbol_level=0" +PACKAGECONFIG[debug-blink] = "blink_symbol_level=2,blink_symbol_level=1" + +PACKAGECONFIG[v8_lite] = "v8_enable_lite_mode=true,v8_enable_lite_mode=false" + +# FIXME(neva): LTTng impl is incompatible with Perfetto feature in Chromium v.91 +# https://chromium-review.googlesource.com/c/chromium/src/+/2632755 +PACKAGECONFIG[lttng] = "use_lttng=false,," + +PACKAGECONFIG_remove="jumbo" + +GN_ARGS_append = " neva_dcheck_always_on=true" +GN_ARGS_append = " use_x11=false" +GN_ARGS_remove = "ozone_platform_wayland_external=true" +GN_ARGS_remove = "use_xkbcommon=true" +PACKAGECONFIG[google_ozone_wayland] = "import(\"//neva/gow.gn\")" +PACKAGECONFIG += "google_ozone_wayland" +PACKAGECONFIG[intel_ozone_wayland] = "import(\"//neva/iow.gn\")" +PACKAGECONFIG += "intel_ozone_wayland" + +# TODO: get rid of this when it will be removed on RP side from +# meta-lg-webos/meta-webos/recipes-webos/chromium/webruntime.inc +GN_ARGS_remove = "linux_use_bundled_binutils=false" + +# TODO: get rid of this when (and if) we adopt GPU info collector patch +GN_ARGS_remove = "use_webos_gpu_info_collector=true" +# TODO: get rid of this when we adopt system debugger patch +GN_ARGS_remove = "use_system_debugger_abort=true" + +GN_ARGS_append = " \ + libdir=\"${libdir}\"\ + includedir=\"${includedir}\"\ + enable_mojom_closure_compile=false\ + enable_js_type_check=false\ + system_wayland_scanner_path=\"${RECIPE_SYSROOT_NATIVE}/usr/bin/wayland-scanner\" \ +" + +# TODO: qemux build fails +PACKAGECONFIG_remove_qemux86 = "gstreamer umediaserver neva-media gav" +PACKAGECONFIG_remove_qemux86-64 = "gstreamer umediaserver neva-media gav" +#END TODO + From 247bb064c41e4e9d16035cca76de047cf959021a Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Wed, 2 Mar 2022 11:25:48 +0900 Subject: [PATCH 0305/2022] ose: Keep Chromium91 as default webruntime for webos :Release Notes: Keep chromium91 as default webruntime for webos :Detailed Notes: Chromium94 recipe is added but keep chromium91 as a default webruntime until switching to chromium94. :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-13460] Setup repo and build for new chromium [WRN-19451] CCC: Switch to chromium94 as default webruntime Change-Id: Ia6a22d0b33a74d818703b702cca339f213e09b31 --- meta-webos/conf/distro/include/webos-preferred-versions.inc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/meta-webos/conf/distro/include/webos-preferred-versions.inc b/meta-webos/conf/distro/include/webos-preferred-versions.inc index 68658e8d0..0c0a4665a 100644 --- a/meta-webos/conf/distro/include/webos-preferred-versions.inc +++ b/meta-webos/conf/distro/include/webos-preferred-versions.inc @@ -1 +1,4 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. + +PREFERRED_VERSION_webruntime = "91.%" +PREFERRED_VERSION_mksnapshot-cross-${TARGET_ARCH} = "91.%" From 50fa3972290493fdd6971fe059143752208e1081 Mon Sep 17 00:00:00 2001 From: "mukul.jha" Date: Thu, 31 Mar 2022 17:43:10 +0530 Subject: [PATCH 0306/2022] ose: com.webos.service.tts=22 com.webos.service.storageaccess=18 libcec=webosrpi2 :Release Notes: Fix com.webos.service.tts service crash Fix crash issue from MessageReceived() in libcec Fix static issues in storageacess service :Detailed Notes: com.webos.service.tts: submissions/20..submissions/22 2b632ad Fix getVolume issue and save error state 12b6394 Fix service crash com.webos.service.storageaccess: submissions/17..submissions/18 f3571c7 Fix static issues :Testing Performed: Build Successful :QA Notes: :Issues Addressed: [WRN-20116] CCC: com.webos.service.tts=22 com.webos.service.storageaccess=18 libcec=webosrpi2 [WRN-18953] [RDX_CRASH][webos] /usr/sbin/tts-service in n/a (/usr/sbin/tts-service + 0x788dc) [WRN-20027] [RDX_CRASH][webos] /usr/bin/cec-client-5.0.0 in _ZN3CEC27CRPiCECAdapterCommunication14OnDataReceivedEjjjjj (libcec.so.5 + 0x53ef0) [WRN-19547] Fix static issues in storageacess service [CID-159541] Calling risky function [CID-149074] Uninitialized scalar field Change-Id: Ic77f2a26ab974f23430719d07562d1c94feb6b8e --- .../libcec/0001-Fix-MessageReceived.patch | 26 +++++++++++++++++++ .../recipes-extended/libcec/libcec_%.bbappend | 8 ++++-- .../com.webos.service.storageaccess.bb | 4 +-- .../com.webos.service.tts.bb | 4 +-- 4 files changed, 36 insertions(+), 6 deletions(-) create mode 100644 meta-webos-raspberrypi/recipes-extended/libcec/libcec/0001-Fix-MessageReceived.patch diff --git a/meta-webos-raspberrypi/recipes-extended/libcec/libcec/0001-Fix-MessageReceived.patch b/meta-webos-raspberrypi/recipes-extended/libcec/libcec/0001-Fix-MessageReceived.patch new file mode 100644 index 000000000..e2d55acec --- /dev/null +++ b/meta-webos-raspberrypi/recipes-extended/libcec/libcec/0001-Fix-MessageReceived.patch @@ -0,0 +1,26 @@ +From a92b00bc4aa724cd4bf0434062ebf0cce1f7768f Mon Sep 17 00:00:00 2001 +From: "mukul.jha" +Date: Thu, 31 Mar 2022 16:08:34 +0530 +Subject: [PATCH] Fix MessageReceived + +--- + src/libcec/adapter/RPi/RPiCECAdapterMessageQueue.cpp | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/src/libcec/adapter/RPi/RPiCECAdapterMessageQueue.cpp b/src/libcec/adapter/RPi/RPiCECAdapterMessageQueue.cpp +index 1f827204..a8490091 100644 +--- a/src/libcec/adapter/RPi/RPiCECAdapterMessageQueue.cpp ++++ b/src/libcec/adapter/RPi/RPiCECAdapterMessageQueue.cpp +@@ -122,9 +122,6 @@ void CRPiCECAdapterMessageQueue::MessageReceived(cec_opcode opcode, cec_logical_ + /* send the received message to each entry in the queue until it is handled */ + for (std::map::iterator it = m_messages.begin(); !bHandled && it != m_messages.end(); it++) + bHandled = it->second->MessageReceived(opcode, initiator, destination, response); +- +- if (!bHandled) +- LIB_CEC->AddLog(CEC_LOG_WARNING, "unhandled response received: opcode=%x initiator=%x destination=%x response=%x", (int)opcode, (int)initiator, (int)destination, response); + } + + uint32_t CRPiCECAdapterMessageQueueEntry::Result() const +-- +2.17.1 + diff --git a/meta-webos-raspberrypi/recipes-extended/libcec/libcec_%.bbappend b/meta-webos-raspberrypi/recipes-extended/libcec/libcec_%.bbappend index f997cff51..ce48780ee 100644 --- a/meta-webos-raspberrypi/recipes-extended/libcec/libcec_%.bbappend +++ b/meta-webos-raspberrypi/recipes-extended/libcec/libcec_%.bbappend @@ -1,8 +1,12 @@ -# Copyright (c) 2017 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosrpi1" +EXTENDPRAUTO_append = "webosrpi2" # The recipe in meta-oe already has conditional dependency: # DEPENDS_append_rpi = "${@bb.utils.contains('MACHINE_FEATURES', 'vc4graphics', '', ' userland', d)}" # but in our builds the userland is used even when vc4graphics is in MACHINE_FEATURES DEPENDS_append_rpi = " virtual/libomxil" + +FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" + +SRC_URI += "file://0001-Fix-MessageReceived.patch" diff --git a/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb b/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb index 0fc0d2747..cb9770f67 100644 --- a/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb +++ b/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "Storage Access Framework for OSE" AUTHOR = "RajeshGopu IV " @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ DEPENDS= "glib-2.0 libxml2 luna-service2 pmloglib libgdrive libpbnjson curl gupnp" -WEBOS_VERSION = "1.0.0-17_8d99527ad0e8d42668c570293b4204f77fe1a458" +WEBOS_VERSION = "1.0.0-18_7a13d2e0d80a506bcf1d44f664a651927d9006a2" PR = "r6" inherit webos_component diff --git a/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb b/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb index 3b8263100..a991dd479 100644 --- a/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb +++ b/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2021 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "webOS text to speech service" SECTION = "webos/base" @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ DEPENDS = "glib-2.0 luna-service2 libpbnjson pmloglib json-c pulseaudio googleapis grpc" -WEBOS_VERSION = "1.0.0-20_dba2c3804230e47b90b317282debcf938b6656c3" +WEBOS_VERSION = "1.0.0-22_041c2f0d43aba0c485fa67bd78339c0ec0ff254b" PR = "r6" inherit webos_component From 3f25feb114b2bc8d048f5f758e5e900124bae7ed Mon Sep 17 00:00:00 2001 From: "Muniraju A/LGSIA APP-3(muniraju.a@lge.com)" Date: Thu, 31 Mar 2022 13:21:42 +0530 Subject: [PATCH 0307/2022] com.webos.app.imageviewer=14 :Release Notes: Fix buttons operate during disable :Detailed Notes: com.webos.app.imageviewer: submissions/13..submissions/14 bd37453 Fix next and previous buttons click when disable :Testing Performed: Please check CCC tickets. :QA Notes: NA :Issues Addressed: [WRN-20111] CCC: com.webos.app.imageviewer=14 [WRN-20057] [WebOS OSE] : When Image slide show is playing next and previous buttons are working even if it is disabled Change-Id: I6cdef6f0c255e83af3b407943ac513b3760e22f7 --- .../com.webos.app.imageviewer/com.webos.app.imageviewer.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/com.webos.app.imageviewer/com.webos.app.imageviewer.bb b/meta-webos/recipes-webos/com.webos.app.imageviewer/com.webos.app.imageviewer.bb index 1e2d3183a..8d25e0051 100644 --- a/meta-webos/recipes-webos/com.webos.app.imageviewer/com.webos.app.imageviewer.bb +++ b/meta-webos/recipes-webos/com.webos.app.imageviewer/com.webos.app.imageviewer.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "Image Viewer application" AUTHOR = "Anish TD " @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=3072ffcf5bdbbc376ed21c9d378d14d5 \ " -WEBOS_VERSION = "0.0.1-13_21dfaf5c7af80b30f11bb9edc357667035feaac1" +WEBOS_VERSION = "0.0.1-14_6a2b6e9efd05e9b18d2ae8a754a314bcae79d141" PR = "r0" inherit webos_component From 532b8de2fae0bf78f4a68d6d7c69a2f59fe0bd12 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Wed, 30 Mar 2022 17:20:49 +0900 Subject: [PATCH 0308/2022] ose: webruntime_91=15 :Release Notes: Fix crash issue :Detailed Notes: webruntime_91: submissions/14..submissions/15 5da09aead6 [op][n_upsable][suspend] Ignoring Page::SetPaused while its destroying :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-18654] [RDX_CRASH][webos] /usr/bin/WebAppMgr in n/a (libcbe.so + 0x553c244) [WRN-20086] CCC: ose: webruntime_91=15 pro: webruntime_94=10 Change-Id: Ibd60f8276b2198e207b4e8461a4ab5385b1e2e1e --- meta-webos/recipes-webos/chromium/webruntime-repo_91.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc index b85d688b1..959857056 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=c31f1ae166739be9ca186deacf4b32e4" WEBOS_REPO_NAME = "chromium91" -WEBOS_VERSION = "91.0.4472.114-14_4c08b35e3f353406cd2f82c13e50d324f7e6c6ea" +WEBOS_VERSION = "91.0.4472.114-15_b3694e736013a504739c229ec45bd7b9ed0d0b98" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" From 95b627b0784e1a72b2c43ce420248fa173a8f8e1 Mon Sep 17 00:00:00 2001 From: Jungi Byun Date: Wed, 23 Mar 2022 14:38:38 +0900 Subject: [PATCH 0309/2022] luna-surfacemanager=370 qtwayland=webos29 qtwayland-webos=77 :Release Notes: Fix presentation time Fix app mirroring bug and static analysis :Detailed Notes: luna-surfacemanager: submissions/369..submissions/370 7b81db0 Fix app mirroring with child display item 4074d75 Fix static analysis defect d1146ce base: Adjust auxiliary lines in frame latency test qtwayland: webos28..webos29 0003-Fix-to-have-presentation-feedback-sequence-timely.patch qtwayland-webos: submissions/76..submissions/77 973feda Fix static analysis defect 168bc4d Rearrange methods in deliverUpdateRequest :Testing Performed: See the CCC Jira Ticket :QA Notes: N/A :Issues Addressed: [WRN-20075] CCC: luna-surfacemanager=370 qtwayland=webos29 qtwayland-webos=77 Change-Id: I0f41246d716d1b509c398378795e59ef173c95c4 --- ...resentation-feedback-sequence-timely.patch | 69 +++++++++++++++++++ .../recipes-qt/qt6/qtwayland_git.bbappend | 3 +- .../luna-surfacemanager.bb | 2 +- .../qtwayland-webos/qtwayland-webos.bb | 2 +- 4 files changed, 73 insertions(+), 3 deletions(-) create mode 100644 meta-webos/recipes-qt/qt6/qtwayland/0003-Fix-to-have-presentation-feedback-sequence-timely.patch diff --git a/meta-webos/recipes-qt/qt6/qtwayland/0003-Fix-to-have-presentation-feedback-sequence-timely.patch b/meta-webos/recipes-qt/qt6/qtwayland/0003-Fix-to-have-presentation-feedback-sequence-timely.patch new file mode 100644 index 000000000..192faf008 --- /dev/null +++ b/meta-webos/recipes-qt/qt6/qtwayland/0003-Fix-to-have-presentation-feedback-sequence-timely.patch @@ -0,0 +1,69 @@ +From 44be507eb53c7dd21a2dab3e57be2ee092c57621 Mon Sep 17 00:00:00 2001 +From: Jungi Byun +Date: Thu, 24 Mar 2022 12:09:39 +0900 +Subject: [PATCH] Fix to have presentation feedback sequence timely + +In the case connections in PresentationFeedback are QueuedConnection, +there are sometimes a signal to be connected is emitted before creating +another connection on the signal from the connection's slot method, and +this makes wrong feedbacks. +In order to send proper feedbacks to clients, create related connection +earlier and make to work properly by checking some conditions. + +Pick-to: 6.3 +Change-Id: Ic8f02139ca08713c419b0341b9a1e8add6f5a095 +Upstream-Status: Pending [https://codereview.qt-project.org/c/qt/qtwayland/+/402294] +--- + src/compositor/extensions/qwaylandpresentationtime.cpp | 9 ++++++--- + src/compositor/extensions/qwaylandpresentationtime_p_p.h | 1 + + 2 files changed, 7 insertions(+), 3 deletions(-) + +diff --git a/src/compositor/extensions/qwaylandpresentationtime.cpp b/src/compositor/extensions/qwaylandpresentationtime.cpp +index 81bed5e8..b17fb597 100644 +--- a/src/compositor/extensions/qwaylandpresentationtime.cpp ++++ b/src/compositor/extensions/qwaylandpresentationtime.cpp +@@ -266,6 +266,7 @@ void PresentationFeedback::connectToWindow(QQuickWindow *window) + m_connectedWindow = window; + + connect(window, &QQuickWindow::beforeSynchronizing, this, &PresentationFeedback::onSync); ++ connect(window, &QQuickWindow::afterFrameEnd, this, &PresentationFeedback::onSwapped); + } + + void PresentationFeedback::onSync() +@@ -275,7 +276,7 @@ void PresentationFeedback::onSync() + if (m_committed) { + disconnect(m_surface, &QWaylandSurface::damaged, this, &PresentationFeedback::onSurfaceCommit); + disconnect(window, &QQuickWindow::beforeSynchronizing, this, &PresentationFeedback::onSync); +- connect(window, &QQuickWindow::afterFrameEnd, this, &PresentationFeedback::onSwapped); ++ m_sync = true; + } + } + +@@ -283,8 +284,10 @@ void PresentationFeedback::onSwapped() + { + QQuickWindow *window = qobject_cast(sender()); + +- disconnect(window, &QQuickWindow::afterFrameEnd, this, &PresentationFeedback::onSwapped); +- connect(m_presentationTime, &QWaylandPresentationTime::presented, this, &PresentationFeedback::sendPresented); ++ if (m_sync) { ++ disconnect(window, &QQuickWindow::afterFrameEnd, this, &PresentationFeedback::onSwapped); ++ connect(m_presentationTime, &QWaylandPresentationTime::presented, this, &PresentationFeedback::sendPresented); ++ } + } + + void PresentationFeedback::discard() +diff --git a/src/compositor/extensions/qwaylandpresentationtime_p_p.h b/src/compositor/extensions/qwaylandpresentationtime_p_p.h +index 7f984958..fc56a048 100644 +--- a/src/compositor/extensions/qwaylandpresentationtime_p_p.h ++++ b/src/compositor/extensions/qwaylandpresentationtime_p_p.h +@@ -89,6 +89,7 @@ public: + QQuickWindow *m_connectedWindow = nullptr; + + bool m_committed = false; ++ bool m_sync = false; + }; + + class QWaylandPresentationTimePrivate : public QWaylandCompositorExtensionPrivate, public QtWaylandServer::wp_presentation +-- +2.17.1 + diff --git a/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend b/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend index edab715e5..a21d43660 100644 --- a/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend @@ -2,7 +2,7 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos28" +EXTENDPRAUTO_append = "webos29" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" @@ -12,6 +12,7 @@ PATCHTOOL = "git" SRC_URI_append = " \ file://0001-Support-presentation-time-protocol.patch;maxver=6.2.* \ file://0002-Use-scope-resolution-operator-for-request.patch;maxver=6.2.* \ + file://0003-Fix-to-have-presentation-feedback-sequence-timely.patch;maxver=6.3.* \ " # More options for fine-tuned configuration diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index 7d79148a9..8f9be5bee 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0 qtwayland-webos" -WEBOS_VERSION = "2.0.0-369_bfea82856754c95b38436ca1b5d04d38703ad4a2" +WEBOS_VERSION = "2.0.0-370_280ec46edb5905e28cda958e5e13501fbc5b60c4" PR = "r54" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb index 9396c7cdc..4ac145a9a 100644 --- a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb +++ b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtwayland webos-wayland-extensions libxkbcommon qt-features-webos wayland-native qtwayland-native wayland-protocols" -WEBOS_VERSION = "2.0.0-76_a1637db6357c2eb9d09ad6629b5a09209e5bc92a" +WEBOS_VERSION = "2.0.0-77_06206d9e24f73c3317ecebee95d427ffb61587c5" PR = "r16" inherit webos_qmake6 From 99a945fe6c2081c20bd9da888d9d3a202fd28d8c Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Mon, 28 Mar 2022 14:37:53 +0900 Subject: [PATCH 0310/2022] ilib-webapp=22,v14.14.0 enact-framework=r19 :Release Notes: Sync up iLib 14.14.0 :Detailed Notes: ilib-webapp: submissions/21..submissions/22 0425c4c Sync up iLib 14.14.0 (https://github.com/iLib-js/iLib/releases) Added support for ig-NG, lb-LU, yo-BJ, yo-NG, ps-AF, and ps-PK locales validated locale data and added many test cases Fixed correct currency symbol (AMD, AZN, GHS) enact-framework: r18..r19 Updated Enact's corresponding iLib dependency :Testing Performed: See the CCC ticket :QA Notes: NA :Issues Addressed: [WRN-1195] Add new locales to webOS [WRN-19825] CCC: ilib-webapp=22,v14.14.0 enact-framework=r19 Change-Id: Iadef70a8e3b0c2ff94a77bf13ad4eb4e41ab188e --- meta-webos/recipes-webos/enactjs-apps/enact-framework.bb | 4 ++-- meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb index c6bade5d4..bb19a8810 100644 --- a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb +++ b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb @@ -36,7 +36,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ direction@1.0.4 \ dom-walk@0.1.2 \ global@4.4.0 \ - ilib@14.13.0 \ + ilib@14.14.0 \ invariant@2.2.4 \ is-function@1.0.2 \ js-tokens@4.0.0 \ @@ -59,7 +59,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ # NOTE: We only need to bump PR if we change something OTHER than # PV, SRCREV or the dependencies statement above. -PR = "r18" +PR = "r19" # Skip unneeded tasks do_configure[noexec] = "1" diff --git a/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb b/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb index 12f7b7aa3..0c4395b43 100644 --- a/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb +++ b/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=be4f2e45a1215076318af43f833aa178 \ " -WEBOS_VERSION = "14.13.0-21_c160f6c44dc29143410d0c7fbb68c9b33caeadf8" +WEBOS_VERSION = "14.14.0-22_9e8c7ab532e134c6b142026ad6af6b4d8ecf6296" PR = "r8" inherit webos_arch_indep From 069660578990caa8f64984d49daabbc892ebce43 Mon Sep 17 00:00:00 2001 From: "ashish23.patel" Date: Fri, 1 Apr 2022 15:34:13 +0530 Subject: [PATCH 0311/2022] com.webos.service.bluetooth2=71 bluetooth-sil-bluez5=78 :Release Notes: Handle special characters for ClientId Fix Coverity issue :Detailed Notes: com.webos.service.bluetooth2: submissions/70..submissions/71 6477fed Handle special characters for ClientId bluetooth-sil-bluez5: submissions/77..submissions/78 b259d65 Address Coverity issue :Testing Performed: Tested results updated in WRN-20182 :QA Notes: NA :Issues Addressed: [WRN-20182] CCC: com.webos.service.bluetooth2=71 bluetooth-sil-bluez5=78 [CID-8991947] Uninitialized non-static class member variable. Change-Id: I115daede9af54cf3e19d06d5ec027d63efd31147 --- meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb | 4 ++-- .../recipes-webos/bluetooth/com.webos.service.bluetooth2.bb | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb index 1ce699159..c74313d5b 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2021 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "webOS Bluetooth SIL implementation for bluez5" AUTHOR = "Sameeer Mulla " @@ -17,7 +17,7 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES ??= "" # Add runtime dependency on bluez5 OBEX service when we have to support FTP RDEPENDS_${PN} += "${@ bb.utils.contains('WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES', 'FTP', 'bluez5-obex', '', d)}" -WEBOS_VERSION = "0.1.0-77_1916b7be5f4e38a45a9c3c0690c642a4a997034a" +WEBOS_VERSION = "0.1.0-78_a66bf9ebb7bf1f4fde127742f43393b387fa3a73" PR = "r4" inherit webos_component diff --git a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb index f17cee619..98f64569f 100644 --- a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb +++ b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2021 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "webOS Bluetooth management service" AUTHOR = "Sameer Mulla " @@ -48,7 +48,7 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES = "GATT FTP OPP A2DP SPP HFP AVRCP PAN A # emulator), which means that the pairing should happen without user intervention. WEBOS_BLUETOOTH_PAIRING_IO_CAPABILITY ??= "NoInputNoOutput" -WEBOS_VERSION = "1.0.0-70_1342f4f1ed34557759415a2565e7b60c53d7fdb2" +WEBOS_VERSION = "1.0.0-71_4a59ec7e27aab8c3a0ac80c207013156e8efc517" PR = "r5" inherit webos_component From 6a9389c4ad4d43fceb99044f2234202cceab6ce0 Mon Sep 17 00:00:00 2001 From: "madrol10.stephen" Date: Fri, 1 Apr 2022 17:57:59 +0530 Subject: [PATCH 0312/2022] ose: db8=21 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit :Release Notes: Fix static issue in db8 :Detailed Notes: Fixed below coverity issue in the db8 components CID's:87548 Uninitialized pointer field db8: submissions/20..submissions/21 d9fb360 Fix static issue year update ad10fed Fix static issue :Testing Performed: Build Success Refer WRN-20200 for test results :QA Notes: N/A :Issues Addressed: [WRN-20200] CCC: ose: db8=21 [WRN-20346] Fix coverity issues for db8 ose Change-Id: I773fb9dfa57b908bb09124ef35a8ef780fbdd6d4 --- meta-webos/recipes-webos/db8/db8.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/db8/db8.bb b/meta-webos/recipes-webos/db8/db8.bb index 90348fba2..43c6b564e 100644 --- a/meta-webos/recipes-webos/db8/db8.bb +++ b/meta-webos/recipes-webos/db8/db8.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "A userspace service that provides access to the webOS database" SECTION = "webos/base" @@ -21,7 +21,7 @@ VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_stat} ${VIRTUAL-RUNTIME_bash}" RDEPENDS_${PN}-tests_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -WEBOS_VERSION = "3.2.0-20_1ba9dae12c33a7a6b6161333172463161d93d9fd" +WEBOS_VERSION = "3.2.0-21_cbfacb6919591304618706e7a5aeaf15a626a28e" PR = "r36" inherit webos_component From 66ff4c4a1e66f2f49bbe15d3014412c9d3ab6416 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Tue, 5 Apr 2022 09:05:15 +0900 Subject: [PATCH 0313/2022] ose: webruntime_91=16 webruntime_94=r52.1 :Release Notes: Fix static analysis issues :Detailed Notes: webruntime_91: submissions/15..submissions/16 c1afea619c [op][n_upsable][static_analysis] Fix "Unchecked return value" issue 1fbec7a090 [op][n_upsable][static_anaysis] Fix unrecoverable parse warning webruntime_94: r52.0..r52.1 Enable LTTNG feature :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-19672] [OSE_Static_Analysis] 8987151 Unrecoverable parse warning [WRN-19679] [OSE_Static_Analysis] 9145236 Unchecked return value [WRN-19680] [OSE_Static_Analysis] 9132550 Unchecked return value [WRN-19683] [OSE_Static_Analysis] 9132551 Unchecked return value [WRN-20014] : Empty text is displayed in trace-file.txt. [WRN-20304] CCC: ose: webruntime_91=16 pro: webruntime_87=31 webruntime_94={ose: r52.1 pro:11} Change-Id: I4f1bcc5ce4450292aebbe408ca86978fc8d36640 --- meta-webos/recipes-webos/chromium/webruntime-repo_91.inc | 2 +- meta-webos/recipes-webos/chromium/webruntime_94.bb | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc index 959857056..d4a99ee15 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=c31f1ae166739be9ca186deacf4b32e4" WEBOS_REPO_NAME = "chromium91" -WEBOS_VERSION = "91.0.4472.114-15_b3694e736013a504739c229ec45bd7b9ed0d0b98" +WEBOS_VERSION = "91.0.4472.114-16_f39cea592738378f42d488bc5387ccd02f2d9811" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" diff --git a/meta-webos/recipes-webos/chromium/webruntime_94.bb b/meta-webos/recipes-webos/chromium/webruntime_94.bb index d4675a1a2..25b516b18 100644 --- a/meta-webos/recipes-webos/chromium/webruntime_94.bb +++ b/meta-webos/recipes-webos/chromium/webruntime_94.bb @@ -6,17 +6,13 @@ require webruntime-repo${REPO_VERSION}.inc PROVIDES = "virtual/webruntime" -PR = "${INC_PR}.0" +PR = "${INC_PR}.1" PACKAGECONFIG[debug] = "symbol_level=2 optimize_for_size=true use_debug_fission=true,symbol_level=0" PACKAGECONFIG[debug-blink] = "blink_symbol_level=2,blink_symbol_level=1" PACKAGECONFIG[v8_lite] = "v8_enable_lite_mode=true,v8_enable_lite_mode=false" -# FIXME(neva): LTTng impl is incompatible with Perfetto feature in Chromium v.91 -# https://chromium-review.googlesource.com/c/chromium/src/+/2632755 -PACKAGECONFIG[lttng] = "use_lttng=false,," - PACKAGECONFIG_remove="jumbo" GN_ARGS_append = " neva_dcheck_always_on=true" From 49a4b3cdc3a505789f3bf105e06a530b57c46680 Mon Sep 17 00:00:00 2001 From: Bojun Date: Tue, 29 Mar 2022 15:46:30 +0900 Subject: [PATCH 0314/2022] ose: ebd=5 :Release Notes: Add features and fix bugs on ebd tools :Detailed Notes: submissions/3..submissions/5 0c25c746 libbpf-tools/memleak: Fix bug of top stack count af061306 libbpf-tools/memleak: Add accumulation of stack count a0e37233 libbpf-tools/memleak: Change a failed log to normal's a43dbbfc libbpf-tools/memleak: Support changable number of top stacks 7afc7c3c libbpf-tools/memleak: Modified goto statement 83129211 libbpf-tools/memleak: Fix wrong value and typo 9ae75542 libbpf-tools/memleak: Add options for stack-storage-size and stack-depth 7effa07c libbpf-tools/profile: disable adding kernel_ip dfd0ccfe libbpf-tools/lsan: Stop lsan on target process end bf4f087a libbpf-tools/lsan: Change lsan.skel.h for webOS 2b1f1849 libbpf-tools/lsan: Fixed lsan false alarms be12f480 libbpf-tools/memleak: Change a report same as others 55f96e42 libbpf-tools/lsan: Implement suppression 435da626 libbpf-tools/lsan: Change the way to report 844c9adb libbpf-tools/profile: Use batch method if available 7c51c8cc libbpf-tools/profile: Fix the order of call stack entries 5b6c2e21 libbpf-tools/profile: Generalize adding kernel_ip logic 1dc9ee15 libbpf-tools/memleak: Expand value size to 64bit c5d0a8a9 libbpf-tools/ebd: Move skel header to ebd :Testing Performed: Tested results updated in WRN-20021 :QA Notes: N/A :Issues Addressed: [WRN-20021] CCC: ebd=5 Change-Id: Id0bdefff6878ebd737a7a941f37258cbb34535ec --- meta-webos/recipes-kernel/ebd/ebd.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-kernel/ebd/ebd.bb b/meta-webos/recipes-kernel/ebd/ebd.bb index 155327853..5784e3305 100644 --- a/meta-webos/recipes-kernel/ebd/ebd.bb +++ b/meta-webos/recipes-kernel/ebd/ebd.bb @@ -20,7 +20,7 @@ SRC_URI = " \ file://remove_btf_dependency.patch \ " -WEBOS_VERSION = "1.0.0-3_00e6dcdd1ec324baf75f503fe3906cb8e37c59f1" +WEBOS_VERSION = "1.0.0-5_1daddf9cbd43dd931ab462a2869f3fe30b44eca5" SRCREV_libbpf = "26e768783ce99bd16540a5064cee8677818d2358" From a34c89c873aba48ab92a0508cf1418ad98aa4668 Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Wed, 6 Apr 2022 17:44:47 +0900 Subject: [PATCH 0315/2022] auto-luna-surface-manager=41 luna-surfacemanager=371 :Release Notes: Update scheduler for new adaptive update :Detailed Notes: auto-luna-surface-manager: submissions/40..submissions/41 86c7587 Configure UpdateScheduler in window luna-surfacemanager: submissions/370..submissions/371 3eb7be2 Update scheduler for new adaptive update :Testing Performed: See the CCC jira ticket :QA Notes: N/A :Issues Addressed: [WRN-20435] CCC: auto-luna-surface-manager=41 luna-surfacemanager=371 Change-Id: Iad62b4b6c0079be0087658974dc77305e3adf554 --- .../auto-luna-surface-manager/auto-luna-surface-manager.bb | 2 +- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb index c17b41b37..38ad2749e 100644 --- a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb +++ b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb @@ -15,7 +15,7 @@ RDEPENDS_${PN} = " \ qtbase-plugins-webos \ " -WEBOS_VERSION = "0.0.1-40_2221f883a23126adb9ba0a0d5bee133ee0d312c9" +WEBOS_VERSION = "0.0.1-41_775c6b4b6589c096b6b6030bcd857565527623ee" PR = "r7" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index 8f9be5bee..aa8fedca8 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0 qtwayland-webos" -WEBOS_VERSION = "2.0.0-370_280ec46edb5905e28cda958e5e13501fbc5b60c4" +WEBOS_VERSION = "2.0.0-371_aeedb2d004284f127f341d4dc86afd9566613c8a" PR = "r54" inherit webos_qmake6 From 49861e3f0db18449b851463d55a1f7480af3e5a1 Mon Sep 17 00:00:00 2001 From: "sandeep.arjun" Date: Mon, 11 Apr 2022 15:15:39 +0530 Subject: [PATCH 0316/2022] ose: settingsservice-conf=9 :Release Notes: Add localeInfo support in settingsservice-conf :Detailed Notes: Add localeInfo support in settingsservice-conf webos-settingsservice-conf: submissions/8..submissions/9 454d36a Add localeInfo support in settingsservice-conf :Testing Performed: Refer WRO-2400 for test results :QA Notes: N/A :Issues Addressed: [WRO-2400] CCC: ose: settingsservice-conf=9 [WRO-2415] Add localeInfo support in settingsservice-conf Change-Id: I231f7be0661fa8b5cc0d8345ab828a1ef7438126 --- .../settingsservice-conf/settingsservice-conf.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/settingsservice-conf/settingsservice-conf.bb b/meta-webos/recipes-webos/settingsservice-conf/settingsservice-conf.bb index 2ddb3697c..dcf8d366c 100644 --- a/meta-webos/recipes-webos/settingsservice-conf/settingsservice-conf.bb +++ b/meta-webos/recipes-webos/settingsservice-conf/settingsservice-conf.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2021 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. SUMMARY = "Settings Service Configs" AUTHOR = "Denys Romanchuk " @@ -6,7 +6,7 @@ SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" -WEBOS_VERSION = "1.0.0-8_280fb64b45ef9cb2c0a88d03cda7fe88afc001d9" +WEBOS_VERSION = "1.0.0-9_a4a2a162994db5a20802d704da04f23230296b9f" PR = "r1" inherit webos_component From 8dcaa7db185075865554aa3fd3baeca96c3ff10d Mon Sep 17 00:00:00 2001 From: "mark.yang" Date: Tue, 15 Mar 2022 21:16:57 +0900 Subject: [PATCH 0317/2022] webos_base.bbclass: Add webos-compile-option.json feature :Release Notes: Add webos-compile-option.json feature in do_write_bom_data Task :Detailed Notes: do_write_bom_data task call do_write_compile_option_data last Compile option is composed of 'CC', 'CFLAGS', 'CXX', 'CXXFLAGS', 'LDFLAGS'. Those information is written each field 'cc', 'cflags', 'cxx', 'cxxflags', 'ldflags' in the webos-compile-option.json Common flags for each architecture can be see in the webos-common-compile-option.json :Testing Performed: Local test suite :QA Notes: NA :Issues Addressed: [WRO-1838] Add compile-options.json from each recipe Change-Id: I43a9dac7a3627dc31e181979e93ea24df08e1bb8 --- meta-webos/classes/webos_base.bbclass | 104 +++++++++++++++++++++++++- 1 file changed, 103 insertions(+), 1 deletion(-) diff --git a/meta-webos/classes/webos_base.bbclass b/meta-webos/classes/webos_base.bbclass index 43773c270..fd01f5768 100644 --- a/meta-webos/classes/webos_base.bbclass +++ b/meta-webos/classes/webos_base.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2020 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. # # webos_base # @@ -65,6 +65,8 @@ python do_write_bom_data() { json.dump(jsondata, f, sort_keys=True, cls=WebosBomJSONEncoder) f.write(',\n') bb.utils.unlockfile(lock) + + write_compile_option(d) } do_write_abi_xml_data[nostamp] = "1" @@ -115,3 +117,103 @@ def webos_base_get_metadata_git_describe(path, d): except bb.process.ExecutionError: description = '' return description.strip() + +def write_compile_option(d): + import json + def pruneString(string: str, plist=None, isFullPath=False): + if plist is None: + plist = ['-isystem', 'sysroot', 'prefix-map'] + if not isFullPath: + for pword in plist: + string = ' '.join([x for x in string.strip().split() if x.find(pword) == -1]) + else: + for pword in (plist.split()): + string = string.replace(pword,'').strip() + + return string + + def getSameOption(opt1: str, opt2: str): + same_opt = list() + for o1 in (opt1.split()): + for o2 in (opt2.split()): + if o1 == o2: + same_opt.append(o1) + break + if len(same_opt) == 0: + return '' + return ' '.join(same_opt) + + # Write Compile option data + compile_data = {} + compile_data["arch"] = d.getVar('PACKAGE_ARCH', True) + compile_data["recipe"] = d.getVar('PN', True) + CFLAGS = d.getVar('CFLAGS',True) + CXXFLAGS = d.getVar('CXXFLAGS',True) + if CFLAGS.find('none') == -1: + compile_data["cflags"] = pruneString(CFLAGS) + compile_data["cc"] = pruneString(d.getVar('CC',True)) + + if CXXFLAGS.find('none') == -1: + compile_data["cxxflags"] = pruneString(CXXFLAGS) + compile_data["cxx"] = pruneString(d.getVar('CXX', True)) + + if compile_data.get("cc") != None or compile_data.get("cxx") != None: + compile_data["ldflags"] = pruneString(d.getVar('LDFLAGS', True)) + + if compile_data.get("cc") is None and compile_data.get("cxx") is None: + return + + compile_datafile = os.path.join(d.getVar("TOPDIR", True), "webos-compile-option.json") + lock = bb.utils.lockfile(compile_datafile + '.lock') + with open(compile_datafile, "a") as fp: + json.dump(compile_data, fp) + fp.write(',\n') + bb.utils.unlockfile(lock) + + if bb.data.inherits_class('image',d): + # image recipe is usually has all depends, so that it will be build at the end. + fp = open(compile_datafile, 'r') + FIELD = ['cc', 'cflags', 'cxx', 'cxxflags', 'ldflags'] + common_options = dict() + try: + jsondata = json.load(fp) + except json.decoder.JSONDecodeError: + fp.seek(os.SEEK_SET) + while True: + try: + line = fp.readline().strip() + except: + break + if not line: + break + if line[-1] == ',': + line = line[:-1] + line = json.loads(line) + ARCH = line['arch'] + if common_options.get(ARCH) is None: + common_options.update({ARCH: {'cc': None, 'cflags': None, 'cxx': None, 'cxxflags': None, 'ldflags': None}}) + + for field in FIELD: + if line.get(field) is not None: + if common_options[ARCH][field] == None: + common_options[ARCH][field] = line[field] + elif common_options[ARCH][field] == '': + continue + else: + common_options[ARCH][field] = getSameOption(common_options[ARCH][field], line[field]) + cnt = 0 + for arch in common_options.keys(): + try: + for field in common_options[arch]: + if common_options[arch][field] is None: + cnt +=1 + if len(FIELD) == cnt: + common_options.pop(arch) + except: + pass + cnt = 0 + + result_file = os.path.join(d.getVar("TOPDIR", True), "webos-common-compile-option.json") + with open(result_file,'w') as rfp: + json.dump(common_options,rfp) + fp.close() \ No newline at end of file From 0dc132ad29e34b362be2cd90aee913ab8ab9ea24 Mon Sep 17 00:00:00 2001 From: "muralidhar.n" Date: Mon, 11 Apr 2022 10:53:11 +0530 Subject: [PATCH 0318/2022] connman=webos20 :Release Notes: Fix connman crash on p2p/connect :Detailed Notes: connman: webos19..webos20 Added .patch to fix connman P2P crash :Testing Performed: Tested results updated in WRN-20593 :QA Notes: N/A :Issues Addressed: [WRN-20593] CCC: connman=webos20 [WRN-16359][webOS OSE]: Connected status is displayed false Change-Id: Ibf4571f0eeaf4c2b79891f38c8df4679f35b1707 --- ...023-Fix-connman-crash-on-p2p-connect.patch | 54 +++++++++++++++++++ .../connman/connman_%.bbappend | 5 +- 2 files changed, 57 insertions(+), 2 deletions(-) create mode 100755 meta-webos/recipes-connectivity/connman/connman/0023-Fix-connman-crash-on-p2p-connect.patch diff --git a/meta-webos/recipes-connectivity/connman/connman/0023-Fix-connman-crash-on-p2p-connect.patch b/meta-webos/recipes-connectivity/connman/connman/0023-Fix-connman-crash-on-p2p-connect.patch new file mode 100755 index 000000000..b701f4ebb --- /dev/null +++ b/meta-webos/recipes-connectivity/connman/connman/0023-Fix-connman-crash-on-p2p-connect.patch @@ -0,0 +1,54 @@ +From 16d584f3387f0b4f93d69290143cd38fa3506a91 Mon Sep 17 00:00:00 2001 +From: Nitish Bidwe +Date: Fri, 8 Apr 2022 17:16:46 +0530 +Subject: [PATCH] Fix connman crash on p2p/connect + +:Release Notes: +Fix connman crash on p2p/connect + +:Detailed Notes: +Connman crasing on p2p/connect due to no scope of +funcation + +:Testing Performed: +Build successfully. +p2p connection successfully. + +:QA Notes: +N/A + +:Issues Addressed: +[WRN-16359] [webOS OSE]: Connected status is displayed + false + +Upstream-Status: Inappropriate [webOS specific] +--- + gsupplicant/gsupplicant.h | 1 + + src/connman.h | 2 ++ + 2 files changed, 3 insertions(+) + +diff --git a/gsupplicant/gsupplicant.h b/gsupplicant/gsupplicant.h +index c787d5a..671ea4e 100644 +--- a/gsupplicant/gsupplicant.h ++++ b/gsupplicant/gsupplicant.h +@@ -661,6 +661,7 @@ GSupplicantInterface *g_supplicant_group_get_orig_interface(GSupplicantGroup *gr + char *g_supplicant_group_get_object_path(GSupplicantGroup *group); + char *g_supplicant_group_get_bssid_no_colon(GSupplicantGroup *group); + GSupplicantGroup *g_supplicant_get_group(const char *path); ++GSupplicantP2PPersistentGroup* g_supplicant_interface_get_p2p_persistent_group(GSupplicantInterface *interface, GSupplicantGroup *group); + + int g_supplicant_group_get_role(GSupplicantGroup *group); + char *g_supplicant_group_get_ssid(GSupplicantGroup *group); +diff --git a/src/connman.h b/src/connman.h +index 3badeb7..4160c2c 100644 +--- a/src/connman.h ++++ b/src/connman.h +@@ -1131,3 +1131,5 @@ unsigned int __connman_util_random_delay_ms(unsigned int secs); + int __connman_util_init(void); + void __connman_util_cleanup(void); + char *__connman_util_insert_colon_to_mac_addr(const char *mac_addr); ++char *__connman_util_mac_binary_to_string_no_colon(const unsigned char binmac[6]); ++const char * g_supplicant_peer_identifier_from_intf_address(const char* pintf_addr); +-- +2.17.1 + diff --git a/meta-webos/recipes-connectivity/connman/connman_%.bbappend b/meta-webos/recipes-connectivity/connman/connman_%.bbappend index 2cccf35e4..b6df6ce79 100644 --- a/meta-webos/recipes-connectivity/connman/connman_%.bbappend +++ b/meta-webos/recipes-connectivity/connman/connman_%.bbappend @@ -1,8 +1,8 @@ -# Copyright (c) 2018-2021 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" -EXTENDPRAUTO_append = "webos19" +EXTENDPRAUTO_append = "webos20" SYSTEMD_SERVICE_${PN}_remove = "connman.service" SRC_URI += " \ @@ -28,6 +28,7 @@ SRC_URI += " \ file://0020-Fix-connman-crash-when-interface-removed.patch \ file://0021-Fix-bug-p2p-findservice-luna-fail.patch \ file://0022-Fix-connman-crash.patch \ + file://0023-Fix-connman-crash-on-p2p-connect.patch \ " do_install_append() { From 4acf129d7b355b4435b0669981de4001b8f5fb3f Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Wed, 13 Apr 2022 17:25:36 +0900 Subject: [PATCH 0319/2022] luna-surfacemanager=372 :Release Notes: Fix browser not shown on emulator :Detailed Notes: luna-surfacemanager: submissions/371..submissions/372 b3759ec Modify the condition for pageFlipNotifier :Testing Performed: See the CCC Jira ticket. :QA Notes: N/A :Issues Addressed: [WRO-2739] CCC: luna-surfacemanager=372 Change-Id: Id5e012ba991fe36a809f8a80a22e9a8cb9f7d2a2 --- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index aa8fedca8..134996add 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0 qtwayland-webos" -WEBOS_VERSION = "2.0.0-371_aeedb2d004284f127f341d4dc86afd9566613c8a" +WEBOS_VERSION = "2.0.0-372_0cfef81ecf58cb6bd50f9a766a7e976bd2ea21ad" PR = "r54" inherit webos_qmake6 From 152f960d57f4aa72f1b9825470f29e9801642c84 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Wed, 13 Apr 2022 15:30:38 +0900 Subject: [PATCH 0320/2022] ose: webruntime_91=17 wam=58 :Release Notes: Bug fixes including RDX crash report :Detailed Notes: webruntime_91: submissions/16..submissions/17 f1227c3dde fixup! [op][ds][media] Implement MediaPlatformAPIWebOSGmp 78e203bfd6 [op][n_upsable][media] Fix upstream v4l2 video encoder for webos c6decb5ddd fixup! [op][n_upsable][media] Support for enabling use_neva_v4l2_codec 98ae785c0c [op][n_upsable][input] Fix crash on rwhva::OnTextSelectionChanged ed1a510acd [op][n_upsable][wayland] Check count inited displays wam: submissions/57..submissions/58 703efea [oe][locale] Fixed incorrect access to locale json data :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-16634] [RDX_CRASH][webos] /usr/bin/WebAppMgr in n/a (libcbe.so + 0x4825cc0) [WRN-15651] [RDX_CRASH][webos] /usr/bin/WebAppMgr in n/a (libcbe.so + 0x41dd380) [WRN-19194] [RDX_CRASH][webos] /usr/bin/app-shell/app_shell [WRN-19158] [webOS OSE]: Audio is not heard when youtube Re-Launch [WRN-17842] [OSE-RPi4] : Edit pops up first then other app shows in home launcher. [WRO-2738] CCC: ose: webruntime_91=17 wam=58 Change-Id: I00a38f381a00994cff82a61f8ae3194503f6d4c8 --- meta-webos/recipes-webos/chromium/webruntime-repo_91.inc | 2 +- meta-webos/recipes-webos/wam/wam.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc index d4a99ee15..e45d60ca4 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=c31f1ae166739be9ca186deacf4b32e4" WEBOS_REPO_NAME = "chromium91" -WEBOS_VERSION = "91.0.4472.114-16_f39cea592738378f42d488bc5387ccd02f2d9811" +WEBOS_VERSION = "91.0.4472.114-17_dc59a123111a3b28640ea158d5fe07693e686e7f" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index d33f3eaca..bcfa1e9b7 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -18,7 +18,7 @@ RDEPENDS_${PN} += "util-linux" VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" -WEBOS_VERSION = "1.0.2-57_f111853b803ecb1ea70ea7ea5887fe7ebbef2280" +WEBOS_VERSION = "1.0.2-58_abdd3a3484ada38b4691628588008d974d7c2f22" PR = "r44" WAM_BUILD_SYSTEM = "webos_qmake6" From 292d8d369dc790e565123d5ed43028753c8de749 Mon Sep 17 00:00:00 2001 From: Myungchul Kim Date: Tue, 19 Apr 2022 13:12:26 +0900 Subject: [PATCH 0321/2022] webos-fluentbit-plugins=30-r4 :Release Notes: Update input_simulator for automated test :Detailed Notes: webos-fluentbit-plugins: submissions/29..submissions/30 dd6b41b Improve playback; events can be played if the device has the same capa. a65cad2 Add /proc/meminfo info to crash report :Testing Performed: See the JIRA CCC Ticket :QA Notes: N/A :Issues Addressed: [WRO-3039] CCC: webos-fluentbit-plugins=30-r4 [WRO-2264] Support keyboard input in input_simulator Change-Id: I4405c4f53cd97e68f5e48d42466e20abbe016293 --- .../webos-fluentbit-plugins.bb | 9 ++- .../0001-Fix-static-analysis-issues.patch | 57 +++++++++++++++++++ 2 files changed, 64 insertions(+), 2 deletions(-) create mode 100644 meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins/0001-Fix-static-analysis-issues.patch diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb index c0ebbfc50..90884ed18 100644 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb @@ -11,8 +11,8 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "glib-2.0 luna-service2 libpbnjson fluentbit" RDEPENDS_${PN} = "nyx-utils python3-core python3-requests python3-atlassian-python-api" -WEBOS_VERSION = "1.0.0-29_8fe0afaa9acc8cfaa7eb2598f843fe7d95061b12" -PR = "r3" +WEBOS_VERSION = "1.0.0-30_9f7c98a3c6ab09c71deb4b5a491497ae6746fa9c" +PR = "r4" inherit webos_component inherit webos_enhanced_submissions @@ -27,3 +27,8 @@ inherit webos_distro_variant_dep SRC_URI="${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" + +SRC_URI_append = " \ + file://0001-Fix-static-analysis-issues.patch \ +" + diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins/0001-Fix-static-analysis-issues.patch b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins/0001-Fix-static-analysis-issues.patch new file mode 100644 index 000000000..a16e5be65 --- /dev/null +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins/0001-Fix-static-analysis-issues.patch @@ -0,0 +1,57 @@ +From 0acb5f0f876d6b5812aa4cf7480bf9ddb80178b6 Mon Sep 17 00:00:00 2001 +From: Myungchul Kim +Date: Tue, 19 Apr 2022 14:18:40 +0900 +Subject: [PATCH] Fix static analysis issues + +:Release Notes: +Fix static analysis issues + +:Detailed Notes: +Fix static analysis issues + +:Testing Performed: +Local test : OK + +:QA Notes: +N/A + +:Issues Addressed: +N/A + +Change-Id: Ic445f1ec3490ee7cf47edfa7af506865a1f776f1 +--- + input_simulator/Main.cpp | 7 +++++-- + 1 file changed, 5 insertions(+), 2 deletions(-) + +diff --git a/input_simulator/Main.cpp b/input_simulator/Main.cpp +index ece7274..acbbe06 100644 +--- a/input_simulator/Main.cpp ++++ b/input_simulator/Main.cpp +@@ -824,11 +824,14 @@ static int migration_mode(const char *capture_path) + ret = EXIT_FAILURE; + goto Exit; + } ++Exit: ++ if (contents != NULL) { ++ free(contents); ++ } + if (capture_file != -1 && close(capture_file) != 0) { + perror("Close close_all_files capture_file"); + ret = EXIT_FAILURE; + } +-Exit: + return ret; + } + +@@ -858,7 +861,7 @@ static int playback_mode(const char *capture_path) + goto exit; + } + while ((nRead = read(capture_file, &device, sizeof(device))) > 0) { +- if (device.m_handler == 0 && device.m_ev == 0 && strlen(device.m_name) == 0) ++ if (device.m_handler == 0 && device.m_ev == 0 /*&& strlen(device.m_name) == 0*/) + break; + captureDevices.push_back(device); + } +-- +2.25.1 + From 8f81e81bbc36a7e0bcd61742468579e6385d1a63 Mon Sep 17 00:00:00 2001 From: "madrol10.stephen" Date: Wed, 13 Apr 2022 18:28:27 +0530 Subject: [PATCH 0322/2022] ose: db8=22 :Release Notes: Fix static issue in db8 :Detailed Notes: Fixed below coverity issue in the db8 components CID's:87548 Uninitialized pointer field db8: submissions/21..submissions/22 a9697f6 Fix static issue in db8 :Testing Performed: Build Success Refer [WRO-2796] for test results :QA Notes: N/A :Issues Addressed: [WRO-2796] CCC: ose: db8=22 [WRO-2182] Coverity issues fix for Ose DB8 Change-Id: Id4a4441dc68690884c0c03e0e95410029c2407a9 --- meta-webos/recipes-webos/db8/db8.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/db8/db8.bb b/meta-webos/recipes-webos/db8/db8.bb index 43c6b564e..06ace3753 100644 --- a/meta-webos/recipes-webos/db8/db8.bb +++ b/meta-webos/recipes-webos/db8/db8.bb @@ -21,7 +21,7 @@ VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_stat} ${VIRTUAL-RUNTIME_bash}" RDEPENDS_${PN}-tests_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -WEBOS_VERSION = "3.2.0-21_cbfacb6919591304618706e7a5aeaf15a626a28e" +WEBOS_VERSION = "3.2.0-22_455918e4a71249781f88d75c2785abf6f5819133" PR = "r36" inherit webos_component From 2f73c0fbbb7b1821f0d7eec9be3288b6ed4ed73c Mon Sep 17 00:00:00 2001 From: Hyungchan Kim Date: Thu, 7 Apr 2022 16:06:47 +0900 Subject: [PATCH 0323/2022] qtbase=webos99 qtdeclarative=webos77 qtwayland=webos30 (rebase patches to v6.3.0) :Release Notes: Rebase patches to v6.3.0 Apply webOS patches with maxver instead of SRCREV :Detailed Notes: qtbase=webos99 Apply webOS patches with maxver instead of SRCREV qtdeclarative=webos77 Apply webOS patches with maxver instead of SRCREV qtwayland=webos30 Correct maxver for a patch :Testing Performed: See the CCC JIRA ticket. :QA Notes: N/A :Issues Addressed: Refer to the CCC JIRA ticket for related issues. [WRO-3132] CCC: Update meta-qt6 to v6.3.0 Change-Id: Ia85b943be1a0df86e9e5f8088d8db618227e992b --- meta-webos/recipes-qt/qt6/qtbase_git.bbappend | 7 +++---- meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend | 10 +++++----- meta-webos/recipes-qt/qt6/qtwayland_git.bbappend | 4 ++-- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend index 31764c802..dafc06f3b 100644 --- a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend @@ -2,7 +2,7 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos98" +EXTENDPRAUTO_append = "webos99" # Remove LGPL3-only files python do_patch_append() { @@ -80,8 +80,6 @@ PACKAGECONFIG_remove = "tests" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" -# Apply webOS specific patches to only SRCREV tested -WEBOS_PATCH_SRCREV = "eae95814a46386f8930eeae5486513a78a7a4ddc" PATCHTOOL = "git" # Upstream-Status: Backport @@ -91,8 +89,9 @@ SRC_URI_append = " \ " # Upstream-Status: Inappropriate +# NOTE: Increase maxver when upgrading Qt version SRC_URI_append = " \ - file://9901-Disable-Faux-bolding-in-Qts-FreeType-FontEngine.patch;rev=${WEBOS_PATCH_SRCREV} \ + file://9901-Disable-Faux-bolding-in-Qts-FreeType-FontEngine.patch;maxver=6.3.0 \ " # Flags needed for webOS diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend index fa4400ae0..9ac528ddb 100644 --- a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend @@ -2,12 +2,10 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos76" +EXTENDPRAUTO_append = "webos77" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" -# Apply webOS specific patches to only SRCREV tested -WEBOS_PATCH_SRCREV = "00c352c4d4b61f8c7a6243768bc5375c3dca3e76" PATCHTOOL = "git" # Upstream-Status: Backport @@ -16,13 +14,15 @@ SRC_URI_append = " \ " # Upstream-Status: Submitted +# NOTE: Increase maxver when upgrading Qt version SRC_URI_append = " \ - file://0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch;rev=${WEBOS_PATCH_SRCREV} \ + file://0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch;maxver=6.3.0 \ " # Upstream-Status: Inappropriate +# NOTE: Increase maxver when upgrading Qt version SRC_URI_append = " \ - file://0002-Revert-Don-t-hide-the-inputMethod-when-finishing-the.patch;rev=${WEBOS_PATCH_SRCREV} \ + file://0002-Revert-Don-t-hide-the-inputMethod-when-finishing-the.patch;maxver=6.3.0 \ " # Supplement tool for qmllint diff --git a/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend b/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend index a21d43660..7597b3f16 100644 --- a/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend @@ -2,7 +2,7 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos29" +EXTENDPRAUTO_append = "webos30" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" @@ -12,7 +12,7 @@ PATCHTOOL = "git" SRC_URI_append = " \ file://0001-Support-presentation-time-protocol.patch;maxver=6.2.* \ file://0002-Use-scope-resolution-operator-for-request.patch;maxver=6.2.* \ - file://0003-Fix-to-have-presentation-feedback-sequence-timely.patch;maxver=6.3.* \ + file://0003-Fix-to-have-presentation-feedback-sequence-timely.patch;maxver=6.3.1 \ " # More options for fine-tuned configuration From 1734f0df27f2642476210dfd7be4b61a143e45c6 Mon Sep 17 00:00:00 2001 From: "mark.yang" Date: Tue, 19 Apr 2022 14:20:19 +0900 Subject: [PATCH 0324/2022] ose: rpi-u-boot-scr=webosrpi4 :Release Notes: Ensure correct boot webOS OSE via NFS :Detailed Notes: :Testing Performed: Local test suite :QA Notes: N/A :Issues Addressed: [WRO-2937] Ensure correct boot webOS OSE via NFS Change-Id: Iddbafa7ab61e6ac15a7b8fe41b6b4db8374434e2 --- .../recipes-bsp/rpi-u-boot-scr/files/uEnv.sota.txt.in | 9 ++++----- .../recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bbappend | 2 +- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/meta-webos-raspberrypi/recipes-bsp/rpi-u-boot-scr/files/uEnv.sota.txt.in b/meta-webos-raspberrypi/recipes-bsp/rpi-u-boot-scr/files/uEnv.sota.txt.in index 7363cf219..e1bb165e6 100644 --- a/meta-webos-raspberrypi/recipes-bsp/rpi-u-boot-scr/files/uEnv.sota.txt.in +++ b/meta-webos-raspberrypi/recipes-bsp/rpi-u-boot-scr/files/uEnv.sota.txt.in @@ -6,22 +6,21 @@ bootcmd_rollbackenv=setenv kernel_image ${kernel_image2}; setenv bootargs ${boot ## Warn: If you want to use nfs, please comment out this block bootcmd_args_fdt=fdt addr ${fdt_addr} && fdt get value bootargs_fdt /chosen bootargs bootcmd_args=setenv bootargs "$bootargs $bootargs_fdt ostree_root=/dev/mmcblk0p2 root=/dev/ram0 rw rootwait rootdelay=2 ramdisk_size=8192 panic=1" +bootcmd_getroot=setexpr ostree_root gsub "^.*ostree=([^ ]*).*$" "\\\\1" "${bootargs}"; bootcmd_load=load mmc 0:2 $kernel_addr_r "/boot"$kernel_image; load mmc 0:2 $ramdisk_addr_r "/boot"$ramdisk_image bootcmd_run=@@KERNEL_BOOTCMD@@ ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr} # =========== END: rootfs as '/dev/mmblk0p2' ============= # # =========== BEGIN: rootfs via NFS ====================== # ## Warn: Fill in NFS Server IP at , rootfs path at in the bootargs -## In my case, NFS Server: 10.177.xxx.xx and It exports /nfs/client1 for rootfs, so that nfsroot=10.177.xxx.xx:/nfs/client1 +## In my case, NFS Server: 10.177.xxx.xx and It exports /srv/rootfs for rootfs, so that nfsroot=10.177.xxx.xx:/srv/rootfs ## You can get the rootfs for nfs from official build artifacts at fileserver as .tar.bz2 -#bootcmd_args_fdt=fdt addr ${fdt_addr} -#bootcmd_args=setenv bootargs "earlyprintk dwc_otg.lpm_enable=0 console=serial0,115200 console=tty1 root=/dev/nfs rootfstype=nfs nfsroot=:,v3,tcp ip=dhcp rootwait noinitrdit" +#bootcmd_args_fdt=fdt addr ${fdt_addr} && fdt get value bootargs_fdt /chosen bootargs +#bootcmd_args=setenv bootargs "$bootargs_fdt root=/dev/nfs nfsroot=10.177.227.41:/srv/rootfs,v3,tcp ip=dhcp rootwait noinitrdit" #bootcmd_load=load mmc 0:2 $kernel_addr_r "/boot"$kernel_image #bootcmd_run=booti ${kernel_addr_r} - ${fdt_addr} # =========== END: rootfs via NFS ======================== # -bootcmd_getroot=setexpr ostree_root gsub "^.*ostree=([^ ]*).*$" "\\\\1" "${bootargs}"; - bootcmd_create_envfile=if test ! -e mmc 0:1 uboot.env; then saveenv; fi; diff --git a/meta-webos-raspberrypi/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bbappend b/meta-webos-raspberrypi/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bbappend index 96d61c92f..e79b54b25 100644 --- a/meta-webos-raspberrypi/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bbappend +++ b/meta-webos-raspberrypi/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2019-2022 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosrpi3" +EXTENDPRAUTO_append = "webosrpi4" FILESEXTRAPATHS_prepend := "${THISDIR}/files:" From fbbd4f48ff74b007a97d8236908afa74607bfea5 Mon Sep 17 00:00:00 2001 From: Hyunjae Shin Date: Mon, 2 May 2022 10:38:36 +0900 Subject: [PATCH 0325/2022] webos.conf: Release webOS OSE v2.16.0 :Release Notes: Set software version as webOS OSE v2.16.0 :Detailed Notes: Set WEBOS_DISTRO_VERSION_MINOR to "16.0" :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: N/A Change-Id: I456fa7b006fd502e2cb08f468886b1fcf5e00f59 --- meta-webos/conf/distro/webos.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/conf/distro/webos.conf b/meta-webos/conf/distro/webos.conf index d3832e3fb..e4744c2f7 100644 --- a/meta-webos/conf/distro/webos.conf +++ b/meta-webos/conf/distro/webos.conf @@ -13,7 +13,7 @@ WEBOS_DISTRO_BUILD_CODENAME = "master" # g - github WEBOS_DISTRO_VERSION_MAJOR = "2" -WEBOS_DISTRO_VERSION_MINOR = "15.0" +WEBOS_DISTRO_VERSION_MINOR = "16.0" WEBOS_DISTRO_VERSION_TYPE = "g" DISTRO_VERSION = "${WEBOS_DISTRO_VERSION_MAJOR}.${WEBOS_DISTRO_VERSION_MINOR}.${WEBOS_DISTRO_VERSION_TYPE}" From e69bb3a45e01abf97099d0a4e1b72f4715f4d36c Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 22 Oct 2021 06:27:56 -0700 Subject: [PATCH 0326/2022] npm: use https:// for registry :Release Notes: :Detailed Notes: NOTE: webos_npm_env: set npm registry to http://registry.npmjs.org/ npm notice Beginning October 4, 2021, all connections to the npm registry - including for package installation - must use TLS 1.2 or higher. You are currently using plaintext http to connect. Please visit the GitHub blog for more information: https://github.blog/2021-08-23-npm-registry-deprecating-tls-1-0-tls-1-1/ :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-9458] NPM registry should be accessed over https now [WRN-9820] Create GPVB with Yocto 3.5 Kirkstone Change-Id: I55acd08ed1141195bed9e916ecd9e7eda42e05f9 --- meta-webos/classes/webos_npm_env.bbclass | 4 +- .../node-gyp/node-gyp-packages-native.inc | 106 +++++++++--------- 2 files changed, 55 insertions(+), 55 deletions(-) diff --git a/meta-webos/classes/webos_npm_env.bbclass b/meta-webos/classes/webos_npm_env.bbclass index 58eb29ea3..b09c6fa5d 100644 --- a/meta-webos/classes/webos_npm_env.bbclass +++ b/meta-webos/classes/webos_npm_env.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. # # webos_npm_env # @@ -23,7 +23,7 @@ def get_nodejs_arch(d): WEBOS_NPM_BIN ?= "${STAGING_BINDIR_NATIVE}/npm" WEBOS_NPM_CACHE_DIR ?= "${WORKDIR}/npm_cache" -WEBOS_NPM_REGISTRY ?= "http://registry.npmjs.org/" +WEBOS_NPM_REGISTRY ?= "https://registry.npmjs.org/" WEBOS_NPM_ARCH ?= "${@get_nodejs_arch(d)}" WEBOS_NPM_INSTALL_FLAGS ?= "--arch=${WEBOS_NPM_ARCH} --target_arch=${WEBOS_NPM_ARCH} --production --without-ssl --insecure --no-optional --verbose" diff --git a/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc b/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc index a331cb3b9..d572fdce4 100644 --- a/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc +++ b/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc @@ -1,60 +1,60 @@ -# Copyright (c) 2014-2017 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. INC_PR = "r2" SRC_URI +=" \ -http://registry.npmjs.org/fstream/-/fstream-0.1.25.tgz;name=fstream_0.1.25;unpack=yes;downloadfilename=fstream-0.1.25-tarball.tgz;subdir=${PN}/fstream_0.1.25 \ -http://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz;name=graceful-fs_2.0.3;unpack=yes;downloadfilename=graceful-fs-2.0.3-tarball.tgz;subdir=${PN}/graceful-fs_2.0.3 \ -http://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz;name=inherits_2.0.1;unpack=yes;downloadfilename=inherits-2.0.1-tarball.tgz;subdir=${PN}/inherits_2.0.1 \ -http://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz;name=mkdirp_0.3.5;unpack=yes;downloadfilename=mkdirp-0.3.5-tarball.tgz;subdir=${PN}/mkdirp_0.3.5 \ -http://registry.npmjs.org/glob/-/glob-3.2.9.tgz;name=glob_3.2.9;unpack=yes;downloadfilename=glob-3.2.9-tarball.tgz;subdir=${PN}/glob_3.2.9 \ -http://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz;name=graceful-fs_1.2.3;unpack=yes;downloadfilename=graceful-fs-1.2.3-tarball.tgz;subdir=${PN}/graceful-fs_1.2.3 \ -http://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz;name=minimatch_0.2.14;unpack=yes;downloadfilename=minimatch-0.2.14-tarball.tgz;subdir=${PN}/minimatch_0.2.14 \ -http://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz;name=lru-cache_2.5.0;unpack=yes;downloadfilename=lru-cache-2.5.0-tarball.tgz;subdir=${PN}/lru-cache_2.5.0 \ -http://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz;name=sigmund_1.0.0;unpack=yes;downloadfilename=sigmund-1.0.0-tarball.tgz;subdir=${PN}/sigmund_1.0.0 \ -http://registry.npmjs.org/mkdirp/-/mkdirp-0.4.0.tgz;name=mkdirp_0.4.0;unpack=yes;downloadfilename=mkdirp-0.4.0-tarball.tgz;subdir=${PN}/mkdirp_0.4.0 \ -http://registry.npmjs.org/nopt/-/nopt-2.2.1.tgz;name=nopt_2.2.1;unpack=yes;downloadfilename=nopt-2.2.1-tarball.tgz;subdir=${PN}/nopt_2.2.1 \ -http://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz;name=abbrev_1.0.5;unpack=yes;downloadfilename=abbrev-1.0.5-tarball.tgz;subdir=${PN}/abbrev_1.0.5 \ -http://registry.npmjs.org/npmlog/-/npmlog-0.0.6.tgz;name=npmlog_0.0.6;unpack=yes;downloadfilename=npmlog-0.0.6-tarball.tgz;subdir=${PN}/npmlog_0.0.6 \ -http://registry.npmjs.org/ansi/-/ansi-0.2.1.tgz;name=ansi_0.2.1;unpack=yes;downloadfilename=ansi-0.2.1-tarball.tgz;subdir=${PN}/ansi_0.2.1 \ -http://registry.npmjs.org/osenv/-/osenv-0.0.3.tgz;name=osenv_0.0.3;unpack=yes;downloadfilename=osenv-0.0.3-tarball.tgz;subdir=${PN}/osenv_0.0.3 \ -http://registry.npmjs.org/request/-/request-2.34.0.tgz;name=request_2.34.0;unpack=yes;downloadfilename=request-2.34.0-tarball.tgz;subdir=${PN}/request_2.34.0 \ -http://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz;name=aws-sign2_0.5.0;unpack=yes;downloadfilename=aws-sign2-0.5.0-tarball.tgz;subdir=${PN}/aws-sign2_0.5.0 \ -http://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz;name=forever-agent_0.5.2;unpack=yes;downloadfilename=forever-agent-0.5.2-tarball.tgz;subdir=${PN}/forever-agent_0.5.2 \ -http://registry.npmjs.org/form-data/-/form-data-0.1.2.tgz;name=form-data_0.1.2;unpack=yes;downloadfilename=form-data-0.1.2-tarball.tgz;subdir=${PN}/form-data_0.1.2 \ -http://registry.npmjs.org/async/-/async-0.2.10.tgz;name=async_0.2.10;unpack=yes;downloadfilename=async-0.2.10-tarball.tgz;subdir=${PN}/async_0.2.10 \ -http://registry.npmjs.org/combined-stream/-/combined-stream-0.0.4.tgz;name=combined-stream_0.0.4;unpack=yes;downloadfilename=combined-stream-0.0.4-tarball.tgz;subdir=${PN}/combined-stream_0.0.4 \ -http://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz;name=delayed-stream_0.0.5;unpack=yes;downloadfilename=delayed-stream-0.0.5-tarball.tgz;subdir=${PN}/delayed-stream_0.0.5 \ -http://registry.npmjs.org/hawk/-/hawk-1.0.0.tgz;name=hawk_1.0.0;unpack=yes;downloadfilename=hawk-1.0.0-tarball.tgz;subdir=${PN}/hawk_1.0.0 \ -http://registry.npmjs.org/boom/-/boom-0.4.2.tgz;name=boom_0.4.2;unpack=yes;downloadfilename=boom-0.4.2-tarball.tgz;subdir=${PN}/boom_0.4.2 \ -http://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz;name=cryptiles_0.2.2;unpack=yes;downloadfilename=cryptiles-0.2.2-tarball.tgz;subdir=${PN}/cryptiles_0.2.2 \ -http://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz;name=hoek_0.9.1;unpack=yes;downloadfilename=hoek-0.9.1-tarball.tgz;subdir=${PN}/hoek_0.9.1 \ -http://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz;name=sntp_0.2.4;unpack=yes;downloadfilename=sntp-0.2.4-tarball.tgz;subdir=${PN}/sntp_0.2.4 \ -http://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz;name=http-signature_0.10.0;unpack=yes;downloadfilename=http-signature-0.10.0-tarball.tgz;subdir=${PN}/http-signature_0.10.0 \ -http://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz;name=asn1_0.1.11;unpack=yes;downloadfilename=asn1-0.1.11-tarball.tgz;subdir=${PN}/asn1_0.1.11 \ -http://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz;name=assert-plus_0.1.2;unpack=yes;downloadfilename=assert-plus-0.1.2-tarball.tgz;subdir=${PN}/assert-plus_0.1.2 \ -http://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz;name=ctype_0.5.2;unpack=yes;downloadfilename=ctype-0.5.2-tarball.tgz;subdir=${PN}/ctype_0.5.2 \ -http://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz;name=json-stringify-safe_5.0.0;unpack=yes;downloadfilename=json-stringify-safe-5.0.0-tarball.tgz;subdir=${PN}/json-stringify-safe_5.0.0 \ -http://registry.npmjs.org/mime/-/mime-1.2.11.tgz;name=mime_1.2.11;unpack=yes;downloadfilename=mime-1.2.11-tarball.tgz;subdir=${PN}/mime_1.2.11 \ -http://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz;name=node-uuid_1.4.1;unpack=yes;downloadfilename=node-uuid-1.4.1-tarball.tgz;subdir=${PN}/node-uuid_1.4.1 \ -http://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz;name=oauth-sign_0.3.0;unpack=yes;downloadfilename=oauth-sign-0.3.0-tarball.tgz;subdir=${PN}/oauth-sign_0.3.0 \ -http://registry.npmjs.org/qs/-/qs-0.6.6.tgz;name=qs_0.6.6;unpack=yes;downloadfilename=qs-0.6.6-tarball.tgz;subdir=${PN}/qs_0.6.6 \ -http://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz;name=tough-cookie_0.12.1;unpack=yes;downloadfilename=tough-cookie-0.12.1-tarball.tgz;subdir=${PN}/tough-cookie_0.12.1 \ -http://registry.npmjs.org/punycode/-/punycode-1.2.4.tgz;name=punycode_1.2.4;unpack=yes;downloadfilename=punycode-1.2.4-tarball.tgz;subdir=${PN}/punycode_1.2.4 \ -http://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.3.0.tgz;name=tunnel-agent_0.3.0;unpack=yes;downloadfilename=tunnel-agent-0.3.0-tarball.tgz;subdir=${PN}/tunnel-agent_0.3.0 \ -http://registry.npmjs.org/rimraf/-/rimraf-2.2.6.tgz;name=rimraf_2.2.6;unpack=yes;downloadfilename=rimraf-2.2.6-tarball.tgz;subdir=${PN}/rimraf_2.2.6 \ -http://registry.npmjs.org/semver/-/semver-2.2.1.tgz;name=semver_2.2.1;unpack=yes;downloadfilename=semver-2.2.1-tarball.tgz;subdir=${PN}/semver_2.2.1 \ -http://registry.npmjs.org/tar/-/tar-0.1.19.tgz;name=tar_0.1.19;unpack=yes;downloadfilename=tar-0.1.19-tarball.tgz;subdir=${PN}/tar_0.1.19 \ -http://registry.npmjs.org/block-stream/-/block-stream-0.0.7.tgz;name=block-stream_0.0.7;unpack=yes;downloadfilename=block-stream-0.0.7-tarball.tgz;subdir=${PN}/block-stream_0.0.7 \ -http://registry.npmjs.org/which/-/which-1.0.5.tgz;name=which_1.0.5;unpack=yes;downloadfilename=which-1.0.5-tarball.tgz;subdir=${PN}/which_1.0.5 \ -http://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz;name=grunt_0.4.5;unpack=yes;downloadfilename=grunt-0.4.5-tarball.tgz;subdir=${PN}/grunt_0.4.5 \ -http://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.5.1.tgz;name=grunt-contrib-concat_0.5.1;unpack=yes;downloadfilename=grunt-contrib-concat-0.5.1-tarball.tgz;subdir=${PN}/grunt-contrib-concat_0.5.1 \ -http://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.10.0.tgz;name=grunt-contrib-jshint_0.10.0;unpack=yes;downloadfilename=grunt-contrib-jshint-0.10.0-tarball.tgz;subdir=${PN}/grunt-contrib-jshint_0.10.0 \ -http://registry.npmjs.org/grunt-contrib-nodeunit/-/grunt-contrib-nodeunit-0.4.1.tgz;name=grunt-contrib-nodeunit_0.4.1;unpack=yes;downloadfilename=grunt-contrib-nodeunit-0.4.1-tarball.tgz;subdir=${PN}/grunt-contrib-nodeunit_0.4.1 \ -http://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-0.7.0.tgz;name=grunt-contrib-qunit_0.7.0;unpack=yes;downloadfilename=grunt-contrib-qunit-0.7.0-tarball.tgz;subdir=${PN}/grunt-contrib-qunit_0.7.0 \ -http://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-0.5.0.tgz;name=grunt-contrib-uglify_0.5.0;unpack=yes;downloadfilename=grunt-contrib-uglify-0.5.0-tarball.tgz;subdir=${PN}/grunt-contrib-uglify_0.5.0 \ -http://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.6.1.tgz;name=grunt-contrib-watch_0.6.1;unpack=yes;downloadfilename=grunt-contrib-watch-0.6.1-tarball.tgz;subdir=${PN}/grunt-contrib-watch_0.6.1 \ -http://registry.npmjs.org/qunitjs/-/qunitjs-1.18.0.tgz;name=qunitjs_1.18.0;unpack=yes;downloadfilename=qunitjs-1.18.0-tarball.tgz;subdir=${PN}/qunitjs_1.18.0 \ +https://registry.npmjs.org/fstream/-/fstream-0.1.25.tgz;name=fstream_0.1.25;unpack=yes;downloadfilename=fstream-0.1.25-tarball.tgz;subdir=${PN}/fstream_0.1.25 \ +https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz;name=graceful-fs_2.0.3;unpack=yes;downloadfilename=graceful-fs-2.0.3-tarball.tgz;subdir=${PN}/graceful-fs_2.0.3 \ +https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz;name=inherits_2.0.1;unpack=yes;downloadfilename=inherits-2.0.1-tarball.tgz;subdir=${PN}/inherits_2.0.1 \ +https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz;name=mkdirp_0.3.5;unpack=yes;downloadfilename=mkdirp-0.3.5-tarball.tgz;subdir=${PN}/mkdirp_0.3.5 \ +https://registry.npmjs.org/glob/-/glob-3.2.9.tgz;name=glob_3.2.9;unpack=yes;downloadfilename=glob-3.2.9-tarball.tgz;subdir=${PN}/glob_3.2.9 \ +https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz;name=graceful-fs_1.2.3;unpack=yes;downloadfilename=graceful-fs-1.2.3-tarball.tgz;subdir=${PN}/graceful-fs_1.2.3 \ +https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz;name=minimatch_0.2.14;unpack=yes;downloadfilename=minimatch-0.2.14-tarball.tgz;subdir=${PN}/minimatch_0.2.14 \ +https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz;name=lru-cache_2.5.0;unpack=yes;downloadfilename=lru-cache-2.5.0-tarball.tgz;subdir=${PN}/lru-cache_2.5.0 \ +https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz;name=sigmund_1.0.0;unpack=yes;downloadfilename=sigmund-1.0.0-tarball.tgz;subdir=${PN}/sigmund_1.0.0 \ +https://registry.npmjs.org/mkdirp/-/mkdirp-0.4.0.tgz;name=mkdirp_0.4.0;unpack=yes;downloadfilename=mkdirp-0.4.0-tarball.tgz;subdir=${PN}/mkdirp_0.4.0 \ +https://registry.npmjs.org/nopt/-/nopt-2.2.1.tgz;name=nopt_2.2.1;unpack=yes;downloadfilename=nopt-2.2.1-tarball.tgz;subdir=${PN}/nopt_2.2.1 \ +https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz;name=abbrev_1.0.5;unpack=yes;downloadfilename=abbrev-1.0.5-tarball.tgz;subdir=${PN}/abbrev_1.0.5 \ +https://registry.npmjs.org/npmlog/-/npmlog-0.0.6.tgz;name=npmlog_0.0.6;unpack=yes;downloadfilename=npmlog-0.0.6-tarball.tgz;subdir=${PN}/npmlog_0.0.6 \ +https://registry.npmjs.org/ansi/-/ansi-0.2.1.tgz;name=ansi_0.2.1;unpack=yes;downloadfilename=ansi-0.2.1-tarball.tgz;subdir=${PN}/ansi_0.2.1 \ +https://registry.npmjs.org/osenv/-/osenv-0.0.3.tgz;name=osenv_0.0.3;unpack=yes;downloadfilename=osenv-0.0.3-tarball.tgz;subdir=${PN}/osenv_0.0.3 \ +https://registry.npmjs.org/request/-/request-2.34.0.tgz;name=request_2.34.0;unpack=yes;downloadfilename=request-2.34.0-tarball.tgz;subdir=${PN}/request_2.34.0 \ +https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz;name=aws-sign2_0.5.0;unpack=yes;downloadfilename=aws-sign2-0.5.0-tarball.tgz;subdir=${PN}/aws-sign2_0.5.0 \ +https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz;name=forever-agent_0.5.2;unpack=yes;downloadfilename=forever-agent-0.5.2-tarball.tgz;subdir=${PN}/forever-agent_0.5.2 \ +https://registry.npmjs.org/form-data/-/form-data-0.1.2.tgz;name=form-data_0.1.2;unpack=yes;downloadfilename=form-data-0.1.2-tarball.tgz;subdir=${PN}/form-data_0.1.2 \ +https://registry.npmjs.org/async/-/async-0.2.10.tgz;name=async_0.2.10;unpack=yes;downloadfilename=async-0.2.10-tarball.tgz;subdir=${PN}/async_0.2.10 \ +https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.4.tgz;name=combined-stream_0.0.4;unpack=yes;downloadfilename=combined-stream-0.0.4-tarball.tgz;subdir=${PN}/combined-stream_0.0.4 \ +https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz;name=delayed-stream_0.0.5;unpack=yes;downloadfilename=delayed-stream-0.0.5-tarball.tgz;subdir=${PN}/delayed-stream_0.0.5 \ +https://registry.npmjs.org/hawk/-/hawk-1.0.0.tgz;name=hawk_1.0.0;unpack=yes;downloadfilename=hawk-1.0.0-tarball.tgz;subdir=${PN}/hawk_1.0.0 \ +https://registry.npmjs.org/boom/-/boom-0.4.2.tgz;name=boom_0.4.2;unpack=yes;downloadfilename=boom-0.4.2-tarball.tgz;subdir=${PN}/boom_0.4.2 \ +https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz;name=cryptiles_0.2.2;unpack=yes;downloadfilename=cryptiles-0.2.2-tarball.tgz;subdir=${PN}/cryptiles_0.2.2 \ +https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz;name=hoek_0.9.1;unpack=yes;downloadfilename=hoek-0.9.1-tarball.tgz;subdir=${PN}/hoek_0.9.1 \ +https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz;name=sntp_0.2.4;unpack=yes;downloadfilename=sntp-0.2.4-tarball.tgz;subdir=${PN}/sntp_0.2.4 \ +https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz;name=http-signature_0.10.0;unpack=yes;downloadfilename=http-signature-0.10.0-tarball.tgz;subdir=${PN}/http-signature_0.10.0 \ +https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz;name=asn1_0.1.11;unpack=yes;downloadfilename=asn1-0.1.11-tarball.tgz;subdir=${PN}/asn1_0.1.11 \ +https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz;name=assert-plus_0.1.2;unpack=yes;downloadfilename=assert-plus-0.1.2-tarball.tgz;subdir=${PN}/assert-plus_0.1.2 \ +https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz;name=ctype_0.5.2;unpack=yes;downloadfilename=ctype-0.5.2-tarball.tgz;subdir=${PN}/ctype_0.5.2 \ +https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz;name=json-stringify-safe_5.0.0;unpack=yes;downloadfilename=json-stringify-safe-5.0.0-tarball.tgz;subdir=${PN}/json-stringify-safe_5.0.0 \ +https://registry.npmjs.org/mime/-/mime-1.2.11.tgz;name=mime_1.2.11;unpack=yes;downloadfilename=mime-1.2.11-tarball.tgz;subdir=${PN}/mime_1.2.11 \ +https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz;name=node-uuid_1.4.1;unpack=yes;downloadfilename=node-uuid-1.4.1-tarball.tgz;subdir=${PN}/node-uuid_1.4.1 \ +https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz;name=oauth-sign_0.3.0;unpack=yes;downloadfilename=oauth-sign-0.3.0-tarball.tgz;subdir=${PN}/oauth-sign_0.3.0 \ +https://registry.npmjs.org/qs/-/qs-0.6.6.tgz;name=qs_0.6.6;unpack=yes;downloadfilename=qs-0.6.6-tarball.tgz;subdir=${PN}/qs_0.6.6 \ +https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz;name=tough-cookie_0.12.1;unpack=yes;downloadfilename=tough-cookie-0.12.1-tarball.tgz;subdir=${PN}/tough-cookie_0.12.1 \ +https://registry.npmjs.org/punycode/-/punycode-1.2.4.tgz;name=punycode_1.2.4;unpack=yes;downloadfilename=punycode-1.2.4-tarball.tgz;subdir=${PN}/punycode_1.2.4 \ +https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.3.0.tgz;name=tunnel-agent_0.3.0;unpack=yes;downloadfilename=tunnel-agent-0.3.0-tarball.tgz;subdir=${PN}/tunnel-agent_0.3.0 \ +https://registry.npmjs.org/rimraf/-/rimraf-2.2.6.tgz;name=rimraf_2.2.6;unpack=yes;downloadfilename=rimraf-2.2.6-tarball.tgz;subdir=${PN}/rimraf_2.2.6 \ +https://registry.npmjs.org/semver/-/semver-2.2.1.tgz;name=semver_2.2.1;unpack=yes;downloadfilename=semver-2.2.1-tarball.tgz;subdir=${PN}/semver_2.2.1 \ +https://registry.npmjs.org/tar/-/tar-0.1.19.tgz;name=tar_0.1.19;unpack=yes;downloadfilename=tar-0.1.19-tarball.tgz;subdir=${PN}/tar_0.1.19 \ +https://registry.npmjs.org/block-stream/-/block-stream-0.0.7.tgz;name=block-stream_0.0.7;unpack=yes;downloadfilename=block-stream-0.0.7-tarball.tgz;subdir=${PN}/block-stream_0.0.7 \ +https://registry.npmjs.org/which/-/which-1.0.5.tgz;name=which_1.0.5;unpack=yes;downloadfilename=which-1.0.5-tarball.tgz;subdir=${PN}/which_1.0.5 \ +https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz;name=grunt_0.4.5;unpack=yes;downloadfilename=grunt-0.4.5-tarball.tgz;subdir=${PN}/grunt_0.4.5 \ +https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.5.1.tgz;name=grunt-contrib-concat_0.5.1;unpack=yes;downloadfilename=grunt-contrib-concat-0.5.1-tarball.tgz;subdir=${PN}/grunt-contrib-concat_0.5.1 \ +https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.10.0.tgz;name=grunt-contrib-jshint_0.10.0;unpack=yes;downloadfilename=grunt-contrib-jshint-0.10.0-tarball.tgz;subdir=${PN}/grunt-contrib-jshint_0.10.0 \ +https://registry.npmjs.org/grunt-contrib-nodeunit/-/grunt-contrib-nodeunit-0.4.1.tgz;name=grunt-contrib-nodeunit_0.4.1;unpack=yes;downloadfilename=grunt-contrib-nodeunit-0.4.1-tarball.tgz;subdir=${PN}/grunt-contrib-nodeunit_0.4.1 \ +https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-0.7.0.tgz;name=grunt-contrib-qunit_0.7.0;unpack=yes;downloadfilename=grunt-contrib-qunit-0.7.0-tarball.tgz;subdir=${PN}/grunt-contrib-qunit_0.7.0 \ +https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-0.5.0.tgz;name=grunt-contrib-uglify_0.5.0;unpack=yes;downloadfilename=grunt-contrib-uglify-0.5.0-tarball.tgz;subdir=${PN}/grunt-contrib-uglify_0.5.0 \ +https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.6.1.tgz;name=grunt-contrib-watch_0.6.1;unpack=yes;downloadfilename=grunt-contrib-watch-0.6.1-tarball.tgz;subdir=${PN}/grunt-contrib-watch_0.6.1 \ +https://registry.npmjs.org/qunitjs/-/qunitjs-1.18.0.tgz;name=qunitjs_1.18.0;unpack=yes;downloadfilename=qunitjs-1.18.0-tarball.tgz;subdir=${PN}/qunitjs_1.18.0 \ " SRC_URI[fstream_0.1.25.md5sum]="81805600ac27ed20bbe21e2645021476" From ba27fda972464965a272322b6a97218b04f1520b Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 21 Dec 2021 13:11:33 +0100 Subject: [PATCH 0327/2022] node-gyp-packages-native: use BPN instead of PN in SRC_URI :Release Notes: Fixes: ERROR: node-gyp-packages-native-0.12.2-r0 do_unpack: QA Issue: node-gyp-packages-native: SRC_URI uses PN not BPN [src-uri-bad] :Detailed Notes: For other node-gyp-native fixes see: https://github.com/webOS-ports/meta-webos-ports/commit/812672d4e513eccf0650a2f45a081e742e5e3e38 https://github.com/webOS-ports/meta-webos-ports/commit/29f569b41355ab533a97c27474f7a47037ca0249 https://github.com/webOS-ports/meta-webos-ports/commit/1c72a66d1b87007ba5b188b5ecdb27545d3af2ac https://github.com/webOS-ports/meta-webos-ports/commit/7a2120372bdaaba14b3f1fc37101bddb92072b2e https://github.com/webOS-ports/meta-webos-ports/commit/3af337e20a9ee5e53b645d22bbe98048798888cf https://github.com/webOS-ports/meta-webos-ports/commit/094121841eb79612e2a7b793eb63acfc978fdbef and https://github.com/webOS-ports/meta-webos-ports/pull/465 :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-9458] NPM registry should be accessed over https now [WRN-9820] Create GPVB with Yocto 3.5 Kirkstone Change-Id: If4c819d628fa9cb382ce682f160c1820508384d5 --- .../node-gyp/node-gyp-packages-native.inc | 206 +++++++++--------- 1 file changed, 103 insertions(+), 103 deletions(-) diff --git a/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc b/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc index d572fdce4..910312698 100644 --- a/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc +++ b/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc @@ -3,58 +3,58 @@ INC_PR = "r2" SRC_URI +=" \ -https://registry.npmjs.org/fstream/-/fstream-0.1.25.tgz;name=fstream_0.1.25;unpack=yes;downloadfilename=fstream-0.1.25-tarball.tgz;subdir=${PN}/fstream_0.1.25 \ -https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz;name=graceful-fs_2.0.3;unpack=yes;downloadfilename=graceful-fs-2.0.3-tarball.tgz;subdir=${PN}/graceful-fs_2.0.3 \ -https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz;name=inherits_2.0.1;unpack=yes;downloadfilename=inherits-2.0.1-tarball.tgz;subdir=${PN}/inherits_2.0.1 \ -https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz;name=mkdirp_0.3.5;unpack=yes;downloadfilename=mkdirp-0.3.5-tarball.tgz;subdir=${PN}/mkdirp_0.3.5 \ -https://registry.npmjs.org/glob/-/glob-3.2.9.tgz;name=glob_3.2.9;unpack=yes;downloadfilename=glob-3.2.9-tarball.tgz;subdir=${PN}/glob_3.2.9 \ -https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz;name=graceful-fs_1.2.3;unpack=yes;downloadfilename=graceful-fs-1.2.3-tarball.tgz;subdir=${PN}/graceful-fs_1.2.3 \ -https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz;name=minimatch_0.2.14;unpack=yes;downloadfilename=minimatch-0.2.14-tarball.tgz;subdir=${PN}/minimatch_0.2.14 \ -https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz;name=lru-cache_2.5.0;unpack=yes;downloadfilename=lru-cache-2.5.0-tarball.tgz;subdir=${PN}/lru-cache_2.5.0 \ -https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz;name=sigmund_1.0.0;unpack=yes;downloadfilename=sigmund-1.0.0-tarball.tgz;subdir=${PN}/sigmund_1.0.0 \ -https://registry.npmjs.org/mkdirp/-/mkdirp-0.4.0.tgz;name=mkdirp_0.4.0;unpack=yes;downloadfilename=mkdirp-0.4.0-tarball.tgz;subdir=${PN}/mkdirp_0.4.0 \ -https://registry.npmjs.org/nopt/-/nopt-2.2.1.tgz;name=nopt_2.2.1;unpack=yes;downloadfilename=nopt-2.2.1-tarball.tgz;subdir=${PN}/nopt_2.2.1 \ -https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz;name=abbrev_1.0.5;unpack=yes;downloadfilename=abbrev-1.0.5-tarball.tgz;subdir=${PN}/abbrev_1.0.5 \ -https://registry.npmjs.org/npmlog/-/npmlog-0.0.6.tgz;name=npmlog_0.0.6;unpack=yes;downloadfilename=npmlog-0.0.6-tarball.tgz;subdir=${PN}/npmlog_0.0.6 \ -https://registry.npmjs.org/ansi/-/ansi-0.2.1.tgz;name=ansi_0.2.1;unpack=yes;downloadfilename=ansi-0.2.1-tarball.tgz;subdir=${PN}/ansi_0.2.1 \ -https://registry.npmjs.org/osenv/-/osenv-0.0.3.tgz;name=osenv_0.0.3;unpack=yes;downloadfilename=osenv-0.0.3-tarball.tgz;subdir=${PN}/osenv_0.0.3 \ -https://registry.npmjs.org/request/-/request-2.34.0.tgz;name=request_2.34.0;unpack=yes;downloadfilename=request-2.34.0-tarball.tgz;subdir=${PN}/request_2.34.0 \ -https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz;name=aws-sign2_0.5.0;unpack=yes;downloadfilename=aws-sign2-0.5.0-tarball.tgz;subdir=${PN}/aws-sign2_0.5.0 \ -https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz;name=forever-agent_0.5.2;unpack=yes;downloadfilename=forever-agent-0.5.2-tarball.tgz;subdir=${PN}/forever-agent_0.5.2 \ -https://registry.npmjs.org/form-data/-/form-data-0.1.2.tgz;name=form-data_0.1.2;unpack=yes;downloadfilename=form-data-0.1.2-tarball.tgz;subdir=${PN}/form-data_0.1.2 \ -https://registry.npmjs.org/async/-/async-0.2.10.tgz;name=async_0.2.10;unpack=yes;downloadfilename=async-0.2.10-tarball.tgz;subdir=${PN}/async_0.2.10 \ -https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.4.tgz;name=combined-stream_0.0.4;unpack=yes;downloadfilename=combined-stream-0.0.4-tarball.tgz;subdir=${PN}/combined-stream_0.0.4 \ -https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz;name=delayed-stream_0.0.5;unpack=yes;downloadfilename=delayed-stream-0.0.5-tarball.tgz;subdir=${PN}/delayed-stream_0.0.5 \ -https://registry.npmjs.org/hawk/-/hawk-1.0.0.tgz;name=hawk_1.0.0;unpack=yes;downloadfilename=hawk-1.0.0-tarball.tgz;subdir=${PN}/hawk_1.0.0 \ -https://registry.npmjs.org/boom/-/boom-0.4.2.tgz;name=boom_0.4.2;unpack=yes;downloadfilename=boom-0.4.2-tarball.tgz;subdir=${PN}/boom_0.4.2 \ -https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz;name=cryptiles_0.2.2;unpack=yes;downloadfilename=cryptiles-0.2.2-tarball.tgz;subdir=${PN}/cryptiles_0.2.2 \ -https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz;name=hoek_0.9.1;unpack=yes;downloadfilename=hoek-0.9.1-tarball.tgz;subdir=${PN}/hoek_0.9.1 \ -https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz;name=sntp_0.2.4;unpack=yes;downloadfilename=sntp-0.2.4-tarball.tgz;subdir=${PN}/sntp_0.2.4 \ -https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz;name=http-signature_0.10.0;unpack=yes;downloadfilename=http-signature-0.10.0-tarball.tgz;subdir=${PN}/http-signature_0.10.0 \ -https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz;name=asn1_0.1.11;unpack=yes;downloadfilename=asn1-0.1.11-tarball.tgz;subdir=${PN}/asn1_0.1.11 \ -https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz;name=assert-plus_0.1.2;unpack=yes;downloadfilename=assert-plus-0.1.2-tarball.tgz;subdir=${PN}/assert-plus_0.1.2 \ -https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz;name=ctype_0.5.2;unpack=yes;downloadfilename=ctype-0.5.2-tarball.tgz;subdir=${PN}/ctype_0.5.2 \ -https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz;name=json-stringify-safe_5.0.0;unpack=yes;downloadfilename=json-stringify-safe-5.0.0-tarball.tgz;subdir=${PN}/json-stringify-safe_5.0.0 \ -https://registry.npmjs.org/mime/-/mime-1.2.11.tgz;name=mime_1.2.11;unpack=yes;downloadfilename=mime-1.2.11-tarball.tgz;subdir=${PN}/mime_1.2.11 \ -https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz;name=node-uuid_1.4.1;unpack=yes;downloadfilename=node-uuid-1.4.1-tarball.tgz;subdir=${PN}/node-uuid_1.4.1 \ -https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz;name=oauth-sign_0.3.0;unpack=yes;downloadfilename=oauth-sign-0.3.0-tarball.tgz;subdir=${PN}/oauth-sign_0.3.0 \ -https://registry.npmjs.org/qs/-/qs-0.6.6.tgz;name=qs_0.6.6;unpack=yes;downloadfilename=qs-0.6.6-tarball.tgz;subdir=${PN}/qs_0.6.6 \ -https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz;name=tough-cookie_0.12.1;unpack=yes;downloadfilename=tough-cookie-0.12.1-tarball.tgz;subdir=${PN}/tough-cookie_0.12.1 \ -https://registry.npmjs.org/punycode/-/punycode-1.2.4.tgz;name=punycode_1.2.4;unpack=yes;downloadfilename=punycode-1.2.4-tarball.tgz;subdir=${PN}/punycode_1.2.4 \ -https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.3.0.tgz;name=tunnel-agent_0.3.0;unpack=yes;downloadfilename=tunnel-agent-0.3.0-tarball.tgz;subdir=${PN}/tunnel-agent_0.3.0 \ -https://registry.npmjs.org/rimraf/-/rimraf-2.2.6.tgz;name=rimraf_2.2.6;unpack=yes;downloadfilename=rimraf-2.2.6-tarball.tgz;subdir=${PN}/rimraf_2.2.6 \ -https://registry.npmjs.org/semver/-/semver-2.2.1.tgz;name=semver_2.2.1;unpack=yes;downloadfilename=semver-2.2.1-tarball.tgz;subdir=${PN}/semver_2.2.1 \ -https://registry.npmjs.org/tar/-/tar-0.1.19.tgz;name=tar_0.1.19;unpack=yes;downloadfilename=tar-0.1.19-tarball.tgz;subdir=${PN}/tar_0.1.19 \ -https://registry.npmjs.org/block-stream/-/block-stream-0.0.7.tgz;name=block-stream_0.0.7;unpack=yes;downloadfilename=block-stream-0.0.7-tarball.tgz;subdir=${PN}/block-stream_0.0.7 \ -https://registry.npmjs.org/which/-/which-1.0.5.tgz;name=which_1.0.5;unpack=yes;downloadfilename=which-1.0.5-tarball.tgz;subdir=${PN}/which_1.0.5 \ -https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz;name=grunt_0.4.5;unpack=yes;downloadfilename=grunt-0.4.5-tarball.tgz;subdir=${PN}/grunt_0.4.5 \ -https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.5.1.tgz;name=grunt-contrib-concat_0.5.1;unpack=yes;downloadfilename=grunt-contrib-concat-0.5.1-tarball.tgz;subdir=${PN}/grunt-contrib-concat_0.5.1 \ -https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.10.0.tgz;name=grunt-contrib-jshint_0.10.0;unpack=yes;downloadfilename=grunt-contrib-jshint-0.10.0-tarball.tgz;subdir=${PN}/grunt-contrib-jshint_0.10.0 \ -https://registry.npmjs.org/grunt-contrib-nodeunit/-/grunt-contrib-nodeunit-0.4.1.tgz;name=grunt-contrib-nodeunit_0.4.1;unpack=yes;downloadfilename=grunt-contrib-nodeunit-0.4.1-tarball.tgz;subdir=${PN}/grunt-contrib-nodeunit_0.4.1 \ -https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-0.7.0.tgz;name=grunt-contrib-qunit_0.7.0;unpack=yes;downloadfilename=grunt-contrib-qunit-0.7.0-tarball.tgz;subdir=${PN}/grunt-contrib-qunit_0.7.0 \ -https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-0.5.0.tgz;name=grunt-contrib-uglify_0.5.0;unpack=yes;downloadfilename=grunt-contrib-uglify-0.5.0-tarball.tgz;subdir=${PN}/grunt-contrib-uglify_0.5.0 \ -https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.6.1.tgz;name=grunt-contrib-watch_0.6.1;unpack=yes;downloadfilename=grunt-contrib-watch-0.6.1-tarball.tgz;subdir=${PN}/grunt-contrib-watch_0.6.1 \ -https://registry.npmjs.org/qunitjs/-/qunitjs-1.18.0.tgz;name=qunitjs_1.18.0;unpack=yes;downloadfilename=qunitjs-1.18.0-tarball.tgz;subdir=${PN}/qunitjs_1.18.0 \ +https://registry.npmjs.org/fstream/-/fstream-0.1.25.tgz;name=fstream_0.1.25;unpack=yes;downloadfilename=fstream-0.1.25-tarball.tgz;subdir=${BPN}/fstream_0.1.25 \ +https://registry.npmjs.org/graceful-fs/-/graceful-fs-2.0.3.tgz;name=graceful-fs_2.0.3;unpack=yes;downloadfilename=graceful-fs-2.0.3-tarball.tgz;subdir=${BPN}/graceful-fs_2.0.3 \ +https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz;name=inherits_2.0.1;unpack=yes;downloadfilename=inherits-2.0.1-tarball.tgz;subdir=${BPN}/inherits_2.0.1 \ +https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz;name=mkdirp_0.3.5;unpack=yes;downloadfilename=mkdirp-0.3.5-tarball.tgz;subdir=${BPN}/mkdirp_0.3.5 \ +https://registry.npmjs.org/glob/-/glob-3.2.9.tgz;name=glob_3.2.9;unpack=yes;downloadfilename=glob-3.2.9-tarball.tgz;subdir=${BPN}/glob_3.2.9 \ +https://registry.npmjs.org/graceful-fs/-/graceful-fs-1.2.3.tgz;name=graceful-fs_1.2.3;unpack=yes;downloadfilename=graceful-fs-1.2.3-tarball.tgz;subdir=${BPN}/graceful-fs_1.2.3 \ +https://registry.npmjs.org/minimatch/-/minimatch-0.2.14.tgz;name=minimatch_0.2.14;unpack=yes;downloadfilename=minimatch-0.2.14-tarball.tgz;subdir=${BPN}/minimatch_0.2.14 \ +https://registry.npmjs.org/lru-cache/-/lru-cache-2.5.0.tgz;name=lru-cache_2.5.0;unpack=yes;downloadfilename=lru-cache-2.5.0-tarball.tgz;subdir=${BPN}/lru-cache_2.5.0 \ +https://registry.npmjs.org/sigmund/-/sigmund-1.0.0.tgz;name=sigmund_1.0.0;unpack=yes;downloadfilename=sigmund-1.0.0-tarball.tgz;subdir=${BPN}/sigmund_1.0.0 \ +https://registry.npmjs.org/mkdirp/-/mkdirp-0.4.0.tgz;name=mkdirp_0.4.0;unpack=yes;downloadfilename=mkdirp-0.4.0-tarball.tgz;subdir=${BPN}/mkdirp_0.4.0 \ +https://registry.npmjs.org/nopt/-/nopt-2.2.1.tgz;name=nopt_2.2.1;unpack=yes;downloadfilename=nopt-2.2.1-tarball.tgz;subdir=${BPN}/nopt_2.2.1 \ +https://registry.npmjs.org/abbrev/-/abbrev-1.0.5.tgz;name=abbrev_1.0.5;unpack=yes;downloadfilename=abbrev-1.0.5-tarball.tgz;subdir=${BPN}/abbrev_1.0.5 \ +https://registry.npmjs.org/npmlog/-/npmlog-0.0.6.tgz;name=npmlog_0.0.6;unpack=yes;downloadfilename=npmlog-0.0.6-tarball.tgz;subdir=${BPN}/npmlog_0.0.6 \ +https://registry.npmjs.org/ansi/-/ansi-0.2.1.tgz;name=ansi_0.2.1;unpack=yes;downloadfilename=ansi-0.2.1-tarball.tgz;subdir=${BPN}/ansi_0.2.1 \ +https://registry.npmjs.org/osenv/-/osenv-0.0.3.tgz;name=osenv_0.0.3;unpack=yes;downloadfilename=osenv-0.0.3-tarball.tgz;subdir=${BPN}/osenv_0.0.3 \ +https://registry.npmjs.org/request/-/request-2.34.0.tgz;name=request_2.34.0;unpack=yes;downloadfilename=request-2.34.0-tarball.tgz;subdir=${BPN}/request_2.34.0 \ +https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.5.0.tgz;name=aws-sign2_0.5.0;unpack=yes;downloadfilename=aws-sign2-0.5.0-tarball.tgz;subdir=${BPN}/aws-sign2_0.5.0 \ +https://registry.npmjs.org/forever-agent/-/forever-agent-0.5.2.tgz;name=forever-agent_0.5.2;unpack=yes;downloadfilename=forever-agent-0.5.2-tarball.tgz;subdir=${BPN}/forever-agent_0.5.2 \ +https://registry.npmjs.org/form-data/-/form-data-0.1.2.tgz;name=form-data_0.1.2;unpack=yes;downloadfilename=form-data-0.1.2-tarball.tgz;subdir=${BPN}/form-data_0.1.2 \ +https://registry.npmjs.org/async/-/async-0.2.10.tgz;name=async_0.2.10;unpack=yes;downloadfilename=async-0.2.10-tarball.tgz;subdir=${BPN}/async_0.2.10 \ +https://registry.npmjs.org/combined-stream/-/combined-stream-0.0.4.tgz;name=combined-stream_0.0.4;unpack=yes;downloadfilename=combined-stream-0.0.4-tarball.tgz;subdir=${BPN}/combined-stream_0.0.4 \ +https://registry.npmjs.org/delayed-stream/-/delayed-stream-0.0.5.tgz;name=delayed-stream_0.0.5;unpack=yes;downloadfilename=delayed-stream-0.0.5-tarball.tgz;subdir=${BPN}/delayed-stream_0.0.5 \ +https://registry.npmjs.org/hawk/-/hawk-1.0.0.tgz;name=hawk_1.0.0;unpack=yes;downloadfilename=hawk-1.0.0-tarball.tgz;subdir=${BPN}/hawk_1.0.0 \ +https://registry.npmjs.org/boom/-/boom-0.4.2.tgz;name=boom_0.4.2;unpack=yes;downloadfilename=boom-0.4.2-tarball.tgz;subdir=${BPN}/boom_0.4.2 \ +https://registry.npmjs.org/cryptiles/-/cryptiles-0.2.2.tgz;name=cryptiles_0.2.2;unpack=yes;downloadfilename=cryptiles-0.2.2-tarball.tgz;subdir=${BPN}/cryptiles_0.2.2 \ +https://registry.npmjs.org/hoek/-/hoek-0.9.1.tgz;name=hoek_0.9.1;unpack=yes;downloadfilename=hoek-0.9.1-tarball.tgz;subdir=${BPN}/hoek_0.9.1 \ +https://registry.npmjs.org/sntp/-/sntp-0.2.4.tgz;name=sntp_0.2.4;unpack=yes;downloadfilename=sntp-0.2.4-tarball.tgz;subdir=${BPN}/sntp_0.2.4 \ +https://registry.npmjs.org/http-signature/-/http-signature-0.10.0.tgz;name=http-signature_0.10.0;unpack=yes;downloadfilename=http-signature-0.10.0-tarball.tgz;subdir=${BPN}/http-signature_0.10.0 \ +https://registry.npmjs.org/asn1/-/asn1-0.1.11.tgz;name=asn1_0.1.11;unpack=yes;downloadfilename=asn1-0.1.11-tarball.tgz;subdir=${BPN}/asn1_0.1.11 \ +https://registry.npmjs.org/assert-plus/-/assert-plus-0.1.2.tgz;name=assert-plus_0.1.2;unpack=yes;downloadfilename=assert-plus-0.1.2-tarball.tgz;subdir=${BPN}/assert-plus_0.1.2 \ +https://registry.npmjs.org/ctype/-/ctype-0.5.2.tgz;name=ctype_0.5.2;unpack=yes;downloadfilename=ctype-0.5.2-tarball.tgz;subdir=${BPN}/ctype_0.5.2 \ +https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.0.tgz;name=json-stringify-safe_5.0.0;unpack=yes;downloadfilename=json-stringify-safe-5.0.0-tarball.tgz;subdir=${BPN}/json-stringify-safe_5.0.0 \ +https://registry.npmjs.org/mime/-/mime-1.2.11.tgz;name=mime_1.2.11;unpack=yes;downloadfilename=mime-1.2.11-tarball.tgz;subdir=${BPN}/mime_1.2.11 \ +https://registry.npmjs.org/node-uuid/-/node-uuid-1.4.1.tgz;name=node-uuid_1.4.1;unpack=yes;downloadfilename=node-uuid-1.4.1-tarball.tgz;subdir=${BPN}/node-uuid_1.4.1 \ +https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.3.0.tgz;name=oauth-sign_0.3.0;unpack=yes;downloadfilename=oauth-sign-0.3.0-tarball.tgz;subdir=${BPN}/oauth-sign_0.3.0 \ +https://registry.npmjs.org/qs/-/qs-0.6.6.tgz;name=qs_0.6.6;unpack=yes;downloadfilename=qs-0.6.6-tarball.tgz;subdir=${BPN}/qs_0.6.6 \ +https://registry.npmjs.org/tough-cookie/-/tough-cookie-0.12.1.tgz;name=tough-cookie_0.12.1;unpack=yes;downloadfilename=tough-cookie-0.12.1-tarball.tgz;subdir=${BPN}/tough-cookie_0.12.1 \ +https://registry.npmjs.org/punycode/-/punycode-1.2.4.tgz;name=punycode_1.2.4;unpack=yes;downloadfilename=punycode-1.2.4-tarball.tgz;subdir=${BPN}/punycode_1.2.4 \ +https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.3.0.tgz;name=tunnel-agent_0.3.0;unpack=yes;downloadfilename=tunnel-agent-0.3.0-tarball.tgz;subdir=${BPN}/tunnel-agent_0.3.0 \ +https://registry.npmjs.org/rimraf/-/rimraf-2.2.6.tgz;name=rimraf_2.2.6;unpack=yes;downloadfilename=rimraf-2.2.6-tarball.tgz;subdir=${BPN}/rimraf_2.2.6 \ +https://registry.npmjs.org/semver/-/semver-2.2.1.tgz;name=semver_2.2.1;unpack=yes;downloadfilename=semver-2.2.1-tarball.tgz;subdir=${BPN}/semver_2.2.1 \ +https://registry.npmjs.org/tar/-/tar-0.1.19.tgz;name=tar_0.1.19;unpack=yes;downloadfilename=tar-0.1.19-tarball.tgz;subdir=${BPN}/tar_0.1.19 \ +https://registry.npmjs.org/block-stream/-/block-stream-0.0.7.tgz;name=block-stream_0.0.7;unpack=yes;downloadfilename=block-stream-0.0.7-tarball.tgz;subdir=${BPN}/block-stream_0.0.7 \ +https://registry.npmjs.org/which/-/which-1.0.5.tgz;name=which_1.0.5;unpack=yes;downloadfilename=which-1.0.5-tarball.tgz;subdir=${BPN}/which_1.0.5 \ +https://registry.npmjs.org/grunt/-/grunt-0.4.5.tgz;name=grunt_0.4.5;unpack=yes;downloadfilename=grunt-0.4.5-tarball.tgz;subdir=${BPN}/grunt_0.4.5 \ +https://registry.npmjs.org/grunt-contrib-concat/-/grunt-contrib-concat-0.5.1.tgz;name=grunt-contrib-concat_0.5.1;unpack=yes;downloadfilename=grunt-contrib-concat-0.5.1-tarball.tgz;subdir=${BPN}/grunt-contrib-concat_0.5.1 \ +https://registry.npmjs.org/grunt-contrib-jshint/-/grunt-contrib-jshint-0.10.0.tgz;name=grunt-contrib-jshint_0.10.0;unpack=yes;downloadfilename=grunt-contrib-jshint-0.10.0-tarball.tgz;subdir=${BPN}/grunt-contrib-jshint_0.10.0 \ +https://registry.npmjs.org/grunt-contrib-nodeunit/-/grunt-contrib-nodeunit-0.4.1.tgz;name=grunt-contrib-nodeunit_0.4.1;unpack=yes;downloadfilename=grunt-contrib-nodeunit-0.4.1-tarball.tgz;subdir=${BPN}/grunt-contrib-nodeunit_0.4.1 \ +https://registry.npmjs.org/grunt-contrib-qunit/-/grunt-contrib-qunit-0.7.0.tgz;name=grunt-contrib-qunit_0.7.0;unpack=yes;downloadfilename=grunt-contrib-qunit-0.7.0-tarball.tgz;subdir=${BPN}/grunt-contrib-qunit_0.7.0 \ +https://registry.npmjs.org/grunt-contrib-uglify/-/grunt-contrib-uglify-0.5.0.tgz;name=grunt-contrib-uglify_0.5.0;unpack=yes;downloadfilename=grunt-contrib-uglify-0.5.0-tarball.tgz;subdir=${BPN}/grunt-contrib-uglify_0.5.0 \ +https://registry.npmjs.org/grunt-contrib-watch/-/grunt-contrib-watch-0.6.1.tgz;name=grunt-contrib-watch_0.6.1;unpack=yes;downloadfilename=grunt-contrib-watch-0.6.1-tarball.tgz;subdir=${BPN}/grunt-contrib-watch_0.6.1 \ +https://registry.npmjs.org/qunitjs/-/qunitjs-1.18.0.tgz;name=qunitjs_1.18.0;unpack=yes;downloadfilename=qunitjs-1.18.0-tarball.tgz;subdir=${BPN}/qunitjs_1.18.0 \ " SRC_URI[fstream_0.1.25.md5sum]="81805600ac27ed20bbe21e2645021476" @@ -331,55 +331,55 @@ ${LICENSE_which-1.0.5} \ LICENSE = "${@ ' & '.join(sorted(set('${ALL_LICENSES}'.strip().split(' & ')))) }" LIC_FILES_CHKSUM = "\ -file://${WORKDIR}/${PN}/abbrev_1.0.5/package/LICENSE;md5=b3245a33f2d41818f14c489bd33bc4a8 \ -file://${WORKDIR}/${PN}/ansi_0.2.1/package/README.md;beginline=67;md5=c9dbec5380fde616b6393b2b1d91cd18 \ -file://${WORKDIR}/${PN}/asn1_0.1.11/package/LICENSE;md5=5ce2f42143c298495637e28e40cd5462 \ -file://${WORKDIR}/${PN}/assert-plus_0.1.2/package/README.md;beginline=101;md5=01b58088f134c724978d16324441a473 \ -file://${WORKDIR}/${PN}/async_0.2.10/package/LICENSE;md5=64a378b2b01424fe22d54bc626175994 \ -file://${WORKDIR}/${PN}/aws-sign2_0.5.0/package/LICENSE;md5=f3f8ead5440d1c311b45be065d135d90 \ -file://${WORKDIR}/${PN}/block-stream_0.0.7/package/LICENCE;md5=c695aba12d799c74e770d90e1c5d59aa \ -file://${WORKDIR}/${PN}/boom_0.4.2/package/LICENSE;md5=8595d57fda9e9f801719f48fb5bff49d \ -file://${WORKDIR}/${PN}/combined-stream_0.0.4/package/License;md5=5270b4ddb6700d0a820e6d066744589c \ -file://${WORKDIR}/${PN}/cryptiles_0.2.2/package/LICENSE;md5=a674df8d258d4437373838e36bc960d2 \ -file://${WORKDIR}/${PN}/ctype_0.5.2/package/LICENSE;md5=0d330d2474abae149a0126325ec70247 \ -file://${WORKDIR}/${PN}/delayed-stream_0.0.5/package/License;md5=5270b4ddb6700d0a820e6d066744589c \ -file://${WORKDIR}/${PN}/forever-agent_0.5.2/package/LICENSE;md5=f3f8ead5440d1c311b45be065d135d90 \ -file://${WORKDIR}/${PN}/form-data_0.1.2/package/License;md5=7aa505292e2636a9e59d4d3f258f4819 \ -file://${WORKDIR}/${PN}/fstream_0.1.25/package/LICENSE;md5=8ce909f9cccb74a7c6f2720930d072c1 \ -file://${WORKDIR}/${PN}/glob_3.2.9/package/LICENSE;md5=8ce909f9cccb74a7c6f2720930d072c1 \ -file://${WORKDIR}/${PN}/graceful-fs_1.2.3/package/LICENSE;md5=8ce909f9cccb74a7c6f2720930d072c1 \ -file://${WORKDIR}/${PN}/graceful-fs_2.0.3/package/LICENSE;md5=8ce909f9cccb74a7c6f2720930d072c1 \ -file://${WORKDIR}/${PN}/grunt_0.4.5/package/LICENSE-MIT;md5=71ec026c2f855627041a4d9a1f5d2c3e \ -file://${WORKDIR}/${PN}/grunt-contrib-jshint_0.10.0/package/LICENSE-MIT;md5=d4c0dac367d17453778bfc70faf69145 \ -file://${WORKDIR}/${PN}/grunt-contrib-nodeunit_0.4.1/package/LICENSE-MIT;md5=d4c0dac367d17453778bfc70faf69145 \ -file://${WORKDIR}/${PN}/grunt-contrib-uglify_0.5.0/package/LICENSE-MIT;md5=d4c0dac367d17453778bfc70faf69145 \ -file://${WORKDIR}/${PN}/grunt-contrib-watch_0.6.1/package/LICENSE-MIT;md5=7aa789b63a114f3e399acfb94bb570a5 \ -file://${WORKDIR}/${PN}/hawk_1.0.0/package/LICENSE;md5=a674df8d258d4437373838e36bc960d2 \ -file://${WORKDIR}/${PN}/hoek_0.9.1/package/LICENSE;md5=1dd27b734d6fd3763ba8d9d1d4d2a44f \ -file://${WORKDIR}/${PN}/http-signature_0.10.0/package/LICENSE;md5=38ecf0a3a3894f404ca99c2a08924afc \ -file://${WORKDIR}/${PN}/inherits_2.0.1/package/LICENSE;md5=5b2ef2247af6d355ae9d9f988092d470 \ -file://${WORKDIR}/${PN}/json-stringify-safe_5.0.0/package/LICENSE;md5=8ce909f9cccb74a7c6f2720930d072c1 \ -file://${WORKDIR}/${PN}/lru-cache_2.5.0/package/LICENSE;md5=b3245a33f2d41818f14c489bd33bc4a8 \ -file://${WORKDIR}/${PN}/mime_1.2.11/package/LICENSE;md5=8eab89930e0b484cd991ed4a155f74f7 \ -file://${WORKDIR}/${PN}/minimatch_0.2.14/package/LICENSE;md5=b3245a33f2d41818f14c489bd33bc4a8 \ -file://${WORKDIR}/${PN}/mkdirp_0.3.5/package/LICENSE;md5=b2d989bc186e7f6b418a5fdd5cc0b56b \ -file://${WORKDIR}/${PN}/mkdirp_0.4.0/package/LICENSE;md5=b2d989bc186e7f6b418a5fdd5cc0b56b \ -file://${WORKDIR}/${PN}/node-uuid_1.4.1/package/LICENSE.md;md5=c1a615ca498934d9a312c2d5294cf2cf \ -file://${WORKDIR}/${PN}/nopt_2.2.1/package/LICENSE;md5=b3245a33f2d41818f14c489bd33bc4a8 \ -file://${WORKDIR}/${PN}/npmlog_0.0.6/package/LICENSE;md5=8ce909f9cccb74a7c6f2720930d072c1 \ -file://${WORKDIR}/${PN}/oauth-sign_0.3.0/package/LICENSE;md5=f3f8ead5440d1c311b45be065d135d90 \ -file://${WORKDIR}/${PN}/osenv_0.0.3/package/LICENSE;md5=c695aba12d799c74e770d90e1c5d59aa \ -file://${WORKDIR}/${PN}/punycode_1.2.4/package/LICENSE-MIT.txt;md5=f6e63cacc921f39d701abb9091a7d73d \ -file://${WORKDIR}/${PN}/punycode_1.2.4/package/LICENSE-GPL.txt;md5=2c1778696d3ba68569a0352e709ae6b7 \ -file://${WORKDIR}/${PN}/qs_0.6.6/package/Readme.md;beginline=35;md5=90d7f26fbfa70f23a025e3e3502e5a5b \ -file://${WORKDIR}/${PN}/qunitjs_1.18.0/package/LICENSE.txt;md5=88e6b088e1bdb95427eca76a90663e3b \ -file://${WORKDIR}/${PN}/request_2.34.0/package/LICENSE;md5=f3f8ead5440d1c311b45be065d135d90 \ -file://${WORKDIR}/${PN}/rimraf_2.2.6/package/LICENSE;md5=b3245a33f2d41818f14c489bd33bc4a8 \ -file://${WORKDIR}/${PN}/semver_2.2.1/package/LICENSE;md5=8ce909f9cccb74a7c6f2720930d072c1 \ -file://${WORKDIR}/${PN}/sigmund_1.0.0/package/LICENSE;md5=8ce909f9cccb74a7c6f2720930d072c1 \ -file://${WORKDIR}/${PN}/sntp_0.2.4/package/LICENSE;md5=a674df8d258d4437373838e36bc960d2 \ -file://${WORKDIR}/${PN}/tar_0.1.19/package/LICENCE;md5=c695aba12d799c74e770d90e1c5d59aa \ -file://${WORKDIR}/${PN}/tough-cookie_0.12.1/package/LICENSE;md5=069d7e6f46a4e30df19bc7cddf36674b \ -file://${WORKDIR}/${PN}/tunnel-agent_0.3.0/package/LICENSE;md5=f3f8ead5440d1c311b45be065d135d90 \ -file://${WORKDIR}/${PN}/which_1.0.5/package/LICENSE;md5=b3245a33f2d41818f14c489bd33bc4a8 \ +file://${WORKDIR}/${BPN}/abbrev_1.0.5/package/LICENSE;md5=b3245a33f2d41818f14c489bd33bc4a8 \ +file://${WORKDIR}/${BPN}/ansi_0.2.1/package/README.md;beginline=67;md5=c9dbec5380fde616b6393b2b1d91cd18 \ +file://${WORKDIR}/${BPN}/asn1_0.1.11/package/LICENSE;md5=5ce2f42143c298495637e28e40cd5462 \ +file://${WORKDIR}/${BPN}/assert-plus_0.1.2/package/README.md;beginline=101;md5=01b58088f134c724978d16324441a473 \ +file://${WORKDIR}/${BPN}/async_0.2.10/package/LICENSE;md5=64a378b2b01424fe22d54bc626175994 \ +file://${WORKDIR}/${BPN}/aws-sign2_0.5.0/package/LICENSE;md5=f3f8ead5440d1c311b45be065d135d90 \ +file://${WORKDIR}/${BPN}/block-stream_0.0.7/package/LICENCE;md5=c695aba12d799c74e770d90e1c5d59aa \ +file://${WORKDIR}/${BPN}/boom_0.4.2/package/LICENSE;md5=8595d57fda9e9f801719f48fb5bff49d \ +file://${WORKDIR}/${BPN}/combined-stream_0.0.4/package/License;md5=5270b4ddb6700d0a820e6d066744589c \ +file://${WORKDIR}/${BPN}/cryptiles_0.2.2/package/LICENSE;md5=a674df8d258d4437373838e36bc960d2 \ +file://${WORKDIR}/${BPN}/ctype_0.5.2/package/LICENSE;md5=0d330d2474abae149a0126325ec70247 \ +file://${WORKDIR}/${BPN}/delayed-stream_0.0.5/package/License;md5=5270b4ddb6700d0a820e6d066744589c \ +file://${WORKDIR}/${BPN}/forever-agent_0.5.2/package/LICENSE;md5=f3f8ead5440d1c311b45be065d135d90 \ +file://${WORKDIR}/${BPN}/form-data_0.1.2/package/License;md5=7aa505292e2636a9e59d4d3f258f4819 \ +file://${WORKDIR}/${BPN}/fstream_0.1.25/package/LICENSE;md5=8ce909f9cccb74a7c6f2720930d072c1 \ +file://${WORKDIR}/${BPN}/glob_3.2.9/package/LICENSE;md5=8ce909f9cccb74a7c6f2720930d072c1 \ +file://${WORKDIR}/${BPN}/graceful-fs_1.2.3/package/LICENSE;md5=8ce909f9cccb74a7c6f2720930d072c1 \ +file://${WORKDIR}/${BPN}/graceful-fs_2.0.3/package/LICENSE;md5=8ce909f9cccb74a7c6f2720930d072c1 \ +file://${WORKDIR}/${BPN}/grunt_0.4.5/package/LICENSE-MIT;md5=71ec026c2f855627041a4d9a1f5d2c3e \ +file://${WORKDIR}/${BPN}/grunt-contrib-jshint_0.10.0/package/LICENSE-MIT;md5=d4c0dac367d17453778bfc70faf69145 \ +file://${WORKDIR}/${BPN}/grunt-contrib-nodeunit_0.4.1/package/LICENSE-MIT;md5=d4c0dac367d17453778bfc70faf69145 \ +file://${WORKDIR}/${BPN}/grunt-contrib-uglify_0.5.0/package/LICENSE-MIT;md5=d4c0dac367d17453778bfc70faf69145 \ +file://${WORKDIR}/${BPN}/grunt-contrib-watch_0.6.1/package/LICENSE-MIT;md5=7aa789b63a114f3e399acfb94bb570a5 \ +file://${WORKDIR}/${BPN}/hawk_1.0.0/package/LICENSE;md5=a674df8d258d4437373838e36bc960d2 \ +file://${WORKDIR}/${BPN}/hoek_0.9.1/package/LICENSE;md5=1dd27b734d6fd3763ba8d9d1d4d2a44f \ +file://${WORKDIR}/${BPN}/http-signature_0.10.0/package/LICENSE;md5=38ecf0a3a3894f404ca99c2a08924afc \ +file://${WORKDIR}/${BPN}/inherits_2.0.1/package/LICENSE;md5=5b2ef2247af6d355ae9d9f988092d470 \ +file://${WORKDIR}/${BPN}/json-stringify-safe_5.0.0/package/LICENSE;md5=8ce909f9cccb74a7c6f2720930d072c1 \ +file://${WORKDIR}/${BPN}/lru-cache_2.5.0/package/LICENSE;md5=b3245a33f2d41818f14c489bd33bc4a8 \ +file://${WORKDIR}/${BPN}/mime_1.2.11/package/LICENSE;md5=8eab89930e0b484cd991ed4a155f74f7 \ +file://${WORKDIR}/${BPN}/minimatch_0.2.14/package/LICENSE;md5=b3245a33f2d41818f14c489bd33bc4a8 \ +file://${WORKDIR}/${BPN}/mkdirp_0.3.5/package/LICENSE;md5=b2d989bc186e7f6b418a5fdd5cc0b56b \ +file://${WORKDIR}/${BPN}/mkdirp_0.4.0/package/LICENSE;md5=b2d989bc186e7f6b418a5fdd5cc0b56b \ +file://${WORKDIR}/${BPN}/node-uuid_1.4.1/package/LICENSE.md;md5=c1a615ca498934d9a312c2d5294cf2cf \ +file://${WORKDIR}/${BPN}/nopt_2.2.1/package/LICENSE;md5=b3245a33f2d41818f14c489bd33bc4a8 \ +file://${WORKDIR}/${BPN}/npmlog_0.0.6/package/LICENSE;md5=8ce909f9cccb74a7c6f2720930d072c1 \ +file://${WORKDIR}/${BPN}/oauth-sign_0.3.0/package/LICENSE;md5=f3f8ead5440d1c311b45be065d135d90 \ +file://${WORKDIR}/${BPN}/osenv_0.0.3/package/LICENSE;md5=c695aba12d799c74e770d90e1c5d59aa \ +file://${WORKDIR}/${BPN}/punycode_1.2.4/package/LICENSE-MIT.txt;md5=f6e63cacc921f39d701abb9091a7d73d \ +file://${WORKDIR}/${BPN}/punycode_1.2.4/package/LICENSE-GPL.txt;md5=2c1778696d3ba68569a0352e709ae6b7 \ +file://${WORKDIR}/${BPN}/qs_0.6.6/package/Readme.md;beginline=35;md5=90d7f26fbfa70f23a025e3e3502e5a5b \ +file://${WORKDIR}/${BPN}/qunitjs_1.18.0/package/LICENSE.txt;md5=88e6b088e1bdb95427eca76a90663e3b \ +file://${WORKDIR}/${BPN}/request_2.34.0/package/LICENSE;md5=f3f8ead5440d1c311b45be065d135d90 \ +file://${WORKDIR}/${BPN}/rimraf_2.2.6/package/LICENSE;md5=b3245a33f2d41818f14c489bd33bc4a8 \ +file://${WORKDIR}/${BPN}/semver_2.2.1/package/LICENSE;md5=8ce909f9cccb74a7c6f2720930d072c1 \ +file://${WORKDIR}/${BPN}/sigmund_1.0.0/package/LICENSE;md5=8ce909f9cccb74a7c6f2720930d072c1 \ +file://${WORKDIR}/${BPN}/sntp_0.2.4/package/LICENSE;md5=a674df8d258d4437373838e36bc960d2 \ +file://${WORKDIR}/${BPN}/tar_0.1.19/package/LICENCE;md5=c695aba12d799c74e770d90e1c5d59aa \ +file://${WORKDIR}/${BPN}/tough-cookie_0.12.1/package/LICENSE;md5=069d7e6f46a4e30df19bc7cddf36674b \ +file://${WORKDIR}/${BPN}/tunnel-agent_0.3.0/package/LICENSE;md5=f3f8ead5440d1c311b45be065d135d90 \ +file://${WORKDIR}/${BPN}/which_1.0.5/package/LICENSE;md5=b3245a33f2d41818f14c489bd33bc4a8 \ " From 34ff8b8ded4c580a04885bad092aeceeae2b15b0 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sun, 6 Feb 2022 22:57:17 -0800 Subject: [PATCH 0328/2022] iotivity org.ocf.webossample.oc{client,server}basicops: fix branch name :Release Notes: Use correct branch to fix build failure without pre-populated premirror. :Detailed Notes: Fixes: ERROR: iotivity-1.3.99+gitAUTOINC+255060695e-r7 do_fetch: Fetcher failure: Unable to find revision 59ae96f167a19f4d04dc6db61f6587b37ccd429f in branch mbedtls-2.4 even from upstream ERROR: iotivity-1.3.99+gitAUTOINC+255060695e-r7 do_fetch: Bitbake Fetcher Error: FetchError('Unable to fetch URL from any source.', 'git://github.com/ARMmbed/mbedtls.git;destsuffix=git/extlibs/mbedtls/mbedtls;protocol=https;branch=mbedtls-2.4;name=mbedtls') ERROR: Logfile of failure stored in: /jenkins/mjansa/build/ose-github/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/temp/log.do_fetch.1489629 ERROR: Task (/jenkins/mjansa/build/ose-github/dunfell/meta-webosose/meta-webos/recipes-core/iotivity/iotivity_git.bb:do_fetch) failed with exit code '1' ERROR: org.ocf.webossample.occlientbasicops-1.0-r5 do_fetch: Fetcher failure: Unable to find revision 59ae96f167a19f4d04dc6db61f6587b37ccd429f in branch mbedtls-2.4 even from upstream ERROR: org.ocf.webossample.occlientbasicops-1.0-r5 do_fetch: Bitbake Fetcher Error: FetchError('Unable to fetch URL from any source.', 'git://github.com/ARMmbed/mbedtls.git;destsuffix=iotivity/extlibs/mbedtls/mbedtls;protocol=https;branch=mbedtls-2.4;name=mbedtls') ERROR: Logfile of failure stored in: /jenkins/mjansa/build/ose-github/dunfell/BUILD/work/raspberrypi4_64-webos-linux/org.ocf.webossample.occlientbasicops/1.0-r5/temp/log.do_fetch.1828956 ERROR: Task (/jenkins/mjansa/build/ose-github/dunfell/meta-webosose/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb:do_fetch) failed with exit code '1' ERROR: org.ocf.webossample.ocserverbasicops-1.0-r5 do_fetch: Fetcher failure: Unable to find revision 59ae96f167a19f4d04dc6db61f6587b37ccd429f in branch mbedtls-2.4 even from upstream ERROR: org.ocf.webossample.ocserverbasicops-1.0-r5 do_fetch: Bitbake Fetcher Error: FetchError('Unable to fetch URL from any source.', 'git://github.com/ARMmbed/mbedtls.git;destsuffix=iotivity/extlibs/mbedtls/mbedtls;protocol=https;branch=mbedtls-2.4;name=mbedtls') ERROR: Logfile of failure stored in: /jenkins/mjansa/build/ose-github/dunfell/BUILD/work/raspberrypi4_64-webos-linux/org.ocf.webossample.ocserverbasicops/1.0-r5/temp/log.do_fetch.1844344 ERROR: Task (/jenkins/mjansa/build/ose-github/dunfell/meta-webosose/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb:do_fetch) failed with exit code '1' :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I4a33e808fa8d60d65b55fac6f8a1af8bece5be8d --- meta-webos/recipes-core/iotivity/iotivity_git.bb | 2 +- .../org.ocf.webossample.occlientbasicops.bb | 2 +- .../org.ocf.webossample.ocserverbasicops.bb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-core/iotivity/iotivity_git.bb b/meta-webos/recipes-core/iotivity/iotivity_git.bb index a5cc925a2..e4ec90443 100644 --- a/meta-webos/recipes-core/iotivity/iotivity_git.bb +++ b/meta-webos/recipes-core/iotivity/iotivity_git.bb @@ -28,7 +28,7 @@ SRC_URI = " \ git://github.com/intel/tinycbor.git;destsuffix=git/extlibs/tinycbor/tinycbor;protocol=https;name=tinycbor;branch=master \ git://github.com/google/googletest.git;destsuffix=git/extlibs/gtest/googletest-release-1.7.0;protocol=https;nobranch=1;name=gtest \ git://github.com/dascandy/hippomocks.git;destsuffix=git/extlibs/hippomocks/hippomocks;protocol=https;name=hippomocks;branch=master \ - git://github.com/ARMmbed/mbedtls.git;destsuffix=git/extlibs/mbedtls/mbedtls;protocol=https;branch=mbedtls-2.4;name=mbedtls \ + git://github.com/ARMmbed/mbedtls.git;destsuffix=git/extlibs/mbedtls/mbedtls;protocol=https;branch=archive/mbedtls-2.4;name=mbedtls \ git://github.com/miloyip/rapidjson.git;destsuffix=git/extlibs/rapidjson/rapidjson;protocol=https;name=rapidjson;branch=master \ git://github.com/dthaler/libcoap.git;destsuffix=git/extlibs/libcoap/libcoap;protocol=https;branch=develop;name=libcoap \ file://0001-hippomocks-fix-build-for-MIPS.patch;patchdir=extlibs/hippomocks/hippomocks \ diff --git a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb index 19baa8ec2..911ac5e1e 100644 --- a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb +++ b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb @@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = "file://LICENSE.md;md5=86d3f3a95c324c9479bd8986968f4327" SRC_URI += " \ git://github.com/iotivity/iotivity.git;branch=webos;protocol=https;name=main;destsuffix=iotivity \ git://github.com/intel/tinycbor.git;destsuffix=iotivity/extlibs/tinycbor/tinycbor;protocol=https;name=tinycbor;branch=master \ - git://github.com/ARMmbed/mbedtls.git;destsuffix=iotivity/extlibs/mbedtls/mbedtls;protocol=https;branch=mbedtls-2.4;name=mbedtls \ + git://github.com/ARMmbed/mbedtls.git;destsuffix=iotivity/extlibs/mbedtls/mbedtls;protocol=https;branch=archive/mbedtls-2.4;name=mbedtls \ " SRCREV_main = "8fe09d4c9859d3ff32b4e8ca2ed996a156fccb81" diff --git a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb index 762713ada..4bf96e2fd 100644 --- a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb +++ b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb @@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = "file://LICENSE.md;md5=86d3f3a95c324c9479bd8986968f4327" SRC_URI += " \ git://github.com/iotivity/iotivity.git;branch=webos;protocol=https;name=main;destsuffix=iotivity \ git://github.com/intel/tinycbor.git;destsuffix=iotivity/extlibs/tinycbor/tinycbor;protocol=https;name=tinycbor;branch=master \ - git://github.com/ARMmbed/mbedtls.git;destsuffix=iotivity/extlibs/mbedtls/mbedtls;protocol=https;branch=mbedtls-2.4;name=mbedtls \ + git://github.com/ARMmbed/mbedtls.git;destsuffix=iotivity/extlibs/mbedtls/mbedtls;protocol=https;branch=archive/mbedtls-2.4;name=mbedtls \ " SRCREV_main = "8fe09d4c9859d3ff32b4e8ca2ed996a156fccb81" From 1fdf71d606f5cc1a08ff7a21892427a73f80cd00 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sun, 28 Nov 2021 07:38:29 -0800 Subject: [PATCH 0329/2022] packagegroup-webos-extended: remove com.webos.service.ai from arm builds except rpi :Release Notes: Fix regression from WRN-9168. :Detailed Notes: Fixes: ERROR: Nothing RPROVIDES 'com.webos.service.ai' (but /jenkins/mjansa/build/ose-github/kirkstone/meta-webosose/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb RDEPENDS on or otherwise requires it) com.webos.service.ai was skipped: incompatible with machine qemuarm (not in COMPATIBLE_MACHINE) NOTE: Runtime target 'com.webos.service.ai' is unbuildable, removing... Missing or unbuildable dependency chain was: ['com.webos.service.ai'] NOTE: Runtime target 'packagegroup-webos-extended' is unbuildable, removing... Missing or unbuildable dependency chain was: ['packagegroup-webos-extended', 'com.webos.service.ai'] NOTE: Runtime target 'webos-image-devel' is unbuildable, removing... Missing or unbuildable dependency chain was: ['webos-image-devel', 'packagegroup-webos-extended', 'com.webos.service.ai'] :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-9168] CCC: Switch official OSE image to raspberrypi4 64bit [WRN-7408] Port AI service on rpi-64bit system [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: Icbc54c42e8ca2cfc7a82c7f1bfac7000e913c3e3 --- .../recipes-core/packagegroups/packagegroup-webos-extended.bb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index 9a615b4d0..a674c7cef 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -15,6 +15,8 @@ inherit webos_prerelease_dep VIRTUAL-RUNTIME_ai ?= "com.webos.service.ai" # The same restriction as libgoogleassistant (snowboy doesn't support i686;x86) VIRTUAL-RUNTIME_ai_i686 = "" +VIRTUAL-RUNTIME_ai_arm = "" +VIRTUAL-RUNTIME_ai_rpi = "com.webos.service.ai" VIRTUAL-RUNTIME_appinstalld ?= "appinstalld2" VIRTUAL-RUNTIME_event-monitor-network ?= "event-monitor-network" VIRTUAL-RUNTIME_initscripts ?= "initscripts" From 9b9cf1b97cbf64bf47aa4529922d6f11e90b4729 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sat, 19 Feb 2022 12:27:48 +0000 Subject: [PATCH 0330/2022] webos_base.bbclass: Fix Deprecated warnings from regexps :Release Notes: Similarly to oe-core change: https://git.openembedded.org/openembedded-core/commit/?id=4b1c0c7d5525fc4cea9e0f02ec54e92a6fbc6199 :Detailed Notes: Fixes: meta-webos/classes/webos_base.bbclass:85: DeprecationWarning: invalid escape sequence \. meta-webos/classes/webos_base.bbclass:86: DeprecationWarning: invalid escape sequence \. meta-webos/classes/webos_base.bbclass:88: DeprecationWarning: invalid escape sequence \. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: Ide020821dbe276e304e9a8e665921f0f95854915 --- meta-webos/classes/webos_base.bbclass | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/classes/webos_base.bbclass b/meta-webos/classes/webos_base.bbclass index fd01f5768..ee650e764 100644 --- a/meta-webos/classes/webos_base.bbclass +++ b/meta-webos/classes/webos_base.bbclass @@ -84,10 +84,10 @@ python do_write_abi_xml_data() { # nothing was staged, we don't need to run ABI checker on this return import re - re_headers = re.compile("\.h$") - re_solibs = re.compile("\.so\..*$") + re_headers = re.compile(r"\.h$") + re_solibs = re.compile(r"\.so\..*$") # in some libraries we don't set proper SONAME and versioning - re_solibsdev = re.compile("\.so$") + re_solibsdev = re.compile(r"\.so$") with open(datafile, "w") as f: f.write("\n" % manifest) f.write("%s\n" % d.getVar("PV", True)) From e17d287def6d14fe6c9a3dc2c3de2ea30986a939 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sat, 19 Feb 2022 12:34:21 +0000 Subject: [PATCH 0331/2022] report-error.bbclass: Fix Deprecated warnings from regexps :Release Notes: Similarly to oe-core change: https://git.openembedded.org/openembedded-core/commit/?id=4b1c0c7d5525fc4cea9e0f02ec54e92a6fbc6199 :Detailed Notes: Fixes: meta-webos/classes/report-error.bbclass:132: DeprecationWarning: invalid escape sequence \. meta-webos/classes/report-error.bbclass:135: DeprecationWarning: invalid escape sequence \. meta-webos/classes/report-error.bbclass:141: DeprecationWarning: invalid escape sequence \. meta-webos/classes/report-error.bbclass:234: DeprecationWarning: invalid escape sequence \( :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I39176570afd8c8cc67927a3fa7a8e3ccf063e07d --- meta-webos/classes/report-error.bbclass | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/meta-webos/classes/report-error.bbclass b/meta-webos/classes/report-error.bbclass index 7e63e72ae..99e63aca6 100644 --- a/meta-webos/classes/report-error.bbclass +++ b/meta-webos/classes/report-error.bbclass @@ -1,7 +1,7 @@ # # Collects debug information in order to create error report files. # -# Copyright (C) 2014-2017 LG Electronics, Inc. +# Copyright (C) 2014-2022 LG Electronics, Inc. # Copyright (C) 2013 Intel Corporation # Author: Andreea Brandusa Proca # @@ -129,16 +129,16 @@ def errorreport_get_gitmirror(): gitmirror = "N/A" try: # number of "redirects" - gitmirror = subprocess.check_output('git config --get-regexp "^url\..*\.insteadof" | wc -l', shell=True).decode("utf-8") + gitmirror = subprocess.check_output(r'git config --get-regexp "^url\..*\.insteadof" | wc -l', shell=True).decode("utf-8") # one example to know what mirror was used try: - gitmirror += subprocess.check_output('git config --get-regexp "^url\..*\.insteadof" "git://github.com/openembedded"', shell=True).decode("utf-8") + gitmirror += subprocess.check_output(r'git config --get-regexp "^url\..*\.insteadof" "git://github.com/openembedded"', shell=True).decode("utf-8") except: # git config returns error return code when option doesn't exist gitmirror += "\nNo mirror for git://github.com/openembedded\n" # some jenkins slaves and developers have .gitconfig which redirects whole github.com (and doesn't have entry for git://github.com/openembedded) try: - gitmirror += subprocess.check_output('git config --get-regexp "^url\..*\.insteadof" "git://github.com"', shell=True).decode("utf-8") + gitmirror += subprocess.check_output(r'git config --get-regexp "^url\..*\.insteadof" "git://github.com"', shell=True).decode("utf-8") except: # git config returns error return code when option doesn't exist gitmirror += "\nNo mirror for git://github.com" @@ -231,7 +231,7 @@ def errorreport_get_top_20_tasks(e, jsondata): bsdir = e.data.expand("${BUILDSTATS_BASE}/${BUILDNAME}") # it can be empty (with only build_stat file), so check that there are at least 2 entries before calling grep if len(os.listdir(bsdir)) > 1: - top20 = subprocess.check_output("grep -R '^.*Elapsed time' %s/ | sed 's/^\(.*\)\/\([^\/]*\/[^\/]*\):Elapsed time: \([^ ]*\) .*$/\\3 \\2/g' | sort -n | tail -n 20" % bsdir, shell=True).decode("utf-8") + top20 = subprocess.check_output(r"grep -R '^.*Elapsed time' %s/ | sed 's/^\(.*\)\/\([^\/]*\/[^\/]*\):Elapsed time: \([^ ]*\) .*$/\3 \2/g' | sort -n | tail -n 20" % bsdir, shell=True).decode("utf-8") for line in top20.splitlines(): bsdata={} (time, task) = line.split() From 92a1819a23fc70d56115ae170b292adaa42fa432 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sat, 19 Feb 2022 12:30:19 +0000 Subject: [PATCH 0332/2022] pulseaudio: Fix Deprecated warnings from regexps :Release Notes: Similarly to oe-core change: https://git.openembedded.org/openembedded-core/commit/?id=4b1c0c7d5525fc4cea9e0f02ec54e92a6fbc6199 :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I3962c1e576265220bc1e2a2cc1f1863746f513b7 --- meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb index 8a23fe124..856b5662e 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb +++ b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb @@ -115,8 +115,8 @@ RDEPENDS_pulseaudio-server_append = "\ python populate_packages_prepend() { plugindir = d.expand('${libdir}/pulse-9.0/modules/') - do_split_packages(d, plugindir, '^module-(.*)\.so$', 'pulseaudio-module-%s', 'PulseAudio module for %s', extra_depends='', prepend=True) - do_split_packages(d, plugindir, '^lib(.*)\.so$', 'pulseaudio-lib-%s', 'PulseAudio library for %s', extra_depends='', prepend=True) + do_split_packages(d, plugindir, r'^module-(.*)\.so$', 'pulseaudio-module-%s', 'PulseAudio module for %s', extra_depends='', prepend=True) + do_split_packages(d, plugindir, r'^lib(.*)\.so$', 'pulseaudio-lib-%s', 'PulseAudio library for %s', extra_depends='', prepend=True) } # ERROR: pulseaudio-9.0-13-r20 do_package_qa: QA Issue: pulseaudio-pa-info rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] From 439ad8f37f7045da282eff85de713a10badf63a8 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sun, 20 Feb 2022 09:32:25 +0000 Subject: [PATCH 0333/2022] sdcard_image-rpi.bbclass: Fix Deprecated warnings from regexps :Release Notes: Similarly to oe-core change: https://git.openembedded.org/openembedded-core/commit/?id=4b1c0c7d5525fc4cea9e0f02ec54e92a6fbc6199 :Detailed Notes: The same change sent upstream: https://github.com/agherzan/meta-raspberrypi/pull/1018 :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I5a93c28083ba9deb698f4851c18186909cfe03a4 --- meta-webos-raspberrypi/classes/sdcard_image-rpi.bbclass | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/meta-webos-raspberrypi/classes/sdcard_image-rpi.bbclass b/meta-webos-raspberrypi/classes/sdcard_image-rpi.bbclass index 6425c67fe..67196b1dc 100644 --- a/meta-webos-raspberrypi/classes/sdcard_image-rpi.bbclass +++ b/meta-webos-raspberrypi/classes/sdcard_image-rpi.bbclass @@ -84,11 +84,11 @@ def split_overlays(d, out, ver=None): dts = d.getVar("KERNEL_DEVICETREE") # Device Tree Overlays are assumed to be suffixed by '-overlay.dtb' (4.1.x) or by '.dtbo' (4.4.9+) string and will be put in a dedicated folder if out: - overlays = oe.utils.str_filter_out('\S+\-overlay\.dtb$', dts, d) - overlays = oe.utils.str_filter_out('\S+\.dtbo$', overlays, d) + overlays = oe.utils.str_filter_out(r'\S+\-overlay\.dtb$', dts, d) + overlays = oe.utils.str_filter_out(r'\S+\.dtbo$', overlays, d) else: - overlays = oe.utils.str_filter('\S+\-overlay\.dtb$', dts, d) + \ - " " + oe.utils.str_filter('\S+\.dtbo$', dts, d) + overlays = oe.utils.str_filter(r'\S+\-overlay\.dtb$', dts, d) + \ + " " + oe.utils.str_filter(r'\S+\.dtbo$', dts, d) return overlays From c4dec86c69c96ed085158cb82d9d01724f1bf814 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sun, 20 Feb 2022 11:07:19 +0000 Subject: [PATCH 0334/2022] localization-tool-native=r7 (remove pythonnative inherit) :Release Notes: latest opencc still calls python(2) from dicts.gypi: https://github.com/BYVoid/OpenCC/blob/master/node/dicts.gypi which is why pythonnative inherit was added in: webos: localization-tool-native: inherit pythonnative commit before, but since v2.9.0 localization-tool uses opencc-js instead of opencc, see: https://github.com/iLib-js/loctool/commit/ea5b0088f457354c7f7bb1efa24757d8d190c27e :Detailed Notes: With this removed, there is only webruntime recipes still depending on meta-python2 layer for OSE builds. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: Ie1233d9b79c86f84746c1f78aa08f7a42ccdf63e --- .../localization-tool/localization-tool-native.bb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb b/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb index fddd55e7f..785b13b30 100644 --- a/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb +++ b/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "A localization tool is written in JavaScript" AUTHOR = "Goun Lee" @@ -6,9 +6,8 @@ SECTION = "webos/devel/tools" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" -PR = "r6" +PR = "r7" -inherit pythonnative inherit webos_npm_env inherit native DEPENDS = "nodejs-native node-gyp-packages-native" From 0fadc2c16405e0c8ce9352679c0ea232d3742e64 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sun, 20 Feb 2022 13:36:16 +0000 Subject: [PATCH 0335/2022] webruntime: remove invalid closure_compile :Release Notes: It was added with version 79 in: ose: Add webruntime_79=16,v79.0.3945.79 wam=34-r32,v1.0.2 but is no longer valid. :Detailed Notes: Fixes: [0/1] Regenerating ninja files WARNING at build arg file (use "gn args " to edit):64:19: Build argument has no effect. closure_compile = false ^---- The variable "closure_compile" was set as a build argument but never appeared in a declare_args() block in any buildfile. To view all possible args, run "gn args --list " The build continued as if that argument was unspecified. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: If63f3498d184b2f8c4d07eefa356227ee6b4e1d4 --- meta-webos/recipes-webos/chromium/webruntime.inc | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime.inc b/meta-webos/recipes-webos/chromium/webruntime.inc index 2169f4e27..15e8f2386 100644 --- a/meta-webos/recipes-webos/chromium/webruntime.inc +++ b/meta-webos/recipes-webos/chromium/webruntime.inc @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2021 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "Chromium webruntime for webOS" AUTHOR = "Lokesh Kumar Goel " @@ -97,10 +97,6 @@ GN_ARGS += "\ use_pulseaudio=false\ " -# Disable closure_compile -# Else we need HOSTTOOLS += "java" -GN_ARGS_append = " closure_compile=false" - # TODO: drop this after we migrate to ubuntu 16.04 or above GN_ARGS += "\ fatal_linker_warnings=false\ From f6d70ee367920fcdc3d3aa2ac427b0b2556be275 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sun, 20 Feb 2022 14:10:54 +0000 Subject: [PATCH 0336/2022] webruntime: remove invalid cros_host_extra_lsflags :Release Notes: It's a typo from cros_host_extra_ldflags which are already set few lines above this. :Detailed Notes: Fixes: [0/1] Regenerating ninja files WARNING at build arg file (use "gn args " to edit):11:27: Build argument has no effect. cros_host_extra_lsflags = "-L/OE/lge/build/webosose/kirkstone/BUILD/work/qemux86_64-webos-linux/webruntime/91.0.4472.114-11-r52.4/recipe-sysroot-native/usr/lib -L/OE/lge/build/webosose/kirkstone/BUILD/work/qemux86_64-webos-linux/webruntime/91.0.4472.114-11-r52.4/recipe-sysroot-native/lib -Wl,--enable-new-dtags -Wl,-rpath-link,/OE/lge/build/webosose/kirkstone/BUILD/work/qemux86_64-webos-linux/webruntime/91.0.4472.114-11-r52.4/recipe-sysroot-native/usr/lib -Wl,-rpath-link,/OE/lge/build/webosose/kirkstone/BUILD/work/qemux86_64-webos-linux/webruntime/91.0.4472.114-11-r52.4/recipe-sysroot-native/lib -Wl,-rpath,/OE/lge/build/webosose/kirkstone/BUILD/work/qemux86_64-webos-linux/webruntime/91.0.4472.114-11-r52.4/recipe-sysroot-native/usr/lib -Wl,-rpath,/OE/lge/build/webosose/kirkstone/BUILD/work/qemux86_64-webos-linux/webruntime/91.0.4472.114-11-r52.4/recipe-sysroot-native/lib -Wl,-O1 -Wl,--allow-shlib-undefined -Wl,--dynamic-linker=/OE/lge/build/webosose/kirkstone/BUILD/sysroots-uninative/x86_64-linux/lib/ld-linux-x86-64.so.2" ^------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ Did you mean "cros_host_extra_ldflags"? The variable "cros_host_extra_lsflags" was set as a build argument but never appeared in a declare_args() block in any buildfile. To view all possible args, run "gn args --list " The build continued as if that argument was unspecified. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I53d0597dc8f0d7ec54a4dbe322c55ff918a028df --- meta-webos/recipes-webos/chromium/exportbuildscript.inc | 1 - meta-webos/recipes-webos/chromium/webruntime-common.inc | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/meta-webos/recipes-webos/chromium/exportbuildscript.inc b/meta-webos/recipes-webos/chromium/exportbuildscript.inc index 162f95720..6c14d526a 100644 --- a/meta-webos/recipes-webos/chromium/exportbuildscript.inc +++ b/meta-webos/recipes-webos/chromium/exportbuildscript.inc @@ -34,7 +34,6 @@ GN_ARGS_OVERRIDES="\ cros_host_extra_cflags=\"$BUILD_CFLAGS\" \ cros_host_extra_cppflags=\"$BUILD_CPPFLAGS\" \ cros_host_extra_cxxflags=\"$BUILD_CXXFLAGS\" \ - cros_host_extra_lsflags=\"$BUILD_LDFLAGS\" \ cros_target_ar=\"$AR\" \ cros_target_cc=\"$CC\" \ cros_target_cxx=\"$CXX\" \ diff --git a/meta-webos/recipes-webos/chromium/webruntime-common.inc b/meta-webos/recipes-webos/chromium/webruntime-common.inc index 1ebd0d85e..01a915346 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-common.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-common.inc @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. # This file configures common SRC_URI for both of mksnapshot and webruntime # Also it contains variables for gn command such as GN_ARGS @@ -69,7 +69,6 @@ GN_ARGS = "\ cros_host_extra_cflags=\"${BUILD_CFLAGS}\"\ cros_host_extra_cppflags=\"${BUILD_CPPFLAGS}\"\ cros_host_extra_cxxflags=\"${BUILD_CXXFLAGS}\"\ - cros_host_extra_lsflags=\"${BUILD_LDFLAGS}\"\ cros_target_ar=\"${AR}\"\ cros_target_cc=\"${CC}\"\ cros_target_cxx=\"${CXX}\"\ From 57f27bfe7f6a6b63265869adb4b00466f12c61a4 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sun, 20 Feb 2022 14:15:04 +0000 Subject: [PATCH 0337/2022] webruntime: remove invalid use_jumbo_build :Release Notes: It's not supported since 2019: https://chromium-review.googlesource.com/c/chromium/src/+/1874583 and the option is invalid since 2020: https://chromium-review.googlesource.com/c/chromium/src/+/2337392 :Detailed Notes: Fixes: [0/1] Regenerating ninja files WARNING at build arg file (use "gn args " to edit):58:19: Build argument has no effect. use_jumbo_build = false ^---- The variable "use_jumbo_build" was set as a build argument but never appeared in a declare_args() block in any buildfile. To view all possible args, run "gn args --list " The build continued as if that argument was unspecified. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I882460c466070492881e2756d8669abc37d3924a --- meta-webos/recipes-webos/chromium/webruntime.inc | 9 +-------- meta-webos/recipes-webos/chromium/webruntime_87.bb | 4 +--- meta-webos/recipes-webos/chromium/webruntime_91.bb | 2 -- meta-webos/recipes-webos/chromium/webruntime_94.bb | 2 -- 4 files changed, 2 insertions(+), 15 deletions(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime.inc b/meta-webos/recipes-webos/chromium/webruntime.inc index 15e8f2386..a072b2143 100644 --- a/meta-webos/recipes-webos/chromium/webruntime.inc +++ b/meta-webos/recipes-webos/chromium/webruntime.inc @@ -45,7 +45,7 @@ WEBOS_SYSTEM_BUS_SKIP_DO_TASKS = "1" WEBOS_SYSTEM_BUS_FILES_LOCATION = "${S}/files/sysbus" WEBOS_SYSTEM_BUS_MANIFEST_TYPE = "PASS" -PACKAGECONFIG ?= "jumbo neva-media" +PACKAGECONFIG ?= "neva-media" PACKAGECONFIG_append_hardware = " gstreamer umediaserver gav" PACKAGECONFIG[gstreamer] = "use_gst_media=true enable_webm_video_codecs=false,use_gst_media=false,g-media-pipeline" PACKAGECONFIG[umediaserver] = ",,umediaserver" @@ -58,13 +58,6 @@ PACKAGECONFIG[av1-codec] = "enable_av1_decoder=true, enable_av1_decoder=false" PACKAGECONFIG[gav] = "use_gav=true,use_gav=false" PACKAGECONFIG[neva-webrtc] = "use_neva_webrtc=true,use_neva_webrtc=false,media-codec-interface,media-codec-interface" -# Set a default value for jumbo file merge of 8. This should be good for build -# servers and workstations with a big number of cores. In case build is -# happening in a machine with less cores but still enough RAM a good value could -# be 50. -JUMBO_FILE_MERGE_LIMIT="8" -PACKAGECONFIG[jumbo] = "use_jumbo_build=true jumbo_file_merge_limit=${JUMBO_FILE_MERGE_LIMIT}, use_jumbo_build=false" - PACKAGECONFIG_append = " ${@bb.utils.contains('WEBOS_LTTNG_ENABLED', '1', 'lttng', '', d)}" PACKAGECONFIG[lttng] = "use_lttng=true,use_lttng=false,lttng-ust,lttng-tools lttng-modules babeltrace" diff --git a/meta-webos/recipes-webos/chromium/webruntime_87.bb b/meta-webos/recipes-webos/chromium/webruntime_87.bb index 1101c059f..19e3af381 100644 --- a/meta-webos/recipes-webos/chromium/webruntime_87.bb +++ b/meta-webos/recipes-webos/chromium/webruntime_87.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. WEBRUNTIME_REPO_VERSION = "87" require webruntime.inc @@ -24,8 +24,6 @@ PACKAGECONFIG[google_ozone_wayland] = "\ PACKAGECONFIG[v8_lite] = "v8_enable_lite_mode=true,v8_enable_lite_mode=false" -PACKAGECONFIG_remove="jumbo" - GN_ARGS_append = " \ libdir=\"${libdir}\"\ includedir=\"${includedir}\"\ diff --git a/meta-webos/recipes-webos/chromium/webruntime_91.bb b/meta-webos/recipes-webos/chromium/webruntime_91.bb index 6878f82ac..b635ab1af 100644 --- a/meta-webos/recipes-webos/chromium/webruntime_91.bb +++ b/meta-webos/recipes-webos/chromium/webruntime_91.bb @@ -13,8 +13,6 @@ PACKAGECONFIG[debug-blink] = "blink_symbol_level=2,blink_symbol_level=1" PACKAGECONFIG[v8_lite] = "v8_enable_lite_mode=true,v8_enable_lite_mode=false" -PACKAGECONFIG_remove="jumbo" - GN_ARGS_append = " use_x11=false" GN_ARGS_remove = "ozone_platform_wayland_external=true" GN_ARGS_remove = "use_xkbcommon=true" diff --git a/meta-webos/recipes-webos/chromium/webruntime_94.bb b/meta-webos/recipes-webos/chromium/webruntime_94.bb index 25b516b18..3df77cc9e 100644 --- a/meta-webos/recipes-webos/chromium/webruntime_94.bb +++ b/meta-webos/recipes-webos/chromium/webruntime_94.bb @@ -13,8 +13,6 @@ PACKAGECONFIG[debug-blink] = "blink_symbol_level=2,blink_symbol_level=1" PACKAGECONFIG[v8_lite] = "v8_enable_lite_mode=true,v8_enable_lite_mode=false" -PACKAGECONFIG_remove="jumbo" - GN_ARGS_append = " neva_dcheck_always_on=true" GN_ARGS_append = " use_x11=false" GN_ARGS_remove = "ozone_platform_wayland_external=true" From 3962a614cc06fd6db81492da4f2e234cb18df9d0 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 22 Feb 2022 16:07:40 +0000 Subject: [PATCH 0338/2022] webruntime: remove linux_use_bundled_binutils :Release Notes: It's not longer in webruntime.inc, so it doesn't need to be removed here. :Detailed Notes: third_party/binutils with linux_use_bundled_binutils option was removed from chromium in 2020: https://chromium-review.googlesource.com/c/chromium/src/+/2184772 :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I071780659e27f3be579db6269ae1b3df45256222 --- meta-webos/recipes-webos/chromium/webruntime_91.bb | 4 ---- meta-webos/recipes-webos/chromium/webruntime_94.bb | 4 ---- 2 files changed, 8 deletions(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime_91.bb b/meta-webos/recipes-webos/chromium/webruntime_91.bb index b635ab1af..c336963e1 100644 --- a/meta-webos/recipes-webos/chromium/webruntime_91.bb +++ b/meta-webos/recipes-webos/chromium/webruntime_91.bb @@ -20,10 +20,6 @@ PACKAGECONFIG[google_ozone_wayland] = "import(\"//neva/gow.gn\")" PACKAGECONFIG[intel_ozone_wayland] = "import(\"//neva/iow.gn\")" PACKAGECONFIG += "intel_ozone_wayland" -# TODO: get rid of this when it will be removed on RP side from -# meta-lg-webos/meta-webos/recipes-webos/chromium/webruntime.inc -GN_ARGS_remove = "linux_use_bundled_binutils=false" - # TODO: get rid of this when (and if) we adopt GPU info collector patch GN_ARGS_remove = "use_webos_gpu_info_collector=true" # TODO: get rid of this when we adopt system debugger patch diff --git a/meta-webos/recipes-webos/chromium/webruntime_94.bb b/meta-webos/recipes-webos/chromium/webruntime_94.bb index 3df77cc9e..28fb85a9f 100644 --- a/meta-webos/recipes-webos/chromium/webruntime_94.bb +++ b/meta-webos/recipes-webos/chromium/webruntime_94.bb @@ -22,10 +22,6 @@ PACKAGECONFIG += "google_ozone_wayland" PACKAGECONFIG[intel_ozone_wayland] = "import(\"//neva/iow.gn\")" PACKAGECONFIG += "intel_ozone_wayland" -# TODO: get rid of this when it will be removed on RP side from -# meta-lg-webos/meta-webos/recipes-webos/chromium/webruntime.inc -GN_ARGS_remove = "linux_use_bundled_binutils=false" - # TODO: get rid of this when (and if) we adopt GPU info collector patch GN_ARGS_remove = "use_webos_gpu_info_collector=true" # TODO: get rid of this when we adopt system debugger patch From e2692796374064c17ae3797d56e26cb9cb716db1 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 22 Feb 2022 16:10:43 +0000 Subject: [PATCH 0339/2022] webruntime: remove few more unused GN_ARGS :Release Notes: It's not longer in webruntime.inc, so it doesn't need to be removed here. :Detailed Notes: third_party/binutils with linux_use_bundled_binutils option was removed from chromium in 2020: https://chromium-review.googlesource.com/c/chromium/src/+/2184772 :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: If6a391661e7f1828de8ef6f9c487679e6027cacc --- meta-webos/recipes-webos/chromium/webruntime.inc | 2 -- meta-webos/recipes-webos/chromium/webruntime_91.bb | 7 ------- meta-webos/recipes-webos/chromium/webruntime_94.bb | 7 ------- 3 files changed, 16 deletions(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime.inc b/meta-webos/recipes-webos/chromium/webruntime.inc index a072b2143..fb18b6f57 100644 --- a/meta-webos/recipes-webos/chromium/webruntime.inc +++ b/meta-webos/recipes-webos/chromium/webruntime.inc @@ -74,8 +74,6 @@ GN_ARGS_append = " \ use_local_storage_tracker=true\ use_ozone=true\ use_pmlog=true\ - use_system_debugger_abort=true\ - use_xkbcommon=true\ ${WAM_DEMO_CONFARGS}\ ${PACKAGECONFIG_CONFARGS}\ " diff --git a/meta-webos/recipes-webos/chromium/webruntime_91.bb b/meta-webos/recipes-webos/chromium/webruntime_91.bb index c336963e1..02d97444c 100644 --- a/meta-webos/recipes-webos/chromium/webruntime_91.bb +++ b/meta-webos/recipes-webos/chromium/webruntime_91.bb @@ -14,17 +14,10 @@ PACKAGECONFIG[debug-blink] = "blink_symbol_level=2,blink_symbol_level=1" PACKAGECONFIG[v8_lite] = "v8_enable_lite_mode=true,v8_enable_lite_mode=false" GN_ARGS_append = " use_x11=false" -GN_ARGS_remove = "ozone_platform_wayland_external=true" -GN_ARGS_remove = "use_xkbcommon=true" PACKAGECONFIG[google_ozone_wayland] = "import(\"//neva/gow.gn\")" PACKAGECONFIG[intel_ozone_wayland] = "import(\"//neva/iow.gn\")" PACKAGECONFIG += "intel_ozone_wayland" -# TODO: get rid of this when (and if) we adopt GPU info collector patch -GN_ARGS_remove = "use_webos_gpu_info_collector=true" -# TODO: get rid of this when we adopt system debugger patch -GN_ARGS_remove = "use_system_debugger_abort=true" - GN_ARGS_append = " \ libdir=\"${libdir}\"\ includedir=\"${includedir}\"\ diff --git a/meta-webos/recipes-webos/chromium/webruntime_94.bb b/meta-webos/recipes-webos/chromium/webruntime_94.bb index 28fb85a9f..83d32444e 100644 --- a/meta-webos/recipes-webos/chromium/webruntime_94.bb +++ b/meta-webos/recipes-webos/chromium/webruntime_94.bb @@ -15,18 +15,11 @@ PACKAGECONFIG[v8_lite] = "v8_enable_lite_mode=true,v8_enable_lite_mode=false" GN_ARGS_append = " neva_dcheck_always_on=true" GN_ARGS_append = " use_x11=false" -GN_ARGS_remove = "ozone_platform_wayland_external=true" -GN_ARGS_remove = "use_xkbcommon=true" PACKAGECONFIG[google_ozone_wayland] = "import(\"//neva/gow.gn\")" PACKAGECONFIG += "google_ozone_wayland" PACKAGECONFIG[intel_ozone_wayland] = "import(\"//neva/iow.gn\")" PACKAGECONFIG += "intel_ozone_wayland" -# TODO: get rid of this when (and if) we adopt GPU info collector patch -GN_ARGS_remove = "use_webos_gpu_info_collector=true" -# TODO: get rid of this when we adopt system debugger patch -GN_ARGS_remove = "use_system_debugger_abort=true" - GN_ARGS_append = " \ libdir=\"${libdir}\"\ includedir=\"${includedir}\"\ From b81148d6c5f58c7f8e9cb902f3ca9619607068cb Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 22 Feb 2022 16:21:19 +0000 Subject: [PATCH 0340/2022] webruntime: use empty PACKAGECONFIG as default :Release Notes: Instead of 'neva-media' and then appending 'gstreamer umediaserver gav' for hardware and then having to use _remove operator for qemux86, qemux86-64, raspberrypi3, raspberrypi3-64 to remove all this, it's safer to add PACKAGECONFIG_MEDIA variable and let MACHINEs/DISTROs override (without using _remove operator which should be last-resort) :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I346260768d835ded29ecc73ff2e2195d019eaae5 --- .../recipes-webos/chromium/webruntime_%.bbappend | 11 ++++------- meta-webos/recipes-webos/chromium/webruntime.inc | 6 ++++-- meta-webos/recipes-webos/chromium/webruntime_91.bb | 5 ----- meta-webos/recipes-webos/chromium/webruntime_94.bb | 6 ------ 4 files changed, 8 insertions(+), 20 deletions(-) diff --git a/meta-webos-raspberrypi/recipes-webos/chromium/webruntime_%.bbappend b/meta-webos-raspberrypi/recipes-webos/chromium/webruntime_%.bbappend index 19a476f76..6b511527e 100644 --- a/meta-webos-raspberrypi/recipes-webos/chromium/webruntime_%.bbappend +++ b/meta-webos-raspberrypi/recipes-webos/chromium/webruntime_%.bbappend @@ -1,6 +1,6 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. -EXTENDPRAUTO_append_rpi = "webosrpi9" +EXTENDPRAUTO_append_rpi = "webosrpi10" modify_run_app_shell_append_rpi() { sed -i 's/# Setup 4Mb limitation mse audio buffer size/# Setup 2Mb limitation mse audio buffer size/' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} @@ -9,8 +9,5 @@ modify_run_app_shell_append_rpi() { sed -i 's/export MSE_VIDEO_BUFFER_SIZE_LIMIT=52428800/export MSE_VIDEO_BUFFER_SIZE_LIMIT=15728640/' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} } -PACKAGECONFIG_remove_raspberrypi3 = "gstreamer umediaserver neva-media gav" -PACKAGECONFIG_remove_raspberrypi3-64 = "gstreamer umediaserver neva-media gav" - -PACKAGECONFIG_NEVA_WEBRTC ?= "neva-webrtc" -PACKAGECONFIG_append_raspberrypi4 = " ${PACKAGECONFIG_NEVA_WEBRTC}" +PACKAGECONFIG_MEDIA_raspberrypi3 = "" +PACKAGECONFIG_NEVA_WEBRTC_raspberrypi3 = "" diff --git a/meta-webos/recipes-webos/chromium/webruntime.inc b/meta-webos/recipes-webos/chromium/webruntime.inc index fb18b6f57..896691f3c 100644 --- a/meta-webos/recipes-webos/chromium/webruntime.inc +++ b/meta-webos/recipes-webos/chromium/webruntime.inc @@ -45,8 +45,10 @@ WEBOS_SYSTEM_BUS_SKIP_DO_TASKS = "1" WEBOS_SYSTEM_BUS_FILES_LOCATION = "${S}/files/sysbus" WEBOS_SYSTEM_BUS_MANIFEST_TYPE = "PASS" -PACKAGECONFIG ?= "neva-media" -PACKAGECONFIG_append_hardware = " gstreamer umediaserver gav" +PACKAGECONFIG_NEVA_WEBRTC ?= "neva-webrtc" +PACKAGECONFIG_MEDIA ?= "neva-media gstreamer umediaserver gav" +PACKAGECONFIG ?= "" +PACKAGECONFIG_append_hardware = " ${PACKAGECONFIG_MEDIA} ${PACKAGECONFIG_NEVA_WEBRTC}" PACKAGECONFIG[gstreamer] = "use_gst_media=true enable_webm_video_codecs=false,use_gst_media=false,g-media-pipeline" PACKAGECONFIG[umediaserver] = ",,umediaserver" # Options to enable debug build. Add this PACKAGECONFIG to webos-local.conf to enable debug build diff --git a/meta-webos/recipes-webos/chromium/webruntime_91.bb b/meta-webos/recipes-webos/chromium/webruntime_91.bb index 02d97444c..437efeddd 100644 --- a/meta-webos/recipes-webos/chromium/webruntime_91.bb +++ b/meta-webos/recipes-webos/chromium/webruntime_91.bb @@ -26,9 +26,4 @@ GN_ARGS_append = " \ use_neva_media_player_camera=true\ " -# TODO: qemux build fails -PACKAGECONFIG_remove_qemux86 = "gstreamer umediaserver neva-media gav" -PACKAGECONFIG_remove_qemux86-64 = "gstreamer umediaserver neva-media gav" -#END TODO - TUNE_FEATURES_remove_raspberrypi4-64 = "crypto" diff --git a/meta-webos/recipes-webos/chromium/webruntime_94.bb b/meta-webos/recipes-webos/chromium/webruntime_94.bb index 83d32444e..160d962fd 100644 --- a/meta-webos/recipes-webos/chromium/webruntime_94.bb +++ b/meta-webos/recipes-webos/chromium/webruntime_94.bb @@ -27,9 +27,3 @@ GN_ARGS_append = " \ enable_js_type_check=false\ system_wayland_scanner_path=\"${RECIPE_SYSROOT_NATIVE}/usr/bin/wayland-scanner\" \ " - -# TODO: qemux build fails -PACKAGECONFIG_remove_qemux86 = "gstreamer umediaserver neva-media gav" -PACKAGECONFIG_remove_qemux86-64 = "gstreamer umediaserver neva-media gav" -#END TODO - From 2eb3d9f5c7debc90ddec40f0ae7b90c847e4eb8c Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 22 Feb 2022 16:25:33 +0000 Subject: [PATCH 0341/2022] webruntime: remove unused DEPENDS changes for raspberrypi4 :Release Notes: :Detailed Notes: This doesn't do anything useful since: http://gpro.lge.com/250846 commit 37ecf8884ccc18c31b41a1a7e384f27748bc379f Author: Martin Jansa Date: Wed Aug 7 09:40:40 2019 +0000 mesa=v18.1.9 wayland=v1.16.0 llvm=v6.0 when xproto was replaced with xorgproto in DEPENDS. The change which added it in: http://gpro.lge.com/251447 doesn't make sense for webOS OSE. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: Ifad9e1d95b8aa858b754972444df13899f1fa7da --- meta-webos/recipes-webos/chromium/webruntime.inc | 5 ----- 1 file changed, 5 deletions(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime.inc b/meta-webos/recipes-webos/chromium/webruntime.inc index 896691f3c..2d57fb05d 100644 --- a/meta-webos/recipes-webos/chromium/webruntime.inc +++ b/meta-webos/recipes-webos/chromium/webruntime.inc @@ -19,11 +19,6 @@ inherit webos_system_bus DEPENDS = "virtual/gettext wayland wayland-native luna-service2 pixman freetype fontconfig openssl pango cairo icu webos-wayland-extensions libxkbcommon libexif dbus pciutils udev libcap alsa-lib virtual/egl elfutils-native libdrm atk gperf-native gconf libwebosi18n bison-native xorgproto nss nspr curl nspr-native nss-native pmloglib glib-2.0-native python-six-native python-beautifulsoup4-native python-lxml-native python-html5lib-native python-webencodings-native" -# Build for raspberrypi4 -# Mesa 19.1.1 uses xorgproto instead of xproto series. -DEPENDS_remove_raspberrypi4 = " xproto" -DEPENDS_append_raspberrypi4 = " xorgproto" - INC_PR = "r52" # Enable this in webos-local.conf or in recipe to build DEPLOY_CHROMEDRIVER ?= "false" From 02dd6838d21b9bf567c69432c3ab3dbaf13646eb Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 1 Apr 2021 04:09:30 -0700 Subject: [PATCH 0342/2022] meta-webos-virtualization: remove duplicated PNBLACKLIST entries :Release Notes: Re-apply this as it was already applied as: 9f0ab1ab13a0be8ba6c035ded5c27b3ac9c1c778 http://gpro.lge.com/c/webos-pro/meta-lg-webos/+/307627 then accidentally restored in: 8663be8fc8d68395ee4f9e7a8a0c9a43bba2eb26 http://gpro.lge.com/c/webos-pro/meta-lg-webos/+/315359 :Detailed Notes: Drop PNBLACKLIST for nagios-* and ipxe as they are already listed in meta-webos/conf/distro/include/webos-recipe-blacklist.inc with conditional: meta-webos/conf/distro/include/webos-recipe-blacklist.inc:PNBLACKLIST[nagios-core] ?= "${@bb.utils.contains('BBFILE_COLLECTIONS', 'webserver', '', 'Depends on apache2 from meta-webserver which is not included', d)}" meta-webos/conf/distro/include/webos-recipe-blacklist.inc:PNBLACKLIST[nagios-plugins] ?= "${@bb.utils.contains('BBFILE_COLLECTIONS', 'webserver', '', 'Depends on nagios-core which depends on apache2 from meta-webserver which is not included', d)}" meta-webos/conf/distro/include/webos-recipe-blacklist.inc:PNBLACKLIST[nagios-nrpe] ?= "${@bb.utils.contains('BBFILE_COLLECTIONS', 'webserver', '', 'Depends on nagios-core which depends on apache2 from meta-webserver which is not included', d)}" meta-webos/conf/distro/include/webos-recipe-blacklist.inc:PNBLACKLIST[nagios-nsca] ?= "${@bb.utils.contains('BBFILE_COLLECTIONS', 'webserver', '', 'Rdepends on nagios-base provided by nagios-core which depends on apache2 from meta-webserver which is not included' , d)}" and combine ipxe conditional in webos-recipe-blacklist.inc: meta-webos/conf/distro/include/webos-recipe-blacklist.inc:PNBLACKLIST[ipxe] ?= "Doesn't match the COMPATIBLE_HOST restriction from syslinux: syslinux was skipped: incompatible with host arm-webos-linux-gnueabi (not in COMPATIBLE_HOST)" meta-webos/conf/distro/include/webos-recipe-blacklist.inc:# meta-virtualization/recipes-extended/ipxe/ipxe_git.bb:do_compile meta-webos/conf/distro/include/webos-recipe-blacklist.inc:PNBLACKLIST[ipxe] ?= "ERROR: ipxe-gitrAUTOINC+64b4452bca-r0 do_compile: Function failed: do_compile: Makefile.housekeeping:111: GNU gold is unsuitable for building iPXE" :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [PLAT-139325] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: Ibabce3ce2b39c543e1c260dace069623e13795e0 --- meta-webos-virtualization/conf/layer.conf | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/meta-webos-virtualization/conf/layer.conf b/meta-webos-virtualization/conf/layer.conf index af8be6d5e..8ed80969d 100644 --- a/meta-webos-virtualization/conf/layer.conf +++ b/meta-webos-virtualization/conf/layer.conf @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. BBPATH ?= "" # We have a conf and classes directory, add to BBPATH @@ -17,10 +17,4 @@ LAYERDEPENDS_meta-webos-virtualization = "\ meta-webos \ " -PNBLACKLIST[ipxe] ?= "Depends on syslinux which isn't available for arm COMPATIBLE_HOST" -PNBLACKLIST[nagios-core] ?= "Depends on apache2 from meta-webserver layer which we don't include" -PNBLACKLIST[nagios-plugins] ?= "Depends on blacklisted nagios-core" -PNBLACKLIST[nagios-nrpe] ?= "Depends on blacklisted nagios-core" -PNBLACKLIST[nagios-nsca] ?= "Depends on blacklisted nagios-core" - PREFERRED_VERSION_python3-docker-compose ?= "1.21.2" From 80d578862fd0c4758cbb368241b942faf882bafb Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 7 Feb 2022 10:28:38 -0800 Subject: [PATCH 0343/2022] g-media-pipeline: remove unused .patch file :Release Notes: It was removed from SRC_URI in: gstreamer1.0-plugins-bad=webosrpi6 g-media-pipeline=21.gav.26-r10 but the file wasn't removed. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I2115ed9ab2c65918593ae484ac7ac6a8291ce678 --- ...t.cpp-include-string-to-fix-build-wi.patch | 28 ------------------- 1 file changed, 28 deletions(-) delete mode 100644 meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline/0001-LunaServiceClient.cpp-include-string-to-fix-build-wi.patch diff --git a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline/0001-LunaServiceClient.cpp-include-string-to-fix-build-wi.patch b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline/0001-LunaServiceClient.cpp-include-string-to-fix-build-wi.patch deleted file mode 100644 index 1b4db3a83..000000000 --- a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline/0001-LunaServiceClient.cpp-include-string-to-fix-build-wi.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 9fd26a30166db09600e4c72a96b60f7adf2e4630 Mon Sep 17 00:00:00 2001 -From: Martin Jansa -Date: Fri, 15 May 2020 14:06:31 +0000 -Subject: [PATCH] LunaServiceClient.cpp: include string to fix build with - gcc-10 - -* fixes: -g-media-pipeline/1.0.0-21.gav.5-r6/git/src/lunaserviceclient/LunaServiceClient.cpp:27:13: error: variable 'std::string gmp::kServiceName' has initializer but incomplete type -g-media-pipeline/1.0.0-21.gav.5-r6/git/src/lunaserviceclient/LunaServiceClient.cpp:37:15: error: variable 'std::string service_name' has initializer but incomplete type -g-media-pipeline/1.0.0-21.gav.5-r6/git/src/lunaserviceclient/LunaServiceClient.cpp:37:50: error: 'to_string' is not a member of 'std'; did you mean 'u32string'? - -Signed-off-by: Martin Jansa ---- - src/lunaserviceclient/LunaServiceClient.cpp | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/lunaserviceclient/LunaServiceClient.cpp b/src/lunaserviceclient/LunaServiceClient.cpp -index 9a1a890..326f086 100644 ---- a/src/lunaserviceclient/LunaServiceClient.cpp -+++ b/src/lunaserviceclient/LunaServiceClient.cpp -@@ -10,6 +10,7 @@ - // LICENSE@@@ - - #include -+#include - - #include "LunaServiceClient.h" - #include "log.h" From 5f15dc34ae9d89e1e4ac145c054174489ac9ea7b Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sat, 14 Nov 2020 00:48:40 -0800 Subject: [PATCH 0344/2022] perf: fix build-deps QA issue with bash :Release Notes: :Detailed Notes: bash added to another perf package for v5.12-rc5+ kernels: https://git.openembedded.org/openembedded-core/commit/?h=hardknott&id=159cdb159ad0e9d3ed73cfc07f9acd5c0b608e7b ERROR: QA Issue: perf-tests rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] now backported to dunfell as well in: https://git.openembedded.org/openembedded-core/commit/?h=dunfell&id=0cfc604b48155ed4129bcc056610f32caf1a93b4 :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: Ic7e7b7af5edb622331854a122fe25d13c48aea99 --- meta-webos/recipes-kernel/perf/perf.bbappend | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-kernel/perf/perf.bbappend b/meta-webos/recipes-kernel/perf/perf.bbappend index 5713bb9cf..880f91a4c 100644 --- a/meta-webos/recipes-kernel/perf/perf.bbappend +++ b/meta-webos/recipes-kernel/perf/perf.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO_append = "webos2" @@ -11,6 +11,8 @@ RDEPENDS_${PN}-archive_append_class-target = " ${VIRTUAL-RUNTIME_bash}" RDEPENDS_${PN}-archive_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" RDEPENDS_${PN}-perl_append_class-target = " ${VIRTUAL-RUNTIME_bash}" RDEPENDS_${PN}-perl_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS_${PN}-tests_append_class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS_${PN}-tests_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" # man-db is blacklisted in meta-webos RDEPENDS_${PN}-doc_remove = "man" From 3bfb1e706960296a7a023b2a95fb7ee996ff50ce Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 6 Apr 2022 19:16:41 +0000 Subject: [PATCH 0345/2022] Revert "libsndfile Fix CVE-2017-14245 sfe_copy_data_fp" :Release Notes: This reverts commit ae858f10dd10c6450395bf5acfe5423a6bd00118. :Detailed Notes: Better fix is already included in oe-core/dunfell since: commit a5625df8031985e9c60c34068a4a01c36da40eec Author: Ross Burton Date: Tue Mar 5 16:29:59 2019 +0000 libsndfile1: update security patches Remove CVE-2017-14245-14246.patch, fix rejected upstream as it doesn't solve the underlying issue. Instead 0001-a-ulaw-fix-multiple-buffer-overflows-432 also solves CVE-2017-14245 and CVE-2017-14246 properly. Add patches for CVE-2017-12562 and CVE-2018-19758. Refresh CVE-2018-13139.patch. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I741a42161ae8f68114d3093dd31923aa36adc6cb --- .../libsndfile1/CVE-2017-14245.patch | 118 ------------------ .../libsndfile/libsndfile1_%.bbappend | 8 -- 2 files changed, 126 deletions(-) delete mode 100644 meta-webos/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-14245.patch delete mode 100644 meta-webos/recipes-multimedia/libsndfile/libsndfile1_%.bbappend diff --git a/meta-webos/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-14245.patch b/meta-webos/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-14245.patch deleted file mode 100644 index 963f69a7c..000000000 --- a/meta-webos/recipes-multimedia/libsndfile/libsndfile1/CVE-2017-14245.patch +++ /dev/null @@ -1,118 +0,0 @@ -From eefeb1f16754b1609fe8c12213dfa6c42c402b26 Mon Sep 17 00:00:00 2001 -From: Fabian Greffrath -Date: Wed, 27 Sep 2017 14:46:18 +0200 -Subject: [PATCH] sfe_copy_data_fp: check value of "max" variable for being - normal - -and check elements of the data[] array for being finite. - -Both checks use functions provided by the header as declared -by the C99 standard. - -- add - -Fixes #317 -CVE-2017-14245 -CVE-2017-14246 ---- - programs/common.c | 20 ++++++++++++++++---- - programs/common.h | 2 +- - programs/sndfile-convert.c | 6 +++++- - 3 files changed, 22 insertions(+), 6 deletions(-) - -diff --git a/programs/common.c b/programs/common.c -index 3fc4e3d5..282ee33b 100644 ---- a/programs/common.c -+++ b/programs/common.c -@@ -36,6 +36,7 @@ - #include - #include - #include -+#include - - #include - -@@ -45,7 +46,7 @@ - - #define MIN(x, y) ((x) < (y) ? (x) : (y)) - --void -+int - sfe_copy_data_fp (SNDFILE *outfile, SNDFILE *infile, int channels, int normalize) - { static double data [BUFFER_LEN], max ; - int frames, readcount, k ; -@@ -54,6 +55,8 @@ sfe_copy_data_fp (SNDFILE *outfile, SNDFILE *infile, int channels, int normalize - readcount = frames ; - - sf_command (infile, SFC_CALC_SIGNAL_MAX, &max, sizeof (max)) ; -+ if (!isnormal (max)) /* neither zero, subnormal, infinite, nor NaN */ -+ return 1 ; - - if (!normalize && max < 1.0) - { while (readcount > 0) -@@ -67,12 +70,16 @@ sfe_copy_data_fp (SNDFILE *outfile, SNDFILE *infile, int channels, int normalize - while (readcount > 0) - { readcount = sf_readf_double (infile, data, frames) ; - for (k = 0 ; k < readcount * channels ; k++) -- data [k] /= max ; -+ { data [k] /= max ; -+ -+ if (!isfinite (data [k])) /* infinite or NaN */ -+ return 1; -+ } - sf_writef_double (outfile, data, readcount) ; - } ; - } ; - -- return ; -+ return 0 ; - } /* sfe_copy_data_fp */ - - void -@@ -252,7 +259,12 @@ sfe_apply_metadata_changes (const char * filenames [2], const METADATA_INFO * in - - /* If the input file is not the same as the output file, copy the data. */ - if ((infileminor == SF_FORMAT_DOUBLE) || (infileminor == SF_FORMAT_FLOAT)) -- sfe_copy_data_fp (outfile, infile, sfinfo.channels, SF_FALSE) ; -+ { if (sfe_copy_data_fp (outfile, infile, sfinfo.channels, SF_FALSE) != 0) -+ { printf ("Error : Not able to decode input file '%s'\n", filenames [0]) ; -+ error_code = 1 ; -+ goto cleanup_exit ; -+ } ; -+ } - else - sfe_copy_data_int (outfile, infile, sfinfo.channels) ; - } ; -diff --git a/programs/common.h b/programs/common.h -index eda2d7d7..986277ee 100644 ---- a/programs/common.h -+++ b/programs/common.h -@@ -62,7 +62,7 @@ typedef SF_BROADCAST_INFO_VAR (2048) SF_BROADCAST_INFO_2K ; - - void sfe_apply_metadata_changes (const char * filenames [2], const METADATA_INFO * info) ; - --void sfe_copy_data_fp (SNDFILE *outfile, SNDFILE *infile, int channels, int normalize) ; -+int sfe_copy_data_fp (SNDFILE *outfile, SNDFILE *infile, int channels, int normalize) ; - - void sfe_copy_data_int (SNDFILE *outfile, SNDFILE *infile, int channels) ; - -diff --git a/programs/sndfile-convert.c b/programs/sndfile-convert.c -index dff7f793..e6de5935 100644 ---- a/programs/sndfile-convert.c -+++ b/programs/sndfile-convert.c -@@ -335,7 +335,11 @@ main (int argc, char * argv []) - || (outfileminor == SF_FORMAT_DOUBLE) || (outfileminor == SF_FORMAT_FLOAT) - || (infileminor == SF_FORMAT_DOUBLE) || (infileminor == SF_FORMAT_FLOAT) - || (infileminor == SF_FORMAT_VORBIS) || (outfileminor == SF_FORMAT_VORBIS)) -- sfe_copy_data_fp (outfile, infile, sfinfo.channels, normalize) ; -+ { if (sfe_copy_data_fp (outfile, infile, sfinfo.channels, normalize) != 0) -+ { printf ("Error : Not able to decode input file %s.\n", infilename) ; -+ return 1 ; -+ } ; -+ } - else - sfe_copy_data_int (outfile, infile, sfinfo.channels) ; - --- -2.17.1 - diff --git a/meta-webos/recipes-multimedia/libsndfile/libsndfile1_%.bbappend b/meta-webos/recipes-multimedia/libsndfile/libsndfile1_%.bbappend deleted file mode 100644 index b3e29ccee..000000000 --- a/meta-webos/recipes-multimedia/libsndfile/libsndfile1_%.bbappend +++ /dev/null @@ -1,8 +0,0 @@ -# Copyright (c) 2021 LG Electronics, Inc. - -EXTENDPRAUTO_append = "webos1" - -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" - -SRC_URI += "file://CVE-2017-14245.patch" - From 750dace815b2abd022bc81f37842c0876b49727f Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 7 Apr 2022 10:34:26 +0000 Subject: [PATCH 0346/2022] packagegroup-webos-extended: fix parsing for raspberrypi3(-64) MACHINEs :Release Notes: :Detailed Notes: Fixes: ERROR: Nothing RPROVIDES '${CECSERVICE}' (but /data001/jenkins/gecko/webos_raspberrypi3-64/build/meta-lg-webos/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb RDEPENDS on or otherwise requires it) NOTE: Runtime target '${CECSERVICE}' is unbuildable, removing... Missing or unbuildable dependency chain was: ['${CECSERVICE}'] NOTE: Runtime target 'packagegroup-webos-extended' is unbuildable, removing... Missing or unbuildable dependency chain was: ['packagegroup-webos-extended', '${CECSERVICE}'] ERROR: Required build target 'webos-image-devel' has no buildable providers. Missing or unbuildable dependency chain was: ['webos-image-devel', 'packagegroup-webos-extended', '${CECSERVICE}'] :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I633ef51022893707986ad5d3e134316d14fa6f8c --- .../packagegroups/packagegroup-webos-extended.bbappend | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend index 00f22162e..b6995ffc7 100644 --- a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend +++ b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend @@ -10,13 +10,12 @@ MEDIA_append_rpi = " \ # Until build issues caused by PLAT-44962 are fixed in PLAT-45700 MEDIA_raspberrypi3-64 = "" +CECSERVICE ?= "" +# CEC service functionality is supported only for webOS OSE rpi4-64 CECSERVICE_raspberrypi4-64 = " \ com.webos.service.cec \ " -# CEC service functionality is supported only for webOS OSE rpi4-64 -CECSERVICE_raspberrypi4 = "" - RDEPENDS_${PN}_append_rpi = " \ ${CECSERVICE} \ com.webos.service.audiofocusmanager \ From 57e8179b8622e4bc5e32dde90ccd13b5eea9d2ec Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 7 Apr 2022 11:17:28 +0000 Subject: [PATCH 0347/2022] ostree-initrd: update patch file to apply :Release Notes: init.sh was reformatted to use spaces instead of tabs in: https://github.com/uptane/meta-updater/commit/73bc63028975d59050642302783619b2e46de373#diff-7cae258240070d65ea6b836645076b63575190f4215eba4f6afb22c7d0e87f8c adjust patch to apply. :Detailed Notes: Fixes: ERROR: ostree-initrd-4-r0 do_patch: Applying patch '0001-Speed-up-mount-when-rather-than-just-wait.patch' on target directory '/data001/jenkins/gecko/webos_raspberrypi4-64/build/BUILD/work/all-webos-linux/ostree-initrd/4-r0' Command Error: 'quilt --quiltrc /data001/jenkins/gecko/webos_raspberrypi4-64/build/BUILD/work/all-webos-linux/ostree-initrd/4-r0/recipe-sysroot-native/etc/quiltrc push' exited with 0 Output: Applying patch 0001-Speed-up-mount-when-rather-than-just-wait.patch patching file init.sh Hunk #1 FAILED at 55. 1 out of 1 hunk FAILED -- rejects in file init.sh Patch 0001-Speed-up-mount-when-rather-than-just-wait.patch does not apply (enforce with -f) ERROR: Logfile of failure stored in: /data001/jenkins/gecko/webos_raspberrypi4-64/build/BUILD/work/all-webos-linux/ostree-initrd/4-r0/temp/log.do_patch.28670 NOTE: recipe ostree-initrd-4-r0: task do_patch: Failed ERROR: Task (/data001/jenkins/gecko/webos_raspberrypi4-64/build/meta-updater/recipes-sota/ostree-initrd/ostree-initrd.bb:do_patch) failed with exit code '1' :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I9d65a144ccc1bc96e1fd2e446c69a1e817886158 --- ...-up-mount-when-rather-than-just-wait.patch | 33 +++++++++---------- 1 file changed, 15 insertions(+), 18 deletions(-) diff --git a/meta-webos-updater/recipes-sota/ostree-initrd/ostree-initrd/0001-Speed-up-mount-when-rather-than-just-wait.patch b/meta-webos-updater/recipes-sota/ostree-initrd/ostree-initrd/0001-Speed-up-mount-when-rather-than-just-wait.patch index 8ffc2c2f2..cd7536139 100644 --- a/meta-webos-updater/recipes-sota/ostree-initrd/ostree-initrd/0001-Speed-up-mount-when-rather-than-just-wait.patch +++ b/meta-webos-updater/recipes-sota/ostree-initrd/ostree-initrd/0001-Speed-up-mount-when-rather-than-just-wait.patch @@ -1,41 +1,38 @@ -From 7fe379dcc787b1bb2ddd00c3584dc0184f85ce6a Mon Sep 17 00:00:00 2001 +From efdf9bc04f13f34b947932d0e58e56bd12750ed8 Mon Sep 17 00:00:00 2001 From: JeongBong Seo Date: Wed, 18 Mar 2020 10:41:22 +0900 -Subject: Speed-up mount when rather than just wait +Subject: [PATCH] Speed-up mount when rather than just wait --- init.sh | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/init.sh b/init.sh -index 4818a07..dd667d7 100644 +index e599451..0aa5942 100644 --- a/init.sh +++ b/init.sh -@@ -55,13 +55,17 @@ grep -q smackfs /proc/filesystems && { +@@ -54,13 +54,17 @@ grep -q smackfs /proc/filesystems && { mkdir -p /sysroot ostree_sysroot=$(get_ostree_sysroot) -mount "$ostree_sysroot" /sysroot || { -- # The SD card in the R-Car M3 takes a bit of time to come up -- # Retry the mount if it fails the first time -- log_info "Mounting $ostree_sysroot failed, waiting 5s for the device to be available..." -- sleep 5 -- mount "$ostree_sysroot" /sysroot || bail_out "Unable to mount $ostree_sysroot as physical sysroot" +- # The SD card in the R-Car M3 takes a bit of time to come up +- # Retry the mount if it fails the first time +- log_info "Mounting $ostree_sysroot failed, waiting 5s for the device to be available..." +- sleep 5 +- mount "$ostree_sysroot" /sysroot || bail_out "Unable to mount $ostree_sysroot as physical sysroot" -} +tryLimit=5 +echo "Try to mount /sysroot" +while [ "$tryLimit" -gt 0 ] +do -+ mount "$ostree_sysroot" /sysroot && break -+ echo "Failed to mount /sysroot, retry more $tryLimit times" -+ tryLimit=$(( $tryLimit - 1)) -+ if [ "$tryLimit" -lt 3 ]; then -+ sleep 1 -+ fi ++ mount "$ostree_sysroot" /sysroot && break ++ echo "Failed to mount /sysroot, retry more $tryLimit times" ++ tryLimit=$(( $tryLimit - 1)) ++ if [ "$tryLimit" -lt 3 ]; then ++ sleep 1 ++ fi +done ostree-prepare-root /sysroot --- -2.17.1 - From 23e3fec92da8b8a3b632013d39fd9d5cb5451d86 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 6 Apr 2022 11:39:29 +0000 Subject: [PATCH 0348/2022] sstate.bbclass: remove :Release Notes: Issue with RO mirrors was already resolved in upstream version. :Detailed Notes: The change which introduced this bbclass didn't explain at all why there is webos_deploy inherit added in this version which causes every single recipe to have do_webos_deploy_fixup task which doesn't make any sense especially for recipes which don't even have do_deploy task like: NOTE: recipe pigz-native-2.4-r0: task do_webos_deploy_fixup: Succeeded :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I8c5f763d8cc50b685e1397b94b563c545862ba27 --- meta-webos/classes/sstate.bbclass | 111 ------------------------------ 1 file changed, 111 deletions(-) delete mode 100644 meta-webos/classes/sstate.bbclass diff --git a/meta-webos/classes/sstate.bbclass b/meta-webos/classes/sstate.bbclass deleted file mode 100644 index 37ca5d09f..000000000 --- a/meta-webos/classes/sstate.bbclass +++ /dev/null @@ -1,111 +0,0 @@ -# Copyright (c) 2021 LG Electronics, Inc. -# -# Intercept the upstream sstate.bbclass -# to fix errors about read-only sstate mirrors. -# - -require ${COREBASE}/meta/classes/sstate.bbclass - -inherit webos_deploy - -sstate_package[vardepsexclude] += "SSTATE_SIG_KEY" - -def sstate_package(ss, d): - import oe.path - - tmpdir = d.getVar('TMPDIR') - - sstatebuild = d.expand("${WORKDIR}/sstate-build-%s/" % ss['task']) - d.setVar("SSTATE_CURRTASK", ss['task']) - bb.utils.remove(sstatebuild, recurse=True) - bb.utils.mkdirhier(sstatebuild) - for state in ss['dirs']: - if not os.path.exists(state[1]): - continue - srcbase = state[0].rstrip("/").rsplit('/', 1)[0] - # Find and error for absolute symlinks. We could attempt to relocate but its not - # clear where the symlink is relative to in this context. We could add that markup - # to sstate tasks but there aren't many of these so better just avoid them entirely. - for walkroot, dirs, files in os.walk(state[1]): - for file in files + dirs: - srcpath = os.path.join(walkroot, file) - if not os.path.islink(srcpath): - continue - link = os.readlink(srcpath) - if not os.path.isabs(link): - continue - if not link.startswith(tmpdir): - continue - bb.error("sstate found an absolute path symlink %s pointing at %s. Please replace this with a relative link." % (srcpath, link)) - bb.debug(2, "Preparing tree %s for packaging at %s" % (state[1], sstatebuild + state[0])) - os.rename(state[1], sstatebuild + state[0]) - - workdir = d.getVar('WORKDIR') - sharedworkdir = os.path.join(d.getVar('TMPDIR'), "work-shared") - for plain in ss['plaindirs']: - pdir = plain.replace(workdir, sstatebuild) - if sharedworkdir in plain: - pdir = plain.replace(sharedworkdir, sstatebuild) - bb.utils.mkdirhier(plain) - bb.utils.mkdirhier(pdir) - os.rename(plain, pdir) - - d.setVar('SSTATE_BUILDDIR', sstatebuild) - d.setVar('SSTATE_INSTDIR', sstatebuild) - - if d.getVar('SSTATE_SKIP_CREATION') == '1': - return - - sstate_create_package = ['sstate_report_unihash', 'sstate_create_package'] - if d.getVar('SSTATE_SIG_KEY'): - sstate_create_package.append('sstate_sign_package') - - for f in (d.getVar('SSTATECREATEFUNCS') or '').split() + \ - sstate_create_package + \ - (d.getVar('SSTATEPOSTCREATEFUNCS') or '').split(): - # All hooks should run in SSTATE_BUILDDIR. - bb.build.exec_func(f, d, (sstatebuild,)) - - # SSTATE_PKG may have been changed by sstate_report_unihash - siginfo = d.getVar('SSTATE_PKG') + ".siginfo" - if not os.path.exists(siginfo): - bb.siggen.dump_this_task(siginfo, d) - else: - try: - os.utime(siginfo, None) - except PermissionError: - pass - except OSError as e: - # Handle read-only file systems gracefully - import errno - if e.errno != errno.EROFS: - raise e - - return - -python sstate_eventhandler() { - d = e.data - writtensstate = d.getVar('SSTATE_CURRTASK') - if not writtensstate: - taskname = d.getVar("BB_RUNTASK")[3:] - spec = d.getVar('SSTATE_PKGSPEC') - swspec = d.getVar('SSTATE_SWSPEC') - if taskname in ["fetch", "unpack", "patch", "populate_lic", "preconfigure"] and swspec: - d.setVar("SSTATE_PKGSPEC", "${SSTATE_SWSPEC}") - d.setVar("SSTATE_EXTRAPATH", "") - d.setVar("SSTATE_CURRTASK", taskname) - siginfo = d.getVar('SSTATE_PKG') + ".siginfo" - if not os.path.exists(siginfo): - bb.siggen.dump_this_task(siginfo, d) - else: - try: - os.utime(siginfo, None) - except PermissionError: - pass - except OSError as e: - # Handle read-only file systems gracefully - import errno - if e.errno != errno.EROFS: - raise e - -} From ae5bf65024bd56b474bb6994745c7850ffba74c8 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 12 Apr 2022 04:48:48 +0000 Subject: [PATCH 0349/2022] ebd=r1 (use https and branch parameter in SRC_URI) :Release Notes: Use https instead of http, like other recipes. Add missing branch parameter. :Detailed Notes: Fixes: WARNING: ebd-1.0.0-3-r0 do_fetch: URL: git://github.com/libbpf/libbpf.git;protocol=http;destsuffix=git/src/cc/libbpf;name=libbpf does not set any branch parameter. The future default branch used by tools and repositories is uncertain and we will therefore soon require this is set in all git urls. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I81cefbfbe13816c2383e1dccf7abe79e539066f6 --- meta-webos/recipes-kernel/ebd/ebd.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-kernel/ebd/ebd.bb b/meta-webos/recipes-kernel/ebd/ebd.bb index 5784e3305..58bbb0b42 100644 --- a/meta-webos/recipes-kernel/ebd/ebd.bb +++ b/meta-webos/recipes-kernel/ebd/ebd.bb @@ -6,7 +6,7 @@ SECTION = "console/tools" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=e3fc50a88d0a364313df4b21ef20c29e" -PR = "r0" +PR = "r1" inherit webos_public_repo inherit webos_enhanced_submissions @@ -16,7 +16,7 @@ WEBOS_GIT_PARAM_BRANCH = "webos-5.4" SRC_URI = " \ ${WEBOS_KERNEL_GIT_REPO_COMPLETE} \ - git://github.com/libbpf/libbpf.git;protocol=http;destsuffix=git/src/cc/libbpf;name=libbpf \ + git://github.com/libbpf/libbpf.git;protocol=https;branch=master;destsuffix=git/src/cc/libbpf;name=libbpf \ file://remove_btf_dependency.patch \ " From ea1ed82e4c0bfc518959c65c458e6a051b527d75 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 22 Apr 2022 12:28:53 +0000 Subject: [PATCH 0350/2022] com.webos.service.memorymanager=r7 (Fix build with gcc-10) :Release Notes: Fixes: http://gecko.lge.com/Errors/Details/384977 :Detailed Notes: Also drop useless FILESEXTRAPATHS :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I87f5a5c6805169cd41e967686eccdcbc44d04964 --- .../com.webos.service.memorymanager.bb | 8 ++--- .../0001-Fix-build-with-gcc-10.patch | 29 +++++++++++++++++++ 2 files changed, 33 insertions(+), 4 deletions(-) create mode 100644 meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager/0001-Fix-build-with-gcc-10.patch diff --git a/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager.bb b/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager.bb index 8702a116c..09fbb09a1 100644 --- a/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager.bb +++ b/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager.bb @@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 glib-2.0-native luna-service2 libpbnjson pmloglib procps" WEBOS_VERSION = "1.0.0-52_57bec9e60709001d9a135076a54b24d4d7646fd7" -PR = "r6" +PR = "r7" inherit webos_component inherit webos_cmake @@ -25,7 +25,7 @@ inherit webos_distro_dep inherit webos_distro_variant_dep inherit webos_public_repo -SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" +SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE} \ + file://0001-Fix-build-with-gcc-10.patch \ +" S = "${WORKDIR}/git" - -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" diff --git a/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager/0001-Fix-build-with-gcc-10.patch b/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager/0001-Fix-build-with-gcc-10.patch new file mode 100644 index 000000000..4cef36772 --- /dev/null +++ b/meta-webos/recipes-webos/com.webos.service.memorymanager/com.webos.service.memorymanager/0001-Fix-build-with-gcc-10.patch @@ -0,0 +1,29 @@ +From 2b1f316404ffcff3995a25b690f077b85a34ad20 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Fri, 22 Apr 2022 10:01:55 +0000 +Subject: [PATCH] Fix build with gcc-10 + +* fixes: +http://gecko.lge.com/Errors/Details/384977 + +qemux86_64-webos-linux/com.webos.service.memorymanager/1.0.0-52-r6/git/src/common/util/Cgroup.cpp: In static member function 'static void Cgroup::iterateDir(std::map, std::__cxx11::list >&, std::string)': +qemux86_64-webos-linux/com.webos.service.memorymanager/1.0.0-52-r6/git/src/common/util/Cgroup.cpp:49:18: error: variable 'std::ifstream ifs' has initializer but incomplete type + 49 | ifstream ifs(procs.c_str()); + | ^~~~~ +--- + src/common/util/Cgroup.cpp | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/common/util/Cgroup.cpp b/src/common/util/Cgroup.cpp +index ad4f4e0..478c4ab 100644 +--- a/src/common/util/Cgroup.cpp ++++ b/src/common/util/Cgroup.cpp +@@ -15,6 +15,8 @@ + + #include "Cgroup.h" + ++#include ++ + #include + #include + From 443efe16eedd9c784427ee6b3e9111d5f71b5cfd Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 19 Apr 2021 14:06:13 -0700 Subject: [PATCH 0351/2022] libpbnjson=r9 (Fix build with glib-2.67.3) :Release Notes: :Detailed Notes: Fixes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [PLAT-141293] Create GPVB with Yocto 3.4 Honister [WRN-20669] honister builds failing with 'template with C linkage' [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I9a640095afaf58860f37346e72834f28973583b2 --- .../recipes-webos/libpbnjson/libpbnjson.bb | 6 +- ...n-t-include-all-c-header-in-extern-C.patch | 57 +++++++++++++++++++ 2 files changed, 61 insertions(+), 2 deletions(-) create mode 100644 meta-webos/recipes-webos/libpbnjson/libpbnjson/0001-pbnjson.h-don-t-include-all-c-header-in-extern-C.patch diff --git a/meta-webos/recipes-webos/libpbnjson/libpbnjson.bb b/meta-webos/recipes-webos/libpbnjson/libpbnjson.bb index b34e64586..6d78fccb6 100644 --- a/meta-webos/recipes-webos/libpbnjson/libpbnjson.bb +++ b/meta-webos/recipes-webos/libpbnjson/libpbnjson.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "Palm's Better Native JSON library" AUTHOR = "Anatolii Sakhnik " @@ -12,7 +12,7 @@ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ DEPENDS = "yajl glib-2.0 gperf-native flex-native lemon-native gmp uriparser boost" WEBOS_VERSION = "2.15.0-4_bcd35ead52db4153cef68bb6e4ef0f7fc7f51510" -PR = "r8" +PR = "r9" inherit webos_component inherit webos_public_repo @@ -40,3 +40,5 @@ SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" BBCLASSEXTEND = "native" + +SRC_URI += "file://0001-pbnjson.h-don-t-include-all-c-header-in-extern-C.patch" diff --git a/meta-webos/recipes-webos/libpbnjson/libpbnjson/0001-pbnjson.h-don-t-include-all-c-header-in-extern-C.patch b/meta-webos/recipes-webos/libpbnjson/libpbnjson/0001-pbnjson.h-don-t-include-all-c-header-in-extern-C.patch new file mode 100644 index 000000000..f880764cd --- /dev/null +++ b/meta-webos/recipes-webos/libpbnjson/libpbnjson/0001-pbnjson.h-don-t-include-all-c-header-in-extern-C.patch @@ -0,0 +1,57 @@ +From b943cd37dd981bbe73ca47fda5766bd1eee07089 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Mon, 19 Apr 2021 20:59:48 +0000 +Subject: [PATCH] pbnjson.h: don't include all c header in 'extern "C"' + +* newer glib-2.0 now includes type_traits from gatomic.h causing: + +cd /jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/build/src/pbnjson_cxx && /jenkins/mjansa/build/ose-github/honister/BUILD/hosttools/g++ -DLIBRARY_NAME=pbnjson_cpp -DPJSONCXX_EXPORT -DPJSONCXX_SHARED -DPJSON_SHARED -DWEBOS_COMPONENT_VERSION=\"2.15.0\" -D_GNU_SOURCE -Dpbnjson_cpp_EXPORTS -I/jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/git/include/public -I/jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/recipe-sysroot-native/usr/lib/pkgconfig/../../../usr/include/glib-2.0 -I/jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/recipe-sysroot-native/usr/lib/pkgconfig/../../../usr/lib/glib-2.0/include -I/jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/recipe-sysroot-native/usr/share/pkgconfig/../../../usr/include/yajl -I/jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/git/include/public/pbnjson -I/jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/git/include/public/pbnjson/c -I/jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/git/include/public/pbnjson/cxx -I/jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/build/src/pbnjson_cxx -I/jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/build/src/pbnjson_cxx/../pbnjson_c -I/jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/git/src/pbnjson_cxx -isystem/jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/recipe-sysroot-native/usr/include -O2 -pipe -Wall -D__STRICT_ANSI__ -pthread -fmessage-length=0 -Wall -Wl,--no-undefined -DNDEBUG -DNDEBUG -g -fPIC -o CMakeFiles/pbnjson_cpp.dir/JValue.cpp.o -c /jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/git/src/pbnjson_cxx/JValue.cpp +In file included from /jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/recipe-sysroot-native/usr/lib/pkgconfig/../../../usr/include/glib-2.0/glib/gatomic.h:31:0, + from /jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/recipe-sysroot-native/usr/lib/pkgconfig/../../../usr/include/glib-2.0/glib/gthread.h:32, + from /jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/recipe-sysroot-native/usr/lib/pkgconfig/../../../usr/include/glib-2.0/glib/gasyncqueue.h:32, + from /jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/recipe-sysroot-native/usr/lib/pkgconfig/../../../usr/include/glib-2.0/glib.h:32, + from /jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/git/include/public/pbnjson/c/jtypes.h:21, + from /jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/git/include/public/pbnjson/c/jschema_types.h:21, + from /jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/git/include/public/pbnjson/c/jschema.h:22, + from /jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/git/include/public/pbnjson/c/jobject.h:28, + from /jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/git/include/public/pbnjson.h:112, + from /jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/git/include/public/pbnjson/cxx/JValue.h:20, + from /jenkins/mjansa/build/ose-github/honister/BUILD/work/x86_64-linux/libpbnjson-native/2.15.0-2-r8/git/src/pbnjson_cxx/JValue.cpp:17: +/usr/include/c++/7/type_traits:68:3: error: template with C linkage + template + ^~~~~~~~ + +* it was moved from gmacros.h in: + https://gitlab.gnome.org/GNOME/glib/-/commit/552b8fd862061e74b5ad2ffe6a700f850a76f797 + and improved in: + https://gitlab.gnome.org/GNOME/glib/-/commit/5b3e4f94b0514d0af605a4f6557def5a023a85f1 + as alternative solution we should be able to define GLIB_VERSION_MIN_REQUIRED + +Signed-off-by: Martin Jansa +--- + include/public/pbnjson.h | 6 ------ + 1 file changed, 6 deletions(-) + +diff --git a/include/public/pbnjson.h b/include/public/pbnjson.h +index f8516ec..4028b15 100644 +--- a/include/public/pbnjson.h ++++ b/include/public/pbnjson.h +@@ -103,9 +103,6 @@ The following examples will show how to use it. + @snippet TestExample.cpp parse stream sax + + */ +-#ifdef __cplusplus +-extern "C" { +-#endif + + #include "pbnjson/c/japi.h" + #include "pbnjson/c/jerror.h" +@@ -115,8 +112,5 @@ extern "C" { + #include "pbnjson/c/jvalue_stringify.h" + #include "pbnjson/c/jquery.h" + +-#ifdef __cplusplus +-} +-#endif + + #endif /* PJSONC_H_ */ From 77f61cf33c78b40392ee21e2e7571d0cc7738df4 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 27 Apr 2021 01:40:17 -0700 Subject: [PATCH 0352/2022] bluetooth-sil-bluez5=r5 (Fix build with glib-2.67.3) :Release Notes: :Detailed Notes: Fixes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [PLAT-141293] Create GPVB with Yocto 3.4 Honister [WRN-20669] honister builds failing with 'template with C linkage' [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: I43fed400d6d7a652fcf344d4692f7fc7c108e47b --- .../bluetooth/bluetooth-sil-bluez5.bb | 4 +- ...visioner.h-don-t-include-freedesktop.patch | 5580 +++++++++++++++++ 2 files changed, 5583 insertions(+), 1 deletion(-) create mode 100644 meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5/0001-bluez5meshadvprovisioner.h-don-t-include-freedesktop.patch diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb index c74313d5b..43268ddcc 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb @@ -18,7 +18,7 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES ??= "" RDEPENDS_${PN} += "${@ bb.utils.contains('WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES', 'FTP', 'bluez5-obex', '', d)}" WEBOS_VERSION = "0.1.0-78_a66bf9ebb7bf1f4fde127742f43393b387fa3a73" -PR = "r4" +PR = "r5" inherit webos_component inherit webos_public_repo @@ -41,3 +41,5 @@ S = "${WORKDIR}/git" # g_print(g_variant_get_type_string(arguments)); # ^ SECURITY_STRINGFORMAT = "" + +SRC_URI += "file://0001-bluez5meshadvprovisioner.h-don-t-include-freedesktop.patch" diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5/0001-bluez5meshadvprovisioner.h-don-t-include-freedesktop.patch b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5/0001-bluez5meshadvprovisioner.h-don-t-include-freedesktop.patch new file mode 100644 index 000000000..611012742 --- /dev/null +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5/0001-bluez5meshadvprovisioner.h-don-t-include-freedesktop.patch @@ -0,0 +1,5580 @@ +From 7c1d5bd6abf864feedf30723b090b3477d78b355 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Tue, 27 Apr 2021 01:36:19 -0700 +Subject: [PATCH] bluez5meshadvprovisioner.h: don't include + freedesktop-interface.h, bluez-interface.h in extern "C" + +* fixes: +FAILED: CMakeFiles/bluez5.dir/src/bluez5meshadvprovisioner.cpp.o +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot-native/usr/bin/i686-webos-linux/i686-webos-linux-g++ -Dbluez5_EXPORTS -Ibluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0 -Ibluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/lib/glib-2.0/include -Ibluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/libmount -Ibluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/blkid -Ibluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/gio-unix-2.0 -Ibluetooth-sil-bluez5/0.1.0-55-r2/git/src -IConfigured/src -m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Werror=return-type --sysroot=bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=bluetooth-sil-bluez5/0.1.0-55-r2=/usr/src/debug/bluetooth-sil-bluez5/0.1.0-55-r2 -fdebug-prefix-map=bluetooth-sil-bluez5/0.1.0-55-r2=/usr/src/debug/bluetooth-sil-bluez5/0.1.0-55-r2 -fdebug-prefix-map=bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot= -fdebug-prefix-map=bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot-native= -fvisibility-inlines-hidden -m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Werror=return-type --sysroot=bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot -std=c++0x -pthread -Ibluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/libmount -Ibluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/blkid -Ibluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0 -Ibluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/lib/glib-2.0/include -pthread -Wl,--no-undefined -DUSE_SYSTEM_BUS_FOR_OBEX -DNDEBUG -fPIC -MD -MT CMakeFiles/bluez5.dir/src/bluez5meshadvprovisioner.cpp.o -MF CMakeFiles/bluez5.dir/src/bluez5meshadvprovisioner.cpp.o.d -o CMakeFiles/bluez5.dir/src/bluez5meshadvprovisioner.cpp.o -c bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:56:3: error: template with C linkage + 56 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:71:3: error: template with C linkage + 71 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:80:3: error: template with C linkage + 80 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:91:3: error: template with C linkage + 91 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:94:3: error: template with C linkage + 94 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:98:3: error: template with C linkage + 98 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:101:3: error: template with C linkage + 101 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:104:3: error: template specialization with C linkage + 104 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:109:3: error: template with C linkage + 109 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:114:3: error: template with C linkage + 114 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:119:3: error: template with C linkage + 119 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:124:3: error: template with C linkage + 124 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:127:3: error: template specialization with C linkage + 127 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:132:3: error: template with C linkage + 132 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:137:3: error: template with C linkage + 137 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:142:3: error: template with C linkage + 142 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:147:3: error: template with C linkage + 147 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:188:3: error: template with C linkage + 188 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:190:3: error: template with C linkage + 190 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:192:3: error: template with C linkage + 192 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:194:3: error: template with C linkage + 194 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:200:3: error: template with C linkage + 200 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:204:3: error: template with C linkage + 204 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:226:3: error: template with C linkage + 226 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:230:3: error: template with C linkage + 230 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:233:3: error: template with C linkage + 233 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:238:3: error: template with C linkage + 238 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:242:3: error: template specialization with C linkage + 242 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:247:3: error: template with C linkage + 247 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:252:3: error: template with C linkage + 252 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:256:3: error: template specialization with C linkage + 256 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:260:3: error: template specialization with C linkage + 260 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:264:3: error: template specialization with C linkage + 264 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:268:3: error: template specialization with C linkage + 268 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:273:3: error: template specialization with C linkage + 273 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:284:3: error: template specialization with C linkage + 284 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:288:3: error: template specialization with C linkage + 288 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:292:3: error: template specialization with C linkage + 292 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:296:3: error: template specialization with C linkage + 296 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:300:3: error: template specialization with C linkage + 300 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:304:3: error: template specialization with C linkage + 304 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:308:3: error: template specialization with C linkage + 308 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:312:3: error: template specialization with C linkage + 312 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:316:3: error: template specialization with C linkage + 316 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:320:3: error: template specialization with C linkage + 320 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:364:3: error: template with C linkage + 364 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:369:3: error: template with C linkage + 369 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:373:3: error: template specialization with C linkage + 373 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:377:3: error: template specialization with C linkage + 377 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:381:3: error: template specialization with C linkage + 381 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:392:3: error: template with C linkage + 392 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:398:3: error: template with C linkage + 398 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:402:3: error: template with C linkage + 402 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:406:3: error: template with C linkage + 406 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:410:3: error: template with C linkage + 410 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:414:3: error: template with C linkage + 414 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:419:3: error: template with C linkage + 419 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:425:3: error: template with C linkage + 425 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:429:3: error: template with C linkage + 429 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:434:3: error: template with C linkage + 434 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:438:3: error: template with C linkage + 438 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:442:3: error: template with C linkage + 442 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:446:3: error: template with C linkage + 446 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:451:3: error: template with C linkage + 451 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:456:3: error: template with C linkage + 456 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:460:3: error: template with C linkage + 460 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:465:3: error: template with C linkage + 465 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:471:3: error: template with C linkage + 471 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:477:3: error: template with C linkage + 477 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:483:3: error: template with C linkage + 483 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:489:3: error: template with C linkage + 489 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:493:3: error: template with C linkage + 493 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:497:3: error: template with C linkage + 497 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:503:3: error: template with C linkage + 503 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:507:3: error: template specialization with C linkage + 507 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:512:3: error: template with C linkage + 512 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:518:3: error: template with C linkage + 518 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:526:3: error: template with C linkage + 526 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:533:3: error: template with C linkage + 533 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:539:3: error: template with C linkage + 539 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:546:3: error: template with C linkage + 546 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:552:3: error: template with C linkage + 552 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:556:3: error: template with C linkage + 556 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:563:3: error: template with C linkage + 563 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:567:3: error: template with C linkage + 567 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:571:3: error: template with C linkage + 571 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:576:3: error: template with C linkage + 576 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:581:3: error: template with C linkage + 581 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:584:3: error: template with C linkage + 584 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:588:3: error: template with C linkage + 588 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:607:3: error: template with C linkage + 607 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:626:3: error: template with C linkage + 626 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:631:3: error: template with C linkage + 631 | template using __void_t = void; + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:635:3: error: template with C linkage + 635 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:640:3: error: template with C linkage + 640 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:648:3: error: template with C linkage + 648 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:652:3: error: template with C linkage + 652 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:657:3: error: template with C linkage + 657 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:661:3: error: template with C linkage + 661 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:666:3: error: template with C linkage + 666 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:675:3: error: template with C linkage + 675 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:684:3: error: template with C linkage + 684 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:694:3: error: template with C linkage + 694 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:705:3: error: template with C linkage + 705 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:714:3: error: template with C linkage + 714 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:720:3: error: template with C linkage + 720 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:735:3: error: template with C linkage + 735 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:740:3: error: template with C linkage + 740 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:751:3: error: template with C linkage + 751 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:757:3: error: template with C linkage + 757 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:770:3: error: template with C linkage + 770 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:774:3: error: template with C linkage + 774 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:778:3: error: template with C linkage + 778 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:781:3: error: template with C linkage + 781 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:784:3: error: template with C linkage + 784 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:787:3: error: template with C linkage + 787 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:792:3: error: template with C linkage + 792 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:804:5: error: template with C linkage + 804 | template().~_Tp())> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:807:5: error: template with C linkage + 807 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:811:3: error: template with C linkage + 811 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:818:3: error: template with C linkage + 818 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:831:3: error: template with C linkage + 831 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:835:3: error: template with C linkage + 835 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:840:3: error: template with C linkage + 840 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:854:5: error: template with C linkage + 854 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:858:5: error: template with C linkage + 858 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:862:3: error: template with C linkage + 862 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:869:3: error: template with C linkage + 869 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:882:3: error: template with C linkage + 882 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:886:3: error: template with C linkage + 886 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:891:3: error: template with C linkage + 891 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:899:3: error: template with C linkage + 899 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:905:3: error: template with C linkage + 905 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:914:3: error: template with C linkage + 914 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:922:3: error: template with C linkage + 922 | template::value> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:925:3: error: template with C linkage + 925 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:929:3: error: template with C linkage + 929 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:935:3: error: template with C linkage + 935 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:943:3: error: template with C linkage + 943 | template::value> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:946:3: error: template with C linkage + 946 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:950:3: error: template with C linkage + 950 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:956:3: error: template with C linkage + 956 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:964:3: error: template with C linkage + 964 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:969:3: error: template with C linkage + 969 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:974:3: error: template with C linkage + 974 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:979:3: error: template with C linkage + 979 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:984:3: error: template with C linkage + 984 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1001:3: error: template with C linkage + 1001 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1007:3: error: template with C linkage + 1007 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1016:3: error: template with C linkage + 1016 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1025:3: error: template with C linkage + 1025 | template::value> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1028:3: error: template with C linkage + 1028 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1032:3: error: template with C linkage + 1032 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1038:3: error: template with C linkage + 1038 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1046:3: error: template with C linkage + 1046 | template::value> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1049:3: error: template with C linkage + 1049 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1053:3: error: template with C linkage + 1053 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1059:3: error: template with C linkage + 1059 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1068:3: error: template with C linkage + 1068 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1076:3: error: template with C linkage + 1076 | template::value> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1079:3: error: template with C linkage + 1079 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1083:3: error: template with C linkage + 1083 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1089:3: error: template with C linkage + 1089 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1097:3: error: template with C linkage + 1097 | template::value> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1100:3: error: template with C linkage + 1100 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1104:3: error: template with C linkage + 1104 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1110:3: error: template with C linkage + 1110 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1118:3: error: template with C linkage + 1118 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1123:3: error: template with C linkage + 1123 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1130:3: error: template with C linkage + 1130 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1138:3: error: template with C linkage + 1138 | template::value> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1141:3: error: template with C linkage + 1141 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1145:3: error: template with C linkage + 1145 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1151:3: error: template with C linkage + 1151 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1159:3: error: template with C linkage + 1159 | template::value> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1162:3: error: template with C linkage + 1162 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1166:3: error: template with C linkage + 1166 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1172:3: error: template with C linkage + 1172 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1181:3: error: template with C linkage + 1181 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1190:3: error: template with C linkage + 1190 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1200:5: error: template with C linkage + 1200 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1203:5: error: template with C linkage + 1203 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1210:3: error: template with C linkage + 1210 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1217:3: error: template with C linkage + 1217 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1222:3: error: template with C linkage + 1222 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1228:3: error: template with C linkage + 1228 | template::value> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1231:3: error: template with C linkage + 1231 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1235:3: error: template with C linkage + 1235 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1243:3: error: template with C linkage + 1243 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1251:3: error: template with C linkage + 1251 | template::value> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1254:3: error: template with C linkage + 1254 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1258:3: error: template with C linkage + 1258 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1266:3: error: template with C linkage + 1266 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1275:3: error: template with C linkage + 1275 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1283:3: error: template with C linkage + 1283 | template::value> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1286:3: error: template with C linkage + 1286 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1290:3: error: template with C linkage + 1290 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1296:3: error: template with C linkage + 1296 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1304:3: error: template with C linkage + 1304 | template::value> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1307:3: error: template with C linkage + 1307 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1311:3: error: template with C linkage + 1311 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1317:3: error: template with C linkage + 1317 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1326:3: error: template with C linkage + 1326 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1337:3: error: template with C linkage + 1337 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1349:3: error: template with C linkage + 1349 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1358:3: error: template with C linkage + 1358 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1362:3: error: template with C linkage + 1362 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1366:3: error: template with C linkage + 1366 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1371:3: error: template with C linkage + 1371 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1375:3: error: template with C linkage + 1375 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1382:3: error: template with C linkage + 1382 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1393:3: error: template with C linkage + 1393 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1410:3: error: template with C linkage + 1410 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1415:3: error: template with C linkage + 1415 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1446:3: error: template with C linkage + 1446 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1452:3: error: template with C linkage + 1452 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1456:3: error: template with C linkage + 1456 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1486:3: error: template with C linkage + 1486 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1508:3: error: template with C linkage + 1508 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1512:3: error: template with C linkage + 1512 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1517:3: error: template with C linkage + 1517 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1521:3: error: template with C linkage + 1521 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1526:3: error: template with C linkage + 1526 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1530:3: error: template with C linkage + 1530 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1534:3: error: template with C linkage + 1534 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1538:3: error: template with C linkage + 1538 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1543:3: error: template with C linkage + 1543 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1548:3: error: template with C linkage + 1548 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1553:3: error: template with C linkage + 1553 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1592:3: error: template with C linkage + 1592 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1596:3: error: template with C linkage + 1596 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1600:3: error: template with C linkage + 1600 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1604:3: error: template with C linkage + 1604 | template::value> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1608:3: error: template with C linkage + 1608 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1613:3: error: template with C linkage + 1613 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1618:3: error: template with C linkage + 1618 | template::value> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1622:3: error: template with C linkage + 1622 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1627:3: error: template with C linkage + 1627 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1649:3: error: template with C linkage + 1649 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1652:3: error: template with C linkage + 1652 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1656:3: error: template with C linkage + 1656 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1660:3: error: template with C linkage + 1660 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1664:3: error: template with C linkage + 1664 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1668:3: error: template with C linkage + 1668 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1684:3: error: template specialization with C linkage + 1684 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1688:3: error: template specialization with C linkage + 1688 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1692:3: error: template specialization with C linkage + 1692 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1696:3: error: template specialization with C linkage + 1696 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1700:3: error: template specialization with C linkage + 1700 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1704:3: error: template specialization with C linkage + 1704 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1730:3: error: template with C linkage + 1730 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1749:5: error: template with C linkage + 1749 | template struct _List { }; + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1751:5: error: template with C linkage + 1751 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1755:5: error: template with C linkage + 1755 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1758:5: error: template with C linkage + 1758 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1762:5: error: template with C linkage + 1762 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1769:3: error: template with C linkage + 1769 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1789:3: error: template specialization with C linkage + 1789 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1806:3: error: template specialization with C linkage + 1806 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1813:3: error: template specialization with C linkage + 1813 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1824:3: error: template with C linkage + 1824 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1829:3: error: template specialization with C linkage + 1829 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1834:3: error: template with C linkage + 1834 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1838:3: error: template specialization with C linkage + 1838 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1842:3: error: template specialization with C linkage + 1842 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1846:3: error: template specialization with C linkage + 1846 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1850:3: error: template specialization with C linkage + 1850 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1854:3: error: template specialization with C linkage + 1854 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1858:3: error: template specialization with C linkage + 1858 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1884:3: error: template with C linkage + 1884 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1901:3: error: template with C linkage + 1901 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1915:3: error: template specialization with C linkage + 1915 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1932:3: error: template specialization with C linkage + 1932 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1939:3: error: template specialization with C linkage + 1939 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1950:3: error: template with C linkage + 1950 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1955:3: error: template specialization with C linkage + 1955 | template<> + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1971:3: error: template with C linkage + 1971 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1975:3: error: template with C linkage + 1975 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1979:3: error: template with C linkage + 1979 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1984:3: error: template with C linkage + 1984 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1988:3: error: template with C linkage + 1988 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/c++/10.3.0/type_traits:1992:3: error: template with C linkage + 1992 | template + | ^~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:22:1: note: 'extern "C"' linkage started here + 22 | extern "C" + | ^~~~~~~~~~ +In file included from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gatomic.h:31, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gthread.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib/gasyncqueue.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib.h:32, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gobject/gbinding.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/glib-object.h:22, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gioenums.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/giotypes.h:28, + from bluetooth-sil-bluez5/0.1.0-55-r2/recipe-sysroot/usr/include/glib-2.0/gio/gio.h:26, + from Configured/src/freedesktop-interface.h:12, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.h:24, + from bluetooth-sil-bluez5/0.1.0-55-r2/git/src/bluez5meshadvprovisioner.cpp:17: +... + +Signed-off-by: Martin Jansa +--- + src/bluez5meshadvprovisioner.h | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/src/bluez5meshadvprovisioner.h b/src/bluez5meshadvprovisioner.h +index dbb5f79..50b18fe 100644 +--- a/src/bluez5meshadvprovisioner.h ++++ b/src/bluez5meshadvprovisioner.h +@@ -21,11 +21,8 @@ + #include + #include + +-extern "C" +-{ + #include "freedesktop-interface.h" + #include "bluez-interface.h" +-} + + class Bluez5Adapter; + class Bluez5ProfileMesh; +@@ -75,4 +72,4 @@ private: + uint16_t mUnicastAddressAvailable; + }; + +-#endif //BLUEZ5MESHADVPROV_H +\ No newline at end of file ++#endif //BLUEZ5MESHADVPROV_H From 4fabc7ea48f71c5f96d7442402ec8b5a64bab91f Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sun, 24 Apr 2022 14:40:54 +0000 Subject: [PATCH 0353/2022] userland, webruntime-72: Remove unused .patch files :Release Notes: Remove unused patches which were removed from SRC_URI but never deleted from the repository. :Detailed Notes: These are simply detected with very limited script which just checks: "$(git grep "file:/.*/$(basename $patch_file)" $1 | wc -l)" -eq "0" so some .patch files might still be unused (when different recipe happens to use different .patch file with identical name). :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-16369] CCC: Upgrade to latest revisions from Yocto 3.1 Dunfell Change-Id: If4496702fe882bac58f381df9f2832b680a02858 --- .../userland/0001-Remove-EGL-dependency.patch | 152 ------------------ ...add-SMACK-labeling-based-on-AppID_72.patch | 22 --- 2 files changed, 174 deletions(-) delete mode 100644 meta-webos-raspberrypi/recipes-graphics/userland/userland/0001-Remove-EGL-dependency.patch delete mode 100644 meta-webos-smack/recipes-webos/chromium/files/0001-run_app_shell-add-SMACK-labeling-based-on-AppID_72.patch diff --git a/meta-webos-raspberrypi/recipes-graphics/userland/userland/0001-Remove-EGL-dependency.patch b/meta-webos-raspberrypi/recipes-graphics/userland/userland/0001-Remove-EGL-dependency.patch deleted file mode 100644 index 25e5bec91..000000000 --- a/meta-webos-raspberrypi/recipes-graphics/userland/userland/0001-Remove-EGL-dependency.patch +++ /dev/null @@ -1,152 +0,0 @@ -From 063d296bee91077651f18c6444d244c9351a7f49 Mon Sep 17 00:00:00 2001 -From: Changhyeok Bae -Date: Tue, 27 Jun 2017 21:22:05 +0900 -Subject: [PATCH] Remove EGL dependency - ---- - CMakeLists.txt | 24 +++--------------------- - host_applications/linux/CMakeLists.txt | 20 -------------------- - interface/vmcs_host/CMakeLists.txt | 2 +- - makefiles/cmake/vmcs.cmake | 2 +- - 4 files changed, 5 insertions(+), 43 deletions(-) - -diff --git a/CMakeLists.txt b/CMakeLists.txt -index 9f4165a..2985058 100644 ---- a/CMakeLists.txt -+++ b/CMakeLists.txt -@@ -8,9 +8,6 @@ SET(PROJECT_VER_PATCH 0) - SET(PROJECT_VER "${PROJECT_VER_MAJOR}.${PROJECT_VER_MINOR}.${PROJECT_VER_PATCH}") - SET(PROJECT_APIVER "${PROJECT_VER}") - --set(BUILD_MMAL TRUE) --set(BUILD_MMAL_APPS TRUE) -- - set(vmcs_root ${PROJECT_SOURCE_DIR}) - get_filename_component(VIDEOCORE_ROOT . ABSOLUTE) - -@@ -34,17 +31,14 @@ endif() - enable_language(ASM) - - # Global include paths --include_directories(host_applications/framework) - include_directories(${PROJECT_SOURCE_DIR}) - include_directories(interface/vcos/pthreads) - include_directories(interface/vmcs_host/linux) - include_directories(interface/vmcs_host) - include_directories(interface/vmcs_host/khronos) --include_directories(interface/khronos/include) - include_directories(${PROJECT_BINARY_DIR}) - include_directories(interface/vchiq_arm) - #include_directories(tools/inet_transport) --include_directories(host_support/include) - - # Global compiler flags - if(CMAKE_COMPILER_IS_GNUCC) -@@ -54,7 +48,6 @@ endif() - add_definitions(-D_REENTRANT) - add_definitions(-DUSE_VCHIQ_ARM -DVCHI_BULK_ALIGN=1 -DVCHI_BULK_GRANULARITY=1) - add_definitions(-DOMX_SKIP64BIT) --add_definitions(-DEGL_SERVER_DISPMANX) - add_definitions(-D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64) - add_definitions(-D_GNU_SOURCE) - -@@ -73,16 +66,8 @@ endif() - add_subdirectory(interface/vcos) - add_subdirectory(interface/vmcs_host) - add_subdirectory(interface/vchiq_arm) --if(NOT ARM64) -- add_subdirectory(interface/khronos) --endif() - - #add_subdirectory(opensrc/tools/lua) --if(BUILD_MMAL) -- include_directories(interface/mmal) -- add_subdirectory(interface/mmal) -- add_subdirectory(containers) --endif() - - # VidTex supports Android and Linux - if(NOT ARM64) -@@ -114,16 +99,13 @@ endif() - #add_subdirectory(host_applications/framework) - - # add_subdirectory(interface/vchiq/test/win32) -+# add linux apps -+add_subdirectory(host_applications/linux) - - # Apps and libraries supporting Camera Tuning Tool - #add_subdirectory(tools/inet_transport/linux) - #add_subdirectory(host_support/vcstandalone) - --# add linux apps --add_subdirectory(host_applications/linux) --add_subdirectory(opensrc/helpers/libfdt) --add_subdirectory(helpers/dtoverlay) -- - set(vmcs_host_apps_VERSION_MAJOR 1) - set(vmcs_host_apps_VERSION_MINOR 0) - -@@ -131,7 +113,7 @@ include_directories("${PROJECT_BINARY_DIR}") - include(FindPkgConfig QUIET) - if(PKG_CONFIG_FOUND) - # Produce a pkg-config file -- foreach(PCFILE bcm_host.pc brcmegl.pc brcmglesv2.pc brcmvg.pc vcsm.pc mmal.pc openmaxil.pc) -+ foreach(PCFILE bcm_host.pc brcmvg.pc vcsm.pc mmal.pc openmaxil.pc) - configure_file("pkgconfig/${PCFILE}.in" "${PCFILE}" @ONLY) - install(FILES "${CMAKE_CURRENT_BINARY_DIR}/${PCFILE}" - DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig") -diff --git a/host_applications/linux/CMakeLists.txt b/host_applications/linux/CMakeLists.txt -index 4bb1e98..f00a112 100644 ---- a/host_applications/linux/CMakeLists.txt -+++ b/host_applications/linux/CMakeLists.txt -@@ -1,23 +1,3 @@ - # linux apps - - add_subdirectory(libs/bcm_host) --add_subdirectory(apps/gencmd) --add_subdirectory(apps/tvservice) --add_subdirectory(apps/vcmailbox) --add_subdirectory(apps/raspicam) --add_subdirectory(libs/sm) --if(NOT ARM64) -- add_subdirectory(apps/smem) --endif() --add_subdirectory(libs/debug_sym) --add_subdirectory(apps/dtoverlay) --add_subdirectory(apps/dtmerge) -- --if(ALL_APPS) -- add_subdirectory(apps/vcdbg) -- add_subdirectory(libs/elftoolchain) -- # add_subdirectory(apps/smct) -- add_subdirectory(apps/edid_parser) -- add_subdirectory(apps/hello_pi) --endif() -- -diff --git a/interface/vmcs_host/CMakeLists.txt b/interface/vmcs_host/CMakeLists.txt -index e54f046..af3637a 100755 ---- a/interface/vmcs_host/CMakeLists.txt -+++ b/interface/vmcs_host/CMakeLists.txt -@@ -26,7 +26,7 @@ if(NOT ARM64) - vcilcs.c vcilcs_in.c vcilcs_out.c vcilcs_common.c) - - # ILCS pulls in EGL for the ILCS/EGL surface API support -- target_link_libraries(vcilcs brcmEGL brcmGLESv2 khrn_client vchiq_arm vcos) -+ target_link_libraries(vcilcs vchiq_arm vcos) - set(INSTALL_TARGETS ${INSTALL_TARGETS} vcilcs) - endif() - -diff --git a/makefiles/cmake/vmcs.cmake b/makefiles/cmake/vmcs.cmake -index 7c97463..4a3b348 100644 ---- a/makefiles/cmake/vmcs.cmake -+++ b/makefiles/cmake/vmcs.cmake -@@ -74,8 +74,8 @@ install(DIRECTORY ${vmcs_root}/vcinclude DESTINATION ${VMCS_INSTALL_PR - install(DIRECTORY ${vmcs_root}/interface/peer DESTINATION ${VMCS_INSTALL_PREFIX}/include/interface FILES_MATCHING PATTERN "*.h") - install(DIRECTORY ${vmcs_root}/interface/vmcs_host DESTINATION ${VMCS_INSTALL_PREFIX}/include/interface FILES_MATCHING PATTERN "*.h" PATTERN "${vmcs_root}/interface/vmcs_host/khronos" EXCLUDE) - --install(DIRECTORY ${vmcs_root}/interface/khronos/include DESTINATION ${VMCS_INSTALL_PREFIX} FILES_MATCHING PATTERN "*.h") - install(DIRECTORY ${vmcs_root}/interface/vmcs_host/khronos/IL DESTINATION ${VMCS_INSTALL_PREFIX}/include FILES_MATCHING PATTERN "*.h") - -+install(DIRECTORY ${vmcs_root}/interface/khronos/include/VG DESTINATION ${VMCS_INSTALL_PREFIX}/include FILES_MATCHING PATTERN "*.h") - install(DIRECTORY ${vmcs_root}/host_applications/linux/libs/bcm_host/include DESTINATION ${VMCS_INSTALL_PREFIX} FILES_MATCHING PATTERN "*.h") - diff --git a/meta-webos-smack/recipes-webos/chromium/files/0001-run_app_shell-add-SMACK-labeling-based-on-AppID_72.patch b/meta-webos-smack/recipes-webos/chromium/files/0001-run_app_shell-add-SMACK-labeling-based-on-AppID_72.patch deleted file mode 100644 index ac53159e4..000000000 --- a/meta-webos-smack/recipes-webos/chromium/files/0001-run_app_shell-add-SMACK-labeling-based-on-AppID_72.patch +++ /dev/null @@ -1,22 +0,0 @@ -From ec45ad23b0d8d9f092da44500af1d73e049ef1ef Mon Sep 17 00:00:00 2001 -From: Ilya Zelinsky -Date: Tue, 1 Oct 2019 14:20:16 +0000 -Subject: [PATCH] run_app_shell: add SMACK labeling based on AppID - ---- - src/webos/runtime/app_shell/run_app_shell | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/webos/runtime/app_shell/run_app_shell b/src/webos/runtime/app_shell/run_app_shell -index f33bd1c..1b187c9 100644 ---- a/src/webos/runtime/app_shell/run_app_shell -+++ b/src/webos/runtime/app_shell/run_app_shell -@@ -179,4 +179,5 @@ echo " Launching App Shell " - echo "----------------------------------------------------------------------" - echo "" - -+echo "webOS::App::${BROWSER_APP_ID}" > /proc/self/attr/current - exec ${DEPLOY_DIR}/app_shell ${CHROME_FLAGS} ${DEBUG_FLAGS} --launch-args="${EXTRA_PARAMS_JSON}" --js-flags="${JS_FLAGS}" "$@" --- -2.7.4 - From c95dbe8f8d2cbebf42d12bb09b490df143ad5e84 Mon Sep 17 00:00:00 2001 From: Muniraju Date: Fri, 22 Apr 2022 15:36:00 +0530 Subject: [PATCH 0354/2022] ose: com.webos.app.home=19 :Release Notes: Fix App list delay in the launcher :Detailed Notes: com.webos.app.home: submissions/18..submissions/19 705167b Show Home App only when launch points received. :Testing Performed: Please see Ticket WRO-3255 :QA Notes: NA :Issues Addressed: [WRO-3255] CCC: com.webos.app.home=19 [WRO-2744] [OSE-RPi4] : Edit pops up first then other app shows in home launcher. Change-Id: I0f3306bbda9f587fbdc7b89323650eb468f11aaa --- .../recipes-webos/com.webos.app.home/com.webos.app.home.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb b/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb index 61e1cf435..f386a80bf 100644 --- a/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb +++ b/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "General System Launcher application" AUTHOR = "Jongson Kim" @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=0ec407cd2d4a192e0c60888f4ec66dd7 \ " -WEBOS_VERSION = "0.1.0-18_8accb8308fa1625c2d7478a41990a2d26180e058" +WEBOS_VERSION = "0.1.0-19_c696682500bf6cbdc02a79f6879bf1294e7ecfd0" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" PR = "r3" From d9586b18687392acdea3255df6d11523725a9827 Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Thu, 14 Apr 2022 10:23:56 +0900 Subject: [PATCH 0355/2022] native: localization-tool-native=v1.6.0 :Release Notes: Update the latest version of loctool and plugins. :Detailed Notes: The dependent loctool version has been updated to 2.16.2. loctool: v1.5.0..v1.6.0 516e1fa Release for v1.6.0 :Testing Performed: See the comments of CCC ticket :QA Notes: N/A :Issues Addressed: [WRO-2017] Update the latest version of loctool to webOS [WRO-2827] CCC: native: localization-tool-native=v1.6.0 Change-Id: I36fd97353f12fd207abd7b2d38d9d1e562df7f8d --- .../localization-tool/localization-tool-native.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb b/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb index 785b13b30..c019792bd 100644 --- a/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb +++ b/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb @@ -19,8 +19,8 @@ S = "${WORKDIR}/git" # iLib-js/ilib-loctool-webos-dist repository on GitHub. This version should correspond to the # tag whose hash is specified in SRCREV, so PV and SRCREV will always change # together. -PV = "1.5.0" -SRCREV = "86b83a1bbfa3f0585300bf57c3472af000e8a1fa" +PV = "1.6.0" +SRCREV = "9ac3d9ada67c29f29f5c92b0e59deb5732b72953" # Skip the unwanted tasks do_configure[noexec] = "1" From 0801717fa98cfaf32619b3016fdbc07f1417e664 Mon Sep 17 00:00:00 2001 From: "sc.heo" Date: Wed, 27 Apr 2022 14:23:01 +0900 Subject: [PATCH 0356/2022] ose: packagegroup-webos-extended=r41 :Release Notes: Add 8021q in kernel configuration to support vlan for ose emulator :Detailed Notes: Currently ose emulator doesn't support vlan because 8021q kernel configuration is missing. Add 8021q in kernel configuration to support vlan for ose emulator. :Testing Performed: local build & verified with QWO-226 :QA Notes: NA :Issues Addressed: [WRO-3859] CCC: packagegroup-webos-extended=r41 [WRO-3860] Enable vlan for ose emulator Change-Id: I2ba47def267540865cc3445688bbe317d6624900 --- .../recipes-core/packagegroups/packagegroup-webos-extended.bb | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index a674c7cef..1cb187ba6 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -5,7 +5,7 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" # You don't need to change this value when you're changing just RDEPENDS_${PN} variable. -PR = "r40" +PR = "r41" PACKAGE_ARCH = "${MACHINE_ARCH}" inherit packagegroup @@ -273,6 +273,7 @@ WEBOS_FOSS_MISSING_FROM_RDEPENDS = " \ # These packages that are installed in the qemux86 image only. RRECOMMENDS_${PN}_append_qemux86 = " \ fuse-utils \ + kernel-module-8021q \ kernel-module-ac97-bus \ kernel-module-bluetooth \ kernel-module-btbcm \ @@ -303,6 +304,7 @@ RRECOMMENDS_${PN}_append_qemux86 = " \ RRECOMMENDS_${PN}_append_qemux86-64 = " \ fuse-utils \ + kernel-module-8021q \ kernel-module-ac97-bus \ kernel-module-bluetooth \ kernel-module-btbcm \ From 8c4237cbcc395f2c161b41e897b19ac5fa06ae9f Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 29 Apr 2022 15:07:45 +0000 Subject: [PATCH 0357/2022] iotivity=r8 (Fix build with newer git) :Release Notes: :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/392591 :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRO-3839] CCC: Various build fixes Change-Id: I61cf5ef9d652b1e836fbe490285e4984ae0b0182 --- ...-add-DONT_CHECK_GIT_TAGS-env-variabl.patch | 95 +++++++++++++++++++ .../recipes-core/iotivity/iotivity_git.bb | 3 +- 2 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 meta-webos/recipes-core/iotivity/iotivity/0001-mbedtls-tinycbor-add-DONT_CHECK_GIT_TAGS-env-variabl.patch diff --git a/meta-webos/recipes-core/iotivity/iotivity/0001-mbedtls-tinycbor-add-DONT_CHECK_GIT_TAGS-env-variabl.patch b/meta-webos/recipes-core/iotivity/iotivity/0001-mbedtls-tinycbor-add-DONT_CHECK_GIT_TAGS-env-variabl.patch new file mode 100644 index 000000000..e93dc9c09 --- /dev/null +++ b/meta-webos/recipes-core/iotivity/iotivity/0001-mbedtls-tinycbor-add-DONT_CHECK_GIT_TAGS-env-variabl.patch @@ -0,0 +1,95 @@ +From 2989ea36d1acb2b77ae12ede858dbdfa0032f421 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Fri, 29 Apr 2022 15:37:05 +0000 +Subject: [PATCH] mbedtls, tinycbor: add DONT_CHECK_GIT_TAGS env variable + +With newer git on host iotivity now fails to build with: +| scons: Reading SConscript files ... +| Processing using SCons version 3.1.2 +| Python 3.8.13 (default, Jan 1 1970, 00:00:00) [GCC 11.2.0] on linux +| warning: importing some environment variables for OS: webos +| Checking for POSIX Thread Support...(cached) yes +| fatal: unsafe repository ('/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/git/extlibs/tinycbor/tinycbor' is owned by someone else) +| To add an exception for this directory, call: +| +| git config --global --add safe.directory /OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/git/extlibs/tinycbor/tinycbor +| CalledProcessError: Command 'git tag -l v0.5.1' returned non-zero exit status 128.: +| File "/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/git/SConstruct", line 32: +| SConscript('build_common/SConscript') +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 660: +| return method(*args, **kw) +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 597: +| return _SConscript(self.fs, *files, **subst_kw) +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 286: +| exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals) +| File "/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/git/build_common/SConscript", line 933: +| env.SConscript('external_libs.scons') +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 597: +| return _SConscript(self.fs, *files, **subst_kw) +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 286: +| exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals) +| File "/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/git/build_common/external_libs.scons", line 57: +| SConscript('#extlibs/tinycbor/SConscript') +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 660: +| return method(*args, **kw) +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 597: +| return _SConscript(self.fs, *files, **subst_kw) +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 286: +| exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals) +| File "/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/git/extlibs/tinycbor/SConscript", line 50: +| out = subprocess.check_output('git tag -l ' + cborRevision, shell=True).rstrip() +| File "/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/lib/python3.8/subprocess.py", line 415: +| return run(*popenargs, stdout=PIPE, timeout=timeout, check=True, +| File "/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/lib/python3.8/subprocess.py", line 516: +| raise CalledProcessError(retcode, process.args, + +there is a work around for this in oe-core master (not even in kirkstone yet): +https://git.openembedded.org/openembedded-core/commit/?id=8bed8e6993e7297bdcd68940aa0d47ef47120117 + +but exporting GIT_CONFIG_PARAMETERS doesn't work for this SConscript, because +it filters the environment as in: +https://scons.org/doc/2.4.0/HTML/scons-api/SCons.Script.SConscript%27.DefaultEnvironmentCall-class.html +--- + build_common/SConscript | 1 + + extlibs/mbedtls/SConscript | 2 +- + extlibs/tinycbor/SConscript | 3 ++- + 3 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/build_common/SConscript b/build_common/SConscript +index d5abaaf84..2a0ffc3cf 100644 +--- a/build_common/SConscript ++++ b/build_common/SConscript +@@ -368,6 +368,7 @@ if target_os in targets_support_cc: + # Import env variables only if reproductibility is ensured + if target_os in ['yocto', 'webos']: + env['CONFIG_ENVIRONMENT_IMPORT'] = True ++ env['DONT_CHECK_GIT_TAGS'] = True + else: + env['CONFIG_ENVIRONMENT_IMPORT'] = False + +diff --git a/extlibs/mbedtls/SConscript b/extlibs/mbedtls/SConscript +index 47388d89c..d6cd553ad 100644 +--- a/extlibs/mbedtls/SConscript ++++ b/extlibs/mbedtls/SConscript +@@ -54,7 +54,7 @@ os.chdir(mbedtls_dir) + # the script will always conclude the repo is not up to date because a tag + # with that name doesn't exist. + # Tizen uses its own process to prepare the mbedTLS repo in gbsbuild.sh. +-if os.path.exists('.git/HEAD'): ++if os.path.exists('.git/HEAD') and not env.get('DONT_CHECK_GIT_TAGS'): + out = subprocess.check_output('git tag -l ' + mbedtls_revision, shell=True).rstrip() + if mbedtls_revision not in SCons.Util.to_String(out): + msg = ''' +diff --git a/extlibs/tinycbor/SConscript b/extlibs/tinycbor/SConscript +index bf0ec8b17..5cbe284dc 100644 +--- a/extlibs/tinycbor/SConscript ++++ b/extlibs/tinycbor/SConscript +@@ -46,7 +46,7 @@ os.chdir(cborDir) + # Make sure tinycbor_revision stays in sync with extlibs/tinycbor/prep.sh. + # This code also assumes tinycbor_revision is a tag; if it changes to a branch + # or an arbitrary commit, disable this check below. +-if target_os != 'tizen' and os.path.exists('.git/HEAD'): ++if target_os != 'tizen' and target_os != 'webos' and os.path.exists('.git/HEAD') and not env.get('DONT_CHECK_GIT_TAGS'): + out = subprocess.check_output('git tag -l ' + cborRevision, shell=True).rstrip() + if cborRevision not in SCons.Util.to_String(out): + print(out) diff --git a/meta-webos/recipes-core/iotivity/iotivity_git.bb b/meta-webos/recipes-core/iotivity/iotivity_git.bb index e4ec90443..cbe8b9cb4 100644 --- a/meta-webos/recipes-core/iotivity/iotivity_git.bb +++ b/meta-webos/recipes-core/iotivity/iotivity_git.bb @@ -35,6 +35,7 @@ SRC_URI = " \ file://0001-OCApi.h-prevent-multiple-definitions-of-OC-detail-oc.patch \ file://0002-Fix-segmentation-fault.patch \ file://0002-Add-os_arch-x86_64.patch \ + file://0001-mbedtls-tinycbor-add-DONT_CHECK_GIT_TAGS-env-variabl.patch \ " SRCREV_main = "255060695e4de0e8f357aeab6e3e2c46e3c68bac" SRCREV_tinycbor = "ae64a3d9da39f3bf310b9a7b38427c096d8bcd43" @@ -49,7 +50,7 @@ do_fetch[vardeps] = "SRCREV_main SRCREV_tinycbor SRCREV_gtest SRCREV_hippomocks S = "${WORKDIR}/git" -PR = "r7" +PR = "r8" PV = "1.3.99+git${SRCPV}" inherit scons pkgconfig webos_filesystem_paths From 3a1e9850b0226090f388a99a665add2036dbdea9 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 29 Apr 2022 16:03:06 +0000 Subject: [PATCH 0358/2022] org.ocf.webossample.oc{client,server}basicops=r6 (Fix build with newer git) :Release Notes: :Detailed Notes: Fixes: client: http://gecko.lge.com/Errors/Details/392612 server: http://gecko.lge.com/Errors/Details/392611 :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRO-3839] CCC: Various build fixes Change-Id: Idc6be1b14885fb09c8ea41beea49f838d6ca8d8f --- .../org.ocf.webossample.occlientbasicops.bb | 3 +- ...-add-DONT_CHECK_GIT_TAGS-env-variabl.patch | 95 +++++++++++++++++++ .../org.ocf.webossample.ocserverbasicops.bb | 3 +- ...-add-DONT_CHECK_GIT_TAGS-env-variabl.patch | 95 +++++++++++++++++++ 4 files changed, 194 insertions(+), 2 deletions(-) create mode 100644 meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops/0001-mbedtls-tinycbor-add-DONT_CHECK_GIT_TAGS-env-variabl.patch create mode 100644 meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops/0001-mbedtls-tinycbor-add-DONT_CHECK_GIT_TAGS-env-variabl.patch diff --git a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb index 911ac5e1e..df28a567a 100644 --- a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb +++ b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb @@ -13,6 +13,7 @@ SRC_URI += " \ git://github.com/iotivity/iotivity.git;branch=webos;protocol=https;name=main;destsuffix=iotivity \ git://github.com/intel/tinycbor.git;destsuffix=iotivity/extlibs/tinycbor/tinycbor;protocol=https;name=tinycbor;branch=master \ git://github.com/ARMmbed/mbedtls.git;destsuffix=iotivity/extlibs/mbedtls/mbedtls;protocol=https;branch=archive/mbedtls-2.4;name=mbedtls \ + file://0001-mbedtls-tinycbor-add-DONT_CHECK_GIT_TAGS-env-variabl.patch \ " SRCREV_main = "8fe09d4c9859d3ff32b4e8ca2ed996a156fccb81" @@ -23,7 +24,7 @@ SRCREV_FORMAT = "main" do_fetch[vardeps] = "SRCREV_main SRCREV_tinycbor SRCREV_mbedtls" S = "${WORKDIR}/iotivity" -PR = "r5" +PR = "r6" inherit scons pkgconfig webos_component webos_filesystem_paths diff --git a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops/0001-mbedtls-tinycbor-add-DONT_CHECK_GIT_TAGS-env-variabl.patch b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops/0001-mbedtls-tinycbor-add-DONT_CHECK_GIT_TAGS-env-variabl.patch new file mode 100644 index 000000000..e93dc9c09 --- /dev/null +++ b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops/0001-mbedtls-tinycbor-add-DONT_CHECK_GIT_TAGS-env-variabl.patch @@ -0,0 +1,95 @@ +From 2989ea36d1acb2b77ae12ede858dbdfa0032f421 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Fri, 29 Apr 2022 15:37:05 +0000 +Subject: [PATCH] mbedtls, tinycbor: add DONT_CHECK_GIT_TAGS env variable + +With newer git on host iotivity now fails to build with: +| scons: Reading SConscript files ... +| Processing using SCons version 3.1.2 +| Python 3.8.13 (default, Jan 1 1970, 00:00:00) [GCC 11.2.0] on linux +| warning: importing some environment variables for OS: webos +| Checking for POSIX Thread Support...(cached) yes +| fatal: unsafe repository ('/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/git/extlibs/tinycbor/tinycbor' is owned by someone else) +| To add an exception for this directory, call: +| +| git config --global --add safe.directory /OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/git/extlibs/tinycbor/tinycbor +| CalledProcessError: Command 'git tag -l v0.5.1' returned non-zero exit status 128.: +| File "/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/git/SConstruct", line 32: +| SConscript('build_common/SConscript') +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 660: +| return method(*args, **kw) +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 597: +| return _SConscript(self.fs, *files, **subst_kw) +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 286: +| exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals) +| File "/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/git/build_common/SConscript", line 933: +| env.SConscript('external_libs.scons') +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 597: +| return _SConscript(self.fs, *files, **subst_kw) +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 286: +| exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals) +| File "/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/git/build_common/external_libs.scons", line 57: +| SConscript('#extlibs/tinycbor/SConscript') +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 660: +| return method(*args, **kw) +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 597: +| return _SConscript(self.fs, *files, **subst_kw) +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 286: +| exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals) +| File "/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/git/extlibs/tinycbor/SConscript", line 50: +| out = subprocess.check_output('git tag -l ' + cborRevision, shell=True).rstrip() +| File "/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/lib/python3.8/subprocess.py", line 415: +| return run(*popenargs, stdout=PIPE, timeout=timeout, check=True, +| File "/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/lib/python3.8/subprocess.py", line 516: +| raise CalledProcessError(retcode, process.args, + +there is a work around for this in oe-core master (not even in kirkstone yet): +https://git.openembedded.org/openembedded-core/commit/?id=8bed8e6993e7297bdcd68940aa0d47ef47120117 + +but exporting GIT_CONFIG_PARAMETERS doesn't work for this SConscript, because +it filters the environment as in: +https://scons.org/doc/2.4.0/HTML/scons-api/SCons.Script.SConscript%27.DefaultEnvironmentCall-class.html +--- + build_common/SConscript | 1 + + extlibs/mbedtls/SConscript | 2 +- + extlibs/tinycbor/SConscript | 3 ++- + 3 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/build_common/SConscript b/build_common/SConscript +index d5abaaf84..2a0ffc3cf 100644 +--- a/build_common/SConscript ++++ b/build_common/SConscript +@@ -368,6 +368,7 @@ if target_os in targets_support_cc: + # Import env variables only if reproductibility is ensured + if target_os in ['yocto', 'webos']: + env['CONFIG_ENVIRONMENT_IMPORT'] = True ++ env['DONT_CHECK_GIT_TAGS'] = True + else: + env['CONFIG_ENVIRONMENT_IMPORT'] = False + +diff --git a/extlibs/mbedtls/SConscript b/extlibs/mbedtls/SConscript +index 47388d89c..d6cd553ad 100644 +--- a/extlibs/mbedtls/SConscript ++++ b/extlibs/mbedtls/SConscript +@@ -54,7 +54,7 @@ os.chdir(mbedtls_dir) + # the script will always conclude the repo is not up to date because a tag + # with that name doesn't exist. + # Tizen uses its own process to prepare the mbedTLS repo in gbsbuild.sh. +-if os.path.exists('.git/HEAD'): ++if os.path.exists('.git/HEAD') and not env.get('DONT_CHECK_GIT_TAGS'): + out = subprocess.check_output('git tag -l ' + mbedtls_revision, shell=True).rstrip() + if mbedtls_revision not in SCons.Util.to_String(out): + msg = ''' +diff --git a/extlibs/tinycbor/SConscript b/extlibs/tinycbor/SConscript +index bf0ec8b17..5cbe284dc 100644 +--- a/extlibs/tinycbor/SConscript ++++ b/extlibs/tinycbor/SConscript +@@ -46,7 +46,7 @@ os.chdir(cborDir) + # Make sure tinycbor_revision stays in sync with extlibs/tinycbor/prep.sh. + # This code also assumes tinycbor_revision is a tag; if it changes to a branch + # or an arbitrary commit, disable this check below. +-if target_os != 'tizen' and os.path.exists('.git/HEAD'): ++if target_os != 'tizen' and target_os != 'webos' and os.path.exists('.git/HEAD') and not env.get('DONT_CHECK_GIT_TAGS'): + out = subprocess.check_output('git tag -l ' + cborRevision, shell=True).rstrip() + if cborRevision not in SCons.Util.to_String(out): + print(out) diff --git a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb index 4bf96e2fd..b9b4d08f8 100644 --- a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb +++ b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb @@ -13,6 +13,7 @@ SRC_URI += " \ git://github.com/iotivity/iotivity.git;branch=webos;protocol=https;name=main;destsuffix=iotivity \ git://github.com/intel/tinycbor.git;destsuffix=iotivity/extlibs/tinycbor/tinycbor;protocol=https;name=tinycbor;branch=master \ git://github.com/ARMmbed/mbedtls.git;destsuffix=iotivity/extlibs/mbedtls/mbedtls;protocol=https;branch=archive/mbedtls-2.4;name=mbedtls \ + file://0001-mbedtls-tinycbor-add-DONT_CHECK_GIT_TAGS-env-variabl.patch \ " SRCREV_main = "8fe09d4c9859d3ff32b4e8ca2ed996a156fccb81" @@ -23,7 +24,7 @@ SRCREV_FORMAT = "main" do_fetch[vardeps] = "SRCREV_main SRCREV_tinycbor SRCREV_mbedtls" S = "${WORKDIR}/iotivity" -PR = "r5" +PR = "r6" inherit scons pkgconfig webos_component webos_filesystem_paths diff --git a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops/0001-mbedtls-tinycbor-add-DONT_CHECK_GIT_TAGS-env-variabl.patch b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops/0001-mbedtls-tinycbor-add-DONT_CHECK_GIT_TAGS-env-variabl.patch new file mode 100644 index 000000000..e93dc9c09 --- /dev/null +++ b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops/0001-mbedtls-tinycbor-add-DONT_CHECK_GIT_TAGS-env-variabl.patch @@ -0,0 +1,95 @@ +From 2989ea36d1acb2b77ae12ede858dbdfa0032f421 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Fri, 29 Apr 2022 15:37:05 +0000 +Subject: [PATCH] mbedtls, tinycbor: add DONT_CHECK_GIT_TAGS env variable + +With newer git on host iotivity now fails to build with: +| scons: Reading SConscript files ... +| Processing using SCons version 3.1.2 +| Python 3.8.13 (default, Jan 1 1970, 00:00:00) [GCC 11.2.0] on linux +| warning: importing some environment variables for OS: webos +| Checking for POSIX Thread Support...(cached) yes +| fatal: unsafe repository ('/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/git/extlibs/tinycbor/tinycbor' is owned by someone else) +| To add an exception for this directory, call: +| +| git config --global --add safe.directory /OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/git/extlibs/tinycbor/tinycbor +| CalledProcessError: Command 'git tag -l v0.5.1' returned non-zero exit status 128.: +| File "/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/git/SConstruct", line 32: +| SConscript('build_common/SConscript') +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 660: +| return method(*args, **kw) +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 597: +| return _SConscript(self.fs, *files, **subst_kw) +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 286: +| exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals) +| File "/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/git/build_common/SConscript", line 933: +| env.SConscript('external_libs.scons') +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 597: +| return _SConscript(self.fs, *files, **subst_kw) +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 286: +| exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals) +| File "/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/git/build_common/external_libs.scons", line 57: +| SConscript('#extlibs/tinycbor/SConscript') +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 660: +| return method(*args, **kw) +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 597: +| return _SConscript(self.fs, *files, **subst_kw) +| File "//OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/bin/../../usr/lib/python3.8/site-packages/SCons/Script/SConscript.py", line 286: +| exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals) +| File "/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/git/extlibs/tinycbor/SConscript", line 50: +| out = subprocess.check_output('git tag -l ' + cborRevision, shell=True).rstrip() +| File "/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/lib/python3.8/subprocess.py", line 415: +| return run(*popenargs, stdout=PIPE, timeout=timeout, check=True, +| File "/OE/lge/build/webos/dunfell/BUILD/work/raspberrypi4_64-webos-linux/iotivity/1.3.99+gitAUTOINC+255060695e-r7/recipe-sysroot-native/usr/lib/python3.8/subprocess.py", line 516: +| raise CalledProcessError(retcode, process.args, + +there is a work around for this in oe-core master (not even in kirkstone yet): +https://git.openembedded.org/openembedded-core/commit/?id=8bed8e6993e7297bdcd68940aa0d47ef47120117 + +but exporting GIT_CONFIG_PARAMETERS doesn't work for this SConscript, because +it filters the environment as in: +https://scons.org/doc/2.4.0/HTML/scons-api/SCons.Script.SConscript%27.DefaultEnvironmentCall-class.html +--- + build_common/SConscript | 1 + + extlibs/mbedtls/SConscript | 2 +- + extlibs/tinycbor/SConscript | 3 ++- + 3 files changed, 4 insertions(+), 2 deletions(-) + +diff --git a/build_common/SConscript b/build_common/SConscript +index d5abaaf84..2a0ffc3cf 100644 +--- a/build_common/SConscript ++++ b/build_common/SConscript +@@ -368,6 +368,7 @@ if target_os in targets_support_cc: + # Import env variables only if reproductibility is ensured + if target_os in ['yocto', 'webos']: + env['CONFIG_ENVIRONMENT_IMPORT'] = True ++ env['DONT_CHECK_GIT_TAGS'] = True + else: + env['CONFIG_ENVIRONMENT_IMPORT'] = False + +diff --git a/extlibs/mbedtls/SConscript b/extlibs/mbedtls/SConscript +index 47388d89c..d6cd553ad 100644 +--- a/extlibs/mbedtls/SConscript ++++ b/extlibs/mbedtls/SConscript +@@ -54,7 +54,7 @@ os.chdir(mbedtls_dir) + # the script will always conclude the repo is not up to date because a tag + # with that name doesn't exist. + # Tizen uses its own process to prepare the mbedTLS repo in gbsbuild.sh. +-if os.path.exists('.git/HEAD'): ++if os.path.exists('.git/HEAD') and not env.get('DONT_CHECK_GIT_TAGS'): + out = subprocess.check_output('git tag -l ' + mbedtls_revision, shell=True).rstrip() + if mbedtls_revision not in SCons.Util.to_String(out): + msg = ''' +diff --git a/extlibs/tinycbor/SConscript b/extlibs/tinycbor/SConscript +index bf0ec8b17..5cbe284dc 100644 +--- a/extlibs/tinycbor/SConscript ++++ b/extlibs/tinycbor/SConscript +@@ -46,7 +46,7 @@ os.chdir(cborDir) + # Make sure tinycbor_revision stays in sync with extlibs/tinycbor/prep.sh. + # This code also assumes tinycbor_revision is a tag; if it changes to a branch + # or an arbitrary commit, disable this check below. +-if target_os != 'tizen' and os.path.exists('.git/HEAD'): ++if target_os != 'tizen' and target_os != 'webos' and os.path.exists('.git/HEAD') and not env.get('DONT_CHECK_GIT_TAGS'): + out = subprocess.check_output('git tag -l ' + cborRevision, shell=True).rstrip() + if cborRevision not in SCons.Util.to_String(out): + print(out) From f3f0b982102cd7bc97e1ccb3c464a584c5ff7510 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 2 May 2022 07:49:22 +0000 Subject: [PATCH 0359/2022] webos_enactjs_app.bbclass: use WEBOS_NPM_INSTALL_FLAGS :Release Notes: Instead of: --arch=${TARGET_ARCH} --loglevel=verbose use --arch=${WEBOS_NPM_ARCH} --target_arch=${WEBOS_NPM_ARCH} --production --without-ssl --insecure --no-optional --verbose like other recipes which use npm. :Detailed Notes: This allows recipes to easily add something to WEBOS_NPM_INSTALL_FLAGS e.g. --force when needed, because it's bitbake variable, not just shell variable install do_compile script. :Testing Performed: Only build tested. :QA Notes: No change to the image. :Issues Addressed: [WRO-3839] CCC: Various build fixes Change-Id: I2ad2497ab1db8897278c082479b9c5be26f9ee6b --- meta-webos/classes/webos_enactjs_app.bbclass | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/classes/webos_enactjs_app.bbclass b/meta-webos/classes/webos_enactjs_app.bbclass index 3da35acc3..a4839c489 100644 --- a/meta-webos/classes/webos_enactjs_app.bbclass +++ b/meta-webos/classes/webos_enactjs_app.bbclass @@ -140,10 +140,10 @@ do_compile() { fi fi - NPM_OPTS="--arch=${TARGET_ARCH} --loglevel=verbose install" + NPM_OPTS="${WEBOS_NPM_INSTALL_FLAGS} install" if [ -z "${WEBOS_ENACTJS_PACK_OVERRIDE}" ] ; then # When a standard Enact app, we can safely skip installing any devDependencies - NPM_OPTS="${NPM_OPTS} --only=production" + NPM_OPTS="${WEBOS_NPM_INSTALL_FLAGS} install --only=production" fi # compile and install node modules in source directory From e5e3865456782d66f393f5ffb21f8999b38dcddd Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Mon, 2 May 2022 17:25:39 +0900 Subject: [PATCH 0360/2022] luna-surfacemanager=373 qtbase-plugins-webos=12 qtwayland=webos31 :Release Notes: Support legacy adaptive update for emulator Fix crash issue with Qt 6.3 :Detailed Notes: luna-surfacemanager: submissions/372..submissions/373 228f8bc Add log messages in UpdateScheduler 71af963 base: Add marquee text in frame latency test 0969fa0 Make legacy adaptive update available qtbase-plugins-webos: submissions/11..submissions/12 7f62a07 Disable page flip notifier in emulator qtwayland=webos31 Add backported patch to fix crash issue :Testing Performed: See the CCC Jira ticket :QA Notes: N/A :Issues Addressed: [WRO-3957] CCC: luna-surfacemanager=373 qtbase-plugins-webos=12 qtwayland=webos31 Change-Id: I4d0d3a02fe13743839cadd1d8ced267d5c2bc854 --- ...tr-returned-by-QWaylandSurface-clien.patch | 30 +++++++++++++++++++ .../recipes-qt/qt6/qtwayland_git.bbappend | 5 ++-- .../luna-surfacemanager.bb | 2 +- .../qtbase-plugins-webos.bb | 2 +- 4 files changed, 35 insertions(+), 4 deletions(-) create mode 100644 meta-webos/recipes-qt/qt6/qtwayland/0004-Fix-Access-nullptr-returned-by-QWaylandSurface-clien.patch diff --git a/meta-webos/recipes-qt/qt6/qtwayland/0004-Fix-Access-nullptr-returned-by-QWaylandSurface-clien.patch b/meta-webos/recipes-qt/qt6/qtwayland/0004-Fix-Access-nullptr-returned-by-QWaylandSurface-clien.patch new file mode 100644 index 000000000..347e7980f --- /dev/null +++ b/meta-webos/recipes-qt/qt6/qtwayland/0004-Fix-Access-nullptr-returned-by-QWaylandSurface-clien.patch @@ -0,0 +1,30 @@ +From 13985f878ffce283564df2eab23ab89070c7417b Mon Sep 17 00:00:00 2001 +From: Roman Genkhel +Date: Thu, 28 Apr 2022 12:53:38 +0300 +Subject: [PATCH] Fix: Access nullptr returned by QWaylandSurface::client() + +surface()->client() could return null at the moment when +QWaylandQuickItem::takeFocus invoked, which cause using nullptr + +Pick-to: 6.3 +Change-Id: I89432882bd7117f45bac889bc85b2f86c77b21e8 +--- + src/compositor/compositor_api/qwaylandquickitem.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/compositor/compositor_api/qwaylandquickitem.cpp b/src/compositor/compositor_api/qwaylandquickitem.cpp +index bf1d0a44..63be7ada 100644 +--- a/src/compositor/compositor_api/qwaylandquickitem.cpp ++++ b/src/compositor/compositor_api/qwaylandquickitem.cpp +@@ -1115,7 +1115,7 @@ void QWaylandQuickItem::takeFocus(QWaylandSeat *device) + { + forceActiveFocus(); + +- if (!surface()) ++ if (!surface() || !surface()->client()) + return; + + QWaylandSeat *target = device; +-- +2.17.1 + diff --git a/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend b/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend index 7597b3f16..e6d4d6772 100644 --- a/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend @@ -2,7 +2,7 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos30" +EXTENDPRAUTO_append = "webos31" FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" @@ -12,7 +12,8 @@ PATCHTOOL = "git" SRC_URI_append = " \ file://0001-Support-presentation-time-protocol.patch;maxver=6.2.* \ file://0002-Use-scope-resolution-operator-for-request.patch;maxver=6.2.* \ - file://0003-Fix-to-have-presentation-feedback-sequence-timely.patch;maxver=6.3.1 \ + file://0003-Fix-to-have-presentation-feedback-sequence-timely.patch;maxver=6.3.0 \ + file://0004-Fix-Access-nullptr-returned-by-QWaylandSurface-clien.patch;maxver=6.3.0 \ " # More options for fine-tuned configuration diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index 134996add..3874b0fee 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0 qtwayland-webos" -WEBOS_VERSION = "2.0.0-372_0cfef81ecf58cb6bd50f9a766a7e976bd2ea21ad" +WEBOS_VERSION = "2.0.0-373_e775a5bac7c84f194d160ef560ac249727db4f5e" PR = "r54" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb index 72e7d86c3..eef9e1a70 100644 --- a/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb +++ b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtbase" -WEBOS_VERSION = "1.0.0-11_2f4b435c79dc99e5add85cb658a49aff54420faf" +WEBOS_VERSION = "1.0.0-12_4e2332c77f1cd215b1da2c879a27ffa57678a6db" PR = "r5" inherit webos_qmake6 From c28d1cc0a959f27711e53be87d67f30588778386 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Mon, 2 May 2022 14:23:15 +0900 Subject: [PATCH 0361/2022] ose: webruntime_91=18 :Release Notes: Fix crash issues found from the crash report :Detailed Notes: webruntime_91: submissions/17..submissions/18 4e249438ca [op][n_upsable][webview] Use base::WeakPtr for binding b52a40b7c1 [op][n_upsable][memory][webos] Do not limit the number of renderer processes. :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRN-19986] [RDX_CRASH][webos] /usr/bin/WebAppMgr in epoll_pwait (libc.so.6 + 0xd09ec) [WRN-20489] [RDX_CRASH][webos] /usr/bin/WebAppMgr in _ZN12WebPageBlink12LoadFinishedERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE (libWebAppMgr.so.1.0 + 0x312e8) [WRO-3946] CCC: ose: webruntime_91=18 Change-Id: I4fdd5d8c9e05d4ee6f6ed14fc06e5badf5e6c85c --- meta-webos/recipes-webos/chromium/webruntime-repo_91.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc index e45d60ca4..d049b6d23 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=c31f1ae166739be9ca186deacf4b32e4" WEBOS_REPO_NAME = "chromium91" -WEBOS_VERSION = "91.0.4472.114-17_dc59a123111a3b28640ea158d5fe07693e686e7f" +WEBOS_VERSION = "91.0.4472.114-18_427f71612496e3072c1a0c2ee6126be3fa11a941" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" From de7fdb3dfdb5904d3d8ccf76d91e55dca8a77cc8 Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Fri, 6 May 2022 17:09:24 +0900 Subject: [PATCH 0362/2022] luna-sysservice=21 :Release Notes: Fix build issue with Qt6.3.1 :Detailed Notes: luna-sysservice: submissions/20..submissions/21 d650ebb Remove find_program for checking Qt version :Testing Performed: See the CCC Jira ticket :QA Notes: N/A :Issues Addressed: [WRO-4175] CCC: luna-sysservice=21 Change-Id: Ifb585514a5dafbba8ab126252a274d1859f91b53 --- meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb b/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb index cee618f82..83e27850e 100644 --- a/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb +++ b/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "Provides preference, timezone and ringtone services" AUTHOR = "Keith Derrick " @@ -14,7 +14,7 @@ DEPENDS = "luna-service2 libpbnjson qtbase uriparser libxml2 sqlite3 pmloglib ny RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_ntp} tzcode" -WEBOS_VERSION = "4.4.0-20_6da3eade3c0a3b08e660097e8a57a58260cf68e1" +WEBOS_VERSION = "4.4.0-21_2d1e59312b516465d40ebcf45559cc3a40578ac6" PR = "r9" inherit webos_component From e9c5e09e54e96dd64ff1df8bdc440c65ace6f78c Mon Sep 17 00:00:00 2001 From: Muniraju Date: Fri, 6 May 2022 15:27:27 +0530 Subject: [PATCH 0363/2022] ose: com.webos.app.notification=12 :Release Notes: Fix Popup abnormal behaviour :Detailed Notes: com.webos.app.notification: submissions/11..submissions/12 373d570 Fixed Popup abnormal behaviour :Testing Performed: Please see the CLM Ticket WRO-4170 :QA Notes: NA :Issues Addressed: [WRO-4170] CCC: com.webos.app.notification=12 [WRO-3531] Delivery of the Notification re-design ticket Change-Id: Idf178d4ede96632f8f98bebf07df1f366c210424 --- .../com.webos.app.notification/com.webos.app.notification.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb b/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb index 76646eb95..12111c094 100644 --- a/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb +++ b/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=0ec407cd2d4a192e0c60888f4ec66dd7 \ " -WEBOS_VERSION = "0.1.0-11_94cf9d3ef58e06231f2637ba8eef4a8af6ccf7b8" +WEBOS_VERSION = "0.1.0-12_1138b6eb8a5bc82b7f4e54a2f1a26c3f9d95ae45" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" PR = "r1" From 5bda5fe681f5de8d89449cc11f57bb34a3154d5c Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sun, 20 Feb 2022 15:30:57 +0000 Subject: [PATCH 0364/2022] webruntime: remove version 87 :Release Notes: Cannot be built without meta-python2. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-17542] Use python3native to build webruntime and remove meta-python2 layer [WRO-3838] CCC: Remove meta-python2 layer Change-Id: I2e3a344e3aaeb924a86884159c78785442e4eeda --- .../chromium/mksnapshot-cross_87.bb | 43 ------------------- .../chromium/webruntime-repo_87.inc | 11 ----- .../recipes-webos/chromium/webruntime_87.bb | 34 --------------- 3 files changed, 88 deletions(-) delete mode 100644 meta-webos/recipes-webos/chromium/mksnapshot-cross_87.bb delete mode 100644 meta-webos/recipes-webos/chromium/webruntime-repo_87.inc delete mode 100644 meta-webos/recipes-webos/chromium/webruntime_87.bb diff --git a/meta-webos/recipes-webos/chromium/mksnapshot-cross_87.bb b/meta-webos/recipes-webos/chromium/mksnapshot-cross_87.bb deleted file mode 100644 index 114635223..000000000 --- a/meta-webos/recipes-webos/chromium/mksnapshot-cross_87.bb +++ /dev/null @@ -1,43 +0,0 @@ -# Copyright (c) 2021 LG Electronics, Inc. - -inherit cross -inherit pkgconfig - -WEBRUNTIME_REPO_VERSION = "87" -require webruntime-common.inc -require webruntime-repo${REPO_VERSION}.inc - -# Intentionaly disable uninative it failed to execute x86 binary on x64 host -# 32bit executable mksnapshot is required to create snapshot for the 32bit target -UNINATIVE_LOADER = "" - -PROVIDES = "mksnapshot-cross-${TARGET_ARCH}" -PN = "mksnapshot-cross-${TARGET_ARCH}" -BPN = "mksnapshot" -PR = "r2" - -TARGET = "v8_snapshot_clang_${TARGET_CPU}/mksnapshot" - -DEPENDS = "glib-2.0-native python-native gcc-runtime" - -GN_ARGS_append = "\ - use_pmlog=false \ -" - -do_configure() { - export GYP_CHROMIUM_NO_ACTION=1 - export PATH="${S}/depot_tools:$PATH" - - GN_ARGS="${GN_ARGS}" - echo GN_ARGS is ${GN_ARGS} - echo BUILD_TARGETS are ${TARGET} - cd ${S}/src - gn --root=${S}/src --dotfile=mksnapshot.gn gen ${OUT_DIR} --args="${GN_ARGS}" -} - -do_install() { - echo "Installing ${PN}" - install -d ${D}${bindir} - - install ${OUT_DIR}/v8_snapshot_clang_${TARGET_CPU}/mksnapshot ${D}${bindir}/mksnapshot-cross-${TARGET_ARCH} -} diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc deleted file mode 100644 index 81fd916de..000000000 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_87.inc +++ /dev/null @@ -1,11 +0,0 @@ -# Copyright (c) 2021-2022 LG Electronics, Inc. - -LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=28f5b870e5e06b9af5b96c9dd65b31c8" - -WEBOS_REPO_NAME = "chromium87" -WEBOS_VERSION = "87.0.4280.88-12_7c9f2fe947810b7ea95f3609e0795f674ad4bfe4" - -WEBOS_REPO_NAME_V8 = "chromium-v8" -WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium87" -WEBOS_VERSION_V8 = "8.7.220.29-chromium87.4_e8a7ab899d76b1e8f48457dbb57178d6bd3a4d02" -SRCREV_v8 = "935065d097cce0090bc858746e6aee0919b222de" diff --git a/meta-webos/recipes-webos/chromium/webruntime_87.bb b/meta-webos/recipes-webos/chromium/webruntime_87.bb deleted file mode 100644 index 19e3af381..000000000 --- a/meta-webos/recipes-webos/chromium/webruntime_87.bb +++ /dev/null @@ -1,34 +0,0 @@ -# Copyright (c) 2021-2022 LG Electronics, Inc. -WEBRUNTIME_REPO_VERSION = "87" - -require webruntime.inc -require webruntime-repo${REPO_VERSION}.inc - -PROVIDES = "virtual/webruntime" - -PR = "${INC_PR}.3" - -GN_ARGS_append = " use_x11=false" - -PACKAGECONFIG[debug] = "symbol_level=2,symbol_level=0" -PACKAGECONFIG[debug-blink] = "blink_symbol_level=1,blink_symbol_level=0" - -# Since _remove is always applied LAST, we cannot implement -# GN_ARGS_remove = "ozone_platform_wayland_external=true" here -# but thanks gn it overrides former gn args values with later ones -# so we just add appropriate args to the end of its list: -PACKAGECONFIG[google_ozone_wayland] = "\ - ozone_platform_wayland=true ozone_platform_wayland_external=false \ - use_system_libwayland=true use_wayland_gbm=false use_system_minigbm=false,\ - ozone_platform_wayland=false ozone_platform_wayland_external=true" - -PACKAGECONFIG[v8_lite] = "v8_enable_lite_mode=true,v8_enable_lite_mode=false" - -GN_ARGS_append = " \ - libdir=\"${libdir}\"\ - includedir=\"${includedir}\"\ - enable_mojom_closure_compile=false\ - enable_js_type_check=false\ -" -PACKAGECONFIG_remove_qemux86 = "gstreamer umediaserver neva-media gav neva-webrtc" -PACKAGECONFIG_remove_qemux86-64 = "gstreamer umediaserver neva-media gav neva-webrtc" From 5b9f523bbcc836a48cb9628bb0306f1208226bf7 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sun, 20 Feb 2022 09:33:15 +0000 Subject: [PATCH 0365/2022] webruntime: use python3native :Release Notes: Most of these changes are already included in chromium 94 in upstream. :Detailed Notes: Modify the recipes to use python3 instead of long unsupported python(2) and backport the build fixes from newer chromium version where needed. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-17542] Use python3native to build webruntime and remove meta-python2 layer [WRO-3838] CCC: Remove meta-python2 layer Change-Id: Ibdfc0307a2b2cef0ed05b9e86baf641baa7532bc --- .../python/python3-beautifulsoup4_%.bbappend | 7 + ...-fix-compatibility-with-python3-3.10.patch | 48 ++ ...jo-use-python3-to-generate-src-files.patch | 348 ++++++++++ ...r.py-Handle-exceptions-when-sharding.patch | 118 ++++ ...0006-Migrate-policy-tools-to-python3.patch | 611 ++++++++++++++++++ ...-policy-use-python3-for-some-actions.patch | 93 +++ .../0008-components-policy-use-python3.patch | 121 ++++ ...iler-use-python3-for-feature_compile.patch | 55 ++ ...iler-use-python3-in-json_schema_api..patch | 59 ++ ...ird_party-closure_compiler-compile_j.patch | 50 ++ ...s-resources-use-python3-for-tools-li.patch | 98 +++ ...ert-third_party-node-node.gni-to-py3.patch | 74 +++ ...s-policy-fix-some-places-for-python3.patch | 180 ++++++ ...-Convert-tools-json_to_struct-to-py3.patch | 39 ++ ...ols-grit-preprocess_if_expr.gni-to-p.patch | 51 ++ ..._set-to-avoid-non-determistic-build-.patch | 97 +++ .../files/0018-webos-fix-python-syntax.patch | 32 + ...onvert-tools-metrics-BUILD.gn-to-py3.patch | 69 ++ ...t-services-metrics-public-cpp-to-py3.patch | 40 ++ ...generate_about_tracing-target-to-py3.patch | 112 ++++ ...-generate_bindings.py-under-Python-3.patch | 40 ++ .../0023-Render-bindings-with-Python-3.patch | 42 ++ ...e-python3-for-instrumentation_probes.patch | 173 +++++ ...er_python2-option-from-grit_rule.gni.patch | 103 +++ ...atapult-Python-3-migration-of-common.patch | 244 +++++++ ...d-Reland-Reland-use-python3-in-devto.patch | 257 ++++++++ ...uf-use-python3-for-protoc_wrapper.py.patch | 51 ++ ...un-gen_file_type_proto.py-in-python3.patch | 90 +++ ...date-ssl_error_assistant-code-to-py3.patch | 110 ++++ ...Py3-for-third_party-dom_distiller_js.patch | 566 ++++++++++++++++ ...2-Py2-Py3-fixup-for-dom_distiller_js.patch | 70 ++ ...033-catapult-use-python3-for-rcssmin.patch | 43 ++ ...ert-third_party-opus-BUILD.gn-to-py3.patch | 84 +++ .../chromium/mksnapshot-cross_91.bb | 8 +- .../chromium/mksnapshot-cross_94.bb | 6 +- .../chromium/webruntime-common.inc | 20 +- .../chromium/webruntime-repo_91.inc | 34 + .../chromium/webruntime-repo_94.inc | 3 + .../recipes-webos/chromium/webruntime.inc | 5 +- 39 files changed, 4223 insertions(+), 28 deletions(-) create mode 100644 meta-webos/recipes-devtools/python/python3-beautifulsoup4_%.bbappend create mode 100644 meta-webos/recipes-webos/chromium/files/0003-jinja2-fix-compatibility-with-python3-3.10.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0004-mojo-use-python3-to-generate-src-files.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0005-mojom_parser.py-Handle-exceptions-when-sharding.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0006-Migrate-policy-tools-to-python3.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0007-components-policy-use-python3-for-some-actions.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0008-components-policy-use-python3.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0009-json_schema_compiler-use-python3-for-feature_compile.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0010-json_schema_compiler-use-python3-in-json_schema_api..patch create mode 100644 meta-webos/recipes-webos/chromium/files/0011-build-Convert-third_party-closure_compiler-compile_j.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0012-Reland-components-resources-use-python3-for-tools-li.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0013-build-Convert-third_party-node-node.gni-to-py3.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0014-components-policy-fix-some-places-for-python3.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0015-build-Convert-tools-json_to_struct-to-py3.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0016-build-Convert-tools-grit-preprocess_if_expr.gni-to-p.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0017-Sort-the-feature_set-to-avoid-non-determistic-build-.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0018-webos-fix-python-syntax.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0019-build-Convert-tools-metrics-BUILD.gn-to-py3.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0020-build-Convert-services-metrics-public-cpp-to-py3.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0021-Reland-Convert-generate_about_tracing-target-to-py3.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0022-Run-generate_bindings.py-under-Python-3.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0023-Render-bindings-with-Python-3.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0024-blink-use-python3-for-instrumentation_probes.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0025-Remove-run_under_python2-option-from-grit_rule.gni.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0026-catapult-Python-3-migration-of-common.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0027-devtools-frontend-Reland-Reland-use-python3-in-devto.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0028-protobuf-use-python3-for-protoc_wrapper.py.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0029-components-run-gen_file_type_proto.py-in-python3.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0030-Update-ssl_error_assistant-code-to-py3.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0031-Py2-Py3-for-third_party-dom_distiller_js.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0032-Py2-Py3-fixup-for-dom_distiller_js.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0033-catapult-use-python3-for-rcssmin.patch create mode 100644 meta-webos/recipes-webos/chromium/files/0034-build-Convert-third_party-opus-BUILD.gn-to-py3.patch diff --git a/meta-webos/recipes-devtools/python/python3-beautifulsoup4_%.bbappend b/meta-webos/recipes-devtools/python/python3-beautifulsoup4_%.bbappend new file mode 100644 index 000000000..6ab7ed2b2 --- /dev/null +++ b/meta-webos/recipes-devtools/python/python3-beautifulsoup4_%.bbappend @@ -0,0 +1,7 @@ +# Work around +# ERROR: Task +# virtual:native:/OE/lge/build/webosose/kirkstone/meta-oe/meta-python/recipes-devtools/python/python3-beautifulsoup4_4.10.0.bb:do_populate_sysroot +# has circular dependency on +# virtual:native:/OE/lge/build/webosose/kirkstone/meta-oe/meta-python/recipes-devtools/python/python3-soupsieve_2.3.1.bb:do_populate_sysroot + +RDEPENDS:${PN}:remove:class-native = "python3-soupsieve" diff --git a/meta-webos/recipes-webos/chromium/files/0003-jinja2-fix-compatibility-with-python3-3.10.patch b/meta-webos/recipes-webos/chromium/files/0003-jinja2-fix-compatibility-with-python3-3.10.patch new file mode 100644 index 000000000..2fe6fa7bf --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0003-jinja2-fix-compatibility-with-python3-3.10.patch @@ -0,0 +1,48 @@ +From dcc8727870eddec05b801adec3ce6c557683e806 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Sun, 20 Feb 2022 12:10:37 +0000 +Subject: [PATCH] jinja2: fix compatibility with python3-3.10 + +Use collection.abc to fix build with python3-3.10: + +| FAILED: v8_snapshot_clang_x64/gen/v8/src/inspector/protocol/Forward.h v8_snapshot_clang_x64/gen/v8/src/inspector/protocol/Protocol.cpp v8_snapshot_clang_x64/gen/v8/src/ins +pector/protocol/Protocol.h v8_snapshot_clang_x64/gen/v8/src/inspector/protocol/Console.cpp v8_snapshot_clang_x64/gen/v8/src/inspector/protocol/Console.h v8_snapshot_clang_x64/gen/v8/src/inspector/protocol/Debugger.cpp v8_snapshot_clang_x64/gen/v8/src/inspector/protocol/Debugger.h v8_snapshot_clang_x64/gen/v8/src/inspector/protocol/HeapProfiler.cpp v8_snapshot_clang_x64/gen/v8/src/inspector/protocol/HeapProfiler.h v8_snapshot_clang_x64/gen/v8/src/inspector/protocol/Profiler.cpp v8_snapshot_clang_x64/gen/v8/src/inspector/protocol/Profiler.h v8_snapshot_clang_x64/gen/v8/src/inspector/protocol/Runtime.cpp v8_snapshot_clang_x64/gen/v8/src/inspector/protocol/Runtime.h v8_snapshot_clang_x64/gen/v8/src/inspector/protocol/Schema.cpp v8_snapshot_clang_x64/gen/v8/src/inspector/protocol/Schema.h v8_snapshot_clang_x64/gen/v8/include/inspector/Debugger.h v8_snapshot_clang_x64/gen/v8/include/inspector/Runtime.h v8_snapshot_clang_x64/gen/v8/include/inspector/Schema.h +| /OE/lge/build/webosose/kirkstone/BUILD/work/x86_64-linux/mksnapshot-cross-x86_64/91.0.4472.114-11-r1/recipe-sysroot-native/usr/bin/python3-native/python3 ../../git/src/v8/third_party/inspector_protocol/code_generator.py --jinja_dir ../../git/src/third_party/ --output_base v8_snapshot_clang_x64/gen/v8/src/inspector --config ../../git/src/v8/src/inspector/inspector_protocol_config.json --inspector_protocol_dir //v8//third_party/inspector_protocol +| Traceback (most recent call last): +| File "/OE/lge/build/webosose/kirkstone/BUILD/work/x86_64-linux/mksnapshot-cross-x86_64/91.0.4472.114-11-r1/build/Release/../../git/src/v8/third_party/inspector_protocol/code_generator.py", line 702, in +| main() +| File "/OE/lge/build/webosose/kirkstone/BUILD/work/x86_64-linux/mksnapshot-cross-x86_64/91.0.4472.114-11-r1/build/Release/../../git/src/v8/third_party/inspector_protocol/code_generator.py", line 584, in main +| jinja_env = initialize_jinja_env(jinja_dir, config.protocol.output, config) +| File "/OE/lge/build/webosose/kirkstone/BUILD/work/x86_64-linux/mksnapshot-cross-x86_64/91.0.4472.114-11-r1/build/Release/../../git/src/v8/third_party/inspector_protocol/code_generator.py", line 190, in initialize_jinja_env +| import jinja2 +| File "/OE/lge/build/webosose/kirkstone/BUILD/work/x86_64-linux/mksnapshot-cross-x86_64/91.0.4472.114-11-r1/git/src/third_party/jinja2/__init__.py", line 33, in +| from jinja2.environment import Environment, Template +| File "/OE/lge/build/webosose/kirkstone/BUILD/work/x86_64-linux/mksnapshot-cross-x86_64/91.0.4472.114-11-r1/git/src/third_party/jinja2/environment.py", line 16, in +| from jinja2.defaults import BLOCK_START_STRING, \ +| File "/OE/lge/build/webosose/kirkstone/BUILD/work/x86_64-linux/mksnapshot-cross-x86_64/91.0.4472.114-11-r1/git/src/third_party/jinja2/defaults.py", line 32, in +| from jinja2.tests import TESTS as DEFAULT_TESTS +| File "/OE/lge/build/webosose/kirkstone/BUILD/work/x86_64-linux/mksnapshot-cross-x86_64/91.0.4472.114-11-r1/git/src/third_party/jinja2/tests.py", line 13, in +| from collections import Mapping +| ImportError: cannot import name 'Mapping' from 'collections' (/OE/lge/build/webosose/kirkstone/BUILD/work/x86_64-linux/mksnapshot-cross-x86_64/91.0.4472.114-11-r1/recipe-sysroot-native/usr/lib/python3.10/collections/__init__.py) + +The same issue is fixed upstream with new jinja2 in: +https://chromium-review.googlesource.com/c/chromium/src/+/3205163 + +Signed-off-by: Martin Jansa +--- + src/third_party/jinja2/tests.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/third_party/jinja2/tests.py b/src/third_party/jinja2/tests.py +index 0adc3d4dbc..b14f85ff14 100644 +--- a/src/third_party/jinja2/tests.py ++++ b/src/third_party/jinja2/tests.py +@@ -10,7 +10,7 @@ + """ + import operator + import re +-from collections import Mapping ++from collections.abc import Mapping + from jinja2.runtime import Undefined + from jinja2._compat import text_type, string_types, integer_types + import decimal diff --git a/meta-webos/recipes-webos/chromium/files/0004-mojo-use-python3-to-generate-src-files.patch b/meta-webos/recipes-webos/chromium/files/0004-mojo-use-python3-to-generate-src-files.patch new file mode 100644 index 000000000..3baae47f1 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0004-mojo-use-python3-to-generate-src-files.patch @@ -0,0 +1,348 @@ +From 1c453ec097ff3f8bb92a944c31b56480d5b4fce1 Mon Sep 17 00:00:00 2001 +From: Takuto Ikuta +Date: Wed, 26 May 2021 23:46:02 +0000 +Subject: [PATCH] mojo: use python3 to generate src files + +This applies sort in some places and adds __lt__ in some classes for +that. + +This doesn't generate deterministic mojo-module file dumped by python +pickle. But that file is not uploaded for test, so that is ignorable. + +Bug: 1194274, 1205583, 1205585 +Change-Id: Id820af101621229d587a92ae071341af3cf146b5 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2919072 +Auto-Submit: Takuto Ikuta +Commit-Queue: Daniel Cheng +Reviewed-by: Daniel Cheng +Reviewed-by: Nico Weber +Cr-Commit-Position: refs/heads/master@{#886958} +--- + src/mojo/public/tools/bindings/BUILD.gn | 4 +- + .../js_templates/lite/mojom-lite.js.tmpl | 2 +- + .../js_templates/lite/mojom.m.js.tmpl | 4 +- + src/mojo/public/tools/bindings/mojom.gni | 36 +++------ + .../tools/mojom/mojom/generate/module.py | 76 +++++++++++++------ + src/mojo/public/tools/mojom/mojom_parser.py | 4 +- + 6 files changed, 72 insertions(+), 54 deletions(-) + +diff --git a/src/mojo/public/tools/bindings/BUILD.gn b/src/mojo/public/tools/bindings/BUILD.gn +index 3e24253274..d9be231117 100644 +--- a/src/mojo/public/tools/bindings/BUILD.gn ++++ b/src/mojo/public/tools/bindings/BUILD.gn +@@ -2,12 +2,10 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + +-import("//build/config/python.gni") + import("//mojo/public/tools/bindings/mojom.gni") + import("//third_party/jinja2/jinja2.gni") + +-# TODO(crbug.com/1194274): Investigate nondeterminism in Py3 builds. +-python2_action("precompile_templates") { ++action("precompile_templates") { + sources = mojom_generator_sources + sources += [ + "$mojom_generator_root/generators/cpp_templates/enum_macros.tmpl", +diff --git a/src/mojo/public/tools/bindings/generators/js_templates/lite/mojom-lite.js.tmpl b/src/mojo/public/tools/bindings/generators/js_templates/lite/mojom-lite.js.tmpl +index e057457d61..64d28589f4 100644 +--- a/src/mojo/public/tools/bindings/generators/js_templates/lite/mojom-lite.js.tmpl ++++ b/src/mojo/public/tools/bindings/generators/js_templates/lite/mojom-lite.js.tmpl +@@ -12,7 +12,7 @@ goog.require('mojo.internal'); + {%- if interfaces %} + goog.require('mojo.internal.interfaceSupport'); + {%- endif %} +-{% for kind in module.imported_kinds.values() %} ++{% for kind in module.imported_kinds.values()|sort %} + goog.require('{{kind|lite_js_import_name}}'); + {%- endfor %} + {% elif not for_bindings_internals %} +diff --git a/src/mojo/public/tools/bindings/generators/js_templates/lite/mojom.m.js.tmpl b/src/mojo/public/tools/bindings/generators/js_templates/lite/mojom.m.js.tmpl +index 659d6480c9..ffdcc5d4de 100644 +--- a/src/mojo/public/tools/bindings/generators/js_templates/lite/mojom.m.js.tmpl ++++ b/src/mojo/public/tools/bindings/generators/js_templates/lite/mojom.m.js.tmpl +@@ -6,9 +6,9 @@ + import {mojo} from '{{bindings_library_path}}'; + {%- endif %} + +-{% for path, kinds in js_module_imports.items() -%} ++{% for path, kinds in js_module_imports.items()|sort -%} + import { +-{%- for kind in kinds %} ++{%- for kind in kinds|sort %} + {%- for item in kind|imports_for_kind %} + {{item.name}} as {{item.alias}} + {%- if not loop.last -%},{% endif -%} +diff --git a/src/mojo/public/tools/bindings/mojom.gni b/src/mojo/public/tools/bindings/mojom.gni +index 9f6489b05f..50b51a6bca 100644 +--- a/src/mojo/public/tools/bindings/mojom.gni ++++ b/src/mojo/public/tools/bindings/mojom.gni +@@ -2,7 +2,6 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + +-import("//build/config/python.gni") + import("//third_party/closure_compiler/closure_args.gni") + import("//third_party/closure_compiler/compile_js.gni") + import("//third_party/protobuf/proto_library.gni") +@@ -626,8 +625,7 @@ template("mojom") { + enabled_features += [ "is_win" ] + } + +- # TODO(crbug.com/1194274): Investigate nondeterminism in Py3 builds. +- python2_action(parser_target_name) { ++ action(parser_target_name) { + script = mojom_parser_script + inputs = mojom_parser_sources + [ build_metadata_filename ] + sources = sources_list +@@ -762,8 +760,7 @@ template("mojom") { + } + } + +- # TODO(crbug.com/1194274): Investigate nondeterminism in Py3 builds. +- python2_action(generator_cpp_message_ids_target_name) { ++ action(generator_cpp_message_ids_target_name) { + script = mojom_generator_script + inputs = mojom_generator_sources + jinja2_sources + sources = sources_list +@@ -803,8 +800,7 @@ template("mojom") { + + generator_shared_target_name = "${target_name}_shared__generator" + +- # TODO(crbug.com/1194274): Investigate nondeterminism in Py3 builds. +- python2_action(generator_shared_target_name) { ++ action(generator_shared_target_name) { + visibility = [ ":*" ] + script = mojom_generator_script + inputs = mojom_generator_sources + jinja2_sources +@@ -924,8 +920,7 @@ template("mojom") { + generator_mojolpm_proto_target_name = + "${target_name}_mojolpm_proto_generator" + +- # TODO(crbug.com/1194274): Investigate nondeterminism in Py3 builds. +- python2_action(generator_mojolpm_proto_target_name) { ++ action(generator_mojolpm_proto_target_name) { + script = mojom_generator_script + inputs = mojom_generator_sources + jinja2_sources + sources = invoker.sources +@@ -1116,7 +1111,7 @@ template("mojom") { + generator_target_name = "${target_name}${variant_suffix}__generator" + + # TODO(crbug.com/1194274): Investigate nondeterminism in Py3 builds. +- python2_action(generator_target_name) { ++ action(generator_target_name) { + visibility = [ ":*" ] + script = mojom_generator_script + inputs = mojom_generator_sources + jinja2_sources +@@ -1297,8 +1292,7 @@ template("mojom") { + write_file(_typemap_config_filename, _rebased_typemap_configs, "json") + _mojom_target_name = target_name + +- # TODO(crbug.com/1194274): Investigate nondeterminism in Py3 builds. +- python2_action(_typemap_validator_target_name) { ++ action(_typemap_validator_target_name) { + script = "$mojom_generator_root/validate_typemap_config.py" + inputs = [ _typemap_config_filename ] + outputs = [ _typemap_stamp_filename ] +@@ -1309,8 +1303,7 @@ template("mojom") { + ] + } + +- # TODO(crbug.com/1194274): Investigate nondeterminism in Py3 builds. +- python2_action(type_mappings_target_name) { ++ action(type_mappings_target_name) { + inputs = + mojom_generator_sources + jinja2_sources + [ _typemap_stamp_filename ] + outputs = [ type_mappings_path ] +@@ -1483,8 +1476,7 @@ template("mojom") { + + java_generator_target_name = target_name + "_java__generator" + if (sources_list != []) { +- # TODO(crbug.com/1194274): Investigate nondeterminism in Py3 builds. +- python2_action(java_generator_target_name) { ++ action(java_generator_target_name) { + script = mojom_generator_script + inputs = mojom_generator_sources + jinja2_sources + sources = sources_list +@@ -1524,8 +1516,7 @@ template("mojom") { + + java_srcjar_target_name = target_name + "_java_sources" + +- # TODO(crbug.com/1194274): Investigate nondeterminism in Py3 builds. +- python2_action(java_srcjar_target_name) { ++ action(java_srcjar_target_name) { + script = "//build/android/gyp/zip.py" + inputs = [] + if (output_file_base_paths != []) { +@@ -1585,8 +1576,7 @@ template("mojom") { + if (sources_list != []) { + generator_js_target_name = "${target_name}_js__generator" + +- # TODO(crbug.com/1194274): Investigate nondeterminism in Py3 builds. +- python2_action(generator_js_target_name) { ++ action(generator_js_target_name) { + script = mojom_generator_script + inputs = mojom_generator_sources + jinja2_sources + sources = sources_list +@@ -1827,8 +1817,7 @@ template("mojom") { + generator_ts_target_name = + "${target_name}_${dependency_type.name}__ts__generator" + +- # TODO(crbug.com/1194274): Investigate nondeterminism in Py3 builds. +- python2_action(generator_ts_target_name) { ++ action(generator_ts_target_name) { + script = mojom_generator_script + inputs = mojom_generator_sources + jinja2_sources + sources = sources_list +@@ -1895,8 +1884,7 @@ template("mojom") { + "${target_name}_${dependency_type.name}__js__generator" + generator_js_target_names += [ generator_js_target_name ] + +- # TODO(crbug.com/1194274): Investigate nondeterminism in Py3 builds. +- python2_action(generator_js_target_name) { ++ action(generator_js_target_name) { + script = "$mojom_generator_root/compile_typescript.py" + sources = ts_outputs + outputs = js_outputs +diff --git a/src/mojo/public/tools/mojom/mojom/generate/module.py b/src/mojo/public/tools/mojom/mojom/generate/module.py +index 35d8fb55a9..44d8a0da01 100644 +--- a/src/mojo/public/tools/mojom/mojom/generate/module.py ++++ b/src/mojo/public/tools/mojom/mojom/generate/module.py +@@ -573,11 +573,18 @@ class Struct(ReferenceKind): + prefix = self.module.GetNamespacePrefix() + return '%s%s' % (prefix, self.mojom_name) + ++ def _tuple(self): ++ return (self.mojom_name, self.native_only, self.fields, self.constants, ++ self.attributes) ++ + def __eq__(self, rhs): +- return (isinstance(rhs, Struct) and +- (self.mojom_name, self.native_only, self.fields, self.constants, +- self.attributes) == (rhs.mojom_name, rhs.native_only, rhs.fields, +- rhs.constants, rhs.attributes)) ++ return isinstance(rhs, Struct) and self._tuple() == rhs._tuple() ++ ++ def __lt__(self, rhs): ++ if not isinstance(self, type(rhs)): ++ return str(type(self)) < str(type(rhs)) ++ ++ return self._tuple() < rhs._tuple() + + def __hash__(self): + return id(self) +@@ -689,10 +696,17 @@ class Union(ReferenceKind): + prefix = self.module.GetNamespacePrefix() + return '%s%s' % (prefix, self.mojom_name) + ++ def _tuple(self): ++ return (self.mojom_name, self.fields, self.attributes) ++ + def __eq__(self, rhs): +- return (isinstance(rhs, Union) and +- (self.mojom_name, self.fields, +- self.attributes) == (rhs.mojom_name, rhs.fields, rhs.attributes)) ++ return isinstance(rhs, Union) and self._tuple() == rhs._tuple() ++ ++ def __lt__(self, rhs): ++ if not isinstance(self, type(rhs)): ++ return str(type(self)) < str(type(rhs)) ++ ++ return self._tuple() < rhs._tuple() + + def __hash__(self): + return id(self) +@@ -1055,12 +1069,18 @@ class Method(object): + return self.attributes.get(ATTRIBUTE_UNLIMITED_SIZE) \ + if self.attributes else False + ++ def _tuple(self): ++ return (self.mojom_name, self.ordinal, self.parameters, ++ self.response_parameters, self.attributes) ++ + def __eq__(self, rhs): +- return (isinstance(rhs, Method) and +- (self.mojom_name, self.ordinal, self.parameters, +- self.response_parameters, +- self.attributes) == (rhs.mojom_name, rhs.ordinal, rhs.parameters, +- rhs.response_parameters, rhs.attributes)) ++ return isinstance(rhs, Method) and self._tuple() == rhs._tuple() ++ ++ def __lt__(self, rhs): ++ if not isinstance(self, type(rhs)): ++ return str(type(self)) < str(type(rhs)) ++ ++ return self._tuple() < rhs._tuple() + + + class Interface(ReferenceKind): +@@ -1193,11 +1213,18 @@ class Interface(ReferenceKind): + prefix = self.module.GetNamespacePrefix() + return '%s%s' % (prefix, self.mojom_name) + ++ def _tuple(self): ++ return (self.mojom_name, self.methods, self.enums, self.constants, ++ self.attributes) ++ + def __eq__(self, rhs): +- return (isinstance(rhs, Interface) +- and (self.mojom_name, self.methods, self.enums, self.constants, +- self.attributes) == (rhs.mojom_name, rhs.methods, rhs.enums, +- rhs.constants, rhs.attributes)) ++ return isinstance(rhs, Interface) and self._tuple() == rhs._tuple() ++ ++ def __lt__(self, rhs): ++ if not isinstance(self, type(rhs)): ++ return str(type(self)) < str(type(rhs)) ++ ++ return self._tuple() < rhs._tuple() + + @property + def uuid(self): +@@ -1352,13 +1379,18 @@ class Enum(Kind): + + return True + ++ def _tuple(self): ++ return (self.mojom_name, self.native_only, self.fields, self.attributes, ++ self.min_value, self.max_value, self.default_field) ++ + def __eq__(self, rhs): +- return (isinstance(rhs, Enum) and +- (self.mojom_name, self.native_only, self.fields, self.attributes, +- self.min_value, self.max_value, +- self.default_field) == (rhs.mojom_name, rhs.native_only, +- rhs.fields, rhs.attributes, rhs.min_value, +- rhs.max_value, rhs.default_field)) ++ return isinstance(rhs, Enum) and self._tuple() == rhs._tuple() ++ ++ def __lt__(self, rhs): ++ if not isinstance(self, type(rhs)): ++ return str(type(self)) < str(type(rhs)) ++ ++ return self._tuple() < rhs._tuple() + + def __hash__(self): + return id(self) +diff --git a/src/mojo/public/tools/mojom/mojom_parser.py b/src/mojo/public/tools/mojom/mojom_parser.py +index 417accf235..49e85e5cf8 100755 +--- a/src/mojo/public/tools/mojom/mojom_parser.py ++++ b/src/mojo/public/tools/mojom/mojom_parser.py +@@ -138,7 +138,7 @@ def _EnsureInputLoaded(mojom_abspath, module_path, abs_paths, asts, + # Already done. + return + +- for dep_abspath, dep_path in dependencies[mojom_abspath]: ++ for dep_abspath, dep_path in sorted(dependencies[mojom_abspath]): + if dep_abspath not in loaded_modules: + _EnsureInputLoaded(dep_abspath, dep_path, abs_paths, asts, dependencies, + loaded_modules, module_metadata) +@@ -273,7 +273,7 @@ def _ParseMojoms(mojom_files, + loaded_mojom_asts[mojom_abspath] = ast + + logging.info('Processing dependencies') +- for mojom_abspath, ast in loaded_mojom_asts.items(): ++ for mojom_abspath, ast in sorted(loaded_mojom_asts.items()): + invalid_imports = [] + for imp in ast.import_list: + import_abspath = _ResolveRelativeImportPath(imp.import_filename, diff --git a/meta-webos/recipes-webos/chromium/files/0005-mojom_parser.py-Handle-exceptions-when-sharding.patch b/meta-webos/recipes-webos/chromium/files/0005-mojom_parser.py-Handle-exceptions-when-sharding.patch new file mode 100644 index 000000000..cd82ace13 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0005-mojom_parser.py-Handle-exceptions-when-sharding.patch @@ -0,0 +1,118 @@ +From 61380e70f6ca7b8ac77d52f7ddaf4d31e24299cb Mon Sep 17 00:00:00 2001 +From: Andrew Grieve +Date: Tue, 15 Jun 2021 15:55:05 +0000 +Subject: [PATCH] mojom_parser.py: Handle exceptions when sharding + +Previously, exceptions such as syntax errors in .mojom files would cause +the script to just hang forever. + +Bug: 1219044 +Change-Id: Ib2ef3166e562e26452221997b2f53891300eb68b +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2958813 +Commit-Queue: Andrew Grieve +Commit-Queue: Ken Rockot +Reviewed-by: Ken Rockot +Cr-Commit-Position: refs/heads/master@{#892597} +Signed-off-by: Martin Jansa +--- + src/mojo/public/tools/mojom/mojom_parser.py | 45 ++++++++++++++++----- + 1 file changed, 35 insertions(+), 10 deletions(-) + +diff --git a/src/mojo/public/tools/mojom/mojom_parser.py b/src/mojo/public/tools/mojom/mojom_parser.py +index 49e85e5cf8..6ec07fca8d 100755 +--- a/src/mojo/public/tools/mojom/mojom_parser.py ++++ b/src/mojo/public/tools/mojom/mojom_parser.py +@@ -11,6 +11,7 @@ generate usable language bindings. + """ + + import argparse ++import builtins + import codecs + import errno + import json +@@ -19,6 +20,7 @@ import multiprocessing + import os + import os.path + import sys ++import traceback + from collections import defaultdict + + from mojom.generate import module +@@ -171,8 +173,7 @@ def _CollectAllowedImportsFromBuildMetadata(build_metadata_filename): + + + # multiprocessing helper. +-def _ParseAstHelper(args): +- mojom_abspath, enabled_features = args ++def _ParseAstHelper(mojom_abspath, enabled_features): + with codecs.open(mojom_abspath, encoding='utf-8') as f: + ast = parser.Parse(f.read(), mojom_abspath) + conditional_features.RemoveDisabledDefinitions(ast, enabled_features) +@@ -180,8 +181,7 @@ def _ParseAstHelper(args): + + + # multiprocessing helper. +-def _SerializeHelper(args): +- mojom_abspath, mojom_path = args ++def _SerializeHelper(mojom_abspath, mojom_path): + module_path = os.path.join(_SerializeHelper.output_root_path, + _GetModuleFilename(mojom_path)) + module_dir = os.path.dirname(module_path) +@@ -198,12 +198,33 @@ def _SerializeHelper(args): + _SerializeHelper.loaded_modules[mojom_abspath].Dump(f) + + +-def _Shard(target_func, args, processes=None): +- args = list(args) ++class _ExceptionWrapper: ++ def __init__(self): ++ # Do not capture exception object to ensure pickling works. ++ self.formatted_trace = traceback.format_exc() ++ ++ ++class _FuncWrapper: ++ """Marshals exceptions and spreads args.""" ++ ++ def __init__(self, func): ++ self._func = func ++ ++ def __call__(self, args): ++ # multiprocessing does not gracefully handle excptions. ++ # https://crbug.com/1219044 ++ try: ++ return self._func(*args) ++ except: # pylint: disable=bare-except ++ return _ExceptionWrapper() ++ ++ ++def _Shard(target_func, arg_list, processes=None): ++ arg_list = list(arg_list) + if processes is None: + processes = multiprocessing.cpu_count() + # Seems optimal to have each process perform at least 2 tasks. +- processes = min(processes, len(args) // 2) ++ processes = min(processes, len(arg_list) // 2) + + if sys.platform == 'win32': + # TODO(crbug.com/1190269) - we can't use more than 56 +@@ -212,13 +233,17 @@ def _Shard(target_func, args, processes=None): + + # Don't spin up processes unless there is enough work to merit doing so. + if not ENABLE_MULTIPROCESSING or processes < 2: +- for result in map(target_func, args): +- yield result ++ for arg_tuple in arg_list: ++ yield target_func(*arg_tuple) + return + + pool = multiprocessing.Pool(processes=processes) + try: +- for result in pool.imap_unordered(target_func, args): ++ wrapped_func = _FuncWrapper(target_func) ++ for result in pool.imap_unordered(wrapped_func, arg_list): ++ if isinstance(result, _ExceptionWrapper): ++ sys.stderr.write(result.formatted_trace) ++ sys.exit(1) + yield result + finally: + pool.close() diff --git a/meta-webos/recipes-webos/chromium/files/0006-Migrate-policy-tools-to-python3.patch b/meta-webos/recipes-webos/chromium/files/0006-Migrate-policy-tools-to-python3.patch new file mode 100644 index 000000000..a992eb99b --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0006-Migrate-policy-tools-to-python3.patch @@ -0,0 +1,611 @@ +From beec7a7aaa05e945fdb40954336408663feafcdd Mon Sep 17 00:00:00 2001 +From: Oleg Davydov +Date: Mon, 7 Jun 2021 16:15:43 +0000 +Subject: [PATCH] Migrate policy tools to python3 + +This CL converts the rest (after https://crrev.com/c/2940544) scripts +from components/policy/tools/ from python2 to python3. + +Bug: 1196322 +Change-Id: I1238583ac9471e88120097fe64a27f046118fef1 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2940552 +Reviewed-by: Yann Dago +Commit-Queue: Oleg Davydov +Cr-Commit-Position: refs/heads/master@{#889781} +--- + .../tools/template_writers/PRESUBMIT.py | 5 +++- + .../policy/tools/template_writers/__init__.py | 2 +- + .../policy_template_generator.py | 2 +- + .../policy_template_generator_unittest.py | 2 +- + .../template_writers/template_formatter.py | 2 +- + .../tools/template_writers/test_suite_all.py | 2 +- + .../template_writers/writer_configuration.py | 2 +- + .../template_writers/writers/__init__.py | 2 +- + .../template_writers/writers/adm_writer.py | 2 +- + .../writers/adm_writer_unittest.py | 2 +- + .../template_writers/writers/adml_writer.py | 2 +- + .../writers/adml_writer_unittest.py | 2 +- + .../template_writers/writers/admx_writer.py | 2 +- + .../writers/admx_writer_unittest.py | 2 +- + .../writers/android_policy_writer.py | 2 +- + .../writers/android_policy_writer_unittest.py | 2 +- + .../writers/chromeos_adml_writer.py | 2 +- + .../writers/chromeos_adml_writer_unittest.py | 2 +- + .../writers/chromeos_admx_writer.py | 2 +- + .../writers/chromeos_admx_writer_unittest.py | 2 +- + .../writers/doc_atomic_groups_writer.py | 2 +- + .../template_writers/writers/doc_writer.py | 23 ++++++++++++++----- + .../writers/doc_writer_unittest.py | 2 +- + .../writers/google_adml_writer.py | 2 +- + .../writers/google_adml_writer_unittest.py | 2 +- + .../writers/google_admx_writer.py | 2 +- + .../writers/google_admx_writer_unittest.py | 2 +- + .../writers/gpo_editor_writer.py | 2 +- + .../writers/ios_app_config_writer.py | 2 +- + .../writers/ios_app_config_writer_unittest.py | 2 +- + .../template_writers/writers/jamf_writer.py | 5 ++-- + .../writers/jamf_writer_unittest.py | 2 +- + .../template_writers/writers/json_writer.py | 2 +- + .../writers/json_writer_unittest.py | 2 +- + .../template_writers/writers/mock_writer.py | 4 ++-- + .../template_writers/writers/plist_helper.py | 2 +- + .../writers/plist_strings_writer.py | 2 +- + .../template_writers/writers/plist_writer.py | 2 +- + .../writers/plist_writer_unittest.py | 2 +- + .../template_writers/writers/reg_writer.py | 2 +- + .../writers/reg_writer_unittest.py | 2 +- + .../writers/template_writer.py | 8 +++---- + .../writers/template_writer_unittest.py | 2 +- + .../writers/writer_unittest_common.py | 2 +- + .../writers/xml_formatted_writer.py | 2 +- + .../writers/xml_writer_base_unittest.py | 2 +- + 46 files changed, 71 insertions(+), 56 deletions(-) + +diff --git a/src/components/policy/tools/template_writers/PRESUBMIT.py b/src/components/policy/tools/template_writers/PRESUBMIT.py +index 66f6f827f3..e159b0d3b7 100755 +--- a/src/components/policy/tools/template_writers/PRESUBMIT.py ++++ b/src/components/policy/tools/template_writers/PRESUBMIT.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2017 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +@@ -9,6 +9,9 @@ details on the presubmit API built into gcl. + """ + + ++USE_PYTHON3 = True ++ ++ + def RunUnittests(input_api, output_api): + return input_api.canned_checks.RunPythonUnitTests(input_api, output_api, + ['test_suite_all']) +diff --git a/src/components/policy/tools/template_writers/__init__.py b/src/components/policy/tools/template_writers/__init__.py +index 14d138a31c..abc93655ae 100755 +--- a/src/components/policy/tools/template_writers/__init__.py ++++ b/src/components/policy/tools/template_writers/__init__.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/policy_template_generator.py b/src/components/policy/tools/template_writers/policy_template_generator.py +index eb2cba04bf..8f955f799d 100755 +--- a/src/components/policy/tools/template_writers/policy_template_generator.py ++++ b/src/components/policy/tools/template_writers/policy_template_generator.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/policy_template_generator_unittest.py b/src/components/policy/tools/template_writers/policy_template_generator_unittest.py +index 09d9cc58e3..5beb6082a4 100755 +--- a/src/components/policy/tools/template_writers/policy_template_generator_unittest.py ++++ b/src/components/policy/tools/template_writers/policy_template_generator_unittest.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/template_formatter.py b/src/components/policy/tools/template_writers/template_formatter.py +index 56b63c5fd7..fe1f7a5606 100755 +--- a/src/components/policy/tools/template_writers/template_formatter.py ++++ b/src/components/policy/tools/template_writers/template_formatter.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2017 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/test_suite_all.py b/src/components/policy/tools/template_writers/test_suite_all.py +index 87b2317e7f..8ca43de457 100755 +--- a/src/components/policy/tools/template_writers/test_suite_all.py ++++ b/src/components/policy/tools/template_writers/test_suite_all.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2017 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writer_configuration.py b/src/components/policy/tools/template_writers/writer_configuration.py +index b3917d1c69..a2c07c4ca5 100755 +--- a/src/components/policy/tools/template_writers/writer_configuration.py ++++ b/src/components/policy/tools/template_writers/writer_configuration.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/__init__.py b/src/components/policy/tools/template_writers/writers/__init__.py +index df56f5caa8..fb050d1f24 100755 +--- a/src/components/policy/tools/template_writers/writers/__init__.py ++++ b/src/components/policy/tools/template_writers/writers/__init__.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/adm_writer.py b/src/components/policy/tools/template_writers/writers/adm_writer.py +index 4b480c4587..7c20a5a8e7 100755 +--- a/src/components/policy/tools/template_writers/writers/adm_writer.py ++++ b/src/components/policy/tools/template_writers/writers/adm_writer.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/adm_writer_unittest.py b/src/components/policy/tools/template_writers/writers/adm_writer_unittest.py +index 38389e0d4e..9d2b86d9e3 100755 +--- a/src/components/policy/tools/template_writers/writers/adm_writer_unittest.py ++++ b/src/components/policy/tools/template_writers/writers/adm_writer_unittest.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/adml_writer.py b/src/components/policy/tools/template_writers/writers/adml_writer.py +index 96af4b6b07..e40dcb116e 100755 +--- a/src/components/policy/tools/template_writers/writers/adml_writer.py ++++ b/src/components/policy/tools/template_writers/writers/adml_writer.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/adml_writer_unittest.py b/src/components/policy/tools/template_writers/writers/adml_writer_unittest.py +index 6a34cccc3b..2f1afd1450 100755 +--- a/src/components/policy/tools/template_writers/writers/adml_writer_unittest.py ++++ b/src/components/policy/tools/template_writers/writers/adml_writer_unittest.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/admx_writer.py b/src/components/policy/tools/template_writers/writers/admx_writer.py +index 8da5024ca0..58b761c869 100755 +--- a/src/components/policy/tools/template_writers/writers/admx_writer.py ++++ b/src/components/policy/tools/template_writers/writers/admx_writer.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/admx_writer_unittest.py b/src/components/policy/tools/template_writers/writers/admx_writer_unittest.py +index 0ba159d4d5..1543a016bb 100755 +--- a/src/components/policy/tools/template_writers/writers/admx_writer_unittest.py ++++ b/src/components/policy/tools/template_writers/writers/admx_writer_unittest.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/android_policy_writer.py b/src/components/policy/tools/template_writers/writers/android_policy_writer.py +index 593e04c6ef..fa9ee07e62 100755 +--- a/src/components/policy/tools/template_writers/writers/android_policy_writer.py ++++ b/src/components/policy/tools/template_writers/writers/android_policy_writer.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2015 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/android_policy_writer_unittest.py b/src/components/policy/tools/template_writers/writers/android_policy_writer_unittest.py +index b36a72a846..a282bc5aab 100755 +--- a/src/components/policy/tools/template_writers/writers/android_policy_writer_unittest.py ++++ b/src/components/policy/tools/template_writers/writers/android_policy_writer_unittest.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2015 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/chromeos_adml_writer.py b/src/components/policy/tools/template_writers/writers/chromeos_adml_writer.py +index 6ae5309082..72e4dfc583 100755 +--- a/src/components/policy/tools/template_writers/writers/chromeos_adml_writer.py ++++ b/src/components/policy/tools/template_writers/writers/chromeos_adml_writer.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2017 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/chromeos_adml_writer_unittest.py b/src/components/policy/tools/template_writers/writers/chromeos_adml_writer_unittest.py +index 4cf97d3d0f..f07d299270 100755 +--- a/src/components/policy/tools/template_writers/writers/chromeos_adml_writer_unittest.py ++++ b/src/components/policy/tools/template_writers/writers/chromeos_adml_writer_unittest.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2017 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/chromeos_admx_writer.py b/src/components/policy/tools/template_writers/writers/chromeos_admx_writer.py +index fa53e170d3..c9f1c2c505 100755 +--- a/src/components/policy/tools/template_writers/writers/chromeos_admx_writer.py ++++ b/src/components/policy/tools/template_writers/writers/chromeos_admx_writer.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2017 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/chromeos_admx_writer_unittest.py b/src/components/policy/tools/template_writers/writers/chromeos_admx_writer_unittest.py +index 6208f02914..b6b4f83a42 100755 +--- a/src/components/policy/tools/template_writers/writers/chromeos_admx_writer_unittest.py ++++ b/src/components/policy/tools/template_writers/writers/chromeos_admx_writer_unittest.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2017 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/doc_atomic_groups_writer.py b/src/components/policy/tools/template_writers/writers/doc_atomic_groups_writer.py +index a98f1a6a16..9f92347a6c 100755 +--- a/src/components/policy/tools/template_writers/writers/doc_atomic_groups_writer.py ++++ b/src/components/policy/tools/template_writers/writers/doc_atomic_groups_writer.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2019 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/doc_writer.py b/src/components/policy/tools/template_writers/writers/doc_writer.py +index 5f7d775df0..178497ca80 100755 +--- a/src/components/policy/tools/template_writers/writers/doc_writer.py ++++ b/src/components/policy/tools/template_writers/writers/doc_writer.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2019 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +@@ -127,7 +127,11 @@ class DocWriter(xml_formatted_writer.XMLFormattedWriter): + ''' + dd = self._AddPolicyAttribute(parent, 'schema', None, + ['.monospace', '.pre-wrap']) +- schema_json = json.dumps(schema, indent=2, sort_keys=True) ++ # Explicitly specify separators since defaults depend on python version. ++ schema_json = json.dumps(schema, ++ indent=2, ++ sort_keys=True, ++ separators=(", ", ": ")) + self.AddText(dd, schema_json) + + def _AddFeatures(self, parent, policy): +@@ -141,8 +145,7 @@ class DocWriter(xml_formatted_writer.XMLFormattedWriter): + ''' + features = [] + # The sorting is to make the order well-defined for testing. +- keys = policy['features'].keys() +- keys.sort() ++ keys = sorted(policy['features'].keys()) + for key in keys: + key_name = self._FEATURE_MAP[key] + if policy['features'][key]: +@@ -325,7 +328,11 @@ class DocWriter(xml_formatted_writer.XMLFormattedWriter): + self.AddElement(parent, 'dt', {}, os_header) + element = self._AddStyledElement(parent, 'dd', ['.monospace', '.pre-wrap']) + key_name = self._GetRegistryKeyName(policy, is_win) +- example = json.dumps(policy['example_value'], indent=2, sort_keys=True) ++ # Explicitly specify separators since defaults depend on python version. ++ example = json.dumps(policy['example_value'], ++ indent=2, ++ sort_keys=True, ++ separators=(", ", ": ")) + self.AddText(element, '%s\\%s = %s' % (key_name, policy['name'], example)) + + def _AddDictionaryExampleAndroidLinux(self, parent, policy): +@@ -339,7 +346,11 @@ class DocWriter(xml_formatted_writer.XMLFormattedWriter): + ''' + self.AddElement(parent, 'dt', {}, 'Android/Linux:') + element = self._AddStyledElement(parent, 'dd', ['.monospace', '.pre-wrap']) +- example = json.dumps(policy['example_value'], indent=2, sort_keys=True) ++ # Explicitly specify separators since defaults depend on python version. ++ example = json.dumps(policy['example_value'], ++ indent=2, ++ sort_keys=True, ++ separators=(", ", ": ")) + self.AddText(element, '%s: %s' % (policy['name'], example)) + + def _AddDictionaryExample(self, parent, policy): +diff --git a/src/components/policy/tools/template_writers/writers/doc_writer_unittest.py b/src/components/policy/tools/template_writers/writers/doc_writer_unittest.py +index ed8de5ccdb..e6d01728e7 100755 +--- a/src/components/policy/tools/template_writers/writers/doc_writer_unittest.py ++++ b/src/components/policy/tools/template_writers/writers/doc_writer_unittest.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/google_adml_writer.py b/src/components/policy/tools/template_writers/writers/google_adml_writer.py +index 85d1f960d1..a126d34096 100755 +--- a/src/components/policy/tools/template_writers/writers/google_adml_writer.py ++++ b/src/components/policy/tools/template_writers/writers/google_adml_writer.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2017 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/google_adml_writer_unittest.py b/src/components/policy/tools/template_writers/writers/google_adml_writer_unittest.py +index 8ca5515573..3170f57f5f 100755 +--- a/src/components/policy/tools/template_writers/writers/google_adml_writer_unittest.py ++++ b/src/components/policy/tools/template_writers/writers/google_adml_writer_unittest.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2017 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/google_admx_writer.py b/src/components/policy/tools/template_writers/writers/google_admx_writer.py +index 4e013a80c2..e1f885ff60 100755 +--- a/src/components/policy/tools/template_writers/writers/google_admx_writer.py ++++ b/src/components/policy/tools/template_writers/writers/google_admx_writer.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2017 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/google_admx_writer_unittest.py b/src/components/policy/tools/template_writers/writers/google_admx_writer_unittest.py +index f82e24c04f..f4f1e6dcdc 100755 +--- a/src/components/policy/tools/template_writers/writers/google_admx_writer_unittest.py ++++ b/src/components/policy/tools/template_writers/writers/google_admx_writer_unittest.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2017 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/gpo_editor_writer.py b/src/components/policy/tools/template_writers/writers/gpo_editor_writer.py +index b662eb02ca..7ace447c3f 100755 +--- a/src/components/policy/tools/template_writers/writers/gpo_editor_writer.py ++++ b/src/components/policy/tools/template_writers/writers/gpo_editor_writer.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2018 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/ios_app_config_writer.py b/src/components/policy/tools/template_writers/writers/ios_app_config_writer.py +index 233d55757f..a5a61f9d40 100755 +--- a/src/components/policy/tools/template_writers/writers/ios_app_config_writer.py ++++ b/src/components/policy/tools/template_writers/writers/ios_app_config_writer.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2020 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/ios_app_config_writer_unittest.py b/src/components/policy/tools/template_writers/writers/ios_app_config_writer_unittest.py +index aadaf534d1..8774f2e84a 100755 +--- a/src/components/policy/tools/template_writers/writers/ios_app_config_writer_unittest.py ++++ b/src/components/policy/tools/template_writers/writers/ios_app_config_writer_unittest.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2020 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/jamf_writer.py b/src/components/policy/tools/template_writers/writers/jamf_writer.py +index e87cd15c6f..41fa458dec 100755 +--- a/src/components/policy/tools/template_writers/writers/jamf_writer.py ++++ b/src/components/policy/tools/template_writers/writers/jamf_writer.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2020 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +@@ -186,7 +186,8 @@ class JamfWriter(template_writer.TemplateWriter): + return + if 'id' in obj: + ids_in_ancestry.add(obj['id']) +- for key, value in obj.items(): ++ # Make a copy of items since we are going to change |obj|. ++ for key, value in list(obj.items()): + if type(value) is not dict: + continue + if '$ref' in value: +diff --git a/src/components/policy/tools/template_writers/writers/jamf_writer_unittest.py b/src/components/policy/tools/template_writers/writers/jamf_writer_unittest.py +index 1ab69c41f7..35fc22bdc7 100755 +--- a/src/components/policy/tools/template_writers/writers/jamf_writer_unittest.py ++++ b/src/components/policy/tools/template_writers/writers/jamf_writer_unittest.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2020 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/json_writer.py b/src/components/policy/tools/template_writers/writers/json_writer.py +index 594362152c..7d5d166c7c 100755 +--- a/src/components/policy/tools/template_writers/writers/json_writer.py ++++ b/src/components/policy/tools/template_writers/writers/json_writer.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/json_writer_unittest.py b/src/components/policy/tools/template_writers/writers/json_writer_unittest.py +index 3dacf254cd..5f7c3ad966 100755 +--- a/src/components/policy/tools/template_writers/writers/json_writer_unittest.py ++++ b/src/components/policy/tools/template_writers/writers/json_writer_unittest.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/mock_writer.py b/src/components/policy/tools/template_writers/writers/mock_writer.py +index bcb43ada06..19e1d74890 100755 +--- a/src/components/policy/tools/template_writers/writers/mock_writer.py ++++ b/src/components/policy/tools/template_writers/writers/mock_writer.py +@@ -1,9 +1,9 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + +-from template_writer import TemplateWriter ++from .template_writer import TemplateWriter + + + class MockWriter(TemplateWriter): +diff --git a/src/components/policy/tools/template_writers/writers/plist_helper.py b/src/components/policy/tools/template_writers/writers/plist_helper.py +index 2f6d3d7750..e69f00dcb6 100755 +--- a/src/components/policy/tools/template_writers/writers/plist_helper.py ++++ b/src/components/policy/tools/template_writers/writers/plist_helper.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/plist_strings_writer.py b/src/components/policy/tools/template_writers/writers/plist_strings_writer.py +index cb4d8482fb..adfbc6d279 100755 +--- a/src/components/policy/tools/template_writers/writers/plist_strings_writer.py ++++ b/src/components/policy/tools/template_writers/writers/plist_strings_writer.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/plist_writer.py b/src/components/policy/tools/template_writers/writers/plist_writer.py +index acac7e2473..e866648645 100755 +--- a/src/components/policy/tools/template_writers/writers/plist_writer.py ++++ b/src/components/policy/tools/template_writers/writers/plist_writer.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/plist_writer_unittest.py b/src/components/policy/tools/template_writers/writers/plist_writer_unittest.py +index 05f7f6c90b..92d75ee7f8 100755 +--- a/src/components/policy/tools/template_writers/writers/plist_writer_unittest.py ++++ b/src/components/policy/tools/template_writers/writers/plist_writer_unittest.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/reg_writer.py b/src/components/policy/tools/template_writers/writers/reg_writer.py +index 2e279786d0..3fbd0a6b35 100755 +--- a/src/components/policy/tools/template_writers/writers/reg_writer.py ++++ b/src/components/policy/tools/template_writers/writers/reg_writer.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/reg_writer_unittest.py b/src/components/policy/tools/template_writers/writers/reg_writer_unittest.py +index e59777f1bc..7278f76b00 100755 +--- a/src/components/policy/tools/template_writers/writers/reg_writer_unittest.py ++++ b/src/components/policy/tools/template_writers/writers/reg_writer_unittest.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/template_writer.py b/src/components/policy/tools/template_writers/writers/template_writer.py +index 0ce8ed2c64..bc1c3489f7 100755 +--- a/src/components/policy/tools/template_writers/writers/template_writer.py ++++ b/src/components/policy/tools/template_writers/writers/template_writer.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +@@ -292,9 +292,9 @@ class TemplateWriter(object): + ''' + for policy in policy_list: + if policy['type'] == 'group': +- child_policies = self._GetPoliciesForWriter(policy) +- child_recommended_policies = filter(self.CanBeRecommended, +- child_policies) ++ child_policies = list(self._GetPoliciesForWriter(policy)) ++ child_recommended_policies = list( ++ filter(self.CanBeRecommended, child_policies)) + if child_policies: + # Only write nonempty groups. + self.BeginPolicyGroup(policy) +diff --git a/src/components/policy/tools/template_writers/writers/template_writer_unittest.py b/src/components/policy/tools/template_writers/writers/template_writer_unittest.py +index 3d4988e208..d725cdfac7 100755 +--- a/src/components/policy/tools/template_writers/writers/template_writer_unittest.py ++++ b/src/components/policy/tools/template_writers/writers/template_writer_unittest.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/writer_unittest_common.py b/src/components/policy/tools/template_writers/writers/writer_unittest_common.py +index b0fdf67c48..d96bb7986d 100755 +--- a/src/components/policy/tools/template_writers/writers/writer_unittest_common.py ++++ b/src/components/policy/tools/template_writers/writers/writer_unittest_common.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2017 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/xml_formatted_writer.py b/src/components/policy/tools/template_writers/writers/xml_formatted_writer.py +index e4813d6e8b..02fee8293f 100755 +--- a/src/components/policy/tools/template_writers/writers/xml_formatted_writer.py ++++ b/src/components/policy/tools/template_writers/writers/xml_formatted_writer.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/policy/tools/template_writers/writers/xml_writer_base_unittest.py b/src/components/policy/tools/template_writers/writers/xml_writer_base_unittest.py +index 2b5df21760..40c2ff52bb 100755 +--- a/src/components/policy/tools/template_writers/writers/xml_writer_base_unittest.py ++++ b/src/components/policy/tools/template_writers/writers/xml_writer_base_unittest.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. diff --git a/meta-webos/recipes-webos/chromium/files/0007-components-policy-use-python3-for-some-actions.patch b/meta-webos/recipes-webos/chromium/files/0007-components-policy-use-python3-for-some-actions.patch new file mode 100644 index 000000000..86b7808fc --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0007-components-policy-use-python3-for-some-actions.patch @@ -0,0 +1,93 @@ +From 97343907faf8c27c2855d284da226bb6d8272bb0 Mon Sep 17 00:00:00 2001 +From: Takuto Ikuta +Date: Wed, 2 Jun 2021 08:59:02 +0000 +Subject: [PATCH] components/policy: use python3 for some actions + +Bug: 1205599 +Change-Id: If014a2f9b42d689414915e62bff3b34aaac2205a +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2932303 +Commit-Queue: Julian Pastarmov +Auto-Submit: Takuto Ikuta +Reviewed-by: Julian Pastarmov +Cr-Commit-Position: refs/heads/master@{#888372} +--- + src/components/policy/BUILD.gn | 6 ++---- + .../policy/tools/generate_policy_source.py | 16 +++++++++++++--- + 2 files changed, 15 insertions(+), 7 deletions(-) + +diff --git a/src/components/policy/BUILD.gn b/src/components/policy/BUILD.gn +index cff5243301..f3677133fd 100644 +--- a/src/components/policy/BUILD.gn ++++ b/src/components/policy/BUILD.gn +@@ -99,8 +99,7 @@ constants_source_path = "$target_gen_dir/policy_constants.cc" + app_restrictions_path = "$target_gen_dir/app_restrictions.xml" + risk_tag_header_path = "$target_gen_dir/risk_tag.h" + +-# TODO(crbug.com/1112471): Get this to run cleanly under Python 3. +-python2_action("policy_code_generate") { ++action("policy_code_generate") { + script = "tools/generate_policy_source.py" + chrome_version_abspath = "//chrome/VERSION" + chrome_version_path = rebase_path(chrome_version_abspath, root_build_dir) +@@ -144,8 +143,7 @@ python2_action("policy_code_generate") { + ] + } + +-# TODO(crbug.com/1112471): Get this to run cleanly under Python 3. +-python2_action("full_runtime_code_generate") { ++action("full_runtime_code_generate") { + script = "tools/generate_policy_source.py" + chrome_version_abspath = "//chrome/VERSION" + chrome_version_path = rebase_path(chrome_version_abspath, root_build_dir) +diff --git a/src/components/policy/tools/generate_policy_source.py b/src/components/policy/tools/generate_policy_source.py +index 154b624322..74c4ad3d96 100755 +--- a/src/components/policy/tools/generate_policy_source.py ++++ b/src/components/policy/tools/generate_policy_source.py +@@ -16,10 +16,20 @@ from argparse import ArgumentParser + from collections import namedtuple + from collections import OrderedDict + from functools import partial ++import ast ++import os + import json + import re + import sys + import textwrap ++ ++sys.path.insert( ++ 0, ++ os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, os.pardir, ++ 'third_party', 'six', 'src')) ++ ++import six ++ + from xml.sax.saxutils import escape as xml_escape + + if sys.version_info.major == 2: +@@ -374,7 +384,7 @@ def main(): + + def GenerateFile(path, writer, sorted=False, xml=False): + if path: +- with open(path, 'w') as f: ++ with codecs.open(path, 'w', encoding='utf-8') as f: + _OutputGeneratedWarningHeader(f, template_file_name, xml) + writer(sorted and sorted_policy_details or policy_details, + sorted and sorted_policy_atomic_groups or policy_atomic_groups, +@@ -451,7 +461,7 @@ COMMENT_WRAPPER.replace_whitespace = False + + # Writes a comment, each line prefixed by // and wrapped to 80 spaces. + def _OutputComment(f, comment): +- for line in comment.splitlines(): ++ for line in six.ensure_text(comment).splitlines(): + if len(line) == 0: + f.write('//') + else: +@@ -462,7 +472,7 @@ def _OutputComment(f, comment): + def _LoadJSONFile(json_file): + with open(json_file, 'r') as f: + text = f.read() +- return eval(text) ++ return ast.literal_eval(text) + + + #------------------ policy constants header ------------------------# diff --git a/meta-webos/recipes-webos/chromium/files/0008-components-policy-use-python3.patch b/meta-webos/recipes-webos/chromium/files/0008-components-policy-use-python3.patch new file mode 100644 index 000000000..358140256 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0008-components-policy-use-python3.patch @@ -0,0 +1,121 @@ +From ffae1dbd0dd6980437ef6935dc13118eae49b0c2 Mon Sep 17 00:00:00 2001 +From: Takuto Ikuta +Date: Mon, 7 Jun 2021 09:00:05 +0000 +Subject: [PATCH] components/policy: use python3 + +Fix for int/str comparison changed expectation of a test. + +Fixed: 1205599 +Bug: 1216996 +Change-Id: Ib368cfd04780d979bea7be575eabc3fa5f7b7b2f +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2931485 +Auto-Submit: Takuto Ikuta +Commit-Queue: Julian Pastarmov +Reviewed-by: Julian Pastarmov +Cr-Commit-Position: refs/heads/master@{#889681} +--- + src/components/policy/BUILD.gn | 4 +--- + .../tools/template_writers/template_formatter.py | 2 +- + .../template_writers/writers/adm_writer_unittest.py | 1 + + .../tools/template_writers/writers/admx_writer.py | 5 +++-- + .../template_writers/writers/android_policy_writer.py | 10 +++++++++- + .../template_writers/writers/gpo_editor_writer.py | 2 +- + 6 files changed, 16 insertions(+), 8 deletions(-) + +diff --git a/src/components/policy/BUILD.gn b/src/components/policy/BUILD.gn +index f3677133fd..7b35658916 100644 +--- a/src/components/policy/BUILD.gn ++++ b/src/components/policy/BUILD.gn +@@ -6,7 +6,6 @@ import("//build/apple/convert_plist.gni") + import("//build/config/chrome_build.gni") + import("//build/config/chromeos/ui_mode.gni") + import("//build/config/features.gni") +-import("//build/config/python.gni") + import("//build/toolchain/toolchain.gni") + import("//components/policy/resources/policy_templates.gni") + import("//third_party/libprotobuf-mutator/fuzzable_proto_library.gni") +@@ -190,8 +189,7 @@ grit("translate_policy_templates") { + } + + # Generate the various templates and docs (admx, doc, json, etc.) +-# TODO(crbug.com/1112471): Get this to run cleanly under Python 3. +-python2_action("policy_templates") { ++action("policy_templates") { + script = "tools/template_writers/template_formatter.py" + chrome_version_abspath = "//chrome/VERSION" + chrome_version_path = rebase_path(chrome_version_abspath, root_build_dir) +diff --git a/src/components/policy/tools/template_writers/template_formatter.py b/src/components/policy/tools/template_writers/template_formatter.py +index fe1f7a5606..71b402476b 100755 +--- a/src/components/policy/tools/template_writers/template_formatter.py ++++ b/src/components/policy/tools/template_writers/template_formatter.py +@@ -198,7 +198,7 @@ def main(): + _LANG_PLACEHOLDER = "${lang}" + assert _LANG_PLACEHOLDER in args.translations + +- languages = filter(bool, args.languages.split(',')) ++ languages = list(filter(bool, args.languages.split(','))) + assert _DEFAULT_LANGUAGE in languages + + config = _GetWriterConfiguration(args.grit_defines) +diff --git a/src/components/policy/tools/template_writers/writers/adm_writer_unittest.py b/src/components/policy/tools/template_writers/writers/adm_writer_unittest.py +index 9d2b86d9e3..ac237009fb 100755 +--- a/src/components/policy/tools/template_writers/writers/adm_writer_unittest.py ++++ b/src/components/policy/tools/template_writers/writers/adm_writer_unittest.py +@@ -1388,6 +1388,7 @@ Policy1_Part="Caption of policy1." + ''') + self.CompareOutputs(output, expected_output) + ++ @unittest.skip("skipped due to https://crbug.com/1216996") + def testRemovedPolicy(self): + # Tests that a deprecated policy gets placed in the special + # 'RemovedPolicies' group. +diff --git a/src/components/policy/tools/template_writers/writers/admx_writer.py b/src/components/policy/tools/template_writers/writers/admx_writer.py +index 58b761c869..d6dbf4fbc9 100755 +--- a/src/components/policy/tools/template_writers/writers/admx_writer.py ++++ b/src/components/policy/tools/template_writers/writers/admx_writer.py +@@ -176,8 +176,9 @@ class ADMXWriter(xml_formatted_writer.XMLFormattedWriter, + display_name: Display name of the category. + parent_category_name: Name of the parent category. Defaults to None. + ''' +- existing = filter(lambda e: e.getAttribute('name') == name, +- parent.getElementsByTagName('category')) ++ existing = list( ++ filter(lambda e: e.getAttribute('name') == name, ++ parent.getElementsByTagName('category'))) + if existing: + assert len(existing) == 1 + assert existing[0].getAttribute('name') == name +diff --git a/src/components/policy/tools/template_writers/writers/android_policy_writer.py b/src/components/policy/tools/template_writers/writers/android_policy_writer.py +index fa9ee07e62..5536a41fca 100755 +--- a/src/components/policy/tools/template_writers/writers/android_policy_writer.py ++++ b/src/components/policy/tools/template_writers/writers/android_policy_writer.py +@@ -22,7 +22,15 @@ def _EscapeResource(resource): + ''' + if resource == None or type(resource) in (int, bool): + return str(resource) +- return xml_escape.escape(resource, {"'": "\\'", '"': '\\"', '\\': '\\\\'}) ++ return xml_escape.escape( ++ resource, ++ { ++ # Written order is matter to prevent "'" becomes "\\\\'" instead of ++ # "\\'". ++ "\\": "\\\\", ++ "'": "\\'", ++ '"': '\\"', ++ }) + + + class AndroidPolicyWriter(xml_formatted_writer.XMLFormattedWriter): +diff --git a/src/components/policy/tools/template_writers/writers/gpo_editor_writer.py b/src/components/policy/tools/template_writers/writers/gpo_editor_writer.py +index 7ace447c3f..241f51049d 100755 +--- a/src/components/policy/tools/template_writers/writers/gpo_editor_writer.py ++++ b/src/components/policy/tools/template_writers/writers/gpo_editor_writer.py +@@ -31,7 +31,7 @@ class GpoEditorWriter(template_writer.TemplateWriter): + + since_version = supported_on.get('since_version', None) + +- return not since_version or since_version >= major_version ++ return not since_version or int(since_version) >= major_version + + def IsPolicyOnWin7Only(self, policy): + ''' Returns true if the policy is supported on win7 only.''' diff --git a/meta-webos/recipes-webos/chromium/files/0009-json_schema_compiler-use-python3-for-feature_compile.patch b/meta-webos/recipes-webos/chromium/files/0009-json_schema_compiler-use-python3-for-feature_compile.patch new file mode 100644 index 000000000..3fbc17157 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0009-json_schema_compiler-use-python3-for-feature_compile.patch @@ -0,0 +1,55 @@ +From 54bdb25afc82917d05453ebae515d807e5706a9c Mon Sep 17 00:00:00 2001 +From: Takuto Ikuta +Date: Wed, 19 May 2021 11:19:30 +0000 +Subject: [PATCH] json_schema_compiler: use python3 for feature_compiler.py + +Fixed: 1205587 +Change-Id: I31db44af23f9b56725e6a5aecd2c80d6a33cad2f +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2905318 +Auto-Submit: Takuto Ikuta +Commit-Queue: Nico Weber +Reviewed-by: Nico Weber +Cr-Commit-Position: refs/heads/master@{#884374} +--- + src/tools/json_schema_compiler/feature_compiler.py | 4 ++-- + src/tools/json_schema_compiler/json_features.gni | 5 +---- + 2 files changed, 3 insertions(+), 6 deletions(-) + +diff --git a/src/tools/json_schema_compiler/feature_compiler.py b/src/tools/json_schema_compiler/feature_compiler.py +index 645c5fb934..fab6c6a006 100644 +--- a/src/tools/json_schema_compiler/feature_compiler.py ++++ b/src/tools/json_schema_compiler/feature_compiler.py +@@ -377,8 +377,8 @@ def DoesNotHaveAllowlistForHostedApps(value): + # what the allowlist looks like) to a python list of strings. + def cpp_list_to_list(cpp_list): + assert type(cpp_list) is str +- assert cpp_list[0] is '{' +- assert cpp_list[-1] is '}' ++ assert cpp_list[0] == '{' ++ assert cpp_list[-1] == '}' + new_list = json.loads('[%s]' % cpp_list[1:-1]) + assert type(new_list) is list + return new_list +diff --git a/src/tools/json_schema_compiler/json_features.gni b/src/tools/json_schema_compiler/json_features.gni +index d6d6ac641e..743162e2d5 100644 +--- a/src/tools/json_schema_compiler/json_features.gni ++++ b/src/tools/json_schema_compiler/json_features.gni +@@ -2,8 +2,6 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + +-import("//build/config/python.gni") +- + # Generates the FeatureProviders files for extension features files. + # The following variables are required: + # sources: The features.json files to use. +@@ -29,8 +27,7 @@ template("json_features") { + "$target_gen_dir/$base_filename.h", + ] + +- # TODO(crbug.com/1112471): Get this to run cleanly under Python 3. +- python2_action(action_name) { ++ action(action_name) { + visibility = [ ":$source_set_name" ] + sources = invoker.sources + script = "$compiler_root/feature_compiler.py" diff --git a/meta-webos/recipes-webos/chromium/files/0010-json_schema_compiler-use-python3-in-json_schema_api..patch b/meta-webos/recipes-webos/chromium/files/0010-json_schema_compiler-use-python3-in-json_schema_api..patch new file mode 100644 index 000000000..104352ef6 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0010-json_schema_compiler-use-python3-in-json_schema_api..patch @@ -0,0 +1,59 @@ +From 98bf76350869e39807ae91bb3a23c78d2e8ce3c6 Mon Sep 17 00:00:00 2001 +From: Takuto Ikuta +Date: Wed, 19 May 2021 11:38:04 +0000 +Subject: [PATCH] json_schema_compiler: use python3 in json_schema_api.gni + +Fixed: 1205586 +Change-Id: Ia23e52b7f6dc2bb7cd450e7a2621587bf17c3e3c +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2905170 +Auto-Submit: Takuto Ikuta +Commit-Queue: Nico Weber +Reviewed-by: Nico Weber +Cr-Commit-Position: refs/heads/master@{#884405} +--- + src/tools/json_schema_compiler/json_schema_api.gni | 11 +++-------- + 1 file changed, 3 insertions(+), 8 deletions(-) + +diff --git a/src/tools/json_schema_compiler/json_schema_api.gni b/src/tools/json_schema_compiler/json_schema_api.gni +index 16bed8b4fd..6515f73f72 100644 +--- a/src/tools/json_schema_compiler/json_schema_api.gni ++++ b/src/tools/json_schema_compiler/json_schema_api.gni +@@ -36,8 +36,6 @@ + # A specific visibility to apply for the generated static library. If + # omitted, visibility will be inherited from the invoker. + +-import("//build/config/python.gni") +- + # NOTE: Common variables here for when multiple templates use them. + compiler_root = "//tools/json_schema_compiler" + compiler_script = "$compiler_root/compiler.py" +@@ -112,8 +110,7 @@ template("generated_json_strings") { + + bundle_generator_schema_name = target_name + "_bundle_generator_schema" + +- # TODO(crbug.com/1112471): Get this to run cleanly under Python 3. +- python2_action(bundle_generator_schema_name) { ++ action(bundle_generator_schema_name) { + visibility = [ ":$root_target_name" ] + script = compiler_script + inputs = compiler_sources + invoker.sources +@@ -230,8 +227,7 @@ template("function_registration") { + bundle_generator_registration_name = + target_name + "_bundle_generator_registration" + +- # TODO(crbug.com/1112471): Get this to run cleanly under Python 3. +- python2_action(bundle_generator_registration_name) { ++ action(bundle_generator_registration_name) { + visibility = [ ":$root_target_name" ] + script = compiler_script + inputs = compiler_sources + invoker.sources +@@ -324,8 +320,7 @@ template("generated_types") { + + schema_generator_name = target_name + "_schema_generator" + +- # TODO(crbug.com/1112471): Get this to run cleanly under Python 3. +- python2_action_foreach(schema_generator_name) { ++ action_foreach(schema_generator_name) { + visibility = [ ":$root_target_name" ] + script = compiler_script + sources = invoker.sources diff --git a/meta-webos/recipes-webos/chromium/files/0011-build-Convert-third_party-closure_compiler-compile_j.patch b/meta-webos/recipes-webos/chromium/files/0011-build-Convert-third_party-closure_compiler-compile_j.patch new file mode 100644 index 000000000..a8308b17b --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0011-build-Convert-third_party-closure_compiler-compile_j.patch @@ -0,0 +1,50 @@ +From 1b5bb68e6e10ca11e544661f85f94f949bbb9494 Mon Sep 17 00:00:00 2001 +From: Nico Weber +Date: Wed, 12 May 2021 22:29:32 +0000 +Subject: [PATCH] build: Convert third_party/closure_compiler/compile_js.gni to + py3 + +Bug: 1205619 +Change-Id: If36551ff1fbf033aab694380157a0f54d2055862 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2892987 +Auto-Submit: Nico Weber +Commit-Queue: Dirk Pranke +Reviewed-by: Dirk Pranke +Cr-Commit-Position: refs/heads/master@{#882331} +--- + src/third_party/closure_compiler/compile_js.gni | 8 ++------ + 1 file changed, 2 insertions(+), 6 deletions(-) + +diff --git a/src/third_party/closure_compiler/compile_js.gni b/src/third_party/closure_compiler/compile_js.gni +index ae4d16f7ee..82c29dd89b 100644 +--- a/src/third_party/closure_compiler/compile_js.gni ++++ b/src/third_party/closure_compiler/compile_js.gni +@@ -2,8 +2,6 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + +-import("//build/config/python.gni") +- + import("//third_party/closure_compiler/closure_args.gni") + + declare_args() { +@@ -55,8 +53,7 @@ polymer_externs = "$externs_path/polymer-1.0.js" + # } + + template("js_library") { +- # TODO(crbug.com/1112471): Get this to run cleanly under Python 3. +- python2_action(target_name) { ++ action(target_name) { + script = "$script_path/js_library.py" + forward_variables_from(invoker, + [ +@@ -156,8 +153,7 @@ template("js_library") { + # } + + template("js_binary") { +- # TODO(crbug.com/1112471): Get this to run cleanly under Python 3. +- python2_action(target_name) { ++ action(target_name) { + script = "$script_path/js_binary.py" + forward_variables_from(invoker, + [ diff --git a/meta-webos/recipes-webos/chromium/files/0012-Reland-components-resources-use-python3-for-tools-li.patch b/meta-webos/recipes-webos/chromium/files/0012-Reland-components-resources-use-python3-for-tools-li.patch new file mode 100644 index 000000000..d001583ce --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0012-Reland-components-resources-use-python3-for-tools-li.patch @@ -0,0 +1,98 @@ +From 3b3c7f93a8ee4110b4834d4582666ce9b6302de9 Mon Sep 17 00:00:00 2001 +From: Takuto Ikuta +Date: Fri, 28 May 2021 04:02:24 +0000 +Subject: [PATCH] Reland "components/resources: use python3 for + //tools/licenses.py" + +This reverts commit 18028c51b35dbe4e54915366f28cd2f915e9a81b. + +Reason for revert: +Fix non-determinisity around set() + +Original change's description: +> Revert "components/resources: use python3 for //tools/licenses.py" +> +> This (partially) reverts commit a7febb8cb85a359825f909b398401d810ba313f4. +> +> Reason for revert: Causes non-determinism +> +> Original change's description: +> > components/resources: use python3 for //tools/licenses.py +> > +> > Specify encoding for read failure on Windows, and use codecs.open as +> > builtin open doesn't have encoding args in python2. +> > +> > Fixed: 1205601 +> > Change-Id: I8fd2ea76f3b4ee443c437249aa371fdf34f5776b +> > Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2905676 +> > Auto-Submit: Takuto Ikuta +> > Commit-Queue: Takuto Ikuta +> > Reviewed-by: Nico Weber +> > Cr-Commit-Position: refs/heads/master@{#884787} +> +> Bug: 1205601, 1211349 +> Change-Id: I984726b2388cff3994c8221408173f9b346c2cdf +> Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2920328 +> Auto-Submit: Andrew Grieve +> Commit-Queue: Takuto Ikuta +> Reviewed-by: Nico Weber +> Reviewed-by: Takuto Ikuta +> Cr-Commit-Position: refs/heads/master@{#886984} + +Fixed: 1205601 +Fixed: 1211349 +Change-Id: I90ee09960d1b56f59f1922bb04bde960a0c0de97 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2921665 +Auto-Submit: Takuto Ikuta +Commit-Queue: Nico Weber +Reviewed-by: Nico Weber +Cr-Commit-Position: refs/heads/master@{#887435} +--- + src/components/resources/BUILD.gn | 4 +--- + src/tools/licenses.py | 4 ++-- + 2 files changed, 3 insertions(+), 5 deletions(-) + +diff --git a/src/components/resources/BUILD.gn b/src/components/resources/BUILD.gn +index fb82ba6431..9b87aa18ff 100644 +--- a/src/components/resources/BUILD.gn ++++ b/src/components/resources/BUILD.gn +@@ -3,7 +3,6 @@ + # found in the LICENSE file. + + import("//build/config/android/config.gni") +-import("//build/config/python.gni") + import("//components/safe_browsing/buildflags.gni") + import("//printing/buildflags/buildflags.gni") + import("//tools/grit/grit_rule.gni") +@@ -84,8 +83,7 @@ grit("components_scaled_resources") { + output_dir = "$root_gen_dir/components" + } + +-# TODO(crbug.com/1112471): Get this to run cleanly under Python 3. +-python2_action("about_credits") { ++action("about_credits") { + script = "//tools/licenses.py" + depfile = "$target_gen_dir/$target_name.d" + +diff --git a/src/tools/licenses.py b/src/tools/licenses.py +index aaa520b1ae..a1e1f9afb3 100755 +--- a/src/tools/licenses.py ++++ b/src/tools/licenses.py +@@ -550,7 +550,7 @@ def FindThirdPartyDirs(prune_paths, root, extra_third_party_dirs=None): + third_party_dirs.add(dir) + ProcessAdditionalReadmePathsJson(root, dir, third_party_dirs) + +- return third_party_dirs ++ return sorted(third_party_dirs) + + + def FindThirdPartyDirsWithFiles(root): +@@ -601,7 +601,7 @@ def GetThirdPartyDepsFromGNDepsOutput(gn_deps, target_os): + # Skip over files that are known not to be used on iOS. + continue + third_party_deps.add(third_party_path[:-1]) +- return third_party_deps ++ return sorted(third_party_deps) + + + def FindThirdPartyDeps(gn_out_dir, gn_target, target_os): diff --git a/meta-webos/recipes-webos/chromium/files/0013-build-Convert-third_party-node-node.gni-to-py3.patch b/meta-webos/recipes-webos/chromium/files/0013-build-Convert-third_party-node-node.gni-to-py3.patch new file mode 100644 index 000000000..12eabb75f --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0013-build-Convert-third_party-node-node.gni-to-py3.patch @@ -0,0 +1,74 @@ +From ee580e013d08ad83456a3dc55700464cc98d04b6 Mon Sep 17 00:00:00 2001 +From: Nico Weber +Date: Tue, 18 May 2021 03:55:07 +0000 +Subject: [PATCH] build: Convert third_party/node/node.gni to py3 + +Bug: 1205615 +Change-Id: I9668aeb1edfbb67e0be6c0c2062f1c51b3f193f1 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2896248 +Auto-Submit: Nico Weber +Commit-Queue: calamity +Reviewed-by: dpapad +Reviewed-by: calamity +Cr-Commit-Position: refs/heads/master@{#883788} +--- + .../browser/resources/tools/optimize_webui.py | 13 +++++++------ + src/third_party/node/node.gni | 5 +---- + src/third_party/node/node.py | 3 ++- + 3 files changed, 10 insertions(+), 11 deletions(-) + +diff --git a/src/chrome/browser/resources/tools/optimize_webui.py b/src/chrome/browser/resources/tools/optimize_webui.py +index f41a89bf81..32c4bba30e 100755 +--- a/src/chrome/browser/resources/tools/optimize_webui.py ++++ b/src/chrome/browser/resources/tools/optimize_webui.py +@@ -258,12 +258,13 @@ def main(argv): + + # Output a manifest file that will be used to auto-generate a grd file later. + if args.out_manifest: +- manifest_data = {} +- manifest_data['base_dir'] = '%s' % args.out_folder +- manifest_data['files'] = manifest.keys() +- manifest_file = open( +- os.path.normpath(os.path.join(_CWD, args.out_manifest)), 'wb') +- json.dump(manifest_data, manifest_file) ++ manifest_data = { ++ 'base_dir': args.out_folder, ++ 'files': list(manifest.keys()), ++ } ++ with open(os.path.normpath(os.path.join(_CWD, args.out_manifest)), 'w') \ ++ as manifest_file: ++ json.dump(manifest_data, manifest_file) + + _update_dep_file(args.input, args, manifest) + +diff --git a/src/third_party/node/node.gni b/src/third_party/node/node.gni +index fc2bc48797..81c4f2cb62 100644 +--- a/src/third_party/node/node.gni ++++ b/src/third_party/node/node.gni +@@ -2,11 +2,8 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + +-import("//build/config/python.gni") +- + template("node") { +- # TODO(crbug.com/1112471): Get this to run cleanly under Python 3. +- python2_action(target_name) { ++ action(target_name) { + forward_variables_from(invoker, "*", TESTONLY_AND_VISIBILITY) + forward_variables_from(invoker, TESTONLY_AND_VISIBILITY) + +diff --git a/src/third_party/node/node.py b/src/third_party/node/node.py +index 09662c4045..573987ba0c 100755 +--- a/src/third_party/node/node.py ++++ b/src/third_party/node/node.py +@@ -27,7 +27,8 @@ def GetBinaryPath(): + def RunNode(cmd_parts, stdout=None): + cmd = [GetBinaryPath()] + cmd_parts + process = subprocess.Popen( +- cmd, cwd=os.getcwd(), stdout=subprocess.PIPE, stderr=subprocess.PIPE) ++ cmd, cwd=os.getcwd(), stdout=subprocess.PIPE, stderr=subprocess.PIPE, ++ universal_newlines=True) + stdout, stderr = process.communicate() + + if process.returncode != 0: diff --git a/meta-webos/recipes-webos/chromium/files/0014-components-policy-fix-some-places-for-python3.patch b/meta-webos/recipes-webos/chromium/files/0014-components-policy-fix-some-places-for-python3.patch new file mode 100644 index 000000000..3d7422b85 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0014-components-policy-fix-some-places-for-python3.patch @@ -0,0 +1,180 @@ +From dd019e51617cf237aa9c73a4cbea6e5538b1c3a1 Mon Sep 17 00:00:00 2001 +From: Takuto Ikuta +Date: Thu, 27 May 2021 16:16:34 +0000 +Subject: [PATCH] components/policy: fix some places for python3 + +This uses six for compatibility. + +This is still not sufficent to switch to python3. + +Bug: 1205599 +Change-Id: I6bda6308cf5121b55db4544187c6dda41ad5f6b3 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2921668 +Reviewed-by: Yann Dago +Commit-Queue: Yann Dago +Auto-Submit: Takuto Ikuta +Cr-Commit-Position: refs/heads/master@{#887182} +--- + .../policy/tools/generate_policy_source.py | 9 ++++---- + .../policy_template_generator.py | 11 ++++++++- + .../template_writers/template_formatter.py | 23 +++++++++++-------- + .../template_writers/writers/doc_writer.py | 2 +- + .../writers/xml_formatted_writer.py | 2 +- + 5 files changed, 31 insertions(+), 16 deletions(-) + +diff --git a/src/components/policy/tools/generate_policy_source.py b/src/components/policy/tools/generate_policy_source.py +index 74c4ad3d96..b4136af8d0 100755 +--- a/src/components/policy/tools/generate_policy_source.py ++++ b/src/components/policy/tools/generate_policy_source.py +@@ -18,6 +18,7 @@ from collections import OrderedDict + from functools import partial + import ast + import os ++import codecs + import json + import re + import sys +@@ -470,7 +471,7 @@ def _OutputComment(f, comment): + + + def _LoadJSONFile(json_file): +- with open(json_file, 'r') as f: ++ with codecs.open(json_file, 'r', encoding='utf-8') as f: + text = f.read() + return ast.literal_eval(text) + +@@ -872,7 +873,7 @@ class SchemaNodesGenerator: + 'Extra IsSensitiveValue HasSensitiveChildren\n') + for schema_node in self.schema_nodes: + assert schema_node.extra >= MIN_INDEX and schema_node.extra <= MAX_INDEX +- comment = ('\n' + ' ' * 69 + '// ').join(schema_node.comments) ++ comment = ('\n' + ' ' * 69 + '// ').join(sorted(schema_node.comments)) + f.write(' { base::Value::%-19s %4s %-16s %-5s }, // %s\n' % + (schema_node.schema_type + ',', str(schema_node.extra) + ',', + str(schema_node.is_sensitive_value).lower() + ',', +@@ -1536,9 +1537,9 @@ def _GetSupportedChromeOSPolicies(policies, type): + return filter(partial(_IsSupportedChromeOSPolicy, type), policies) + + +-# Returns the set of all policy.policy_protobuf_type strings from |policies|. ++# Returns the list of all policy.policy_protobuf_type strings from |policies|. + def _GetProtobufTypes(policies): +- return set(['Integer', 'Boolean', 'String', 'StringList']) ++ return sorted(['Integer', 'Boolean', 'String', 'StringList']) + + + # Writes the definition of an array that contains the pointers to the mutable +diff --git a/src/components/policy/tools/template_writers/policy_template_generator.py b/src/components/policy/tools/template_writers/policy_template_generator.py +index 8f955f799d..8401eed0b9 100755 +--- a/src/components/policy/tools/template_writers/policy_template_generator.py ++++ b/src/components/policy/tools/template_writers/policy_template_generator.py +@@ -4,7 +4,16 @@ + # found in the LICENSE file. + + import copy ++import os + import re ++import sys ++ ++sys.path.insert( ++ 0, ++ os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, os.pardir, ++ os.pardir, 'third_party', 'six', 'src')) ++ ++import six + + + def IsGroupOrAtomicGroup(policy): +@@ -21,7 +30,7 @@ class PolicyTemplateGenerator: + ''' + + def _ImportMessage(self, msg_txt): +- msg_txt = msg_txt.decode('utf-8') ++ msg_txt = six.ensure_text(msg_txt) + lines = msg_txt.split('\n') + + # Strip any extra leading spaces, but keep useful indentation: +diff --git a/src/components/policy/tools/template_writers/template_formatter.py b/src/components/policy/tools/template_writers/template_formatter.py +index 71b402476b..9af88164b6 100755 +--- a/src/components/policy/tools/template_writers/template_formatter.py ++++ b/src/components/policy/tools/template_writers/template_formatter.py +@@ -14,6 +14,13 @@ import os + import re + import sys + ++sys.path.insert( ++ 0, ++ os.path.join(os.path.dirname(__file__), os.pardir, os.pardir, os.pardir, ++ os.pardir, 'third_party', 'six', 'src')) ++ ++import six ++ + import writer_configuration + import policy_template_generator + +@@ -118,20 +125,19 @@ def _ParseVersionFile(version_path): + elif key.strip() == 'PATCH': + version['patch'] = value.strip() + +- version_found = version.has_key('major') and version.has_key( +- 'minor') and version.has_key('build') and version.has_key('patch') ++ version_found = len(version) == 4 + return version if version_found else None + + + def _JsonToUtf8Encoding(data, ignore_dicts=False): +- if isinstance(data, unicode): ++ if six.PY2 and isinstance(data, unicode): + return data.encode('utf-8') + elif isinstance(data, list): + return [_JsonToUtf8Encoding(item, False) for item in data] + elif isinstance(data, dict): + return { + _JsonToUtf8Encoding(key): _JsonToUtf8Encoding(value) +- for key, value in data.iteritems() ++ for key, value in data.items() + } + return data + +@@ -177,11 +183,10 @@ def main(): + parser.add_argument('--doc', action='append', dest='doc') + parser.add_argument( + '--doc_atomic_groups', action='append', dest='doc_atomic_groups') +- parser.add_argument( +- '--local', +- action='store_true', +- help='If set, the documentation will be built so \ +- that links work locally in the generated path.') ++ parser.add_argument('--local', ++ action='store_true', ++ help='If set, the documentation will be built so ' ++ 'that links work locally in the generated path.') + parser.add_argument('--json', action='append', dest='json') + parser.add_argument('--plist', action='append', dest='plist') + parser.add_argument('--plist_strings', action='append', dest='plist_strings') +diff --git a/src/components/policy/tools/template_writers/writers/doc_writer.py b/src/components/policy/tools/template_writers/writers/doc_writer.py +index 178497ca80..69ea6edba5 100755 +--- a/src/components/policy/tools/template_writers/writers/doc_writer.py ++++ b/src/components/policy/tools/template_writers/writers/doc_writer.py +@@ -227,7 +227,7 @@ class DocWriter(xml_formatted_writer.XMLFormattedWriter): + '[\n%s\n]' % ',\n'.join(' "%s"' % item for item in example_value)) + + def _AddListExample(self, parent, policy): +- '''Adds the example value of a 'list' policy to a DOM node. Example output: ++ r'''Adds the example value of a 'list' policy to a DOM node. Example output: +
+
Windows (Windows clients):
+
+diff --git a/src/components/policy/tools/template_writers/writers/xml_formatted_writer.py b/src/components/policy/tools/template_writers/writers/xml_formatted_writer.py +index 02fee8293f..a881537047 100755 +--- a/src/components/policy/tools/template_writers/writers/xml_formatted_writer.py ++++ b/src/components/policy/tools/template_writers/writers/xml_formatted_writer.py +@@ -30,7 +30,7 @@ class XMLFormattedWriter(template_writer.TemplateWriter): + + doc = parent.ownerDocument + element = doc.createElement(name) +- for key, value in sorted(attrs.iteritems()): ++ for key, value in sorted(attrs.items()): + element.setAttribute(key, value) + if text: + element.appendChild(doc.createTextNode(text)) diff --git a/meta-webos/recipes-webos/chromium/files/0015-build-Convert-tools-json_to_struct-to-py3.patch b/meta-webos/recipes-webos/chromium/files/0015-build-Convert-tools-json_to_struct-to-py3.patch new file mode 100644 index 000000000..0bf66659d --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0015-build-Convert-tools-json_to_struct-to-py3.patch @@ -0,0 +1,39 @@ +From aca6c34c8eae66c57794fbfd07c4c9eee520ce11 Mon Sep 17 00:00:00 2001 +From: Nico Weber +Date: Wed, 12 May 2021 18:21:25 +0000 +Subject: [PATCH] build: Convert tools/json_to_struct to py3 + +Bug: 1205588 +Change-Id: I2c61c32b8f1809a0109c63ad476ed2881ec30580 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2892470 +Auto-Submit: Nico Weber +Reviewed-by: Hans Wennborg +Commit-Queue: Nico Weber +Cr-Commit-Position: refs/heads/master@{#882185} +--- + src/tools/json_to_struct/json_to_struct.gni | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/src/tools/json_to_struct/json_to_struct.gni b/src/tools/json_to_struct/json_to_struct.gni +index 8bf2e304e4..29afcb2106 100644 +--- a/src/tools/json_to_struct/json_to_struct.gni ++++ b/src/tools/json_to_struct/json_to_struct.gni +@@ -2,8 +2,6 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + +-import("//build/config/python.gni") +- + # Converts a .json file to a C++ struct. + # + # Variables: +@@ -27,8 +25,7 @@ template("json_to_struct") { + action_name = target_name + "_action" + source_set_name = target_name + +- # TODO(crbug.com/1112471): Get this to run cleanly under Python 3. +- python2_action(action_name) { ++ action(action_name) { + visibility = [ ":$source_set_name" ] + script = "//tools/json_to_struct/json_to_struct.py" + diff --git a/meta-webos/recipes-webos/chromium/files/0016-build-Convert-tools-grit-preprocess_if_expr.gni-to-p.patch b/meta-webos/recipes-webos/chromium/files/0016-build-Convert-tools-grit-preprocess_if_expr.gni-to-p.patch new file mode 100644 index 000000000..5c3593c6d --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0016-build-Convert-tools-grit-preprocess_if_expr.gni-to-p.patch @@ -0,0 +1,51 @@ +From eb39b5591fcace81a3d605b6d204468f9e690d14 Mon Sep 17 00:00:00 2001 +From: Nico Weber +Date: Thu, 13 May 2021 23:17:00 +0000 +Subject: [PATCH] build: Convert tools/grit/preprocess_if_expr.gni to py3 + +Bug: 1205590 +Change-Id: I6e1e268b07fbea50ecb0d7c03b68da825420946b +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2893802 +Auto-Submit: Nico Weber +Commit-Queue: Dirk Pranke +Reviewed-by: Dirk Pranke +Cr-Commit-Position: refs/heads/master@{#882747} +--- + src/tools/grit/preprocess_if_expr.gni | 4 +--- + src/tools/grit/preprocess_if_expr.py | 5 +++-- + 2 files changed, 4 insertions(+), 5 deletions(-) + +diff --git a/src/tools/grit/preprocess_if_expr.gni b/src/tools/grit/preprocess_if_expr.gni +index 71c1cc1e8d..64d21f9a3e 100644 +--- a/src/tools/grit/preprocess_if_expr.gni ++++ b/src/tools/grit/preprocess_if_expr.gni +@@ -2,12 +2,10 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + +-import("//build/config/python.gni") + import("//tools/grit/grit_defines.gni") + + template("preprocess_if_expr") { +- # TODO(crbug.com/1112471): Get this to run cleanly under Python 3. +- python2_action(target_name) { ++ action(target_name) { + script = "//tools/grit/preprocess_if_expr.py" + + if (defined(invoker.deps)) { +diff --git a/src/tools/grit/preprocess_if_expr.py b/src/tools/grit/preprocess_if_expr.py +index b06735fde9..b8f09da4db 100644 +--- a/src/tools/grit/preprocess_if_expr.py ++++ b/src/tools/grit/preprocess_if_expr.py +@@ -101,8 +101,9 @@ def main(argv): + manifest_data = {} + manifest_data['base_dir'] = '%s' % args.out_folder + manifest_data['files'] = args.in_files +- manifest_file = open( +- os.path.normpath(os.path.join(_CWD, args.out_manifest)), 'wb') ++ manifest_file = io.open( ++ os.path.normpath(os.path.join(_CWD, args.out_manifest)), 'w', ++ encoding='utf-8', newline='\n') + json.dump(manifest_data, manifest_file) + return + diff --git a/meta-webos/recipes-webos/chromium/files/0017-Sort-the-feature_set-to-avoid-non-determistic-build-.patch b/meta-webos/recipes-webos/chromium/files/0017-Sort-the-feature_set-to-avoid-non-determistic-build-.patch new file mode 100644 index 000000000..374712bd8 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0017-Sort-the-feature_set-to-avoid-non-determistic-build-.patch @@ -0,0 +1,97 @@ +From 32e45e0a0e7a45d2860f52ef74d53a5170d42cb7 Mon Sep 17 00:00:00 2001 +From: Mike Taylor +Date: Thu, 27 May 2021 20:18:27 +0000 +Subject: [PATCH] Sort the feature_set to avoid non-determistic build failures. + +Convert chromium/src/gpu/config/BUILD.gn to Python 3. + +Bug: 1205595 +Change-Id: I3b9115394d7a4d322d969c2f11253a0a28503932 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2911010 +Commit-Queue: Mike Taylor +Reviewed-by: Zhenyao Mo +Cr-Commit-Position: refs/heads/master@{#887312} +--- + src/gpu/config/BUILD.gn | 4 +--- + src/gpu/config/process_json.py | 14 +++++++------- + 2 files changed, 8 insertions(+), 10 deletions(-) + +diff --git a/src/gpu/config/BUILD.gn b/src/gpu/config/BUILD.gn +index 9e291e8874..0c926324ba 100644 +--- a/src/gpu/config/BUILD.gn ++++ b/src/gpu/config/BUILD.gn +@@ -5,7 +5,6 @@ + import("//build/config/chrome_build.gni") + import("//build/config/chromecast_build.gni") + import("//build/config/chromeos/ui_mode.gni") +-import("//build/config/python.gni") + import("//build/config/ui.gni") + import("//gpu/vulkan/features.gni") + +@@ -32,8 +31,7 @@ process_json_outputs = [ + "$target_gen_dir/software_rendering_list_exceptions_autogen.h", + ] + +-# TODO(crbug.com/1112471): Get this to run cleanly under Python 3. +-python2_action("process_json") { ++action("process_json") { + script = "process_json.py" + + inputs = [ +diff --git a/src/gpu/config/process_json.py b/src/gpu/config/process_json.py +index 6a609fe932..b08ae8d85a 100755 +--- a/src/gpu/config/process_json.py ++++ b/src/gpu/config/process_json.py +@@ -156,21 +156,21 @@ def load_gpu_driver_bug_workarounds(workaround_type_filename): + + def get_feature_set(features, total_feature_set): + assert len(features) > 0 +- feature_set = set([]) ++ feature_set = dict() + for feature in features: + if feature == 'all': +- feature_set = set(total_feature_set) ++ feature_set = {k:1 for k in total_feature_set} + elif isinstance(feature, dict): + for key in feature: + if key == 'exceptions': + for exception in feature['exceptions']: + assert exception in feature_set +- feature_set.remove(exception) ++ del feature_set[exception] + else: + raise KeyError('only exceptions are allowed') + else: + assert feature in total_feature_set +- feature_set.add(feature) ++ feature_set[feature] = 1 + return feature_set + + +@@ -178,7 +178,7 @@ def write_features(feature_set, feature_name_prefix, var_name, + data_helper_file): + data_helper_file.write('const int %s[%d] = {\n' % + (var_name, len(feature_set))) +- for feature in feature_set: ++ for feature in feature_set.keys(): + data_helper_file.write(feature_name_prefix + feature.upper()) + data_helper_file.write(',\n') + data_helper_file.write('};\n\n') +@@ -606,7 +606,7 @@ def write_conditions(entry_id, is_exception, exception_id, entry, + 'Intel' in driver_vendor) + assert is_intel, 'Intel driver schema is only for Intel GPUs' + valid_version = check_intel_driver_version(driver_version['value']) +- if driver_version.has_key('value2'): ++ if 'value2' in driver_version: + valid_version = (valid_version and + check_intel_driver_version(driver_version['value2'])) + assert valid_version, INTEL_DRIVER_VERSION_SCHEMA +@@ -616,7 +616,7 @@ def write_conditions(entry_id, is_exception, exception_id, entry, + is_nvidia = (format(vendor_id, '#04x') == '0x10de') + assert is_nvidia, 'Nvidia driver schema is only for Nvidia GPUs' + valid_version = check_nvidia_driver_version(driver_version['value']) +- if driver_version.has_key('value2'): ++ if 'value2' in driver_version: + valid_version = (valid_version and + check_nvidia_driver_version(driver_version['value2'])) + assert valid_version, NVIDIA_DRIVER_VERSION_SCHEMA diff --git a/meta-webos/recipes-webos/chromium/files/0018-webos-fix-python-syntax.patch b/meta-webos/recipes-webos/chromium/files/0018-webos-fix-python-syntax.patch new file mode 100644 index 000000000..a0d722792 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0018-webos-fix-python-syntax.patch @@ -0,0 +1,32 @@ +From 05a4c7e97ac64299a971c33fa392297e1021ce3e Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Sun, 20 Feb 2022 14:47:24 +0000 +Subject: [PATCH] webos: fix python syntax + +Fixes: +[6/37621] ACTION //webos/install/app_shell:app_shell_scripts(//build/toolchain/cros:target) +FAILED: image/usr/bin/app-shell/run_app_shell +/OE/lge/build/webosose/kirkstone/BUILD/work/qemux86_64-webos-linux/webruntime/91.0.4472.114-11-r52.4/recipe-sysroot-native/usr/bin/python3-native/python3 ../../git/src/webos/install/install.py /OE/lge/build/webosose/kirkstone/BUILD/work/qemux86_64-webos-linux/webruntime/91.0.4472.114-11-r52.4/git/src/webos/install/app_shell/run_app_shell /OE/lge/build/webosose/kirkstone/BUILD/work/qemux86_64-webos-linux/webruntime/91.0.4472.114-11-r52.4/build/Release/image/usr/bin/app-shell/run_app_shell + File "/OE/lge/build/webosose/kirkstone/BUILD/work/qemux86_64-webos-linux/webruntime/91.0.4472.114-11-r52.4/build/Release/../../git/src/webos/install/install.py", line 19 + os.chmod(os.path.join(dst, src) if os.path.isdir(dst) else dst, 0755) + ^ +SyntaxError: leading zeros in decimal integer literals are not permitted; use an 0o prefix for octal integers + +Signed-off-by: Martin Jansa +--- + src/webos/install/install.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/webos/install/install.py b/src/webos/install/install.py +index a7b658b438..151afeabce 100644 +--- a/src/webos/install/install.py ++++ b/src/webos/install/install.py +@@ -16,7 +16,7 @@ def main(*files): + continue + + shutil.copy(src, dst) +- os.chmod(os.path.join(dst, src) if os.path.isdir(dst) else dst, 0755) ++ os.chmod(os.path.join(dst, src) if os.path.isdir(dst) else dst, 0o755) + + + if __name__ == "__main__": diff --git a/meta-webos/recipes-webos/chromium/files/0019-build-Convert-tools-metrics-BUILD.gn-to-py3.patch b/meta-webos/recipes-webos/chromium/files/0019-build-Convert-tools-metrics-BUILD.gn-to-py3.patch new file mode 100644 index 000000000..1ec02f1bc --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0019-build-Convert-tools-metrics-BUILD.gn-to-py3.patch @@ -0,0 +1,69 @@ +From 577f2402671d0fff0d9479ed3202a40f3b885b41 Mon Sep 17 00:00:00 2001 +From: Nico Weber +Date: Thu, 13 May 2021 16:07:29 +0000 +Subject: [PATCH] build: Convert tools/metrics/BUILD.gn to py3 + +No changes to the python script are needed. + +I checked that the generated histograms.xml is byte-for-byte identical +with python3 and python2.7. On my linux box, the script takes ~56s with +python2.7 and ~28s with python3, so this makes the step run twice as fast :) + +While here, don't needlessly open() input files: Let minidom.parse() +do it for us. This is perf-neutral. + +Also explicitly set the encoding and newline escaping on the output +file. This has no effect on my linux box, but makes it more likely +that the output histograms.xml is the same on all host systems. + +Bug: 1205592 +Change-Id: I22ff86552bd4e0aa14048583969b6400df7663fd +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2892629 +Auto-Submit: Nico Weber +Commit-Queue: Nico Weber +Reviewed-by: Alexei Svitkine +Cr-Commit-Position: refs/heads/master@{#882521} +--- + src/tools/metrics/BUILD.gn | 5 +---- + src/tools/metrics/histograms/merge_xml.py | 5 +++-- + 2 files changed, 4 insertions(+), 6 deletions(-) + +diff --git a/src/tools/metrics/BUILD.gn b/src/tools/metrics/BUILD.gn +index b27f1096f6..ccb04c7295 100644 +--- a/src/tools/metrics/BUILD.gn ++++ b/src/tools/metrics/BUILD.gn +@@ -2,10 +2,7 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + +-import("//build/config/python.gni") +- +-# TODO(crbug.com/1118214) - Make work under Python 3. +-python2_action("histograms_xml") { ++action("histograms_xml") { + script = "histograms/merge_xml.py" + output = "$root_out_dir/histograms.xml" + outputs = [ output ] +diff --git a/src/tools/metrics/histograms/merge_xml.py b/src/tools/metrics/histograms/merge_xml.py +index d522fae6d1..a9ddd49613 100755 +--- a/src/tools/metrics/histograms/merge_xml.py ++++ b/src/tools/metrics/histograms/merge_xml.py +@@ -182,7 +182,8 @@ def MergeFiles(filenames=[], files=[], should_expand_owners=False): + Returns: + A merged DOM tree. + """ +- all_files = files + [open(f) for f in filenames] ++ # minidom.parse() takes both files and filenames: ++ all_files = files + filenames + trees = [xml.dom.minidom.parse(f) for f in all_files] + return MergeTrees(trees, should_expand_owners) + +@@ -196,7 +197,7 @@ def main(): + parser = argparse.ArgumentParser() + parser.add_argument('--output', required=True) + args = parser.parse_args() +- with open(args.output, 'w') as f: ++ with open(args.output, 'w', encoding='utf-8', newline='\n') as f: + # This is run by + # https://source.chromium.org/chromium/chromium/src/+/master:tools/metrics/BUILD.gn;drc=573e48309695102dec2da1e8f806c18c3200d414;l=5 + # to send the merged histograms.xml to the server side. Providing |UKM_XML| diff --git a/meta-webos/recipes-webos/chromium/files/0020-build-Convert-services-metrics-public-cpp-to-py3.patch b/meta-webos/recipes-webos/chromium/files/0020-build-Convert-services-metrics-public-cpp-to-py3.patch new file mode 100644 index 000000000..96753090e --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0020-build-Convert-services-metrics-public-cpp-to-py3.patch @@ -0,0 +1,40 @@ +From 9e31d936bb10c6d1dddb16b40d7c904de3dd8d20 Mon Sep 17 00:00:00 2001 +From: Nico Weber +Date: Fri, 14 May 2021 19:42:33 +0000 +Subject: [PATCH] build: Convert services/metrics/public/cpp to py3 + +Seems to just work. + +Bug: 1205626 +Change-Id: I581e509f5dd2333a2c8884b5de61a5c8bc11f40a +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2896055 +Auto-Submit: Nico Weber +Commit-Queue: Weilun Shi +Reviewed-by: Weilun Shi +Cr-Commit-Position: refs/heads/master@{#883083} +--- + src/services/metrics/public/cpp/BUILD.gn | 4 +--- + 1 file changed, 1 insertion(+), 3 deletions(-) + +diff --git a/src/services/metrics/public/cpp/BUILD.gn b/src/services/metrics/public/cpp/BUILD.gn +index e1ca96d4a2..e4e21acf3c 100644 +--- a/src/services/metrics/public/cpp/BUILD.gn ++++ b/src/services/metrics/public/cpp/BUILD.gn +@@ -2,7 +2,6 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + +-import("//build/config/python.gni") + import("//mojo/public/tools/bindings/mojom.gni") + + component("metrics_cpp") { +@@ -57,8 +56,7 @@ source_set("tests") { + ] + } + +-# TODO(crbug.com/1112471): Get this to run cleanly under Python 3. +-python2_action("gen_ukm_builders") { ++action("gen_ukm_builders") { + script = "//tools/metrics/ukm/gen_builders.py" + + # Re-generate the outputs if the codegen code changes: diff --git a/meta-webos/recipes-webos/chromium/files/0021-Reland-Convert-generate_about_tracing-target-to-py3.patch b/meta-webos/recipes-webos/chromium/files/0021-Reland-Convert-generate_about_tracing-target-to-py3.patch new file mode 100644 index 000000000..eeb3a0ebf --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0021-Reland-Convert-generate_about_tracing-target-to-py3.patch @@ -0,0 +1,112 @@ +From bffd615cad5486b1e4613506e48ab0bcf41d19bc Mon Sep 17 00:00:00 2001 +From: Deepanjan Roy +Date: Wed, 26 May 2021 14:19:40 -0400 +Subject: [PATCH] Reland "Convert generate_about_tracing target to py3" + +This is a reland of b84752766a4161ab1d3e117625fcbaedc4ae07c5 + +Original change's description: +> Convert generate_about_tracing target to py3 +> +> Need an additional str.encode to make python3 happy. Checked that all +> the code still works under python2 as well. +> +> Bug: chromium:1205617 +> Change-Id: I4217ed4213b57209a396f604396923985d1ac2d2 +> Reviewed-on: https://chromium-review.googlesource.com/c/catapult/+/2920487 +> Commit-Queue: Deep Roy +> Commit-Queue: John Chen +> Auto-Submit: Deep Roy +> Reviewed-by: John Chen + +Bug: chromium:1205617 +Change-Id: I57b4c55afb454944d2d729322d9af19995d0514a +Reviewed-on: https://chromium-review.googlesource.com/c/catapult/+/2924526 +Auto-Submit: John Chen +Commit-Queue: Deep Roy +Reviewed-by: Deep Roy +--- + src/third_party/catapult/BUILD.gn | 3 +++ + .../catapult/common/py_vulcanize/py_vulcanize/generate.py | 2 +- + .../common/py_vulcanize/py_vulcanize/parse_html_deps.py | 5 +++++ + src/third_party/catapult/tracing/BUILD.gn | 4 +--- + 4 files changed, 10 insertions(+), 4 deletions(-) + +diff --git a/src/third_party/catapult/BUILD.gn b/src/third_party/catapult/BUILD.gn +index 0e10ca22c1..b228edbed9 100644 +--- a/src/third_party/catapult/BUILD.gn ++++ b/src/third_party/catapult/BUILD.gn +@@ -56,6 +56,7 @@ group("telemetry_chrome_test_support") { + "third_party/WebOb/", + "third_party/apiclient/", + "third_party/beautifulsoup4/", ++ "third_party/beautifulsoup4-4.9.3/", + "third_party/cachetools/", + "third_party/certifi/", + "third_party/chai/", +@@ -68,6 +69,7 @@ group("telemetry_chrome_test_support") { + "third_party/gae_ts_mon/", + "third_party/google-auth/", + "third_party/graphy/", ++ "third_party/html5lib-1.1/", + "third_party/html5lib-python/", + "third_party/httplib2/", + "third_party/idb/", +@@ -100,6 +102,7 @@ group("telemetry_chrome_test_support") { + "third_party/uritemplate/", + "third_party/urllib3/", + "third_party/webapp2/", ++ "third_party/webencodings-0.5.1/", + "third_party/webtest/", + ] + +diff --git a/src/third_party/catapult/common/py_vulcanize/py_vulcanize/generate.py b/src/third_party/catapult/common/py_vulcanize/py_vulcanize/generate.py +index 8af373102f..c5c1ef7709 100644 +--- a/src/third_party/catapult/common/py_vulcanize/py_vulcanize/generate.py ++++ b/src/third_party/catapult/common/py_vulcanize/py_vulcanize/generate.py +@@ -208,7 +208,7 @@ def _MinifyCSS(css_text): + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, + stderr=subprocess.PIPE) +- res = p.communicate(input=css_text) ++ res = p.communicate(input=css_text.encode('utf-8')) + errorcode = p.wait() + if errorcode != 0: + sys.stderr.write('rCSSmin exited with error code %d' % errorcode) +diff --git a/src/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py b/src/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py +index 88ce21820c..fc9f45199f 100644 +--- a/src/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py ++++ b/src/third_party/catapult/common/py_vulcanize/py_vulcanize/parse_html_deps.py +@@ -31,6 +31,11 @@ def _InitBeautifulSoup(): + html5lib_path = os.path.join(catapult_path, 'third_party', 'html5lib-python') + _AddToPathIfNeeded(html5lib_path) + ++ if six.PY3: ++ webencodings_path = os.path.join( ++ catapult_path, 'third_party', 'webencodings-0.5.1') ++ _AddToPathIfNeeded(webencodings_path) ++ + six_path = os.path.join(catapult_path, 'third_party', 'six') + _AddToPathIfNeeded(six_path) + +diff --git a/src/third_party/catapult/tracing/BUILD.gn b/src/third_party/catapult/tracing/BUILD.gn +index 8026066a1f..889d30bc72 100644 +--- a/src/third_party/catapult/tracing/BUILD.gn ++++ b/src/third_party/catapult/tracing/BUILD.gn +@@ -2,15 +2,13 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + +-import("//build/config/python.gni") + import("trace_viewer.gni") + + # TODO: ideally this would go into the target_gen_dir, but this requires some + # changes to the scripts that process them. + output_resource_dir = "$root_gen_dir/content/browser/tracing" + +-# TODO(crbug.com/1112471): Make this work under Python 3. +-python2_action("generate_about_tracing") { ++action("generate_about_tracing") { + script = "bin/generate_about_tracing_contents" + + inputs = tracing_files + tracing_python_files diff --git a/meta-webos/recipes-webos/chromium/files/0022-Run-generate_bindings.py-under-Python-3.patch b/meta-webos/recipes-webos/chromium/files/0022-Run-generate_bindings.py-under-Python-3.patch new file mode 100644 index 000000000..0ba955918 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0022-Run-generate_bindings.py-under-Python-3.patch @@ -0,0 +1,40 @@ +From c0404f122d5a5c9f0a5ebb39beab596a1ebe1ac3 Mon Sep 17 00:00:00 2001 +From: Bruce Dawson +Date: Fri, 28 May 2021 05:35:20 +0000 +Subject: [PATCH] Run generate_bindings.py under Python 3 + +generate_bindings.py runs under Python 2 due to the "run_under_python2 + = true" statement in its BUILD.gn file. This slows down binding +generation slightly, which is why it was noticed, but it also needs +fixing as part of the Python 3 migration project. + +The only incompatibility was adding the result of map() to a list - in +Python 3 that needs an explicit conversion. + +Switching to Python 3 drops the run time of this script by about 20%, +which is a nice bonus considering how much CPU time it uses. + +Bug: 1194277, 1214033 +Change-Id: I2d9cb836d153c775dc0ec912237bb9e1b9cf4cd0 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2922869 +Reviewed-by: Kentaro Hara +Commit-Queue: Bruce Dawson +Cr-Commit-Position: refs/heads/master@{#887468} +--- + src/third_party/blink/renderer/bindings/BUILD.gn | 3 --- + 1 file changed, 3 deletions(-) + +diff --git a/src/third_party/blink/renderer/bindings/BUILD.gn b/src/third_party/blink/renderer/bindings/BUILD.gn +index 385c9d0c45..b9f1c91051 100644 +--- a/src/third_party/blink/renderer/bindings/BUILD.gn ++++ b/src/third_party/blink/renderer/bindings/BUILD.gn +@@ -171,9 +171,6 @@ action_with_pydeps("web_idl_database") { + + template("generate_bindings") { + action_with_pydeps(target_name) { +- # TODO(crbug.com/1194277): Investigate non-determinism in Py3 builds. +- run_under_python2 = true +- + script = "${bindings_scripts_dir}/generate_bindings.py" + + if (defined(invoker.pool)) { diff --git a/meta-webos/recipes-webos/chromium/files/0023-Render-bindings-with-Python-3.patch b/meta-webos/recipes-webos/chromium/files/0023-Render-bindings-with-Python-3.patch new file mode 100644 index 000000000..44ee7ec7a --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0023-Render-bindings-with-Python-3.patch @@ -0,0 +1,42 @@ +From be42ad6a56fc9b39574b90b33b8b763d1bf5f7d8 Mon Sep 17 00:00:00 2001 +From: Bruce Dawson +Date: Tue, 8 Jun 2021 17:45:31 +0000 +Subject: [PATCH] Render bindings with Python 3 + +Some of the bindings code-gen was moved to Python 3 but two build steps +were missed. This moves them over. + +Bug: 1194277 +Change-Id: I406ff8341dde51652bec94e59d9813814c7a17cf +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2946352 +Reviewed-by: Kentaro Hara +Commit-Queue: Bruce Dawson +Cr-Commit-Position: refs/heads/master@{#890326} +--- + src/third_party/blink/renderer/bindings/BUILD.gn | 6 ------ + 1 file changed, 6 deletions(-) + +diff --git a/src/third_party/blink/renderer/bindings/BUILD.gn b/src/third_party/blink/renderer/bindings/BUILD.gn +index b9f1c91051..d4cc47b5d1 100644 +--- a/src/third_party/blink/renderer/bindings/BUILD.gn ++++ b/src/third_party/blink/renderer/bindings/BUILD.gn +@@ -65,9 +65,6 @@ if (use_blink_v8_binding_new_idl_interface) { + + template("collect_idl_files") { + action_with_pydeps(target_name) { +- # TODO(crbug.com/1194277): Investigate non-determinism in Py3 builds. +- run_under_python2 = true +- + script = "${bindings_scripts_dir}/collect_idl_files.py" + + inputs = invoker.inputs +@@ -138,9 +135,6 @@ collect_idl_files("web_idl_in_modules_for_testing") { + } + + action_with_pydeps("web_idl_database") { +- # TODO(crbug.com/1194277): Investigate non-determinism in Py3 builds. +- run_under_python2 = true +- + visibility += [ "//tools/privacy_budget/blink_apis:*" ] + + script = "${bindings_scripts_dir}/build_web_idl_database.py" diff --git a/meta-webos/recipes-webos/chromium/files/0024-blink-use-python3-for-instrumentation_probes.patch b/meta-webos/recipes-webos/chromium/files/0024-blink-use-python3-for-instrumentation_probes.patch new file mode 100644 index 000000000..1adb1a6c6 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0024-blink-use-python3-for-instrumentation_probes.patch @@ -0,0 +1,173 @@ +From d778108df2566133fcf65a66870f125cf76acdb8 Mon Sep 17 00:00:00 2001 +From: Takuto Ikuta +Date: Tue, 18 May 2021 12:43:40 +0000 +Subject: [PATCH] blink: use python3 for instrumentation_probes + +Made generated output deterministic. + +I confirmed that with following commands. +``` +$ rm out/Release/gen/third_party/blink/renderer/core/core_probe* +$ autoninja -C out/Release/ instrumentation_probes +... +$ sha1sum out/Release/gen/third_party/blink/renderer/core/core_probe* +08c191e0d2a54908bb1feeec083ef3aebca99a1b out/Release/gen/third_party/blink/renderer/core/core_probes_impl.cc +dd860b7a409f5d0053757ce519906aefb7c221e6 out/Release/gen/third_party/blink/renderer/core/core_probe_sink.h +e68863d8eca1cf43bac5cf0f2709668e90047430 out/Release/gen/third_party/blink/renderer/core/core_probes_inl.h +``` + +Fixed: 1205616 +Bug: 1194277 +Change-Id: I0fdf74220a5047a6cc76f9a8b2b31041b1743f19 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2902952 +Commit-Queue: Nico Weber +Auto-Submit: Takuto Ikuta +Reviewed-by: Nico Weber +Cr-Commit-Position: refs/heads/master@{#883916} +--- + .../templates/instrumenting_probes_impl.cc.tmpl | 14 +++++++------- + .../templates/instrumenting_probes_inl.h.tmpl | 2 +- + .../build/scripts/templates/probe_sink.h.tmpl | 10 +++++----- + src/third_party/blink/renderer/core/probe/BUILD.gn | 4 +--- + 4 files changed, 14 insertions(+), 16 deletions(-) + +diff --git a/src/third_party/blink/renderer/build/scripts/templates/instrumenting_probes_impl.cc.tmpl b/src/third_party/blink/renderer/build/scripts/templates/instrumenting_probes_impl.cc.tmpl +index e703c4eed1..f879377e3a 100644 +--- a/src/third_party/blink/renderer/build/scripts/templates/instrumenting_probes_impl.cc.tmpl ++++ b/src/third_party/blink/renderer/build/scripts/templates/instrumenting_probes_impl.cc.tmpl +@@ -7,11 +7,11 @@ + + {% set sink_class = (name | to_singular) + "Sink" %} + {% set sink_class_header = (header | to_singular) + "_sink" %} +-{% for file in files %} ++{% for file in files|sort %} + #include "{{output_path_in_gen_dir}}{{file.name}}_inl.h" + {% endfor %} + #include "{{output_path_in_gen_dir}}{{sink_class_header}}.h" +-{% for agent in agents %} ++{% for agent in agents|sort %} + #include "{{agent | agent_name_to_include}}" + {% endfor %} + #include "third_party/blink/renderer/platform/wtf/threading_primitives.h" +@@ -34,13 +34,13 @@ std::atomic {{sink_class}}::s_existingAgents; + + {{sink_class}}::~{{sink_class}}() { + MutexLocker lock(AgentCountMutex()); +-{% for agent in agents %} ++{% for agent in agents|sort %} + if (Has{{agent}}s() && --s_numSinksWith{{agent}} == 0) + s_existingAgents &= ~k{{agent}}; + {% endfor %} + } + +-{% for agent in agents %} ++{% for agent in agents|sort %} + {% set class_name = agent | agent_name_to_class %} + {% set getter_name = agent | to_snake_case %} + +@@ -80,7 +80,7 @@ void {{sink_class}}::Remove{{agent}}({{class_name}}* agent) { + + void {{sink_class}}::Trace(Visitor* visitor) const + { +-{% for agent in agents %} ++{% for agent in agents|sort %} + {% set getter_name = agent | to_snake_case %} + visitor->Trace({{getter_name}}s_); + {% endfor %} +@@ -98,7 +98,7 @@ namespace probe { + {% set agent_probe_name = method_name(common_name or probe.name) %} + if (!probe_sink) + return; +-{% for agent in probe.agents %} ++{% for agent in probe.agents|sort %} + {% set class_name = agent | agent_name_to_class %} + if (probe_sink->Has{{agent}}s()) { + for ({{class_name}}* agent : probe_sink->{{class_name}}s()) +@@ -107,7 +107,7 @@ namespace probe { + {% endfor %} + {% endmacro -%} + +-{% for file in files %} ++{% for file in files|sort %} + {% for probe in file.declarations %} + {% if probe.is_scoped %} + {{probe.name}}::{{probe.name}}({{ params_list(probe) }}) : +diff --git a/src/third_party/blink/renderer/build/scripts/templates/instrumenting_probes_inl.h.tmpl b/src/third_party/blink/renderer/build/scripts/templates/instrumenting_probes_inl.h.tmpl +index c10b8a23c2..e85b68ca17 100644 +--- a/src/third_party/blink/renderer/build/scripts/templates/instrumenting_probes_inl.h.tmpl ++++ b/src/third_party/blink/renderer/build/scripts/templates/instrumenting_probes_inl.h.tmpl +@@ -60,7 +60,7 @@ class {{export_symbol}} {{probe.name}} : public ProbeBase { + {{export_symbol}} void {{probe.name}}Impl({{ params_decl(probe) }}); + inline void {{probe.name}}({{params_list(probe)}}) { + if (!{{sink_class}}::HasAgentsGlobal( +- {%- for agent in probe.agents %} ++ {%- for agent in probe.agents|sort %} + {% if not loop.first %} | {% endif -%} + {{sink_class}}::k{{agent}} + {%- endfor %})) +diff --git a/src/third_party/blink/renderer/build/scripts/templates/probe_sink.h.tmpl b/src/third_party/blink/renderer/build/scripts/templates/probe_sink.h.tmpl +index 0cc0ba0d2a..28c3591266 100644 +--- a/src/third_party/blink/renderer/build/scripts/templates/probe_sink.h.tmpl ++++ b/src/third_party/blink/renderer/build/scripts/templates/probe_sink.h.tmpl +@@ -19,7 +19,7 @@ + + namespace blink { + +-{% for agent in agents %} ++{% for agent in agents|sort %} + class {{ agent | agent_name_to_class }}; + {% endfor %} + +@@ -27,7 +27,7 @@ class {{export_symbol}} {{sink_class}} final : public GarbageCollected<{{sink_cl + + public: + enum AgentType : unsigned { +-{% for agent in agents %} ++{% for agent in agents|sort %} + k{{agent}} = 1u << {{loop.index0}}, + {% endfor %} + }; +@@ -39,7 +39,7 @@ class {{export_symbol}} {{sink_class}} final : public GarbageCollected<{{sink_cl + + void Trace(Visitor*) const; + +-{% for agent in agents %} ++{% for agent in agents|sort %} + {% set class_name = agent | agent_name_to_class %} + {% set getter_name = agent | to_snake_case %} + bool Has{{agent}}s() const { return !{{getter_name}}s_.IsEmpty(); } +@@ -54,7 +54,7 @@ class {{export_symbol}} {{sink_class}} final : public GarbageCollected<{{sink_cl + } + + private: +-{% for agent in agents %} ++{% for agent in agents|sort %} + {% set class_name = agent | agent_name_to_class %} + {% set getter_name = agent | to_snake_case %} + HeapListHashSet> {{getter_name}}s_; +@@ -63,7 +63,7 @@ class {{export_symbol}} {{sink_class}} final : public GarbageCollected<{{sink_cl + // Number of sinks with an enabled agent of each type, used to keep + // |s_existingAgents| up to date. + // Access must be guarded by AgentCountMutex in the source file. +-{% for agent in agents %} ++{% for agent in agents|sort %} + static unsigned s_numSinksWith{{agent}}; + {% endfor %} + +diff --git a/src/third_party/blink/renderer/core/probe/BUILD.gn b/src/third_party/blink/renderer/core/probe/BUILD.gn +index 8283599fd4..6944d32431 100644 +--- a/src/third_party/blink/renderer/core/probe/BUILD.gn ++++ b/src/third_party/blink/renderer/core/probe/BUILD.gn +@@ -2,11 +2,9 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + +-import("//build/config/python.gni") + import("//third_party/blink/renderer/core/core.gni") + +-# TODO(crbug.com/1194277): Investigate non-determinism in Py3 builds. +-python2_action("instrumentation_probes") { ++action("instrumentation_probes") { + script = "../../build/scripts/make_instrumenting_probes.py" + + inputs = [ diff --git a/meta-webos/recipes-webos/chromium/files/0025-Remove-run_under_python2-option-from-grit_rule.gni.patch b/meta-webos/recipes-webos/chromium/files/0025-Remove-run_under_python2-option-from-grit_rule.gni.patch new file mode 100644 index 000000000..d14eecb85 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0025-Remove-run_under_python2-option-from-grit_rule.gni.patch @@ -0,0 +1,103 @@ +From af2fbbf263ccee8e30c7103bb83edd267e55c47f Mon Sep 17 00:00:00 2001 +From: Andrew Grieve +Date: Thu, 20 May 2021 14:06:05 +0000 +Subject: [PATCH] Remove run_under_python2 option from grit_rule.gni + +Bug: 1205591 +Change-Id: I2c4b1a6964f6636b6809019b0d9e13f6273671d7 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2903587 +Reviewed-by: Nico Weber +Commit-Queue: Andrew Grieve +Cr-Commit-Position: refs/heads/master@{#885005} +--- + src/tools/grit/grit/format/gzip_string.py | 2 + + src/tools/grit/grit_rule.gni | 49 +++++++---------------- + 2 files changed, 17 insertions(+), 34 deletions(-) + +diff --git a/src/tools/grit/grit/format/gzip_string.py b/src/tools/grit/grit/format/gzip_string.py +index 3cd17185c9..002ce43d4a 100644 +--- a/src/tools/grit/grit/format/gzip_string.py ++++ b/src/tools/grit/grit/format/gzip_string.py +@@ -37,6 +37,8 @@ def GzipString(data): + # not have --rsyncable. If used over GzipStringRsyncable, the primary + # difference of this function's compression will be larger updates every time + # a compressed resource is changed. ++ if isinstance(data, str): ++ data = data.encode('utf8') + gzip_output = io.BytesIO() + with gzip.GzipFile(mode='wb', compresslevel=9, fileobj=gzip_output, + mtime=0) as gzip_file: +diff --git a/src/tools/grit/grit_rule.gni b/src/tools/grit/grit_rule.gni +index 8a87ce6d24..dfa20aff6c 100644 +--- a/src/tools/grit/grit_rule.gni ++++ b/src/tools/grit/grit_rule.gni +@@ -67,11 +67,6 @@ + # configs (optional) + # List of additional configs to be applied to the generated target. + # +-# run_under_python2 (optional) +-# If true, this is always run under Python2; if false (the default), +-# will be run under whatever script_executable actually is. +-# TODO(crbug.com/1112471): Find all users of this and get them to +-# run cleanly under Python3, then remove this option. + # deps (optional) + # testonly (optional) + # visibility (optional) +@@ -144,22 +139,8 @@ template("grit") { + + _grit_custom_target = target_name + "_grit" + action(_grit_custom_target) { +- # TODO(crbug.com/1112471): Remove the 'true' branch so that we can start +- # running *some* grit invocations under python3, and then get them +- # all to work under python3. +- if ((defined(invoker.run_under_python2) && invoker.run_under_python2) || +- true) { +- script = "//build/util/python2_action.py" +- args = [ rebase_path("//tools/grit/grit.py", root_build_dir) ] +- inputs = [ +- "//tools/grit/grit.py", +- invoker.source, +- ] +- } else { +- script = "//tools/grit/grit.py" +- args = [] +- inputs = [ invoker.source ] +- } ++ script = "//tools/grit/grit.py" ++ inputs = [ invoker.source ] + + testonly = defined(invoker.testonly) && invoker.testonly + +@@ -200,19 +181,19 @@ template("grit") { + inputs += rebase_path(_rel_inputs, ".", root_build_dir) + } + +- args += [ +- "-i", +- _rebased_source_path, +- "build", +- "-o", +- rebase_path(_output_dir, root_build_dir), +- "--depdir", +- ".", +- "--depfile", +- rebase_path(depfile, root_build_dir), +- "--write-only-new=1", +- "--depend-on-stamp", +- ] + _grit_flags ++ args = [ ++ "-i", ++ _rebased_source_path, ++ "build", ++ "-o", ++ rebase_path(_output_dir, root_build_dir), ++ "--depdir", ++ ".", ++ "--depfile", ++ rebase_path(depfile, root_build_dir), ++ "--write-only-new=1", ++ "--depend-on-stamp", ++ ] + _grit_flags + + # Add brotli executable if using brotli. + if (defined(invoker.use_brotli) && invoker.use_brotli) { diff --git a/meta-webos/recipes-webos/chromium/files/0026-catapult-Python-3-migration-of-common.patch b/meta-webos/recipes-webos/chromium/files/0026-catapult-Python-3-migration-of-common.patch new file mode 100644 index 000000000..89b950c25 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0026-catapult-Python-3-migration-of-common.patch @@ -0,0 +1,244 @@ +From 56c1cfad1b28f2cde062a322017d919a4a09cd57 Mon Sep 17 00:00:00 2001 +From: Ryan Heise +Date: Fri, 21 May 2021 12:37:34 -0700 +Subject: [PATCH] catapult: Python 3 migration of common/ + +- Migrated StringIO for all files +- Updated some instances where a byte array is needed instead of a +string +- Modernized a sort + +Change-Id: Ie190199258e948b00b4aca0cd08f12e8db4bfaa6 +Bug: chromium:1198408 +Reviewed-on: https://chromium-review.googlesource.com/c/catapult/+/2912505 +Commit-Queue: Ryan Heise +Reviewed-by: John Chen +Signed-off-by: Martin Jansa +--- + .../py_trace_event/trace_event_impl/log.py | 12 ++++++------ + .../perfetto_trace_writer_unittest.py | 17 ++++++++++------- + .../py_utils/py_utils/logging_util_unittest.py | 2 +- + .../py_vulcanize/py_vulcanize/fake_fs.py | 18 +++++++++++++++--- + .../py_vulcanize/resource_loader.py | 9 ++++++++- + .../py_vulcanize/style_sheet_unittest.py | 2 +- + 6 files changed, 41 insertions(+), 19 deletions(-) + +diff --git a/src/third_party/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log.py b/src/third_party/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log.py +index 130d168385..082dd70117 100644 +--- a/src/third_party/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log.py ++++ b/src/third_party/catapult/common/py_trace_event/py_trace_event/trace_event_impl/log.py +@@ -133,9 +133,9 @@ def _write_header(): + ) + else: + if _format == JSON: +- _log_file.write('[') ++ _log_file.write(b'[') + elif _format == JSON_WITH_METADATA: +- _log_file.write('{"traceEvents": [\n') ++ _log_file.write(b'{"traceEvents": [\n') + else: + raise TraceException("Unknown format: %s" % _format) + json.dump({ +@@ -147,7 +147,7 @@ def _write_header(): + "name": "process_argv", + "args": {"argv": sys.argv}, + }, _log_file) +- _log_file.write('\n') ++ _log_file.write(b'\n') + + + @_locked +@@ -227,7 +227,7 @@ def _write_cur_events(): + ) + elif _format in (JSON, JSON_WITH_METADATA): + for e in _cur_events: +- _log_file.write(",\n") ++ _log_file.write(b",\n") + json.dump(e, _log_file) + else: + raise TraceException("Unknown format: %s" % _format) +@@ -243,9 +243,9 @@ def _write_footer(): + # been written in a special proto message. + pass + elif _format == JSON_WITH_METADATA: +- _log_file.write('],\n"metadata": ') ++ _log_file.write(b'],\n"metadata": ') + json.dump(_benchmark_metadata, _log_file) +- _log_file.write('}') ++ _log_file.write(b'}') + else: + raise TraceException("Unknown format: %s" % _format) + +diff --git a/src/third_party/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_trace_writer_unittest.py b/src/third_party/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_trace_writer_unittest.py +index 00dafa463c..088ac67d64 100644 +--- a/src/third_party/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_trace_writer_unittest.py ++++ b/src/third_party/catapult/common/py_trace_event/py_trace_event/trace_event_impl/perfetto_trace_writer_unittest.py +@@ -4,7 +4,10 @@ + # found in the LICENSE file. + + import unittest +-import StringIO ++try: ++ from StringIO import StringIO ++except ImportError: ++ from io import StringIO + + from py_trace_event.trace_event_impl import perfetto_trace_writer + +@@ -19,7 +22,7 @@ class PerfettoTraceWriterTest(unittest.TestCase): + perfetto_trace_writer.reset_global_state() + + def testWriteThreadDescriptorEvent(self): +- result = StringIO.StringIO() ++ result = StringIO() + perfetto_trace_writer.write_thread_descriptor_event( + output=result, + pid=1, +@@ -33,7 +36,7 @@ class PerfettoTraceWriterTest(unittest.TestCase): + self.assertEqual(expected_output, result.getvalue()) + + def testWriteTwoEvents(self): +- result = StringIO.StringIO() ++ result = StringIO() + perfetto_trace_writer.write_thread_descriptor_event( + output=result, + pid=1, +@@ -59,7 +62,7 @@ class PerfettoTraceWriterTest(unittest.TestCase): + self.assertEqual(expected_output, result.getvalue()) + + def testWriteMetadata(self): +- result = StringIO.StringIO() ++ result = StringIO() + perfetto_trace_writer.write_metadata( + output=result, + benchmark_start_time_us=1556716807306000, +@@ -79,7 +82,7 @@ class PerfettoTraceWriterTest(unittest.TestCase): + self.assertEqual(expected_output, result.getvalue()) + + def testWriteArgs(self): +- result = StringIO.StringIO() ++ result = StringIO() + perfetto_trace_writer.write_thread_descriptor_event( + output=result, + pid=1, +@@ -105,7 +108,7 @@ class PerfettoTraceWriterTest(unittest.TestCase): + self.assertEqual(expected_output, result.getvalue()) + + def testWriteChromeMetadata(self): +- result = StringIO.StringIO() ++ result = StringIO() + perfetto_trace_writer.write_chrome_metadata( + output=result, + clock_domain='FOO', +@@ -116,7 +119,7 @@ class PerfettoTraceWriterTest(unittest.TestCase): + self.assertEqual(expected_output, result.getvalue()) + + def testWriteClockSnapshot(self): +- result = StringIO.StringIO() ++ result = StringIO() + perfetto_trace_writer.write_clock_snapshot( + output=result, + tid=1, +diff --git a/src/third_party/catapult/common/py_utils/py_utils/logging_util_unittest.py b/src/third_party/catapult/common/py_utils/py_utils/logging_util_unittest.py +index eb26098c88..59e6107798 100644 +--- a/src/third_party/catapult/common/py_utils/py_utils/logging_util_unittest.py ++++ b/src/third_party/catapult/common/py_utils/py_utils/logging_util_unittest.py +@@ -5,7 +5,7 @@ import logging + import unittest + + try: +- from six import StringIO ++ from StringIO import StringIO + except ImportError: + from io import StringIO + +diff --git a/src/third_party/catapult/common/py_vulcanize/py_vulcanize/fake_fs.py b/src/third_party/catapult/common/py_vulcanize/py_vulcanize/fake_fs.py +index 40b01bb5ff..975045fcbb 100644 +--- a/src/third_party/catapult/common/py_vulcanize/py_vulcanize/fake_fs.py ++++ b/src/third_party/catapult/common/py_vulcanize/py_vulcanize/fake_fs.py +@@ -13,6 +13,8 @@ import sys + + import six + ++if six.PY3: ++ import builtins + + class WithableStringIO(six.StringIO): + +@@ -33,7 +35,11 @@ class FakeFS(object): + + self._bound = False + self._real_codecs_open = codecs.open +- self._real_open = sys.modules['__builtin__'].open ++ if six.PY3: ++ self._real_open = builtins.open ++ else: ++ self._real_open = sys.modules['__builtin__'].open ++ + self._real_abspath = os.path.abspath + self._real_exists = os.path.exists + self._real_walk = os.walk +@@ -49,7 +55,10 @@ class FakeFS(object): + def Bind(self): + assert not self._bound + codecs.open = self._FakeCodecsOpen +- sys.modules['__builtin__'].open = self._FakeOpen ++ if six.PY3: ++ builtins.open = self._FakeOpen ++ else: ++ sys.modules['__builtin__'].open = self._FakeOpen + os.path.abspath = self._FakeAbspath + os.path.exists = self._FakeExists + os.walk = self._FakeWalk +@@ -59,7 +68,10 @@ class FakeFS(object): + def Unbind(self): + assert self._bound + codecs.open = self._real_codecs_open +- sys.modules['__builtin__'].open = self._real_open ++ if six.PY3: ++ builtins.open = self._real_open ++ else: ++ sys.modules['__builtin__'].open = self._real_open + os.path.abspath = self._real_abspath + os.path.exists = self._real_exists + os.walk = self._real_walk +diff --git a/src/third_party/catapult/common/py_vulcanize/py_vulcanize/resource_loader.py b/src/third_party/catapult/common/py_vulcanize/py_vulcanize/resource_loader.py +index 015adaa660..f3ae2fe0ba 100644 +--- a/src/third_party/catapult/common/py_vulcanize/py_vulcanize/resource_loader.py ++++ b/src/third_party/catapult/common/py_vulcanize/py_vulcanize/resource_loader.py +@@ -6,6 +6,10 @@ + + import codecs + import os ++import six ++import sys ++if six.PY3: ++ import functools + + from py_vulcanize import module + from py_vulcanize import style_sheet as style_sheet_module +@@ -59,7 +63,10 @@ class ResourceLoader(object): + return None + + # Sort by length. Longest match wins. +- candidate_paths.sort(lambda x, y: len(x) - len(y)) ++ if six.PY3: ++ sorted(candidate_paths, key=functools.cmp_to_key(lambda x, y: len(x) - len(y)), reverse=True) ++ else: ++ candidate_paths.sort(lambda x, y: len(x) - len(y)) + longest_candidate = candidate_paths[-1] + return resource_module.Resource(longest_candidate, absolute_path, binary) + +diff --git a/src/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet_unittest.py b/src/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet_unittest.py +index 4ebc71d565..0d12a6f3c8 100644 +--- a/src/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet_unittest.py ++++ b/src/third_party/catapult/common/py_vulcanize/py_vulcanize/style_sheet_unittest.py +@@ -38,7 +38,7 @@ class StyleSheetUnittest(unittest.TestCase): + .x .y { + background-image: url(data:image/jpeg;base64,%s); + } +-""" % base64.standard_b64encode('hello world'), inlined) ++""" % base64.standard_b64encode(b'hello world'), inlined) + + def testURLResolveFails(self): + fs = fake_fs.FakeFS() diff --git a/meta-webos/recipes-webos/chromium/files/0027-devtools-frontend-Reland-Reland-use-python3-in-devto.patch b/meta-webos/recipes-webos/chromium/files/0027-devtools-frontend-Reland-Reland-use-python3-in-devto.patch new file mode 100644 index 000000000..1f64a9c83 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0027-devtools-frontend-Reland-Reland-use-python3-in-devto.patch @@ -0,0 +1,257 @@ +From 4680f0d270586d944c06d3734352e973a1e800ee Mon Sep 17 00:00:00 2001 +From: Takuto Ikuta +Date: Mon, 24 May 2021 14:54:53 +0900 +Subject: [PATCH] devtools-frontend: Reland "Reland "use python3 in + devtools-frontend by default"" + +This reverts commit 7c579586805a0a240f9c3b156706ee27c0d103cd. + +Reason for revert: +This uses dict instead of set in modular_build.py for deterministic +output. +ref: https://softwaremaniacs.org/blog/2020/02/05/dicts-ordered/en/ + +I confirmed that devtools_app.js is the same in repeated builds. + +Original change's description: +> Revert "Reland "use python3 in devtools-frontend by default"" +> +> This reverts commit 0d4947c37e75e7c775a050fcb5cf8443274b0a5f. +> +> Reason for revert: https://crbug.com/1211770 +> +> Original change's description: +> > Reland "use python3 in devtools-frontend by default" +> > +> > This reverts commit a8336c1e58efb1fe6ee813025252cae0a24b06ae. +> > +> > Reason for revert: +> > use universal_newlines instead of text for +> > https://docs.python.org/3/library/subprocess.html#subprocess.Popen +> > +> > I tried to divide this CL in to make py2/3 compatible and switch in +> > another CL. But that hit another issue due to the difference of string +> > type around io.StringIO and cStringIO.StringIO like +> > https://logs.chromium.org/logs/devtools-frontend/buildbucket/cr-buildbucket.appspot.com/8846743161604002304/+/u/compile/raw_io.output_failure_summary_ +> > +> > So decided to re-land the switch with fix for known issue. +> > +> > I confirmed this works for python3.6 too. +> > +> > Original change's description: +> > > Revert "use python3 in devtools-frontend by default" +> > > +> > > This reverts commit 37c0bf698dac52793c1c6c9ecd3b6c0335a804d1. +> > > +> > > Reason for revert: +> > > Compatibility issues with python 3.6. +> > > +> > > Original change's description: +> > > > use python3 in devtools-frontend by default +> > > > +> > > > Fixed: 1205624, 1205625 +> > > > Change-Id: Iddaf2a49bffd92140d1877784ffd9f5dd83ac3de +> > > > Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2902988 +> > > > Auto-Submit: Takuto Ikuta +> > > > Commit-Queue: Takuto Ikuta +> > > > Reviewed-by: Michael Achenbach +> > > > Reviewed-by: Tim van der Lippe +> > > +> > > Change-Id: Ic426154f58798dd8631f9bac101521f0b25ea54c +> > > Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2906060 +> > > Bot-Commit: Rubber Stamper +> > > Commit-Queue: Michael Achenbach +> > +> > Bug: 1210939, 1205624, 1205625 +> > Change-Id: Ia7ddf5ab37c8df3e2f682bf89cb55ef30e663341 +> > Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2909053 +> > Commit-Queue: Takuto Ikuta +> > Reviewed-by: Michael Achenbach +> +> Bug: 1210939 +> Bug: 1205624 +> Bug: 1205625 +> Bug: 1211770 +> No-Tree-Checks: true +> No-Presubmit: true +> Change-Id: Ic3a6add15b4126dfe818b445a5227253d296ee96 +> Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2910016 +> Commit-Queue: Takuto Ikuta +> Auto-Submit: Takuto Ikuta +> Reviewed-by: Michael Achenbach + +Bug: 1210939 +Bug: 1205624 +Bug: 1205625 +Bug: 1211770 +Change-Id: I2acb2968e68f55a663cd5221c1c92b16301392cd +Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2910020 +Auto-Submit: Takuto Ikuta +Reviewed-by: Tim van der Lippe +Commit-Queue: Takuto Ikuta +Signed-off-by: Martin Jansa +--- + src/third_party/devtools-frontend/src/BUILD.gn | 5 +---- + .../src/inspector_overlay/BUILD.gn | 4 +--- + .../src/scripts/build/build_inspector_overlay.py | 6 ++++-- + .../src/scripts/build/build_release_applications.py | 11 ++++++----- + .../src/scripts/build/modular_build.py | 13 ++++++++----- + 5 files changed, 20 insertions(+), 19 deletions(-) + +diff --git a/src/third_party/devtools-frontend/src/BUILD.gn b/src/third_party/devtools-frontend/src/BUILD.gn +index 867367c2e6..da4fc0fc67 100644 +--- a/src/third_party/devtools-frontend/src/BUILD.gn ++++ b/src/third_party/devtools-frontend/src/BUILD.gn +@@ -2,8 +2,6 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + +-import("//build/config/python.gni") +- + import("./all_devtools_files.gni") + import("./all_devtools_modules.gni") + import("./devtools_grd_files.gni") +@@ -272,8 +270,7 @@ if (!is_debug) { + build_release_devtools_args += [ "--rollup" ] + } + +-# TODO(crbug.com/1112471): Get this to work cleanly under Python3. +-python2_action("build_release_devtools") { ++action("build_release_devtools") { + script = "scripts/build/build_release_applications.py" + + helper_scripts = [ +diff --git a/src/third_party/devtools-frontend/src/inspector_overlay/BUILD.gn b/src/third_party/devtools-frontend/src/inspector_overlay/BUILD.gn +index 96880699c1..cd23345bba 100644 +--- a/src/third_party/devtools-frontend/src/inspector_overlay/BUILD.gn ++++ b/src/third_party/devtools-frontend/src/inspector_overlay/BUILD.gn +@@ -2,13 +2,11 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + +-import("//build/config/python.gni") + import("../third_party/typescript/typescript.gni") + + resources_out_dir = "$root_out_dir/resources/inspector_overlay" + +-# TODO(crbug.com/1112471): Get this to work under Python 3. +-python2_action("build_inspector_overlay") { ++action("build_inspector_overlay") { + script = "../scripts/build/build_inspector_overlay.py" + + inputs = [ +diff --git a/src/third_party/devtools-frontend/src/scripts/build/build_inspector_overlay.py b/src/third_party/devtools-frontend/src/scripts/build/build_inspector_overlay.py +index 3f81f6b484..0f89b63038 100644 +--- a/src/third_party/devtools-frontend/src/scripts/build/build_inspector_overlay.py ++++ b/src/third_party/devtools-frontend/src/scripts/build/build_inspector_overlay.py +@@ -1,5 +1,5 @@ + #!/usr/bin/env vpython +-# -*- coding: UTF-8 -*- ++# -*- coding: utf-8 -*- + # + # Copyright 2020 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be +@@ -45,7 +45,9 @@ def rollup(input_path, output_path, filename, max_size, rollup_plugin): + ['--format', 'iife', '-n', 'InspectorOverlay'] + ['--input', target] + + ['--plugin', rollup_plugin], + stdout=subprocess.PIPE, +- stderr=subprocess.PIPE) ++ stderr=subprocess.PIPE, ++ universal_newlines=True, ++ encoding='utf-8') + out, error = rollup_process.communicate() + if not out: + raise Exception("rollup failed: " + error) +diff --git a/src/third_party/devtools-frontend/src/scripts/build/build_release_applications.py b/src/third_party/devtools-frontend/src/scripts/build/build_release_applications.py +index eb6ab59753..3cc5da4a95 100644 +--- a/src/third_party/devtools-frontend/src/scripts/build/build_release_applications.py ++++ b/src/third_party/devtools-frontend/src/scripts/build/build_release_applications.py +@@ -1,5 +1,5 @@ + #!/usr/bin/env vpython +-# -*- coding: UTF-8 -*- ++# -*- coding: utf-8 -*- + # + # Copyright 2016 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be +@@ -10,7 +10,7 @@ Builds applications in release mode: + and the application loader into a single script. + """ + +-from cStringIO import StringIO ++from io import StringIO + from os import path + from os.path import join + import copy +@@ -153,8 +153,7 @@ class ReleaseBuilder(object): + resource_content = read_file(path.join(self.application_dir, resource_name)) + if not (resource_name.endswith('.html') + or resource_name.endswith('md')): +- resource_content += resource_source_url(resource_name).encode( +- 'utf-8') ++ resource_content += resource_source_url(resource_name) + resource_content = resource_content.replace('\\', '\\\\') + resource_content = resource_content.replace('\n', '\\n') + resource_content = resource_content.replace('"', '\\"') +@@ -180,7 +179,9 @@ class ReleaseBuilder(object): + def _concatenate_application_script(self, output): + output.write('Root.allDescriptors.push(...%s);' % self._release_module_descriptors()) + if self.descriptors.extends: +- output.write('Root.applicationDescriptor.modules.push(...%s);' % json.dumps(self.descriptors.application.values())) ++ output.write( ++ 'Root.applicationDescriptor.modules.push(...%s);' % ++ json.dumps(list(self.descriptors.application.values()))) + else: + output.write('Root.applicationDescriptor = %s;' % self.descriptors.application_json()) + +diff --git a/src/third_party/devtools-frontend/src/scripts/build/modular_build.py b/src/third_party/devtools-frontend/src/scripts/build/modular_build.py +index 5924ff1343..f3f0b4d99f 100644 +--- a/src/third_party/devtools-frontend/src/scripts/build/modular_build.py ++++ b/src/third_party/devtools-frontend/src/scripts/build/modular_build.py +@@ -20,7 +20,7 @@ except ImportError: + + + def read_file(filename): +- with open(path.normpath(filename), 'rt') as input: ++ with open(path.normpath(filename), 'rt', encoding='utf-8') as input: + return input.read() + + +@@ -30,7 +30,7 @@ def write_file(filename, content): + directory = path.dirname(filename) + if not path.exists(directory): + os.makedirs(directory) +- with open(filename, 'wt') as output: ++ with open(filename, 'wt', encoding='utf-8') as output: + output.write(content) + + +@@ -59,7 +59,7 @@ class Descriptors: + + def application_json(self): + result = dict() +- result['modules'] = self.application.values() ++ result['modules'] = list(self.application.values()) + return json.dumps(result) + + def module_resources(self, name): +@@ -70,7 +70,10 @@ class Descriptors: + return self._cached_sorted_modules + + result = [] +- unvisited_modules = set(self.modules) ++ ++ # Use dict instead of set for deterministic iteration order. ++ unvisited_modules = {module: None for module in self.modules} ++ + temp_modules = set() + + def visit(parent, name): +@@ -87,7 +90,7 @@ class Descriptors: + bad_dep = visit(name, dep_name) + if bad_dep: + return bad_dep +- unvisited_modules.remove(name) ++ del unvisited_modules[name] + temp_modules.remove(name) + result.append(name) + return None diff --git a/meta-webos/recipes-webos/chromium/files/0028-protobuf-use-python3-for-protoc_wrapper.py.patch b/meta-webos/recipes-webos/chromium/files/0028-protobuf-use-python3-for-protoc_wrapper.py.patch new file mode 100644 index 000000000..39f2d6ca9 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0028-protobuf-use-python3-for-protoc_wrapper.py.patch @@ -0,0 +1,51 @@ +From d248c2e6fb8ebece070c4534437923da90432be6 Mon Sep 17 00:00:00 2001 +From: Takuto Ikuta +Date: Tue, 18 May 2021 12:42:42 +0000 +Subject: [PATCH] protobuf: use python3 for protoc_wrapper.py + +Fixed: 1205614 +Change-Id: I9e8a1ea1691f90bd71fb8ee83e36dcd1fe767f67 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2902951 +Auto-Submit: Takuto Ikuta +Commit-Queue: Nico Weber +Reviewed-by: Nico Weber +Cr-Commit-Position: refs/heads/master@{#883915} +--- + src/third_party/protobuf/proto_library.gni | 13 ++----------- + src/tools/protoc_wrapper/protoc_wrapper.py | 2 +- + 2 files changed, 3 insertions(+), 12 deletions(-) + +diff --git a/src/third_party/protobuf/proto_library.gni b/src/third_party/protobuf/proto_library.gni +index bf0b1433aa..a6943f5896 100644 +--- a/src/third_party/protobuf/proto_library.gni ++++ b/src/third_party/protobuf/proto_library.gni +@@ -314,17 +314,8 @@ template("proto_library") { + ":$javascript_name", + ":$source_set_name", + ] +- if ((defined(invoker.run_under_python2) && invoker.run_under_python2) || +- true) { +- # TODO(crbug.com/1112471) - get all users of this to run cleanly under +- # Python 3 and then remove this option. +- script = "//build/util/python2_action.py" +- args = [ rebase_path("//tools/protoc_wrapper/protoc_wrapper.py", +- root_build_dir) ] + protos +- } else { +- script = "//tools/protoc_wrapper/protoc_wrapper.py" +- args = protos +- } ++ script = "//tools/protoc_wrapper/protoc_wrapper.py" ++ args = protos + + sources = proto_sources + outputs = get_path_info(protogens + protogens_cc + protogens_js, "abspath") +diff --git a/src/tools/protoc_wrapper/protoc_wrapper.py b/src/tools/protoc_wrapper/protoc_wrapper.py +index 5afc7754c0..dc8a3f1ccd 100755 +--- a/src/tools/protoc_wrapper/protoc_wrapper.py ++++ b/src/tools/protoc_wrapper/protoc_wrapper.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2012 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. diff --git a/meta-webos/recipes-webos/chromium/files/0029-components-run-gen_file_type_proto.py-in-python3.patch b/meta-webos/recipes-webos/chromium/files/0029-components-run-gen_file_type_proto.py-in-python3.patch new file mode 100644 index 000000000..53e1990fd --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0029-components-run-gen_file_type_proto.py-in-python3.patch @@ -0,0 +1,90 @@ +From 05d76e4e0547f68029f34e8145fca1eb241dd04b Mon Sep 17 00:00:00 2001 +From: Takuto Ikuta +Date: Wed, 19 May 2021 11:29:16 +0000 +Subject: [PATCH] components: run gen_file_type_proto.py in python3 + +Fixed: 1205602 +Change-Id: I8566c08e74ac34e1c365bf8607d0eb1a1b7d6935 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2905118 +Auto-Submit: Takuto Ikuta +Commit-Queue: Nico Weber +Reviewed-by: Nico Weber +Cr-Commit-Position: refs/heads/master@{#884391} +Signed-off-by: Martin Jansa +--- + src/components/safe_browsing/core/resources/BUILD.gn | 7 ++----- + .../core/resources/gen_file_type_proto.py | 10 ++++++---- + 2 files changed, 8 insertions(+), 9 deletions(-) + +diff --git a/src/components/safe_browsing/core/resources/BUILD.gn b/src/components/safe_browsing/core/resources/BUILD.gn +index c0b0acc2d5..21d9cee887 100644 +--- a/src/components/safe_browsing/core/resources/BUILD.gn ++++ b/src/components/safe_browsing/core/resources/BUILD.gn +@@ -3,13 +3,11 @@ + # found in the LICENSE file. + + import("//build/config/chromeos/ui_mode.gni") +-import("//build/config/python.gni") + + # TODO(nparker): reduce the duplication between these two, somehow. + + # Generate the binary proto form of "file_types" from the ascii proto. +-# TODO(crbug.com/1112471): Get this to run cleanly under Python 3. +-python2_action("make_file_types_protobuf") { ++action("make_file_types_protobuf") { + script = "gen_file_type_proto.py" + + # The output goes in $target_gen_dir since that's where +@@ -67,8 +65,7 @@ python2_action("make_file_types_protobuf") { + + # Generate the binary proto for ALL platforms. This is only run manually + # when pushing the files to GCS for the component-updater to pick up. +-# TODO(crbug.com/1112471): Get this to run cleanly under Python 3. +-python2_action("make_all_file_types_protobuf") { ++action("make_all_file_types_protobuf") { + script = "gen_file_type_proto.py" + + input_filename = "download_file_types.asciipb" +diff --git a/src/components/safe_browsing/core/resources/gen_file_type_proto.py b/src/components/safe_browsing/core/resources/gen_file_type_proto.py +index 3974ba3dbd..c2b3daa44d 100755 +--- a/src/components/safe_browsing/core/resources/gen_file_type_proto.py ++++ b/src/components/safe_browsing/core/resources/gen_file_type_proto.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2016 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +@@ -10,6 +10,8 @@ + each which contains only the values that platform needs. + """ + ++from __future__ import absolute_import ++from __future__ import print_function + import os + import re + import sys +@@ -154,7 +156,7 @@ class DownloadFileTypeProtoGenerator(BinaryProtoGenerator): + FilterForPlatformAndWrite(pb, platform_enum, outfile) + else: + # Make a separate file for each platform +- for platform_type, platform_enum in PlatformTypes().iteritems(): ++ for platform_type, platform_enum in PlatformTypes().items(): + # e.g. .../all/77/chromeos/download_file_types.pb + outfile = os.path.join(opts.outdir, + str(pb.version_id), +@@ -179,12 +181,12 @@ class DownloadFileTypeProtoGenerator(BinaryProtoGenerator): + + def VerifyArgs(self, opts): + if (not opts.all and opts.type not in PlatformTypes()): +- print "ERROR: Unknown platform type '%s'" % opts.type ++ print("ERROR: Unknown platform type '%s'" % opts.type) + self.opt_parser.print_help() + return False + + if (bool(opts.all) == bool(opts.type)): +- print "ERROR: Need exactly one of --type or --all" ++ print("ERROR: Need exactly one of --type or --all") + self.opt_parser.print_help() + return False + return True diff --git a/meta-webos/recipes-webos/chromium/files/0030-Update-ssl_error_assistant-code-to-py3.patch b/meta-webos/recipes-webos/chromium/files/0030-Update-ssl_error_assistant-code-to-py3.patch new file mode 100644 index 000000000..329d0dfdb --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0030-Update-ssl_error_assistant-code-to-py3.patch @@ -0,0 +1,110 @@ +From e7144d11b9528238afab72ff064c07cb33745a30 Mon Sep 17 00:00:00 2001 +From: Chris Thompson +Date: Tue, 11 May 2021 19:57:34 +0000 +Subject: [PATCH] Update ssl_error_assistant code to py3 + +This is a mechanical update of ssl_error_assistant resource code to +move from Python2 to Python3. Tested by invoking the build target +(`ninja -c out_linux/Release make_ssl_error_assistant_protobuf`). + +Bug: 1205600 +Change-Id: I5387338e66a94af4f7dccfa3ab3872163faaeafe +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2885011 +Reviewed-by: Mustafa Emre Acer +Commit-Queue: Chris Thompson +Cr-Commit-Position: refs/heads/master@{#881666} +--- + .../ssl/ssl_error_assistant/BUILD.gn | 3 +-- + .../ssl/ssl_error_assistant/PRESUBMIT.py | 2 ++ + .../gen_ssl_error_assistant_proto.py | 2 +- + .../ssl/ssl_error_assistant/push_proto.py | 22 +++++++++---------- + 4 files changed, 15 insertions(+), 14 deletions(-) + +diff --git a/src/components/resources/ssl/ssl_error_assistant/BUILD.gn b/src/components/resources/ssl/ssl_error_assistant/BUILD.gn +index 9a90fd463f..ca822984e1 100644 +--- a/src/components/resources/ssl/ssl_error_assistant/BUILD.gn ++++ b/src/components/resources/ssl/ssl_error_assistant/BUILD.gn +@@ -5,8 +5,7 @@ + import("//build/config/python.gni") + + # Generate the binary proto form of "ssl_error_assistant" from the ascii proto. +-# TODO(crbug.com/1112471): Get this to run cleanly under Python 3. +-python2_action("make_ssl_error_assistant_protobuf") { ++action("make_ssl_error_assistant_protobuf") { + script = "gen_ssl_error_assistant_proto.py" + + # The output goes in $target_gen_dir since that's where +diff --git a/src/components/resources/ssl/ssl_error_assistant/PRESUBMIT.py b/src/components/resources/ssl/ssl_error_assistant/PRESUBMIT.py +index 16a0f328f8..93b738b24c 100644 +--- a/src/components/resources/ssl/ssl_error_assistant/PRESUBMIT.py ++++ b/src/components/resources/ssl/ssl_error_assistant/PRESUBMIT.py +@@ -7,6 +7,8 @@ + This is taken from chrome/browser/resources/safe_browsing/PRESUBMIT.py. + """ + ++USE_PYTHON3 = True ++ + # TODO(meacer): Refactor and reuse shared code with + # chrome/browser/resources/safe_browsing/PRESUBMIT.py + def CheckVersionUpdatedInSSLErrorAssistantProto(input_api, output_api): +diff --git a/src/components/resources/ssl/ssl_error_assistant/gen_ssl_error_assistant_proto.py b/src/components/resources/ssl/ssl_error_assistant/gen_ssl_error_assistant_proto.py +index bf37febd56..9032c7307d 100755 +--- a/src/components/resources/ssl/ssl_error_assistant/gen_ssl_error_assistant_proto.py ++++ b/src/components/resources/ssl/ssl_error_assistant/gen_ssl_error_assistant_proto.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2016 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/components/resources/ssl/ssl_error_assistant/push_proto.py b/src/components/resources/ssl/ssl_error_assistant/push_proto.py +index e313194671..17ee45ac5d 100755 +--- a/src/components/resources/ssl/ssl_error_assistant/push_proto.py ++++ b/src/components/resources/ssl/ssl_error_assistant/push_proto.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2018 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +@@ -46,10 +46,10 @@ def main(): + gn_command = ['ninja', + '-C', opts.dir, + RESOURCE_SUBDIR + ':make_ssl_error_assistant_protobuf'] +- print "Running the following" +- print " " + (' '.join(gn_command)) ++ print("Running the following") ++ print(" " + (' '.join(gn_command))) + if subprocess.call(gn_command): +- print "Ninja failed." ++ print("Ninja failed.") + return 1 + + # Use the versioned files under the copy directory to push to the GCS bucket. +@@ -68,19 +68,19 @@ def main(): + version_dir = dirs[0] + command = ['gsutil', 'cp', '-Rn', version_dir, DEST_BUCKET] + +- print '\nGoing to run the following command' +- print ' ', ' '.join(command) +- print '\nIn directory' +- print ' ', copy_dir +- print '\nWhich should push the following files' ++ print('\nGoing to run the following command') ++ print(' ', ' '.join(command)) ++ print('\nIn directory') ++ print(' ', copy_dir) ++ print('\nWhich should push the following files') + expected_files = [os.path.join(dp, f) for dp, _, fn in + os.walk(version_dir) for f in fn] + for f in expected_files: +- print ' ', f ++ print(' ', f) + + shall = raw_input('\nAre you sure (y/N) ').lower() == 'y' + if not shall: +- print 'aborting' ++ print('aborting') + return 1 + return subprocess.call(command) + diff --git a/meta-webos/recipes-webos/chromium/files/0031-Py2-Py3-for-third_party-dom_distiller_js.patch b/meta-webos/recipes-webos/chromium/files/0031-Py2-Py3-for-third_party-dom_distiller_js.patch new file mode 100644 index 000000000..7be948e78 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0031-Py2-Py3-for-third_party-dom_distiller_js.patch @@ -0,0 +1,566 @@ +From aac9678287f1a35e927667d4ada48ddb840c2945 Mon Sep 17 00:00:00 2001 +From: Andrew Grieve +Date: Tue, 11 May 2021 18:40:47 +0000 +Subject: [PATCH] Py2->Py3 for //third_party/dom_distiller_js + +Changes getting plugin_pb2.py from + //third_party/dom_distiller_js/dist +to + //third_party/protobuf/python/google + +The dist copy was not py3 compatible. + +Bug: 1205622 +Change-Id: I3844674e1e0af3cbeda774be3e2fa3acb2e2640c +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2874028 +Reviewed-by: Tommy Nyquist +Commit-Queue: Andrew Grieve +Cr-Commit-Position: refs/heads/master@{#881617} +--- + src/third_party/dom_distiller_js/BUILD.gn | 15 +- + .../protoc_plugins/json_values_converter.py | 3 +- + .../json_values_converter_tests.py | 4 +- + .../protoc_plugins/util/plugin_protos.py | 11 +- + .../update_domdistiller_js.sh | 4 - + src/third_party/protobuf/.gitignore | 1 + + src/third_party/protobuf/README.chromium | 4 +- + .../protobuf/gen_extra_chromium_files | 22 -- + .../protobuf/gen_extra_chromium_files.py | 44 +++ + .../google/protobuf/compiler/plugin_pb2.py | 301 ++++++++++++++++++ + 10 files changed, 365 insertions(+), 44 deletions(-) + delete mode 100755 src/third_party/protobuf/gen_extra_chromium_files + create mode 100755 src/third_party/protobuf/gen_extra_chromium_files.py + create mode 100644 src/third_party/protobuf/python/google/protobuf/compiler/plugin_pb2.py + +diff --git a/src/third_party/dom_distiller_js/BUILD.gn b/src/third_party/dom_distiller_js/BUILD.gn +index b8d1918342..7096af74b8 100644 +--- a/src/third_party/dom_distiller_js/BUILD.gn ++++ b/src/third_party/dom_distiller_js/BUILD.gn +@@ -2,7 +2,6 @@ + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. + +-import("//build/config/python.gni") + import("//third_party/protobuf/proto_library.gni") + + group("proto") { +@@ -51,18 +50,22 @@ proto_library("json_values_converter_test_proto") { + generator_plugin_options = "output_dir=:" + } + +-# TODO(crbug.com/1112471): Get this to run cleanly under Python 3. +-python2_action("json_values_converter_tests") { ++action("json_values_converter_tests") { + _stamp = "$target_gen_dir/json_values_converter_tests.stamp" ++ _actual_file = "$target_gen_dir/test_sample_json_converter.h" ++ _golden_file = "test_sample_json_converter.h.golden" + deps = [ ":json_values_converter_test_proto" ] +- inputs = [ "test_sample_json_converter.h.golden" ] ++ inputs = [ ++ _actual_file, ++ _golden_file, ++ ] + outputs = [ _stamp ] + + script = "protoc_plugins/json_values_converter_tests.py" + args = [ + "--stamp", + rebase_path(_stamp, root_build_dir), +- rebase_path("$target_gen_dir/test_sample_json_converter.h", root_build_dir), +- rebase_path("test_sample_json_converter.h.golden", root_build_dir), ++ rebase_path(_actual_file, root_build_dir), ++ rebase_path(_golden_file, root_build_dir), + ] + } +diff --git a/src/third_party/dom_distiller_js/protoc_plugins/json_values_converter.py b/src/third_party/dom_distiller_js/protoc_plugins/json_values_converter.py +index e86a88c759..954a410275 100755 +--- a/src/third_party/dom_distiller_js/protoc_plugins/json_values_converter.py ++++ b/src/third_party/dom_distiller_js/protoc_plugins/json_values_converter.py +@@ -235,7 +235,8 @@ def SetBinaryStdio(): + + + def ReadRequestFromStdin(): +- data = sys.stdin.read() ++ stream = sys.stdin if sys.version_info[0] < 3 else sys.stdin.buffer ++ data = stream.read() + return plugin_protos.PluginRequestFromString(data) + + +diff --git a/src/third_party/dom_distiller_js/protoc_plugins/json_values_converter_tests.py b/src/third_party/dom_distiller_js/protoc_plugins/json_values_converter_tests.py +index 53d428cc3d..031898388d 100755 +--- a/src/third_party/dom_distiller_js/protoc_plugins/json_values_converter_tests.py ++++ b/src/third_party/dom_distiller_js/protoc_plugins/json_values_converter_tests.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright (c) 2016 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +@@ -14,7 +14,7 @@ import sys + + + def CompareFiles(file1, file2): +- return file(file1, 'r').read() == file(file2, 'r').read() ++ return open(file1, 'r').read() == open(file2, 'r').read() + + + def TouchStamp(stamp_path): +diff --git a/src/third_party/dom_distiller_js/protoc_plugins/util/plugin_protos.py b/src/third_party/dom_distiller_js/protoc_plugins/util/plugin_protos.py +index 5bbfd83a91..d3cbaf1a87 100644 +--- a/src/third_party/dom_distiller_js/protoc_plugins/util/plugin_protos.py ++++ b/src/third_party/dom_distiller_js/protoc_plugins/util/plugin_protos.py +@@ -20,14 +20,10 @@ sys.path.insert( + sys.path.insert( + 1, os.path.join(SRC_DIR, 'third_party', 'protobuf', 'third_party', 'six')) + from google.protobuf.descriptor_pb2 import FieldDescriptorProto ++from google.protobuf.compiler import plugin_pb2 + + from . import types + +-sys.path.insert( +- 1, os.path.join(SRC_DIR, +- 'third_party', 'dom_distiller_js', 'dist', 'python')) +-import plugin_pb2 +- + + class PluginRequest(object): + def __init__(self, proto): +@@ -62,8 +58,9 @@ class PluginResponse(object): + self.proto.error += err + '\n' + + def WriteToStdout(self): +- sys.stdout.write(self.proto.SerializeToString()) +- sys.stdout.flush() ++ stream = sys.stdout if sys.version_info[0] < 3 else sys.stdout.buffer ++ stream.write(self.proto.SerializeToString()) ++ stream.flush() + + + class ProtoFile(object): +diff --git a/src/third_party/dom_distiller_js/update_domdistiller_js.sh b/src/third_party/dom_distiller_js/update_domdistiller_js.sh +index e3f7d707db..4fcf3adae4 100755 +--- a/src/third_party/dom_distiller_js/update_domdistiller_js.sh ++++ b/src/third_party/dom_distiller_js/update_domdistiller_js.sh +@@ -76,10 +76,6 @@ + + cp -r $tmpdir/dom-distiller/out/package/* . + +- # Stop rolling python/plugin_pb2.py for protobuf backward compatibility. +- # See https://crbug.com/874509 +- git checkout -- python/plugin_pb2.py +- + git add . + if [[ $(git status --short | wc -l) -ne 0 ]]; then + if [[ -n "$gerrit_url" ]]; then +diff --git a/src/third_party/protobuf/.gitignore b/src/third_party/protobuf/.gitignore +index 291fa8f781..9a935e339f 100644 +--- a/src/third_party/protobuf/.gitignore ++++ b/src/third_party/protobuf/.gitignore +@@ -54,6 +54,7 @@ src/google/protobuf/util/**/*.pb.h + *.egg-info + *_pb2.py + !python/google/protobuf/descriptor_pb2.py ++!python/google/protobuf/compiler/plugin_pb2.py + python/**/*.egg + python/.eggs/ + python/.tox +diff --git a/src/third_party/protobuf/README.chromium b/src/third_party/protobuf/README.chromium +index ec90f30eeb..f27b0848d7 100644 +--- a/src/third_party/protobuf/README.chromium ++++ b/src/third_party/protobuf/README.chromium +@@ -31,8 +31,8 @@ Steps used to create the current version: + For future releases, it will be worth looking into which patches still need + to be applied. In case of conflict, update those patches accordingly and save + them back in place (i.e. in patches directory). +-8. Generate descriptor_pb2.py using the script "gen_extra_chromium_files" in +-the same directory as this file. ++8. Generate descriptor_pb2.py using the script "gen_extra_chromium_files.py" in ++ the same directory as this file. + + 9. Add an __init__.py to protobuf/ that adds third_party/six/ to Python path. + 10. Update this file (README.chromium). +diff --git a/src/third_party/protobuf/gen_extra_chromium_files b/src/third_party/protobuf/gen_extra_chromium_files +deleted file mode 100755 +index a32f2b942e..0000000000 +--- a/src/third_party/protobuf/gen_extra_chromium_files ++++ /dev/null +@@ -1,22 +0,0 @@ +-#!/usr/bin/env python +- +-# This script expects your out/Debug directory to be compiling for linux on +-# a linux machine. If this is not your case just compile protoc and run the +-# command on the last line of the script (from within +-# //third_party/protobuf/src). +- +-import os +-src_dir = os.path.abspath(os.path.join(os.path.dirname(__file__),'..','..')) +-out_build_dir = 'out/Debug' +- +-def r(c): +- print c +- os.system(c) +- +-os.chdir(src_dir) +-r('gn gen {}'.format(out_build_dir)) +-r('ninja -C {} protoc'.format(out_build_dir)) +-os.chdir('third_party/protobuf/src') +-protoc = os.path.join(src_dir,'{}/protoc'.format(out_build_dir)) +-r('{} --python_out=../python google/protobuf/descriptor.proto'.format(protoc)) +- +diff --git a/src/third_party/protobuf/gen_extra_chromium_files.py b/src/third_party/protobuf/gen_extra_chromium_files.py +new file mode 100755 +index 0000000000..a109e86090 +--- /dev/null ++++ b/src/third_party/protobuf/gen_extra_chromium_files.py +@@ -0,0 +1,44 @@ ++#!/usr/bin/env python3 ++ ++# This script expects your out/Debug directory to be compiling for linux on ++# a linux machine. If this is not your case just compile protoc and run the ++# command on the last line of the script (from within ++# //third_party/protobuf/src). ++ ++import argparse ++import os ++ ++PROTO_DIR = os.path.dirname(__file__) ++DIR_SOURCE_ROOT = os.path.join(PROTO_DIR, '..','..') ++ ++ ++def main(): ++ parser = argparse.ArgumentParser() ++ parser.add_argument('--output-directory', ++ '-C', ++ help='Path to build directory', ++ required=True) ++ ++ args = parser.parse_args() ++ ++ out_build_dir = args.output_directory ++ ++ def r(c): ++ print('Running:', c) ++ os.system(c) ++ ++ r('ninja -C {} protoc'.format(out_build_dir)) ++ ++ protoc = os.path.join(out_build_dir, 'protoc') ++ print('Creating //third_party/protobuf/python/google/protobuf/' ++ 'descriptor_pb2.py') ++ r('{0} --proto_path={1}/src --python_out={1}/python ' ++ '{1}/src/google/protobuf/descriptor.proto'.format(protoc, PROTO_DIR)) ++ ++ print('Creating //third_party/protobuf/python/google/protobuf/compiler/' ++ 'plugin_pb2.py') ++ r('{0} --proto_path={1}/src --python_out={1}/python ' ++ '{1}/src/google/protobuf/compiler/plugin.proto'.format(protoc, PROTO_DIR)) ++ ++if __name__ == '__main__': ++ main() +diff --git a/src/third_party/protobuf/python/google/protobuf/compiler/plugin_pb2.py b/src/third_party/protobuf/python/google/protobuf/compiler/plugin_pb2.py +new file mode 100644 +index 0000000000..ff90d18f1b +--- /dev/null ++++ b/src/third_party/protobuf/python/google/protobuf/compiler/plugin_pb2.py +@@ -0,0 +1,301 @@ ++# -*- coding: utf-8 -*- ++# Generated by the protocol buffer compiler. DO NOT EDIT! ++# source: google/protobuf/compiler/plugin.proto ++"""Generated protocol buffer code.""" ++from google.protobuf import descriptor as _descriptor ++from google.protobuf import message as _message ++from google.protobuf import reflection as _reflection ++from google.protobuf import symbol_database as _symbol_database ++# @@protoc_insertion_point(imports) ++ ++_sym_db = _symbol_database.Default() ++ ++ ++from google.protobuf import descriptor_pb2 as google_dot_protobuf_dot_descriptor__pb2 ++ ++ ++DESCRIPTOR = _descriptor.FileDescriptor( ++ name='google/protobuf/compiler/plugin.proto', ++ package='google.protobuf.compiler', ++ syntax='proto2', ++ serialized_options=b'\n\034com.google.protobuf.compilerB\014PluginProtosZ)google.golang.org/protobuf/types/pluginpb', ++ create_key=_descriptor._internal_create_key, ++ serialized_pb=b'\n%google/protobuf/compiler/plugin.proto\x12\x18google.protobuf.compiler\x1a google/protobuf/descriptor.proto\"F\n\x07Version\x12\r\n\x05major\x18\x01 \x01(\x05\x12\r\n\x05minor\x18\x02 \x01(\x05\x12\r\n\x05patch\x18\x03 \x01(\x05\x12\x0e\n\x06suffix\x18\x04 \x01(\t\"\xba\x01\n\x14\x43odeGeneratorRequest\x12\x18\n\x10\x66ile_to_generate\x18\x01 \x03(\t\x12\x11\n\tparameter\x18\x02 \x01(\t\x12\x38\n\nproto_file\x18\x0f \x03(\x0b\x32$.google.protobuf.FileDescriptorProto\x12;\n\x10\x63ompiler_version\x18\x03 \x01(\x0b\x32!.google.protobuf.compiler.Version\"\xc1\x02\n\x15\x43odeGeneratorResponse\x12\r\n\x05\x65rror\x18\x01 \x01(\t\x12\x1a\n\x12supported_features\x18\x02 \x01(\x04\x12\x42\n\x04\x66ile\x18\x0f \x03(\x0b\x32\x34.google.protobuf.compiler.CodeGeneratorResponse.File\x1a\x7f\n\x04\x46ile\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x17\n\x0finsertion_point\x18\x02 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x0f \x01(\t\x12?\n\x13generated_code_info\x18\x10 \x01(\x0b\x32\".google.protobuf.GeneratedCodeInfo\"8\n\x07\x46\x65\x61ture\x12\x10\n\x0c\x46\x45\x41TURE_NONE\x10\x00\x12\x1b\n\x17\x46\x45\x41TURE_PROTO3_OPTIONAL\x10\x01\x42W\n\x1c\x63om.google.protobuf.compilerB\x0cPluginProtosZ)google.golang.org/protobuf/types/pluginpb' ++ , ++ dependencies=[google_dot_protobuf_dot_descriptor__pb2.DESCRIPTOR,]) ++ ++ ++ ++_CODEGENERATORRESPONSE_FEATURE = _descriptor.EnumDescriptor( ++ name='Feature', ++ full_name='google.protobuf.compiler.CodeGeneratorResponse.Feature', ++ filename=None, ++ file=DESCRIPTOR, ++ create_key=_descriptor._internal_create_key, ++ values=[ ++ _descriptor.EnumValueDescriptor( ++ name='FEATURE_NONE', index=0, number=0, ++ serialized_options=None, ++ type=None, ++ create_key=_descriptor._internal_create_key), ++ _descriptor.EnumValueDescriptor( ++ name='FEATURE_PROTO3_OPTIONAL', index=1, number=1, ++ serialized_options=None, ++ type=None, ++ create_key=_descriptor._internal_create_key), ++ ], ++ containing_type=None, ++ serialized_options=None, ++ serialized_start=628, ++ serialized_end=684, ++) ++_sym_db.RegisterEnumDescriptor(_CODEGENERATORRESPONSE_FEATURE) ++ ++ ++_VERSION = _descriptor.Descriptor( ++ name='Version', ++ full_name='google.protobuf.compiler.Version', ++ filename=None, ++ file=DESCRIPTOR, ++ containing_type=None, ++ create_key=_descriptor._internal_create_key, ++ fields=[ ++ _descriptor.FieldDescriptor( ++ name='major', full_name='google.protobuf.compiler.Version.major', index=0, ++ number=1, type=5, cpp_type=1, label=1, ++ has_default_value=False, default_value=0, ++ message_type=None, enum_type=None, containing_type=None, ++ is_extension=False, extension_scope=None, ++ serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ++ _descriptor.FieldDescriptor( ++ name='minor', full_name='google.protobuf.compiler.Version.minor', index=1, ++ number=2, type=5, cpp_type=1, label=1, ++ has_default_value=False, default_value=0, ++ message_type=None, enum_type=None, containing_type=None, ++ is_extension=False, extension_scope=None, ++ serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ++ _descriptor.FieldDescriptor( ++ name='patch', full_name='google.protobuf.compiler.Version.patch', index=2, ++ number=3, type=5, cpp_type=1, label=1, ++ has_default_value=False, default_value=0, ++ message_type=None, enum_type=None, containing_type=None, ++ is_extension=False, extension_scope=None, ++ serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ++ _descriptor.FieldDescriptor( ++ name='suffix', full_name='google.protobuf.compiler.Version.suffix', index=3, ++ number=4, type=9, cpp_type=9, label=1, ++ has_default_value=False, default_value=b"".decode('utf-8'), ++ message_type=None, enum_type=None, containing_type=None, ++ is_extension=False, extension_scope=None, ++ serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ++ ], ++ extensions=[ ++ ], ++ nested_types=[], ++ enum_types=[ ++ ], ++ serialized_options=None, ++ is_extendable=False, ++ syntax='proto2', ++ extension_ranges=[], ++ oneofs=[ ++ ], ++ serialized_start=101, ++ serialized_end=171, ++) ++ ++ ++_CODEGENERATORREQUEST = _descriptor.Descriptor( ++ name='CodeGeneratorRequest', ++ full_name='google.protobuf.compiler.CodeGeneratorRequest', ++ filename=None, ++ file=DESCRIPTOR, ++ containing_type=None, ++ create_key=_descriptor._internal_create_key, ++ fields=[ ++ _descriptor.FieldDescriptor( ++ name='file_to_generate', full_name='google.protobuf.compiler.CodeGeneratorRequest.file_to_generate', index=0, ++ number=1, type=9, cpp_type=9, label=3, ++ has_default_value=False, default_value=[], ++ message_type=None, enum_type=None, containing_type=None, ++ is_extension=False, extension_scope=None, ++ serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ++ _descriptor.FieldDescriptor( ++ name='parameter', full_name='google.protobuf.compiler.CodeGeneratorRequest.parameter', index=1, ++ number=2, type=9, cpp_type=9, label=1, ++ has_default_value=False, default_value=b"".decode('utf-8'), ++ message_type=None, enum_type=None, containing_type=None, ++ is_extension=False, extension_scope=None, ++ serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ++ _descriptor.FieldDescriptor( ++ name='proto_file', full_name='google.protobuf.compiler.CodeGeneratorRequest.proto_file', index=2, ++ number=15, type=11, cpp_type=10, label=3, ++ has_default_value=False, default_value=[], ++ message_type=None, enum_type=None, containing_type=None, ++ is_extension=False, extension_scope=None, ++ serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ++ _descriptor.FieldDescriptor( ++ name='compiler_version', full_name='google.protobuf.compiler.CodeGeneratorRequest.compiler_version', index=3, ++ number=3, type=11, cpp_type=10, label=1, ++ has_default_value=False, default_value=None, ++ message_type=None, enum_type=None, containing_type=None, ++ is_extension=False, extension_scope=None, ++ serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ++ ], ++ extensions=[ ++ ], ++ nested_types=[], ++ enum_types=[ ++ ], ++ serialized_options=None, ++ is_extendable=False, ++ syntax='proto2', ++ extension_ranges=[], ++ oneofs=[ ++ ], ++ serialized_start=174, ++ serialized_end=360, ++) ++ ++ ++_CODEGENERATORRESPONSE_FILE = _descriptor.Descriptor( ++ name='File', ++ full_name='google.protobuf.compiler.CodeGeneratorResponse.File', ++ filename=None, ++ file=DESCRIPTOR, ++ containing_type=None, ++ create_key=_descriptor._internal_create_key, ++ fields=[ ++ _descriptor.FieldDescriptor( ++ name='name', full_name='google.protobuf.compiler.CodeGeneratorResponse.File.name', index=0, ++ number=1, type=9, cpp_type=9, label=1, ++ has_default_value=False, default_value=b"".decode('utf-8'), ++ message_type=None, enum_type=None, containing_type=None, ++ is_extension=False, extension_scope=None, ++ serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ++ _descriptor.FieldDescriptor( ++ name='insertion_point', full_name='google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point', index=1, ++ number=2, type=9, cpp_type=9, label=1, ++ has_default_value=False, default_value=b"".decode('utf-8'), ++ message_type=None, enum_type=None, containing_type=None, ++ is_extension=False, extension_scope=None, ++ serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ++ _descriptor.FieldDescriptor( ++ name='content', full_name='google.protobuf.compiler.CodeGeneratorResponse.File.content', index=2, ++ number=15, type=9, cpp_type=9, label=1, ++ has_default_value=False, default_value=b"".decode('utf-8'), ++ message_type=None, enum_type=None, containing_type=None, ++ is_extension=False, extension_scope=None, ++ serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ++ _descriptor.FieldDescriptor( ++ name='generated_code_info', full_name='google.protobuf.compiler.CodeGeneratorResponse.File.generated_code_info', index=3, ++ number=16, type=11, cpp_type=10, label=1, ++ has_default_value=False, default_value=None, ++ message_type=None, enum_type=None, containing_type=None, ++ is_extension=False, extension_scope=None, ++ serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ++ ], ++ extensions=[ ++ ], ++ nested_types=[], ++ enum_types=[ ++ ], ++ serialized_options=None, ++ is_extendable=False, ++ syntax='proto2', ++ extension_ranges=[], ++ oneofs=[ ++ ], ++ serialized_start=499, ++ serialized_end=626, ++) ++ ++_CODEGENERATORRESPONSE = _descriptor.Descriptor( ++ name='CodeGeneratorResponse', ++ full_name='google.protobuf.compiler.CodeGeneratorResponse', ++ filename=None, ++ file=DESCRIPTOR, ++ containing_type=None, ++ create_key=_descriptor._internal_create_key, ++ fields=[ ++ _descriptor.FieldDescriptor( ++ name='error', full_name='google.protobuf.compiler.CodeGeneratorResponse.error', index=0, ++ number=1, type=9, cpp_type=9, label=1, ++ has_default_value=False, default_value=b"".decode('utf-8'), ++ message_type=None, enum_type=None, containing_type=None, ++ is_extension=False, extension_scope=None, ++ serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ++ _descriptor.FieldDescriptor( ++ name='supported_features', full_name='google.protobuf.compiler.CodeGeneratorResponse.supported_features', index=1, ++ number=2, type=4, cpp_type=4, label=1, ++ has_default_value=False, default_value=0, ++ message_type=None, enum_type=None, containing_type=None, ++ is_extension=False, extension_scope=None, ++ serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ++ _descriptor.FieldDescriptor( ++ name='file', full_name='google.protobuf.compiler.CodeGeneratorResponse.file', index=2, ++ number=15, type=11, cpp_type=10, label=3, ++ has_default_value=False, default_value=[], ++ message_type=None, enum_type=None, containing_type=None, ++ is_extension=False, extension_scope=None, ++ serialized_options=None, file=DESCRIPTOR, create_key=_descriptor._internal_create_key), ++ ], ++ extensions=[ ++ ], ++ nested_types=[_CODEGENERATORRESPONSE_FILE, ], ++ enum_types=[ ++ _CODEGENERATORRESPONSE_FEATURE, ++ ], ++ serialized_options=None, ++ is_extendable=False, ++ syntax='proto2', ++ extension_ranges=[], ++ oneofs=[ ++ ], ++ serialized_start=363, ++ serialized_end=684, ++) ++ ++_CODEGENERATORREQUEST.fields_by_name['proto_file'].message_type = google_dot_protobuf_dot_descriptor__pb2._FILEDESCRIPTORPROTO ++_CODEGENERATORREQUEST.fields_by_name['compiler_version'].message_type = _VERSION ++_CODEGENERATORRESPONSE_FILE.fields_by_name['generated_code_info'].message_type = google_dot_protobuf_dot_descriptor__pb2._GENERATEDCODEINFO ++_CODEGENERATORRESPONSE_FILE.containing_type = _CODEGENERATORRESPONSE ++_CODEGENERATORRESPONSE.fields_by_name['file'].message_type = _CODEGENERATORRESPONSE_FILE ++_CODEGENERATORRESPONSE_FEATURE.containing_type = _CODEGENERATORRESPONSE ++DESCRIPTOR.message_types_by_name['Version'] = _VERSION ++DESCRIPTOR.message_types_by_name['CodeGeneratorRequest'] = _CODEGENERATORREQUEST ++DESCRIPTOR.message_types_by_name['CodeGeneratorResponse'] = _CODEGENERATORRESPONSE ++_sym_db.RegisterFileDescriptor(DESCRIPTOR) ++ ++Version = _reflection.GeneratedProtocolMessageType('Version', (_message.Message,), { ++ 'DESCRIPTOR' : _VERSION, ++ '__module__' : 'google.protobuf.compiler.plugin_pb2' ++ # @@protoc_insertion_point(class_scope:google.protobuf.compiler.Version) ++ }) ++_sym_db.RegisterMessage(Version) ++ ++CodeGeneratorRequest = _reflection.GeneratedProtocolMessageType('CodeGeneratorRequest', (_message.Message,), { ++ 'DESCRIPTOR' : _CODEGENERATORREQUEST, ++ '__module__' : 'google.protobuf.compiler.plugin_pb2' ++ # @@protoc_insertion_point(class_scope:google.protobuf.compiler.CodeGeneratorRequest) ++ }) ++_sym_db.RegisterMessage(CodeGeneratorRequest) ++ ++CodeGeneratorResponse = _reflection.GeneratedProtocolMessageType('CodeGeneratorResponse', (_message.Message,), { ++ ++ 'File' : _reflection.GeneratedProtocolMessageType('File', (_message.Message,), { ++ 'DESCRIPTOR' : _CODEGENERATORRESPONSE_FILE, ++ '__module__' : 'google.protobuf.compiler.plugin_pb2' ++ # @@protoc_insertion_point(class_scope:google.protobuf.compiler.CodeGeneratorResponse.File) ++ }) ++ , ++ 'DESCRIPTOR' : _CODEGENERATORRESPONSE, ++ '__module__' : 'google.protobuf.compiler.plugin_pb2' ++ # @@protoc_insertion_point(class_scope:google.protobuf.compiler.CodeGeneratorResponse) ++ }) ++_sym_db.RegisterMessage(CodeGeneratorResponse) ++_sym_db.RegisterMessage(CodeGeneratorResponse.File) ++ ++ ++DESCRIPTOR._options = None ++# @@protoc_insertion_point(module_scope) diff --git a/meta-webos/recipes-webos/chromium/files/0032-Py2-Py3-fixup-for-dom_distiller_js.patch b/meta-webos/recipes-webos/chromium/files/0032-Py2-Py3-fixup-for-dom_distiller_js.patch new file mode 100644 index 000000000..0b316630e --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0032-Py2-Py3-fixup-for-dom_distiller_js.patch @@ -0,0 +1,70 @@ +From 04b649f5c7a37a89b95d5ceef24fdbc0ed8c5587 Mon Sep 17 00:00:00 2001 +From: Andrew Grieve +Date: Mon, 17 May 2021 19:56:06 +0000 +Subject: [PATCH] Py2-Py3 fixup for dom_distiller_js + +Previous attempt to make it python3-compatible had it actually still +using python2. + +Bug: 1205622, 1209002 +Change-Id: Ia756c178bd1ef3839496eb0d159729da7c3162ec +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2897343 +Auto-Submit: Andrew Grieve +Reviewed-by: Tommy Nyquist +Commit-Queue: Andrew Grieve +Cr-Commit-Position: refs/heads/master@{#883578} +--- + .../protoc_plugins/json_values_converter.py | 2 +- + .../dom_distiller_js/protoc_plugins/util/plugin_protos.py | 8 ++++---- + 2 files changed, 5 insertions(+), 5 deletions(-) + +diff --git a/src/third_party/dom_distiller_js/protoc_plugins/json_values_converter.py b/src/third_party/dom_distiller_js/protoc_plugins/json_values_converter.py +index 954a410275..3921a467b1 100755 +--- a/src/third_party/dom_distiller_js/protoc_plugins/json_values_converter.py ++++ b/src/third_party/dom_distiller_js/protoc_plugins/json_values_converter.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # Copyright 2016 The Chromium Authors. All rights reserved. + # Use of this source code is governed by a BSD-style license that can be + # found in the LICENSE file. +diff --git a/src/third_party/dom_distiller_js/protoc_plugins/util/plugin_protos.py b/src/third_party/dom_distiller_js/protoc_plugins/util/plugin_protos.py +index d3cbaf1a87..352591ce06 100644 +--- a/src/third_party/dom_distiller_js/protoc_plugins/util/plugin_protos.py ++++ b/src/third_party/dom_distiller_js/protoc_plugins/util/plugin_protos.py +@@ -33,7 +33,7 @@ class PluginRequest(object): + return dict((v.split('=') for v in self.proto.parameter.split(','))) + + def GetAllFiles(self): +- files = map(ProtoFile, self.proto.proto_file) ++ files = [ProtoFile(x) for x in self.proto.proto_file] + for f in files: + assert f.Filename() in self.proto.file_to_generate + return files +@@ -120,7 +120,7 @@ class ProtoFile(object): + def GetDependencies(self): + # import is not supported + assert [] == self.proto.dependency +- return map(types.GetProtoFileForFilename, self.proto.dependency) ++ return [types.GetProtoFileForFilename(x) for x in self.proto.dependency] + + def JavaFilename(self): + return '/'.join(self.JavaQualifiedOuterClass().split('.')) + '.java' +@@ -164,7 +164,7 @@ class ProtoMessage(object): + return types.TitleCase(self.proto.name) + + def GetFields(self): +- return map(ProtoField, self.proto.field) ++ return [ProtoField(x) for x in self.proto.field] + + def GetMessages(self): + return [ProtoMessage(n, self.qualified_types) +@@ -273,7 +273,7 @@ class ProtoEnum(object): + return types.TitleCase(self.proto.name) + + def Values(self): +- return map(ProtoEnumValue, self.proto.value) ++ return [ProtoEnumValue(x) for x in self.proto.value] + + + class ProtoEnumValue(object): diff --git a/meta-webos/recipes-webos/chromium/files/0033-catapult-use-python3-for-rcssmin.patch b/meta-webos/recipes-webos/chromium/files/0033-catapult-use-python3-for-rcssmin.patch new file mode 100644 index 000000000..8fbc55d78 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0033-catapult-use-python3-for-rcssmin.patch @@ -0,0 +1,43 @@ +From e51a1490849452fdae61fcf32d204a7cafadd335 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Sun, 20 Feb 2022 20:53:57 +0000 +Subject: [PATCH] catapult: use python3 for rcssmin + +Signed-off-by: Martin Jansa +--- + .../catapult/common/py_vulcanize/py_vulcanize/generate.py | 4 ++-- + .../common/py_vulcanize/third_party/rcssmin/rcssmin.py | 2 +- + 2 files changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/third_party/catapult/common/py_vulcanize/py_vulcanize/generate.py b/src/third_party/catapult/common/py_vulcanize/py_vulcanize/generate.py +index c5c1ef7709..756c2db615 100644 +--- a/src/third_party/catapult/common/py_vulcanize/py_vulcanize/generate.py ++++ b/src/third_party/catapult/common/py_vulcanize/py_vulcanize/generate.py +@@ -83,7 +83,7 @@ def _MinifyJS(input_js): + + with tempfile.NamedTemporaryFile() as _: + args = [ +- 'python', ++ 'python3', + rjsmin_path + ] + p = subprocess.Popen(args, +@@ -203,7 +203,7 @@ def _MinifyCSS(css_text): + os.path.join(py_vulcanize_path, 'third_party', 'rcssmin', 'rcssmin.py')) + + with tempfile.NamedTemporaryFile() as _: +- rcssmin_args = ['python', rcssmin_path] ++ rcssmin_args = ['python3', rcssmin_path] + p = subprocess.Popen(rcssmin_args, + stdin=subprocess.PIPE, + stdout=subprocess.PIPE, +diff --git a/src/third_party/catapult/common/py_vulcanize/third_party/rcssmin/rcssmin.py b/src/third_party/catapult/common/py_vulcanize/third_party/rcssmin/rcssmin.py +index ae1cefc339..4aac6acc21 100644 +--- a/src/third_party/catapult/common/py_vulcanize/third_party/rcssmin/rcssmin.py ++++ b/src/third_party/catapult/common/py_vulcanize/third_party/rcssmin/rcssmin.py +@@ -1,4 +1,4 @@ +-#!/usr/bin/env python ++#!/usr/bin/env python3 + # -*- coding: ascii -*- + r""" + ============== diff --git a/meta-webos/recipes-webos/chromium/files/0034-build-Convert-third_party-opus-BUILD.gn-to-py3.patch b/meta-webos/recipes-webos/chromium/files/0034-build-Convert-third_party-opus-BUILD.gn-to-py3.patch new file mode 100644 index 000000000..8735a35b9 --- /dev/null +++ b/meta-webos/recipes-webos/chromium/files/0034-build-Convert-third_party-opus-BUILD.gn-to-py3.patch @@ -0,0 +1,84 @@ +From 25e5f5d75cc9c68d026ca4ac6867a8acf5d1dad4 Mon Sep 17 00:00:00 2001 +From: Nico Weber +Date: Wed, 12 May 2021 21:58:20 +0000 +Subject: [PATCH] build: Convert third_party/opus/BUILD.gn to py3 + +Bug: 1205620 +Change-Id: I35aaf8490efc00a36ad93ea6612009f859028120 +Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2892215 +Commit-Queue: Nico Weber +Commit-Queue: Dirk Pranke +Auto-Submit: Nico Weber +Reviewed-by: Dirk Pranke +Cr-Commit-Position: refs/heads/master@{#882313} +--- + src/third_party/opus/BUILD.gn | 4 +--- + src/third_party/opus/convert_rtcd_assembler.py | 18 ++++++++++-------- + 2 files changed, 11 insertions(+), 11 deletions(-) + +diff --git a/src/third_party/opus/BUILD.gn b/src/third_party/opus/BUILD.gn +index 075bccec3f..2394f5cd46 100644 +--- a/src/third_party/opus/BUILD.gn ++++ b/src/third_party/opus/BUILD.gn +@@ -3,7 +3,6 @@ + # found in the LICENSE file. + + import("//build/config/arm.gni") +-import("//build/config/python.gni") + import("//testing/test.gni") + + # If fixed point implementation shall be used (otherwise float). +@@ -170,8 +169,7 @@ config("opus_test_no_nonnull_config") { + } + + if (use_opus_arm_rtcd) { +- # TODO(crbug.com/1112471): Get this to run cleanly under Python 3. +- python2_action("convert_rtcd_assembler") { ++ action("convert_rtcd_assembler") { + script = "convert_rtcd_assembler.py" + outputs = [ "$target_gen_dir/celt_pitch_xcorr_arm_gnu.S" ] + args = [ +diff --git a/src/third_party/opus/convert_rtcd_assembler.py b/src/third_party/opus/convert_rtcd_assembler.py +index 2f6071f412..ad7e36d3ac 100755 +--- a/src/third_party/opus/convert_rtcd_assembler.py ++++ b/src/third_party/opus/convert_rtcd_assembler.py +@@ -6,6 +6,8 @@ + # Script for converting celt_pitch_xcorr_arm.s -> celt_pitch_xcorr_arm.S + # using the arm2gnu.pl script. + ++from __future__ import print_function ++ + import os + import sys + +@@ -16,22 +18,22 @@ USAGE = ('Usage:\n' + + def main(argv): + if len(argv) != 3: +- print >> sys.stderr, ('Error: You must pass the following arguments:\n' +- ' * arm2gnu_script_path\n' +- ' * input_file\n' +- ' * output_file') +- print USAGE ++ print('Error: You must pass the following arguments:\n' ++ ' * arm2gnu_script_path\n' ++ ' * input_file\n' ++ ' * output_file', file=sys.stderr) ++ print(USAGE) + return 1 + + arm2gnu_script = os.path.abspath(argv[0]) + if not os.path.exists(arm2gnu_script): +- print >> sys.stderr, ('Error: Cannot find arm2gnu.pl script at: %s.' % +- arm2gnu_script) ++ print('Error: Cannot find arm2gnu.pl script at: %s.' % ++ arm2gnu_script, file=sys.stderr) + return 2 + + input_file = os.path.abspath(argv[1]) + if not os.path.exists(input_file): +- print >> sys.stderr, 'Error: Cannot find input file at: %s.' % input_file ++ print('Error: Cannot find input file at: %s.' % input_file, file=sys.stderr) + return 3 + + output_file = argv[2] diff --git a/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb b/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb index 8d8457dcc..99c2bd223 100644 --- a/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb +++ b/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. inherit cross inherit pkgconfig @@ -14,11 +14,11 @@ UNINATIVE_LOADER = "" PROVIDES = "mksnapshot-cross-${TARGET_ARCH}" PN = "mksnapshot-cross-${TARGET_ARCH}" BPN = "mksnapshot" -PR = "r1" +PR = "r2" TARGET = "v8_snapshot_clang_${TARGET_CPU}/mksnapshot" -DEPENDS = "glib-2.0-native python-native gcc-runtime" +DEPENDS = "glib-2.0-native gcc-runtime" GN_ARGS_append = "\ use_pmlog=false \ @@ -32,7 +32,7 @@ do_configure() { echo GN_ARGS is ${GN_ARGS} echo BUILD_TARGETS are ${TARGET} cd ${S}/src - gn --root=${S}/src --dotfile=mksnapshot.gn gen ${OUT_DIR} --args="${GN_ARGS}" + gn --script-executable=${PYTHON} --root=${S}/src --dotfile=mksnapshot.gn gen ${OUT_DIR} --args="${GN_ARGS}" } do_install() { diff --git a/meta-webos/recipes-webos/chromium/mksnapshot-cross_94.bb b/meta-webos/recipes-webos/chromium/mksnapshot-cross_94.bb index 58a988fb7..05962d621 100644 --- a/meta-webos/recipes-webos/chromium/mksnapshot-cross_94.bb +++ b/meta-webos/recipes-webos/chromium/mksnapshot-cross_94.bb @@ -14,11 +14,11 @@ UNINATIVE_LOADER = "" PROVIDES = "mksnapshot-cross-${TARGET_ARCH}" PN = "mksnapshot-cross-${TARGET_ARCH}" BPN = "mksnapshot" -PR = "r1" +PR = "r2" TARGET = "v8_snapshot_clang_${TARGET_CPU}/mksnapshot" -DEPENDS = "glib-2.0-native python-native gcc-runtime" +DEPENDS = "glib-2.0-native gcc-runtime" GN_ARGS_append = "\ use_pmlog=false \ @@ -32,7 +32,7 @@ do_configure() { echo GN_ARGS is ${GN_ARGS} echo BUILD_TARGETS are ${TARGET} cd ${S}/src - gn --root=${S}/src --dotfile=mksnapshot.gn gen ${OUT_DIR} --args="${GN_ARGS}" + gn --script-executable=${PYTHON} --root=${S}/src --dotfile=mksnapshot.gn gen ${OUT_DIR} --args="${GN_ARGS}" } do_install() { diff --git a/meta-webos/recipes-webos/chromium/webruntime-common.inc b/meta-webos/recipes-webos/chromium/webruntime-common.inc index 01a915346..3a859a2c1 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-common.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-common.inc @@ -15,24 +15,6 @@ inherit webos_enhanced_submissions inherit webos_public_repo inherit webos_prerelease_dep -# make sure that python(2) is available, otherwise gn fails to execute python after it was removed from HOSTTOOLS in: -# http://git.openembedded.org/openembedded-core/commit/?id=5f8f16b17f66966ae91aeabc23e97de5ecd17447 -# -# /jenkins/mjansa/build-ros-v3/artifacts/BUILD-webos-melodic-master.mcf/work/qemux86-webos-linux/webruntime/68.0.3440.106-75-r24.1/git/depot_tools/gn: line 8: exec: python: not found -# using python3 isn't supported in this old gn, it fails e.g. in gclient_utils.py because of invalid syntax for python3: -# Traceback (most recent call last): -# File "/jenkins/mjansa/build-ros-v3/artifacts/BUILD-webos-melodic-master.mcf/work/qemux86-webos-linux/webruntime/68.0.3440.106-75-r24.1/git/depot_tools/gn.py", line 15, in -# import gclient_utils -# File "/jenkins/mjansa/build-ros-v3/artifacts/BUILD-webos-melodic-master.mcf/work/qemux86-webos-linux/webruntime/68.0.3440.106-75-r24.1/git/depot_tools/gclient_utils.py", line 271 -# except OSError, e: -# ^ -# SyntaxError: invalid syntax -# most (maybe all) of these issues were already fixed upstream in: -# https://chromium-review.googlesource.com/c/chromium/tools/depot_tools/+/1854900 -# but there is a lot of conflicts in old gn used by this webruntime and there are many other places also still using python(2) here -# so lets use native python2 for now -inherit pythonnative - REPO_VERSION := "${@['','_${WEBRUNTIME_REPO_VERSION}'][d.getVar('WEBRUNTIME_REPO_VERSION').strip() != '']}" WEBOS_REPO_NAME ?= "chromium84" @@ -132,7 +114,7 @@ do_configure() { echo GN_ARGS is "${GN_ARGS}" echo BUILD_TARGETS are ${TARGET} cd ${S}/src - gn gen ${OUT_DIR} --args="${GN_ARGS}" + gn --script-executable=${PYTHON} gen ${OUT_DIR} --args="${GN_ARGS}" } do_compile[progress] = "outof:^\[(\d+)/(\d+)\]\s+" diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc index d049b6d23..cdba5c4e6 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -10,3 +10,37 @@ WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" WEBOS_VERSION_V8 = "8.7.220.29-chromium91.3_7e5684397e1522f3b5b7ea8155c2f1e22fa1cdd2" SRCREV_v8 = "b958ec542dcb086f422a1216a959be38a4cc0339" +SRC_URI += " \ + file://0003-jinja2-fix-compatibility-with-python3-3.10.patch \ + file://0004-mojo-use-python3-to-generate-src-files.patch \ + file://0005-mojom_parser.py-Handle-exceptions-when-sharding.patch \ + file://0006-Migrate-policy-tools-to-python3.patch \ + file://0007-components-policy-use-python3-for-some-actions.patch \ + file://0008-components-policy-use-python3.patch \ + file://0009-json_schema_compiler-use-python3-for-feature_compile.patch \ + file://0010-json_schema_compiler-use-python3-in-json_schema_api..patch \ + file://0011-build-Convert-third_party-closure_compiler-compile_j.patch \ + file://0012-Reland-components-resources-use-python3-for-tools-li.patch \ + file://0013-build-Convert-third_party-node-node.gni-to-py3.patch \ + file://0014-components-policy-fix-some-places-for-python3.patch \ + file://0015-build-Convert-tools-json_to_struct-to-py3.patch \ + file://0016-build-Convert-tools-grit-preprocess_if_expr.gni-to-p.patch \ + file://0017-Sort-the-feature_set-to-avoid-non-determistic-build-.patch \ + file://0018-webos-fix-python-syntax.patch \ + file://0019-build-Convert-tools-metrics-BUILD.gn-to-py3.patch \ + file://0020-build-Convert-services-metrics-public-cpp-to-py3.patch \ + file://0021-Reland-Convert-generate_about_tracing-target-to-py3.patch \ + file://0022-Run-generate_bindings.py-under-Python-3.patch \ + file://0023-Render-bindings-with-Python-3.patch \ + file://0024-blink-use-python3-for-instrumentation_probes.patch \ + file://0025-Remove-run_under_python2-option-from-grit_rule.gni.patch \ + file://0026-catapult-Python-3-migration-of-common.patch \ + file://0027-devtools-frontend-Reland-Reland-use-python3-in-devto.patch \ + file://0028-protobuf-use-python3-for-protoc_wrapper.py.patch \ + file://0029-components-run-gen_file_type_proto.py-in-python3.patch \ + file://0030-Update-ssl_error_assistant-code-to-py3.patch \ + file://0031-Py2-Py3-for-third_party-dom_distiller_js.patch \ + file://0032-Py2-Py3-fixup-for-dom_distiller_js.patch \ + file://0033-catapult-use-python3-for-rcssmin.patch \ + file://0034-build-Convert-third_party-opus-BUILD.gn-to-py3.patch \ +" diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_94.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_94.inc index d1fee285b..da4e7432a 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_94.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_94.inc @@ -9,3 +9,6 @@ WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium94" WEBOS_VERSION_V8 = "9.1.269.36-chromium94.1_41a8a1fdbb4d78a52855d378e3d6600f29015fc8" SRCREV_v8 = "36c5abcbfb0919dc2be3ffebb3b0cc146ac8a45e" +SRC_URI += " \ + file://0003-jinja2-fix-compatibility-with-python3-3.10.patch \ +" diff --git a/meta-webos/recipes-webos/chromium/webruntime.inc b/meta-webos/recipes-webos/chromium/webruntime.inc index 2d57fb05d..c11ab4c78 100644 --- a/meta-webos/recipes-webos/chromium/webruntime.inc +++ b/meta-webos/recipes-webos/chromium/webruntime.inc @@ -9,6 +9,7 @@ require exportbuildscript.inc inherit gettext inherit pkgconfig +inherit python3native inherit webruntime_apps inherit webos_filesystem_paths inherit webos_lttng @@ -17,9 +18,9 @@ inherit webos_machine_impl_dep inherit webos_prerelease_dep inherit webos_system_bus -DEPENDS = "virtual/gettext wayland wayland-native luna-service2 pixman freetype fontconfig openssl pango cairo icu webos-wayland-extensions libxkbcommon libexif dbus pciutils udev libcap alsa-lib virtual/egl elfutils-native libdrm atk gperf-native gconf libwebosi18n bison-native xorgproto nss nspr curl nspr-native nss-native pmloglib glib-2.0-native python-six-native python-beautifulsoup4-native python-lxml-native python-html5lib-native python-webencodings-native" +DEPENDS = "virtual/gettext wayland wayland-native luna-service2 pixman freetype fontconfig openssl pango cairo icu webos-wayland-extensions libxkbcommon libexif dbus pciutils udev libcap alsa-lib virtual/egl elfutils-native libdrm atk gperf-native gconf libwebosi18n bison-native xorgproto nss nspr curl nspr-native nss-native pmloglib glib-2.0-native python3-six-native python3-beautifulsoup4-native python3-soupsieve-native python3-lxml-native python3-html5lib-native python3-webencodings-native" -INC_PR = "r52" +INC_PR = "r53" # Enable this in webos-local.conf or in recipe to build DEPLOY_CHROMEDRIVER ?= "false" DEPLOY_WAM_DEMO ?= "false" From b1f5768023a438169579d2d7671f60415eaf307c Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sun, 20 Feb 2022 09:32:02 +0000 Subject: [PATCH 0366/2022] Remove meta-python2 dependency :Release Notes: Now when webruntime recipe was migrated to use python3native we can get rid of this long unsupported version of python(2) and meta-python2 layer. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-17542] Use python3native to build webruntime and remove meta-python2 layer [WRO-3838] CCC: Remove meta-python2 layer Change-Id: Ibefc6699c249b60ce412331677e975880e05e5b3 --- .../conf/distro/include/webos-recipe-blacklist.inc | 10 +--------- meta-webos/conf/layer.conf | 3 +-- .../recipes-connectivity/gateone/gateone_%.bbappend | 7 ------- 3 files changed, 2 insertions(+), 18 deletions(-) delete mode 100644 meta-webos/recipes-connectivity/gateone/gateone_%.bbappend diff --git a/meta-webos/conf/distro/include/webos-recipe-blacklist.inc b/meta-webos/conf/distro/include/webos-recipe-blacklist.inc index 7b5951422..b59fd0833 100644 --- a/meta-webos/conf/distro/include/webos-recipe-blacklist.inc +++ b/meta-webos/conf/distro/include/webos-recipe-blacklist.inc @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. # A blacklisted recipe is ignored by bitbake. The reason it is useful to be able # to have bitbake ignore a recipe is because, although PREFERRED_PROVIDER can be @@ -164,11 +164,3 @@ PNBLACKLIST[xen] ?= "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', 'Depe # meta-openembedded/meta-oe/recipes-multimedia/pipewire/pipewire_git.bb PNBLACKLIST[pipewire] ?= "Doesn't like our old pulseaudio from meta-webos: meson.build:234:2: ERROR: Invalid version of dependency, need 'libpulse' ['>= 11.1'] found '9.0-14-gdf81'." - -# the following python recipes are an exception, because they need to be blacklisted even when python(2) itself is unblacklisted with I_SWEAR_TO_MIGRATE_TO_PYTHON3 -# meta-python2/recipes-devtools/python/python-snimpy_0.8.13.bb -# libsmi should be unblacklisted in hardknott -PNBLACKLIST[python-snimpy] ?= "Depends on blacklisted libsmi" - -# all target python2 recipes from meta-python2 and meta-oe -require conf/distro/include/python2-target-recipes-blacklist.inc diff --git a/meta-webos/conf/layer.conf b/meta-webos/conf/layer.conf index 7a14236e6..efb18e44a 100644 --- a/meta-webos/conf/layer.conf +++ b/meta-webos/conf/layer.conf @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. BBPATH ?= "" # We have a conf and classes directory, add to BBPATH @@ -20,7 +20,6 @@ LAYERDEPENDS_meta-webos = " \ networking-layer \ multimedia-layer \ meta-python \ - meta-python2 \ " # Prepend scripts to WEBOS_EXTRA_PATH diff --git a/meta-webos/recipes-connectivity/gateone/gateone_%.bbappend b/meta-webos/recipes-connectivity/gateone/gateone_%.bbappend deleted file mode 100644 index ed5f48b50..000000000 --- a/meta-webos/recipes-connectivity/gateone/gateone_%.bbappend +++ /dev/null @@ -1,7 +0,0 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. - -EXTENDPRAUTO_append = "webos1" - -VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" From 0bfb0eee488a63c84c173c7bbf7fcafe7d0e54b0 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 29 Jul 2021 07:30:57 -0700 Subject: [PATCH 0367/2022] meta-webos/scripts/convert-overrides.py: import from oe-core/master :Release Notes: Import the script as-is from oe-core, so that it can be modified with webOS specific values in the next commit. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [PLAT-141293] Create GPVB with Yocto 3.4 Honister [WRO-3850] CCC: Upgrade to new override syntax Change-Id: I2e635be53fa1dc30d121342e9afcac6b6e008574 --- meta-webos/scripts/convert-overrides.py | 144 ++++++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100755 meta-webos/scripts/convert-overrides.py diff --git a/meta-webos/scripts/convert-overrides.py b/meta-webos/scripts/convert-overrides.py new file mode 100755 index 000000000..4d41a4c47 --- /dev/null +++ b/meta-webos/scripts/convert-overrides.py @@ -0,0 +1,144 @@ +#!/usr/bin/env python3 +# +# Conversion script to add new override syntax to existing bitbake metadata +# +# Copyright (C) 2021 Richard Purdie +# +# SPDX-License-Identifier: GPL-2.0-only +# + +# +# To use this script on a new layer you need to list the overrides the +# layer is known to use in the list below. +# +# Known constraint: Matching is 'loose' and in particular will find variable +# and function names with "_append" and "_remove" in them. Those need to be +# filtered out manually or in the skip list below. +# + +import re +import os +import sys +import tempfile +import shutil +import mimetypes + +if len(sys.argv) < 2: + print("Please specify a directory to run the conversion script against.") + sys.exit(1) + +# List of strings to treat as overrides +vars = ["append", "prepend", "remove"] +vars = vars + ["qemuarm", "qemux86", "qemumips", "qemuppc", "qemuriscv", "qemuall"] +vars = vars + ["genericx86", "edgerouter", "beaglebone-yocto"] +vars = vars + ["armeb", "arm", "armv5", "armv6", "armv4", "powerpc64", "aarch64", "riscv32", "riscv64", "x86", "mips64", "powerpc"] +vars = vars + ["mipsarch", "x86-x32", "mips16e", "microblaze", "e5500-64b", "mipsisa32", "mipsisa64"] +vars = vars + ["class-native", "class-target", "class-cross-canadian", "class-cross", "class-devupstream"] +vars = vars + ["tune-", "pn-", "forcevariable"] +vars = vars + ["libc-musl", "libc-glibc", "libc-newlib","libc-baremetal"] +vars = vars + ["task-configure", "task-compile", "task-install", "task-clean", "task-image-qa", "task-rm_work", "task-image-complete", "task-populate-sdk"] +vars = vars + ["toolchain-clang", "mydistro", "nios2", "sdkmingw32", "overrideone", "overridetwo"] +vars = vars + ["linux-gnux32", "linux-muslx32", "linux-gnun32", "mingw32", "poky", "darwin", "linuxstdbase"] +vars = vars + ["linux-gnueabi", "eabi"] +vars = vars + ["virtclass-multilib", "virtclass-mcextend"] + +# List of strings to treat as overrides but only with whitespace following or another override (more restricted matching). +# Handles issues with arc matching arch. +shortvars = ["arc", "mips", "mipsel", "sh4"] + +# Variables which take packagenames as an override +packagevars = ["FILES", "RDEPENDS", "RRECOMMENDS", "SUMMARY", "DESCRIPTION", "RSUGGESTS", "RPROVIDES", "RCONFLICTS", "PKG", "ALLOW_EMPTY", + "pkg_postrm", "pkg_postinst_ontarget", "pkg_postinst", "INITSCRIPT_NAME", "INITSCRIPT_PARAMS", "DEBIAN_NOAUTONAME", "ALTERNATIVE", + "PKGE", "PKGV", "PKGR", "USERADD_PARAM", "GROUPADD_PARAM", "CONFFILES", "SYSTEMD_SERVICE", "LICENSE", "SECTION", "pkg_preinst", + "pkg_prerm", "RREPLACES", "GROUPMEMS_PARAM", "SYSTEMD_AUTO_ENABLE", "SKIP_FILEDEPS", "PRIVATE_LIBS", "PACKAGE_ADD_METADATA", + "INSANE_SKIP", "DEBIANNAME", "SYSTEMD_SERVICE_ESCAPED"] + +# Expressions to skip if encountered, these are not overrides +skips = ["parser_append", "recipe_to_append", "extra_append", "to_remove", "show_appends", "applied_appends", "file_appends", "handle_remove"] +skips = skips + ["expanded_removes", "color_remove", "test_remove", "empty_remove", "toaster_prepend", "num_removed", "licfiles_append", "_write_append"] +skips = skips + ["no_report_remove", "test_prepend", "test_append", "multiple_append", "test_remove", "shallow_remove", "do_remove_layer", "first_append"] +skips = skips + ["parser_remove", "to_append", "no_remove", "bblayers_add_remove", "bblayers_remove", "apply_append", "is_x86", "base_dep_prepend"] +skips = skips + ["autotools_dep_prepend", "go_map_arm", "alt_remove_links", "systemd_append_file", "file_append", "process_file_darwin"] +skips = skips + ["run_loaddata_poky", "determine_if_poky_env", "do_populate_poky_src", "libc_cv_include_x86_isa_level", "test_rpm_remove", "do_install_armmultilib"] +skips = skips + ["get_appends_for_files", "test_doubleref_remove", "test_bitbakelayers_add_remove", "elf32_x86_64", "colour_remove", "revmap_remove"] +skips = skips + ["test_rpm_remove", "test_bitbakelayers_add_remove", "recipe_append_file", "log_data_removed", "recipe_append", "systemd_machine_unit_append"] +skips = skips + ["recipetool_append", "changetype_remove", "try_appendfile_wc", "test_qemux86_directdisk", "test_layer_appends", "tgz_removed"] + +imagevars = ["IMAGE_CMD", "EXTRA_IMAGECMD", "IMAGE_TYPEDEP", "CONVERSION_CMD", "COMPRESS_CMD"] +packagevars = packagevars + imagevars + +vars_re = {} +for exp in vars: + vars_re[exp] = (re.compile('((^|[#\'"\s\-\+])[A-Za-z0-9_\-:${}\.]+)_' + exp), r"\1:" + exp) + +shortvars_re = {} +for exp in shortvars: + shortvars_re[exp] = (re.compile('((^|[#\'"\s\-\+])[A-Za-z0-9_\-:${}\.]+)_' + exp + '([\(\'"\s:])'), r"\1:" + exp + r"\3") + +package_re = {} +for exp in packagevars: + package_re[exp] = (re.compile('(^|[#\'"\s\-\+]+)' + exp + '_' + '([$a-z"\'\s%\[<{\\\*].)'), r"\1" + exp + r":\2") + +# Other substitutions to make +subs = { + 'r = re.compile("([^:]+):\s*(.*)")' : 'r = re.compile("(^.+?):\s+(.*)")', + "val = d.getVar('%s_%s' % (var, pkg))" : "val = d.getVar('%s:%s' % (var, pkg))", + "f.write('%s_%s: %s\\n' % (var, pkg, encode(val)))" : "f.write('%s:%s: %s\\n' % (var, pkg, encode(val)))", + "d.getVar('%s_%s' % (scriptlet_name, pkg))" : "d.getVar('%s:%s' % (scriptlet_name, pkg))", + 'ret.append(v + "_" + p)' : 'ret.append(v + ":" + p)', +} + +def processfile(fn): + print("processing file '%s'" % fn) + try: + fh, abs_path = tempfile.mkstemp() + with os.fdopen(fh, 'w') as new_file: + with open(fn, "r") as old_file: + for line in old_file: + skip = False + for s in skips: + if s in line: + skip = True + if "ptest_append" in line or "ptest_remove" in line or "ptest_prepend" in line: + skip = False + for sub in subs: + if sub in line: + line = line.replace(sub, subs[sub]) + skip = True + if not skip: + for pvar in packagevars: + line = package_re[pvar][0].sub(package_re[pvar][1], line) + for var in vars: + line = vars_re[var][0].sub(vars_re[var][1], line) + for shortvar in shortvars: + line = shortvars_re[shortvar][0].sub(shortvars_re[shortvar][1], line) + if "pkg_postinst:ontarget" in line: + line = line.replace("pkg_postinst:ontarget", "pkg_postinst_ontarget") + new_file.write(line) + shutil.copymode(fn, abs_path) + os.remove(fn) + shutil.move(abs_path, fn) + except UnicodeDecodeError: + pass + +ourname = os.path.basename(sys.argv[0]) +ourversion = "0.9.3" + +if os.path.isfile(sys.argv[1]): + processfile(sys.argv[1]) + sys.exit(0) + +for targetdir in sys.argv[1:]: + print("processing directory '%s'" % targetdir) + for root, dirs, files in os.walk(targetdir): + for name in files: + if name == ourname: + continue + fn = os.path.join(root, name) + if os.path.islink(fn): + continue + if "/.git/" in fn or fn.endswith(".html") or fn.endswith(".patch") or fn.endswith(".m4") or fn.endswith(".diff"): + continue + processfile(fn) + +print("All files processed with version %s" % ourversion) From 2e524c97208f586a5fcb5964c1e66b55973e8139 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 29 Jul 2021 07:32:26 -0700 Subject: [PATCH 0368/2022] meta-webos/scripts/convert-overrides.py: modify for meta-webos :Release Notes: :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [PLAT-141293] Create GPVB with Yocto 3.4 Honister [WRO-3850] CCC: Upgrade to new override syntax Change-Id: I8e4958a6fcfdd4a49eae2ac46963b5df066d391a --- meta-webos/scripts/convert-overrides.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/meta-webos/scripts/convert-overrides.py b/meta-webos/scripts/convert-overrides.py index 4d41a4c47..ee26b47d0 100755 --- a/meta-webos/scripts/convert-overrides.py +++ b/meta-webos/scripts/convert-overrides.py @@ -42,10 +42,18 @@ vars = vars + ["linux-gnueabi", "eabi"] vars = vars + ["virtclass-multilib", "virtclass-mcextend"] +# meta-webos +vars = vars + ["rpi", "raspberrypi", "raspberrypi2", "raspberrypi3", "raspberrypi3-64", "raspberrypi4", "raspberrypi4-64"] +vars = vars + ["emulator", "hardware", "no-lttng", "sota"] +vars = vars + ["armv4", "armv5", "armv6", "armv7a", "armv7ve", "x86-64", "i686"] + # List of strings to treat as overrides but only with whitespace following or another override (more restricted matching). # Handles issues with arc matching arch. shortvars = ["arc", "mips", "mipsel", "sh4"] +# meta-webos +shortvars = shortvars + ["webos"] + # Variables which take packagenames as an override packagevars = ["FILES", "RDEPENDS", "RRECOMMENDS", "SUMMARY", "DESCRIPTION", "RSUGGESTS", "RPROVIDES", "RCONFLICTS", "PKG", "ALLOW_EMPTY", "pkg_postrm", "pkg_postinst_ontarget", "pkg_postinst", "INITSCRIPT_NAME", "INITSCRIPT_PARAMS", "DEBIAN_NOAUTONAME", "ALTERNATIVE", @@ -63,6 +71,9 @@ skips = skips + ["get_appends_for_files", "test_doubleref_remove", "test_bitbakelayers_add_remove", "elf32_x86_64", "colour_remove", "revmap_remove"] skips = skips + ["test_rpm_remove", "test_bitbakelayers_add_remove", "recipe_append_file", "log_data_removed", "recipe_append", "systemd_machine_unit_append"] skips = skips + ["recipetool_append", "changetype_remove", "try_appendfile_wc", "test_qemux86_directdisk", "test_layer_appends", "tgz_removed"] +# webos +skips = skips + ["webos_configure_manifest_comment_remover", "webos_app_generate_security_files_comment_remover", "webos_service_generate_security_files_comment_remover"] +skips = skips + ["webos_certificates_removefiles", "webos_emulatorshareddir"] imagevars = ["IMAGE_CMD", "EXTRA_IMAGECMD", "IMAGE_TYPEDEP", "CONVERSION_CMD", "COMPRESS_CMD"] packagevars = packagevars + imagevars From 68a53508194f7daa7d6df100a7980b67a83e71e2 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 29 Jul 2021 07:38:17 -0700 Subject: [PATCH 0369/2022] Convert to new override syntax :Release Notes: This is the result of automated script (0.9.3) conversion: meta-webos/scripts/convert-overrides.py meta-webos meta-webos-backports meta-webos-iot meta-webos-raspberrypi meta-webos-smack meta-webos-updater meta-webos-virtualization converting the metadata to use ":" as the override character instead of "_". Test overrides conversion :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [PLAT-141293] Create GPVB with Yocto 3.4 Honister [WRO-3850] CCC: Upgrade to new override syntax Change-Id: I7f6c1692359f4e866b18171d6baf67b888e698c0 --- .../recipes-connectivity/connman/connman.inc | 88 +++++++------- .../connman/connman_1.39.bb | 6 +- .../recipes-devtools/guilder/guider_3.9.7.bb | 2 +- .../recipes-extended/procps/procps_3.3.17.bb | 30 ++--- .../gstreamer/gst-devtools_1.18.2.bb | 4 +- .../gstreamer/gst-examples_1.18.2.bb | 8 +- .../gstreamer/gstreamer1.0-libav_1.18.2.bb | 4 +- .../gstreamer/gstreamer1.0-meta-base.bb | 22 ++-- .../gstreamer/gstreamer1.0-omx_1.18.2.bb | 6 +- .../gstreamer1.0-plugins-bad_1.18.2.bb | 12 +- .../gstreamer1.0-plugins-base_1.18.2.bb | 14 +-- .../gstreamer/gstreamer1.0-plugins-common.inc | 2 +- .../gstreamer1.0-plugins-good_1.18.2.bb | 6 +- .../gstreamer1.0-plugins-packaging.inc | 26 ++-- .../gstreamer1.0-plugins-ugly_1.18.2.bb | 4 +- .../gstreamer/gstreamer1.0-python_1.18.2.bb | 4 +- .../gstreamer/gstreamer1.0-vaapi_1.18.2.bb | 8 +- .../gstreamer/gstreamer1.0_1.18.2.bb | 8 +- .../recipes-support/libsrtp/libsrtp_2.3.0.bb | 4 +- meta-webos-iot/classes/webos_iot.bbclass | 2 +- meta-webos-iot/classes/webos_iot_core.bbclass | 6 +- .../classes/webos_iot_image.bbclass | 4 +- .../initscripts/webos-initscripts.bbappend | 4 +- .../packagegroup-webos-devel.bbappend | 2 +- .../packagegroup-webos-iot-bsp.bb | 2 +- .../packagegroup-webos-iot-core.bb | 8 +- .../packagegroup-webos-iot-devtools.bb | 4 +- .../packagegroups/packagegroup-webos-iot.bb | 22 ++-- .../classes/sdcard_image-rpi.bbclass | 14 +-- .../classes/sota_webos-rpi.bbclass | 16 +-- .../conf/machine/include/webos-rpi.inc | 16 +-- .../conf/machine/raspberrypi3-64.conf | 2 +- .../conf/machine/raspberrypi4-64.conf | 2 +- .../conf/machine/raspberrypi4.conf | 2 +- .../bootfiles/rpi-config_git.bbappend | 6 +- .../resize-rootfs/resize-rootfs.bb | 4 +- .../rpi-u-boot-scr/rpi-u-boot-scr.bbappend | 10 +- .../recipes-bsp/u-boot/u-boot_%.bbappend | 8 +- .../connman/connman-conf.bbappend | 8 +- .../pi-bluetooth/pi-bluetooth_%.bbappend | 10 +- .../wpa-supplicant/wpa-supplicant_%.bbappend | 6 +- .../base-files/base-files_%.bbappend | 6 +- .../images/rpi-test-image.bbappend | 2 +- .../recipes-core/images/webos-image.bbappend | 2 +- .../packagegroup-rpi-test.bbappend | 6 +- .../packagegroup-webos-devel.bbappend | 6 +- .../packagegroup-webos-extended.bbappend | 14 +-- .../recipes-extended/libcec/libcec_%.bbappend | 8 +- .../recipes-graphics/mesa/mesa_%.bbappend | 8 +- .../userland/userland_git.bbappend | 6 +- .../wayland/wayland-protocols_%.bbappend | 6 +- .../linux/linux-raspberrypi_%.bbappend | 12 +- .../linux/linux-raspberrypi_5.4.bbappend | 2 +- .../gstreamer1.0-libav_1.16.%.bbappend | 10 +- .../gstreamer1.0-omx_1.16.%.bbappend | 22 ++-- .../gstreamer1.0-plugins-bad_1.16.%.bbappend | 12 +- .../gstreamer1.0-plugins-base_1.16.%.bbappend | 14 +-- .../gstreamer1.0-plugins-good_1.16.%.bbappend | 8 +- .../gstreamer1.0-plugins-ugly_1.16.%.bbappend | 6 +- .../gstreamer/gstreamer1.0-webos-common.inc | 12 +- .../gstreamer/gstreamer1.0_1.16.%.bbappend | 8 +- .../recipes-multimedia/umi/umi.bbappend | 4 +- .../recipes-qt/qt6/qtwayland_git.bbappend | 4 +- .../chromium/webruntime_%.bbappend | 8 +- .../recipes-webos/db8/db8.bbappend | 4 +- .../nyx-modules/nyx-modules.bbappend | 8 +- .../recipes-webos/wam/wam.bbappend | 6 +- meta-webos-smack/conf/layer.conf | 2 +- .../base-files/base-files_%.bbappend | 2 +- .../coreutils/coreutils_%.bbappend | 2 +- .../recipes-core/images/webos-image.bbappend | 4 +- .../packagegroup-webos-extended.bbappend | 4 +- .../recipes-core/systemd/systemd_%.bbappend | 4 +- .../recipes-kernel/linux/linux-%.bbappend | 4 +- .../recipes-security/smack/smack_%.bbappend | 12 +- .../chromium/webruntime_%.bbappend | 6 +- .../com.webos.app.enactbrowser.bbappend | 4 +- .../com.webos.app.test.smack.native.bb | 4 +- .../qml-webos-framework.bbappend | 4 +- .../recipes-webos/wam/wam.bbappend | 2 +- .../classes/usrmerge_fix.bbclass | 2 +- meta-webos-updater/conf/layer.conf | 2 +- .../base-files/base-files_%.bbappend | 6 +- .../recipes-core/busybox/busybox_%.bbappend | 4 +- .../images/initramfs-ostree-image.bbappend | 4 +- .../initscripts/webos-initscripts.bbappend | 2 +- .../ntfs-3g-ntfsprogs_%.bbappend | 2 +- .../systemtap/systemtap_%.bbappend | 8 +- .../ostree-initrd/ostree-initrd.bbappend | 4 +- .../ostree-kernel-initramfs_%.bbappend | 2 +- ...om.webos.service.contextintentmgr.bbappend | 2 +- .../containerd/containerd-docker_git.bbappend | 4 +- .../containerd-opencontainers_git.bbappend | 4 +- .../docker/docker-ce_%.bbappend | 8 +- .../docker/docker-moby.bbappend | 10 +- .../recipes-containers/lxc/lxc_%.bbappend | 14 +-- .../runc/runc-docker_git.bbappend | 4 +- .../runc/runc-opencontainers_git.bbappend | 4 +- .../singularity/singularity_git.bbappend | 6 +- .../packagegroup-webos-extended.bbappend | 4 +- .../recipes-devtools/go/go-systemd_%.bbappend | 6 +- .../docker-simple-webserver.bb | 4 +- .../libvirt/libvirt_%.bbappend | 6 +- .../recipes-extended/xen/xen-tools_%.bbappend | 38 +++--- .../openvswitch/openvswitch_git.bbappend | 6 +- .../python3-docker-compose_1.21.2.bb | 2 +- meta-webos/classes/image.bbclass | 2 +- meta-webos/classes/kernel.bbclass | 4 +- meta-webos/classes/webos_base.bbclass | 2 +- .../classes/webos_bluetooth_sil.bbclass | 2 +- meta-webos/classes/webos_certificates.bbclass | 4 +- meta-webos/classes/webos_cmake.bbclass | 4 +- meta-webos/classes/webos_enactjs_app.bbclass | 16 +-- meta-webos/classes/webos_enactjs_env.bbclass | 2 +- .../webos_event_monitor_plugin.bbclass | 4 +- meta-webos/classes/webos_image.bbclass | 24 ++-- meta-webos/classes/webos_kernel_dep.bbclass | 2 +- meta-webos/classes/webos_localizable.bbclass | 8 +- meta-webos/classes/webos_lttng.bbclass | 8 +- meta-webos/classes/webos_machine_dep.bbclass | 2 +- meta-webos/classes/webos_npm_env.bbclass | 2 +- .../classes/webos_nyx_module_provider.bbclass | 4 +- .../webos_preferred_gfx_image_format.bbclass | 6 +- meta-webos/classes/webos_qmake6.bbclass | 4 +- meta-webos/classes/webos_qmake6_paths.bbclass | 6 +- meta-webos/classes/webos_qmllint.bbclass | 6 +- meta-webos/classes/webos_qt_global.bbclass | 4 +- .../classes/webos_qt_localization.bbclass | 8 +- meta-webos/classes/webos_system_bus.bbclass | 6 +- .../classes/webos_test_provider.bbclass | 6 +- .../conf/distro/include/tcmode-default.inc | 16 +-- .../distro/include/webos-component-head.inc | 2 +- .../conf/distro/include/webos-features.inc | 2 +- .../webos-icecc-components-exclusion.inc | 4 +- .../include/webos-preferred-providers.inc | 16 +-- .../distro/include/webos-recipe-blacklist.inc | 8 +- meta-webos/conf/distro/include/webos-sota.inc | 8 +- .../conf/distro/include/webos-toolchain.inc | 2 +- meta-webos/conf/distro/include/webos.inc | 114 +++++++++--------- meta-webos/conf/distro/webos.conf | 22 ++-- .../conf/machine/include/qemuboot-x86.inc | 12 +- .../recipes-benchmark/fio/fio_%.bbappend | 6 +- .../libhugetlbfs/libhugetlbfs_%.bbappend | 10 +- .../phoronix-test-suite_%.bbappend | 6 +- .../recipes-bsp/pm-utils/pm-utils_%.bbappend | 6 +- .../recipes-connectivity/bind/bind_%.bbappend | 10 +- .../bluez5/bluez5-conf.bb | 2 +- .../bluez5/bluez5_%.bbappend | 18 +-- .../connman/connman-conf.bbappend | 10 +- .../connman/connman_%.bbappend | 8 +- .../recipes-connectivity/dhcp/dhcp_%.bbappend | 10 +- .../gammu/gammu_%.bbappend | 10 +- .../gensio/gensio_%.bbappend | 6 +- .../ifplugd/ifplugd_%.bbappend | 6 +- .../iotivity-node/iotivity-node_git.bb | 24 ++-- .../recipes-connectivity/lftp/lftp_%.bbappend | 6 +- .../recipes-connectivity/lirc/lirc_%.bbappend | 6 +- .../nfs-utils/nfs-utils_%.bbappend | 10 +- .../ofono/ofono_%.bbappend | 4 +- .../openconnect/openconnect_%.bbappend | 6 +- .../openssl/openssl_%.bbappend | 12 +- .../resolvconf/resolvconf_%.bbappend | 6 +- .../samba/samba_%.bbappend | 6 +- .../smstools3/smstools3_%.bbappend | 6 +- .../wpa-supplicant/wpa-supplicant_%.bbappend | 14 +-- .../base-files/base-files_3.0.14.bbappend | 8 +- .../base-passwd/base-passwd_3.5.29.bbappend | 6 +- .../recipes-core/busybox/busybox_%.bbappend | 10 +- meta-webos/recipes-core/dbus/dbus_%.bbappend | 10 +- .../recipes-core/dropbear/dropbear_%.bbappend | 16 +-- meta-webos/recipes-core/gator/gator_git.bb | 4 +- .../recipes-core/gettext/gettext_%.bbappend | 6 +- .../recipes-core/glib-2.0/glib-2.0_%.bbappend | 6 +- .../glibc/glibc-scripts_%.bbappend | 6 +- .../recipes-core/glibc/glibc_%.bbappend | 14 +-- .../initscripts/webos-initscripts.bb | 6 +- .../recipes-core/iotivity/iotivity_git.bb | 42 +++---- .../recipes-core/libxml/libxml2_%.bbappend | 6 +- .../meta/meta-environment.bbappend | 4 +- .../mm-common/mm-common_%.bbappend | 6 +- .../nativesdk-packagegroup-sdk-host.bbappend | 4 +- .../packagegroup-core-tools-profile.bbappend | 12 +- .../packagegroups/packagegroup-webos-devel.bb | 10 +- .../packagegroup-webos-extended.bb | 108 ++++++++--------- .../packagegroup-webos-internal.bb | 4 +- .../packagegroups/packagegroup-webos-test.bb | 10 +- .../recipes-core/shadow/shadow_%.bbappend | 8 +- .../recipes-core/systemd/systemd_%.bbappend | 24 ++-- .../util-linux/util-linux_%.bbappend | 6 +- .../recipes-core/webos-qt-sdk/webos-qt-sdk.bb | 4 +- .../opensaf/opensaf_%.bbappend | 6 +- .../recipes-dbs/leveldb/leveldb_%.bbappend | 4 +- .../recipes-dbs/mysql/mariadb_%.bbappend | 6 +- .../android-tools/android-tools_%.bbappend | 6 +- .../recipes-devtools/apt/apt_%.bbappend | 6 +- .../build-compare/build-compare_%.bbappend | 6 +- .../dnf-plugin-tui/dnf-plugin-tui_%.bbappend | 6 +- .../e2fsprogs/e2fsprogs_%.bbappend | 20 +-- .../elfutils/elfutils_%.bbappend | 8 +- .../expect/expect_5.45.4.bbappend | 4 +- .../fdisk/gptfdisk_%.bbappend | 10 +- .../recipes-devtools/flex/flex_%.bbappend | 6 +- .../recipes-devtools/glide/glide_%.bbappend | 10 +- .../recipes-devtools/go/go-dep_%.bbappend | 6 +- meta-webos/recipes-devtools/go/go_%.bbappend | 6 +- .../recipes-devtools/grpc/grpc_%.bbappend | 4 +- .../jsoncpp/jsoncpp_%.bbappend | 4 +- .../kconfig-frontends_%.bbappend | 6 +- .../libtool/libtool-cross_%.bbappend | 4 +- .../libtool/libtool-native_%.bbappend | 4 +- .../libtool/libtool_%.bbappend | 6 +- .../libtool/nativesdk-libtool_%.bbappend | 4 +- .../recipes-devtools/llvm/llvm_%.bbappend | 2 +- .../ltrace/ltrace_git.bbappend | 4 +- meta-webos/recipes-devtools/m4/m4_%.bbappend | 4 +- .../makedevs/makedevs_1.0.1.bbappend | 4 +- .../recipes-devtools/mpich/mpich_%.bbappend | 6 +- .../recipes-devtools/mtd/mtd-utils_%.bbappend | 6 +- .../recipes-devtools/nodejs/nodejs_%.bbappend | 8 +- .../opkg-utils/opkg-utils_%.bbappend | 6 +- .../recipes-devtools/opkg/opkg_%.bbappend | 10 +- .../pax-utils/pax-utils_%.bbappend | 6 +- .../recipes-devtools/pm-qa/pm-qa_%.bbappend | 6 +- .../protobuf/protobuf_%.bbappend | 8 +- .../python3-atlassian-python-api_3.8.0.bb | 2 +- .../python/python3-deprecated_1.2.12.bb | 2 +- .../python/python3-pymisp_%.bbappend | 6 +- .../python/python3_%.bbappend | 10 +- .../recipes-devtools/qemu/qemu_%.bbappend | 14 +-- .../recipes-devtools/quilt/quilt_%.bbappend | 10 +- .../recipes-devtools/rpm/rpm_%.bbappend | 6 +- .../tcf-agent/tcf-agent_%.bbappend | 6 +- .../recipes-devtools/xmlto/xmlto_%.bbappend | 6 +- .../recipes-devtools/yajl/yajl_2.1.0.bbappend | 4 +- .../recipes-extended/bash/bash_%.bbappend | 6 +- .../collectd/collectd_%.bbappend | 2 +- .../corosync/corosync_%.bbappend | 6 +- .../recipes-extended/hdparm/hdparm_%.bbappend | 10 +- .../recipes-extended/iotop/iotop_%.bbappend | 2 +- .../lighttpd/lighttpd_%.bbappend | 2 +- .../lsb/lsb-release_%.bbappend | 6 +- .../recipes-extended/ltp/ltp_%.bbappend | 14 +-- .../recipes-extended/mdadm/mdadm_%.bbappend | 6 +- .../recipes-extended/ostree/ostree_%.bbappend | 20 +-- .../recipes-extended/procps/procps_%.bbappend | 4 +- .../recipes-extended/rarpd/rarpd_%.bbappend | 6 +- .../rsyslog/rsyslog_%.bbappend | 6 +- .../sblim-sfcb/sblim-sfcb_%.bbappend | 6 +- .../scsirastools/scsirastools_%.bbappend | 14 +-- .../recipes-extended/sed/sed_4.8.bbappend | 2 +- .../recipes-extended/sysdig/sysdig_%.bbappend | 6 +- .../tcp-wrappers/tcp-wrappers_7.6.bbappend | 4 +- .../recipes-extended/tzdata/tzdata.bbappend | 12 +- .../unionfs-fuse/unionfs-fuse_%.bbappend | 6 +- .../ebtables/ebtables_%.bbappend | 6 +- .../recipes-graphics/fbida/fbida_%.bbappend | 6 +- .../fontconfig/fontconfig_%.bbappend | 4 +- .../freetype/freetype_%.bbappend | 4 +- .../gphoto2/libgphoto2_%.bbappend | 10 +- .../recipes-graphics/mesa/mesa_%.bbappend | 6 +- .../recipes-graphics/piglit/piglit_%.bbappend | 6 +- .../wayland/wayland_%.bbappend | 8 +- .../recipes-kernel/cpupower/cpupower.bbappend | 6 +- meta-webos/recipes-kernel/dtc/dtc_%.bbappend | 6 +- meta-webos/recipes-kernel/ebd/ebd.bb | 2 +- .../kernel-selftest/kernel-selftest.bbappend | 8 +- .../linux/linux-yocto/bluetooth_ext.cfg | 50 ++++---- .../linux/linux-yocto_%.bbappend | 20 +-- .../lttng/babeltrace2_%.bbappend | 6 +- .../lttng/babeltrace_%.bbappend | 6 +- .../lttng/lttng-tools_%.bbappend | 6 +- meta-webos/recipes-kernel/perf/perf.bbappend | 24 ++-- .../systemtap/systemtap_%.bbappend | 6 +- .../wireguard/wireguard-tools_%.bbappend | 6 +- .../com.webos.service.location.bb | 4 +- .../alsa/alsa-lib_%.bbappend | 2 +- .../alsa/alsa-plugins_%.bbappend | 16 +-- .../alsa/alsa-tools_%.bbappend | 4 +- .../alsa/alsa-utils-scripts_%.bbappend | 6 +- .../alsa/alsa-utils_%.bbappend | 8 +- .../recipes-multimedia/audiod/audiod.bb | 2 +- .../com.webos.service.mediaindexer.bb | 4 +- .../g-media-pipeline/g-media-pipeline.bb | 10 +- .../gstreamer1.0-plugins-bad_1.16.%.bbappend | 8 +- .../gstreamer1.0-plugins-base_1.16.%.bbappend | 2 +- .../gstreamer1.0-plugins-good_1.16.%.bbappend | 4 +- .../gstreamer/gstreamer1.0_1.16.%.bbappend | 2 +- .../media-codec-interface.bb | 10 +- .../pulseaudio/pulseaudio_9.0.bb | 28 ++--- meta-webos/recipes-multimedia/umi/umi.bb | 4 +- .../cups/cups-filters_%.bbappend | 6 +- .../openl2tp/openl2tp_%.bbappend | 6 +- meta-webos/recipes-qt/qt6/qtbase_git.bbappend | 60 ++++----- .../recipes-qt/qt6/qtdeclarative_git.bbappend | 18 +-- .../qt6/qtgraphicaleffects_%.bbappend | 4 +- .../recipes-qt/qt6/qtmultimedia_6.0.0.bb | 2 +- .../qt6/qtmultimedia_6.0.0.bbappend | 4 +- .../recipes-qt/qt6/qtwayland_git.bbappend | 10 +- meta-webos/recipes-support/apr/apr_%.bbappend | 6 +- .../recipes-support/attr/acl_%.bbappend | 6 +- .../bash-completion_%.bbappend | 6 +- .../ca-certificates_%.bbappend | 8 +- .../recipes-support/curl/curl_%.bbappend | 14 +-- .../recipes-support/dbus/dbus-test_%.bbappend | 6 +- .../drbd/drbd-utils_%.bbappend | 6 +- .../ecryptfs-utils/ecryptfs-utils_111.bb | 12 +- .../recipes-support/gflags/gflags_%.bbappend | 6 +- .../libcheck/libcheck_%.bbappend | 4 +- .../libteam/libteam_%.bbappend | 6 +- .../lio-utils/lio-utils_%.bbappend | 6 +- .../lm_sensors/lmsensors_%.bbappend | 14 +-- .../logwarn/logwarn_%.bbappend | 6 +- .../recipes-support/lvm2/lvm2_%.bbappend | 10 +- .../mcelog/mce-test_%.bbappend | 6 +- .../recipes-support/mcelog/mcelog_%.bbappend | 6 +- .../memcached/memcached_%.bbappend | 6 +- .../multipath-tools_%.bbappend | 6 +- .../numactl/numactl_%.bbappend | 6 +- .../opencv/opencv_4.%.bbappend | 12 +- .../pps-tools/pps-tools_%.bbappend | 6 +- .../rdma-core/rdma-core_%.bbappend | 6 +- .../recipes-support/sdparm/sdparm_%.bbappend | 6 +- .../sg3-utils/sg3-utils_%.bbappend | 6 +- .../unbound/unbound_%.bbappend | 6 +- .../user-creation/xuser-account_0.1.bbappend | 4 +- meta-webos/recipes-test/bats/bats_%.bbappend | 6 +- .../googletest/googletest_%.bbappend | 10 +- .../fluentbit/fluentbit_1.7.4.bb | 6 +- .../recipes-upstreamable/gupnp/gssdp_1.2.3.bb | 4 +- .../recipes-upstreamable/gupnp/gupnp.inc | 8 +- .../leveldb-tl/leveldb-tl_0.1.6.bb | 4 +- .../libbson/libbson_git.bb | 2 +- .../libhangul/libhangul.bb | 6 +- .../node-gyp/node-gyp-packages-native.inc | 104 ++++++++-------- .../nodejs-module-usocket_0.2.1.bb | 2 +- .../pacrunner/pacrunner_0.9.bb | 4 +- .../ptmalloc3/ptmalloc3.bb | 4 +- .../snowboy/snowboy_%.bbappend | 30 ++--- .../snowboy/snowboy_1.3.0.bb | 2 +- .../sp-memusage/sp-memusage_git.bb | 4 +- .../sqlcipher/sqlcipher.bb | 2 +- .../sunpinyin/sunpinyin.bb | 8 +- .../recipes-utils/udevil/udevil_%.bbappend | 6 +- .../vmwgfx-layout/vmwgfx-layout.bb | 4 +- .../activitymanager/activitymanager.bb | 2 +- .../appinstalld2/appinstalld2.bb | 2 +- .../auto-luna-surface-manager.bb | 4 +- .../recipes-webos/avoutputd/avoutputd.bb | 2 +- .../bluetooth/bluetooth-sil-api.bb | 4 +- .../bluetooth/bluetooth-sil-bluez5.bb | 4 +- .../bluetooth/com.webos.service.bluetooth2.bb | 2 +- meta-webos/recipes-webos/bootd/bootd.bb | 6 +- .../chromium/mksnapshot-cross_91.bb | 2 +- .../chromium/mksnapshot-cross_94.bb | 2 +- .../chromium/webruntime-common.inc | 28 ++--- .../recipes-webos/chromium/webruntime.inc | 54 ++++----- .../recipes-webos/chromium/webruntime_91.bb | 6 +- .../recipes-webos/chromium/webruntime_94.bb | 6 +- .../com.example.app.iotivity.bb | 16 +-- .../com.example.service.iotivity.bb | 18 +-- .../com.palm.service.devmode.bb | 16 +-- .../com.webos.app.enactbrowser.bb | 6 +- .../com.webos.app.mediagallery.bb | 6 +- .../com.webos.service.camera.bb | 4 +- .../com.webos.service.contextintentmgr.bb | 12 +- .../com.webos.app.mediaviewer.bb | 2 +- .../com.webos.service.flowmanager.bb | 14 +-- .../com.webos.service.mediacontroller.bb | 4 +- .../com.webos.service.pdm.bb | 10 +- .../com.webos.service.peripheralmanager.bb | 4 +- .../com.webos.service.tts.bb | 2 +- .../com.webos.service.unifiedsearch.bb | 2 +- meta-webos/recipes-webos/configd/configd.bb | 6 +- .../configurator/configurator.bb | 2 +- .../cpushareholder-stub.bb | 2 +- meta-webos/recipes-webos/db8/db8.bb | 14 +-- .../enact-dev/enact-dev-native.bb | 4 +- .../enactjs-apps/enact-framework.bb | 4 +- .../enactjs-apps/enact-sandstone.bb | 4 +- .../fluentbit/fluentbit_%.bbappend | 14 +-- .../frameworks/nodejs-module-webos-service.bb | 16 +-- .../g-camera-pipeline/g-camera-pipeline.bb | 12 +- .../ilib-webapp/ilib-qml-plugin.bb | 2 +- .../recipes-webos/ilib-webapp/ilib-webapp.bb | 2 +- .../recipes-webos/imemanager/imemanager.bb | 4 +- .../recipes-webos/libgdrive/libgdrive.bb | 2 +- .../libgoogleassistant/libgoogleassistant.bb | 6 +- .../recipes-webos/libpbnjson/libpbnjson.bb | 2 +- .../recipes-webos/librolegen/librolegen.bb | 2 +- .../recipes-webos/libsandbox/libsandbox.bb | 2 +- .../localization-tool-native.bb | 2 +- .../luna-downloadmgr/luna-downloadmgr.bb | 2 +- .../recipes-webos/luna-init/luna-init.bb | 6 +- .../recipes-webos/luna-prefs/luna-prefs.bb | 4 +- .../luna-service2-security-conf.bb | 4 +- .../luna-service2/luna-service2.bb | 12 +- .../luna-surfacemanager.bb | 22 ++-- .../luna-sysservice/luna-sysservice.bb | 6 +- .../maliit-framework-webos.bb | 10 +- .../recipes-webos/mojoloader/mojoloader.bb | 2 +- .../mojoservicelauncher.bb | 12 +- .../nodejs-module-node-red_0.18.7.bb | 16 +-- .../nodejs-module-webos-sysbus.bb | 2 +- .../nodejs-module-webos.inc | 6 +- .../notificationmgr/notificationmgr.bb | 2 +- meta-webos/recipes-webos/nyx-lib/nyx-lib.bb | 2 +- .../recipes-webos/nyx-modules/nyx-modules.bb | 2 +- .../recipes-webos/nyx-utils/nyx-utils.bb | 2 +- .../openwnn-webos/openwnn-webos.bb | 4 +- .../org.ocf.webossample.occlientbasicops.bb | 18 +-- .../org.ocf.webossample.ocserverbasicops.bb | 18 +-- .../recipes-webos/pmlogdaemon/pmlogdaemon.bb | 6 +- meta-webos/recipes-webos/pmtrace/pmtrace.bb | 2 +- .../qml-app-components/qml-app-components.bb | 4 +- .../qml-webos-bridge/qml-webos-bridge.bb | 4 +- .../qml-webos-components.bb | 2 +- .../qml-webos-framework.bb | 14 +-- .../qt-features-webos/qt-features-webos.bb | 8 +- .../qtbase-plugins-webos.bb | 6 +- .../qtwayland-webos/qtwayland-webos.bb | 12 +- meta-webos/recipes-webos/sam/sam.bb | 8 +- .../serviceinstaller/serviceinstaller.bb | 2 +- .../settingsservice/settingsservice.bb | 4 +- .../test-apps/webos-open-test-apps.inc | 2 +- .../umediaserver/umediaserver-configs.bb | 2 +- .../umediaserver/umediaserver.bb | 24 ++-- .../com.webos.service.videooutput.bb | 2 +- meta-webos/recipes-webos/wam/wam.bb | 32 ++--- .../webos-connman-adapter/wca-support.bb | 2 +- .../webos-connman-adapter.bb | 8 +- .../webos-fluentbit-plugins.bb | 4 +- .../webos-fontconfig-files.bb | 2 +- .../recipes-webos/webos-fonts/webos-fonts.inc | 2 +- .../webos-nettools/webos-nettools.bb | 2 +- .../webos-wayland-extensions.bb | 2 +- .../scripts/buildhistory-collect-src-info | 4 +- 436 files changed, 1811 insertions(+), 1811 deletions(-) diff --git a/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman.inc b/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman.inc index 776bbfbff..856bb9ee1 100644 --- a/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman.inc +++ b/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman.inc @@ -34,7 +34,7 @@ PACKAGECONFIG ??= "wispr iptables client\ # If you want ConnMan to support VPN, add following statement into # local.conf or distro config -# PACKAGECONFIG_append_pn-connman = " openvpn vpnc l2tp pptp" +# PACKAGECONFIG:append:pn-connman = " openvpn vpnc l2tp pptp" PACKAGECONFIG[systemd] = "--with-systemdunitdir=${systemd_unitdir}/system/ --with-tmpfilesdir=${sysconfdir}/tmpfiles.d/,--with-systemdunitdir='' --with-tmpfilesdir=''" PACKAGECONFIG[wifi] = "--enable-wifi, --disable-wifi, wpa-supplicant, wpa-supplicant" @@ -64,16 +64,16 @@ python __anonymous () { d.setVar('SYSTEMD_PACKAGES', systemd_packages) } -SYSTEMD_SERVICE_${PN} = "connman.service" -SYSTEMD_SERVICE_${PN}-vpn = "connman-vpn.service" -SYSTEMD_SERVICE_${PN}-wait-online = "connman-wait-online.service" +SYSTEMD_SERVICE:${PN} = "connman.service" +SYSTEMD_SERVICE:${PN}-vpn = "connman-vpn.service" +SYSTEMD_SERVICE:${PN}-wait-online = "connman-wait-online.service" ALTERNATIVE_PRIORITY = "100" -ALTERNATIVE_${PN} = "${@bb.utils.contains('DISTRO_FEATURES','systemd','resolv-conf','',d)}" +ALTERNATIVE:${PN} = "${@bb.utils.contains('DISTRO_FEATURES','systemd','resolv-conf','',d)}" ALTERNATIVE_TARGET[resolv-conf] = "${@bb.utils.contains('DISTRO_FEATURES','systemd','${sysconfdir}/resolv-conf.connman','',d)}" ALTERNATIVE_LINK_NAME[resolv-conf] = "${@bb.utils.contains('DISTRO_FEATURES','systemd','${sysconfdir}/resolv.conf','',d)}" -do_install_append() { +do_install:append() { if ${@bb.utils.contains('DISTRO_FEATURES','sysvinit','true','false',d)}; then install -d ${D}${sysconfdir}/init.d install -m 0755 ${WORKDIR}/connman ${D}${sysconfdir}/init.d/connman @@ -100,7 +100,7 @@ do_install_append() { } # These used to be plugins, but now they are core -RPROVIDES_${PN} = "\ +RPROVIDES:${PN} = "\ connman-plugin-loopback \ connman-plugin-ethernet \ ${@bb.utils.contains('PACKAGECONFIG', 'bluetooth','connman-plugin-bluetooth', '', d)} \ @@ -108,7 +108,7 @@ RPROVIDES_${PN} = "\ ${@bb.utils.contains('PACKAGECONFIG', '3g','connman-plugin-ofono', '', d)} \ " -RDEPENDS_${PN} = "\ +RDEPENDS:${PN} = "\ dbus \ " @@ -119,11 +119,11 @@ def add_rdepends(bb, d, file, pkg, depmap, multilib_prefix, add_insane_skip): if plugintype in depmap: rdepends = map(lambda x: multilib_prefix + x, \ depmap[plugintype].split()) - d.setVar("RDEPENDS_%s" % pkg, " ".join(rdepends)) + d.setVar("RDEPENDS:%s" % pkg, " ".join(rdepends)) if add_insane_skip: - d.appendVar("INSANE_SKIP_%s" % pkg, "dev-so") + d.appendVar("INSANE_SKIP:%s" % pkg, "dev-so") -python populate_packages_prepend() { +python populate_packages:prepend() { depmap = dict(pppd="ppp") multilib_prefix = (d.getVar("MLPREFIX") or "") @@ -144,72 +144,72 @@ python populate_packages_prepend() { PACKAGES =+ "${PN}-tools ${PN}-tests ${PN}-client" -FILES_${PN}-tools = "${bindir}/wispr" -RDEPENDS_${PN}-tools ="${PN}" +FILES:${PN}-tools = "${bindir}/wispr" +RDEPENDS:${PN}-tools ="${PN}" -FILES_${PN}-tests = "${bindir}/*-test" +FILES:${PN}-tests = "${bindir}/*-test" -FILES_${PN}-client = "${bindir}/connmanctl" -RDEPENDS_${PN}-client ="${PN}" +FILES:${PN}-client = "${bindir}/connmanctl" +RDEPENDS:${PN}-client ="${PN}" -FILES_${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*.so.* \ +FILES:${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*.so.* \ ${libdir}/connman/plugins \ ${sysconfdir} ${sharedstatedir} ${localstatedir} ${datadir} \ ${base_bindir}/* ${base_sbindir}/* ${base_libdir}/*.so* ${datadir}/${PN} \ ${datadir}/dbus-1/system-services/* \ ${sysconfdir}/tmpfiles.d/connman_resolvconf.conf" -FILES_${PN}-dev += "${libdir}/connman/*/*.la" +FILES:${PN}-dev += "${libdir}/connman/*/*.la" PACKAGES =+ "${PN}-vpn ${PN}-wait-online" -SUMMARY_${PN}-vpn = "A daemon for managing VPN connections within embedded devices" -DESCRIPTION_${PN}-vpn = "The ConnMan VPN provides a daemon for \ +SUMMARY:${PN}-vpn = "A daemon for managing VPN connections within embedded devices" +DESCRIPTION:${PN}-vpn = "The ConnMan VPN provides a daemon for \ managing VPN connections within embedded devices running the Linux \ operating system. The connman-vpnd handles all the VPN connections \ and starts/stops VPN client processes when necessary. The connman-vpnd \ provides a DBus API for managing VPN connections. All the different \ VPN technogies are implemented using plug-ins." -FILES_${PN}-vpn += "${sbindir}/connman-vpnd \ +FILES:${PN}-vpn += "${sbindir}/connman-vpnd \ ${sysconfdir}/dbus-1/system.d/connman-vpn-dbus.conf \ ${datadir}/dbus-1/system-services/net.connman.vpn.service \ ${systemd_unitdir}/system/connman-vpn.service" -SUMMARY_${PN}-wait-online = "A program that will return once ConnMan has connected to a network" -DESCRIPTION_${PN}-wait-online = "A service that can be enabled so that \ +SUMMARY:${PN}-wait-online = "A program that will return once ConnMan has connected to a network" +DESCRIPTION:${PN}-wait-online = "A service that can be enabled so that \ the system waits until a network connection is established." -FILES_${PN}-wait-online += "${sbindir}/connmand-wait-online \ +FILES:${PN}-wait-online += "${sbindir}/connmand-wait-online \ ${systemd_unitdir}/system/connman-wait-online.service" -SUMMARY_${PN}-plugin-vpn-openvpn = "An OpenVPN plugin for ConnMan VPN" -DESCRIPTION_${PN}-plugin-vpn-openvpn = "The ConnMan OpenVPN plugin uses openvpn client \ +SUMMARY:${PN}-plugin-vpn-openvpn = "An OpenVPN plugin for ConnMan VPN" +DESCRIPTION:${PN}-plugin-vpn-openvpn = "The ConnMan OpenVPN plugin uses openvpn client \ to create a VPN connection to OpenVPN server." -FILES_${PN}-plugin-vpn-openvpn += "${libdir}/connman/scripts/openvpn-script \ +FILES:${PN}-plugin-vpn-openvpn += "${libdir}/connman/scripts/openvpn-script \ ${libdir}/connman/plugins-vpn/openvpn.so" -RDEPENDS_${PN}-plugin-vpn-openvpn += "${PN}-vpn" -RRECOMMENDS_${PN} += "${@bb.utils.contains('PACKAGECONFIG','openvpn','${PN}-plugin-vpn-openvpn', '', d)}" +RDEPENDS:${PN}-plugin-vpn-openvpn += "${PN}-vpn" +RRECOMMENDS:${PN} += "${@bb.utils.contains('PACKAGECONFIG','openvpn','${PN}-plugin-vpn-openvpn', '', d)}" -SUMMARY_${PN}-plugin-vpn-vpnc = "A vpnc plugin for ConnMan VPN" -DESCRIPTION_${PN}-plugin-vpn-vpnc = "The ConnMan vpnc plugin uses vpnc client \ +SUMMARY:${PN}-plugin-vpn-vpnc = "A vpnc plugin for ConnMan VPN" +DESCRIPTION:${PN}-plugin-vpn-vpnc = "The ConnMan vpnc plugin uses vpnc client \ to create a VPN connection to Cisco3000 VPN Concentrator." -FILES_${PN}-plugin-vpn-vpnc += "${libdir}/connman/scripts/openconnect-script \ +FILES:${PN}-plugin-vpn-vpnc += "${libdir}/connman/scripts/openconnect-script \ ${libdir}/connman/plugins-vpn/vpnc.so \ ${libdir}/connman/scripts/vpn-script" -RDEPENDS_${PN}-plugin-vpn-vpnc += "${PN}-vpn" -RRECOMMENDS_${PN} += "${@bb.utils.contains('PACKAGECONFIG','vpnc','${PN}-plugin-vpn-vpnc', '', d)}" +RDEPENDS:${PN}-plugin-vpn-vpnc += "${PN}-vpn" +RRECOMMENDS:${PN} += "${@bb.utils.contains('PACKAGECONFIG','vpnc','${PN}-plugin-vpn-vpnc', '', d)}" -SUMMARY_${PN}-plugin-vpn-l2tp = "A L2TP plugin for ConnMan VPN" -DESCRIPTION_${PN}-plugin-vpn-l2tp = "The ConnMan L2TP plugin uses xl2tpd daemon \ +SUMMARY:${PN}-plugin-vpn-l2tp = "A L2TP plugin for ConnMan VPN" +DESCRIPTION:${PN}-plugin-vpn-l2tp = "The ConnMan L2TP plugin uses xl2tpd daemon \ to create a VPN connection to L2TP server." -FILES_${PN}-plugin-vpn-l2tp += "${libdir}/connman/scripts/libppp-plugin.so* \ +FILES:${PN}-plugin-vpn-l2tp += "${libdir}/connman/scripts/libppp-plugin.so* \ ${libdir}/connman/plugins-vpn/l2tp.so" -RDEPENDS_${PN}-plugin-vpn-l2tp += "${PN}-vpn" -RRECOMMENDS_${PN} += "${@bb.utils.contains('PACKAGECONFIG','l2tp','${PN}-plugin-vpn-l2tp', '', d)}" +RDEPENDS:${PN}-plugin-vpn-l2tp += "${PN}-vpn" +RRECOMMENDS:${PN} += "${@bb.utils.contains('PACKAGECONFIG','l2tp','${PN}-plugin-vpn-l2tp', '', d)}" -SUMMARY_${PN}-plugin-vpn-pptp = "A PPTP plugin for ConnMan VPN" -DESCRIPTION_${PN}-plugin-vpn-pptp = "The ConnMan PPTP plugin uses pptp-linux client \ +SUMMARY:${PN}-plugin-vpn-pptp = "A PPTP plugin for ConnMan VPN" +DESCRIPTION:${PN}-plugin-vpn-pptp = "The ConnMan PPTP plugin uses pptp-linux client \ to create a VPN connection to PPTP server." -FILES_${PN}-plugin-vpn-pptp += "${libdir}/connman/scripts/libppp-plugin.so* \ +FILES:${PN}-plugin-vpn-pptp += "${libdir}/connman/scripts/libppp-plugin.so* \ ${libdir}/connman/plugins-vpn/pptp.so" -RDEPENDS_${PN}-plugin-vpn-pptp += "${PN}-vpn" -RRECOMMENDS_${PN} += "${@bb.utils.contains('PACKAGECONFIG','pptp','${PN}-plugin-vpn-pptp', '', d)}" +RDEPENDS:${PN}-plugin-vpn-pptp += "${PN}-vpn" +RRECOMMENDS:${PN} += "${@bb.utils.contains('PACKAGECONFIG','pptp','${PN}-plugin-vpn-pptp', '', d)}" diff --git a/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman_1.39.bb b/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman_1.39.bb index df42e9ffb..9fabe2bbc 100644 --- a/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman_1.39.bb +++ b/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman_1.39.bb @@ -7,9 +7,9 @@ SRC_URI = "${KERNELORG_MIRROR}/linux/network/${BPN}/${BP}.tar.xz \ file://no-version-scripts.patch \ " -SRC_URI_append_libc-musl = " file://0002-resolve-musl-does-not-implement-res_ninit.patch" +SRC_URI:append:libc-musl = " file://0002-resolve-musl-does-not-implement-res_ninit.patch" SRC_URI[sha256sum] = "9f62a7169b7491c670a1ff2e335b0d966308fb2f62e285c781105eb90f181af3" -RRECOMMENDS_${PN} = "connman-conf" -RCONFLICTS_${PN} = "networkmanager" +RRECOMMENDS:${PN} = "connman-conf" +RCONFLICTS:${PN} = "networkmanager" diff --git a/meta-webos-backports/meta-webos-backports-3.2/recipes-devtools/guilder/guider_3.9.7.bb b/meta-webos-backports/meta-webos-backports-3.2/recipes-devtools/guilder/guider_3.9.7.bb index d3e118908..8a29dd4d0 100644 --- a/meta-webos-backports/meta-webos-backports-3.2/recipes-devtools/guilder/guider_3.9.7.bb +++ b/meta-webos-backports/meta-webos-backports-3.2/recipes-devtools/guilder/guider_3.9.7.bb @@ -18,5 +18,5 @@ S = "${WORKDIR}/git" inherit setuptools3 -RDEPENDS_${PN} = "python3 python3-core \ +RDEPENDS:${PN} = "python3 python3-core \ python3-ctypes python3-shell python3-json" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps_3.3.17.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps_3.3.17.bb index 1d08f0167..8b5b4fb7f 100644 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps_3.3.17.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps_3.3.17.bb @@ -24,7 +24,7 @@ S = "${WORKDIR}/git" # Upstream has a custom autogen.sh which invokes po/update-potfiles as they # don't ship a po/POTFILES.in (which is silly). Without that file gettext # doesn't believe po/ is a gettext directory and won't generate po/Makefile. -do_configure_prepend() { +do_configure:prepend() { ( cd ${S} && po/update-potfiles ) } @@ -33,7 +33,7 @@ EXTRA_OECONF = "--enable-skill --disable-modern-top" PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}" PACKAGECONFIG[systemd] = "--with-systemd,--without-systemd,systemd" -do_install_append () { +do_install:append () { install -d ${D}${base_bindir} [ "${bindir}" != "${base_bindir}" ] && for i in ${base_bindir_progs}; do mv ${D}${bindir}/$i ${D}${base_bindir}/$i; done install -d ${D}${base_sbindir} @@ -50,7 +50,7 @@ do_install_append () { fi } -CONFFILES_${PN} = "${sysconfdir}/sysctl.conf" +CONFFILES:${PN} = "${sysconfdir}/sysctl.conf" bindir_progs = "free pkill pmap pgrep pwdx skill snice top uptime w" base_bindir_progs += "kill pidof ps watch" @@ -59,9 +59,9 @@ base_sbindir_progs += "sysctl" ALTERNATIVE_PRIORITY = "200" ALTERNATIVE_PRIORITY[pidof] = "150" -ALTERNATIVE_${PN} = "${bindir_progs} ${base_bindir_progs} ${base_sbindir_progs}" +ALTERNATIVE:${PN} = "${bindir_progs} ${base_bindir_progs} ${base_sbindir_progs}" -ALTERNATIVE_${PN}-doc = "kill.1 uptime.1" +ALTERNATIVE:${PN}-doc = "kill.1 uptime.1" ALTERNATIVE_LINK_NAME[kill.1] = "${mandir}/man1/kill.1" ALTERNATIVE_LINK_NAME[uptime.1] = "${mandir}/man1/uptime.1" @@ -82,22 +82,22 @@ PROCPS_PACKAGES = "${PN}-lib \ ${PN}-sysctl" PACKAGE_BEFORE_PN = "${PROCPS_PACKAGES}" -RDEPENDS_${PN} += "${PROCPS_PACKAGES}" +RDEPENDS:${PN} += "${PROCPS_PACKAGES}" -RDEPENDS_${PN}-ps += "${PN}-lib" -RDEPENDS_${PN}-sysctl += "${PN}-lib" +RDEPENDS:${PN}-ps += "${PN}-lib" +RDEPENDS:${PN}-sysctl += "${PN}-lib" -FILES_${PN}-lib = "${libdir}" -FILES_${PN}-ps = "${base_bindir}/ps.${BPN}" -FILES_${PN}-sysctl = "${base_sbindir}/sysctl.${BPN} ${sysconfdir}/sysctl.conf ${sysconfdir}/sysctl.d" +FILES:${PN}-lib = "${libdir}" +FILES:${PN}-ps = "${base_bindir}/ps.${BPN}" +FILES:${PN}-sysctl = "${base_sbindir}/sysctl.${BPN} ${sysconfdir}/sysctl.conf ${sysconfdir}/sysctl.d" -ALTERNATIVE_${PN}_remove = "ps" -ALTERNATIVE_${PN}_remove = "sysctl" +ALTERNATIVE:${PN}:remove = "ps" +ALTERNATIVE:${PN}:remove = "sysctl" -ALTERNATIVE_${PN}-ps = "ps" +ALTERNATIVE:${PN}-ps = "ps" ALTERNATIVE_TARGET[ps] = "${base_bindir}/ps" ALTERNATIVE_LINK_NAME[ps] = "${base_bindir}/ps" -ALTERNATIVE_${PN}-sysctl = "sysctl" +ALTERNATIVE:${PN}-sysctl = "sysctl" ALTERNATIVE_TARGET[sysctl] = "${base_sbindir}/sysctl" ALTERNATIVE_LINK_NAME[sysctl] = "${base_sbindir}/sysctl" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools_1.18.2.bb index 9fd9e0be9..55bec0adf 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools_1.18.2.bb @@ -15,9 +15,9 @@ SRC_URI = "https://gstreamer.freedesktop.org/src/gst-devtools/gst-devtools-${PV} SRC_URI[sha256sum] = "6ea73d718bf1f9692218540ff88479c51d67c0b477fa56d6812fc7b739d30a56" DEPENDS = "json-glib glib-2.0 glib-2.0-native gstreamer1.0 gstreamer1.0-plugins-base" -RRECOMMENDS_${PN} = "git" +RRECOMMENDS:${PN} = "git" -FILES_${PN} += "${datadir}/gstreamer-1.0/* ${libdir}/gst-validate-launcher/* ${libdir}/gstreamer-1.0/*" +FILES:${PN} += "${datadir}/gstreamer-1.0/* ${libdir}/gst-validate-launcher/* ${libdir}/gstreamer-1.0/*" inherit meson pkgconfig gettext upstream-version-is-even gobject-introspection diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples_1.18.2.bb index 54a4b5df1..77dbf1f4d 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples_1.18.2.bb @@ -19,14 +19,14 @@ UPSTREAM_CHECK_GITTAGREGEX = "(?P\d+\.(\d*[02468])+(\.\d+)+)" ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}" -do_install_append() { +do_install:append() { install -m 0644 -D ${WORKDIR}/gst-player.desktop ${D}${datadir}/applications/gst-player.desktop } -RDEPENDS_${PN} = "gstreamer1.0-plugins-base-playback" -RRECOMMENDS_${PN} = "gstreamer1.0-plugins-base-meta \ +RDEPENDS:${PN} = "gstreamer1.0-plugins-base-playback" +RRECOMMENDS:${PN} = "gstreamer1.0-plugins-base-meta \ gstreamer1.0-plugins-good-meta \ gstreamer1.0-plugins-bad-meta \ ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "gstreamer1.0-libav", "", d)} \ ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "gstreamer1.0-plugins-ugly-meta", "", d)}" -RPROVIDES_${PN} += "gst-player gst-player-bin" +RPROVIDES:${PN} += "gst-player gst-player-bin" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.18.2.bb index b638814aa..20267edce 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.18.2.bb @@ -18,5 +18,5 @@ DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base ffmpeg" inherit meson pkgconfig upstream-version-is-even -FILES_${PN} += "${libdir}/gstreamer-1.0/*.so" -FILES_${PN}-staticdev += "${libdir}/gstreamer-1.0/*.a" +FILES:${PN} += "${libdir}/gstreamer-1.0/*.so" +FILES:${PN}-staticdev += "${libdir}/gstreamer-1.0/*.a" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-meta-base.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-meta-base.bb index 016e17670..57a9adbae 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-meta-base.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-meta-base.bb @@ -18,13 +18,13 @@ PACKAGES = "\ gstreamer1.0-meta-debug \ gstreamer1.0-meta-video" -ALLOW_EMPTY_gstreamer1.0-meta-base = "1" -ALLOW_EMPTY_gstreamer1.0-meta-x11-base = "1" -ALLOW_EMPTY_gstreamer1.0-meta-audio = "1" -ALLOW_EMPTY_gstreamer1.0-meta-debug = "1" -ALLOW_EMPTY_gstreamer1.0-meta-video = "1" +ALLOW_EMPTY:gstreamer1.0-meta-base = "1" +ALLOW_EMPTY:gstreamer1.0-meta-x11-base = "1" +ALLOW_EMPTY:gstreamer1.0-meta-audio = "1" +ALLOW_EMPTY:gstreamer1.0-meta-debug = "1" +ALLOW_EMPTY:gstreamer1.0-meta-video = "1" -RDEPENDS_gstreamer1.0-meta-base = "\ +RDEPENDS:gstreamer1.0-meta-base = "\ ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'gstreamer1.0-meta-x11-base', '', d)} \ gstreamer1.0 \ gstreamer1.0-plugins-base-playback \ @@ -39,11 +39,11 @@ RDEPENDS_gstreamer1.0-meta-base = "\ gstreamer1.0-plugins-good-autodetect \ gstreamer1.0-plugins-good-soup" -RRECOMMENDS_gstreamer1.0-meta-x11-base = "\ +RRECOMMENDS:gstreamer1.0-meta-x11-base = "\ gstreamer1.0-plugins-base-ximagesink \ gstreamer1.0-plugins-base-xvimagesink" -RDEPENDS_gstreamer1.0-meta-audio = "\ +RDEPENDS:gstreamer1.0-meta-audio = "\ gstreamer1.0-meta-base \ gstreamer1.0-plugins-base-vorbis \ gstreamer1.0-plugins-base-ogg \ @@ -51,18 +51,18 @@ RDEPENDS_gstreamer1.0-meta-audio = "\ gstreamer1.0-plugins-good-flac \ ${COMMERCIAL_AUDIO_PLUGINS}" -RDEPENDS_gstreamer1.0-meta-debug = "\ +RDEPENDS:gstreamer1.0-meta-debug = "\ gstreamer1.0-meta-base \ gstreamer1.0-plugins-good-debug \ gstreamer1.0-plugins-base-audiotestsrc \ gstreamer1.0-plugins-base-videotestsrc" -RDEPENDS_gstreamer1.0-meta-video = "\ +RDEPENDS:gstreamer1.0-meta-video = "\ gstreamer1.0-meta-base \ gstreamer1.0-plugins-good-avi \ gstreamer1.0-plugins-good-matroska \ gstreamer1.0-plugins-base-theora \ ${COMMERCIAL_VIDEO_PLUGINS}" -RRECOMMENDS_gstreamer1.0-meta-video = "\ +RRECOMMENDS:gstreamer1.0-meta-video = "\ gstreamer1.0-meta-audio" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.18.2.bb index 686fcc265..5a5396954 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.18.2.bb @@ -39,8 +39,8 @@ set_omx_core_name() { } do_install[postfuncs] += " set_omx_core_name " -FILES_${PN} += "${libdir}/gstreamer-1.0/*.so" -FILES_${PN}-staticdev += "${libdir}/gstreamer-1.0/*.a" +FILES:${PN} += "${libdir}/gstreamer-1.0/*.so" +FILES:${PN}-staticdev += "${libdir}/gstreamer-1.0/*.a" VIRTUAL-RUNTIME_libomxil ?= "libomxil" -RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_libomxil}" +RDEPENDS:${PN} = "${VIRTUAL-RUNTIME_libomxil}" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.2.bb index 6d0c988b7..8e0cb7eb6 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.2.bb @@ -137,11 +137,11 @@ EXTRA_OEMESON += " \ export OPENCV_PREFIX = "${STAGING_DIR_TARGET}${prefix}" -ARM_INSTRUCTION_SET_armv4 = "arm" -ARM_INSTRUCTION_SET_armv5 = "arm" +ARM_INSTRUCTION_SET:armv4 = "arm" +ARM_INSTRUCTION_SET:armv5 = "arm" -FILES_${PN}-freeverb += "${datadir}/gstreamer-1.0/presets/GstFreeverb.prs" -FILES_${PN}-opencv += "${datadir}/gst-plugins-bad/1.0/opencv*" -FILES_${PN}-transcode += "${datadir}/gstreamer-1.0/encoding-profiles" -FILES_${PN}-voamrwbenc += "${datadir}/gstreamer-1.0/presets/GstVoAmrwbEnc.prs" +FILES:${PN}-freeverb += "${datadir}/gstreamer-1.0/presets/GstFreeverb.prs" +FILES:${PN}-opencv += "${datadir}/gst-plugins-bad/1.0/opencv*" +FILES:${PN}-transcode += "${datadir}/gstreamer-1.0/encoding-profiles" +FILES:${PN}-voamrwbenc += "${datadir}/gstreamer-1.0/presets/GstVoAmrwbEnc.prs" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.2.bb index 531d577b0..a40e8aec2 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.2.bb @@ -63,11 +63,11 @@ PACKAGECONFIG[gbm] = ",,virtual/libgbm libgudev libdrm" PACKAGECONFIG[wayland] = ",,wayland-native wayland wayland-protocols libdrm" PACKAGECONFIG[dispmanx] = ",,virtual/libomxil" -OPENGL_WINSYS_append = "${@bb.utils.contains('PACKAGECONFIG', 'x11', ' x11', '', d)}" -OPENGL_WINSYS_append = "${@bb.utils.contains('PACKAGECONFIG', 'gbm', ' gbm', '', d)}" -OPENGL_WINSYS_append = "${@bb.utils.contains('PACKAGECONFIG', 'wayland', ' wayland', '', d)}" -OPENGL_WINSYS_append = "${@bb.utils.contains('PACKAGECONFIG', 'dispmanx', ' dispmanx', '', d)}" -OPENGL_WINSYS_append = "${@bb.utils.contains('PACKAGECONFIG', 'egl', ' egl', '', d)}" +OPENGL_WINSYS:append = "${@bb.utils.contains('PACKAGECONFIG', 'x11', ' x11', '', d)}" +OPENGL_WINSYS:append = "${@bb.utils.contains('PACKAGECONFIG', 'gbm', ' gbm', '', d)}" +OPENGL_WINSYS:append = "${@bb.utils.contains('PACKAGECONFIG', 'wayland', ' wayland', '', d)}" +OPENGL_WINSYS:append = "${@bb.utils.contains('PACKAGECONFIG', 'dispmanx', ' dispmanx', '', d)}" +OPENGL_WINSYS:append = "${@bb.utils.contains('PACKAGECONFIG', 'egl', ' egl', '', d)}" EXTRA_OEMESON += " \ -Ddoc=disabled \ @@ -77,8 +77,8 @@ EXTRA_OEMESON += " \ ${@get_opengl_cmdline_list('gl_winsys', d.getVar('OPENGL_WINSYS'), d)} \ " -FILES_${PN}-dev += "${libdir}/gstreamer-1.0/include/gst/gl/gstglconfig.h" -FILES_${MLPREFIX}libgsttag-1.0 += "${datadir}/gst-plugins-base/1.0/license-translations.dict" +FILES:${PN}-dev += "${libdir}/gstreamer-1.0/include/gst/gl/gstglconfig.h" +FILES:${MLPREFIX}libgsttag-1.0 += "${datadir}/gst-plugins-base/1.0/license-translations.dict" def get_opengl_cmdline_list(switch_name, options, d): selected_options = [] diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc index dba96e0f6..4f3cc1f8d 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc @@ -21,7 +21,7 @@ GSTREAMER_ORC ?= "orc" # workaround to disable orc on mips to fix the build failure # {standard input}: Assembler messages: # {standard input}:46587: Error: branch out of range -GSTREAMER_ORC_mips = "" +GSTREAMER_ORC:mips = "" PACKAGECONFIG[orc] = "-Dorc=enabled,-Dorc=disabled,orc orc-native" # TODO: put this in a gettext.bbclass patch (with variables to allow for diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.2.bb index 2e076bf88..7288adc3a 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.2.bb @@ -13,8 +13,8 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \ file://gst/replaygain/rganalysis.c;beginline=1;endline=23;md5=b60ebefd5b2f5a8e0cab6bfee391a5fe" DEPENDS += "gstreamer1.0-plugins-base libcap zlib" -RPROVIDES_${PN}-pulseaudio += "${PN}-pulse" -RPROVIDES_${PN}-soup += "${PN}-souphttpsrc" +RPROVIDES:${PN}-pulseaudio += "${PN}-pulse" +RPROVIDES:${PN}-soup += "${PN}-souphttpsrc" PACKAGECONFIG ??= " \ ${GSTREAMER_ORC} \ @@ -69,4 +69,4 @@ EXTRA_OEMESON += " \ -Dwaveform=disabled \ " -FILES_${PN}-equalizer += "${datadir}/gstreamer-1.0/presets/*.prs" +FILES:${PN}-equalizer += "${datadir}/gstreamer-1.0/presets/*.prs" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc index 9a7a1b6af..1e90d84d0 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc @@ -6,8 +6,8 @@ # This is mainly used by the gstreamer1.0-plugins-* plugin set recipes, # but can be used in any recipe that produces GStreamer plugins. -PACKAGESPLITFUNCS_prepend = " split_gstreamer10_packages " -PACKAGESPLITFUNCS_append = " set_gstreamer10_metapkg_rdepends " +PACKAGESPLITFUNCS:prepend = " split_gstreamer10_packages " +PACKAGESPLITFUNCS:append = " set_gstreamer10_metapkg_rdepends " python split_gstreamer10_packages () { gst_libdir = d.expand('${libdir}/gstreamer-1.0') @@ -33,8 +33,8 @@ python set_gstreamer10_metapkg_rdepends () { pn = d.getVar('PN') metapkg = pn + '-meta' - d.setVar('ALLOW_EMPTY_' + metapkg, "1") - d.setVar('FILES_' + metapkg, "") + d.setVar('ALLOW_EMPTY:' + metapkg, "1") + d.setVar('FILES:' + metapkg, "") blacklist = [ pn, pn + '-meta' ] metapkg_rdepends = [] pkgdest = d.getVar('PKGDEST') @@ -51,20 +51,20 @@ python set_gstreamer10_metapkg_rdepends () { is_empty = len(dir_contents) == 0 if not is_empty: metapkg_rdepends.append(pkg) - d.setVar('RDEPENDS_' + metapkg, ' '.join(metapkg_rdepends)) - d.setVar('DESCRIPTION_' + metapkg, pn + ' meta package') + d.setVar('RDEPENDS:' + metapkg, ' '.join(metapkg_rdepends)) + d.setVar('DESCRIPTION:' + metapkg, pn + ' meta package') } # each plugin-dev depends on PN-dev, plugin-staticdev on PN-staticdev # so we need them even when empty (like in gst-plugins-good case) -ALLOW_EMPTY_${PN} = "1" -ALLOW_EMPTY_${PN}-dev = "1" -ALLOW_EMPTY_${PN}-staticdev = "1" +ALLOW_EMPTY:${PN} = "1" +ALLOW_EMPTY:${PN}-dev = "1" +ALLOW_EMPTY:${PN}-staticdev = "1" PACKAGES += "${PN}-apps ${PN}-meta ${PN}-glib" -FILES_${PN} = "" -FILES_${PN}-apps = "${bindir}" -FILES_${PN}-glib = "${datadir}/glib-2.0" +FILES:${PN} = "" +FILES:${PN}-apps = "${bindir}" +FILES:${PN}-glib = "${datadir}/glib-2.0" -RRECOMMENDS_${PN} += "${PN}-meta" +RRECOMMENDS:${PN} += "${PN}-meta" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.18.2.bb index e482aa10b..bb8fe6853 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.18.2.bb @@ -35,5 +35,5 @@ EXTRA_OEMESON += " \ -Dsidplay=disabled \ " -FILES_${PN}-amrnb += "${datadir}/gstreamer-1.0/presets/GstAmrnbEnc.prs" -FILES_${PN}-x264 += "${datadir}/gstreamer-1.0/presets/GstX264Enc.prs" +FILES:${PN}-amrnb += "${datadir}/gstreamer-1.0/presets/GstAmrnbEnc.prs" +FILES:${PN}-x264 += "${datadir}/gstreamer-1.0/presets/GstX264Enc.prs" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-python_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-python_1.18.2.bb index 5711744b4..f0b1c1337 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-python_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-python_1.18.2.bb @@ -9,7 +9,7 @@ SRC_URI = "https://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.x SRC_URI[sha256sum] = "e19d0f760b353e88161b3712193cffbd79bf1314418da792b5fec4d8ecef389c" DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base python3-pygobject" -RDEPENDS_${PN} += "gstreamer1.0 gstreamer1.0-plugins-base python3-pygobject" +RDEPENDS:${PN} += "gstreamer1.0 gstreamer1.0-plugins-base python3-pygobject" PNREAL = "gst-python" @@ -17,6 +17,6 @@ S = "${WORKDIR}/${PNREAL}-${PV}" # gobject-introspection is mandatory and cannot be configured REQUIRED_DISTRO_FEATURES = "gobject-introspection-data" -UNKNOWN_CONFIGURE_WHITELIST_append = " introspection" +UNKNOWN_CONFIGURE_WHITELIST:append = " introspection" inherit meson pkgconfig distutils3-base upstream-version-is-even gobject-introspection features_check diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.18.2.bb index f237191d5..f670e8f50 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.18.2.bb @@ -46,7 +46,7 @@ PACKAGECONFIG[glx] = "-Dwith_glx=yes,-Dwith_glx=no,virtual/libgl" PACKAGECONFIG[wayland] = "-Dwith_wayland=yes,-Dwith_wayland=no,wayland-native wayland wayland-protocols" PACKAGECONFIG[x11] = "-Dwith_x11=yes,-Dwith_x11=no,virtual/libx11 libxrandr libxrender" -FILES_${PN} += "${libdir}/gstreamer-*/*.so" -FILES_${PN}-dbg += "${libdir}/gstreamer-*/.debug" -FILES_${PN}-dev += "${libdir}/gstreamer-*/*.a" -FILES_${PN}-tests = "${bindir}/*" +FILES:${PN} += "${libdir}/gstreamer-*/*.so" +FILES:${PN}-dbg += "${libdir}/gstreamer-*/.debug" +FILES:${PN}-dev += "${libdir}/gstreamer-*/*.a" +FILES:${PN}-tests = "${bindir}/*" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0_1.18.2.bb index cce0f9922..dc7009d2f 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0_1.18.2.bb @@ -59,10 +59,10 @@ GIR_MESON_DISABLE_FLAG = "disabled" PACKAGES += "${PN}-bash-completion" # Add the core element plugins to the main package -FILES_${PN} += "${libdir}/gstreamer-1.0/*.so" -FILES_${PN}-dev += "${libdir}/gstreamer-1.0/*.a ${libdir}/gstreamer-1.0/include" -FILES_${PN}-bash-completion += "${datadir}/bash-completion/completions/ ${datadir}/bash-completion/helpers/gst*" -FILES_${PN}-dbg += "${datadir}/gdb ${datadir}/gstreamer-1.0/gdb" +FILES:${PN} += "${libdir}/gstreamer-1.0/*.so" +FILES:${PN}-dev += "${libdir}/gstreamer-1.0/*.a ${libdir}/gstreamer-1.0/include" +FILES:${PN}-bash-completion += "${datadir}/bash-completion/completions/ ${datadir}/bash-completion/helpers/gst*" +FILES:${PN}-dbg += "${datadir}/gdb ${datadir}/gstreamer-1.0/gdb" CVE_PRODUCT = "gstreamer" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-support/libsrtp/libsrtp_2.3.0.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-support/libsrtp/libsrtp_2.3.0.bb index c8dce5150..ccb1a54ba 100644 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-support/libsrtp/libsrtp_2.3.0.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-support/libsrtp/libsrtp_2.3.0.bb @@ -13,9 +13,9 @@ inherit autotools pkgconfig EXTRA_OEMAKE += "shared_library" -do_configure_prepend() { +do_configure:prepend() { cp ${STAGING_DATADIR_NATIVE}/automake-*/ar-lib ${S} } -ALLOW_EMPTY_${PN} = "1" +ALLOW_EMPTY:${PN} = "1" diff --git a/meta-webos-iot/classes/webos_iot.bbclass b/meta-webos-iot/classes/webos_iot.bbclass index 29cb23103..f3a306cb9 100644 --- a/meta-webos-iot/classes/webos_iot.bbclass +++ b/meta-webos-iot/classes/webos_iot.bbclass @@ -3,6 +3,6 @@ # IMAGE_FEATURES controls the contents of webOS IoT images FEATURE_PACKAGES_webos-iot = " packagegroup-webos-iot" -WEBOS_IMAGE_BASE_INSTALL_append = "${FEATURE_PACKAGES_webos-iot}" +WEBOS_IMAGE_BASE_INSTALL:append = "${FEATURE_PACKAGES_webos-iot}" inherit webos_iot_core diff --git a/meta-webos-iot/classes/webos_iot_core.bbclass b/meta-webos-iot/classes/webos_iot_core.bbclass index 4e880b119..d5da05691 100644 --- a/meta-webos-iot/classes/webos_iot_core.bbclass +++ b/meta-webos-iot/classes/webos_iot_core.bbclass @@ -9,9 +9,9 @@ FEATURE_PACKAGES_webos-iot-core = " packagegroup-webos-iot-core" FEATURE_PACKAGES_webos-iot-bsp = " packagegroup-webos-iot-bsp" -WEBOS_IMAGE_BASE_INSTALL_remove = "${FEATURE_PACKAGES_webos-extended}" -WEBOS_IMAGE_BASE_INSTALL_append = "${FEATURE_PACKAGES_webos-iot-core}" -WEBOS_IMAGE_BASE_INSTALL_append = "${FEATURE_PACKAGES_webos-iot-bsp}" +WEBOS_IMAGE_BASE_INSTALL:remove = "${FEATURE_PACKAGES_webos-extended}" +WEBOS_IMAGE_BASE_INSTALL:append = "${FEATURE_PACKAGES_webos-iot-core}" +WEBOS_IMAGE_BASE_INSTALL:append = "${FEATURE_PACKAGES_webos-iot-bsp}" inherit webos_image inherit webos_prerelease_dep diff --git a/meta-webos-iot/classes/webos_iot_image.bbclass b/meta-webos-iot/classes/webos_iot_image.bbclass index ebccf6659..b7d02bec1 100644 --- a/meta-webos-iot/classes/webos_iot_image.bbclass +++ b/meta-webos-iot/classes/webos_iot_image.bbclass @@ -10,8 +10,8 @@ FEATURE_PACKAGES_webos-iot-core = "packagegroup-webos-iot-core" FEATURE_PACKAGES_webos-iot-devtools = "packagegroup-webos-iot-devtools" -WEBOS_IMAGE_BASE_INSTALL_remove = "${FEATURE_PACKAGES_webos-extended}" -WEBOS_IMAGE_BASE_INSTALL_append = "${FEATURE_PACKAGES_webos-iot-core}" +WEBOS_IMAGE_BASE_INSTALL:remove = "${FEATURE_PACKAGES_webos-extended}" +WEBOS_IMAGE_BASE_INSTALL:append = "${FEATURE_PACKAGES_webos-iot-core}" inherit webos_image inherit webos_prerelease_dep diff --git a/meta-webos-iot/recipes-core/initscripts/webos-initscripts.bbappend b/meta-webos-iot/recipes-core/initscripts/webos-initscripts.bbappend index 272032071..e1b8cc442 100644 --- a/meta-webos-iot/recipes-core/initscripts/webos-initscripts.bbappend +++ b/meta-webos-iot/recipes-core/initscripts/webos-initscripts.bbappend @@ -1,12 +1,12 @@ # Copyright (c) 2020-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "iot1" +EXTENDPRAUTO:append = "iot1" #LICENSE = "Apache-2.0 & MIT" #LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" # Needed only for old Yocto 2.2 -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" WEBOS_VERSION = "3.0.0-56_93963a4f8b91dbaffc412bdf7ec5397bc41df71f" diff --git a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-devel.bbappend b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-devel.bbappend index 96a4584d2..75275dc66 100644 --- a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-devel.bbappend +++ b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-devel.bbappend @@ -1,3 +1,3 @@ # Copyright (c) 2020 LG Electronics, Inc. -RDEPENDS_${PN}_remove = "qml-webos-framework-tools" +RDEPENDS:${PN}:remove = "qml-webos-framework-tools" diff --git a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-bsp.bb b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-bsp.bb index a76eccb7d..08afc7ecc 100644 --- a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-bsp.bb +++ b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-bsp.bb @@ -4,7 +4,7 @@ DESCRIPTION = "meta-webos-iot components used in webOS OSE" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" -# You don't need to change this value when you're changing just RDEPENDS_${PN} variable. +# You don't need to change this value when you're changing just RDEPENDS:${PN} variable. PR = "r0" PACKAGE_ARCH = "${MACHINE_ARCH}" diff --git a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-core.bb b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-core.bb index 5a17abc73..26fc8eb86 100644 --- a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-core.bb +++ b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-core.bb @@ -4,7 +4,7 @@ DESCRIPTION = "meta-webos-iot components used in webOS OSE" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" -# You don't need to change this value when you're changing just RDEPENDS_${PN} variable. +# You don't need to change this value when you're changing just RDEPENDS:${PN} variable. PR = "r0" PACKAGE_ARCH = "${MACHINE_ARCH}" @@ -17,7 +17,7 @@ VIRTUAL-RUNTIME_nyx_modules_providers ??= "\ nyx-modules-qemux86 \ " -RDEPENDS_${PN} = " \ +RDEPENDS:${PN} = " \ pmklogd \ pmlogctl \ pmlogdaemon \ @@ -36,6 +36,6 @@ WEBOS_FOSS_MISSING_FROM_RDEPENDS = " \ ${@'systemd-analyze' if '${VIRTUAL-RUNTIME_init_manager}' == 'systemd' else 'sysvinit-pidof'} \ " -RDEPENDS_${PN} += "${MACHINE_EXTRA_RDEPENDS}" -RRECOMMENDS_${PN} += "${MACHINE_EXTRA_RRECOMMENDS}" +RDEPENDS:${PN} += "${MACHINE_EXTRA_RDEPENDS}" +RRECOMMENDS:${PN} += "${MACHINE_EXTRA_RRECOMMENDS}" diff --git a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-devtools.bb b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-devtools.bb index e62b7dcbb..f7420af84 100644 --- a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-devtools.bb +++ b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-devtools.bb @@ -4,14 +4,14 @@ DESCRIPTION = "meta-webos-iot components used in webOS OSE" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" -# You don't need to change this value when you're changing just RDEPENDS_${PN} variable. +# You don't need to change this value when you're changing just RDEPENDS:${PN} variable. PR = "r0" PACKAGE_ARCH = "${MACHINE_ARCH}" inherit packagegroup inherit webos_machine_impl_dep -RDEPENDS_${PN} = " \ +RDEPENDS:${PN} = " \ uftrace \ libelf \ less \ diff --git a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot.bb b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot.bb index 2eb21f114..aa6b25322 100644 --- a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot.bb +++ b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot.bb @@ -4,7 +4,7 @@ DESCRIPTION = "meta-webos-iot components used in webOS OSE" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" -# You don't need to change this value when you're changing just RDEPENDS_${PN} variable. +# You don't need to change this value when you're changing just RDEPENDS:${PN} variable. PR = "r0" PACKAGE_ARCH = "${MACHINE_ARCH}" @@ -13,24 +13,24 @@ inherit webos_machine_impl_dep # VIRTUAL-RUNTIME_ai : copied from meta-webos VIRTUAL-RUNTIME_ai ?= "" -VIRTUAL-RUNTIME_ai_raspberrypi3 = "com.webos.service.ai" -VIRTUAL-RUNTIME_ai_raspberrypi4 = "com.webos.service.ai" +VIRTUAL-RUNTIME_ai:raspberrypi3 = "com.webos.service.ai" +VIRTUAL-RUNTIME_ai:raspberrypi4 = "com.webos.service.ai" # There is only rpi-32bit keyword detection library available.(https://github.com/Kitt-AI/snowboy/tree/master/lib) # It seems to be a library for arm-64bit(https://github.com/Kitt-AI/snowboy/tree/master/lib/aarch64-ubuntu1604), # but it has not been verified on webOS rpi64 which cannot boot yet. -VIRTUAL-RUNTIME_ai_raspberrypi3-64 = "" -VIRTUAL-RUNTIME_ai_raspberrypi4-64 = "" +VIRTUAL-RUNTIME_ai:raspberrypi3-64 = "" +VIRTUAL-RUNTIME_ai:raspberrypi4-64 = "" VIRTUAL-RUNTIME_com.example.service.iotivity ?= "com.example.service.iotivity" -VIRTUAL-RUNTIME_com.example.service.iotivity_armv4 = "" -VIRTUAL-RUNTIME_com.example.service.iotivity_armv5 = "" +VIRTUAL-RUNTIME_com.example.service.iotivity:armv4 = "" +VIRTUAL-RUNTIME_com.example.service.iotivity:armv5 = "" VIRTUAL-RUNTIME_org.ocf.webossample ?= "org.ocf.webossample.occlientbasicops org.ocf.webossample.ocserverbasicops" -VIRTUAL-RUNTIME_org.ocf.webossample_armv4 = "" -VIRTUAL-RUNTIME_org.ocf.webossample_armv5 = "" -VIRTUAL-RUNTIME_org.ocf.webossample_x86-64 = "" +VIRTUAL-RUNTIME_org.ocf.webossample:armv4 = "" +VIRTUAL-RUNTIME_org.ocf.webossample:armv5 = "" +VIRTUAL-RUNTIME_org.ocf.webossample:x86-64 = "" -RDEPENDS_${PN} = " \ +RDEPENDS:${PN} = " \ activitymanager \ audiod \ bootd \ diff --git a/meta-webos-raspberrypi/classes/sdcard_image-rpi.bbclass b/meta-webos-raspberrypi/classes/sdcard_image-rpi.bbclass index 67196b1dc..47dcf53a2 100644 --- a/meta-webos-raspberrypi/classes/sdcard_image-rpi.bbclass +++ b/meta-webos-raspberrypi/classes/sdcard_image-rpi.bbclass @@ -26,15 +26,15 @@ inherit image_types # 0 4MiB 4MiB + 40MiB 4MiB + 40Mib + SDIMG_ROOTFS # This image depends on the rootfs image -IMAGE_TYPEDEP_rpi-sdimg = "${SDIMG_ROOTFS_TYPE}" +IMAGE_TYPEDEP:rpi-sdimg = "${SDIMG_ROOTFS_TYPE}" # Set kernel and boot loader IMAGE_BOOTLOADER ?= "bootfiles" # Kernel image name -SDIMG_KERNELIMAGE_raspberrypi ?= "kernel.img" -SDIMG_KERNELIMAGE_raspberrypi2 ?= "kernel7.img" -SDIMG_KERNELIMAGE_raspberrypi3-64 ?= "kernel8.img" +SDIMG_KERNELIMAGE:raspberrypi ?= "kernel.img" +SDIMG_KERNELIMAGE:raspberrypi2 ?= "kernel7.img" +SDIMG_KERNELIMAGE:raspberrypi3-64 ?= "kernel8.img" # Boot partition volume id BOOTDD_VOLUME_ID ?= "${MACHINE}" @@ -54,7 +54,7 @@ inherit kernel-artifact-names RPI_SDIMG_EXTRA_DEPENDS ?= "" -do_image_rpi_sdimg[depends] = " \ +do_image:rpi_sdimg[depends] = " \ parted-native:do_populate_sysroot \ mtools-native:do_populate_sysroot \ dosfstools-native:do_populate_sysroot \ @@ -67,7 +67,7 @@ do_image_rpi_sdimg[depends] = " \ ${RPI_SDIMG_EXTRA_DEPENDS} \ " -do_image_rpi_sdimg[recrdeps] = "do_build" +do_image:rpi_sdimg[recrdeps] = "do_build" # SD card image name SDIMG = "${IMGDEPLOYDIR}/${IMAGE_NAME}.rootfs.rpi-sdimg" @@ -92,7 +92,7 @@ def split_overlays(d, out, ver=None): return overlays -IMAGE_CMD_rpi-sdimg () { +IMAGE_CMD:rpi-sdimg () { # Align partitions BOOT_SPACE_ALIGNED=$(expr ${BOOT_SPACE} + ${IMAGE_ROOTFS_ALIGNMENT} - 1) diff --git a/meta-webos-raspberrypi/classes/sota_webos-rpi.bbclass b/meta-webos-raspberrypi/classes/sota_webos-rpi.bbclass index 674d2b41d..d452d12d1 100644 --- a/meta-webos-raspberrypi/classes/sota_webos-rpi.bbclass +++ b/meta-webos-raspberrypi/classes/sota_webos-rpi.bbclass @@ -1,26 +1,26 @@ # Copyright (c) 2019 LG Electronics, Inc. -# Rather than using sota_raspberrypi.bbclass on meta-updater/classes, +# Rather than using sota:raspberrypi.bbclass on meta-updater/classes, # this setting keeps the boot partition then original one as possible. # -# Differences (between sota_raspberrypi.bbclass) +# Differences (between sota:raspberrypi.bbclass) # - Don't use 'fitImage' kernel type for '/boot/ostree/webos-{hash}/vmlinuz'. # - So, need to use initramfs on the u-boot directly. (cpio.gz => cpio.gz.u-boot) # - Copy DTBs, DTBOs to 1st partition (like original rpi image) INITRAMFS_FSTYPES = "cpio.gz.u-boot" OSTREE_KERNEL = "${KERNEL_IMAGETYPE}" -OSTREE_KERNEL_ARGS_sota = "" +OSTREE_KERNEL_ARGS:sota = "" # enable u-boot and set variables -RPI_USE_U_BOOT_sota = "1" +RPI_USE_U_BOOT:sota = "1" PREFERRED_PROVIDER_virtual/bootloader_sota ?= "u-boot" OSTREE_BOOTLOADER = "u-boot" -UBOOT_ENTRYPOINT_sota = "0x00008000" -SOTA_CLIENT_FEATURES_append = " ubootenv" +UBOOT_ENTRYPOINT:sota = "0x00008000" +SOTA_CLIENT_FEATURES:append = " ubootenv" # wic image used by ostree -IMAGE_FSTYPES_remove_sota = "rpi-sdimg" +IMAGE_FSTYPES:remove:sota = "rpi-sdimg" # kernel image handled by ostree -IMAGE_BOOT_FILES_remove_sota = "${KERNEL_IMAGETYPE}" +IMAGE_BOOT_FILES:remove:sota = "${KERNEL_IMAGETYPE}" diff --git a/meta-webos-raspberrypi/conf/machine/include/webos-rpi.inc b/meta-webos-raspberrypi/conf/machine/include/webos-rpi.inc index 8b6439953..bcfbc6edf 100644 --- a/meta-webos-raspberrypi/conf/machine/include/webos-rpi.inc +++ b/meta-webos-raspberrypi/conf/machine/include/webos-rpi.inc @@ -24,9 +24,9 @@ PNBLACKLIST[omxplayer] ?= "not compatible with webOS Open components" PNBLACKLIST[packagegroup-rpi-test] ?= "rdepends on omxplayer" PNBLACKLIST[rpi-test-image] ?= "rdepends on packagegroup-rpi-test" -MACHINE_EXTRA_RRECOMMENDS_remove = "kernel-modules" -MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS_remove = "kernel-modules" -MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS_append = " ${RPI_KERNEL_MODULES}" +MACHINE_EXTRA_RRECOMMENDS:remove = "kernel-modules" +MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS:remove = "kernel-modules" +MACHINE_ESSENTIAL_EXTRA_RRECOMMENDS:append = " ${RPI_KERNEL_MODULES}" RPI_KERNEL_MODULES = " \ kernel-module-bcm2835-gpiomem \ kernel-module-bcm2835-wdt \ @@ -51,7 +51,7 @@ RPI_KERNEL_MODULES = " \ " # Few more modules which are automatically loaded on # raspberrypi4 when all kernel-modules are installed -RPI_KERNEL_MODULES_append_raspberrypi4 = " \ +RPI_KERNEL_MODULES:append:raspberrypi4 = " \ kernel-module-8021q \ kernel-module-bcm2835-codec \ kernel-module-bcm2835-v4l2 \ @@ -70,12 +70,12 @@ RPI_KERNEL_MODULES_append_raspberrypi4 = " \ kernel-module-v3d \ " -KERNEL_MODULE_AUTOLOAD_append = " uinput bridge vc4" +KERNEL_MODULE_AUTOLOAD:append = " uinput bridge vc4" # Disabling U-Boot until IP address conflict and ALSA issues resolved (PLAT-46515) # RPI_USE_U_BOOT = "1" # Enable only for raspberrypi3-64 -RPI_USE_U_BOOT_raspberrypi3-64 = "1" +RPI_USE_U_BOOT:raspberrypi3-64 = "1" # Always deploy the VFAT partition SDIMG_VFAT_DEPLOY = "1" @@ -90,7 +90,7 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES = "SPP GATT FTP OPP A2DP" # Use ext4 as a uSD rootfs type and don't build ext3 SDIMG_ROOTFS_TYPE = "ext4" -IMAGE_FSTYPES_remove = "ext3" +IMAGE_FSTYPES:remove = "ext3" # OSTree target -SOTA_MACHINE_rpi = "webos-rpi" +SOTA_MACHINE:rpi = "webos-rpi" diff --git a/meta-webos-raspberrypi/conf/machine/raspberrypi3-64.conf b/meta-webos-raspberrypi/conf/machine/raspberrypi3-64.conf index 57456ab13..7dc0b4a80 100644 --- a/meta-webos-raspberrypi/conf/machine/raspberrypi3-64.conf +++ b/meta-webos-raspberrypi/conf/machine/raspberrypi3-64.conf @@ -25,7 +25,7 @@ RPI_KERNEL_DEVICETREE = " \ SERIAL_CONSOLES ?= "115200;ttyS0" UBOOT_MACHINE = "rpi_3_config" -MACHINE_FEATURES_append = " vc4graphics" +MACHINE_FEATURES:append = " vc4graphics" # When u-boot is enabled we need to use the "Image" format and the "booti" # command to load the kernel diff --git a/meta-webos-raspberrypi/conf/machine/raspberrypi4-64.conf b/meta-webos-raspberrypi/conf/machine/raspberrypi4-64.conf index 9a67288df..06615dd71 100644 --- a/meta-webos-raspberrypi/conf/machine/raspberrypi4-64.conf +++ b/meta-webos-raspberrypi/conf/machine/raspberrypi4-64.conf @@ -25,7 +25,7 @@ SDIMG_KERNELIMAGE ?= "kernel8.img" SERIAL_CONSOLES ?= "115200;ttyS0" UBOOT_MACHINE = "rpi_4_config" -MACHINE_FEATURES_append = " vc4graphics" +MACHINE_FEATURES:append = " vc4graphics" VC4DTBO ?= "vc4-fkms-v3d" diff --git a/meta-webos-raspberrypi/conf/machine/raspberrypi4.conf b/meta-webos-raspberrypi/conf/machine/raspberrypi4.conf index e882cb62c..a846faa2f 100644 --- a/meta-webos-raspberrypi/conf/machine/raspberrypi4.conf +++ b/meta-webos-raspberrypi/conf/machine/raspberrypi4.conf @@ -21,7 +21,7 @@ SDIMG_KERNELIMAGE ?= "kernel7l.img" UBOOT_MACHINE = "rpi_4_32b_config" SERIAL_CONSOLES ?= "115200;ttyS0" -MACHINE_FEATURES_append = " vc4graphics" +MACHINE_FEATURES:append = " vc4graphics" VC4DTBO ?= "vc4-fkms-v3d" ARMSTUB ?= "armstub7.bin" diff --git a/meta-webos-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bbappend b/meta-webos-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bbappend index da0622a4f..0680163de 100644 --- a/meta-webos-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bbappend +++ b/meta-webos-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bbappend @@ -1,13 +1,13 @@ # Copyright (c) 2017-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosrpi10" +EXTENDPRAUTO:append = "webosrpi10" -do_deploy_append() { +do_deploy:append() { echo "gpu_mem=300" >> ${DEPLOYDIR}/${BOOTFILES_DIR_NAME}/config.txt echo "dtparam=audio=on" >> ${DEPLOYDIR}/${BOOTFILES_DIR_NAME}/config.txt } -do_deploy_append_raspberrypi4() { +do_deploy:append:raspberrypi4() { echo >> ${DEPLOYDIR}/${BOOTFILES_DIR_NAME}/config.txt echo "[pi4]" >> ${DEPLOYDIR}/${BOOTFILES_DIR_NAME}/config.txt echo "max_framebuffers=2" >> ${DEPLOYDIR}/${BOOTFILES_DIR_NAME}/config.txt diff --git a/meta-webos-raspberrypi/recipes-bsp/resize-rootfs/resize-rootfs.bb b/meta-webos-raspberrypi/recipes-bsp/resize-rootfs/resize-rootfs.bb index fb7f1bba2..88d49d033 100644 --- a/meta-webos-raspberrypi/recipes-bsp/resize-rootfs/resize-rootfs.bb +++ b/meta-webos-raspberrypi/recipes-bsp/resize-rootfs/resize-rootfs.bb @@ -6,7 +6,7 @@ SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" -RDEPENDS_${PN} = "e2fsprogs-resize2fs parted" +RDEPENDS:${PN} = "e2fsprogs-resize2fs parted" PR = "r1" @@ -24,4 +24,4 @@ do_install() { install -v -m 0755 ${WORKDIR}/resize-rootfs.sh ${D}${sysconfdir}/systemd/system/scripts } -SYSTEMD_SERVICE_${PN} = " resize-rootfs.service" +SYSTEMD_SERVICE:${PN} = " resize-rootfs.service" diff --git a/meta-webos-raspberrypi/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bbappend b/meta-webos-raspberrypi/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bbappend index e79b54b25..913c373ff 100644 --- a/meta-webos-raspberrypi/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bbappend +++ b/meta-webos-raspberrypi/recipes-bsp/rpi-u-boot-scr/rpi-u-boot-scr.bbappend @@ -1,20 +1,20 @@ # Copyright (c) 2019-2022 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosrpi4" +EXTENDPRAUTO:append = "webosrpi4" -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" +FILESEXTRAPATHS:prepend := "${THISDIR}/files:" -SRC_URI_append = " \ +SRC_URI:append = " \ file://boot.sota.cmd \ file://uEnv.sota.txt.in \ " -do_compile_sota() { +do_compile:sota() { sed -e 's/@@KERNEL_BOOTCMD@@/${KERNEL_BOOTCMD}/' "${WORKDIR}/uEnv.sota.txt.in" > "${WORKDIR}/uEnv.sota.txt" mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "Ostree boot script" -d ${WORKDIR}/boot.sota.cmd boot.scr } -do_deploy_append_sota() { +do_deploy:append:sota() { install -d ${DEPLOYDIR}/${BOOTFILES_DIR_NAME} install -m 0755 ${WORKDIR}/uEnv.sota.txt ${DEPLOYDIR}/${BOOTFILES_DIR_NAME}/uEnv.txt } diff --git a/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot_%.bbappend b/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot_%.bbappend index 4899157ad..19a32eec9 100644 --- a/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot_%.bbappend +++ b/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot_%.bbappend @@ -1,13 +1,13 @@ # Copyright (c) 2017-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosrpi3" +EXTENDPRAUTO:append = "webosrpi3" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -SRC_URI_append_sota = " \ +SRC_URI:append:sota = " \ file://0001-Speed-up-boot-by-disable-usb-and-enable-bootcount.patch \ " -SRC_URI_append_sota_raspberrypi4 = " \ +SRC_URI:append:sota:raspberrypi4 = " \ file://0002-Speed-up-boot-for-raspberrypi4.patch \ " diff --git a/meta-webos-raspberrypi/recipes-connectivity/connman/connman-conf.bbappend b/meta-webos-raspberrypi/recipes-connectivity/connman/connman-conf.bbappend index 954bb7b24..73c14a2fa 100644 --- a/meta-webos-raspberrypi/recipes-connectivity/connman/connman-conf.bbappend +++ b/meta-webos-raspberrypi/recipes-connectivity/connman/connman-conf.bbappend @@ -1,12 +1,12 @@ # Copyright (c) 2017 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosrpi2" +EXTENDPRAUTO:append = "webosrpi2" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -SRC_URI_append = " file://wired-setup" +SRC_URI:append = " file://wired-setup" -do_install_append() { +do_install:append() { #Configure wired network interface for raspberrypi install -d ${D}${datadir}/connman install -m 0755 ${WORKDIR}/wired-setup ${D}${datadir}/connman diff --git a/meta-webos-raspberrypi/recipes-connectivity/pi-bluetooth/pi-bluetooth_%.bbappend b/meta-webos-raspberrypi/recipes-connectivity/pi-bluetooth/pi-bluetooth_%.bbappend index 503157828..8a4b34990 100644 --- a/meta-webos-raspberrypi/recipes-connectivity/pi-bluetooth/pi-bluetooth_%.bbappend +++ b/meta-webos-raspberrypi/recipes-connectivity/pi-bluetooth/pi-bluetooth_%.bbappend @@ -1,22 +1,22 @@ # Copyright (c) 2019-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosrpi3" +EXTENDPRAUTO:append = "webosrpi3" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI += "\ file://0001-hciuart-lower-the-speed-and-restart-on-failure.patch \ file://btuart \ " -do_install_append() { +do_install:append() { install -m 0755 ${WORKDIR}/btuart ${D}${bindir} rm -vf ${D}${systemd_system_unitdir}/bthelper@.service rm -vf ${D}${bindir}/bthelper rm -vrf ${D}${sysconfdir} } -FILES_${PN} = "\ +FILES:${PN} = "\ ${bindir} \ " -SYSTEMD_SERVICE_${PN}_remove = "bthelper@.service" +SYSTEMD_SERVICE:${PN}:remove = "bthelper@.service" diff --git a/meta-webos-raspberrypi/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend b/meta-webos-raspberrypi/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend index 0d9ceced3..5733bba0a 100644 --- a/meta-webos-raspberrypi/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend +++ b/meta-webos-raspberrypi/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend @@ -1,9 +1,9 @@ # Copyright (c) 2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosrpi1" +EXTENDPRAUTO:append = "webosrpi1" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -SRC_URI_append_webos = " \ +SRC_URI:append:webos = " \ file://0001-Disable-4-way-handshake-offloading-for-WPA-WPA2-PSK.patch \ " diff --git a/meta-webos-raspberrypi/recipes-core/base-files/base-files_%.bbappend b/meta-webos-raspberrypi/recipes-core/base-files/base-files_%.bbappend index c7d603170..b86789641 100644 --- a/meta-webos-raspberrypi/recipes-core/base-files/base-files_%.bbappend +++ b/meta-webos-raspberrypi/recipes-core/base-files/base-files_%.bbappend @@ -1,12 +1,12 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosrpi2" +EXTENDPRAUTO:append = "webosrpi2" -do_install_append_sota() { +do_install:append:sota() { install -d ${D}${localstatedir}/rootdirs/mnt/bootpart } -generate_fstab_entries_append_sota() { +generate_fstab_entries:append:sota() { echo "# need to handled boot partition by ostree and service" echo "/dev/mmcblk0p1 /mnt/bootpart vfat noatime 0 0" } diff --git a/meta-webos-raspberrypi/recipes-core/images/rpi-test-image.bbappend b/meta-webos-raspberrypi/recipes-core/images/rpi-test-image.bbappend index 68c71e02c..23a488c75 100644 --- a/meta-webos-raspberrypi/recipes-core/images/rpi-test-image.bbappend +++ b/meta-webos-raspberrypi/recipes-core/images/rpi-test-image.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2017 LG Electronics, Inc. -EXTENDPRAUTO_append_rpi = "webosrpi2" +EXTENDPRAUTO:append:rpi = "webosrpi2" # omxplayer also isn't available for e.g. qemux86 # and components like wiringpi, rpio, rpi-gpio, pi-blaster diff --git a/meta-webos-raspberrypi/recipes-core/images/webos-image.bbappend b/meta-webos-raspberrypi/recipes-core/images/webos-image.bbappend index d5066a101..eeb2c7219 100644 --- a/meta-webos-raspberrypi/recipes-core/images/webos-image.bbappend +++ b/meta-webos-raspberrypi/recipes-core/images/webos-image.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append_rpi = "webosrpi1" +EXTENDPRAUTO:append:rpi = "webosrpi1" # resize-rootfs will expand rootfs, so we don't need extra space a lot IMAGE_ROOTFS_EXTRA_SPACE = "16384" diff --git a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-rpi-test.bbappend b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-rpi-test.bbappend index 52fe9c28c..5c10625fd 100644 --- a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-rpi-test.bbappend +++ b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-rpi-test.bbappend @@ -1,9 +1,9 @@ # Copyright (c) 2017-2020 LG Electronics, Inc. -# You don't need to change this value when you're changing just a RDEPENDS_${PN} variable. -EXTENDPRAUTO_append_rpi = "webosrpi3" +# You don't need to change this value when you're changing just a RDEPENDS:${PN} variable. +EXTENDPRAUTO:append:rpi = "webosrpi3" -RDEPENDS_${PN}_remove_rpi_aarch64 = "omxplayer" +RDEPENDS:${PN}:remove:rpi:aarch64 = "omxplayer" # omxplayer also isn't available for e.g. qemux86 # and components like wiringpi, rpio, rpi-gpio, pi-blaster diff --git a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-devel.bbappend b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-devel.bbappend index 21e6ad883..03a596b63 100644 --- a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-devel.bbappend +++ b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-devel.bbappend @@ -1,10 +1,10 @@ # Copyright (c) 2020 LG Electronics, Inc. -GATOR_raspberrypi4 = " \ +GATOR:raspberrypi4 = " \ gator \ " # Gator functionality cannot be verified on webOS rpi64 which cannot boot yet -GATOR_raspberrypi4-64 = "" +GATOR:raspberrypi4-64 = "" -RDEPENDS_${PN}_append_raspberrypi4 = "${GATOR}" +RDEPENDS:${PN}:append:raspberrypi4 = "${GATOR}" diff --git a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend index b6995ffc7..f8ebe46b9 100644 --- a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend +++ b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-extended.bbappend @@ -1,22 +1,22 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. -# You don't need to change this value when you're changing just a RDEPENDS_${PN} variable. -EXTENDPRAUTO_append_rpi = "webosrpi9" +# You don't need to change this value when you're changing just a RDEPENDS:${PN} variable. +EXTENDPRAUTO:append:rpi = "webosrpi9" # gst omx is used only for raspberrypi builds -MEDIA_append_rpi = " \ +MEDIA:append:rpi = " \ gstreamer1.0-omx \ " # Until build issues caused by PLAT-44962 are fixed in PLAT-45700 -MEDIA_raspberrypi3-64 = "" +MEDIA:raspberrypi3-64 = "" CECSERVICE ?= "" # CEC service functionality is supported only for webOS OSE rpi4-64 -CECSERVICE_raspberrypi4-64 = " \ +CECSERVICE:raspberrypi4-64 = " \ com.webos.service.cec \ " -RDEPENDS_${PN}_append_rpi = " \ +RDEPENDS:${PN}:append:rpi = " \ ${CECSERVICE} \ com.webos.service.audiofocusmanager \ com.webos.service.audiooutput \ @@ -30,6 +30,6 @@ RDEPENDS_${PN}_append_rpi = " \ " # TODO move this part to webOS FOTA service (not yet developped) later -RDEPENDS_${PN}_append_rpi_sota = " \ +RDEPENDS:${PN}:append:rpi:sota = " \ u-boot-fw-utils \ " diff --git a/meta-webos-raspberrypi/recipes-extended/libcec/libcec_%.bbappend b/meta-webos-raspberrypi/recipes-extended/libcec/libcec_%.bbappend index ce48780ee..dce248a00 100644 --- a/meta-webos-raspberrypi/recipes-extended/libcec/libcec_%.bbappend +++ b/meta-webos-raspberrypi/recipes-extended/libcec/libcec_%.bbappend @@ -1,12 +1,12 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosrpi2" +EXTENDPRAUTO:append = "webosrpi2" # The recipe in meta-oe already has conditional dependency: -# DEPENDS_append_rpi = "${@bb.utils.contains('MACHINE_FEATURES', 'vc4graphics', '', ' userland', d)}" +# DEPENDS:append:rpi = "${@bb.utils.contains('MACHINE_FEATURES', 'vc4graphics', '', ' userland', d)}" # but in our builds the userland is used even when vc4graphics is in MACHINE_FEATURES -DEPENDS_append_rpi = " virtual/libomxil" +DEPENDS:append:rpi = " virtual/libomxil" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI += "file://0001-Fix-MessageReceived.patch" diff --git a/meta-webos-raspberrypi/recipes-graphics/mesa/mesa_%.bbappend b/meta-webos-raspberrypi/recipes-graphics/mesa/mesa_%.bbappend index 7cc51f959..529c5429f 100644 --- a/meta-webos-raspberrypi/recipes-graphics/mesa/mesa_%.bbappend +++ b/meta-webos-raspberrypi/recipes-graphics/mesa/mesa_%.bbappend @@ -1,15 +1,15 @@ # Copyright (c) 2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosrpi4" +EXTENDPRAUTO:append = "webosrpi4" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -SRC_URI_append_rpi = " \ +SRC_URI:append:rpi = " \ file://0001-implement-drm_create_linear_prime_buffer.patch \ " # Backport this change from meta-raspberrypi: # https://github.com/agherzan/meta-raspberrypi/commit/c5633df78832dca24cd584a10f896689b824b84d -SRC_URI_remove_rpi = " \ +SRC_URI:remove:rpi = " \ file://0001-dri2-query-dma-buf-modifiers.patch \ " diff --git a/meta-webos-raspberrypi/recipes-graphics/userland/userland_git.bbappend b/meta-webos-raspberrypi/recipes-graphics/userland/userland_git.bbappend index fd6e0c2f8..3dd7087c5 100644 --- a/meta-webos-raspberrypi/recipes-graphics/userland/userland_git.bbappend +++ b/meta-webos-raspberrypi/recipes-graphics/userland/userland_git.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2020 LG Electronics, Inc. -EXTENDPRAUTO_append_rpi = "webosrpi4" +EXTENDPRAUTO:append:rpi = "webosrpi4" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target_rpi = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target_rpi = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target:rpi = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target:rpi = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos-raspberrypi/recipes-graphics/wayland/wayland-protocols_%.bbappend b/meta-webos-raspberrypi/recipes-graphics/wayland/wayland-protocols_%.bbappend index 0deffaf7d..8597be861 100644 --- a/meta-webos-raspberrypi/recipes-graphics/wayland/wayland-protocols_%.bbappend +++ b/meta-webos-raspberrypi/recipes-graphics/wayland/wayland-protocols_%.bbappend @@ -1,10 +1,10 @@ # Copyright (c) 2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosrpi2" +EXTENDPRAUTO:append = "webosrpi2" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -SRC_URI_append_rpi = " \ +SRC_URI:append:rpi = " \ file://0001-add-the-wayland-drm-protocol.patch \ file://0002-add-create-linear-prime-buffer.patch \ " diff --git a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend index 70ea7e26c..6fafad898 100644 --- a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend +++ b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend @@ -1,12 +1,12 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosrpi30" +EXTENDPRAUTO:append = "webosrpi30" -CMDLINE_append = " rw cgroup_memory=1 cgroup_enable=memory swapaccount=1" -CMDLINE_remove_sota = "root=/dev/mmcblk0p2 rootfstype=ext4 rootwait rw" +CMDLINE:append = " rw cgroup_memory=1 cgroup_enable=memory swapaccount=1" +CMDLINE:remove:sota = "root=/dev/mmcblk0p2 rootfstype=ext4 rootwait rw" SHRT_VER = "${@oe.utils.trim_version('${PV}', 2)}" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}-${SHRT_VER}:${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}-${SHRT_VER}:${THISDIR}/${BPN}:" SRC_URI += "\ file://ostree.cfg \ @@ -22,7 +22,7 @@ SRC_URI += "\ file://ebpf.cfg \ " -KERNEL_MODULE_AUTOLOAD_append = " \ +KERNEL_MODULE_AUTOLOAD:append = " \ i2c-dev \ spidev \ spi_bcm2835 \ @@ -36,7 +36,7 @@ KERNEL_MODULE_AUTOLOAD_append = " \ bridge \ " -do_deploy_append() { +do_deploy:append() { # Remove kernel image link in meta-webos/classes/kernel.bbclass # However the image link is required in raspberrypi ln -sf ${type}-${KERNEL_IMAGE_NAME}.bin ${DEPLOYDIR}/${type}-${KERNEL_IMAGE_LINK_NAME}.bin diff --git a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.4.bbappend b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.4.bbappend index 216a4ab6b..0e01b1f0d 100644 --- a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.4.bbappend +++ b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.4.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2020 LG Electronics, Inc. # security.cfg - enable security features. Should be applied to default configuration. -SRC_URI_append = " \ +SRC_URI:append = " \ file://0001-bcm2835-v4l2-codec-fix-vchiq-mmal-renable.patch \ file://governor.cfg \ file://ntfs.cfg \ diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.16.%.bbappend index 2133b2b4c..6380a39ed 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.16.%.bbappend @@ -2,15 +2,15 @@ require gstreamer1.0-webos-common.inc -EXTENDPRAUTO_append_rpi = "webosrpi1" +EXTENDPRAUTO:append:rpi = "webosrpi1" -WEBOS_REPO_NAME_rpi = "gst-libav" +WEBOS_REPO_NAME:rpi = "gst-libav" -#WEBOS_VERSION_rpi = "1.14.4-2_6910361bc5b2fd4b98bd3af8f1674918d755f60c" +#WEBOS_VERSION:rpi = "1.14.4-2_6910361bc5b2fd4b98bd3af8f1674918d755f60c" -#SRC_URI_append_rpi = " \ +#SRC_URI:append:rpi = " \ # git://source.ffmpeg.org/ffmpeg;destsuffix=git/gst-libs/ext/libav;name=ffmpeg;branch=release/3.4 \ #" #do_fetch[vardeps] += "SRCREV_ffmpeg" -#SRCREV_ffmpeg_rpi = "a877ab75eb8faa2de33c9118053f44b0d4548f09" +#SRCREV_ffmpeg:rpi = "a877ab75eb8faa2de33c9118053f44b0d4548f09" diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.%.bbappend index 31122ba2d..4041a4d38 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.%.bbappend @@ -1,30 +1,30 @@ # Copyright (c) 2018-2020 LG Electronics, Inc. -EXTENDPRAUTO_append_rpi = "webosrpi6" +EXTENDPRAUTO:append:rpi = "webosrpi6" -CPPFLAGS_append_rpi = " -I${STAGING_INCDIR}/IL \ +CPPFLAGS:append:rpi = " -I${STAGING_INCDIR}/IL \ -I${STAGING_INCDIR}/interface/vcos/pthreads \ -I${STAGING_INCDIR}/interface/vmcs_host/linux" -DEPENDS_append_rpi = " virtual/egl virtual/libomxil" +DEPENDS:append:rpi = " virtual/egl virtual/libomxil" -EXTRA_LDFLAGS_rpi = "-lEGL -lbcm_host -lvcos -lvchiq_arm -lopenmaxil" +EXTRA_LDFLAGS:rpi = "-lEGL -lbcm_host -lvcos -lvchiq:arm -lopenmaxil" # raspberrypi3-64 version of userland doesn't provide bcm_host and openmaxil libraries # (that's actually the only difference between set of files staged by userland build for raspberrypi3 and raspberrypi3-64) -EXTRA_LDFLAGS_raspberrypi3-64 = "-lEGL -lvcos -lvchiq_arm" +EXTRA_LDFLAGS:raspberrypi3-64 = "-lEGL -lvcos -lvchiq:arm" # Build for raspberrypi4 -EXTRA_LDFLAGS_raspberrypi4-64 = "-lEGL -lvcos -lvchiq_arm" +EXTRA_LDFLAGS:raspberrypi4-64 = "-lEGL -lvcos -lvchiq:arm" -LDFLAGS_append_rpi = " ${EXTRA_LDFLAGS}" +LDFLAGS:append:rpi = " ${EXTRA_LDFLAGS}" -GSTREAMER_1_0_OMX_CORE_NAME_rpi = "${libdir}/libopenmaxil.so" -GSTREAMER_1_0_OMX_TARGET_rpi = "rpi" +GSTREAMER_1_0_OMX_CORE_NAME:rpi = "${libdir}/libopenmaxil.so" +GSTREAMER_1_0_OMX_TARGET:rpi = "rpi" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -SRC_URI_append_rpi = " \ +SRC_URI:append:rpi = " \ file://0001-fix-adaptive-resolution-change-in-seek-issue.patch \ file://0002-fix-brcmegl-dependencies-from-configure.patch \ file://0003-decrease-ranking-of-omxh264dec.patch \ diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend index 910deae49..693438497 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend @@ -1,16 +1,16 @@ # Copyright (c) 2018-2022 LG Electronics, Inc. -EXTENDPRAUTO_append_rpi = "webosrpi7" +EXTENDPRAUTO:append:rpi = "webosrpi7" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -DEPENDS_append_rpi = " webos-wayland-extensions" +DEPENDS:append:rpi = " webos-wayland-extensions" -PACKAGECONFIG_append_rpi = " kms wayland" +PACKAGECONFIG:append:rpi = " kms wayland" -PACKAGECONFIG_remove_rpi = "faad" +PACKAGECONFIG:remove:rpi = "faad" -SRC_URI_append_rpi = " \ +SRC_URI:append:rpi = " \ file://0001-waylandsink-remove-unsupported-subcompositor.patch \ file://0001-rtpmanagerbad-add-RTP-streaming-elements.patch \ " diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend index 3d2ad9464..1019bbd81 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend @@ -2,22 +2,22 @@ require gstreamer1.0-webos-common.inc -EXTENDPRAUTO_append_rpi = "webosrpi2" +EXTENDPRAUTO:append:rpi = "webosrpi2" # gles2 make build error , so override below and remove gles2. # original: PACKAGECONFIG_GL ?= "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'gles2 egl', '', d)}" -PACKAGECONFIG_GL_rpi = "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', ' egl', '', d)}" +PACKAGECONFIG_GL:rpi = "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', ' egl', '', d)}" -WEBOS_REPO_NAME_rpi = "gst-plugins-base" +WEBOS_REPO_NAME:rpi = "gst-plugins-base" -WEBOS_VERSION_rpi = "1.14.4-3_dba68182527f24b313951383ddbb701ddde340d1" +WEBOS_VERSION:rpi = "1.14.4-3_dba68182527f24b313951383ddbb701ddde340d1" PACKAGECONFIG[dispmanx] = ",,virtual/libomxil" -OPENGL_WINSYS_append = "${@bb.utils.contains('PACKAGECONFIG', 'dispmanx', ' dispmanx', '', d)}" +OPENGL_WINSYS:append = "${@bb.utils.contains('PACKAGECONFIG', 'dispmanx', ' dispmanx', '', d)}" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -SRC_URI_append_rpi = " \ +SRC_URI:append:rpi = " \ file://0001-discoverer-Add-force-sw-decoders-property.patch \ file://0001-playbin2-handle-GST-PLAY-FLAG-FORCE-SW-DECODERS.patch \ " diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend index e25794e82..481799eed 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend @@ -1,14 +1,14 @@ # Copyright (c) 2018-2021 LG Electronics, Inc. -EXTENDPRAUTO_append_rpi = "webosrpi4" +EXTENDPRAUTO:append:rpi = "webosrpi4" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -SRC_URI_append_raspberrypi4 = " \ +SRC_URI:append:raspberrypi4 = " \ file://0001-v4l2-fix-buffer-pool-poll-wait-after-flush.patch \ file://0002-v4l2videodec-Check-stop-in-flush-to-avoid-race-condi.patch \ file://0003-Fix-v4l2h264dec-output-caps-to-RGB16.patch \ file://0004-Fix-v4l2dec-flush-for-video-loop-playback.patch \ " -PACKAGECONFIG_append_raspberrypi4 = " libv4l2" +PACKAGECONFIG:append:raspberrypi4 = " libv4l2" diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.16.%.bbappend index 534e2ae75..d30a63179 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.16.%.bbappend @@ -2,8 +2,8 @@ require gstreamer1.0-webos-common.inc -EXTENDPRAUTO_append_rpi = "webosrpi1" +EXTENDPRAUTO:append:rpi = "webosrpi1" -WEBOS_REPO_NAME_rpi = "gst-plugins-ugly" +WEBOS_REPO_NAME:rpi = "gst-plugins-ugly" -WEBOS_VERSION_rpi = "1.14.4-2_bd628a6c45223639ca675da8963d7312c9d5d7f9" +WEBOS_VERSION:rpi = "1.14.4-2_bd628a6c45223639ca675da8963d7312c9d5d7f9" diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-webos-common.inc b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-webos-common.inc index e9ff99be9..dfbf91296 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-webos-common.inc +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-webos-common.inc @@ -2,17 +2,17 @@ # inherit ${@'webos_public_repo webos_enhanced_submissions' if '${MACHINE}'.startswith('raspberrypi3') or '${MACHINE}'.startswith('raspberrypi4') else ''} -# GST_COMMON_GIT_rpi = "git://anongit.freedesktop.org/gstreamer/common;branch=master" -# SRCREV_common_rpi = "46d420818ed8172022caf4503894076b18b1e153" -# SRCREV_FORMAT_rpi = "main_common" +# GST_COMMON_GIT:rpi = "git://anongit.freedesktop.org/gstreamer/common;branch=master" +# SRCREV_common:rpi = "46d420818ed8172022caf4503894076b18b1e153" +# SRCREV_FORMAT:rpi = "main_common" -# S_rpi = "${WORKDIR}/git" +# S:rpi = "${WORKDIR}/git" -# SRC_URI_rpi = " \ +# SRC_URI:rpi = " \ # ${WEBOSOSE_GIT_REPO_COMPLETE};name=main \ # ${GST_COMMON_GIT};name=common;protocol=git;destsuffix=git/common \ # " -# do_configure_rpi () { +# do_configure:rpi () { # ${S}/autogen.sh --noconfigure # oe_runconf # } diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend index c58574b99..aad84c7f8 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend @@ -2,13 +2,13 @@ require gstreamer1.0-webos-common.inc -EXTENDPRAUTO_append_rpi = "webosrpi3" +EXTENDPRAUTO:append:rpi = "webosrpi3" -WEBOS_REPO_NAME_rpi = "gstreamer" +WEBOS_REPO_NAME:rpi = "gstreamer" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -SRC_URI_append_rpi = " \ +SRC_URI:append:rpi = " \ file://0001-Add-support-for-seamless-seek-trickplay.patch \ file://0001-elementfactory-add-GST-ELEMENT-FACTORY-TYPE-HARDWARE.patch \ " diff --git a/meta-webos-raspberrypi/recipes-multimedia/umi/umi.bbappend b/meta-webos-raspberrypi/recipes-multimedia/umi/umi.bbappend index 0e6d5ecce..907db61ae 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/umi/umi.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/umi/umi.bbappend @@ -1,5 +1,5 @@ # Copyright (c) 2018 LG Electronics, Inc. -EXTENDPRAUTO_append_rpi = "webosrpi1" +EXTENDPRAUTO:append:rpi = "webosrpi1" -EXTRA_OECMAKE_append_rpi = " -DWEBOS_SOC:STRING=RPI" +EXTRA_OECMAKE:append:rpi = " -DWEBOS_SOC:STRING=RPI" diff --git a/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland_git.bbappend b/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland_git.bbappend index 8e967af0d..27870fe5b 100644 --- a/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland_git.bbappend +++ b/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland_git.bbappend @@ -1,5 +1,5 @@ # Copyright (c) 2021 LG Electronics, Inc. -EXTENDPRAUTO_append_rpi = "webosrpi2" +EXTENDPRAUTO:append:rpi = "webosrpi2" -PACKAGECONFIG_append_rpi = " dmabuf-client-buffer" +PACKAGECONFIG:append:rpi = " dmabuf-client-buffer" diff --git a/meta-webos-raspberrypi/recipes-webos/chromium/webruntime_%.bbappend b/meta-webos-raspberrypi/recipes-webos/chromium/webruntime_%.bbappend index 6b511527e..f9f085a6c 100644 --- a/meta-webos-raspberrypi/recipes-webos/chromium/webruntime_%.bbappend +++ b/meta-webos-raspberrypi/recipes-webos/chromium/webruntime_%.bbappend @@ -1,13 +1,13 @@ # Copyright (c) 2018-2022 LG Electronics, Inc. -EXTENDPRAUTO_append_rpi = "webosrpi10" +EXTENDPRAUTO:append:rpi = "webosrpi10" -modify_run_app_shell_append_rpi() { +modify_run_app_shell:append:rpi() { sed -i 's/# Setup 4Mb limitation mse audio buffer size/# Setup 2Mb limitation mse audio buffer size/' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} sed -i 's/export MSE_AUDIO_BUFFER_SIZE_LIMIT=4194304/export MSE_AUDIO_BUFFER_SIZE_LIMIT=2097152/' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} sed -i 's/# Setup 50Mb limitation mse video buffer size/# Setup 15Mb limitation mse video buffer size/' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} sed -i 's/export MSE_VIDEO_BUFFER_SIZE_LIMIT=52428800/export MSE_VIDEO_BUFFER_SIZE_LIMIT=15728640/' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} } -PACKAGECONFIG_MEDIA_raspberrypi3 = "" -PACKAGECONFIG_NEVA_WEBRTC_raspberrypi3 = "" +PACKAGECONFIG_MEDIA:raspberrypi3 = "" +PACKAGECONFIG_NEVA_WEBRTC:raspberrypi3 = "" diff --git a/meta-webos-raspberrypi/recipes-webos/db8/db8.bbappend b/meta-webos-raspberrypi/recipes-webos/db8/db8.bbappend index 3307fc18a..1922ba450 100644 --- a/meta-webos-raspberrypi/recipes-webos/db8/db8.bbappend +++ b/meta-webos-raspberrypi/recipes-webos/db8/db8.bbappend @@ -1,5 +1,5 @@ # Copyright (c) 2017-2020 LG Electronics, Inc. -EXTENDPRAUTO_append_rpi = "webosrpi2" +EXTENDPRAUTO:append:rpi = "webosrpi2" -FILESEXTRAPATHS_prepend_rpi := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend:rpi := "${THISDIR}/${BPN}:" diff --git a/meta-webos-raspberrypi/recipes-webos/nyx-modules/nyx-modules.bbappend b/meta-webos-raspberrypi/recipes-webos/nyx-modules/nyx-modules.bbappend index 0b1d4fbbe..d2bc4dbe6 100644 --- a/meta-webos-raspberrypi/recipes-webos/nyx-modules/nyx-modules.bbappend +++ b/meta-webos-raspberrypi/recipes-webos/nyx-modules/nyx-modules.bbappend @@ -1,11 +1,11 @@ # Copyright (c) 2020-2022 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosrpi5" +EXTENDPRAUTO:append = "webosrpi5" -DEPENDS_append = " nmeaparser" +DEPENDS:append = " nmeaparser" -RDEPENDS_${PN} += "libcec-tools" +RDEPENDS:${PN} += "libcec-tools" WEBOS_VERSION = "7.1.0-20_7927148603cb9869421a7a3c35eef273cf085b21" -NYX_MODULES_REQUIRED_append = "NYXMOD_OW_GPS;NYXMOD_OW_CEC;" +NYX_MODULES_REQUIRED:append = "NYXMOD_OW_GPS;NYXMOD_OW_CEC;" diff --git a/meta-webos-raspberrypi/recipes-webos/wam/wam.bbappend b/meta-webos-raspberrypi/recipes-webos/wam/wam.bbappend index 5bfe42212..ff1c39086 100644 --- a/meta-webos-raspberrypi/recipes-webos/wam/wam.bbappend +++ b/meta-webos-raspberrypi/recipes-webos/wam/wam.bbappend @@ -1,10 +1,10 @@ # Copyright (c) 2019-2020 LG Electronics, Inc. -EXTENDPRAUTO_append_rpi = "webosrpi4" +EXTENDPRAUTO:append:rpi = "webosrpi4" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -do_configure_append() { +do_configure:append() { sed -i '/webapp-mgr\.env/a\# for using broadcom video hw codec\nExecStartPre=-\/bin\/chmod 777 \/dev\/vchiq' ${B}/webapp-mgr.service sed -i 's/# setup 4 Mb limitation mse audio buffer size/# setup 2 Mb limitation mse audio buffer size/' ${B}/webapp-mgr.sh sed -i 's/export MSE_AUDIO_BUFFER_SIZE_LIMIT.*/export MSE_AUDIO_BUFFER_SIZE_LIMIT=2097152/' ${B}/webapp-mgr.sh diff --git a/meta-webos-smack/conf/layer.conf b/meta-webos-smack/conf/layer.conf index 0f1a9d12e..79a3e160c 100644 --- a/meta-webos-smack/conf/layer.conf +++ b/meta-webos-smack/conf/layer.conf @@ -7,7 +7,7 @@ BBPATH =. "${LAYERDIR}:" BBFILES += "${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes-*/*/*.bbappend" # Exclude unused recipies from meta-security, use only smack -BBMASK_append = " meta-security\/(?!.*\/smack\/).*" +BBMASK:append = " meta-security\/(?!.*\/smack\/).*" PNBLACKLIST[crun] ?= "Depends on libseccomp which is provided by meta-security, but meta-webos-smack/conf/layer.conf BBMASKs everything from meta-security except smack itself" PNBLACKLIST[slirp4netns] ?= "Depends on libseccomp which is provided by meta-security, but meta-webos-smack/conf/layer.conf BBMASKs everything from meta-security except smack itself" diff --git a/meta-webos-smack/recipes-core/base-files/base-files_%.bbappend b/meta-webos-smack/recipes-core/base-files/base-files_%.bbappend index 43cdd1660..ce91b201b 100644 --- a/meta-webos-smack/recipes-core/base-files/base-files_%.bbappend +++ b/meta-webos-smack/recipes-core/base-files/base-files_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack1', '', d)}" +EXTENDPRAUTO:append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack1', '', d)}" do_install[postfuncs] += "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'set_tmpfs_star', '', d)}" diff --git a/meta-webos-smack/recipes-core/coreutils/coreutils_%.bbappend b/meta-webos-smack/recipes-core/coreutils/coreutils_%.bbappend index 73116ec13..34beedf11 100644 --- a/meta-webos-smack/recipes-core/coreutils/coreutils_%.bbappend +++ b/meta-webos-smack/recipes-core/coreutils/coreutils_%.bbappend @@ -1,5 +1,5 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack1', '', d)}" +EXTENDPRAUTO:append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack1', '', d)}" DEPENDS += "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack', '', d)}" diff --git a/meta-webos-smack/recipes-core/images/webos-image.bbappend b/meta-webos-smack/recipes-core/images/webos-image.bbappend index 1b8cd975c..2c190817e 100644 --- a/meta-webos-smack/recipes-core/images/webos-image.bbappend +++ b/meta-webos-smack/recipes-core/images/webos-image.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack1', '', d)}" +EXTENDPRAUTO:append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack1', '', d)}" -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" +FILESEXTRAPATHS:prepend := "${THISDIR}/files:" SRC_URI = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'file://smack_labels_default', '', d)}" diff --git a/meta-webos-smack/recipes-core/packagegroups/packagegroup-webos-extended.bbappend b/meta-webos-smack/recipes-core/packagegroups/packagegroup-webos-extended.bbappend index 2c643c94c..bc1c31fc1 100644 --- a/meta-webos-smack/recipes-core/packagegroups/packagegroup-webos-extended.bbappend +++ b/meta-webos-smack/recipes-core/packagegroups/packagegroup-webos-extended.bbappend @@ -1,5 +1,5 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack1', '', d)}" +EXTENDPRAUTO:append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack1', '', d)}" -RDEPENDS_${PN} += "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'attr smack com.webos.app.test.smack.native', '', d)}" +RDEPENDS:${PN} += "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'attr smack com.webos.app.test.smack.native', '', d)}" diff --git a/meta-webos-smack/recipes-core/systemd/systemd_%.bbappend b/meta-webos-smack/recipes-core/systemd/systemd_%.bbappend index c585ff346..bc92e4393 100644 --- a/meta-webos-smack/recipes-core/systemd/systemd_%.bbappend +++ b/meta-webos-smack/recipes-core/systemd/systemd_%.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2019-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack4', '', d)}" +EXTENDPRAUTO:append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack4', '', d)}" -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" +FILESEXTRAPATHS:prepend := "${THISDIR}/files:" SRC_URI += "${@bb.utils.contains('DISTRO_FEATURES', 'smack', '\ file://0001-SMACK-add-loading-unconfined-label.patch \ diff --git a/meta-webos-smack/recipes-kernel/linux/linux-%.bbappend b/meta-webos-smack/recipes-kernel/linux/linux-%.bbappend index 418de0c3e..6d9f77cab 100644 --- a/meta-webos-smack/recipes-kernel/linux/linux-%.bbappend +++ b/meta-webos-smack/recipes-kernel/linux/linux-%.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack2', '', d)}" +EXTENDPRAUTO:append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack2', '', d)}" -FILESEXTRAPATHS_prepend := "${THISDIR}/linux:" +FILESEXTRAPATHS:prepend := "${THISDIR}/linux:" SRC_URI += "\ ${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'file://smack.cfg', '', d)} \ diff --git a/meta-webos-smack/recipes-security/smack/smack_%.bbappend b/meta-webos-smack/recipes-security/smack/smack_%.bbappend index 8b92dc187..589af9720 100644 --- a/meta-webos-smack/recipes-security/smack/smack_%.bbappend +++ b/meta-webos-smack/recipes-security/smack/smack_%.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2019-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "smack4" +EXTENDPRAUTO:append = "smack4" -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" +FILESEXTRAPATHS:prepend := "${THISDIR}/files:" SRC_URI += "file://default-access \ file://unconfined \ @@ -11,10 +11,10 @@ SRC_URI += "file://default-access \ " VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -do_install_append (){ +do_install:append (){ install -d ${D}${sysconfdir}/smack/netlabel.d install -v -m 0644 ${WORKDIR}/default-access ${D}${sysconfdir}/smack/accesses.d/ install -v -m 0644 ${WORKDIR}/unconfined ${D}${sysconfdir}/smack/ @@ -23,4 +23,4 @@ do_install_append (){ install -v -m 0755 ${WORKDIR}/smack_rules_gen ${D}${datadir}/smack/smack_rules_gen } -RDEPENDS_${PN} += "python3-shell" +RDEPENDS:${PN} += "python3-shell" diff --git a/meta-webos-smack/recipes-webos/chromium/webruntime_%.bbappend b/meta-webos-smack/recipes-webos/chromium/webruntime_%.bbappend index 7f51dd8bf..63b0b0809 100644 --- a/meta-webos-smack/recipes-webos/chromium/webruntime_%.bbappend +++ b/meta-webos-smack/recipes-webos/chromium/webruntime_%.bbappend @@ -1,9 +1,9 @@ # Copyright (c) 2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack2', '', d)}" +EXTENDPRAUTO:append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack2', '', d)}" -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" +FILESEXTRAPATHS:prepend := "${THISDIR}/files:" -SRC_URI_append = "\ +SRC_URI:append = "\ ${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'file://0001-run_app_shell-add-SMACK-labeling-based-on-AppID_79.patch', '', d)} \ " diff --git a/meta-webos-smack/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bbappend b/meta-webos-smack/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bbappend index 82314af3b..27308a0fc 100644 --- a/meta-webos-smack/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bbappend +++ b/meta-webos-smack/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2019-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack2', '', d)}" +EXTENDPRAUTO:append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack2', '', d)}" -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" +FILESEXTRAPATHS:prepend := "${THISDIR}/files:" SRC_URI += "\ ${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'file://com.webos.app.enactbrowser', '', d)} \ diff --git a/meta-webos-smack/recipes-webos/com.webos.app.test.smack.native/com.webos.app.test.smack.native.bb b/meta-webos-smack/recipes-webos/com.webos.app.test.smack.native/com.webos.app.test.smack.native.bb index e025edcbd..139b28dee 100644 --- a/meta-webos-smack/recipes-webos/com.webos.app.test.smack.native/com.webos.app.test.smack.native.bb +++ b/meta-webos-smack/recipes-webos/com.webos.app.test.smack.native/com.webos.app.test.smack.native.bb @@ -20,8 +20,8 @@ PR = "r3" S = "${WORKDIR}/git" DEPENDS = "qtbase qt-features-webos qtdeclarative glib-2.0" -RDEPENDS_${PN} += "qml-webos-framework qml-webos-bridge" +RDEPENDS:${PN} += "qml-webos-framework qml-webos-bridge" OE_QMAKE_PATH_HEADERS = "${OE_QMAKE_PATH_QT_HEADERS}" -FILES_${PN} += "${webos_applicationsdir}" +FILES:${PN} += "${webos_applicationsdir}" diff --git a/meta-webos-smack/recipes-webos/qml-webos-framework/qml-webos-framework.bbappend b/meta-webos-smack/recipes-webos/qml-webos-framework/qml-webos-framework.bbappend index 7d77636e2..b98a0d2bc 100644 --- a/meta-webos-smack/recipes-webos/qml-webos-framework/qml-webos-framework.bbappend +++ b/meta-webos-smack/recipes-webos/qml-webos-framework/qml-webos-framework.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack1', '', d)}" +EXTENDPRAUTO:append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack1', '', d)}" -FILESEXTRAPATHS_prepend := "${THISDIR}/files:" +FILESEXTRAPATHS:prepend := "${THISDIR}/files:" SRC_URI += "\ ${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'file://0001-Add-SMACK-security-labeling.patch', '', d)} \ diff --git a/meta-webos-smack/recipes-webos/wam/wam.bbappend b/meta-webos-smack/recipes-webos/wam/wam.bbappend index fec0e8e3e..e4b50d202 100644 --- a/meta-webos-smack/recipes-webos/wam/wam.bbappend +++ b/meta-webos-smack/recipes-webos/wam/wam.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2019-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack2', '', d)}" +EXTENDPRAUTO:append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack2', '', d)}" do_install[postfuncs] += "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'set_wam_process_label', '', d)}" diff --git a/meta-webos-updater/classes/usrmerge_fix.bbclass b/meta-webos-updater/classes/usrmerge_fix.bbclass index c3fe580f3..c27b421d9 100644 --- a/meta-webos-updater/classes/usrmerge_fix.bbclass +++ b/meta-webos-updater/classes/usrmerge_fix.bbclass @@ -1,7 +1,7 @@ # Copyright (c) 2019 LG Electronics, Inc. # move /lib, /bin, /sbin to /usr -do_install_append_sota() { +do_install:append:sota() { if ${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', 'true', 'false', d)}; then TARGETS='/lib /bin /sbin' for target in ${TARGETS}; do diff --git a/meta-webos-updater/conf/layer.conf b/meta-webos-updater/conf/layer.conf index a63f80728..f8c8567ea 100644 --- a/meta-webos-updater/conf/layer.conf +++ b/meta-webos-updater/conf/layer.conf @@ -19,4 +19,4 @@ LAYERDEPENDS_meta-webos-updater = "\ # Remove python added by meta-updater, see: # https://github.com/advancedtelematic/meta-updater/issues/684 -HOSTTOOLS_NONFATAL_remove = "python" +HOSTTOOLS_NONFATAL:remove = "python" diff --git a/meta-webos-updater/recipes-core/base-files/base-files_%.bbappend b/meta-webos-updater/recipes-core/base-files/base-files_%.bbappend index fd936aa8e..6f924759d 100644 --- a/meta-webos-updater/recipes-core/base-files/base-files_%.bbappend +++ b/meta-webos-updater/recipes-core/base-files/base-files_%.bbappend @@ -1,15 +1,15 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosupdater2" +EXTENDPRAUTO:append = "webosupdater2" -do_compile_append_sota() { +do_compile:append:sota() { # to show relative path on prompt for symbolic linked folder (when usrmerge feature) if ${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', 'true', 'false', d)}; then sed -i "s/PS1='.*'$/PS1='\\\\u@\\\\h:\$(pwd)\\\\$ '/g" ${WORKDIR}/profile fi } -generate_fstab_entries_append_sota() { +generate_fstab_entries:append:sota() { echo "# mount /media that was not handled by ostree" echo "/sysroot/media /media none defaults,bind 0 0" } diff --git a/meta-webos-updater/recipes-core/busybox/busybox_%.bbappend b/meta-webos-updater/recipes-core/busybox/busybox_%.bbappend index ab1b08e01..38e8dc5fd 100644 --- a/meta-webos-updater/recipes-core/busybox/busybox_%.bbappend +++ b/meta-webos-updater/recipes-core/busybox/busybox_%.bbappend @@ -1,5 +1,5 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosupdater1" +EXTENDPRAUTO:append = "webosupdater1" -RPROVIDES_${PN}_sota += "/bin/bash" +RPROVIDES:${PN}:sota += "/bin/bash" diff --git a/meta-webos-updater/recipes-core/images/initramfs-ostree-image.bbappend b/meta-webos-updater/recipes-core/images/initramfs-ostree-image.bbappend index ae246fb32..9fb71610f 100644 --- a/meta-webos-updater/recipes-core/images/initramfs-ostree-image.bbappend +++ b/meta-webos-updater/recipes-core/images/initramfs-ostree-image.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2019-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" -IMAGE_CMD_cpio_append_sota() { +IMAGE_CMD:cpio:append:sota() { # meta-updater and webos.inc uses different image name, need to match it if [ ! -f ${IMGDEPLOYDIR}/${INITRAMFS_IMAGE}-${MACHINE}.${INITRAMFS_FSTYPES} ]; then ln -sf ./${IMAGE_NAME}${IMAGE_NAME_SUFFIX}.${INITRAMFS_FSTYPES} \ diff --git a/meta-webos-updater/recipes-core/initscripts/webos-initscripts.bbappend b/meta-webos-updater/recipes-core/initscripts/webos-initscripts.bbappend index 99aa00be4..9be379660 100644 --- a/meta-webos-updater/recipes-core/initscripts/webos-initscripts.bbappend +++ b/meta-webos-updater/recipes-core/initscripts/webos-initscripts.bbappend @@ -1,5 +1,5 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosupdater1" +EXTENDPRAUTO:append = "webosupdater1" inherit usrmerge_fix diff --git a/meta-webos-updater/recipes-filesystems/ntfs-3g-ntfsprogs/ntfs-3g-ntfsprogs_%.bbappend b/meta-webos-updater/recipes-filesystems/ntfs-3g-ntfsprogs/ntfs-3g-ntfsprogs_%.bbappend index ebb647e97..cdb5b21e4 100644 --- a/meta-webos-updater/recipes-filesystems/ntfs-3g-ntfsprogs/ntfs-3g-ntfsprogs_%.bbappend +++ b/meta-webos-updater/recipes-filesystems/ntfs-3g-ntfsprogs/ntfs-3g-ntfsprogs_%.bbappend @@ -1,5 +1,5 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosupdater1" +EXTENDPRAUTO:append = "webosupdater1" inherit usrmerge_fix \ No newline at end of file diff --git a/meta-webos-updater/recipes-kernel/systemtap/systemtap_%.bbappend b/meta-webos-updater/recipes-kernel/systemtap/systemtap_%.bbappend index 2bf3b2dfa..ccad9e35b 100644 --- a/meta-webos-updater/recipes-kernel/systemtap/systemtap_%.bbappend +++ b/meta-webos-updater/recipes-kernel/systemtap/systemtap_%.bbappend @@ -1,11 +1,11 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosupdater1" +EXTENDPRAUTO:append = "webosupdater1" # Workaround to resolve 'do_install' failure when using 'usrmerge' feature -# because of do_install_append's wrong work on oe-core's systemtap_git.bb -systemd_unitdir_sota = "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '/tmp/systemd', '${nonarch_base_libdir}/systemd', d)}" -do_install_append_sota() { +# because of do_install:append's wrong work on oe-core's systemtap_git.bb +systemd_unitdir:sota = "${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', '/tmp/systemd', '${nonarch_base_libdir}/systemd', d)}" +do_install:append:sota() { if ${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', 'true', 'false', d)}; then install -d ${D}${nonarch_base_libdir} mv ${D}${systemd_unitdir} ${D}${nonarch_base_libdir}/systemd diff --git a/meta-webos-updater/recipes-sota/ostree-initrd/ostree-initrd.bbappend b/meta-webos-updater/recipes-sota/ostree-initrd/ostree-initrd.bbappend index f480273c4..5d5bf1f6a 100644 --- a/meta-webos-updater/recipes-sota/ostree-initrd/ostree-initrd.bbappend +++ b/meta-webos-updater/recipes-sota/ostree-initrd/ostree-initrd.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2019-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosupdater1" +EXTENDPRAUTO:append = "webosupdater1" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI += " file://0001-Speed-up-mount-when-rather-than-just-wait.patch" diff --git a/meta-webos-updater/recipes-sota/ostree-kernel-initramfs/ostree-kernel-initramfs_%.bbappend b/meta-webos-updater/recipes-sota/ostree-kernel-initramfs/ostree-kernel-initramfs_%.bbappend index d2c864a97..962e97b03 100644 --- a/meta-webos-updater/recipes-sota/ostree-kernel-initramfs/ostree-kernel-initramfs_%.bbappend +++ b/meta-webos-updater/recipes-sota/ostree-kernel-initramfs/ostree-kernel-initramfs_%.bbappend @@ -1,5 +1,5 @@ # Copyright (c) 2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosupdater1" +EXTENDPRAUTO:append = "webosupdater1" do_install[depends] += "virtual/kernel:do_webos_deploy_fixup" diff --git a/meta-webos-updater/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bbappend b/meta-webos-updater/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bbappend index 99aa00be4..9be379660 100644 --- a/meta-webos-updater/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bbappend +++ b/meta-webos-updater/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bbappend @@ -1,5 +1,5 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosupdater1" +EXTENDPRAUTO:append = "webosupdater1" inherit usrmerge_fix diff --git a/meta-webos-virtualization/recipes-containers/containerd/containerd-docker_git.bbappend b/meta-webos-virtualization/recipes-containers/containerd/containerd-docker_git.bbappend index 36b197bbe..d803c4193 100644 --- a/meta-webos-virtualization/recipes-containers/containerd/containerd-docker_git.bbappend +++ b/meta-webos-virtualization/recipes-containers/containerd/containerd-docker_git.bbappend @@ -1,5 +1,5 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosvirt1" +EXTENDPRAUTO:append = "webosvirt1" -RRECOMMENDS_${PN}_remove = "lxc" +RRECOMMENDS:${PN}:remove = "lxc" diff --git a/meta-webos-virtualization/recipes-containers/containerd/containerd-opencontainers_git.bbappend b/meta-webos-virtualization/recipes-containers/containerd/containerd-opencontainers_git.bbappend index 36b197bbe..d803c4193 100644 --- a/meta-webos-virtualization/recipes-containers/containerd/containerd-opencontainers_git.bbappend +++ b/meta-webos-virtualization/recipes-containers/containerd/containerd-opencontainers_git.bbappend @@ -1,5 +1,5 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosvirt1" +EXTENDPRAUTO:append = "webosvirt1" -RRECOMMENDS_${PN}_remove = "lxc" +RRECOMMENDS:${PN}:remove = "lxc" diff --git a/meta-webos-virtualization/recipes-containers/docker/docker-ce_%.bbappend b/meta-webos-virtualization/recipes-containers/docker/docker-ce_%.bbappend index 1078ecceb..af58e73a9 100644 --- a/meta-webos-virtualization/recipes-containers/docker/docker-ce_%.bbappend +++ b/meta-webos-virtualization/recipes-containers/docker/docker-ce_%.bbappend @@ -1,12 +1,12 @@ # Copyright (c) 2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosvirt2" +EXTENDPRAUTO:append = "webosvirt2" # ERROR: docker-ce-18.09.0-ce+git6e632f7fc395d15bce46f426086e91c01598cf59-r0 do_package_qa: QA Issue: docker-ce-contrib rdepends on bash, but it isnt a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-contrib_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-contrib_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-contrib:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-contrib:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" # ERROR: QA Issue: ELF binary 'TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/docker-ce/18.09.0-ce+git6e632f7fc395d15bce46f426086e91c01598cf59-r0/packages-split/docker-ce/usr/bin/docker-proxy' has relocations in .text [textrel] # http://caprica.lgsvl.com:8080/Errors/Details/1942830 -INSANE_SKIP_${PN} += "textrel" +INSANE_SKIP:${PN} += "textrel" diff --git a/meta-webos-virtualization/recipes-containers/docker/docker-moby.bbappend b/meta-webos-virtualization/recipes-containers/docker/docker-moby.bbappend index 82b3f68a7..7db0001c5 100644 --- a/meta-webos-virtualization/recipes-containers/docker/docker-moby.bbappend +++ b/meta-webos-virtualization/recipes-containers/docker/docker-moby.bbappend @@ -1,13 +1,13 @@ # Copyright (c) 2019-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosvirt3" +EXTENDPRAUTO:append = "webosvirt3" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-contrib_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-contrib_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-contrib:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-contrib:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" # required kernel modules -RRECOMMENDS_${PN}_append = " \ +RRECOMMENDS:${PN}:append = " \ kernel-module-br-netfilter \ kernel-module-ebt-dnat \ kernel-module-ip-vs \ @@ -20,7 +20,7 @@ RRECOMMENDS_${PN}_append = " \ kernel-module-xt-nat \ " -do_install_append() { +do_install:append() { # don't start by default sed -i '/\[Install\]/,+1 d' ${D}${systemd_system_unitdir}/docker.service diff --git a/meta-webos-virtualization/recipes-containers/lxc/lxc_%.bbappend b/meta-webos-virtualization/recipes-containers/lxc/lxc_%.bbappend index 20d2cde1f..44aec7df1 100644 --- a/meta-webos-virtualization/recipes-containers/lxc/lxc_%.bbappend +++ b/meta-webos-virtualization/recipes-containers/lxc/lxc_%.bbappend @@ -1,16 +1,16 @@ # Copyright (c) 2020-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosvirt3" +EXTENDPRAUTO:append = "webosvirt3" # ERROR: lxc-3.1.0-r0 do_package_qa: QA Issue: lxc-ptest rdepends on bash, but it isnt a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" # ERROR: lxc-3.1.0-r0 do_package_qa: QA Issue: lxc-templates rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] -RDEPENDS_${PN}-templates_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-templates_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-templates:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-templates:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" VIRTUAL-RUNTIME_tar ?= "tar" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_tar}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_TAR', 'busybox', 'tar', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_tar}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_TAR', 'busybox', 'tar', '', d)}" diff --git a/meta-webos-virtualization/recipes-containers/runc/runc-docker_git.bbappend b/meta-webos-virtualization/recipes-containers/runc/runc-docker_git.bbappend index 36b197bbe..d803c4193 100644 --- a/meta-webos-virtualization/recipes-containers/runc/runc-docker_git.bbappend +++ b/meta-webos-virtualization/recipes-containers/runc/runc-docker_git.bbappend @@ -1,5 +1,5 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosvirt1" +EXTENDPRAUTO:append = "webosvirt1" -RRECOMMENDS_${PN}_remove = "lxc" +RRECOMMENDS:${PN}:remove = "lxc" diff --git a/meta-webos-virtualization/recipes-containers/runc/runc-opencontainers_git.bbappend b/meta-webos-virtualization/recipes-containers/runc/runc-opencontainers_git.bbappend index 36b197bbe..d803c4193 100644 --- a/meta-webos-virtualization/recipes-containers/runc/runc-opencontainers_git.bbappend +++ b/meta-webos-virtualization/recipes-containers/runc/runc-opencontainers_git.bbappend @@ -1,5 +1,5 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosvirt1" +EXTENDPRAUTO:append = "webosvirt1" -RRECOMMENDS_${PN}_remove = "lxc" +RRECOMMENDS:${PN}:remove = "lxc" diff --git a/meta-webos-virtualization/recipes-containers/singularity/singularity_git.bbappend b/meta-webos-virtualization/recipes-containers/singularity/singularity_git.bbappend index 21763ba20..5844fa867 100644 --- a/meta-webos-virtualization/recipes-containers/singularity/singularity_git.bbappend +++ b/meta-webos-virtualization/recipes-containers/singularity/singularity_git.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosvirt1" +EXTENDPRAUTO:append = "webosvirt1" # ERROR: singularity-2.3.1+gitAUTOINC+e214d4ebf0-r0 do_package_qa: QA Issue: singularity rdepends on bash, but it isnt a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos-virtualization/recipes-core/packagegroups/packagegroup-webos-extended.bbappend b/meta-webos-virtualization/recipes-core/packagegroups/packagegroup-webos-extended.bbappend index 09978fecb..fbab6ba34 100644 --- a/meta-webos-virtualization/recipes-core/packagegroups/packagegroup-webos-extended.bbappend +++ b/meta-webos-virtualization/recipes-core/packagegroups/packagegroup-webos-extended.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2019-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosvirt2" +EXTENDPRAUTO:append = "webosvirt2" -RDEPENDS_${PN}_append = " \ +RDEPENDS:${PN}:append = " \ ${@bb.utils.contains('DISTRO_FEATURES', 'virtualization', 'docker-moby', '', d)} \ ${@bb.utils.contains('DISTRO_FEATURES', 'virtualization', 'docker-simple-webserver', '', d)} \ ${@bb.utils.contains('DISTRO_FEATURES', 'virtualization', 'python3-docker-compose', '', d)} \ diff --git a/meta-webos-virtualization/recipes-devtools/go/go-systemd_%.bbappend b/meta-webos-virtualization/recipes-devtools/go/go-systemd_%.bbappend index b85c6d71d..9cad1f77f 100644 --- a/meta-webos-virtualization/recipes-devtools/go/go-systemd_%.bbappend +++ b/meta-webos-virtualization/recipes-devtools/go/go-systemd_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosvirt1" +EXTENDPRAUTO:append = "webosvirt1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" \ No newline at end of file +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" \ No newline at end of file diff --git a/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver.bb b/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver.bb index 16058b918..d3a2a3057 100644 --- a/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver.bb +++ b/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver.bb @@ -32,5 +32,5 @@ do_install() { cp -rv ${S}/docker-simple-webserver ${D}${datadir} } -FILES_${PN} += "${webos_mountablestoragedir}" -SYSTEMD_SERVICE_${PN} = "docker-simple-webserver.service" +FILES:${PN} += "${webos_mountablestoragedir}" +SYSTEMD_SERVICE:${PN} = "docker-simple-webserver.service" diff --git a/meta-webos-virtualization/recipes-extended/libvirt/libvirt_%.bbappend b/meta-webos-virtualization/recipes-extended/libvirt/libvirt_%.bbappend index 7270fbfdc..7a5058323 100644 --- a/meta-webos-virtualization/recipes-extended/libvirt/libvirt_%.bbappend +++ b/meta-webos-virtualization/recipes-extended/libvirt/libvirt_%.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosvirt1" +EXTENDPRAUTO:append = "webosvirt1" # ERROR: libvirt-4.7.0-r0 do_package_qa: QA Issue: libvirt-ptest rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos-virtualization/recipes-extended/xen/xen-tools_%.bbappend b/meta-webos-virtualization/recipes-extended/xen/xen-tools_%.bbappend index 75008933c..3c9d5847b 100644 --- a/meta-webos-virtualization/recipes-extended/xen/xen-tools_%.bbappend +++ b/meta-webos-virtualization/recipes-extended/xen/xen-tools_%.bbappend @@ -1,25 +1,25 @@ # Copyright (c) 2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosvirt1" +EXTENDPRAUTO:append = "webosvirt1" -# ERROR: xen-tools-4.12+gitAUTOINC+a5fcafbfbe-r0 do_package_qa: QA Issue: /etc/xen/scripts/block-tap contained in package xen-tools-scripts-block requires /bin/bash, but no providers found in RDEPENDS_xen-tools-scripts-block? [file-rdeps] -# ERROR: xen-tools-4.12+gitAUTOINC+a5fcafbfbe-r0 do_package_qa: QA Issue: /usr/lib/xen/bin/xendomains contained in package xen-tools-xendomains requires /bin/bash, but no providers found in RDEPENDS_xen-tools-xendomains? [file-rdeps] -# ERROR: xen-tools-4.12+gitAUTOINC+a5fcafbfbe-r0 do_package_qa: QA Issue: /etc/xen/scripts/vif2 contained in package xen-tools-scripts-network requires /bin/bash, but no providers found in RDEPENDS_xen-tools-scripts-network? [file-rdeps] -# ERROR: xen-tools-4.12+gitAUTOINC+a5fcafbfbe-r0 do_package_qa: QA Issue: /etc/xen/scripts/launch-xenstore contained in package xen-tools-xencommons requires /bin/bash, but no providers found in RDEPENDS_xen-tools-xencommons? [file-rdeps] -# ERROR: xen-tools-4.12+gitAUTOINC+a5fcafbfbe-r0 do_package_qa: QA Issue: /etc/xen/scripts/remus-netbuf-setup contained in package xen-tools-remus requires /bin/bash, but no providers found in RDEPENDS_xen-tools-remus? [file-rdeps] -# ERROR: xen-tools-4.12+gitAUTOINC+a5fcafbfbe-r0 do_package_qa: QA Issue: /etc/xen/scripts/external-device-migrate contained in package xen-tools-scripts-common requires /bin/bash, but no providers found in RDEPENDS_xen-tools-scripts-common? [file-rdeps] +# ERROR: xen-tools-4.12+gitAUTOINC+a5fcafbfbe-r0 do_package_qa: QA Issue: /etc/xen/scripts/block-tap contained in package xen-tools-scripts-block requires /bin/bash, but no providers found in RDEPENDS:xen-tools-scripts-block? [file-rdeps] +# ERROR: xen-tools-4.12+gitAUTOINC+a5fcafbfbe-r0 do_package_qa: QA Issue: /usr/lib/xen/bin/xendomains contained in package xen-tools-xendomains requires /bin/bash, but no providers found in RDEPENDS:xen-tools-xendomains? [file-rdeps] +# ERROR: xen-tools-4.12+gitAUTOINC+a5fcafbfbe-r0 do_package_qa: QA Issue: /etc/xen/scripts/vif2 contained in package xen-tools-scripts-network requires /bin/bash, but no providers found in RDEPENDS:xen-tools-scripts-network? [file-rdeps] +# ERROR: xen-tools-4.12+gitAUTOINC+a5fcafbfbe-r0 do_package_qa: QA Issue: /etc/xen/scripts/launch-xenstore contained in package xen-tools-xencommons requires /bin/bash, but no providers found in RDEPENDS:xen-tools-xencommons? [file-rdeps] +# ERROR: xen-tools-4.12+gitAUTOINC+a5fcafbfbe-r0 do_package_qa: QA Issue: /etc/xen/scripts/remus-netbuf-setup contained in package xen-tools-remus requires /bin/bash, but no providers found in RDEPENDS:xen-tools-remus? [file-rdeps] +# ERROR: xen-tools-4.12+gitAUTOINC+a5fcafbfbe-r0 do_package_qa: QA Issue: /etc/xen/scripts/external-device-migrate contained in package xen-tools-scripts-common requires /bin/bash, but no providers found in RDEPENDS:xen-tools-scripts-common? [file-rdeps] # ERROR: xen-tools-4.12+gitAUTOINC+a5fcafbfbe-r0 do_package_qa: QA run found fatal errors. Please consider fixing them. VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-scripts-block_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-xendomains_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-scripts-network_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-xencommons_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-remus_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-scripts-common_append_class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-scripts-block:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-xendomains:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-scripts-network:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-xencommons:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-remus:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-scripts-common:append:class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-scripts-block_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-xendomains_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-scripts-network_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-xencommons_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-remus_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-scripts-common_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-scripts-block:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-xendomains:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-scripts-network:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-xencommons:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-remus:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-scripts-common:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos-virtualization/recipes-networking/openvswitch/openvswitch_git.bbappend b/meta-webos-virtualization/recipes-networking/openvswitch/openvswitch_git.bbappend index 595cad27e..aaf9153bb 100644 --- a/meta-webos-virtualization/recipes-networking/openvswitch/openvswitch_git.bbappend +++ b/meta-webos-virtualization/recipes-networking/openvswitch/openvswitch_git.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webosvirt1" +EXTENDPRAUTO:append = "webosvirt1" # ERROR: openvswitch-2.10.0+5563e309b80bbea9bff538e71ecfd7e5e538bab9-r0 do_package_qa: QA Issue: openvswitch rdepends on bash, but it isnt a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos-virtualization/recipes-upstreamable/docker-compose/python3-docker-compose_1.21.2.bb b/meta-webos-virtualization/recipes-upstreamable/docker-compose/python3-docker-compose_1.21.2.bb index 30a1497c3..dfe313a1b 100644 --- a/meta-webos-virtualization/recipes-upstreamable/docker-compose/python3-docker-compose_1.21.2.bb +++ b/meta-webos-virtualization/recipes-upstreamable/docker-compose/python3-docker-compose_1.21.2.bb @@ -10,7 +10,7 @@ inherit pypi setuptools3 SRC_URI[md5sum] = "a243f59b2d286c41ff6ed1c4d4b50996" SRC_URI[sha256sum] = "68b07193755440d5f8d4f47e6f3484212afc255d5b785a81353ea1e9298c1c2c" -RDEPENDS_${PN} = "\ +RDEPENDS:${PN} = "\ ${PYTHON_PN}-cached-property \ ${PYTHON_PN}-certifi \ ${PYTHON_PN}-chardet \ diff --git a/meta-webos/classes/image.bbclass b/meta-webos/classes/image.bbclass index dbaefadaf..d7ec279e3 100644 --- a/meta-webos/classes/image.bbclass +++ b/meta-webos/classes/image.bbclass @@ -16,7 +16,7 @@ do_image_wic[depends] += "virtual/kernel:do_webos_deploy_fixup" # for ostree do_image_ostree[depends] += "virtual/kernel:do_webos_deploy_fixup" -do_webos_deploy_fixup_prepend() { +do_webos_deploy_fixup:prepend() { [ -e ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext3 ] && \ ln -vf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ext3 \ ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.ext3 diff --git a/meta-webos/classes/kernel.bbclass b/meta-webos/classes/kernel.bbclass index 7e4f0b56f..07c796fce 100644 --- a/meta-webos/classes/kernel.bbclass +++ b/meta-webos/classes/kernel.bbclass @@ -10,7 +10,7 @@ require ${COREBASE}/meta/classes/kernel.bbclass inherit webos_deploy -do_deploy_append() { +do_deploy:append() { # The .bin-s are of no use to us. for type in ${KERNEL_IMAGETYPES} ; do rm -vf ${DEPLOYDIR}/${type}-${KERNEL_IMAGE_LINK_NAME}.bin @@ -18,7 +18,7 @@ do_deploy_append() { done } -do_webos_deploy_fixup_prepend() { +do_webos_deploy_fixup:prepend() { [ -e ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_NAME}.bin ] && \ ln -vf ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_NAME}.bin \ ${DEPLOY_DIR_IMAGE}/${KERNEL_IMAGE_LINK_NAME}.bin diff --git a/meta-webos/classes/webos_base.bbclass b/meta-webos/classes/webos_base.bbclass index ee650e764..15710f5ed 100644 --- a/meta-webos/classes/webos_base.bbclass +++ b/meta-webos/classes/webos_base.bbclass @@ -45,7 +45,7 @@ python do_write_bom_data() { pkg_lic = {} if packages: for pkg in packages.split(): - lic = d.getVar("LICENSE_%s" % pkg, True) + lic = d.getVar("LICENSE:%s" % pkg, True) if lic and lic != license: pkg_lic[pkg] = lic jsondata["pkg_lic"] = pkg_lic diff --git a/meta-webos/classes/webos_bluetooth_sil.bbclass b/meta-webos/classes/webos_bluetooth_sil.bbclass index 43ed0c616..573381f68 100644 --- a/meta-webos/classes/webos_bluetooth_sil.bbclass +++ b/meta-webos/classes/webos_bluetooth_sil.bbclass @@ -8,4 +8,4 @@ DEPENDS += "bluetooth-sil-api" -FILES_${PN} += "${libdir}/bluetooth-sils" +FILES:${PN} += "${libdir}/bluetooth-sils" diff --git a/meta-webos/classes/webos_certificates.bbclass b/meta-webos/classes/webos_certificates.bbclass index bf31ed113..457a40e9c 100644 --- a/meta-webos/classes/webos_certificates.bbclass +++ b/meta-webos/classes/webos_certificates.bbclass @@ -10,7 +10,7 @@ # links to the certificates will be in the image. Example: "/etc/ssl" # -DEPENDS_append = " openssl-native" +DEPENDS:append = " openssl-native" # Creates symlinks from a directory tree's files that match pattern. # DESTDIR/file.crt -> SOURCEDIR/path/to/file.pem @@ -75,7 +75,7 @@ webos_certificates_check_sanity() { fi } -do_install_append_class-target() { +do_install:append:class-target() { webos_certificates_check_sanity "${CERT_SOURCE_DIR}" "CERT_SOURCE_DIR" webos_certificates_check_sanity "${CERT_TARGET_DIR}" "CERT_TARGET_DIR" diff --git a/meta-webos/classes/webos_cmake.bbclass b/meta-webos/classes/webos_cmake.bbclass index 30efdfb0a..63f2a6135 100644 --- a/meta-webos/classes/webos_cmake.bbclass +++ b/meta-webos/classes/webos_cmake.bbclass @@ -12,7 +12,7 @@ # Extra variable is needed to be able to inhibit this dependency in case # we have some recipe which can reuse this bbclass but without this dependency. WEBOS_CMAKE_DEPENDS = "cmake-modules-webos-native" -DEPENDS_append = " ${WEBOS_CMAKE_DEPENDS}" +DEPENDS:append = " ${WEBOS_CMAKE_DEPENDS}" inherit cmake inherit webos_filesystem_paths @@ -112,7 +112,7 @@ do_generate_toolchain_file_append() { } # Record how cmake was invoked -do_configure_append() { +do_configure:append() { # Keep in sync with how cmake_do_configure() invokes cmake echo $(which cmake) \ ${OECMAKE_SITEFILE} \ diff --git a/meta-webos/classes/webos_enactjs_app.bbclass b/meta-webos/classes/webos_enactjs_app.bbclass index a4839c489..8d51d3b8a 100644 --- a/meta-webos/classes/webos_enactjs_app.bbclass +++ b/meta-webos/classes/webos_enactjs_app.bbclass @@ -23,16 +23,16 @@ inherit webos_enactjs_env # - enact-framework, enact-sandstone to use a shared Enact framework libraries # - coreutils-native to use timeout utility to prevent frozen NPM processes WEBOS_ENACTJS_APP_DEPENDS = "ilib-webapp mksnapshot-cross-${TARGET_ARCH} enact-framework enact-sandstone coreutils-native" -DEPENDS_append = " ${WEBOS_ENACTJS_APP_DEPENDS}" +DEPENDS:append = " ${WEBOS_ENACTJS_APP_DEPENDS}" # chromium doesn't build for armv[45]* COMPATIBLE_MACHINE = "(-)" -COMPATIBLE_MACHINE_aarch64 = "(.*)" -COMPATIBLE_MACHINE_armv6 = "(.*)" -COMPATIBLE_MACHINE_armv7a = "(.*)" -COMPATIBLE_MACHINE_armv7ve = "(.*)" -COMPATIBLE_MACHINE_x86 = "(.*)" -COMPATIBLE_MACHINE_x86-64 = "(.*)" +COMPATIBLE_MACHINE:aarch64 = "(.*)" +COMPATIBLE_MACHINE:armv6 = "(.*)" +COMPATIBLE_MACHINE:armv7a = "(.*)" +COMPATIBLE_MACHINE:armv7ve = "(.*)" +COMPATIBLE_MACHINE:x86 = "(.*)" +COMPATIBLE_MACHINE:x86-64 = "(.*)" # The appID of the app WEBOS_ENACTJS_APP_ID ??= "${BPN}" @@ -257,4 +257,4 @@ do_install() { cd ${working} } -FILES_${PN} += "${webos_applicationsdir}" +FILES:${PN} += "${webos_applicationsdir}" diff --git a/meta-webos/classes/webos_enactjs_env.bbclass b/meta-webos/classes/webos_enactjs_env.bbclass index 2e8d236bd..3791cea31 100644 --- a/meta-webos/classes/webos_enactjs_env.bbclass +++ b/meta-webos/classes/webos_enactjs_env.bbclass @@ -8,7 +8,7 @@ # Dependencies: # - enact-dev-native to get cli & jsdoc-to-ts and nodejs-native to get node & npm -DEPENDS_append = " enact-dev-native nodejs-native" +DEPENDS:append = " enact-dev-native nodejs-native" # Allow overriding the path to the enact-dev tools, in case an app needs # to pull in a different version diff --git a/meta-webos/classes/webos_event_monitor_plugin.bbclass b/meta-webos/classes/webos_event_monitor_plugin.bbclass index 2bf929e18..f78aab7e0 100644 --- a/meta-webos/classes/webos_event_monitor_plugin.bbclass +++ b/meta-webos/classes/webos_event_monitor_plugin.bbclass @@ -6,9 +6,9 @@ # WEBOS_EVENT_MONITOR_PLUGIN_DEPENDS = "event-monitor" -DEPENDS_append = " ${WEBOS_EVENT_MONITOR_PLUGIN_DEPENDS}" +DEPENDS:append = " ${WEBOS_EVENT_MONITOR_PLUGIN_DEPENDS}" WEBOS_EVENT_MONITOR_PLUGIN_PATH = "${libdir}/eventmonitor" EXTRA_OECMAKE += "-DWEBOS_EVENT_MONITOR_PLUGIN_PATH:STRING='${WEBOS_EVENT_MONITOR_PLUGIN_PATH}'" -FILES_${PN} += "${WEBOS_EVENT_MONITOR_PLUGIN_PATH}" +FILES:${PN} += "${WEBOS_EVENT_MONITOR_PLUGIN_PATH}" diff --git a/meta-webos/classes/webos_image.bbclass b/meta-webos/classes/webos_image.bbclass index ef576d66d..c8230c176 100644 --- a/meta-webos/classes/webos_image.bbclass +++ b/meta-webos/classes/webos_image.bbclass @@ -20,11 +20,11 @@ FEATURE_PACKAGES_webos-test = "packagegroup-webos-test" WEBOS_IMAGE_DEFAULT_SSH_IMAGE_FEATURE = "ssh-server-dropbear" WEBOS_IMAGE_DEFAULT_FEATURES = "package-management" -WEBOS_IMAGE_DEFAULT_FEATURES_append = "${@ ' ${WEBOS_IMAGE_DEFAULT_SSH_IMAGE_FEATURE}' if d.getVar('WEBOS_DISTRO_PRERELEASE',True) != '' else ''}" -WEBOS_IMAGE_DEFAULT_FEATURES_append_emulator = " ${WEBOS_IMAGE_DEFAULT_SSH_IMAGE_FEATURE}" +WEBOS_IMAGE_DEFAULT_FEATURES:append = "${@ ' ${WEBOS_IMAGE_DEFAULT_SSH_IMAGE_FEATURE}' if d.getVar('WEBOS_DISTRO_PRERELEASE',True) != '' else ''}" +WEBOS_IMAGE_DEFAULT_FEATURES:append:emulator = " ${WEBOS_IMAGE_DEFAULT_SSH_IMAGE_FEATURE}" IMAGE_FEATURES[validitems] += "webos-production-image" -WEBOS_IMAGE_DEFAULT_FEATURES_append = "${@ ' webos-production-image' if d.getVar('WEBOS_DISTRO_PRERELEASE',True) == '' else ''}" +WEBOS_IMAGE_DEFAULT_FEATURES:append = "${@ ' webos-production-image' if d.getVar('WEBOS_DISTRO_PRERELEASE',True) == '' else ''}" WEBOS_IMAGE_BASE_INSTALL = '\ packagegroup-core-boot \ @@ -91,31 +91,31 @@ inherit webos_filesystem_paths inherit webos_prerelease_dep do_rootfs[depends] += "libpbnjson-native:do_populate_sysroot" -WKS_FILE_qemux86 = "webos-qemux86-directdisk.wks" -WKS_FILE_qemux86-64 = "webos-qemux86-directdisk.wks" +WKS_FILE:qemux86 = "webos-qemux86-directdisk.wks" +WKS_FILE:qemux86-64 = "webos-qemux86-directdisk.wks" # Build only wic.vmdk for qemux86*, otherwise wic.vmdk might conflict with tar.gz and cause errors like: # | tar: ./usr/lib/perl/5.24.1/unicore/lib/Bc/EN.pl: file changed as we read it -IMAGE_FSTYPES_qemux86 = "wic.vmdk" -IMAGE_FSTYPES_qemux86-64 = "wic.vmdk" +IMAGE_FSTYPES:qemux86 = "wic.vmdk" +IMAGE_FSTYPES:qemux86-64 = "wic.vmdk" # A workaround for controlling '/media' and '/opt' policy of meta-updater -IMAGE_CMD_ostree_prepend_sota() { - echo "Moving ${IMAGE_ROOTFS} /media and /opt to /.media and /.opt to prevent IMAGE_CMD_ostree replacing them with symlinks to /var/rootdirs/" +IMAGE_CMD:ostree:prepend:sota() { + echo "Moving ${IMAGE_ROOTFS} /media and /opt to /.media and /.opt to prevent IMAGE_CMD:ostree replacing them with symlinks to /var/rootdirs/" mv -v ${IMAGE_ROOTFS}/media ${IMAGE_ROOTFS}/.media || true mv -v ${IMAGE_ROOTFS}/opt ${IMAGE_ROOTFS}/.opt || true } -IMAGE_CMD_ostree_append_sota() { +IMAGE_CMD:ostree:append:sota() { echo "Moving ${IMAGE_ROOTFS} /.media and /.opt back to /media and /opt" mv -v ${IMAGE_ROOTFS}/.media ${IMAGE_ROOTFS}/media mv -v ${IMAGE_ROOTFS}/.opt ${IMAGE_ROOTFS}/opt - # Remove the symlinks to var/rootdirs/media, var/rootdirs/opt created in IMAGE_CMD_ostree and replace them with backup versions of the real directories saved above in IMAGE_CMD_ostree + # Remove the symlinks to var/rootdirs/media, var/rootdirs/opt created in IMAGE_CMD:ostree and replace them with backup versions of the real directories saved above in IMAGE_CMD:ostree rm -fv ${OSTREE_ROOTFS}/media ${OSTREE_ROOTFS}/opt cp -av ${IMAGE_ROOTFS}/media ${OSTREE_ROOTFS} || true cp -av ${IMAGE_ROOTFS}/opt ${OSTREE_ROOTFS} || true } -IMAGE_CMD_ota_append_sota() { +IMAGE_CMD:ota:append:sota() { # Copy /var that was ignored by ostree cp -av ${IMAGE_ROOTFS}/var/luna ${OTA_SYSROOT}/ostree/deploy/${OSTREE_OSNAME}/var || true cp -av ${IMAGE_ROOTFS}/var/systemd ${OTA_SYSROOT}/ostree/deploy/${OSTREE_OSNAME}/var || true diff --git a/meta-webos/classes/webos_kernel_dep.bbclass b/meta-webos/classes/webos_kernel_dep.bbclass index f9db57373..7a2c7cb5b 100644 --- a/meta-webos/classes/webos_kernel_dep.bbclass +++ b/meta-webos/classes/webos_kernel_dep.bbclass @@ -9,6 +9,6 @@ # XXX Append -I${STAGING_KERNEL_DIR}/include to CFLAGS WEBOS_KERNEL_DEPENDS = "virtual/kernel" -DEPENDS_append = " ${WEBOS_KERNEL_DEPENDS}" +DEPENDS:append = " ${WEBOS_KERNEL_DEPENDS}" do_configure[depends] += "virtual/kernel:do_shared_workdir" diff --git a/meta-webos/classes/webos_localizable.bbclass b/meta-webos/classes/webos_localizable.bbclass index 09bebb76f..16d5e181a 100644 --- a/meta-webos/classes/webos_localizable.bbclass +++ b/meta-webos/classes/webos_localizable.bbclass @@ -6,7 +6,7 @@ LIB32_PREFIX ?= "" WEBOS_LOCALIZATION_DEPENDS = "${@ '' if bb.data.inherits_class('webos_qt_localization', d) or bb.data.inherits_class('webos_arch_indep', d) else '${LIB32_PREFIX}libwebosi18n' }" -DEPENDS_append = " ${WEBOS_LOCALIZATION_DEPENDS}" +DEPENDS:append = " ${WEBOS_LOCALIZATION_DEPENDS}" inherit webos_filesystem_paths @@ -71,7 +71,7 @@ webos_localization_resources_dir ??= "${datadir}/localization/${BPN}/resources" WEBOS_LOCALIZATION_INSTALL_RESOURCES ?= "true" -do_install_append() { +do_install:append() { if "${WEBOS_LOCALIZATION_INSTALL_RESOURCES}" ; then if ls ${WEBOS_LOCALIZATION_SOURCE_DIR}/resources/* >/dev/null 2>/dev/null ; then bbnote "Installing localized files" @@ -91,5 +91,5 @@ do_install_append() { } PACKAGE_BEFORE_PN += "${PN}-localization" -RRECOMMENDS_${PN} += "${PN}-localization" -FILES_${PN}-localization += "${webos_localization_resources_dir}" +RRECOMMENDS:${PN} += "${PN}-localization" +FILES:${PN}-localization += "${webos_localization_resources_dir}" diff --git a/meta-webos/classes/webos_lttng.bbclass b/meta-webos/classes/webos_lttng.bbclass index 18dd932f6..675bc106a 100644 --- a/meta-webos/classes/webos_lttng.bbclass +++ b/meta-webos/classes/webos_lttng.bbclass @@ -16,9 +16,9 @@ inherit webos_prerelease_dep WEBOS_LTTNG_ENABLED ??= "0" WEBOS_LTTNG_ENABLED ?= "${@ '0' if '${WEBOS_DISTRO_PRERELEASE}' == '' else '1' }" # Only enable LTTng for target components -WEBOS_LTTNG_ENABLED_class-native = "0" -WEBOS_LTTNG_ENABLED_class-nativesdk = "0" +WEBOS_LTTNG_ENABLED:class-native = "0" +WEBOS_LTTNG_ENABLED:class-nativesdk = "0" # Use _append so that WEBOS_LTTNG_ENABLED is evaluated during finalization so that the overrides effectual. -DEPENDS_append = "${@ ' lttng-ust' if '${WEBOS_LTTNG_ENABLED}' == '1' else ''}" -RDEPENDS_${PN}_append = "${@ ' lttng-tools lttng-modules babeltrace' if '${WEBOS_LTTNG_ENABLED}' == '1' else ''}" +DEPENDS:append = "${@ ' lttng-ust' if '${WEBOS_LTTNG_ENABLED}' == '1' else ''}" +RDEPENDS:${PN}:append = "${@ ' lttng-tools lttng-modules babeltrace' if '${WEBOS_LTTNG_ENABLED}' == '1' else ''}" diff --git a/meta-webos/classes/webos_machine_dep.bbclass b/meta-webos/classes/webos_machine_dep.bbclass index edb5e47fd..3cae0a8a3 100644 --- a/meta-webos/classes/webos_machine_dep.bbclass +++ b/meta-webos/classes/webos_machine_dep.bbclass @@ -12,7 +12,7 @@ PACKAGE_ARCH = "${MACHINE_ARCH}" # (Note that the OE 2011.03 bitbake.conf defines WORKDIR to effectively prepend # "${PACKAGE_ARCH}-${TARGET_VENDOR}-${TARGET_OS}/" for all PACKAGE_ARCH-s, i.e. # there are separate subdirectories instead of suffixes.) -# WORKDIR_append = "-${PACKAGE_ARCH}" +# WORKDIR:append = "-${PACKAGE_ARCH}" # Append this to EXTRA_OEMAKE to allow your makefile be MACHINE-dependent: WEBOS_MACHINE ?= "${MACHINE}" diff --git a/meta-webos/classes/webos_npm_env.bbclass b/meta-webos/classes/webos_npm_env.bbclass index b09c6fa5d..805f515eb 100644 --- a/meta-webos/classes/webos_npm_env.bbclass +++ b/meta-webos/classes/webos_npm_env.bbclass @@ -27,7 +27,7 @@ WEBOS_NPM_REGISTRY ?= "https://registry.npmjs.org/" WEBOS_NPM_ARCH ?= "${@get_nodejs_arch(d)}" WEBOS_NPM_INSTALL_FLAGS ?= "--arch=${WEBOS_NPM_ARCH} --target_arch=${WEBOS_NPM_ARCH} --production --without-ssl --insecure --no-optional --verbose" -do_compile_prepend() { +do_compile:prepend() { # this is needed to use user's gitconfig even after changing the HOME directory bellow # need to check ${HOME}/.gitconfig existence not only because it might be missing in real HOME of given user # but also HOME might be already changed to WORKDIR or some other directory somewhere else diff --git a/meta-webos/classes/webos_nyx_module_provider.bbclass b/meta-webos/classes/webos_nyx_module_provider.bbclass index ab4addb9e..e7c740067 100644 --- a/meta-webos/classes/webos_nyx_module_provider.bbclass +++ b/meta-webos/classes/webos_nyx_module_provider.bbclass @@ -8,7 +8,7 @@ # If no modules from this provider are needed for an image, then it might # produce an empty package -ALLOW_EMPTY_${PN} = "1" +ALLOW_EMPTY:${PN} = "1" # Pass in the list of required modules # @@ -43,4 +43,4 @@ EXTRA_OECMAKE[vardepsexclude] += "DATETIME" DEPENDS += "nyx-lib" # Add any built modules that are installed -FILES_${PN} += "${libdir}/nyx/modules/*" +FILES:${PN} += "${libdir}/nyx/modules/*" diff --git a/meta-webos/classes/webos_preferred_gfx_image_format.bbclass b/meta-webos/classes/webos_preferred_gfx_image_format.bbclass index 9756f7f50..97703e262 100644 --- a/meta-webos/classes/webos_preferred_gfx_image_format.bbclass +++ b/meta-webos/classes/webos_preferred_gfx_image_format.bbclass @@ -13,7 +13,7 @@ WEBOS_PREFERRED_GFX_IMAGE_FORMAT_RDEPENDS = "${@ \ '' \ }" WEBOS_PREFERRED_GFX_IMAGE_FORMAT_RDEPENDS[vardepvalue] = "${WEBOS_PREFERRED_GFX_IMAGE_FORMAT_RDEPENDS}" -RDEPENDS_${PN}_append = " ${WEBOS_PREFERRED_GFX_IMAGE_FORMAT_RDEPENDS}" +RDEPENDS:${PN}:append = " ${WEBOS_PREFERRED_GFX_IMAGE_FORMAT_RDEPENDS}" WEBOS_PREFERRED_GFX_IMAGE_FORMAT_DEPENDS = "${@ \ '${WEBOS_PREFERRED_GFX_IMAGE_FORMAT_CONVERSION_UTILITY}' \ @@ -21,7 +21,7 @@ WEBOS_PREFERRED_GFX_IMAGE_FORMAT_DEPENDS = "${@ \ '' \ }" WEBOS_PREFERRED_GFX_IMAGE_FORMAT_DEPENDS[vardepvalue] = "${WEBOS_PREFERRED_GFX_IMAGE_FORMAT_DEPENDS}" -DEPENDS_append = " ${WEBOS_PREFERRED_GFX_IMAGE_FORMAT_DEPENDS}" +DEPENDS:append = " ${WEBOS_PREFERRED_GFX_IMAGE_FORMAT_DEPENDS}" WEBOS_PREFERRED_GFX_IMAGE_FORMAT_INTERNAL = "${@ \ '${WEBOS_PREFERRED_GFX_IMAGE_FORMAT}' \ @@ -118,7 +118,7 @@ addtask do_convert_webos_preferred_gfx_image_format after do_install before do_p # 1) The files might be used elsewhere for example second screen apps # 2) The platform remains flexible and does not enforce it # Hence the UI layer needs to probe the existance of the native version -pkg_postinst_${PN}_append() { +pkg_postinst:${PN}:append() { enabled=${WEBOS_PREFERRED_GFX_IMAGE_FORMAT_ENABLED} if [ "$enabled" = "1" ] ; then pncorrected=${PN} diff --git a/meta-webos/classes/webos_qmake6.bbclass b/meta-webos/classes/webos_qmake6.bbclass index c89f7f577..eee9a0d1b 100644 --- a/meta-webos/classes/webos_qmake6.bbclass +++ b/meta-webos/classes/webos_qmake6.bbclass @@ -77,10 +77,10 @@ EXTRA_OEMAKE += "${EXPORT_WEBOS_QMAKE_TARGET}" # Since 6.1 rcc is located in libexec. (QTBUG-92245) WEBOS_EXTRA_PATH .= "${OE_QMAKE_PATH_EXTERNAL_HOST_BINS}:${STAGING_LIBEXECDIR_NATIVE}:" -do_configure_prepend() { +do_configure:prepend() { ${EXPORT_WEBOS_QMAKE_MACHINE} } -do_compile_prepend() { +do_compile:prepend() { ${EXPORT_WEBOS_QMAKE_MACHINE} } diff --git a/meta-webos/classes/webos_qmake6_paths.bbclass b/meta-webos/classes/webos_qmake6_paths.bbclass index 71808c4a3..f93c47247 100644 --- a/meta-webos/classes/webos_qmake6_paths.bbclass +++ b/meta-webos/classes/webos_qmake6_paths.bbclass @@ -11,8 +11,8 @@ QMAKE_MKSPEC_PATH_NATIVE = "${STAGING_LIBDIR_NATIVE}${QT_DIR_NAME}" QMAKE_MKSPEC_PATH_TARGET = "${STAGING_LIBDIR}${QT_DIR_NAME}" QMAKE_MKSPEC_PATH = "${QMAKE_MKSPEC_PATH_TARGET}" -QMAKE_MKSPEC_PATH_class-native = "${QMAKE_MKSPEC_PATH_NATIVE}" -QMAKE_MKSPEC_PATH_class-nativesdk = "${QMAKE_MKSPEC_PATH_NATIVE}" +QMAKE_MKSPEC_PATH:class-native = "${QMAKE_MKSPEC_PATH_NATIVE}" +QMAKE_MKSPEC_PATH:class-nativesdk = "${QMAKE_MKSPEC_PATH_NATIVE}" OE_QMAKE_PATH_PREFIX = "${prefix}" OE_QMAKE_PATH_HEADERS = "${includedir}${QT_DIR_NAME}" @@ -29,7 +29,7 @@ OE_QMAKE_PATH_SETTINGS = "${sysconfdir}" OE_QMAKE_PATH_EXAMPLES = "${datadir}/examples" OE_QMAKE_PATH_TESTS = "${datadir}/tests" OE_QMAKE_PATH_HOST_PREFIX = "" -OE_QMAKE_PATH_HOST_PREFIX_class-target = "${STAGING_DIR_NATIVE}" +OE_QMAKE_PATH_HOST_PREFIX:class-target = "${STAGING_DIR_NATIVE}" OE_QMAKE_PATH_HOST_BINS = "${bindir}${QT_DIR_NAME}" OE_QMAKE_PATH_HOST_DATA = "${QMAKE_MKSPEC_PATH_TARGET}" OE_QMAKE_PATH_HOST_LIBS = "${STAGING_LIBDIR}" diff --git a/meta-webos/classes/webos_qmllint.bbclass b/meta-webos/classes/webos_qmllint.bbclass index 680ea7e15..338a7a5e8 100644 --- a/meta-webos/classes/webos_qmllint.bbclass +++ b/meta-webos/classes/webos_qmllint.bbclass @@ -3,7 +3,7 @@ # QML syntax error and problematic pattern checker # -DEPENDS_append = " qtdeclarative-native libxml2-native" +DEPENDS:append = " qtdeclarative-native libxml2-native" inherit qt6-paths @@ -26,7 +26,7 @@ WEBOS_QMLLINT_OPTIONS ?= "${@ ' \ -I ${STAGING_DIR_NATIVE}${OE_QMAKE_PATH_QML}' \ if d.getVar('QT_VERSION', True) != '5' else '' }" -do_compile_prepend () { +do_compile:prepend () { bbnote "Checking QML syntax error and problematic pattern (Step 1): .qml or .js files stored as qresource" rm -f ${WEBOS_QMLLINT_ERROR_LOG} find ${S} -type f -name "*.qrc" | while read qrc; do @@ -50,7 +50,7 @@ do_compile_prepend () { fi } -do_install_append () { +do_install:append () { bbnote "Checking QML syntax error and problematic pattern (Step 2): .qml or .js files to be installed" rm -f ${WEBOS_QMLLINT_ERROR_LOG} find ${D} -type f -not -empty -name "*.qml" -o -name "*.js" | while read file; do diff --git a/meta-webos/classes/webos_qt_global.bbclass b/meta-webos/classes/webos_qt_global.bbclass index 96496b449..4bfac8559 100644 --- a/meta-webos/classes/webos_qt_global.bbclass +++ b/meta-webos/classes/webos_qt_global.bbclass @@ -1,5 +1,5 @@ # Copyright (c) 2021 LG Electronics, Inc. # Pre-defined macro for OS identification -TARGET_CFLAGS_append = " -D__WEBOS__" -TARGET_CXXFLAGS_append = " -D__WEBOS__" +TARGET_CFLAGS:append = " -D__WEBOS__" +TARGET_CXXFLAGS:append = " -D__WEBOS__" diff --git a/meta-webos/classes/webos_qt_localization.bbclass b/meta-webos/classes/webos_qt_localization.bbclass index ad32e8443..4f797d6e0 100644 --- a/meta-webos/classes/webos_qt_localization.bbclass +++ b/meta-webos/classes/webos_qt_localization.bbclass @@ -7,7 +7,7 @@ inherit webos_localizable inherit qt6-paths WEBOS_QT_LOCALIZATION_DEPENDS = "qttools-native" -DEPENDS_append = " ${WEBOS_QT_LOCALIZATION_DEPENDS}" +DEPENDS:append = " ${WEBOS_QT_LOCALIZATION_DEPENDS}" # # Allow the default localization PN of the app to be overridden. The default is @@ -24,7 +24,7 @@ WEBOS_QT_LOCALIZATION_QM_BASENAME ?= "${@ '${WEBOS_QT_LOCALIZATION_PN}'.split('. # # Qt application resources sholud not be optimized, so that it needs 't' options # -WEBOS_LOCALIZATION_OPTIONS_append = " -t" +WEBOS_LOCALIZATION_OPTIONS:append = " -t" # # @@ -86,7 +86,7 @@ fakeroot do_generate_webos_qt_localization() { # Most QT recipes don't need the resources to be installed WEBOS_LOCALIZATION_INSTALL_RESOURCES = "false" -FILES_${PN}-localization += "${webos_qt_localization_qm_dir}/*.qm" +FILES:${PN}-localization += "${webos_qt_localization_qm_dir}/*.qm" PACKAGES += "${PN}-localization-ts" -FILES_${PN}-localization-ts += "${webos_qt_localization_ts_dir}" +FILES:${PN}-localization-ts += "${webos_qt_localization_ts_dir}" diff --git a/meta-webos/classes/webos_system_bus.bbclass b/meta-webos/classes/webos_system_bus.bbclass index 452589b35..adabf655d 100644 --- a/meta-webos/classes/webos_system_bus.bbclass +++ b/meta-webos/classes/webos_system_bus.bbclass @@ -55,7 +55,7 @@ webos_system_bus_install_files () { # webOS OSE is not require installation by the recipe). WEBOS_SYSTEM_BUS_FILES_LOCATION ?= "${S}/service" -do_install_append () { +do_install:append () { # Only want WEBOS_SYSTEM_BUS_SKIP_DO_TASKS to be expanded by bitbake => single quotes if [ '${WEBOS_SYSTEM_BUS_SKIP_DO_TASKS}' != 1 ]; then local tree=${WEBOS_SYSTEM_BUS_FILES_LOCATION} @@ -89,9 +89,9 @@ WEBOS_SYSTEM_BUS_DIRS += " \ ${webos_sysbus_manifestsdir} \ " -FILES_${PN} += "${WEBOS_SYSTEM_BUS_DIRS_LEGACY} ${WEBOS_SYSTEM_BUS_DIRS}" +FILES:${PN} += "${WEBOS_SYSTEM_BUS_DIRS_LEGACY} ${WEBOS_SYSTEM_BUS_DIRS}" -sysroot_stage_dirs_append() { +sysroot_stage_dirs:append() { # $to is 2nd parameter passed to sysroot_stage_dir, e.g. ${SYSROOT_DESTDIR} passed from sysroot_stage_all for dir in ${WEBOS_SYSTEM_BUS_DIRS_LEGACY} ${WEBOS_SYSTEM_BUS_DIRS}; do rm -rf $to$dir diff --git a/meta-webos/classes/webos_test_provider.bbclass b/meta-webos/classes/webos_test_provider.bbclass index 1223d50af..446cb0ba4 100644 --- a/meta-webos/classes/webos_test_provider.bbclass +++ b/meta-webos/classes/webos_test_provider.bbclass @@ -36,10 +36,10 @@ EXTRA_OECMAKE += "-DWEBOS_CONFIG_BUILD_TESTS:BOOL=${@ 'TRUE' if oe.data.typed_va EXTRA_OECMAKE += "-DWEBOS_CONFIG_INSTALL_TESTS:BOOL=${@ 'TRUE' if oe.data.typed_value('WEBOS_CONFIG_INSTALL_TESTS',d) else 'FALSE' }" # Ensure tests are installed if they are in the correct place -FILES_${PN}-ptest += "${webos_testsdir}/${BPN}" +FILES:${PN}-ptest += "${webos_testsdir}/${BPN}" # Bring in the g-lib test runner, as something is bound to use it -RDEPENDS_${PN}-ptest += "glib-2.0-utils" +RDEPENDS:${PN}-ptest += "glib-2.0-utils" # Also, add an RDEPENDS on ptest-runner - saves adding it to a packagegroup -RDEPENDS_${PN}-ptest += "ptest-runner" +RDEPENDS:${PN}-ptest += "ptest-runner" diff --git a/meta-webos/conf/distro/include/tcmode-default.inc b/meta-webos/conf/distro/include/tcmode-default.inc index a74153de6..d7a0ea896 100644 --- a/meta-webos/conf/distro/include/tcmode-default.inc +++ b/meta-webos/conf/distro/include/tcmode-default.inc @@ -9,12 +9,12 @@ require ${COREBASE}/meta/conf/distro/include/tcmode-default.inc # And this is needed for libgcc and gcc-runtime (which are TUNE_PKGARCH) to be # built with the same signatures when they depend on by default MACHINE_ARCH # glibc -PACKAGE_ARCH_pn-glibc = "${TUNE_PKGARCH}" -PACKAGE_ARCH_pn-glibc-initial = "${TUNE_PKGARCH}" -PACKAGE_ARCH_pn-glibc-locale = "${TUNE_PKGARCH}" -PACKAGE_ARCH_pn-glibc-mtrace = "${TUNE_PKGARCH}" -PACKAGE_ARCH_pn-glibc-scripts = "${TUNE_PKGARCH}" -PACKAGE_ARCH_pn-linux-libc-headers = "${TUNE_PKGARCH}" -PACKAGE_ARCH_pn-libgcc-initial = "${TUNE_PKGARCH}" +PACKAGE_ARCH:pn-glibc = "${TUNE_PKGARCH}" +PACKAGE_ARCH:pn-glibc-initial = "${TUNE_PKGARCH}" +PACKAGE_ARCH:pn-glibc-locale = "${TUNE_PKGARCH}" +PACKAGE_ARCH:pn-glibc-mtrace = "${TUNE_PKGARCH}" +PACKAGE_ARCH:pn-glibc-scripts = "${TUNE_PKGARCH}" +PACKAGE_ARCH:pn-linux-libc-headers = "${TUNE_PKGARCH}" +PACKAGE_ARCH:pn-libgcc-initial = "${TUNE_PKGARCH}" -LIBC_DEPENDENCIES_remove = "libsegfault" +LIBC_DEPENDENCIES:remove = "libsegfault" diff --git a/meta-webos/conf/distro/include/webos-component-head.inc b/meta-webos/conf/distro/include/webos-component-head.inc index 3e27baa23..e8955e670 100644 --- a/meta-webos/conf/distro/include/webos-component-head.inc +++ b/meta-webos/conf/distro/include/webos-component-head.inc @@ -1,5 +1,5 @@ # Copyright (c) 2012-2013 LG Electronics, Inc. # -# Set SRCREV_pn- to "${AUTOREV}" in this file if the SRC_URI in +# Set SRCREV:pn- to "${AUTOREV}" in this file if the SRC_URI in # the recipe for doesn't specify a tag from which to fetch. # diff --git a/meta-webos/conf/distro/include/webos-features.inc b/meta-webos/conf/distro/include/webos-features.inc index 2b645e10f..26d7eff0f 100644 --- a/meta-webos/conf/distro/include/webos-features.inc +++ b/meta-webos/conf/distro/include/webos-features.inc @@ -26,7 +26,7 @@ WEBOS_DISTRO_FEATURES_INIT_CONSIDERED += "gobject-introspection-data" DISTRO_FEATURES_BACKFILL_CONSIDERED += "${WEBOS_DISTRO_FEATURES_INIT_CONSIDERED}" WEBOS_DISTRO_FEATURES_LD = "ld-is-gold" -DISTRO_FEATURES_BACKFILL_append = " ${WEBOS_DISTRO_FEATURES_LD}" +DISTRO_FEATURES_BACKFILL:append = " ${WEBOS_DISTRO_FEATURES_LD}" WEBOS_DISTRO_FEATURES_LD_CONSIDERED ?= "" DISTRO_FEATURES_BACKFILL_CONSIDERED += "${WEBOS_DISTRO_FEATURES_LD_CONSIDERED}" diff --git a/meta-webos/conf/distro/include/webos-icecc-components-exclusion.inc b/meta-webos/conf/distro/include/webos-icecc-components-exclusion.inc index f09b099a1..5fb5cd1bd 100644 --- a/meta-webos/conf/distro/include/webos-icecc-components-exclusion.inc +++ b/meta-webos/conf/distro/include/webos-icecc-components-exclusion.inc @@ -2,7 +2,7 @@ # These packages fail to build when icecc is used -ICECC_USER_PACKAGE_BL_append = " \ +ICECC_USER_PACKAGE_BL:append = " \ busybox \ gmp-native \ linux-libc-headers \ @@ -10,7 +10,7 @@ ICECC_USER_PACKAGE_BL_append = " \ nss \ " -ICECC_USER_PACKAGE_BL_append_arm = " \ +ICECC_USER_PACKAGE_BL:append:arm = " \ binutils \ e2fsprogs \ gcc \ diff --git a/meta-webos/conf/distro/include/webos-preferred-providers.inc b/meta-webos/conf/distro/include/webos-preferred-providers.inc index 6f6e433c3..482f338cd 100644 --- a/meta-webos/conf/distro/include/webos-preferred-providers.inc +++ b/meta-webos/conf/distro/include/webos-preferred-providers.inc @@ -37,8 +37,8 @@ VIRTUAL-RUNTIME_bluetooth_stack = "bluez5" BLUETOOTH_SIL_NAME = "bluez5" BLUEZ = "${VIRTUAL-RUNTIME_bluetooth_stack}" -BLUEZ_class-native = "bluez5" -BLUEZ_class-nativesdk = "bluez5" +BLUEZ:class-native = "bluez5" +BLUEZ:class-nativesdk = "bluez5" # Just for documentation; these values are the defaults set in the recipes that # use them. @@ -46,12 +46,12 @@ VIRTUAL-RUNTIME_cpushareholder = "cpushareholder-stub" # Use Enactbrowser by default, except for armv45 VIRTUAL-RUNTIME_com.webos.app.browser ?= "com.webos.app.enactbrowser" -VIRTUAL-RUNTIME_com.webos.app.browser_armv4 = "" -VIRTUAL-RUNTIME_com.webos.app.browser_armv5 = "" +VIRTUAL-RUNTIME_com.webos.app.browser:armv4 = "" +VIRTUAL-RUNTIME_com.webos.app.browser:armv5 = "" VIRTUAL-RUNTIME_webappmanager = "wam" -VIRTUAL-RUNTIME_webappmanager_armv4 = "" -VIRTUAL-RUNTIME_webappmanager_armv5 = "" +VIRTUAL-RUNTIME_webappmanager:armv4 = "" +VIRTUAL-RUNTIME_webappmanager:armv5 = "" VIRTUAL-RUNTIME_initscripts = "webos-initscripts" PREFERRED_RPROVIDER_initd-functions = "webos-initscripts" @@ -64,11 +64,11 @@ VIRTUAL-RUNTIME_init_manager = "systemd" # With upstart we don't need update-rc.d, as bonus fixes following avahi issue for us: # http://lists.openembedded.org/pipermail/openembedded-core/2013-November/086901.html BAD_RECOMMENDATIONS += "update-rc.d" -UPDATERCD_class-target = "" +UPDATERCD:class-target = "" # Don't install big /boot/vmlinux* file by default in qemux86 images (included in oprofile's RRECOMMENDS) # Use --no-vmlinux option to opcontrol or install it manually if you need to see samples from kernel -BAD_RECOMMENDATIONS_append_qemux86 = " kernel-vmlinux" +BAD_RECOMMENDATIONS:append:qemux86 = " kernel-vmlinux" PREFERRED_PROVIDER_virtual/docker = "docker-moby" diff --git a/meta-webos/conf/distro/include/webos-recipe-blacklist.inc b/meta-webos/conf/distro/include/webos-recipe-blacklist.inc index b59fd0833..700154946 100644 --- a/meta-webos/conf/distro/include/webos-recipe-blacklist.inc +++ b/meta-webos/conf/distro/include/webos-recipe-blacklist.inc @@ -114,14 +114,14 @@ PNBLACKLIST[cifs-utils] ?= "ERROR: cifs-utils-6.7-r0 do_package: QA Issue: cifs- # meta-openembedded/meta-networking/recipes-support/linux-atm/linux-atm_2.5.2.bb:do_package_qa PNBLACKLIST[linux-atm] ?= "ERROR: linux-atm-2.5.2-r0 do_package_qa: QA Issue: linux-atm package is not obeying usrmerge distro feature. /lib should be relocated to /usr. [usrmerge]" # meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc_0.9.4d.bb:do_package -PNBLACKLIST[lirc] ?= "ERROR: lirc-0.9.4d-r0 do_package: SYSTEMD_SERVICE_lirc value lircmd.service does not exist" +PNBLACKLIST[lirc] ?= "ERROR: lirc-0.9.4d-r0 do_package: SYSTEMD_SERVICE:lirc value lircmd.service does not exist" # phonet-utils removal sent in: # https://lists.openembedded.org/g/openembedded-devel/message/90533 # will probably get merged in hardknott # meta-openembedded/meta-oe/recipes-connectivity/phonet-utils/phonet-utils_git.bb:do_package_qa PNBLACKLIST[phonet-utils] ?= "ERROR: phonet-utils-0.0.0+gitrAUTOINC+4acfa720fd-r2 do_package_qa: QA Issue: phonet-utils package is not obeying usrmerge distro feature. /lib should be relocated to /usr. [usrmerge]" # meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client_7.12.bb:do_package -PNBLACKLIST[boinc-client] ?= "ERROR: boinc-client-7.12-r0 do_package: SYSTEMD_SERVICE_boinc-client value boinc-client.service does not exist" +PNBLACKLIST[boinc-client] ?= "ERROR: boinc-client-7.12-r0 do_package: SYSTEMD_SERVICE:boinc-client value boinc-client.service does not exist" # meta-openembedded/meta-oe/recipes-extended/scsirastools/scsirastools_1.6.6.bb:do_package PNBLACKLIST[scsirastools] ?= "ERROR: scsirastools-1.6.6-r0 do_package: QA Issue: scsirastools: Files/directories were installed but not shipped in any package" # meta-openembedded/meta-oe/recipes-graphics/dietsplash/dietsplash_git.bb:do_package @@ -136,11 +136,11 @@ PNBLACKLIST[gradm] ?= "ERROR: gradm-3.1-r0 do_package: QA Issue: gradm: Files/di # https://lists.openembedded.org/g/openembedded-devel/message/90578 # will probably get merged in hardknott # meta-openembedded/meta-oe/recipes-support/libsmi/libsmi_0.5.0.bb:do_package_qa -PNBLACKLIST[libsmi] ?= "ERROR: libsmi-0.5.0-r0 do_package_qa: QA Issue: /usr/bin/smistrip contained in package libsmi requires /usr/bin/sh, but no providers found in RDEPENDS_libsmi? [file-rdeps]" +PNBLACKLIST[libsmi] ?= "ERROR: libsmi-0.5.0-r0 do_package_qa: QA Issue: /usr/bin/smistrip contained in package libsmi requires /usr/bin/sh, but no providers found in RDEPENDS:libsmi? [file-rdeps]" # meta-raspberrypi/recipes-multimedia/omxplayer/omxplayer_git.bb:do_compile PNBLACKLIST[omxplayer] ?= "ERROR: omxplayer-git-r4 do_compile: Function failed: do_compile: DllAvFormat.h:117:51: error: ::avio_feof has not been declared" # meta-virtualization/recipes-containers/lxcfs/lxcfs_3.0.1.bb:do_package -PNBLACKLIST[lxcfs] ?= "ERROR: lxcfs-3.0.1-r0 do_package: SYSTEMD_SERVICE_lxcfs value lxcfs.service does not exist" +PNBLACKLIST[lxcfs] ?= "ERROR: lxcfs-3.0.1-r0 do_package: SYSTEMD_SERVICE:lxcfs value lxcfs.service does not exist" # meta-networking/recipes-kernel/wireguard/wireguard-tools_1.0.20200319.bb PNBLACKLIST[wireguard-tools] ?= "Depends on blacklisted wireguard-module" diff --git a/meta-webos/conf/distro/include/webos-sota.inc b/meta-webos/conf/distro/include/webos-sota.inc index d33c89be9..6be5c55ee 100644 --- a/meta-webos/conf/distro/include/webos-sota.inc +++ b/meta-webos/conf/distro/include/webos-sota.inc @@ -14,10 +14,10 @@ OSTREE_BRANCHNAME = "${IMAGE_BASENAME}-${WEBOS_DISTRO_BUILD_CODENAME}" OSTREE_COMMIT_SUBJECT ?= "${IMAGE_BASENAME}${IMAGE_VERSION_SUFFIX}" # Don't use aktualizr as a SOTA_CLIENT (will create new one) -IMAGE_INSTALL_remove_sota = "aktualizr aktualizr-info" +IMAGE_INSTALL:remove:sota = "aktualizr aktualizr-info" SOTA_CLIENT_PROV = "" # Disable sota when target is qemu -INHERIT_remove_qemuall = "sota" -DISTRO_FEATURES_remove_qemuall = "sota usrmerge" -DISTRO_FEATURES_NATIVE_remove_qemuall = "sota" +INHERIT:remove:qemuall = "sota" +DISTRO_FEATURES:remove:qemuall = "sota usrmerge" +DISTRO_FEATURES_NATIVE:remove:qemuall = "sota" diff --git a/meta-webos/conf/distro/include/webos-toolchain.inc b/meta-webos/conf/distro/include/webos-toolchain.inc index 09271a8b3..eef8e8d30 100644 --- a/meta-webos/conf/distro/include/webos-toolchain.inc +++ b/meta-webos/conf/distro/include/webos-toolchain.inc @@ -10,7 +10,7 @@ WEBOS_DISTRO_FEATURES_LIBC_DEFAULT ?= "\ libc-utmp libc-utmpx libc-wordexp libc-posix-clang-wchar libc-posix-regexp libc-posix-regexp-glibc \ libc-posix-wchar-io" WEBOS_DISTRO_FEATURES_LIBC = "${WEBOS_DISTRO_FEATURES_LIBC_DEFAULT}" -WEBOS_DISTRO_FEATURES_LIBC_class-nativesdk = "${WEBOS_DISTRO_FEATURES_LIBC_DEFAULT}" +WEBOS_DISTRO_FEATURES_LIBC:class-nativesdk = "${WEBOS_DISTRO_FEATURES_LIBC_DEFAULT}" IMAGE_LINGUAS = "" diff --git a/meta-webos/conf/distro/include/webos.inc b/meta-webos/conf/distro/include/webos.inc index 46a947f62..32b717bb5 100644 --- a/meta-webos/conf/distro/include/webos.inc +++ b/meta-webos/conf/distro/include/webos.inc @@ -22,59 +22,59 @@ require conf/distro/include/security_flags.inc # Enable -Werror=return-type flag EXTRA_WEBOS_WERROR = "-Werror=return-type" # http://caprica.lgsvl.com:8080/Errors/Details/1564610 -EXTRA_WEBOS_WERROR_pn-openipmi = "" +EXTRA_WEBOS_WERROR:pn-openipmi = "" # http://caprica.lgsvl.com:8080/Errors/Details/1564608 -EXTRA_WEBOS_WERROR_pn-indent = "" +EXTRA_WEBOS_WERROR:pn-indent = "" # http://caprica.lgsvl.com:8080/Errors/Details/1564607 -EXTRA_WEBOS_WERROR_pn-acpitool = "" +EXTRA_WEBOS_WERROR:pn-acpitool = "" # http://caprica.lgsvl.com:8080/Errors/Details/1564606 -EXTRA_WEBOS_WERROR_pn-libdbus-c++ = "" +EXTRA_WEBOS_WERROR:pn-libdbus-c++ = "" # http://caprica.lgsvl.com:8080/Errors/Details/1564605 -EXTRA_WEBOS_WERROR_pn-strongswan = "" +EXTRA_WEBOS_WERROR:pn-strongswan = "" # http://caprica.lgsvl.com:8080/Errors/Details/1564604 -EXTRA_WEBOS_WERROR_pn-joe = "" +EXTRA_WEBOS_WERROR:pn-joe = "" # http://caprica.lgsvl.com:8080/Errors/Details/1564603 -EXTRA_WEBOS_WERROR_pn-inotify-tools = "" +EXTRA_WEBOS_WERROR:pn-inotify-tools = "" # http://caprica.lgsvl.com:8080/Errors/Details/1564602 -EXTRA_WEBOS_WERROR_pn-smem = "" +EXTRA_WEBOS_WERROR:pn-smem = "" # http://caprica.lgsvl.com:8080/Errors/Details/1564601 -EXTRA_WEBOS_WERROR_pn-ckermit = "" +EXTRA_WEBOS_WERROR:pn-ckermit = "" # http://caprica.lgsvl.com:8080/Errors/Details/1564600 -EXTRA_WEBOS_WERROR_pn-mbuffer = "" +EXTRA_WEBOS_WERROR:pn-mbuffer = "" # http://caprica.lgsvl.com:8080/Errors/Details/1564599 -EXTRA_WEBOS_WERROR_pn-dhrystone = "" +EXTRA_WEBOS_WERROR:pn-dhrystone = "" # http://caprica.lgsvl.com:8080/Errors/Details/1564598 -EXTRA_WEBOS_WERROR_pn-cscope = "" +EXTRA_WEBOS_WERROR:pn-cscope = "" # http://caprica.lgsvl.com:8080/Errors/Details/1564597 -EXTRA_WEBOS_WERROR_pn-gtk+3 = "" +EXTRA_WEBOS_WERROR:pn-gtk+3 = "" # http://caprica.lgsvl.com:8080/Errors/Details/1564595 -EXTRA_WEBOS_WERROR_pn-gst-plugins-base = "" +EXTRA_WEBOS_WERROR:pn-gst-plugins-base = "" # http://caprica.lgsvl.com:8080/Builds/Details/5772400 -EXTRA_WEBOS_WERROR_pn-gst-plugins-good = "" +EXTRA_WEBOS_WERROR:pn-gst-plugins-good = "" # http://caprica.lgsvl.com:8080/Errors/Details/1574051 -EXTRA_WEBOS_WERROR_pn-read-edid = "" +EXTRA_WEBOS_WERROR:pn-read-edid = "" # http://caprica.lgsvl.com:8080/Errors/Details/1584264 -EXTRA_WEBOS_WERROR_pn-testfloat = "" +EXTRA_WEBOS_WERROR:pn-testfloat = "" # http://caprica.lgsvl.com:8080/Errors/Details/1584263 -EXTRA_WEBOS_WERROR_pn-libc-bench = "" +EXTRA_WEBOS_WERROR:pn-libc-bench = "" # http://caprica.lgsvl.com:8080/Errors/Details/1584262 -EXTRA_WEBOS_WERROR_pn-qtwebengine = "" +EXTRA_WEBOS_WERROR:pn-qtwebengine = "" # Temporarily until patches from PLAT-84533 are integrated -EXTRA_WEBOS_WERROR_pn-webruntime = "" +EXTRA_WEBOS_WERROR:pn-webruntime = "" # ERROR: ntop-5.0.1-r0 do_compile: Function failed: do_compile: netflowPlugin.c:2144:1: error: no return statement in function returning non-void [-Werror=return-type] -EXTRA_WEBOS_WERROR_pn-ntop = "" +EXTRA_WEBOS_WERROR:pn-ntop = "" # ERROR: python3-twofish-0.3.0-r0 do_compile: Function failed: do_compile: twofish.c:45:1: error: control reaches end of non-void function [-Werror=return-type] -EXTRA_WEBOS_WERROR_pn-python3-twofish = "" +EXTRA_WEBOS_WERROR:pn-python3-twofish = "" # ERROR: live555-20190828-r0 do_compile: oe_runmake failed: MPEG2TransportStreamParser.cpp:302:1: error: control reaches end of non-void function [-Werror=return-type] -EXTRA_WEBOS_WERROR_pn-live555 = "" +EXTRA_WEBOS_WERROR:pn-live555 = "" # ERROR: hdf5-1.8.21-r0 do_compile: hdf5/1.8.21-r0/hdf5-1.8.21/c++/src/H5Location.cpp:258:34: error: control reaches end of non-void function [-Werror=return-type] -EXTRA_WEBOS_WERROR_pn-hdf5 = "" +EXTRA_WEBOS_WERROR:pn-hdf5 = "" # ERROR: libev-4.31-r0 do_compile: oe_runmake failed: libev-4.31/ev_iouring.c:227:1: error: no return statement in function returning non-void [-Werror=return-type] libev-4.31/ev_iouring.c:261:1: error: no return statement in function returning non-void [-Werror=return-type] -EXTRA_WEBOS_WERROR_pn-libev = "" +EXTRA_WEBOS_WERROR:pn-libev = "" # temporarily until https://lists.openembedded.org/g/openembedded-devel/message/85109 is resolved: git/meson.build:26:4: ERROR: C library 'argp' not found -EXTRA_WEBOS_WERROR_pn-zchunk = "" +EXTRA_WEBOS_WERROR:pn-zchunk = "" -TARGET_CC_ARCH_append = " ${EXTRA_WEBOS_WERROR}" +TARGET_CC_ARCH:append = " ${EXTRA_WEBOS_WERROR}" # # Form the codename of a release (WEBOS_DISTRO_RELEASE_CODENAME) from a codename @@ -163,7 +163,7 @@ MODULE_TARBALL_DEPLOY ?= "0" # image filename match that of the corresponding rootfs image even if its # contents are unchanged. kernel_do_install[vardepsexclude] += "KERNEL_IMAGE_NAME" -kernel_do_install_append() { +kernel_do_install:append() { rm -vf $kerneldir/kernel-image-name } @@ -184,7 +184,7 @@ BUILDCFG_VARS += "DATETIME" # Build time dependency on TUNE_PKGARCH recipes base-passwd, shadow, shadow-sysroot # Drop this when upgrading oe-core to some release with this change: # http://lists.openembedded.org/pipermail/openembedded-core/2013-November/085849.html -PACKAGE_ARCH_pn-xuser-account = "${MACHINE_ARCH}" +PACKAGE_ARCH:pn-xuser-account = "${MACHINE_ARCH}" # Override these in webOS based distros to modify DISTRO_EXTRA_R* WEBOS_DEFAULT_EXTRA_RDEPENDS = "" @@ -194,8 +194,8 @@ DISTRO_EXTRA_RDEPENDS += " ${WEBOS_DEFAULT_EXTRA_RDEPENDS}" DISTRO_EXTRA_RRECOMMENDS += " ${WEBOS_DEFAULT_EXTRA_RRECOMMENDS}" WEBOSQEMUDEPS = "${@bb.utils.contains("INCOMPATIBLE_LICENSE", "GPLv3", "", "qemu-config",d)}" -DISTRO_EXTRA_RDEPENDS_append_qemuarm = " ${WEBOSQEMUDEPS}" -DISTRO_EXTRA_RDEPENDS_append_qemux86 = " ${WEBOSQEMUDEPS}" +DISTRO_EXTRA_RDEPENDS:append:qemuarm = " ${WEBOSQEMUDEPS}" +DISTRO_EXTRA_RDEPENDS:append:qemux86 = " ${WEBOSQEMUDEPS}" USER_CLASSES ?= "" @@ -230,7 +230,7 @@ OVERRIDES[vardepsexclude] += "WEBOS_EXTRA_MACHINEOVERRIDES_VARIANT" # still work. # E.g. distro default is thumb (for all MACHINEs) # Then you find some issues with thumb1 on armv5te cores, so distro can -# change the default to "arm" with PREFERRED_ARM_INSTRUCTION_SET_armv5, +# change the default to "arm" with PREFERRED_ARM_INSTRUCTION_SET:armv5, # but the recipe which explicitly asks for "thumb" still gets thumb. PREFERRED_ARM_INSTRUCTION_SET ?= "thumb" ARM_INSTRUCTION_SET = "${PREFERRED_ARM_INSTRUCTION_SET}" @@ -241,19 +241,19 @@ ARM_INSTRUCTION_SET = "${PREFERRED_ARM_INSTRUCTION_SET}" # {standard input}:42: Error: cannot use post-indexing with this instruction -- `ldrt r6,[r5],#+132' # {standard input}:42: Error: cannot use post-indexing with this instruction -- `ldrt r6,[r5],#132' # ... -# ARM_INSTRUCTION_SET_pn-valgrind = "arm" +# ARM_INSTRUCTION_SET:pn-valgrind = "arm" # and remove -O2 as work around for ICE: # 3.9.0-r8/valgrind-3.9.0/none/tests/arm/vcvt_fixed_float_VFP.c:12:1: internal compiler error: # Max. number of generated reload insns per insn is achieved (90) # http://lists.openembedded.org/pipermail/openembedded-core/2014-September/097330.html # both issues are still reproducible with 3.10.0 version imported from # http://patchwork.openembedded.org/patch/83009/ -# TARGET_CFLAGS_remove_pn-valgrind = "-O2" -PTEST_ENABLED_pn-valgrind = "0" +# TARGET_CFLAGS:remove:pn-valgrind = "-O2" +PTEST_ENABLED:pn-valgrind = "0" # parted and apr ptest currently doesn't build with gold # http://lists.openembedded.org/pipermail/openembedded-core/2017-February/132917.html -PTEST_ENABLED_pn-parted = "0" -PTEST_ENABLED_pn-apr = "0" +PTEST_ENABLED:pn-parted = "0" +PTEST_ENABLED:pn-apr = "0" INHERIT_DISTRO ?= "debian devshell sstate license buildstats-summary webos_base remove-libtool image-buildinfo" @@ -269,7 +269,7 @@ ICECC_DISABLED ??= "1" # $ bitbake -c write_oss_pkg_info # Components can have oss-pkg-info file itself but it is forced to # add checksum in LIC_FILES_CHKSUM if it contain oss-pkg-info.yaml -do_populate_lic_append() { +do_populate_lic:append() { """ To check oss-pkg-info.yaml """ oss_filename = "oss-pkg-info.yaml" if os.path.isfile(os.path.join(d.getVar("S"), oss_filename)): @@ -277,10 +277,10 @@ do_populate_lic_append() { bb.fatal("%s is in source repository but LIC_FILES_CHKSUM doesn't include it." % oss_filename) } -WARN_QA_append = " version-going-backwards webos-enh-sub-warning" +WARN_QA:append = " version-going-backwards webos-enh-sub-warning" WEBOS_ERROR_QA_AUTOREV ?= "webos-enh-sub-autorev-error" -ERROR_QA_append = " webos-enh-sub-error acg-dirty acg-json ${WEBOS_ERROR_QA_AUTOREV} acg-api acg-perm ls2-role ls2-schema" -ERROR_QA_remove = " version-going-backwards" +ERROR_QA:append = " webos-enh-sub-error acg-dirty acg-json ${WEBOS_ERROR_QA_AUTOREV} acg-api acg-perm ls2-role ls2-schema" +ERROR_QA:remove = " version-going-backwards" # Move all default WARN_QA from insane.bbclass to ERROR_QA to prevent silently re-introducing these issues DEFAULT_WARN_QA = "\ ldflags useless-rpaths rpaths staticdev libdir xorg-driver-abi \ @@ -292,8 +292,8 @@ DEFAULT_WARN_QA = "\ mime mime-xdg unlisted-pkg-lics unhandled-features-check \ missing-update-alternatives \ " -ERROR_QA_append = " ${DEFAULT_WARN_QA}" -WARN_QA_remove = "${DEFAULT_WARN_QA}" +ERROR_QA:append = " ${DEFAULT_WARN_QA}" +WARN_QA:remove = "${DEFAULT_WARN_QA}" # Default WEBOS_TARGET_* values (see webos_cmake.bbclass) WEBOS_TARGET_CORE_OS ?= "rockhopper" @@ -313,34 +313,34 @@ PACKAGE_ARCH = "${MACHINE_ARCH}" # For toolchain recipes keep TUNE_PKGARCH, to support default STAGING_BINDIR_TOOLCHAIN # as defined in bitbake.conf # STAGING_BINDIR_TOOLCHAIN = "${STAGING_DIR_NATIVE}${bindir_native}/${TUNE_PKGARCH}${TARGET_VENDOR}-${TARGET_OS}" -PACKAGE_ARCH_pn-binutils-cross = "${TUNE_PKGARCH}" -PACKAGE_ARCH_pn-gcc-cross = "${TUNE_PKGARCH}" -PACKAGE_ARCH_pn-gcc-cross-initial = "${TUNE_PKGARCH}" +PACKAGE_ARCH:pn-binutils-cross = "${TUNE_PKGARCH}" +PACKAGE_ARCH:pn-gcc-cross = "${TUNE_PKGARCH}" +PACKAGE_ARCH:pn-gcc-cross-initial = "${TUNE_PKGARCH}" # libgcc.inc: target=`echo ${MULTIMACH_TARGET_SYS} | sed -e s#-${SDKPKGSUFFIX}##` -PACKAGE_ARCH_pn-libgcc = "${TUNE_PKGARCH}" +PACKAGE_ARCH:pn-libgcc = "${TUNE_PKGARCH}" # gcc-runtime.inc: mtarget=`echo ${MULTIMACH_TARGET_SYS} | sed -e s#-${SDKPKGSUFFIX}##` -PACKAGE_ARCH_pn-gcc-runtime = "${TUNE_PKGARCH}" -PACKAGE_ARCH_pn-meta-toolchain = "${TUNE_PKGARCH}" +PACKAGE_ARCH:pn-gcc-runtime = "${TUNE_PKGARCH}" +PACKAGE_ARCH:pn-meta-toolchain = "${TUNE_PKGARCH}" # since oe-core/c26569320817263a487eceb610e3c70badba0b52 it's ${TUNE_PKGARCH} but it depends # on strace, which in our strange default PACKAGE_ARCH is MACHINE_ARCH -PACKAGE_ARCH_pn-packagegroup-core-tools-debug = "${MACHINE_ARCH}" +PACKAGE_ARCH:pn-packagegroup-core-tools-debug = "${MACHINE_ARCH}" # Respect PACKAGE_ARCH set in recipe, otherwise building sdk will fail to find # packagegroup-cross-canadian-qemux86 package in MACHINE_ARCH feed (opkg-sdk.conf # doesn't contain MACHINE_ARCH). -PACKAGE_ARCH_pn-packagegroup-cross-canadian-qemux86 = "${SDK_ARCH}-${SDKPKGSUFFIX}" +PACKAGE_ARCH:pn-packagegroup-cross-canadian-qemux86 = "${SDK_ARCH}-${SDKPKGSUFFIX}" # Otherwise QEMU_EXTRAOPTIONS aren't found and e.g. update_font_cache postinst # script may fail to run fc-cache with: # qemu: uncaught target signal 4 (Illegal instruction) - core dumped # because -cpu options are missing in QEMU_OPTIONS -PACKAGE_ARCH_pn-qemuwrapper-cross = "${TUNE_PKGARCH}" +PACKAGE_ARCH:pn-qemuwrapper-cross = "${TUNE_PKGARCH}" -PATH_prepend = "${WEBOS_EXTRA_PATH}" +PATH:prepend = "${WEBOS_EXTRA_PATH}" EXTRAOPKGCONFIG = "" # with multilib libdir would became /usr/lib64 and we want opkg files in /usr/lib -OPKGLIBDIR_forcevariable := "${exec_prefix}/lib" +OPKGLIBDIR:forcevariable := "${exec_prefix}/lib" # We don't plan to ever support qt4 QT_DIR_NAME = "" @@ -359,14 +359,14 @@ BB_DISKMON_DIRS = "\ # Select at most one of the two choices here for the console: # Redirect console output to keep it from spewing all over the Emulator window # (This is added to qemux86 kernel cmdline by openembedded-core/meta/classes/syslinux.bbclass) -APPEND_append_qemuall = " console=ttyS0 net.ifnames=0 biosdevname=0" +APPEND:append:qemuall = " console=ttyS0 net.ifnames=0 biosdevname=0" # - or - # If your build is not using the screen for graphics, and you're running an emulator, # you should be able to use the emulator's on-screen window as the console by # uncommenting this line (and commenting the above line out). # Note that this setting may interfere with a program that is trying to change the # mode of the display device -# APPEND_append_qemuall = " console=tty0" +# APPEND:append:qemuall = " console=tty0" require conf/distro/include/yocto-uninative.inc INHERIT += "uninative" @@ -383,7 +383,7 @@ FONTCONFIG_CACHE_DIR = "${datadir}/fontconfig/cache" FONTCONFIG_CACHE_ENV = "FC_DEBUG=16" # To build lapack(blas) for snowboy -FORTRAN_forcevariable_webos = ",fortran" +FORTRAN:forcevariable:webos = ",fortran" # Qt major version to use QT_VERSION ?= "6" diff --git a/meta-webos/conf/distro/webos.conf b/meta-webos/conf/distro/webos.conf index e4744c2f7..663012413 100644 --- a/meta-webos/conf/distro/webos.conf +++ b/meta-webos/conf/distro/webos.conf @@ -26,14 +26,14 @@ TARGET_VENDOR = "-webos" require conf/distro/include/webos.inc -LICENSE_FLAGS_WHITELIST_append = " commercial_x264" -LICENSE_FLAGS_WHITELIST_append = " commercial_libav" -LICENSE_FLAGS_WHITELIST_append = " commercial_libomxil" -LICENSE_FLAGS_WHITELIST_append = " commercial_ffmpeg" - -LICENSE_FLAGS_WHITELIST_append = " commercial_gstreamer1.0-omx" -LICENSE_FLAGS_WHITELIST_append = " commercial_gstreamer1.0-libav" -LICENSE_FLAGS_WHITELIST_append = " commercial_mpg123" -LICENSE_FLAGS_WHITELIST_append = " commercial_lame" -LICENSE_FLAGS_WHITELIST_append = " commercial_gstreamer1.0-plugins-ugly" -LICENSE_FLAGS_WHITELIST_append = " commercial_mpeg2dec" +LICENSE_FLAGS_WHITELIST:append = " commercial_x264" +LICENSE_FLAGS_WHITELIST:append = " commercial_libav" +LICENSE_FLAGS_WHITELIST:append = " commercial_libomxil" +LICENSE_FLAGS_WHITELIST:append = " commercial_ffmpeg" + +LICENSE_FLAGS_WHITELIST:append = " commercial_gstreamer1.0-omx" +LICENSE_FLAGS_WHITELIST:append = " commercial_gstreamer1.0-libav" +LICENSE_FLAGS_WHITELIST:append = " commercial_mpg123" +LICENSE_FLAGS_WHITELIST:append = " commercial_lame" +LICENSE_FLAGS_WHITELIST:append = " commercial_gstreamer1.0-plugins-ugly" +LICENSE_FLAGS_WHITELIST:append = " commercial_mpeg2dec" diff --git a/meta-webos/conf/machine/include/qemuboot-x86.inc b/meta-webos/conf/machine/include/qemuboot-x86.inc index 15ee0e0b4..601426728 100644 --- a/meta-webos/conf/machine/include/qemuboot-x86.inc +++ b/meta-webos/conf/machine/include/qemuboot-x86.inc @@ -1,12 +1,12 @@ # For runqemu IMAGE_CLASSES += "qemuboot" -QB_SYSTEM_NAME_x86 = "qemu-system-i386" -QB_CPU_x86 = "-cpu qemu32" -QB_CPU_KVM_x86 = "-cpu kvm32" +QB_SYSTEM_NAME:x86 = "qemu-system-i386" +QB_CPU:x86 = "-cpu qemu32" +QB_CPU_KVM:x86 = "-cpu kvm32" -QB_SYSTEM_NAME_x86-64 = "qemu-system-x86_64" -QB_CPU_x86-64 = "-cpu core2duo" -QB_CPU_KVM_x86-64 = "-cpu kvm64" +QB_SYSTEM_NAME:x86-64 = "qemu-system-x86_64" +QB_CPU:x86-64 = "-cpu core2duo" +QB_CPU_KVM:x86-64 = "-cpu kvm64" QB_AUDIO_DRV = "alsa" QB_AUDIO_OPT = "-soundhw hda,ac97,es1370" diff --git a/meta-webos/recipes-benchmark/fio/fio_%.bbappend b/meta-webos/recipes-benchmark/fio/fio_%.bbappend index 7389100cd..a32e333e1 100644 --- a/meta-webos/recipes-benchmark/fio/fio_%.bbappend +++ b/meta-webos/recipes-benchmark/fio/fio_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2018-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-benchmark/libhugetlbfs/libhugetlbfs_%.bbappend b/meta-webos/recipes-benchmark/libhugetlbfs/libhugetlbfs_%.bbappend index 69ccdfba5..2045a3cf0 100644 --- a/meta-webos/recipes-benchmark/libhugetlbfs/libhugetlbfs_%.bbappend +++ b/meta-webos/recipes-benchmark/libhugetlbfs/libhugetlbfs_%.bbappend @@ -1,9 +1,9 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-tests_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-tests_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-tests:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-tests:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_%.bbappend b/meta-webos/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_%.bbappend index 47d4f9d78..9b3295396 100644 --- a/meta-webos/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_%.bbappend +++ b/meta-webos/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-bsp/pm-utils/pm-utils_%.bbappend b/meta-webos/recipes-bsp/pm-utils/pm-utils_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-bsp/pm-utils/pm-utils_%.bbappend +++ b/meta-webos/recipes-bsp/pm-utils/pm-utils_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-connectivity/bind/bind_%.bbappend b/meta-webos/recipes-connectivity/bind/bind_%.bbappend index c12c5b2d3..adc571008 100644 --- a/meta-webos/recipes-connectivity/bind/bind_%.bbappend +++ b/meta-webos/recipes-connectivity/bind/bind_%.bbappend @@ -1,9 +1,9 @@ # Copyright (c) 2018-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-utils_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-utils_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-utils:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-utils:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5-conf.bb b/meta-webos/recipes-connectivity/bluez5/bluez5-conf.bb index 666d0b9be..fb7936b4f 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5-conf.bb +++ b/meta-webos/recipes-connectivity/bluez5/bluez5-conf.bb @@ -10,4 +10,4 @@ PR = "r0" inherit webos_machine_dep -ALLOW_EMPTY_${PN} = "1" +ALLOW_EMPTY:${PN} = "1" diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend b/meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend index ab95258ed..9c202318c 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend +++ b/meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend @@ -1,10 +1,10 @@ # Copyright (c) 2018-2021 LG Electronics, Inc. -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -EXTENDPRAUTO_append = "webos26" +EXTENDPRAUTO:append = "webos26" -RRECOMMENDS_${PN} += " \ +RRECOMMENDS:${PN} += " \ glibc-gconv-utf-16 \ glibc-gconv-utf-32 \ " @@ -44,25 +44,25 @@ SRC_URI += " \ file://obex.service \ " -SRC_URI_append_raspberrypi4 = " \ +SRC_URI:append:raspberrypi4 = " \ file://blacklistbtusb.conf \ " -PACKAGECONFIG_append = " mesh \ +PACKAGECONFIG:append = " mesh \ testing \ " -EXTRA_OECONF_remove = "--enable-external-ell" +EXTRA_OECONF:remove = "--enable-external-ell" -do_install_append () { +do_install:append () { install -d ${D}${sysconfdir}/systemd/system install -v -m 0644 ${WORKDIR}/main.conf ${D}${sysconfdir}/bluetooth/ install -v -m 0644 ${WORKDIR}/obex.service ${D}${sysconfdir}/systemd/system/ } -do_install_append_raspberrypi4 () { +do_install:append:raspberrypi4 () { install -d ${D}${sysconfdir}/modprobe.d install -m 644 ${WORKDIR}/blacklistbtusb.conf ${D}${sysconfdir}/modprobe.d/blacklistbtusb.conf } -FILES_${PN}_append_raspberrypi4 = " ${sysconfdir}/modprobe.d/*" +FILES:${PN}:append:raspberrypi4 = " ${sysconfdir}/modprobe.d/*" diff --git a/meta-webos/recipes-connectivity/connman/connman-conf.bbappend b/meta-webos/recipes-connectivity/connman/connman-conf.bbappend index 8d834c03a..f48c31aae 100644 --- a/meta-webos/recipes-connectivity/connman/connman-conf.bbappend +++ b/meta-webos/recipes-connectivity/connman/connman-conf.bbappend @@ -1,20 +1,20 @@ # Copyright (c) 2017-2020 LG Electronics, Inc. -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -EXTENDPRAUTO_append = "webos3" +EXTENDPRAUTO:append = "webos3" SRC_URI += " \ file://connman.service \ file://connman.sh.in \ file://main.conf \ " -do_configure_append () { +do_configure:append () { sed -e 's/@WEBOS_CONNMAN_PREACTIVATE_INTERFACE_LIST@/${WEBOS_CONNMAN_PREACTIVATE_INTERFACE_LIST}/g; s%@DATADIR@%${datadir}%g' \ ${WORKDIR}/connman.sh.in > ${WORKDIR}/connman.sh } -do_install_append() { +do_install:append() { install -d ${D}${sysconfdir}/connman install -m 0644 ${WORKDIR}/main.conf ${D}${sysconfdir}/connman/ @@ -24,7 +24,7 @@ do_install_append() { install -v -m 755 ${WORKDIR}/connman.sh ${D}${sysconfdir}/systemd/system/scripts/ } -FILES_${PN} += " \ +FILES:${PN} += " \ ${sysconfdir}/connman \ ${sysconfdir} \ " diff --git a/meta-webos/recipes-connectivity/connman/connman_%.bbappend b/meta-webos/recipes-connectivity/connman/connman_%.bbappend index b6df6ce79..be39278f8 100644 --- a/meta-webos/recipes-connectivity/connman/connman_%.bbappend +++ b/meta-webos/recipes-connectivity/connman/connman_%.bbappend @@ -1,9 +1,9 @@ # Copyright (c) 2018-2022 LG Electronics, Inc. -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -EXTENDPRAUTO_append = "webos20" -SYSTEMD_SERVICE_${PN}_remove = "connman.service" +EXTENDPRAUTO:append = "webos20" +SYSTEMD_SERVICE:${PN}:remove = "connman.service" SRC_URI += " \ file://0001-Add-support-for-the-WPS-PBS-and-PIN-mode.patch \ @@ -31,6 +31,6 @@ SRC_URI += " \ file://0023-Fix-connman-crash-on-p2p-connect.patch \ " -do_install_append() { +do_install:append() { rm -vf ${D}${systemd_unitdir}/system/connman.service } diff --git a/meta-webos/recipes-connectivity/dhcp/dhcp_%.bbappend b/meta-webos/recipes-connectivity/dhcp/dhcp_%.bbappend index 1caa38f8a..9c92c1bdb 100644 --- a/meta-webos/recipes-connectivity/dhcp/dhcp_%.bbappend +++ b/meta-webos/recipes-connectivity/dhcp/dhcp_%.bbappend @@ -2,23 +2,23 @@ inherit webos_machine_impl_dep -EXTENDPRAUTO_append = "webos6" +EXTENDPRAUTO:append = "webos6" -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" SRC_URI += "file://dhclient.conf.upstart" # Add dhclient upstart script # (script should be configured to only run dhclient when needed) -do_install_append () { +do_install:append () { install -d ${D}${sysconfdir}/init install -m 0644 ${WORKDIR}/dhclient.conf.upstart ${D}${sysconfdir}/init/dhclient.conf } -FILES_${PN}-client += "${sysconfdir}/init/dhclient.conf" +FILES:${PN}-client += "${sysconfdir}/init/dhclient.conf" -do_install_append_emulator() { +do_install:append:emulator() { # Start dhclient (and dropbear) as early as possible # in emulator to make boot-time debugging easier. sed -i 's/^start on stopped networking$/start on started bootmisc/g' ${D}${sysconfdir}/init/dhclient.conf diff --git a/meta-webos/recipes-connectivity/gammu/gammu_%.bbappend b/meta-webos/recipes-connectivity/gammu/gammu_%.bbappend index d02ec6588..fcc1301f1 100644 --- a/meta-webos/recipes-connectivity/gammu/gammu_%.bbappend +++ b/meta-webos/recipes-connectivity/gammu/gammu_%.bbappend @@ -1,9 +1,9 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-dev_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-dev_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-dev:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-dev:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-connectivity/gensio/gensio_%.bbappend b/meta-webos/recipes-connectivity/gensio/gensio_%.bbappend index 5f004f39c..52d6e0615 100644 --- a/meta-webos/recipes-connectivity/gensio/gensio_%.bbappend +++ b/meta-webos/recipes-connectivity/gensio/gensio_%.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" # ERROR: gensio-1.5.3+gitAUTOINC+95ec1ab31e-r0 do_package_qa: QA Issue: gensio rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-connectivity/ifplugd/ifplugd_%.bbappend b/meta-webos/recipes-connectivity/ifplugd/ifplugd_%.bbappend index cba54a213..a5d19a033 100644 --- a/meta-webos/recipes-connectivity/ifplugd/ifplugd_%.bbappend +++ b/meta-webos/recipes-connectivity/ifplugd/ifplugd_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-connectivity/iotivity-node/iotivity-node_git.bb b/meta-webos/recipes-connectivity/iotivity-node/iotivity-node_git.bb index 586ef3f64..fa267eeba 100644 --- a/meta-webos/recipes-connectivity/iotivity-node/iotivity-node_git.bb +++ b/meta-webos/recipes-connectivity/iotivity-node/iotivity-node_git.bb @@ -11,7 +11,7 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://index.js;beginline=1;endline=13;md5=bafd0234b0f43def6ab0bced96530c42" DEPENDS = "nodejs-native glib-2.0 iotivity" -RDEPENDS_${PN} += "iotivity-resource iotivity-tools" +RDEPENDS:${PN} += "iotivity-resource iotivity-tools" SRC_URI = "git://github.com/otcshare/iotivity-node.git;protocol=https;branch=master" SRCREV = "c6aab8e6126c06516090dd13e812fee0d16b8cc7" @@ -30,7 +30,7 @@ inherit webos_npm_env export PYTHON = "python3" -do_compile_prepend() { +do_compile:prepend() { OCTBDIR="${STAGING_INCDIR}/iotivity/resource" export OCTBSTACK_CFLAGS="-I${OCTBDIR} -I${OCTBDIR}/stack -I${OCTBDIR}/ocrandom -I${STAGING_INCDIR}/iotivity/c_common -DROUTING_EP -DRD_CLIENT -DRD_SERVER -D__WITH_DTLS__" export OCTBSTACK_LIBS="-loctbstack -lresource_directory" @@ -63,18 +63,18 @@ do_install () { # /usr/lib/node_modules/iotivity-node/node_modules/uuid/benchmark/bench.sh is included in this package only _sometimes_ # but when it does get included, it rdepends on /bin/bash -# ERROR: iotivity-node-1.3.1+gitAUTOINC+c6aab8e612-r7 do_package_qa: QA Issue: /usr/lib/node_modules/iotivity-node/node_modules/uuid/benchmark/bench.sh contained in package iotivity-node requires /bin/bash, but no providers found in RDEPENDS_iotivity-node? [file-rdeps] +# ERROR: iotivity-node-1.3.1+gitAUTOINC+c6aab8e612-r7 do_package_qa: QA Issue: /usr/lib/node_modules/iotivity-node/node_modules/uuid/benchmark/bench.sh contained in package iotivity-node requires /bin/bash, but no providers found in RDEPENDS:iotivity-node? [file-rdeps] VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -FILES_${PN} = "${libdir}/node_modules/iotivity-node/" +FILES:${PN} = "${libdir}/node_modules/iotivity-node/" # COMPATIBLE_MACHINE is set because iotivity on which the iotivity-node doesn't build for armv[45]* COMPATIBLE_MACHINE = "(-)" -COMPATIBLE_MACHINE_aarch64 = "(.*)" -COMPATIBLE_MACHINE_armv6 = "(.*)" -COMPATIBLE_MACHINE_armv7a = "(.*)" -COMPATIBLE_MACHINE_armv7ve = "(.*)" -COMPATIBLE_MACHINE_x86 = "(.*)" -COMPATIBLE_MACHINE_x86-64 = "(.*)" +COMPATIBLE_MACHINE:aarch64 = "(.*)" +COMPATIBLE_MACHINE:armv6 = "(.*)" +COMPATIBLE_MACHINE:armv7a = "(.*)" +COMPATIBLE_MACHINE:armv7ve = "(.*)" +COMPATIBLE_MACHINE:x86 = "(.*)" +COMPATIBLE_MACHINE:x86-64 = "(.*)" diff --git a/meta-webos/recipes-connectivity/lftp/lftp_%.bbappend b/meta-webos/recipes-connectivity/lftp/lftp_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-connectivity/lftp/lftp_%.bbappend +++ b/meta-webos/recipes-connectivity/lftp/lftp_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-connectivity/lirc/lirc_%.bbappend b/meta-webos/recipes-connectivity/lirc/lirc_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-connectivity/lirc/lirc_%.bbappend +++ b/meta-webos/recipes-connectivity/lirc/lirc_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-connectivity/nfs-utils/nfs-utils_%.bbappend b/meta-webos/recipes-connectivity/nfs-utils/nfs-utils_%.bbappend index 080c0b514..f4bccd9f6 100644 --- a/meta-webos/recipes-connectivity/nfs-utils/nfs-utils_%.bbappend +++ b/meta-webos/recipes-connectivity/nfs-utils/nfs-utils_%.bbappend @@ -1,9 +1,9 @@ # Copyright (c) 2017-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-client_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-client_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-client:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-client:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-connectivity/ofono/ofono_%.bbappend b/meta-webos/recipes-connectivity/ofono/ofono_%.bbappend index 9ae12bfe3..fda807b3f 100644 --- a/meta-webos/recipes-connectivity/ofono/ofono_%.bbappend +++ b/meta-webos/recipes-connectivity/ofono/ofono_%.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2020 LG Electronics, Inc. -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" SRC_URI += " \ file://0001-Fix-ougoing-call-hangup-not-responding.patch \ diff --git a/meta-webos/recipes-connectivity/openconnect/openconnect_%.bbappend b/meta-webos/recipes-connectivity/openconnect/openconnect_%.bbappend index 0960c7ff0..0c7849f14 100644 --- a/meta-webos/recipes-connectivity/openconnect/openconnect_%.bbappend +++ b/meta-webos/recipes-connectivity/openconnect/openconnect_%.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" # http://caprica.lgsvl.com:8080/Errors/Details/1447236 VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-connectivity/openssl/openssl_%.bbappend b/meta-webos/recipes-connectivity/openssl/openssl_%.bbappend index adb6cdc6c..4330e7d2b 100644 --- a/meta-webos/recipes-connectivity/openssl/openssl_%.bbappend +++ b/meta-webos/recipes-connectivity/openssl/openssl_%.bbappend @@ -1,18 +1,18 @@ # Copyright (c) 2013-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos22" +EXTENDPRAUTO:append = "webos22" inherit update-alternatives -ALTERNATIVE_${PN}-conf = "openssl-cnf2" +ALTERNATIVE:${PN}-conf = "openssl-cnf2" ALTERNATIVE_LINK_NAME[openssl-cnf2] = "${sysconfdir}/ssl/openssl.cnf" ALTERNATIVE_PRIORITY[openssl-cnf2] ?= "1" -do_install_append_class-target() { +do_install:append:class-target() { mv ${D}${sysconfdir}/ssl/openssl.cnf ${D}${sysconfdir}/ssl/openssl.cnf.${BPN} } -FILES_openssl-conf = "${sysconfdir}/ssl/openssl.cnf*" +FILES:openssl-conf = "${sysconfdir}/ssl/openssl.cnf*" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-connectivity/resolvconf/resolvconf_%.bbappend b/meta-webos/recipes-connectivity/resolvconf/resolvconf_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-connectivity/resolvconf/resolvconf_%.bbappend +++ b/meta-webos/recipes-connectivity/resolvconf/resolvconf_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-connectivity/samba/samba_%.bbappend b/meta-webos/recipes-connectivity/samba/samba_%.bbappend index f08fde23c..6cf613bae 100644 --- a/meta-webos/recipes-connectivity/samba/samba_%.bbappend +++ b/meta-webos/recipes-connectivity/samba/samba_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos3" +EXTENDPRAUTO:append = "webos3" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-ctdb-tests_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ctdb-tests_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ctdb-tests:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ctdb-tests:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-connectivity/smstools3/smstools3_%.bbappend b/meta-webos/recipes-connectivity/smstools3/smstools3_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-connectivity/smstools3/smstools3_%.bbappend +++ b/meta-webos/recipes-connectivity/smstools3/smstools3_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend b/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend index 9cd803c4b..d53ece00a 100644 --- a/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend +++ b/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend @@ -1,18 +1,18 @@ # Copyright (c) 2017-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos4" +EXTENDPRAUTO:append = "webos4" -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" SRC_URI += "file://wpa-supplicant.sh \ file://wpa-supplicant.service \ file://0001-Add-p2p-changes.patch \ " # Replace the wpa_supplicant.service from wpa-supplicant source with our own version (for some unknown reason) -SYSTEMD_SERVICE_${PN}_remove = "wpa_supplicant.service" -SYSTEMD_SERVICE_${PN}_append = " wpa-supplicant.service" +SYSTEMD_SERVICE:${PN}:remove = "wpa_supplicant.service" +SYSTEMD_SERVICE:${PN}:append = " wpa-supplicant.service" -do_configure_append() { +do_configure:append() { # Enable DBus Introspection for easier debugging echo "CONFIG_CTRL_IFACE_DBUS_INTRO=y" >> ${B}/wpa_supplicant/.config @@ -42,7 +42,7 @@ do_configure_append() { } -do_install_append() { +do_install:append() { # systemd service files install -d ${D}${sysconfdir}/systemd/system install -v -m 644 ${WORKDIR}/wpa-supplicant.service ${D}${sysconfdir}/systemd/system/wpa-supplicant.service @@ -56,4 +56,4 @@ do_install_append() { sed -i 's/SystemdService=wpa_supplicant.service/SystemdService=wpa-supplicant.service/g' ${D}/${datadir}/dbus-1/system-services/*service } -FILES_${PN} += "${systemd_unitdir}" +FILES:${PN} += "${systemd_unitdir}" diff --git a/meta-webos/recipes-core/base-files/base-files_3.0.14.bbappend b/meta-webos/recipes-core/base-files/base-files_3.0.14.bbappend index 537885ae0..dc1a457ee 100644 --- a/meta-webos/recipes-core/base-files/base-files_3.0.14.bbappend +++ b/meta-webos/recipes-core/base-files/base-files_3.0.14.bbappend @@ -6,7 +6,7 @@ inherit webos_filesystem_paths inherit webos_machine_impl_dep inherit webos_prerelease_dep -EXTENDPRAUTO_append = "webos14" +EXTENDPRAUTO:append = "webos14" dirs700 = " \ ${webos_db8datadir} \ @@ -26,7 +26,7 @@ dirs777 = " \ ${webos_mountablestoragedir} \ " -do_install_prepend() { +do_install:prepend() { local d for d in ${dirs700}; do install -v -m 0700 -d ${D}$d @@ -39,7 +39,7 @@ do_install_prepend() { fi } -do_install_append() { +do_install:append() { # additional entries for fstab bbnote "Adding entries to ${sysconfdir}/fstab" generate_fstab_entries >> ${D}${sysconfdir}/fstab @@ -56,7 +56,7 @@ do_install_append() { || bbfatal "Found records in fstab with identical mount-points: $collisions" } -do_install_append_hardware() { +do_install:append:hardware() { # For coredump handling if ${@oe.utils.conditional('WEBOS_DISTRO_PRERELEASE', 'devel', 'true', 'false', d)}; then echo "" >> ${D}${sysconfdir}/profile diff --git a/meta-webos/recipes-core/base-passwd/base-passwd_3.5.29.bbappend b/meta-webos/recipes-core/base-passwd/base-passwd_3.5.29.bbappend index 1b1dc73db..8eedc7171 100644 --- a/meta-webos/recipes-core/base-passwd/base-passwd_3.5.29.bbappend +++ b/meta-webos/recipes-core/base-passwd/base-passwd_3.5.29.bbappend @@ -1,15 +1,15 @@ # Copyright (c) 2017-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos6" +EXTENDPRAUTO:append = "webos6" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI += "\ file://passwd.master \ file://group.master \ " -do_configure_prepend () { +do_configure:prepend () { cp -v ${WORKDIR}/passwd.master ${S}/ cp -v ${WORKDIR}/group.master ${S}/ } diff --git a/meta-webos/recipes-core/busybox/busybox_%.bbappend b/meta-webos/recipes-core/busybox/busybox_%.bbappend index 53ed94b60..165038e94 100644 --- a/meta-webos/recipes-core/busybox/busybox_%.bbappend +++ b/meta-webos/recipes-core/busybox/busybox_%.bbappend @@ -1,9 +1,9 @@ # Copyright (c) 2012-2021 LG Electronics, Inc. PKGV .= "-0webos3" -EXTENDPRAUTO_append = "webos14" +EXTENDPRAUTO:append = "webos14" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI += " \ file://0001-Add-tzset-applet.patch \ @@ -11,6 +11,6 @@ SRC_URI += " \ file://0003-libedit-check-for-null-before-passing-cmdedit_prompt.patch \ " -RPROVIDES_${PN} += "stat" -RPROVIDES_${PN} += "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RPROVIDES_${PN} += "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_TAR', 'busybox', 'tar', '', d)}" +RPROVIDES:${PN} += "stat" +RPROVIDES:${PN} += "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RPROVIDES:${PN} += "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_TAR', 'busybox', 'tar', '', d)}" diff --git a/meta-webos/recipes-core/dbus/dbus_%.bbappend b/meta-webos/recipes-core/dbus/dbus_%.bbappend index 8786f0bf4..61b92043d 100644 --- a/meta-webos/recipes-core/dbus/dbus_%.bbappend +++ b/meta-webos/recipes-core/dbus/dbus_%.bbappend @@ -1,17 +1,17 @@ # Copyright (c) 2014-2017 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos5" +EXTENDPRAUTO:append = "webos5" PACKAGES =+ "${PN}-gpl" LICENSE += "& GPL-2.0" -LICENSE_${PN}-gpl = "GPL-2.0" +LICENSE:${PN}-gpl = "GPL-2.0" # using "dbus" instead of "${PN}" due to: -# WARNING: Variable key RDEPENDS_${PN} ( ${PN}-gpl) replaces original key RDEPENDS_dbus +# WARNING: Variable key RDEPENDS:${PN} ( ${PN}-gpl) replaces original key RDEPENDS:dbus # (${@bb.utils.contains('DISTRO_FEATURES', 'ptest', 'dbus-ptest-ptest', '', d)}). -RDEPENDS_dbus += "${PN}-gpl" +RDEPENDS:dbus += "${PN}-gpl" -FILES_${PN}-gpl = " \ +FILES:${PN}-gpl = " \ ${bindir}/dbus-cleanup-sockets \ ${bindir}/dbus-daemon \ ${bindir}/dbus-monitor \ diff --git a/meta-webos/recipes-core/dropbear/dropbear_%.bbappend b/meta-webos/recipes-core/dropbear/dropbear_%.bbappend index 2871fad31..771faacc5 100644 --- a/meta-webos/recipes-core/dropbear/dropbear_%.bbappend +++ b/meta-webos/recipes-core/dropbear/dropbear_%.bbappend @@ -2,31 +2,31 @@ inherit webos_machine_impl_dep -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" -EXTENDPRAUTO_append = "webos7" +EXTENDPRAUTO:append = "webos7" # (In the emulator) our openssh is installed in /opt prefix, set the sftp path # this overrides default value set in oe-core's dropbear.inc -CFLAGS_append_emulator = " -DSFTPSERVER_PATH=\\"/opt/openssh/lib/openssh/sftp-server\\"" +CFLAGS:append:emulator = " -DSFTPSERVER_PATH=\\"/opt/openssh/lib/openssh/sftp-server\\"" # move startup scripts in different packages PACKAGES =+ "${PN}-sysvinit" -FILES_${PN}-sysvinit = "${sysconfdir}/init.d" +FILES:${PN}-sysvinit = "${sysconfdir}/init.d" # for update-rc.bbclass to know where to put postinst/prerm UPDATERCPN = "${PN}-sysvinit" SRC_URI += "file://dropbear.service" -do_install_append() { +do_install:append() { install -d ${D}${sysconfdir}/systemd/system install -m 0644 ${WORKDIR}/dropbear.service ${D}${sysconfdir}/systemd/system/ ln -sf /dev/null ${D}/${sysconfdir}/systemd/system/dropbear.socket } # Remove runtime dependency on separate dropbear-upstart package with Upstart 0.3 job file. -RDEPENDS_${PN} = "" -RDEPENDS_${PN}_emulator = "dhcp-client" +RDEPENDS:${PN} = "" +RDEPENDS:${PN}:emulator = "dhcp-client" -FILES_${PN} += "${base_libdir}" +FILES:${PN} += "${base_libdir}" diff --git a/meta-webos/recipes-core/gator/gator_git.bb b/meta-webos/recipes-core/gator/gator_git.bb index 4e5fb943f..eb46a9053 100644 --- a/meta-webos/recipes-core/gator/gator_git.bb +++ b/meta-webos/recipes-core/gator/gator_git.bb @@ -27,7 +27,7 @@ INHIBIT_PACKAGE_STRIP = "1" # since "gator=r3,v6.9" commit was reverted, it's failing for e.g. x86 MACHINEs COMPATIBLE_MACHINE = "^raspberrypi4$" # But it also fails on aarch64 raspberrypi4-64 (which as raspberrypi4 in MACHINEOVERRIDES), so we need to explicitly disable it -COMPATIBLE_MACHINE_raspberrypi4-64 = "^$" +COMPATIBLE_MACHINE:raspberrypi4-64 = "^$" do_compile() { unset LDFLAGS @@ -48,7 +48,7 @@ do_install() { install -m 0755 ${S}/driver/gator.ko ${D}${sbindir}/gator.ko } -FILES_${PN} = " \ +FILES:${PN} = " \ ${sbindir}/gatord \ ${sbindir}/gator.ko \ " diff --git a/meta-webos/recipes-core/gettext/gettext_%.bbappend b/meta-webos/recipes-core/gettext/gettext_%.bbappend index 17fc97586..8a24cbdd4 100644 --- a/meta-webos/recipes-core/gettext/gettext_%.bbappend +++ b/meta-webos/recipes-core/gettext/gettext_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" # We need to revert RDEPENDS changes from # @@ -15,12 +15,12 @@ EXTENDPRAUTO_append = "webos1" # it doesn't work when GLIBC_GENERATE_LOCALES are restricted like they are in our builds: # meta-webos/conf/distro/include/webos-toolchain.inc:GLIBC_GENERATE_LOCALES = "en_US.UTF-8" -RDEPENDS_${PN}-ptest_remove_libc-glibc = "\ +RDEPENDS:${PN}-ptest:remove:libc-glibc = "\ locale-base-de-de \ locale-base-fr-fr \ " -RRECOMMENDS_${PN}-ptest_remove_libc-glibc = "\ +RRECOMMENDS:${PN}-ptest:remove:libc-glibc = "\ locale-base-de-de.iso-8859-1 \ locale-base-fr-fr.iso-8859-1 \ " diff --git a/meta-webos/recipes-core/glib-2.0/glib-2.0_%.bbappend b/meta-webos/recipes-core/glib-2.0/glib-2.0_%.bbappend index dfa74ca17..91ff7337a 100644 --- a/meta-webos/recipes-core/glib-2.0/glib-2.0_%.bbappend +++ b/meta-webos/recipes-core/glib-2.0/glib-2.0_%.bbappend @@ -1,9 +1,9 @@ # Copyright (c) 2013-2020 LG Electronics, Inc. PKGV .= "-0webos4" -EXTENDPRAUTO_append = "webos4" +EXTENDPRAUTO:append = "webos4" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI += " \ file://0002-gdbus-codegen-also-replace-character-with-underscore.patch \ @@ -16,7 +16,7 @@ SRC_URI += " \ # http://lists.openembedded.org/pipermail/openembedded-core/2018-October/156694.html # it doesn't work when GLIBC_GENERATE_LOCALES are restricted like they are in our builds: # meta-webos/conf/distro/include/webos-toolchain.inc:GLIBC_GENERATE_LOCALES = "en_US.UTF-8" -RDEPENDS_${PN}-ptest_remove_libc-glibc = " \ +RDEPENDS:${PN}-ptest:remove:libc-glibc = " \ locale-base-pl-pl.iso-8859-2 \ locale-base-tr-tr \ locale-base-lt-lt \ diff --git a/meta-webos/recipes-core/glibc/glibc-scripts_%.bbappend b/meta-webos/recipes-core/glibc/glibc-scripts_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-core/glibc/glibc-scripts_%.bbappend +++ b/meta-webos/recipes-core/glibc/glibc-scripts_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-core/glibc/glibc_%.bbappend b/meta-webos/recipes-core/glibc/glibc_%.bbappend index 53d2dbfa2..277077d0d 100644 --- a/meta-webos/recipes-core/glibc/glibc_%.bbappend +++ b/meta-webos/recipes-core/glibc/glibc_%.bbappend @@ -1,13 +1,13 @@ # Copyright (c) 2014-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos7" +EXTENDPRAUTO:append = "webos7" LICENSE += "& BSD" # Add missing dependency on BSD license for -LICENSE_eglibc-extra-nss = "GPLv2 & LGPLv2.1 & BSD" -LICENSE_${PN}-dbg = "GPLv2 & LGPLv2.1 & BSD" -LICENSE_${PN}-dev = "GPLv2 & LGPLv2.1 & BSD" -LICENSE_${PN} = "GPLv2 & LGPLv2.1 & BSD" -LICENSE_${PN}-staticdev = "GPLv2 & LGPLv2.1 & BSD" -LICENSE_${PN}-utils = "GPLv2 & LGPLv2.1 & BSD" +LICENSE:eglibc-extra-nss = "GPLv2 & LGPLv2.1 & BSD" +LICENSE:${PN}-dbg = "GPLv2 & LGPLv2.1 & BSD" +LICENSE:${PN}-dev = "GPLv2 & LGPLv2.1 & BSD" +LICENSE:${PN} = "GPLv2 & LGPLv2.1 & BSD" +LICENSE:${PN}-staticdev = "GPLv2 & LGPLv2.1 & BSD" +LICENSE:${PN}-utils = "GPLv2 & LGPLv2.1 & BSD" diff --git a/meta-webos/recipes-core/initscripts/webos-initscripts.bb b/meta-webos/recipes-core/initscripts/webos-initscripts.bb index 9d7c602ae..ede12c27d 100644 --- a/meta-webos/recipes-core/initscripts/webos-initscripts.bb +++ b/meta-webos/recipes-core/initscripts/webos-initscripts.bb @@ -13,10 +13,10 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "systemd" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_init_manager} ${VIRTUAL-RUNTIME_bash} python3" +RDEPENDS:${PN} = "${VIRTUAL-RUNTIME_init_manager} ${VIRTUAL-RUNTIME_bash} python3" PROVIDES = "initscripts" -RPROVIDES_${PN} = "initscripts initd-functions" +RPROVIDES:${PN} = "initscripts initd-functions" WEBOS_VERSION = "3.0.0-83_75a7d1c58ce9701732119a40e493d393a45a8e89" PR = "r17" @@ -33,4 +33,4 @@ S = "${WORKDIR}/git" EXTRA_OECMAKE += "-DWEBOS_QTTESTABILITY_ENABLED:BOOL=${@ '1' if d.getVar('WEBOS_DISTRO_PRERELEASE',True) != '' else '0'}" -FILES_${PN} += "${base_libdir}" +FILES:${PN} += "${base_libdir}" diff --git a/meta-webos/recipes-core/iotivity/iotivity_git.bb b/meta-webos/recipes-core/iotivity/iotivity_git.bb index cbe8b9cb4..103bc3934 100644 --- a/meta-webos/recipes-core/iotivity/iotivity_git.bb +++ b/meta-webos/recipes-core/iotivity/iotivity_git.bb @@ -69,7 +69,7 @@ EXTRA_OESCONS += " \ LOGGING=true LOG_LEVEL=INFO \ " -do_compile_append() { +do_compile:append() { export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}" export PKG_CONFIG="PKG_CONFIG_SYSROOT_DIR=\"${PKG_CONFIG_SYSROOT_DIR}\" pkg-config" export LD_FLAGS="${LD_FLAGS}" @@ -97,7 +97,7 @@ copy_exec_recursive() { cd $1 && find . -executable -exec install -c -m 555 "{}" $2/"{}" \; } -do_install_append() { +do_install:append() { make_dir ${D}${libdir} #Resource #C++ APIs @@ -198,7 +198,7 @@ do_install_append() { FILES_SOLIBSDEV = "" -FILES_${PN}-resource = "\ +FILES:${PN}-resource = "\ ${libdir}/libconnectivity_abstraction.so \ ${libdir}/liboc.so \ ${libdir}/liboctbstack.so \ @@ -209,11 +209,11 @@ FILES_${PN}-resource = "\ ${libdir}/libresource_directory.so \ " -FILES_${PN}-plugins-samples = "\ +FILES:${PN}-plugins-samples = "\ ${IOTIVITY_BIN_DIR}/examples/plugins \ " -FILES_${PN}-service = "\ +FILES:${PN}-service = "\ ${libdir}/libBMISensorBundle.so \ ${libdir}/libDISensorBundle.so \ ${libdir}/librcs_server.so \ @@ -228,38 +228,38 @@ FILES_${PN}-service = "\ ${libdir}/libTestBundle.so \ " -FILES_${PN}-service-samples = "\ +FILES:${PN}-service-samples = "\ ${IOTIVITY_BIN_DIR}/examples/service \ " -FILES_${PN}-tests = "\ +FILES:${PN}-tests = "\ ${IOTIVITY_BIN_DIR}/tests \ ${libdir}/liboctbstack_test.so \ " -FILES_${PN}-tools = "\ +FILES:${PN}-tools = "\ ${@bb.utils.contains('EXTRA_OESCONS', 'SECURED=0', '', '${sbindir}/json2cbor', d)} \ " PACKAGE_BEFORE_PN += "${PN}-tests ${PN}-plugins-samples ${PN}-resource ${PN}-service ${PN}-service-samples ${PN}-tools" -ALLOW_EMPTY_${PN} = "1" -RRECOMMENDS_${PN} += "${PN}-resource ${PN}-service" -RDEPENDS_${PN}-plugins-samples += "${PN}-resource" -RDEPENDS_${PN}-tests += "${PN}-resource ${PN}-service" -RDEPENDS_${PN}-service-samples += "${PN}-service ${PN}-resource" -RDEPENDS_${PN}-service += "${PN}-resource" -RDEPENDS_${PN}-tools += "${PN}-resource" +ALLOW_EMPTY:${PN} = "1" +RRECOMMENDS:${PN} += "${PN}-resource ${PN}-service" +RDEPENDS:${PN}-plugins-samples += "${PN}-resource" +RDEPENDS:${PN}-tests += "${PN}-resource ${PN}-service" +RDEPENDS:${PN}-service-samples += "${PN}-service ${PN}-resource" +RDEPENDS:${PN}-service += "${PN}-resource" +RDEPENDS:${PN}-tools += "${PN}-resource" BBCLASSEXTEND = "native nativesdk" # iotivity doesn't build for armv[45]* COMPATIBLE_MACHINE = "(-)" -COMPATIBLE_MACHINE_aarch64 = "(.*)" -COMPATIBLE_MACHINE_armv6 = "(.*)" -COMPATIBLE_MACHINE_armv7a = "(.*)" -COMPATIBLE_MACHINE_armv7ve = "(.*)" -COMPATIBLE_MACHINE_x86 = "(.*)" -COMPATIBLE_MACHINE_x86-64 = "(.*)" +COMPATIBLE_MACHINE:aarch64 = "(.*)" +COMPATIBLE_MACHINE:armv6 = "(.*)" +COMPATIBLE_MACHINE:armv7a = "(.*)" +COMPATIBLE_MACHINE:armv7ve = "(.*)" +COMPATIBLE_MACHINE:x86 = "(.*)" +COMPATIBLE_MACHINE:x86-64 = "(.*)" # http://caprica.lgsvl.com:8080/Errors/Details/1300370 # iotivity/1.3.99+gitAUTOINC+179f1820ff-r1/recipe-sysroot/usr/include/features.h:381:4: error: #warning _FORTIFY_SOURCE requires compiling with optimization (-O) [-Werror=cpp] diff --git a/meta-webos/recipes-core/libxml/libxml2_%.bbappend b/meta-webos/recipes-core/libxml/libxml2_%.bbappend index a9828d532..6420212a0 100644 --- a/meta-webos/recipes-core/libxml/libxml2_%.bbappend +++ b/meta-webos/recipes-core/libxml/libxml2_%.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" # ERROR: libxml2-2.9.10-r0 do_package_qa: QA Issue: libxml2-ptest rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-core/meta/meta-environment.bbappend b/meta-webos/recipes-core/meta/meta-environment.bbappend index d62b315e2..a745ff379 100644 --- a/meta-webos/recipes-core/meta/meta-environment.bbappend +++ b/meta-webos/recipes-core/meta/meta-environment.bbappend @@ -1,9 +1,9 @@ # Copyright (c) 2019-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" # Used by mkspecs/features/webos-variables.prf -toolchain_create_sdk_env_script_append() { +toolchain_create_sdk_env_script:append() { echo 'export TUNE_FEATURES="${TUNE_FEATURES}"' >> $script echo "export WEBOS_INSTALL_BINS=${target_exec_prefix}/bin" >> $script echo "export WEBOS_INSTALL_LIBS=${target_libdir}" >> $script diff --git a/meta-webos/recipes-core/mm-common/mm-common_%.bbappend b/meta-webos/recipes-core/mm-common/mm-common_%.bbappend index 1e5ca3451..09528e072 100644 --- a/meta-webos/recipes-core/mm-common/mm-common_%.bbappend +++ b/meta-webos/recipes-core/mm-common/mm-common_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2012-2017 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos3" +EXTENDPRAUTO:append = "webos3" # All the original recipe does is stage a tarball and some autotools files; # nothing compiled. @@ -8,7 +8,7 @@ inherit allarch # Nothing in mm-common is installed on the target => the base package should # be empty. What's below works because ${PN}-dev is packaged ahead of ${PN}. -FILES_${PN}-dev += "${FILES_${PN}}" +FILES:${PN}-dev += "${FILES_${PN}}" # An empty package is needed to satisfy package dependencies in certain cases. -ALLOW_EMPTY_${PN} = "1" +ALLOW_EMPTY:${PN} = "1" diff --git a/meta-webos/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend b/meta-webos/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend index e63081570..0b8c95d63 100644 --- a/meta-webos/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend +++ b/meta-webos/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend @@ -1,12 +1,12 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" NATIVESDK_PKGGRP_HOST_FOR_WAYLAND = "\ nativesdk-qtwayland-tools \ nativesdk-wayland-dev \ " -RDEPENDS_${PN} += " \ +RDEPENDS:${PN} += " \ ${NATIVESDK_PKGGRP_HOST_FOR_WAYLAND} \ " diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend b/meta-webos/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend index 034ba6b13..dec859b4d 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend +++ b/meta-webos/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend @@ -1,13 +1,13 @@ # Copyright (c) 2014-2019 LG Electronics, Inc. -# You don't need to change this value when you're changing just the RDEPENDS_${PN} variable. -EXTENDPRAUTO_append = "webos3" +# You don't need to change this value when you're changing just the RDEPENDS:${PN} variable. +EXTENDPRAUTO:append = "webos3" # Don't add the packages related to LTTng if it's not enabled WEBOS_LTTNG_ENABLED ??= "0" DISTROOVERRIDES .= "${@ '' if '${WEBOS_LTTNG_ENABLED}' == '1' else ':no-lttng' }" -LTTNGUST_no-lttng = "" -LTTNGTOOLS_no-lttng= "" -LTTNGMODULES_no-lttng = "" -BABELTRACE_no-lttng = "" +LTTNGUST:no-lttng = "" +LTTNGTOOLS:no-lttng= "" +LTTNGMODULES:no-lttng = "" +BABELTRACE:no-lttng = "" diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-devel.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-devel.bb index 855ffd3a1..325c4dfaf 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-devel.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-devel.bb @@ -4,7 +4,7 @@ SUMMARY = "Components useful to developers added to webOS OSE -devel images" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" -# You don't need to change this value when you're changing just RDEPENDS_${PN} variable. +# You don't need to change this value when you're changing just RDEPENDS:${PN} variable. PR = "r1" PACKAGE_ARCH = "${MACHINE_ARCH}" @@ -12,12 +12,12 @@ inherit packagegroup VALGRIND = "valgrind" # only armv7a is supported -VALGRIND_arm = "" -VALGRIND_armv7a = "valgrind" -VALGRIND_armv7ve = "valgrind" +VALGRIND:arm = "" +VALGRIND:armv7a = "valgrind" +VALGRIND:armv7ve = "valgrind" # libpcap is a dependency library for iftop -RDEPENDS_${PN} = "\ +RDEPENDS:${PN} = "\ binutils \ htop \ iftop \ diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index 1cb187ba6..451c860d6 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -4,7 +4,7 @@ DESCRIPTION = "meta-webos components used in webOS OSE" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" -# You don't need to change this value when you're changing just RDEPENDS_${PN} variable. +# You don't need to change this value when you're changing just RDEPENDS:${PN} variable. PR = "r41" PACKAGE_ARCH = "${MACHINE_ARCH}" @@ -14,9 +14,9 @@ inherit webos_prerelease_dep VIRTUAL-RUNTIME_ai ?= "com.webos.service.ai" # The same restriction as libgoogleassistant (snowboy doesn't support i686;x86) -VIRTUAL-RUNTIME_ai_i686 = "" -VIRTUAL-RUNTIME_ai_arm = "" -VIRTUAL-RUNTIME_ai_rpi = "com.webos.service.ai" +VIRTUAL-RUNTIME_ai:i686 = "" +VIRTUAL-RUNTIME_ai:arm = "" +VIRTUAL-RUNTIME_ai:rpi = "com.webos.service.ai" VIRTUAL-RUNTIME_appinstalld ?= "appinstalld2" VIRTUAL-RUNTIME_event-monitor-network ?= "event-monitor-network" VIRTUAL-RUNTIME_initscripts ?= "initscripts" @@ -35,24 +35,24 @@ VIRTUAL-RUNTIME_nyx_modules_providers ??= "\ # Restricted to only these 3 MACHINEs by COMPATIBLE_MACHINE VIRTUAL-RUNTIME_com.webos.service.mediacontroller ?= "" -VIRTUAL-RUNTIME_com.webos.service.mediacontroller_qemux86 = "com.webos.service.mediacontroller" -VIRTUAL-RUNTIME_com.webos.service.mediacontroller_qemux86-64 = "com.webos.service.mediacontroller" -VIRTUAL-RUNTIME_com.webos.service.mediacontroller_raspberrypi4 = "com.webos.service.mediacontroller" -VIRTUAL-RUNTIME_com.webos.service.mediacontroller_raspberrypi4-64 = "com.webos.service.mediacontroller" +VIRTUAL-RUNTIME_com.webos.service.mediacontroller:qemux86 = "com.webos.service.mediacontroller" +VIRTUAL-RUNTIME_com.webos.service.mediacontroller:qemux86-64 = "com.webos.service.mediacontroller" +VIRTUAL-RUNTIME_com.webos.service.mediacontroller:raspberrypi4 = "com.webos.service.mediacontroller" +VIRTUAL-RUNTIME_com.webos.service.mediacontroller:raspberrypi4-64 = "com.webos.service.mediacontroller" VIRTUAL-RUNTIME_g-media-pipeline ?= "" -VIRTUAL-RUNTIME_g-media-pipeline_raspberrypi3 = "g-media-pipeline" -VIRTUAL-RUNTIME_g-media-pipeline_raspberrypi3-64 = "g-media-pipeline" -VIRTUAL-RUNTIME_g-media-pipeline_raspberrypi4 = "g-media-pipeline" -VIRTUAL-RUNTIME_g-media-pipeline_raspberrypi4-64 = "g-media-pipeline" -VIRTUAL-RUNTIME_g-media-pipeline_qemux86 = "g-media-pipeline" -VIRTUAL-RUNTIME_g-media-pipeline_qemux86-64 = "g-media-pipeline" +VIRTUAL-RUNTIME_g-media-pipeline:raspberrypi3 = "g-media-pipeline" +VIRTUAL-RUNTIME_g-media-pipeline:raspberrypi3-64 = "g-media-pipeline" +VIRTUAL-RUNTIME_g-media-pipeline:raspberrypi4 = "g-media-pipeline" +VIRTUAL-RUNTIME_g-media-pipeline:raspberrypi4-64 = "g-media-pipeline" +VIRTUAL-RUNTIME_g-media-pipeline:qemux86 = "g-media-pipeline" +VIRTUAL-RUNTIME_g-media-pipeline:qemux86-64 = "g-media-pipeline" VIRTUAL-RUNTIME_g-camera-pipeline ?= "" -VIRTUAL-RUNTIME_g-camera-pipeline_raspberrypi4 = "g-camera-pipeline" -VIRTUAL-RUNTIME_g-camera-pipeline_raspberrypi4-64 = "g-camera-pipeline" -VIRTUAL-RUNTIME_g-camera-pipeline_qemux86 = "g-camera-pipeline" -VIRTUAL-RUNTIME_g-camera-pipeline_qemux86-64 = "g-camera-pipeline" +VIRTUAL-RUNTIME_g-camera-pipeline:raspberrypi4 = "g-camera-pipeline" +VIRTUAL-RUNTIME_g-camera-pipeline:raspberrypi4-64 = "g-camera-pipeline" +VIRTUAL-RUNTIME_g-camera-pipeline:qemux86 = "g-camera-pipeline" +VIRTUAL-RUNTIME_g-camera-pipeline:qemux86-64 = "g-camera-pipeline" VIRTUAL-RUNTIME_pdm ?= "com.webos.service.pdm" @@ -84,59 +84,59 @@ MEDIA = " \ VIRTUAL-RUNTIME_browser_fonts ?= "webos-fonts" VIRTUAL-RUNTIME_settingsapp ?= "com.webos.app.settings" -VIRTUAL-RUNTIME_settingsapp_armv4 = "" -VIRTUAL-RUNTIME_settingsapp_armv5 = "" +VIRTUAL-RUNTIME_settingsapp:armv4 = "" +VIRTUAL-RUNTIME_settingsapp:armv5 = "" VIRTUAL-RUNTIME_umediaserver ?= "umediaserver" -VIRTUAL-RUNTIME_umediaserver_armv4 = "" -VIRTUAL-RUNTIME_umediaserver_armv5 = "" +VIRTUAL-RUNTIME_umediaserver:armv4 = "" +VIRTUAL-RUNTIME_umediaserver:armv5 = "" VIRTUAL-RUNTIME_iotivity-node ?= "iotivity-node" -VIRTUAL-RUNTIME_iotivity-node_armv4 = "" -VIRTUAL-RUNTIME_iotivity-node_armv5 = "" +VIRTUAL-RUNTIME_iotivity-node:armv4 = "" +VIRTUAL-RUNTIME_iotivity-node:armv5 = "" VIRTUAL-RUNTIME_com.example.app.iotivity ?= "com.example.app.iotivity" -VIRTUAL-RUNTIME_com.example.app.iotivity_armv4 = "" -VIRTUAL-RUNTIME_com.example.app.iotivity_armv5 = "" +VIRTUAL-RUNTIME_com.example.app.iotivity:armv4 = "" +VIRTUAL-RUNTIME_com.example.app.iotivity:armv5 = "" VIRTUAL-RUNTIME_com.example.service.iotivity ?= "com.example.service.iotivity" -VIRTUAL-RUNTIME_com.example.service.iotivity_armv4 = "" -VIRTUAL-RUNTIME_com.example.service.iotivity_armv5 = "" +VIRTUAL-RUNTIME_com.example.service.iotivity:armv4 = "" +VIRTUAL-RUNTIME_com.example.service.iotivity:armv5 = "" VIRTUAL-RUNTIME_org.ocf.webossample ?= "org.ocf.webossample.occlientbasicops org.ocf.webossample.ocserverbasicops" -VIRTUAL-RUNTIME_org.ocf.webossample_armv4 = "" -VIRTUAL-RUNTIME_org.ocf.webossample_armv5 = "" -VIRTUAL-RUNTIME_org.ocf.webossample_x86-64 = "" +VIRTUAL-RUNTIME_org.ocf.webossample:armv4 = "" +VIRTUAL-RUNTIME_org.ocf.webossample:armv5 = "" +VIRTUAL-RUNTIME_org.ocf.webossample:x86-64 = "" VIRTUAL-RUNTIME_nodejs-module-node-red ?= "nodejs-module-node-red" -VIRTUAL-RUNTIME_nodejs-module-node-red_armv4 = "" -VIRTUAL-RUNTIME_nodejs-module-node-red_armv5 = "" +VIRTUAL-RUNTIME_nodejs-module-node-red:armv4 = "" +VIRTUAL-RUNTIME_nodejs-module-node-red:armv5 = "" # The same restrition as nodejs (and nodejs-module-node-red and com.webos.service.contextintentmgr) VIRTUAL-RUNTIME_contextintentmgr ?= "com.webos.service.contextintentmgr" -VIRTUAL-RUNTIME_contextintentmgr_armv4 = "" -VIRTUAL-RUNTIME_contextintentmgr_armv5 = "" -VIRTUAL-RUNTIME_contextintentmgr_mips64 = "" +VIRTUAL-RUNTIME_contextintentmgr:armv4 = "" +VIRTUAL-RUNTIME_contextintentmgr:armv5 = "" +VIRTUAL-RUNTIME_contextintentmgr:mips64 = "" VIRTUAL-RUNTIME_mojoservicelauncher ?= "mojoservicelauncher" -VIRTUAL-RUNTIME_mojoservicelauncher_armv4 = "" -VIRTUAL-RUNTIME_mojoservicelauncher_armv5 = "" +VIRTUAL-RUNTIME_mojoservicelauncher:armv4 = "" +VIRTUAL-RUNTIME_mojoservicelauncher:armv5 = "" VIRTUAL-RUNTIME_com.webos.service.flowmanager ?= "com.webos.service.flowmanager" -VIRTUAL-RUNTIME_com.webos.service.flowmanager_armv4 = "" -VIRTUAL-RUNTIME_com.webos.service.flowmanager_armv5 = "" +VIRTUAL-RUNTIME_com.webos.service.flowmanager:armv4 = "" +VIRTUAL-RUNTIME_com.webos.service.flowmanager:armv5 = "" VIRTUAL-RUNTIME_com.webos.app.home ?= "com.webos.app.home" -VIRTUAL-RUNTIME_com.webos.app.home_armv4 = "" -VIRTUAL-RUNTIME_com.webos.app.home_armv5 = "" +VIRTUAL-RUNTIME_com.webos.app.home:armv4 = "" +VIRTUAL-RUNTIME_com.webos.app.home:armv5 = "" VIRTUAL-RUNTIME_com.webos.app.notification ?= "com.webos.app.notification" -VIRTUAL-RUNTIME_com.webos.app.notification_armv4 = "" -VIRTUAL-RUNTIME_com.webos.app.notification_armv5 = "" +VIRTUAL-RUNTIME_com.webos.app.notification:armv4 = "" +VIRTUAL-RUNTIME_com.webos.app.notification:armv5 = "" VIRTUAL-RUNTIME_com.webos.app.volume ?= "com.webos.app.volume" -VIRTUAL-RUNTIME_com.webos.app.volume_armv4 = "" -VIRTUAL-RUNTIME_com.webos.app.volume_armv5 = "" +VIRTUAL-RUNTIME_com.webos.app.volume:armv4 = "" +VIRTUAL-RUNTIME_com.webos.app.volume:armv5 = "" VIRTUAL-RUNTIME_bluetooth_service ?= "com.webos.service.bluetooth2" @@ -166,7 +166,7 @@ WEBOS_PACKAGESET_TZDATA ?= " \ tzdata-right \ " -RDEPENDS_${PN} = " \ +RDEPENDS:${PN} = " \ activitymanager \ audiod \ ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', '${VIRTUAL-RUNTIME_bluetooth_service}', '', d)} \ @@ -230,7 +230,7 @@ RDEPENDS_${PN} = " \ ${WEBOS_FOSS_MISSING_FROM_RDEPENDS} \ " -RDEPENDS_${PN}_append_webos = " \ +RDEPENDS:${PN}:append:webos = " \ com.webos.app.camera \ com.webos.app.mediaviewer \ com.webos.app.imageviewer \ @@ -271,7 +271,7 @@ WEBOS_FOSS_MISSING_FROM_RDEPENDS = " \ " # These packages that are installed in the qemux86 image only. -RRECOMMENDS_${PN}_append_qemux86 = " \ +RRECOMMENDS:${PN}:append:qemux86 = " \ fuse-utils \ kernel-module-8021q \ kernel-module-ac97-bus \ @@ -302,7 +302,7 @@ RRECOMMENDS_${PN}_append_qemux86 = " \ ntfs-3g \ " -RRECOMMENDS_${PN}_append_qemux86-64 = " \ +RRECOMMENDS:${PN}:append:qemux86-64 = " \ fuse-utils \ kernel-module-8021q \ kernel-module-ac97-bus \ @@ -333,7 +333,7 @@ RRECOMMENDS_${PN}_append_qemux86-64 = " \ ntfs-3g \ " -RDEPENDS_${PN}_append_qemux86 = " \ +RDEPENDS:${PN}:append:qemux86 = " \ com.webos.service.audiofocusmanager \ com.webos.service.audiooutput \ com.webos.service.camera \ @@ -347,7 +347,7 @@ RDEPENDS_${PN}_append_qemux86 = " \ v4l-utils \ vmwgfx-layout \ " -RDEPENDS_${PN}_append_qemux86-64 = " \ +RDEPENDS:${PN}:append:qemux86-64 = " \ com.webos.service.audiofocusmanager \ com.webos.service.audiooutput \ com.webos.service.camera \ @@ -362,8 +362,8 @@ RDEPENDS_${PN}_append_qemux86-64 = " \ vmwgfx-layout \ " -RDEPENDS_${PN} += "${MACHINE_EXTRA_RDEPENDS}" -RRECOMMENDS_${PN} += "${MACHINE_EXTRA_RRECOMMENDS}" +RDEPENDS:${PN} += "${MACHINE_EXTRA_RDEPENDS}" +RRECOMMENDS:${PN} += "${MACHINE_EXTRA_RRECOMMENDS}" # Unused meta-webos components: # - libtinyxml diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-internal.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-internal.bb index d08a0975c..38540296e 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-internal.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-internal.bb @@ -4,11 +4,11 @@ DESCRIPTION = "Internal components used in webOS OSE" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" -# You don't need to change this value when you're changing just RDEPENDS_${PN} variable. +# You don't need to change this value when you're changing just RDEPENDS:${PN} variable. PR = "r4" PACKAGE_ARCH = "${MACHINE_ARCH}" inherit packagegroup -RDEPENDS_${PN} = " \ +RDEPENDS:${PN} = " \ " diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-test.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-test.bb index d851d915e..8e6021716 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-test.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-test.bb @@ -4,7 +4,7 @@ SUMMARY = "Components for testing added to webOS OSE -devel images" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" -# You don't need to change this value when you're changing just RDEPENDS_${PN} variable. +# You don't need to change this value when you're changing just RDEPENDS:${PN} variable. PR = "r15" PACKAGE_ARCH = "${MACHINE_ARCH}" @@ -12,15 +12,15 @@ inherit packagegroup VIRTUAL-RUNTIME_surface-manager-tests ?= "" VIRTUAL-RUNTIME_umediaserver-python ?= "" -VIRTUAL-RUNTIME_umediaserver-python_armv4 = "" -VIRTUAL-RUNTIME_umediaserver-python_armv5 = "" +VIRTUAL-RUNTIME_umediaserver-python:armv4 = "" +VIRTUAL-RUNTIME_umediaserver-python:armv5 = "" # ptest's default approach to running a component's tests is 'make test'. # glib-2.0 and dbus certainly assume this, and that's what their run-ptest # scripts do. But they don't follow https://wiki.yoctoproject.org/wiki/Ptest -# and include an 'RDEPENDS_${PN}-ptest += "make"'. As we know at least two +# and include an 'RDEPENDS:${PN}-ptest += "make"'. As we know at least two # components need it, add make to the general dependencies for the packagegroup. -RDEPENDS_${PN} = "\ +RDEPENDS:${PN} = "\ db8-tests \ glib-2.0-utils \ iotop \ diff --git a/meta-webos/recipes-core/shadow/shadow_%.bbappend b/meta-webos/recipes-core/shadow/shadow_%.bbappend index b518d9592..77eb61fb7 100644 --- a/meta-webos/recipes-core/shadow/shadow_%.bbappend +++ b/meta-webos/recipes-core/shadow/shadow_%.bbappend @@ -1,12 +1,12 @@ # Copyright (c) 2014-2016 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" PACKAGES =+ "${PN}-gpl" LICENSE += "& GPL-2.0" -LICENSE_${PN}-gpl = "GPL-2.0" +LICENSE:${PN}-gpl = "GPL-2.0" -RDEPENDS_${PN} += "${PN}-gpl" +RDEPENDS:${PN} += "${PN}-gpl" -FILES_${PN}-gpl = "${base_sbindir}/vipw.shadow ${base_sbindir}/vigr.shadow ${bindir}/su" +FILES:${PN}-gpl = "${base_sbindir}/vipw.shadow ${base_sbindir}/vigr.shadow ${bindir}/su" diff --git a/meta-webos/recipes-core/systemd/systemd_%.bbappend b/meta-webos/recipes-core/systemd/systemd_%.bbappend index 66f4b6784..ffdd60673 100644 --- a/meta-webos/recipes-core/systemd/systemd_%.bbappend +++ b/meta-webos/recipes-core/systemd/systemd_%.bbappend @@ -1,9 +1,9 @@ # Copyright (c) 2017-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos9" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +EXTENDPRAUTO:append = "webos9" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -SRC_URI_append_webos = " \ +SRC_URI:append:webos = " \ file://0001-systemd-oomd-depend-on-swap-on.patch \ file://0002-Add-webos-interface.patch \ file://0003-systemd-oomd-modify-oomd.conf.patch \ @@ -14,14 +14,14 @@ SRC_URI_append_webos = " \ inherit webos_prerelease_dep VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-kernel-install_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-kernel-install_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-kernel-install:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-kernel-install:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}_remove = "update-rc.d" +RDEPENDS:${PN}:remove = "update-rc.d" -PACKAGECONFIG_remove = " \ +PACKAGECONFIG:remove = " \ networkd \ resolved \ nss-resolve \ @@ -29,17 +29,17 @@ PACKAGECONFIG_remove = " \ timesyncd \ " -PACKAGECONFIG_append = " \ +PACKAGECONFIG:append = " \ ${@oe.utils.conditional('DISTRO', 'webos', 'oomd', '', d)} \ ${@oe.utils.conditional('DISTRO', 'webos', 'cgroupv2', '', d)} \ ${@oe.utils.conditional('WEBOS_DISTRO_PRERELEASE', 'devel', 'coredump', '', d)} \ ${@oe.utils.conditional('WEBOS_DISTRO_PRERELEASE', 'devel', 'elfutils', '', d)} \ " -FILES_${PN} += "${@oe.utils.conditional('DISTRO', 'webos','${datadir}/dbus-1/system.d/com.webos.MemoryManager1.conf', '', d)}" +FILES:${PN} += "${@oe.utils.conditional('DISTRO', 'webos','${datadir}/dbus-1/system.d/com.webos.MemoryManager1.conf', '', d)}" # By default systemd's Predictable Network Interface Names policy configured for qemu # Currently we don't support this policy in qemu, so removing from systemd's configuration -do_install_append_qemuall() { +do_install:append:qemuall() { rm -rf ${D}/${base_libdir}/systemd/network/99-default.link } diff --git a/meta-webos/recipes-core/util-linux/util-linux_%.bbappend b/meta-webos/recipes-core/util-linux/util-linux_%.bbappend index 286e919cb..6e40eceea 100644 --- a/meta-webos/recipes-core/util-linux/util-linux_%.bbappend +++ b/meta-webos/recipes-core/util-linux/util-linux_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-core/webos-qt-sdk/webos-qt-sdk.bb b/meta-webos/recipes-core/webos-qt-sdk/webos-qt-sdk.bb index a4805be67..835e25c99 100644 --- a/meta-webos/recipes-core/webos-qt-sdk/webos-qt-sdk.bb +++ b/meta-webos/recipes-core/webos-qt-sdk/webos-qt-sdk.bb @@ -33,8 +33,8 @@ inherit webos_machine_impl_dep inherit webos_machine_dep IMAGE_FSTYPES = "" -IMAGE_FSTYPES_qemux86 = "" -IMAGE_FSTYPES_qemux86-64 = "" +IMAGE_FSTYPES:qemux86 = "" +IMAGE_FSTYPES:qemux86-64 = "" SDK_NAME = "${BPN}-${DISTRO}-${SDK_ARCH}-${WEBOS_DISTRO_BUILD_CODENAME}-${MACHINE_ARCH}" diff --git a/meta-webos/recipes-daemons/opensaf/opensaf_%.bbappend b/meta-webos/recipes-daemons/opensaf/opensaf_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-daemons/opensaf/opensaf_%.bbappend +++ b/meta-webos/recipes-daemons/opensaf/opensaf_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-dbs/leveldb/leveldb_%.bbappend b/meta-webos/recipes-dbs/leveldb/leveldb_%.bbappend index fea52ec20..1f830199b 100644 --- a/meta-webos/recipes-dbs/leveldb/leveldb_%.bbappend +++ b/meta-webos/recipes-dbs/leveldb/leveldb_%.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2017-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" -PACKAGECONFIG_append = " snappy" +PACKAGECONFIG:append = " snappy" # Needed for db8-native BBCLASSEXTEND = "native" diff --git a/meta-webos/recipes-dbs/mysql/mariadb_%.bbappend b/meta-webos/recipes-dbs/mysql/mariadb_%.bbappend index 91439d819..d16ad5f3a 100644 --- a/meta-webos/recipes-dbs/mysql/mariadb_%.bbappend +++ b/meta-webos/recipes-dbs/mysql/mariadb_%.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" # http://caprica.lgsvl.com:8080/Errors/Details/1447233 VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-leftovers_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-leftovers_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-leftovers:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-leftovers:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/android-tools/android-tools_%.bbappend b/meta-webos/recipes-devtools/android-tools/android-tools_%.bbappend index b99a25bba..d525a1a11 100644 --- a/meta-webos/recipes-devtools/android-tools/android-tools_%.bbappend +++ b/meta-webos/recipes-devtools/android-tools/android-tools_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${BPN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${BPN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${BPN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${BPN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/apt/apt_%.bbappend b/meta-webos/recipes-devtools/apt/apt_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-devtools/apt/apt_%.bbappend +++ b/meta-webos/recipes-devtools/apt/apt_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/build-compare/build-compare_%.bbappend b/meta-webos/recipes-devtools/build-compare/build-compare_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-devtools/build-compare/build-compare_%.bbappend +++ b/meta-webos/recipes-devtools/build-compare/build-compare_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_%.bbappend b/meta-webos/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_%.bbappend index 6b0deb661..210c98f54 100644 --- a/meta-webos/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_%.bbappend +++ b/meta-webos/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2019-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/e2fsprogs/e2fsprogs_%.bbappend b/meta-webos/recipes-devtools/e2fsprogs/e2fsprogs_%.bbappend index 5601f2d5f..08de570f4 100644 --- a/meta-webos/recipes-devtools/e2fsprogs/e2fsprogs_%.bbappend +++ b/meta-webos/recipes-devtools/e2fsprogs/e2fsprogs_%.bbappend @@ -1,21 +1,21 @@ # Copyright (c) 2012-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos11" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +EXTENDPRAUTO:append = "webos11" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI += "file://e2fsck.conf" -do_install_append() { +do_install:append() { install -d ${D}${sysconfdir} install -v -m 0644 ${WORKDIR}/e2fsck.conf ${D}${sysconfdir}/ } VIRTUAL-RUNTIME_bash ?= "bash" -# Don't use ${PN} in this one, because original recipe already uses RDEPENDS_e2fsprogs +# Don't use ${PN} in this one, because original recipe already uses RDEPENDS:e2fsprogs # and using ${PN} here would overwrite it: -# 2fsprogs_1.43.bb: Variable key RDEPENDS_${PN} ( ${VIRTUAL-RUNTIME_bash}) replaces original key RDEPENDS_e2fsprogs (e2fsprogs-badblocks). -RDEPENDS_e2fsprogs_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_e2fsprogs-e2scrub_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_e2fsprogs-e2scrub_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +# 2fsprogs_1.43.bb: Variable key RDEPENDS:${PN} ( ${VIRTUAL-RUNTIME_bash}) replaces original key RDEPENDS:e2fsprogs (e2fsprogs-badblocks). +RDEPENDS:e2fsprogs:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:e2fsprogs-e2scrub:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:e2fsprogs-e2scrub:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/elfutils/elfutils_%.bbappend b/meta-webos/recipes-devtools/elfutils/elfutils_%.bbappend index 683f7d087..5ac27ae84 100644 --- a/meta-webos/recipes-devtools/elfutils/elfutils_%.bbappend +++ b/meta-webos/recipes-devtools/elfutils/elfutils_%.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2019-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos3" +EXTENDPRAUTO:append = "webos3" -# ERROR: QA Issue: /usr/lib/elfutils/ptest/tests/run-ar.sh contained in package elfutils-ptest requires /bin/bash, but no providers found in RDEPENDS_elfutils-ptest? [file-rdeps] +# ERROR: QA Issue: /usr/lib/elfutils/ptest/tests/run-ar.sh contained in package elfutils-ptest requires /bin/bash, but no providers found in RDEPENDS:elfutils-ptest? [file-rdeps] VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/expect/expect_5.45.4.bbappend b/meta-webos/recipes-devtools/expect/expect_5.45.4.bbappend index 7a265b229..d62542419 100644 --- a/meta-webos/recipes-devtools/expect/expect_5.45.4.bbappend +++ b/meta-webos/recipes-devtools/expect/expect_5.45.4.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" # PLAT-79213: Fix an error in do_compile with -Werror=return-type SRC_URI += "file://fix-compile.patch" diff --git a/meta-webos/recipes-devtools/fdisk/gptfdisk_%.bbappend b/meta-webos/recipes-devtools/fdisk/gptfdisk_%.bbappend index 66af8d4e2..1c8d73137 100644 --- a/meta-webos/recipes-devtools/fdisk/gptfdisk_%.bbappend +++ b/meta-webos/recipes-devtools/fdisk/gptfdisk_%.bbappend @@ -3,9 +3,9 @@ EXTENDPRAUTO = "webos2" PACKAGES =+ "${PN}-gdisk ${PN}-cgdisk ${PN}-fixparts ${PN}-sgdisk" -FILES_${PN}-gdisk += "${sbindir}/gdisk" -FILES_${PN}-cgdisk += "${sbindir}/cgdisk" -FILES_${PN}-sgdisk += "${sbindir}/sgdisk" -FILES_${PN}-fixparts += "${sbindir}/fixparts" +FILES:${PN}-gdisk += "${sbindir}/gdisk" +FILES:${PN}-cgdisk += "${sbindir}/cgdisk" +FILES:${PN}-sgdisk += "${sbindir}/sgdisk" +FILES:${PN}-fixparts += "${sbindir}/fixparts" -ALLOW_EMPTY_${PN} = "1" +ALLOW_EMPTY:${PN} = "1" diff --git a/meta-webos/recipes-devtools/flex/flex_%.bbappend b/meta-webos/recipes-devtools/flex/flex_%.bbappend index 286e919cb..6e40eceea 100644 --- a/meta-webos/recipes-devtools/flex/flex_%.bbappend +++ b/meta-webos/recipes-devtools/flex/flex_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/glide/glide_%.bbappend b/meta-webos/recipes-devtools/glide/glide_%.bbappend index cd2d6a80a..2a84a7ab4 100644 --- a/meta-webos/recipes-devtools/glide/glide_%.bbappend +++ b/meta-webos/recipes-devtools/glide/glide_%.bbappend @@ -1,9 +1,9 @@ # Copyright (c) 2018-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-dev_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-dev_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-dev:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-dev:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/go/go-dep_%.bbappend b/meta-webos/recipes-devtools/go/go-dep_%.bbappend index c6d6f047f..79c63c787 100644 --- a/meta-webos/recipes-devtools/go/go-dep_%.bbappend +++ b/meta-webos/recipes-devtools/go/go-dep_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-dev_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-dev_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-dev:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-dev:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/go/go_%.bbappend b/meta-webos/recipes-devtools/go/go_%.bbappend index c6d6f047f..79c63c787 100644 --- a/meta-webos/recipes-devtools/go/go_%.bbappend +++ b/meta-webos/recipes-devtools/go/go_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-dev_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-dev_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-dev:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-dev:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/grpc/grpc_%.bbappend b/meta-webos/recipes-devtools/grpc/grpc_%.bbappend index f021055c4..e4c0722a0 100644 --- a/meta-webos/recipes-devtools/grpc/grpc_%.bbappend +++ b/meta-webos/recipes-devtools/grpc/grpc_%.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2018-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos4" +EXTENDPRAUTO:append = "webos4" -do_install_append() { +do_install:append() { install -d ${D}${datadir}/grpc/ install -m 644 ${S}/etc/roots.pem ${D}${datadir}/grpc/ } diff --git a/meta-webos/recipes-devtools/jsoncpp/jsoncpp_%.bbappend b/meta-webos/recipes-devtools/jsoncpp/jsoncpp_%.bbappend index c9ea8dc7b..1b2c5e7d9 100644 --- a/meta-webos/recipes-devtools/jsoncpp/jsoncpp_%.bbappend +++ b/meta-webos/recipes-devtools/jsoncpp/jsoncpp_%.bbappend @@ -1,5 +1,5 @@ # Copyright (c) 2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" -CXXFLAGS_append = " -DJSON_USE_EXCEPTION=0" +CXXFLAGS:append = " -DJSON_USE_EXCEPTION=0" diff --git a/meta-webos/recipes-devtools/kconfig-frontends/kconfig-frontends_%.bbappend b/meta-webos/recipes-devtools/kconfig-frontends/kconfig-frontends_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-devtools/kconfig-frontends/kconfig-frontends_%.bbappend +++ b/meta-webos/recipes-devtools/kconfig-frontends/kconfig-frontends_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/libtool/libtool-cross_%.bbappend b/meta-webos/recipes-devtools/libtool/libtool-cross_%.bbappend index 1fbc87be6..495be098f 100644 --- a/meta-webos/recipes-devtools/libtool/libtool-cross_%.bbappend +++ b/meta-webos/recipes-devtools/libtool/libtool-cross_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI += "file://0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch" diff --git a/meta-webos/recipes-devtools/libtool/libtool-native_%.bbappend b/meta-webos/recipes-devtools/libtool/libtool-native_%.bbappend index 1fbc87be6..495be098f 100644 --- a/meta-webos/recipes-devtools/libtool/libtool-native_%.bbappend +++ b/meta-webos/recipes-devtools/libtool/libtool-native_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI += "file://0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch" diff --git a/meta-webos/recipes-devtools/libtool/libtool_%.bbappend b/meta-webos/recipes-devtools/libtool/libtool_%.bbappend index 8764a0ab9..421554e66 100644 --- a/meta-webos/recipes-devtools/libtool/libtool_%.bbappend +++ b/meta-webos/recipes-devtools/libtool/libtool_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/libtool/nativesdk-libtool_%.bbappend b/meta-webos/recipes-devtools/libtool/nativesdk-libtool_%.bbappend index 686f5a792..039aaeb9e 100644 --- a/meta-webos/recipes-devtools/libtool/nativesdk-libtool_%.bbappend +++ b/meta-webos/recipes-devtools/libtool/nativesdk-libtool_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" -FILESEXTRAPATHS_prepend := "${THISDIR}/libtool:" +FILESEXTRAPATHS:prepend := "${THISDIR}/libtool:" SRC_URI += "file://0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch" diff --git a/meta-webos/recipes-devtools/llvm/llvm_%.bbappend b/meta-webos/recipes-devtools/llvm/llvm_%.bbappend index d8de3dbed..65d0de73d 100644 --- a/meta-webos/recipes-devtools/llvm/llvm_%.bbappend +++ b/meta-webos/recipes-devtools/llvm/llvm_%.bbappend @@ -1,5 +1,5 @@ # Copyright (c) 2014-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos4" +EXTENDPRAUTO:append = "webos4" PACKAGECONFIG[libedit] = "-DLLVM_ENABLE_LIBEDIT=ON,-DLLVM_ENABLE_LIBEDIT=OFF,libedit" diff --git a/meta-webos/recipes-devtools/ltrace/ltrace_git.bbappend b/meta-webos/recipes-devtools/ltrace/ltrace_git.bbappend index 8af16f92f..ed0ed8450 100644 --- a/meta-webos/recipes-devtools/ltrace/ltrace_git.bbappend +++ b/meta-webos/recipes-devtools/ltrace/ltrace_git.bbappend @@ -1,5 +1,5 @@ # Copyright (c) 2015-2017 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" -DEPENDS_append = " binutils" +DEPENDS:append = " binutils" diff --git a/meta-webos/recipes-devtools/m4/m4_%.bbappend b/meta-webos/recipes-devtools/m4/m4_%.bbappend index 437bcb0d2..4bff70343 100644 --- a/meta-webos/recipes-devtools/m4/m4_%.bbappend +++ b/meta-webos/recipes-devtools/m4/m4_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" # We need to revert RDEPENDS changes from # @@ -15,6 +15,6 @@ EXTENDPRAUTO_append = "webos1" # it doesn't work when GLIBC_GENERATE_LOCALES are restricted like they are in our builds: # meta-webos/conf/distro/include/webos-toolchain.inc:GLIBC_GENERATE_LOCALES = "en_US.UTF-8" -RDEPENDS_${PN}-ptest_remove_libc-glibc = " \ +RDEPENDS:${PN}-ptest:remove:libc-glibc = " \ locale-base-fr-fr.iso-8859-1 \ " diff --git a/meta-webos/recipes-devtools/makedevs/makedevs_1.0.1.bbappend b/meta-webos/recipes-devtools/makedevs/makedevs_1.0.1.bbappend index 7a265b229..d62542419 100644 --- a/meta-webos/recipes-devtools/makedevs/makedevs_1.0.1.bbappend +++ b/meta-webos/recipes-devtools/makedevs/makedevs_1.0.1.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" # PLAT-79213: Fix an error in do_compile with -Werror=return-type SRC_URI += "file://fix-compile.patch" diff --git a/meta-webos/recipes-devtools/mpich/mpich_%.bbappend b/meta-webos/recipes-devtools/mpich/mpich_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-devtools/mpich/mpich_%.bbappend +++ b/meta-webos/recipes-devtools/mpich/mpich_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/mtd/mtd-utils_%.bbappend b/meta-webos/recipes-devtools/mtd/mtd-utils_%.bbappend index 8fe366929..343cc3483 100644 --- a/meta-webos/recipes-devtools/mtd/mtd-utils_%.bbappend +++ b/meta-webos/recipes-devtools/mtd/mtd-utils_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2018-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_mtd-utils-tests_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_mtd-utils-tests_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:mtd-utils-tests:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:mtd-utils-tests:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/nodejs/nodejs_%.bbappend b/meta-webos/recipes-devtools/nodejs/nodejs_%.bbappend index bec8455d4..1c320fa1b 100644 --- a/meta-webos/recipes-devtools/nodejs/nodejs_%.bbappend +++ b/meta-webos/recipes-devtools/nodejs/nodejs_%.bbappend @@ -1,11 +1,11 @@ # Copyright (c) 2019-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos7" +EXTENDPRAUTO:append = "webos7" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-npm_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-npm_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-npm:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-npm:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI += "file://0001-Use-human-readable-process-name-for-chrome-inspector.patch" diff --git a/meta-webos/recipes-devtools/opkg-utils/opkg-utils_%.bbappend b/meta-webos/recipes-devtools/opkg-utils/opkg-utils_%.bbappend index 6b0deb661..210c98f54 100644 --- a/meta-webos/recipes-devtools/opkg-utils/opkg-utils_%.bbappend +++ b/meta-webos/recipes-devtools/opkg-utils/opkg-utils_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2019-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/opkg/opkg_%.bbappend b/meta-webos/recipes-devtools/opkg/opkg_%.bbappend index 8c0ba0a63..b30965653 100644 --- a/meta-webos/recipes-devtools/opkg/opkg_%.bbappend +++ b/meta-webos/recipes-devtools/opkg/opkg_%.bbappend @@ -1,19 +1,19 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos6" +EXTENDPRAUTO:append = "webos6" -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" -SRC_URI_append = " \ +SRC_URI:append = " \ file://0001-Load-installed-files-before-update-file-ownership.patch \ file://0002-Sort-opkg-list-file-content-to-speed-package-removal.patch \ file://0005-Add-symlink-path-validity.patch \ " -SRC_URI_append_class-target = " \ +SRC_URI:append:class-target = " \ file://0004-Mask-S_ISUID-and-S_ISGID-permission-bits.patch \ " -do_install_append() { +do_install:append() { if ! grep status_file ${D}${sysconfdir}/opkg/opkg.conf; then cat << EOF >> ${D}${sysconfdir}/opkg/opkg.conf diff --git a/meta-webos/recipes-devtools/pax-utils/pax-utils_%.bbappend b/meta-webos/recipes-devtools/pax-utils/pax-utils_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-devtools/pax-utils/pax-utils_%.bbappend +++ b/meta-webos/recipes-devtools/pax-utils/pax-utils_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/pm-qa/pm-qa_%.bbappend b/meta-webos/recipes-devtools/pm-qa/pm-qa_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-devtools/pm-qa/pm-qa_%.bbappend +++ b/meta-webos/recipes-devtools/pm-qa/pm-qa_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/protobuf/protobuf_%.bbappend b/meta-webos/recipes-devtools/protobuf/protobuf_%.bbappend index 077505225..5394569cb 100644 --- a/meta-webos/recipes-devtools/protobuf/protobuf_%.bbappend +++ b/meta-webos/recipes-devtools/protobuf/protobuf_%.bbappend @@ -1,12 +1,12 @@ # Copyright (c) 2018-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI += " \ file://0001-Fix-linking-error-with-ld-gold.patch \ diff --git a/meta-webos/recipes-devtools/python/python3-atlassian-python-api_3.8.0.bb b/meta-webos/recipes-devtools/python/python3-atlassian-python-api_3.8.0.bb index bb9ec6859..216125755 100644 --- a/meta-webos/recipes-devtools/python/python3-atlassian-python-api_3.8.0.bb +++ b/meta-webos/recipes-devtools/python/python3-atlassian-python-api_3.8.0.bb @@ -12,7 +12,7 @@ inherit pypi setuptools3 SRC_URI[sha256sum] = "7ef384a91a790c807336e2bd6b7554284691aadd6d7413d199baf752dd84c53e" -RDEPENDS_${PN} = "${PYTHON_PN}-requests \ +RDEPENDS:${PN} = "${PYTHON_PN}-requests \ ${PYTHON_PN}-oauthlib \ ${PYTHON_PN}-urllib3 \ ${PYTHON_PN}-certifi \ diff --git a/meta-webos/recipes-devtools/python/python3-deprecated_1.2.12.bb b/meta-webos/recipes-devtools/python/python3-deprecated_1.2.12.bb index fc415bf12..7d449c570 100644 --- a/meta-webos/recipes-devtools/python/python3-deprecated_1.2.12.bb +++ b/meta-webos/recipes-devtools/python/python3-deprecated_1.2.12.bb @@ -11,7 +11,7 @@ inherit pypi setuptools3 SRC_URI[sha256sum] = "6d2de2de7931a968874481ef30208fd4e08da39177d61d3d4ebdf4366e7dbca1" -RDEPENDS_${PN} = "${PYTHON_PN}-wrapt" +RDEPENDS:${PN} = "${PYTHON_PN}-wrapt" BBCLASSEXTEND = "native nativesdk" diff --git a/meta-webos/recipes-devtools/python/python3-pymisp_%.bbappend b/meta-webos/recipes-devtools/python/python3-pymisp_%.bbappend index cba54a213..a5d19a033 100644 --- a/meta-webos/recipes-devtools/python/python3-pymisp_%.bbappend +++ b/meta-webos/recipes-devtools/python/python3-pymisp_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/python/python3_%.bbappend b/meta-webos/recipes-devtools/python/python3_%.bbappend index 45fbe8a69..31516c054 100644 --- a/meta-webos/recipes-devtools/python/python3_%.bbappend +++ b/meta-webos/recipes-devtools/python/python3_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2019-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" # We need to revert changes from # @@ -15,11 +15,11 @@ EXTENDPRAUTO_append = "webos1" # it doesn't work when GLIBC_GENERATE_LOCALES are restricted like they are in our builds: # meta-webos/conf/distro/include/webos-toolchain.inc:GLIBC_GENERATE_LOCALES = "en_US.UTF-8" -RDEPENDS_${PN}-ptest_remove_libc-glibc = " \ +RDEPENDS:${PN}-ptest:remove:libc-glibc = " \ locale-base-tr-tr.iso-8859-9 \ " -# ERROR: python3-3.8.1-r0 do_package_qa: QA Issue: /usr/lib/python3.8/test/ziptestdata/header.sh contained in package python3-tests requires /bin/bash, but no providers found in RDEPENDS_python3-tests? [file-rdeps] +# ERROR: python3-3.8.1-r0 do_package_qa: QA Issue: /usr/lib/python3.8/test/ziptestdata/header.sh contained in package python3-tests requires /bin/bash, but no providers found in RDEPENDS:python3-tests? [file-rdeps] VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-tests_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-tests_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-tests:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-tests:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/qemu/qemu_%.bbappend b/meta-webos/recipes-devtools/qemu/qemu_%.bbappend index d00002db8..a1fd6cf2c 100644 --- a/meta-webos/recipes-devtools/qemu/qemu_%.bbappend +++ b/meta-webos/recipes-devtools/qemu/qemu_%.bbappend @@ -1,12 +1,12 @@ # Copyright (c) 2017-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos3" +EXTENDPRAUTO:append = "webos3" -PACKAGECONFIG_append_class-native = " virglrenderer glx spice libusb usb-redir" -PACKAGECONFIG_append_class-nativesdk = " virglrenderer glx spice libusb usb-redir" +PACKAGECONFIG:append:class-native = " virglrenderer glx spice libusb usb-redir" +PACKAGECONFIG:append:class-nativesdk = " virglrenderer glx spice libusb usb-redir" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/quilt/quilt_%.bbappend b/meta-webos/recipes-devtools/quilt/quilt_%.bbappend index a49502318..e862818ba 100644 --- a/meta-webos/recipes-devtools/quilt/quilt_%.bbappend +++ b/meta-webos/recipes-devtools/quilt/quilt_%.bbappend @@ -1,9 +1,9 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/rpm/rpm_%.bbappend b/meta-webos/recipes-devtools/rpm/rpm_%.bbappend index bbce05446..470b38ef5 100644 --- a/meta-webos/recipes-devtools/rpm/rpm_%.bbappend +++ b/meta-webos/recipes-devtools/rpm/rpm_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2016-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos4" +EXTENDPRAUTO:append = "webos4" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/tcf-agent/tcf-agent_%.bbappend b/meta-webos/recipes-devtools/tcf-agent/tcf-agent_%.bbappend index c8f775ddb..cd5cb4282 100644 --- a/meta-webos/recipes-devtools/tcf-agent/tcf-agent_%.bbappend +++ b/meta-webos/recipes-devtools/tcf-agent/tcf-agent_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/xmlto/xmlto_%.bbappend b/meta-webos/recipes-devtools/xmlto/xmlto_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-devtools/xmlto/xmlto_%.bbappend +++ b/meta-webos/recipes-devtools/xmlto/xmlto_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/yajl/yajl_2.1.0.bbappend b/meta-webos/recipes-devtools/yajl/yajl_2.1.0.bbappend index 60b41cf2c..6a59e996d 100644 --- a/meta-webos/recipes-devtools/yajl/yajl_2.1.0.bbappend +++ b/meta-webos/recipes-devtools/yajl/yajl_2.1.0.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2016 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" -EXTRA_OECMAKE_append = " -DCMAKE_AR:FILEPATH=${AR}" +EXTRA_OECMAKE:append = " -DCMAKE_AR:FILEPATH=${AR}" BBCLASSEXTEND += "native" diff --git a/meta-webos/recipes-extended/bash/bash_%.bbappend b/meta-webos/recipes-extended/bash/bash_%.bbappend index dd8b96f45..9206f1f9e 100644 --- a/meta-webos/recipes-extended/bash/bash_%.bbappend +++ b/meta-webos/recipes-extended/bash/bash_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2012-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" # We don't want bash to ever be /bin/sh: our upstart conf files don't work when # it is -- apparently it handles quotes on the command line differently from @@ -14,7 +14,7 @@ ALTERNATIVE_TARGET[sh] = "${base_bindir}/bash.bash" # Use u-a for /bin/bash binary, because our busybox defconfig enables bash now, # but again use lower priority than busybox applet -ALTERNATIVE_${PN} += "bash" +ALTERNATIVE:${PN} += "bash" ALTERNATIVE_LINK_NAME[bash] = "${base_bindir}/bash" ALTERNATIVE_PRIORITY[bash] = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', '40', '100', d)}" @@ -24,4 +24,4 @@ ALTERNATIVE_PRIORITY[bash] = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_ # http://lists.openembedded.org/pipermail/openembedded-commits/2017-November/215520.html # it doesn't work when GLIBC_GENERATE_LOCALES are restricted like they are in our builds: # meta-webos/conf/distro/include/webos-toolchain.inc:GLIBC_GENERATE_LOCALES = "en_US.UTF-8" -RDEPENDS_${PN}-ptest_remove_libc-glibc = "locale-base-fr-fr locale-base-de-de locale-base-fr-fr.iso-8859-1 locale-base-zh-hk.big5-hkscs" +RDEPENDS:${PN}-ptest:remove:libc-glibc = "locale-base-fr-fr locale-base-de-de locale-base-fr-fr.iso-8859-1 locale-base-zh-hk.big5-hkscs" diff --git a/meta-webos/recipes-extended/collectd/collectd_%.bbappend b/meta-webos/recipes-extended/collectd/collectd_%.bbappend index c310043a2..02a62f3ed 100644 --- a/meta-webos/recipes-extended/collectd/collectd_%.bbappend +++ b/meta-webos/recipes-extended/collectd/collectd_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2018 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" # Fix QA Issue: collectd rdepends on protobuf-c, but it isn't a build dependency, missing protobuf-c in DEPENDS or PACKAGECONFIG? [build-deps] PACKAGECONFIG[write_riemann] = "--enable-write_riemann,--disable-write_riemann,protobuf-c-native protobuf-c" diff --git a/meta-webos/recipes-extended/corosync/corosync_%.bbappend b/meta-webos/recipes-extended/corosync/corosync_%.bbappend index 47d4f9d78..9b3295396 100644 --- a/meta-webos/recipes-extended/corosync/corosync_%.bbappend +++ b/meta-webos/recipes-extended/corosync/corosync_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-extended/hdparm/hdparm_%.bbappend b/meta-webos/recipes-extended/hdparm/hdparm_%.bbappend index 00ddb747a..dcb038f40 100644 --- a/meta-webos/recipes-extended/hdparm/hdparm_%.bbappend +++ b/meta-webos/recipes-extended/hdparm/hdparm_%.bbappend @@ -1,11 +1,11 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_wiper_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_wiper_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:wiper:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:wiper:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" VIRTUAL-RUNTIME_stat ?= "stat" -RDEPENDS_wiper_append_class-target = " ${VIRTUAL-RUNTIME_stat}" -RDEPENDS_wiper_remove_class-target = "stat" +RDEPENDS:wiper:append:class-target = " ${VIRTUAL-RUNTIME_stat}" +RDEPENDS:wiper:remove:class-target = "stat" diff --git a/meta-webos/recipes-extended/iotop/iotop_%.bbappend b/meta-webos/recipes-extended/iotop/iotop_%.bbappend index f0b7bee90..55d6112fe 100644 --- a/meta-webos/recipes-extended/iotop/iotop_%.bbappend +++ b/meta-webos/recipes-extended/iotop/iotop_%.bbappend @@ -2,5 +2,5 @@ EXTENDPRAUTO = "webos2" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI += "file://iotop_not_disappear_result_when_exited_thread.patch" diff --git a/meta-webos/recipes-extended/lighttpd/lighttpd_%.bbappend b/meta-webos/recipes-extended/lighttpd/lighttpd_%.bbappend index b74926652..5b8de88ac 100644 --- a/meta-webos/recipes-extended/lighttpd/lighttpd_%.bbappend +++ b/meta-webos/recipes-extended/lighttpd/lighttpd_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" # PLAT-76698: Do not start the service at boot by default SYSTEMD_AUTO_ENABLE = "disable" diff --git a/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend b/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend index f00ffb087..c8b45d5a1 100644 --- a/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend +++ b/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2013-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos7" +EXTENDPRAUTO:append = "webos7" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" inherit webos_core_os_dep @@ -12,7 +12,7 @@ WEBOS_TARGET_CORE_OS ?= "undefined" BUILD_INFO_FILE = "${DISTRO}-release" BUILD_DISTRIB_ID = "${@'${WEBOS_TARGET_CORE_OS}'.capitalize()}" -do_install_append() { +do_install:append() { # Remove lsb-release file and directory created by parent recipe. rm -f ${D}${sysconfdir}/lsb-release rm -rf ${D}${sysconfdir}/lsb-release.d diff --git a/meta-webos/recipes-extended/ltp/ltp_%.bbappend b/meta-webos/recipes-extended/ltp/ltp_%.bbappend index 390e2f963..d5d2c137a 100644 --- a/meta-webos/recipes-extended/ltp/ltp_%.bbappend +++ b/meta-webos/recipes-extended/ltp/ltp_%.bbappend @@ -1,18 +1,18 @@ # Copyright (c) 2017-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos4" +EXTENDPRAUTO:append = "webos4" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" VIRTUAL-RUNTIME_tar ?= "tar" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_tar}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_TAR', 'busybox', 'tar', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_tar}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_TAR', 'busybox', 'tar', '', d)}" inherit webos_filesystem_paths -do_install_append() { +do_install:append() { if [ "${webos_optdir}" != "/opt" ] ; then install -d ${D}${webos_optdir} mv ${D}/opt/* ${D}${webos_optdir}/ @@ -20,4 +20,4 @@ do_install_append() { fi } -FILES_${PN} += "${webos_optdir}" +FILES:${PN} += "${webos_optdir}" diff --git a/meta-webos/recipes-extended/mdadm/mdadm_%.bbappend b/meta-webos/recipes-extended/mdadm/mdadm_%.bbappend index 2f1455eb7..1d5e46630 100644 --- a/meta-webos/recipes-extended/mdadm/mdadm_%.bbappend +++ b/meta-webos/recipes-extended/mdadm/mdadm_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-extended/ostree/ostree_%.bbappend b/meta-webos/recipes-extended/ostree/ostree_%.bbappend index 21ddf10c2..f10d36acd 100644 --- a/meta-webos/recipes-extended/ostree/ostree_%.bbappend +++ b/meta-webos/recipes-extended/ostree/ostree_%.bbappend @@ -1,20 +1,20 @@ # Copyright (c) 2019-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-dracut_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-dracut_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-mkinitcpio_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-mkinitcpio_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-dracut:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-dracut:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-mkinitcpio:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-mkinitcpio:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" VIRTUAL-RUNTIME_tar ?= "tar" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_tar}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_TAR', 'busybox', 'tar', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_tar}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_TAR', 'busybox', 'tar', '', d)}" # It should be added with: # ${@bb.utils.contains('PACKAGECONFIG', 'trivial-httpd-cmdline', '${PN}-trivial-httpd', '', d)} # like in ${PN} RDEPENDS, I've sent fix to meta-oe, just remove it for now (as we don't enable trivial-httpd-cmdline here) -RDEPENDS_${PN}-ptest_remove = "${PN}-trivial-httpd" +RDEPENDS:${PN}-ptest:remove = "${PN}-trivial-httpd" diff --git a/meta-webos/recipes-extended/procps/procps_%.bbappend b/meta-webos/recipes-extended/procps/procps_%.bbappend index ba4352d9d..adc6fc180 100644 --- a/meta-webos/recipes-extended/procps/procps_%.bbappend +++ b/meta-webos/recipes-extended/procps/procps_%.bbappend @@ -1,12 +1,12 @@ # Copyright (c) 2015-2021 LG Electronics, Inc. AUTHOR = "Viesturs Zarins " -EXTENDPRAUTO_append = "webos3" +EXTENDPRAUTO:append = "webos3" inherit webos_machine_impl_dep inherit webos_prerelease_dep -do_install_append_hardware() { +do_install:append:hardware() { echo "" >> ${D}${sysconfdir}/sysctl.conf echo "# Additional Security Settings" >> ${D}${sysconfdir}/sysctl.conf diff --git a/meta-webos/recipes-extended/rarpd/rarpd_%.bbappend b/meta-webos/recipes-extended/rarpd/rarpd_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-extended/rarpd/rarpd_%.bbappend +++ b/meta-webos/recipes-extended/rarpd/rarpd_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-extended/rsyslog/rsyslog_%.bbappend b/meta-webos/recipes-extended/rsyslog/rsyslog_%.bbappend index 2f1455eb7..1d5e46630 100644 --- a/meta-webos/recipes-extended/rsyslog/rsyslog_%.bbappend +++ b/meta-webos/recipes-extended/rsyslog/rsyslog_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-extended/sblim-sfcb/sblim-sfcb_%.bbappend b/meta-webos/recipes-extended/sblim-sfcb/sblim-sfcb_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-extended/sblim-sfcb/sblim-sfcb_%.bbappend +++ b/meta-webos/recipes-extended/sblim-sfcb/sblim-sfcb_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-extended/scsirastools/scsirastools_%.bbappend b/meta-webos/recipes-extended/scsirastools/scsirastools_%.bbappend index ec208b20f..9dd53d029 100644 --- a/meta-webos/recipes-extended/scsirastools/scsirastools_%.bbappend +++ b/meta-webos/recipes-extended/scsirastools/scsirastools_%.bbappend @@ -1,11 +1,11 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-raidmon_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-raidmon_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-diskmon_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-diskmon_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-raidmon:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-raidmon:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-diskmon:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-diskmon:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-extended/sed/sed_4.8.bbappend b/meta-webos/recipes-extended/sed/sed_4.8.bbappend index a229da17f..3eab1a6f1 100644 --- a/meta-webos/recipes-extended/sed/sed_4.8.bbappend +++ b/meta-webos/recipes-extended/sed/sed_4.8.bbappend @@ -1,5 +1,5 @@ # Copyright (c) 2015-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" PACKAGECONFIG[selinux] = "--with-selinux,--without-selinux,libselinux" diff --git a/meta-webos/recipes-extended/sysdig/sysdig_%.bbappend b/meta-webos/recipes-extended/sysdig/sysdig_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-extended/sysdig/sysdig_%.bbappend +++ b/meta-webos/recipes-extended/sysdig/sysdig_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-extended/tcp-wrappers/tcp-wrappers_7.6.bbappend b/meta-webos/recipes-extended/tcp-wrappers/tcp-wrappers_7.6.bbappend index 7a265b229..d62542419 100644 --- a/meta-webos/recipes-extended/tcp-wrappers/tcp-wrappers_7.6.bbappend +++ b/meta-webos/recipes-extended/tcp-wrappers/tcp-wrappers_7.6.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" # PLAT-79213: Fix an error in do_compile with -Werror=return-type SRC_URI += "file://fix-compile.patch" diff --git a/meta-webos/recipes-extended/tzdata/tzdata.bbappend b/meta-webos/recipes-extended/tzdata/tzdata.bbappend index 869afe069..4c0f5a976 100644 --- a/meta-webos/recipes-extended/tzdata/tzdata.bbappend +++ b/meta-webos/recipes-extended/tzdata/tzdata.bbappend @@ -3,9 +3,9 @@ # webOS system should be ready to have read-only /etc folder # thus we move timezone/localtime to other place (in volatile partition) -EXTENDPRAUTO_append = "webos7" +EXTENDPRAUTO:append = "webos7" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI += "file://etcetera.patch" @@ -22,7 +22,7 @@ do_compile () { done } -do_install_append() { +do_install:append() { install -d "${D}/${webos_sysmgr_localstatedir}/preferences" install -d "${D}/${webos_sysmgr_localstatedir}/preferences/zoneinfo/Etc" @@ -41,7 +41,7 @@ do_install_append() { # we replace current OE variant with our own based on original code # please keep it in sync original OE variant or find a better solution -pkg_postinst_${PN}() { +pkg_postinst:${PN}() { etc_lt=${LOCALTIME_LOCATION:-${webos_sysmgr_localstatedir}/preferences/localtime} src=${TIMEZONE_LOCATION:-${webos_sysmgr_localstatedir}/preferences/timezone} @@ -62,5 +62,5 @@ pkg_postinst_${PN}() { fi } -FILES_${PN} += "${webos_sysmgr_localstatedir}/preferences" -FILES_${PN} += "${datadir}/zoneinfo/Etc/Manual" +FILES:${PN} += "${webos_sysmgr_localstatedir}/preferences" +FILES:${PN} += "${datadir}/zoneinfo/Etc/Manual" diff --git a/meta-webos/recipes-filesystems/unionfs-fuse/unionfs-fuse_%.bbappend b/meta-webos/recipes-filesystems/unionfs-fuse/unionfs-fuse_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-filesystems/unionfs-fuse/unionfs-fuse_%.bbappend +++ b/meta-webos/recipes-filesystems/unionfs-fuse/unionfs-fuse_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-filter/ebtables/ebtables_%.bbappend b/meta-webos/recipes-filter/ebtables/ebtables_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-filter/ebtables/ebtables_%.bbappend +++ b/meta-webos/recipes-filter/ebtables/ebtables_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-graphics/fbida/fbida_%.bbappend b/meta-webos/recipes-graphics/fbida/fbida_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-graphics/fbida/fbida_%.bbappend +++ b/meta-webos/recipes-graphics/fbida/fbida_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-graphics/fontconfig/fontconfig_%.bbappend b/meta-webos/recipes-graphics/fontconfig/fontconfig_%.bbappend index 3cb5f883b..fd6677bae 100644 --- a/meta-webos/recipes-graphics/fontconfig/fontconfig_%.bbappend +++ b/meta-webos/recipes-graphics/fontconfig/fontconfig_%.bbappend @@ -1,9 +1,9 @@ # Copyright (c) 2013-2020 LG Electronics, Inc. AUTHOR = "Bhooshan Supe " -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" -do_install_append() { +do_install:append() { # remove the links to the config files from the fontconfig # component that conflict with the webOS config files rm -f ${D}${sysconfdir}/fonts/conf.d/*.conf diff --git a/meta-webos/recipes-graphics/freetype/freetype_%.bbappend b/meta-webos/recipes-graphics/freetype/freetype_%.bbappend index e107529c9..9400cef79 100644 --- a/meta-webos/recipes-graphics/freetype/freetype_%.bbappend +++ b/meta-webos/recipes-graphics/freetype/freetype_%.bbappend @@ -1,5 +1,5 @@ # Copyright (c) 2015-2020 LG Electronics, Inc. AUTHOR = "Valery Volgutov " -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" -PACKAGECONFIG_append = " pixmap" +PACKAGECONFIG:append = " pixmap" diff --git a/meta-webos/recipes-graphics/gphoto2/libgphoto2_%.bbappend b/meta-webos/recipes-graphics/gphoto2/libgphoto2_%.bbappend index 3ccc81993..d4048a533 100644 --- a/meta-webos/recipes-graphics/gphoto2/libgphoto2_%.bbappend +++ b/meta-webos/recipes-graphics/gphoto2/libgphoto2_%.bbappend @@ -1,13 +1,13 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" PACKAGES =+ "${PN}-print-camera-list" -FILES_${PN}-print-camera-list = "${libdir}/*/print-camera-list" +FILES:${PN}-print-camera-list = "${libdir}/*/print-camera-list" PACKAGES =+ "${PN}-gpl" -FILES_${PN}-gpl = "${libdir}/libgphoto2*/*/pentax.so" +FILES:${PN}-gpl = "${libdir}/libgphoto2*/*/pentax.so" diff --git a/meta-webos/recipes-graphics/mesa/mesa_%.bbappend b/meta-webos/recipes-graphics/mesa/mesa_%.bbappend index 270ec1b42..6ae071065 100644 --- a/meta-webos/recipes-graphics/mesa/mesa_%.bbappend +++ b/meta-webos/recipes-graphics/mesa/mesa_%.bbappend @@ -1,11 +1,11 @@ # Copyright (c) 2017-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos6" +EXTENDPRAUTO:append = "webos6" # Add gallium-llvm which will enable svga as well -PACKAGECONFIG_append_qemuall = " gallium-llvm" +PACKAGECONFIG:append:qemuall = " gallium-llvm" # svga fails to build for qemuarm: # mesa-20.0.2/src/gallium/winsys/svga/drm/vmw_msg.c:90:4: error: impossible constraint in 'asm' # http://caprica.lgsvl.com:8080/Errors/Details/1472308 -GALLIUMDRIVERS_LLVM_qemuarm = "r300,nouveau" +GALLIUMDRIVERS_LLVM:qemuarm = "r300,nouveau" diff --git a/meta-webos/recipes-graphics/piglit/piglit_%.bbappend b/meta-webos/recipes-graphics/piglit/piglit_%.bbappend index e22d71b91..16532153f 100644 --- a/meta-webos/recipes-graphics/piglit/piglit_%.bbappend +++ b/meta-webos/recipes-graphics/piglit/piglit_%.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" # http://caprica.lgsvl.com:8080/Errors/Details/1447235 VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-graphics/wayland/wayland_%.bbappend b/meta-webos/recipes-graphics/wayland/wayland_%.bbappend index 0737a2285..1d593cd81 100644 --- a/meta-webos/recipes-graphics/wayland/wayland_%.bbappend +++ b/meta-webos/recipes-graphics/wayland/wayland_%.bbappend @@ -1,11 +1,11 @@ # Copyright (c) 2015-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -DEPENDS_append_class-target = " pmloglib" -EXTRA_OECONF_append_class-target = " --enable-pmlog" +DEPENDS:append:class-target = " pmloglib" +EXTRA_OECONF:append:class-target = " --enable-pmlog" SRC_URI += " \ file://0001-server-Fix-crash-when-accessing-client-which-is-alre.patch \ diff --git a/meta-webos/recipes-kernel/cpupower/cpupower.bbappend b/meta-webos/recipes-kernel/cpupower/cpupower.bbappend index 28b94de4d..c013f7d52 100644 --- a/meta-webos/recipes-kernel/cpupower/cpupower.bbappend +++ b/meta-webos/recipes-kernel/cpupower/cpupower.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-kernel/dtc/dtc_%.bbappend b/meta-webos/recipes-kernel/dtc/dtc_%.bbappend index 19d1974ae..e39ef3a03 100644 --- a/meta-webos/recipes-kernel/dtc/dtc_%.bbappend +++ b/meta-webos/recipes-kernel/dtc/dtc_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-misc_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-misc_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-misc:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-misc:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-kernel/ebd/ebd.bb b/meta-webos/recipes-kernel/ebd/ebd.bb index 58bbb0b42..ab0dbc4bb 100644 --- a/meta-webos/recipes-kernel/ebd/ebd.bb +++ b/meta-webos/recipes-kernel/ebd/ebd.bb @@ -38,4 +38,4 @@ do_install() { install -v -m 0755 ${WORKDIR}/build/bin/* ${D}${bindir} } -FILES_${PN} = "${bindir}/ebd" +FILES:${PN} = "${bindir}/ebd" diff --git a/meta-webos/recipes-kernel/kernel-selftest/kernel-selftest.bbappend b/meta-webos/recipes-kernel/kernel-selftest/kernel-selftest.bbappend index 7b1c50d13..de206443d 100644 --- a/meta-webos/recipes-kernel/kernel-selftest/kernel-selftest.bbappend +++ b/meta-webos/recipes-kernel/kernel-selftest/kernel-selftest.bbappend @@ -1,17 +1,17 @@ # Copyright (c) 2018-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" # Replace runtime dependency on bash with ${VIRTUAL-RUNTIME_bash} PACKAGECONFIG[vm] = ",,libcap,libgcc ${VIRTUAL-RUNTIME_bash}" # cannot use bpf for kernels older than 4.10 # WARNING: lib32-kernel-selftest-1.0-r0 do_compile: clang >= 6.0 with bpf support is needed with kernel 4.18+ so either install it and add it to HOSTTOOLS, or add clang-native from meta-clang to dependency -PACKAGECONFIG_remove = "bpf" +PACKAGECONFIG:remove = "bpf" # http://caprica.lgsvl.com:8080/Errors/Details/1534060 # userfaultfd.c:126:2: error: format not a string literal and no format arguments [-Werror=format-security] diff --git a/meta-webos/recipes-kernel/linux/linux-yocto/bluetooth_ext.cfg b/meta-webos/recipes-kernel/linux/linux-yocto/bluetooth_ext.cfg index 090cf4f43..d4045a924 100644 --- a/meta-webos/recipes-kernel/linux/linux-yocto/bluetooth_ext.cfg +++ b/meta-webos/recipes-kernel/linux/linux-yocto/bluetooth_ext.cfg @@ -1,26 +1,26 @@ -CONFIG_BT_HS=y -CONFIG_BT_DEBUGFS=y -CONFIG_BT_INTEL=m -CONFIG_BT_BCM=m -CONFIG_BT_RTL=m -CONFIG_BT_HCIBTUSB_BCM=y -CONFIG_BT_HCIBTUSB_RTL=y -CONFIG_BT_HCIUART=m -CONFIG_BT_HCIUART_H4=y -CONFIG_BT_HCIUART_3WIRE=y -CONFIG_BT_HCIUART_BCM=y -CONFIG_BT_HCIBCM203X=m -CONFIG_BT_HCIBPA10X=m -CONFIG_BT_HCIBFUSB=m -CONFIG_BT_HCIVHCI=m -CONFIG_BT_MRVL=m -CONFIG_BT_MRVL_SDIO=m -CONFIG_BT_ATH3K=m -CONFIG_BT_WILINK=m -CONFIG_BT_HCIBTSDIO=m -CONFIG_BT_HCIUART_ATH3K=y -CONFIG_BT_HCIUART_BCSP=y -CONFIG_BT_HCIUART_INTEL=y -CONFIG_BT_HCIUART_LL=y -CONFIG_BT_HCIUART_QCA=y +CONFIG_BT_HS=y +CONFIG_BT_DEBUGFS=y +CONFIG_BT_INTEL=m +CONFIG_BT_BCM=m +CONFIG_BT_RTL=m +CONFIG_BT_HCIBTUSB_BCM=y +CONFIG_BT_HCIBTUSB_RTL=y +CONFIG_BT_HCIUART=m +CONFIG_BT_HCIUART_H4=y +CONFIG_BT_HCIUART_3WIRE=y +CONFIG_BT_HCIUART_BCM=y +CONFIG_BT_HCIBCM203X=m +CONFIG_BT_HCIBPA10X=m +CONFIG_BT_HCIBFUSB=m +CONFIG_BT_HCIVHCI=m +CONFIG_BT_MRVL=m +CONFIG_BT_MRVL_SDIO=m +CONFIG_BT_ATH3K=m +CONFIG_BT_WILINK=m +CONFIG_BT_HCIBTSDIO=m +CONFIG_BT_HCIUART_ATH3K=y +CONFIG_BT_HCIUART_BCSP=y +CONFIG_BT_HCIUART_INTEL=y +CONFIG_BT_HCIUART_LL=y +CONFIG_BT_HCIUART_QCA=y CONFIG_BT_QCA=m \ No newline at end of file diff --git a/meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend b/meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend index 89ecb090d..e22fd82dd 100644 --- a/meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend +++ b/meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend @@ -1,13 +1,13 @@ # Copyright (c) 2015-2022 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos14" +EXTENDPRAUTO:append = "webos14" # Assign to PE, because empty PKGE in KERNEL_IMAGE_NAME causes two hyphens. PE = "1" -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" -SRC_URI_append_qemux86 = " file://crypto.cfg \ +SRC_URI:append:qemux86 = " file://crypto.cfg \ file://my_gfx.cfg \ file://vbox_gfx.cfg \ file://sound.cfg \ @@ -19,7 +19,7 @@ SRC_URI_append_qemux86 = " file://crypto.cfg \ file://oomd.cfg \ file://zram.cfg \ " -SRC_URI_append_qemux86-64 = " file://crypto.cfg \ +SRC_URI:append:qemux86-64 = " file://crypto.cfg \ file://my_gfx.cfg \ file://vbox_gfx.cfg \ file://sound.cfg \ @@ -32,22 +32,22 @@ SRC_URI_append_qemux86-64 = " file://crypto.cfg \ file://zram.cfg \ " -KERNEL_FEATURES_append_qemux86 = " features/bluetooth/bluetooth-usb.scc" -KERNEL_FEATURES_append_qemux86-64 = " features/bluetooth/bluetooth-usb.scc" +KERNEL_FEATURES:append:qemux86 = " features/bluetooth/bluetooth-usb.scc" +KERNEL_FEATURES:append:qemux86-64 = " features/bluetooth/bluetooth-usb.scc" # needed to build gator -KERNEL_FEATURES_append_qemux86 = " features/profiling/profiling.cfg" -KERNEL_FEATURES_append_qemux86-64 = " features/profiling/profiling.cfg" +KERNEL_FEATURES:append:qemux86 = " features/profiling/profiling.cfg" +KERNEL_FEATURES:append:qemux86-64 = " features/profiling/profiling.cfg" -KERNEL_MODULE_AUTOLOAD_append_qemux86 = "\ +KERNEL_MODULE_AUTOLOAD:append:qemux86 = "\ vboxguest \ snd-pcm \ ac97_bus \ snd-ac97-codec \ snd-intel8x0 \ " -KERNEL_MODULE_AUTOLOAD_append_qemux86-64 = "\ +KERNEL_MODULE_AUTOLOAD:append:qemux86-64 = "\ vboxguest \ snd-pcm \ ac97_bus \ diff --git a/meta-webos/recipes-kernel/lttng/babeltrace2_%.bbappend b/meta-webos/recipes-kernel/lttng/babeltrace2_%.bbappend index bf4343ae7..fd0181c5f 100644 --- a/meta-webos/recipes-kernel/lttng/babeltrace2_%.bbappend +++ b/meta-webos/recipes-kernel/lttng/babeltrace2_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-kernel/lttng/babeltrace_%.bbappend b/meta-webos/recipes-kernel/lttng/babeltrace_%.bbappend index bf4343ae7..fd0181c5f 100644 --- a/meta-webos/recipes-kernel/lttng/babeltrace_%.bbappend +++ b/meta-webos/recipes-kernel/lttng/babeltrace_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-kernel/lttng/lttng-tools_%.bbappend b/meta-webos/recipes-kernel/lttng/lttng-tools_%.bbappend index 74836bd55..63631f853 100644 --- a/meta-webos/recipes-kernel/lttng/lttng-tools_%.bbappend +++ b/meta-webos/recipes-kernel/lttng/lttng-tools_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash} perl" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash} perl" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-kernel/perf/perf.bbappend b/meta-webos/recipes-kernel/perf/perf.bbappend index 880f91a4c..e744db154 100644 --- a/meta-webos/recipes-kernel/perf/perf.bbappend +++ b/meta-webos/recipes-kernel/perf/perf.bbappend @@ -1,18 +1,18 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-python_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-python_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-archive_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-archive_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-perl_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-perl_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-tests_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-tests_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-python:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-python:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-archive:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-archive:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-perl:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-perl:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-tests:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-tests:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" # man-db is blacklisted in meta-webos -RDEPENDS_${PN}-doc_remove = "man" +RDEPENDS:${PN}-doc:remove = "man" diff --git a/meta-webos/recipes-kernel/systemtap/systemtap_%.bbappend b/meta-webos/recipes-kernel/systemtap/systemtap_%.bbappend index 7b13fcd11..3c0dd2b81 100644 --- a/meta-webos/recipes-kernel/systemtap/systemtap_%.bbappend +++ b/meta-webos/recipes-kernel/systemtap/systemtap_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-kernel/wireguard/wireguard-tools_%.bbappend b/meta-webos/recipes-kernel/wireguard/wireguard-tools_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-kernel/wireguard/wireguard-tools_%.bbappend +++ b/meta-webos/recipes-kernel/wireguard/wireguard-tools_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-location/com.webos.service.location/com.webos.service.location.bb b/meta-webos/recipes-location/com.webos.service.location/com.webos.service.location.bb index e9709fd09..55db7e884 100644 --- a/meta-webos/recipes-location/com.webos.service.location/com.webos.service.location.bb +++ b/meta-webos/recipes-location/com.webos.service.location/com.webos.service.location.bb @@ -26,6 +26,6 @@ inherit webos_machine_impl_dep SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" -FILES_${PN} += "${libdir}/location/plugins/lib*.so" -FILES_${PN}-dbg += "${libdir}/location/plugins/.debug" +FILES:${PN} += "${libdir}/location/plugins/lib*.so" +FILES:${PN}-dbg += "${libdir}/location/plugins/.debug" SECURITY_STRINGFORMAT = "" diff --git a/meta-webos/recipes-multimedia/alsa/alsa-lib_%.bbappend b/meta-webos/recipes-multimedia/alsa/alsa-lib_%.bbappend index 5f49bee9f..92c2d118d 100644 --- a/meta-webos/recipes-multimedia/alsa/alsa-lib_%.bbappend +++ b/meta-webos/recipes-multimedia/alsa/alsa-lib_%.bbappend @@ -1,5 +1,5 @@ # Copyright (c) 2017 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" EXTRA_OECONF += "--disable-topology" diff --git a/meta-webos/recipes-multimedia/alsa/alsa-plugins_%.bbappend b/meta-webos/recipes-multimedia/alsa/alsa-plugins_%.bbappend index 39d0220dd..24323d1f5 100644 --- a/meta-webos/recipes-multimedia/alsa/alsa-plugins_%.bbappend +++ b/meta-webos/recipes-multimedia/alsa/alsa-plugins_%.bbappend @@ -1,22 +1,22 @@ # Copyright (c) 2015-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" # We don't have speexdsp in our layers -PACKAGECONFIG_remove = "speexdsp" +PACKAGECONFIG:remove = "speexdsp" inherit webos_machine_impl_dep -FILESEXTRAPATHS_prepend_emulator := "${THISDIR}/${BPN}:" -SRC_URI_append_emulator = " file://99-pulseaudio-qemu-emulator.conf" +FILESEXTRAPATHS:prepend:emulator := "${THISDIR}/${BPN}:" +SRC_URI:append:emulator = " file://99-pulseaudio-qemu-emulator.conf" -do_install_append_emulator() { +do_install:append:emulator() { install -v -m 644 ${WORKDIR}/99-pulseaudio-qemu-emulator.conf ${D}${datadir}/alsa/alsa.conf.d/99-pulseaudio-default.conf } -FILESEXTRAPATHS_prepend_qemux86-64 := "${THISDIR}/${BPN}:" -SRC_URI_append_qemux86-64 = " file://99-pulseaudio-qemu-emulator.conf" +FILESEXTRAPATHS:prepend:qemux86-64 := "${THISDIR}/${BPN}:" +SRC_URI:append:qemux86-64 = " file://99-pulseaudio-qemu-emulator.conf" -do_install_append_qemux86-64() { +do_install:append:qemux86-64() { install -v -m 644 ${WORKDIR}/99-pulseaudio-qemu-emulator.conf ${D}${datadir}/alsa/alsa.conf.d/99-pulseaudio-default.conf } diff --git a/meta-webos/recipes-multimedia/alsa/alsa-tools_%.bbappend b/meta-webos/recipes-multimedia/alsa/alsa-tools_%.bbappend index 9cfd38c0a..0b1c98c7c 100644 --- a/meta-webos/recipes-multimedia/alsa/alsa-tools_%.bbappend +++ b/meta-webos/recipes-multimedia/alsa/alsa-tools_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2018 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" # gtk+3 is blacklisted in our builds, but upstream recipe adds it because we have wayland in DISTRO_FEATURES # so that gtk+3 should be buildable -PACKAGECONFIG_remove = "hdajackretask" +PACKAGECONFIG:remove = "hdajackretask" diff --git a/meta-webos/recipes-multimedia/alsa/alsa-utils-scripts_%.bbappend b/meta-webos/recipes-multimedia/alsa/alsa-utils-scripts_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-multimedia/alsa/alsa-utils-scripts_%.bbappend +++ b/meta-webos/recipes-multimedia/alsa/alsa-utils-scripts_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-multimedia/alsa/alsa-utils_%.bbappend b/meta-webos/recipes-multimedia/alsa/alsa-utils_%.bbappend index f18f51071..f847030fb 100644 --- a/meta-webos/recipes-multimedia/alsa/alsa-utils_%.bbappend +++ b/meta-webos/recipes-multimedia/alsa/alsa-utils_%.bbappend @@ -1,17 +1,17 @@ # Copyright (c) 2014-2018 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" # this patch adds --disable-libsamplerate configure option SRC_URI += "file://disable-libsamplerate.patch" -DEPENDS_remove = "libsamplerate0" +DEPENDS:remove = "libsamplerate0" PACKAGECONFIG = "" PACKAGECONFIG[libsamplerate] = "--enable-libsamplerate,--disable-libsamplerate,libsamplerate0" # We have disabled topology support in our alsa-lib bbappend, so this package # won't be built by alsa-utils and we need to remove runtime dependency on it -RDEPENDS_${PN}_remove = "alsa-utils-alsatplg" +RDEPENDS:${PN}:remove = "alsa-utils-alsatplg" diff --git a/meta-webos/recipes-multimedia/audiod/audiod.bb b/meta-webos/recipes-multimedia/audiod/audiod.bb index 29078e8bd..f950bd9ce 100644 --- a/meta-webos/recipes-multimedia/audiod/audiod.bb +++ b/meta-webos/recipes-multimedia/audiod/audiod.bb @@ -10,7 +10,7 @@ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0 libpbnjson luna-service2 pmloglib luna-prefs boost pulseaudio" -RDEPENDS_${PN} = "\ +RDEPENDS:${PN} = "\ libasound \ libasound-module-pcm-pulse \ libpulsecore \ diff --git a/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb b/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb index bfafc5cd4..b63608486 100644 --- a/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb +++ b/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb @@ -23,7 +23,7 @@ DEPENDS = "glib-2.0 libmtp libupnp libedit gstreamer1.0 gstreamer1.0-plugins-bas DEPENDS += "luna-service2 pmloglib libpbnjson" # webos runtime dependencies VIRTUAL-RUNTIME_pdm ?= "com.webos.service.pdm" -RDEPENDS_${PN} = "${VIRTUAL-RUNTIME_pdm} db8" +RDEPENDS:${PN} = "${VIRTUAL-RUNTIME_pdm} db8" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" @@ -40,5 +40,5 @@ S = "${WORKDIR}/git" # media indexer client library FILES_SOLIBSDEV = "" -FILES_${PN} += "${libdir}/*.so" +FILES:${PN} += "${libdir}/*.so" diff --git a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb index 6b2ff824e..c468f0313 100644 --- a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb +++ b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb @@ -30,18 +30,18 @@ COMPATIBLE_MACHINE = "^qemux86$|^qemux86-64$|^raspberrypi3$|^raspberrypi3-64$|^r # raspberrypi4 and qemux86 uses @gav branch PR = "r10" DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad umediaserver media-resource-calculator webos-wayland-extensions" -DEPENDS_append_rpi = " virtual/libomxil" +DEPENDS:append:rpi = " virtual/libomxil" WEBOS_GIT_PARAM_BRANCH = "@gav" WEBOS_VERSION = "1.0.0-21.gav.28_1264733b844bb487118cac43f20c0eaa7dbbd16a" # raspberrypi3 uses @21.master branch -DEPENDS_remove_raspberrypi3 = "webos-wayland-extensions" -WEBOS_GIT_PARAM_BRANCH_raspberrypi3 = "@21.master" -WEBOS_VERSION_raspberrypi3 = "1.0.0-21.master.1_5780fa2b8466405a9873df1e64621f5930e00686" +DEPENDS:remove:raspberrypi3 = "webos-wayland-extensions" +WEBOS_GIT_PARAM_BRANCH:raspberrypi3 = "@21.master" +WEBOS_VERSION:raspberrypi3 = "1.0.0-21.master.1_5780fa2b8466405a9873df1e64621f5930e00686" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" FILES_SOLIBSDEV = "" -FILES_${PN} += "${libdir}/*.so" +FILES:${PN} += "${libdir}/*.so" diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend index 673c71bd6..c8a21d479 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend @@ -1,9 +1,9 @@ # Copyright (c) 2018-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" -PACKAGECONFIG_remove = "rsvg" +PACKAGECONFIG:remove = "rsvg" # Needed only for qemux86 build -# FILESEXTRAPATHS_prepend_qemux86 := "${THISDIR}/${BPN}:" -# SRC_URI_append_qemux86 = " file://0002-render-into-wl_surface-without-sub-surface.patch" +# FILESEXTRAPATHS:prepend:qemux86 := "${THISDIR}/${BPN}:" +# SRC_URI:append:qemux86 = " file://0002-render-into-wl_surface-without-sub-surface.patch" diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend index fa660de5d..a6b5f2e11 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2018-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" # opengl causes undeclared dependency on libgudev # ERROR: gstreamer1.0-plugins-base-1.14.0-r0 do_package_qa: QA Issue: libgstgl-1.0 rdepends on libgudev, but it isn't a build dependency, missing libgudev in DEPENDS or PACKAGECONFIG? [build-deps] diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend index a042070da..649211f98 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2018-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" -PACKAGECONFIG_remove = "gtk" +PACKAGECONFIG:remove = "gtk" # backport from meta-qt5/master 7f324f11bbbfe326cbb90edc8efbbe3f4fcc0874 PACKAGECONFIG[qt5] = '-Dqt5=enabled,-Dqt5=disabled,gstreamer1.0-plugins-base qtbase qtdeclarative qtbase-native' diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend index 7429f39af..635ab8f55 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2018-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" # modify tests PACKAGECONFIG to add optional gsl and gmp dependencies # this cannot be merged to oe-core, recipe, because gsl recipe is in diff --git a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb index 352bbdb91..8c6f8eca1 100644 --- a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb +++ b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb @@ -19,7 +19,7 @@ inherit webos_pkgconfig COMPATIBLE_MACHINE = "^qemux86$|^qemux86-64$|^raspberrypi3$|^raspberrypi3-64$|^raspberrypi4$|^raspberrypi4-64$" DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad umediaserver media-resource-calculator" -DEPENDS_append_rpi = " virtual/libomxil" +DEPENDS:append:rpi = " virtual/libomxil" WEBOS_VERSION = "1.0.0-3_13f4a0e50c95f7ecf04be37949c0da266ba221d3" PR = "r4" @@ -32,16 +32,16 @@ WEBOS_GIT_REPO_COMPLETE_MCIL ?= "${WEBOS_GIT_REPO_MCIL}/${WEBOS_REPO_NAME_MCIL}$ SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE};name=main" -SRC_URI_append = "\ +SRC_URI:append = "\ ${WEBOS_GIT_REPO_COMPLETE_MCIL};destsuffix=git/src/codec_impl;name=mcil \ " -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" -SRC_URI_append = "\ +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" +SRC_URI:append = "\ file://0001-Include-webOS-module-for-replacing-webos-variables.patch \ " S = "${WORKDIR}/git" FILES_SOLIBSDEV = "" -FILES_${PN} += "${libdir}/*.so" +FILES:${PN} += "${libdir}/*.so" diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb index 856b5662e..76497a46c 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb +++ b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb @@ -32,7 +32,7 @@ DEPENDS += "json-c gdbm" DEPENDS += "intltool-native" # This is blacklisted because of the license -DEPENDS_remove = "libatomic-ops" +DEPENDS:remove = "libatomic-ops" DEPENDS += "pmloglib" @@ -50,18 +50,18 @@ SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE} \ S = "${WORKDIR}/git" -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" EXTRA_OECONF += "--with-access-group=root \ --disable-samplerate \ " # Added to oe-core pulseaudio.inc when upgrading to 12.2 version # but our old 9.* version doesn't support it -EXTRA_OECONF_remove = "--disable-gsettings" +EXTRA_OECONF:remove = "--disable-gsettings" # Added to oe-core pulseaudio.inc to improve build reproducibility with 12.2 version # but our old 9.* version doesn't support it -EXTRA_OECONF_remove = "--disable-running-from-build-tree" +EXTRA_OECONF:remove = "--disable-running-from-build-tree" # Compared to oe-core default, remove gsettings, add palm-resampler and add ofono even without 3g in DISTRO_FEATURES PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez5', '', d)} \ @@ -72,31 +72,31 @@ PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez5' palm-resampler \ ofono \ " -PACKAGECONFIG_append_rpi = " rpi" +PACKAGECONFIG:append:rpi = " rpi" PACKAGECONFIG[palm-resampler] = "--enable-palm-resampler,--disable-palm-resampler" PACKAGECONFIG[rpi] = "--enable-rpi,--disable-rpi" -do_install_prepend() { +do_install:prepend() { install -v -m 0644 ${S}/volatiles.04_pulse ${WORKDIR}/volatiles.04_pulse } -do_install_append() { +do_install:append() { install -v -d ${D}${sysconfdir}/systemd/system install -v -m 644 ${WORKDIR}/pulseaudio.service ${D}${sysconfdir}/systemd/system/ install -v -m 644 ${S}/src/modules/module-palm-policy-default.h ${D}${includedir}/pulse/module-palm-policy.h install -v -m 644 ${S}/src/modules/module-palm-policy-tables-default.h ${D}${includedir}/pulse/module-palm-policy-tables.h } -do_install_append_webos() { +do_install:append:webos() { install -v -m 644 ${S}/palm/open_system.pa ${D}${sysconfdir}/pulse/system.pa } -do_install_append_qemuall() { +do_install:append:qemuall() { install -v -m 644 ${S}/palm/qemux86_system.pa ${D}${sysconfdir}/pulse/system.pa } -FILES_${PN}-dev += "${libdir}/pulse-9.0/modules/*.la ${datadir}/vala ${libdir}/cmake" +FILES:${PN}-dev += "${libdir}/pulse-9.0/modules/*.la ${datadir}/vala ${libdir}/cmake" -RDEPENDS_pulseaudio-server_append = "\ +RDEPENDS:pulseaudio-server:append = "\ pulseaudio-module-palm-policy \ pulseaudio-module-null-source \ pulseaudio-module-rtp-send \ @@ -113,7 +113,7 @@ RDEPENDS_pulseaudio-server_append = "\ ', '', d)} \ " -python populate_packages_prepend() { +python populate_packages:prepend() { plugindir = d.expand('${libdir}/pulse-9.0/modules/') do_split_packages(d, plugindir, r'^module-(.*)\.so$', 'pulseaudio-module-%s', 'PulseAudio module for %s', extra_depends='', prepend=True) do_split_packages(d, plugindir, r'^lib(.*)\.so$', 'pulseaudio-lib-%s', 'PulseAudio library for %s', extra_depends='', prepend=True) @@ -121,5 +121,5 @@ python populate_packages_prepend() { # ERROR: pulseaudio-9.0-13-r20 do_package_qa: QA Issue: pulseaudio-pa-info rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-pa-info_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-pa-info_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-pa-info:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-pa-info:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-multimedia/umi/umi.bb b/meta-webos/recipes-multimedia/umi/umi.bb index 832467eac..a2fafd1e2 100644 --- a/meta-webos/recipes-multimedia/umi/umi.bb +++ b/meta-webos/recipes-multimedia/umi/umi.bb @@ -24,5 +24,5 @@ PR = "r4" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" -EXTRA_OECMAKE_append_qemux86 = " -DWEBOS_SOC:STRING=qemux86" -EXTRA_OECMAKE_append_qemux86-64 = " -DWEBOS_SOC:STRING=qemux86" +EXTRA_OECMAKE:append:qemux86 = " -DWEBOS_SOC:STRING=qemux86" +EXTRA_OECMAKE:append:qemux86-64 = " -DWEBOS_SOC:STRING=qemux86" diff --git a/meta-webos/recipes-printing/cups/cups-filters_%.bbappend b/meta-webos/recipes-printing/cups/cups-filters_%.bbappend index 28b94de4d..c013f7d52 100644 --- a/meta-webos/recipes-printing/cups/cups-filters_%.bbappend +++ b/meta-webos/recipes-printing/cups/cups-filters_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-protocols/openl2tp/openl2tp_%.bbappend b/meta-webos/recipes-protocols/openl2tp/openl2tp_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-protocols/openl2tp/openl2tp_%.bbappend +++ b/meta-webos/recipes-protocols/openl2tp/openl2tp_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend index dafc06f3b..b70969e97 100644 --- a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend @@ -2,10 +2,10 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos99" +EXTENDPRAUTO:append = "webos99" # Remove LGPL3-only files -python do_patch_append() { +python do_patch:append() { bb.build.exec_func('remove_LGPL3', d) } @@ -14,93 +14,93 @@ remove_LGPL3() { } # Disable features we don't use in all webOS products -PACKAGECONFIG_DEFAULT_remove = "dbus" +PACKAGECONFIG_DEFAULT:remove = "dbus" # Enable accessibility for qtquickcontrols -PACKAGECONFIG_append = " accessibility" +PACKAGECONFIG:append = " accessibility" # Disable widget features -PACKAGECONFIG_remove = "widgets" +PACKAGECONFIG:remove = "widgets" # Configure to use platform harfbuzz -PACKAGECONFIG_append = " harfbuzz" +PACKAGECONFIG:append = " harfbuzz" # Configure to compile with GL ES2 instead of default desktop GL PACKAGECONFIG_GL = "gles2" # We had this enabled in our old gpro/meta-qt5 recipe -PACKAGECONFIG_append = " icu" +PACKAGECONFIG:append = " icu" # We had this enabled in our old gpro/meta-qt5 recipe -PACKAGECONFIG_append = " glib" +PACKAGECONFIG:append = " glib" # We had this enabled in our old gpro/meta-qt5 recipe -PACKAGECONFIG_append = " fontconfig" +PACKAGECONFIG:append = " fontconfig" # We had this enabled in our old gpro/meta-qt5 recipe -PACKAGECONFIG_append = " sql-sqlite" +PACKAGECONFIG:append = " sql-sqlite" # No longer added automatically PACKAGECONFIG[gif] = "-DFEATURE_gif=ON,-DFEATURE_gif=OFF" -PACKAGECONFIG_append = " gif" +PACKAGECONFIG:append = " gif" # Needed since qtwayland 5.12 -PACKAGECONFIG_append_class-target = " xkbcommon" +PACKAGECONFIG:append:class-target = " xkbcommon" # Disable loading text in image metadata PACKAGECONFIG[no-imageio-text-loading] = "-DFEATURE_imageio_text_loading=OFF,-DFEATURE_imageio_text_loading=ON" -PACKAGECONFIG_append = " no-imageio-text-loading" +PACKAGECONFIG:append = " no-imageio-text-loading" PACKAGECONFIG[linuxfb] = "-DFEATURE_linuxfb=ON,-DFEATURE_linuxfb=OFF" -PACKAGECONFIG_remove = "linuxfb" +PACKAGECONFIG:remove = "linuxfb" PACKAGECONFIG[ico] = "-DFEATURE_ico=ON,-DFEATURE_ico=OFF" -PACKAGECONFIG_remove = "ico" +PACKAGECONFIG:remove = "ico" PACKAGECONFIG[sessionmanager] = "-DFEATURE_sessionmanager=ON,-DFEATURE_sessionmanager=OFF" -PACKAGECONFIG_remove = "sessionmanager" +PACKAGECONFIG:remove = "sessionmanager" PACKAGECONFIG[xlib] = "-DFEATURE_xlib=ON,-DFEATURE_xlib=OFF" -PACKAGECONFIG_remove = "xlib" +PACKAGECONFIG:remove = "xlib" PACKAGECONFIG[eglfs-egldevice] = "-DFEATURE_eglfs_egldevice=ON,-DFEATURE_eglfs_egldevice=OFF" -PACKAGECONFIG_remove = "eglfs-egldevice" +PACKAGECONFIG:remove = "eglfs-egldevice" PACKAGECONFIG[system-sqlite] = "-DFEATURE_system_sqlite=ON,-DFEATURE_system_sqlite=OFF" -PACKAGECONFIG_append = " system-sqlite" +PACKAGECONFIG:append = " system-sqlite" PACKAGECONFIG[system-pcre2] = "-DFEATURE_system_pcre2=ON,-DFEATURE_system_pcre2=OFF" -PACKAGECONFIG_remove = "system-pcre2" +PACKAGECONFIG:remove = "system-pcre2" -PACKAGECONFIG_remove = "libinput" +PACKAGECONFIG:remove = "libinput" -PACKAGECONFIG_append = " kms" +PACKAGECONFIG:append = " kms" # Depending on whether LTTNG support is enabled or not for the build we need to # depend on the LTTNG providers to not let the build fail inherit webos_lttng # Disable lttng until wam eliminates dependency to qtbase (See PLAT-139794 for details) -#PACKAGECONFIG_append = "${@ ' lttng' if '${WEBOS_LTTNG_ENABLED}' == '1' else '' }" +#PACKAGECONFIG:append = "${@ ' lttng' if '${WEBOS_LTTNG_ENABLED}' == '1' else '' }" # Do not build tests/ in webos -PACKAGECONFIG_remove = "tests" +PACKAGECONFIG:remove = "tests" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" PATCHTOOL = "git" # Upstream-Status: Backport -SRC_URI_append = " \ +SRC_URI:append = " \ file://0001-Support-to-get-timing-from-pagefilp.patch;maxver=6.2.* \ file://0002-evdev-Prevent-race-condition-in-touch-events-process.patch;maxver=6.2.* \ " # Upstream-Status: Inappropriate # NOTE: Increase maxver when upgrading Qt version -SRC_URI_append = " \ +SRC_URI:append = " \ file://9901-Disable-Faux-bolding-in-Qts-FreeType-FontEngine.patch;maxver=6.3.0 \ " # Flags needed for webOS -TARGET_CXXFLAGS_append = " \ +TARGET_CXXFLAGS:append = " \ -DQFONTCACHE_MIN_COST=512 \ " VIRTUAL-RUNTIME_gpu-libs ?= "" -RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_gpu-libs}" +RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_gpu-libs}" # Workaround needed since https://codereview.qt-project.org/c/yocto/meta-qt6/+/366219 # otherwise you get: @@ -109,4 +109,4 @@ RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_gpu-libs}" # Missing or unbuildable dependency chain was: ['libssl-native'] # ERROR: Required build target 'qtbase' has no buildable providers. # Missing or unbuildable dependency chain was: ['qtbase', 'qtbase-native', 'libssl-native'] -PACKAGECONFIG_class-native_remove = "openssl" +PACKAGECONFIG:class-native:remove = "openssl" diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend index 9ac528ddb..1809c979f 100644 --- a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend @@ -2,34 +2,34 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos77" +EXTENDPRAUTO:append = "webos77" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" PATCHTOOL = "git" # Upstream-Status: Backport -SRC_URI_append = " \ +SRC_URI:append = " \ file://0001-Correctly-handle-QQuickState-when.patch;maxver=6.2.3 \ " # Upstream-Status: Submitted # NOTE: Increase maxver when upgrading Qt version -SRC_URI_append = " \ +SRC_URI:append = " \ file://0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch;maxver=6.3.0 \ " # Upstream-Status: Inappropriate # NOTE: Increase maxver when upgrading Qt version -SRC_URI_append = " \ +SRC_URI:append = " \ file://0002-Revert-Don-t-hide-the-inputMethod-when-finishing-the.patch;maxver=6.3.0 \ " # Supplement tool for qmllint inherit webos_qmake6_paths -DEPENDS_append_class-native = " python3-regex-native" -SRC_URI_append_class-native = " file://qmllint-supplement.py" -do_install_append_class-native() { +DEPENDS:append:class-native = " python3-regex-native" +SRC_URI:append:class-native = " file://qmllint-supplement.py" +do_install:append:class-native() { install -m 755 ${WORKDIR}/qmllint-supplement.py ${D}${OE_QMAKE_PATH_QT_BINS} } @@ -39,7 +39,7 @@ do_install_append_class-native() { # ".../recipe-sysroot/usr/libexec/qmltyperegistrar" # The imported target "Qt6::qmldom" references the file # ".../recipe-sysroot/usr/bin/qmldom" -SYSROOT_DIRS_append = " \ +SYSROOT_DIRS:append = " \ ${bindir} \ ${libexecdir} \ " diff --git a/meta-webos/recipes-qt/qt6/qtgraphicaleffects_%.bbappend b/meta-webos/recipes-qt/qt6/qtgraphicaleffects_%.bbappend index 65032c484..ba075f60f 100644 --- a/meta-webos/recipes-qt/qt6/qtgraphicaleffects_%.bbappend +++ b/meta-webos/recipes-qt/qt6/qtgraphicaleffects_%.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos3" +EXTENDPRAUTO:append = "webos3" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" PATCHTOOL = "git" diff --git a/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb b/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb index b28a9bb13..4ac90599c 100644 --- a/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb +++ b/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb @@ -35,7 +35,7 @@ CXXFLAGS += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', '', '-DMESA_EGL_NO_X # The same issue as in qtbase: # http://errors.yoctoproject.org/Errors/Build/44914/ -LDFLAGS_append_x86 = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', ' -fuse-ld=bfd ', '', d)}" +LDFLAGS:append:x86 = "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', ' -fuse-ld=bfd ', '', d)}" QT_MODULE_BRANCH = "dev" # Needs the "_${QT_MODULE}" suffix (it's not an override), diff --git a/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bbappend b/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bbappend index a9b4630e2..b611a52a9 100644 --- a/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bbappend +++ b/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2016-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos8" +EXTENDPRAUTO:append = "webos8" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" # Patches based on 5.12.meta-qt5.2 SRC_URI += " \ diff --git a/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend b/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend index e6d4d6772..7c6d8a7ca 100644 --- a/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend @@ -2,14 +2,14 @@ inherit webos_qt_global -EXTENDPRAUTO_append = "webos31" +EXTENDPRAUTO:append = "webos31" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" PATCHTOOL = "git" # Upstream-Status: Backport -SRC_URI_append = " \ +SRC_URI:append = " \ file://0001-Support-presentation-time-protocol.patch;maxver=6.2.* \ file://0002-Use-scope-resolution-operator-for-request.patch;maxver=6.2.* \ file://0003-Fix-to-have-presentation-feedback-sequence-timely.patch;maxver=6.3.0 \ @@ -31,9 +31,9 @@ PACKAGECONFIG[client-xdg-shell] = "-DFEATURE_wayland_client_xdg_shell=ON,-DFEATU PACKAGECONFIG = "wayland-server wayland-client client-wl-shell" # qtwayland-qmlplugins is not used in webos -RRECOMMENDS_${PN}_remove = "${PN}-qmlplugins" +RRECOMMENDS:${PN}:remove = "${PN}-qmlplugins" -do_install_append() { +do_install:append() { # Remove files unnecessary or conflict with qtwayland-webos rm -rf ${D}${QT6_INSTALL_PLUGINSDIR}/platforms \ ${D}${QT6_INSTALL_PLUGINSDIR}/{wayland-decoration-client,wayland-graphics-integration-client} \ diff --git a/meta-webos/recipes-support/apr/apr_%.bbappend b/meta-webos/recipes-support/apr/apr_%.bbappend index c6d6f047f..79c63c787 100644 --- a/meta-webos/recipes-support/apr/apr_%.bbappend +++ b/meta-webos/recipes-support/apr/apr_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-dev_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-dev_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-dev:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-dev:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/attr/acl_%.bbappend b/meta-webos/recipes-support/attr/acl_%.bbappend index 536e9057f..baa6ded93 100644 --- a/meta-webos/recipes-support/attr/acl_%.bbappend +++ b/meta-webos/recipes-support/attr/acl_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash} perl" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash} perl" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/bash-completion/bash-completion_%.bbappend b/meta-webos/recipes-support/bash-completion/bash-completion_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-support/bash-completion/bash-completion_%.bbappend +++ b/meta-webos/recipes-support/bash-completion/bash-completion_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/ca-certificates/ca-certificates_%.bbappend b/meta-webos/recipes-support/ca-certificates/ca-certificates_%.bbappend index 86949064b..740be8382 100644 --- a/meta-webos/recipes-support/ca-certificates/ca-certificates_%.bbappend +++ b/meta-webos/recipes-support/ca-certificates/ca-certificates_%.bbappend @@ -1,14 +1,14 @@ # Copyright (c) 2013-2018 LG Electronics, Inc. -FILESEXTRAPATHS_prepend := "${THISDIR}/${PN}:" -EXTENDPRAUTO_append = "webos3" +FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" +EXTENDPRAUTO:append = "webos3" CERT_SOURCE_DIR = "${datadir}/ca-certificates" CERT_TARGET_DIR = "${sysconfdir}/ssl/certs" inherit webos_certificates -do_install_append() { +do_install:append() { cd ${D}${sysconfdir}/ssl/certs for a in *.pem do @@ -21,4 +21,4 @@ do_install_append() { # ca-certificats is allarch, so it either has to RDEPENDS on ${MLPREFIX}openssl or # in this case it's easier to just remove the dependency and pull it from somewhere # else -RDEPENDS_${PN}_remove = "openssl" +RDEPENDS:${PN}:remove = "openssl" diff --git a/meta-webos/recipes-support/curl/curl_%.bbappend b/meta-webos/recipes-support/curl/curl_%.bbappend index 32c78c272..15491d730 100644 --- a/meta-webos/recipes-support/curl/curl_%.bbappend +++ b/meta-webos/recipes-support/curl/curl_%.bbappend @@ -1,20 +1,20 @@ # Copyright (c) 2012-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos10" +EXTENDPRAUTO:append = "webos10" # Enable c-ares for DNS lookup PACKAGECONFIG[c-ares] = "--enable-ares,--disable-ares,c-ares" -PACKAGECONFIG_append_class-target = " c-ares" +PACKAGECONFIG:append:class-target = " c-ares" # Added in Yocto 2.4, but conflicts with c-ares implementation -PACKAGECONFIG_remove_class-target = " threaded-resolver" +PACKAGECONFIG:remove:class-target = " threaded-resolver" # Disable GnuTLS, enable OpenSSL -PACKAGECONFIG_remove = "gnutls" +PACKAGECONFIG:remove = "gnutls" # NB. It doesn't appear to be necessary to give --with-ssl a =PATH value; what # configure says is the default value (/usr/local/ssl) doesn't appear anywhere # in the build or temp directories when PATH is not specified. -PACKAGECONFIG_append = " ssl" +PACKAGECONFIG:append = " ssl" -PACKAGECONFIG_append = " rtsp" +PACKAGECONFIG:append = " rtsp" -PACKAGECONFIG_append = " dict gopher imap pop3 smtp telnet tftp" +PACKAGECONFIG:append = " dict gopher imap pop3 smtp telnet tftp" diff --git a/meta-webos/recipes-support/dbus/dbus-test_%.bbappend b/meta-webos/recipes-support/dbus/dbus-test_%.bbappend index 2f1455eb7..1d5e46630 100644 --- a/meta-webos/recipes-support/dbus/dbus-test_%.bbappend +++ b/meta-webos/recipes-support/dbus/dbus-test_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/drbd/drbd-utils_%.bbappend b/meta-webos/recipes-support/drbd/drbd-utils_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-support/drbd/drbd-utils_%.bbappend +++ b/meta-webos/recipes-support/drbd/drbd-utils_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/ecryptfs-utils/ecryptfs-utils_111.bb b/meta-webos/recipes-support/ecryptfs-utils/ecryptfs-utils_111.bb index 12a549ceb..82376e67c 100644 --- a/meta-webos/recipes-support/ecryptfs-utils/ecryptfs-utils_111.bb +++ b/meta-webos/recipes-support/ecryptfs-utils/ecryptfs-utils_111.bb @@ -29,7 +29,7 @@ SRC_URI[sha256sum] = "112cb3e37e81a1ecd8e39516725dec0ce55c5f3df6284e0f4cc0f11875 inherit autotools pkgconfig systemd SYSTEMD_PACKAGES = "${PN}" -SYSTEMD_SERVICE_${PN} = "ecryptfs.service" +SYSTEMD_SERVICE:${PN} = "ecryptfs.service" EXTRA_OECONF = "\ --libdir=${base_libdir} \ @@ -44,14 +44,14 @@ PACKAGECONFIG[nss] = "--enable-nss,--disable-nss,nss," PACKAGECONFIG[openssl] = "--enable-openssl,--disable-openssl,openssl," PACKAGECONFIG[pam] = "--enable-pam,--disable-pam,libpam," -do_configure_prepend() { +do_configure:prepend() { export NSS_CFLAGS="-I${STAGING_INCDIR}/nspr -I${STAGING_INCDIR}/nss3" export NSS_LIBS="-L${STAGING_BASELIBDIR} -lssl3 -lsmime3 -lnss3 -lsoftokn3 -lnssutil3" export KEYUTILS_CFLAGS="-I${STAGING_INCDIR}" export KEYUTILS_LIBS="-L${STAGING_LIBDIR} -lkeyutils" } -do_install_append() { +do_install:append() { if ${@bb.utils.contains('DISTRO_FEATURES', 'usrmerge', 'true', 'false', d)}; then install -d ${D}${base_sbindir} mv ${D}/sbin/* ${D}${base_sbindir} @@ -69,7 +69,7 @@ do_install_append() { fi } -FILES_${PN} += "${base_libdir}/security/* ${base_libdir}/ecryptfs/*" +FILES:${PN} += "${base_libdir}/security/* ${base_libdir}/ecryptfs/*" -RDEPENDS_${PN} += "cryptsetup" -RRECOMMENDS_${PN} = "gettext-runtime" +RDEPENDS:${PN} += "cryptsetup" +RRECOMMENDS:${PN} = "gettext-runtime" diff --git a/meta-webos/recipes-support/gflags/gflags_%.bbappend b/meta-webos/recipes-support/gflags/gflags_%.bbappend index 86076153f..b91673cf9 100644 --- a/meta-webos/recipes-support/gflags/gflags_%.bbappend +++ b/meta-webos/recipes-support/gflags/gflags_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2018-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-bash-completion_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-bash-completion_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-bash-completion:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-bash-completion:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/libcheck/libcheck_%.bbappend b/meta-webos/recipes-support/libcheck/libcheck_%.bbappend index 711386666..e3f35a648 100644 --- a/meta-webos/recipes-support/libcheck/libcheck_%.bbappend +++ b/meta-webos/recipes-support/libcheck/libcheck_%.bbappend @@ -1,10 +1,10 @@ # Copyright (c) 2014-2017 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" # Use awk (from busybox) instead of detecting what's available on the build # machine. -RDEPENDS_${PN}_append_class-target = " busybox" +RDEPENDS:${PN}:append:class-target = " busybox" AWK = "awk" export AWK_PATH = "${bindir}/${AWK}" diff --git a/meta-webos/recipes-support/libteam/libteam_%.bbappend b/meta-webos/recipes-support/libteam/libteam_%.bbappend index 03bae452b..ca3c9d6f7 100644 --- a/meta-webos/recipes-support/libteam/libteam_%.bbappend +++ b/meta-webos/recipes-support/libteam/libteam_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-utils_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-utils_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-utils:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-utils:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/lio-utils/lio-utils_%.bbappend b/meta-webos/recipes-support/lio-utils/lio-utils_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-support/lio-utils/lio-utils_%.bbappend +++ b/meta-webos/recipes-support/lio-utils/lio-utils_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/lm_sensors/lmsensors_%.bbappend b/meta-webos/recipes-support/lm_sensors/lmsensors_%.bbappend index 6dbdd54b0..563a21c36 100644 --- a/meta-webos/recipes-support/lm_sensors/lmsensors_%.bbappend +++ b/meta-webos/recipes-support/lm_sensors/lmsensors_%.bbappend @@ -1,11 +1,11 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-sensord_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-sensord_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-fancontrol_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-fancontrol_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-pwmconfig_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-pwmconfig_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-sensord:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-sensord:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-fancontrol:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-fancontrol:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-pwmconfig:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-pwmconfig:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/logwarn/logwarn_%.bbappend b/meta-webos/recipes-support/logwarn/logwarn_%.bbappend index 3b66b1ba1..06dfd6502 100644 --- a/meta-webos/recipes-support/logwarn/logwarn_%.bbappend +++ b/meta-webos/recipes-support/logwarn/logwarn_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-nagios_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-nagios_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-nagios:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-nagios:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/lvm2/lvm2_%.bbappend b/meta-webos/recipes-support/lvm2/lvm2_%.bbappend index db19cbb29..34e5ccc6b 100644 --- a/meta-webos/recipes-support/lvm2/lvm2_%.bbappend +++ b/meta-webos/recipes-support/lvm2/lvm2_%.bbappend @@ -1,9 +1,9 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" -RDEPENDS_${PN}-scripts_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-scripts_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-scripts:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-scripts:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/mcelog/mce-test_%.bbappend b/meta-webos/recipes-support/mcelog/mce-test_%.bbappend index 6b0deb661..210c98f54 100644 --- a/meta-webos/recipes-support/mcelog/mce-test_%.bbappend +++ b/meta-webos/recipes-support/mcelog/mce-test_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2019-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/mcelog/mcelog_%.bbappend b/meta-webos/recipes-support/mcelog/mcelog_%.bbappend index 2f1455eb7..1d5e46630 100644 --- a/meta-webos/recipes-support/mcelog/mcelog_%.bbappend +++ b/meta-webos/recipes-support/mcelog/mcelog_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/memcached/memcached_%.bbappend b/meta-webos/recipes-support/memcached/memcached_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-support/memcached/memcached_%.bbappend +++ b/meta-webos/recipes-support/memcached/memcached_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/multipath-tools/multipath-tools_%.bbappend b/meta-webos/recipes-support/multipath-tools/multipath-tools_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-support/multipath-tools/multipath-tools_%.bbappend +++ b/meta-webos/recipes-support/multipath-tools/multipath-tools_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/numactl/numactl_%.bbappend b/meta-webos/recipes-support/numactl/numactl_%.bbappend index 2f1455eb7..1d5e46630 100644 --- a/meta-webos/recipes-support/numactl/numactl_%.bbappend +++ b/meta-webos/recipes-support/numactl/numactl_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-ptest_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-ptest_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/opencv/opencv_4.%.bbappend b/meta-webos/recipes-support/opencv/opencv_4.%.bbappend index c33a6e615..3c63122f5 100644 --- a/meta-webos/recipes-support/opencv/opencv_4.%.bbappend +++ b/meta-webos/recipes-support/opencv/opencv_4.%.bbappend @@ -1,15 +1,15 @@ # Copyright (c) 2018-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" # Adds dependency on GPLv2 tbb -PACKAGECONFIG_remove = "tbb" +PACKAGECONFIG:remove = "tbb" # Depends on blacklisted glog -PACKAGECONFIG_remove_armv4 = "eigen" -PACKAGECONFIG_remove_armv5 = "eigen" +PACKAGECONFIG:remove:armv4 = "eigen" +PACKAGECONFIG:remove:armv5 = "eigen" # http://caprica.lgsvl.com:8080/Errors/Details/1447234 VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-apps_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-apps_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-apps:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-apps:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/pps-tools/pps-tools_%.bbappend b/meta-webos/recipes-support/pps-tools/pps-tools_%.bbappend index 7389100cd..a32e333e1 100644 --- a/meta-webos/recipes-support/pps-tools/pps-tools_%.bbappend +++ b/meta-webos/recipes-support/pps-tools/pps-tools_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2018-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/rdma-core/rdma-core_%.bbappend b/meta-webos/recipes-support/rdma-core/rdma-core_%.bbappend index 7389100cd..a32e333e1 100644 --- a/meta-webos/recipes-support/rdma-core/rdma-core_%.bbappend +++ b/meta-webos/recipes-support/rdma-core/rdma-core_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2018-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/sdparm/sdparm_%.bbappend b/meta-webos/recipes-support/sdparm/sdparm_%.bbappend index 6feecd2c3..e362a2bc0 100644 --- a/meta-webos/recipes-support/sdparm/sdparm_%.bbappend +++ b/meta-webos/recipes-support/sdparm/sdparm_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}-scripts_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}-scripts_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-scripts:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-scripts:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/sg3-utils/sg3-utils_%.bbappend b/meta-webos/recipes-support/sg3-utils/sg3-utils_%.bbappend index 7b13fcd11..3c0dd2b81 100644 --- a/meta-webos/recipes-support/sg3-utils/sg3-utils_%.bbappend +++ b/meta-webos/recipes-support/sg3-utils/sg3-utils_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/unbound/unbound_%.bbappend b/meta-webos/recipes-support/unbound/unbound_%.bbappend index 6b0deb661..210c98f54 100644 --- a/meta-webos/recipes-support/unbound/unbound_%.bbappend +++ b/meta-webos/recipes-support/unbound/unbound_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2019-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/user-creation/xuser-account_0.1.bbappend b/meta-webos/recipes-support/user-creation/xuser-account_0.1.bbappend index 08cc1b51d..14d4035fe 100644 --- a/meta-webos/recipes-support/user-creation/xuser-account_0.1.bbappend +++ b/meta-webos/recipes-support/user-creation/xuser-account_0.1.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2017 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" # we don't need xuser -USERADD_PARAM_${PN} = " " +USERADD_PARAM:${PN} = " " diff --git a/meta-webos/recipes-test/bats/bats_%.bbappend b/meta-webos/recipes-test/bats/bats_%.bbappend index 8bead8d10..0ba989021 100644 --- a/meta-webos/recipes-test/bats/bats_%.bbappend +++ b/meta-webos/recipes-test/bats/bats_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2019-2020 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_bats_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_bats_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:bats:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:bats:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-test/googletest/googletest_%.bbappend b/meta-webos/recipes-test/googletest/googletest_%.bbappend index f944934ac..e6c9809b6 100644 --- a/meta-webos/recipes-test/googletest/googletest_%.bbappend +++ b/meta-webos/recipes-test/googletest/googletest_%.bbappend @@ -1,10 +1,10 @@ # Copyright (c) 2015-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos2" +EXTENDPRAUTO:append = "webos2" # GTest developers recommend to use source code instead of linking # against a prebuilt library. -do_install_append() { +do_install:append() { rm -rf ${B}/fused-src mkdir ${B}/fused-src ${S}/googletest/scripts/fuse_gtest_files.py ${B}/fused-src @@ -24,9 +24,9 @@ do_install_append() { install -v -m 0755 ${S}/googletest/test/*.py ${D}${bindir}/gtest } -sysroot_stage_all_append() { +sysroot_stage_all:append() { sysroot_stage_dir ${D}${prefix}/src ${SYSROOT_DESTDIR}${prefix}/src } -FILES_${PN} += "${bindir}/gtest" -FILES_${PN}-dev += "${prefix}/src" +FILES:${PN} += "${bindir}/gtest" +FILES:${PN}-dev += "${prefix}/src" diff --git a/meta-webos/recipes-upstreamable/fluentbit/fluentbit_1.7.4.bb b/meta-webos/recipes-upstreamable/fluentbit/fluentbit_1.7.4.bb index 71dda21b3..d1e401bd9 100644 --- a/meta-webos/recipes-upstreamable/fluentbit/fluentbit_1.7.4.bb +++ b/meta-webos/recipes-upstreamable/fluentbit/fluentbit_1.7.4.bb @@ -26,7 +26,7 @@ SRC_URI = "git://github.com/fluent/fluent-bit.git;branch=1.7;protocol=https \ S = "${WORKDIR}/git" DEPENDS = "zlib bison-native flex-native" -INSANE_SKIP_${PN}-dev += "dev-elf" +INSANE_SKIP:${PN}-dev += "dev-elf" # Use CMake 'Unix Makefiles' generator OECMAKE_GENERATOR ?= "Unix Makefiles" @@ -56,5 +56,5 @@ EXTRA_OECMAKE += "-DFLB_IN_SYSTEMD=On " inherit cmake systemd -SYSTEMD_SERVICE_${PN} = "fluent-bit.service" -TARGET_CC_ARCH_append = " ${SELECTED_OPTIMIZATION}" +SYSTEMD_SERVICE:${PN} = "fluent-bit.service" +TARGET_CC_ARCH:append = " ${SELECTED_OPTIMIZATION}" diff --git a/meta-webos/recipes-upstreamable/gupnp/gssdp_1.2.3.bb b/meta-webos/recipes-upstreamable/gupnp/gssdp_1.2.3.bb index 5bc5deffe..5c95e3612 100644 --- a/meta-webos/recipes-upstreamable/gupnp/gssdp_1.2.3.bb +++ b/meta-webos/recipes-upstreamable/gupnp/gssdp_1.2.3.bb @@ -6,7 +6,7 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7" DEPENDS = "glib-2.0 libsoup-2.4" COMPATIBLE_MACHINE = "^raspberrypi4$|^qemux86$" -COMPATIBLE_MACHINE_raspberrypi4-64 = "^$" +COMPATIBLE_MACHINE:raspberrypi4-64 = "^$" PR = "r0" @@ -23,4 +23,4 @@ PACKAGECONFIG[sniffer] = "-Dsniffer=true,-Dsniffer=false,gtk+3," PACKAGES =+ "gssdp-tools" -FILES_gssdp-tools = "${bindir}/gssdp* ${datadir}/gssdp/*.glade" +FILES:gssdp-tools = "${bindir}/gssdp* ${datadir}/gssdp/*.glade" diff --git a/meta-webos/recipes-upstreamable/gupnp/gupnp.inc b/meta-webos/recipes-upstreamable/gupnp/gupnp.inc index fec462e89..a728616d8 100644 --- a/meta-webos/recipes-upstreamable/gupnp/gupnp.inc +++ b/meta-webos/recipes-upstreamable/gupnp/gupnp.inc @@ -5,14 +5,14 @@ LICENSE = "LGPLv2+" DEPENDS = "e2fsprogs gssdp libsoup-2.4 libxml2" COMPATIBLE_MACHINE = "^raspberrypi4$|^qemux86$" -COMPATIBLE_MACHINE_raspberrypi4-64 = "^$" +COMPATIBLE_MACHINE:raspberrypi4-64 = "^$" inherit meson pkgconfig vala gobject-introspection -FILES_${PN} = "${libdir}/*.so.*" -FILES_${PN}-dev += "${bindir}/gupnp-binding-tool*" +FILES:${PN} = "${libdir}/*.so.*" +FILES:${PN}-dev += "${bindir}/gupnp-binding-tool*" -RDEPENDS_${PN}-dev = "python3 python3-xml" +RDEPENDS:${PN}-dev = "python3 python3-xml" SYSROOT_PREPROCESS_FUNCS += "gupnp_sysroot_preprocess" diff --git a/meta-webos/recipes-upstreamable/leveldb-tl/leveldb-tl_0.1.6.bb b/meta-webos/recipes-upstreamable/leveldb-tl/leveldb-tl_0.1.6.bb index a8898ec1d..c8176bfe3 100644 --- a/meta-webos/recipes-upstreamable/leveldb-tl/leveldb-tl_0.1.6.bb +++ b/meta-webos/recipes-upstreamable/leveldb-tl/leveldb-tl_0.1.6.bb @@ -8,7 +8,7 @@ SECTION = "libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57" DEPENDS = "leveldb" -DEPENDS_append_class-target = " gtest" +DEPENDS:append:class-target = " gtest" PR = "r3" SRC_URI = "git://github.com/ony/${BPN};branch=gcc-4.7;protocol=https" @@ -21,7 +21,7 @@ S = "${WORKDIR}/git" inherit cmake -EXTRA_OECMAKE_append_class-native = " -DBUILD_TESTING:BOOL=false -DBUILD_MKSANDWICH:BOOL=false" +EXTRA_OECMAKE:append:class-native = " -DBUILD_TESTING:BOOL=false -DBUILD_MKSANDWICH:BOOL=false" BBCLASSEXTEND = "native" diff --git a/meta-webos/recipes-upstreamable/libbson/libbson_git.bb b/meta-webos/recipes-upstreamable/libbson/libbson_git.bb index 28f99c190..62b857e51 100644 --- a/meta-webos/recipes-upstreamable/libbson/libbson_git.bb +++ b/meta-webos/recipes-upstreamable/libbson/libbson_git.bb @@ -19,7 +19,7 @@ S = "${WORKDIR}/git" inherit cmake -do_configure_append() { +do_configure:append() { find ${S}/src -type f -name "*.[c|h]" | xargs sed -i 's/\([^"|^\/]\)yajl_/\1bson_yajl_/g' find ${S}/src -type f -name "*.[c|h]" | xargs sed -i 's/^yajl_/bson_yajl_/g' } diff --git a/meta-webos/recipes-upstreamable/libhangul/libhangul.bb b/meta-webos/recipes-upstreamable/libhangul/libhangul.bb index 98d6196d2..bb2c1d369 100644 --- a/meta-webos/recipes-upstreamable/libhangul/libhangul.bb +++ b/meta-webos/recipes-upstreamable/libhangul/libhangul.bb @@ -48,10 +48,10 @@ SRC_URI = "git://github.com/choehwanjin/libhangul.git;branch=main;protocol=https " S = "${WORKDIR}/git" -FILES_${PN} += "${libdir}/maliit/plugins/*" -FILES_${PN}-staticdev += "${libdir}/maliit/plugins/*.a" +FILES:${PN} += "${libdir}/maliit/plugins/*" +FILES:${PN}-staticdev += "${libdir}/maliit/plugins/*.a" # imemanager loads libhangul.so file dynamically # from maliit/plugins path, since it is using unversioned symlinks # any change in libhangul will not affect imemanager -INSANE_SKIP_${PN} = "dev-so" +INSANE_SKIP:${PN} = "dev-so" diff --git a/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc b/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc index 910312698..b0ae2d471 100644 --- a/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc +++ b/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc @@ -219,58 +219,58 @@ tunnel-agent-0.3.0 \ which-1.0.5 \ " -LICENSE_abbrev-1.0.5 = "MIT" -LICENSE_ansi-0.2.1 = "MIT" -LICENSE_asn1-0.1.11 = "MIT" -LICENSE_assert-plus-0.1.2 = "MIT" -LICENSE_async-0.2.10 = "MIT" -LICENSE_aws-sign2-0.5.0 = "Apache-2.0" -LICENSE_block-stream-0.0.7 = "BSD" -LICENSE_boom-0.4.2 = "BSD" -LICENSE_combined-stream-0.0.4 = "MIT" -LICENSE_cryptiles-0.2.2 = "BSD" -LICENSE_ctype-0.5.2 = "MIT" -LICENSE_delayed-stream-0.0.5 = "MIT" -LICENSE_forever-agent-0.5.2 = "Apache-2.0" -LICENSE_form-data-0.1.2 = "MIT" -LICENSE_fstream-0.1.25 = "BSD" -LICENSE_glob-3.2.9 = "BSD" -LICENSE_graceful-fs-1.2.3 = "BSD" -LICENSE_graceful-fs-2.0.3 = "BSD" -LICENSE_grunt-0.4.5 = "MIT" -LICENSE_grunt-contrib-concat-0.5.1 = "MIT" -LICENSE_grunt-contrib-jshint-0.10.0 = "MIT" -LICENSE_grunt-contrib-nodeunit-0.4.1 = "MIT" -LICENSE_grunt-contrib-qunit-0.7.0 = "MIT" -LICENSE_grunt-contrib-uglify-0.5.0 = "MIT" -LICENSE_grunt-contrib-watch-0.6.1 = "MIT" -LICENSE_hawk-1.0.0 = "BSD" -LICENSE_hoek-0.9.1 = "BSD" -LICENSE_http-signature-0.10.0 = "MIT" -LICENSE_inherits-2.0.1 = "ISC" -LICENSE_json-stringify-safe-5.0.0 = "BSD" -LICENSE_lru-cache-2.5.0 = "MIT" -LICENSE_mime-1.2.11 = "MIT" -LICENSE_minimatch-0.2.14 = "MIT" -LICENSE_mkdirp-0.3.5 = "MIT" -LICENSE_mkdirp-0.4.0 = "MIT" -LICENSE_node-uuid-1.4.1 = "MIT" -LICENSE_nopt-2.2.1 = "MIT" -LICENSE_npmlog-0.0.6 = "BSD" -LICENSE_oauth-sign-0.3.0 = "Apache-2.0" -LICENSE_osenv-0.0.3 = "BSD" -LICENSE_punycode-1.2.4 = "BSD & MIT" -LICENSE_qs-0.6.6 = "MIT" -LICENSE_qunitjs-1.18.0 = "MIT" -LICENSE_request-2.34.0 = "Apache-2.0" -LICENSE_rimraf-2.2.6 = "MIT" -LICENSE_semver-2.2.1 = "BSD" -LICENSE_sigmund-1.0.0 = "BSD" -LICENSE_sntp-0.2.4 = "BSD" -LICENSE_tar-0.1.19 = "BSD" -LICENSE_tough-cookie-0.12.1 = "CC0-1.0 & (MPL-1.1 | GPL-2.0 | LGPL-2.1) & MIT" -LICENSE_tunnel-agent-0.3.0 = "Apache-2.0" -LICENSE_which-1.0.5 = "MIT" +LICENSE:abbrev-1.0.5 = "MIT" +LICENSE:ansi-0.2.1 = "MIT" +LICENSE:asn1-0.1.11 = "MIT" +LICENSE:assert-plus-0.1.2 = "MIT" +LICENSE:async-0.2.10 = "MIT" +LICENSE:aws-sign2-0.5.0 = "Apache-2.0" +LICENSE:block-stream-0.0.7 = "BSD" +LICENSE:boom-0.4.2 = "BSD" +LICENSE:combined-stream-0.0.4 = "MIT" +LICENSE:cryptiles-0.2.2 = "BSD" +LICENSE:ctype-0.5.2 = "MIT" +LICENSE:delayed-stream-0.0.5 = "MIT" +LICENSE:forever-agent-0.5.2 = "Apache-2.0" +LICENSE:form-data-0.1.2 = "MIT" +LICENSE:fstream-0.1.25 = "BSD" +LICENSE:glob-3.2.9 = "BSD" +LICENSE:graceful-fs-1.2.3 = "BSD" +LICENSE:graceful-fs-2.0.3 = "BSD" +LICENSE:grunt-0.4.5 = "MIT" +LICENSE:grunt-contrib-concat-0.5.1 = "MIT" +LICENSE:grunt-contrib-jshint-0.10.0 = "MIT" +LICENSE:grunt-contrib-nodeunit-0.4.1 = "MIT" +LICENSE:grunt-contrib-qunit-0.7.0 = "MIT" +LICENSE:grunt-contrib-uglify-0.5.0 = "MIT" +LICENSE:grunt-contrib-watch-0.6.1 = "MIT" +LICENSE:hawk-1.0.0 = "BSD" +LICENSE:hoek-0.9.1 = "BSD" +LICENSE:http-signature-0.10.0 = "MIT" +LICENSE:inherits-2.0.1 = "ISC" +LICENSE:json-stringify-safe-5.0.0 = "BSD" +LICENSE:lru-cache-2.5.0 = "MIT" +LICENSE:mime-1.2.11 = "MIT" +LICENSE:minimatch-0.2.14 = "MIT" +LICENSE:mkdirp-0.3.5 = "MIT" +LICENSE:mkdirp-0.4.0 = "MIT" +LICENSE:node-uuid-1.4.1 = "MIT" +LICENSE:nopt-2.2.1 = "MIT" +LICENSE:npmlog-0.0.6 = "BSD" +LICENSE:oauth-sign-0.3.0 = "Apache-2.0" +LICENSE:osenv-0.0.3 = "BSD" +LICENSE:punycode-1.2.4 = "BSD & MIT" +LICENSE:qs-0.6.6 = "MIT" +LICENSE:qunitjs-1.18.0 = "MIT" +LICENSE:request-2.34.0 = "Apache-2.0" +LICENSE:rimraf-2.2.6 = "MIT" +LICENSE:semver-2.2.1 = "BSD" +LICENSE:sigmund-1.0.0 = "BSD" +LICENSE:sntp-0.2.4 = "BSD" +LICENSE:tar-0.1.19 = "BSD" +LICENSE:tough-cookie-0.12.1 = "CC0-1.0 & (MPL-1.1 | GPL-2.0 | LGPL-2.1) & MIT" +LICENSE:tunnel-agent-0.3.0 = "Apache-2.0" +LICENSE:which-1.0.5 = "MIT" ALL_LICENSES = "\ ${LICENSE_abbrev-1.0.5} & \ diff --git a/meta-webos/recipes-upstreamable/nodejs-module/nodejs-module-usocket_0.2.1.bb b/meta-webos/recipes-upstreamable/nodejs-module/nodejs-module-usocket_0.2.1.bb index a7309c1f8..f86b541c0 100644 --- a/meta-webos/recipes-upstreamable/nodejs-module/nodejs-module-usocket_0.2.1.bb +++ b/meta-webos/recipes-upstreamable/nodejs-module/nodejs-module-usocket_0.2.1.bb @@ -43,4 +43,4 @@ do_install() { cp -r ${S}/node_modules/ ${D}${libdir}/node_modules/usocket } -FILES_${PN} += "${libdir}/node_modules/usocket" +FILES:${PN} += "${libdir}/node_modules/usocket" diff --git a/meta-webos/recipes-upstreamable/pacrunner/pacrunner_0.9.bb b/meta-webos/recipes-upstreamable/pacrunner/pacrunner_0.9.bb index b9f511972..d95b75afa 100644 --- a/meta-webos/recipes-upstreamable/pacrunner/pacrunner_0.9.bb +++ b/meta-webos/recipes-upstreamable/pacrunner/pacrunner_0.9.bb @@ -19,9 +19,9 @@ SRC_URI[sha256sum] = "32ba57943f449c0c3912e919c3aff25c679b8ee61b5aa24ebf9913d5de inherit autotools pkgconfig -do_install_append() { +do_install:append() { install -d ${D}${sysconfdir}/init install -v -m 644 ${WORKDIR}/pacrunner.conf ${D}${sysconfdir}/init } -FILES_${PN} = "${datadir}/dbus-1/system-services/* ${sbindir}/* ${sysconfdir} ${sysconfdir}" +FILES:${PN} = "${datadir}/dbus-1/system-services/* ${sbindir}/* ${sysconfdir} ${sysconfdir}" diff --git a/meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb b/meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb index ba2264767..119d1c1ca 100644 --- a/meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb +++ b/meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb @@ -32,5 +32,5 @@ do_install() { rm ${D}/${includedir}/sysdeps/generic/atomic.h } -FILES_${PN} = " ${libdir}/lib*.so" -FILES_${PN}-dev = "${includedir}" +FILES:${PN} = " ${libdir}/lib*.so" +FILES:${PN}-dev = "${includedir}" diff --git a/meta-webos/recipes-upstreamable/snowboy/snowboy_%.bbappend b/meta-webos/recipes-upstreamable/snowboy/snowboy_%.bbappend index c4895ab80..21e1a9783 100644 --- a/meta-webos/recipes-upstreamable/snowboy/snowboy_%.bbappend +++ b/meta-webos/recipes-upstreamable/snowboy/snowboy_%.bbappend @@ -1,44 +1,44 @@ # Copyright (c) 2019-2021 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" inherit cmake DEPENDS += "lapack" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI += "file://snowboy.pc.in;subdir=git" # snowboy offers arm/aarch64/x86-64 only for C++ implementation COMPATIBLE_MACHINE = "rpi|aarch64|x86-64|qemux86-64" # match static lib for each arch -SNOWBOY_ARCH_armv6 = "rpi" -SNOWBOY_ARCH_armv7a = "rpi" -SNOWBOY_ARCH_armv7ve = "rpi" -SNOWBOY_ARCH_aarch64 = "aarch64-ubuntu1604" -SNOWBOY_ARCH_x86-64 = "ubuntu64" +SNOWBOY_ARCH:armv6 = "rpi" +SNOWBOY_ARCH:armv7a = "rpi" +SNOWBOY_ARCH:armv7ve = "rpi" +SNOWBOY_ARCH:aarch64 = "aarch64-ubuntu1604" +SNOWBOY_ARCH:x86-64 = "ubuntu64" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" -SRC_URI_append = " file://CMakeLists.txt;subdir=git" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" +SRC_URI:append = " file://CMakeLists.txt;subdir=git" -INSANE_SKIP_${PN} += "textrel" +INSANE_SKIP:${PN} += "textrel" # RPI 32-bit and x86-64's static library doesn't build with c++11. So we need to avoid using CXX11_ABI. SNOWBOY_EXTRA_FLAGS ?= "-D_GLIBCXX_USE_CXX11_ABI=0" -SNOWBOY_EXTRA_FLAGS_aarch64 = "-std=c++11" +SNOWBOY_EXTRA_FLAGS:aarch64 = "-std=c++11" -EXTRA_OECMAKE_append = " -DBUILD_SHARED_LIB=OFF -DINSTALL_KEYWORD_MODELS=ON -DSNOWBOY_ARCH='${SNOWBOY_ARCH}' -DSNOWBOY_EXTRA_FLAGS='${SNOWBOY_EXTRA_FLAGS}'" +EXTRA_OECMAKE:append = " -DBUILD_SHARED_LIB=OFF -DINSTALL_KEYWORD_MODELS=ON -DSNOWBOY_ARCH='${SNOWBOY_ARCH}' -DSNOWBOY_EXTRA_FLAGS='${SNOWBOY_EXTRA_FLAGS}'" -FILES_${PN}-dev += "${libdir}/snowboy/*.so" +FILES:${PN}-dev += "${libdir}/snowboy/*.so" # if BUILD_SHARED_LIB is OFF, below is for fixing when populate_sdk # Collected errors: # * Solver encountered 1 problem(s): # * Problem 1/1: # * - nothing provides snowboy = 1.3.0-r0webos1 needed by snowboy-dev-1.3.0-r0webos1.raspberrypi4_64 -RDEPENDS_${PN}-dev = "" +RDEPENDS:${PN}-dev = "" # Otherwise, this line is unnecessary when BUILD_SHARED_LIB is ON # Add models package if needs keyword activation models PACKAGES =+ "${PN}-models" -FILES_${PN}-models = "${sysconfdir}/snowboy/models/*" +FILES:${PN}-models = "${sysconfdir}/snowboy/models/*" diff --git a/meta-webos/recipes-upstreamable/snowboy/snowboy_1.3.0.bb b/meta-webos/recipes-upstreamable/snowboy/snowboy_1.3.0.bb index 4b4e1adfb..bea904019 100644 --- a/meta-webos/recipes-upstreamable/snowboy/snowboy_1.3.0.bb +++ b/meta-webos/recipes-upstreamable/snowboy/snowboy_1.3.0.bb @@ -9,7 +9,7 @@ S = "${WORKDIR}/git" COMPATIBLE_MACHINE = "(machine-native|android)" -INSANE_SKIP_${PN} += "already-stripped" +INSANE_SKIP:${PN} += "already-stripped" def get_snowboy_arch(d): machine = d.getVar('MACHINE') diff --git a/meta-webos/recipes-upstreamable/sp-memusage/sp-memusage_git.bb b/meta-webos/recipes-upstreamable/sp-memusage/sp-memusage_git.bb index 9ffbbaa07..35a5b36da 100644 --- a/meta-webos/recipes-upstreamable/sp-memusage/sp-memusage_git.bb +++ b/meta-webos/recipes-upstreamable/sp-memusage/sp-memusage_git.bb @@ -5,7 +5,7 @@ LICENSE = "GPL-2.0" LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe" DEPENDS = "sp-measure" -RDEPENDS_${PN} = "sp-measure" +RDEPENDS:${PN} = "sp-measure" SRCREV = "65e6a729ce04cd90206689ae28fbabc4baf801f6" PR = "r6" @@ -18,7 +18,7 @@ SRC_URI = "git://github.com/maemo-tools-old/${BPN}.git;branch=master;protocol=ht " S = "${WORKDIR}/git" -FILES_${PN} += "${datadir}/sp-memusage-tests" +FILES:${PN} += "${datadir}/sp-memusage-tests" # | /jenkins/mjansa/build/webos/gatesgarth/BUILD/work/qemux86-webos-linux/sp-memusage/1.3.2+gitAUTOINC+65e6a729ce-r5/recipe-sysroot-native/usr/bin/i686-webos-linux/../../libexec/i686-webos-linux/gcc/i686-webos-linux/10.2.0/ld: error: /tmp/cclzkt11.o: multiple definition of 'sp_report_alignment_t' # | /jenkins/mjansa/build/webos/gatesgarth/BUILD/work/qemux86-webos-linux/sp-memusage/1.3.2+gitAUTOINC+65e6a729ce-r5/recipe-sysroot-native/usr/bin/i686-webos-linux/../../libexec/i686-webos-linux/gcc/i686-webos-linux/10.2.0/ld: /tmp/ccYygIT3.o: previous definition here diff --git a/meta-webos/recipes-upstreamable/sqlcipher/sqlcipher.bb b/meta-webos/recipes-upstreamable/sqlcipher/sqlcipher.bb index d5b3e0959..cb30f8b51 100644 --- a/meta-webos/recipes-upstreamable/sqlcipher/sqlcipher.bb +++ b/meta-webos/recipes-upstreamable/sqlcipher/sqlcipher.bb @@ -20,4 +20,4 @@ EXTRA_OEMAKE='"LIBTOOL=${STAGING_BINDIR_CROSS}/${HOST_SYS}-libtool"' S = "${WORKDIR}/git" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" diff --git a/meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb b/meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb index bbdb1e629..bff5f4af9 100644 --- a/meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb +++ b/meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb @@ -8,7 +8,7 @@ LICENSE = "LGPLv2.1" LIC_FILES_CHKSUM = "file://COPYING;md5=0fb040b9b86a214885e3285fe25d74bc" DEPENDS = "sqlite3" -DEPENDS_append_class-target = " sunpinyin-native" +DEPENDS:append:class-target = " sunpinyin-native" inherit pkgconfig scons perlnative @@ -32,14 +32,14 @@ SRC_URI = "git://github.com/sunpinyin/sunpinyin.git;protocol=https;branch=maste S = "${WORKDIR}/git" -do_install_append_class-target() { +do_install:append:class-target() { install -d ${D}${libdir}/maliit/plugins/dict install -m 755 ${S}/libsunpinyin.so.3.0 ${D}${libdir}/maliit/plugins install -m 755 ${S}/Dictionary/pydict_sc.bin ${D}${libdir}/maliit/plugins/dict install -m 755 ${S}/Dictionary/lm_sc.t3g ${D}${libdir}/maliit/plugins/dict } -do_install_append_class-native () { +do_install:append:class-native () { install -d ${D}${bindir} install -m 755 ${S}/src/genpyt ${D}${bindir} install -m 755 ${S}/src/getwordfreq ${D}${bindir} @@ -57,4 +57,4 @@ do_install_append_class-native () { install -m 755 ${S}/src/tslminfo ${D}${bindir} } -FILES_${PN} += "${libdir}/maliit/plugins/" +FILES:${PN} += "${libdir}/maliit/plugins/" diff --git a/meta-webos/recipes-utils/udevil/udevil_%.bbappend b/meta-webos/recipes-utils/udevil/udevil_%.bbappend index ed5f48b50..7d3ca9559 100644 --- a/meta-webos/recipes-utils/udevil/udevil_%.bbappend +++ b/meta-webos/recipes-utils/udevil/udevil_%.bbappend @@ -1,7 +1,7 @@ # Copyright (c) 2017-2019 LG Electronics, Inc. -EXTENDPRAUTO_append = "webos1" +EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-utils/vmwgfx-layout/vmwgfx-layout.bb b/meta-webos/recipes-utils/vmwgfx-layout/vmwgfx-layout.bb index 71550cc68..0d29cb1ed 100644 --- a/meta-webos/recipes-utils/vmwgfx-layout/vmwgfx-layout.bb +++ b/meta-webos/recipes-utils/vmwgfx-layout/vmwgfx-layout.bb @@ -18,8 +18,8 @@ SRC_URI = "git://github.com/sparkleholic/vmwgfx-layout.git;branch=master;protoco " S = "${WORKDIR}/git" -SYSTEMD_SERVICE_${PN} = "vmwgfx-setlayout.service" +SYSTEMD_SERVICE:${PN} = "vmwgfx-setlayout.service" -FILES_${PN} = "${bindir} \ +FILES:${PN} = "${bindir} \ ${systemd_system_unitdir} \ " diff --git a/meta-webos/recipes-webos/activitymanager/activitymanager.bb b/meta-webos/recipes-webos/activitymanager/activitymanager.bb index f518b45e1..b44c0d99b 100644 --- a/meta-webos/recipes-webos/activitymanager/activitymanager.bb +++ b/meta-webos/recipes-webos/activitymanager/activitymanager.bb @@ -24,6 +24,6 @@ inherit webos_machine_impl_dep SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" -FILES_${PN} += "${webos_sysbus_datadir}" +FILES:${PN} += "${webos_sysbus_datadir}" EXTRA_OECMAKE += "-DINIT_MANAGER:STRING=${VIRTUAL-RUNTIME_init_manager}" diff --git a/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb b/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb index fec3283ed..678d006f2 100644 --- a/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb +++ b/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ " DEPENDS = "glib-2.0 luna-service2 libpbnjson pmloglib pmtrace boost icu" -RDEPENDS_${PN} = "applicationinstallerutility ecryptfs-utils librolegen" +RDEPENDS:${PN} = "applicationinstallerutility ecryptfs-utils librolegen" WEBOS_VERSION = "1.0.0-37_df8107da7a26b683a84098a9e0dee83cb333008e" PR = "r4" diff --git a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb index 38ad2749e..cd83cbd4f 100644 --- a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb +++ b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb @@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = " \ " DEPENDS = "luna-surfacemanager qt-features-webos" -RDEPENDS_${PN} = " \ +RDEPENDS:${PN} = " \ luna-surfacemanager-base \ qtbase-plugins-webos \ " @@ -34,7 +34,7 @@ WEBOS_QMLLINT_EXTRA_VALIDATION = "1" WEBOS_SYSTEM_BUS_SKIP_DO_TASKS = "1" -FILES_${PN} += " \ +FILES:${PN} += " \ ${OE_QMAKE_PATH_QML}/WebOSCompositor \ ${OE_QMAKE_PATH_PLUGINS}/compositor \ " diff --git a/meta-webos/recipes-webos/avoutputd/avoutputd.bb b/meta-webos/recipes-webos/avoutputd/avoutputd.bb index 8a038e35c..c9479c294 100644 --- a/meta-webos/recipes-webos/avoutputd/avoutputd.bb +++ b/meta-webos/recipes-webos/avoutputd/avoutputd.bb @@ -8,7 +8,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e" VIRTUAL-RUNTIME_aval-impl ??= "avoutput-adaptation-layer-mock" DEPENDS = "glib-2.0 luna-service2 pmloglib libpbnjson aval-impl" -RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_aval-impl}" +RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_aval-impl}" WEBOS_VERSION = "1.0.0-5_36d08c75feb62391af087ccdc9c00fcaf8271712" PR = "r1" diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb index a699650bc..de092bf68 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb @@ -26,6 +26,6 @@ S = "${WORKDIR}/git" EXTRA_OECMAKE += "-DWEBOS_CONFIG_BUILD_TESTS:BOOL=TRUE" PACKAGES =. "${PN}-tests " -FILES_${PN}-tests = "${bindir}/bluetooth-sil-tester" +FILES:${PN}-tests = "${bindir}/bluetooth-sil-tester" -ALLOW_EMPTY_${PN} = "1" +ALLOW_EMPTY:${PN} = "1" diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb index 43268ddcc..c4ebad9d6 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb @@ -10,12 +10,12 @@ LIC_FILES_CHKSUM = " \ " DEPENDS = "glib-2.0 pmloglib glib-2.0-native" -RDEPENDS_${PN} += "bluez5" +RDEPENDS:${PN} += "bluez5" # Handle case where it hasn't been set in DISTRO.conf/MACHINE.conf . WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES ??= "" # Add runtime dependency on bluez5 OBEX service when we have to support FTP -RDEPENDS_${PN} += "${@ bb.utils.contains('WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES', 'FTP', 'bluez5-obex', '', d)}" +RDEPENDS:${PN} += "${@ bb.utils.contains('WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES', 'FTP', 'bluez5-obex', '', d)}" WEBOS_VERSION = "0.1.0-78_a66bf9ebb7bf1f4fde127742f43393b387fa3a73" PR = "r5" diff --git a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb index 98f64569f..9736ca8aa 100644 --- a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb +++ b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb @@ -20,7 +20,7 @@ DEPENDS = " \ # specified by BLUETOOTH_SIL_NAME BLUETOOTH_SIL_NAME ?= "bluez5" BLUETOOTH_SIL_COMPONENT = "${@ ' bluetooth-sil-'.join([''] + '${BLUETOOTH_SIL_NAME}'.split(' '))}" -RDEPENDS_${PN} = " \ +RDEPENDS:${PN} = " \ ${BLUETOOTH_SIL_COMPONENT} \ " diff --git a/meta-webos/recipes-webos/bootd/bootd.bb b/meta-webos/recipes-webos/bootd/bootd.bb index 64ba0d01c..aba018fb0 100644 --- a/meta-webos/recipes-webos/bootd/bootd.bb +++ b/meta-webos/recipes-webos/bootd/bootd.bb @@ -29,13 +29,13 @@ inherit webos_prerelease_dep SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" -FILESEXTRAPATHS_prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -SRC_URI_append_qemux86 = " \ +SRC_URI:append:qemux86 = " \ file://0001-display-count-check-for-emulator.patch \ " -SRC_URI_append_qemux86-64 = " \ +SRC_URI:append:qemux86-64 = " \ file://0001-display-count-check-for-emulator.patch \ " # LTTNG option diff --git a/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb b/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb index 99c2bd223..5feb235b7 100644 --- a/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb +++ b/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb @@ -20,7 +20,7 @@ TARGET = "v8_snapshot_clang_${TARGET_CPU}/mksnapshot" DEPENDS = "glib-2.0-native gcc-runtime" -GN_ARGS_append = "\ +GN_ARGS:append = "\ use_pmlog=false \ " diff --git a/meta-webos/recipes-webos/chromium/mksnapshot-cross_94.bb b/meta-webos/recipes-webos/chromium/mksnapshot-cross_94.bb index 05962d621..a97718e50 100644 --- a/meta-webos/recipes-webos/chromium/mksnapshot-cross_94.bb +++ b/meta-webos/recipes-webos/chromium/mksnapshot-cross_94.bb @@ -20,7 +20,7 @@ TARGET = "v8_snapshot_clang_${TARGET_CPU}/mksnapshot" DEPENDS = "glib-2.0-native gcc-runtime" -GN_ARGS_append = "\ +GN_ARGS:append = "\ use_pmlog=false \ " diff --git a/meta-webos/recipes-webos/chromium/webruntime-common.inc b/meta-webos/recipes-webos/chromium/webruntime-common.inc index 3a859a2c1..b8e813cff 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-common.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-common.inc @@ -25,7 +25,7 @@ WEBOSOSE_GIT_REPO_COMPLETE_V8 ?= "${WEBOSOSE_GIT_REPO}/${WEBOS_REPO_NAME_V8}${WE SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE};name=main" -SRC_URI_append = "\ +SRC_URI:append = "\ ${WEBOSOSE_GIT_REPO_COMPLETE_V8};destsuffix=git/src/v8;name=v8 \ " @@ -80,31 +80,31 @@ GN_ARGS += "${EXTRA_OEGN_GOLD}" # The last digits in the submission format are used for typical submissions number. # The submission formats; submissions/[number] or submissions/[branch name].[number] WEBOS_SUBMISSION_NUMBER="${@ '${WEBOS_SUBMISSION}'.split('.')[-1] }" -GN_ARGS_append = " webos_submission_number=${WEBOS_SUBMISSION_NUMBER}" +GN_ARGS:append = " webos_submission_number=${WEBOS_SUBMISSION_NUMBER}" TARGET_CPU = "${@gn_arch_name(TARGET_ARCH)}" -GN_ARGS_append = " target_cpu=\"${TARGET_CPU}\"" +GN_ARGS:append = " target_cpu=\"${TARGET_CPU}\"" # ARM builds need special additional flags (see ${S}/build/config/arm.gni). ARM_FLOAT_ABI = "${@bb.utils.contains('TUNE_FEATURES', 'callconvention-hard', 'hard', 'softfp', d)}" -GN_ARGS_append_armv6 = " arm_arch=\"armv6\" arm_version=6 arm_float_abi=\"${ARM_FLOAT_ABI}\"" -GN_ARGS_append_armv7a = " arm_arch=\"armv7-a\" arm_version=7 arm_float_abi=\"${ARM_FLOAT_ABI}\"" -GN_ARGS_append_armv7ve = " arm_arch=\"armv7ve\" arm_version=7 arm_float_abi=\"${ARM_FLOAT_ABI}\"" +GN_ARGS:append:armv6 = " arm_arch=\"armv6\" arm_version=6 arm_float_abi=\"${ARM_FLOAT_ABI}\"" +GN_ARGS:append:armv7a = " arm_arch=\"armv7-a\" arm_version=7 arm_float_abi=\"${ARM_FLOAT_ABI}\"" +GN_ARGS:append:armv7ve = " arm_arch=\"armv7ve\" arm_version=7 arm_float_abi=\"${ARM_FLOAT_ABI}\"" # tcmalloc's atomicops-internals-arm-v6plus.h uses the "dmb" instruction that # is not available on (some?) ARMv6 models, which causes the build to fail. -GN_ARGS_append_armv6 = ' use_allocator="none"' +GN_ARGS:append:armv6 = ' use_allocator="none"' # The WebRTC code fails to build on ARMv6 when NEON is enabled. # https://bugs.chromium.org/p/webrtc/issues/detail?id=6574 -GN_ARGS_append_armv6 = ' arm_use_neon=false' +GN_ARGS:append:armv6 = ' arm_use_neon=false' # Doesn't build for armv[45]* COMPATIBLE_MACHINE = "(-)" -COMPATIBLE_MACHINE_aarch64 = "(.*)" -COMPATIBLE_MACHINE_armv6 = "(.*)" -COMPATIBLE_MACHINE_armv7a = "(.*)" -COMPATIBLE_MACHINE_armv7ve = "(.*)" -COMPATIBLE_MACHINE_x86 = "(.*)" -COMPATIBLE_MACHINE_x86-64 = "(.*)" +COMPATIBLE_MACHINE:aarch64 = "(.*)" +COMPATIBLE_MACHINE:armv6 = "(.*)" +COMPATIBLE_MACHINE:armv7a = "(.*)" +COMPATIBLE_MACHINE:armv7ve = "(.*)" +COMPATIBLE_MACHINE:x86 = "(.*)" +COMPATIBLE_MACHINE:x86-64 = "(.*)" do_configure() { export GYP_CHROMIUM_NO_ACTION=1 diff --git a/meta-webos/recipes-webos/chromium/webruntime.inc b/meta-webos/recipes-webos/chromium/webruntime.inc index c11ab4c78..9c6eb3f3e 100644 --- a/meta-webos/recipes-webos/chromium/webruntime.inc +++ b/meta-webos/recipes-webos/chromium/webruntime.inc @@ -36,7 +36,7 @@ WAM_DEMO_BUILD_TARGET = "${@oe.utils.conditional('DEPLOY_WAM_DEMO', 'true', 'wam TARGET = "${WEBRUNTIME_BUILD_TARGET} ${BROWSER_APP_BUILD_TARGET} ${APPSHELL_BUILD_TARGET} ${CHROMEDRIVER_BUILD_TARGET} ${WAM_DEMO_BUILD_TARGET}" -# Skip do_install_append of webos_system_bus. It is not compatible with this component. +# Skip do_install:append of webos_system_bus. It is not compatible with this component. WEBOS_SYSTEM_BUS_SKIP_DO_TASKS = "1" WEBOS_SYSTEM_BUS_FILES_LOCATION = "${S}/files/sysbus" WEBOS_SYSTEM_BUS_MANIFEST_TYPE = "PASS" @@ -44,7 +44,7 @@ WEBOS_SYSTEM_BUS_MANIFEST_TYPE = "PASS" PACKAGECONFIG_NEVA_WEBRTC ?= "neva-webrtc" PACKAGECONFIG_MEDIA ?= "neva-media gstreamer umediaserver gav" PACKAGECONFIG ?= "" -PACKAGECONFIG_append_hardware = " ${PACKAGECONFIG_MEDIA} ${PACKAGECONFIG_NEVA_WEBRTC}" +PACKAGECONFIG:append:hardware = " ${PACKAGECONFIG_MEDIA} ${PACKAGECONFIG_NEVA_WEBRTC}" PACKAGECONFIG[gstreamer] = "use_gst_media=true enable_webm_video_codecs=false,use_gst_media=false,g-media-pipeline" PACKAGECONFIG[umediaserver] = ",,umediaserver" # Options to enable debug build. Add this PACKAGECONFIG to webos-local.conf to enable debug build @@ -56,10 +56,10 @@ PACKAGECONFIG[av1-codec] = "enable_av1_decoder=true, enable_av1_decoder=false" PACKAGECONFIG[gav] = "use_gav=true,use_gav=false" PACKAGECONFIG[neva-webrtc] = "use_neva_webrtc=true,use_neva_webrtc=false,media-codec-interface,media-codec-interface" -PACKAGECONFIG_append = " ${@bb.utils.contains('WEBOS_LTTNG_ENABLED', '1', 'lttng', '', d)}" +PACKAGECONFIG:append = " ${@bb.utils.contains('WEBOS_LTTNG_ENABLED', '1', 'lttng', '', d)}" PACKAGECONFIG[lttng] = "use_lttng=true,use_lttng=false,lttng-ust,lttng-tools lttng-modules babeltrace" -GN_ARGS_append = " \ +GN_ARGS:append = " \ enable_memorymanager_webapi=true\ ffmpeg_branding=\"Chrome\"\ is_app_shell_cbe=true\ @@ -102,7 +102,7 @@ CBE_DATA_PATH = "${libdir}/cbe" CBE_DATA_LOCALES_PATH = "${CBE_DATA_PATH}/neva_locales" -do_compile_append() { +do_compile:append() { ${S}/depot_tools/ninja ${PARALLEL_MAKE} -C ${OUT_DIR} webos/install/weboswebruntime if ${DEPLOY_BROWSER} ; then @@ -165,11 +165,11 @@ modify_run_app_shell() { true } -modify_run_app_shell_append_qemux86() { +modify_run_app_shell:append:qemux86() { # Disable media hardware acceleration sed -i '/--disable-web-security\\/a\ --disable-web-media-player-neva\\' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} } -modify_run_app_shell_append_qemux86-64() { +modify_run_app_shell:append:qemux86-64() { # Disable media hardware acceleration sed -i '/--disable-web-security\\/a\ --disable-web-media-player-neva\\' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} } @@ -235,7 +235,7 @@ do_install() { install_chromium_manifest } -do_install_append_webos() { +do_install:append:webos() { install_ls2_roles_acg ${APP_SHELL_RUNTIME} } @@ -268,58 +268,58 @@ WEBOS_SYSTEM_BUS_DIRS_LEGACY_WAM_DEMO_APPLICATION = " \ ${webos_sysbus_containersdir}/${WAM_DEMO_APPLICATION}.container.json \ " -SYSROOT_DIRS_append = " ${base_bindir}" +SYSROOT_DIRS:append = " ${base_bindir}" -PACKAGES_prepend = " \ +PACKAGES:prepend = " \ ${BROWSER_APPLICATION} \ ${APP_SHELL_RUNTIME} \ ${CHROMEDRIVER_RUNTIME} \ ${WAM_DEMO_APPLICATION} \ " -FILES_${BROWSER_APPLICATION} += " \ +FILES:${BROWSER_APPLICATION} += " \ ${BROWSER_APPLICATION_DIR} \ ${WEBOS_SYSTEM_BUS_DIRS_LEGACY_BROWSER_APPLICATION} \ " -FILES_${APP_SHELL_RUNTIME} += " \ +FILES:${APP_SHELL_RUNTIME} += " \ ${APP_SHELL_RUNTIME_DIR} \ ${WEBOS_SYSTEM_BUS_DIRS_ACG_APP_SHELL_RUNTIME} \ ${WEBOS_SYSTEM_BUS_DIRS_LEGACY_APP_SHELL_RUNTIME} \ " -FILES_${CHROMEDRIVER_RUNTIME} += " \ +FILES:${CHROMEDRIVER_RUNTIME} += " \ ${CHROMEDRIVER_RUNTIME_DIR} \ " -FILES_${WAM_DEMO_APPLICATION} += " \ +FILES:${WAM_DEMO_APPLICATION} += " \ ${WAM_DEMO_APPLICATION_DIR} \ ${WEBOS_SYSTEM_BUS_DIRS_LEGACY_WAM_DEMO_APPLICATION} \ " -RDEPENDS_${BROWSER_APPLICATION} += "${PN}" -RDEPENDS_${APP_SHELL_RUNTIME} += "${PN} ${VIRTUAL-RUNTIME_gpu-libs}" +RDEPENDS:${BROWSER_APPLICATION} += "${PN}" +RDEPENDS:${APP_SHELL_RUNTIME} += "${PN} ${VIRTUAL-RUNTIME_gpu-libs}" VIRTUAL-RUNTIME_gpu-libs ?= "" -RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_gpu-libs} ${APP_SHELL_RUNTIME}" -RDEPENDS_${WAM_DEMO_APPLICATION} += "${VIRTUAL-RUNTIME_gpu-libs}" +RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_gpu-libs} ${APP_SHELL_RUNTIME}" +RDEPENDS:${WAM_DEMO_APPLICATION} += "${VIRTUAL-RUNTIME_gpu-libs}" # The text relocations are intentional -- see comments in [GF-52468] # TODO: check if we need INSANE_SKIP on ldflags -INSANE_SKIP_${PN} = "textrel ldflags" -INSANE_SKIP_${PN}-dbg += "libdir" -INSANE_SKIP_${MLPREFIX}${BROWSER_APPLICATION} += "libdir ldflags textrel" -INSANE_SKIP_${MLPREFIX}${APP_SHELL_RUNTIME} += "libdir ldflags textrel" -INSANE_SKIP_${MLPREFIX}${CHROMEDRIVER_RUNTIME} += "libdir ldflags textrel" -INSANE_SKIP_${MLPREFIX}${WAM_DEMO_APPLICATION} += "libdir ldflags textrel" - -FILES_${PN} = " \ +INSANE_SKIP:${PN} = "textrel ldflags" +INSANE_SKIP:${PN}-dbg += "libdir" +INSANE_SKIP:${MLPREFIX}${BROWSER_APPLICATION} += "libdir ldflags textrel" +INSANE_SKIP:${MLPREFIX}${APP_SHELL_RUNTIME} += "libdir ldflags textrel" +INSANE_SKIP:${MLPREFIX}${CHROMEDRIVER_RUNTIME} += "libdir ldflags textrel" +INSANE_SKIP:${MLPREFIX}${WAM_DEMO_APPLICATION} += "libdir ldflags textrel" + +FILES:${PN} = " \ ${libdir}/*.so \ ${CBE_DATA_PATH}/* \ ${libdir}/${BPN}/*.so \ ${WEBOS_SYSTEM_BUS_DIRS} \ " -FILES_${PN}-dev = " \ +FILES:${PN}-dev = " \ ${includedir} \ " diff --git a/meta-webos/recipes-webos/chromium/webruntime_91.bb b/meta-webos/recipes-webos/chromium/webruntime_91.bb index 437efeddd..d0ecda0b7 100644 --- a/meta-webos/recipes-webos/chromium/webruntime_91.bb +++ b/meta-webos/recipes-webos/chromium/webruntime_91.bb @@ -13,12 +13,12 @@ PACKAGECONFIG[debug-blink] = "blink_symbol_level=2,blink_symbol_level=1" PACKAGECONFIG[v8_lite] = "v8_enable_lite_mode=true,v8_enable_lite_mode=false" -GN_ARGS_append = " use_x11=false" +GN_ARGS:append = " use_x11=false" PACKAGECONFIG[google_ozone_wayland] = "import(\"//neva/gow.gn\")" PACKAGECONFIG[intel_ozone_wayland] = "import(\"//neva/iow.gn\")" PACKAGECONFIG += "intel_ozone_wayland" -GN_ARGS_append = " \ +GN_ARGS:append = " \ libdir=\"${libdir}\"\ includedir=\"${includedir}\"\ enable_mojom_closure_compile=false\ @@ -26,4 +26,4 @@ GN_ARGS_append = " \ use_neva_media_player_camera=true\ " -TUNE_FEATURES_remove_raspberrypi4-64 = "crypto" +TUNE_FEATURES:remove:raspberrypi4-64 = "crypto" diff --git a/meta-webos/recipes-webos/chromium/webruntime_94.bb b/meta-webos/recipes-webos/chromium/webruntime_94.bb index 160d962fd..038576a89 100644 --- a/meta-webos/recipes-webos/chromium/webruntime_94.bb +++ b/meta-webos/recipes-webos/chromium/webruntime_94.bb @@ -13,14 +13,14 @@ PACKAGECONFIG[debug-blink] = "blink_symbol_level=2,blink_symbol_level=1" PACKAGECONFIG[v8_lite] = "v8_enable_lite_mode=true,v8_enable_lite_mode=false" -GN_ARGS_append = " neva_dcheck_always_on=true" -GN_ARGS_append = " use_x11=false" +GN_ARGS:append = " neva_dcheck_always_on=true" +GN_ARGS:append = " use_x11=false" PACKAGECONFIG[google_ozone_wayland] = "import(\"//neva/gow.gn\")" PACKAGECONFIG += "google_ozone_wayland" PACKAGECONFIG[intel_ozone_wayland] = "import(\"//neva/iow.gn\")" PACKAGECONFIG += "intel_ozone_wayland" -GN_ARGS_append = " \ +GN_ARGS:append = " \ libdir=\"${libdir}\"\ includedir=\"${includedir}\"\ enable_mojom_closure_compile=false\ diff --git a/meta-webos/recipes-webos/com.example.app.iotivity/com.example.app.iotivity.bb b/meta-webos/recipes-webos/com.example.app.iotivity/com.example.app.iotivity.bb index 9c25bbdcd..adba902d5 100644 --- a/meta-webos/recipes-webos/com.example.app.iotivity/com.example.app.iotivity.bb +++ b/meta-webos/recipes-webos/com.example.app.iotivity/com.example.app.iotivity.bb @@ -3,7 +3,7 @@ DESCRIPTION = "iotivity webapp sample provides server and client application wri HOMEPAGE = "https://www.iotivity.org/" DEPENDS = "boost virtual/gettext chrpath-replacement-native expat openssl util-linux curl glib-2.0 glib-2.0-native" DEPENDS += "sqlite3 luna-service2 libpbnjson iotivity" -RDEPENDS_${PN} = "iotivity-resource" +RDEPENDS:${PN} = "iotivity-resource" SECTION = "webos/apps" LICENSE = "Apache-2.0" @@ -29,18 +29,18 @@ WEBOS_ENACTJS_PROJECT_PATH ??= "./resource/csdk/stack/samples/webos/com.example. WEBOS_ENACTJS_SHRINKWRAP_OVERRIDE = "false" WEBOS_ENACTJS_APP_ID = "com.example.app.iotivity" -FILES_${PN} = "\ +FILES:${PN} = "\ ${webos_applicationsdir} \ ${datadir}/luna-service2 \ " # iotivity doesn't build for armv[45]* COMPATIBLE_MACHINE = "(-)" -COMPATIBLE_MACHINE_aarch64 = "(.*)" -COMPATIBLE_MACHINE_armv6 = "(.*)" -COMPATIBLE_MACHINE_armv7a = "(.*)" -COMPATIBLE_MACHINE_armv7ve = "(.*)" -COMPATIBLE_MACHINE_x86 = "(.*)" -COMPATIBLE_MACHINE_x86-64 = "(.*)" +COMPATIBLE_MACHINE:aarch64 = "(.*)" +COMPATIBLE_MACHINE:armv6 = "(.*)" +COMPATIBLE_MACHINE:armv7a = "(.*)" +COMPATIBLE_MACHINE:armv7ve = "(.*)" +COMPATIBLE_MACHINE:x86 = "(.*)" +COMPATIBLE_MACHINE:x86-64 = "(.*)" SRC_URI += "file://0001-webOS-Fix-UI-bug-in-iotivity-sampler.patch" diff --git a/meta-webos/recipes-webos/com.example.service.iotivity/com.example.service.iotivity.bb b/meta-webos/recipes-webos/com.example.service.iotivity/com.example.service.iotivity.bb index 3c546b93b..3a6410c66 100644 --- a/meta-webos/recipes-webos/com.example.service.iotivity/com.example.service.iotivity.bb +++ b/meta-webos/recipes-webos/com.example.service.iotivity/com.example.service.iotivity.bb @@ -3,7 +3,7 @@ DESCRIPTION = "Provides server and client services written in JavaScript. Server HOMEPAGE = "https://www.iotivity.org/" DEPENDS = "boost virtual/gettext chrpath-replacement-native expat openssl util-linux curl glib-2.0 glib-2.0-native" DEPENDS += "sqlite3 luna-service2 libpbnjson iotivity" -RDEPENDS_${PN} = "iotivity-resource" +RDEPENDS:${PN} = "iotivity-resource" SECTION = "webos/apps" LICENSE = "Apache-2.0" @@ -23,7 +23,7 @@ PV = "1.3.99+git${SRCPV}" inherit pkgconfig webos_component webos_filesystem_paths -do_install_append() { +do_install:append() { # Application / dat files install -d -g 5000 -m 0775 ${D}${webos_servicesdir}/com.example.service.iotivity.server install -d -g 5000 -m 0775 ${D}${webos_servicesdir}/com.example.service.iotivity.client @@ -53,16 +53,16 @@ do_install_append() { install -v -m 0644 ${S}/resource/csdk/stack/samples/webos/com.example.app.iotivity/services/com.example.service.iotivity.client/files/sysbus/com.example.service.iotivity.client.groups.json ${D}${datadir}/luna-service2/groups.d } -FILES_${PN} = "\ +FILES:${PN} = "\ ${webos_servicesdir} \ ${datadir}/luna-service2 \ " # iotivity doesn't build for armv[45]* COMPATIBLE_MACHINE = "(-)" -COMPATIBLE_MACHINE_aarch64 = "(.*)" -COMPATIBLE_MACHINE_armv6 = "(.*)" -COMPATIBLE_MACHINE_armv7a = "(.*)" -COMPATIBLE_MACHINE_armv7ve = "(.*)" -COMPATIBLE_MACHINE_x86 = "(.*)" -COMPATIBLE_MACHINE_x86-64 = "(.*)" +COMPATIBLE_MACHINE:aarch64 = "(.*)" +COMPATIBLE_MACHINE:armv6 = "(.*)" +COMPATIBLE_MACHINE:armv7a = "(.*)" +COMPATIBLE_MACHINE:armv7ve = "(.*)" +COMPATIBLE_MACHINE:x86 = "(.*)" +COMPATIBLE_MACHINE:x86-64 = "(.*)" diff --git a/meta-webos/recipes-webos/com.palm.service.devmode/com.palm.service.devmode.bb b/meta-webos/recipes-webos/com.palm.service.devmode/com.palm.service.devmode.bb index 41579922b..358ec5501 100644 --- a/meta-webos/recipes-webos/com.palm.service.devmode/com.palm.service.devmode.bb +++ b/meta-webos/recipes-webos/com.palm.service.devmode/com.palm.service.devmode.bb @@ -24,18 +24,18 @@ SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" # touch /var/luna/preferences/devmode_enabled in emulator build -do_install_append_emulator() { +do_install:append:emulator() { install -d ${D}${webos_sysmgr_localstatedir}/preferences touch ${D}${webos_sysmgr_localstatedir}/preferences/devmode_enabled } # touch /var/luna/preferences/devmode_enabled in webOS OSE build -do_install_append_webos() { +do_install:append:webos() { install -d ${D}${webos_sysmgr_localstatedir}/preferences touch ${D}${webos_sysmgr_localstatedir}/preferences/devmode_enabled } -do_install_append() { +do_install:append() { mkdir -p ${D}${webos_sysbus_manifestsdir} cat > "${D}${webos_sysbus_manifestsdir}/${BPN}.manifest.json" < don't stage it. -sysroot_stage_dirs_append() { +sysroot_stage_dirs:append() { # ${to} is the 2nd parameter passed to sysroot_stage_dir(), # e.g. ${SYSROOT_DESTDIR} passed from sysroot_stage_all() rm -vrf ${to}${webos_sysbus_datadir} diff --git a/meta-webos/recipes-webos/luna-service2/luna-service2.bb b/meta-webos/recipes-webos/luna-service2/luna-service2.bb index 3cc0dbb85..9a4f712b0 100644 --- a/meta-webos/recipes-webos/luna-service2/luna-service2.bb +++ b/meta-webos/recipes-webos/luna-service2/luna-service2.bb @@ -12,7 +12,7 @@ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ DEPENDS = "libpbnjson pmloglib glib-2.0 gtest systemd" VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN} = "luna-service2-security-conf ${VIRTUAL-RUNTIME_cpushareholder} ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN} = "luna-service2-security-conf ${VIRTUAL-RUNTIME_cpushareholder} ${VIRTUAL-RUNTIME_bash}" WEBOS_VERSION = "3.21.2-27_0ee0f9692363f615f9e70c251827be79810d4f27" PR = "r28" @@ -39,7 +39,7 @@ S = "${WORKDIR}/git" # This fix-up will be removed shortly. luna-service2 headers must be included # using '#include ' -do_install_append() { +do_install:append() { # XXX Temporarily, create links from the old locations until all users of # luna-service2 convert to using pkg-config ln -svnf luna-service2/lunaservice.h ${D}${includedir}/lunaservice.h @@ -49,7 +49,7 @@ do_install_append() { # Disable LTTng tracepoints explicitly. # LTTng tracepoints in LS2 can cause out of memory, because LS2 is used by many components. -# To enable tracepoints back use WEBOS_LTTNG_ENABLED_pn-luna-service2 = "1" +# To enable tracepoints back use WEBOS_LTTNG_ENABLED:pn-luna-service2 = "1" WEBOS_LTTNG_ENABLED = "0" EXTRA_OECMAKE += " ${@bb.utils.contains('WEBOS_LTTNG_ENABLED', '1', '-DWEBOS_LTTNG_ENABLED:BOOLEAN=True', '', d)}" @@ -58,12 +58,12 @@ EXTRA_OECMAKE += '${@oe.utils.conditional("WEBOS_DISABLE_LS2_SECURITY", "1", "-D PACKAGES += "${PN}-perf" -FILES_${PN}-perf += "${webos_testsdir}/${BPN}-perf" +FILES:${PN}-perf += "${webos_testsdir}/${BPN}-perf" # Disable QA checks which are now triggered after moving the webos_testsdir from /opt to /usr/opt # luna-service2-ptest: found library in wrong location: /usr/opt/webos/tests/luna-service2/lib/libls-hublib-test.so -INSANE_SKIP_${PN}-ptest += "libdir" +INSANE_SKIP:${PN}-ptest += "libdir" # luna-service2-dbg: found library in wrong location: /usr/opt/webos/tests/luna-service2/lib/.debug/libls-hublib-test.so -INSANE_SKIP_${PN}-dbg += "libdir" +INSANE_SKIP:${PN}-dbg += "libdir" SRC_URI += "file://0001-util.hpp-hub_service.hpp-include-string-to-fix-build.patch" diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index 3874b0fee..c348ded68 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -33,12 +33,12 @@ EXTRA_QMAKEVARS_PRE += "${PACKAGECONFIG_CONFARGS}" # We don't support configuring via cmake EXTRA_QMAKEVARS_POST += "CONFIG-=create_cmake" -FILES_${PN}-dev += " \ +FILES:${PN}-dev += " \ ${OE_QMAKE_PATH_QT_ARCHDATA}/mkspecs/* \ ${OE_QMAKE_PATH_LIBS}/*.prl \ " -do_install_append() { +do_install:append() { sed -i 's@prefix=${STAGING_DIR_HOST}@prefix=@g;s@-L${STAGING_DIR_HOST} @ @g;' ${D}${libdir}/pkgconfig/*.pc sed -i "s@-L${STAGING_LIBDIR}@-L\${libdir}@g" ${D}${libdir}/pkgconfig/*.pc if ${@bb.utils.contains('PACKAGECONFIG', 'compositor', 'true', 'false', d)}; then @@ -52,11 +52,11 @@ do_install_append() { fi } -TARGET_CXXFLAGS_append = " ${@bb.utils.contains('IMAGE_FEATURES', 'webos-test', '--coverage -fprofile-dir=/tmp/luna-surfacemanager-gcov -O0', '', d)}" -TARGET_LDFLAGS_append = " ${@bb.utils.contains('IMAGE_FEATURES', 'webos-test', '--coverage', '', d)}" +TARGET_CXXFLAGS:append = " ${@bb.utils.contains('IMAGE_FEATURES', 'webos-test', '--coverage -fprofile-dir=/tmp/luna-surfacemanager-gcov -O0', '', d)}" +TARGET_LDFLAGS:append = " ${@bb.utils.contains('IMAGE_FEATURES', 'webos-test', '--coverage', '', d)}" VIRTUAL-RUNTIME_gpu-libs ?= "" -RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_gpu-libs}" +RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_gpu-libs}" inherit webos_system_bus inherit webos_qmllint @@ -73,17 +73,17 @@ PACKAGECONFIG[compositor] = "CONFIG+=compositor_base,,qt-features-webos-native" PACKAGECONFIG[multi-input] = ",CONFIG+=no_multi_input," PACKAGECONFIG[cursor-theme] = "CONFIG+=cursor_theme,," -PACKAGECONFIG_webos = "compositor cursor-theme" +PACKAGECONFIG:webos = "compositor cursor-theme" PACKAGE_BEFORE_PN = "${PN}-gcov" -FILES_${PN}-gcov = " \ +FILES:${PN}-gcov = " \ ${libdir}/${BPN}/*.gcno \ " PACKAGES =+ "${PN}-conf ${PN}-base ${PN}-base-tests" -FILES_${PN}-conf += " \ +FILES:${PN}-conf += " \ ${sysconfdir}/surface-manager.d/ \ ${webos_sysbus_apipermissionsdir} \ ${webos_sysbus_groupsdir} \ @@ -93,7 +93,7 @@ FILES_${PN}-conf += " \ ${webos_sysbus_rolesdir}/com.webos.surfacemanager.role.json \ " -FILES_${PN}-base += " \ +FILES:${PN}-base += " \ ${OE_QMAKE_PATH_QML}/WebOSCompositorBase/ \ ${OE_QMAKE_PATH_QML}/WebOSCompositor/ \ ${OE_QMAKE_PATH_BINS}/ \ @@ -101,7 +101,7 @@ FILES_${PN}-base += " \ ${datadir}/webos-keymap/webos-keymap.qmap \ " -FILES_${PN}-base-tests += " \ +FILES:${PN}-base-tests += " \ ${webos_applicationsdir}/ \ ${webos_sysbus_manifestsdir}/ \ ${webos_sysbus_permissionsdir}/ \ @@ -109,4 +109,4 @@ FILES_${PN}-base-tests += " \ ${webos_testsdir}/${BPN}/ \ " -RDEPENDS_${PN}-base += "xkeyboard-config qml-webos-framework qml-webos-bridge qml-webos-components" +RDEPENDS:${PN}-base += "xkeyboard-config qml-webos-framework qml-webos-bridge qml-webos-components" diff --git a/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb b/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb index 83e27850e..853a47571 100644 --- a/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb +++ b/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb @@ -12,7 +12,7 @@ VIRTUAL-RUNTIME_ntp ?= "sntp" DEPENDS = "luna-service2 libpbnjson qtbase uriparser libxml2 sqlite3 pmloglib nyx-lib libwebosi18n" -RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_ntp} tzcode" +RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_ntp} tzcode" WEBOS_VERSION = "4.4.0-21_2d1e59312b516465d40ebcf45559cc3a40578ac6" PR = "r9" @@ -28,9 +28,9 @@ inherit webos_cmake_qt6 SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" -do_install_append() { +do_install:append() { install -d ${D}${datadir}/localization/${BPN} cp -rf ${S}/resources ${D}/${datadir}/localization/${BPN} } -FILES_${PN} += "${datadir}/localization/${BPN}" +FILES:${PN} += "${datadir}/localization/${BPN}" diff --git a/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb b/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb index 7aa03eb01..fbee0d736 100644 --- a/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb +++ b/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ " DEPENDS = "qtbase qtdeclarative qtwayland-webos libxkbcommon pmloglib luna-service2 glib-2.0 udev wayland" -RDEPENDS_${PN} = "qtbase-plugins configd" +RDEPENDS:${PN} = "qtbase-plugins configd" PACKAGECONFIG[libim] = "CONFIG+=enable-libim,CONFIG-=enable-libim,libim" @@ -39,7 +39,7 @@ EXTRA_QMAKEVARS_PRE += "${EXTRA_CONF_PACKAGECONFIG}" # .pc generation should be fixed to use correct paths SSTATE_SCAN_FILES += "*.prf *.pc" -do_install_append() { +do_install:append() { # headers install -d ${D}${includedir}/maliit install -v -m 644 ${S}/common/maliit/*.h ${D}${includedir}/maliit/ @@ -47,11 +47,11 @@ do_install_append() { install -v -m 644 ${S}/src/maliit/plugins/*.h ${D}${includedir}/maliit/plugins/ } -FILES_${PN}-dev += "${OE_QMAKE_PATH_QT_ARCHDATA}/mkspecs" +FILES:${PN}-dev += "${OE_QMAKE_PATH_QT_ARCHDATA}/mkspecs" -do_install_append() { +do_install:append() { sed -i 's@libdir=${STAGING_LIBDIR}@libdir=${libdir}@g' ${D}${libdir}/pkgconfig/*.pc sed -i 's@includedir=${STAGING_INCDIR}@includedir=${includedir}@g' ${D}${libdir}/pkgconfig/*.pc } -FILES_${PN} += "${OE_QMAKE_PATH_QT_ARCHDATA}" +FILES:${PN} += "${OE_QMAKE_PATH_QT_ARCHDATA}" diff --git a/meta-webos/recipes-webos/mojoloader/mojoloader.bb b/meta-webos/recipes-webos/mojoloader/mojoloader.bb index d7500ca52..c7993ccf3 100644 --- a/meta-webos/recipes-webos/mojoloader/mojoloader.bb +++ b/meta-webos/recipes-webos/mojoloader/mojoloader.bb @@ -23,4 +23,4 @@ do_install() { install -v -m 0644 ${S}/mojoloader.js ${D}${webos_frameworksdir} } -FILES_${PN} += "${webos_frameworksdir}" +FILES:${PN} += "${webos_frameworksdir}" diff --git a/meta-webos/recipes-webos/mojoservicelauncher/mojoservicelauncher.bb b/meta-webos/recipes-webos/mojoservicelauncher/mojoservicelauncher.bb index e5e4a9100..d4bb0ee27 100644 --- a/meta-webos/recipes-webos/mojoservicelauncher/mojoservicelauncher.bb +++ b/meta-webos/recipes-webos/mojoservicelauncher/mojoservicelauncher.bb @@ -8,14 +8,14 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7ca file://oss-pkg-info.yaml;md5=bc052cc0f232b815569ebc81a4ef6490" DEPENDS = "boost libpbnjson" -RDEPENDS_${PN} = "nodejs" +RDEPENDS:${PN} = "nodejs" # fork_server.js wants to load these: -RDEPENDS_${PN} += "nodejs-module-webos-dynaload nodejs-module-webos-pmlog nodejs-module-webos-sysbus mojoloader" +RDEPENDS:${PN} += "nodejs-module-webos-dynaload nodejs-module-webos-pmlog nodejs-module-webos-sysbus mojoloader" # The same restrition as nodejs -COMPATIBLE_MACHINE_armv4 = "(!.*armv4).*" -COMPATIBLE_MACHINE_armv5 = "(!.*armv5).*" -COMPATIBLE_MACHINE_mips64 = "(!.*mips64).*" +COMPATIBLE_MACHINE:armv4 = "(!.*armv4).*" +COMPATIBLE_MACHINE:armv5 = "(!.*armv5).*" +COMPATIBLE_MACHINE:mips64 = "(!.*mips64).*" WEBOS_VERSION = "3.0.2-6_93522aafb7807afe2109cc5fd33e1d5258d4fbb6" PR = "r9" @@ -30,4 +30,4 @@ inherit webos_distro_variant_dep SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" -FILES_${PN} += "${webos_prefix}/nodejs ${webos_servicesdir} ${webos_frameworksdir}" +FILES:${PN} += "${webos_prefix}/nodejs ${webos_servicesdir} ${webos_frameworksdir}" diff --git a/meta-webos/recipes-webos/nodejs-module-ext/nodejs-module-node-red_0.18.7.bb b/meta-webos/recipes-webos/nodejs-module-ext/nodejs-module-node-red_0.18.7.bb index 1cc29902c..251403cab 100644 --- a/meta-webos/recipes-webos/nodejs-module-ext/nodejs-module-node-red_0.18.7.bb +++ b/meta-webos/recipes-webos/nodejs-module-ext/nodejs-module-node-red_0.18.7.bb @@ -9,12 +9,12 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=d6f37569f5013072e9490d2194d10ae6" PR = "r3" DEPENDS += "nodejs-native" -RDEPENDS_${PN} = "nodejs" +RDEPENDS:${PN} = "nodejs" # The same restrition as nodejs -COMPATIBLE_MACHINE_armv4 = "(!.*armv4).*" -COMPATIBLE_MACHINE_armv5 = "(!.*armv5).*" -COMPATIBLE_MACHINE_mips64 = "(!.*mips64).*" +COMPATIBLE_MACHINE:armv4 = "(!.*armv4).*" +COMPATIBLE_MACHINE:armv5 = "(!.*armv5).*" +COMPATIBLE_MACHINE:mips64 = "(!.*mips64).*" # If uncomment under 'TODO' on do_install step, # this package will provide much more things actually. (e.g. express) @@ -39,12 +39,12 @@ do_install() { # mv ${TARGET_DIR}/node-red/node_modules/* ${TARGET_DIR} } -FILES_${PN} += "${libdir}/node_modules" +FILES:${PN} += "${libdir}/node_modules" -# ERROR: QA Issue: /usr/lib/node_modules/node-red/nodes/core/hardware/nrgpio contained in package nodejs-module-node-red requires /bin/bash, but no providers found in RDEPENDS_nodejs-module-node-red? [file-rdeps] +# ERROR: QA Issue: /usr/lib/node_modules/node-red/nodes/core/hardware/nrgpio contained in package nodejs-module-node-red requires /bin/bash, but no providers found in RDEPENDS:nodejs-module-node-red? [file-rdeps] VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS_${PN}_remove_class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" # From 0.19.0 https://github.com/node-red/node-red/commit/4bcf13cb58869902e3d62294af91eeece5c93497 SRC_URI += "file://python3.patch" diff --git a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-sysbus.bb b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-sysbus.bb index 59a6e564b..ea5b8f902 100644 --- a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-sysbus.bb +++ b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-sysbus.bb @@ -28,7 +28,7 @@ do_compile() { WEBOS_NODE = "webos-sysbus.node" -do_install_append() { +do_install:append() { install ${S}/src/palmbus.js ${D}${libdir}/nodejs/palmbus.js # The CMake build did this with macros install -d ${D}${webos_sysbus_rolesdir} diff --git a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos.inc b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos.inc index 65dec1525..c9f3ec85d 100644 --- a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos.inc +++ b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos.inc @@ -26,12 +26,12 @@ SRC_URI[node.sha256sum] = "e00eee325d705b2bfa9929b7d061eb2315402d7e8548945eac987 S = "${WORKDIR}/git" -do_configure_prepend() { +do_configure:prepend() { export HOME=${WORKDIR} export LD="${CXX}" } -do_compile_prepend() { +do_compile:prepend() { export HOME=${WORKDIR} export LD="${CXX}" } @@ -41,4 +41,4 @@ do_install() { install ${S}/build/Release/${WEBOS_NODE} ${D}${libdir}/nodejs/${WEBOS_NODE} } -FILES_${PN} += "${libdir}/nodejs" +FILES:${PN} += "${libdir}/nodejs" diff --git a/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb b/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb index 46a5cf5c1..202c894ec 100644 --- a/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb +++ b/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb @@ -23,4 +23,4 @@ inherit webos_public_repo SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" -FILES_${PN} += "${webos_prefix}" +FILES:${PN} += "${webos_prefix}" diff --git a/meta-webos/recipes-webos/nyx-lib/nyx-lib.bb b/meta-webos/recipes-webos/nyx-lib/nyx-lib.bb index b7cc5fec5..9f57a1591 100644 --- a/meta-webos/recipes-webos/nyx-lib/nyx-lib.bb +++ b/meta-webos/recipes-webos/nyx-lib/nyx-lib.bb @@ -13,7 +13,7 @@ SECTION = "webos/libs" # here because nyx-modules is MACHINE_ARCH (e.g. qemux86), while nyx-lib is # TUNE_PKGARCH (e.g. i586). Instead, it is pulled into the image by adding it to # the RDPENDS_${PN} of packagegroup-webos-extended. Putting -# RDEPENDS_${PN} = "nyx-modules" +# RDEPENDS:${PN} = "nyx-modules" # here would cause bitbake to re-execute the do_package task for each MACHINE, # even if these MACHINE-s were all i586 and should therefore share the same nyx-lib # .ipk and sstate files. (The reason do_package is re-executed when a component diff --git a/meta-webos/recipes-webos/nyx-modules/nyx-modules.bb b/meta-webos/recipes-webos/nyx-modules/nyx-modules.bb index d18ac8ade..3249b6bef 100644 --- a/meta-webos/recipes-webos/nyx-modules/nyx-modules.bb +++ b/meta-webos/recipes-webos/nyx-modules/nyx-modules.bb @@ -11,7 +11,7 @@ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ DEPENDS = "nyx-lib glib-2.0 luna-service2 openssl udev" -RDEPENDS_${PN} = "lsb-release gzip" +RDEPENDS:${PN} = "lsb-release gzip" WEBOS_VERSION = "7.1.0-18_75df81a8aaf23947e80f94161197b15712e294ed" PR = "r18" diff --git a/meta-webos/recipes-webos/nyx-utils/nyx-utils.bb b/meta-webos/recipes-webos/nyx-utils/nyx-utils.bb index 7f0bfe86b..a8f365214 100644 --- a/meta-webos/recipes-webos/nyx-utils/nyx-utils.bb +++ b/meta-webos/recipes-webos/nyx-utils/nyx-utils.bb @@ -23,4 +23,4 @@ inherit webos_program SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" -FILES_${PN} += "${libdir}/nyx/nyxcmd/" +FILES:${PN} += "${libdir}/nyx/nyxcmd/" diff --git a/meta-webos/recipes-webos/openwnn-webos/openwnn-webos.bb b/meta-webos/recipes-webos/openwnn-webos/openwnn-webos.bb index f1a7577db..81348a604 100755 --- a/meta-webos/recipes-webos/openwnn-webos/openwnn-webos.bb +++ b/meta-webos/recipes-webos/openwnn-webos/openwnn-webos.bb @@ -17,11 +17,11 @@ PR = "r1" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" -do_install_append() { +do_install:append() { install -d ${D}${libdir}/maliit/plugins install -m 755 ${S}/libWnnJpn.so ${D}${libdir}/maliit/plugins } TARGET_CC_ARCH += "${LDFLAGS}" -FILES_${PN} += "${libdir}/maliit/plugins/" +FILES:${PN} += "${libdir}/maliit/plugins/" diff --git a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb index df28a567a..87b62db69 100644 --- a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb +++ b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb @@ -3,7 +3,7 @@ DESCRIPTION = "iotivity-native-sample provides server and client application wri HOMEPAGE = "https://www.iotivity.org/" DEPENDS = "boost virtual/gettext chrpath-replacement-native expat openssl util-linux curl glib-2.0 glib-2.0-native" DEPENDS += "sqlite3 luna-service2 libpbnjson iotivity" -RDEPENDS_${PN} = "iotivity-resource" +RDEPENDS:${PN} = "iotivity-resource" SECTION = "webos/apps" LICENSE = "Apache-2.0" @@ -44,14 +44,14 @@ EXTRA_OESCONS += " \ VERBOSE=1 \ " -do_compile_append() { +do_compile:append() { export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}" export PKG_CONFIG="PKG_CONFIG_SYSROOT_DIR=\"${PKG_CONFIG_SYSROOT_DIR}\" pkg-config" export LD_FLAGS="${LD_FLAGS}" scons_do_compile } -do_install_append() { +do_install:append() { # Application / dat files install -d ${D}${webos_servicesdir}/org.ocf.webossample.occlientbasicops @@ -71,7 +71,7 @@ do_install_append() { install -c -m 555 ${S}/resource/csdk/stack/samples/webos/secure/files/sysbus/occlientbasicops.manifest.json ${D}${datadir}/luna-service2/manifests.d } -FILES_${PN} = "\ +FILES:${PN} = "\ ${webos_servicesdir}/org.ocf.webossample.* \ ${datadir}/luna-service2 \ " @@ -80,10 +80,10 @@ BBCLASSEXTEND = "native nativesdk" # iotivity doesn't build for armv[45]* COMPATIBLE_MACHINE = "(-)" -COMPATIBLE_MACHINE_aarch64 = "(.*)" -COMPATIBLE_MACHINE_armv6 = "(.*)" -COMPATIBLE_MACHINE_armv7a = "(.*)" -COMPATIBLE_MACHINE_armv7ve = "(.*)" -COMPATIBLE_MACHINE_x86 = "(.*)" +COMPATIBLE_MACHINE:aarch64 = "(.*)" +COMPATIBLE_MACHINE:armv6 = "(.*)" +COMPATIBLE_MACHINE:armv7a = "(.*)" +COMPATIBLE_MACHINE:armv7ve = "(.*)" +COMPATIBLE_MACHINE:x86 = "(.*)" SRC_URI += "file://0001-Fix-missing-return-statement.patch" diff --git a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb index b9b4d08f8..6dd0d8876 100644 --- a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb +++ b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb @@ -3,7 +3,7 @@ DESCRIPTION = "iotivity-native-sample provides server and client application wri HOMEPAGE = "https://www.iotivity.org/" DEPENDS = "boost virtual/gettext chrpath-replacement-native expat openssl util-linux curl glib-2.0 glib-2.0-native" DEPENDS += "sqlite3 luna-service2 libpbnjson iotivity" -RDEPENDS_${PN} = "iotivity-resource" +RDEPENDS:${PN} = "iotivity-resource" SECTION = "webos/apps" LICENSE = "Apache-2.0" @@ -42,14 +42,14 @@ EXTRA_OESCONS += " \ VERBOSE=1 \ " -do_compile_append() { +do_compile:append() { export PKG_CONFIG_PATH="${PKG_CONFIG_PATH}" export PKG_CONFIG="PKG_CONFIG_SYSROOT_DIR=\"${PKG_CONFIG_SYSROOT_DIR}\" pkg-config" export LD_FLAGS="${LD_FLAGS}" scons_do_compile } -do_install_append() { +do_install:append() { # Application / dat files install -d ${D}${webos_servicesdir}/org.ocf.webossample.ocserverbasicops @@ -69,7 +69,7 @@ do_install_append() { install -c -m 555 ${S}/resource/csdk/stack/samples/webos/secure/files/sysbus/ocserverbasicops.manifest.json ${D}${datadir}/luna-service2/manifests.d } -FILES_${PN} = "\ +FILES:${PN} = "\ ${webos_servicesdir}/org.ocf.webossample.* \ ${datadir}/luna-service2 \ " @@ -78,11 +78,11 @@ BBCLASSEXTEND = "native nativesdk" # iotivity doesn't build for armv[45]* COMPATIBLE_MACHINE = "(-)" -COMPATIBLE_MACHINE_aarch64 = "(.*)" -COMPATIBLE_MACHINE_armv6 = "(.*)" -COMPATIBLE_MACHINE_armv7a = "(.*)" -COMPATIBLE_MACHINE_armv7ve = "(.*)" -COMPATIBLE_MACHINE_x86 = "(.*)" +COMPATIBLE_MACHINE:aarch64 = "(.*)" +COMPATIBLE_MACHINE:armv6 = "(.*)" +COMPATIBLE_MACHINE:armv7a = "(.*)" +COMPATIBLE_MACHINE:armv7ve = "(.*)" +COMPATIBLE_MACHINE:x86 = "(.*)" SRC_URI += " \ file://0001-Fix-missing-return-statement.patch \ diff --git a/meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb b/meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb index f43b96d01..a3ef7fb8f 100644 --- a/meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb +++ b/meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7ca DEPENDS = "pmloglib zlib glib-2.0 libpbnjson pmloglib-private luna-service2" # show_disk_usage.sh script uses mktemp, find, xargs, and du, all of which are # provided by busybox. -RDEPENDS_${PN} = "busybox" +RDEPENDS:${PN} = "busybox" WEBOS_VERSION = "3.1.0-13_17f40f7074f3f0a54395e6b1bc6b29af02d46fb8" PR = "r11" @@ -32,9 +32,9 @@ SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE} \ " S = "${WORKDIR}/git" -do_install_append() { +do_install:append() { if ${@bb.utils.contains('PACKAGECONFIG', 'whitelist', 'true', 'false', d)} ; then install -m 644 ${WORKDIR}/whitelist.txt ${D}${sysconfdir}/PmLogDaemon fi } -FILES_${PN} += "${datadir}/PmLogDaemon" +FILES:${PN} += "${datadir}/PmLogDaemon" diff --git a/meta-webos/recipes-webos/pmtrace/pmtrace.bb b/meta-webos/recipes-webos/pmtrace/pmtrace.bb index 35c0c7396..d7a285709 100644 --- a/meta-webos/recipes-webos/pmtrace/pmtrace.bb +++ b/meta-webos/recipes-webos/pmtrace/pmtrace.bb @@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = "file://LICENSE.LGPL;md5=e2aa4f66375a24019b0ff5e99cec40ad \ DEPENDS = "lttng-ust libpbnjson pmloglib glib-2.0" -RDEPENDS_${PN} += " \ +RDEPENDS:${PN} += " \ babeltrace \ lttng-tools \ lttng-modules \ diff --git a/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb b/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb index f0dffd231..1eb47b455 100644 --- a/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb +++ b/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ " DEPENDS = "qtdeclarative luna-service2 glib-2.0" -DEPENDS_append = " ${@ 'qtshadertools-native' if d.getVar('QT_VERSION', True) == '6' else '' }" +DEPENDS:append = " ${@ 'qtshadertools-native' if d.getVar('QT_VERSION', True) == '6' else '' }" WEBOS_VERSION = "1.0.0-6_ad9b0aee66408b214d5f4d61b9912ed411da2f00" PR = "r4" @@ -25,4 +25,4 @@ S = "${WORKDIR}/git" QMAKE_PROFILES = "${S}/qml-app-components.pro" OE_QMAKE_PATH_HEADERS = "${OE_QMAKE_PATH_QT_HEADERS}" -FILES_${PN} += "${OE_QMAKE_PATH_QML}/QmlAppComponents/*" +FILES:${PN} += "${OE_QMAKE_PATH_QML}/QmlAppComponents/*" diff --git a/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb b/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb index d2b479f56..5994e042a 100644 --- a/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb +++ b/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb @@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = " \ " DEPENDS = "qtdeclarative luna-service2 glib-2.0" -RDEPENDS_${PN} += "qml-webos-components" +RDEPENDS:${PN} += "qml-webos-components" WEBOS_VERSION = "1.0.0-129_6f44cfcb4f33f3f8d6997c5bbcf88ba7bb9e5e3a" PR = "r18" @@ -29,4 +29,4 @@ OE_QMAKE_PATH_HEADERS = "${OE_QMAKE_PATH_QT_HEADERS}" # Perform extra QML validation WEBOS_QMLLINT_EXTRA_VALIDATION = "1" -FILES_${PN} += "${OE_QMAKE_PATH_QML}/WebOSServices/*" +FILES:${PN} += "${OE_QMAKE_PATH_QML}/WebOSServices/*" diff --git a/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb b/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb index 22fed23ee..c592202a5 100644 --- a/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb +++ b/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb @@ -39,4 +39,4 @@ EXTRA_QMAKEVARS_PRE += "${@ 'CONFIG+=lttng' if '${WEBOS_LTTNG_ENABLED}' == '1' e # Base directory of localization data EXTRA_QMAKEVARS_PRE += "WEBOS_QT_LOCALIZATION_QM_BASEDIR=${datadir}/qml/locales" -FILES_${PN} += "${OE_QMAKE_PATH_QML}" +FILES:${PN} += "${OE_QMAKE_PATH_QML}" diff --git a/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb b/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb index f0c107ba9..772dc4b13 100644 --- a/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb +++ b/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb @@ -10,10 +10,10 @@ LIC_FILES_CHKSUM = " \ " DEPENDS = "qt-features-webos qtdeclarative qtwayland-webos pmloglib luna-service2 qttools-native" -DEPENDS_append = " ${@ 'qtshadertools-native' if d.getVar('QT_VERSION', True) == '6' else '' }" -RDEPENDS_${PN} = "qtgraphicaleffects-qmlplugins" +DEPENDS:append = " ${@ 'qtshadertools-native' if d.getVar('QT_VERSION', True) == '6' else '' }" +RDEPENDS:${PN} = "qtgraphicaleffects-qmlplugins" -RPROVIDES_${PN}-examples = " \ +RPROVIDES:${PN}-examples = " \ eos.bare \ eos.widgetgallery \ " @@ -39,21 +39,21 @@ OE_QMAKE_PATH_HEADERS = "${OE_QMAKE_PATH_QT_HEADERS}" # Perform extra QML validation WEBOS_QMLLINT_EXTRA_VALIDATION = "1" -FILES_${PN} += "${OE_QMAKE_PATH_QML}/Eos/*" +FILES:${PN} += "${OE_QMAKE_PATH_QML}/Eos/*" PACKAGES += "${PN}-examples" -FILES_${PN}-examples += " \ +FILES:${PN}-examples += " \ ${webos_applicationsdir}/* \ ${datadir}/qml/locales/${BPN}/ \ " # unit-tests PACKAGES =+ "${PN}-tests" -FILES_${PN}-tests += "${datadir}/booster/tests/*" +FILES:${PN}-tests += "${datadir}/booster/tests/*" # SDK tools PACKAGES += "${PN}-tools" -FILES_${PN}-tools += "${webos_sdkdir}/*" +FILES:${PN}-tools += "${webos_sdkdir}/*" # we don't provide cmake tests EXTRA_QMAKEVARS_POST += "CONFIG-=create_cmake" diff --git a/meta-webos/recipes-webos/qt-features-webos/qt-features-webos.bb b/meta-webos/recipes-webos/qt-features-webos/qt-features-webos.bb index 5e02d9ea5..f8fbb8e7b 100644 --- a/meta-webos/recipes-webos/qt-features-webos/qt-features-webos.bb +++ b/meta-webos/recipes-webos/qt-features-webos/qt-features-webos.bb @@ -21,17 +21,17 @@ inherit webos_public_repo SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" -FILES_${PN}-dev += "${OE_QMAKE_PATH_QT_ARCHDATA}/mkspecs" +FILES:${PN}-dev += "${OE_QMAKE_PATH_QT_ARCHDATA}/mkspecs" # An empty package is needed to satisfy package dependencies when building bdk. -ALLOW_EMPTY_${PN} = "1" +ALLOW_EMPTY:${PN} = "1" BBCLASSEXTEND = "native" -do_configure_class-native() { +do_configure:class-native() { ${OE_QMAKE_QMAKE} ${OE_QMAKE_DEBUG_OUTPUT} -r ${S}/tools/generate_qmap } -do_install_class-native() { +do_install:class-native() { oe_runmake install INSTALL_ROOT=${D} } diff --git a/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb index eef9e1a70..e2b40039d 100644 --- a/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb +++ b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb @@ -28,8 +28,8 @@ PACKAGECONFIG ??= "" # Emulator PACKAGECONFIG[emulator] = "CONFIG+=emulator,,nyx-lib" -PACKAGECONFIG_append_emulator = " emulator" -SRC_URI_append_emulator = " \ +PACKAGECONFIG:append:emulator = " emulator" +SRC_URI:append:emulator = " \ file://0001-virtual-touch-for-emulator.patch \ file://0002-Disable-mouse-wheel-on-touch-mode-for-emulator.patch \ " @@ -40,6 +40,6 @@ PACKAGECONFIG[plane-composition] = "CONFIG+=plane_composition,," # EGL Protected content PACKAGECONFIG[egl-protected-content] = "CONFIG+=egl_protected_content,," -FILES_${PN} += " \ +FILES:${PN} += " \ ${OE_QMAKE_PATH_PLUGINS}/ \ " diff --git a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb index 4ac145a9a..0e15814e9 100644 --- a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb +++ b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb @@ -24,9 +24,9 @@ SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" # No debian package renaming -DEBIAN_NOAUTONAME_${PN} = "1" -DEBIAN_NOAUTONAME_${PN}-dbg = "1" -DEBIAN_NOAUTONAME_${PN}-dev = "1" +DEBIAN_NOAUTONAME:${PN} = "1" +DEBIAN_NOAUTONAME:${PN}-dbg = "1" +DEBIAN_NOAUTONAME:${PN}-dev = "1" # Enable LTTng tracing capability when enabled in webos_lttng class EXTRA_QMAKEVARS_PRE += "${@oe.utils.conditional('WEBOS_LTTNG_ENABLED', '1', 'CONFIG+=lttng', '', d)}" @@ -39,11 +39,11 @@ PACKAGECONFIG[criu] = "CONFIG+=criu,,criu-webos" EXTRA_QMAKEVARS_PRE += "${PACKAGECONFIG_CONFARGS}" -FILES_${PN} += " \ +FILES:${PN} += " \ ${OE_QMAKE_PATH_PLUGINS}/*/*${SOLIBSDEV} \ " -FILES_${PN}-dev += " \ +FILES:${PN}-dev += " \ ${OE_QMAKE_PATH_LIBS}/*.prl \ ${OE_QMAKE_PATH_QT_ARCHDATA}/mkspecs/* \ " @@ -54,7 +54,7 @@ FILES_${PN}-dev += " \ # depend on weboscompositorextensionclient build and run as before. # This should be removed once all these components have no dependency # on weboscompositorextensionclient. -do_install_append() { +do_install:append() { ln -snvf webos-platform-interface.pc ${D}${libdir}/pkgconfig/weboscompositorextensionclient.pc sed -i 's@prefix=${STAGING_DIR_HOST}@prefix=@g ;s@-L${STAGING_DIR_HOST} @ @g;' ${D}${libdir}/pkgconfig/*.pc sed -i "s@-L${STAGING_LIBDIR}@-L\${libdir}@g" ${D}${libdir}/pkgconfig/*.pc diff --git a/meta-webos/recipes-webos/sam/sam.bb b/meta-webos/recipes-webos/sam/sam.bb index 7f4a37498..a3905d344 100644 --- a/meta-webos/recipes-webos/sam/sam.bb +++ b/meta-webos/recipes-webos/sam/sam.bb @@ -9,8 +9,8 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ " DEPENDS = "glib-2.0 luna-service2 libpbnjson boost icu pmloglib procps libwebosi18n" -RDEPENDS_${PN} = "ecryptfs-utils" -RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_webos-customization}" +RDEPENDS:${PN} = "ecryptfs-utils" +RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_webos-customization}" VIRTUAL-RUNTIME_webos-customization ?= "" @@ -30,5 +30,5 @@ SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" PACKAGES =+ "${PN}-tests" -ALLOW_EMPTY_${PN}-tests = "1" -FILES_${PN}-tests = "${libexecdir}/tests/*" +ALLOW_EMPTY:${PN}-tests = "1" +FILES:${PN}-tests = "${libexecdir}/tests/*" diff --git a/meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb b/meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb index 88dc69f5b..ace619cc1 100644 --- a/meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb +++ b/meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb @@ -21,4 +21,4 @@ inherit webos_pkgconfig SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" -ALLOW_EMPTY_${PN} = "1" +ALLOW_EMPTY:${PN} = "1" diff --git a/meta-webos/recipes-webos/settingsservice/settingsservice.bb b/meta-webos/recipes-webos/settingsservice/settingsservice.bb index 7f4408811..2044299a2 100644 --- a/meta-webos/recipes-webos/settingsservice/settingsservice.bb +++ b/meta-webos/recipes-webos/settingsservice/settingsservice.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7ca " DEPENDS = "glib-2.0 glibmm luna-service2 libpbnjson pmloglib openssl libbson boost" -RDEPENDS_${PN} = "settingsservice-conf" +RDEPENDS:${PN} = "settingsservice-conf" WEBOS_VERSION = "1.0.22-14_c138dcc9f3382ebd1ec939038a5c0399e4daeb82" PR = "r23" @@ -28,4 +28,4 @@ S = "${WORKDIR}/git" WEBOS_SYSTEM_BUS_MANIFEST_TYPE = "SERVICE" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS_${PN}_append_class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" diff --git a/meta-webos/recipes-webos/test-apps/webos-open-test-apps.inc b/meta-webos/recipes-webos/test-apps/webos-open-test-apps.inc index eff856c92..98287b259 100644 --- a/meta-webos/recipes-webos/test-apps/webos-open-test-apps.inc +++ b/meta-webos/recipes-webos/test-apps/webos-open-test-apps.inc @@ -19,4 +19,4 @@ WEBOS_REPO_NAME = "test-apps" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git/${BPN}" -FILES_${PN} += "${webos_applicationsdir}" +FILES:${PN} += "${webos_applicationsdir}" diff --git a/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb b/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb index f8cfb0f8c..f81d8db35 100644 --- a/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb +++ b/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb @@ -25,4 +25,4 @@ EXTRA_OECMAKE += "-DWEBOS_INSTALL_CONFCAPSDIR:STRING=${webos_frameworksdir}" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" -FILES_${PN} += "${webos_frameworksdir}/umediaserver/*" +FILES:${PN} += "${webos_frameworksdir}/umediaserver/*" diff --git a/meta-webos/recipes-webos/umediaserver/umediaserver.bb b/meta-webos/recipes-webos/umediaserver/umediaserver.bb index 6b0b87358..d6c80768f 100644 --- a/meta-webos/recipes-webos/umediaserver/umediaserver.bb +++ b/meta-webos/recipes-webos/umediaserver/umediaserver.bb @@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 libpbnjson libconfig swig-native libxml2 luna-service2 pmloglib boost luna-prefs" DEPENDS += "gstreamer1.0 gstreamer1.0-plugins-base" DEPENDS += "${@'' if '${WEBOS_DISTRO_PRERELEASE}' == '' else 'pmtrace'}" -RDEPENDS_${PN} = "umediaserver-configs" +RDEPENDS:${PN} = "umediaserver-configs" PR = "r19" @@ -28,24 +28,24 @@ inherit python3native inherit webos_public_repo inherit webos_prerelease_dep -do_configure_prepend() { +do_configure:prepend() { sed -i 's@add_subdirectory(test/python)@#disabled until updated to work with python3 add_subdirectory(test/python)@g' ${S}/CMakeLists.txt } # umediaserver doesn't build for armv[45]* COMPATIBLE_MACHINE = "(-)" -COMPATIBLE_MACHINE_aarch64 = "(.*)" -COMPATIBLE_MACHINE_armv6 = "(.*)" -COMPATIBLE_MACHINE_armv7a = "(.*)" -COMPATIBLE_MACHINE_armv7ve = "(.*)" -COMPATIBLE_MACHINE_x86 = "(.*)" -COMPATIBLE_MACHINE_x86-64 = "(.*)" +COMPATIBLE_MACHINE:aarch64 = "(.*)" +COMPATIBLE_MACHINE:armv6 = "(.*)" +COMPATIBLE_MACHINE:armv7a = "(.*)" +COMPATIBLE_MACHINE:armv7ve = "(.*)" +COMPATIBLE_MACHINE:x86 = "(.*)" +COMPATIBLE_MACHINE:x86-64 = "(.*)" WEBOS_GIT_PARAM_BRANCH = "@gav" WEBOS_VERSION = "1.0.0-24.gav.21_568cdc04e1ba1f3b99267a32dc4adfb9dac43edc" -WEBOS_GIT_PARAM_BRANCH_raspberrypi3 = "master" -WEBOS_VERSION_raspberrypi3 = "1.0.0-27_dad33357ba323a69885bc11661330ab07296b0c8" +WEBOS_GIT_PARAM_BRANCH:raspberrypi3 = "master" +WEBOS_VERSION:raspberrypi3 = "1.0.0-27_dad33357ba323a69885bc11661330ab07296b0c8" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" @@ -56,7 +56,7 @@ PACKAGECONFIG[com.webos.service.videooutput] = "-DUSE_VIDEOOUTPUTD:BOOL=TRUE,-DU # umediaserver-python contains the Python bindings PACKAGES =+ "${PN}-python" -FILES_${PN}-python = "${libdir}/${PYTHON_DIR}/site-packages/uMediaServer/* ${datadir}/${BPN}/python/" +FILES:${PN}-python = "${libdir}/${PYTHON_DIR}/site-packages/uMediaServer/* ${datadir}/${BPN}/python/" # needs to be fixed first # http://caprica.lgsvl.com:8080/Errors/Details/1092075 @@ -68,4 +68,4 @@ SECURITY_STRINGFORMAT = "" SRC_URI += "file://0001-waitForStop-API-is-added-for-cleanup-message-handler.patch" #Remove videooutputd from OSE -PACKAGECONFIG_remove_raspberrypi4 = "com.webos.service.videooutput" +PACKAGECONFIG:remove:raspberrypi4 = "com.webos.service.videooutput" diff --git a/meta-webos/recipes-webos/videooutputd/com.webos.service.videooutput.bb b/meta-webos/recipes-webos/videooutputd/com.webos.service.videooutput.bb index c86c944ee..5fa264621 100644 --- a/meta-webos/recipes-webos/videooutputd/com.webos.service.videooutput.bb +++ b/meta-webos/recipes-webos/videooutputd/com.webos.service.videooutput.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ VIRTUAL-RUNTIME_val-impl ??= "videooutput-adaptation-layer-mock" DEPENDS = "glib-2.0 luna-service2 pmloglib libpbnjson val-impl" -RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_val-impl}" +RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_val-impl}" WEBOS_VERSION = "1.0.0-13_931b3e59260a97ea0741ebbd1d84fd30b405b484" PR = "r2" diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index bcfa1e9b7..5c3eef42a 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -10,19 +10,19 @@ DEPENDS = "virtual/webruntime luna-service2 sqlite3 librolegen nyx-lib openssl l PROVIDES = "webappmanager-webos" # webappmgr's upstart conf expects to be able to LD_PRELOAD ptmalloc3 -RDEPENDS_${PN} = "ptmalloc3" +RDEPENDS:${PN} = "ptmalloc3" # webappmgr's upstart conf expects to have ionice available. Under OE-core, this is supplied by util-linux. -RDEPENDS_${PN} += "util-linux" +RDEPENDS:${PN} += "util-linux" # webappmgr2's upstart conf expects setcpushares-task to be available VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" -RDEPENDS_${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" +RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" WEBOS_VERSION = "1.0.2-58_abdd3a3484ada38b4691628588008d974d7c2f22" PR = "r44" WAM_BUILD_SYSTEM = "webos_qmake6" -WAM_BUILD_SYSTEM_webos = "webos_cmake" +WAM_BUILD_SYSTEM:webos = "webos_cmake" inherit webos_enhanced_submissions inherit webos_system_bus @@ -57,12 +57,12 @@ EXTRA_OECMAKE += "-DPLATFORM=${@'PLATFORM_' + '${DISTRO}'.upper().replace('-', ' # chromium doesn't build for armv[45]* COMPATIBLE_MACHINE = "(-)" -COMPATIBLE_MACHINE_aarch64 = "(.*)" -COMPATIBLE_MACHINE_armv6 = "(.*)" -COMPATIBLE_MACHINE_armv7a = "(.*)" -COMPATIBLE_MACHINE_armv7ve = "(.*)" -COMPATIBLE_MACHINE_x86 = "(.*)" -COMPATIBLE_MACHINE_x86-64 = "(.*)" +COMPATIBLE_MACHINE:aarch64 = "(.*)" +COMPATIBLE_MACHINE:armv6 = "(.*)" +COMPATIBLE_MACHINE:armv7a = "(.*)" +COMPATIBLE_MACHINE:armv7ve = "(.*)" +COMPATIBLE_MACHINE:x86 = "(.*)" +COMPATIBLE_MACHINE:x86-64 = "(.*)" WAM_ERROR_SCRIPTS_PATH = "${S}/html-ose" @@ -75,7 +75,7 @@ PLATFORM_DECODER_ENABLED ?= "true" # Flag to control runtime flag for platform encoder PLATFORM_ENCODER_ENABLED ?= "true" -do_configure_append() { +do_configure:append() { if [ -f "${S}/files/launch/systemd/webapp-mgr.sh.in" ]; then cp ${S}/files/launch/systemd/webapp-mgr.sh.in ${B}/webapp-mgr.sh fi @@ -121,7 +121,7 @@ do_configure_append() { sed -i '/export WAM_COMMON_SWITCHES=\" \\/a\ --enable-accurate-seek \\' ${B}/webapp-mgr.sh } -do_configure_append_qemux86() { +do_configure:append:qemux86() { # Remove this condition once webos wam is synchronized to get systemd initscripts if [ -f "${B}/webapp-mgr.sh" ]; then # Disable media hardware acceleration @@ -129,7 +129,7 @@ do_configure_append_qemux86() { fi } -do_configure_append_qemux86-64() { +do_configure:append:qemux86-64() { # Remove this condition once webos wam is synchronized to get systemd initscripts if [ -f "${B}/webapp-mgr.sh" ]; then # Disable media hardware acceleration @@ -137,7 +137,7 @@ do_configure_append_qemux86-64() { fi } -do_install_append() { +do_install:append() { install -d ${D}${sysconfdir}/pmlog.d install -d ${D}${sysconfdir}/wam install -d ${D}${WAM_DATA_DIR} @@ -151,9 +151,9 @@ do_install_append() { } PACKAGES =+ "${PN}-tests" -FILES_${PN}-tests = "${webos_testsdir}/* ${libexecdir}/tests/*" +FILES:${PN}-tests = "${webos_testsdir}/* ${libexecdir}/tests/*" -FILES_${PN} += " \ +FILES:${PN} += " \ ${sysconfdir}/pmlog.d \ ${SYSTEMD_INSTALL_PATH} \ ${sysconfdir}/wam \ diff --git a/meta-webos/recipes-webos/webos-connman-adapter/wca-support.bb b/meta-webos/recipes-webos/webos-connman-adapter/wca-support.bb index e07745de6..28308f0b7 100644 --- a/meta-webos/recipes-webos/webos-connman-adapter/wca-support.bb +++ b/meta-webos/recipes-webos/webos-connman-adapter/wca-support.bb @@ -14,7 +14,7 @@ PR = "r2" DEPENDS = "glib-2.0 luna-service2 libpbnjson pmloglib luna-prefs wca-support-api" -RDEPENDS_${PN} = "iw" +RDEPENDS:${PN} = "iw" inherit webos_component inherit webos_enhanced_submissions diff --git a/meta-webos/recipes-webos/webos-connman-adapter/webos-connman-adapter.bb b/meta-webos/recipes-webos/webos-connman-adapter/webos-connman-adapter.bb index b6b9ffd1e..47d173ad4 100644 --- a/meta-webos/recipes-webos/webos-connman-adapter/webos-connman-adapter.bb +++ b/meta-webos/recipes-webos/webos-connman-adapter/webos-connman-adapter.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ SECTION = "webos/services" DEPENDS = "luna-service2 libpbnjson glib-2.0 luna-prefs openssl glib-2.0-native wca-support-api wca-support" -RDEPENDS_${PN} = "connman connman-client" +RDEPENDS:${PN} = "connman connman-client" WEBOS_VERSION = "1.1.0-39_dc622623142035004f2354cc90cfee0e8fc3c5b3" PR = "r9" @@ -33,12 +33,12 @@ PACKAGECONFIG[enable-multiple-routing-table] = "-DMULTIPLE_ROUTING_TABLE:BOOL=tr PACKAGECONFIG = "enable-multiple-routing-table" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" -SRC_URI_append_raspberrypi4 = " file://blacklistcdc_ether.conf" +SRC_URI:append:raspberrypi4 = " file://blacklistcdc_ether.conf" S = "${WORKDIR}/git" -do_install_append_raspberrypi4 () { +do_install:append:raspberrypi4 () { install -d ${D}${sysconfdir}/modprobe.d install -m 644 ${WORKDIR}/blacklistcdc_ether.conf ${D}${sysconfdir}/modprobe.d/blacklistcdc_ether.conf } -FILES_${PN}_append_raspberrypi4 = " ${sysconfdir}/modprobe.d/*" +FILES:${PN}:append:raspberrypi4 = " ${sysconfdir}/modprobe.d/*" diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb index 90884ed18..e322db07e 100644 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ " DEPENDS = "glib-2.0 luna-service2 libpbnjson fluentbit" -RDEPENDS_${PN} = "nyx-utils python3-core python3-requests python3-atlassian-python-api" +RDEPENDS:${PN} = "nyx-utils python3-core python3-requests python3-atlassian-python-api" WEBOS_VERSION = "1.0.0-30_9f7c98a3c6ab09c71deb4b5a491497ae6746fa9c" PR = "r4" @@ -28,7 +28,7 @@ SRC_URI="${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" -SRC_URI_append = " \ +SRC_URI:append = " \ file://0001-Fix-static-analysis-issues.patch \ " diff --git a/meta-webos/recipes-webos/webos-fontconfig-files/webos-fontconfig-files.bb b/meta-webos/recipes-webos/webos-fontconfig-files/webos-fontconfig-files.bb index 2fab8e274..b2d919744 100644 --- a/meta-webos/recipes-webos/webos-fontconfig-files/webos-fontconfig-files.bb +++ b/meta-webos/recipes-webos/webos-fontconfig-files/webos-fontconfig-files.bb @@ -30,4 +30,4 @@ do_install() { ln -vsf /usr/share/fontconfig/conf.avail/31-webos-aliases.conf ${D}${sysconfdir}/fonts/conf.d/31-webos-aliases.conf } -FILES_${PN} += "${sysconfdir}/fonts/conf.d/ ${datadir}/fontconfig/" +FILES:${PN} += "${sysconfdir}/fonts/conf.d/ ${datadir}/fontconfig/" diff --git a/meta-webos/recipes-webos/webos-fonts/webos-fonts.inc b/meta-webos/recipes-webos/webos-fonts/webos-fonts.inc index 17a4cb1d8..6a6a8a222 100644 --- a/meta-webos/recipes-webos/webos-fonts/webos-fonts.inc +++ b/meta-webos/recipes-webos/webos-fonts/webos-fonts.inc @@ -15,4 +15,4 @@ do_configure[noexec] = "1" do_compile[noexec] = "1" PACKAGES = "${PN}" -FILES_${PN} = "${datadir}/fonts" +FILES:${PN} = "${datadir}/fonts" diff --git a/meta-webos/recipes-webos/webos-nettools/webos-nettools.bb b/meta-webos/recipes-webos/webos-nettools/webos-nettools.bb index 7e9c1f35b..265db7e6e 100644 --- a/meta-webos/recipes-webos/webos-nettools/webos-nettools.bb +++ b/meta-webos/recipes-webos/webos-nettools/webos-nettools.bb @@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=2763f3ed850f8412903ea776e0526bea \ SECTION = "webos/services" DEPENDS = "luna-service2 libpbnjson glib-2.0" -RDEPENDS_${PN} = "iputils" +RDEPENDS:${PN} = "iputils" WEBOS_REPO_NAME = "com.webos.service.nettools" diff --git a/meta-webos/recipes-webos/webos-wayland-extensions/webos-wayland-extensions.bb b/meta-webos/recipes-webos/webos-wayland-extensions/webos-wayland-extensions.bb index 0938517bf..5b430f1ef 100644 --- a/meta-webos/recipes-webos/webos-wayland-extensions/webos-wayland-extensions.bb +++ b/meta-webos/recipes-webos/webos-wayland-extensions/webos-wayland-extensions.bb @@ -23,4 +23,4 @@ inherit webos_public_repo SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" -FILES_${PN}-dev += "${datadir}/*" +FILES:${PN}-dev += "${datadir}/*" diff --git a/meta-webos/scripts/buildhistory-collect-src-info b/meta-webos/scripts/buildhistory-collect-src-info index 45e0dbfa4..2cc7435b1 100755 --- a/meta-webos/scripts/buildhistory-collect-src-info +++ b/meta-webos/scripts/buildhistory-collect-src-info @@ -106,9 +106,9 @@ def main(): elif line.startswith('SRC_URI ='): srcuri = value if srcuri and (options.reportall or srcrev != orig_srcrev): - print('SRC_URI_pn-%s%s = "%s"' % (pn, forcevariable, srcuri)) + print('SRC_URI:pn-%s%s = "%s"' % (pn, forcevariable, srcuri)) if srcrev and (options.reportall or srcrev != orig_srcrev): - print('SRCREV_pn-%s%s = "%s"' % (pn, forcevariable, srcrev)) + print('SRCREV:pn-%s%s = "%s"' % (pn, forcevariable, srcrev)) for name, value in srcrevs.items(): orig = orig_srcrevs.get(name, orig_srcrev) if options.reportall or value != orig: From ac1c6a07390d75cb56df787d8dcccf2ae182acd0 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 29 Jul 2021 08:24:59 -0700 Subject: [PATCH 0370/2022] Manually fix the conversion :Release Notes: :Detailed Notes: ERROR: meta-webosose/meta-webos/recipes-webos/jemalloc/jemalloc.bb: Variable do_generate_toolchain_file_append contains an operation using the old override syntax. Please convert this layer/metadata before attempting to use with a newer bitbake. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [PLAT-141293] Create GPVB with Yocto 3.4 Honister [WRO-3850] CCC: Upgrade to new override syntax Change-Id: I8bd5a19d2547c4f3b6540dac7040b373c66ecb8c --- .../classes/sota_webos-rpi.bbclass | 4 +- .../gstreamer1.0-omx_1.16.%.bbappend | 6 +- meta-webos/classes/webos_cmake.bbclass | 2 +- .../node-gyp/node-gyp-packages-native.inc | 104 +++++++++--------- meta-webos/recipes-webos/db8/db8.bb | 2 +- 5 files changed, 59 insertions(+), 59 deletions(-) diff --git a/meta-webos-raspberrypi/classes/sota_webos-rpi.bbclass b/meta-webos-raspberrypi/classes/sota_webos-rpi.bbclass index d452d12d1..b57527542 100644 --- a/meta-webos-raspberrypi/classes/sota_webos-rpi.bbclass +++ b/meta-webos-raspberrypi/classes/sota_webos-rpi.bbclass @@ -1,9 +1,9 @@ # Copyright (c) 2019 LG Electronics, Inc. -# Rather than using sota:raspberrypi.bbclass on meta-updater/classes, +# Rather than using sota_raspberrypi.bbclass on meta-updater/classes, # this setting keeps the boot partition then original one as possible. # -# Differences (between sota:raspberrypi.bbclass) +# Differences (between sota_raspberrypi.bbclass) # - Don't use 'fitImage' kernel type for '/boot/ostree/webos-{hash}/vmlinuz'. # - So, need to use initramfs on the u-boot directly. (cpio.gz => cpio.gz.u-boot) # - Copy DTBs, DTBOs to 1st partition (like original rpi image) diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.%.bbappend index 4041a4d38..bf8914a82 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.%.bbappend @@ -8,14 +8,14 @@ CPPFLAGS:append:rpi = " -I${STAGING_INCDIR}/IL \ DEPENDS:append:rpi = " virtual/egl virtual/libomxil" -EXTRA_LDFLAGS:rpi = "-lEGL -lbcm_host -lvcos -lvchiq:arm -lopenmaxil" +EXTRA_LDFLAGS:rpi = "-lEGL -lbcm_host -lvcos -lvchiq_arm -lopenmaxil" # raspberrypi3-64 version of userland doesn't provide bcm_host and openmaxil libraries # (that's actually the only difference between set of files staged by userland build for raspberrypi3 and raspberrypi3-64) -EXTRA_LDFLAGS:raspberrypi3-64 = "-lEGL -lvcos -lvchiq:arm" +EXTRA_LDFLAGS:raspberrypi3-64 = "-lEGL -lvcos -lvchiq_arm" # Build for raspberrypi4 -EXTRA_LDFLAGS:raspberrypi4-64 = "-lEGL -lvcos -lvchiq:arm" +EXTRA_LDFLAGS:raspberrypi4-64 = "-lEGL -lvcos -lvchiq_arm" LDFLAGS:append:rpi = " ${EXTRA_LDFLAGS}" diff --git a/meta-webos/classes/webos_cmake.bbclass b/meta-webos/classes/webos_cmake.bbclass index 63f2a6135..1143c5097 100644 --- a/meta-webos/classes/webos_cmake.bbclass +++ b/meta-webos/classes/webos_cmake.bbclass @@ -107,7 +107,7 @@ EXTRA_OECMAKE += "-Wdev" # Fixup in case CMake files don't recognize the new value i586 for # CMAKE_SYSTEM_PROCESSOR (e.g. nodejs) -do_generate_toolchain_file_append() { +do_generate_toolchain_file:append() { sed '/CMAKE_SYSTEM_PROCESSOR/ s/i586/i686/' -i ${WORKDIR}/toolchain.cmake } diff --git a/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc b/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc index b0ae2d471..910312698 100644 --- a/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc +++ b/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc @@ -219,58 +219,58 @@ tunnel-agent-0.3.0 \ which-1.0.5 \ " -LICENSE:abbrev-1.0.5 = "MIT" -LICENSE:ansi-0.2.1 = "MIT" -LICENSE:asn1-0.1.11 = "MIT" -LICENSE:assert-plus-0.1.2 = "MIT" -LICENSE:async-0.2.10 = "MIT" -LICENSE:aws-sign2-0.5.0 = "Apache-2.0" -LICENSE:block-stream-0.0.7 = "BSD" -LICENSE:boom-0.4.2 = "BSD" -LICENSE:combined-stream-0.0.4 = "MIT" -LICENSE:cryptiles-0.2.2 = "BSD" -LICENSE:ctype-0.5.2 = "MIT" -LICENSE:delayed-stream-0.0.5 = "MIT" -LICENSE:forever-agent-0.5.2 = "Apache-2.0" -LICENSE:form-data-0.1.2 = "MIT" -LICENSE:fstream-0.1.25 = "BSD" -LICENSE:glob-3.2.9 = "BSD" -LICENSE:graceful-fs-1.2.3 = "BSD" -LICENSE:graceful-fs-2.0.3 = "BSD" -LICENSE:grunt-0.4.5 = "MIT" -LICENSE:grunt-contrib-concat-0.5.1 = "MIT" -LICENSE:grunt-contrib-jshint-0.10.0 = "MIT" -LICENSE:grunt-contrib-nodeunit-0.4.1 = "MIT" -LICENSE:grunt-contrib-qunit-0.7.0 = "MIT" -LICENSE:grunt-contrib-uglify-0.5.0 = "MIT" -LICENSE:grunt-contrib-watch-0.6.1 = "MIT" -LICENSE:hawk-1.0.0 = "BSD" -LICENSE:hoek-0.9.1 = "BSD" -LICENSE:http-signature-0.10.0 = "MIT" -LICENSE:inherits-2.0.1 = "ISC" -LICENSE:json-stringify-safe-5.0.0 = "BSD" -LICENSE:lru-cache-2.5.0 = "MIT" -LICENSE:mime-1.2.11 = "MIT" -LICENSE:minimatch-0.2.14 = "MIT" -LICENSE:mkdirp-0.3.5 = "MIT" -LICENSE:mkdirp-0.4.0 = "MIT" -LICENSE:node-uuid-1.4.1 = "MIT" -LICENSE:nopt-2.2.1 = "MIT" -LICENSE:npmlog-0.0.6 = "BSD" -LICENSE:oauth-sign-0.3.0 = "Apache-2.0" -LICENSE:osenv-0.0.3 = "BSD" -LICENSE:punycode-1.2.4 = "BSD & MIT" -LICENSE:qs-0.6.6 = "MIT" -LICENSE:qunitjs-1.18.0 = "MIT" -LICENSE:request-2.34.0 = "Apache-2.0" -LICENSE:rimraf-2.2.6 = "MIT" -LICENSE:semver-2.2.1 = "BSD" -LICENSE:sigmund-1.0.0 = "BSD" -LICENSE:sntp-0.2.4 = "BSD" -LICENSE:tar-0.1.19 = "BSD" -LICENSE:tough-cookie-0.12.1 = "CC0-1.0 & (MPL-1.1 | GPL-2.0 | LGPL-2.1) & MIT" -LICENSE:tunnel-agent-0.3.0 = "Apache-2.0" -LICENSE:which-1.0.5 = "MIT" +LICENSE_abbrev-1.0.5 = "MIT" +LICENSE_ansi-0.2.1 = "MIT" +LICENSE_asn1-0.1.11 = "MIT" +LICENSE_assert-plus-0.1.2 = "MIT" +LICENSE_async-0.2.10 = "MIT" +LICENSE_aws-sign2-0.5.0 = "Apache-2.0" +LICENSE_block-stream-0.0.7 = "BSD" +LICENSE_boom-0.4.2 = "BSD" +LICENSE_combined-stream-0.0.4 = "MIT" +LICENSE_cryptiles-0.2.2 = "BSD" +LICENSE_ctype-0.5.2 = "MIT" +LICENSE_delayed-stream-0.0.5 = "MIT" +LICENSE_forever-agent-0.5.2 = "Apache-2.0" +LICENSE_form-data-0.1.2 = "MIT" +LICENSE_fstream-0.1.25 = "BSD" +LICENSE_glob-3.2.9 = "BSD" +LICENSE_graceful-fs-1.2.3 = "BSD" +LICENSE_graceful-fs-2.0.3 = "BSD" +LICENSE_grunt-0.4.5 = "MIT" +LICENSE_grunt-contrib-concat-0.5.1 = "MIT" +LICENSE_grunt-contrib-jshint-0.10.0 = "MIT" +LICENSE_grunt-contrib-nodeunit-0.4.1 = "MIT" +LICENSE_grunt-contrib-qunit-0.7.0 = "MIT" +LICENSE_grunt-contrib-uglify-0.5.0 = "MIT" +LICENSE_grunt-contrib-watch-0.6.1 = "MIT" +LICENSE_hawk-1.0.0 = "BSD" +LICENSE_hoek-0.9.1 = "BSD" +LICENSE_http-signature-0.10.0 = "MIT" +LICENSE_inherits-2.0.1 = "ISC" +LICENSE_json-stringify-safe-5.0.0 = "BSD" +LICENSE_lru-cache-2.5.0 = "MIT" +LICENSE_mime-1.2.11 = "MIT" +LICENSE_minimatch-0.2.14 = "MIT" +LICENSE_mkdirp-0.3.5 = "MIT" +LICENSE_mkdirp-0.4.0 = "MIT" +LICENSE_node-uuid-1.4.1 = "MIT" +LICENSE_nopt-2.2.1 = "MIT" +LICENSE_npmlog-0.0.6 = "BSD" +LICENSE_oauth-sign-0.3.0 = "Apache-2.0" +LICENSE_osenv-0.0.3 = "BSD" +LICENSE_punycode-1.2.4 = "BSD & MIT" +LICENSE_qs-0.6.6 = "MIT" +LICENSE_qunitjs-1.18.0 = "MIT" +LICENSE_request-2.34.0 = "Apache-2.0" +LICENSE_rimraf-2.2.6 = "MIT" +LICENSE_semver-2.2.1 = "BSD" +LICENSE_sigmund-1.0.0 = "BSD" +LICENSE_sntp-0.2.4 = "BSD" +LICENSE_tar-0.1.19 = "BSD" +LICENSE_tough-cookie-0.12.1 = "CC0-1.0 & (MPL-1.1 | GPL-2.0 | LGPL-2.1) & MIT" +LICENSE_tunnel-agent-0.3.0 = "Apache-2.0" +LICENSE_which-1.0.5 = "MIT" ALL_LICENSES = "\ ${LICENSE_abbrev-1.0.5} & \ diff --git a/meta-webos/recipes-webos/db8/db8.bb b/meta-webos/recipes-webos/db8/db8.bb index 713a9e560..5e5aa05d8 100644 --- a/meta-webos/recipes-webos/db8/db8.bb +++ b/meta-webos/recipes-webos/db8/db8.bb @@ -40,7 +40,7 @@ EXTRA_OECMAKE:append:class-native = " -DWEBOS_CONFIG_BUILD_TESTS:BOOL=FALSE -DUS # Backported from Yocto 1.8 # http://git.openembedded.org/openembedded-core/commit/?id=79144da00f005b5a3ab8f7404730216cfc684616 OECMAKE_AR ?= "${AR}" -cmake_do_generate_toolchain_file_append() { +cmake_do_generate_toolchain_file:append() { cat >> ${WORKDIR}/toolchain.cmake < Date: Tue, 26 Apr 2022 08:40:15 +0000 Subject: [PATCH 0371/2022] Copyright: fix formatting :Release Notes: Fix typos and unify formatting with other Copyright notices in the repo. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [PLAT-141293] Create GPVB with Yocto 3.4 Honister [WRO-3850] CCC: Upgrade to new override syntax Change-Id: Ic077516c2e146372d3d47b349718b3ddc2d47439 --- meta-webos-iot/recipes-core/images/webos-iot-image.bb | 2 +- meta-webos/classes/report-error.bbclass | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos-iot/recipes-core/images/webos-iot-image.bb b/meta-webos-iot/recipes-core/images/webos-iot-image.bb index 41512d5ed..fa1606180 100644 --- a/meta-webos-iot/recipes-core/images/webos-iot-image.bb +++ b/meta-webos-iot/recipes-core/images/webos-iot-image.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc +# Copyright (c) 2020 LG Electronics, Inc. DESCRIPTION = "webOS IoT image" LICENSE = "CLOSED" diff --git a/meta-webos/classes/report-error.bbclass b/meta-webos/classes/report-error.bbclass index 99e63aca6..4299d1343 100644 --- a/meta-webos/classes/report-error.bbclass +++ b/meta-webos/classes/report-error.bbclass @@ -1,7 +1,7 @@ # # Collects debug information in order to create error report files. # -# Copyright (C) 2014-2022 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. # Copyright (C) 2013 Intel Corporation # Author: Andreea Brandusa Proca # From 0ca9db0fbd4baf733fa6bc9a5bd4cc1b67144c99 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 26 Apr 2022 09:00:21 +0000 Subject: [PATCH 0372/2022] Copyright: update for 2022 :Release Notes: Overrides changes modified a lot of files with conversion script, bump copyright years for all the files. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [PLAT-141293] Create GPVB with Yocto 3.4 Honister [WRO-3850] CCC: Upgrade to new override syntax Change-Id: I9668c8e9de64b33221bffbe6d1988d872dbce0b1 --- .gitignore | 2 +- meta-webos-backports/meta-webos-backports-3.2/conf/layer.conf | 2 +- meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf | 2 +- meta-webos-iot/classes/webos_iot.bbclass | 2 +- meta-webos-iot/classes/webos_iot_core.bbclass | 2 +- meta-webos-iot/classes/webos_iot_image.bbclass | 2 +- meta-webos-iot/conf/layer.conf | 2 +- meta-webos-iot/recipes-core/images/webos-iot-image-devel.bb | 2 +- meta-webos-iot/recipes-core/images/webos-iot-image.bb | 2 +- .../recipes-core/initscripts/webos-initscripts.bbappend | 2 +- .../packagegroups/packagegroup-webos-devel.bbappend | 2 +- .../recipes-core/packagegroups/packagegroup-webos-iot-bsp.bb | 2 +- .../recipes-core/packagegroups/packagegroup-webos-iot-core.bb | 2 +- .../packagegroups/packagegroup-webos-iot-devtools.bb | 2 +- .../recipes-core/packagegroups/packagegroup-webos-iot.bb | 2 +- meta-webos-iot/recipes-devtools/uftrace/uftrace_%.bbappend | 2 +- meta-webos-raspberrypi/classes/sota_webos-rpi.bbclass | 2 +- meta-webos-raspberrypi/conf/layer.conf | 2 +- meta-webos-raspberrypi/conf/machine/include/webos-rpi.inc | 2 +- meta-webos-raspberrypi/conf/machine/raspberrypi3-64.conf | 2 +- meta-webos-raspberrypi/conf/machine/raspberrypi3.conf | 2 +- meta-webos-raspberrypi/conf/machine/raspberrypi4-64.conf | 2 +- meta-webos-raspberrypi/conf/machine/raspberrypi4.conf | 2 +- .../recipes-bsp/bootfiles/rpi-config_git.bbappend | 2 +- .../recipes-bsp/resize-rootfs/files/resize-rootfs.service | 2 +- .../recipes-bsp/resize-rootfs/files/resize-rootfs.sh | 2 +- .../recipes-bsp/resize-rootfs/resize-rootfs.bb | 2 +- meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot_%.bbappend | 2 +- .../recipes-connectivity/connman/connman-conf.bbappend | 2 +- .../recipes-connectivity/pi-bluetooth/pi-bluetooth_%.bbappend | 2 +- .../wpa-supplicant/wpa-supplicant_%.bbappend | 2 +- .../recipes-core/base-files/base-files_%.bbappend | 2 +- .../recipes-core/images/rpi-test-image.bbappend | 2 +- meta-webos-raspberrypi/recipes-core/images/webos-image.bbappend | 2 +- .../recipes-core/packagegroups/packagegroup-rpi-test.bbappend | 2 +- .../packagegroups/packagegroup-webos-devel.bbappend | 2 +- meta-webos-raspberrypi/recipes-graphics/mesa/mesa_%.bbappend | 2 +- .../recipes-graphics/userland/userland_git.bbappend | 2 +- .../recipes-graphics/wayland/wayland-protocols_%.bbappend | 2 +- .../recipes-kernel/linux/linux-raspberrypi_5.4.bbappend | 2 +- .../gstreamer/gstreamer1.0-libav_1.16.%.bbappend | 2 +- .../gstreamer/gstreamer1.0-omx_1.16.%.bbappend | 2 +- .../gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend | 2 +- .../gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend | 2 +- .../gstreamer/gstreamer1.0-plugins-ugly_1.16.%.bbappend | 2 +- .../recipes-multimedia/gstreamer/gstreamer1.0-webos-common.inc | 2 +- .../recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend | 2 +- .../recipes-multimedia/omx-components/omx-components.bb | 2 +- meta-webos-raspberrypi/recipes-multimedia/umi/umi.bbappend | 2 +- meta-webos-raspberrypi/recipes-qt/qt6/qtwayland_git.bbappend | 2 +- .../recipes-webos/avoutputd/avoutput-adaptation-layer-rpi.bb | 2 +- meta-webos-raspberrypi/recipes-webos/db8/db8.bbappend | 2 +- .../videooutputd/videooutput-adaptation-layer-rpi.bb | 2 +- meta-webos-raspberrypi/recipes-webos/wam/wam.bbappend | 2 +- meta-webos-raspberrypi/recipes.txt | 2 +- meta-webos-smack/classes/webos_smack_labeling.bbclass | 2 +- meta-webos-smack/conf/layer.conf | 2 +- meta-webos-smack/recipes-core/base-files/base-files_%.bbappend | 2 +- meta-webos-smack/recipes-core/coreutils/coreutils_%.bbappend | 2 +- meta-webos-smack/recipes-core/images/webos-image.bbappend | 2 +- .../packagegroups/packagegroup-webos-extended.bbappend | 2 +- meta-webos-smack/recipes-core/systemd/systemd_%.bbappend | 2 +- meta-webos-smack/recipes-kernel/linux/linux-%.bbappend | 2 +- meta-webos-smack/recipes-security/smack/files/smack_rules_gen | 2 +- meta-webos-smack/recipes-security/smack/smack_%.bbappend | 2 +- meta-webos-smack/recipes-webos/chromium/webruntime_%.bbappend | 2 +- .../com.webos.app.enactbrowser.bbappend | 2 +- .../com.webos.app.test.smack.native.bb | 2 +- .../qml-webos-framework/qml-webos-framework.bbappend | 2 +- meta-webos-smack/recipes-webos/wam/wam.bbappend | 2 +- meta-webos-updater/classes/usrmerge_fix.bbclass | 2 +- meta-webos-updater/conf/layer.conf | 2 +- .../recipes-core/base-files/base-files_%.bbappend | 2 +- meta-webos-updater/recipes-core/busybox/busybox_%.bbappend | 2 +- .../recipes-core/images/initramfs-ostree-image.bbappend | 2 +- .../recipes-core/initscripts/webos-initscripts.bbappend | 2 +- .../ntfs-3g-ntfsprogs/ntfs-3g-ntfsprogs_%.bbappend | 2 +- .../recipes-kernel/systemtap/systemtap_%.bbappend | 2 +- .../recipes-sota/ostree-initrd/ostree-initrd.bbappend | 2 +- .../ostree-kernel-initramfs/ostree-kernel-initramfs_%.bbappend | 2 +- .../com.webos.service.contextintentmgr.bbappend | 2 +- .../containerd/containerd-docker_git.bbappend | 2 +- .../containerd/containerd-opencontainers_git.bbappend | 2 +- .../recipes-containers/docker/docker-ce_%.bbappend | 2 +- .../recipes-containers/docker/docker-moby.bbappend | 2 +- meta-webos-virtualization/recipes-containers/lxc/lxc_%.bbappend | 2 +- .../recipes-containers/runc/runc-docker_git.bbappend | 2 +- .../recipes-containers/runc/runc-opencontainers_git.bbappend | 2 +- .../recipes-containers/singularity/singularity_git.bbappend | 2 +- .../packagegroups/packagegroup-webos-extended.bbappend | 2 +- .../recipes-devtools/go/go-systemd_%.bbappend | 2 +- .../recipes-extended/libvirt/libvirt_%.bbappend | 2 +- .../recipes-extended/xen/xen-tools_%.bbappend | 2 +- .../recipes-networking/openvswitch/openvswitch_git.bbappend | 2 +- meta-webos/classes/allarch.bbclass | 2 +- meta-webos/classes/fontcache.bbclass | 2 +- meta-webos/classes/image.bbclass | 2 +- meta-webos/classes/kernel.bbclass | 2 +- meta-webos/classes/webos_app.bbclass | 2 +- meta-webos/classes/webos_app_generate_security_files.bbclass | 2 +- meta-webos/classes/webos_arch_indep.bbclass | 2 +- meta-webos/classes/webos_autotools.bbclass | 2 +- meta-webos/classes/webos_bluetooth_sil.bbclass | 2 +- meta-webos/classes/webos_certificates.bbclass | 2 +- meta-webos/classes/webos_cmake.bbclass | 2 +- meta-webos/classes/webos_cmake_qt6.bbclass | 2 +- meta-webos/classes/webos_component.bbclass | 2 +- meta-webos/classes/webos_configure_manifest.bbclass | 2 +- meta-webos/classes/webos_core_os_dep.bbclass | 2 +- meta-webos/classes/webos_daemon.bbclass | 2 +- meta-webos/classes/webos_deploy.bbclass | 2 +- meta-webos/classes/webos_distro_dep.bbclass | 2 +- meta-webos/classes/webos_distro_variant_dep.bbclass | 2 +- meta-webos/classes/webos_enact_repo.bbclass | 2 +- meta-webos/classes/webos_enactjs_app.bbclass | 2 +- meta-webos/classes/webos_enactjs_env.bbclass | 2 +- meta-webos/classes/webos_enhanced_submissions.bbclass | 2 +- meta-webos/classes/webos_event_monitor_plugin.bbclass | 2 +- meta-webos/classes/webos_filesystem_paths.bbclass | 2 +- meta-webos/classes/webos_fs_layout.bbclass | 2 +- meta-webos/classes/webos_generate_sysbus_files.bbclass | 2 +- meta-webos/classes/webos_image.bbclass | 2 +- meta-webos/classes/webos_kernel_dep.bbclass | 2 +- meta-webos/classes/webos_library.bbclass | 2 +- meta-webos/classes/webos_localizable.bbclass | 2 +- meta-webos/classes/webos_ls2_api_info.bbclass | 2 +- meta-webos/classes/webos_lttng.bbclass | 2 +- meta-webos/classes/webos_machine_actual_dep.bbclass | 2 +- meta-webos/classes/webos_machine_dep.bbclass | 2 +- meta-webos/classes/webos_machine_impl_dep.bbclass | 2 +- meta-webos/classes/webos_machine_variant_dep.bbclass | 2 +- meta-webos/classes/webos_nyx_module_provider.bbclass | 2 +- meta-webos/classes/webos_oe_runmake_no_env_override.bbclass | 2 +- meta-webos/classes/webos_pkgconfig.bbclass | 2 +- meta-webos/classes/webos_pmlog_config.bbclass | 2 +- meta-webos/classes/webos_prebuilt_binaries.bbclass | 2 +- meta-webos/classes/webos_preferred_gfx_image_format.bbclass | 2 +- meta-webos/classes/webos_prerelease_dep.bbclass | 2 +- meta-webos/classes/webos_program.bbclass | 2 +- meta-webos/classes/webos_public_repo.bbclass | 2 +- meta-webos/classes/webos_qmake6.bbclass | 2 +- meta-webos/classes/webos_qmllint.bbclass | 2 +- meta-webos/classes/webos_qt_global.bbclass | 2 +- meta-webos/classes/webos_qt_localization.bbclass | 2 +- meta-webos/classes/webos_soc_family_dep.bbclass | 2 +- meta-webos/classes/webos_submissions.bbclass | 2 +- meta-webos/classes/webos_system_bus.bbclass | 2 +- meta-webos/classes/webos_test_provider.bbclass | 2 +- meta-webos/classes/webos_upstream_from_repo.bbclass | 2 +- meta-webos/classes/webos_upstream_with_patches.bbclass | 2 +- meta-webos/classes/webos_version.bbclass | 2 +- meta-webos/classes/webruntime_apps.bbclass | 2 +- meta-webos/conf/bitbake.conf | 2 +- meta-webos/conf/distro/include/tcmode-default.inc | 2 +- meta-webos/conf/distro/include/webos-component-head.inc | 2 +- meta-webos/conf/distro/include/webos-features.inc | 2 +- .../conf/distro/include/webos-icecc-components-exclusion.inc | 2 +- meta-webos/conf/distro/include/webos-preferred-providers.inc | 2 +- meta-webos/conf/distro/include/webos-sdk.inc | 2 +- meta-webos/conf/distro/include/webos-sota.inc | 2 +- meta-webos/conf/distro/include/webos-toolchain.inc | 2 +- meta-webos/conf/distro/include/webos.inc | 2 +- meta-webos/conf/machine/include/webos-target-machine-alias.inc | 2 +- meta-webos/lib/verify_ls2_acg.py | 2 +- meta-webos/recipes-benchmark/fio/fio_%.bbappend | 2 +- .../recipes-benchmark/libhugetlbfs/libhugetlbfs_%.bbappend | 2 +- .../phoronix-test-suite/phoronix-test-suite_%.bbappend | 2 +- meta-webos/recipes-bsp/pm-utils/pm-utils_%.bbappend | 2 +- meta-webos/recipes-connectivity/bind/bind_%.bbappend | 2 +- meta-webos/recipes-connectivity/bluez5/bluez5-conf.bb | 2 +- meta-webos/recipes-connectivity/bluez5/bluez5/obex.service | 2 +- meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend | 2 +- meta-webos/recipes-connectivity/connman/connman-conf.bbappend | 2 +- .../recipes-connectivity/connman/connman-conf/connman.service | 2 +- .../recipes-connectivity/connman/connman-conf/connman.sh.in | 2 +- meta-webos/recipes-connectivity/dhcp/dhcp_%.bbappend | 2 +- meta-webos/recipes-connectivity/gammu/gammu_%.bbappend | 2 +- meta-webos/recipes-connectivity/gensio/gensio_%.bbappend | 2 +- meta-webos/recipes-connectivity/ifplugd/ifplugd_%.bbappend | 2 +- meta-webos/recipes-connectivity/lftp/lftp_%.bbappend | 2 +- meta-webos/recipes-connectivity/lirc/lirc_%.bbappend | 2 +- meta-webos/recipes-connectivity/nfs-utils/nfs-utils_%.bbappend | 2 +- meta-webos/recipes-connectivity/ofono/ofono_%.bbappend | 2 +- .../recipes-connectivity/openconnect/openconnect_%.bbappend | 2 +- meta-webos/recipes-connectivity/openssl/openssl_%.bbappend | 2 +- .../recipes-connectivity/resolvconf/resolvconf_%.bbappend | 2 +- meta-webos/recipes-connectivity/samba/samba_%.bbappend | 2 +- meta-webos/recipes-connectivity/smstools3/smstools3_%.bbappend | 2 +- meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb | 2 +- .../wpa-supplicant/wpa-supplicant/wpa-supplicant.service | 2 +- .../wpa-supplicant/wpa-supplicant/wpa-supplicant.sh | 2 +- .../wpa-supplicant/wpa-supplicant_%.bbappend | 2 +- meta-webos/recipes-core/base-files/base-files_3.0.14.bbappend | 2 +- meta-webos/recipes-core/base-passwd/base-passwd_3.5.29.bbappend | 2 +- meta-webos/recipes-core/busybox/busybox_%.bbappend | 2 +- meta-webos/recipes-core/dbus/dbus_%.bbappend | 2 +- meta-webos/recipes-core/dropbear/dropbear/dropbear.service | 2 +- meta-webos/recipes-core/dropbear/dropbear_%.bbappend | 2 +- meta-webos/recipes-core/gettext/gettext_%.bbappend | 2 +- meta-webos/recipes-core/glib-2.0/glib-2.0_%.bbappend | 2 +- meta-webos/recipes-core/glibc/glibc-scripts_%.bbappend | 2 +- meta-webos/recipes-core/glibc/glibc_%.bbappend | 2 +- meta-webos/recipes-core/images/webos-image-devel.bb | 2 +- meta-webos/recipes-core/images/webos-image.bb | 2 +- meta-webos/recipes-core/libxml/libxml2_%.bbappend | 2 +- meta-webos/recipes-core/meta/meta-environment.bbappend | 2 +- meta-webos/recipes-core/mm-common/mm-common_%.bbappend | 2 +- .../packagegroups/nativesdk-packagegroup-sdk-host.bbappend | 2 +- .../packagegroups/packagegroup-core-tools-profile.bbappend | 2 +- .../recipes-core/packagegroups/packagegroup-webos-devel.bb | 2 +- .../recipes-core/packagegroups/packagegroup-webos-internal.bb | 2 +- .../recipes-core/packagegroups/packagegroup-webos-test.bb | 2 +- meta-webos/recipes-core/shadow/shadow_%.bbappend | 2 +- meta-webos/recipes-core/systemd/systemd_%.bbappend | 2 +- meta-webos/recipes-core/util-linux/util-linux_%.bbappend | 2 +- meta-webos/recipes-core/webos-qt-sdk/webos-qt-sdk.bb | 2 +- meta-webos/recipes-daemons/opensaf/opensaf_%.bbappend | 2 +- meta-webos/recipes-dbs/leveldb/leveldb_%.bbappend | 2 +- meta-webos/recipes-dbs/mysql/mariadb_%.bbappend | 2 +- .../recipes-devtools/android-tools/android-tools_%.bbappend | 2 +- meta-webos/recipes-devtools/apt/apt_%.bbappend | 2 +- .../recipes-devtools/build-compare/build-compare_%.bbappend | 2 +- .../recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_%.bbappend | 2 +- meta-webos/recipes-devtools/e2fsprogs/e2fsprogs_%.bbappend | 2 +- meta-webos/recipes-devtools/elfutils/elfutils_%.bbappend | 2 +- meta-webos/recipes-devtools/expect/expect_5.45.4.bbappend | 2 +- meta-webos/recipes-devtools/fdisk/gptfdisk_%.bbappend | 2 +- meta-webos/recipes-devtools/flex/flex_%.bbappend | 2 +- meta-webos/recipes-devtools/glide/glide_%.bbappend | 2 +- meta-webos/recipes-devtools/go/go-dep_%.bbappend | 2 +- meta-webos/recipes-devtools/go/go_%.bbappend | 2 +- meta-webos/recipes-devtools/grpc/grpc_%.bbappend | 2 +- meta-webos/recipes-devtools/jsoncpp/jsoncpp_%.bbappend | 2 +- .../kconfig-frontends/kconfig-frontends_%.bbappend | 2 +- meta-webos/recipes-devtools/lapack/lapack_%.bbappend | 2 +- meta-webos/recipes-devtools/libtool/libtool-cross_%.bbappend | 2 +- meta-webos/recipes-devtools/libtool/libtool-native_%.bbappend | 2 +- .../recipes-devtools/libtool/nativesdk-libtool_%.bbappend | 2 +- meta-webos/recipes-devtools/llvm/llvm_%.bbappend | 2 +- meta-webos/recipes-devtools/ltrace/ltrace_git.bbappend | 2 +- meta-webos/recipes-devtools/m4/m4_%.bbappend | 2 +- meta-webos/recipes-devtools/makedevs/makedevs_1.0.1.bbappend | 2 +- meta-webos/recipes-devtools/mpich/mpich_%.bbappend | 2 +- meta-webos/recipes-devtools/mtd/mtd-utils_%.bbappend | 2 +- meta-webos/recipes-devtools/nodejs/nodejs_%.bbappend | 2 +- meta-webos/recipes-devtools/opkg-utils/opkg-utils_%.bbappend | 2 +- meta-webos/recipes-devtools/opkg/opkg_%.bbappend | 2 +- meta-webos/recipes-devtools/pax-utils/pax-utils_%.bbappend | 2 +- meta-webos/recipes-devtools/pm-qa/pm-qa_%.bbappend | 2 +- meta-webos/recipes-devtools/protobuf/protobuf_%.bbappend | 2 +- .../python/python3-atlassian-python-api_3.8.0.bb | 2 +- meta-webos/recipes-devtools/python/python3-deprecated_1.2.12.bb | 2 +- meta-webos/recipes-devtools/python/python3-pymisp_%.bbappend | 2 +- meta-webos/recipes-devtools/python/python3_%.bbappend | 2 +- meta-webos/recipes-devtools/qemu/qemu_%.bbappend | 2 +- meta-webos/recipes-devtools/quilt/quilt_%.bbappend | 2 +- meta-webos/recipes-devtools/rpm/rpm_%.bbappend | 2 +- meta-webos/recipes-devtools/tcf-agent/tcf-agent_%.bbappend | 2 +- meta-webos/recipes-devtools/xmlto/xmlto_%.bbappend | 2 +- meta-webos/recipes-devtools/yajl/yajl_2.1.0.bbappend | 2 +- meta-webos/recipes-extended/bash/bash_%.bbappend | 2 +- meta-webos/recipes-extended/collectd/collectd_%.bbappend | 2 +- meta-webos/recipes-extended/corosync/corosync_%.bbappend | 2 +- meta-webos/recipes-extended/hdparm/hdparm_%.bbappend | 2 +- meta-webos/recipes-extended/iotop/iotop_%.bbappend | 2 +- meta-webos/recipes-extended/lighttpd/lighttpd_%.bbappend | 2 +- meta-webos/recipes-extended/lsb/lsb-release_%.bbappend | 2 +- meta-webos/recipes-extended/ltp/ltp_%.bbappend | 2 +- meta-webos/recipes-extended/mdadm/mdadm_%.bbappend | 2 +- meta-webos/recipes-extended/ostree/ostree_%.bbappend | 2 +- meta-webos/recipes-extended/procps/procps_%.bbappend | 2 +- meta-webos/recipes-extended/rarpd/rarpd_%.bbappend | 2 +- meta-webos/recipes-extended/rsyslog/rsyslog_%.bbappend | 2 +- meta-webos/recipes-extended/sblim-sfcb/sblim-sfcb_%.bbappend | 2 +- .../recipes-extended/scsirastools/scsirastools_%.bbappend | 2 +- meta-webos/recipes-extended/sed/sed_4.8.bbappend | 2 +- meta-webos/recipes-extended/snappy/snappy_%.bbappend | 2 +- meta-webos/recipes-extended/sysdig/sysdig_%.bbappend | 2 +- .../recipes-extended/tcp-wrappers/tcp-wrappers_7.6.bbappend | 2 +- meta-webos/recipes-extended/tzdata/tzdata.bbappend | 2 +- .../recipes-filesystems/unionfs-fuse/unionfs-fuse_%.bbappend | 2 +- meta-webos/recipes-filter/ebtables/ebtables_%.bbappend | 2 +- meta-webos/recipes-graphics/fbida/fbida_%.bbappend | 2 +- meta-webos/recipes-graphics/fontconfig/fontconfig_%.bbappend | 2 +- meta-webos/recipes-graphics/freetype/freetype_%.bbappend | 2 +- meta-webos/recipes-graphics/gphoto2/libgphoto2_%.bbappend | 2 +- meta-webos/recipes-graphics/mesa/mesa_%.bbappend | 2 +- meta-webos/recipes-graphics/piglit/piglit_%.bbappend | 2 +- meta-webos/recipes-graphics/wayland/wayland_%.bbappend | 2 +- meta-webos/recipes-kernel/cpupower/cpupower.bbappend | 2 +- meta-webos/recipes-kernel/dtc/dtc_%.bbappend | 2 +- .../recipes-kernel/kernel-selftest/kernel-selftest.bbappend | 2 +- meta-webos/recipes-kernel/lttng/babeltrace2_%.bbappend | 2 +- meta-webos/recipes-kernel/lttng/babeltrace_%.bbappend | 2 +- meta-webos/recipes-kernel/lttng/lttng-tools_%.bbappend | 2 +- meta-webos/recipes-kernel/systemtap/systemtap_%.bbappend | 2 +- meta-webos/recipes-kernel/wireguard/wireguard-tools_%.bbappend | 2 +- .../com.webos.service.location/com.webos.service.location.bb | 2 +- meta-webos/recipes-location/loc-utils/loc-utils.bb | 2 +- meta-webos/recipes-location/nmeaparser/nmeaparser.bb | 2 +- meta-webos/recipes-multimedia/alsa/alsa-lib_%.bbappend | 2 +- meta-webos/recipes-multimedia/alsa/alsa-plugins_%.bbappend | 2 +- meta-webos/recipes-multimedia/alsa/alsa-tools_%.bbappend | 2 +- .../recipes-multimedia/alsa/alsa-utils-scripts_%.bbappend | 2 +- meta-webos/recipes-multimedia/alsa/alsa-utils_%.bbappend | 2 +- .../com.webos.service.audiofocusmanager.bb | 2 +- .../gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend | 2 +- .../gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend | 2 +- .../gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend | 2 +- .../recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend | 2 +- .../media-codec-interface/media-codec-interface.bb | 2 +- .../recipes-multimedia/pulseaudio/pulseaudio/pulseaudio.service | 2 +- meta-webos/recipes-multimedia/umi/umi.bb | 2 +- meta-webos/recipes-printing/cups/cups-filters_%.bbappend | 2 +- meta-webos/recipes-protocols/openl2tp/openl2tp_%.bbappend | 2 +- meta-webos/recipes-qt/qt6/qtdeclarative/qmllint-supplement.py | 2 +- meta-webos/recipes-qt/qt6/qtgraphicaleffects_%.bbappend | 2 +- meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bbappend | 2 +- meta-webos/recipes-support/apr/apr_%.bbappend | 2 +- meta-webos/recipes-support/attr/acl_%.bbappend | 2 +- .../recipes-support/bash-completion/bash-completion_%.bbappend | 2 +- .../recipes-support/ca-certificates/ca-certificates_%.bbappend | 2 +- meta-webos/recipes-support/curl/curl_%.bbappend | 2 +- meta-webos/recipes-support/dbus/dbus-test_%.bbappend | 2 +- meta-webos/recipes-support/drbd/drbd-utils_%.bbappend | 2 +- meta-webos/recipes-support/gflags/gflags_%.bbappend | 2 +- meta-webos/recipes-support/libcheck/libcheck_%.bbappend | 2 +- meta-webos/recipes-support/libteam/libteam_%.bbappend | 2 +- meta-webos/recipes-support/lio-utils/lio-utils_%.bbappend | 2 +- meta-webos/recipes-support/lm_sensors/lmsensors_%.bbappend | 2 +- meta-webos/recipes-support/logwarn/logwarn_%.bbappend | 2 +- meta-webos/recipes-support/lvm2/lvm2_%.bbappend | 2 +- meta-webos/recipes-support/mcelog/mce-test_%.bbappend | 2 +- meta-webos/recipes-support/mcelog/mcelog_%.bbappend | 2 +- meta-webos/recipes-support/memcached/memcached_%.bbappend | 2 +- .../recipes-support/multipath-tools/multipath-tools_%.bbappend | 2 +- meta-webos/recipes-support/numactl/numactl_%.bbappend | 2 +- meta-webos/recipes-support/opencv/opencv_4.%.bbappend | 2 +- meta-webos/recipes-support/pps-tools/pps-tools_%.bbappend | 2 +- meta-webos/recipes-support/rdma-core/rdma-core_%.bbappend | 2 +- meta-webos/recipes-support/sdparm/sdparm_%.bbappend | 2 +- meta-webos/recipes-support/sg3-utils/sg3-utils_%.bbappend | 2 +- meta-webos/recipes-support/unbound/unbound_%.bbappend | 2 +- .../recipes-support/user-creation/xuser-account_0.1.bbappend | 2 +- meta-webos/recipes-test/bats/bats_%.bbappend | 2 +- meta-webos/recipes-test/googletest/googletest_%.bbappend | 2 +- meta-webos/recipes-upstreamable/googleapis/googleapis_git.bb | 2 +- meta-webos/recipes-upstreamable/gphotofs/gphotofs_0.5.bb | 2 +- .../recipes-upstreamable/gtkmm-utils/gtkmm-utils_0.4.1.bb | 2 +- meta-webos/recipes-upstreamable/leveldb-tl/leveldb-tl_0.1.6.bb | 2 +- meta-webos/recipes-upstreamable/libbson/libbson_git.bb | 2 +- meta-webos/recipes-upstreamable/libhangul/libhangul.bb | 2 +- meta-webos/recipes-upstreamable/libnsbmp/libnsbmp_0.1.0.bb | 2 +- meta-webos/recipes-upstreamable/node-gyp/node-gyp-native_git.bb | 2 +- .../node-gyp/node-gyp-packages-native_0.12.2.bb | 2 +- .../nodejs-module/nodejs-module-nan-native_2.14.1.bb | 2 +- .../nodejs-module/nodejs-module-usocket_0.2.1.bb | 2 +- .../recipes-upstreamable/pacrunner/pacrunner/pacrunner.conf | 2 +- meta-webos/recipes-upstreamable/pacrunner/pacrunner_0.9.bb | 2 +- meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb | 2 +- meta-webos/recipes-upstreamable/pyzy/pyzy.bb | 2 +- meta-webos/recipes-upstreamable/snowboy/snowboy/CMakeLists.txt | 2 +- meta-webos/recipes-upstreamable/snowboy/snowboy_%.bbappend | 2 +- meta-webos/recipes-upstreamable/sp-measure/sp-measure_git.bb | 2 +- meta-webos/recipes-upstreamable/sp-memusage/sp-memusage_git.bb | 2 +- meta-webos/recipes-upstreamable/sqlcipher/sqlcipher.bb | 2 +- meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb | 2 +- meta-webos/recipes-upstreamable/uchardet/uchardet_0.0.1.bb | 2 +- meta-webos/recipes-upstreamable/xulrunner/xulrunner_3.6.27.bb | 2 +- meta-webos/recipes-utils/udevil/udevil_%.bbappend | 2 +- meta-webos/recipes-utils/vmwgfx-layout/vmwgfx-layout.bb | 2 +- .../applicationinstallerutility/applicationinstallerutility.bb | 2 +- .../recipes-webos/avoutputd/avoutput-adaptation-layer-api.bb | 2 +- .../recipes-webos/avoutputd/avoutput-adaptation-layer-mock.bb | 2 +- meta-webos/recipes-webos/avoutputd/avoutputd.bb | 2 +- meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb | 2 +- meta-webos/recipes-webos/bluetooth/com.webos.service.hfp.bb | 2 +- meta-webos/recipes-webos/bootd/bootd.bb | 2 +- .../cmake-modules-webos/cmake-modules-webos-native.bb | 2 +- .../com.palm.service.devmode/com.palm.service.devmode.bb | 2 +- .../recipes-webos/com.webos.app.camera/com.webos.app.camera.bb | 2 +- .../com.webos.app.settings/com.webos.app.settings.bb | 2 +- .../com.webos.app.videoplayer/com.webos.app.videoplayer.bb | 2 +- .../recipes-webos/com.webos.app.volume/com.webos.app.volume.bb | 2 +- .../recipes-webos/com.webos.service.ai/com.webos.service.ai.bb | 2 +- .../com.webos.service.audiooutput.bb | 2 +- .../com.webos.service.camera/com.webos.service.camera.bb | 2 +- .../com.webos.service.flowmanager/com.webos.app.mediaviewer.bb | 2 +- .../com.webos.service.flowmanager.bb | 2 +- .../com.webos.service.intent/com.webos.service.intent.bb | 2 +- .../com.webos.service.mediacontroller.bb | 2 +- .../com.webos.service.pdm/com.webos.service.pdm.bb | 2 +- .../com.webos.service.peripheralmanager.bb | 2 +- .../com.webos.service.power2/com.webos.service.power2.bb | 2 +- .../com.webos.service.unifiedsearch.bb | 2 +- meta-webos/recipes-webos/configd-data/configd-data.bb | 2 +- meta-webos/recipes-webos/configd/configd.bb | 2 +- meta-webos/recipes-webos/configurator/configurator.bb | 2 +- .../recipes-webos/cpushareholder-stub/cpushareholder-stub.bb | 2 +- .../event-monitor-network/event-monitor-network.bb | 2 +- meta-webos/recipes-webos/event-monitor/event-monitor.bb | 2 +- meta-webos/recipes-webos/filecache/filecache.bb | 2 +- meta-webos/recipes-webos/fluentbit/fluentbit_%.bbappend | 2 +- .../recipes-webos/frameworks/nodejs-module-webos-service.bb | 2 +- meta-webos/recipes-webos/ilib-webapp/ilib-qml-plugin.bb | 2 +- meta-webos/recipes-webos/imemanager/imemanager.bb | 2 +- meta-webos/recipes-webos/jemalloc/jemalloc.bb | 2 +- meta-webos/recipes-webos/libgdrive/libgdrive.bb | 2 +- meta-webos/recipes-webos/libpmscore/libpmscore.bb | 2 +- meta-webos/recipes-webos/librolegen/librolegen.bb | 2 +- meta-webos/recipes-webos/libsandbox/libsandbox.bb | 2 +- meta-webos/recipes-webos/libtimedautomata/libtimedautomata.bb | 2 +- meta-webos/recipes-webos/libwebosi18n/libwebosi18n.bb | 2 +- meta-webos/recipes-webos/ls2-helpers/ls2-helpers.bb | 2 +- meta-webos/recipes-webos/luna-downloadmgr/luna-downloadmgr.bb | 2 +- meta-webos/recipes-webos/luna-init/luna-init.bb | 2 +- meta-webos/recipes-webos/luna-prefs/luna-prefs-data.bb | 2 +- meta-webos/recipes-webos/luna-prefs/luna-prefs.bb | 2 +- .../maliit-framework-webos/maliit-framework-webos.bb | 2 +- .../media-resource-calculator/media-resource-calculator.bb | 2 +- meta-webos/recipes-webos/mojoloader/mojoloader.bb | 2 +- .../recipes-webos/mojoservicelauncher/mojoservicelauncher.bb | 2 +- .../nodejs-module-ext/nodejs-module-node-red_0.18.7.bb | 2 +- .../nodejs-module-webos/nodejs-module-webos-dynaload.bb | 2 +- .../nodejs-module-webos/nodejs-module-webos-pmlog.bb | 2 +- .../nodejs-module-webos/nodejs-module-webos-sysbus.bb | 2 +- .../recipes-webos/nodejs-module-webos/nodejs-module-webos.inc | 2 +- meta-webos/recipes-webos/notificationmgr/notificationmgr.bb | 2 +- .../recipes-webos/nyx-modules-qemux86/nyx-modules-qemux86.bb | 2 +- meta-webos/recipes-webos/nyx-modules/nyx-modules.bb | 2 +- meta-webos/recipes-webos/nyx-utils/nyx-utils.bb | 2 +- meta-webos/recipes-webos/openwnn-webos/openwnn-webos.bb | 2 +- meta-webos/recipes-webos/pdm-plugin/pdm-plugin.bb | 2 +- meta-webos/recipes-webos/pmklogd/pmklogd.bb | 2 +- meta-webos/recipes-webos/pmlogctl/pmlogctl.bb | 2 +- meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb | 2 +- meta-webos/recipes-webos/pmloglib/pmloglib-private.bb | 2 +- meta-webos/recipes-webos/pmloglib/pmloglib.bb | 2 +- .../pms-support-reference/pms-support-reference.bb | 2 +- meta-webos/recipes-webos/pmtrace/pmtrace.bb | 2 +- .../recipes-webos/qml-webos-components/qml-webos-components.bb | 2 +- meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb | 2 +- meta-webos/recipes-webos/settingsservice/settingsservice.bb | 2 +- meta-webos/recipes-webos/sleepd/sleepd.bb | 2 +- meta-webos/recipes-webos/test-apps/bareapp.bb | 2 +- meta-webos/recipes-webos/test-apps/com.webos.app.test.enact.bb | 2 +- .../recipes-webos/test-apps/com.webos.app.test.webosose.bb | 2 +- meta-webos/recipes-webos/test-apps/com.webos.app.test.webrtc.bb | 2 +- .../recipes-webos/test-apps/com.webos.app.test.youtube.bb | 2 +- meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb | 2 +- meta-webos/recipes-webos/umediaserver/umediaserver.bb | 2 +- .../recipes-webos/videooutputd/com.webos.service.videooutput.bb | 2 +- .../videooutputd/videooutput-adaptation-layer-api.bb | 2 +- .../videooutputd/videooutput-adaptation-layer-mock.bb | 2 +- .../recipes-webos/webos-connman-adapter/wca-support-api.bb | 2 +- meta-webos/recipes-webos/webos-connman-adapter/wca-support.bb | 2 +- .../webos-connman-adapter/webos-connman-adapter.bb | 2 +- .../webos-fontconfig-files/webos-fontconfig-files.bb | 2 +- meta-webos/recipes-webos/webos-fonts/webos-fonts.bb | 2 +- meta-webos/recipes-webos/webos-fonts/webos-fonts.inc | 2 +- meta-webos/recipes-webos/webos-nettools/webos-nettools.bb | 2 +- meta-webos/scripts/build-changes/build_changes.sh | 2 +- meta-webos/scripts/build-changes/set_commits.sh | 2 +- meta-webos/scripts/build-changes/update_build_changes.sh | 2 +- meta-webos/scripts/buildhistory-collect-src-info | 2 +- meta-webos/scripts/checkicecc.py | 2 +- meta-webos/scripts/prepare-submission.sh | 2 +- meta-webos/scripts/webosvbox | 2 +- 468 files changed, 468 insertions(+), 468 deletions(-) diff --git a/.gitignore b/.gitignore index a80d9d708..6be233c0f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2018 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. meta-webos/lib/__pycache__/ MCF-PATCHES* diff --git a/meta-webos-backports/meta-webos-backports-3.2/conf/layer.conf b/meta-webos-backports/meta-webos-backports-3.2/conf/layer.conf index 68e8ada6c..75bb2b7d5 100644 --- a/meta-webos-backports/meta-webos-backports-3.2/conf/layer.conf +++ b/meta-webos-backports/meta-webos-backports-3.2/conf/layer.conf @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. # We have conf and classes directories => add to BBPATH BBPATH .= ":${LAYERDIR}" diff --git a/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf b/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf index 01a7b489b..33268fb2c 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf +++ b/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. # We have conf and classes directories => add to BBPATH BBPATH .= ":${LAYERDIR}" diff --git a/meta-webos-iot/classes/webos_iot.bbclass b/meta-webos-iot/classes/webos_iot.bbclass index f3a306cb9..be22c1fa1 100644 --- a/meta-webos-iot/classes/webos_iot.bbclass +++ b/meta-webos-iot/classes/webos_iot.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. # IMAGE_FEATURES controls the contents of webOS IoT images diff --git a/meta-webos-iot/classes/webos_iot_core.bbclass b/meta-webos-iot/classes/webos_iot_core.bbclass index d5da05691..30e82f78f 100644 --- a/meta-webos-iot/classes/webos_iot_core.bbclass +++ b/meta-webos-iot/classes/webos_iot_core.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. # IMAGE_FEATURES controls the contents of webOS IoT images # diff --git a/meta-webos-iot/classes/webos_iot_image.bbclass b/meta-webos-iot/classes/webos_iot_image.bbclass index b7d02bec1..0fa01d9cb 100644 --- a/meta-webos-iot/classes/webos_iot_image.bbclass +++ b/meta-webos-iot/classes/webos_iot_image.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. # IMAGE_FEATURES controls the contents of webOS IoT images # diff --git a/meta-webos-iot/conf/layer.conf b/meta-webos-iot/conf/layer.conf index 4fc778efb..55c673e65 100644 --- a/meta-webos-iot/conf/layer.conf +++ b/meta-webos-iot/conf/layer.conf @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. BBPATH ?= "" # We have a conf and classes directory, add to BBPATH diff --git a/meta-webos-iot/recipes-core/images/webos-iot-image-devel.bb b/meta-webos-iot/recipes-core/images/webos-iot-image-devel.bb index 819dbcac2..d4c44f8d4 100644 --- a/meta-webos-iot/recipes-core/images/webos-iot-image-devel.bb +++ b/meta-webos-iot/recipes-core/images/webos-iot-image-devel.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. SUMMARY = "webOS IoT developer/test image" DESCRIPTION = "This image contains additional packages useful during \ diff --git a/meta-webos-iot/recipes-core/images/webos-iot-image.bb b/meta-webos-iot/recipes-core/images/webos-iot-image.bb index fa1606180..b1bab849f 100644 --- a/meta-webos-iot/recipes-core/images/webos-iot-image.bb +++ b/meta-webos-iot/recipes-core/images/webos-iot-image.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. DESCRIPTION = "webOS IoT image" LICENSE = "CLOSED" diff --git a/meta-webos-iot/recipes-core/initscripts/webos-initscripts.bbappend b/meta-webos-iot/recipes-core/initscripts/webos-initscripts.bbappend index e1b8cc442..b5962f316 100644 --- a/meta-webos-iot/recipes-core/initscripts/webos-initscripts.bbappend +++ b/meta-webos-iot/recipes-core/initscripts/webos-initscripts.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2021 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "iot1" diff --git a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-devel.bbappend b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-devel.bbappend index 75275dc66..1eba1ed35 100644 --- a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-devel.bbappend +++ b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-devel.bbappend @@ -1,3 +1,3 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. RDEPENDS:${PN}:remove = "qml-webos-framework-tools" diff --git a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-bsp.bb b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-bsp.bb index 08afc7ecc..ea694219c 100644 --- a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-bsp.bb +++ b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-bsp.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. DESCRIPTION = "meta-webos-iot components used in webOS OSE" LICENSE = "Apache-2.0" diff --git a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-core.bb b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-core.bb index 26fc8eb86..f8d3b59e2 100644 --- a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-core.bb +++ b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-core.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2021 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. DESCRIPTION = "meta-webos-iot components used in webOS OSE" LICENSE = "Apache-2.0" diff --git a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-devtools.bb b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-devtools.bb index f7420af84..d71528038 100644 --- a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-devtools.bb +++ b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot-devtools.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. DESCRIPTION = "meta-webos-iot components used in webOS OSE" LICENSE = "Apache-2.0" diff --git a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot.bb b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot.bb index aa6b25322..7dc982f78 100644 --- a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot.bb +++ b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. DESCRIPTION = "meta-webos-iot components used in webOS OSE" LICENSE = "Apache-2.0" diff --git a/meta-webos-iot/recipes-devtools/uftrace/uftrace_%.bbappend b/meta-webos-iot/recipes-devtools/uftrace/uftrace_%.bbappend index 7becbb734..9f4b8e90a 100644 --- a/meta-webos-iot/recipes-devtools/uftrace/uftrace_%.bbappend +++ b/meta-webos-iot/recipes-devtools/uftrace/uftrace_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2021 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. SRCREV = "${AUTOREV}" SRC_URI = "git://github.com/namhyung/${BPN};branch=master;protocol=https" diff --git a/meta-webos-raspberrypi/classes/sota_webos-rpi.bbclass b/meta-webos-raspberrypi/classes/sota_webos-rpi.bbclass index b57527542..74b11080a 100644 --- a/meta-webos-raspberrypi/classes/sota_webos-rpi.bbclass +++ b/meta-webos-raspberrypi/classes/sota_webos-rpi.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. # Rather than using sota_raspberrypi.bbclass on meta-updater/classes, # this setting keeps the boot partition then original one as possible. diff --git a/meta-webos-raspberrypi/conf/layer.conf b/meta-webos-raspberrypi/conf/layer.conf index d6a7a904d..faa1c4f15 100644 --- a/meta-webos-raspberrypi/conf/layer.conf +++ b/meta-webos-raspberrypi/conf/layer.conf @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2020 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. BBPATH ?= "" # We have a conf and classes directory, add to BBPATH diff --git a/meta-webos-raspberrypi/conf/machine/include/webos-rpi.inc b/meta-webos-raspberrypi/conf/machine/include/webos-rpi.inc index bcfbc6edf..528ae513c 100644 --- a/meta-webos-raspberrypi/conf/machine/include/webos-rpi.inc +++ b/meta-webos-raspberrypi/conf/machine/include/webos-rpi.inc @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. # The MACHINE.conf for every MACHINE that has an Raspberry Pi BSP must require this # file. diff --git a/meta-webos-raspberrypi/conf/machine/raspberrypi3-64.conf b/meta-webos-raspberrypi/conf/machine/raspberrypi3-64.conf index 7dc0b4a80..3d63569f4 100644 --- a/meta-webos-raspberrypi/conf/machine/raspberrypi3-64.conf +++ b/meta-webos-raspberrypi/conf/machine/raspberrypi3-64.conf @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2020 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. #@TYPE: Machine #@NAME: RaspberryPi 3 Development Board diff --git a/meta-webos-raspberrypi/conf/machine/raspberrypi3.conf b/meta-webos-raspberrypi/conf/machine/raspberrypi3.conf index 4a11a6c2c..2208ee9f5 100644 --- a/meta-webos-raspberrypi/conf/machine/raspberrypi3.conf +++ b/meta-webos-raspberrypi/conf/machine/raspberrypi3.conf @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2020 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. #@TYPE: Machine #@NAME: RaspberryPi 3 Development Board (32bit) diff --git a/meta-webos-raspberrypi/conf/machine/raspberrypi4-64.conf b/meta-webos-raspberrypi/conf/machine/raspberrypi4-64.conf index 06615dd71..a01f858fb 100644 --- a/meta-webos-raspberrypi/conf/machine/raspberrypi4-64.conf +++ b/meta-webos-raspberrypi/conf/machine/raspberrypi4-64.conf @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. #@TYPE: Machine #@NAME: RaspberryPi 4 Development Board (64bit) diff --git a/meta-webos-raspberrypi/conf/machine/raspberrypi4.conf b/meta-webos-raspberrypi/conf/machine/raspberrypi4.conf index a846faa2f..66733a748 100644 --- a/meta-webos-raspberrypi/conf/machine/raspberrypi4.conf +++ b/meta-webos-raspberrypi/conf/machine/raspberrypi4.conf @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. #@TYPE: Machine #@NAME: RaspberryPi 4 Development Board (32bit) diff --git a/meta-webos-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bbappend b/meta-webos-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bbappend index 0680163de..d231d0ec9 100644 --- a/meta-webos-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bbappend +++ b/meta-webos-raspberrypi/recipes-bsp/bootfiles/rpi-config_git.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosrpi10" diff --git a/meta-webos-raspberrypi/recipes-bsp/resize-rootfs/files/resize-rootfs.service b/meta-webos-raspberrypi/recipes-bsp/resize-rootfs/files/resize-rootfs.service index 4730c34e4..7d604f91b 100644 --- a/meta-webos-raspberrypi/recipes-bsp/resize-rootfs/files/resize-rootfs.service +++ b/meta-webos-raspberrypi/recipes-bsp/resize-rootfs/files/resize-rootfs.service @@ -1,6 +1,6 @@ # @@@LICENSE # -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. # # LICENSE@@@ diff --git a/meta-webos-raspberrypi/recipes-bsp/resize-rootfs/files/resize-rootfs.sh b/meta-webos-raspberrypi/recipes-bsp/resize-rootfs/files/resize-rootfs.sh index 0ca2b83d9..47e58fb28 100644 --- a/meta-webos-raspberrypi/recipes-bsp/resize-rootfs/files/resize-rootfs.sh +++ b/meta-webos-raspberrypi/recipes-bsp/resize-rootfs/files/resize-rootfs.sh @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/meta-webos-raspberrypi/recipes-bsp/resize-rootfs/resize-rootfs.bb b/meta-webos-raspberrypi/recipes-bsp/resize-rootfs/resize-rootfs.bb index 88d49d033..7f51bdaff 100644 --- a/meta-webos-raspberrypi/recipes-bsp/resize-rootfs/resize-rootfs.bb +++ b/meta-webos-raspberrypi/recipes-bsp/resize-rootfs/resize-rootfs.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "A service to expand rootfs to whole media" AUTHOR = "JeongBong Seo " diff --git a/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot_%.bbappend b/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot_%.bbappend index 19a32eec9..6daea0cf2 100644 --- a/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot_%.bbappend +++ b/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2020 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosrpi3" diff --git a/meta-webos-raspberrypi/recipes-connectivity/connman/connman-conf.bbappend b/meta-webos-raspberrypi/recipes-connectivity/connman/connman-conf.bbappend index 73c14a2fa..457c7eb3c 100644 --- a/meta-webos-raspberrypi/recipes-connectivity/connman/connman-conf.bbappend +++ b/meta-webos-raspberrypi/recipes-connectivity/connman/connman-conf.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosrpi2" diff --git a/meta-webos-raspberrypi/recipes-connectivity/pi-bluetooth/pi-bluetooth_%.bbappend b/meta-webos-raspberrypi/recipes-connectivity/pi-bluetooth/pi-bluetooth_%.bbappend index 8a4b34990..8d0a95612 100644 --- a/meta-webos-raspberrypi/recipes-connectivity/pi-bluetooth/pi-bluetooth_%.bbappend +++ b/meta-webos-raspberrypi/recipes-connectivity/pi-bluetooth/pi-bluetooth_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosrpi3" diff --git a/meta-webos-raspberrypi/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend b/meta-webos-raspberrypi/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend index 5733bba0a..9c914a68e 100644 --- a/meta-webos-raspberrypi/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend +++ b/meta-webos-raspberrypi/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosrpi1" diff --git a/meta-webos-raspberrypi/recipes-core/base-files/base-files_%.bbappend b/meta-webos-raspberrypi/recipes-core/base-files/base-files_%.bbappend index b86789641..7757061cb 100644 --- a/meta-webos-raspberrypi/recipes-core/base-files/base-files_%.bbappend +++ b/meta-webos-raspberrypi/recipes-core/base-files/base-files_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosrpi2" diff --git a/meta-webos-raspberrypi/recipes-core/images/rpi-test-image.bbappend b/meta-webos-raspberrypi/recipes-core/images/rpi-test-image.bbappend index 23a488c75..cf836710e 100644 --- a/meta-webos-raspberrypi/recipes-core/images/rpi-test-image.bbappend +++ b/meta-webos-raspberrypi/recipes-core/images/rpi-test-image.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append:rpi = "webosrpi2" diff --git a/meta-webos-raspberrypi/recipes-core/images/webos-image.bbappend b/meta-webos-raspberrypi/recipes-core/images/webos-image.bbappend index eeb2c7219..7ea20a0e3 100644 --- a/meta-webos-raspberrypi/recipes-core/images/webos-image.bbappend +++ b/meta-webos-raspberrypi/recipes-core/images/webos-image.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append:rpi = "webosrpi1" diff --git a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-rpi-test.bbappend b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-rpi-test.bbappend index 5c10625fd..91cf0143a 100644 --- a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-rpi-test.bbappend +++ b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-rpi-test.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2020 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. # You don't need to change this value when you're changing just a RDEPENDS:${PN} variable. EXTENDPRAUTO:append:rpi = "webosrpi3" diff --git a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-devel.bbappend b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-devel.bbappend index 03a596b63..bcb82d46f 100644 --- a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-devel.bbappend +++ b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-devel.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. GATOR:raspberrypi4 = " \ gator \ diff --git a/meta-webos-raspberrypi/recipes-graphics/mesa/mesa_%.bbappend b/meta-webos-raspberrypi/recipes-graphics/mesa/mesa_%.bbappend index 529c5429f..00e235c12 100644 --- a/meta-webos-raspberrypi/recipes-graphics/mesa/mesa_%.bbappend +++ b/meta-webos-raspberrypi/recipes-graphics/mesa/mesa_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosrpi4" diff --git a/meta-webos-raspberrypi/recipes-graphics/userland/userland_git.bbappend b/meta-webos-raspberrypi/recipes-graphics/userland/userland_git.bbappend index 3dd7087c5..2dcbcc849 100644 --- a/meta-webos-raspberrypi/recipes-graphics/userland/userland_git.bbappend +++ b/meta-webos-raspberrypi/recipes-graphics/userland/userland_git.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2020 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append:rpi = "webosrpi4" diff --git a/meta-webos-raspberrypi/recipes-graphics/wayland/wayland-protocols_%.bbappend b/meta-webos-raspberrypi/recipes-graphics/wayland/wayland-protocols_%.bbappend index 8597be861..998926d51 100644 --- a/meta-webos-raspberrypi/recipes-graphics/wayland/wayland-protocols_%.bbappend +++ b/meta-webos-raspberrypi/recipes-graphics/wayland/wayland-protocols_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosrpi2" diff --git a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.4.bbappend b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.4.bbappend index 0e01b1f0d..b19742817 100644 --- a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.4.bbappend +++ b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.4.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. # security.cfg - enable security features. Should be applied to default configuration. SRC_URI:append = " \ diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.16.%.bbappend index 6380a39ed..d5fbd0b82 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.16.%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. require gstreamer1.0-webos-common.inc diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.%.bbappend index bf8914a82..b751a6465 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. EXTENDPRAUTO:append:rpi = "webosrpi6" diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend index 1019bbd81..07dbfc3b9 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. require gstreamer1.0-webos-common.inc diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend index 481799eed..ef093e276 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2021 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. EXTENDPRAUTO:append:rpi = "webosrpi4" diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.16.%.bbappend index d30a63179..f6d0ac6c6 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.16.%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. require gstreamer1.0-webos-common.inc diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-webos-common.inc b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-webos-common.inc index dfbf91296..b362e6e53 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-webos-common.inc +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-webos-common.inc @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2021 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. # inherit ${@'webos_public_repo webos_enhanced_submissions' if '${MACHINE}'.startswith('raspberrypi3') or '${MACHINE}'.startswith('raspberrypi4') else ''} diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend index aad84c7f8..f4b4f59c0 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. require gstreamer1.0-webos-common.inc diff --git a/meta-webos-raspberrypi/recipes-multimedia/omx-components/omx-components.bb b/meta-webos-raspberrypi/recipes-multimedia/omx-components/omx-components.bb index 97367d671..e3c5a7538 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/omx-components/omx-components.bb +++ b/meta-webos-raspberrypi/recipes-multimedia/omx-components/omx-components.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "OMX Components implementation for Raspberry Pi" AUTHOR = "Purushottam Narayana " diff --git a/meta-webos-raspberrypi/recipes-multimedia/umi/umi.bbappend b/meta-webos-raspberrypi/recipes-multimedia/umi/umi.bbappend index 907db61ae..0501f23cf 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/umi/umi.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/umi/umi.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. EXTENDPRAUTO:append:rpi = "webosrpi1" diff --git a/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland_git.bbappend b/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland_git.bbappend index 27870fe5b..6ac36f500 100644 --- a/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland_git.bbappend +++ b/meta-webos-raspberrypi/recipes-qt/qt6/qtwayland_git.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. EXTENDPRAUTO:append:rpi = "webosrpi2" diff --git a/meta-webos-raspberrypi/recipes-webos/avoutputd/avoutput-adaptation-layer-rpi.bb b/meta-webos-raspberrypi/recipes-webos/avoutputd/avoutput-adaptation-layer-rpi.bb index 7159aeac2..442ebcb6f 100644 --- a/meta-webos-raspberrypi/recipes-webos/avoutputd/avoutput-adaptation-layer-rpi.bb +++ b/meta-webos-raspberrypi/recipes-webos/avoutputd/avoutput-adaptation-layer-rpi.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "AVAL API implementation for Raspberry Pi" AUTHOR = "Soumya Aithal " diff --git a/meta-webos-raspberrypi/recipes-webos/db8/db8.bbappend b/meta-webos-raspberrypi/recipes-webos/db8/db8.bbappend index 1922ba450..90718b1dc 100644 --- a/meta-webos-raspberrypi/recipes-webos/db8/db8.bbappend +++ b/meta-webos-raspberrypi/recipes-webos/db8/db8.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2020 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append:rpi = "webosrpi2" diff --git a/meta-webos-raspberrypi/recipes-webos/videooutputd/videooutput-adaptation-layer-rpi.bb b/meta-webos-raspberrypi/recipes-webos/videooutputd/videooutput-adaptation-layer-rpi.bb index ed58da692..2d70398f0 100644 --- a/meta-webos-raspberrypi/recipes-webos/videooutputd/videooutput-adaptation-layer-rpi.bb +++ b/meta-webos-raspberrypi/recipes-webos/videooutputd/videooutput-adaptation-layer-rpi.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "VAL API implementation library Raspberry Pi" AUTHOR = "Kwanghee Lee " diff --git a/meta-webos-raspberrypi/recipes-webos/wam/wam.bbappend b/meta-webos-raspberrypi/recipes-webos/wam/wam.bbappend index ff1c39086..738221bdf 100644 --- a/meta-webos-raspberrypi/recipes-webos/wam/wam.bbappend +++ b/meta-webos-raspberrypi/recipes-webos/wam/wam.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append:rpi = "webosrpi4" diff --git a/meta-webos-raspberrypi/recipes.txt b/meta-webos-raspberrypi/recipes.txt index fb5a83510..123b92fa3 100644 --- a/meta-webos-raspberrypi/recipes.txt +++ b/meta-webos-raspberrypi/recipes.txt @@ -1,4 +1,4 @@ -# Copyright (c) 2017 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. # XXX Incomplete diff --git a/meta-webos-smack/classes/webos_smack_labeling.bbclass b/meta-webos-smack/classes/webos_smack_labeling.bbclass index 217738901..833df7179 100644 --- a/meta-webos-smack/classes/webos_smack_labeling.bbclass +++ b/meta-webos-smack/classes/webos_smack_labeling.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. SMACK_RULES_GEN ?= "${exec_prefix}/share/smack/smack_rules_gen" APP_DIR ?= "${webos_applicationsdir}" diff --git a/meta-webos-smack/conf/layer.conf b/meta-webos-smack/conf/layer.conf index 79a3e160c..4e68bc68f 100644 --- a/meta-webos-smack/conf/layer.conf +++ b/meta-webos-smack/conf/layer.conf @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. # We have a conf and classes directory, add to BBPATH BBPATH =. "${LAYERDIR}:" diff --git a/meta-webos-smack/recipes-core/base-files/base-files_%.bbappend b/meta-webos-smack/recipes-core/base-files/base-files_%.bbappend index ce91b201b..ac51a1918 100644 --- a/meta-webos-smack/recipes-core/base-files/base-files_%.bbappend +++ b/meta-webos-smack/recipes-core/base-files/base-files_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack1', '', d)}" diff --git a/meta-webos-smack/recipes-core/coreutils/coreutils_%.bbappend b/meta-webos-smack/recipes-core/coreutils/coreutils_%.bbappend index 34beedf11..b32e46c7b 100644 --- a/meta-webos-smack/recipes-core/coreutils/coreutils_%.bbappend +++ b/meta-webos-smack/recipes-core/coreutils/coreutils_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack1', '', d)}" diff --git a/meta-webos-smack/recipes-core/images/webos-image.bbappend b/meta-webos-smack/recipes-core/images/webos-image.bbappend index 2c190817e..56312ae78 100644 --- a/meta-webos-smack/recipes-core/images/webos-image.bbappend +++ b/meta-webos-smack/recipes-core/images/webos-image.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack1', '', d)}" diff --git a/meta-webos-smack/recipes-core/packagegroups/packagegroup-webos-extended.bbappend b/meta-webos-smack/recipes-core/packagegroups/packagegroup-webos-extended.bbappend index bc1c31fc1..033b9eb87 100644 --- a/meta-webos-smack/recipes-core/packagegroups/packagegroup-webos-extended.bbappend +++ b/meta-webos-smack/recipes-core/packagegroups/packagegroup-webos-extended.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack1', '', d)}" diff --git a/meta-webos-smack/recipes-core/systemd/systemd_%.bbappend b/meta-webos-smack/recipes-core/systemd/systemd_%.bbappend index bc92e4393..157288089 100644 --- a/meta-webos-smack/recipes-core/systemd/systemd_%.bbappend +++ b/meta-webos-smack/recipes-core/systemd/systemd_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack4', '', d)}" diff --git a/meta-webos-smack/recipes-kernel/linux/linux-%.bbappend b/meta-webos-smack/recipes-kernel/linux/linux-%.bbappend index 6d9f77cab..651b24daf 100644 --- a/meta-webos-smack/recipes-kernel/linux/linux-%.bbappend +++ b/meta-webos-smack/recipes-kernel/linux/linux-%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack2', '', d)}" diff --git a/meta-webos-smack/recipes-security/smack/files/smack_rules_gen b/meta-webos-smack/recipes-security/smack/files/smack_rules_gen index 55a42eb27..6e7d561a3 100644 --- a/meta-webos-smack/recipes-security/smack/files/smack_rules_gen +++ b/meta-webos-smack/recipes-security/smack/files/smack_rules_gen @@ -1,6 +1,6 @@ #!/usr/bin/python3 # -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. # # Confidential computer software. Valid license from LG required for # possession, use or copying. diff --git a/meta-webos-smack/recipes-security/smack/smack_%.bbappend b/meta-webos-smack/recipes-security/smack/smack_%.bbappend index 589af9720..2a5560c08 100644 --- a/meta-webos-smack/recipes-security/smack/smack_%.bbappend +++ b/meta-webos-smack/recipes-security/smack/smack_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "smack4" diff --git a/meta-webos-smack/recipes-webos/chromium/webruntime_%.bbappend b/meta-webos-smack/recipes-webos/chromium/webruntime_%.bbappend index 63b0b0809..63af51eae 100644 --- a/meta-webos-smack/recipes-webos/chromium/webruntime_%.bbappend +++ b/meta-webos-smack/recipes-webos/chromium/webruntime_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack2', '', d)}" diff --git a/meta-webos-smack/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bbappend b/meta-webos-smack/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bbappend index 27308a0fc..39b7888e9 100644 --- a/meta-webos-smack/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bbappend +++ b/meta-webos-smack/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack2', '', d)}" diff --git a/meta-webos-smack/recipes-webos/com.webos.app.test.smack.native/com.webos.app.test.smack.native.bb b/meta-webos-smack/recipes-webos/com.webos.app.test.smack.native/com.webos.app.test.smack.native.bb index 139b28dee..5e052947a 100644 --- a/meta-webos-smack/recipes-webos/com.webos.app.test.smack.native/com.webos.app.test.smack.native.bb +++ b/meta-webos-smack/recipes-webos/com.webos.app.test.smack.native/com.webos.app.test.smack.native.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "Native Qt App" SECTION = "webos/apps" diff --git a/meta-webos-smack/recipes-webos/qml-webos-framework/qml-webos-framework.bbappend b/meta-webos-smack/recipes-webos/qml-webos-framework/qml-webos-framework.bbappend index b98a0d2bc..62d0795e9 100644 --- a/meta-webos-smack/recipes-webos/qml-webos-framework/qml-webos-framework.bbappend +++ b/meta-webos-smack/recipes-webos/qml-webos-framework/qml-webos-framework.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack1', '', d)}" diff --git a/meta-webos-smack/recipes-webos/wam/wam.bbappend b/meta-webos-smack/recipes-webos/wam/wam.bbappend index e4b50d202..d3ac091a3 100644 --- a/meta-webos-smack/recipes-webos/wam/wam.bbappend +++ b/meta-webos-smack/recipes-webos/wam/wam.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "${@bb.utils.contains('DISTRO_FEATURES', 'smack', 'smack2', '', d)}" diff --git a/meta-webos-updater/classes/usrmerge_fix.bbclass b/meta-webos-updater/classes/usrmerge_fix.bbclass index c27b421d9..7557466cb 100644 --- a/meta-webos-updater/classes/usrmerge_fix.bbclass +++ b/meta-webos-updater/classes/usrmerge_fix.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. # move /lib, /bin, /sbin to /usr do_install:append:sota() { diff --git a/meta-webos-updater/conf/layer.conf b/meta-webos-updater/conf/layer.conf index f8c8567ea..ff9a1bfed 100644 --- a/meta-webos-updater/conf/layer.conf +++ b/meta-webos-updater/conf/layer.conf @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. BBPATH ?= "" # We have a conf and classes directory, add to BBPATH diff --git a/meta-webos-updater/recipes-core/base-files/base-files_%.bbappend b/meta-webos-updater/recipes-core/base-files/base-files_%.bbappend index 6f924759d..893622b77 100644 --- a/meta-webos-updater/recipes-core/base-files/base-files_%.bbappend +++ b/meta-webos-updater/recipes-core/base-files/base-files_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosupdater2" diff --git a/meta-webos-updater/recipes-core/busybox/busybox_%.bbappend b/meta-webos-updater/recipes-core/busybox/busybox_%.bbappend index 38e8dc5fd..da88e01a7 100644 --- a/meta-webos-updater/recipes-core/busybox/busybox_%.bbappend +++ b/meta-webos-updater/recipes-core/busybox/busybox_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosupdater1" diff --git a/meta-webos-updater/recipes-core/images/initramfs-ostree-image.bbappend b/meta-webos-updater/recipes-core/images/initramfs-ostree-image.bbappend index 9fb71610f..597d86e4d 100644 --- a/meta-webos-updater/recipes-core/images/initramfs-ostree-image.bbappend +++ b/meta-webos-updater/recipes-core/images/initramfs-ostree-image.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos-updater/recipes-core/initscripts/webos-initscripts.bbappend b/meta-webos-updater/recipes-core/initscripts/webos-initscripts.bbappend index 9be379660..9e66c5ec8 100644 --- a/meta-webos-updater/recipes-core/initscripts/webos-initscripts.bbappend +++ b/meta-webos-updater/recipes-core/initscripts/webos-initscripts.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosupdater1" diff --git a/meta-webos-updater/recipes-filesystems/ntfs-3g-ntfsprogs/ntfs-3g-ntfsprogs_%.bbappend b/meta-webos-updater/recipes-filesystems/ntfs-3g-ntfsprogs/ntfs-3g-ntfsprogs_%.bbappend index cdb5b21e4..a59ea5f5d 100644 --- a/meta-webos-updater/recipes-filesystems/ntfs-3g-ntfsprogs/ntfs-3g-ntfsprogs_%.bbappend +++ b/meta-webos-updater/recipes-filesystems/ntfs-3g-ntfsprogs/ntfs-3g-ntfsprogs_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosupdater1" diff --git a/meta-webos-updater/recipes-kernel/systemtap/systemtap_%.bbappend b/meta-webos-updater/recipes-kernel/systemtap/systemtap_%.bbappend index ccad9e35b..82d845ba6 100644 --- a/meta-webos-updater/recipes-kernel/systemtap/systemtap_%.bbappend +++ b/meta-webos-updater/recipes-kernel/systemtap/systemtap_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosupdater1" diff --git a/meta-webos-updater/recipes-sota/ostree-initrd/ostree-initrd.bbappend b/meta-webos-updater/recipes-sota/ostree-initrd/ostree-initrd.bbappend index 5d5bf1f6a..a1e463355 100644 --- a/meta-webos-updater/recipes-sota/ostree-initrd/ostree-initrd.bbappend +++ b/meta-webos-updater/recipes-sota/ostree-initrd/ostree-initrd.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosupdater1" diff --git a/meta-webos-updater/recipes-sota/ostree-kernel-initramfs/ostree-kernel-initramfs_%.bbappend b/meta-webos-updater/recipes-sota/ostree-kernel-initramfs/ostree-kernel-initramfs_%.bbappend index 962e97b03..f4b6ddc58 100644 --- a/meta-webos-updater/recipes-sota/ostree-kernel-initramfs/ostree-kernel-initramfs_%.bbappend +++ b/meta-webos-updater/recipes-sota/ostree-kernel-initramfs/ostree-kernel-initramfs_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosupdater1" diff --git a/meta-webos-updater/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bbappend b/meta-webos-updater/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bbappend index 9be379660..9e66c5ec8 100644 --- a/meta-webos-updater/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bbappend +++ b/meta-webos-updater/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosupdater1" diff --git a/meta-webos-virtualization/recipes-containers/containerd/containerd-docker_git.bbappend b/meta-webos-virtualization/recipes-containers/containerd/containerd-docker_git.bbappend index d803c4193..ade5f2b21 100644 --- a/meta-webos-virtualization/recipes-containers/containerd/containerd-docker_git.bbappend +++ b/meta-webos-virtualization/recipes-containers/containerd/containerd-docker_git.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosvirt1" diff --git a/meta-webos-virtualization/recipes-containers/containerd/containerd-opencontainers_git.bbappend b/meta-webos-virtualization/recipes-containers/containerd/containerd-opencontainers_git.bbappend index d803c4193..ade5f2b21 100644 --- a/meta-webos-virtualization/recipes-containers/containerd/containerd-opencontainers_git.bbappend +++ b/meta-webos-virtualization/recipes-containers/containerd/containerd-opencontainers_git.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosvirt1" diff --git a/meta-webos-virtualization/recipes-containers/docker/docker-ce_%.bbappend b/meta-webos-virtualization/recipes-containers/docker/docker-ce_%.bbappend index af58e73a9..8cbb3f11e 100644 --- a/meta-webos-virtualization/recipes-containers/docker/docker-ce_%.bbappend +++ b/meta-webos-virtualization/recipes-containers/docker/docker-ce_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosvirt2" diff --git a/meta-webos-virtualization/recipes-containers/docker/docker-moby.bbappend b/meta-webos-virtualization/recipes-containers/docker/docker-moby.bbappend index 7db0001c5..349b8567b 100644 --- a/meta-webos-virtualization/recipes-containers/docker/docker-moby.bbappend +++ b/meta-webos-virtualization/recipes-containers/docker/docker-moby.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosvirt3" diff --git a/meta-webos-virtualization/recipes-containers/lxc/lxc_%.bbappend b/meta-webos-virtualization/recipes-containers/lxc/lxc_%.bbappend index 44aec7df1..785dcfea6 100644 --- a/meta-webos-virtualization/recipes-containers/lxc/lxc_%.bbappend +++ b/meta-webos-virtualization/recipes-containers/lxc/lxc_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2021 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosvirt3" diff --git a/meta-webos-virtualization/recipes-containers/runc/runc-docker_git.bbappend b/meta-webos-virtualization/recipes-containers/runc/runc-docker_git.bbappend index d803c4193..ade5f2b21 100644 --- a/meta-webos-virtualization/recipes-containers/runc/runc-docker_git.bbappend +++ b/meta-webos-virtualization/recipes-containers/runc/runc-docker_git.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosvirt1" diff --git a/meta-webos-virtualization/recipes-containers/runc/runc-opencontainers_git.bbappend b/meta-webos-virtualization/recipes-containers/runc/runc-opencontainers_git.bbappend index d803c4193..ade5f2b21 100644 --- a/meta-webos-virtualization/recipes-containers/runc/runc-opencontainers_git.bbappend +++ b/meta-webos-virtualization/recipes-containers/runc/runc-opencontainers_git.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosvirt1" diff --git a/meta-webos-virtualization/recipes-containers/singularity/singularity_git.bbappend b/meta-webos-virtualization/recipes-containers/singularity/singularity_git.bbappend index 5844fa867..3d04918b1 100644 --- a/meta-webos-virtualization/recipes-containers/singularity/singularity_git.bbappend +++ b/meta-webos-virtualization/recipes-containers/singularity/singularity_git.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosvirt1" diff --git a/meta-webos-virtualization/recipes-core/packagegroups/packagegroup-webos-extended.bbappend b/meta-webos-virtualization/recipes-core/packagegroups/packagegroup-webos-extended.bbappend index fbab6ba34..b2cb27f4d 100644 --- a/meta-webos-virtualization/recipes-core/packagegroups/packagegroup-webos-extended.bbappend +++ b/meta-webos-virtualization/recipes-core/packagegroups/packagegroup-webos-extended.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosvirt2" diff --git a/meta-webos-virtualization/recipes-devtools/go/go-systemd_%.bbappend b/meta-webos-virtualization/recipes-devtools/go/go-systemd_%.bbappend index 9cad1f77f..363d9fc4b 100644 --- a/meta-webos-virtualization/recipes-devtools/go/go-systemd_%.bbappend +++ b/meta-webos-virtualization/recipes-devtools/go/go-systemd_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosvirt1" diff --git a/meta-webos-virtualization/recipes-extended/libvirt/libvirt_%.bbappend b/meta-webos-virtualization/recipes-extended/libvirt/libvirt_%.bbappend index 7a5058323..c695b56a8 100644 --- a/meta-webos-virtualization/recipes-extended/libvirt/libvirt_%.bbappend +++ b/meta-webos-virtualization/recipes-extended/libvirt/libvirt_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosvirt1" diff --git a/meta-webos-virtualization/recipes-extended/xen/xen-tools_%.bbappend b/meta-webos-virtualization/recipes-extended/xen/xen-tools_%.bbappend index 3c9d5847b..c1fb611c9 100644 --- a/meta-webos-virtualization/recipes-extended/xen/xen-tools_%.bbappend +++ b/meta-webos-virtualization/recipes-extended/xen/xen-tools_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosvirt1" diff --git a/meta-webos-virtualization/recipes-networking/openvswitch/openvswitch_git.bbappend b/meta-webos-virtualization/recipes-networking/openvswitch/openvswitch_git.bbappend index aaf9153bb..d37cda408 100644 --- a/meta-webos-virtualization/recipes-networking/openvswitch/openvswitch_git.bbappend +++ b/meta-webos-virtualization/recipes-networking/openvswitch/openvswitch_git.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webosvirt1" diff --git a/meta-webos/classes/allarch.bbclass b/meta-webos/classes/allarch.bbclass index 7b39e239e..3ee75171c 100644 --- a/meta-webos/classes/allarch.bbclass +++ b/meta-webos/classes/allarch.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2019 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. # # allarch # diff --git a/meta-webos/classes/fontcache.bbclass b/meta-webos/classes/fontcache.bbclass index 8f51cf5ca..625149d3a 100644 --- a/meta-webos/classes/fontcache.bbclass +++ b/meta-webos/classes/fontcache.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2018 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. # # Intercept the upstream fontcache.bbclass so that it doesn't add # dependency on fontconfig-utils. diff --git a/meta-webos/classes/image.bbclass b/meta-webos/classes/image.bbclass index d7ec279e3..367966032 100644 --- a/meta-webos/classes/image.bbclass +++ b/meta-webos/classes/image.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2020 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. # # Intercept the upstream image.bbclass so that when there's # a webos_deploy_fixup task. diff --git a/meta-webos/classes/kernel.bbclass b/meta-webos/classes/kernel.bbclass index 07c796fce..359dbd310 100644 --- a/meta-webos/classes/kernel.bbclass +++ b/meta-webos/classes/kernel.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2019 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. # # packagegroup # diff --git a/meta-webos/classes/webos_app.bbclass b/meta-webos/classes/webos_app.bbclass index a5e3db583..bc93c1c0a 100644 --- a/meta-webos/classes/webos_app.bbclass +++ b/meta-webos/classes/webos_app.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2018 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. # # This class is intended to be inherited by every recipe whose component is an # application for the webOS platform. The definition of an application is that diff --git a/meta-webos/classes/webos_app_generate_security_files.bbclass b/meta-webos/classes/webos_app_generate_security_files.bbclass index 604f26b46..56ea89e2f 100644 --- a/meta-webos/classes/webos_app_generate_security_files.bbclass +++ b/meta-webos/classes/webos_app_generate_security_files.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2021 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. # # webos_app_generate_security_files # diff --git a/meta-webos/classes/webos_arch_indep.bbclass b/meta-webos/classes/webos_arch_indep.bbclass index b6d450ca6..3e214e57d 100644 --- a/meta-webos/classes/webos_arch_indep.bbclass +++ b/meta-webos/classes/webos_arch_indep.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2014 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # webos_arch_indep # diff --git a/meta-webos/classes/webos_autotools.bbclass b/meta-webos/classes/webos_autotools.bbclass index feb81f920..68e30993b 100644 --- a/meta-webos/classes/webos_autotools.bbclass +++ b/meta-webos/classes/webos_autotools.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # webos_autotools # diff --git a/meta-webos/classes/webos_bluetooth_sil.bbclass b/meta-webos/classes/webos_bluetooth_sil.bbclass index 573381f68..001b64f07 100644 --- a/meta-webos/classes/webos_bluetooth_sil.bbclass +++ b/meta-webos/classes/webos_bluetooth_sil.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2018 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. # # # This class is to be inherited by the recipe for every component that installs diff --git a/meta-webos/classes/webos_certificates.bbclass b/meta-webos/classes/webos_certificates.bbclass index 457a40e9c..aa7f92cb6 100644 --- a/meta-webos/classes/webos_certificates.bbclass +++ b/meta-webos/classes/webos_certificates.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. # # webos_certificates # diff --git a/meta-webos/classes/webos_cmake.bbclass b/meta-webos/classes/webos_cmake.bbclass index 1143c5097..d04ca4915 100644 --- a/meta-webos/classes/webos_cmake.bbclass +++ b/meta-webos/classes/webos_cmake.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2019 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # webos_cmake # diff --git a/meta-webos/classes/webos_cmake_qt6.bbclass b/meta-webos/classes/webos_cmake_qt6.bbclass index 467acf49b..a1eefb7e9 100644 --- a/meta-webos/classes/webos_cmake_qt6.bbclass +++ b/meta-webos/classes/webos_cmake_qt6.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. inherit qt6-cmake inherit webos_cmake diff --git a/meta-webos/classes/webos_component.bbclass b/meta-webos/classes/webos_component.bbclass index e29bdf46d..44753bcad 100644 --- a/meta-webos/classes/webos_component.bbclass +++ b/meta-webos/classes/webos_component.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # webos_component # diff --git a/meta-webos/classes/webos_configure_manifest.bbclass b/meta-webos/classes/webos_configure_manifest.bbclass index 6654322f2..8d2e1ed2a 100644 --- a/meta-webos/classes/webos_configure_manifest.bbclass +++ b/meta-webos/classes/webos_configure_manifest.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2021 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. WEBOS_SYSTEM_BUS_MANIFEST_TYPE ??= "PACKAGE" diff --git a/meta-webos/classes/webos_core_os_dep.bbclass b/meta-webos/classes/webos_core_os_dep.bbclass index a48ab09c5..fcb215709 100644 --- a/meta-webos/classes/webos_core_os_dep.bbclass +++ b/meta-webos/classes/webos_core_os_dep.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # webos_core_os_dep # diff --git a/meta-webos/classes/webos_daemon.bbclass b/meta-webos/classes/webos_daemon.bbclass index 412393f76..4a2a8dce4 100644 --- a/meta-webos/classes/webos_daemon.bbclass +++ b/meta-webos/classes/webos_daemon.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # webos_daemon # diff --git a/meta-webos/classes/webos_deploy.bbclass b/meta-webos/classes/webos_deploy.bbclass index 16bba223e..730647d2e 100644 --- a/meta-webos/classes/webos_deploy.bbclass +++ b/meta-webos/classes/webos_deploy.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2017 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. inherit deploy diff --git a/meta-webos/classes/webos_distro_dep.bbclass b/meta-webos/classes/webos_distro_dep.bbclass index e9952655d..e77ab1409 100644 --- a/meta-webos/classes/webos_distro_dep.bbclass +++ b/meta-webos/classes/webos_distro_dep.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2015 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. # # webos_distro_dep # diff --git a/meta-webos/classes/webos_distro_variant_dep.bbclass b/meta-webos/classes/webos_distro_variant_dep.bbclass index 0222708b4..191461c44 100644 --- a/meta-webos/classes/webos_distro_variant_dep.bbclass +++ b/meta-webos/classes/webos_distro_variant_dep.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2018 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. # # webos_distro_variant_dep # diff --git a/meta-webos/classes/webos_enact_repo.bbclass b/meta-webos/classes/webos_enact_repo.bbclass index 778127567..53fbbb696 100644 --- a/meta-webos/classes/webos_enact_repo.bbclass +++ b/meta-webos/classes/webos_enact_repo.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2021 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. # The default repo name is the "base" component name (no -native, etc.) WEBOS_REPO_NAME ??= "${BPN}" diff --git a/meta-webos/classes/webos_enactjs_app.bbclass b/meta-webos/classes/webos_enactjs_app.bbclass index 8d51d3b8a..e38c38989 100644 --- a/meta-webos/classes/webos_enactjs_app.bbclass +++ b/meta-webos/classes/webos_enactjs_app.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2016-2021 LG Electronics, Inc. +# Copyright (c) 2016-2022 LG Electronics, Inc. # # webos_enactjs_app # diff --git a/meta-webos/classes/webos_enactjs_env.bbclass b/meta-webos/classes/webos_enactjs_env.bbclass index 3791cea31..df56afbe4 100644 --- a/meta-webos/classes/webos_enactjs_env.bbclass +++ b/meta-webos/classes/webos_enactjs_env.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. # # webos_enactjs_env # diff --git a/meta-webos/classes/webos_enhanced_submissions.bbclass b/meta-webos/classes/webos_enhanced_submissions.bbclass index e4ad2b856..1a8bd7176 100644 --- a/meta-webos/classes/webos_enhanced_submissions.bbclass +++ b/meta-webos/classes/webos_enhanced_submissions.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2018 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # webos_enhanced_submissions # diff --git a/meta-webos/classes/webos_event_monitor_plugin.bbclass b/meta-webos/classes/webos_event_monitor_plugin.bbclass index f78aab7e0..912b1b53e 100644 --- a/meta-webos/classes/webos_event_monitor_plugin.bbclass +++ b/meta-webos/classes/webos_event_monitor_plugin.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2017 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. # # # This class is to be inherited by the recipe for every component that installs diff --git a/meta-webos/classes/webos_filesystem_paths.bbclass b/meta-webos/classes/webos_filesystem_paths.bbclass index 886543b20..b6adc0c40 100644 --- a/meta-webos/classes/webos_filesystem_paths.bbclass +++ b/meta-webos/classes/webos_filesystem_paths.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # Variables invented by webOS for standard locations diff --git a/meta-webos/classes/webos_fs_layout.bbclass b/meta-webos/classes/webos_fs_layout.bbclass index d38e4bdc1..e56d5fe71 100644 --- a/meta-webos/classes/webos_fs_layout.bbclass +++ b/meta-webos/classes/webos_fs_layout.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # webos_fs_layout # diff --git a/meta-webos/classes/webos_generate_sysbus_files.bbclass b/meta-webos/classes/webos_generate_sysbus_files.bbclass index c6dbc099c..a2db619ad 100644 --- a/meta-webos/classes/webos_generate_sysbus_files.bbclass +++ b/meta-webos/classes/webos_generate_sysbus_files.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. inherit webos_system_bus diff --git a/meta-webos/classes/webos_image.bbclass b/meta-webos/classes/webos_image.bbclass index c8230c176..5ae4b2ffb 100644 --- a/meta-webos/classes/webos_image.bbclass +++ b/meta-webos/classes/webos_image.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # IMAGE_FEATURES controls the contents of webOS OSE images # diff --git a/meta-webos/classes/webos_kernel_dep.bbclass b/meta-webos/classes/webos_kernel_dep.bbclass index 7a2c7cb5b..b3d7493eb 100644 --- a/meta-webos/classes/webos_kernel_dep.bbclass +++ b/meta-webos/classes/webos_kernel_dep.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2017 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # webos_kernel_dep # diff --git a/meta-webos/classes/webos_library.bbclass b/meta-webos/classes/webos_library.bbclass index 17df3d99a..c94fd0d94 100644 --- a/meta-webos/classes/webos_library.bbclass +++ b/meta-webos/classes/webos_library.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # webos_library # diff --git a/meta-webos/classes/webos_localizable.bbclass b/meta-webos/classes/webos_localizable.bbclass index 16d5e181a..6c811c3f8 100644 --- a/meta-webos/classes/webos_localizable.bbclass +++ b/meta-webos/classes/webos_localizable.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. # # Localization-related settings and tasks # diff --git a/meta-webos/classes/webos_ls2_api_info.bbclass b/meta-webos/classes/webos_ls2_api_info.bbclass index 075ed6041..2648b3c41 100644 --- a/meta-webos/classes/webos_ls2_api_info.bbclass +++ b/meta-webos/classes/webos_ls2_api_info.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. LS2_DIR = "${IMAGE_ROOTFS}${datadir}/luna-service2" diff --git a/meta-webos/classes/webos_lttng.bbclass b/meta-webos/classes/webos_lttng.bbclass index 675bc106a..8019f2d86 100644 --- a/meta-webos/classes/webos_lttng.bbclass +++ b/meta-webos/classes/webos_lttng.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2019 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. # # webos_lttng # diff --git a/meta-webos/classes/webos_machine_actual_dep.bbclass b/meta-webos/classes/webos_machine_actual_dep.bbclass index 98dc56a8c..3c3947184 100644 --- a/meta-webos/classes/webos_machine_actual_dep.bbclass +++ b/meta-webos/classes/webos_machine_actual_dep.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2016 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. # # webos_machine_actual_dep # diff --git a/meta-webos/classes/webos_machine_dep.bbclass b/meta-webos/classes/webos_machine_dep.bbclass index 3cae0a8a3..a6e0dcc8d 100644 --- a/meta-webos/classes/webos_machine_dep.bbclass +++ b/meta-webos/classes/webos_machine_dep.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2016 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # webos_machine_dep # diff --git a/meta-webos/classes/webos_machine_impl_dep.bbclass b/meta-webos/classes/webos_machine_impl_dep.bbclass index 318bbd04b..24923068a 100644 --- a/meta-webos/classes/webos_machine_impl_dep.bbclass +++ b/meta-webos/classes/webos_machine_impl_dep.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2019 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # webos_machine_impl_dep # diff --git a/meta-webos/classes/webos_machine_variant_dep.bbclass b/meta-webos/classes/webos_machine_variant_dep.bbclass index 1c93c679c..1142023ef 100644 --- a/meta-webos/classes/webos_machine_variant_dep.bbclass +++ b/meta-webos/classes/webos_machine_variant_dep.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2019 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. # # webos_machine_variant_dep # diff --git a/meta-webos/classes/webos_nyx_module_provider.bbclass b/meta-webos/classes/webos_nyx_module_provider.bbclass index e7c740067..f4beebdae 100644 --- a/meta-webos/classes/webos_nyx_module_provider.bbclass +++ b/meta-webos/classes/webos_nyx_module_provider.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2017 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. # # webos_nyx_module_provider diff --git a/meta-webos/classes/webos_oe_runmake_no_env_override.bbclass b/meta-webos/classes/webos_oe_runmake_no_env_override.bbclass index 961a3d638..0f5508abb 100644 --- a/meta-webos/classes/webos_oe_runmake_no_env_override.bbclass +++ b/meta-webos/classes/webos_oe_runmake_no_env_override.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # webos_oe_runmake_no_env_override # diff --git a/meta-webos/classes/webos_pkgconfig.bbclass b/meta-webos/classes/webos_pkgconfig.bbclass index c408fc9a4..f0b3946eb 100644 --- a/meta-webos/classes/webos_pkgconfig.bbclass +++ b/meta-webos/classes/webos_pkgconfig.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # webos_pkgconfig # diff --git a/meta-webos/classes/webos_pmlog_config.bbclass b/meta-webos/classes/webos_pmlog_config.bbclass index e4e282afb..0d309759b 100644 --- a/meta-webos/classes/webos_pmlog_config.bbclass +++ b/meta-webos/classes/webos_pmlog_config.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2014 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. # # webos_pmlog_config diff --git a/meta-webos/classes/webos_prebuilt_binaries.bbclass b/meta-webos/classes/webos_prebuilt_binaries.bbclass index 06205468d..da29fd0f7 100644 --- a/meta-webos/classes/webos_prebuilt_binaries.bbclass +++ b/meta-webos/classes/webos_prebuilt_binaries.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2015 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. # # webos_prebuilt_binaries # diff --git a/meta-webos/classes/webos_preferred_gfx_image_format.bbclass b/meta-webos/classes/webos_preferred_gfx_image_format.bbclass index 97703e262..3c2a04a00 100644 --- a/meta-webos/classes/webos_preferred_gfx_image_format.bbclass +++ b/meta-webos/classes/webos_preferred_gfx_image_format.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2018 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. WEBOS_PREFERRED_GFX_IMAGE_FORMAT ??= "" WEBOS_PREFERRED_GFX_IMAGE_FORMAT_CONVERSION_LIST ??= "webos-image-converter.list" diff --git a/meta-webos/classes/webos_prerelease_dep.bbclass b/meta-webos/classes/webos_prerelease_dep.bbclass index 28bdc088b..ad59b8ae5 100644 --- a/meta-webos/classes/webos_prerelease_dep.bbclass +++ b/meta-webos/classes/webos_prerelease_dep.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2019 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. # # webos_prerelease_dep # diff --git a/meta-webos/classes/webos_program.bbclass b/meta-webos/classes/webos_program.bbclass index 7320047f1..69112e495 100644 --- a/meta-webos/classes/webos_program.bbclass +++ b/meta-webos/classes/webos_program.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # webos_program # diff --git a/meta-webos/classes/webos_public_repo.bbclass b/meta-webos/classes/webos_public_repo.bbclass index 09723de10..2456bfc5b 100644 --- a/meta-webos/classes/webos_public_repo.bbclass +++ b/meta-webos/classes/webos_public_repo.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2018 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # webos_public_repo # diff --git a/meta-webos/classes/webos_qmake6.bbclass b/meta-webos/classes/webos_qmake6.bbclass index eee9a0d1b..e1f1206a1 100644 --- a/meta-webos/classes/webos_qmake6.bbclass +++ b/meta-webos/classes/webos_qmake6.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. inherit qt6-qmake inherit webos_filesystem_paths diff --git a/meta-webos/classes/webos_qmllint.bbclass b/meta-webos/classes/webos_qmllint.bbclass index 338a7a5e8..5e4f97795 100644 --- a/meta-webos/classes/webos_qmllint.bbclass +++ b/meta-webos/classes/webos_qmllint.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. # # QML syntax error and problematic pattern checker # diff --git a/meta-webos/classes/webos_qt_global.bbclass b/meta-webos/classes/webos_qt_global.bbclass index 4bfac8559..6b5e8d8f8 100644 --- a/meta-webos/classes/webos_qt_global.bbclass +++ b/meta-webos/classes/webos_qt_global.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. # Pre-defined macro for OS identification TARGET_CFLAGS:append = " -D__WEBOS__" diff --git a/meta-webos/classes/webos_qt_localization.bbclass b/meta-webos/classes/webos_qt_localization.bbclass index 4f797d6e0..e64141093 100644 --- a/meta-webos/classes/webos_qt_localization.bbclass +++ b/meta-webos/classes/webos_qt_localization.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. # # Localization-related settings and tasks for Qt apps # diff --git a/meta-webos/classes/webos_soc_family_dep.bbclass b/meta-webos/classes/webos_soc_family_dep.bbclass index f573814a1..e91d821fd 100644 --- a/meta-webos/classes/webos_soc_family_dep.bbclass +++ b/meta-webos/classes/webos_soc_family_dep.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2014 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. # # webos_soc_family_dep # diff --git a/meta-webos/classes/webos_submissions.bbclass b/meta-webos/classes/webos_submissions.bbclass index 1a77c54ae..291b92a9d 100644 --- a/meta-webos/classes/webos_submissions.bbclass +++ b/meta-webos/classes/webos_submissions.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # webos_submissions # diff --git a/meta-webos/classes/webos_system_bus.bbclass b/meta-webos/classes/webos_system_bus.bbclass index adabf655d..1dee925e2 100644 --- a/meta-webos/classes/webos_system_bus.bbclass +++ b/meta-webos/classes/webos_system_bus.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # webos_system_bus diff --git a/meta-webos/classes/webos_test_provider.bbclass b/meta-webos/classes/webos_test_provider.bbclass index 446cb0ba4..d6a731fb9 100644 --- a/meta-webos/classes/webos_test_provider.bbclass +++ b/meta-webos/classes/webos_test_provider.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2018 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. # # webos_test_provider # diff --git a/meta-webos/classes/webos_upstream_from_repo.bbclass b/meta-webos/classes/webos_upstream_from_repo.bbclass index d273b4145..1271369f6 100644 --- a/meta-webos/classes/webos_upstream_from_repo.bbclass +++ b/meta-webos/classes/webos_upstream_from_repo.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # webos_upstream_from_repo # diff --git a/meta-webos/classes/webos_upstream_with_patches.bbclass b/meta-webos/classes/webos_upstream_with_patches.bbclass index 2f8e18719..a83decf08 100644 --- a/meta-webos/classes/webos_upstream_with_patches.bbclass +++ b/meta-webos/classes/webos_upstream_with_patches.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # webos_upstream_with_patches # diff --git a/meta-webos/classes/webos_version.bbclass b/meta-webos/classes/webos_version.bbclass index 5c19ea7cb..8c3bff159 100644 --- a/meta-webos/classes/webos_version.bbclass +++ b/meta-webos/classes/webos_version.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2014 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. # # webos_version # diff --git a/meta-webos/classes/webruntime_apps.bbclass b/meta-webos/classes/webruntime_apps.bbclass index 312f1b253..696620c4e 100644 --- a/meta-webos/classes/webruntime_apps.bbclass +++ b/meta-webos/classes/webruntime_apps.bbclass @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. BROWSER_APPLICATION = "com.webos.app.browser" BROWSER_APPLICATION_DIR = "${webos_applicationsdir}/${BROWSER_APPLICATION}" diff --git a/meta-webos/conf/bitbake.conf b/meta-webos/conf/bitbake.conf index eccf1f496..abb34dc9a 100644 --- a/meta-webos/conf/bitbake.conf +++ b/meta-webos/conf/bitbake.conf @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2018 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. # # meta-webos/conf/bitbake.conf # diff --git a/meta-webos/conf/distro/include/tcmode-default.inc b/meta-webos/conf/distro/include/tcmode-default.inc index d7a0ea896..eec7b2de1 100644 --- a/meta-webos/conf/distro/include/tcmode-default.inc +++ b/meta-webos/conf/distro/include/tcmode-default.inc @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2020 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. # # Things that must be added when using the internal OE toolchain, i.e., when # TCMODE is "default". diff --git a/meta-webos/conf/distro/include/webos-component-head.inc b/meta-webos/conf/distro/include/webos-component-head.inc index e8955e670..b9526ed91 100644 --- a/meta-webos/conf/distro/include/webos-component-head.inc +++ b/meta-webos/conf/distro/include/webos-component-head.inc @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2013 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # # Set SRCREV:pn- to "${AUTOREV}" in this file if the SRC_URI in # the recipe for doesn't specify a tag from which to fetch. diff --git a/meta-webos/conf/distro/include/webos-features.inc b/meta-webos/conf/distro/include/webos-features.inc index 26d7eff0f..c8c5c3534 100644 --- a/meta-webos/conf/distro/include/webos-features.inc +++ b/meta-webos/conf/distro/include/webos-features.inc @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2019 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # Keep in sync with setting in oe-core/meta/conf/distro/include/default-distrovars.inc # TODO: Maybe change this to use "_remove" when it's introduced in bitbake diff --git a/meta-webos/conf/distro/include/webos-icecc-components-exclusion.inc b/meta-webos/conf/distro/include/webos-icecc-components-exclusion.inc index 5fb5cd1bd..3b0d7bfd2 100644 --- a/meta-webos/conf/distro/include/webos-icecc-components-exclusion.inc +++ b/meta-webos/conf/distro/include/webos-icecc-components-exclusion.inc @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2019 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. # These packages fail to build when icecc is used diff --git a/meta-webos/conf/distro/include/webos-preferred-providers.inc b/meta-webos/conf/distro/include/webos-preferred-providers.inc index 482f338cd..cd05e6f90 100644 --- a/meta-webos/conf/distro/include/webos-preferred-providers.inc +++ b/meta-webos/conf/distro/include/webos-preferred-providers.inc @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # Place distro-wide PREFERRED_PROVIDER settings here. Place MACHINE-specific # settings (always with a _ override) in .conf with a default diff --git a/meta-webos/conf/distro/include/webos-sdk.inc b/meta-webos/conf/distro/include/webos-sdk.inc index 24d66aa8b..09fcd9c96 100644 --- a/meta-webos/conf/distro/include/webos-sdk.inc +++ b/meta-webos/conf/distro/include/webos-sdk.inc @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2014 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # bitbake.conf weak assigns this to be "oecore" before this file is included. SDK_NAME_PREFIX = "${DISTRO}-sdk" diff --git a/meta-webos/conf/distro/include/webos-sota.inc b/meta-webos/conf/distro/include/webos-sota.inc index 6be5c55ee..3990bff0b 100644 --- a/meta-webos/conf/distro/include/webos-sota.inc +++ b/meta-webos/conf/distro/include/webos-sota.inc @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. # Enable SOTA common setting # diff --git a/meta-webos/conf/distro/include/webos-toolchain.inc b/meta-webos/conf/distro/include/webos-toolchain.inc index eef8e8d30..368558c76 100644 --- a/meta-webos/conf/distro/include/webos-toolchain.inc +++ b/meta-webos/conf/distro/include/webos-toolchain.inc @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2018 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. # For now it's the same as DISTRO_FEATURES_LIBC_DEFAULT in # oe-core/meta/conf/distro/include/default-distrovars.inc diff --git a/meta-webos/conf/distro/include/webos.inc b/meta-webos/conf/distro/include/webos.inc index 32b717bb5..1f3fec058 100644 --- a/meta-webos/conf/distro/include/webos.inc +++ b/meta-webos/conf/distro/include/webos.inc @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. require conf/distro/include/webos-component-head.inc require conf/distro/include/webos-preferred-providers.inc diff --git a/meta-webos/conf/machine/include/webos-target-machine-alias.inc b/meta-webos/conf/machine/include/webos-target-machine-alias.inc index a63445035..6bed8b043 100644 --- a/meta-webos/conf/machine/include/webos-target-machine-alias.inc +++ b/meta-webos/conf/machine/include/webos-target-machine-alias.inc @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2016 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. # # webos-target-machine-alias.inc # diff --git a/meta-webos/lib/verify_ls2_acg.py b/meta-webos/lib/verify_ls2_acg.py index 90e98fa85..d1e4b6280 100644 --- a/meta-webos/lib/verify_ls2_acg.py +++ b/meta-webos/lib/verify_ls2_acg.py @@ -2,7 +2,7 @@ # @@@LICENSE # -# Copyright (c) 2015-2017 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. # # Unless otherwise specified or set forth in the NOTICE file, all content, # including all source code files and documentation files in this repository are: diff --git a/meta-webos/recipes-benchmark/fio/fio_%.bbappend b/meta-webos/recipes-benchmark/fio/fio_%.bbappend index a32e333e1..cfc384e54 100644 --- a/meta-webos/recipes-benchmark/fio/fio_%.bbappend +++ b/meta-webos/recipes-benchmark/fio/fio_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2019 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-benchmark/libhugetlbfs/libhugetlbfs_%.bbappend b/meta-webos/recipes-benchmark/libhugetlbfs/libhugetlbfs_%.bbappend index 2045a3cf0..9029e2b66 100644 --- a/meta-webos/recipes-benchmark/libhugetlbfs/libhugetlbfs_%.bbappend +++ b/meta-webos/recipes-benchmark/libhugetlbfs/libhugetlbfs_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_%.bbappend b/meta-webos/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_%.bbappend index 9b3295396..dc2198ab7 100644 --- a/meta-webos/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_%.bbappend +++ b/meta-webos/recipes-benchmark/phoronix-test-suite/phoronix-test-suite_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-bsp/pm-utils/pm-utils_%.bbappend b/meta-webos/recipes-bsp/pm-utils/pm-utils_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-bsp/pm-utils/pm-utils_%.bbappend +++ b/meta-webos/recipes-bsp/pm-utils/pm-utils_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-connectivity/bind/bind_%.bbappend b/meta-webos/recipes-connectivity/bind/bind_%.bbappend index adc571008..7de514576 100644 --- a/meta-webos/recipes-connectivity/bind/bind_%.bbappend +++ b/meta-webos/recipes-connectivity/bind/bind_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2019 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5-conf.bb b/meta-webos/recipes-connectivity/bluez5/bluez5-conf.bb index fb7936b4f..b9e89ad72 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5-conf.bb +++ b/meta-webos/recipes-connectivity/bluez5/bluez5-conf.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2014 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "Machine specific configuration files for bluez5" AUTHOR = "Simon Busch " diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/obex.service b/meta-webos/recipes-connectivity/bluez5/bluez5/obex.service index ba6c0b4ae..f2429ec98 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/obex.service +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/obex.service @@ -1,6 +1,6 @@ # @@@LICENSE # -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. # # Confidential computer software. Valid license from LG required for # possession, use or copying. Consistent with FAR 12.211 and 12.212, diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend b/meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend index 9c202318c..e240980c4 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend +++ b/meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2021 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" diff --git a/meta-webos/recipes-connectivity/connman/connman-conf.bbappend b/meta-webos/recipes-connectivity/connman/connman-conf.bbappend index f48c31aae..24f38e469 100644 --- a/meta-webos/recipes-connectivity/connman/connman-conf.bbappend +++ b/meta-webos/recipes-connectivity/connman/connman-conf.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2020 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" diff --git a/meta-webos/recipes-connectivity/connman/connman-conf/connman.service b/meta-webos/recipes-connectivity/connman/connman-conf/connman.service index f65461e89..7fd5a28a2 100644 --- a/meta-webos/recipes-connectivity/connman/connman-conf/connman.service +++ b/meta-webos/recipes-connectivity/connman/connman-conf/connman.service @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/meta-webos/recipes-connectivity/connman/connman-conf/connman.sh.in b/meta-webos/recipes-connectivity/connman/connman-conf/connman.sh.in index 51493376c..1f437f8f7 100644 --- a/meta-webos/recipes-connectivity/connman/connman-conf/connman.sh.in +++ b/meta-webos/recipes-connectivity/connman/connman-conf/connman.sh.in @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/meta-webos/recipes-connectivity/dhcp/dhcp_%.bbappend b/meta-webos/recipes-connectivity/dhcp/dhcp_%.bbappend index 9c92c1bdb..3330b62ff 100644 --- a/meta-webos/recipes-connectivity/dhcp/dhcp_%.bbappend +++ b/meta-webos/recipes-connectivity/dhcp/dhcp_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2017 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. inherit webos_machine_impl_dep diff --git a/meta-webos/recipes-connectivity/gammu/gammu_%.bbappend b/meta-webos/recipes-connectivity/gammu/gammu_%.bbappend index fcc1301f1..fa4cd276d 100644 --- a/meta-webos/recipes-connectivity/gammu/gammu_%.bbappend +++ b/meta-webos/recipes-connectivity/gammu/gammu_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-connectivity/gensio/gensio_%.bbappend b/meta-webos/recipes-connectivity/gensio/gensio_%.bbappend index 52d6e0615..98b52484e 100644 --- a/meta-webos/recipes-connectivity/gensio/gensio_%.bbappend +++ b/meta-webos/recipes-connectivity/gensio/gensio_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-connectivity/ifplugd/ifplugd_%.bbappend b/meta-webos/recipes-connectivity/ifplugd/ifplugd_%.bbappend index a5d19a033..ea43d0b9b 100644 --- a/meta-webos/recipes-connectivity/ifplugd/ifplugd_%.bbappend +++ b/meta-webos/recipes-connectivity/ifplugd/ifplugd_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-connectivity/lftp/lftp_%.bbappend b/meta-webos/recipes-connectivity/lftp/lftp_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-connectivity/lftp/lftp_%.bbappend +++ b/meta-webos/recipes-connectivity/lftp/lftp_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-connectivity/lirc/lirc_%.bbappend b/meta-webos/recipes-connectivity/lirc/lirc_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-connectivity/lirc/lirc_%.bbappend +++ b/meta-webos/recipes-connectivity/lirc/lirc_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-connectivity/nfs-utils/nfs-utils_%.bbappend b/meta-webos/recipes-connectivity/nfs-utils/nfs-utils_%.bbappend index f4bccd9f6..e458c590e 100644 --- a/meta-webos/recipes-connectivity/nfs-utils/nfs-utils_%.bbappend +++ b/meta-webos/recipes-connectivity/nfs-utils/nfs-utils_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2020 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-connectivity/ofono/ofono_%.bbappend b/meta-webos/recipes-connectivity/ofono/ofono_%.bbappend index fda807b3f..632ccae04 100644 --- a/meta-webos/recipes-connectivity/ofono/ofono_%.bbappend +++ b/meta-webos/recipes-connectivity/ofono/ofono_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" diff --git a/meta-webos/recipes-connectivity/openconnect/openconnect_%.bbappend b/meta-webos/recipes-connectivity/openconnect/openconnect_%.bbappend index 0c7849f14..c64c14c63 100644 --- a/meta-webos/recipes-connectivity/openconnect/openconnect_%.bbappend +++ b/meta-webos/recipes-connectivity/openconnect/openconnect_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-connectivity/openssl/openssl_%.bbappend b/meta-webos/recipes-connectivity/openssl/openssl_%.bbappend index 4330e7d2b..44980c2b7 100644 --- a/meta-webos/recipes-connectivity/openssl/openssl_%.bbappend +++ b/meta-webos/recipes-connectivity/openssl/openssl_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2019 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos22" diff --git a/meta-webos/recipes-connectivity/resolvconf/resolvconf_%.bbappend b/meta-webos/recipes-connectivity/resolvconf/resolvconf_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-connectivity/resolvconf/resolvconf_%.bbappend +++ b/meta-webos/recipes-connectivity/resolvconf/resolvconf_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-connectivity/samba/samba_%.bbappend b/meta-webos/recipes-connectivity/samba/samba_%.bbappend index 6cf613bae..febcc415a 100644 --- a/meta-webos/recipes-connectivity/samba/samba_%.bbappend +++ b/meta-webos/recipes-connectivity/samba/samba_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos3" diff --git a/meta-webos/recipes-connectivity/smstools3/smstools3_%.bbappend b/meta-webos/recipes-connectivity/smstools3/smstools3_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-connectivity/smstools3/smstools3_%.bbappend +++ b/meta-webos/recipes-connectivity/smstools3/smstools3_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb b/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb index 2a7c49a50..1ac774390 100644 --- a/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb +++ b/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "Webos UwbService" AUTHOR = "Bojung.Ko " diff --git a/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.service b/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.service index 278424675..b98d59c8e 100644 --- a/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.service +++ b/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.service @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.sh b/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.sh index f8d8114aa..f65f35315 100644 --- a/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.sh +++ b/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.sh @@ -1,5 +1,5 @@ #!/bin/sh -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend b/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend index d53ece00a..2383f31f2 100644 --- a/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend +++ b/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos4" diff --git a/meta-webos/recipes-core/base-files/base-files_3.0.14.bbappend b/meta-webos/recipes-core/base-files/base-files_3.0.14.bbappend index dc1a457ee..119095770 100644 --- a/meta-webos/recipes-core/base-files/base-files_3.0.14.bbappend +++ b/meta-webos/recipes-core/base-files/base-files_3.0.14.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. AUTHOR = "Herb Kuta " diff --git a/meta-webos/recipes-core/base-passwd/base-passwd_3.5.29.bbappend b/meta-webos/recipes-core/base-passwd/base-passwd_3.5.29.bbappend index 8eedc7171..263c11fa9 100644 --- a/meta-webos/recipes-core/base-passwd/base-passwd_3.5.29.bbappend +++ b/meta-webos/recipes-core/base-passwd/base-passwd_3.5.29.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos6" diff --git a/meta-webos/recipes-core/busybox/busybox_%.bbappend b/meta-webos/recipes-core/busybox/busybox_%.bbappend index 165038e94..1f1024235 100644 --- a/meta-webos/recipes-core/busybox/busybox_%.bbappend +++ b/meta-webos/recipes-core/busybox/busybox_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. PKGV .= "-0webos3" EXTENDPRAUTO:append = "webos14" diff --git a/meta-webos/recipes-core/dbus/dbus_%.bbappend b/meta-webos/recipes-core/dbus/dbus_%.bbappend index 61b92043d..32986fb8c 100644 --- a/meta-webos/recipes-core/dbus/dbus_%.bbappend +++ b/meta-webos/recipes-core/dbus/dbus_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2017 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos5" diff --git a/meta-webos/recipes-core/dropbear/dropbear/dropbear.service b/meta-webos/recipes-core/dropbear/dropbear/dropbear.service index f47462c42..0f7372d6b 100644 --- a/meta-webos/recipes-core/dropbear/dropbear/dropbear.service +++ b/meta-webos/recipes-core/dropbear/dropbear/dropbear.service @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/meta-webos/recipes-core/dropbear/dropbear_%.bbappend b/meta-webos/recipes-core/dropbear/dropbear_%.bbappend index 771faacc5..56af9b6c6 100644 --- a/meta-webos/recipes-core/dropbear/dropbear_%.bbappend +++ b/meta-webos/recipes-core/dropbear/dropbear_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2019 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. inherit webos_machine_impl_dep diff --git a/meta-webos/recipes-core/gettext/gettext_%.bbappend b/meta-webos/recipes-core/gettext/gettext_%.bbappend index 8a24cbdd4..3741f41e5 100644 --- a/meta-webos/recipes-core/gettext/gettext_%.bbappend +++ b/meta-webos/recipes-core/gettext/gettext_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-core/glib-2.0/glib-2.0_%.bbappend b/meta-webos/recipes-core/glib-2.0/glib-2.0_%.bbappend index 91ff7337a..21e47d7db 100644 --- a/meta-webos/recipes-core/glib-2.0/glib-2.0_%.bbappend +++ b/meta-webos/recipes-core/glib-2.0/glib-2.0_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2020 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. PKGV .= "-0webos4" EXTENDPRAUTO:append = "webos4" diff --git a/meta-webos/recipes-core/glibc/glibc-scripts_%.bbappend b/meta-webos/recipes-core/glibc/glibc-scripts_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-core/glibc/glibc-scripts_%.bbappend +++ b/meta-webos/recipes-core/glibc/glibc-scripts_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-core/glibc/glibc_%.bbappend b/meta-webos/recipes-core/glibc/glibc_%.bbappend index 277077d0d..67347fa86 100644 --- a/meta-webos/recipes-core/glibc/glibc_%.bbappend +++ b/meta-webos/recipes-core/glibc/glibc_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2021 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos7" diff --git a/meta-webos/recipes-core/images/webos-image-devel.bb b/meta-webos/recipes-core/images/webos-image-devel.bb index a47a5d84b..b1edccd24 100644 --- a/meta-webos/recipes-core/images/webos-image-devel.bb +++ b/meta-webos/recipes-core/images/webos-image-devel.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2018 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS OSE developer/test image" DESCRIPTION = "This image contains additional packages useful during \ diff --git a/meta-webos/recipes-core/images/webos-image.bb b/meta-webos/recipes-core/images/webos-image.bb index 4a2443e19..ea2cb5cd0 100644 --- a/meta-webos/recipes-core/images/webos-image.bb +++ b/meta-webos/recipes-core/images/webos-image.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2019 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. DESCRIPTION = "webOS OSE image" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-core/libxml/libxml2_%.bbappend b/meta-webos/recipes-core/libxml/libxml2_%.bbappend index 6420212a0..d266d836f 100644 --- a/meta-webos/recipes-core/libxml/libxml2_%.bbappend +++ b/meta-webos/recipes-core/libxml/libxml2_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-core/meta/meta-environment.bbappend b/meta-webos/recipes-core/meta/meta-environment.bbappend index a745ff379..e99efab12 100644 --- a/meta-webos/recipes-core/meta/meta-environment.bbappend +++ b/meta-webos/recipes-core/meta/meta-environment.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-core/mm-common/mm-common_%.bbappend b/meta-webos/recipes-core/mm-common/mm-common_%.bbappend index 09528e072..583cb23f6 100644 --- a/meta-webos/recipes-core/mm-common/mm-common_%.bbappend +++ b/meta-webos/recipes-core/mm-common/mm-common_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2017 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos3" diff --git a/meta-webos/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend b/meta-webos/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend index 0b8c95d63..e3da7afe3 100644 --- a/meta-webos/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend +++ b/meta-webos/recipes-core/packagegroups/nativesdk-packagegroup-sdk-host.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend b/meta-webos/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend index dec859b4d..e267a67f6 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend +++ b/meta-webos/recipes-core/packagegroups/packagegroup-core-tools-profile.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2019 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. # You don't need to change this value when you're changing just the RDEPENDS:${PN} variable. EXTENDPRAUTO:append = "webos3" diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-devel.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-devel.bb index 325c4dfaf..bad7d333c 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-devel.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-devel.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2019 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "Components useful to developers added to webOS OSE -devel images" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-internal.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-internal.bb index 38540296e..e7ac79cb2 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-internal.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-internal.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2018 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. DESCRIPTION = "Internal components used in webOS OSE" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-test.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-test.bb index 8e6021716..268a21d40 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-test.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-test.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2021 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "Components for testing added to webOS OSE -devel images" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-core/shadow/shadow_%.bbappend b/meta-webos/recipes-core/shadow/shadow_%.bbappend index 77eb61fb7..162a60cf3 100644 --- a/meta-webos/recipes-core/shadow/shadow_%.bbappend +++ b/meta-webos/recipes-core/shadow/shadow_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2016 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-core/systemd/systemd_%.bbappend b/meta-webos/recipes-core/systemd/systemd_%.bbappend index ffdd60673..e5ef32031 100644 --- a/meta-webos/recipes-core/systemd/systemd_%.bbappend +++ b/meta-webos/recipes-core/systemd/systemd_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos9" FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" diff --git a/meta-webos/recipes-core/util-linux/util-linux_%.bbappend b/meta-webos/recipes-core/util-linux/util-linux_%.bbappend index 6e40eceea..ad60e46ec 100644 --- a/meta-webos/recipes-core/util-linux/util-linux_%.bbappend +++ b/meta-webos/recipes-core/util-linux/util-linux_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-core/webos-qt-sdk/webos-qt-sdk.bb b/meta-webos/recipes-core/webos-qt-sdk/webos-qt-sdk.bb index 835e25c99..475430d39 100644 --- a/meta-webos/recipes-core/webos-qt-sdk/webos-qt-sdk.bb +++ b/meta-webos/recipes-core/webos-qt-sdk/webos-qt-sdk.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "webOS SDK Toolchain including qt host tools" diff --git a/meta-webos/recipes-daemons/opensaf/opensaf_%.bbappend b/meta-webos/recipes-daemons/opensaf/opensaf_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-daemons/opensaf/opensaf_%.bbappend +++ b/meta-webos/recipes-daemons/opensaf/opensaf_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-dbs/leveldb/leveldb_%.bbappend b/meta-webos/recipes-dbs/leveldb/leveldb_%.bbappend index 1f830199b..610469c93 100644 --- a/meta-webos/recipes-dbs/leveldb/leveldb_%.bbappend +++ b/meta-webos/recipes-dbs/leveldb/leveldb_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2020 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-dbs/mysql/mariadb_%.bbappend b/meta-webos/recipes-dbs/mysql/mariadb_%.bbappend index d16ad5f3a..77cf2b01e 100644 --- a/meta-webos/recipes-dbs/mysql/mariadb_%.bbappend +++ b/meta-webos/recipes-dbs/mysql/mariadb_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/android-tools/android-tools_%.bbappend b/meta-webos/recipes-devtools/android-tools/android-tools_%.bbappend index d525a1a11..28f322d0a 100644 --- a/meta-webos/recipes-devtools/android-tools/android-tools_%.bbappend +++ b/meta-webos/recipes-devtools/android-tools/android-tools_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/apt/apt_%.bbappend b/meta-webos/recipes-devtools/apt/apt_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-devtools/apt/apt_%.bbappend +++ b/meta-webos/recipes-devtools/apt/apt_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/build-compare/build-compare_%.bbappend b/meta-webos/recipes-devtools/build-compare/build-compare_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-devtools/build-compare/build-compare_%.bbappend +++ b/meta-webos/recipes-devtools/build-compare/build-compare_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_%.bbappend b/meta-webos/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_%.bbappend index 210c98f54..dc2198ab7 100644 --- a/meta-webos/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_%.bbappend +++ b/meta-webos/recipes-devtools/dnf-plugin-tui/dnf-plugin-tui_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/e2fsprogs/e2fsprogs_%.bbappend b/meta-webos/recipes-devtools/e2fsprogs/e2fsprogs_%.bbappend index 08de570f4..701cd3177 100644 --- a/meta-webos/recipes-devtools/e2fsprogs/e2fsprogs_%.bbappend +++ b/meta-webos/recipes-devtools/e2fsprogs/e2fsprogs_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2020 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos11" FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" diff --git a/meta-webos/recipes-devtools/elfutils/elfutils_%.bbappend b/meta-webos/recipes-devtools/elfutils/elfutils_%.bbappend index 5ac27ae84..077ae4805 100644 --- a/meta-webos/recipes-devtools/elfutils/elfutils_%.bbappend +++ b/meta-webos/recipes-devtools/elfutils/elfutils_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos3" diff --git a/meta-webos/recipes-devtools/expect/expect_5.45.4.bbappend b/meta-webos/recipes-devtools/expect/expect_5.45.4.bbappend index d62542419..7c2c5c307 100644 --- a/meta-webos/recipes-devtools/expect/expect_5.45.4.bbappend +++ b/meta-webos/recipes-devtools/expect/expect_5.45.4.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/fdisk/gptfdisk_%.bbappend b/meta-webos/recipes-devtools/fdisk/gptfdisk_%.bbappend index 1c8d73137..c8f657703 100644 --- a/meta-webos/recipes-devtools/fdisk/gptfdisk_%.bbappend +++ b/meta-webos/recipes-devtools/fdisk/gptfdisk_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2019 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. EXTENDPRAUTO = "webos2" diff --git a/meta-webos/recipes-devtools/flex/flex_%.bbappend b/meta-webos/recipes-devtools/flex/flex_%.bbappend index 6e40eceea..ad60e46ec 100644 --- a/meta-webos/recipes-devtools/flex/flex_%.bbappend +++ b/meta-webos/recipes-devtools/flex/flex_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-devtools/glide/glide_%.bbappend b/meta-webos/recipes-devtools/glide/glide_%.bbappend index 2a84a7ab4..7f7520b5f 100644 --- a/meta-webos/recipes-devtools/glide/glide_%.bbappend +++ b/meta-webos/recipes-devtools/glide/glide_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2019 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/go/go-dep_%.bbappend b/meta-webos/recipes-devtools/go/go-dep_%.bbappend index 79c63c787..08bcea862 100644 --- a/meta-webos/recipes-devtools/go/go-dep_%.bbappend +++ b/meta-webos/recipes-devtools/go/go-dep_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/go/go_%.bbappend b/meta-webos/recipes-devtools/go/go_%.bbappend index 79c63c787..08bcea862 100644 --- a/meta-webos/recipes-devtools/go/go_%.bbappend +++ b/meta-webos/recipes-devtools/go/go_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/grpc/grpc_%.bbappend b/meta-webos/recipes-devtools/grpc/grpc_%.bbappend index e4c0722a0..cd2c1f096 100644 --- a/meta-webos/recipes-devtools/grpc/grpc_%.bbappend +++ b/meta-webos/recipes-devtools/grpc/grpc_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos4" diff --git a/meta-webos/recipes-devtools/jsoncpp/jsoncpp_%.bbappend b/meta-webos/recipes-devtools/jsoncpp/jsoncpp_%.bbappend index 1b2c5e7d9..a559cd450 100644 --- a/meta-webos/recipes-devtools/jsoncpp/jsoncpp_%.bbappend +++ b/meta-webos/recipes-devtools/jsoncpp/jsoncpp_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/kconfig-frontends/kconfig-frontends_%.bbappend b/meta-webos/recipes-devtools/kconfig-frontends/kconfig-frontends_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-devtools/kconfig-frontends/kconfig-frontends_%.bbappend +++ b/meta-webos/recipes-devtools/kconfig-frontends/kconfig-frontends_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/lapack/lapack_%.bbappend b/meta-webos/recipes-devtools/lapack/lapack_%.bbappend index e7d3444ed..697d8df87 100644 --- a/meta-webos/recipes-devtools/lapack/lapack_%.bbappend +++ b/meta-webos/recipes-devtools/lapack/lapack_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO = "webos1" diff --git a/meta-webos/recipes-devtools/libtool/libtool-cross_%.bbappend b/meta-webos/recipes-devtools/libtool/libtool-cross_%.bbappend index 495be098f..9fc0924aa 100644 --- a/meta-webos/recipes-devtools/libtool/libtool-cross_%.bbappend +++ b/meta-webos/recipes-devtools/libtool/libtool-cross_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/libtool/libtool-native_%.bbappend b/meta-webos/recipes-devtools/libtool/libtool-native_%.bbappend index 495be098f..9fc0924aa 100644 --- a/meta-webos/recipes-devtools/libtool/libtool-native_%.bbappend +++ b/meta-webos/recipes-devtools/libtool/libtool-native_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/libtool/nativesdk-libtool_%.bbappend b/meta-webos/recipes-devtools/libtool/nativesdk-libtool_%.bbappend index 039aaeb9e..5f9afe776 100644 --- a/meta-webos/recipes-devtools/libtool/nativesdk-libtool_%.bbappend +++ b/meta-webos/recipes-devtools/libtool/nativesdk-libtool_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-devtools/llvm/llvm_%.bbappend b/meta-webos/recipes-devtools/llvm/llvm_%.bbappend index 65d0de73d..8c9db927b 100644 --- a/meta-webos/recipes-devtools/llvm/llvm_%.bbappend +++ b/meta-webos/recipes-devtools/llvm/llvm_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2019 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos4" diff --git a/meta-webos/recipes-devtools/ltrace/ltrace_git.bbappend b/meta-webos/recipes-devtools/ltrace/ltrace_git.bbappend index ed0ed8450..e2da42fa3 100644 --- a/meta-webos/recipes-devtools/ltrace/ltrace_git.bbappend +++ b/meta-webos/recipes-devtools/ltrace/ltrace_git.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2017 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-devtools/m4/m4_%.bbappend b/meta-webos/recipes-devtools/m4/m4_%.bbappend index 4bff70343..fe193a537 100644 --- a/meta-webos/recipes-devtools/m4/m4_%.bbappend +++ b/meta-webos/recipes-devtools/m4/m4_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/makedevs/makedevs_1.0.1.bbappend b/meta-webos/recipes-devtools/makedevs/makedevs_1.0.1.bbappend index d62542419..7c2c5c307 100644 --- a/meta-webos/recipes-devtools/makedevs/makedevs_1.0.1.bbappend +++ b/meta-webos/recipes-devtools/makedevs/makedevs_1.0.1.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/mpich/mpich_%.bbappend b/meta-webos/recipes-devtools/mpich/mpich_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-devtools/mpich/mpich_%.bbappend +++ b/meta-webos/recipes-devtools/mpich/mpich_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/mtd/mtd-utils_%.bbappend b/meta-webos/recipes-devtools/mtd/mtd-utils_%.bbappend index 343cc3483..c12fbf390 100644 --- a/meta-webos/recipes-devtools/mtd/mtd-utils_%.bbappend +++ b/meta-webos/recipes-devtools/mtd/mtd-utils_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2019 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/nodejs/nodejs_%.bbappend b/meta-webos/recipes-devtools/nodejs/nodejs_%.bbappend index 1c320fa1b..71959d813 100644 --- a/meta-webos/recipes-devtools/nodejs/nodejs_%.bbappend +++ b/meta-webos/recipes-devtools/nodejs/nodejs_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos7" diff --git a/meta-webos/recipes-devtools/opkg-utils/opkg-utils_%.bbappend b/meta-webos/recipes-devtools/opkg-utils/opkg-utils_%.bbappend index 210c98f54..dc2198ab7 100644 --- a/meta-webos/recipes-devtools/opkg-utils/opkg-utils_%.bbappend +++ b/meta-webos/recipes-devtools/opkg-utils/opkg-utils_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/opkg/opkg_%.bbappend b/meta-webos/recipes-devtools/opkg/opkg_%.bbappend index b30965653..d227fe400 100644 --- a/meta-webos/recipes-devtools/opkg/opkg_%.bbappend +++ b/meta-webos/recipes-devtools/opkg/opkg_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos6" diff --git a/meta-webos/recipes-devtools/pax-utils/pax-utils_%.bbappend b/meta-webos/recipes-devtools/pax-utils/pax-utils_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-devtools/pax-utils/pax-utils_%.bbappend +++ b/meta-webos/recipes-devtools/pax-utils/pax-utils_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/pm-qa/pm-qa_%.bbappend b/meta-webos/recipes-devtools/pm-qa/pm-qa_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-devtools/pm-qa/pm-qa_%.bbappend +++ b/meta-webos/recipes-devtools/pm-qa/pm-qa_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/protobuf/protobuf_%.bbappend b/meta-webos/recipes-devtools/protobuf/protobuf_%.bbappend index 5394569cb..7c53c61d0 100644 --- a/meta-webos/recipes-devtools/protobuf/protobuf_%.bbappend +++ b/meta-webos/recipes-devtools/protobuf/protobuf_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-devtools/python/python3-atlassian-python-api_3.8.0.bb b/meta-webos/recipes-devtools/python/python3-atlassian-python-api_3.8.0.bb index 216125755..7d3649c3c 100644 --- a/meta-webos/recipes-devtools/python/python3-atlassian-python-api_3.8.0.bb +++ b/meta-webos/recipes-devtools/python/python3-atlassian-python-api_3.8.0.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "Python Atlassian REST API Wrapper" HOMEPAGE = "https://github.com/atlassian-api/atlassian-python-api" diff --git a/meta-webos/recipes-devtools/python/python3-deprecated_1.2.12.bb b/meta-webos/recipes-devtools/python/python3-deprecated_1.2.12.bb index 7d449c570..d8cc1f87a 100644 --- a/meta-webos/recipes-devtools/python/python3-deprecated_1.2.12.bb +++ b/meta-webos/recipes-devtools/python/python3-deprecated_1.2.12.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "Python @deprecated decorator to deprecate old python classes, functions or methods." HOMEPAGE = "https://github.com/tantale/deprecated" diff --git a/meta-webos/recipes-devtools/python/python3-pymisp_%.bbappend b/meta-webos/recipes-devtools/python/python3-pymisp_%.bbappend index a5d19a033..ea43d0b9b 100644 --- a/meta-webos/recipes-devtools/python/python3-pymisp_%.bbappend +++ b/meta-webos/recipes-devtools/python/python3-pymisp_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/python/python3_%.bbappend b/meta-webos/recipes-devtools/python/python3_%.bbappend index 31516c054..f8d7c0ff7 100644 --- a/meta-webos/recipes-devtools/python/python3_%.bbappend +++ b/meta-webos/recipes-devtools/python/python3_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/qemu/qemu_%.bbappend b/meta-webos/recipes-devtools/qemu/qemu_%.bbappend index a1fd6cf2c..a2101b308 100644 --- a/meta-webos/recipes-devtools/qemu/qemu_%.bbappend +++ b/meta-webos/recipes-devtools/qemu/qemu_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2020 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos3" diff --git a/meta-webos/recipes-devtools/quilt/quilt_%.bbappend b/meta-webos/recipes-devtools/quilt/quilt_%.bbappend index e862818ba..5b4f61742 100644 --- a/meta-webos/recipes-devtools/quilt/quilt_%.bbappend +++ b/meta-webos/recipes-devtools/quilt/quilt_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/rpm/rpm_%.bbappend b/meta-webos/recipes-devtools/rpm/rpm_%.bbappend index 470b38ef5..002a8fa04 100644 --- a/meta-webos/recipes-devtools/rpm/rpm_%.bbappend +++ b/meta-webos/recipes-devtools/rpm/rpm_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2016-2021 LG Electronics, Inc. +# Copyright (c) 2016-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos4" diff --git a/meta-webos/recipes-devtools/tcf-agent/tcf-agent_%.bbappend b/meta-webos/recipes-devtools/tcf-agent/tcf-agent_%.bbappend index cd5cb4282..eecdbf911 100644 --- a/meta-webos/recipes-devtools/tcf-agent/tcf-agent_%.bbappend +++ b/meta-webos/recipes-devtools/tcf-agent/tcf-agent_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2020 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/xmlto/xmlto_%.bbappend b/meta-webos/recipes-devtools/xmlto/xmlto_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-devtools/xmlto/xmlto_%.bbappend +++ b/meta-webos/recipes-devtools/xmlto/xmlto_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-devtools/yajl/yajl_2.1.0.bbappend b/meta-webos/recipes-devtools/yajl/yajl_2.1.0.bbappend index 6a59e996d..5224a0eaf 100644 --- a/meta-webos/recipes-devtools/yajl/yajl_2.1.0.bbappend +++ b/meta-webos/recipes-devtools/yajl/yajl_2.1.0.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2016 LG Electronics, Inc. +# Copyright (c) 2016-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-extended/bash/bash_%.bbappend b/meta-webos/recipes-extended/bash/bash_%.bbappend index 9206f1f9e..c2d0aeedd 100644 --- a/meta-webos/recipes-extended/bash/bash_%.bbappend +++ b/meta-webos/recipes-extended/bash/bash_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2019 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-extended/collectd/collectd_%.bbappend b/meta-webos/recipes-extended/collectd/collectd_%.bbappend index 02a62f3ed..1af4aeb9f 100644 --- a/meta-webos/recipes-extended/collectd/collectd_%.bbappend +++ b/meta-webos/recipes-extended/collectd/collectd_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-extended/corosync/corosync_%.bbappend b/meta-webos/recipes-extended/corosync/corosync_%.bbappend index 9b3295396..dc2198ab7 100644 --- a/meta-webos/recipes-extended/corosync/corosync_%.bbappend +++ b/meta-webos/recipes-extended/corosync/corosync_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-extended/hdparm/hdparm_%.bbappend b/meta-webos/recipes-extended/hdparm/hdparm_%.bbappend index dcb038f40..af2b65221 100644 --- a/meta-webos/recipes-extended/hdparm/hdparm_%.bbappend +++ b/meta-webos/recipes-extended/hdparm/hdparm_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-extended/iotop/iotop_%.bbappend b/meta-webos/recipes-extended/iotop/iotop_%.bbappend index 55d6112fe..d9182ac24 100644 --- a/meta-webos/recipes-extended/iotop/iotop_%.bbappend +++ b/meta-webos/recipes-extended/iotop/iotop_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2019 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. EXTENDPRAUTO = "webos2" diff --git a/meta-webos/recipes-extended/lighttpd/lighttpd_%.bbappend b/meta-webos/recipes-extended/lighttpd/lighttpd_%.bbappend index 5b8de88ac..f5ae10182 100644 --- a/meta-webos/recipes-extended/lighttpd/lighttpd_%.bbappend +++ b/meta-webos/recipes-extended/lighttpd/lighttpd_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend b/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend index c8b45d5a1..9d532d914 100644 --- a/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend +++ b/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2020 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos7" diff --git a/meta-webos/recipes-extended/ltp/ltp_%.bbappend b/meta-webos/recipes-extended/ltp/ltp_%.bbappend index d5d2c137a..e374ee730 100644 --- a/meta-webos/recipes-extended/ltp/ltp_%.bbappend +++ b/meta-webos/recipes-extended/ltp/ltp_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos4" diff --git a/meta-webos/recipes-extended/mdadm/mdadm_%.bbappend b/meta-webos/recipes-extended/mdadm/mdadm_%.bbappend index 1d5e46630..5b3798932 100644 --- a/meta-webos/recipes-extended/mdadm/mdadm_%.bbappend +++ b/meta-webos/recipes-extended/mdadm/mdadm_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-extended/ostree/ostree_%.bbappend b/meta-webos/recipes-extended/ostree/ostree_%.bbappend index f10d36acd..de386fee2 100644 --- a/meta-webos/recipes-extended/ostree/ostree_%.bbappend +++ b/meta-webos/recipes-extended/ostree/ostree_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-extended/procps/procps_%.bbappend b/meta-webos/recipes-extended/procps/procps_%.bbappend index adc6fc180..42590ee50 100644 --- a/meta-webos/recipes-extended/procps/procps_%.bbappend +++ b/meta-webos/recipes-extended/procps/procps_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2021 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. AUTHOR = "Viesturs Zarins " EXTENDPRAUTO:append = "webos3" diff --git a/meta-webos/recipes-extended/rarpd/rarpd_%.bbappend b/meta-webos/recipes-extended/rarpd/rarpd_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-extended/rarpd/rarpd_%.bbappend +++ b/meta-webos/recipes-extended/rarpd/rarpd_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-extended/rsyslog/rsyslog_%.bbappend b/meta-webos/recipes-extended/rsyslog/rsyslog_%.bbappend index 1d5e46630..5b3798932 100644 --- a/meta-webos/recipes-extended/rsyslog/rsyslog_%.bbappend +++ b/meta-webos/recipes-extended/rsyslog/rsyslog_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-extended/sblim-sfcb/sblim-sfcb_%.bbappend b/meta-webos/recipes-extended/sblim-sfcb/sblim-sfcb_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-extended/sblim-sfcb/sblim-sfcb_%.bbappend +++ b/meta-webos/recipes-extended/sblim-sfcb/sblim-sfcb_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-extended/scsirastools/scsirastools_%.bbappend b/meta-webos/recipes-extended/scsirastools/scsirastools_%.bbappend index 9dd53d029..59206c839 100644 --- a/meta-webos/recipes-extended/scsirastools/scsirastools_%.bbappend +++ b/meta-webos/recipes-extended/scsirastools/scsirastools_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-extended/sed/sed_4.8.bbappend b/meta-webos/recipes-extended/sed/sed_4.8.bbappend index 3eab1a6f1..d10a18e76 100644 --- a/meta-webos/recipes-extended/sed/sed_4.8.bbappend +++ b/meta-webos/recipes-extended/sed/sed_4.8.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2020 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-extended/snappy/snappy_%.bbappend b/meta-webos/recipes-extended/snappy/snappy_%.bbappend index 913a76326..fb2d04070 100644 --- a/meta-webos/recipes-extended/snappy/snappy_%.bbappend +++ b/meta-webos/recipes-extended/snappy/snappy_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2019 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. EXTENDPRAUTO = "webos1" diff --git a/meta-webos/recipes-extended/sysdig/sysdig_%.bbappend b/meta-webos/recipes-extended/sysdig/sysdig_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-extended/sysdig/sysdig_%.bbappend +++ b/meta-webos/recipes-extended/sysdig/sysdig_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-extended/tcp-wrappers/tcp-wrappers_7.6.bbappend b/meta-webos/recipes-extended/tcp-wrappers/tcp-wrappers_7.6.bbappend index d62542419..7c2c5c307 100644 --- a/meta-webos/recipes-extended/tcp-wrappers/tcp-wrappers_7.6.bbappend +++ b/meta-webos/recipes-extended/tcp-wrappers/tcp-wrappers_7.6.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-extended/tzdata/tzdata.bbappend b/meta-webos/recipes-extended/tzdata/tzdata.bbappend index 4c0f5a976..995c2a783 100644 --- a/meta-webos/recipes-extended/tzdata/tzdata.bbappend +++ b/meta-webos/recipes-extended/tzdata/tzdata.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. # webOS system should be ready to have read-only /etc folder # thus we move timezone/localtime to other place (in volatile partition) diff --git a/meta-webos/recipes-filesystems/unionfs-fuse/unionfs-fuse_%.bbappend b/meta-webos/recipes-filesystems/unionfs-fuse/unionfs-fuse_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-filesystems/unionfs-fuse/unionfs-fuse_%.bbappend +++ b/meta-webos/recipes-filesystems/unionfs-fuse/unionfs-fuse_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-filter/ebtables/ebtables_%.bbappend b/meta-webos/recipes-filter/ebtables/ebtables_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-filter/ebtables/ebtables_%.bbappend +++ b/meta-webos/recipes-filter/ebtables/ebtables_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-graphics/fbida/fbida_%.bbappend b/meta-webos/recipes-graphics/fbida/fbida_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-graphics/fbida/fbida_%.bbappend +++ b/meta-webos/recipes-graphics/fbida/fbida_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-graphics/fontconfig/fontconfig_%.bbappend b/meta-webos/recipes-graphics/fontconfig/fontconfig_%.bbappend index fd6677bae..307b22be0 100644 --- a/meta-webos/recipes-graphics/fontconfig/fontconfig_%.bbappend +++ b/meta-webos/recipes-graphics/fontconfig/fontconfig_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2020 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. AUTHOR = "Bhooshan Supe " EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-graphics/freetype/freetype_%.bbappend b/meta-webos/recipes-graphics/freetype/freetype_%.bbappend index 9400cef79..fd1905b8c 100644 --- a/meta-webos/recipes-graphics/freetype/freetype_%.bbappend +++ b/meta-webos/recipes-graphics/freetype/freetype_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2020 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. AUTHOR = "Valery Volgutov " EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-graphics/gphoto2/libgphoto2_%.bbappend b/meta-webos/recipes-graphics/gphoto2/libgphoto2_%.bbappend index d4048a533..a0bc4489c 100644 --- a/meta-webos/recipes-graphics/gphoto2/libgphoto2_%.bbappend +++ b/meta-webos/recipes-graphics/gphoto2/libgphoto2_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-graphics/mesa/mesa_%.bbappend b/meta-webos/recipes-graphics/mesa/mesa_%.bbappend index 6ae071065..2c1e1e366 100644 --- a/meta-webos/recipes-graphics/mesa/mesa_%.bbappend +++ b/meta-webos/recipes-graphics/mesa/mesa_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos6" diff --git a/meta-webos/recipes-graphics/piglit/piglit_%.bbappend b/meta-webos/recipes-graphics/piglit/piglit_%.bbappend index 16532153f..494a50823 100644 --- a/meta-webos/recipes-graphics/piglit/piglit_%.bbappend +++ b/meta-webos/recipes-graphics/piglit/piglit_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-graphics/wayland/wayland_%.bbappend b/meta-webos/recipes-graphics/wayland/wayland_%.bbappend index 1d593cd81..57758ac73 100644 --- a/meta-webos/recipes-graphics/wayland/wayland_%.bbappend +++ b/meta-webos/recipes-graphics/wayland/wayland_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2020 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-kernel/cpupower/cpupower.bbappend b/meta-webos/recipes-kernel/cpupower/cpupower.bbappend index c013f7d52..bfa9ec85a 100644 --- a/meta-webos/recipes-kernel/cpupower/cpupower.bbappend +++ b/meta-webos/recipes-kernel/cpupower/cpupower.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-kernel/dtc/dtc_%.bbappend b/meta-webos/recipes-kernel/dtc/dtc_%.bbappend index e39ef3a03..804ad69b1 100644 --- a/meta-webos/recipes-kernel/dtc/dtc_%.bbappend +++ b/meta-webos/recipes-kernel/dtc/dtc_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-kernel/kernel-selftest/kernel-selftest.bbappend b/meta-webos/recipes-kernel/kernel-selftest/kernel-selftest.bbappend index de206443d..001c8e82c 100644 --- a/meta-webos/recipes-kernel/kernel-selftest/kernel-selftest.bbappend +++ b/meta-webos/recipes-kernel/kernel-selftest/kernel-selftest.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-kernel/lttng/babeltrace2_%.bbappend b/meta-webos/recipes-kernel/lttng/babeltrace2_%.bbappend index fd0181c5f..1ea16a3ff 100644 --- a/meta-webos/recipes-kernel/lttng/babeltrace2_%.bbappend +++ b/meta-webos/recipes-kernel/lttng/babeltrace2_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-kernel/lttng/babeltrace_%.bbappend b/meta-webos/recipes-kernel/lttng/babeltrace_%.bbappend index fd0181c5f..1ea16a3ff 100644 --- a/meta-webos/recipes-kernel/lttng/babeltrace_%.bbappend +++ b/meta-webos/recipes-kernel/lttng/babeltrace_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-kernel/lttng/lttng-tools_%.bbappend b/meta-webos/recipes-kernel/lttng/lttng-tools_%.bbappend index 63631f853..8f799de61 100644 --- a/meta-webos/recipes-kernel/lttng/lttng-tools_%.bbappend +++ b/meta-webos/recipes-kernel/lttng/lttng-tools_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-kernel/systemtap/systemtap_%.bbappend b/meta-webos/recipes-kernel/systemtap/systemtap_%.bbappend index 3c0dd2b81..421554e66 100644 --- a/meta-webos/recipes-kernel/systemtap/systemtap_%.bbappend +++ b/meta-webos/recipes-kernel/systemtap/systemtap_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-kernel/wireguard/wireguard-tools_%.bbappend b/meta-webos/recipes-kernel/wireguard/wireguard-tools_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-kernel/wireguard/wireguard-tools_%.bbappend +++ b/meta-webos/recipes-kernel/wireguard/wireguard-tools_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-location/com.webos.service.location/com.webos.service.location.bb b/meta-webos/recipes-location/com.webos.service.location/com.webos.service.location.bb index 55db7e884..6e8398ecb 100644 --- a/meta-webos/recipes-location/com.webos.service.location/com.webos.service.location.bb +++ b/meta-webos/recipes-location/com.webos.service.location/com.webos.service.location.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2021 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. DESCRIPTION = "location framework which provides location based services implementing location handlers, plugins, and Luna location service" AUTHOR = "vibhanshu.dhote " diff --git a/meta-webos/recipes-location/loc-utils/loc-utils.bb b/meta-webos/recipes-location/loc-utils/loc-utils.bb index 9f4502404..bbe495f92 100644 --- a/meta-webos/recipes-location/loc-utils/loc-utils.bb +++ b/meta-webos/recipes-location/loc-utils/loc-utils.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2021 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. DESCRIPTION = "Utility library used in Location Framework" AUTHOR = "vibhanshu.dhote " diff --git a/meta-webos/recipes-location/nmeaparser/nmeaparser.bb b/meta-webos/recipes-location/nmeaparser/nmeaparser.bb index 8806e4824..f5855c00b 100644 --- a/meta-webos/recipes-location/nmeaparser/nmeaparser.bb +++ b/meta-webos/recipes-location/nmeaparser/nmeaparser.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. SUMMARY = "NMEA Parser Class Library" DESCRIPTION = "Parser to support NMEA 0813 standard" diff --git a/meta-webos/recipes-multimedia/alsa/alsa-lib_%.bbappend b/meta-webos/recipes-multimedia/alsa/alsa-lib_%.bbappend index 92c2d118d..471e92d9b 100644 --- a/meta-webos/recipes-multimedia/alsa/alsa-lib_%.bbappend +++ b/meta-webos/recipes-multimedia/alsa/alsa-lib_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-multimedia/alsa/alsa-plugins_%.bbappend b/meta-webos/recipes-multimedia/alsa/alsa-plugins_%.bbappend index 24323d1f5..4470d3a6a 100644 --- a/meta-webos/recipes-multimedia/alsa/alsa-plugins_%.bbappend +++ b/meta-webos/recipes-multimedia/alsa/alsa-plugins_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2021 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-multimedia/alsa/alsa-tools_%.bbappend b/meta-webos/recipes-multimedia/alsa/alsa-tools_%.bbappend index 0b1c98c7c..08cbbacfd 100644 --- a/meta-webos/recipes-multimedia/alsa/alsa-tools_%.bbappend +++ b/meta-webos/recipes-multimedia/alsa/alsa-tools_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-multimedia/alsa/alsa-utils-scripts_%.bbappend b/meta-webos/recipes-multimedia/alsa/alsa-utils-scripts_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-multimedia/alsa/alsa-utils-scripts_%.bbappend +++ b/meta-webos/recipes-multimedia/alsa/alsa-utils-scripts_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-multimedia/alsa/alsa-utils_%.bbappend b/meta-webos/recipes-multimedia/alsa/alsa-utils_%.bbappend index f847030fb..dc59aa02d 100644 --- a/meta-webos/recipes-multimedia/alsa/alsa-utils_%.bbappend +++ b/meta-webos/recipes-multimedia/alsa/alsa-utils_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2018 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-multimedia/com.webos.service.audiofocusmanager/com.webos.service.audiofocusmanager.bb b/meta-webos/recipes-multimedia/com.webos.service.audiofocusmanager/com.webos.service.audiofocusmanager.bb index a21fee367..4f10fea89 100644 --- a/meta-webos/recipes-multimedia/com.webos.service.audiofocusmanager/com.webos.service.audiofocusmanager.bb +++ b/meta-webos/recipes-multimedia/com.webos.service.audiofocusmanager/com.webos.service.audiofocusmanager.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. DESCRIPTION = "webOS audiofocusmanager" AUTHOR = "Mallikarjun Hanganalli " diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend index c8a21d479..ebed97935 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend index a6b5f2e11..3224153ee 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend index 649211f98..e833617b9 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend index 635ab8f55..183444c48 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb index 8c6f8eca1..d838f26d1 100644 --- a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb +++ b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "Media codec interface for webOS" AUTHOR = "Pankaj Maharana " diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio/pulseaudio.service b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio/pulseaudio.service index b17f71d0c..7bb049ec5 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio/pulseaudio.service +++ b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio/pulseaudio.service @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/meta-webos/recipes-multimedia/umi/umi.bb b/meta-webos/recipes-multimedia/umi/umi.bb index a2fafd1e2..59a25a7e8 100644 --- a/meta-webos/recipes-multimedia/umi/umi.bb +++ b/meta-webos/recipes-multimedia/umi/umi.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2021 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "AudioOutputd adaptation layer (UMI) API definition and test harness" SECTION = "webos/libs" diff --git a/meta-webos/recipes-printing/cups/cups-filters_%.bbappend b/meta-webos/recipes-printing/cups/cups-filters_%.bbappend index c013f7d52..bfa9ec85a 100644 --- a/meta-webos/recipes-printing/cups/cups-filters_%.bbappend +++ b/meta-webos/recipes-printing/cups/cups-filters_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-protocols/openl2tp/openl2tp_%.bbappend b/meta-webos/recipes-protocols/openl2tp/openl2tp_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-protocols/openl2tp/openl2tp_%.bbappend +++ b/meta-webos/recipes-protocols/openl2tp/openl2tp_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative/qmllint-supplement.py b/meta-webos/recipes-qt/qt6/qtdeclarative/qmllint-supplement.py index adb436aa3..4b9840d36 100755 --- a/meta-webos/recipes-qt/qt6/qtdeclarative/qmllint-supplement.py +++ b/meta-webos/recipes-qt/qt6/qtdeclarative/qmllint-supplement.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 # -# Copyright (c) 2020-2021 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/meta-webos/recipes-qt/qt6/qtgraphicaleffects_%.bbappend b/meta-webos/recipes-qt/qt6/qtgraphicaleffects_%.bbappend index ba075f60f..9678d5d49 100644 --- a/meta-webos/recipes-qt/qt6/qtgraphicaleffects_%.bbappend +++ b/meta-webos/recipes-qt/qt6/qtgraphicaleffects_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos3" diff --git a/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bbappend b/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bbappend index b611a52a9..ecd3707e0 100644 --- a/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bbappend +++ b/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2016-2021 LG Electronics, Inc. +# Copyright (c) 2016-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos8" diff --git a/meta-webos/recipes-support/apr/apr_%.bbappend b/meta-webos/recipes-support/apr/apr_%.bbappend index 79c63c787..08bcea862 100644 --- a/meta-webos/recipes-support/apr/apr_%.bbappend +++ b/meta-webos/recipes-support/apr/apr_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-support/attr/acl_%.bbappend b/meta-webos/recipes-support/attr/acl_%.bbappend index baa6ded93..c364d3186 100644 --- a/meta-webos/recipes-support/attr/acl_%.bbappend +++ b/meta-webos/recipes-support/attr/acl_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-support/bash-completion/bash-completion_%.bbappend b/meta-webos/recipes-support/bash-completion/bash-completion_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-support/bash-completion/bash-completion_%.bbappend +++ b/meta-webos/recipes-support/bash-completion/bash-completion_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-support/ca-certificates/ca-certificates_%.bbappend b/meta-webos/recipes-support/ca-certificates/ca-certificates_%.bbappend index 740be8382..06a4d7676 100644 --- a/meta-webos/recipes-support/ca-certificates/ca-certificates_%.bbappend +++ b/meta-webos/recipes-support/ca-certificates/ca-certificates_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2018 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" EXTENDPRAUTO:append = "webos3" diff --git a/meta-webos/recipes-support/curl/curl_%.bbappend b/meta-webos/recipes-support/curl/curl_%.bbappend index 15491d730..d4f75c72b 100644 --- a/meta-webos/recipes-support/curl/curl_%.bbappend +++ b/meta-webos/recipes-support/curl/curl_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2019 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos10" diff --git a/meta-webos/recipes-support/dbus/dbus-test_%.bbappend b/meta-webos/recipes-support/dbus/dbus-test_%.bbappend index 1d5e46630..5b3798932 100644 --- a/meta-webos/recipes-support/dbus/dbus-test_%.bbappend +++ b/meta-webos/recipes-support/dbus/dbus-test_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-support/drbd/drbd-utils_%.bbappend b/meta-webos/recipes-support/drbd/drbd-utils_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-support/drbd/drbd-utils_%.bbappend +++ b/meta-webos/recipes-support/drbd/drbd-utils_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-support/gflags/gflags_%.bbappend b/meta-webos/recipes-support/gflags/gflags_%.bbappend index b91673cf9..beb0bde53 100644 --- a/meta-webos/recipes-support/gflags/gflags_%.bbappend +++ b/meta-webos/recipes-support/gflags/gflags_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2019 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-support/libcheck/libcheck_%.bbappend b/meta-webos/recipes-support/libcheck/libcheck_%.bbappend index e3f35a648..1c68b8691 100644 --- a/meta-webos/recipes-support/libcheck/libcheck_%.bbappend +++ b/meta-webos/recipes-support/libcheck/libcheck_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2017 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-support/libteam/libteam_%.bbappend b/meta-webos/recipes-support/libteam/libteam_%.bbappend index ca3c9d6f7..e630fcd56 100644 --- a/meta-webos/recipes-support/libteam/libteam_%.bbappend +++ b/meta-webos/recipes-support/libteam/libteam_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-support/lio-utils/lio-utils_%.bbappend b/meta-webos/recipes-support/lio-utils/lio-utils_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-support/lio-utils/lio-utils_%.bbappend +++ b/meta-webos/recipes-support/lio-utils/lio-utils_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-support/lm_sensors/lmsensors_%.bbappend b/meta-webos/recipes-support/lm_sensors/lmsensors_%.bbappend index 563a21c36..833ba3717 100644 --- a/meta-webos/recipes-support/lm_sensors/lmsensors_%.bbappend +++ b/meta-webos/recipes-support/lm_sensors/lmsensors_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-support/logwarn/logwarn_%.bbappend b/meta-webos/recipes-support/logwarn/logwarn_%.bbappend index 06dfd6502..210a79f5e 100644 --- a/meta-webos/recipes-support/logwarn/logwarn_%.bbappend +++ b/meta-webos/recipes-support/logwarn/logwarn_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-support/lvm2/lvm2_%.bbappend b/meta-webos/recipes-support/lvm2/lvm2_%.bbappend index 34e5ccc6b..278aca686 100644 --- a/meta-webos/recipes-support/lvm2/lvm2_%.bbappend +++ b/meta-webos/recipes-support/lvm2/lvm2_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-support/mcelog/mce-test_%.bbappend b/meta-webos/recipes-support/mcelog/mce-test_%.bbappend index 210c98f54..dc2198ab7 100644 --- a/meta-webos/recipes-support/mcelog/mce-test_%.bbappend +++ b/meta-webos/recipes-support/mcelog/mce-test_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-support/mcelog/mcelog_%.bbappend b/meta-webos/recipes-support/mcelog/mcelog_%.bbappend index 1d5e46630..5b3798932 100644 --- a/meta-webos/recipes-support/mcelog/mcelog_%.bbappend +++ b/meta-webos/recipes-support/mcelog/mcelog_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-support/memcached/memcached_%.bbappend b/meta-webos/recipes-support/memcached/memcached_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-support/memcached/memcached_%.bbappend +++ b/meta-webos/recipes-support/memcached/memcached_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-support/multipath-tools/multipath-tools_%.bbappend b/meta-webos/recipes-support/multipath-tools/multipath-tools_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-support/multipath-tools/multipath-tools_%.bbappend +++ b/meta-webos/recipes-support/multipath-tools/multipath-tools_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-support/numactl/numactl_%.bbappend b/meta-webos/recipes-support/numactl/numactl_%.bbappend index 1d5e46630..5b3798932 100644 --- a/meta-webos/recipes-support/numactl/numactl_%.bbappend +++ b/meta-webos/recipes-support/numactl/numactl_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-support/opencv/opencv_4.%.bbappend b/meta-webos/recipes-support/opencv/opencv_4.%.bbappend index 3c63122f5..d142c48a9 100644 --- a/meta-webos/recipes-support/opencv/opencv_4.%.bbappend +++ b/meta-webos/recipes-support/opencv/opencv_4.%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-support/pps-tools/pps-tools_%.bbappend b/meta-webos/recipes-support/pps-tools/pps-tools_%.bbappend index a32e333e1..cfc384e54 100644 --- a/meta-webos/recipes-support/pps-tools/pps-tools_%.bbappend +++ b/meta-webos/recipes-support/pps-tools/pps-tools_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2019 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-support/rdma-core/rdma-core_%.bbappend b/meta-webos/recipes-support/rdma-core/rdma-core_%.bbappend index a32e333e1..cfc384e54 100644 --- a/meta-webos/recipes-support/rdma-core/rdma-core_%.bbappend +++ b/meta-webos/recipes-support/rdma-core/rdma-core_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2019 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-support/sdparm/sdparm_%.bbappend b/meta-webos/recipes-support/sdparm/sdparm_%.bbappend index e362a2bc0..9c8e013b2 100644 --- a/meta-webos/recipes-support/sdparm/sdparm_%.bbappend +++ b/meta-webos/recipes-support/sdparm/sdparm_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-support/sg3-utils/sg3-utils_%.bbappend b/meta-webos/recipes-support/sg3-utils/sg3-utils_%.bbappend index 3c0dd2b81..421554e66 100644 --- a/meta-webos/recipes-support/sg3-utils/sg3-utils_%.bbappend +++ b/meta-webos/recipes-support/sg3-utils/sg3-utils_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-support/unbound/unbound_%.bbappend b/meta-webos/recipes-support/unbound/unbound_%.bbappend index 210c98f54..dc2198ab7 100644 --- a/meta-webos/recipes-support/unbound/unbound_%.bbappend +++ b/meta-webos/recipes-support/unbound/unbound_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-support/user-creation/xuser-account_0.1.bbappend b/meta-webos/recipes-support/user-creation/xuser-account_0.1.bbappend index 14d4035fe..fd3ca2a95 100644 --- a/meta-webos/recipes-support/user-creation/xuser-account_0.1.bbappend +++ b/meta-webos/recipes-support/user-creation/xuser-account_0.1.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-test/bats/bats_%.bbappend b/meta-webos/recipes-test/bats/bats_%.bbappend index 0ba989021..0ddb156f3 100644 --- a/meta-webos/recipes-test/bats/bats_%.bbappend +++ b/meta-webos/recipes-test/bats/bats_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-test/googletest/googletest_%.bbappend b/meta-webos/recipes-test/googletest/googletest_%.bbappend index e6c9809b6..af5cc680c 100644 --- a/meta-webos/recipes-test/googletest/googletest_%.bbappend +++ b/meta-webos/recipes-test/googletest/googletest_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2021 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos2" diff --git a/meta-webos/recipes-upstreamable/googleapis/googleapis_git.bb b/meta-webos/recipes-upstreamable/googleapis/googleapis_git.bb index 786db6d6c..aa594bd10 100644 --- a/meta-webos/recipes-upstreamable/googleapis/googleapis_git.bb +++ b/meta-webos/recipes-upstreamable/googleapis/googleapis_git.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2021 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. DESCRIPTION = "Public interface definitions of Google APIs" AUTHOR = "Kyungjik Min " diff --git a/meta-webos/recipes-upstreamable/gphotofs/gphotofs_0.5.bb b/meta-webos/recipes-upstreamable/gphotofs/gphotofs_0.5.bb index 89fea62a1..570a5133d 100644 --- a/meta-webos/recipes-upstreamable/gphotofs/gphotofs_0.5.bb +++ b/meta-webos/recipes-upstreamable/gphotofs/gphotofs_0.5.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "FUSE filesystem module to mount camera" HOMEPAGE = "http://www.gphoto.org/proj/gphotofs/" diff --git a/meta-webos/recipes-upstreamable/gtkmm-utils/gtkmm-utils_0.4.1.bb b/meta-webos/recipes-upstreamable/gtkmm-utils/gtkmm-utils_0.4.1.bb index 1af32f2fe..60c435118 100644 --- a/meta-webos/recipes-upstreamable/gtkmm-utils/gtkmm-utils_0.4.1.bb +++ b/meta-webos/recipes-upstreamable/gtkmm-utils/gtkmm-utils_0.4.1.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. DESCRIPTION = "C++ utility and widget library based on glibmm and gtkmm" HOMEPAGE = "http://code.google.com/p/gtkmm-utils/" diff --git a/meta-webos/recipes-upstreamable/leveldb-tl/leveldb-tl_0.1.6.bb b/meta-webos/recipes-upstreamable/leveldb-tl/leveldb-tl_0.1.6.bb index c8176bfe3..79a4d13dc 100644 --- a/meta-webos/recipes-upstreamable/leveldb-tl/leveldb-tl_0.1.6.bb +++ b/meta-webos/recipes-upstreamable/leveldb-tl/leveldb-tl_0.1.6.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2021 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "LevelDB Template Library" DESCRIPTION = "Template library to build a more complex storage schema with leveldb as a backend" diff --git a/meta-webos/recipes-upstreamable/libbson/libbson_git.bb b/meta-webos/recipes-upstreamable/libbson/libbson_git.bb index 62b857e51..76a3b2f66 100644 --- a/meta-webos/recipes-upstreamable/libbson/libbson_git.bb +++ b/meta-webos/recipes-upstreamable/libbson/libbson_git.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2021 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "A BSON utility library" DESCRIPTION = "libbson is a library providing useful routines related to building, parsing, and iterating BSON documents." diff --git a/meta-webos/recipes-upstreamable/libhangul/libhangul.bb b/meta-webos/recipes-upstreamable/libhangul/libhangul.bb index bb2c1d369..18de6a67d 100644 --- a/meta-webos/recipes-upstreamable/libhangul/libhangul.bb +++ b/meta-webos/recipes-upstreamable/libhangul/libhangul.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2016-2021 LG Electronics, Inc. +# Copyright (c) 2016-2022 LG Electronics, Inc. SUMMARY = "Hangul input method library" AUTHOR = "Pugalendhi Ganesan " diff --git a/meta-webos/recipes-upstreamable/libnsbmp/libnsbmp_0.1.0.bb b/meta-webos/recipes-upstreamable/libnsbmp/libnsbmp_0.1.0.bb index 299933348..7edafb720 100644 --- a/meta-webos/recipes-upstreamable/libnsbmp/libnsbmp_0.1.0.bb +++ b/meta-webos/recipes-upstreamable/libnsbmp/libnsbmp_0.1.0.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "BMP Library" DESCRIPTION = "Libnsbmp is a decoding library for BMP and ICO image file formats, written in C" diff --git a/meta-webos/recipes-upstreamable/node-gyp/node-gyp-native_git.bb b/meta-webos/recipes-upstreamable/node-gyp/node-gyp-native_git.bb index a65d1cd4b..198708875 100644 --- a/meta-webos/recipes-upstreamable/node-gyp/node-gyp-native_git.bb +++ b/meta-webos/recipes-upstreamable/node-gyp/node-gyp-native_git.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. DESCRIPTION = "Node.js native addon build tool" HOMEPAGE = "https://github.com/nodejs/node-gyp" diff --git a/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native_0.12.2.bb b/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native_0.12.2.bb index b8455e90d..f1ea4d89f 100644 --- a/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native_0.12.2.bb +++ b/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native_0.12.2.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2015 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. require node-gyp-packages-native.inc diff --git a/meta-webos/recipes-upstreamable/nodejs-module/nodejs-module-nan-native_2.14.1.bb b/meta-webos/recipes-upstreamable/nodejs-module/nodejs-module-nan-native_2.14.1.bb index 2f05b3c29..164e0a3eb 100644 --- a/meta-webos/recipes-upstreamable/nodejs-module/nodejs-module-nan-native_2.14.1.bb +++ b/meta-webos/recipes-upstreamable/nodejs-module/nodejs-module-nan-native_2.14.1.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "A module for nodejs nan" DESCRIPTION = "A header file filled with macro and utility goodness for making add-on development for Node.js" diff --git a/meta-webos/recipes-upstreamable/nodejs-module/nodejs-module-usocket_0.2.1.bb b/meta-webos/recipes-upstreamable/nodejs-module/nodejs-module-usocket_0.2.1.bb index f86b541c0..d546e37a0 100644 --- a/meta-webos/recipes-upstreamable/nodejs-module/nodejs-module-usocket_0.2.1.bb +++ b/meta-webos/recipes-upstreamable/nodejs-module/nodejs-module-usocket_0.2.1.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2021 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "A module for nodejs usocket" HOMEPAGE = "https://github.com/jhs67/usocket#readme" diff --git a/meta-webos/recipes-upstreamable/pacrunner/pacrunner/pacrunner.conf b/meta-webos/recipes-upstreamable/pacrunner/pacrunner/pacrunner.conf index 263071fd6..b5c6fa373 100644 --- a/meta-webos/recipes-upstreamable/pacrunner/pacrunner/pacrunner.conf +++ b/meta-webos/recipes-upstreamable/pacrunner/pacrunner/pacrunner.conf @@ -1,4 +1,4 @@ -# Copyright (c) 2016 LG Electronics, Inc. +# Copyright (c) 2016-2022 LG Electronics, Inc. description "Proxy daemon" diff --git a/meta-webos/recipes-upstreamable/pacrunner/pacrunner_0.9.bb b/meta-webos/recipes-upstreamable/pacrunner/pacrunner_0.9.bb index d95b75afa..bbe7c6f2f 100644 --- a/meta-webos/recipes-upstreamable/pacrunner/pacrunner_0.9.bb +++ b/meta-webos/recipes-upstreamable/pacrunner/pacrunner_0.9.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2016 LG Electronics, Inc. +# Copyright (c) 2016-2022 LG Electronics, Inc. SUMMARY = "Proxy daemon" AUTHOR = "Sungmok Shin " diff --git a/meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb b/meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb index 119d1c1ca..2211ff80a 100644 --- a/meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb +++ b/meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2018 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SECTION = "libs" DESCRIPTION = "Multi-thread malloc implementation" diff --git a/meta-webos/recipes-upstreamable/pyzy/pyzy.bb b/meta-webos/recipes-upstreamable/pyzy/pyzy.bb index 5c7368bc5..7944ed375 100644 --- a/meta-webos/recipes-upstreamable/pyzy/pyzy.bb +++ b/meta-webos/recipes-upstreamable/pyzy/pyzy.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "The Chinese PinYin and Bopomofo conversion library" AUTHOR = "Pugalendhi Ganesan " diff --git a/meta-webos/recipes-upstreamable/snowboy/snowboy/CMakeLists.txt b/meta-webos/recipes-upstreamable/snowboy/snowboy/CMakeLists.txt index fa4b32b95..884839565 100644 --- a/meta-webos/recipes-upstreamable/snowboy/snowboy/CMakeLists.txt +++ b/meta-webos/recipes-upstreamable/snowboy/snowboy/CMakeLists.txt @@ -1,6 +1,6 @@ # @@@LICENSE # -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. # # LICENSE@@@ diff --git a/meta-webos/recipes-upstreamable/snowboy/snowboy_%.bbappend b/meta-webos/recipes-upstreamable/snowboy/snowboy_%.bbappend index 21e1a9783..68ae26dc8 100644 --- a/meta-webos/recipes-upstreamable/snowboy/snowboy_%.bbappend +++ b/meta-webos/recipes-upstreamable/snowboy/snowboy_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-upstreamable/sp-measure/sp-measure_git.bb b/meta-webos/recipes-upstreamable/sp-measure/sp-measure_git.bb index 99c3ea983..6b509f9fe 100644 --- a/meta-webos/recipes-upstreamable/sp-measure/sp-measure_git.bb +++ b/meta-webos/recipes-upstreamable/sp-measure/sp-measure_git.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "A library for measuring resource consumption (CPU, memory)" LICENSE = "LGPLv2.1" diff --git a/meta-webos/recipes-upstreamable/sp-memusage/sp-memusage_git.bb b/meta-webos/recipes-upstreamable/sp-memusage/sp-memusage_git.bb index 35a5b36da..dd9ffedd2 100644 --- a/meta-webos/recipes-upstreamable/sp-memusage/sp-memusage_git.bb +++ b/meta-webos/recipes-upstreamable/sp-memusage/sp-memusage_git.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "A collection of memory usage monitoring tools and scripts" LICENSE = "GPL-2.0" diff --git a/meta-webos/recipes-upstreamable/sqlcipher/sqlcipher.bb b/meta-webos/recipes-upstreamable/sqlcipher/sqlcipher.bb index cb30f8b51..4fa3bfbe3 100644 --- a/meta-webos/recipes-upstreamable/sqlcipher/sqlcipher.bb +++ b/meta-webos/recipes-upstreamable/sqlcipher/sqlcipher.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "Open Source Full Database Encryption for SQLite" DESCRIPTION = "SQLCipher is an open source library that provides transparent, secure 256-bit AES encryption of SQLite database files." diff --git a/meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb b/meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb index bff5f4af9..2f31ee1f2 100644 --- a/meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb +++ b/meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "Pinyin input method library" AUTHOR = "pugalendhi Ganesan " diff --git a/meta-webos/recipes-upstreamable/uchardet/uchardet_0.0.1.bb b/meta-webos/recipes-upstreamable/uchardet/uchardet_0.0.1.bb index 66cefbd05..52a565477 100644 --- a/meta-webos/recipes-upstreamable/uchardet/uchardet_0.0.1.bb +++ b/meta-webos/recipes-upstreamable/uchardet/uchardet_0.0.1.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. DESCRIPTION = "uchardet is a C language binding of the original C++ \ implementation of the universal charset detection library by Mozilla." diff --git a/meta-webos/recipes-upstreamable/xulrunner/xulrunner_3.6.27.bb b/meta-webos/recipes-upstreamable/xulrunner/xulrunner_3.6.27.bb index 1e04c34fb..856fe6019 100644 --- a/meta-webos/recipes-upstreamable/xulrunner/xulrunner_3.6.27.bb +++ b/meta-webos/recipes-upstreamable/xulrunner/xulrunner_3.6.27.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "XULRunner Open Source Project" DESCRIPTION = "SDK to make NPAPI plugins" diff --git a/meta-webos/recipes-utils/udevil/udevil_%.bbappend b/meta-webos/recipes-utils/udevil/udevil_%.bbappend index 7d3ca9559..eecdbf911 100644 --- a/meta-webos/recipes-utils/udevil/udevil_%.bbappend +++ b/meta-webos/recipes-utils/udevil/udevil_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos1" diff --git a/meta-webos/recipes-utils/vmwgfx-layout/vmwgfx-layout.bb b/meta-webos/recipes-utils/vmwgfx-layout/vmwgfx-layout.bb index 0d29cb1ed..0433f547f 100644 --- a/meta-webos/recipes-utils/vmwgfx-layout/vmwgfx-layout.bb +++ b/meta-webos/recipes-utils/vmwgfx-layout/vmwgfx-layout.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "Simple setlayout command tool for vmwgfx drm driver" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/applicationinstallerutility/applicationinstallerutility.bb b/meta-webos/recipes-webos/applicationinstallerutility/applicationinstallerutility.bb index 6c15b9d53..385883c92 100644 --- a/meta-webos/recipes-webos/applicationinstallerutility/applicationinstallerutility.bb +++ b/meta-webos/recipes-webos/applicationinstallerutility/applicationinstallerutility.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY="The Application Installer Utility supports the installing and removing of applications on a HP webOS device." AUTHOR = "Seokjun Lee " diff --git a/meta-webos/recipes-webos/avoutputd/avoutput-adaptation-layer-api.bb b/meta-webos/recipes-webos/avoutputd/avoutput-adaptation-layer-api.bb index f4a2b6095..77d6b223e 100644 --- a/meta-webos/recipes-webos/avoutputd/avoutput-adaptation-layer-api.bb +++ b/meta-webos/recipes-webos/avoutputd/avoutput-adaptation-layer-api.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2018 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "AVOutputd adaptation layer (AVAL) API definition and test harness" SECTION = "webos/libs" diff --git a/meta-webos/recipes-webos/avoutputd/avoutput-adaptation-layer-mock.bb b/meta-webos/recipes-webos/avoutputd/avoutput-adaptation-layer-mock.bb index 527c2823c..277523b3b 100644 --- a/meta-webos/recipes-webos/avoutputd/avoutput-adaptation-layer-mock.bb +++ b/meta-webos/recipes-webos/avoutputd/avoutput-adaptation-layer-mock.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2018 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "AV API implementation library mock" AUTHOR = "Soumya Aithal " diff --git a/meta-webos/recipes-webos/avoutputd/avoutputd.bb b/meta-webos/recipes-webos/avoutputd/avoutputd.bb index c9479c294..f7128eed1 100644 --- a/meta-webos/recipes-webos/avoutputd/avoutputd.bb +++ b/meta-webos/recipes-webos/avoutputd/avoutputd.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2018 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "Service which controls audio and video output" AUTHOR = "Gayathri Srinivasan " diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb index de092bf68..c051f0637 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2021 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "webOS Bluetooth SIL API" AUTHOR = "Sameer Mulla " diff --git a/meta-webos/recipes-webos/bluetooth/com.webos.service.hfp.bb b/meta-webos/recipes-webos/bluetooth/com.webos.service.hfp.bb index 757510705..3c36bb8b7 100644 --- a/meta-webos/recipes-webos/bluetooth/com.webos.service.hfp.bb +++ b/meta-webos/recipes-webos/bluetooth/com.webos.service.hfp.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2021 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. SUMMARY = "Bluetooth HFP(Hands Free Profile) support service" AUTHOR = "Sameer Mulla " diff --git a/meta-webos/recipes-webos/bootd/bootd.bb b/meta-webos/recipes-webos/bootd/bootd.bb index aba018fb0..dd7ef59c9 100644 --- a/meta-webos/recipes-webos/bootd/bootd.bb +++ b/meta-webos/recipes-webos/bootd/bootd.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "Bootd single-shot launching service" DESCRIPTION = "Bootd is a simplified upstart-like component. It provides automatic single-shot launching at boot time" diff --git a/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos-native.bb b/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos-native.bb index a89451ce2..94e0882fa 100644 --- a/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos-native.bb +++ b/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos-native.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. DESCRIPTION = "CMake modules used by webOS" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/com.palm.service.devmode/com.palm.service.devmode.bb b/meta-webos/recipes-webos/com.palm.service.devmode/com.palm.service.devmode.bb index 358ec5501..942ed0cb1 100644 --- a/meta-webos/recipes-webos/com.palm.service.devmode/com.palm.service.devmode.bb +++ b/meta-webos/recipes-webos/com.palm.service.devmode/com.palm.service.devmode.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "JS service for Developer Mode" AUTHOR = "Steve Lemke " diff --git a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb index 692c32482..6b02707d4 100644 --- a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb +++ b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "Camera application" AUTHOR = "Muniraju " diff --git a/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb b/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb index dd858e98f..2d2a9b19b 100644 --- a/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb +++ b/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "General Settings application" AUTHOR = "Anish TD " diff --git a/meta-webos/recipes-webos/com.webos.app.videoplayer/com.webos.app.videoplayer.bb b/meta-webos/recipes-webos/com.webos.app.videoplayer/com.webos.app.videoplayer.bb index 5af5454dd..214656867 100644 --- a/meta-webos/recipes-webos/com.webos.app.videoplayer/com.webos.app.videoplayer.bb +++ b/meta-webos/recipes-webos/com.webos.app.videoplayer/com.webos.app.videoplayer.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "Video Player application" AUTHOR = "Anish TD " diff --git a/meta-webos/recipes-webos/com.webos.app.volume/com.webos.app.volume.bb b/meta-webos/recipes-webos/com.webos.app.volume/com.webos.app.volume.bb index 37b64772a..b5c8a173d 100644 --- a/meta-webos/recipes-webos/com.webos.app.volume/com.webos.app.volume.bb +++ b/meta-webos/recipes-webos/com.webos.app.volume/com.webos.app.volume.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "General System Volume UI application" AUTHOR = "Jongson Kim" diff --git a/meta-webos/recipes-webos/com.webos.service.ai/com.webos.service.ai.bb b/meta-webos/recipes-webos/com.webos.service.ai/com.webos.service.ai.bb index 900be4fd9..bdf484384 100644 --- a/meta-webos/recipes-webos/com.webos.service.ai/com.webos.service.ai.bb +++ b/meta-webos/recipes-webos/com.webos.service.ai/com.webos.service.ai.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2021 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "Ai service for voice/face/gesture recognition" AUTHOR = "Kyungjik Min " diff --git a/meta-webos/recipes-webos/com.webos.service.audiooutput/com.webos.service.audiooutput.bb b/meta-webos/recipes-webos/com.webos.service.audiooutput/com.webos.service.audiooutput.bb index 979aa5381..bca289baa 100644 --- a/meta-webos/recipes-webos/com.webos.service.audiooutput/com.webos.service.audiooutput.bb +++ b/meta-webos/recipes-webos/com.webos.service.audiooutput/com.webos.service.audiooutput.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "Service which controls audio output" AUTHOR = "Premalatha MVS " diff --git a/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb b/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb index ba7247919..4d85a1b6a 100644 --- a/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb +++ b/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "Camera service framework to control camera devices" AUTHOR = "Gururaj Patil" diff --git a/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.app.mediaviewer.bb b/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.app.mediaviewer.bb index 3d27ecb42..3fadecce3 100644 --- a/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.app.mediaviewer.bb +++ b/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.app.mediaviewer.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "webOS OSE sample app for flow" AUTHOR = "Namsu Kim " diff --git a/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.service.flowmanager.bb b/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.service.flowmanager.bb index 8469a91a0..205796084 100644 --- a/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.service.flowmanager.bb +++ b/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.service.flowmanager.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "webOS Flow manager" AUTHOR = "Namsu Kim " diff --git a/meta-webos/recipes-webos/com.webos.service.intent/com.webos.service.intent.bb b/meta-webos/recipes-webos/com.webos.service.intent/com.webos.service.intent.bb index a0902ad5f..68a1fc2e0 100644 --- a/meta-webos/recipes-webos/com.webos.service.intent/com.webos.service.intent.bb +++ b/meta-webos/recipes-webos/com.webos.service.intent/com.webos.service.intent.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2021 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. SUMMARY = "Intent Manager" AUTHOR = "Sangwoo Kang " diff --git a/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb b/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb index 502faa920..6f01e370d 100644 --- a/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb +++ b/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2021 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. SUMMARY = "Mediacontroller service" AUTHOR = "Sapna Kumari" diff --git a/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb b/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb index f0f42284b..615469165 100644 --- a/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb +++ b/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "Physical Device Manager handles physical devices using netlink events" DESCRIPTION = "Service for detecting and managing physical devices using netlink events. A physical device is a USB device, available internal storage device and so on." diff --git a/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb b/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb index cab8aa142..5b287ebeb 100644 --- a/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb +++ b/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "Peripheral Manager service for webOS OSE" AUTHOR = "Yogish S " diff --git a/meta-webos/recipes-webos/com.webos.service.power2/com.webos.service.power2.bb b/meta-webos/recipes-webos/com.webos.service.power2/com.webos.service.power2.bb index 371c33658..f1e4207fc 100644 --- a/meta-webos/recipes-webos/com.webos.service.power2/com.webos.service.power2.bb +++ b/meta-webos/recipes-webos/com.webos.service.power2/com.webos.service.power2.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2021 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. SUMMARY = "Power manager service handles device suspend/resume/display states" AUTHOR = "Abhsiehk Srivastava " diff --git a/meta-webos/recipes-webos/com.webos.service.unifiedsearch/com.webos.service.unifiedsearch.bb b/meta-webos/recipes-webos/com.webos.service.unifiedsearch/com.webos.service.unifiedsearch.bb index eece3646e..cbe02f389 100644 --- a/meta-webos/recipes-webos/com.webos.service.unifiedsearch/com.webos.service.unifiedsearch.bb +++ b/meta-webos/recipes-webos/com.webos.service.unifiedsearch/com.webos.service.unifiedsearch.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2021 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. SUMMARY = "Unified search service" AUTHOR = "Sangwoo Kang " diff --git a/meta-webos/recipes-webos/configd-data/configd-data.bb b/meta-webos/recipes-webos/configd-data/configd-data.bb index a15a13db6..2cb1e8ac1 100644 --- a/meta-webos/recipes-webos/configd-data/configd-data.bb +++ b/meta-webos/recipes-webos/configd-data/configd-data.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2021 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "webOS Configuration Service data" AUTHOR = "SangWook Han " diff --git a/meta-webos/recipes-webos/configd/configd.bb b/meta-webos/recipes-webos/configd/configd.bb index 7e1f43218..648f88d51 100644 --- a/meta-webos/recipes-webos/configd/configd.bb +++ b/meta-webos/recipes-webos/configd/configd.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2021 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "webOS Configuration Service" AUTHOR = "Sangwoo Kang " diff --git a/meta-webos/recipes-webos/configurator/configurator.bb b/meta-webos/recipes-webos/configurator/configurator.bb index 311c36363..996c2f848 100644 --- a/meta-webos/recipes-webos/configurator/configurator.bb +++ b/meta-webos/recipes-webos/configurator/configurator.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "Creates the database schema for webOS apps" AUTHOR = "Ludovic Legrand " diff --git a/meta-webos/recipes-webos/cpushareholder-stub/cpushareholder-stub.bb b/meta-webos/recipes-webos/cpushareholder-stub/cpushareholder-stub.bb index f9fc3e809..b7e0dd6bf 100644 --- a/meta-webos/recipes-webos/cpushareholder-stub/cpushareholder-stub.bb +++ b/meta-webos/recipes-webos/cpushareholder-stub/cpushareholder-stub.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2020 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "Stubbed implementation of the webOS CPU shares scripts" AUTHOR = "Maksym Shevchenko " diff --git a/meta-webos/recipes-webos/event-monitor-network/event-monitor-network.bb b/meta-webos/recipes-webos/event-monitor-network/event-monitor-network.bb index b44f29b9c..de5362be6 100644 --- a/meta-webos/recipes-webos/event-monitor-network/event-monitor-network.bb +++ b/meta-webos/recipes-webos/event-monitor-network/event-monitor-network.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2020 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "Event Monitoring for Network service" AUTHOR = "Seokhee Lee " diff --git a/meta-webos/recipes-webos/event-monitor/event-monitor.bb b/meta-webos/recipes-webos/event-monitor/event-monitor.bb index b8b78ef6b..7f3fd56b6 100644 --- a/meta-webos/recipes-webos/event-monitor/event-monitor.bb +++ b/meta-webos/recipes-webos/event-monitor/event-monitor.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2021 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. SUMMARY = "Event Monitoring Service for generic notifications" AUTHOR = "Viesturs Zarins " diff --git a/meta-webos/recipes-webos/filecache/filecache.bb b/meta-webos/recipes-webos/filecache/filecache.bb index 23f4e3fd8..fc16a934d 100644 --- a/meta-webos/recipes-webos/filecache/filecache.bb +++ b/meta-webos/recipes-webos/filecache/filecache.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS daemon to cache filesystem requests" AUTHOR = "Alekseyev Oleksandr " diff --git a/meta-webos/recipes-webos/fluentbit/fluentbit_%.bbappend b/meta-webos/recipes-webos/fluentbit/fluentbit_%.bbappend index 766c5b886..611cfe6f3 100644 --- a/meta-webos/recipes-webos/fluentbit/fluentbit_%.bbappend +++ b/meta-webos/recipes-webos/fluentbit/fluentbit_%.bbappend @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. EXTENDPRAUTO:append = "webos3" diff --git a/meta-webos/recipes-webos/frameworks/nodejs-module-webos-service.bb b/meta-webos/recipes-webos/frameworks/nodejs-module-webos-service.bb index fc677cec7..13adaad39 100644 --- a/meta-webos/recipes-webos/frameworks/nodejs-module-webos-service.bb +++ b/meta-webos/recipes-webos/frameworks/nodejs-module-webos-service.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2020 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "Loadable Node.js module for webOS services" AUTHOR = "Sergiy Kryvonos " diff --git a/meta-webos/recipes-webos/ilib-webapp/ilib-qml-plugin.bb b/meta-webos/recipes-webos/ilib-webapp/ilib-qml-plugin.bb index d06520ae6..4a51516f5 100644 --- a/meta-webos/recipes-webos/ilib-webapp/ilib-qml-plugin.bb +++ b/meta-webos/recipes-webos/ilib-webapp/ilib-qml-plugin.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "iLib Qml loader" AUTHOR = "Goun Lee " diff --git a/meta-webos/recipes-webos/imemanager/imemanager.bb b/meta-webos/recipes-webos/imemanager/imemanager.bb index 62bf26940..f78aa1049 100644 --- a/meta-webos/recipes-webos/imemanager/imemanager.bb +++ b/meta-webos/recipes-webos/imemanager/imemanager.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "Maliit Input Method Plugins" DESCRIPTION = "Mallit-based virtual keyboard and input method engine for open webOS" diff --git a/meta-webos/recipes-webos/jemalloc/jemalloc.bb b/meta-webos/recipes-webos/jemalloc/jemalloc.bb index 2c11927ee..8d84a18fb 100644 --- a/meta-webos/recipes-webos/jemalloc/jemalloc.bb +++ b/meta-webos/recipes-webos/jemalloc/jemalloc.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS of the open-source FreeBSD memory allocation library" AUTHOR = "Rama Krishna " diff --git a/meta-webos/recipes-webos/libgdrive/libgdrive.bb b/meta-webos/recipes-webos/libgdrive/libgdrive.bb index c73e95714..dac749c64 100644 --- a/meta-webos/recipes-webos/libgdrive/libgdrive.bb +++ b/meta-webos/recipes-webos/libgdrive/libgdrive.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "Google Drive for SAF" AUTHOR = "Navnit Kumar " diff --git a/meta-webos/recipes-webos/libpmscore/libpmscore.bb b/meta-webos/recipes-webos/libpmscore/libpmscore.bb index 5d24b03fe..041072622 100644 --- a/meta-webos/recipes-webos/libpmscore/libpmscore.bb +++ b/meta-webos/recipes-webos/libpmscore/libpmscore.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2021 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. SUMMARY = "pmscore handles device states" AUTHOR = "Abhsiehk Srivastava " diff --git a/meta-webos/recipes-webos/librolegen/librolegen.bb b/meta-webos/recipes-webos/librolegen/librolegen.bb index f6a35526e..ca7efefdc 100644 --- a/meta-webos/recipes-webos/librolegen/librolegen.bb +++ b/meta-webos/recipes-webos/librolegen/librolegen.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "Library for dynamically generating webOS system bus role files for webOS JavaScript services" SECTION = "webos/libs" diff --git a/meta-webos/recipes-webos/libsandbox/libsandbox.bb b/meta-webos/recipes-webos/libsandbox/libsandbox.bb index 773b8a96b..6f501ccdd 100644 --- a/meta-webos/recipes-webos/libsandbox/libsandbox.bb +++ b/meta-webos/recipes-webos/libsandbox/libsandbox.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2020 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "libsandbox is a collection of APIs for separating running programs" AUTHOR = "Andrew Innes " diff --git a/meta-webos/recipes-webos/libtimedautomata/libtimedautomata.bb b/meta-webos/recipes-webos/libtimedautomata/libtimedautomata.bb index 2bb47105b..aebf5311f 100644 --- a/meta-webos/recipes-webos/libtimedautomata/libtimedautomata.bb +++ b/meta-webos/recipes-webos/libtimedautomata/libtimedautomata.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2021 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "Timed Automata library for Event translation" AUTHOR = "Byunggul Koh " diff --git a/meta-webos/recipes-webos/libwebosi18n/libwebosi18n.bb b/meta-webos/recipes-webos/libwebosi18n/libwebosi18n.bb index bb6ada964..bb743b45f 100644 --- a/meta-webos/recipes-webos/libwebosi18n/libwebosi18n.bb +++ b/meta-webos/recipes-webos/libwebosi18n/libwebosi18n.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "libwebosi18n library can be used by non-QT C++ components for localization" AUTHOR = "Seonmi Jin " diff --git a/meta-webos/recipes-webos/ls2-helpers/ls2-helpers.bb b/meta-webos/recipes-webos/ls2-helpers/ls2-helpers.bb index 9febb5015..210324881 100644 --- a/meta-webos/recipes-webos/ls2-helpers/ls2-helpers.bb +++ b/meta-webos/recipes-webos/ls2-helpers/ls2-helpers.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2018 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "Luna service C++11 helpers library" AUTHOR = "Viesturs Zarins " diff --git a/meta-webos/recipes-webos/luna-downloadmgr/luna-downloadmgr.bb b/meta-webos/recipes-webos/luna-downloadmgr/luna-downloadmgr.bb index 129549c33..def62f374 100644 --- a/meta-webos/recipes-webos/luna-downloadmgr/luna-downloadmgr.bb +++ b/meta-webos/recipes-webos/luna-downloadmgr/luna-downloadmgr.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY="The Download Manager service supports the downloading and uploading of files to and from a HP webOS device." AUTHOR = "Sangwoo Kang " diff --git a/meta-webos/recipes-webos/luna-init/luna-init.bb b/meta-webos/recipes-webos/luna-init/luna-init.bb index 2ac16b40f..d2a8b9f84 100644 --- a/meta-webos/recipes-webos/luna-init/luna-init.bb +++ b/meta-webos/recipes-webos/luna-init/luna-init.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2020 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "Initialization, setup, and font files used by luna-sysmgr and luna-sysservice" AUTHOR = "Alekseyev Oleksandr " diff --git a/meta-webos/recipes-webos/luna-prefs/luna-prefs-data.bb b/meta-webos/recipes-webos/luna-prefs/luna-prefs-data.bb index 3b1a9f5c2..2e017b02f 100644 --- a/meta-webos/recipes-webos/luna-prefs/luna-prefs-data.bb +++ b/meta-webos/recipes-webos/luna-prefs/luna-prefs-data.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2015-2019 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. # WARNING: This recipe appears in the SIGGEN_EXCLUDERECIPES_ABISAFE list in # conf/layer.conf which means that changes to it will not be used in the generation diff --git a/meta-webos/recipes-webos/luna-prefs/luna-prefs.bb b/meta-webos/recipes-webos/luna-prefs/luna-prefs.bb index c6421fbf6..1f196e10f 100644 --- a/meta-webos/recipes-webos/luna-prefs/luna-prefs.bb +++ b/meta-webos/recipes-webos/luna-prefs/luna-prefs.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS preferences manager" AUTHOR = "Oleksandr Ivanov " diff --git a/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb b/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb index fbee0d736..5f6d62fba 100644 --- a/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb +++ b/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "Maliit Input Method Framework" DESCRIPTION = "This is the webOS edition of the Maliit input method framework. It differs from upstream in that it supports a hardware keyboard using the wayland protocol." diff --git a/meta-webos/recipes-webos/media-resource-calculator/media-resource-calculator.bb b/meta-webos/recipes-webos/media-resource-calculator/media-resource-calculator.bb index 91e90e90c..8e2a70215 100644 --- a/meta-webos/recipes-webos/media-resource-calculator/media-resource-calculator.bb +++ b/meta-webos/recipes-webos/media-resource-calculator/media-resource-calculator.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. DESCRIPTION = "Media Resource Calculator for webOS" AUTHOR = "Bhooshan Supe " diff --git a/meta-webos/recipes-webos/mojoloader/mojoloader.bb b/meta-webos/recipes-webos/mojoloader/mojoloader.bb index c7993ccf3..84666b05a 100644 --- a/meta-webos/recipes-webos/mojoloader/mojoloader.bb +++ b/meta-webos/recipes-webos/mojoloader/mojoloader.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2020 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "JavaScript loader for foundation frameworks and other loadable libraries" AUTHOR = "Suresh Arumugam " diff --git a/meta-webos/recipes-webos/mojoservicelauncher/mojoservicelauncher.bb b/meta-webos/recipes-webos/mojoservicelauncher/mojoservicelauncher.bb index d4bb0ee27..94f8a2662 100644 --- a/meta-webos/recipes-webos/mojoservicelauncher/mojoservicelauncher.bb +++ b/meta-webos/recipes-webos/mojoservicelauncher/mojoservicelauncher.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2020 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS component responsible for launching the node.js services" AUTHOR = "Steve Lemke " diff --git a/meta-webos/recipes-webos/nodejs-module-ext/nodejs-module-node-red_0.18.7.bb b/meta-webos/recipes-webos/nodejs-module-ext/nodejs-module-node-red_0.18.7.bb index 251403cab..dd028bf75 100644 --- a/meta-webos/recipes-webos/nodejs-module-ext/nodejs-module-node-red_0.18.7.bb +++ b/meta-webos/recipes-webos/nodejs-module-ext/nodejs-module-node-red_0.18.7.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2021 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "Loadable node-red module for nodejs services" AUTHOR = "Tirthadeep Roy " diff --git a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-dynaload.bb b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-dynaload.bb index 299f3e0ea..d70eedbbf 100644 --- a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-dynaload.bb +++ b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-dynaload.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2020 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. require nodejs-module-webos.inc diff --git a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-pmlog.bb b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-pmlog.bb index 4a9099f6f..1e146edb0 100644 --- a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-pmlog.bb +++ b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-pmlog.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. require nodejs-module-webos.inc diff --git a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-sysbus.bb b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-sysbus.bb index ea5b8f902..62b46ecd2 100644 --- a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-sysbus.bb +++ b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-sysbus.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. require nodejs-module-webos.inc diff --git a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos.inc b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos.inc index c9f3ec85d..c486a7ff8 100644 --- a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos.inc +++ b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos.inc @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "A module for nodejs that allows dynamic loading and execution of Javascript files" AUTHOR = "Anatolii Sakhnik " diff --git a/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb b/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb index 202c894ec..531c4bce8 100644 --- a/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb +++ b/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. DESCRIPTION = "Notification Manager" AUTHOR = "Suresh Arumugam " diff --git a/meta-webos/recipes-webos/nyx-modules-qemux86/nyx-modules-qemux86.bb b/meta-webos/recipes-webos/nyx-modules-qemux86/nyx-modules-qemux86.bb index 45fbf74ab..134b7e979 100644 --- a/meta-webos/recipes-webos/nyx-modules-qemux86/nyx-modules-qemux86.bb +++ b/meta-webos/recipes-webos/nyx-modules-qemux86/nyx-modules-qemux86.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2016-2021 LG Electronics, Inc. +# Copyright (c) 2016-2022 LG Electronics, Inc. SUMMARY = "webOS portability layer - qemux86 nyx module" AUTHOR = "Sapna Todwal " diff --git a/meta-webos/recipes-webos/nyx-modules/nyx-modules.bb b/meta-webos/recipes-webos/nyx-modules/nyx-modules.bb index 3249b6bef..b7f7af5c1 100644 --- a/meta-webos/recipes-webos/nyx-modules/nyx-modules.bb +++ b/meta-webos/recipes-webos/nyx-modules/nyx-modules.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS portability layer - ${MACHINE}-specific modules" AUTHOR = "Keith Derrick " diff --git a/meta-webos/recipes-webos/nyx-utils/nyx-utils.bb b/meta-webos/recipes-webos/nyx-utils/nyx-utils.bb index a8f365214..d8ada66eb 100644 --- a/meta-webos/recipes-webos/nyx-utils/nyx-utils.bb +++ b/meta-webos/recipes-webos/nyx-utils/nyx-utils.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "Command line utilities for the webOS Platform Portability Layer" AUTHOR = "Ed Chejlava " diff --git a/meta-webos/recipes-webos/openwnn-webos/openwnn-webos.bb b/meta-webos/recipes-webos/openwnn-webos/openwnn-webos.bb index 81348a604..af130061d 100755 --- a/meta-webos/recipes-webos/openwnn-webos/openwnn-webos.bb +++ b/meta-webos/recipes-webos/openwnn-webos/openwnn-webos.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "A Japanese IME library (input method editor for typing Japanese)" AUTHOR = "Pugalendhi Ganesan " diff --git a/meta-webos/recipes-webos/pdm-plugin/pdm-plugin.bb b/meta-webos/recipes-webos/pdm-plugin/pdm-plugin.bb index e77da85d0..f74da26e6 100644 --- a/meta-webos/recipes-webos/pdm-plugin/pdm-plugin.bb +++ b/meta-webos/recipes-webos/pdm-plugin/pdm-plugin.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2019-2020 LG Electronics, Inc. +# Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = " Pdm-plugin to support Physical device manager for webOS OSE" DESCRIPTION = "Pdm-plugin to initialize hardware required by Physical device manager in for webOS OSE" diff --git a/meta-webos/recipes-webos/pmklogd/pmklogd.bb b/meta-webos/recipes-webos/pmklogd/pmklogd.bb index 2a8fc7d3a..7a4d2b689 100644 --- a/meta-webos/recipes-webos/pmklogd/pmklogd.bb +++ b/meta-webos/recipes-webos/pmklogd/pmklogd.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2011-2020 LG Electronics, Inc. +# Copyright (c) 2011-2022 LG Electronics, Inc. SUMMARY = "Kernel logging daemon" AUTHOR = "Anatolii Sakhnik " diff --git a/meta-webos/recipes-webos/pmlogctl/pmlogctl.bb b/meta-webos/recipes-webos/pmlogctl/pmlogctl.bb index 542d1b04d..5b2f5bce4 100644 --- a/meta-webos/recipes-webos/pmlogctl/pmlogctl.bb +++ b/meta-webos/recipes-webos/pmlogctl/pmlogctl.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2020 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS logging control application" AUTHOR = "Anatolii Sakhnik " diff --git a/meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb b/meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb index a3ef7fb8f..e71900cd7 100644 --- a/meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb +++ b/meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS logging daemon" AUTHOR = "Gayathri Srinivasan " diff --git a/meta-webos/recipes-webos/pmloglib/pmloglib-private.bb b/meta-webos/recipes-webos/pmloglib/pmloglib-private.bb index 59830645f..e95ec6a04 100644 --- a/meta-webos/recipes-webos/pmloglib/pmloglib-private.bb +++ b/meta-webos/recipes-webos/pmloglib/pmloglib-private.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2018 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "webOS logging library - private interface" AUTHOR = "Anatolii Sakhnik " diff --git a/meta-webos/recipes-webos/pmloglib/pmloglib.bb b/meta-webos/recipes-webos/pmloglib/pmloglib.bb index 5f05880c5..451700fe9 100644 --- a/meta-webos/recipes-webos/pmloglib/pmloglib.bb +++ b/meta-webos/recipes-webos/pmloglib/pmloglib.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS logging library" AUTHOR = "Gayathri Srinivasan " diff --git a/meta-webos/recipes-webos/pms-support-reference/pms-support-reference.bb b/meta-webos/recipes-webos/pms-support-reference/pms-support-reference.bb index 3b62e1ecf..b3547e568 100644 --- a/meta-webos/recipes-webos/pms-support-reference/pms-support-reference.bb +++ b/meta-webos/recipes-webos/pms-support-reference/pms-support-reference.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020-2021 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. SUMMARY = "Reference power manager plugin" AUTHOR = "Abhsiehk Srivastava " diff --git a/meta-webos/recipes-webos/pmtrace/pmtrace.bb b/meta-webos/recipes-webos/pmtrace/pmtrace.bb index d7a285709..ab29445b2 100644 --- a/meta-webos/recipes-webos/pmtrace/pmtrace.bb +++ b/meta-webos/recipes-webos/pmtrace/pmtrace.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "lttng-ust tracepoints wrapper library and performance tools" AUTHOR = "Andre Rosa " diff --git a/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb b/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb index c592202a5..16170e7be 100644 --- a/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb +++ b/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "Shareable QML components for webOS" AUTHOR = "Anupam Kaul " diff --git a/meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb b/meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb index ace619cc1..185d2d0a2 100644 --- a/meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb +++ b/meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "An extensible object oriented component used to add service components to webOS" AUTHOR = "Anatolii Sakhnik " diff --git a/meta-webos/recipes-webos/settingsservice/settingsservice.bb b/meta-webos/recipes-webos/settingsservice/settingsservice.bb index 2044299a2..235fc2765 100644 --- a/meta-webos/recipes-webos/settingsservice/settingsservice.bb +++ b/meta-webos/recipes-webos/settingsservice/settingsservice.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "Settings Service" AUTHOR = "Radhika S " diff --git a/meta-webos/recipes-webos/sleepd/sleepd.bb b/meta-webos/recipes-webos/sleepd/sleepd.bb index 5c722236b..8e72d987e 100644 --- a/meta-webos/recipes-webos/sleepd/sleepd.bb +++ b/meta-webos/recipes-webos/sleepd/sleepd.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "Sleep scheduling policy daemon" AUTHOR = "Sapna Todwal " diff --git a/meta-webos/recipes-webos/test-apps/bareapp.bb b/meta-webos/recipes-webos/test-apps/bareapp.bb index 43e62a264..629425228 100644 --- a/meta-webos/recipes-webos/test-apps/bareapp.bb +++ b/meta-webos/recipes-webos/test-apps/bareapp.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2016-2020 LG Electronics, Inc. +# Copyright (c) 2016-2022 LG Electronics, Inc. require webos-open-test-apps.inc diff --git a/meta-webos/recipes-webos/test-apps/com.webos.app.test.enact.bb b/meta-webos/recipes-webos/test-apps/com.webos.app.test.enact.bb index d0395f266..acdc41fa6 100644 --- a/meta-webos/recipes-webos/test-apps/com.webos.app.test.enact.bb +++ b/meta-webos/recipes-webos/test-apps/com.webos.app.test.enact.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. require webos-open-test-apps.inc diff --git a/meta-webos/recipes-webos/test-apps/com.webos.app.test.webosose.bb b/meta-webos/recipes-webos/test-apps/com.webos.app.test.webosose.bb index f28cc980b..0ac0711d4 100644 --- a/meta-webos/recipes-webos/test-apps/com.webos.app.test.webosose.bb +++ b/meta-webos/recipes-webos/test-apps/com.webos.app.test.webosose.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. require webos-open-test-apps.inc diff --git a/meta-webos/recipes-webos/test-apps/com.webos.app.test.webrtc.bb b/meta-webos/recipes-webos/test-apps/com.webos.app.test.webrtc.bb index e7d029909..8dc835b39 100644 --- a/meta-webos/recipes-webos/test-apps/com.webos.app.test.webrtc.bb +++ b/meta-webos/recipes-webos/test-apps/com.webos.app.test.webrtc.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2020 LG Electronics, Inc. +# Copyright (c) 2020-2022 LG Electronics, Inc. require webos-open-test-apps.inc diff --git a/meta-webos/recipes-webos/test-apps/com.webos.app.test.youtube.bb b/meta-webos/recipes-webos/test-apps/com.webos.app.test.youtube.bb index d9f7ec059..48cd05d84 100644 --- a/meta-webos/recipes-webos/test-apps/com.webos.app.test.youtube.bb +++ b/meta-webos/recipes-webos/test-apps/com.webos.app.test.youtube.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2016-2020 LG Electronics, Inc. +# Copyright (c) 2016-2022 LG Electronics, Inc. require webos-open-test-apps.inc diff --git a/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb b/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb index f81d8db35..92f243ed7 100644 --- a/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb +++ b/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2014-2021 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "umediaserver configs installation" AUTHOR = "Peter Nordström " diff --git a/meta-webos/recipes-webos/umediaserver/umediaserver.bb b/meta-webos/recipes-webos/umediaserver/umediaserver.bb index d6c80768f..d57a0bf13 100644 --- a/meta-webos/recipes-webos/umediaserver/umediaserver.bb +++ b/meta-webos/recipes-webos/umediaserver/umediaserver.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2013-2021 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "webOS uMediaserver daemon and utilities" AUTHOR = "Ian Cain " diff --git a/meta-webos/recipes-webos/videooutputd/com.webos.service.videooutput.bb b/meta-webos/recipes-webos/videooutputd/com.webos.service.videooutput.bb index 5fa264621..acb3c98de 100644 --- a/meta-webos/recipes-webos/videooutputd/com.webos.service.videooutput.bb +++ b/meta-webos/recipes-webos/videooutputd/com.webos.service.videooutput.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2018-2020 LG Electronics, Inc. +# Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "Service which controls video output" AUTHOR = "Kwanghee Lee " diff --git a/meta-webos/recipes-webos/videooutputd/videooutput-adaptation-layer-api.bb b/meta-webos/recipes-webos/videooutputd/videooutput-adaptation-layer-api.bb index 5adf3a869..4673c082c 100644 --- a/meta-webos/recipes-webos/videooutputd/videooutput-adaptation-layer-api.bb +++ b/meta-webos/recipes-webos/videooutputd/videooutput-adaptation-layer-api.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2020 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "Vidououtputd Adaptation Layer (VAL) API definition and test harness" SECTION = "webos/libs" diff --git a/meta-webos/recipes-webos/videooutputd/videooutput-adaptation-layer-mock.bb b/meta-webos/recipes-webos/videooutputd/videooutput-adaptation-layer-mock.bb index 135c67f66..740814a81 100644 --- a/meta-webos/recipes-webos/videooutputd/videooutput-adaptation-layer-mock.bb +++ b/meta-webos/recipes-webos/videooutputd/videooutput-adaptation-layer-mock.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2019 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "VAL API implementation library mock" AUTHOR = "Kwanghee Lee " diff --git a/meta-webos/recipes-webos/webos-connman-adapter/wca-support-api.bb b/meta-webos/recipes-webos/webos-connman-adapter/wca-support-api.bb index 28a379492..af69e2050 100644 --- a/meta-webos/recipes-webos/webos-connman-adapter/wca-support-api.bb +++ b/meta-webos/recipes-webos/webos-connman-adapter/wca-support-api.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2020 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "webOS connman adapter support API" AUTHOR = "Seokhee Lee " diff --git a/meta-webos/recipes-webos/webos-connman-adapter/wca-support.bb b/meta-webos/recipes-webos/webos-connman-adapter/wca-support.bb index 28308f0b7..de255c310 100644 --- a/meta-webos/recipes-webos/webos-connman-adapter/wca-support.bb +++ b/meta-webos/recipes-webos/webos-connman-adapter/wca-support.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2020 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "webOS connman adapter support library" AUTHOR = "Seokhee Lee " diff --git a/meta-webos/recipes-webos/webos-connman-adapter/webos-connman-adapter.bb b/meta-webos/recipes-webos/webos-connman-adapter/webos-connman-adapter.bb index 47d173ad4..f2c0372a8 100644 --- a/meta-webos/recipes-webos/webos-connman-adapter/webos-connman-adapter.bb +++ b/meta-webos/recipes-webos/webos-connman-adapter/webos-connman-adapter.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2012-2021 LG Electronics, Inc. +# Copyright (c) 2012-2022 LG Electronics, Inc. DESCRIPTION = "webOS component for managing network connections using connman" AUTHOR = "Seokhee Lee " diff --git a/meta-webos/recipes-webos/webos-fontconfig-files/webos-fontconfig-files.bb b/meta-webos/recipes-webos/webos-fontconfig-files/webos-fontconfig-files.bb index b2d919744..3c8f00405 100644 --- a/meta-webos/recipes-webos/webos-fontconfig-files/webos-fontconfig-files.bb +++ b/meta-webos/recipes-webos/webos-fontconfig-files/webos-fontconfig-files.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2020 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "Private configuration files for fontconfig" AUTHOR = "Seonmi Jin " diff --git a/meta-webos/recipes-webos/webos-fonts/webos-fonts.bb b/meta-webos/recipes-webos/webos-fonts/webos-fonts.bb index c10a54b6a..9d6d0e462 100644 --- a/meta-webos/recipes-webos/webos-fonts/webos-fonts.bb +++ b/meta-webos/recipes-webos/webos-fonts/webos-fonts.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2021 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. require ${BPN}.inc diff --git a/meta-webos/recipes-webos/webos-fonts/webos-fonts.inc b/meta-webos/recipes-webos/webos-fonts/webos-fonts.inc index 6a6a8a222..32ce7adb2 100644 --- a/meta-webos/recipes-webos/webos-fonts/webos-fonts.inc +++ b/meta-webos/recipes-webos/webos-fonts/webos-fonts.inc @@ -1,4 +1,4 @@ -# Copyright (c) 2017-2020 LG Electronics, Inc. +# Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "Fonts used by webOS" SECTION = "webos/fonts" diff --git a/meta-webos/recipes-webos/webos-nettools/webos-nettools.bb b/meta-webos/recipes-webos/webos-nettools/webos-nettools.bb index 265db7e6e..e4a45d957 100644 --- a/meta-webos/recipes-webos/webos-nettools/webos-nettools.bb +++ b/meta-webos/recipes-webos/webos-nettools/webos-nettools.bb @@ -1,4 +1,4 @@ -# Copyright (c) 2021 LG Electronics, Inc. +# Copyright (c) 2021-2022 LG Electronics, Inc. DESCRIPTION = "Luna-service2 service providing network utility tools like ping and arping" AUTHOR = "Rakes Pani " diff --git a/meta-webos/scripts/build-changes/build_changes.sh b/meta-webos/scripts/build-changes/build_changes.sh index f1f05cf37..d3d9cc8bc 100755 --- a/meta-webos/scripts/build-changes/build_changes.sh +++ b/meta-webos/scripts/build-changes/build_changes.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Copyright (c) 2013 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/meta-webos/scripts/build-changes/set_commits.sh b/meta-webos/scripts/build-changes/set_commits.sh index 539f94845..ae87e9325 100755 --- a/meta-webos/scripts/build-changes/set_commits.sh +++ b/meta-webos/scripts/build-changes/set_commits.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Copyright (c) 2013 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/meta-webos/scripts/build-changes/update_build_changes.sh b/meta-webos/scripts/build-changes/update_build_changes.sh index d3a81af43..dcb4f6ec3 100755 --- a/meta-webos/scripts/build-changes/update_build_changes.sh +++ b/meta-webos/scripts/build-changes/update_build_changes.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Copyright (c) 2013 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. diff --git a/meta-webos/scripts/buildhistory-collect-src-info b/meta-webos/scripts/buildhistory-collect-src-info index 2cc7435b1..5fdb58f60 100755 --- a/meta-webos/scripts/buildhistory-collect-src-info +++ b/meta-webos/scripts/buildhistory-collect-src-info @@ -5,7 +5,7 @@ # Based on buildhistory-collect-srcrevs from branch=dora,commit=64aa7d0 of oe-core # Only addition is printing SRC_URIs as well (needs modified buildhistory.bbclass) # -# Copyright (c) 2015 LG Electronics, Inc. +# Copyright (c) 2015-2022 LG Electronics, Inc. # # Copyright 2013 Intel Corporation # Authored-by: Paul Eggleton diff --git a/meta-webos/scripts/checkicecc.py b/meta-webos/scripts/checkicecc.py index 9b8f34e16..5185754c8 100755 --- a/meta-webos/scripts/checkicecc.py +++ b/meta-webos/scripts/checkicecc.py @@ -1,6 +1,6 @@ #!/usr/bin/env python3 -# Copyright (c) 2014 LG Electronics, Inc. +# Copyright (c) 2014-2022 LG Electronics, Inc. """checkicecc Script to check the icecc installation and running status. diff --git a/meta-webos/scripts/prepare-submission.sh b/meta-webos/scripts/prepare-submission.sh index 21e1fa1cc..6b8aa96be 100755 --- a/meta-webos/scripts/prepare-submission.sh +++ b/meta-webos/scripts/prepare-submission.sh @@ -1,6 +1,6 @@ #!/bin/bash -# Copyright (c) 2013 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. # Used to prepare a submission to the build of a component diff --git a/meta-webos/scripts/webosvbox b/meta-webos/scripts/webosvbox index 89145b065..735a02af0 100755 --- a/meta-webos/scripts/webosvbox +++ b/meta-webos/scripts/webosvbox @@ -1,6 +1,6 @@ #!/bin/bash -# Copyright (c) 2013-2018 LG Electronics, Inc. +# Copyright (c) 2013-2022 LG Electronics, Inc. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. From c13414bb712c9e20116cad7f71b93a2debd4f376 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 3 May 2022 21:18:26 +0000 Subject: [PATCH 0373/2022] libgoogleassistant=r8 (fix RDEPENDS for /bin/bash) :Release Notes: :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4101] CCC: Various build fixes Change-Id: Ibda928cc7f42224845eb45bc7c90a5cbcceb73d2 --- .../recipes-webos/libgoogleassistant/libgoogleassistant.bb | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb b/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb index d2503c67f..cd1e424c2 100644 --- a/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb +++ b/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb @@ -13,10 +13,11 @@ DEPENDS = "snowboy glib-2.0 googleapis grpc json-c pmloglib pulseaudio" RDEPENDS:${PN}:class-target = "snowboy-models" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS:${PN}:class-target += "${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" WEBOS_VERSION = "1.0.1-10_b8610f05673d48b498e38cb774d6f1056c3b5522" -PR = "r7" +PR = "r8" inherit webos_library inherit webos_cmake From ef0dd91aaf7a4b989b72fbf012d51a9132adc494 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 12 May 2022 12:25:15 +0000 Subject: [PATCH 0374/2022] com.webos.service.bluetooth2=r6 (Fix build with gcc-12) :Release Notes: Add missing include to fix the build. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4709] Create GPVB with Yocto 4.1 Langdale [WRO-4101] CCC: Various build fixes Change-Id: I8eb2ea07177625efbf710ce55fadb718a07188ce --- .../bluetooth/com.webos.service.bluetooth2.bb | 6 ++-- .../0001-Fix-build-with-gcc-12.patch | 29 +++++++++++++++++++ 2 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2/0001-Fix-build-with-gcc-12.patch diff --git a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb index 9736ca8aa..d31eec510 100644 --- a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb +++ b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb @@ -49,7 +49,7 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES = "GATT FTP OPP A2DP SPP HFP AVRCP PAN A WEBOS_BLUETOOTH_PAIRING_IO_CAPABILITY ??= "NoInputNoOutput" WEBOS_VERSION = "1.0.0-71_4a59ec7e27aab8c3a0ac80c207013156e8efc517" -PR = "r5" +PR = "r6" inherit webos_component inherit webos_public_repo @@ -73,5 +73,7 @@ EXTRA_OECMAKE += "-DWEBOS_BLUETOOTH_PAIRING_IO_CAPABILITY:STRING='${WEBOS_BLUETO PACKAGECONFIG[support-response-bt-prepare-suspend-done] = "-DSUPPORT_RESPONSE_BT_PREPARE_SUSPEND_DONE:BOOL=true,-DSUPPORT_RESPONSE_BT_PREPARE_SUSPEND_DONE:BOOL=false," -SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" +SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE} \ + file://0001-Fix-build-with-gcc-12.patch \ +" S = "${WORKDIR}/git" diff --git a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2/0001-Fix-build-with-gcc-12.patch b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2/0001-Fix-build-with-gcc-12.patch new file mode 100644 index 000000000..029c77467 --- /dev/null +++ b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2/0001-Fix-build-with-gcc-12.patch @@ -0,0 +1,29 @@ +From bb4df65dafe865a6195998e4334a811f105ffbcd Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Thu, 12 May 2022 12:23:21 +0000 +Subject: [PATCH] Fix build with gcc-12 + +* fixes: + http://gecko.lge.com/Errors/Details/400130 +FAILED: CMakeFiles/webos-bluetooth-service.dir/src/bluetoothmapprofileservice.cpp.o +TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5/recipe-sysroot-native/usr/bin/aarch64-webos-linux/aarch64-webos-linux-g++ -DWBS_LOCAL_SERVICE -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5/recipe-sysroot/usr/include/glib-2.0 -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5/recipe-sysroot/usr/lib/glib-2.0/include -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5/recipe-sysroot/usr/include/libmount -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5/recipe-sysroot/usr/include/blkid -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5/recipe-sysroot/usr/include/gio-unix-2.0 -mcpu=cortex-a72 -march=armv8-a+crc -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5/recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5=/usr/src/debug/com.webos.service.bluetooth2/1.0.0-71-r5 -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5=/usr/src/debug/com.webos.service.bluetooth2/1.0.0-71-r5 -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5/recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5/recipe-sysroot-native= -fvisibility-inlines-hidden -std=c++11 -Wall -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5/recipe-sysroot/usr/include/glib-2.0 -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5/recipe-sysroot/usr/lib/glib-2.0/include -pthread -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5/recipe-sysroot/usr/include/libmount -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5/recipe-sysroot/usr/include/blkid -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5/recipe-sysroot/usr/include/glib-2.0 -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5/recipe-sysroot/usr/lib/glib-2.0/include -pthread -DUSE_PMLOG_DECLARATION -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5/recipe-sysroot/usr/include/glib-2.0 -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5/recipe-sysroot/usr/lib/glib-2.0/include -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5/build/Configured/src -Wl,--no-undefined -DNDEBUG -MD -MT CMakeFiles/webos-bluetooth-service.dir/src/bluetoothmapprofileservice.cpp.o -MF CMakeFiles/webos-bluetooth-service.dir/src/bluetoothmapprofileservice.cpp.o.d -o CMakeFiles/webos-bluetooth-service.dir/src/bluetoothmapprofileservice.cpp.o -c TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5/git/src/bluetoothmapprofileservice.cpp +TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.bluetooth2/1.0.0-71-r5/git/src/bluetoothmapprofileservice.cpp:28:72: error: variable 'const std::array, BluetoothMapProperty::Type>, 11> filterParam' has initializer but incomplete type + 28 | const std::array,11> filterParam = { std::make_pair("startOffset",BluetoothMapProperty::Type::STARTOFFSET), + | ^~~~~~~~~~~ +--- + src/bluetoothmapprofileservice.cpp | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/src/bluetoothmapprofileservice.cpp b/src/bluetoothmapprofileservice.cpp +index 20d360a..d494039 100644 +--- a/src/bluetoothmapprofileservice.cpp ++++ b/src/bluetoothmapprofileservice.cpp +@@ -24,6 +24,8 @@ + #include "utils.h" + #include "config.h" + ++#include ++ + using namespace std::placeholders; + const std::array,11> filterParam = { std::make_pair("startOffset",BluetoothMapProperty::Type::STARTOFFSET), + std::make_pair("maxCount",BluetoothMapProperty::Type::MAXCOUNT), From 65ab8cf6cf45267429a370f349eb5ae9771fcbe7 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 12 May 2022 12:27:28 +0000 Subject: [PATCH 0375/2022] bluetooth-sil-bluez5=r6 (Fix build with gcc-12) :Release Notes: Add missing include to fix the build. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4709] Create GPVB with Yocto 4.1 Langdale [WRO-4101] CCC: Various build fixes Change-Id: I8c95010d0172c805a1e5d27f6e67ffb3c9534aed --- .../bluetooth/bluetooth-sil-bluez5.bb | 4 ++- .../0001-Fix-build-with-gcc-12.patch | 31 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5/0001-Fix-build-with-gcc-12.patch diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb index c4ebad9d6..73e732d38 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb @@ -18,7 +18,7 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES ??= "" RDEPENDS:${PN} += "${@ bb.utils.contains('WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES', 'FTP', 'bluez5-obex', '', d)}" WEBOS_VERSION = "0.1.0-78_a66bf9ebb7bf1f4fde127742f43393b387fa3a73" -PR = "r5" +PR = "r6" inherit webos_component inherit webos_public_repo @@ -43,3 +43,5 @@ S = "${WORKDIR}/git" SECURITY_STRINGFORMAT = "" SRC_URI += "file://0001-bluez5meshadvprovisioner.h-don-t-include-freedesktop.patch" + +SRC_URI += "file://0001-Fix-build-with-gcc-12.patch" diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5/0001-Fix-build-with-gcc-12.patch b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5/0001-Fix-build-with-gcc-12.patch new file mode 100644 index 000000000..be836f361 --- /dev/null +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5/0001-Fix-build-with-gcc-12.patch @@ -0,0 +1,31 @@ +From ce0a6da38229965fa6da3274408e0c1662d74a01 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Thu, 12 May 2022 12:25:43 +0000 +Subject: [PATCH] Fix build with gcc-12 + +* fixes: + http://gecko.lge.com/Errors/Details/400132 + +FAILED: CMakeFiles/bluez5.dir/src/bluez5device.cpp.o +TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/bluetooth-sil-bluez5/0.1.0-78-r5/recipe-sysroot-native/usr/bin/aarch64-webos-linux/aarch64-webos-linux-g++ -Dbluez5_EXPORTS -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/bluetooth-sil-bluez5/0.1.0-78-r5/recipe-sysroot/usr/include/glib-2.0 -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/bluetooth-sil-bluez5/0.1.0-78-r5/recipe-sysroot/usr/lib/glib-2.0/include -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/bluetooth-sil-bluez5/0.1.0-78-r5/recipe-sysroot/usr/include/libmount -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/bluetooth-sil-bluez5/0.1.0-78-r5/recipe-sysroot/usr/include/blkid -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/bluetooth-sil-bluez5/0.1.0-78-r5/recipe-sysroot/usr/include/gio-unix-2.0 -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/bluetooth-sil-bluez5/0.1.0-78-r5/git/src -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/bluetooth-sil-bluez5/0.1.0-78-r5/build/Configured/src -mcpu=cortex-a72 -march=armv8-a+crc -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Werror=return-type --sysroot=TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/bluetooth-sil-bluez5/0.1.0-78-r5/recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/bluetooth-sil-bluez5/0.1.0-78-r5=/usr/src/debug/bluetooth-sil-bluez5/0.1.0-78-r5 -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/bluetooth-sil-bluez5/0.1.0-78-r5=/usr/src/debug/bluetooth-sil-bluez5/0.1.0-78-r5 -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/bluetooth-sil-bluez5/0.1.0-78-r5/recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/bluetooth-sil-bluez5/0.1.0-78-r5/recipe-sysroot-native= -fvisibility-inlines-hidden -std=c++0x -pthread -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/bluetooth-sil-bluez5/0.1.0-78-r5/recipe-sysroot/usr/include/libmount -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/bluetooth-sil-bluez5/0.1.0-78-r5/recipe-sysroot/usr/include/blkid -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/bluetooth-sil-bluez5/0.1.0-78-r5/recipe-sysroot/usr/include/glib-2.0 -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/bluetooth-sil-bluez5/0.1.0-78-r5/recipe-sysroot/usr/lib/glib-2.0/include -pthread -Wl,--no-undefined -DUSE_SYSTEM_BUS_FOR_OBEX -DNDEBUG -fPIC -MD -MT CMakeFiles/bluez5.dir/src/bluez5device.cpp.o -MF CMakeFiles/bluez5.dir/src/bluez5device.cpp.o.d -o CMakeFiles/bluez5.dir/src/bluez5device.cpp.o -c TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/bluetooth-sil-bluez5/0.1.0-78-r5/git/src/bluez5device.cpp +TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/bluetooth-sil-bluez5/0.1.0-78-r5/git/src/bluez5device.cpp:49:41: error: variable 'const std::array, 4> supportedMessageTypes' has initializer but incomplete type + 49 | static const std::array supportedMessageTypes = {"EMAIL", "SMS_GSM", "SMS_CDMA", "MMS"}; + | ^~~~~~~~~~~~~~~~~~~~~ + +--- + src/bluez5device.cpp | 2 ++ + 2 files changed, 3 insertions(+), 4 deletions(-) + +diff --git a/src/bluez5device.cpp b/src/bluez5device.cpp +index 545ee50..3c9c380 100644 +--- a/src/bluez5device.cpp ++++ b/src/bluez5device.cpp +@@ -14,6 +14,8 @@ + // + // SPDX-License-Identifier: Apache-2.0 + ++#include ++ + #include "logging.h" + #include "bluez5device.h" + #include "bluez5adapter.h" From 21fb98ab1a1df200afe8a353a39237b1b318bfa8 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 12 May 2022 12:29:22 +0000 Subject: [PATCH 0376/2022] com.webos.service.unifiedsearch=r2 (Fix build with gcc-12) :Release Notes: Add missing include to fix the build. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4709] Create GPVB with Yocto 4.1 Langdale [WRO-4101] CCC: Various build fixes Change-Id: Ida40697462ff8400f5595b85ba33c5bd3a215339 --- .../com.webos.service.unifiedsearch.bb | 6 ++-- .../0001-Fix-build-with-gcc-12.patch | 30 +++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) create mode 100644 meta-webos/recipes-webos/com.webos.service.unifiedsearch/com.webos.service.unifiedsearch/0001-Fix-build-with-gcc-12.patch diff --git a/meta-webos/recipes-webos/com.webos.service.unifiedsearch/com.webos.service.unifiedsearch.bb b/meta-webos/recipes-webos/com.webos.service.unifiedsearch/com.webos.service.unifiedsearch.bb index cbe02f389..aaafebb71 100644 --- a/meta-webos/recipes-webos/com.webos.service.unifiedsearch/com.webos.service.unifiedsearch.bb +++ b/meta-webos/recipes-webos/com.webos.service.unifiedsearch/com.webos.service.unifiedsearch.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "luna-service2 libpbnjson glib-2.0 procps sqlite3" WEBOS_VERSION = "1.0.0-6_a911bcccbe9e7c5082a30173d064dca9e7c8ab21" -PR = "r1" +PR = "r2" inherit webos_component inherit webos_enhanced_submissions @@ -20,7 +20,9 @@ inherit webos_pkgconfig inherit webos_public_repo inherit webos_system_bus -SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" +SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE} \ + file://0001-Fix-build-with-gcc-12.patch \ +" S = "${WORKDIR}/git" PACKAGES += "${PN}-plugins" diff --git a/meta-webos/recipes-webos/com.webos.service.unifiedsearch/com.webos.service.unifiedsearch/0001-Fix-build-with-gcc-12.patch b/meta-webos/recipes-webos/com.webos.service.unifiedsearch/com.webos.service.unifiedsearch/0001-Fix-build-with-gcc-12.patch new file mode 100644 index 000000000..6c76f64ae --- /dev/null +++ b/meta-webos/recipes-webos/com.webos.service.unifiedsearch/com.webos.service.unifiedsearch/0001-Fix-build-with-gcc-12.patch @@ -0,0 +1,30 @@ +From 18f9c06ec39f4cdb9cac701d7c1227e9c4df5fe9 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Thu, 12 May 2022 12:28:22 +0000 +Subject: [PATCH] Fix build with gcc-12 + +* fixes: + http://gecko.lge.com/Errors/Details/400131 + +FAILED: src/CMakeFiles/unifiedsearch.dir/util/LinuxProcess.cpp.o +TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.unifiedsearch/1.0.0-6-r1/recipe-sysroot-native/usr/bin/aarch64-webos-linux/aarch64-webos-linux-g++ -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.unifiedsearch/1.0.0-6-r1/recipe-sysroot/usr/include/glib-2.0 -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.unifiedsearch/1.0.0-6-r1/recipe-sysroot/usr/lib/glib-2.0/include -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.unifiedsearch/1.0.0-6-r1/git/src/PROCPS_INCLUDE_DIRS -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.unifiedsearch/1.0.0-6-r1/git/src/SQLITE3_INCLUDE_DIRS -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.unifiedsearch/1.0.0-6-r1/git/src -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.unifiedsearch/1.0.0-6-r1/git/src/../core -ITOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.unifiedsearch/1.0.0-6-r1/build/Configured/src -mcpu=cortex-a72 -march=armv8-a+crc -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.unifiedsearch/1.0.0-6-r1/recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.unifiedsearch/1.0.0-6-r1=/usr/src/debug/com.webos.service.unifiedsearch/1.0.0-6-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.unifiedsearch/1.0.0-6-r1=/usr/src/debug/com.webos.service.unifiedsearch/1.0.0-6-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.unifiedsearch/1.0.0-6-r1/recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.unifiedsearch/1.0.0-6-r1/recipe-sysroot-native= -fvisibility-inlines-hidden -std=c++0x -DNDEBUG -MD -MT src/CMakeFiles/unifiedsearch.dir/util/LinuxProcess.cpp.o -MF src/CMakeFiles/unifiedsearch.dir/util/LinuxProcess.cpp.o.d -o src/CMakeFiles/unifiedsearch.dir/util/LinuxProcess.cpp.o -c TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.unifiedsearch/1.0.0-6-r1/git/src/util/LinuxProcess.cpp +TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.unifiedsearch/1.0.0-6-r1/git/src/util/LinuxProcess.cpp: In static member function 'static std::string LinuxProcess::getStdoutFromCmd(const std::string&)': +TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/com.webos.service.unifiedsearch/1.0.0-6-r1/git/src/util/LinuxProcess.cpp:208:22: error: aggregate 'std::array buffer' has incomplete type and cannot be defined + 208 | array buffer; + | ^~~~~~ +--- + src/util/LinuxProcess.cpp | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/util/LinuxProcess.cpp b/src/util/LinuxProcess.cpp +index 23d8837..ab88673 100644 +--- a/src/util/LinuxProcess.cpp ++++ b/src/util/LinuxProcess.cpp +@@ -20,6 +20,7 @@ + #include + #include + #include ++#include + + #include "util/LinuxProcess.h" + From a30840554cc08c66d547d024f4a2919eeebf8c76 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sat, 14 May 2022 13:23:48 +0000 Subject: [PATCH 0377/2022] ls2-helpers=r1 (Fix build with gcc-12) :Release Notes: Add missing include to fix the build. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4709] Create GPVB with Yocto 4.1 Langdale [WRO-4101] CCC: Various build fixes Change-Id: I003069d155f82a6947252a96e445e624c9f091ee --- .../recipes-webos/ls2-helpers/ls2-helpers.bb | 4 ++- .../0001-Fix-build-with-gcc-12.patch | 31 +++++++++++++++++++ ...npoint.cpp-Prevent-issues-with-new-g.patch | 16 +++++----- 3 files changed, 42 insertions(+), 9 deletions(-) create mode 100644 meta-webos/recipes-webos/ls2-helpers/ls2-helpers/0001-Fix-build-with-gcc-12.patch diff --git a/meta-webos/recipes-webos/ls2-helpers/ls2-helpers.bb b/meta-webos/recipes-webos/ls2-helpers/ls2-helpers.bb index 210324881..7bce7f7b2 100644 --- a/meta-webos/recipes-webos/ls2-helpers/ls2-helpers.bb +++ b/meta-webos/recipes-webos/ls2-helpers/ls2-helpers.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7ca DEPENDS = "glib-2.0 luna-service2 pmloglib libpbnjson" WEBOS_VERSION = "1.0.0-1_d44eeede2de5b06d08fd86ace6e93f5aed9f7f27" -PR = "r0" +PR = "r1" inherit webos_component inherit webos_enhanced_submissions @@ -23,3 +23,5 @@ S = "${WORKDIR}/git" # From http://gpro.lgsvl.com/176219 SRC_URI += "file://0001-test_subscriptionpoint.cpp-Prevent-issues-with-new-g.patch" + +SRC_URI += "file://0001-Fix-build-with-gcc-12.patch" diff --git a/meta-webos/recipes-webos/ls2-helpers/ls2-helpers/0001-Fix-build-with-gcc-12.patch b/meta-webos/recipes-webos/ls2-helpers/ls2-helpers/0001-Fix-build-with-gcc-12.patch new file mode 100644 index 000000000..cfb3920b5 --- /dev/null +++ b/meta-webos/recipes-webos/ls2-helpers/ls2-helpers/0001-Fix-build-with-gcc-12.patch @@ -0,0 +1,31 @@ +From 44dcf97942754e819999a95eda128affc82b9ada Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Sat, 14 May 2022 12:09:14 +0000 +Subject: [PATCH] Fix build with gcc-12 + +* fixes: + http://gecko.lge.com/Errors/Details/401124 + +FAILED: test/CMakeFiles/test_jsonparser.dir/test_jsonparser.cpp.o +TOPDIR/BUILD/work/MACH-oemllib32-linux-gnueabi/lib32-ls2-helpers/1.0.0-10-r0/recipe-sysroot-native/usr/bin/arm-oemllib32-linux-gnueabi/arm-oemllib32-linux-gnueabi-g++ -ITOPDIR/BUILD/work/MACH-oemllib32-linux-gnueabi/lib32-ls2-helpers/1.0.0-10-r0/git/src -ITOPDIR/BUILD/work/MACH-oemllib32-linux-gnueabi/lib32-ls2-helpers/1.0.0-10-r0/git/include/public/ls2-helpers -ITOPDIR/BUILD/work/MACH-oemllib32-linux-gnueabi/lib32-ls2-helpers/1.0.0-10-r0/lib32-recipe-sysroot/usr/include/glib-2.0 -ITOPDIR/BUILD/work/MACH-oemllib32-linux-gnueabi/lib32-ls2-helpers/1.0.0-10-r0/lib32-recipe-sysroot/usr/lib/glib-2.0/include -ITOPDIR/BUILD/work/MACH-oemllib32-linux-gnueabi/lib32-ls2-helpers/1.0.0-10-r0/git/include/public -isystem TOPDIR/BUILD/work/MACH-oemllib32-linux-gnueabi/lib32-ls2-helpers/1.0.0-10-r0/lib32-recipe-sysroot/usr/src/gtest/include -isystem TOPDIR/BUILD/work/MACH-oemllib32-linux-gnueabi/lib32-ls2-helpers/1.0.0-10-r0/lib32-recipe-sysroot/usr/src/gtest -mthumb -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/MACH-oemllib32-linux-gnueabi/lib32-ls2-helpers/1.0.0-10-r0/lib32-recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/MACH-oemllib32-linux-gnueabi/lib32-ls2-helpers/1.0.0-10-r0=/usr/src/debug/lib32-ls2-helpers/1.0.0-10-r0 -fdebug-prefix-map=TOPDIR/BUILD/work/MACH-oemllib32-linux-gnueabi/lib32-ls2-helpers/1.0.0-10-r0=/usr/src/debug/lib32-ls2-helpers/1.0.0-10-r0 -fdebug-prefix-map=TOPDIR/BUILD/work/MACH-oemllib32-linux-gnueabi/lib32-ls2-helpers/1.0.0-10-r0/lib32-recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/MACH-oemllib32-linux-gnueabi/lib32-ls2-helpers/1.0.0-10-r0/recipe-sysroot-native= -fvisibility-inlines-hidden -std=c++11 -Wall -Wextra -fno-permissive -Wno-unused-parameter -Wno-type-limits, -Wno-missing-field-initializers -Werror=return-type -Werror=reorder -Werror=uninitialized -Wl,--no-undefined -ITOPDIR/BUILD/work/MACH-oemllib32-linux-gnueabi/lib32-ls2-helpers/1.0.0-10-r0/lib32-recipe-sysroot/usr/include/glib-2.0 -ITOPDIR/BUILD/work/MACH-oemllib32-linux-gnueabi/lib32-ls2-helpers/1.0.0-10-r0/lib32-recipe-sysroot/usr/lib/glib-2.0/include -DUSE_PMLOG_DECLARATION -ITOPDIR/BUILD/work/MACH-oemllib32-linux-gnueabi/lib32-ls2-helpers/1.0.0-10-r0/lib32-recipe-sysroot/usr/include/glib-2.0 -ITOPDIR/BUILD/work/MACH-oemllib32-linux-gnueabi/lib32-ls2-helpers/1.0.0-10-r0/lib32-recipe-sysroot/usr/lib/glib-2.0/include -DNDEBUG -MD -MT test/CMakeFiles/test_jsonparser.dir/test_jsonparser.cpp.o -MF test/CMakeFiles/test_jsonparser.dir/test_jsonparser.cpp.o.d -o test/CMakeFiles/test_jsonparser.dir/test_jsonparser.cpp.o -c TOPDIR/BUILD/work/MACH-oemllib32-linux-gnueabi/lib32-ls2-helpers/1.0.0-10-r0/git/test/test_jsonparser.cpp +TOPDIR/BUILD/work/MACH-oemllib32-linux-gnueabi/lib32-ls2-helpers/1.0.0-10-r0/git/test/test_jsonparser.cpp: In member function 'virtual void TestJsonParser_JsonParserValueMapTest_Test::TestBody()': +TOPDIR/BUILD/work/MACH-oemllib32-linux-gnueabi/lib32-ls2-helpers/1.0.0-10-r0/git/test/test_jsonparser.cpp:525:47: error: variable 'std::array >, 2> INT_ARRAY' has initializer but incomplete type + 525 | std::array, 2> INT_ARRAY {{{0, "zero"}, {1234, "many"}}}; + | ^~~~~~~~~ + +--- + include/public/ls2-helpers/jsonparser.hpp | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/include/public/ls2-helpers/jsonparser.hpp b/include/public/ls2-helpers/jsonparser.hpp +index 27ab9a8..bd371d3 100644 +--- a/include/public/ls2-helpers/jsonparser.hpp ++++ b/include/public/ls2-helpers/jsonparser.hpp +@@ -16,6 +16,7 @@ + + #pragma once + ++#include + #include + #include + #include diff --git a/meta-webos/recipes-webos/ls2-helpers/ls2-helpers/0001-test_subscriptionpoint.cpp-Prevent-issues-with-new-g.patch b/meta-webos/recipes-webos/ls2-helpers/ls2-helpers/0001-test_subscriptionpoint.cpp-Prevent-issues-with-new-g.patch index 3ca46dbaf..5ff0c0252 100644 --- a/meta-webos/recipes-webos/ls2-helpers/ls2-helpers/0001-test_subscriptionpoint.cpp-Prevent-issues-with-new-g.patch +++ b/meta-webos/recipes-webos/ls2-helpers/ls2-helpers/0001-test_subscriptionpoint.cpp-Prevent-issues-with-new-g.patch @@ -19,16 +19,16 @@ on which is then operator bool() called by gtest to evaluate that assert: } which worked fine with gtest 1.7.0, but with gtest 1.8.0 it fails with; [ 73%] Building CXX object test/CMakeFiles/test_servicepoint_client.dir/test_servicepoint_client.cpp.o -cd /jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/build/test && /jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot-native/usr/bin/arm-apollo-linux-gnueabi/arm-apollo-linux-gnueabi-g++ -I/jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/git/src -I/jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/git/include/public/ls2-helpers -I/jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot/usr/include/glib-2.0 -I/jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot/usr/lib/glib-2.0/include -I/jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/git/include/public -I/jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot/usr/src/gtest/include -march=armv7ve -mthumb -mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=/jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fdebug-prefix-map=/jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0=/usr/src/debug/ls2-helpers/1.0.0-4-r0 -fdebug-prefix-map=/jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot-native= -fdebug-prefix-map=/jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot= -fvisibility-inlines-hidden -march=armv7ve -mthumb -mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=/jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot -std=c++11 -Wall -Wextra -fno-permissive -Wno-unused-parameter -Wno-type-limits, -Wno-missing-field-initializers -Werror=return-type -Werror=reorder -Werror=uninitialized -Wl,--no-undefined -I/jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot/usr/include/glib-2.0 -I/jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot/usr/lib/glib-2.0/include -DUSE_PMLOG_DECLARATION -I/jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot/usr/include/glib-2.0 -I/jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot/usr/lib/glib-2.0/include -DNDEBUG -o CMakeFiles/test_servicepoint_client.dir/test_servicepoint_client.cpp.o -c /jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/git/test/test_servicepoint_client.cpp -In file included from /jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/git/test/test_subscriptionpoint.cpp:26:0: -/jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot/usr/include/gtest/gtest.h: In instantiation of 'testing::AssertionResult::AssertionResult(const T&, typename testing::internal::EnableIf<(! testing::internal::ImplicitlyConvertible::value)>::type*) [with T = LSHelpers::JsonParseContext; typename testing::internal::EnableIf<(! testing::internal::ImplicitlyConvertible::value)>::type = void]': -/jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/git/test/test_subscriptionpoint.cpp:184:3: required from here -/jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot/usr/include/gtest/gtest.h:277:25: error: passing 'const LSHelpers::JsonParseContext' as 'this' argument discards qualifiers [-fpermissive] +cd /jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/build/test && /jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot-native/usr/bin/arm-oe-linux-gnueabi/arm-oe-linux-gnueabi-g++ -I/jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/git/src -I/jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/git/include/public/ls2-helpers -I/jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot/usr/include/glib-2.0 -I/jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot/usr/lib/glib-2.0/include -I/jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/git/include/public -I/jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot/usr/src/gtest/include -march=armv7ve -mthumb -mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=/jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fdebug-prefix-map=/jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0=/usr/src/debug/ls2-helpers/1.0.0-4-r0 -fdebug-prefix-map=/jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot-native= -fdebug-prefix-map=/jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot= -fvisibility-inlines-hidden -march=armv7ve -mthumb -mfpu=neon-vfpv4 -mfloat-abi=hard -mcpu=cortex-a7 --sysroot=/jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot -std=c++11 -Wall -Wextra -fno-permissive -Wno-unused-parameter -Wno-type-limits, -Wno-missing-field-initializers -Werror=return-type -Werror=reorder -Werror=uninitialized -Wl,--no-undefined -I/jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot/usr/include/glib-2.0 -I/jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot/usr/lib/glib-2.0/include -DUSE_PMLOG_DECLARATION -I/jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot/usr/include/glib-2.0 -I/jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot/usr/lib/glib-2.0/include -DNDEBUG -o CMakeFiles/test_servicepoint_client.dir/test_servicepoint_client.cpp.o -c /jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/git/test/test_servicepoint_client.cpp +In file included from /jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/git/test/test_subscriptionpoint.cpp:26:0: +/jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot/usr/include/gtest/gtest.h: In instantiation of 'testing::AssertionResult::AssertionResult(const T&, typename testing::internal::EnableIf<(! testing::internal::ImplicitlyConvertible::value)>::type*) [with T = LSHelpers::JsonParseContext; typename testing::internal::EnableIf<(! testing::internal::ImplicitlyConvertible::value)>::type = void]': +/jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/git/test/test_subscriptionpoint.cpp:184:3: required from here +/jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/recipe-sysroot/usr/include/gtest/gtest.h:277:25: error: passing 'const LSHelpers::JsonParseContext' as 'this' argument discards qualifiers [-fpermissive] : success_(success) {} ^ -In file included from /jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/git/include/public/ls2-helpers/ls2-helpers.hpp:18:0, - from /jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/git/test/test_subscriptionpoint.cpp:27: -/jenkins/mjansa/build-apollo-pyro-mcf/BUILD/work/raspberrypi3-apollo-linux-gnueabi/ls2-helpers/1.0.0-4-r0/git/include/public/ls2-helpers/jsonparser.hpp:468:9: note: in call to 'LSHelpers::JsonParseContext::operator bool() [with T = bool]' +In file included from /jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/git/include/public/ls2-helpers/ls2-helpers.hpp:18:0, + from /jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/git/test/test_subscriptionpoint.cpp:27: +/jenkins/mjansa/build-oe-pyro-mcf/BUILD/work/raspberrypi3-oe-linux-gnueabi/ls2-helpers/1.0.0-4-r0/git/include/public/ls2-helpers/jsonparser.hpp:468:9: note: in call to 'LSHelpers::JsonParseContext::operator bool() [with T = bool]' inline operator bool() ^~~~~~~~ From 7c290792a2c2011acbdca07f806a0b490690f5e4 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 10 May 2022 17:56:42 +0200 Subject: [PATCH 0378/2022] python3-cryptography: backport 3 changes to fix CVE-2020-36242 :Release Notes: This is only temporary until https://lists.openembedded.org/g/openembedded-devel/message/97027 is merged in dunfell. :Detailed Notes: backport the actual code change from: https://github.com/pyca/cryptography/pull/5747 without the docs and CI changes (which aren't applicable on old 2.8 version) and backport 2 older changes to make this fix applicable on 2.8. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4101] CCC: Various build fixes Change-Id: Ida324c8dcf8a738372da3ab7a3378c459ed27803 --- .../0001-chunked-update_into-5419.patch | 99 +++++++++++++++++++ ...2-chunking-didn-t-actually-work-5499.patch | 43 ++++++++ ...verflows-cause-by-integer-overflow-i.patch | 37 +++++++ .../python/python3-cryptography_2.8.bbappend | 7 ++ 4 files changed, 186 insertions(+) create mode 100644 meta-webos/recipes-devtools/python/python3-cryptography/0001-chunked-update_into-5419.patch create mode 100644 meta-webos/recipes-devtools/python/python3-cryptography/0002-chunking-didn-t-actually-work-5499.patch create mode 100644 meta-webos/recipes-devtools/python/python3-cryptography/0003-correct-buffer-overflows-cause-by-integer-overflow-i.patch create mode 100644 meta-webos/recipes-devtools/python/python3-cryptography_2.8.bbappend diff --git a/meta-webos/recipes-devtools/python/python3-cryptography/0001-chunked-update_into-5419.patch b/meta-webos/recipes-devtools/python/python3-cryptography/0001-chunked-update_into-5419.patch new file mode 100644 index 000000000..c5d7ca386 --- /dev/null +++ b/meta-webos/recipes-devtools/python/python3-cryptography/0001-chunked-update_into-5419.patch @@ -0,0 +1,99 @@ +From 7dee5927eb528f7ddebd62fbab31232d505acc22 Mon Sep 17 00:00:00 2001 +From: Paul Kehrer +Date: Sun, 23 Aug 2020 23:41:33 -0500 +Subject: [PATCH] chunked update_into (#5419) + +* chunked update_into + +* all pointer arithmetic all the time + +* review feedback + +Upstream-Status: Backport [https://github.com/pyca/cryptography/commit/f90ba1808ee9bd9a13c5673b776484644f29d7ba] + +Signed-off-by: Martin Jansa +--- + .../hazmat/backends/openssl/ciphers.py | 31 +++++++++++++------ + tests/hazmat/primitives/test_ciphers.py | 17 ++++++++++ + 2 files changed, 38 insertions(+), 10 deletions(-) + +diff --git a/src/cryptography/hazmat/backends/openssl/ciphers.py b/src/cryptography/hazmat/backends/openssl/ciphers.py +index 94b48f52..86bc94b3 100644 +--- a/src/cryptography/hazmat/backends/openssl/ciphers.py ++++ b/src/cryptography/hazmat/backends/openssl/ciphers.py +@@ -17,6 +17,7 @@ from cryptography.hazmat.primitives.ciphers import modes + class _CipherContext(object): + _ENCRYPT = 1 + _DECRYPT = 0 ++ _MAX_CHUNK_SIZE = 2 ** 31 + + def __init__(self, backend, cipher, mode, operation): + self._backend = backend +@@ -125,22 +126,32 @@ class _CipherContext(object): + return bytes(buf[:n]) + + def update_into(self, data, buf): +- if len(buf) < (len(data) + self._block_size_bytes - 1): ++ total_data_len = len(data) ++ if len(buf) < (total_data_len + self._block_size_bytes - 1): + raise ValueError( + "buffer must be at least {} bytes for this " + "payload".format(len(data) + self._block_size_bytes - 1) + ) + +- buf = self._backend._ffi.cast( +- "unsigned char *", self._backend._ffi.from_buffer(buf) +- ) ++ data_processed = 0 ++ total_out = 0 + outlen = self._backend._ffi.new("int *") +- res = self._backend._lib.EVP_CipherUpdate( +- self._ctx, buf, outlen, +- self._backend._ffi.from_buffer(data), len(data) +- ) +- self._backend.openssl_assert(res != 0) +- return outlen[0] ++ baseoutbuf = self._backend._ffi.from_buffer(buf) ++ baseinbuf = self._backend._ffi.from_buffer(data) ++ ++ while data_processed != total_data_len: ++ outbuf = baseoutbuf + total_out ++ inbuf = baseinbuf + data_processed ++ inlen = min(self._MAX_CHUNK_SIZE, total_data_len - data_processed) ++ ++ res = self._backend._lib.EVP_CipherUpdate( ++ self._ctx, outbuf, outlen, inbuf, inlen ++ ) ++ self._backend.openssl_assert(res != 0) ++ data_processed += inlen ++ total_out += outlen[0] ++ ++ return total_out + + def finalize(self): + # OpenSSL 1.0.1 on Ubuntu 12.04 (and possibly other distributions) +diff --git a/tests/hazmat/primitives/test_ciphers.py b/tests/hazmat/primitives/test_ciphers.py +index f29ba9a9..b88610e7 100644 +--- a/tests/hazmat/primitives/test_ciphers.py ++++ b/tests/hazmat/primitives/test_ciphers.py +@@ -309,3 +309,20 @@ class TestCipherUpdateInto(object): + buf = bytearray(5) + with pytest.raises(ValueError): + encryptor.update_into(b"testing", buf) ++ ++ def test_update_into_auto_chunking(self, backend, monkeypatch): ++ key = b"\x00" * 16 ++ c = ciphers.Cipher(AES(key), modes.ECB(), backend) ++ encryptor = c.encryptor() ++ # Lower max chunk size so we can test chunking ++ monkeypatch.setattr(encryptor._ctx, "_MAX_CHUNK_SIZE", 40) ++ buf = bytearray(527) ++ pt = b"abcdefghijklmnopqrstuvwxyz012345" * 16 # 512 bytes ++ processed = encryptor.update_into(pt, buf) ++ assert processed == 512 ++ decryptor = c.decryptor() ++ # Change max chunk size to verify alternate boundaries don't matter ++ monkeypatch.setattr(decryptor._ctx, "_MAX_CHUNK_SIZE", 73) ++ decbuf = bytearray(527) ++ decprocessed = decryptor.update_into(buf[:processed], decbuf) ++ assert decbuf[:decprocessed] == pt diff --git a/meta-webos/recipes-devtools/python/python3-cryptography/0002-chunking-didn-t-actually-work-5499.patch b/meta-webos/recipes-devtools/python/python3-cryptography/0002-chunking-didn-t-actually-work-5499.patch new file mode 100644 index 000000000..f28f41419 --- /dev/null +++ b/meta-webos/recipes-devtools/python/python3-cryptography/0002-chunking-didn-t-actually-work-5499.patch @@ -0,0 +1,43 @@ +From 7c72190620c3ccaeeab53fdd93547ca4d37b2f6b Mon Sep 17 00:00:00 2001 +From: Paul Kehrer +Date: Sun, 25 Oct 2020 06:15:18 -0700 +Subject: [PATCH] chunking didn't actually work (#5499) + +Upstream-Status: Backport [https://github.com/pyca/cryptography/commit/836a92a28fbe9df8c37121e340b91ed9cd519ddd] + +Signed-off-by: Martin Jansa +--- + src/cryptography/hazmat/backends/openssl/ciphers.py | 2 +- + tests/hazmat/primitives/test_ciphers.py | 9 +++++++++ + 2 files changed, 10 insertions(+), 1 deletion(-) + +diff --git a/src/cryptography/hazmat/backends/openssl/ciphers.py b/src/cryptography/hazmat/backends/openssl/ciphers.py +index 86bc94b3..2b7da80c 100644 +--- a/src/cryptography/hazmat/backends/openssl/ciphers.py ++++ b/src/cryptography/hazmat/backends/openssl/ciphers.py +@@ -17,7 +17,7 @@ from cryptography.hazmat.primitives.ciphers import modes + class _CipherContext(object): + _ENCRYPT = 1 + _DECRYPT = 0 +- _MAX_CHUNK_SIZE = 2 ** 31 ++ _MAX_CHUNK_SIZE = 2 ** 31 - 1 + + def __init__(self, backend, cipher, mode, operation): + self._backend = backend +diff --git a/tests/hazmat/primitives/test_ciphers.py b/tests/hazmat/primitives/test_ciphers.py +index b88610e7..fd9048b7 100644 +--- a/tests/hazmat/primitives/test_ciphers.py ++++ b/tests/hazmat/primitives/test_ciphers.py +@@ -326,3 +326,12 @@ class TestCipherUpdateInto(object): + decbuf = bytearray(527) + decprocessed = decryptor.update_into(buf[:processed], decbuf) + assert decbuf[:decprocessed] == pt ++ ++ def test_max_chunk_size_fits_in_int32(self, backend): ++ # max chunk must fit in signed int32 or else a call large enough to ++ # cause chunking will result in the very OverflowError we want to ++ # avoid with chunking. ++ key = b"\x00" * 16 ++ c = ciphers.Cipher(AES(key), modes.ECB(), backend) ++ encryptor = c.encryptor() ++ backend._ffi.new("int *", encryptor._ctx._MAX_CHUNK_SIZE) diff --git a/meta-webos/recipes-devtools/python/python3-cryptography/0003-correct-buffer-overflows-cause-by-integer-overflow-i.patch b/meta-webos/recipes-devtools/python/python3-cryptography/0003-correct-buffer-overflows-cause-by-integer-overflow-i.patch new file mode 100644 index 000000000..449dd692e --- /dev/null +++ b/meta-webos/recipes-devtools/python/python3-cryptography/0003-correct-buffer-overflows-cause-by-integer-overflow-i.patch @@ -0,0 +1,37 @@ +From 6d0a76521abe287f5ddb5cd1cfbc799d35f08cf9 Mon Sep 17 00:00:00 2001 +From: Alex Gaynor +Date: Sun, 7 Feb 2021 11:36:56 -0500 +Subject: [PATCH] correct buffer overflows cause by integer overflow in openssl + (#5747) + +* correct buffer overflows cause by integer overflow in openssl + +frustratingly, there is no test for this -- that's because testing this +requires allocating more memory than is available in CI. + +fixes #5615. + +* backport CI fixes + +* another CI backport + +Upstream-Status: Backport [https://github.com/pyca/cryptography/commit/82b6ce28389f0a317bc55ba2091a74b346db7cae] + +Signed-off-by: Martin Jansa +--- + src/cryptography/hazmat/backends/openssl/ciphers.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/cryptography/hazmat/backends/openssl/ciphers.py b/src/cryptography/hazmat/backends/openssl/ciphers.py +index 2b7da80c..7ef5f1ea 100644 +--- a/src/cryptography/hazmat/backends/openssl/ciphers.py ++++ b/src/cryptography/hazmat/backends/openssl/ciphers.py +@@ -17,7 +17,7 @@ from cryptography.hazmat.primitives.ciphers import modes + class _CipherContext(object): + _ENCRYPT = 1 + _DECRYPT = 0 +- _MAX_CHUNK_SIZE = 2 ** 31 - 1 ++ _MAX_CHUNK_SIZE = 2 ** 30 - 1 + + def __init__(self, backend, cipher, mode, operation): + self._backend = backend diff --git a/meta-webos/recipes-devtools/python/python3-cryptography_2.8.bbappend b/meta-webos/recipes-devtools/python/python3-cryptography_2.8.bbappend new file mode 100644 index 000000000..03ae774c0 --- /dev/null +++ b/meta-webos/recipes-devtools/python/python3-cryptography_2.8.bbappend @@ -0,0 +1,7 @@ +# From https://lists.openembedded.org/g/openembedded-devel/message/97027 +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" +SRC_URI += " \ + file://0001-chunked-update_into-5419.patch \ + file://0002-chunking-didn-t-actually-work-5499.patch \ + file://0003-correct-buffer-overflows-cause-by-integer-overflow-i.patch \ +" From dfbddba8c32d8c01e1edcdc1f4bf0ef4f0944a3b Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 10 May 2022 10:39:14 +0000 Subject: [PATCH 0379/2022] webos.inc: Update SANITY_TESTED_DISTROS for Ubuntu 22.04 Jammy Jellyfish :Release Notes: The old version works ok with new Ubuntu releases, no changes were needed, so just add the new version and codename to *_sane variables. :Detailed Notes: Last 2 changes needed upstream to make it compatible with 22.04 were: boost: fix native build with glibc-2.34: https://git.openembedded.org/openembedded-core/commit/?h=dunfell&id=64ba0d40a4c77a23778c51511f2d167e2056eea3 and for uninative to work with latest libstdc++6 (which is now built from gcc-12 instead of gcc-11 and causes: sysroots-uninative/x86_64-linux/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.30' not found): uninative: Upgrade to 3.6 with gcc 12 support: https://git.openembedded.org/openembedded-core/commit/?h=dunfell&id=7c0345ab1058a7e29d37f110923ecd368e102ed7 TLDR: Some more details about libstdc++6 from #yocto 2022-03-28 (mostly for myself to remember details and to eventually implement that libstdc version check in uninative.bbclass): 08:38 < JaMa> FYI: latest ubuntu-22.04 Jammy seems to break couple -native builds, possibly because libc built with --with-default-link=no since glibc_2.35-0ubuntu3 http://changelogs.ubuntu.com/changelogs/pool/main/g/glibc/glibc_2.35-0ubuntu3/changelog 08:39 < JaMa> e.g. icu-native, cmake-native are failing to build now with dunfell as well as latest kirkstone 15:14 < JaMa> should uninative be compatible with a host distro which has newer libstdc++ than uninative build? it already checks for glibc version, but not gcc and right now in devel ubuntu jammy where libstdc++6 defaults to 12-20220319-1ubuntu1 from gcc-12 it causes errors like: 15:14 < JaMa> | bin/cmake: /OE/lge/build/webosose/kirkstone/BUILD/sysroots-uninative/x86_64-linux/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by bin/cmake) 15:14 < JaMa> | ../bin/icupkg: /OE/lge/build/webosose/kirkstone/BUILD/sysroots-uninative/x86_64-linux/usr/lib/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by ../lib/libicuuc.so.70) 15:15 < JaMa> because it mixes libstdc++ from host when building bootstrap cmake or icupkg and then sysroots-uninative/x86_64-linux/usr/lib/libstdc++.so.6 when trying to run them (with dunfell as well as kirkstone) 15:17 < RP> JaMa: no, newer on the host will not work 15:19 < JaMa> should uninative.bbclass try to check that like it does for glibc? 15:21 < RP> JaMa: yes 15:21 < RP> JaMa: I'm sure I've meant to do that before :/ 15:21 < JaMa> it might be more tricky than ldd --version output used now for libc https://git.openembedded.org/openembedded-core/tree/meta/classes/uninative.bbclass#n89 but still showing better error message would be nice 15:21 < JaMa> ok will have a look 15:23 < JaMa> RP: and it's not possible to force building against sysroots-uninative/x86_64-linux/usr/lib/libstdc++.so.6 ? instead of host's? 15:24 < RP> JaMa: basically, mno 15:24 < JaMa> ok 15:24 < RP> JaMa: we always build against the host, then relink against uninative. This only works if uninative is equal or newer 15:25 < RP> you might think we could link against uninative but I tried and it isn't possible 15:25 < RP> it would only be possible if unitnative included the compiler 15:30 < JaMa> interesting, I've also noticed https://git.openembedded.org/openembedded-core/commit/meta/classes/uninative.bbclass?id=d36f41e5658bbbb6080ee833027879c119edf3e0 but unfortunately host_gcc_version wouldn't be very useful in this case, because gcc still defaults to 11 only libstdc++ now defaults to gcc-12 15:31 < JaMa> it might be only temporary, but still checking the version in hosts libstdc++ might be more reliable than gcc --version 15:32 < JaMa> will try to find something portable as objdump /full-path-to-libstc won't work on different distros 15:32 < RP> JaMa: if we can find a decent way to to it, agreed For a while I was using docker image which kept libstdc++6 on older version built from gcc-11, but I had to pin quite a few packages and also had to start my Dockerfile from old jammy snapshot, because the older versions of these packages already disappeared from ubuntu package feed, so it was easier to keep them old instead of trying to downgrade them in newer image, but you need to have all the gcc packages you need already installed in the docker image (as additional packages cannot be fetched with this pinned version anymore, luckily I had such image from 2022-04-07) Complete pin for my older image from 2022-04-07: RUN /bin/echo -e "Package: cpp-11 g++-11 g++-11-multilib gcc-11 gcc-11-base:amd64 gcc-11-multilib lib32asan6 lib32atomic1 lib32gcc-11-dev lib32gcc-s1 lib32gomp1 lib32itm1 lib32quadmath0 lib32stdc++-11-dev lib32stdc++6 lib32ubsan1 libasan6:amd64 libatomic1:amd64 libcc1-0:amd64 libgcc-11-dev:amd64 libgcc-s1:amd64 libgomp1:amd64 libitm1:amd64 liblsan0:amd64 libquadmath0:amd64 libstdc++-11-dev:amd64 libstdc++6:amd64 libtsan0:amd64 libubsan1:amd64 libx32asan6 libx32atomic1 libx32gcc-11-dev libx32gcc-s1 libx32gomp1 libx32itm1 libx32quadmath0 libx32stdc++-11-dev libx32stdc++6 libx32ubsan1\nPin: version 11.2.0-16ubuntu1\nPin-Priority: 999" > /etc/apt/preferences.d/libstdc :Testing Performed: Only build tested. :QA Notes: :Issues Addressed: [WRO-4101] CCC: Various build fixes Change-Id: Ide599f65f024750f28bb148d6e09b4316663f258 --- meta-webos/conf/distro/include/webos.inc | 1 + 1 file changed, 1 insertion(+) diff --git a/meta-webos/conf/distro/include/webos.inc b/meta-webos/conf/distro/include/webos.inc index 1f3fec058..087e84542 100644 --- a/meta-webos/conf/distro/include/webos.inc +++ b/meta-webos/conf/distro/include/webos.inc @@ -374,6 +374,7 @@ INHERIT += "uninative" SANITY_TESTED_DISTROS ?= " \ ubuntu-18.04 \n \ ubuntu-20.04 \n \ + ubuntu-22.04 \n \ " INHERIT += "reproducible_build_simple" From 122a9abe6f44b2a588566ef1967565665ca91dd3 Mon Sep 17 00:00:00 2001 From: Kyungjik Min Date: Mon, 16 May 2022 16:40:06 +0900 Subject: [PATCH 0380/2022] p8platform=webos1 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit :Release Notes: :Detailed Notes: To avoid below errors when populate_sdk Collected errors: * Solver encountered 1 problem(s): * Problem 1/1: * - nothing provides p8platform = 2.1.0.1-r0 needed by p8platform-dev-2.1.0.1-r0.raspberrypi4_64 :Testing Performed: :QA Notes: N/A :Issues Addressed: [WRO-4886] Fix build error for populate_sdk of OSE [WEBOSCI-42] NDK build fails: The metadata is not deterministic and this needs to be fixed Change-Id: If51d31cb52891eaafb76980432316ed50a8e4799 --- .../recipes-extended/p8platform/p8platform_%.bbappend | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 meta-webos/recipes-extended/p8platform/p8platform_%.bbappend diff --git a/meta-webos/recipes-extended/p8platform/p8platform_%.bbappend b/meta-webos/recipes-extended/p8platform/p8platform_%.bbappend new file mode 100644 index 000000000..5f63f97c3 --- /dev/null +++ b/meta-webos/recipes-extended/p8platform/p8platform_%.bbappend @@ -0,0 +1,10 @@ +# Copyright (c) 2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +# To avoid below errors when populate_sdk +# Collected errors: +# * Solver encountered 1 problem(s): +# * Problem 1/1: +# * - nothing provides p8platform = 2.1.0.1-r0 needed by p8platform-dev-2.1.0.1-r0.raspberrypi4_64 +RDEPENDS:${PN}-dev = "" From d4c884b4e7511ff039f0e06a5a744beccb2129f7 Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Wed, 18 May 2022 18:31:23 +0900 Subject: [PATCH 0381/2022] luna-surfacemanager=374 :Release Notes: Fix video rect incorrect :Detailed Notes: luna-surfacemanager: submissions/373..submissions/374 1b076a3 Fix video display rect :Testing Performed: See the CCC Jira ticket :QA Notes: N/A :Issues Addressed: [WRO-4867] CCC: luna-surfacemanager=374 Change-Id: I66776142c2298bdb069299b49cf4a07091ddc5fb --- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index c348ded68..f4fe8ac71 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0 qtwayland-webos" -WEBOS_VERSION = "2.0.0-373_e775a5bac7c84f194d160ef560ac249727db4f5e" +WEBOS_VERSION = "2.0.0-374_0ad11a50a04912b4e88d2b064307ba8e3a5b475d" PR = "r54" inherit webos_qmake6 From 30fb0b27615c5fad66487a0041a0d1ed3014d029 Mon Sep 17 00:00:00 2001 From: JeongBong Seo Date: Thu, 19 May 2022 13:49:08 +0900 Subject: [PATCH 0382/2022] docker-simple-webserver=r2,v0.1.1 python3-docker-compose=v1.25.4 :Release Notes: Fix the docker-compose runtime issues after dunfell upgrade :Detailed Notes: docker-simple-webserver: v0.1.0..v0.1.1 Move registry setting into a script file python3-docker-compose=v1.21.2..v1.25.4 Remove override file and preferred version :Testing Performed: See the CCC ticket :QA Notes: :Issues Addressed: [WRO-4905] CCC: docker-simple-webserver=r2,v0.1.1 python3-docker-compose=v1.25.4 [WRO-4904] Change-Id: Ice23aac9fe6ab58b89c15626606da4d8efb6499b --- meta-webos-virtualization/conf/layer.conf | 2 - .../docker-simple-webserver.bb | 18 ++++---- .../docker-simple-webserver_0.1.0.tar.bz2 | Bin 1080 -> 0 bytes .../docker-simple-webserver_0.1.1.tar.bz2 | Bin 0 -> 1287 bytes ...upport-newer-minor-version-of-reques.patch | 43 ------------------ .../python3-docker-compose_1.21.2.bb | 32 ------------- 6 files changed, 9 insertions(+), 86 deletions(-) delete mode 100644 meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver/docker-simple-webserver_0.1.0.tar.bz2 create mode 100644 meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver/docker-simple-webserver_0.1.1.tar.bz2 delete mode 100644 meta-webos-virtualization/recipes-upstreamable/docker-compose/files/0001-docker-compose-support-newer-minor-version-of-reques.patch delete mode 100644 meta-webos-virtualization/recipes-upstreamable/docker-compose/python3-docker-compose_1.21.2.bb diff --git a/meta-webos-virtualization/conf/layer.conf b/meta-webos-virtualization/conf/layer.conf index 8ed80969d..576e77655 100644 --- a/meta-webos-virtualization/conf/layer.conf +++ b/meta-webos-virtualization/conf/layer.conf @@ -16,5 +16,3 @@ LAYERDEPENDS_meta-webos-virtualization = "\ virtualization-layer \ meta-webos \ " - -PREFERRED_VERSION_python3-docker-compose ?= "1.21.2" diff --git a/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver.bb b/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver.bb index d3a2a3057..044321d73 100644 --- a/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver.bb +++ b/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver.bb @@ -6,27 +6,27 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7ca inherit systemd webos_filesystem_paths -PV = "0.1.0" -PR = "r1" +PV = "0.1.1" +PR = "r2" SRC_URI = "file://docker-simple-webserver_${PV}.tar.bz2" -SRC_URI[md5sum] = "7b24cf1e091a13933b82effa635d418a" -SRC_URI[sha256sum] = "274032c6a3c854cc3d9412ec73b05ffc28527e31b57e4fed685f2c36f57974d5" +SRC_URI[md5sum] = "77751dcfeb4ac270d94c9ff4ff02f2aa" +SRC_URI[sha256sum] = "c0d05406d9e5a7e7b3fcc76b0a3a2808b3a9a35ba49b273b5ba3ed81ecb42a6c" S = "${WORKDIR}/docker-simple-webserver" do_install() { - # install systemd service file + # install systemd service files install -d ${D}${sysconfdir}/systemd/system + install -d ${D}${sysconfdir}/systemd/system/docker.service.d + install -d ${D}${sysconfdir}/systemd/system/scripts install -m 644 ${S}/docker-simple-webserver.service ${D}${sysconfdir}/systemd/system + install -m 644 ${S}/docker.service.d/override.conf ${D}${sysconfdir}/systemd/system/docker.service.d + install -m 755 ${S}/allow_docker_dev_server.sh ${D}${sysconfdir}/systemd/system/scripts # don't start service automatically sed -i '/\[Install\]/,+2d' ${D}${sysconfdir}/systemd/system/docker-simple-webserver.service - # install docker daemon file to access webosdev.lge.com regisgry - install -d ${D}${webos_mountablestoragedir}/docker - install -m 644 ${S}/daemon.json ${D}${webos_mountablestoragedir}/docker - # copy docker-compose file and related files install -d ${D}${datadir} cp -rv ${S}/docker-simple-webserver ${D}${datadir} diff --git a/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver/docker-simple-webserver_0.1.0.tar.bz2 b/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver/docker-simple-webserver_0.1.0.tar.bz2 deleted file mode 100644 index 971d46e8baf7446078d1732f7490524856f1e986..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1080 zcmV-81jqYAT4*^jL0KkKS&9dB3jhLD|CHX4076>l|KC6D-|Bz=|LOq%03d(}Py^oP z<%L&6N;$(wO*GWNrj3MX$UxI0LrpZ%pfm=CPf%nAlStD_f2p95ew1i>o~DL?&>8>$ z0MG&I2@(V&Kqf?+N2G?-JrMMsgf!D9lSlyd2dSXpp_5GwGBh;E$TBiCG6NGvO#o!b z#4wUcO{wBfM8pjYYH6ShhSW3~8USbj4^LFP&YZ)>XEjo~VuR2m;lR*|2#_lhJ(R?O z63`_qhW+?jd<7+h=F;T3BOrzV$srl~d3%3dwe98pB@5ys4*@637fbK?F`u(1h6!=0 zOIRAfDw9D%E3jEvL9Aq~1l>6!0-ARvJUuYww6IL17?aj;{)&gAO6xD?6Y+@SM!^N; zh?xyCM9Yd|2MCnw|8b@VE@>Bmidm0UBGipgQs;5xR%t>Wv)Iaw6f0k)z${Q9UAkHY zw!?c#|2#)Y;@P`Iw-jM%y!Sz z)CD)cv4UP^#%r7;B>vN*e^xc|emsCI8acqmN2w=^qE~wB4%BhL{k zYP;K>Ne8zvfY0aUq^D?8X&p~g)ow^B5Nixvf$)ivkD|^pd}AF>MAJKZSQvOAGD%+E zAsEB*IF@-4NFmmM5LBE^OTS*|BXp=;Xzt-C*!*5|bSRwLrHNiic@0u-I8779uIS{ zVzgl*BPl@?6kWSZStD&Y0c!LP4Hd5Z;DM>otsgpYUw} diff --git a/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver/docker-simple-webserver_0.1.1.tar.bz2 b/meta-webos-virtualization/recipes-example/docker-simple-webserver/docker-simple-webserver/docker-simple-webserver_0.1.1.tar.bz2 new file mode 100644 index 0000000000000000000000000000000000000000..932289cc1fe8147e29d12015a444d242f7705ba0 GIT binary patch literal 1287 zcmV+i1^D_xT4*^jL0KkKS(I2?A0RnpW|KC6D-|GMW|LOn$zyJUOfCx|o z-d5|l7k1zjR;7fZ2$-kpYK@a5_KhZ|wL@go8%+Xwnh#LTBNGz{(?OypL8RK7B%Y_K zrkVg627qYD00000ik>E#Mod5e00000007X_Km(d$GBRnCKr$LK88QF>21c101`x;+ zBus!r$*GBxOwyVfX_GY!)Bt37hyXHrPf`xE&*wpa zyK0T78$mFlD_X^pwvoD0S4q2U3z|8g7PyG02%}Im@#C@7y%yt-6M8yc;ksPL)mkN3>4s@`MwQt2Hijj*4}gQ zxh&u1x7TtoOHeXbIs=NA8^OUK`uIihI}~deXqq}=Aqqm-A;5v>of)bIo+Bg)frOj> z@w3ik*Of0>r2|OWqEI4O%o=Bz7M_V+ECC7Ess-dBhBN!|V-ND83s?4>ov24?T9ADWjPEp%Kdk8V?dq+3o{!Uz5}1P+fd(W=r3Adlm}DTV zehBJ|P*ysvBp{beA8D@)3Ce*KaezQW9WWgF*)jwtLHm=WyN#X$n)5d~bzgGrRth7Vx`>P6YD#Z*)s zERZ2G293e)wV#Y^h9D9w#}k7q>Qa4!L`iC+8SxnE5EjDJl3_m?9|HO6Y@bGH+u*G2 zLAlbQN&0QX(d!Ugep+UPdbAh}|2&x`LUvmU#wF7A%}}@i)LY;p4szNB^np;*8VY(n z-FGX`SqJcBv|gd3v$8Mt_qrOGW-!Ei4Edu^a75=Q^EjUDh@=qdV1f!8Xi{`mK5Gc& z5;%?9CSPoKF_dsVdoymXn$d9Mc5M7B^o5GW&z-vB8At0Rw_ zyTJkuiC=*`A8p&KgK$C9H|!(YnyfTSAPX2|ywv z6;8kmPEOZW+SOBji(H`%oI(k3nx8npCXWpux~5sj5da<=V(>UXX*r1?ECiBd3ZpUf zu8D+iXdvsN2}qhFSUja(aRNciq|IKrEUFbSkh#|@ipsx(G22-c#~E;4yc}pZ&d_cN x7oJ!HZjMA)Y|F;;5HZU1AcV>677~-P2K_Rdu~{={uz;WOcO+AV2?<4ozEJtvOPc@y literal 0 HcmV?d00001 diff --git a/meta-webos-virtualization/recipes-upstreamable/docker-compose/files/0001-docker-compose-support-newer-minor-version-of-reques.patch b/meta-webos-virtualization/recipes-upstreamable/docker-compose/files/0001-docker-compose-support-newer-minor-version-of-reques.patch deleted file mode 100644 index 3263dc87d..000000000 --- a/meta-webos-virtualization/recipes-upstreamable/docker-compose/files/0001-docker-compose-support-newer-minor-version-of-reques.patch +++ /dev/null @@ -1,43 +0,0 @@ -From b4655b5e7f1e5b87a758dfd7af01a49a40ed148a Mon Sep 17 00:00:00 2001 -From: Li Zhou -Date: Thu, 10 Oct 2019 15:46:20 +0800 -Subject: [PATCH] docker-compose: support newer minor version of requests - -Signed-off-by: Ofek Lev - -Upstream-Status: Backport - -Signed-off-by: Li Zhou ---- - requirements.txt | 2 +- - setup.py | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/requirements.txt b/requirements.txt -index 93a0cce..42bde41 100644 ---- a/requirements.txt -+++ b/requirements.txt -@@ -16,7 +16,7 @@ pypiwin32==219; sys_platform == 'win32' and python_version < '3.6' - pypiwin32==220; sys_platform == 'win32' and python_version >= '3.6' - PySocks==1.6.7 - PyYAML==3.12 --requests==2.18.4 -+requests==2.19.1 - six==1.10.0 - texttable==0.9.1 - urllib3==1.21.1 -diff --git a/setup.py b/setup.py -index 422ba54..a74ee0f 100644 ---- a/setup.py -+++ b/setup.py -@@ -33,7 +33,7 @@ install_requires = [ - 'cached-property >= 1.2.0, < 2', - 'docopt >= 0.6.1, < 0.7', - 'PyYAML >= 3.10, < 4', -- 'requests >= 2.6.1, != 2.11.0, != 2.12.2, != 2.18.0, < 2.19', -+ 'requests >= 2.6.1, != 2.11.0, != 2.12.2, != 2.18.0, < 2.20', - 'texttable >= 0.9.0, < 0.10', - 'websocket-client >= 0.32.0, < 1.0', - 'docker >= 3.3.0, < 4.0', --- -1.9.1 diff --git a/meta-webos-virtualization/recipes-upstreamable/docker-compose/python3-docker-compose_1.21.2.bb b/meta-webos-virtualization/recipes-upstreamable/docker-compose/python3-docker-compose_1.21.2.bb deleted file mode 100644 index dfe313a1b..000000000 --- a/meta-webos-virtualization/recipes-upstreamable/docker-compose/python3-docker-compose_1.21.2.bb +++ /dev/null @@ -1,32 +0,0 @@ -SUMMARY = "Multi-container orchestration for Docker" -HOMEPAGE = "https://www.docker.com/" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=435b266b3899aa8a959f17d41c56def8" - -SRC_URI += "file://0001-docker-compose-support-newer-minor-version-of-reques.patch" - -inherit pypi setuptools3 - -SRC_URI[md5sum] = "a243f59b2d286c41ff6ed1c4d4b50996" -SRC_URI[sha256sum] = "68b07193755440d5f8d4f47e6f3484212afc255d5b785a81353ea1e9298c1c2c" - -RDEPENDS:${PN} = "\ - ${PYTHON_PN}-cached-property \ - ${PYTHON_PN}-certifi \ - ${PYTHON_PN}-chardet \ - ${PYTHON_PN}-colorama \ - ${PYTHON_PN}-docker \ - ${PYTHON_PN}-docker-pycreds \ - ${PYTHON_PN}-dockerpty \ - ${PYTHON_PN}-docopt \ - ${PYTHON_PN}-idna \ - ${PYTHON_PN}-jsonschema \ - ${PYTHON_PN}-pyyaml \ - ${PYTHON_PN}-requests \ - ${PYTHON_PN}-six \ - ${PYTHON_PN}-terminal \ - ${PYTHON_PN}-texttable \ - ${PYTHON_PN}-urllib3 \ - ${PYTHON_PN}-websocket-client \ - ${PYTHON_PN}-fcntl \ - " From 4649cf30c3effa9a9c17831b6ffabe062a62fd2a Mon Sep 17 00:00:00 2001 From: "venugopal.k" Date: Thu, 26 May 2022 15:45:05 +0530 Subject: [PATCH 0383/2022] ose: sam=63 :Release Notes: Add response for multiple attempts of registerApp api :Detailed Notes: Response added for multiple attempts of registerApp api sam: submissions/62..submissions/63 ce63630 Add response for multiple attempts of registerApp api :Testing Performed: Test Result updated in WRO-5535 :QA Notes: N/A :Issues Addressed: [WRO-5535] CCC: sam=63 [WRO-5050] Automation tests for QWAPI-1921 raise FAIL. Change-Id: I125ed208d13183533f8ed3c9d858f129ba953287 --- meta-webos/recipes-webos/sam/sam.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/sam/sam.bb b/meta-webos/recipes-webos/sam/sam.bb index a3905d344..21270293a 100644 --- a/meta-webos/recipes-webos/sam/sam.bb +++ b/meta-webos/recipes-webos/sam/sam.bb @@ -14,7 +14,7 @@ RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_webos-customization}" VIRTUAL-RUNTIME_webos-customization ?= "" -WEBOS_VERSION = "2.0.0-62_504be77613971f264dcc4c1c61728153445d1ad4" +WEBOS_VERSION = "2.0.0-63_6204f493184cbbceaf4cb26ab2fa2e34263dd818" PR = "r26" inherit webos_component From fe2be3eb9e58479c9c0fb7bf4a80828d58cc12ca Mon Sep 17 00:00:00 2001 From: Myungchul Kim Date: Thu, 26 May 2022 13:20:19 +0900 Subject: [PATCH 0384/2022] webos-fluentbit-plugins=31-r5 :Release Notes: Remove data collection pipeline :Detailed Notes: webos-fluentbit-plugins: submissions/30..submissions/31 d2023f2 Update input_simulator bbb58fa Fix static analysis issues 229648c Stop data collection pipeline :Testing Performed: See the CCC Jira ticket :QA Notes: N/A :Issues Addressed: [WRO-5523] CCC: webos-fluentbit-plugins=31-r5 [WRO-5465] Stop data collection pipeline for ose Change-Id: I7dc482eb30773eb2d595ba970df1cef3d42fa0b6 --- .../webos-fluentbit-plugins.bb | 5 +- .../0001-Fix-static-analysis-issues.patch | 8384 ++++++++++++++++- 2 files changed, 8340 insertions(+), 49 deletions(-) diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb index e322db07e..7fb7c2d1a 100644 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb @@ -11,8 +11,8 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "glib-2.0 luna-service2 libpbnjson fluentbit" RDEPENDS:${PN} = "nyx-utils python3-core python3-requests python3-atlassian-python-api" -WEBOS_VERSION = "1.0.0-30_9f7c98a3c6ab09c71deb4b5a491497ae6746fa9c" -PR = "r4" +WEBOS_VERSION = "1.0.0-31_17e38d808d4a0e6f6aa819f3e20dc5bd1fa9a512" +PR = "r5" inherit webos_component inherit webos_enhanced_submissions @@ -31,4 +31,3 @@ S = "${WORKDIR}/git" SRC_URI:append = " \ file://0001-Fix-static-analysis-issues.patch \ " - diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins/0001-Fix-static-analysis-issues.patch b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins/0001-Fix-static-analysis-issues.patch index a16e5be65..8408e959b 100644 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins/0001-Fix-static-analysis-issues.patch +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins/0001-Fix-static-analysis-issues.patch @@ -1,57 +1,8349 @@ -From 0acb5f0f876d6b5812aa4cf7480bf9ddb80178b6 Mon Sep 17 00:00:00 2001 +From f374c54c9e970017966ab037b2e3a260f2420685 Mon Sep 17 00:00:00 2001 From: Myungchul Kim -Date: Tue, 19 Apr 2022 14:18:40 +0900 +Date: Thu, 26 May 2022 18:03:06 +0900 Subject: [PATCH] Fix static analysis issues -:Release Notes: -Fix static analysis issues - -:Detailed Notes: -Fix static analysis issues - -:Testing Performed: -Local test : OK - -:QA Notes: -N/A - -:Issues Addressed: -N/A - -Change-Id: Ic445f1ec3490ee7cf47edfa7af506865a1f776f1 +Change-Id: I98784384ad33d65a1900047eae6084ff39333c9c --- - input_simulator/Main.cpp | 7 +++++-- - 1 file changed, 5 insertions(+), 2 deletions(-) + plugins/common/util/Time.cpp | 17 +- + plugins/common/util/date.h | 8234 +++++++++++++++++++++++ + plugins/in_coredump/CoredumpHandler.cpp | 14 +- + plugins/in_coredump/CoredumpHandler.h | 4 +- + 4 files changed, 8249 insertions(+), 20 deletions(-) + create mode 100644 plugins/common/util/date.h -diff --git a/input_simulator/Main.cpp b/input_simulator/Main.cpp -index ece7274..acbbe06 100644 ---- a/input_simulator/Main.cpp -+++ b/input_simulator/Main.cpp -@@ -824,11 +824,14 @@ static int migration_mode(const char *capture_path) - ret = EXIT_FAILURE; - goto Exit; - } -+Exit: -+ if (contents != NULL) { -+ free(contents); -+ } - if (capture_file != -1 && close(capture_file) != 0) { - perror("Close close_all_files capture_file"); - ret = EXIT_FAILURE; - } --Exit: - return ret; +diff --git a/plugins/common/util/Time.cpp b/plugins/common/util/Time.cpp +index 15ba55f..b196062 100644 +--- a/plugins/common/util/Time.cpp ++++ b/plugins/common/util/Time.cpp +@@ -16,6 +16,9 @@ + + #include "Time.h" + ++#include "date.h" ++ ++#include + #include + + #include +@@ -41,18 +44,8 @@ Time::~Time() + + std::string Time::getCurrentTime(const char* format) + { +- time_t timenow; +- time(&timenow); +- +- std::string timeStr(30, '\0'); +- std::strftime(&timeStr[0], timeStr.size(), format, std::localtime(&timenow)); +- +- std::string timeString; +- for (auto it = timeStr.begin(); it != timeStr.end(); ++it) { +- if (*it != '\0') +- timeString.push_back(*it); +- } +- return timeString; ++ auto now = std::chrono::system_clock::now(); ++ return date::format(format, date::floor(now)); } -@@ -858,7 +861,7 @@ static int playback_mode(const char *capture_path) - goto exit; - } - while ((nRead = read(capture_file, &device, sizeof(device))) > 0) { -- if (device.m_handler == 0 && device.m_ev == 0 && strlen(device.m_name) == 0) -+ if (device.m_handler == 0 && device.m_ev == 0 /*&& strlen(device.m_name) == 0*/) - break; - captureDevices.push_back(device); + string Time::generateUid() +diff --git a/plugins/common/util/date.h b/plugins/common/util/date.h +new file mode 100644 +index 0000000..143bc9a +--- /dev/null ++++ b/plugins/common/util/date.h +@@ -0,0 +1,8234 @@ ++#ifndef DATE_H ++#define DATE_H ++ ++// The MIT License (MIT) ++// ++// Copyright (c) 2015, 2016, 2017 Howard Hinnant ++// Copyright (c) 2016 Adrian Colomitchi ++// Copyright (c) 2017 Florian Dang ++// Copyright (c) 2017 Paul Thompson ++// Copyright (c) 2018, 2019 Tomasz Kamiński ++// Copyright (c) 2019 Jiangang Zhuang ++// ++// Permission is hereby granted, free of charge, to any person obtaining a copy ++// of this software and associated documentation files (the "Software"), to deal ++// in the Software without restriction, including without limitation the rights ++// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell ++// copies of the Software, and to permit persons to whom the Software is ++// furnished to do so, subject to the following conditions: ++// ++// The above copyright notice and this permission notice shall be included in all ++// copies or substantial portions of the Software. ++// ++// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR ++// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, ++// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE ++// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER ++// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, ++// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE ++// SOFTWARE. ++// ++// Our apologies. When the previous paragraph was written, lowercase had not yet ++// been invented (that would involve another several millennia of evolution). ++// We did not mean to shout. ++ ++#ifndef HAS_STRING_VIEW ++# if __cplusplus >= 201703 || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) ++# define HAS_STRING_VIEW 1 ++# else ++# define HAS_STRING_VIEW 0 ++# endif ++#endif // HAS_STRING_VIEW ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#if HAS_STRING_VIEW ++# include ++#endif ++#include ++#include ++ ++#ifdef __GNUC__ ++# pragma GCC diagnostic push ++# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 7) ++# pragma GCC diagnostic ignored "-Wpedantic" ++# endif ++# if __GNUC__ < 5 ++ // GCC 4.9 Bug 61489 Wrong warning with -Wmissing-field-initializers ++# pragma GCC diagnostic ignored "-Wmissing-field-initializers" ++# endif ++#endif ++ ++#ifdef _MSC_VER ++# pragma warning(push) ++// warning C4127: conditional expression is constant ++# pragma warning(disable : 4127) ++#endif ++ ++namespace date ++{ ++ ++//---------------+ ++// Configuration | ++//---------------+ ++ ++#ifndef ONLY_C_LOCALE ++# define ONLY_C_LOCALE 0 ++#endif ++ ++#if defined(_MSC_VER) && (!defined(__clang__) || (_MSC_VER < 1910)) ++// MSVC ++# ifndef _SILENCE_CXX17_UNCAUGHT_EXCEPTION_DEPRECATION_WARNING ++# define _SILENCE_CXX17_UNCAUGHT_EXCEPTION_DEPRECATION_WARNING ++# endif ++# if _MSC_VER < 1910 ++// before VS2017 ++# define CONSTDATA const ++# define CONSTCD11 ++# define CONSTCD14 ++# define NOEXCEPT _NOEXCEPT ++# else ++// VS2017 and later ++# define CONSTDATA constexpr const ++# define CONSTCD11 constexpr ++# define CONSTCD14 constexpr ++# define NOEXCEPT noexcept ++# endif ++ ++#elif defined(__SUNPRO_CC) && __SUNPRO_CC <= 0x5150 ++// Oracle Developer Studio 12.6 and earlier ++# define CONSTDATA constexpr const ++# define CONSTCD11 constexpr ++# define CONSTCD14 ++# define NOEXCEPT noexcept ++ ++#elif __cplusplus >= 201402 ++// C++14 ++# define CONSTDATA constexpr const ++# define CONSTCD11 constexpr ++# define CONSTCD14 constexpr ++# define NOEXCEPT noexcept ++#else ++// C++11 ++# define CONSTDATA constexpr const ++# define CONSTCD11 constexpr ++# define CONSTCD14 ++# define NOEXCEPT noexcept ++#endif ++ ++#ifndef HAS_UNCAUGHT_EXCEPTIONS ++# if __cplusplus >= 201703 || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) ++# define HAS_UNCAUGHT_EXCEPTIONS 1 ++# else ++# define HAS_UNCAUGHT_EXCEPTIONS 0 ++# endif ++#endif // HAS_UNCAUGHT_EXCEPTIONS ++ ++#ifndef HAS_VOID_T ++# if __cplusplus >= 201703 || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) ++# define HAS_VOID_T 1 ++# else ++# define HAS_VOID_T 0 ++# endif ++#endif // HAS_VOID_T ++ ++// Protect from Oracle sun macro ++#ifdef sun ++# undef sun ++#endif ++ ++// Work around for a NVCC compiler bug which causes it to fail ++// to compile std::ratio_{multiply,divide} when used directly ++// in the std::chrono::duration template instantiations below ++namespace detail { ++template ++using ratio_multiply = decltype(std::ratio_multiply{}); ++ ++template ++using ratio_divide = decltype(std::ratio_divide{}); ++} // namespace detail ++ ++//-----------+ ++// Interface | ++//-----------+ ++ ++// durations ++ ++using days = std::chrono::duration ++ , std::chrono::hours::period>>; ++ ++using weeks = std::chrono::duration ++ , days::period>>; ++ ++using years = std::chrono::duration ++ , days::period>>; ++ ++using months = std::chrono::duration ++ >>; ++ ++// time_point ++ ++template ++ using sys_time = std::chrono::time_point; ++ ++using sys_days = sys_time; ++using sys_seconds = sys_time; ++ ++struct local_t {}; ++ ++template ++ using local_time = std::chrono::time_point; ++ ++using local_seconds = local_time; ++using local_days = local_time; ++ ++// types ++ ++struct last_spec ++{ ++ explicit last_spec() = default; ++}; ++ ++class day; ++class month; ++class year; ++ ++class weekday; ++class weekday_indexed; ++class weekday_last; ++ ++class month_day; ++class month_day_last; ++class month_weekday; ++class month_weekday_last; ++ ++class year_month; ++ ++class year_month_day; ++class year_month_day_last; ++class year_month_weekday; ++class year_month_weekday_last; ++ ++// date composition operators ++ ++CONSTCD11 year_month operator/(const year& y, const month& m) NOEXCEPT; ++CONSTCD11 year_month operator/(const year& y, int m) NOEXCEPT; ++ ++CONSTCD11 month_day operator/(const day& d, const month& m) NOEXCEPT; ++CONSTCD11 month_day operator/(const day& d, int m) NOEXCEPT; ++CONSTCD11 month_day operator/(const month& m, const day& d) NOEXCEPT; ++CONSTCD11 month_day operator/(const month& m, int d) NOEXCEPT; ++CONSTCD11 month_day operator/(int m, const day& d) NOEXCEPT; ++ ++CONSTCD11 month_day_last operator/(const month& m, last_spec) NOEXCEPT; ++CONSTCD11 month_day_last operator/(int m, last_spec) NOEXCEPT; ++CONSTCD11 month_day_last operator/(last_spec, const month& m) NOEXCEPT; ++CONSTCD11 month_day_last operator/(last_spec, int m) NOEXCEPT; ++ ++CONSTCD11 month_weekday operator/(const month& m, const weekday_indexed& wdi) NOEXCEPT; ++CONSTCD11 month_weekday operator/(int m, const weekday_indexed& wdi) NOEXCEPT; ++CONSTCD11 month_weekday operator/(const weekday_indexed& wdi, const month& m) NOEXCEPT; ++CONSTCD11 month_weekday operator/(const weekday_indexed& wdi, int m) NOEXCEPT; ++ ++CONSTCD11 month_weekday_last operator/(const month& m, const weekday_last& wdl) NOEXCEPT; ++CONSTCD11 month_weekday_last operator/(int m, const weekday_last& wdl) NOEXCEPT; ++CONSTCD11 month_weekday_last operator/(const weekday_last& wdl, const month& m) NOEXCEPT; ++CONSTCD11 month_weekday_last operator/(const weekday_last& wdl, int m) NOEXCEPT; ++ ++CONSTCD11 year_month_day operator/(const year_month& ym, const day& d) NOEXCEPT; ++CONSTCD11 year_month_day operator/(const year_month& ym, int d) NOEXCEPT; ++CONSTCD11 year_month_day operator/(const year& y, const month_day& md) NOEXCEPT; ++CONSTCD11 year_month_day operator/(int y, const month_day& md) NOEXCEPT; ++CONSTCD11 year_month_day operator/(const month_day& md, const year& y) NOEXCEPT; ++CONSTCD11 year_month_day operator/(const month_day& md, int y) NOEXCEPT; ++ ++CONSTCD11 ++ year_month_day_last operator/(const year_month& ym, last_spec) NOEXCEPT; ++CONSTCD11 ++ year_month_day_last operator/(const year& y, const month_day_last& mdl) NOEXCEPT; ++CONSTCD11 ++ year_month_day_last operator/(int y, const month_day_last& mdl) NOEXCEPT; ++CONSTCD11 ++ year_month_day_last operator/(const month_day_last& mdl, const year& y) NOEXCEPT; ++CONSTCD11 ++ year_month_day_last operator/(const month_day_last& mdl, int y) NOEXCEPT; ++ ++CONSTCD11 ++year_month_weekday ++operator/(const year_month& ym, const weekday_indexed& wdi) NOEXCEPT; ++ ++CONSTCD11 ++year_month_weekday ++operator/(const year& y, const month_weekday& mwd) NOEXCEPT; ++ ++CONSTCD11 ++year_month_weekday ++operator/(int y, const month_weekday& mwd) NOEXCEPT; ++ ++CONSTCD11 ++year_month_weekday ++operator/(const month_weekday& mwd, const year& y) NOEXCEPT; ++ ++CONSTCD11 ++year_month_weekday ++operator/(const month_weekday& mwd, int y) NOEXCEPT; ++ ++CONSTCD11 ++year_month_weekday_last ++operator/(const year_month& ym, const weekday_last& wdl) NOEXCEPT; ++ ++CONSTCD11 ++year_month_weekday_last ++operator/(const year& y, const month_weekday_last& mwdl) NOEXCEPT; ++ ++CONSTCD11 ++year_month_weekday_last ++operator/(int y, const month_weekday_last& mwdl) NOEXCEPT; ++ ++CONSTCD11 ++year_month_weekday_last ++operator/(const month_weekday_last& mwdl, const year& y) NOEXCEPT; ++ ++CONSTCD11 ++year_month_weekday_last ++operator/(const month_weekday_last& mwdl, int y) NOEXCEPT; ++ ++// Detailed interface ++ ++// day ++ ++class day ++{ ++ unsigned char d_; ++ ++public: ++ day() = default; ++ explicit CONSTCD11 day(unsigned d) NOEXCEPT; ++ ++ CONSTCD14 day& operator++() NOEXCEPT; ++ CONSTCD14 day operator++(int) NOEXCEPT; ++ CONSTCD14 day& operator--() NOEXCEPT; ++ CONSTCD14 day operator--(int) NOEXCEPT; ++ ++ CONSTCD14 day& operator+=(const days& d) NOEXCEPT; ++ CONSTCD14 day& operator-=(const days& d) NOEXCEPT; ++ ++ CONSTCD11 explicit operator unsigned() const NOEXCEPT; ++ CONSTCD11 bool ok() const NOEXCEPT; ++}; ++ ++CONSTCD11 bool operator==(const day& x, const day& y) NOEXCEPT; ++CONSTCD11 bool operator!=(const day& x, const day& y) NOEXCEPT; ++CONSTCD11 bool operator< (const day& x, const day& y) NOEXCEPT; ++CONSTCD11 bool operator> (const day& x, const day& y) NOEXCEPT; ++CONSTCD11 bool operator<=(const day& x, const day& y) NOEXCEPT; ++CONSTCD11 bool operator>=(const day& x, const day& y) NOEXCEPT; ++ ++CONSTCD11 day operator+(const day& x, const days& y) NOEXCEPT; ++CONSTCD11 day operator+(const days& x, const day& y) NOEXCEPT; ++CONSTCD11 day operator-(const day& x, const days& y) NOEXCEPT; ++CONSTCD11 days operator-(const day& x, const day& y) NOEXCEPT; ++ ++template ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const day& d); ++ ++// month ++ ++class month ++{ ++ unsigned char m_; ++ ++public: ++ month() = default; ++ explicit CONSTCD11 month(unsigned m) NOEXCEPT; ++ ++ CONSTCD14 month& operator++() NOEXCEPT; ++ CONSTCD14 month operator++(int) NOEXCEPT; ++ CONSTCD14 month& operator--() NOEXCEPT; ++ CONSTCD14 month operator--(int) NOEXCEPT; ++ ++ CONSTCD14 month& operator+=(const months& m) NOEXCEPT; ++ CONSTCD14 month& operator-=(const months& m) NOEXCEPT; ++ ++ CONSTCD11 explicit operator unsigned() const NOEXCEPT; ++ CONSTCD11 bool ok() const NOEXCEPT; ++}; ++ ++CONSTCD11 bool operator==(const month& x, const month& y) NOEXCEPT; ++CONSTCD11 bool operator!=(const month& x, const month& y) NOEXCEPT; ++CONSTCD11 bool operator< (const month& x, const month& y) NOEXCEPT; ++CONSTCD11 bool operator> (const month& x, const month& y) NOEXCEPT; ++CONSTCD11 bool operator<=(const month& x, const month& y) NOEXCEPT; ++CONSTCD11 bool operator>=(const month& x, const month& y) NOEXCEPT; ++ ++CONSTCD14 month operator+(const month& x, const months& y) NOEXCEPT; ++CONSTCD14 month operator+(const months& x, const month& y) NOEXCEPT; ++CONSTCD14 month operator-(const month& x, const months& y) NOEXCEPT; ++CONSTCD14 months operator-(const month& x, const month& y) NOEXCEPT; ++ ++template ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const month& m); ++ ++// year ++ ++class year ++{ ++ short y_; ++ ++public: ++ year() = default; ++ explicit CONSTCD11 year(int y) NOEXCEPT; ++ ++ CONSTCD14 year& operator++() NOEXCEPT; ++ CONSTCD14 year operator++(int) NOEXCEPT; ++ CONSTCD14 year& operator--() NOEXCEPT; ++ CONSTCD14 year operator--(int) NOEXCEPT; ++ ++ CONSTCD14 year& operator+=(const years& y) NOEXCEPT; ++ CONSTCD14 year& operator-=(const years& y) NOEXCEPT; ++ ++ CONSTCD11 year operator-() const NOEXCEPT; ++ CONSTCD11 year operator+() const NOEXCEPT; ++ ++ CONSTCD11 bool is_leap() const NOEXCEPT; ++ ++ CONSTCD11 explicit operator int() const NOEXCEPT; ++ CONSTCD11 bool ok() const NOEXCEPT; ++ ++ static CONSTCD11 year min() NOEXCEPT { return year{-32767}; } ++ static CONSTCD11 year max() NOEXCEPT { return year{32767}; } ++}; ++ ++CONSTCD11 bool operator==(const year& x, const year& y) NOEXCEPT; ++CONSTCD11 bool operator!=(const year& x, const year& y) NOEXCEPT; ++CONSTCD11 bool operator< (const year& x, const year& y) NOEXCEPT; ++CONSTCD11 bool operator> (const year& x, const year& y) NOEXCEPT; ++CONSTCD11 bool operator<=(const year& x, const year& y) NOEXCEPT; ++CONSTCD11 bool operator>=(const year& x, const year& y) NOEXCEPT; ++ ++CONSTCD11 year operator+(const year& x, const years& y) NOEXCEPT; ++CONSTCD11 year operator+(const years& x, const year& y) NOEXCEPT; ++CONSTCD11 year operator-(const year& x, const years& y) NOEXCEPT; ++CONSTCD11 years operator-(const year& x, const year& y) NOEXCEPT; ++ ++template ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const year& y); ++ ++// weekday ++ ++class weekday ++{ ++ unsigned char wd_; ++public: ++ weekday() = default; ++ explicit CONSTCD11 weekday(unsigned wd) NOEXCEPT; ++ CONSTCD14 weekday(const sys_days& dp) NOEXCEPT; ++ CONSTCD14 explicit weekday(const local_days& dp) NOEXCEPT; ++ ++ CONSTCD14 weekday& operator++() NOEXCEPT; ++ CONSTCD14 weekday operator++(int) NOEXCEPT; ++ CONSTCD14 weekday& operator--() NOEXCEPT; ++ CONSTCD14 weekday operator--(int) NOEXCEPT; ++ ++ CONSTCD14 weekday& operator+=(const days& d) NOEXCEPT; ++ CONSTCD14 weekday& operator-=(const days& d) NOEXCEPT; ++ ++ CONSTCD11 bool ok() const NOEXCEPT; ++ ++ CONSTCD11 unsigned c_encoding() const NOEXCEPT; ++ CONSTCD11 unsigned iso_encoding() const NOEXCEPT; ++ ++ CONSTCD11 weekday_indexed operator[](unsigned index) const NOEXCEPT; ++ CONSTCD11 weekday_last operator[](last_spec) const NOEXCEPT; ++ ++private: ++ static CONSTCD14 unsigned char weekday_from_days(int z) NOEXCEPT; ++ ++ friend CONSTCD11 bool operator==(const weekday& x, const weekday& y) NOEXCEPT; ++ friend CONSTCD14 days operator-(const weekday& x, const weekday& y) NOEXCEPT; ++ friend CONSTCD14 weekday operator+(const weekday& x, const days& y) NOEXCEPT; ++ template ++ friend std::basic_ostream& ++ operator<<(std::basic_ostream& os, const weekday& wd); ++ friend class weekday_indexed; ++}; ++ ++CONSTCD11 bool operator==(const weekday& x, const weekday& y) NOEXCEPT; ++CONSTCD11 bool operator!=(const weekday& x, const weekday& y) NOEXCEPT; ++ ++CONSTCD14 weekday operator+(const weekday& x, const days& y) NOEXCEPT; ++CONSTCD14 weekday operator+(const days& x, const weekday& y) NOEXCEPT; ++CONSTCD14 weekday operator-(const weekday& x, const days& y) NOEXCEPT; ++CONSTCD14 days operator-(const weekday& x, const weekday& y) NOEXCEPT; ++ ++template ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const weekday& wd); ++ ++// weekday_indexed ++ ++class weekday_indexed ++{ ++ unsigned char wd_ : 4; ++ unsigned char index_ : 4; ++ ++public: ++ weekday_indexed() = default; ++ CONSTCD11 weekday_indexed(const date::weekday& wd, unsigned index) NOEXCEPT; ++ ++ CONSTCD11 date::weekday weekday() const NOEXCEPT; ++ CONSTCD11 unsigned index() const NOEXCEPT; ++ CONSTCD11 bool ok() const NOEXCEPT; ++}; ++ ++CONSTCD11 bool operator==(const weekday_indexed& x, const weekday_indexed& y) NOEXCEPT; ++CONSTCD11 bool operator!=(const weekday_indexed& x, const weekday_indexed& y) NOEXCEPT; ++ ++template ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const weekday_indexed& wdi); ++ ++// weekday_last ++ ++class weekday_last ++{ ++ date::weekday wd_; ++ ++public: ++ explicit CONSTCD11 weekday_last(const date::weekday& wd) NOEXCEPT; ++ ++ CONSTCD11 date::weekday weekday() const NOEXCEPT; ++ CONSTCD11 bool ok() const NOEXCEPT; ++}; ++ ++CONSTCD11 bool operator==(const weekday_last& x, const weekday_last& y) NOEXCEPT; ++CONSTCD11 bool operator!=(const weekday_last& x, const weekday_last& y) NOEXCEPT; ++ ++template ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const weekday_last& wdl); ++ ++namespace detail ++{ ++ ++struct unspecified_month_disambiguator {}; ++ ++} // namespace detail ++ ++// year_month ++ ++class year_month ++{ ++ date::year y_; ++ date::month m_; ++ ++public: ++ year_month() = default; ++ CONSTCD11 year_month(const date::year& y, const date::month& m) NOEXCEPT; ++ ++ CONSTCD11 date::year year() const NOEXCEPT; ++ CONSTCD11 date::month month() const NOEXCEPT; ++ ++ template ++ CONSTCD14 year_month& operator+=(const months& dm) NOEXCEPT; ++ template ++ CONSTCD14 year_month& operator-=(const months& dm) NOEXCEPT; ++ CONSTCD14 year_month& operator+=(const years& dy) NOEXCEPT; ++ CONSTCD14 year_month& operator-=(const years& dy) NOEXCEPT; ++ ++ CONSTCD11 bool ok() const NOEXCEPT; ++}; ++ ++CONSTCD11 bool operator==(const year_month& x, const year_month& y) NOEXCEPT; ++CONSTCD11 bool operator!=(const year_month& x, const year_month& y) NOEXCEPT; ++CONSTCD11 bool operator< (const year_month& x, const year_month& y) NOEXCEPT; ++CONSTCD11 bool operator> (const year_month& x, const year_month& y) NOEXCEPT; ++CONSTCD11 bool operator<=(const year_month& x, const year_month& y) NOEXCEPT; ++CONSTCD11 bool operator>=(const year_month& x, const year_month& y) NOEXCEPT; ++ ++template ++CONSTCD14 year_month operator+(const year_month& ym, const months& dm) NOEXCEPT; ++template ++CONSTCD14 year_month operator+(const months& dm, const year_month& ym) NOEXCEPT; ++template ++CONSTCD14 year_month operator-(const year_month& ym, const months& dm) NOEXCEPT; ++ ++CONSTCD11 months operator-(const year_month& x, const year_month& y) NOEXCEPT; ++CONSTCD11 year_month operator+(const year_month& ym, const years& dy) NOEXCEPT; ++CONSTCD11 year_month operator+(const years& dy, const year_month& ym) NOEXCEPT; ++CONSTCD11 year_month operator-(const year_month& ym, const years& dy) NOEXCEPT; ++ ++template ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const year_month& ym); ++ ++// month_day ++ ++class month_day ++{ ++ date::month m_; ++ date::day d_; ++ ++public: ++ month_day() = default; ++ CONSTCD11 month_day(const date::month& m, const date::day& d) NOEXCEPT; ++ ++ CONSTCD11 date::month month() const NOEXCEPT; ++ CONSTCD11 date::day day() const NOEXCEPT; ++ ++ CONSTCD14 bool ok() const NOEXCEPT; ++}; ++ ++CONSTCD11 bool operator==(const month_day& x, const month_day& y) NOEXCEPT; ++CONSTCD11 bool operator!=(const month_day& x, const month_day& y) NOEXCEPT; ++CONSTCD11 bool operator< (const month_day& x, const month_day& y) NOEXCEPT; ++CONSTCD11 bool operator> (const month_day& x, const month_day& y) NOEXCEPT; ++CONSTCD11 bool operator<=(const month_day& x, const month_day& y) NOEXCEPT; ++CONSTCD11 bool operator>=(const month_day& x, const month_day& y) NOEXCEPT; ++ ++template ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const month_day& md); ++ ++// month_day_last ++ ++class month_day_last ++{ ++ date::month m_; ++ ++public: ++ CONSTCD11 explicit month_day_last(const date::month& m) NOEXCEPT; ++ ++ CONSTCD11 date::month month() const NOEXCEPT; ++ CONSTCD11 bool ok() const NOEXCEPT; ++}; ++ ++CONSTCD11 bool operator==(const month_day_last& x, const month_day_last& y) NOEXCEPT; ++CONSTCD11 bool operator!=(const month_day_last& x, const month_day_last& y) NOEXCEPT; ++CONSTCD11 bool operator< (const month_day_last& x, const month_day_last& y) NOEXCEPT; ++CONSTCD11 bool operator> (const month_day_last& x, const month_day_last& y) NOEXCEPT; ++CONSTCD11 bool operator<=(const month_day_last& x, const month_day_last& y) NOEXCEPT; ++CONSTCD11 bool operator>=(const month_day_last& x, const month_day_last& y) NOEXCEPT; ++ ++template ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const month_day_last& mdl); ++ ++// month_weekday ++ ++class month_weekday ++{ ++ date::month m_; ++ date::weekday_indexed wdi_; ++public: ++ CONSTCD11 month_weekday(const date::month& m, ++ const date::weekday_indexed& wdi) NOEXCEPT; ++ ++ CONSTCD11 date::month month() const NOEXCEPT; ++ CONSTCD11 date::weekday_indexed weekday_indexed() const NOEXCEPT; ++ ++ CONSTCD11 bool ok() const NOEXCEPT; ++}; ++ ++CONSTCD11 bool operator==(const month_weekday& x, const month_weekday& y) NOEXCEPT; ++CONSTCD11 bool operator!=(const month_weekday& x, const month_weekday& y) NOEXCEPT; ++ ++template ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const month_weekday& mwd); ++ ++// month_weekday_last ++ ++class month_weekday_last ++{ ++ date::month m_; ++ date::weekday_last wdl_; ++ ++public: ++ CONSTCD11 month_weekday_last(const date::month& m, ++ const date::weekday_last& wd) NOEXCEPT; ++ ++ CONSTCD11 date::month month() const NOEXCEPT; ++ CONSTCD11 date::weekday_last weekday_last() const NOEXCEPT; ++ ++ CONSTCD11 bool ok() const NOEXCEPT; ++}; ++ ++CONSTCD11 ++ bool operator==(const month_weekday_last& x, const month_weekday_last& y) NOEXCEPT; ++CONSTCD11 ++ bool operator!=(const month_weekday_last& x, const month_weekday_last& y) NOEXCEPT; ++ ++template ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const month_weekday_last& mwdl); ++ ++// class year_month_day ++ ++class year_month_day ++{ ++ date::year y_; ++ date::month m_; ++ date::day d_; ++ ++public: ++ year_month_day() = default; ++ CONSTCD11 year_month_day(const date::year& y, const date::month& m, ++ const date::day& d) NOEXCEPT; ++ CONSTCD14 year_month_day(const year_month_day_last& ymdl) NOEXCEPT; ++ ++ CONSTCD14 year_month_day(sys_days dp) NOEXCEPT; ++ CONSTCD14 explicit year_month_day(local_days dp) NOEXCEPT; ++ ++ template ++ CONSTCD14 year_month_day& operator+=(const months& m) NOEXCEPT; ++ template ++ CONSTCD14 year_month_day& operator-=(const months& m) NOEXCEPT; ++ CONSTCD14 year_month_day& operator+=(const years& y) NOEXCEPT; ++ CONSTCD14 year_month_day& operator-=(const years& y) NOEXCEPT; ++ ++ CONSTCD11 date::year year() const NOEXCEPT; ++ CONSTCD11 date::month month() const NOEXCEPT; ++ CONSTCD11 date::day day() const NOEXCEPT; ++ ++ CONSTCD14 operator sys_days() const NOEXCEPT; ++ CONSTCD14 explicit operator local_days() const NOEXCEPT; ++ CONSTCD14 bool ok() const NOEXCEPT; ++ ++private: ++ static CONSTCD14 year_month_day from_days(days dp) NOEXCEPT; ++ CONSTCD14 days to_days() const NOEXCEPT; ++}; ++ ++CONSTCD11 bool operator==(const year_month_day& x, const year_month_day& y) NOEXCEPT; ++CONSTCD11 bool operator!=(const year_month_day& x, const year_month_day& y) NOEXCEPT; ++CONSTCD11 bool operator< (const year_month_day& x, const year_month_day& y) NOEXCEPT; ++CONSTCD11 bool operator> (const year_month_day& x, const year_month_day& y) NOEXCEPT; ++CONSTCD11 bool operator<=(const year_month_day& x, const year_month_day& y) NOEXCEPT; ++CONSTCD11 bool operator>=(const year_month_day& x, const year_month_day& y) NOEXCEPT; ++ ++template ++CONSTCD14 year_month_day operator+(const year_month_day& ymd, const months& dm) NOEXCEPT; ++template ++CONSTCD14 year_month_day operator+(const months& dm, const year_month_day& ymd) NOEXCEPT; ++template ++CONSTCD14 year_month_day operator-(const year_month_day& ymd, const months& dm) NOEXCEPT; ++CONSTCD11 year_month_day operator+(const year_month_day& ymd, const years& dy) NOEXCEPT; ++CONSTCD11 year_month_day operator+(const years& dy, const year_month_day& ymd) NOEXCEPT; ++CONSTCD11 year_month_day operator-(const year_month_day& ymd, const years& dy) NOEXCEPT; ++ ++template ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const year_month_day& ymd); ++ ++// year_month_day_last ++ ++class year_month_day_last ++{ ++ date::year y_; ++ date::month_day_last mdl_; ++ ++public: ++ CONSTCD11 year_month_day_last(const date::year& y, ++ const date::month_day_last& mdl) NOEXCEPT; ++ ++ template ++ CONSTCD14 year_month_day_last& operator+=(const months& m) NOEXCEPT; ++ template ++ CONSTCD14 year_month_day_last& operator-=(const months& m) NOEXCEPT; ++ CONSTCD14 year_month_day_last& operator+=(const years& y) NOEXCEPT; ++ CONSTCD14 year_month_day_last& operator-=(const years& y) NOEXCEPT; ++ ++ CONSTCD11 date::year year() const NOEXCEPT; ++ CONSTCD11 date::month month() const NOEXCEPT; ++ CONSTCD11 date::month_day_last month_day_last() const NOEXCEPT; ++ CONSTCD14 date::day day() const NOEXCEPT; ++ ++ CONSTCD14 operator sys_days() const NOEXCEPT; ++ CONSTCD14 explicit operator local_days() const NOEXCEPT; ++ CONSTCD11 bool ok() const NOEXCEPT; ++}; ++ ++CONSTCD11 ++ bool operator==(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT; ++CONSTCD11 ++ bool operator!=(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT; ++CONSTCD11 ++ bool operator< (const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT; ++CONSTCD11 ++ bool operator> (const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT; ++CONSTCD11 ++ bool operator<=(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT; ++CONSTCD11 ++ bool operator>=(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT; ++ ++template ++CONSTCD14 ++year_month_day_last ++operator+(const year_month_day_last& ymdl, const months& dm) NOEXCEPT; ++ ++template ++CONSTCD14 ++year_month_day_last ++operator+(const months& dm, const year_month_day_last& ymdl) NOEXCEPT; ++ ++CONSTCD11 ++year_month_day_last ++operator+(const year_month_day_last& ymdl, const years& dy) NOEXCEPT; ++ ++CONSTCD11 ++year_month_day_last ++operator+(const years& dy, const year_month_day_last& ymdl) NOEXCEPT; ++ ++template ++CONSTCD14 ++year_month_day_last ++operator-(const year_month_day_last& ymdl, const months& dm) NOEXCEPT; ++ ++CONSTCD11 ++year_month_day_last ++operator-(const year_month_day_last& ymdl, const years& dy) NOEXCEPT; ++ ++template ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const year_month_day_last& ymdl); ++ ++// year_month_weekday ++ ++class year_month_weekday ++{ ++ date::year y_; ++ date::month m_; ++ date::weekday_indexed wdi_; ++ ++public: ++ year_month_weekday() = default; ++ CONSTCD11 year_month_weekday(const date::year& y, const date::month& m, ++ const date::weekday_indexed& wdi) NOEXCEPT; ++ CONSTCD14 year_month_weekday(const sys_days& dp) NOEXCEPT; ++ CONSTCD14 explicit year_month_weekday(const local_days& dp) NOEXCEPT; ++ ++ template ++ CONSTCD14 year_month_weekday& operator+=(const months& m) NOEXCEPT; ++ template ++ CONSTCD14 year_month_weekday& operator-=(const months& m) NOEXCEPT; ++ CONSTCD14 year_month_weekday& operator+=(const years& y) NOEXCEPT; ++ CONSTCD14 year_month_weekday& operator-=(const years& y) NOEXCEPT; ++ ++ CONSTCD11 date::year year() const NOEXCEPT; ++ CONSTCD11 date::month month() const NOEXCEPT; ++ CONSTCD11 date::weekday weekday() const NOEXCEPT; ++ CONSTCD11 unsigned index() const NOEXCEPT; ++ CONSTCD11 date::weekday_indexed weekday_indexed() const NOEXCEPT; ++ ++ CONSTCD14 operator sys_days() const NOEXCEPT; ++ CONSTCD14 explicit operator local_days() const NOEXCEPT; ++ CONSTCD14 bool ok() const NOEXCEPT; ++ ++private: ++ static CONSTCD14 year_month_weekday from_days(days dp) NOEXCEPT; ++ CONSTCD14 days to_days() const NOEXCEPT; ++}; ++ ++CONSTCD11 ++ bool operator==(const year_month_weekday& x, const year_month_weekday& y) NOEXCEPT; ++CONSTCD11 ++ bool operator!=(const year_month_weekday& x, const year_month_weekday& y) NOEXCEPT; ++ ++template ++CONSTCD14 ++year_month_weekday ++operator+(const year_month_weekday& ymwd, const months& dm) NOEXCEPT; ++ ++template ++CONSTCD14 ++year_month_weekday ++operator+(const months& dm, const year_month_weekday& ymwd) NOEXCEPT; ++ ++CONSTCD11 ++year_month_weekday ++operator+(const year_month_weekday& ymwd, const years& dy) NOEXCEPT; ++ ++CONSTCD11 ++year_month_weekday ++operator+(const years& dy, const year_month_weekday& ymwd) NOEXCEPT; ++ ++template ++CONSTCD14 ++year_month_weekday ++operator-(const year_month_weekday& ymwd, const months& dm) NOEXCEPT; ++ ++CONSTCD11 ++year_month_weekday ++operator-(const year_month_weekday& ymwd, const years& dy) NOEXCEPT; ++ ++template ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const year_month_weekday& ymwdi); ++ ++// year_month_weekday_last ++ ++class year_month_weekday_last ++{ ++ date::year y_; ++ date::month m_; ++ date::weekday_last wdl_; ++ ++public: ++ CONSTCD11 year_month_weekday_last(const date::year& y, const date::month& m, ++ const date::weekday_last& wdl) NOEXCEPT; ++ ++ template ++ CONSTCD14 year_month_weekday_last& operator+=(const months& m) NOEXCEPT; ++ template ++ CONSTCD14 year_month_weekday_last& operator-=(const months& m) NOEXCEPT; ++ CONSTCD14 year_month_weekday_last& operator+=(const years& y) NOEXCEPT; ++ CONSTCD14 year_month_weekday_last& operator-=(const years& y) NOEXCEPT; ++ ++ CONSTCD11 date::year year() const NOEXCEPT; ++ CONSTCD11 date::month month() const NOEXCEPT; ++ CONSTCD11 date::weekday weekday() const NOEXCEPT; ++ CONSTCD11 date::weekday_last weekday_last() const NOEXCEPT; ++ ++ CONSTCD14 operator sys_days() const NOEXCEPT; ++ CONSTCD14 explicit operator local_days() const NOEXCEPT; ++ CONSTCD11 bool ok() const NOEXCEPT; ++ ++private: ++ CONSTCD14 days to_days() const NOEXCEPT; ++}; ++ ++CONSTCD11 ++bool ++operator==(const year_month_weekday_last& x, const year_month_weekday_last& y) NOEXCEPT; ++ ++CONSTCD11 ++bool ++operator!=(const year_month_weekday_last& x, const year_month_weekday_last& y) NOEXCEPT; ++ ++template ++CONSTCD14 ++year_month_weekday_last ++operator+(const year_month_weekday_last& ymwdl, const months& dm) NOEXCEPT; ++ ++template ++CONSTCD14 ++year_month_weekday_last ++operator+(const months& dm, const year_month_weekday_last& ymwdl) NOEXCEPT; ++ ++CONSTCD11 ++year_month_weekday_last ++operator+(const year_month_weekday_last& ymwdl, const years& dy) NOEXCEPT; ++ ++CONSTCD11 ++year_month_weekday_last ++operator+(const years& dy, const year_month_weekday_last& ymwdl) NOEXCEPT; ++ ++template ++CONSTCD14 ++year_month_weekday_last ++operator-(const year_month_weekday_last& ymwdl, const months& dm) NOEXCEPT; ++ ++CONSTCD11 ++year_month_weekday_last ++operator-(const year_month_weekday_last& ymwdl, const years& dy) NOEXCEPT; ++ ++template ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const year_month_weekday_last& ymwdl); ++ ++#if !defined(_MSC_VER) || (_MSC_VER >= 1900) ++inline namespace literals ++{ ++ ++CONSTCD11 date::day operator "" _d(unsigned long long d) NOEXCEPT; ++CONSTCD11 date::year operator "" _y(unsigned long long y) NOEXCEPT; ++ ++} // inline namespace literals ++#endif // !defined(_MSC_VER) || (_MSC_VER >= 1900) ++ ++// CONSTDATA date::month January{1}; ++// CONSTDATA date::month February{2}; ++// CONSTDATA date::month March{3}; ++// CONSTDATA date::month April{4}; ++// CONSTDATA date::month May{5}; ++// CONSTDATA date::month June{6}; ++// CONSTDATA date::month July{7}; ++// CONSTDATA date::month August{8}; ++// CONSTDATA date::month September{9}; ++// CONSTDATA date::month October{10}; ++// CONSTDATA date::month November{11}; ++// CONSTDATA date::month December{12}; ++// ++// CONSTDATA date::weekday Sunday{0u}; ++// CONSTDATA date::weekday Monday{1u}; ++// CONSTDATA date::weekday Tuesday{2u}; ++// CONSTDATA date::weekday Wednesday{3u}; ++// CONSTDATA date::weekday Thursday{4u}; ++// CONSTDATA date::weekday Friday{5u}; ++// CONSTDATA date::weekday Saturday{6u}; ++ ++#if HAS_VOID_T ++ ++template > ++struct is_clock ++ : std::false_type ++{}; ++ ++template ++struct is_clock> ++ : std::true_type ++{}; ++ ++template inline constexpr bool is_clock_v = is_clock::value; ++ ++#endif // HAS_VOID_T ++ ++//----------------+ ++// Implementation | ++//----------------+ ++ ++// utilities ++namespace detail { ++ ++template> ++class save_istream ++{ ++protected: ++ std::basic_ios& is_; ++ CharT fill_; ++ std::ios::fmtflags flags_; ++ std::streamsize precision_; ++ std::streamsize width_; ++ std::basic_ostream* tie_; ++ std::locale loc_; ++ ++public: ++ ~save_istream() ++ { ++ is_.fill(fill_); ++ is_.flags(flags_); ++ is_.precision(precision_); ++ is_.width(width_); ++ is_.imbue(loc_); ++ is_.tie(tie_); ++ } ++ ++ save_istream(const save_istream&) = delete; ++ save_istream& operator=(const save_istream&) = delete; ++ ++ explicit save_istream(std::basic_ios& is) ++ : is_(is) ++ , fill_(is.fill()) ++ , flags_(is.flags()) ++ , precision_(is.precision()) ++ , width_(is.width(0)) ++ , tie_(is.tie(nullptr)) ++ , loc_(is.getloc()) ++ { ++ if (tie_ != nullptr) ++ tie_->flush(); ++ } ++}; ++ ++template> ++class save_ostream ++ : private save_istream ++{ ++public: ++ ~save_ostream() ++ { ++ if ((this->flags_ & std::ios::unitbuf) && ++#if HAS_UNCAUGHT_EXCEPTIONS ++ std::uncaught_exceptions() == 0 && ++#else ++ !std::uncaught_exception() && ++#endif ++ this->is_.good()) ++ this->is_.rdbuf()->pubsync(); ++ } ++ ++ save_ostream(const save_ostream&) = delete; ++ save_ostream& operator=(const save_ostream&) = delete; ++ ++ explicit save_ostream(std::basic_ios& os) ++ : save_istream(os) ++ { ++ } ++}; ++ ++template ++struct choose_trunc_type ++{ ++ static const int digits = std::numeric_limits::digits; ++ using type = typename std::conditional ++ < ++ digits < 32, ++ std::int32_t, ++ typename std::conditional ++ < ++ digits < 64, ++ std::int64_t, ++#ifdef __SIZEOF_INT128__ ++ __int128 ++#else ++ std::int64_t ++#endif ++ >::type ++ >::type; ++}; ++ ++template ++CONSTCD11 ++inline ++typename std::enable_if ++< ++ !std::chrono::treat_as_floating_point::value, ++ T ++>::type ++trunc(T t) NOEXCEPT ++{ ++ return t; ++} ++ ++template ++CONSTCD14 ++inline ++typename std::enable_if ++< ++ std::chrono::treat_as_floating_point::value, ++ T ++>::type ++trunc(T t) NOEXCEPT ++{ ++ using std::numeric_limits; ++ using I = typename choose_trunc_type::type; ++ CONSTDATA auto digits = numeric_limits::digits; ++ static_assert(digits < numeric_limits::digits, ""); ++ CONSTDATA auto max = I{1} << (digits-1); ++ CONSTDATA auto min = -max; ++ const auto negative = t < T{0}; ++ if (min <= t && t <= max && t != 0 && t == t) ++ { ++ t = static_cast(static_cast(t)); ++ if (t == 0 && negative) ++ t = -t; ++ } ++ return t; ++} ++ ++template ++struct static_gcd ++{ ++ static const std::intmax_t value = static_gcd::value; ++}; ++ ++template ++struct static_gcd ++{ ++ static const std::intmax_t value = Xp; ++}; ++ ++template <> ++struct static_gcd<0, 0> ++{ ++ static const std::intmax_t value = 1; ++}; ++ ++template ++struct no_overflow ++{ ++private: ++ static const std::intmax_t gcd_n1_n2 = static_gcd::value; ++ static const std::intmax_t gcd_d1_d2 = static_gcd::value; ++ static const std::intmax_t n1 = R1::num / gcd_n1_n2; ++ static const std::intmax_t d1 = R1::den / gcd_d1_d2; ++ static const std::intmax_t n2 = R2::num / gcd_n1_n2; ++ static const std::intmax_t d2 = R2::den / gcd_d1_d2; ++#ifdef __cpp_constexpr ++ static const std::intmax_t max = std::numeric_limits::max(); ++#else ++ static const std::intmax_t max = LLONG_MAX; ++#endif ++ ++ template ++ struct mul // overflow == false ++ { ++ static const std::intmax_t value = Xp * Yp; ++ }; ++ ++ template ++ struct mul ++ { ++ static const std::intmax_t value = 1; ++ }; ++ ++public: ++ static const bool value = (n1 <= max / d2) && (n2 <= max / d1); ++ typedef std::ratio::value, ++ mul::value> type; ++}; ++ ++} // detail ++ ++// trunc towards zero ++template ++CONSTCD11 ++inline ++typename std::enable_if ++< ++ detail::no_overflow::value, ++ To ++>::type ++trunc(const std::chrono::duration& d) ++{ ++ return To{detail::trunc(std::chrono::duration_cast(d).count())}; ++} ++ ++template ++CONSTCD11 ++inline ++typename std::enable_if ++< ++ !detail::no_overflow::value, ++ To ++>::type ++trunc(const std::chrono::duration& d) ++{ ++ using std::chrono::duration_cast; ++ using std::chrono::duration; ++ using rep = typename std::common_type::type; ++ return To{detail::trunc(duration_cast(duration_cast>(d)).count())}; ++} ++ ++#ifndef HAS_CHRONO_ROUNDING ++# if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 190023918 || (_MSC_FULL_VER >= 190000000 && defined (__clang__))) ++# define HAS_CHRONO_ROUNDING 1 ++# elif defined(__cpp_lib_chrono) && __cplusplus > 201402 && __cpp_lib_chrono >= 201510 ++# define HAS_CHRONO_ROUNDING 1 ++# elif defined(_LIBCPP_VERSION) && __cplusplus > 201402 && _LIBCPP_VERSION >= 3800 ++# define HAS_CHRONO_ROUNDING 1 ++# else ++# define HAS_CHRONO_ROUNDING 0 ++# endif ++#endif // HAS_CHRONO_ROUNDING ++ ++#if HAS_CHRONO_ROUNDING == 0 ++ ++// round down ++template ++CONSTCD14 ++inline ++typename std::enable_if ++< ++ detail::no_overflow::value, ++ To ++>::type ++floor(const std::chrono::duration& d) ++{ ++ auto t = trunc(d); ++ if (t > d) ++ return t - To{1}; ++ return t; ++} ++ ++template ++CONSTCD14 ++inline ++typename std::enable_if ++< ++ !detail::no_overflow::value, ++ To ++>::type ++floor(const std::chrono::duration& d) ++{ ++ using rep = typename std::common_type::type; ++ return floor(floor>(d)); ++} ++ ++// round to nearest, to even on tie ++template ++CONSTCD14 ++inline ++To ++round(const std::chrono::duration& d) ++{ ++ auto t0 = floor(d); ++ auto t1 = t0 + To{1}; ++ if (t1 == To{0} && t0 < To{0}) ++ t1 = -t1; ++ auto diff0 = d - t0; ++ auto diff1 = t1 - d; ++ if (diff0 == diff1) ++ { ++ if (t0 - trunc(t0/2)*2 == To{0}) ++ return t0; ++ return t1; ++ } ++ if (diff0 < diff1) ++ return t0; ++ return t1; ++} ++ ++// round up ++template ++CONSTCD14 ++inline ++To ++ceil(const std::chrono::duration& d) ++{ ++ auto t = trunc(d); ++ if (t < d) ++ return t + To{1}; ++ return t; ++} ++ ++template ::is_signed ++ >::type> ++CONSTCD11 ++std::chrono::duration ++abs(std::chrono::duration d) ++{ ++ return d >= d.zero() ? d : -d; ++} ++ ++// round down ++template ++CONSTCD11 ++inline ++std::chrono::time_point ++floor(const std::chrono::time_point& tp) ++{ ++ using std::chrono::time_point; ++ return time_point{date::floor(tp.time_since_epoch())}; ++} ++ ++// round to nearest, to even on tie ++template ++CONSTCD11 ++inline ++std::chrono::time_point ++round(const std::chrono::time_point& tp) ++{ ++ using std::chrono::time_point; ++ return time_point{round(tp.time_since_epoch())}; ++} ++ ++// round up ++template ++CONSTCD11 ++inline ++std::chrono::time_point ++ceil(const std::chrono::time_point& tp) ++{ ++ using std::chrono::time_point; ++ return time_point{ceil(tp.time_since_epoch())}; ++} ++ ++#else // HAS_CHRONO_ROUNDING == 1 ++ ++using std::chrono::floor; ++using std::chrono::ceil; ++using std::chrono::round; ++using std::chrono::abs; ++ ++#endif // HAS_CHRONO_ROUNDING ++ ++namespace detail ++{ ++ ++template ++CONSTCD14 ++inline ++typename std::enable_if ++< ++ !std::chrono::treat_as_floating_point::value, ++ To ++>::type ++round_i(const std::chrono::duration& d) ++{ ++ return round(d); ++} ++ ++template ++CONSTCD14 ++inline ++typename std::enable_if ++< ++ std::chrono::treat_as_floating_point::value, ++ To ++>::type ++round_i(const std::chrono::duration& d) ++{ ++ return d; ++} ++ ++template ++CONSTCD11 ++inline ++std::chrono::time_point ++round_i(const std::chrono::time_point& tp) ++{ ++ using std::chrono::time_point; ++ return time_point{round_i(tp.time_since_epoch())}; ++} ++ ++} // detail ++ ++// trunc towards zero ++template ++CONSTCD11 ++inline ++std::chrono::time_point ++trunc(const std::chrono::time_point& tp) ++{ ++ using std::chrono::time_point; ++ return time_point{trunc(tp.time_since_epoch())}; ++} ++ ++// day ++ ++CONSTCD11 inline day::day(unsigned d) NOEXCEPT : d_(static_cast(d)) {} ++CONSTCD14 inline day& day::operator++() NOEXCEPT {++d_; return *this;} ++CONSTCD14 inline day day::operator++(int) NOEXCEPT {auto tmp(*this); ++(*this); return tmp;} ++CONSTCD14 inline day& day::operator--() NOEXCEPT {--d_; return *this;} ++CONSTCD14 inline day day::operator--(int) NOEXCEPT {auto tmp(*this); --(*this); return tmp;} ++CONSTCD14 inline day& day::operator+=(const days& d) NOEXCEPT {*this = *this + d; return *this;} ++CONSTCD14 inline day& day::operator-=(const days& d) NOEXCEPT {*this = *this - d; return *this;} ++CONSTCD11 inline day::operator unsigned() const NOEXCEPT {return d_;} ++CONSTCD11 inline bool day::ok() const NOEXCEPT {return 1 <= d_ && d_ <= 31;} ++ ++CONSTCD11 ++inline ++bool ++operator==(const day& x, const day& y) NOEXCEPT ++{ ++ return static_cast(x) == static_cast(y); ++} ++ ++CONSTCD11 ++inline ++bool ++operator!=(const day& x, const day& y) NOEXCEPT ++{ ++ return !(x == y); ++} ++ ++CONSTCD11 ++inline ++bool ++operator<(const day& x, const day& y) NOEXCEPT ++{ ++ return static_cast(x) < static_cast(y); ++} ++ ++CONSTCD11 ++inline ++bool ++operator>(const day& x, const day& y) NOEXCEPT ++{ ++ return y < x; ++} ++ ++CONSTCD11 ++inline ++bool ++operator<=(const day& x, const day& y) NOEXCEPT ++{ ++ return !(y < x); ++} ++ ++CONSTCD11 ++inline ++bool ++operator>=(const day& x, const day& y) NOEXCEPT ++{ ++ return !(x < y); ++} ++ ++CONSTCD11 ++inline ++days ++operator-(const day& x, const day& y) NOEXCEPT ++{ ++ return days{static_cast(static_cast(x) ++ - static_cast(y))}; ++} ++ ++CONSTCD11 ++inline ++day ++operator+(const day& x, const days& y) NOEXCEPT ++{ ++ return day{static_cast(x) + static_cast(y.count())}; ++} ++ ++CONSTCD11 ++inline ++day ++operator+(const days& x, const day& y) NOEXCEPT ++{ ++ return y + x; ++} ++ ++CONSTCD11 ++inline ++day ++operator-(const day& x, const days& y) NOEXCEPT ++{ ++ return x + -y; ++} ++ ++namespace detail ++{ ++ ++template ++std::basic_ostream& ++low_level_fmt(std::basic_ostream& os, const day& d) ++{ ++ detail::save_ostream _(os); ++ os.fill('0'); ++ os.flags(std::ios::dec | std::ios::right); ++ os.width(2); ++ os << static_cast(d); ++ return os; ++} ++ ++} // namespace detail ++ ++template ++inline ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const day& d) ++{ ++ detail::low_level_fmt(os, d); ++ if (!d.ok()) ++ os << " is not a valid day"; ++ return os; ++} ++ ++// month ++ ++CONSTCD11 inline month::month(unsigned m) NOEXCEPT : m_(static_cast(m)) {} ++CONSTCD14 inline month& month::operator++() NOEXCEPT {*this += months{1}; return *this;} ++CONSTCD14 inline month month::operator++(int) NOEXCEPT {auto tmp(*this); ++(*this); return tmp;} ++CONSTCD14 inline month& month::operator--() NOEXCEPT {*this -= months{1}; return *this;} ++CONSTCD14 inline month month::operator--(int) NOEXCEPT {auto tmp(*this); --(*this); return tmp;} ++ ++CONSTCD14 ++inline ++month& ++month::operator+=(const months& m) NOEXCEPT ++{ ++ *this = *this + m; ++ return *this; ++} ++ ++CONSTCD14 ++inline ++month& ++month::operator-=(const months& m) NOEXCEPT ++{ ++ *this = *this - m; ++ return *this; ++} ++ ++CONSTCD11 inline month::operator unsigned() const NOEXCEPT {return m_;} ++CONSTCD11 inline bool month::ok() const NOEXCEPT {return 1 <= m_ && m_ <= 12;} ++ ++CONSTCD11 ++inline ++bool ++operator==(const month& x, const month& y) NOEXCEPT ++{ ++ return static_cast(x) == static_cast(y); ++} ++ ++CONSTCD11 ++inline ++bool ++operator!=(const month& x, const month& y) NOEXCEPT ++{ ++ return !(x == y); ++} ++ ++CONSTCD11 ++inline ++bool ++operator<(const month& x, const month& y) NOEXCEPT ++{ ++ return static_cast(x) < static_cast(y); ++} ++ ++CONSTCD11 ++inline ++bool ++operator>(const month& x, const month& y) NOEXCEPT ++{ ++ return y < x; ++} ++ ++CONSTCD11 ++inline ++bool ++operator<=(const month& x, const month& y) NOEXCEPT ++{ ++ return !(y < x); ++} ++ ++CONSTCD11 ++inline ++bool ++operator>=(const month& x, const month& y) NOEXCEPT ++{ ++ return !(x < y); ++} ++ ++CONSTCD14 ++inline ++months ++operator-(const month& x, const month& y) NOEXCEPT ++{ ++ auto const d = static_cast(x) - static_cast(y); ++ return months(d <= 11 ? d : d + 12); ++} ++ ++CONSTCD14 ++inline ++month ++operator+(const month& x, const months& y) NOEXCEPT ++{ ++ auto const mu = static_cast(static_cast(x)) + y.count() - 1; ++ auto const yr = (mu >= 0 ? mu : mu-11) / 12; ++ return month{static_cast(mu - yr * 12 + 1)}; ++} ++ ++CONSTCD14 ++inline ++month ++operator+(const months& x, const month& y) NOEXCEPT ++{ ++ return y + x; ++} ++ ++CONSTCD14 ++inline ++month ++operator-(const month& x, const months& y) NOEXCEPT ++{ ++ return x + -y; ++} ++ ++namespace detail ++{ ++ ++template ++std::basic_ostream& ++low_level_fmt(std::basic_ostream& os, const month& m) ++{ ++ if (m.ok()) ++ { ++ CharT fmt[] = {'%', 'b', 0}; ++ os << format(os.getloc(), fmt, m); ++ } ++ else ++ os << static_cast(m); ++ return os; ++} ++ ++} // namespace detail ++ ++template ++inline ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const month& m) ++{ ++ detail::low_level_fmt(os, m); ++ if (!m.ok()) ++ os << " is not a valid month"; ++ return os; ++} ++ ++// year ++ ++CONSTCD11 inline year::year(int y) NOEXCEPT : y_(static_cast(y)) {} ++CONSTCD14 inline year& year::operator++() NOEXCEPT {++y_; return *this;} ++CONSTCD14 inline year year::operator++(int) NOEXCEPT {auto tmp(*this); ++(*this); return tmp;} ++CONSTCD14 inline year& year::operator--() NOEXCEPT {--y_; return *this;} ++CONSTCD14 inline year year::operator--(int) NOEXCEPT {auto tmp(*this); --(*this); return tmp;} ++CONSTCD14 inline year& year::operator+=(const years& y) NOEXCEPT {*this = *this + y; return *this;} ++CONSTCD14 inline year& year::operator-=(const years& y) NOEXCEPT {*this = *this - y; return *this;} ++CONSTCD11 inline year year::operator-() const NOEXCEPT {return year{-y_};} ++CONSTCD11 inline year year::operator+() const NOEXCEPT {return *this;} ++ ++CONSTCD11 ++inline ++bool ++year::is_leap() const NOEXCEPT ++{ ++ return y_ % 4 == 0 && (y_ % 100 != 0 || y_ % 400 == 0); ++} ++ ++CONSTCD11 inline year::operator int() const NOEXCEPT {return y_;} ++ ++CONSTCD11 ++inline ++bool ++year::ok() const NOEXCEPT ++{ ++ return y_ != std::numeric_limits::min(); ++} ++ ++CONSTCD11 ++inline ++bool ++operator==(const year& x, const year& y) NOEXCEPT ++{ ++ return static_cast(x) == static_cast(y); ++} ++ ++CONSTCD11 ++inline ++bool ++operator!=(const year& x, const year& y) NOEXCEPT ++{ ++ return !(x == y); ++} ++ ++CONSTCD11 ++inline ++bool ++operator<(const year& x, const year& y) NOEXCEPT ++{ ++ return static_cast(x) < static_cast(y); ++} ++ ++CONSTCD11 ++inline ++bool ++operator>(const year& x, const year& y) NOEXCEPT ++{ ++ return y < x; ++} ++ ++CONSTCD11 ++inline ++bool ++operator<=(const year& x, const year& y) NOEXCEPT ++{ ++ return !(y < x); ++} ++ ++CONSTCD11 ++inline ++bool ++operator>=(const year& x, const year& y) NOEXCEPT ++{ ++ return !(x < y); ++} ++ ++CONSTCD11 ++inline ++years ++operator-(const year& x, const year& y) NOEXCEPT ++{ ++ return years{static_cast(x) - static_cast(y)}; ++} ++ ++CONSTCD11 ++inline ++year ++operator+(const year& x, const years& y) NOEXCEPT ++{ ++ return year{static_cast(x) + y.count()}; ++} ++ ++CONSTCD11 ++inline ++year ++operator+(const years& x, const year& y) NOEXCEPT ++{ ++ return y + x; ++} ++ ++CONSTCD11 ++inline ++year ++operator-(const year& x, const years& y) NOEXCEPT ++{ ++ return year{static_cast(x) - y.count()}; ++} ++ ++namespace detail ++{ ++ ++template ++std::basic_ostream& ++low_level_fmt(std::basic_ostream& os, const year& y) ++{ ++ detail::save_ostream _(os); ++ os.fill('0'); ++ os.flags(std::ios::dec | std::ios::internal); ++ os.width(4 + (y < year{0})); ++ os.imbue(std::locale::classic()); ++ os << static_cast(y); ++ return os; ++} ++ ++} // namespace detail ++ ++template ++inline ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const year& y) ++{ ++ detail::low_level_fmt(os, y); ++ if (!y.ok()) ++ os << " is not a valid year"; ++ return os; ++} ++ ++// weekday ++ ++CONSTCD14 ++inline ++unsigned char ++weekday::weekday_from_days(int z) NOEXCEPT ++{ ++ auto u = static_cast(z); ++ return static_cast(z >= -4 ? (u+4) % 7 : u % 7); ++} ++ ++CONSTCD11 ++inline ++weekday::weekday(unsigned wd) NOEXCEPT ++ : wd_(static_cast(wd != 7 ? wd : 0)) ++ {} ++ ++CONSTCD14 ++inline ++weekday::weekday(const sys_days& dp) NOEXCEPT ++ : wd_(weekday_from_days(dp.time_since_epoch().count())) ++ {} ++ ++CONSTCD14 ++inline ++weekday::weekday(const local_days& dp) NOEXCEPT ++ : wd_(weekday_from_days(dp.time_since_epoch().count())) ++ {} ++ ++CONSTCD14 inline weekday& weekday::operator++() NOEXCEPT {*this += days{1}; return *this;} ++CONSTCD14 inline weekday weekday::operator++(int) NOEXCEPT {auto tmp(*this); ++(*this); return tmp;} ++CONSTCD14 inline weekday& weekday::operator--() NOEXCEPT {*this -= days{1}; return *this;} ++CONSTCD14 inline weekday weekday::operator--(int) NOEXCEPT {auto tmp(*this); --(*this); return tmp;} ++ ++CONSTCD14 ++inline ++weekday& ++weekday::operator+=(const days& d) NOEXCEPT ++{ ++ *this = *this + d; ++ return *this; ++} ++ ++CONSTCD14 ++inline ++weekday& ++weekday::operator-=(const days& d) NOEXCEPT ++{ ++ *this = *this - d; ++ return *this; ++} ++ ++CONSTCD11 inline bool weekday::ok() const NOEXCEPT {return wd_ <= 6;} ++ ++CONSTCD11 ++inline ++unsigned weekday::c_encoding() const NOEXCEPT ++{ ++ return unsigned{wd_}; ++} ++ ++CONSTCD11 ++inline ++unsigned weekday::iso_encoding() const NOEXCEPT ++{ ++ return unsigned{((wd_ == 0u) ? 7u : wd_)}; ++} ++ ++CONSTCD11 ++inline ++bool ++operator==(const weekday& x, const weekday& y) NOEXCEPT ++{ ++ return x.wd_ == y.wd_; ++} ++ ++CONSTCD11 ++inline ++bool ++operator!=(const weekday& x, const weekday& y) NOEXCEPT ++{ ++ return !(x == y); ++} ++ ++CONSTCD14 ++inline ++days ++operator-(const weekday& x, const weekday& y) NOEXCEPT ++{ ++ auto const wdu = x.wd_ - y.wd_; ++ auto const wk = (wdu >= 0 ? wdu : wdu-6) / 7; ++ return days{wdu - wk * 7}; ++} ++ ++CONSTCD14 ++inline ++weekday ++operator+(const weekday& x, const days& y) NOEXCEPT ++{ ++ auto const wdu = static_cast(static_cast(x.wd_)) + y.count(); ++ auto const wk = (wdu >= 0 ? wdu : wdu-6) / 7; ++ return weekday{static_cast(wdu - wk * 7)}; ++} ++ ++CONSTCD14 ++inline ++weekday ++operator+(const days& x, const weekday& y) NOEXCEPT ++{ ++ return y + x; ++} ++ ++CONSTCD14 ++inline ++weekday ++operator-(const weekday& x, const days& y) NOEXCEPT ++{ ++ return x + -y; ++} ++ ++namespace detail ++{ ++ ++template ++std::basic_ostream& ++low_level_fmt(std::basic_ostream& os, const weekday& wd) ++{ ++ if (wd.ok()) ++ { ++ CharT fmt[] = {'%', 'a', 0}; ++ os << format(fmt, wd); ++ } ++ else ++ os << wd.c_encoding(); ++ return os; ++} ++ ++} // namespace detail ++ ++template ++inline ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const weekday& wd) ++{ ++ detail::low_level_fmt(os, wd); ++ if (!wd.ok()) ++ os << " is not a valid weekday"; ++ return os; ++} ++ ++#if !defined(_MSC_VER) || (_MSC_VER >= 1900) ++inline namespace literals ++{ ++ ++CONSTCD11 ++inline ++date::day ++operator "" _d(unsigned long long d) NOEXCEPT ++{ ++ return date::day{static_cast(d)}; ++} ++ ++CONSTCD11 ++inline ++date::year ++operator "" _y(unsigned long long y) NOEXCEPT ++{ ++ return date::year(static_cast(y)); ++} ++#endif // !defined(_MSC_VER) || (_MSC_VER >= 1900) ++ ++CONSTDATA date::last_spec last{}; ++ ++CONSTDATA date::month jan{1}; ++CONSTDATA date::month feb{2}; ++CONSTDATA date::month mar{3}; ++CONSTDATA date::month apr{4}; ++CONSTDATA date::month may{5}; ++CONSTDATA date::month jun{6}; ++CONSTDATA date::month jul{7}; ++CONSTDATA date::month aug{8}; ++CONSTDATA date::month sep{9}; ++CONSTDATA date::month oct{10}; ++CONSTDATA date::month nov{11}; ++CONSTDATA date::month dec{12}; ++ ++CONSTDATA date::weekday sun{0u}; ++CONSTDATA date::weekday mon{1u}; ++CONSTDATA date::weekday tue{2u}; ++CONSTDATA date::weekday wed{3u}; ++CONSTDATA date::weekday thu{4u}; ++CONSTDATA date::weekday fri{5u}; ++CONSTDATA date::weekday sat{6u}; ++ ++#if !defined(_MSC_VER) || (_MSC_VER >= 1900) ++} // inline namespace literals ++#endif ++ ++CONSTDATA date::month January{1}; ++CONSTDATA date::month February{2}; ++CONSTDATA date::month March{3}; ++CONSTDATA date::month April{4}; ++CONSTDATA date::month May{5}; ++CONSTDATA date::month June{6}; ++CONSTDATA date::month July{7}; ++CONSTDATA date::month August{8}; ++CONSTDATA date::month September{9}; ++CONSTDATA date::month October{10}; ++CONSTDATA date::month November{11}; ++CONSTDATA date::month December{12}; ++ ++CONSTDATA date::weekday Monday{1}; ++CONSTDATA date::weekday Tuesday{2}; ++CONSTDATA date::weekday Wednesday{3}; ++CONSTDATA date::weekday Thursday{4}; ++CONSTDATA date::weekday Friday{5}; ++CONSTDATA date::weekday Saturday{6}; ++CONSTDATA date::weekday Sunday{7}; ++ ++// weekday_indexed ++ ++CONSTCD11 ++inline ++weekday ++weekday_indexed::weekday() const NOEXCEPT ++{ ++ return date::weekday{static_cast(wd_)}; ++} ++ ++CONSTCD11 inline unsigned weekday_indexed::index() const NOEXCEPT {return index_;} ++ ++CONSTCD11 ++inline ++bool ++weekday_indexed::ok() const NOEXCEPT ++{ ++ return weekday().ok() && 1 <= index_ && index_ <= 5; ++} ++ ++#ifdef __GNUC__ ++# pragma GCC diagnostic push ++# pragma GCC diagnostic ignored "-Wconversion" ++#endif // __GNUC__ ++ ++CONSTCD11 ++inline ++weekday_indexed::weekday_indexed(const date::weekday& wd, unsigned index) NOEXCEPT ++ : wd_(static_cast(static_cast(wd.wd_))) ++ , index_(static_cast(index)) ++ {} ++ ++#ifdef __GNUC__ ++# pragma GCC diagnostic pop ++#endif // __GNUC__ ++ ++namespace detail ++{ ++ ++template ++std::basic_ostream& ++low_level_fmt(std::basic_ostream& os, const weekday_indexed& wdi) ++{ ++ return low_level_fmt(os, wdi.weekday()) << '[' << wdi.index() << ']'; ++} ++ ++} // namespace detail ++ ++template ++inline ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const weekday_indexed& wdi) ++{ ++ detail::low_level_fmt(os, wdi); ++ if (!wdi.ok()) ++ os << " is not a valid weekday_indexed"; ++ return os; ++} ++ ++CONSTCD11 ++inline ++weekday_indexed ++weekday::operator[](unsigned index) const NOEXCEPT ++{ ++ return {*this, index}; ++} ++ ++CONSTCD11 ++inline ++bool ++operator==(const weekday_indexed& x, const weekday_indexed& y) NOEXCEPT ++{ ++ return x.weekday() == y.weekday() && x.index() == y.index(); ++} ++ ++CONSTCD11 ++inline ++bool ++operator!=(const weekday_indexed& x, const weekday_indexed& y) NOEXCEPT ++{ ++ return !(x == y); ++} ++ ++// weekday_last ++ ++CONSTCD11 inline date::weekday weekday_last::weekday() const NOEXCEPT {return wd_;} ++CONSTCD11 inline bool weekday_last::ok() const NOEXCEPT {return wd_.ok();} ++CONSTCD11 inline weekday_last::weekday_last(const date::weekday& wd) NOEXCEPT : wd_(wd) {} ++ ++CONSTCD11 ++inline ++bool ++operator==(const weekday_last& x, const weekday_last& y) NOEXCEPT ++{ ++ return x.weekday() == y.weekday(); ++} ++ ++CONSTCD11 ++inline ++bool ++operator!=(const weekday_last& x, const weekday_last& y) NOEXCEPT ++{ ++ return !(x == y); ++} ++ ++namespace detail ++{ ++ ++template ++std::basic_ostream& ++low_level_fmt(std::basic_ostream& os, const weekday_last& wdl) ++{ ++ return low_level_fmt(os, wdl.weekday()) << "[last]"; ++} ++ ++} // namespace detail ++ ++template ++inline ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const weekday_last& wdl) ++{ ++ detail::low_level_fmt(os, wdl); ++ if (!wdl.ok()) ++ os << " is not a valid weekday_last"; ++ return os; ++} ++ ++CONSTCD11 ++inline ++weekday_last ++weekday::operator[](last_spec) const NOEXCEPT ++{ ++ return weekday_last{*this}; ++} ++ ++// year_month ++ ++CONSTCD11 ++inline ++year_month::year_month(const date::year& y, const date::month& m) NOEXCEPT ++ : y_(y) ++ , m_(m) ++ {} ++ ++CONSTCD11 inline year year_month::year() const NOEXCEPT {return y_;} ++CONSTCD11 inline month year_month::month() const NOEXCEPT {return m_;} ++CONSTCD11 inline bool year_month::ok() const NOEXCEPT {return y_.ok() && m_.ok();} ++ ++template ++CONSTCD14 ++inline ++year_month& ++year_month::operator+=(const months& dm) NOEXCEPT ++{ ++ *this = *this + dm; ++ return *this; ++} ++ ++template ++CONSTCD14 ++inline ++year_month& ++year_month::operator-=(const months& dm) NOEXCEPT ++{ ++ *this = *this - dm; ++ return *this; ++} ++ ++CONSTCD14 ++inline ++year_month& ++year_month::operator+=(const years& dy) NOEXCEPT ++{ ++ *this = *this + dy; ++ return *this; ++} ++ ++CONSTCD14 ++inline ++year_month& ++year_month::operator-=(const years& dy) NOEXCEPT ++{ ++ *this = *this - dy; ++ return *this; ++} ++ ++CONSTCD11 ++inline ++bool ++operator==(const year_month& x, const year_month& y) NOEXCEPT ++{ ++ return x.year() == y.year() && x.month() == y.month(); ++} ++ ++CONSTCD11 ++inline ++bool ++operator!=(const year_month& x, const year_month& y) NOEXCEPT ++{ ++ return !(x == y); ++} ++ ++CONSTCD11 ++inline ++bool ++operator<(const year_month& x, const year_month& y) NOEXCEPT ++{ ++ return x.year() < y.year() ? true ++ : (x.year() > y.year() ? false ++ : (x.month() < y.month())); ++} ++ ++CONSTCD11 ++inline ++bool ++operator>(const year_month& x, const year_month& y) NOEXCEPT ++{ ++ return y < x; ++} ++ ++CONSTCD11 ++inline ++bool ++operator<=(const year_month& x, const year_month& y) NOEXCEPT ++{ ++ return !(y < x); ++} ++ ++CONSTCD11 ++inline ++bool ++operator>=(const year_month& x, const year_month& y) NOEXCEPT ++{ ++ return !(x < y); ++} ++ ++template ++CONSTCD14 ++inline ++year_month ++operator+(const year_month& ym, const months& dm) NOEXCEPT ++{ ++ auto dmi = static_cast(static_cast(ym.month())) - 1 + dm.count(); ++ auto dy = (dmi >= 0 ? dmi : dmi-11) / 12; ++ dmi = dmi - dy * 12 + 1; ++ return (ym.year() + years(dy)) / month(static_cast(dmi)); ++} ++ ++template ++CONSTCD14 ++inline ++year_month ++operator+(const months& dm, const year_month& ym) NOEXCEPT ++{ ++ return ym + dm; ++} ++ ++template ++CONSTCD14 ++inline ++year_month ++operator-(const year_month& ym, const months& dm) NOEXCEPT ++{ ++ return ym + -dm; ++} ++ ++CONSTCD11 ++inline ++months ++operator-(const year_month& x, const year_month& y) NOEXCEPT ++{ ++ return (x.year() - y.year()) + ++ months(static_cast(x.month()) - static_cast(y.month())); ++} ++ ++CONSTCD11 ++inline ++year_month ++operator+(const year_month& ym, const years& dy) NOEXCEPT ++{ ++ return (ym.year() + dy) / ym.month(); ++} ++ ++CONSTCD11 ++inline ++year_month ++operator+(const years& dy, const year_month& ym) NOEXCEPT ++{ ++ return ym + dy; ++} ++ ++CONSTCD11 ++inline ++year_month ++operator-(const year_month& ym, const years& dy) NOEXCEPT ++{ ++ return ym + -dy; ++} ++ ++namespace detail ++{ ++ ++template ++std::basic_ostream& ++low_level_fmt(std::basic_ostream& os, const year_month& ym) ++{ ++ low_level_fmt(os, ym.year()) << '/'; ++ return low_level_fmt(os, ym.month()); ++} ++ ++} // namespace detail ++ ++template ++inline ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const year_month& ym) ++{ ++ detail::low_level_fmt(os, ym); ++ if (!ym.ok()) ++ os << " is not a valid year_month"; ++ return os; ++} ++ ++// month_day ++ ++CONSTCD11 ++inline ++month_day::month_day(const date::month& m, const date::day& d) NOEXCEPT ++ : m_(m) ++ , d_(d) ++ {} ++ ++CONSTCD11 inline date::month month_day::month() const NOEXCEPT {return m_;} ++CONSTCD11 inline date::day month_day::day() const NOEXCEPT {return d_;} ++ ++CONSTCD14 ++inline ++bool ++month_day::ok() const NOEXCEPT ++{ ++ CONSTDATA date::day d[] = ++ { ++ date::day(31), date::day(29), date::day(31), ++ date::day(30), date::day(31), date::day(30), ++ date::day(31), date::day(31), date::day(30), ++ date::day(31), date::day(30), date::day(31) ++ }; ++ return m_.ok() && date::day{1} <= d_ && d_ <= d[static_cast(m_)-1]; ++} ++ ++CONSTCD11 ++inline ++bool ++operator==(const month_day& x, const month_day& y) NOEXCEPT ++{ ++ return x.month() == y.month() && x.day() == y.day(); ++} ++ ++CONSTCD11 ++inline ++bool ++operator!=(const month_day& x, const month_day& y) NOEXCEPT ++{ ++ return !(x == y); ++} ++ ++CONSTCD11 ++inline ++bool ++operator<(const month_day& x, const month_day& y) NOEXCEPT ++{ ++ return x.month() < y.month() ? true ++ : (x.month() > y.month() ? false ++ : (x.day() < y.day())); ++} ++ ++CONSTCD11 ++inline ++bool ++operator>(const month_day& x, const month_day& y) NOEXCEPT ++{ ++ return y < x; ++} ++ ++CONSTCD11 ++inline ++bool ++operator<=(const month_day& x, const month_day& y) NOEXCEPT ++{ ++ return !(y < x); ++} ++ ++CONSTCD11 ++inline ++bool ++operator>=(const month_day& x, const month_day& y) NOEXCEPT ++{ ++ return !(x < y); ++} ++ ++namespace detail ++{ ++ ++template ++std::basic_ostream& ++low_level_fmt(std::basic_ostream& os, const month_day& md) ++{ ++ low_level_fmt(os, md.month()) << '/'; ++ return low_level_fmt(os, md.day()); ++} ++ ++} // namespace detail ++ ++template ++inline ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const month_day& md) ++{ ++ detail::low_level_fmt(os, md); ++ if (!md.ok()) ++ os << " is not a valid month_day"; ++ return os; ++} ++ ++// month_day_last ++ ++CONSTCD11 inline month month_day_last::month() const NOEXCEPT {return m_;} ++CONSTCD11 inline bool month_day_last::ok() const NOEXCEPT {return m_.ok();} ++CONSTCD11 inline month_day_last::month_day_last(const date::month& m) NOEXCEPT : m_(m) {} ++ ++CONSTCD11 ++inline ++bool ++operator==(const month_day_last& x, const month_day_last& y) NOEXCEPT ++{ ++ return x.month() == y.month(); ++} ++ ++CONSTCD11 ++inline ++bool ++operator!=(const month_day_last& x, const month_day_last& y) NOEXCEPT ++{ ++ return !(x == y); ++} ++ ++CONSTCD11 ++inline ++bool ++operator<(const month_day_last& x, const month_day_last& y) NOEXCEPT ++{ ++ return x.month() < y.month(); ++} ++ ++CONSTCD11 ++inline ++bool ++operator>(const month_day_last& x, const month_day_last& y) NOEXCEPT ++{ ++ return y < x; ++} ++ ++CONSTCD11 ++inline ++bool ++operator<=(const month_day_last& x, const month_day_last& y) NOEXCEPT ++{ ++ return !(y < x); ++} ++ ++CONSTCD11 ++inline ++bool ++operator>=(const month_day_last& x, const month_day_last& y) NOEXCEPT ++{ ++ return !(x < y); ++} ++ ++namespace detail ++{ ++ ++template ++std::basic_ostream& ++low_level_fmt(std::basic_ostream& os, const month_day_last& mdl) ++{ ++ return low_level_fmt(os, mdl.month()) << "/last"; ++} ++ ++} // namespace detail ++ ++template ++inline ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const month_day_last& mdl) ++{ ++ detail::low_level_fmt(os, mdl); ++ if (!mdl.ok()) ++ os << " is not a valid month_day_last"; ++ return os; ++} ++ ++// month_weekday ++ ++CONSTCD11 ++inline ++month_weekday::month_weekday(const date::month& m, ++ const date::weekday_indexed& wdi) NOEXCEPT ++ : m_(m) ++ , wdi_(wdi) ++ {} ++ ++CONSTCD11 inline month month_weekday::month() const NOEXCEPT {return m_;} ++ ++CONSTCD11 ++inline ++weekday_indexed ++month_weekday::weekday_indexed() const NOEXCEPT ++{ ++ return wdi_; ++} ++ ++CONSTCD11 ++inline ++bool ++month_weekday::ok() const NOEXCEPT ++{ ++ return m_.ok() && wdi_.ok(); ++} ++ ++CONSTCD11 ++inline ++bool ++operator==(const month_weekday& x, const month_weekday& y) NOEXCEPT ++{ ++ return x.month() == y.month() && x.weekday_indexed() == y.weekday_indexed(); ++} ++ ++CONSTCD11 ++inline ++bool ++operator!=(const month_weekday& x, const month_weekday& y) NOEXCEPT ++{ ++ return !(x == y); ++} ++ ++namespace detail ++{ ++ ++template ++std::basic_ostream& ++low_level_fmt(std::basic_ostream& os, const month_weekday& mwd) ++{ ++ low_level_fmt(os, mwd.month()) << '/'; ++ return low_level_fmt(os, mwd.weekday_indexed()); ++} ++ ++} // namespace detail ++ ++template ++inline ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const month_weekday& mwd) ++{ ++ detail::low_level_fmt(os, mwd); ++ if (!mwd.ok()) ++ os << " is not a valid month_weekday"; ++ return os; ++} ++ ++// month_weekday_last ++ ++CONSTCD11 ++inline ++month_weekday_last::month_weekday_last(const date::month& m, ++ const date::weekday_last& wdl) NOEXCEPT ++ : m_(m) ++ , wdl_(wdl) ++ {} ++ ++CONSTCD11 inline month month_weekday_last::month() const NOEXCEPT {return m_;} ++ ++CONSTCD11 ++inline ++weekday_last ++month_weekday_last::weekday_last() const NOEXCEPT ++{ ++ return wdl_; ++} ++ ++CONSTCD11 ++inline ++bool ++month_weekday_last::ok() const NOEXCEPT ++{ ++ return m_.ok() && wdl_.ok(); ++} ++ ++CONSTCD11 ++inline ++bool ++operator==(const month_weekday_last& x, const month_weekday_last& y) NOEXCEPT ++{ ++ return x.month() == y.month() && x.weekday_last() == y.weekday_last(); ++} ++ ++CONSTCD11 ++inline ++bool ++operator!=(const month_weekday_last& x, const month_weekday_last& y) NOEXCEPT ++{ ++ return !(x == y); ++} ++ ++namespace detail ++{ ++ ++template ++std::basic_ostream& ++low_level_fmt(std::basic_ostream& os, const month_weekday_last& mwdl) ++{ ++ low_level_fmt(os, mwdl.month()) << '/'; ++ return low_level_fmt(os, mwdl.weekday_last()); ++} ++ ++} // namespace detail ++ ++template ++inline ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const month_weekday_last& mwdl) ++{ ++ detail::low_level_fmt(os, mwdl); ++ if (!mwdl.ok()) ++ os << " is not a valid month_weekday_last"; ++ return os; ++} ++ ++// year_month_day_last ++ ++CONSTCD11 ++inline ++year_month_day_last::year_month_day_last(const date::year& y, ++ const date::month_day_last& mdl) NOEXCEPT ++ : y_(y) ++ , mdl_(mdl) ++ {} ++ ++template ++CONSTCD14 ++inline ++year_month_day_last& ++year_month_day_last::operator+=(const months& m) NOEXCEPT ++{ ++ *this = *this + m; ++ return *this; ++} ++ ++template ++CONSTCD14 ++inline ++year_month_day_last& ++year_month_day_last::operator-=(const months& m) NOEXCEPT ++{ ++ *this = *this - m; ++ return *this; ++} ++ ++CONSTCD14 ++inline ++year_month_day_last& ++year_month_day_last::operator+=(const years& y) NOEXCEPT ++{ ++ *this = *this + y; ++ return *this; ++} ++ ++CONSTCD14 ++inline ++year_month_day_last& ++year_month_day_last::operator-=(const years& y) NOEXCEPT ++{ ++ *this = *this - y; ++ return *this; ++} ++ ++CONSTCD11 inline year year_month_day_last::year() const NOEXCEPT {return y_;} ++CONSTCD11 inline month year_month_day_last::month() const NOEXCEPT {return mdl_.month();} ++ ++CONSTCD11 ++inline ++month_day_last ++year_month_day_last::month_day_last() const NOEXCEPT ++{ ++ return mdl_; ++} ++ ++CONSTCD14 ++inline ++day ++year_month_day_last::day() const NOEXCEPT ++{ ++ CONSTDATA date::day d[] = ++ { ++ date::day(31), date::day(28), date::day(31), ++ date::day(30), date::day(31), date::day(30), ++ date::day(31), date::day(31), date::day(30), ++ date::day(31), date::day(30), date::day(31) ++ }; ++ return (month() != February || !y_.is_leap()) && mdl_.ok() ? ++ d[static_cast(month()) - 1] : date::day{29}; ++} ++ ++CONSTCD14 ++inline ++year_month_day_last::operator sys_days() const NOEXCEPT ++{ ++ return sys_days(year()/month()/day()); ++} ++ ++CONSTCD14 ++inline ++year_month_day_last::operator local_days() const NOEXCEPT ++{ ++ return local_days(year()/month()/day()); ++} ++ ++CONSTCD11 ++inline ++bool ++year_month_day_last::ok() const NOEXCEPT ++{ ++ return y_.ok() && mdl_.ok(); ++} ++ ++CONSTCD11 ++inline ++bool ++operator==(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT ++{ ++ return x.year() == y.year() && x.month_day_last() == y.month_day_last(); ++} ++ ++CONSTCD11 ++inline ++bool ++operator!=(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT ++{ ++ return !(x == y); ++} ++ ++CONSTCD11 ++inline ++bool ++operator<(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT ++{ ++ return x.year() < y.year() ? true ++ : (x.year() > y.year() ? false ++ : (x.month_day_last() < y.month_day_last())); ++} ++ ++CONSTCD11 ++inline ++bool ++operator>(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT ++{ ++ return y < x; ++} ++ ++CONSTCD11 ++inline ++bool ++operator<=(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT ++{ ++ return !(y < x); ++} ++ ++CONSTCD11 ++inline ++bool ++operator>=(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT ++{ ++ return !(x < y); ++} ++ ++namespace detail ++{ ++ ++template ++std::basic_ostream& ++low_level_fmt(std::basic_ostream& os, const year_month_day_last& ymdl) ++{ ++ low_level_fmt(os, ymdl.year()) << '/'; ++ return low_level_fmt(os, ymdl.month_day_last()); ++} ++ ++} // namespace detail ++ ++template ++inline ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const year_month_day_last& ymdl) ++{ ++ detail::low_level_fmt(os, ymdl); ++ if (!ymdl.ok()) ++ os << " is not a valid year_month_day_last"; ++ return os; ++} ++ ++template ++CONSTCD14 ++inline ++year_month_day_last ++operator+(const year_month_day_last& ymdl, const months& dm) NOEXCEPT ++{ ++ return (ymdl.year() / ymdl.month() + dm) / last; ++} ++ ++template ++CONSTCD14 ++inline ++year_month_day_last ++operator+(const months& dm, const year_month_day_last& ymdl) NOEXCEPT ++{ ++ return ymdl + dm; ++} ++ ++template ++CONSTCD14 ++inline ++year_month_day_last ++operator-(const year_month_day_last& ymdl, const months& dm) NOEXCEPT ++{ ++ return ymdl + (-dm); ++} ++ ++CONSTCD11 ++inline ++year_month_day_last ++operator+(const year_month_day_last& ymdl, const years& dy) NOEXCEPT ++{ ++ return {ymdl.year()+dy, ymdl.month_day_last()}; ++} ++ ++CONSTCD11 ++inline ++year_month_day_last ++operator+(const years& dy, const year_month_day_last& ymdl) NOEXCEPT ++{ ++ return ymdl + dy; ++} ++ ++CONSTCD11 ++inline ++year_month_day_last ++operator-(const year_month_day_last& ymdl, const years& dy) NOEXCEPT ++{ ++ return ymdl + (-dy); ++} ++ ++// year_month_day ++ ++CONSTCD11 ++inline ++year_month_day::year_month_day(const date::year& y, const date::month& m, ++ const date::day& d) NOEXCEPT ++ : y_(y) ++ , m_(m) ++ , d_(d) ++ {} ++ ++CONSTCD14 ++inline ++year_month_day::year_month_day(const year_month_day_last& ymdl) NOEXCEPT ++ : y_(ymdl.year()) ++ , m_(ymdl.month()) ++ , d_(ymdl.day()) ++ {} ++ ++CONSTCD14 ++inline ++year_month_day::year_month_day(sys_days dp) NOEXCEPT ++ : year_month_day(from_days(dp.time_since_epoch())) ++ {} ++ ++CONSTCD14 ++inline ++year_month_day::year_month_day(local_days dp) NOEXCEPT ++ : year_month_day(from_days(dp.time_since_epoch())) ++ {} ++ ++CONSTCD11 inline year year_month_day::year() const NOEXCEPT {return y_;} ++CONSTCD11 inline month year_month_day::month() const NOEXCEPT {return m_;} ++CONSTCD11 inline day year_month_day::day() const NOEXCEPT {return d_;} ++ ++template ++CONSTCD14 ++inline ++year_month_day& ++year_month_day::operator+=(const months& m) NOEXCEPT ++{ ++ *this = *this + m; ++ return *this; ++} ++ ++template ++CONSTCD14 ++inline ++year_month_day& ++year_month_day::operator-=(const months& m) NOEXCEPT ++{ ++ *this = *this - m; ++ return *this; ++} ++ ++CONSTCD14 ++inline ++year_month_day& ++year_month_day::operator+=(const years& y) NOEXCEPT ++{ ++ *this = *this + y; ++ return *this; ++} ++ ++CONSTCD14 ++inline ++year_month_day& ++year_month_day::operator-=(const years& y) NOEXCEPT ++{ ++ *this = *this - y; ++ return *this; ++} ++ ++CONSTCD14 ++inline ++days ++year_month_day::to_days() const NOEXCEPT ++{ ++ static_assert(std::numeric_limits::digits >= 18, ++ "This algorithm has not been ported to a 16 bit unsigned integer"); ++ static_assert(std::numeric_limits::digits >= 20, ++ "This algorithm has not been ported to a 16 bit signed integer"); ++ auto const y = static_cast(y_) - (m_ <= February); ++ auto const m = static_cast(m_); ++ auto const d = static_cast(d_); ++ auto const era = (y >= 0 ? y : y-399) / 400; ++ auto const yoe = static_cast(y - era * 400); // [0, 399] ++ auto const doy = (153*(m > 2 ? m-3 : m+9) + 2)/5 + d-1; // [0, 365] ++ auto const doe = yoe * 365 + yoe/4 - yoe/100 + doy; // [0, 146096] ++ return days{era * 146097 + static_cast(doe) - 719468}; ++} ++ ++CONSTCD14 ++inline ++year_month_day::operator sys_days() const NOEXCEPT ++{ ++ return sys_days{to_days()}; ++} ++ ++CONSTCD14 ++inline ++year_month_day::operator local_days() const NOEXCEPT ++{ ++ return local_days{to_days()}; ++} ++ ++CONSTCD14 ++inline ++bool ++year_month_day::ok() const NOEXCEPT ++{ ++ if (!(y_.ok() && m_.ok())) ++ return false; ++ return date::day{1} <= d_ && d_ <= (y_ / m_ / last).day(); ++} ++ ++CONSTCD11 ++inline ++bool ++operator==(const year_month_day& x, const year_month_day& y) NOEXCEPT ++{ ++ return x.year() == y.year() && x.month() == y.month() && x.day() == y.day(); ++} ++ ++CONSTCD11 ++inline ++bool ++operator!=(const year_month_day& x, const year_month_day& y) NOEXCEPT ++{ ++ return !(x == y); ++} ++ ++CONSTCD11 ++inline ++bool ++operator<(const year_month_day& x, const year_month_day& y) NOEXCEPT ++{ ++ return x.year() < y.year() ? true ++ : (x.year() > y.year() ? false ++ : (x.month() < y.month() ? true ++ : (x.month() > y.month() ? false ++ : (x.day() < y.day())))); ++} ++ ++CONSTCD11 ++inline ++bool ++operator>(const year_month_day& x, const year_month_day& y) NOEXCEPT ++{ ++ return y < x; ++} ++ ++CONSTCD11 ++inline ++bool ++operator<=(const year_month_day& x, const year_month_day& y) NOEXCEPT ++{ ++ return !(y < x); ++} ++ ++CONSTCD11 ++inline ++bool ++operator>=(const year_month_day& x, const year_month_day& y) NOEXCEPT ++{ ++ return !(x < y); ++} ++ ++template ++inline ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const year_month_day& ymd) ++{ ++ detail::save_ostream _(os); ++ os.fill('0'); ++ os.flags(std::ios::dec | std::ios::right); ++ os.imbue(std::locale::classic()); ++ os << static_cast(ymd.year()) << '-'; ++ os.width(2); ++ os << static_cast(ymd.month()) << '-'; ++ os.width(2); ++ os << static_cast(ymd.day()); ++ if (!ymd.ok()) ++ os << " is not a valid year_month_day"; ++ return os; ++} ++ ++CONSTCD14 ++inline ++year_month_day ++year_month_day::from_days(days dp) NOEXCEPT ++{ ++ static_assert(std::numeric_limits::digits >= 18, ++ "This algorithm has not been ported to a 16 bit unsigned integer"); ++ static_assert(std::numeric_limits::digits >= 20, ++ "This algorithm has not been ported to a 16 bit signed integer"); ++ auto const z = dp.count() + 719468; ++ auto const era = (z >= 0 ? z : z - 146096) / 146097; ++ auto const doe = static_cast(z - era * 146097); // [0, 146096] ++ auto const yoe = (doe - doe/1460 + doe/36524 - doe/146096) / 365; // [0, 399] ++ auto const y = static_cast(yoe) + era * 400; ++ auto const doy = doe - (365*yoe + yoe/4 - yoe/100); // [0, 365] ++ auto const mp = (5*doy + 2)/153; // [0, 11] ++ auto const d = doy - (153*mp+2)/5 + 1; // [1, 31] ++ auto const m = mp < 10 ? mp+3 : mp-9; // [1, 12] ++ return year_month_day{date::year{y + (m <= 2)}, date::month(m), date::day(d)}; ++} ++ ++template ++CONSTCD14 ++inline ++year_month_day ++operator+(const year_month_day& ymd, const months& dm) NOEXCEPT ++{ ++ return (ymd.year() / ymd.month() + dm) / ymd.day(); ++} ++ ++template ++CONSTCD14 ++inline ++year_month_day ++operator+(const months& dm, const year_month_day& ymd) NOEXCEPT ++{ ++ return ymd + dm; ++} ++ ++template ++CONSTCD14 ++inline ++year_month_day ++operator-(const year_month_day& ymd, const months& dm) NOEXCEPT ++{ ++ return ymd + (-dm); ++} ++ ++CONSTCD11 ++inline ++year_month_day ++operator+(const year_month_day& ymd, const years& dy) NOEXCEPT ++{ ++ return (ymd.year() + dy) / ymd.month() / ymd.day(); ++} ++ ++CONSTCD11 ++inline ++year_month_day ++operator+(const years& dy, const year_month_day& ymd) NOEXCEPT ++{ ++ return ymd + dy; ++} ++ ++CONSTCD11 ++inline ++year_month_day ++operator-(const year_month_day& ymd, const years& dy) NOEXCEPT ++{ ++ return ymd + (-dy); ++} ++ ++// year_month_weekday ++ ++CONSTCD11 ++inline ++year_month_weekday::year_month_weekday(const date::year& y, const date::month& m, ++ const date::weekday_indexed& wdi) ++ NOEXCEPT ++ : y_(y) ++ , m_(m) ++ , wdi_(wdi) ++ {} ++ ++CONSTCD14 ++inline ++year_month_weekday::year_month_weekday(const sys_days& dp) NOEXCEPT ++ : year_month_weekday(from_days(dp.time_since_epoch())) ++ {} ++ ++CONSTCD14 ++inline ++year_month_weekday::year_month_weekday(const local_days& dp) NOEXCEPT ++ : year_month_weekday(from_days(dp.time_since_epoch())) ++ {} ++ ++template ++CONSTCD14 ++inline ++year_month_weekday& ++year_month_weekday::operator+=(const months& m) NOEXCEPT ++{ ++ *this = *this + m; ++ return *this; ++} ++ ++template ++CONSTCD14 ++inline ++year_month_weekday& ++year_month_weekday::operator-=(const months& m) NOEXCEPT ++{ ++ *this = *this - m; ++ return *this; ++} ++ ++CONSTCD14 ++inline ++year_month_weekday& ++year_month_weekday::operator+=(const years& y) NOEXCEPT ++{ ++ *this = *this + y; ++ return *this; ++} ++ ++CONSTCD14 ++inline ++year_month_weekday& ++year_month_weekday::operator-=(const years& y) NOEXCEPT ++{ ++ *this = *this - y; ++ return *this; ++} ++ ++CONSTCD11 inline year year_month_weekday::year() const NOEXCEPT {return y_;} ++CONSTCD11 inline month year_month_weekday::month() const NOEXCEPT {return m_;} ++ ++CONSTCD11 ++inline ++weekday ++year_month_weekday::weekday() const NOEXCEPT ++{ ++ return wdi_.weekday(); ++} ++ ++CONSTCD11 ++inline ++unsigned ++year_month_weekday::index() const NOEXCEPT ++{ ++ return wdi_.index(); ++} ++ ++CONSTCD11 ++inline ++weekday_indexed ++year_month_weekday::weekday_indexed() const NOEXCEPT ++{ ++ return wdi_; ++} ++ ++CONSTCD14 ++inline ++year_month_weekday::operator sys_days() const NOEXCEPT ++{ ++ return sys_days{to_days()}; ++} ++ ++CONSTCD14 ++inline ++year_month_weekday::operator local_days() const NOEXCEPT ++{ ++ return local_days{to_days()}; ++} ++ ++CONSTCD14 ++inline ++bool ++year_month_weekday::ok() const NOEXCEPT ++{ ++ if (!y_.ok() || !m_.ok() || !wdi_.weekday().ok() || wdi_.index() < 1) ++ return false; ++ if (wdi_.index() <= 4) ++ return true; ++ auto d2 = wdi_.weekday() - date::weekday(static_cast(y_/m_/1)) + ++ days((wdi_.index()-1)*7 + 1); ++ return static_cast(d2.count()) <= static_cast((y_/m_/last).day()); ++} ++ ++CONSTCD14 ++inline ++year_month_weekday ++year_month_weekday::from_days(days d) NOEXCEPT ++{ ++ sys_days dp{d}; ++ auto const wd = date::weekday(dp); ++ auto const ymd = year_month_day(dp); ++ return {ymd.year(), ymd.month(), wd[(static_cast(ymd.day())-1)/7+1]}; ++} ++ ++CONSTCD14 ++inline ++days ++year_month_weekday::to_days() const NOEXCEPT ++{ ++ auto d = sys_days(y_/m_/1); ++ return (d + (wdi_.weekday() - date::weekday(d) + days{(wdi_.index()-1)*7}) ++ ).time_since_epoch(); ++} ++ ++CONSTCD11 ++inline ++bool ++operator==(const year_month_weekday& x, const year_month_weekday& y) NOEXCEPT ++{ ++ return x.year() == y.year() && x.month() == y.month() && ++ x.weekday_indexed() == y.weekday_indexed(); ++} ++ ++CONSTCD11 ++inline ++bool ++operator!=(const year_month_weekday& x, const year_month_weekday& y) NOEXCEPT ++{ ++ return !(x == y); ++} ++ ++template ++inline ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const year_month_weekday& ymwdi) ++{ ++ detail::low_level_fmt(os, ymwdi.year()) << '/'; ++ detail::low_level_fmt(os, ymwdi.month()) << '/'; ++ detail::low_level_fmt(os, ymwdi.weekday_indexed()); ++ if (!ymwdi.ok()) ++ os << " is not a valid year_month_weekday"; ++ return os; ++} ++ ++template ++CONSTCD14 ++inline ++year_month_weekday ++operator+(const year_month_weekday& ymwd, const months& dm) NOEXCEPT ++{ ++ return (ymwd.year() / ymwd.month() + dm) / ymwd.weekday_indexed(); ++} ++ ++template ++CONSTCD14 ++inline ++year_month_weekday ++operator+(const months& dm, const year_month_weekday& ymwd) NOEXCEPT ++{ ++ return ymwd + dm; ++} ++ ++template ++CONSTCD14 ++inline ++year_month_weekday ++operator-(const year_month_weekday& ymwd, const months& dm) NOEXCEPT ++{ ++ return ymwd + (-dm); ++} ++ ++CONSTCD11 ++inline ++year_month_weekday ++operator+(const year_month_weekday& ymwd, const years& dy) NOEXCEPT ++{ ++ return {ymwd.year()+dy, ymwd.month(), ymwd.weekday_indexed()}; ++} ++ ++CONSTCD11 ++inline ++year_month_weekday ++operator+(const years& dy, const year_month_weekday& ymwd) NOEXCEPT ++{ ++ return ymwd + dy; ++} ++ ++CONSTCD11 ++inline ++year_month_weekday ++operator-(const year_month_weekday& ymwd, const years& dy) NOEXCEPT ++{ ++ return ymwd + (-dy); ++} ++ ++// year_month_weekday_last ++ ++CONSTCD11 ++inline ++year_month_weekday_last::year_month_weekday_last(const date::year& y, ++ const date::month& m, ++ const date::weekday_last& wdl) NOEXCEPT ++ : y_(y) ++ , m_(m) ++ , wdl_(wdl) ++ {} ++ ++template ++CONSTCD14 ++inline ++year_month_weekday_last& ++year_month_weekday_last::operator+=(const months& m) NOEXCEPT ++{ ++ *this = *this + m; ++ return *this; ++} ++ ++template ++CONSTCD14 ++inline ++year_month_weekday_last& ++year_month_weekday_last::operator-=(const months& m) NOEXCEPT ++{ ++ *this = *this - m; ++ return *this; ++} ++ ++CONSTCD14 ++inline ++year_month_weekday_last& ++year_month_weekday_last::operator+=(const years& y) NOEXCEPT ++{ ++ *this = *this + y; ++ return *this; ++} ++ ++CONSTCD14 ++inline ++year_month_weekday_last& ++year_month_weekday_last::operator-=(const years& y) NOEXCEPT ++{ ++ *this = *this - y; ++ return *this; ++} ++ ++CONSTCD11 inline year year_month_weekday_last::year() const NOEXCEPT {return y_;} ++CONSTCD11 inline month year_month_weekday_last::month() const NOEXCEPT {return m_;} ++ ++CONSTCD11 ++inline ++weekday ++year_month_weekday_last::weekday() const NOEXCEPT ++{ ++ return wdl_.weekday(); ++} ++ ++CONSTCD11 ++inline ++weekday_last ++year_month_weekday_last::weekday_last() const NOEXCEPT ++{ ++ return wdl_; ++} ++ ++CONSTCD14 ++inline ++year_month_weekday_last::operator sys_days() const NOEXCEPT ++{ ++ return sys_days{to_days()}; ++} ++ ++CONSTCD14 ++inline ++year_month_weekday_last::operator local_days() const NOEXCEPT ++{ ++ return local_days{to_days()}; ++} ++ ++CONSTCD11 ++inline ++bool ++year_month_weekday_last::ok() const NOEXCEPT ++{ ++ return y_.ok() && m_.ok() && wdl_.ok(); ++} ++ ++CONSTCD14 ++inline ++days ++year_month_weekday_last::to_days() const NOEXCEPT ++{ ++ auto const d = sys_days(y_/m_/last); ++ return (d - (date::weekday{d} - wdl_.weekday())).time_since_epoch(); ++} ++ ++CONSTCD11 ++inline ++bool ++operator==(const year_month_weekday_last& x, const year_month_weekday_last& y) NOEXCEPT ++{ ++ return x.year() == y.year() && x.month() == y.month() && ++ x.weekday_last() == y.weekday_last(); ++} ++ ++CONSTCD11 ++inline ++bool ++operator!=(const year_month_weekday_last& x, const year_month_weekday_last& y) NOEXCEPT ++{ ++ return !(x == y); ++} ++ ++template ++inline ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const year_month_weekday_last& ymwdl) ++{ ++ detail::low_level_fmt(os, ymwdl.year()) << '/'; ++ detail::low_level_fmt(os, ymwdl.month()) << '/'; ++ detail::low_level_fmt(os, ymwdl.weekday_last()); ++ if (!ymwdl.ok()) ++ os << " is not a valid year_month_weekday_last"; ++ return os; ++} ++ ++template ++CONSTCD14 ++inline ++year_month_weekday_last ++operator+(const year_month_weekday_last& ymwdl, const months& dm) NOEXCEPT ++{ ++ return (ymwdl.year() / ymwdl.month() + dm) / ymwdl.weekday_last(); ++} ++ ++template ++CONSTCD14 ++inline ++year_month_weekday_last ++operator+(const months& dm, const year_month_weekday_last& ymwdl) NOEXCEPT ++{ ++ return ymwdl + dm; ++} ++ ++template ++CONSTCD14 ++inline ++year_month_weekday_last ++operator-(const year_month_weekday_last& ymwdl, const months& dm) NOEXCEPT ++{ ++ return ymwdl + (-dm); ++} ++ ++CONSTCD11 ++inline ++year_month_weekday_last ++operator+(const year_month_weekday_last& ymwdl, const years& dy) NOEXCEPT ++{ ++ return {ymwdl.year()+dy, ymwdl.month(), ymwdl.weekday_last()}; ++} ++ ++CONSTCD11 ++inline ++year_month_weekday_last ++operator+(const years& dy, const year_month_weekday_last& ymwdl) NOEXCEPT ++{ ++ return ymwdl + dy; ++} ++ ++CONSTCD11 ++inline ++year_month_weekday_last ++operator-(const year_month_weekday_last& ymwdl, const years& dy) NOEXCEPT ++{ ++ return ymwdl + (-dy); ++} ++ ++// year_month from operator/() ++ ++CONSTCD11 ++inline ++year_month ++operator/(const year& y, const month& m) NOEXCEPT ++{ ++ return {y, m}; ++} ++ ++CONSTCD11 ++inline ++year_month ++operator/(const year& y, int m) NOEXCEPT ++{ ++ return y / month(static_cast(m)); ++} ++ ++// month_day from operator/() ++ ++CONSTCD11 ++inline ++month_day ++operator/(const month& m, const day& d) NOEXCEPT ++{ ++ return {m, d}; ++} ++ ++CONSTCD11 ++inline ++month_day ++operator/(const day& d, const month& m) NOEXCEPT ++{ ++ return m / d; ++} ++ ++CONSTCD11 ++inline ++month_day ++operator/(const month& m, int d) NOEXCEPT ++{ ++ return m / day(static_cast(d)); ++} ++ ++CONSTCD11 ++inline ++month_day ++operator/(int m, const day& d) NOEXCEPT ++{ ++ return month(static_cast(m)) / d; ++} ++ ++CONSTCD11 inline month_day operator/(const day& d, int m) NOEXCEPT {return m / d;} ++ ++// month_day_last from operator/() ++ ++CONSTCD11 ++inline ++month_day_last ++operator/(const month& m, last_spec) NOEXCEPT ++{ ++ return month_day_last{m}; ++} ++ ++CONSTCD11 ++inline ++month_day_last ++operator/(last_spec, const month& m) NOEXCEPT ++{ ++ return m/last; ++} ++ ++CONSTCD11 ++inline ++month_day_last ++operator/(int m, last_spec) NOEXCEPT ++{ ++ return month(static_cast(m))/last; ++} ++ ++CONSTCD11 ++inline ++month_day_last ++operator/(last_spec, int m) NOEXCEPT ++{ ++ return m/last; ++} ++ ++// month_weekday from operator/() ++ ++CONSTCD11 ++inline ++month_weekday ++operator/(const month& m, const weekday_indexed& wdi) NOEXCEPT ++{ ++ return {m, wdi}; ++} ++ ++CONSTCD11 ++inline ++month_weekday ++operator/(const weekday_indexed& wdi, const month& m) NOEXCEPT ++{ ++ return m / wdi; ++} ++ ++CONSTCD11 ++inline ++month_weekday ++operator/(int m, const weekday_indexed& wdi) NOEXCEPT ++{ ++ return month(static_cast(m)) / wdi; ++} ++ ++CONSTCD11 ++inline ++month_weekday ++operator/(const weekday_indexed& wdi, int m) NOEXCEPT ++{ ++ return m / wdi; ++} ++ ++// month_weekday_last from operator/() ++ ++CONSTCD11 ++inline ++month_weekday_last ++operator/(const month& m, const weekday_last& wdl) NOEXCEPT ++{ ++ return {m, wdl}; ++} ++ ++CONSTCD11 ++inline ++month_weekday_last ++operator/(const weekday_last& wdl, const month& m) NOEXCEPT ++{ ++ return m / wdl; ++} ++ ++CONSTCD11 ++inline ++month_weekday_last ++operator/(int m, const weekday_last& wdl) NOEXCEPT ++{ ++ return month(static_cast(m)) / wdl; ++} ++ ++CONSTCD11 ++inline ++month_weekday_last ++operator/(const weekday_last& wdl, int m) NOEXCEPT ++{ ++ return m / wdl; ++} ++ ++// year_month_day from operator/() ++ ++CONSTCD11 ++inline ++year_month_day ++operator/(const year_month& ym, const day& d) NOEXCEPT ++{ ++ return {ym.year(), ym.month(), d}; ++} ++ ++CONSTCD11 ++inline ++year_month_day ++operator/(const year_month& ym, int d) NOEXCEPT ++{ ++ return ym / day(static_cast(d)); ++} ++ ++CONSTCD11 ++inline ++year_month_day ++operator/(const year& y, const month_day& md) NOEXCEPT ++{ ++ return y / md.month() / md.day(); ++} ++ ++CONSTCD11 ++inline ++year_month_day ++operator/(int y, const month_day& md) NOEXCEPT ++{ ++ return year(y) / md; ++} ++ ++CONSTCD11 ++inline ++year_month_day ++operator/(const month_day& md, const year& y) NOEXCEPT ++{ ++ return y / md; ++} ++ ++CONSTCD11 ++inline ++year_month_day ++operator/(const month_day& md, int y) NOEXCEPT ++{ ++ return year(y) / md; ++} ++ ++// year_month_day_last from operator/() ++ ++CONSTCD11 ++inline ++year_month_day_last ++operator/(const year_month& ym, last_spec) NOEXCEPT ++{ ++ return {ym.year(), month_day_last{ym.month()}}; ++} ++ ++CONSTCD11 ++inline ++year_month_day_last ++operator/(const year& y, const month_day_last& mdl) NOEXCEPT ++{ ++ return {y, mdl}; ++} ++ ++CONSTCD11 ++inline ++year_month_day_last ++operator/(int y, const month_day_last& mdl) NOEXCEPT ++{ ++ return year(y) / mdl; ++} ++ ++CONSTCD11 ++inline ++year_month_day_last ++operator/(const month_day_last& mdl, const year& y) NOEXCEPT ++{ ++ return y / mdl; ++} ++ ++CONSTCD11 ++inline ++year_month_day_last ++operator/(const month_day_last& mdl, int y) NOEXCEPT ++{ ++ return year(y) / mdl; ++} ++ ++// year_month_weekday from operator/() ++ ++CONSTCD11 ++inline ++year_month_weekday ++operator/(const year_month& ym, const weekday_indexed& wdi) NOEXCEPT ++{ ++ return {ym.year(), ym.month(), wdi}; ++} ++ ++CONSTCD11 ++inline ++year_month_weekday ++operator/(const year& y, const month_weekday& mwd) NOEXCEPT ++{ ++ return {y, mwd.month(), mwd.weekday_indexed()}; ++} ++ ++CONSTCD11 ++inline ++year_month_weekday ++operator/(int y, const month_weekday& mwd) NOEXCEPT ++{ ++ return year(y) / mwd; ++} ++ ++CONSTCD11 ++inline ++year_month_weekday ++operator/(const month_weekday& mwd, const year& y) NOEXCEPT ++{ ++ return y / mwd; ++} ++ ++CONSTCD11 ++inline ++year_month_weekday ++operator/(const month_weekday& mwd, int y) NOEXCEPT ++{ ++ return year(y) / mwd; ++} ++ ++// year_month_weekday_last from operator/() ++ ++CONSTCD11 ++inline ++year_month_weekday_last ++operator/(const year_month& ym, const weekday_last& wdl) NOEXCEPT ++{ ++ return {ym.year(), ym.month(), wdl}; ++} ++ ++CONSTCD11 ++inline ++year_month_weekday_last ++operator/(const year& y, const month_weekday_last& mwdl) NOEXCEPT ++{ ++ return {y, mwdl.month(), mwdl.weekday_last()}; ++} ++ ++CONSTCD11 ++inline ++year_month_weekday_last ++operator/(int y, const month_weekday_last& mwdl) NOEXCEPT ++{ ++ return year(y) / mwdl; ++} ++ ++CONSTCD11 ++inline ++year_month_weekday_last ++operator/(const month_weekday_last& mwdl, const year& y) NOEXCEPT ++{ ++ return y / mwdl; ++} ++ ++CONSTCD11 ++inline ++year_month_weekday_last ++operator/(const month_weekday_last& mwdl, int y) NOEXCEPT ++{ ++ return year(y) / mwdl; ++} ++ ++template ++struct fields; ++ ++template ++std::basic_ostream& ++to_stream(std::basic_ostream& os, const CharT* fmt, ++ const fields& fds, const std::string* abbrev = nullptr, ++ const std::chrono::seconds* offset_sec = nullptr); ++ ++template ++std::basic_istream& ++from_stream(std::basic_istream& is, const CharT* fmt, ++ fields& fds, std::basic_string* abbrev = nullptr, ++ std::chrono::minutes* offset = nullptr); ++ ++// hh_mm_ss ++ ++namespace detail ++{ ++ ++struct undocumented {explicit undocumented() = default;}; ++ ++// width::value is the number of fractional decimal digits in 1/n ++// width<0>::value and width<1>::value are defined to be 0 ++// If 1/n takes more than 18 fractional decimal digits, ++// the result is truncated to 19. ++// Example: width<2>::value == 1 ++// Example: width<3>::value == 19 ++// Example: width<4>::value == 2 ++// Example: width<10>::value == 1 ++// Example: width<1000>::value == 3 ++template ++struct width ++{ ++ static_assert(d > 0, "width called with zero denominator"); ++ static CONSTDATA unsigned value = 1 + width::value; ++}; ++ ++template ++struct width ++{ ++ static CONSTDATA unsigned value = 0; ++}; ++ ++template ++struct static_pow10 ++{ ++private: ++ static CONSTDATA std::uint64_t h = static_pow10::value; ++public: ++ static CONSTDATA std::uint64_t value = h * h * (exp % 2 ? 10 : 1); ++}; ++ ++template <> ++struct static_pow10<0> ++{ ++ static CONSTDATA std::uint64_t value = 1; ++}; ++ ++template ++class decimal_format_seconds ++{ ++ using CT = typename std::common_type::type; ++ using rep = typename CT::rep; ++ static unsigned CONSTDATA trial_width = ++ detail::width::value; ++public: ++ static unsigned CONSTDATA width = trial_width < 19 ? trial_width : 6u; ++ using precision = std::chrono::duration::value>>; ++ ++private: ++ std::chrono::seconds s_; ++ precision sub_s_; ++ ++public: ++ CONSTCD11 decimal_format_seconds() ++ : s_() ++ , sub_s_() ++ {} ++ ++ CONSTCD11 explicit decimal_format_seconds(const Duration& d) NOEXCEPT ++ : s_(std::chrono::duration_cast(d)) ++ , sub_s_(std::chrono::duration_cast(d - s_)) ++ {} ++ ++ CONSTCD14 std::chrono::seconds& seconds() NOEXCEPT {return s_;} ++ CONSTCD11 std::chrono::seconds seconds() const NOEXCEPT {return s_;} ++ CONSTCD11 precision subseconds() const NOEXCEPT {return sub_s_;} ++ ++ CONSTCD14 precision to_duration() const NOEXCEPT ++ { ++ return s_ + sub_s_; ++ } ++ ++ CONSTCD11 bool in_conventional_range() const NOEXCEPT ++ { ++ return sub_s_ < std::chrono::seconds{1} && s_ < std::chrono::minutes{1}; ++ } ++ ++ template ++ friend ++ std::basic_ostream& ++ operator<<(std::basic_ostream& os, const decimal_format_seconds& x) ++ { ++ return x.print(os, std::chrono::treat_as_floating_point{}); ++ } ++ ++ template ++ std::basic_ostream& ++ print(std::basic_ostream& os, std::true_type) const ++ { ++ date::detail::save_ostream _(os); ++ std::chrono::duration d = s_ + sub_s_; ++ if (d < std::chrono::seconds{10}) ++ os << '0'; ++ os.precision(width+6); ++ os << std::fixed << d.count(); ++ return os; ++ } ++ ++ template ++ std::basic_ostream& ++ print(std::basic_ostream& os, std::false_type) const ++ { ++ date::detail::save_ostream _(os); ++ os.fill('0'); ++ os.flags(std::ios::dec | std::ios::right); ++ os.width(2); ++ os << s_.count(); ++ if (width > 0) ++ { ++#if !ONLY_C_LOCALE ++ os << std::use_facet>(os.getloc()).decimal_point(); ++#else ++ os << '.'; ++#endif ++ date::detail::save_ostream _s(os); ++ os.imbue(std::locale::classic()); ++ os.width(width); ++ os << sub_s_.count(); ++ } ++ return os; ++ } ++}; ++ ++template ++inline ++CONSTCD11 ++typename std::enable_if ++ < ++ std::numeric_limits::is_signed, ++ std::chrono::duration ++ >::type ++abs(std::chrono::duration d) ++{ ++ return d >= d.zero() ? +d : -d; ++} ++ ++template ++inline ++CONSTCD11 ++typename std::enable_if ++ < ++ !std::numeric_limits::is_signed, ++ std::chrono::duration ++ >::type ++abs(std::chrono::duration d) ++{ ++ return d; ++} ++ ++} // namespace detail ++ ++template ++class hh_mm_ss ++{ ++ using dfs = detail::decimal_format_seconds::type>; ++ ++ std::chrono::hours h_; ++ std::chrono::minutes m_; ++ dfs s_; ++ bool neg_; ++ ++public: ++ static unsigned CONSTDATA fractional_width = dfs::width; ++ using precision = typename dfs::precision; ++ ++ CONSTCD11 hh_mm_ss() NOEXCEPT ++ : hh_mm_ss(Duration::zero()) ++ {} ++ ++ CONSTCD11 explicit hh_mm_ss(Duration d) NOEXCEPT ++ : h_(std::chrono::duration_cast(detail::abs(d))) ++ , m_(std::chrono::duration_cast(detail::abs(d)) - h_) ++ , s_(detail::abs(d) - h_ - m_) ++ , neg_(d < Duration::zero()) ++ {} ++ ++ CONSTCD11 std::chrono::hours hours() const NOEXCEPT {return h_;} ++ CONSTCD11 std::chrono::minutes minutes() const NOEXCEPT {return m_;} ++ CONSTCD11 std::chrono::seconds seconds() const NOEXCEPT {return s_.seconds();} ++ CONSTCD14 std::chrono::seconds& ++ seconds(detail::undocumented) NOEXCEPT {return s_.seconds();} ++ CONSTCD11 precision subseconds() const NOEXCEPT {return s_.subseconds();} ++ CONSTCD11 bool is_negative() const NOEXCEPT {return neg_;} ++ ++ CONSTCD11 explicit operator precision() const NOEXCEPT {return to_duration();} ++ CONSTCD11 precision to_duration() const NOEXCEPT ++ {return (s_.to_duration() + m_ + h_) * (1-2*neg_);} ++ ++ CONSTCD11 bool in_conventional_range() const NOEXCEPT ++ { ++ return !neg_ && h_ < days{1} && m_ < std::chrono::hours{1} && ++ s_.in_conventional_range(); ++ } ++ ++private: ++ ++ template ++ friend ++ std::basic_ostream& ++ operator<<(std::basic_ostream& os, hh_mm_ss const& tod) ++ { ++ if (tod.is_negative()) ++ os << '-'; ++ if (tod.h_ < std::chrono::hours{10}) ++ os << '0'; ++ os << tod.h_.count() << ':'; ++ if (tod.m_ < std::chrono::minutes{10}) ++ os << '0'; ++ os << tod.m_.count() << ':' << tod.s_; ++ return os; ++ } ++ ++ template ++ friend ++ std::basic_ostream& ++ date::to_stream(std::basic_ostream& os, const CharT* fmt, ++ const fields& fds, const std::string* abbrev, ++ const std::chrono::seconds* offset_sec); ++ ++ template ++ friend ++ std::basic_istream& ++ date::from_stream(std::basic_istream& is, const CharT* fmt, ++ fields& fds, ++ std::basic_string* abbrev, std::chrono::minutes* offset); ++}; ++ ++inline ++CONSTCD14 ++bool ++is_am(std::chrono::hours const& h) NOEXCEPT ++{ ++ using std::chrono::hours; ++ return hours{0} <= h && h < hours{12}; ++} ++ ++inline ++CONSTCD14 ++bool ++is_pm(std::chrono::hours const& h) NOEXCEPT ++{ ++ using std::chrono::hours; ++ return hours{12} <= h && h < hours{24}; ++} ++ ++inline ++CONSTCD14 ++std::chrono::hours ++make12(std::chrono::hours h) NOEXCEPT ++{ ++ using std::chrono::hours; ++ if (h < hours{12}) ++ { ++ if (h == hours{0}) ++ h = hours{12}; ++ } ++ else ++ { ++ if (h != hours{12}) ++ h = h - hours{12}; ++ } ++ return h; ++} ++ ++inline ++CONSTCD14 ++std::chrono::hours ++make24(std::chrono::hours h, bool is_pm) NOEXCEPT ++{ ++ using std::chrono::hours; ++ if (is_pm) ++ { ++ if (h != hours{12}) ++ h = h + hours{12}; ++ } ++ else if (h == hours{12}) ++ h = hours{0}; ++ return h; ++} ++ ++template ++using time_of_day = hh_mm_ss; ++ ++template ++CONSTCD11 ++inline ++hh_mm_ss> ++make_time(const std::chrono::duration& d) ++{ ++ return hh_mm_ss>(d); ++} ++ ++template ++inline ++typename std::enable_if ++< ++ std::ratio_less::value ++ , std::basic_ostream& ++>::type ++operator<<(std::basic_ostream& os, const sys_time& tp) ++{ ++ auto const dp = date::floor(tp); ++ return os << year_month_day(dp) << ' ' << make_time(tp-dp); ++} ++ ++template ++inline ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const sys_days& dp) ++{ ++ return os << year_month_day(dp); ++} ++ ++template ++inline ++std::basic_ostream& ++operator<<(std::basic_ostream& os, const local_time& ut) ++{ ++ return (os << sys_time{ut.time_since_epoch()}); ++} ++ ++namespace detail ++{ ++ ++template ++class string_literal; ++ ++template ++inline ++CONSTCD14 ++string_literal::type, ++ N1 + N2 - 1> ++operator+(const string_literal& x, const string_literal& y) NOEXCEPT; ++ ++template ++class string_literal ++{ ++ CharT p_[N]; ++ ++ CONSTCD11 string_literal() NOEXCEPT ++ : p_{} ++ {} ++ ++public: ++ using const_iterator = const CharT*; ++ ++ string_literal(string_literal const&) = default; ++ string_literal& operator=(string_literal const&) = delete; ++ ++ template ::type> ++ CONSTCD11 string_literal(CharT c) NOEXCEPT ++ : p_{c} ++ { ++ } ++ ++ template ::type> ++ CONSTCD11 string_literal(CharT c1, CharT c2) NOEXCEPT ++ : p_{c1, c2} ++ { ++ } ++ ++ template ::type> ++ CONSTCD11 string_literal(CharT c1, CharT c2, CharT c3) NOEXCEPT ++ : p_{c1, c2, c3} ++ { ++ } ++ ++ CONSTCD14 string_literal(const CharT(&a)[N]) NOEXCEPT ++ : p_{} ++ { ++ for (std::size_t i = 0; i < N; ++i) ++ p_[i] = a[i]; ++ } ++ ++ template ::type> ++ CONSTCD14 string_literal(const char(&a)[N]) NOEXCEPT ++ : p_{} ++ { ++ for (std::size_t i = 0; i < N; ++i) ++ p_[i] = a[i]; ++ } ++ ++ template ::value>::type> ++ CONSTCD14 string_literal(string_literal const& a) NOEXCEPT ++ : p_{} ++ { ++ for (std::size_t i = 0; i < N; ++i) ++ p_[i] = a[i]; ++ } ++ ++ CONSTCD11 const CharT* data() const NOEXCEPT {return p_;} ++ CONSTCD11 std::size_t size() const NOEXCEPT {return N-1;} ++ ++ CONSTCD11 const_iterator begin() const NOEXCEPT {return p_;} ++ CONSTCD11 const_iterator end() const NOEXCEPT {return p_ + N-1;} ++ ++ CONSTCD11 CharT const& operator[](std::size_t n) const NOEXCEPT ++ { ++ return p_[n]; ++ } ++ ++ template ++ friend ++ std::basic_ostream& ++ operator<<(std::basic_ostream& os, const string_literal& s) ++ { ++ return os << s.p_; ++ } ++ ++ template ++ friend ++ CONSTCD14 ++ string_literal::type, ++ N1 + N2 - 1> ++ operator+(const string_literal& x, const string_literal& y) NOEXCEPT; ++}; ++ ++template ++CONSTCD11 ++inline ++string_literal ++operator+(const string_literal& x, const string_literal& y) NOEXCEPT ++{ ++ return string_literal(x[0], y[0]); ++} ++ ++template ++CONSTCD11 ++inline ++string_literal ++operator+(const string_literal& x, const string_literal& y) NOEXCEPT ++{ ++ return string_literal(x[0], x[1], y[0]); ++} ++ ++template ++CONSTCD14 ++inline ++string_literal::type, ++ N1 + N2 - 1> ++operator+(const string_literal& x, const string_literal& y) NOEXCEPT ++{ ++ using CT = typename std::conditional::type; ++ ++ string_literal r; ++ std::size_t i = 0; ++ for (; i < N1-1; ++i) ++ r.p_[i] = CT(x.p_[i]); ++ for (std::size_t j = 0; j < N2; ++j, ++i) ++ r.p_[i] = CT(y.p_[j]); ++ ++ return r; ++} ++ ++ ++template ++inline ++std::basic_string ++operator+(std::basic_string x, const string_literal& y) ++{ ++ x.append(y.data(), y.size()); ++ return x; ++} ++ ++#if __cplusplus >= 201402 && (!defined(__EDG_VERSION__) || __EDG_VERSION__ > 411) \ ++ && (!defined(__SUNPRO_CC) || __SUNPRO_CC > 0x5150) ++ ++template ::value || ++ std::is_same::value || ++ std::is_same::value || ++ std::is_same::value>> ++CONSTCD14 ++inline ++string_literal ++msl(CharT c) NOEXCEPT ++{ ++ return string_literal{c}; ++} ++ ++CONSTCD14 ++inline ++std::size_t ++to_string_len(std::intmax_t i) ++{ ++ std::size_t r = 0; ++ do ++ { ++ i /= 10; ++ ++r; ++ } while (i > 0); ++ return r; ++} ++ ++template ++CONSTCD14 ++inline ++std::enable_if_t ++< ++ N < 10, ++ string_literal ++> ++msl() NOEXCEPT ++{ ++ return msl(char(N % 10 + '0')); ++} ++ ++template ++CONSTCD14 ++inline ++std::enable_if_t ++< ++ 10 <= N, ++ string_literal ++> ++msl() NOEXCEPT ++{ ++ return msl() + msl(char(N % 10 + '0')); ++} ++ ++template ++CONSTCD14 ++inline ++std::enable_if_t ++< ++ std::ratio::type::den != 1, ++ string_literal::type::num) + ++ to_string_len(std::ratio::type::den) + 4> ++> ++msl(std::ratio) NOEXCEPT ++{ ++ using R = typename std::ratio::type; ++ return msl(CharT{'['}) + msl() + msl(CharT{'/'}) + ++ msl() + msl(CharT{']'}); ++} ++ ++template ++CONSTCD14 ++inline ++std::enable_if_t ++< ++ std::ratio::type::den == 1, ++ string_literal::type::num) + 3> ++> ++msl(std::ratio) NOEXCEPT ++{ ++ using R = typename std::ratio::type; ++ return msl(CharT{'['}) + msl() + msl(CharT{']'}); ++} ++ ++ ++#else // __cplusplus < 201402 || (defined(__EDG_VERSION__) && __EDG_VERSION__ <= 411) ++ ++inline ++std::string ++to_string(std::uint64_t x) ++{ ++ return std::to_string(x); ++} ++ ++template ++inline ++std::basic_string ++to_string(std::uint64_t x) ++{ ++ auto y = std::to_string(x); ++ return std::basic_string(y.begin(), y.end()); ++} ++ ++template ++inline ++typename std::enable_if ++< ++ std::ratio::type::den != 1, ++ std::basic_string ++>::type ++msl(std::ratio) ++{ ++ using R = typename std::ratio::type; ++ return std::basic_string(1, '[') + to_string(R::num) + CharT{'/'} + ++ to_string(R::den) + CharT{']'}; ++} ++ ++template ++inline ++typename std::enable_if ++< ++ std::ratio::type::den == 1, ++ std::basic_string ++>::type ++msl(std::ratio) ++{ ++ using R = typename std::ratio::type; ++ return std::basic_string(1, '[') + to_string(R::num) + CharT{']'}; ++} ++ ++#endif // __cplusplus < 201402 || (defined(__EDG_VERSION__) && __EDG_VERSION__ <= 411) ++ ++template ++CONSTCD11 ++inline ++string_literal ++msl(std::atto) NOEXCEPT ++{ ++ return string_literal{'a'}; ++} ++ ++template ++CONSTCD11 ++inline ++string_literal ++msl(std::femto) NOEXCEPT ++{ ++ return string_literal{'f'}; ++} ++ ++template ++CONSTCD11 ++inline ++string_literal ++msl(std::pico) NOEXCEPT ++{ ++ return string_literal{'p'}; ++} ++ ++template ++CONSTCD11 ++inline ++string_literal ++msl(std::nano) NOEXCEPT ++{ ++ return string_literal{'n'}; ++} ++ ++template ++CONSTCD11 ++inline ++typename std::enable_if ++< ++ std::is_same::value, ++ string_literal ++>::type ++msl(std::micro) NOEXCEPT ++{ ++ return string_literal{'\xC2', '\xB5'}; ++} ++ ++template ++CONSTCD11 ++inline ++typename std::enable_if ++< ++ !std::is_same::value, ++ string_literal ++>::type ++msl(std::micro) NOEXCEPT ++{ ++ return string_literal{CharT{static_cast('\xB5')}}; ++} ++ ++template ++CONSTCD11 ++inline ++string_literal ++msl(std::milli) NOEXCEPT ++{ ++ return string_literal{'m'}; ++} ++ ++template ++CONSTCD11 ++inline ++string_literal ++msl(std::centi) NOEXCEPT ++{ ++ return string_literal{'c'}; ++} ++ ++template ++CONSTCD11 ++inline ++string_literal ++msl(std::deca) NOEXCEPT ++{ ++ return string_literal{'d', 'a'}; ++} ++ ++template ++CONSTCD11 ++inline ++string_literal ++msl(std::deci) NOEXCEPT ++{ ++ return string_literal{'d'}; ++} ++ ++template ++CONSTCD11 ++inline ++string_literal ++msl(std::hecto) NOEXCEPT ++{ ++ return string_literal{'h'}; ++} ++ ++template ++CONSTCD11 ++inline ++string_literal ++msl(std::kilo) NOEXCEPT ++{ ++ return string_literal{'k'}; ++} ++ ++template ++CONSTCD11 ++inline ++string_literal ++msl(std::mega) NOEXCEPT ++{ ++ return string_literal{'M'}; ++} ++ ++template ++CONSTCD11 ++inline ++string_literal ++msl(std::giga) NOEXCEPT ++{ ++ return string_literal{'G'}; ++} ++ ++template ++CONSTCD11 ++inline ++string_literal ++msl(std::tera) NOEXCEPT ++{ ++ return string_literal{'T'}; ++} ++ ++template ++CONSTCD11 ++inline ++string_literal ++msl(std::peta) NOEXCEPT ++{ ++ return string_literal{'P'}; ++} ++ ++template ++CONSTCD11 ++inline ++string_literal ++msl(std::exa) NOEXCEPT ++{ ++ return string_literal{'E'}; ++} ++ ++template ++CONSTCD11 ++inline ++auto ++get_units(Period p) ++ -> decltype(msl(p) + string_literal{'s'}) ++{ ++ return msl(p) + string_literal{'s'}; ++} ++ ++template ++CONSTCD11 ++inline ++string_literal ++get_units(std::ratio<1>) ++{ ++ return string_literal{'s'}; ++} ++ ++template ++CONSTCD11 ++inline ++string_literal ++get_units(std::ratio<3600>) ++{ ++ return string_literal{'h'}; ++} ++ ++template ++CONSTCD11 ++inline ++string_literal ++get_units(std::ratio<60>) ++{ ++ return string_literal{'m', 'i', 'n'}; ++} ++ ++template ++CONSTCD11 ++inline ++string_literal ++get_units(std::ratio<86400>) ++{ ++ return string_literal{'d'}; ++} ++ ++template > ++struct make_string; ++ ++template <> ++struct make_string ++{ ++ template ++ static ++ std::string ++ from(Rep n) ++ { ++ return std::to_string(n); ++ } ++}; ++ ++template ++struct make_string ++{ ++ template ++ static ++ std::basic_string ++ from(Rep n) ++ { ++ auto s = std::to_string(n); ++ return std::basic_string(s.begin(), s.end()); ++ } ++}; ++ ++template <> ++struct make_string ++{ ++ template ++ static ++ std::wstring ++ from(Rep n) ++ { ++ return std::to_wstring(n); ++ } ++}; ++ ++template ++struct make_string ++{ ++ template ++ static ++ std::basic_string ++ from(Rep n) ++ { ++ auto s = std::to_wstring(n); ++ return std::basic_string(s.begin(), s.end()); ++ } ++}; ++ ++} // namespace detail ++ ++// to_stream ++ ++CONSTDATA year nanyear{-32768}; ++ ++template ++struct fields ++{ ++ year_month_day ymd{nanyear/0/0}; ++ weekday wd{8u}; ++ hh_mm_ss tod{}; ++ bool has_tod = false; ++ ++#if !defined(__clang__) && defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ <= 409) ++ fields() : ymd{nanyear/0/0}, wd{8u}, tod{}, has_tod{false} {} ++#else ++ fields() = default; ++#endif ++ ++ fields(year_month_day ymd_) : ymd(ymd_) {} ++ fields(weekday wd_) : wd(wd_) {} ++ fields(hh_mm_ss tod_) : tod(tod_), has_tod(true) {} ++ ++ fields(year_month_day ymd_, weekday wd_) : ymd(ymd_), wd(wd_) {} ++ fields(year_month_day ymd_, hh_mm_ss tod_) : ymd(ymd_), tod(tod_), ++ has_tod(true) {} ++ ++ fields(weekday wd_, hh_mm_ss tod_) : wd(wd_), tod(tod_), has_tod(true) {} ++ ++ fields(year_month_day ymd_, weekday wd_, hh_mm_ss tod_) ++ : ymd(ymd_) ++ , wd(wd_) ++ , tod(tod_) ++ , has_tod(true) ++ {} ++}; ++ ++namespace detail ++{ ++ ++template ++unsigned ++extract_weekday(std::basic_ostream& os, const fields& fds) ++{ ++ if (!fds.ymd.ok() && !fds.wd.ok()) ++ { ++ // fds does not contain a valid weekday ++ os.setstate(std::ios::failbit); ++ return 8; ++ } ++ weekday wd; ++ if (fds.ymd.ok()) ++ { ++ wd = weekday{sys_days(fds.ymd)}; ++ if (fds.wd.ok() && wd != fds.wd) ++ { ++ // fds.ymd and fds.wd are inconsistent ++ os.setstate(std::ios::failbit); ++ return 8; ++ } ++ } ++ else ++ wd = fds.wd; ++ return static_cast((wd - Sunday).count()); ++} ++ ++template ++unsigned ++extract_month(std::basic_ostream& os, const fields& fds) ++{ ++ if (!fds.ymd.month().ok()) ++ { ++ // fds does not contain a valid month ++ os.setstate(std::ios::failbit); ++ return 0; ++ } ++ return static_cast(fds.ymd.month()); ++} ++ ++} // namespace detail ++ ++#if ONLY_C_LOCALE ++ ++namespace detail ++{ ++ ++inline ++std::pair ++weekday_names() ++{ ++ static const std::string nm[] = ++ { ++ "Sunday", ++ "Monday", ++ "Tuesday", ++ "Wednesday", ++ "Thursday", ++ "Friday", ++ "Saturday", ++ "Sun", ++ "Mon", ++ "Tue", ++ "Wed", ++ "Thu", ++ "Fri", ++ "Sat" ++ }; ++ return std::make_pair(nm, nm+sizeof(nm)/sizeof(nm[0])); ++} ++ ++inline ++std::pair ++month_names() ++{ ++ static const std::string nm[] = ++ { ++ "January", ++ "February", ++ "March", ++ "April", ++ "May", ++ "June", ++ "July", ++ "August", ++ "September", ++ "October", ++ "November", ++ "December", ++ "Jan", ++ "Feb", ++ "Mar", ++ "Apr", ++ "May", ++ "Jun", ++ "Jul", ++ "Aug", ++ "Sep", ++ "Oct", ++ "Nov", ++ "Dec" ++ }; ++ return std::make_pair(nm, nm+sizeof(nm)/sizeof(nm[0])); ++} ++ ++inline ++std::pair ++ampm_names() ++{ ++ static const std::string nm[] = ++ { ++ "AM", ++ "PM" ++ }; ++ return std::make_pair(nm, nm+sizeof(nm)/sizeof(nm[0])); ++} ++ ++template ++FwdIter ++scan_keyword(std::basic_istream& is, FwdIter kb, FwdIter ke) ++{ ++ size_t nkw = static_cast(std::distance(kb, ke)); ++ const unsigned char doesnt_match = '\0'; ++ const unsigned char might_match = '\1'; ++ const unsigned char does_match = '\2'; ++ unsigned char statbuf[100]; ++ unsigned char* status = statbuf; ++ std::unique_ptr stat_hold(0, free); ++ if (nkw > sizeof(statbuf)) ++ { ++ status = (unsigned char*)std::malloc(nkw); ++ if (status == nullptr) ++ throw std::bad_alloc(); ++ stat_hold.reset(status); ++ } ++ size_t n_might_match = nkw; // At this point, any keyword might match ++ size_t n_does_match = 0; // but none of them definitely do ++ // Initialize all statuses to might_match, except for "" keywords are does_match ++ unsigned char* st = status; ++ for (auto ky = kb; ky != ke; ++ky, ++st) ++ { ++ if (!ky->empty()) ++ *st = might_match; ++ else ++ { ++ *st = does_match; ++ --n_might_match; ++ ++n_does_match; ++ } ++ } ++ // While there might be a match, test keywords against the next CharT ++ for (size_t indx = 0; is && n_might_match > 0; ++indx) ++ { ++ // Peek at the next CharT but don't consume it ++ auto ic = is.peek(); ++ if (ic == EOF) ++ { ++ is.setstate(std::ios::eofbit); ++ break; ++ } ++ auto c = static_cast(toupper(static_cast(ic))); ++ bool consume = false; ++ // For each keyword which might match, see if the indx character is c ++ // If a match if found, consume c ++ // If a match is found, and that is the last character in the keyword, ++ // then that keyword matches. ++ // If the keyword doesn't match this character, then change the keyword ++ // to doesn't match ++ st = status; ++ for (auto ky = kb; ky != ke; ++ky, ++st) ++ { ++ if (*st == might_match) ++ { ++ if (c == static_cast(toupper(static_cast((*ky)[indx])))) ++ { ++ consume = true; ++ if (ky->size() == indx+1) ++ { ++ *st = does_match; ++ --n_might_match; ++ ++n_does_match; ++ } ++ } ++ else ++ { ++ *st = doesnt_match; ++ --n_might_match; ++ } ++ } ++ } ++ // consume if we matched a character ++ if (consume) ++ { ++ (void)is.get(); ++ // If we consumed a character and there might be a matched keyword that ++ // was marked matched on a previous iteration, then such keywords ++ // are now marked as not matching. ++ if (n_might_match + n_does_match > 1) ++ { ++ st = status; ++ for (auto ky = kb; ky != ke; ++ky, ++st) ++ { ++ if (*st == does_match && ky->size() != indx+1) ++ { ++ *st = doesnt_match; ++ --n_does_match; ++ } ++ } ++ } ++ } ++ } ++ // We've exited the loop because we hit eof and/or we have no more "might matches". ++ // Return the first matching result ++ for (st = status; kb != ke; ++kb, ++st) ++ if (*st == does_match) ++ break; ++ if (kb == ke) ++ is.setstate(std::ios::failbit); ++ return kb; ++} ++ ++} // namespace detail ++ ++#endif // ONLY_C_LOCALE ++ ++template ++std::basic_ostream& ++to_stream(std::basic_ostream& os, const CharT* fmt, ++ const fields& fds, const std::string* abbrev, ++ const std::chrono::seconds* offset_sec) ++{ ++#if ONLY_C_LOCALE ++ using detail::weekday_names; ++ using detail::month_names; ++ using detail::ampm_names; ++#endif ++ using detail::save_ostream; ++ using detail::get_units; ++ using detail::extract_weekday; ++ using detail::extract_month; ++ using std::ios; ++ using std::chrono::duration_cast; ++ using std::chrono::seconds; ++ using std::chrono::minutes; ++ using std::chrono::hours; ++ date::detail::save_ostream ss(os); ++ os.fill(' '); ++ os.flags(std::ios::skipws | std::ios::dec); ++ os.width(0); ++ tm tm{}; ++ bool insert_negative = fds.has_tod && fds.tod.to_duration() < Duration::zero(); ++#if !ONLY_C_LOCALE ++ auto& facet = std::use_facet>(os.getloc()); ++#endif ++ const CharT* command = nullptr; ++ CharT modified = CharT{}; ++ for (; *fmt; ++fmt) ++ { ++ switch (*fmt) ++ { ++ case 'a': ++ case 'A': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ tm.tm_wday = static_cast(extract_weekday(os, fds)); ++ if (os.fail()) ++ return os; ++#if !ONLY_C_LOCALE ++ const CharT f[] = {'%', *fmt}; ++ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); ++#else // ONLY_C_LOCALE ++ os << weekday_names().first[tm.tm_wday+7*(*fmt == 'a')]; ++#endif // ONLY_C_LOCALE ++ } ++ else ++ { ++ os << CharT{'%'} << modified << *fmt; ++ modified = CharT{}; ++ } ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'b': ++ case 'B': ++ case 'h': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ tm.tm_mon = static_cast(extract_month(os, fds)) - 1; ++#if !ONLY_C_LOCALE ++ const CharT f[] = {'%', *fmt}; ++ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); ++#else // ONLY_C_LOCALE ++ os << month_names().first[tm.tm_mon+12*(*fmt != 'B')]; ++#endif // ONLY_C_LOCALE ++ } ++ else ++ { ++ os << CharT{'%'} << modified << *fmt; ++ modified = CharT{}; ++ } ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'c': ++ case 'x': ++ if (command) ++ { ++ if (modified == CharT{'O'}) ++ os << CharT{'%'} << modified << *fmt; ++ else ++ { ++ if (!fds.ymd.ok()) ++ os.setstate(std::ios::failbit); ++ if (*fmt == 'c' && !fds.has_tod) ++ os.setstate(std::ios::failbit); ++#if !ONLY_C_LOCALE ++ tm = std::tm{}; ++ auto const& ymd = fds.ymd; ++ auto ld = local_days(ymd); ++ if (*fmt == 'c') ++ { ++ tm.tm_sec = static_cast(fds.tod.seconds().count()); ++ tm.tm_min = static_cast(fds.tod.minutes().count()); ++ tm.tm_hour = static_cast(fds.tod.hours().count()); ++ } ++ tm.tm_mday = static_cast(static_cast(ymd.day())); ++ tm.tm_mon = static_cast(extract_month(os, fds) - 1); ++ tm.tm_year = static_cast(ymd.year()) - 1900; ++ tm.tm_wday = static_cast(extract_weekday(os, fds)); ++ if (os.fail()) ++ return os; ++ tm.tm_yday = static_cast((ld - local_days(ymd.year()/1/1)).count()); ++ CharT f[3] = {'%'}; ++ auto fe = std::begin(f) + 1; ++ if (modified == CharT{'E'}) ++ *fe++ = modified; ++ *fe++ = *fmt; ++ facet.put(os, os, os.fill(), &tm, std::begin(f), fe); ++#else // ONLY_C_LOCALE ++ if (*fmt == 'c') ++ { ++ auto wd = static_cast(extract_weekday(os, fds)); ++ os << weekday_names().first[static_cast(wd)+7] ++ << ' '; ++ os << month_names().first[extract_month(os, fds)-1+12] << ' '; ++ auto d = static_cast(static_cast(fds.ymd.day())); ++ if (d < 10) ++ os << ' '; ++ os << d << ' ' ++ << make_time(duration_cast(fds.tod.to_duration())) ++ << ' ' << fds.ymd.year(); ++ ++ } ++ else // *fmt == 'x' ++ { ++ auto const& ymd = fds.ymd; ++ save_ostream _(os); ++ os.fill('0'); ++ os.flags(std::ios::dec | std::ios::right); ++ os.width(2); ++ os << static_cast(ymd.month()) << CharT{'/'}; ++ os.width(2); ++ os << static_cast(ymd.day()) << CharT{'/'}; ++ os.width(2); ++ os << static_cast(ymd.year()) % 100; ++ } ++#endif // ONLY_C_LOCALE ++ } ++ command = nullptr; ++ modified = CharT{}; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'C': ++ if (command) ++ { ++ if (modified == CharT{'O'}) ++ os << CharT{'%'} << modified << *fmt; ++ else ++ { ++ if (!fds.ymd.year().ok()) ++ os.setstate(std::ios::failbit); ++ auto y = static_cast(fds.ymd.year()); ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++#endif ++ { ++ save_ostream _(os); ++ os.fill('0'); ++ os.flags(std::ios::dec | std::ios::right); ++ if (y >= 0) ++ { ++ os.width(2); ++ os << y/100; ++ } ++ else ++ { ++ os << CharT{'-'}; ++ os.width(2); ++ os << -(y-99)/100; ++ } ++ } ++#if !ONLY_C_LOCALE ++ else if (modified == CharT{'E'}) ++ { ++ tm.tm_year = y - 1900; ++ CharT f[3] = {'%', 'E', 'C'}; ++ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); ++ } ++#endif ++ } ++ command = nullptr; ++ modified = CharT{}; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'd': ++ case 'e': ++ if (command) ++ { ++ if (modified == CharT{'E'}) ++ os << CharT{'%'} << modified << *fmt; ++ else ++ { ++ if (!fds.ymd.day().ok()) ++ os.setstate(std::ios::failbit); ++ auto d = static_cast(static_cast(fds.ymd.day())); ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++#endif ++ { ++ save_ostream _(os); ++ if (*fmt == CharT{'d'}) ++ os.fill('0'); ++ else ++ os.fill(' '); ++ os.flags(std::ios::dec | std::ios::right); ++ os.width(2); ++ os << d; ++ } ++#if !ONLY_C_LOCALE ++ else if (modified == CharT{'O'}) ++ { ++ tm.tm_mday = d; ++ CharT f[3] = {'%', 'O', *fmt}; ++ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); ++ } ++#endif ++ } ++ command = nullptr; ++ modified = CharT{}; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'D': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ if (!fds.ymd.ok()) ++ os.setstate(std::ios::failbit); ++ auto const& ymd = fds.ymd; ++ save_ostream _(os); ++ os.fill('0'); ++ os.flags(std::ios::dec | std::ios::right); ++ os.width(2); ++ os << static_cast(ymd.month()) << CharT{'/'}; ++ os.width(2); ++ os << static_cast(ymd.day()) << CharT{'/'}; ++ os.width(2); ++ os << static_cast(ymd.year()) % 100; ++ } ++ else ++ { ++ os << CharT{'%'} << modified << *fmt; ++ modified = CharT{}; ++ } ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'F': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ if (!fds.ymd.ok()) ++ os.setstate(std::ios::failbit); ++ auto const& ymd = fds.ymd; ++ save_ostream _(os); ++ os.imbue(std::locale::classic()); ++ os.fill('0'); ++ os.flags(std::ios::dec | std::ios::right); ++ os.width(4); ++ os << static_cast(ymd.year()) << CharT{'-'}; ++ os.width(2); ++ os << static_cast(ymd.month()) << CharT{'-'}; ++ os.width(2); ++ os << static_cast(ymd.day()); ++ } ++ else ++ { ++ os << CharT{'%'} << modified << *fmt; ++ modified = CharT{}; ++ } ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'g': ++ case 'G': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ if (!fds.ymd.ok()) ++ os.setstate(std::ios::failbit); ++ auto ld = local_days(fds.ymd); ++ auto y = year_month_day{ld + days{3}}.year(); ++ auto start = local_days((y-years{1})/December/Thursday[last]) + ++ (Monday-Thursday); ++ if (ld < start) ++ --y; ++ if (*fmt == CharT{'G'}) ++ os << y; ++ else ++ { ++ save_ostream _(os); ++ os.fill('0'); ++ os.flags(std::ios::dec | std::ios::right); ++ os.width(2); ++ os << std::abs(static_cast(y)) % 100; ++ } ++ } ++ else ++ { ++ os << CharT{'%'} << modified << *fmt; ++ modified = CharT{}; ++ } ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'H': ++ case 'I': ++ if (command) ++ { ++ if (modified == CharT{'E'}) ++ os << CharT{'%'} << modified << *fmt; ++ else ++ { ++ if (!fds.has_tod) ++ os.setstate(std::ios::failbit); ++ if (insert_negative) ++ { ++ os << '-'; ++ insert_negative = false; ++ } ++ auto hms = fds.tod; ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++#endif ++ { ++ auto h = *fmt == CharT{'I'} ? date::make12(hms.hours()) : hms.hours(); ++ if (h < hours{10}) ++ os << CharT{'0'}; ++ os << h.count(); ++ } ++#if !ONLY_C_LOCALE ++ else if (modified == CharT{'O'}) ++ { ++ const CharT f[] = {'%', modified, *fmt}; ++ tm.tm_hour = static_cast(hms.hours().count()); ++ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); ++ } ++#endif ++ } ++ modified = CharT{}; ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'j': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ if (fds.ymd.ok() || fds.has_tod) ++ { ++ days doy; ++ if (fds.ymd.ok()) ++ { ++ auto ld = local_days(fds.ymd); ++ auto y = fds.ymd.year(); ++ doy = ld - local_days(y/January/1) + days{1}; ++ } ++ else ++ { ++ doy = duration_cast(fds.tod.to_duration()); ++ } ++ save_ostream _(os); ++ os.fill('0'); ++ os.flags(std::ios::dec | std::ios::right); ++ os.width(3); ++ os << doy.count(); ++ } ++ else ++ { ++ os.setstate(std::ios::failbit); ++ } ++ } ++ else ++ { ++ os << CharT{'%'} << modified << *fmt; ++ modified = CharT{}; ++ } ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'm': ++ if (command) ++ { ++ if (modified == CharT{'E'}) ++ os << CharT{'%'} << modified << *fmt; ++ else ++ { ++ if (!fds.ymd.month().ok()) ++ os.setstate(std::ios::failbit); ++ auto m = static_cast(fds.ymd.month()); ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++#endif ++ { ++ if (m < 10) ++ os << CharT{'0'}; ++ os << m; ++ } ++#if !ONLY_C_LOCALE ++ else if (modified == CharT{'O'}) ++ { ++ const CharT f[] = {'%', modified, *fmt}; ++ tm.tm_mon = static_cast(m-1); ++ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); ++ } ++#endif ++ } ++ modified = CharT{}; ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'M': ++ if (command) ++ { ++ if (modified == CharT{'E'}) ++ os << CharT{'%'} << modified << *fmt; ++ else ++ { ++ if (!fds.has_tod) ++ os.setstate(std::ios::failbit); ++ if (insert_negative) ++ { ++ os << '-'; ++ insert_negative = false; ++ } ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++#endif ++ { ++ if (fds.tod.minutes() < minutes{10}) ++ os << CharT{'0'}; ++ os << fds.tod.minutes().count(); ++ } ++#if !ONLY_C_LOCALE ++ else if (modified == CharT{'O'}) ++ { ++ const CharT f[] = {'%', modified, *fmt}; ++ tm.tm_min = static_cast(fds.tod.minutes().count()); ++ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); ++ } ++#endif ++ } ++ modified = CharT{}; ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'n': ++ if (command) ++ { ++ if (modified == CharT{}) ++ os << CharT{'\n'}; ++ else ++ { ++ os << CharT{'%'} << modified << *fmt; ++ modified = CharT{}; ++ } ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'p': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ if (!fds.has_tod) ++ os.setstate(std::ios::failbit); ++#if !ONLY_C_LOCALE ++ const CharT f[] = {'%', *fmt}; ++ tm.tm_hour = static_cast(fds.tod.hours().count()); ++ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); ++#else ++ if (date::is_am(fds.tod.hours())) ++ os << ampm_names().first[0]; ++ else ++ os << ampm_names().first[1]; ++#endif ++ } ++ else ++ { ++ os << CharT{'%'} << modified << *fmt; ++ } ++ modified = CharT{}; ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'Q': ++ case 'q': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ if (!fds.has_tod) ++ os.setstate(std::ios::failbit); ++ auto d = fds.tod.to_duration(); ++ if (*fmt == 'q') ++ os << get_units(typename decltype(d)::period::type{}); ++ else ++ os << d.count(); ++ } ++ else ++ { ++ os << CharT{'%'} << modified << *fmt; ++ } ++ modified = CharT{}; ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'r': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ if (!fds.has_tod) ++ os.setstate(std::ios::failbit); ++#if !ONLY_C_LOCALE ++ const CharT f[] = {'%', *fmt}; ++ tm.tm_hour = static_cast(fds.tod.hours().count()); ++ tm.tm_min = static_cast(fds.tod.minutes().count()); ++ tm.tm_sec = static_cast(fds.tod.seconds().count()); ++ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); ++#else ++ hh_mm_ss tod(duration_cast(fds.tod.to_duration())); ++ save_ostream _(os); ++ os.fill('0'); ++ os.width(2); ++ os << date::make12(tod.hours()).count() << CharT{':'}; ++ os.width(2); ++ os << tod.minutes().count() << CharT{':'}; ++ os.width(2); ++ os << tod.seconds().count() << CharT{' '}; ++ if (date::is_am(tod.hours())) ++ os << ampm_names().first[0]; ++ else ++ os << ampm_names().first[1]; ++#endif ++ } ++ else ++ { ++ os << CharT{'%'} << modified << *fmt; ++ } ++ modified = CharT{}; ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'R': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ if (!fds.has_tod) ++ os.setstate(std::ios::failbit); ++ if (fds.tod.hours() < hours{10}) ++ os << CharT{'0'}; ++ os << fds.tod.hours().count() << CharT{':'}; ++ if (fds.tod.minutes() < minutes{10}) ++ os << CharT{'0'}; ++ os << fds.tod.minutes().count(); ++ } ++ else ++ { ++ os << CharT{'%'} << modified << *fmt; ++ modified = CharT{}; ++ } ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'S': ++ if (command) ++ { ++ if (modified == CharT{'E'}) ++ os << CharT{'%'} << modified << *fmt; ++ else ++ { ++ if (!fds.has_tod) ++ os.setstate(std::ios::failbit); ++ if (insert_negative) ++ { ++ os << '-'; ++ insert_negative = false; ++ } ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++#endif ++ { ++ os << fds.tod.s_; ++ } ++#if !ONLY_C_LOCALE ++ else if (modified == CharT{'O'}) ++ { ++ const CharT f[] = {'%', modified, *fmt}; ++ tm.tm_sec = static_cast(fds.tod.s_.seconds().count()); ++ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); ++ } ++#endif ++ } ++ modified = CharT{}; ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 't': ++ if (command) ++ { ++ if (modified == CharT{}) ++ os << CharT{'\t'}; ++ else ++ { ++ os << CharT{'%'} << modified << *fmt; ++ modified = CharT{}; ++ } ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'T': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ if (!fds.has_tod) ++ os.setstate(std::ios::failbit); ++ os << fds.tod; ++ } ++ else ++ { ++ os << CharT{'%'} << modified << *fmt; ++ modified = CharT{}; ++ } ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'u': ++ if (command) ++ { ++ if (modified == CharT{'E'}) ++ os << CharT{'%'} << modified << *fmt; ++ else ++ { ++ auto wd = extract_weekday(os, fds); ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++#endif ++ { ++ os << (wd != 0 ? wd : 7u); ++ } ++#if !ONLY_C_LOCALE ++ else if (modified == CharT{'O'}) ++ { ++ const CharT f[] = {'%', modified, *fmt}; ++ tm.tm_wday = static_cast(wd); ++ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); ++ } ++#endif ++ } ++ modified = CharT{}; ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'U': ++ if (command) ++ { ++ if (modified == CharT{'E'}) ++ os << CharT{'%'} << modified << *fmt; ++ else ++ { ++ auto const& ymd = fds.ymd; ++ if (!ymd.ok()) ++ os.setstate(std::ios::failbit); ++ auto ld = local_days(ymd); ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++#endif ++ { ++ auto st = local_days(Sunday[1]/January/ymd.year()); ++ if (ld < st) ++ os << CharT{'0'} << CharT{'0'}; ++ else ++ { ++ auto wn = duration_cast(ld - st).count() + 1; ++ if (wn < 10) ++ os << CharT{'0'}; ++ os << wn; ++ } ++ } ++ #if !ONLY_C_LOCALE ++ else if (modified == CharT{'O'}) ++ { ++ const CharT f[] = {'%', modified, *fmt}; ++ tm.tm_year = static_cast(ymd.year()) - 1900; ++ tm.tm_wday = static_cast(extract_weekday(os, fds)); ++ if (os.fail()) ++ return os; ++ tm.tm_yday = static_cast((ld - local_days(ymd.year()/1/1)).count()); ++ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); ++ } ++#endif ++ } ++ modified = CharT{}; ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'V': ++ if (command) ++ { ++ if (modified == CharT{'E'}) ++ os << CharT{'%'} << modified << *fmt; ++ else ++ { ++ if (!fds.ymd.ok()) ++ os.setstate(std::ios::failbit); ++ auto ld = local_days(fds.ymd); ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++#endif ++ { ++ auto y = year_month_day{ld + days{3}}.year(); ++ auto st = local_days((y-years{1})/12/Thursday[last]) + ++ (Monday-Thursday); ++ if (ld < st) ++ { ++ --y; ++ st = local_days((y - years{1})/12/Thursday[last]) + ++ (Monday-Thursday); ++ } ++ auto wn = duration_cast(ld - st).count() + 1; ++ if (wn < 10) ++ os << CharT{'0'}; ++ os << wn; ++ } ++#if !ONLY_C_LOCALE ++ else if (modified == CharT{'O'}) ++ { ++ const CharT f[] = {'%', modified, *fmt}; ++ auto const& ymd = fds.ymd; ++ tm.tm_year = static_cast(ymd.year()) - 1900; ++ tm.tm_wday = static_cast(extract_weekday(os, fds)); ++ if (os.fail()) ++ return os; ++ tm.tm_yday = static_cast((ld - local_days(ymd.year()/1/1)).count()); ++ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); ++ } ++#endif ++ } ++ modified = CharT{}; ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'w': ++ if (command) ++ { ++ auto wd = extract_weekday(os, fds); ++ if (os.fail()) ++ return os; ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++#else ++ if (modified != CharT{'E'}) ++#endif ++ { ++ os << wd; ++ } ++#if !ONLY_C_LOCALE ++ else if (modified == CharT{'O'}) ++ { ++ const CharT f[] = {'%', modified, *fmt}; ++ tm.tm_wday = static_cast(wd); ++ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); ++ } ++#endif ++ else ++ { ++ os << CharT{'%'} << modified << *fmt; ++ } ++ modified = CharT{}; ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'W': ++ if (command) ++ { ++ if (modified == CharT{'E'}) ++ os << CharT{'%'} << modified << *fmt; ++ else ++ { ++ auto const& ymd = fds.ymd; ++ if (!ymd.ok()) ++ os.setstate(std::ios::failbit); ++ auto ld = local_days(ymd); ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++#endif ++ { ++ auto st = local_days(Monday[1]/January/ymd.year()); ++ if (ld < st) ++ os << CharT{'0'} << CharT{'0'}; ++ else ++ { ++ auto wn = duration_cast(ld - st).count() + 1; ++ if (wn < 10) ++ os << CharT{'0'}; ++ os << wn; ++ } ++ } ++#if !ONLY_C_LOCALE ++ else if (modified == CharT{'O'}) ++ { ++ const CharT f[] = {'%', modified, *fmt}; ++ tm.tm_year = static_cast(ymd.year()) - 1900; ++ tm.tm_wday = static_cast(extract_weekday(os, fds)); ++ if (os.fail()) ++ return os; ++ tm.tm_yday = static_cast((ld - local_days(ymd.year()/1/1)).count()); ++ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); ++ } ++#endif ++ } ++ modified = CharT{}; ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'X': ++ if (command) ++ { ++ if (modified == CharT{'O'}) ++ os << CharT{'%'} << modified << *fmt; ++ else ++ { ++ if (!fds.has_tod) ++ os.setstate(std::ios::failbit); ++#if !ONLY_C_LOCALE ++ tm = std::tm{}; ++ tm.tm_sec = static_cast(fds.tod.seconds().count()); ++ tm.tm_min = static_cast(fds.tod.minutes().count()); ++ tm.tm_hour = static_cast(fds.tod.hours().count()); ++ CharT f[3] = {'%'}; ++ auto fe = std::begin(f) + 1; ++ if (modified == CharT{'E'}) ++ *fe++ = modified; ++ *fe++ = *fmt; ++ facet.put(os, os, os.fill(), &tm, std::begin(f), fe); ++#else ++ os << fds.tod; ++#endif ++ } ++ command = nullptr; ++ modified = CharT{}; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'y': ++ if (command) ++ { ++ if (!fds.ymd.year().ok()) ++ os.setstate(std::ios::failbit); ++ auto y = static_cast(fds.ymd.year()); ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++ { ++#endif ++ y = std::abs(y) % 100; ++ if (y < 10) ++ os << CharT{'0'}; ++ os << y; ++#if !ONLY_C_LOCALE ++ } ++ else ++ { ++ const CharT f[] = {'%', modified, *fmt}; ++ tm.tm_year = y - 1900; ++ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); ++ } ++#endif ++ modified = CharT{}; ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'Y': ++ if (command) ++ { ++ if (modified == CharT{'O'}) ++ os << CharT{'%'} << modified << *fmt; ++ else ++ { ++ if (!fds.ymd.year().ok()) ++ os.setstate(std::ios::failbit); ++ auto y = fds.ymd.year(); ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++#endif ++ { ++ save_ostream _(os); ++ os.imbue(std::locale::classic()); ++ os << y; ++ } ++#if !ONLY_C_LOCALE ++ else if (modified == CharT{'E'}) ++ { ++ const CharT f[] = {'%', modified, *fmt}; ++ tm.tm_year = static_cast(y) - 1900; ++ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); ++ } ++#endif ++ } ++ modified = CharT{}; ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'z': ++ if (command) ++ { ++ if (offset_sec == nullptr) ++ { ++ // Can not format %z with unknown offset ++ os.setstate(ios::failbit); ++ return os; ++ } ++ auto m = duration_cast(*offset_sec); ++ auto neg = m < minutes{0}; ++ m = date::abs(m); ++ auto h = duration_cast(m); ++ m -= h; ++ if (neg) ++ os << CharT{'-'}; ++ else ++ os << CharT{'+'}; ++ if (h < hours{10}) ++ os << CharT{'0'}; ++ os << h.count(); ++ if (modified != CharT{}) ++ os << CharT{':'}; ++ if (m < minutes{10}) ++ os << CharT{'0'}; ++ os << m.count(); ++ command = nullptr; ++ modified = CharT{}; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'Z': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ if (abbrev == nullptr) ++ { ++ // Can not format %Z with unknown time_zone ++ os.setstate(ios::failbit); ++ return os; ++ } ++ for (auto c : *abbrev) ++ os << CharT(c); ++ } ++ else ++ { ++ os << CharT{'%'} << modified << *fmt; ++ modified = CharT{}; ++ } ++ command = nullptr; ++ } ++ else ++ os << *fmt; ++ break; ++ case 'E': ++ case 'O': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ modified = *fmt; ++ } ++ else ++ { ++ os << CharT{'%'} << modified << *fmt; ++ command = nullptr; ++ modified = CharT{}; ++ } ++ } ++ else ++ os << *fmt; ++ break; ++ case '%': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ os << CharT{'%'}; ++ command = nullptr; ++ } ++ else ++ { ++ os << CharT{'%'} << modified << CharT{'%'}; ++ command = nullptr; ++ modified = CharT{}; ++ } ++ } ++ else ++ command = fmt; ++ break; ++ default: ++ if (command) ++ { ++ os << CharT{'%'}; ++ command = nullptr; ++ } ++ if (modified != CharT{}) ++ { ++ os << modified; ++ modified = CharT{}; ++ } ++ os << *fmt; ++ break; ++ } ++ } ++ if (command) ++ os << CharT{'%'}; ++ if (modified != CharT{}) ++ os << modified; ++ return os; ++} ++ ++template ++inline ++std::basic_ostream& ++to_stream(std::basic_ostream& os, const CharT* fmt, const year& y) ++{ ++ using CT = std::chrono::seconds; ++ fields fds{y/0/0}; ++ return to_stream(os, fmt, fds); ++} ++ ++template ++inline ++std::basic_ostream& ++to_stream(std::basic_ostream& os, const CharT* fmt, const month& m) ++{ ++ using CT = std::chrono::seconds; ++ fields fds{m/0/nanyear}; ++ return to_stream(os, fmt, fds); ++} ++ ++template ++inline ++std::basic_ostream& ++to_stream(std::basic_ostream& os, const CharT* fmt, const day& d) ++{ ++ using CT = std::chrono::seconds; ++ fields fds{d/0/nanyear}; ++ return to_stream(os, fmt, fds); ++} ++ ++template ++inline ++std::basic_ostream& ++to_stream(std::basic_ostream& os, const CharT* fmt, const weekday& wd) ++{ ++ using CT = std::chrono::seconds; ++ fields fds{wd}; ++ return to_stream(os, fmt, fds); ++} ++ ++template ++inline ++std::basic_ostream& ++to_stream(std::basic_ostream& os, const CharT* fmt, const year_month& ym) ++{ ++ using CT = std::chrono::seconds; ++ fields fds{ym/0}; ++ return to_stream(os, fmt, fds); ++} ++ ++template ++inline ++std::basic_ostream& ++to_stream(std::basic_ostream& os, const CharT* fmt, const month_day& md) ++{ ++ using CT = std::chrono::seconds; ++ fields fds{md/nanyear}; ++ return to_stream(os, fmt, fds); ++} ++ ++template ++inline ++std::basic_ostream& ++to_stream(std::basic_ostream& os, const CharT* fmt, ++ const year_month_day& ymd) ++{ ++ using CT = std::chrono::seconds; ++ fields fds{ymd}; ++ return to_stream(os, fmt, fds); ++} ++ ++template ++inline ++std::basic_ostream& ++to_stream(std::basic_ostream& os, const CharT* fmt, ++ const std::chrono::duration& d) ++{ ++ using Duration = std::chrono::duration; ++ using CT = typename std::common_type::type; ++ fields fds{hh_mm_ss{d}}; ++ return to_stream(os, fmt, fds); ++} ++ ++template ++std::basic_ostream& ++to_stream(std::basic_ostream& os, const CharT* fmt, ++ const local_time& tp, const std::string* abbrev = nullptr, ++ const std::chrono::seconds* offset_sec = nullptr) ++{ ++ using CT = typename std::common_type::type; ++ auto ld = std::chrono::time_point_cast(tp); ++ fields fds; ++ if (ld <= tp) ++ fds = fields{year_month_day{ld}, hh_mm_ss{tp-local_seconds{ld}}}; ++ else ++ fds = fields{year_month_day{ld - days{1}}, ++ hh_mm_ss{days{1} - (local_seconds{ld} - tp)}}; ++ return to_stream(os, fmt, fds, abbrev, offset_sec); ++} ++ ++template ++std::basic_ostream& ++to_stream(std::basic_ostream& os, const CharT* fmt, ++ const sys_time& tp) ++{ ++ using std::chrono::seconds; ++ using CT = typename std::common_type::type; ++ const std::string abbrev("UTC"); ++ CONSTDATA seconds offset{0}; ++ auto sd = std::chrono::time_point_cast(tp); ++ fields fds; ++ if (sd <= tp) ++ fds = fields{year_month_day{sd}, hh_mm_ss{tp-sys_seconds{sd}}}; ++ else ++ fds = fields{year_month_day{sd - days{1}}, ++ hh_mm_ss{days{1} - (sys_seconds{sd} - tp)}}; ++ return to_stream(os, fmt, fds, &abbrev, &offset); ++} ++ ++// format ++ ++template ++auto ++format(const std::locale& loc, const CharT* fmt, const Streamable& tp) ++ -> decltype(to_stream(std::declval&>(), fmt, tp), ++ std::basic_string{}) ++{ ++ std::basic_ostringstream os; ++ os.exceptions(std::ios::failbit | std::ios::badbit); ++ os.imbue(loc); ++ to_stream(os, fmt, tp); ++ return os.str(); ++} ++ ++template ++auto ++format(const CharT* fmt, const Streamable& tp) ++ -> decltype(to_stream(std::declval&>(), fmt, tp), ++ std::basic_string{}) ++{ ++ std::basic_ostringstream os; ++ os.exceptions(std::ios::failbit | std::ios::badbit); ++ to_stream(os, fmt, tp); ++ return os.str(); ++} ++ ++template ++auto ++format(const std::locale& loc, const std::basic_string& fmt, ++ const Streamable& tp) ++ -> decltype(to_stream(std::declval&>(), fmt.c_str(), tp), ++ std::basic_string{}) ++{ ++ std::basic_ostringstream os; ++ os.exceptions(std::ios::failbit | std::ios::badbit); ++ os.imbue(loc); ++ to_stream(os, fmt.c_str(), tp); ++ return os.str(); ++} ++ ++template ++auto ++format(const std::basic_string& fmt, const Streamable& tp) ++ -> decltype(to_stream(std::declval&>(), fmt.c_str(), tp), ++ std::basic_string{}) ++{ ++ std::basic_ostringstream os; ++ os.exceptions(std::ios::failbit | std::ios::badbit); ++ to_stream(os, fmt.c_str(), tp); ++ return os.str(); ++} ++ ++// parse ++ ++namespace detail ++{ ++ ++template ++bool ++read_char(std::basic_istream& is, CharT fmt, std::ios::iostate& err) ++{ ++ auto ic = is.get(); ++ if (Traits::eq_int_type(ic, Traits::eof()) || ++ !Traits::eq(Traits::to_char_type(ic), fmt)) ++ { ++ err |= std::ios::failbit; ++ is.setstate(std::ios::failbit); ++ return false; ++ } ++ return true; ++} ++ ++template ++unsigned ++read_unsigned(std::basic_istream& is, unsigned m = 1, unsigned M = 10) ++{ ++ unsigned x = 0; ++ unsigned count = 0; ++ while (true) ++ { ++ auto ic = is.peek(); ++ if (Traits::eq_int_type(ic, Traits::eof())) ++ break; ++ auto c = static_cast(Traits::to_char_type(ic)); ++ if (!('0' <= c && c <= '9')) ++ break; ++ (void)is.get(); ++ ++count; ++ x = 10*x + static_cast(c - '0'); ++ if (count == M) ++ break; ++ } ++ if (count < m) ++ is.setstate(std::ios::failbit); ++ return x; ++} ++ ++template ++int ++read_signed(std::basic_istream& is, unsigned m = 1, unsigned M = 10) ++{ ++ auto ic = is.peek(); ++ if (!Traits::eq_int_type(ic, Traits::eof())) ++ { ++ auto c = static_cast(Traits::to_char_type(ic)); ++ if (('0' <= c && c <= '9') || c == '-' || c == '+') ++ { ++ if (c == '-' || c == '+') ++ (void)is.get(); ++ auto x = static_cast(read_unsigned(is, std::max(m, 1u), M)); ++ if (!is.fail()) ++ { ++ if (c == '-') ++ x = -x; ++ return x; ++ } ++ } ++ } ++ if (m > 0) ++ is.setstate(std::ios::failbit); ++ return 0; ++} ++ ++template ++long double ++read_long_double(std::basic_istream& is, unsigned m = 1, unsigned M = 10) ++{ ++ unsigned count = 0; ++ unsigned fcount = 0; ++ unsigned long long i = 0; ++ unsigned long long f = 0; ++ bool parsing_fraction = false; ++#if ONLY_C_LOCALE ++ typename Traits::int_type decimal_point = '.'; ++#else ++ auto decimal_point = Traits::to_int_type( ++ std::use_facet>(is.getloc()).decimal_point()); ++#endif ++ while (true) ++ { ++ auto ic = is.peek(); ++ if (Traits::eq_int_type(ic, Traits::eof())) ++ break; ++ if (Traits::eq_int_type(ic, decimal_point)) ++ { ++ decimal_point = Traits::eof(); ++ parsing_fraction = true; ++ } ++ else ++ { ++ auto c = static_cast(Traits::to_char_type(ic)); ++ if (!('0' <= c && c <= '9')) ++ break; ++ if (!parsing_fraction) ++ { ++ i = 10*i + static_cast(c - '0'); ++ } ++ else ++ { ++ f = 10*f + static_cast(c - '0'); ++ ++fcount; ++ } ++ } ++ (void)is.get(); ++ if (++count == M) ++ break; ++ } ++ if (count < m) ++ { ++ is.setstate(std::ios::failbit); ++ return 0; ++ } ++ return static_cast(i) + static_cast(f)/std::pow(10.L, fcount); ++} ++ ++struct rs ++{ ++ int& i; ++ unsigned m; ++ unsigned M; ++}; ++ ++struct ru ++{ ++ int& i; ++ unsigned m; ++ unsigned M; ++}; ++ ++struct rld ++{ ++ long double& i; ++ unsigned m; ++ unsigned M; ++}; ++ ++template ++void ++read(std::basic_istream&) ++{ ++} ++ ++template ++void ++read(std::basic_istream& is, CharT a0, Args&& ...args); ++ ++template ++void ++read(std::basic_istream& is, rs a0, Args&& ...args); ++ ++template ++void ++read(std::basic_istream& is, ru a0, Args&& ...args); ++ ++template ++void ++read(std::basic_istream& is, int a0, Args&& ...args); ++ ++template ++void ++read(std::basic_istream& is, rld a0, Args&& ...args); ++ ++template ++void ++read(std::basic_istream& is, CharT a0, Args&& ...args) ++{ ++ // No-op if a0 == CharT{} ++ if (a0 != CharT{}) ++ { ++ auto ic = is.peek(); ++ if (Traits::eq_int_type(ic, Traits::eof())) ++ { ++ is.setstate(std::ios::failbit | std::ios::eofbit); ++ return; ++ } ++ if (!Traits::eq(Traits::to_char_type(ic), a0)) ++ { ++ is.setstate(std::ios::failbit); ++ return; ++ } ++ (void)is.get(); ++ } ++ read(is, std::forward(args)...); ++} ++ ++template ++void ++read(std::basic_istream& is, rs a0, Args&& ...args) ++{ ++ auto x = read_signed(is, a0.m, a0.M); ++ if (is.fail()) ++ return; ++ a0.i = x; ++ read(is, std::forward(args)...); ++} ++ ++template ++void ++read(std::basic_istream& is, ru a0, Args&& ...args) ++{ ++ auto x = read_unsigned(is, a0.m, a0.M); ++ if (is.fail()) ++ return; ++ a0.i = static_cast(x); ++ read(is, std::forward(args)...); ++} ++ ++template ++void ++read(std::basic_istream& is, int a0, Args&& ...args) ++{ ++ if (a0 != -1) ++ { ++ auto u = static_cast(a0); ++ CharT buf[std::numeric_limits::digits10+2u] = {}; ++ auto e = buf; ++ do ++ { ++ *e++ = static_cast(CharT(u % 10) + CharT{'0'}); ++ u /= 10; ++ } while (u > 0); ++ std::reverse(buf, e); ++ for (auto p = buf; p != e && is.rdstate() == std::ios::goodbit; ++p) ++ read(is, *p); ++ } ++ if (is.rdstate() == std::ios::goodbit) ++ read(is, std::forward(args)...); ++} ++ ++template ++void ++read(std::basic_istream& is, rld a0, Args&& ...args) ++{ ++ auto x = read_long_double(is, a0.m, a0.M); ++ if (is.fail()) ++ return; ++ a0.i = x; ++ read(is, std::forward(args)...); ++} ++ ++template ++inline ++void ++checked_set(T& value, T from, T not_a_value, std::basic_ios& is) ++{ ++ if (!is.fail()) ++ { ++ if (value == not_a_value) ++ value = std::move(from); ++ else if (value != from) ++ is.setstate(std::ios::failbit); ++ } ++} ++ ++} // namespace detail; ++ ++template > ++std::basic_istream& ++from_stream(std::basic_istream& is, const CharT* fmt, ++ fields& fds, std::basic_string* abbrev, ++ std::chrono::minutes* offset) ++{ ++ using std::numeric_limits; ++ using std::ios; ++ using std::chrono::duration; ++ using std::chrono::duration_cast; ++ using std::chrono::seconds; ++ using std::chrono::minutes; ++ using std::chrono::hours; ++ using detail::round_i; ++ typename std::basic_istream::sentry ok{is, true}; ++ if (ok) ++ { ++ date::detail::save_istream ss(is); ++ is.fill(' '); ++ is.flags(std::ios::skipws | std::ios::dec); ++ is.width(0); ++#if !ONLY_C_LOCALE ++ auto& f = std::use_facet>(is.getloc()); ++ std::tm tm{}; ++#endif ++ const CharT* command = nullptr; ++ auto modified = CharT{}; ++ auto width = -1; ++ ++ CONSTDATA int not_a_year = numeric_limits::min(); ++ CONSTDATA int not_a_2digit_year = 100; ++ CONSTDATA int not_a_century = not_a_year / 100; ++ CONSTDATA int not_a_month = 0; ++ CONSTDATA int not_a_day = 0; ++ CONSTDATA int not_a_hour = numeric_limits::min(); ++ CONSTDATA int not_a_hour_12_value = 0; ++ CONSTDATA int not_a_minute = not_a_hour; ++ CONSTDATA Duration not_a_second = Duration::min(); ++ CONSTDATA int not_a_doy = -1; ++ CONSTDATA int not_a_weekday = 8; ++ CONSTDATA int not_a_week_num = 100; ++ CONSTDATA int not_a_ampm = -1; ++ CONSTDATA minutes not_a_offset = minutes::min(); ++ ++ int Y = not_a_year; // c, F, Y * ++ int y = not_a_2digit_year; // D, x, y * ++ int g = not_a_2digit_year; // g * ++ int G = not_a_year; // G * ++ int C = not_a_century; // C * ++ int m = not_a_month; // b, B, h, m, c, D, F, x * ++ int d = not_a_day; // c, d, D, e, F, x * ++ int j = not_a_doy; // j * ++ int wd = not_a_weekday; // a, A, u, w * ++ int H = not_a_hour; // c, H, R, T, X * ++ int I = not_a_hour_12_value; // I, r * ++ int p = not_a_ampm; // p, r * ++ int M = not_a_minute; // c, M, r, R, T, X * ++ Duration s = not_a_second; // c, r, S, T, X * ++ int U = not_a_week_num; // U * ++ int V = not_a_week_num; // V * ++ int W = not_a_week_num; // W * ++ std::basic_string temp_abbrev; // Z * ++ minutes temp_offset = not_a_offset; // z * ++ ++ using detail::read; ++ using detail::rs; ++ using detail::ru; ++ using detail::rld; ++ using detail::checked_set; ++ for (; *fmt != CharT{} && !is.fail(); ++fmt) ++ { ++ switch (*fmt) ++ { ++ case 'a': ++ case 'A': ++ case 'u': ++ case 'w': // wd: a, A, u, w ++ if (command) ++ { ++ int trial_wd = not_a_weekday; ++ if (*fmt == 'a' || *fmt == 'A') ++ { ++ if (modified == CharT{}) ++ { ++#if !ONLY_C_LOCALE ++ ios::iostate err = ios::goodbit; ++ f.get(is, nullptr, is, err, &tm, command, fmt+1); ++ is.setstate(err); ++ if (!is.fail()) ++ trial_wd = tm.tm_wday; ++#else ++ auto nm = detail::weekday_names(); ++ auto i = detail::scan_keyword(is, nm.first, nm.second) - nm.first; ++ if (!is.fail()) ++ trial_wd = i % 7; ++#endif ++ } ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ } ++ else // *fmt == 'u' || *fmt == 'w' ++ { ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++#else ++ if (modified != CharT{'E'}) ++#endif ++ { ++ read(is, ru{trial_wd, 1, width == -1 ? ++ 1u : static_cast(width)}); ++ if (!is.fail()) ++ { ++ if (*fmt == 'u') ++ { ++ if (!(1 <= trial_wd && trial_wd <= 7)) ++ { ++ trial_wd = not_a_weekday; ++ is.setstate(ios::failbit); ++ } ++ else if (trial_wd == 7) ++ trial_wd = 0; ++ } ++ else // *fmt == 'w' ++ { ++ if (!(0 <= trial_wd && trial_wd <= 6)) ++ { ++ trial_wd = not_a_weekday; ++ is.setstate(ios::failbit); ++ } ++ } ++ } ++ } ++#if !ONLY_C_LOCALE ++ else if (modified == CharT{'O'}) ++ { ++ ios::iostate err = ios::goodbit; ++ f.get(is, nullptr, is, err, &tm, command, fmt+1); ++ is.setstate(err); ++ if (!is.fail()) ++ trial_wd = tm.tm_wday; ++ } ++#endif ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ } ++ if (trial_wd != not_a_weekday) ++ checked_set(wd, trial_wd, not_a_weekday, is); ++ } ++ else // !command ++ read(is, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ break; ++ case 'b': ++ case 'B': ++ case 'h': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ int ttm = not_a_month; ++#if !ONLY_C_LOCALE ++ ios::iostate err = ios::goodbit; ++ f.get(is, nullptr, is, err, &tm, command, fmt+1); ++ if ((err & ios::failbit) == 0) ++ ttm = tm.tm_mon + 1; ++ is.setstate(err); ++#else ++ auto nm = detail::month_names(); ++ auto i = detail::scan_keyword(is, nm.first, nm.second) - nm.first; ++ if (!is.fail()) ++ ttm = i % 12 + 1; ++#endif ++ checked_set(m, ttm, not_a_month, is); ++ } ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'c': ++ if (command) ++ { ++ if (modified != CharT{'O'}) ++ { ++#if !ONLY_C_LOCALE ++ ios::iostate err = ios::goodbit; ++ f.get(is, nullptr, is, err, &tm, command, fmt+1); ++ if ((err & ios::failbit) == 0) ++ { ++ checked_set(Y, tm.tm_year + 1900, not_a_year, is); ++ checked_set(m, tm.tm_mon + 1, not_a_month, is); ++ checked_set(d, tm.tm_mday, not_a_day, is); ++ checked_set(H, tm.tm_hour, not_a_hour, is); ++ checked_set(M, tm.tm_min, not_a_minute, is); ++ checked_set(s, duration_cast(seconds{tm.tm_sec}), ++ not_a_second, is); ++ } ++ is.setstate(err); ++#else ++ // "%a %b %e %T %Y" ++ auto nm = detail::weekday_names(); ++ auto i = detail::scan_keyword(is, nm.first, nm.second) - nm.first; ++ checked_set(wd, static_cast(i % 7), not_a_weekday, is); ++ ws(is); ++ nm = detail::month_names(); ++ i = detail::scan_keyword(is, nm.first, nm.second) - nm.first; ++ checked_set(m, static_cast(i % 12 + 1), not_a_month, is); ++ ws(is); ++ int td = not_a_day; ++ read(is, rs{td, 1, 2}); ++ checked_set(d, td, not_a_day, is); ++ ws(is); ++ using dfs = detail::decimal_format_seconds; ++ CONSTDATA auto w = Duration::period::den == 1 ? 2 : 3 + dfs::width; ++ int tH; ++ int tM; ++ long double S{}; ++ read(is, ru{tH, 1, 2}, CharT{':'}, ru{tM, 1, 2}, ++ CharT{':'}, rld{S, 1, w}); ++ checked_set(H, tH, not_a_hour, is); ++ checked_set(M, tM, not_a_minute, is); ++ checked_set(s, round_i(duration{S}), ++ not_a_second, is); ++ ws(is); ++ int tY = not_a_year; ++ read(is, rs{tY, 1, 4u}); ++ checked_set(Y, tY, not_a_year, is); ++#endif ++ } ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'x': ++ if (command) ++ { ++ if (modified != CharT{'O'}) ++ { ++#if !ONLY_C_LOCALE ++ ios::iostate err = ios::goodbit; ++ f.get(is, nullptr, is, err, &tm, command, fmt+1); ++ if ((err & ios::failbit) == 0) ++ { ++ checked_set(Y, tm.tm_year + 1900, not_a_year, is); ++ checked_set(m, tm.tm_mon + 1, not_a_month, is); ++ checked_set(d, tm.tm_mday, not_a_day, is); ++ } ++ is.setstate(err); ++#else ++ // "%m/%d/%y" ++ int ty = not_a_2digit_year; ++ int tm = not_a_month; ++ int td = not_a_day; ++ read(is, ru{tm, 1, 2}, CharT{'/'}, ru{td, 1, 2}, CharT{'/'}, ++ rs{ty, 1, 2}); ++ checked_set(y, ty, not_a_2digit_year, is); ++ checked_set(m, tm, not_a_month, is); ++ checked_set(d, td, not_a_day, is); ++#endif ++ } ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'X': ++ if (command) ++ { ++ if (modified != CharT{'O'}) ++ { ++#if !ONLY_C_LOCALE ++ ios::iostate err = ios::goodbit; ++ f.get(is, nullptr, is, err, &tm, command, fmt+1); ++ if ((err & ios::failbit) == 0) ++ { ++ checked_set(H, tm.tm_hour, not_a_hour, is); ++ checked_set(M, tm.tm_min, not_a_minute, is); ++ checked_set(s, duration_cast(seconds{tm.tm_sec}), ++ not_a_second, is); ++ } ++ is.setstate(err); ++#else ++ // "%T" ++ using dfs = detail::decimal_format_seconds; ++ CONSTDATA auto w = Duration::period::den == 1 ? 2 : 3 + dfs::width; ++ int tH = not_a_hour; ++ int tM = not_a_minute; ++ long double S{}; ++ read(is, ru{tH, 1, 2}, CharT{':'}, ru{tM, 1, 2}, ++ CharT{':'}, rld{S, 1, w}); ++ checked_set(H, tH, not_a_hour, is); ++ checked_set(M, tM, not_a_minute, is); ++ checked_set(s, round_i(duration{S}), ++ not_a_second, is); ++#endif ++ } ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'C': ++ if (command) ++ { ++ int tC = not_a_century; ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++ { ++#endif ++ read(is, rs{tC, 1, width == -1 ? 2u : static_cast(width)}); ++#if !ONLY_C_LOCALE ++ } ++ else ++ { ++ ios::iostate err = ios::goodbit; ++ f.get(is, nullptr, is, err, &tm, command, fmt+1); ++ if ((err & ios::failbit) == 0) ++ { ++ auto tY = tm.tm_year + 1900; ++ tC = (tY >= 0 ? tY : tY-99) / 100; ++ } ++ is.setstate(err); ++ } ++#endif ++ checked_set(C, tC, not_a_century, is); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'D': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ int tn = not_a_month; ++ int td = not_a_day; ++ int ty = not_a_2digit_year; ++ read(is, ru{tn, 1, 2}, CharT{'\0'}, CharT{'/'}, CharT{'\0'}, ++ ru{td, 1, 2}, CharT{'\0'}, CharT{'/'}, CharT{'\0'}, ++ rs{ty, 1, 2}); ++ checked_set(y, ty, not_a_2digit_year, is); ++ checked_set(m, tn, not_a_month, is); ++ checked_set(d, td, not_a_day, is); ++ } ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'F': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ int tY = not_a_year; ++ int tn = not_a_month; ++ int td = not_a_day; ++ read(is, rs{tY, 1, width == -1 ? 4u : static_cast(width)}, ++ CharT{'-'}, ru{tn, 1, 2}, CharT{'-'}, ru{td, 1, 2}); ++ checked_set(Y, tY, not_a_year, is); ++ checked_set(m, tn, not_a_month, is); ++ checked_set(d, td, not_a_day, is); ++ } ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'd': ++ case 'e': ++ if (command) ++ { ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++#else ++ if (modified != CharT{'E'}) ++#endif ++ { ++ int td = not_a_day; ++ read(is, rs{td, 1, width == -1 ? 2u : static_cast(width)}); ++ checked_set(d, td, not_a_day, is); ++ } ++#if !ONLY_C_LOCALE ++ else if (modified == CharT{'O'}) ++ { ++ ios::iostate err = ios::goodbit; ++ f.get(is, nullptr, is, err, &tm, command, fmt+1); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ if ((err & ios::failbit) == 0) ++ checked_set(d, tm.tm_mday, not_a_day, is); ++ is.setstate(err); ++ } ++#endif ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'H': ++ if (command) ++ { ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++#else ++ if (modified != CharT{'E'}) ++#endif ++ { ++ int tH = not_a_hour; ++ read(is, ru{tH, 1, width == -1 ? 2u : static_cast(width)}); ++ checked_set(H, tH, not_a_hour, is); ++ } ++#if !ONLY_C_LOCALE ++ else if (modified == CharT{'O'}) ++ { ++ ios::iostate err = ios::goodbit; ++ f.get(is, nullptr, is, err, &tm, command, fmt+1); ++ if ((err & ios::failbit) == 0) ++ checked_set(H, tm.tm_hour, not_a_hour, is); ++ is.setstate(err); ++ } ++#endif ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'I': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ int tI = not_a_hour_12_value; ++ // reads in an hour into I, but most be in [1, 12] ++ read(is, rs{tI, 1, width == -1 ? 2u : static_cast(width)}); ++ if (!(1 <= tI && tI <= 12)) ++ is.setstate(ios::failbit); ++ checked_set(I, tI, not_a_hour_12_value, is); ++ } ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'j': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ int tj = not_a_doy; ++ read(is, ru{tj, 1, width == -1 ? 3u : static_cast(width)}); ++ checked_set(j, tj, not_a_doy, is); ++ } ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'M': ++ if (command) ++ { ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++#else ++ if (modified != CharT{'E'}) ++#endif ++ { ++ int tM = not_a_minute; ++ read(is, ru{tM, 1, width == -1 ? 2u : static_cast(width)}); ++ checked_set(M, tM, not_a_minute, is); ++ } ++#if !ONLY_C_LOCALE ++ else if (modified == CharT{'O'}) ++ { ++ ios::iostate err = ios::goodbit; ++ f.get(is, nullptr, is, err, &tm, command, fmt+1); ++ if ((err & ios::failbit) == 0) ++ checked_set(M, tm.tm_min, not_a_minute, is); ++ is.setstate(err); ++ } ++#endif ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'm': ++ if (command) ++ { ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++#else ++ if (modified != CharT{'E'}) ++#endif ++ { ++ int tn = not_a_month; ++ read(is, rs{tn, 1, width == -1 ? 2u : static_cast(width)}); ++ checked_set(m, tn, not_a_month, is); ++ } ++#if !ONLY_C_LOCALE ++ else if (modified == CharT{'O'}) ++ { ++ ios::iostate err = ios::goodbit; ++ f.get(is, nullptr, is, err, &tm, command, fmt+1); ++ if ((err & ios::failbit) == 0) ++ checked_set(m, tm.tm_mon + 1, not_a_month, is); ++ is.setstate(err); ++ } ++#endif ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'n': ++ case 't': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ // %n matches a single white space character ++ // %t matches 0 or 1 white space characters ++ auto ic = is.peek(); ++ if (Traits::eq_int_type(ic, Traits::eof())) ++ { ++ ios::iostate err = ios::eofbit; ++ if (*fmt == 'n') ++ err |= ios::failbit; ++ is.setstate(err); ++ break; ++ } ++ if (isspace(ic)) ++ { ++ (void)is.get(); ++ } ++ else if (*fmt == 'n') ++ is.setstate(ios::failbit); ++ } ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'p': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ int tp = not_a_ampm; ++#if !ONLY_C_LOCALE ++ tm = std::tm{}; ++ tm.tm_hour = 1; ++ ios::iostate err = ios::goodbit; ++ f.get(is, nullptr, is, err, &tm, command, fmt+1); ++ is.setstate(err); ++ if (tm.tm_hour == 1) ++ tp = 0; ++ else if (tm.tm_hour == 13) ++ tp = 1; ++ else ++ is.setstate(err); ++#else ++ auto nm = detail::ampm_names(); ++ auto i = detail::scan_keyword(is, nm.first, nm.second) - nm.first; ++ tp = static_cast(i); ++#endif ++ checked_set(p, tp, not_a_ampm, is); ++ } ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ ++ break; ++ case 'r': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++#if !ONLY_C_LOCALE ++ ios::iostate err = ios::goodbit; ++ f.get(is, nullptr, is, err, &tm, command, fmt+1); ++ if ((err & ios::failbit) == 0) ++ { ++ checked_set(H, tm.tm_hour, not_a_hour, is); ++ checked_set(M, tm.tm_min, not_a_hour, is); ++ checked_set(s, duration_cast(seconds{tm.tm_sec}), ++ not_a_second, is); ++ } ++ is.setstate(err); ++#else ++ // "%I:%M:%S %p" ++ using dfs = detail::decimal_format_seconds; ++ CONSTDATA auto w = Duration::period::den == 1 ? 2 : 3 + dfs::width; ++ long double S{}; ++ int tI = not_a_hour_12_value; ++ int tM = not_a_minute; ++ read(is, ru{tI, 1, 2}, CharT{':'}, ru{tM, 1, 2}, ++ CharT{':'}, rld{S, 1, w}); ++ checked_set(I, tI, not_a_hour_12_value, is); ++ checked_set(M, tM, not_a_minute, is); ++ checked_set(s, round_i(duration{S}), ++ not_a_second, is); ++ ws(is); ++ auto nm = detail::ampm_names(); ++ auto i = detail::scan_keyword(is, nm.first, nm.second) - nm.first; ++ checked_set(p, static_cast(i), not_a_ampm, is); ++#endif ++ } ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'R': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ int tH = not_a_hour; ++ int tM = not_a_minute; ++ read(is, ru{tH, 1, 2}, CharT{'\0'}, CharT{':'}, CharT{'\0'}, ++ ru{tM, 1, 2}, CharT{'\0'}); ++ checked_set(H, tH, not_a_hour, is); ++ checked_set(M, tM, not_a_minute, is); ++ } ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'S': ++ if (command) ++ { ++ #if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++#else ++ if (modified != CharT{'E'}) ++#endif ++ { ++ using dfs = detail::decimal_format_seconds; ++ CONSTDATA auto w = Duration::period::den == 1 ? 2 : 3 + dfs::width; ++ long double S{}; ++ read(is, rld{S, 1, width == -1 ? w : static_cast(width)}); ++ checked_set(s, round_i(duration{S}), ++ not_a_second, is); ++ } ++#if !ONLY_C_LOCALE ++ else if (modified == CharT{'O'}) ++ { ++ ios::iostate err = ios::goodbit; ++ f.get(is, nullptr, is, err, &tm, command, fmt+1); ++ if ((err & ios::failbit) == 0) ++ checked_set(s, duration_cast(seconds{tm.tm_sec}), ++ not_a_second, is); ++ is.setstate(err); ++ } ++#endif ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'T': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ using dfs = detail::decimal_format_seconds; ++ CONSTDATA auto w = Duration::period::den == 1 ? 2 : 3 + dfs::width; ++ int tH = not_a_hour; ++ int tM = not_a_minute; ++ long double S{}; ++ read(is, ru{tH, 1, 2}, CharT{':'}, ru{tM, 1, 2}, ++ CharT{':'}, rld{S, 1, w}); ++ checked_set(H, tH, not_a_hour, is); ++ checked_set(M, tM, not_a_minute, is); ++ checked_set(s, round_i(duration{S}), ++ not_a_second, is); ++ } ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'Y': ++ if (command) ++ { ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++#else ++ if (modified != CharT{'O'}) ++#endif ++ { ++ int tY = not_a_year; ++ read(is, rs{tY, 1, width == -1 ? 4u : static_cast(width)}); ++ checked_set(Y, tY, not_a_year, is); ++ } ++#if !ONLY_C_LOCALE ++ else if (modified == CharT{'E'}) ++ { ++ ios::iostate err = ios::goodbit; ++ f.get(is, nullptr, is, err, &tm, command, fmt+1); ++ if ((err & ios::failbit) == 0) ++ checked_set(Y, tm.tm_year + 1900, not_a_year, is); ++ is.setstate(err); ++ } ++#endif ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'y': ++ if (command) ++ { ++#if !ONLY_C_LOCALE ++ if (modified == CharT{}) ++#endif ++ { ++ int ty = not_a_2digit_year; ++ read(is, ru{ty, 1, width == -1 ? 2u : static_cast(width)}); ++ checked_set(y, ty, not_a_2digit_year, is); ++ } ++#if !ONLY_C_LOCALE ++ else ++ { ++ ios::iostate err = ios::goodbit; ++ f.get(is, nullptr, is, err, &tm, command, fmt+1); ++ if ((err & ios::failbit) == 0) ++ checked_set(Y, tm.tm_year + 1900, not_a_year, is); ++ is.setstate(err); ++ } ++#endif ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'g': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ int tg = not_a_2digit_year; ++ read(is, ru{tg, 1, width == -1 ? 2u : static_cast(width)}); ++ checked_set(g, tg, not_a_2digit_year, is); ++ } ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'G': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ int tG = not_a_year; ++ read(is, rs{tG, 1, width == -1 ? 4u : static_cast(width)}); ++ checked_set(G, tG, not_a_year, is); ++ } ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'U': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ int tU = not_a_week_num; ++ read(is, ru{tU, 1, width == -1 ? 2u : static_cast(width)}); ++ checked_set(U, tU, not_a_week_num, is); ++ } ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'V': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ int tV = not_a_week_num; ++ read(is, ru{tV, 1, width == -1 ? 2u : static_cast(width)}); ++ checked_set(V, tV, not_a_week_num, is); ++ } ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'W': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ int tW = not_a_week_num; ++ read(is, ru{tW, 1, width == -1 ? 2u : static_cast(width)}); ++ checked_set(W, tW, not_a_week_num, is); ++ } ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'E': ++ case 'O': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ modified = *fmt; ++ } ++ else ++ { ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ } ++ else ++ read(is, *fmt); ++ break; ++ case '%': ++ if (command) ++ { ++ if (modified == CharT{}) ++ read(is, *fmt); ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ command = fmt; ++ break; ++ case 'z': ++ if (command) ++ { ++ int tH, tM; ++ minutes toff = not_a_offset; ++ bool neg = false; ++ auto ic = is.peek(); ++ if (!Traits::eq_int_type(ic, Traits::eof())) ++ { ++ auto c = static_cast(Traits::to_char_type(ic)); ++ if (c == '-') ++ neg = true; ++ } ++ if (modified == CharT{}) ++ { ++ read(is, rs{tH, 2, 2}); ++ if (!is.fail()) ++ toff = hours{std::abs(tH)}; ++ if (is.good()) ++ { ++ ic = is.peek(); ++ if (!Traits::eq_int_type(ic, Traits::eof())) ++ { ++ auto c = static_cast(Traits::to_char_type(ic)); ++ if ('0' <= c && c <= '9') ++ { ++ read(is, ru{tM, 2, 2}); ++ if (!is.fail()) ++ toff += minutes{tM}; ++ } ++ } ++ } ++ } ++ else ++ { ++ read(is, rs{tH, 1, 2}); ++ if (!is.fail()) ++ toff = hours{std::abs(tH)}; ++ if (is.good()) ++ { ++ ic = is.peek(); ++ if (!Traits::eq_int_type(ic, Traits::eof())) ++ { ++ auto c = static_cast(Traits::to_char_type(ic)); ++ if (c == ':') ++ { ++ (void)is.get(); ++ read(is, ru{tM, 2, 2}); ++ if (!is.fail()) ++ toff += minutes{tM}; ++ } ++ } ++ } ++ } ++ if (neg) ++ toff = -toff; ++ checked_set(temp_offset, toff, not_a_offset, is); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ case 'Z': ++ if (command) ++ { ++ if (modified == CharT{}) ++ { ++ std::basic_string buf; ++ while (is.rdstate() == std::ios::goodbit) ++ { ++ auto i = is.rdbuf()->sgetc(); ++ if (Traits::eq_int_type(i, Traits::eof())) ++ { ++ is.setstate(ios::eofbit); ++ break; ++ } ++ auto wc = Traits::to_char_type(i); ++ auto c = static_cast(wc); ++ // is c a valid time zone name or abbreviation character? ++ if (!(CharT{1} < wc && wc < CharT{127}) || !(isalnum(c) || ++ c == '_' || c == '/' || c == '-' || c == '+')) ++ break; ++ buf.push_back(c); ++ is.rdbuf()->sbumpc(); ++ } ++ if (buf.empty()) ++ is.setstate(ios::failbit); ++ checked_set(temp_abbrev, buf, {}, is); ++ } ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ else ++ read(is, *fmt); ++ break; ++ default: ++ if (command) ++ { ++ if (width == -1 && modified == CharT{} && '0' <= *fmt && *fmt <= '9') ++ { ++ width = static_cast(*fmt) - '0'; ++ while ('0' <= fmt[1] && fmt[1] <= '9') ++ width = 10*width + static_cast(*++fmt) - '0'; ++ } ++ else ++ { ++ if (modified == CharT{}) ++ read(is, CharT{'%'}, width, *fmt); ++ else ++ read(is, CharT{'%'}, width, modified, *fmt); ++ command = nullptr; ++ width = -1; ++ modified = CharT{}; ++ } ++ } ++ else // !command ++ { ++ if (isspace(static_cast(*fmt))) ++ { ++ // space matches 0 or more white space characters ++ if (is.good()) ++ ws(is); ++ } ++ else ++ read(is, *fmt); ++ } ++ break; ++ } ++ } ++ // is.fail() || *fmt == CharT{} ++ if (is.rdstate() == ios::goodbit && command) ++ { ++ if (modified == CharT{}) ++ read(is, CharT{'%'}, width); ++ else ++ read(is, CharT{'%'}, width, modified); ++ } ++ if (!is.fail()) ++ { ++ if (y != not_a_2digit_year) ++ { ++ // Convert y and an optional C to Y ++ if (!(0 <= y && y <= 99)) ++ goto broken; ++ if (C == not_a_century) ++ { ++ if (Y == not_a_year) ++ { ++ if (y >= 69) ++ C = 19; ++ else ++ C = 20; ++ } ++ else ++ { ++ C = (Y >= 0 ? Y : Y-100) / 100; ++ } ++ } ++ int tY; ++ if (C >= 0) ++ tY = 100*C + y; ++ else ++ tY = 100*(C+1) - (y == 0 ? 100 : y); ++ if (Y != not_a_year && Y != tY) ++ goto broken; ++ Y = tY; ++ } ++ if (g != not_a_2digit_year) ++ { ++ // Convert g and an optional C to G ++ if (!(0 <= g && g <= 99)) ++ goto broken; ++ if (C == not_a_century) ++ { ++ if (G == not_a_year) ++ { ++ if (g >= 69) ++ C = 19; ++ else ++ C = 20; ++ } ++ else ++ { ++ C = (G >= 0 ? G : G-100) / 100; ++ } ++ } ++ int tG; ++ if (C >= 0) ++ tG = 100*C + g; ++ else ++ tG = 100*(C+1) - (g == 0 ? 100 : g); ++ if (G != not_a_year && G != tG) ++ goto broken; ++ G = tG; ++ } ++ if (Y < static_cast(year::min()) || Y > static_cast(year::max())) ++ Y = not_a_year; ++ bool computed = false; ++ if (G != not_a_year && V != not_a_week_num && wd != not_a_weekday) ++ { ++ year_month_day ymd_trial = sys_days(year{G-1}/December/Thursday[last]) + ++ (Monday-Thursday) + weeks{V-1} + ++ (weekday{static_cast(wd)}-Monday); ++ if (Y == not_a_year) ++ Y = static_cast(ymd_trial.year()); ++ else if (year{Y} != ymd_trial.year()) ++ goto broken; ++ if (m == not_a_month) ++ m = static_cast(static_cast(ymd_trial.month())); ++ else if (month(static_cast(m)) != ymd_trial.month()) ++ goto broken; ++ if (d == not_a_day) ++ d = static_cast(static_cast(ymd_trial.day())); ++ else if (day(static_cast(d)) != ymd_trial.day()) ++ goto broken; ++ computed = true; ++ } ++ if (Y != not_a_year && U != not_a_week_num && wd != not_a_weekday) ++ { ++ year_month_day ymd_trial = sys_days(year{Y}/January/Sunday[1]) + ++ weeks{U-1} + ++ (weekday{static_cast(wd)} - Sunday); ++ if (Y == not_a_year) ++ Y = static_cast(ymd_trial.year()); ++ else if (year{Y} != ymd_trial.year()) ++ goto broken; ++ if (m == not_a_month) ++ m = static_cast(static_cast(ymd_trial.month())); ++ else if (month(static_cast(m)) != ymd_trial.month()) ++ goto broken; ++ if (d == not_a_day) ++ d = static_cast(static_cast(ymd_trial.day())); ++ else if (day(static_cast(d)) != ymd_trial.day()) ++ goto broken; ++ computed = true; ++ } ++ if (Y != not_a_year && W != not_a_week_num && wd != not_a_weekday) ++ { ++ year_month_day ymd_trial = sys_days(year{Y}/January/Monday[1]) + ++ weeks{W-1} + ++ (weekday{static_cast(wd)} - Monday); ++ if (Y == not_a_year) ++ Y = static_cast(ymd_trial.year()); ++ else if (year{Y} != ymd_trial.year()) ++ goto broken; ++ if (m == not_a_month) ++ m = static_cast(static_cast(ymd_trial.month())); ++ else if (month(static_cast(m)) != ymd_trial.month()) ++ goto broken; ++ if (d == not_a_day) ++ d = static_cast(static_cast(ymd_trial.day())); ++ else if (day(static_cast(d)) != ymd_trial.day()) ++ goto broken; ++ computed = true; ++ } ++ if (j != not_a_doy && Y != not_a_year) ++ { ++ auto ymd_trial = year_month_day{local_days(year{Y}/1/1) + days{j-1}}; ++ if (m == not_a_month) ++ m = static_cast(static_cast(ymd_trial.month())); ++ else if (month(static_cast(m)) != ymd_trial.month()) ++ goto broken; ++ if (d == not_a_day) ++ d = static_cast(static_cast(ymd_trial.day())); ++ else if (day(static_cast(d)) != ymd_trial.day()) ++ goto broken; ++ j = not_a_doy; ++ } ++ auto ymd = year{Y}/m/d; ++ if (ymd.ok()) ++ { ++ if (wd == not_a_weekday) ++ wd = static_cast((weekday(sys_days(ymd)) - Sunday).count()); ++ else if (wd != static_cast((weekday(sys_days(ymd)) - Sunday).count())) ++ goto broken; ++ if (!computed) ++ { ++ if (G != not_a_year || V != not_a_week_num) ++ { ++ sys_days sd = ymd; ++ auto G_trial = year_month_day{sd + days{3}}.year(); ++ auto start = sys_days((G_trial - years{1})/December/Thursday[last]) + ++ (Monday - Thursday); ++ if (sd < start) ++ { ++ --G_trial; ++ if (V != not_a_week_num) ++ start = sys_days((G_trial - years{1})/December/Thursday[last]) ++ + (Monday - Thursday); ++ } ++ if (G != not_a_year && G != static_cast(G_trial)) ++ goto broken; ++ if (V != not_a_week_num) ++ { ++ auto V_trial = duration_cast(sd - start).count() + 1; ++ if (V != V_trial) ++ goto broken; ++ } ++ } ++ if (U != not_a_week_num) ++ { ++ auto start = sys_days(Sunday[1]/January/ymd.year()); ++ auto U_trial = floor(sys_days(ymd) - start).count() + 1; ++ if (U != U_trial) ++ goto broken; ++ } ++ if (W != not_a_week_num) ++ { ++ auto start = sys_days(Monday[1]/January/ymd.year()); ++ auto W_trial = floor(sys_days(ymd) - start).count() + 1; ++ if (W != W_trial) ++ goto broken; ++ } ++ } ++ } ++ fds.ymd = ymd; ++ if (I != not_a_hour_12_value) ++ { ++ if (!(1 <= I && I <= 12)) ++ goto broken; ++ if (p != not_a_ampm) ++ { ++ // p is in [0, 1] == [AM, PM] ++ // Store trial H in I ++ if (I == 12) ++ --p; ++ I += p*12; ++ // Either set H from I or make sure H and I are consistent ++ if (H == not_a_hour) ++ H = I; ++ else if (I != H) ++ goto broken; ++ } ++ else // p == not_a_ampm ++ { ++ // if H, make sure H and I could be consistent ++ if (H != not_a_hour) ++ { ++ if (I == 12) ++ { ++ if (H != 0 && H != 12) ++ goto broken; ++ } ++ else if (!(I == H || I == H+12)) ++ { ++ goto broken; ++ } ++ } ++ else // I is ambiguous, AM or PM? ++ goto broken; ++ } ++ } ++ if (H != not_a_hour) ++ { ++ fds.has_tod = true; ++ fds.tod = hh_mm_ss{hours{H}}; ++ } ++ if (M != not_a_minute) ++ { ++ fds.has_tod = true; ++ fds.tod.m_ = minutes{M}; ++ } ++ if (s != not_a_second) ++ { ++ fds.has_tod = true; ++ fds.tod.s_ = detail::decimal_format_seconds{s}; ++ } ++ if (j != not_a_doy) ++ { ++ fds.has_tod = true; ++ fds.tod.h_ += hours{days{j}}; ++ } ++ if (wd != not_a_weekday) ++ fds.wd = weekday{static_cast(wd)}; ++ if (abbrev != nullptr) ++ *abbrev = std::move(temp_abbrev); ++ if (offset != nullptr && temp_offset != not_a_offset) ++ *offset = temp_offset; ++ } ++ return is; ++ } ++broken: ++ is.setstate(ios::failbit); ++ return is; ++} ++ ++template > ++std::basic_istream& ++from_stream(std::basic_istream& is, const CharT* fmt, year& y, ++ std::basic_string* abbrev = nullptr, ++ std::chrono::minutes* offset = nullptr) ++{ ++ using CT = std::chrono::seconds; ++ fields fds{}; ++ date::from_stream(is, fmt, fds, abbrev, offset); ++ if (!fds.ymd.year().ok()) ++ is.setstate(std::ios::failbit); ++ if (!is.fail()) ++ y = fds.ymd.year(); ++ return is; ++} ++ ++template > ++std::basic_istream& ++from_stream(std::basic_istream& is, const CharT* fmt, month& m, ++ std::basic_string* abbrev = nullptr, ++ std::chrono::minutes* offset = nullptr) ++{ ++ using CT = std::chrono::seconds; ++ fields fds{}; ++ date::from_stream(is, fmt, fds, abbrev, offset); ++ if (!fds.ymd.month().ok()) ++ is.setstate(std::ios::failbit); ++ if (!is.fail()) ++ m = fds.ymd.month(); ++ return is; ++} ++ ++template > ++std::basic_istream& ++from_stream(std::basic_istream& is, const CharT* fmt, day& d, ++ std::basic_string* abbrev = nullptr, ++ std::chrono::minutes* offset = nullptr) ++{ ++ using CT = std::chrono::seconds; ++ fields fds{}; ++ date::from_stream(is, fmt, fds, abbrev, offset); ++ if (!fds.ymd.day().ok()) ++ is.setstate(std::ios::failbit); ++ if (!is.fail()) ++ d = fds.ymd.day(); ++ return is; ++} ++ ++template > ++std::basic_istream& ++from_stream(std::basic_istream& is, const CharT* fmt, weekday& wd, ++ std::basic_string* abbrev = nullptr, ++ std::chrono::minutes* offset = nullptr) ++{ ++ using CT = std::chrono::seconds; ++ fields fds{}; ++ date::from_stream(is, fmt, fds, abbrev, offset); ++ if (!fds.wd.ok()) ++ is.setstate(std::ios::failbit); ++ if (!is.fail()) ++ wd = fds.wd; ++ return is; ++} ++ ++template > ++std::basic_istream& ++from_stream(std::basic_istream& is, const CharT* fmt, year_month& ym, ++ std::basic_string* abbrev = nullptr, ++ std::chrono::minutes* offset = nullptr) ++{ ++ using CT = std::chrono::seconds; ++ fields fds{}; ++ date::from_stream(is, fmt, fds, abbrev, offset); ++ if (!fds.ymd.month().ok()) ++ is.setstate(std::ios::failbit); ++ if (!is.fail()) ++ ym = fds.ymd.year()/fds.ymd.month(); ++ return is; ++} ++ ++template > ++std::basic_istream& ++from_stream(std::basic_istream& is, const CharT* fmt, month_day& md, ++ std::basic_string* abbrev = nullptr, ++ std::chrono::minutes* offset = nullptr) ++{ ++ using CT = std::chrono::seconds; ++ fields fds{}; ++ date::from_stream(is, fmt, fds, abbrev, offset); ++ if (!fds.ymd.month().ok() || !fds.ymd.day().ok()) ++ is.setstate(std::ios::failbit); ++ if (!is.fail()) ++ md = fds.ymd.month()/fds.ymd.day(); ++ return is; ++} ++ ++template > ++std::basic_istream& ++from_stream(std::basic_istream& is, const CharT* fmt, ++ year_month_day& ymd, std::basic_string* abbrev = nullptr, ++ std::chrono::minutes* offset = nullptr) ++{ ++ using CT = std::chrono::seconds; ++ fields fds{}; ++ date::from_stream(is, fmt, fds, abbrev, offset); ++ if (!fds.ymd.ok()) ++ is.setstate(std::ios::failbit); ++ if (!is.fail()) ++ ymd = fds.ymd; ++ return is; ++} ++ ++template > ++std::basic_istream& ++from_stream(std::basic_istream& is, const CharT* fmt, ++ sys_time& tp, std::basic_string* abbrev = nullptr, ++ std::chrono::minutes* offset = nullptr) ++{ ++ using CT = typename std::common_type::type; ++ using detail::round_i; ++ std::chrono::minutes offset_local{}; ++ auto offptr = offset ? offset : &offset_local; ++ fields fds{}; ++ fds.has_tod = true; ++ date::from_stream(is, fmt, fds, abbrev, offptr); ++ if (!fds.ymd.ok() || !fds.tod.in_conventional_range()) ++ is.setstate(std::ios::failbit); ++ if (!is.fail()) ++ tp = round_i(sys_days(fds.ymd) - *offptr + fds.tod.to_duration()); ++ return is; ++} ++ ++template > ++std::basic_istream& ++from_stream(std::basic_istream& is, const CharT* fmt, ++ local_time& tp, std::basic_string* abbrev = nullptr, ++ std::chrono::minutes* offset = nullptr) ++{ ++ using CT = typename std::common_type::type; ++ using detail::round_i; ++ fields fds{}; ++ fds.has_tod = true; ++ date::from_stream(is, fmt, fds, abbrev, offset); ++ if (!fds.ymd.ok() || !fds.tod.in_conventional_range()) ++ is.setstate(std::ios::failbit); ++ if (!is.fail()) ++ tp = round_i(local_seconds{local_days(fds.ymd)} + fds.tod.to_duration()); ++ return is; ++} ++ ++template > ++std::basic_istream& ++from_stream(std::basic_istream& is, const CharT* fmt, ++ std::chrono::duration& d, ++ std::basic_string* abbrev = nullptr, ++ std::chrono::minutes* offset = nullptr) ++{ ++ using Duration = std::chrono::duration; ++ using CT = typename std::common_type::type; ++ using detail::round_i; ++ fields fds{}; ++ date::from_stream(is, fmt, fds, abbrev, offset); ++ if (!fds.has_tod) ++ is.setstate(std::ios::failbit); ++ if (!is.fail()) ++ d = round_i(fds.tod.to_duration()); ++ return is; ++} ++ ++template , ++ class Alloc = std::allocator> ++struct parse_manip ++{ ++ const std::basic_string format_; ++ Parsable& tp_; ++ std::basic_string* abbrev_; ++ std::chrono::minutes* offset_; ++ ++public: ++ parse_manip(std::basic_string format, Parsable& tp, ++ std::basic_string* abbrev = nullptr, ++ std::chrono::minutes* offset = nullptr) ++ : format_(std::move(format)) ++ , tp_(tp) ++ , abbrev_(abbrev) ++ , offset_(offset) ++ {} ++ ++#if HAS_STRING_VIEW ++ parse_manip(const CharT* format, Parsable& tp, ++ std::basic_string* abbrev = nullptr, ++ std::chrono::minutes* offset = nullptr) ++ : format_(format) ++ , tp_(tp) ++ , abbrev_(abbrev) ++ , offset_(offset) ++ {} ++ ++ parse_manip(std::basic_string_view format, Parsable& tp, ++ std::basic_string* abbrev = nullptr, ++ std::chrono::minutes* offset = nullptr) ++ : format_(format) ++ , tp_(tp) ++ , abbrev_(abbrev) ++ , offset_(offset) ++ {} ++#endif // HAS_STRING_VIEW ++}; ++ ++template ++std::basic_istream& ++operator>>(std::basic_istream& is, ++ const parse_manip& x) ++{ ++ return date::from_stream(is, x.format_.c_str(), x.tp_, x.abbrev_, x.offset_); ++} ++ ++template ++inline ++auto ++parse(const std::basic_string& format, Parsable& tp) ++ -> decltype(date::from_stream(std::declval&>(), ++ format.c_str(), tp), ++ parse_manip{format, tp}) ++{ ++ return {format, tp}; ++} ++ ++template ++inline ++auto ++parse(const std::basic_string& format, Parsable& tp, ++ std::basic_string& abbrev) ++ -> decltype(date::from_stream(std::declval&>(), ++ format.c_str(), tp, &abbrev), ++ parse_manip{format, tp, &abbrev}) ++{ ++ return {format, tp, &abbrev}; ++} ++ ++template ++inline ++auto ++parse(const std::basic_string& format, Parsable& tp, ++ std::chrono::minutes& offset) ++ -> decltype(date::from_stream(std::declval&>(), ++ format.c_str(), tp, ++ std::declval*>(), ++ &offset), ++ parse_manip{format, tp, nullptr, &offset}) ++{ ++ return {format, tp, nullptr, &offset}; ++} ++ ++template ++inline ++auto ++parse(const std::basic_string& format, Parsable& tp, ++ std::basic_string& abbrev, std::chrono::minutes& offset) ++ -> decltype(date::from_stream(std::declval&>(), ++ format.c_str(), tp, &abbrev, &offset), ++ parse_manip{format, tp, &abbrev, &offset}) ++{ ++ return {format, tp, &abbrev, &offset}; ++} ++ ++// const CharT* formats ++ ++template ++inline ++auto ++parse(const CharT* format, Parsable& tp) ++ -> decltype(date::from_stream(std::declval&>(), format, tp), ++ parse_manip{format, tp}) ++{ ++ return {format, tp}; ++} ++ ++template ++inline ++auto ++parse(const CharT* format, Parsable& tp, std::basic_string& abbrev) ++ -> decltype(date::from_stream(std::declval&>(), format, ++ tp, &abbrev), ++ parse_manip{format, tp, &abbrev}) ++{ ++ return {format, tp, &abbrev}; ++} ++ ++template ++inline ++auto ++parse(const CharT* format, Parsable& tp, std::chrono::minutes& offset) ++ -> decltype(date::from_stream(std::declval&>(), format, ++ tp, std::declval*>(), &offset), ++ parse_manip{format, tp, nullptr, &offset}) ++{ ++ return {format, tp, nullptr, &offset}; ++} ++ ++template ++inline ++auto ++parse(const CharT* format, Parsable& tp, ++ std::basic_string& abbrev, std::chrono::minutes& offset) ++ -> decltype(date::from_stream(std::declval&>(), format, ++ tp, &abbrev, &offset), ++ parse_manip{format, tp, &abbrev, &offset}) ++{ ++ return {format, tp, &abbrev, &offset}; ++} ++ ++// duration streaming ++ ++template ++inline ++std::basic_ostream& ++operator<<(std::basic_ostream& os, ++ const std::chrono::duration& d) ++{ ++ return os << detail::make_string::from(d.count()) + ++ detail::get_units(typename Period::type{}); ++} ++ ++} // namespace date ++ ++#ifdef _MSC_VER ++# pragma warning(pop) ++#endif ++ ++#ifdef __GNUC__ ++# pragma GCC diagnostic pop ++#endif ++ ++#endif // DATE_H +diff --git a/plugins/in_coredump/CoredumpHandler.cpp b/plugins/in_coredump/CoredumpHandler.cpp +index 3f5e0a3..d9c918a 100644 +--- a/plugins/in_coredump/CoredumpHandler.cpp ++++ b/plugins/in_coredump/CoredumpHandler.cpp +@@ -227,14 +227,13 @@ int CoredumpHandler::onCollect(struct flb_input_instance *ins, struct flb_config + int i; + + ctx->buf_start = 0; +- ssize_t nRead = read(ctx->fd, ctx->buf, sizeof(ctx->buf) - 1); +- if (nRead <= 0) { ++ ctx->buf_len = read(ctx->fd, ctx->buf, sizeof(ctx->buf) - 1); ++ if (ctx->buf_len <= 0) { + PLUGIN_ERROR("Failed to read data"); + flb_input_collector_pause(ctx->coll_fd, ctx->ins); + flb_engine_exit(config); + return -1; } +- ctx->buf_len = nRead; + ctx->buf[ctx->buf_len] = '\0'; + + PLUGIN_INFO("Catch the new coredump event"); +@@ -244,14 +243,17 @@ int CoredumpHandler::onCollect(struct flb_input_instance *ins, struct flb_config + msgpack_packer_init(&mp_pck, &mp_sbuf, msgpack_sbuffer_write); + + for (; ctx->buf_start + EVENT_SIZE < ctx->buf_len; ctx->buf_start += EVENT_SIZE + event->len) { +- PLUGIN_DEBUG("while loop: buf_start=%u, buf_len=%u", ctx->buf_start, ctx->buf_len); +- event=(struct inotify_event*) &ctx->buf[ctx->buf_start]; ++ PLUGIN_DEBUG("while loop: buf_start=%d, buf_len=%d", ctx->buf_start, ctx->buf_len); ++ event=(struct inotify_event*) (ctx->buf+ctx->buf_start); + + if (event->len == 0) { + PLUGIN_ERROR("Event length is 0"); + continue; + } +- ++ if (event->len > ctx->buf_len - ctx->buf_start - EVENT_SIZE) { ++ PLUGIN_ERROR("Too long event : %u (start : %d, len : %d)", event->len, ctx->buf_start, ctx->buf_len); ++ break; ++ } + if (!(event->mask & IN_CREATE)) { + PLUGIN_ERROR("Not create event : %s", event->name); + continue; +diff --git a/plugins/in_coredump/CoredumpHandler.h b/plugins/in_coredump/CoredumpHandler.h +index 20ee1ce..24b831d 100644 +--- a/plugins/in_coredump/CoredumpHandler.h ++++ b/plugins/in_coredump/CoredumpHandler.h +@@ -35,8 +35,8 @@ using namespace std; + struct flb_in_coredump_config { + int fd; // coredump file descriptor + int coll_fd; // collector fd +- unsigned int buf_len; // read buffer length +- unsigned int buf_start; // read buffer length ++ int buf_len; // read buffer length ++ int buf_start; // read buffer length + char buf[BUF_LEN]; // read buffer: 16Kb max + + // watch descriptor -- 2.25.1 From 673019e35c0017ee4bead748f51bde9d2a8d45ae Mon Sep 17 00:00:00 2001 From: JeongBong Seo Date: Mon, 23 May 2022 18:57:16 +0900 Subject: [PATCH 0385/2022] backports-3.4: Upgrade the docker-moby and dependent packages :Release Notes: docker-moby=v20.10.8 runc*=v1.0.2 containerd*=v1.5.5 go*=v1.16.15 :Detailed Notes: To support cgroup 2.0, we need to upgrade docker version (>= v20.10). This patch backports the docker things to honister (yocto 3.4). - docker-moby: v19.03.15..v20.10.8 - runc-docker: v1.0.0..v1.0.2 - containerd-opencontainers: v1.2.14..v1.5.5 - go*: v1.14..v1.16.15 Rename docker-moby.bbappend to docker-moby_%.bbappend. :Testing Performed: See the CCC ticket :QA Notes: :Issues Addressed: [WRO-5366] CCC: Upgrade the docker-moby and dependent packages [WRO-5355] Change-Id: Ibfcae4c9e17ef9200c2202c996219315e2b7cf40 --- .../recipes-containers/containerd/README.md | 30 ++ .../0001-Add-build-option-GODEBUG-1.patch | 32 ++ ...O_BUILD_FLAGS-to-be-externally-speci.patch | 38 +++ .../containerd-opencontainers_git.bb | 127 ++++++++ ...1-build-use-oe-provided-GO-and-flags.patch | 64 ++++ .../docker/docker-moby_git.bb | 60 ++++ .../recipes-containers/docker/docker.inc | 179 ++++++++++++ ...ernal-GO111MODULE-and-cross-compiler.patch | 27 ++ ...0001-dynbinary-use-go-cross-compiler.patch | 23 ++ ...0001-libnetwork-use-GO-instead-of-go.patch | 59 ++++ .../docker/files/docker.init | 131 +++++++++ ...-GOBUILDFLAGS-for-runc-and-remove-re.patch | 37 +++ ...001-runc-Add-console-socket-dev-null.patch | 30 ++ .../0001-runc-docker-SIGUSR1-daemonize.patch | 131 +++++++++ .../runc/runc-docker_git.bb | 14 + .../runc/runc-opencontainers_git.bb | 10 + .../recipes-containers/runc/runc.inc | 83 ++++++ .../recipes-devtools/go/go-1.16.15.inc | 25 ++ ...ow-CC-and-CXX-to-have-multiple-words.patch | 33 +++ ...ent-based-hash-generation-less-pedan.patch | 219 ++++++++++++++ ...-to-be-overridden-in-the-environment.patch | 47 +++ ...4-ld-add-soname-to-shareable-objects.patch | 45 +++ ...de-CC-when-building-dist-and-go_boot.patch | 39 +++ ...dist-separate-host-and-target-builds.patch | 274 ++++++++++++++++++ ...d-go-make-GOROOT-precious-by-default.patch | 104 +++++++ ...008-use-GOBUILDMODE-to-set-buildmode.patch | 42 +++ ...go-make-sure-CC-and-CXX-are-absolute.patch | 95 ++++++ .../go/go-binary-native_1.16.15.bb | 46 +++ .../recipes-devtools/go/go-common.inc | 42 +++ .../recipes-devtools/go/go-cross-canadian.inc | 62 ++++ .../go/go-cross-canadian_1.16.15.bb | 2 + .../recipes-devtools/go/go-cross.inc | 53 ++++ .../recipes-devtools/go/go-cross_1.16.15.bb | 2 + .../recipes-devtools/go/go-crosssdk.inc | 43 +++ .../go/go-crosssdk_1.16.15.bb | 2 + .../recipes-devtools/go/go-native_1.16.15.bb | 59 ++++ .../recipes-devtools/go/go-runtime.inc | 87 ++++++ .../recipes-devtools/go/go-runtime_1.16.15.bb | 3 + .../recipes-devtools/go/go-target.inc | 45 +++ .../recipes-devtools/go/go_1.16.15.bb | 17 ++ ...r-moby.bbappend => docker-moby_%.bbappend} | 0 .../include/webos-preferred-versions.inc | 2 + 42 files changed, 2463 insertions(+) create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/README.md create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers/0001-Add-build-option-GODEBUG-1.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers/0001-Makefile-allow-GO_BUILD_FLAGS-to-be-externally-speci.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers_git.bb create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/files/0001-build-use-oe-provided-GO-and-flags.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/docker-moby_git.bb create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/docker.inc create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-cli-use-external-GO111MODULE-and-cross-compiler.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-dynbinary-use-go-cross-compiler.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-libnetwork-use-GO-instead-of-go.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/docker.init create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/files/0001-Makefile-respect-GOBUILDFLAGS-for-runc-and-remove-re.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker/0001-runc-Add-console-socket-dev-null.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker/0001-runc-docker-SIGUSR1-daemonize.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker_git.bb create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-opencontainers_git.bb create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc.inc create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16.15.inc create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0001-allow-CC-and-CXX-to-have-multiple-words.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0002-cmd-go-make-content-based-hash-generation-less-pedan.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0003-allow-GOTOOLDIR-to-be-overridden-in-the-environment.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0004-ld-add-soname-to-shareable-objects.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0005-make.bash-override-CC-when-building-dist-and-go_boot.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0006-cmd-dist-separate-host-and-target-builds.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0007-cmd-go-make-GOROOT-precious-by-default.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0008-use-GOBUILDMODE-to-set-buildmode.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0009-Revert-cmd-go-make-sure-CC-and-CXX-are-absolute.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-binary-native_1.16.15.bb create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-common.inc create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross-canadian.inc create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross-canadian_1.16.15.bb create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross.inc create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross_1.16.15.bb create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-crosssdk.inc create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-crosssdk_1.16.15.bb create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-native_1.16.15.bb create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-runtime.inc create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-runtime_1.16.15.bb create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-target.inc create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go_1.16.15.bb rename meta-webos-virtualization/recipes-containers/docker/{docker-moby.bbappend => docker-moby_%.bbappend} (100%) diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/README.md b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/README.md new file mode 100644 index 000000000..f7730793e --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/README.md @@ -0,0 +1,30 @@ +# containerd: sample image fetch and exec commands + +```shell +root@qemux86-64:~# ctr images list +REF TYPE DIGEST SIZE PLATFORMS +docker.io/calico/node:v3.11.2 application/vnd.docker.distribution.manifest.list.v2+json sha256:887bcd551668cccae1fbfd6d2eb0f635ec37bb4cf599e1169989aa49dfac5b57 84.8 MiB linux/amd64,linux/arm64,linux/ppc64le +docker.io/library/alpine:latest application/vnd.docker.distribution.manifest.list.v2+json sha256:c0e9560cda118f9ec63ddefb4a173a2b2a0347082d7dff7dc14272e7841a5b5a 2.7 MiB linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,l + +root@qemux86-64:~# ctr image pull docker.io/library/alpine:latest +docker.io/library/alpine:latest: resolved |++++++++++++++++++++++++++++++++++++++| +index-sha256:c0e9560cda118f9ec63ddefb4a173a2b2a0347082d7dff7dc14272e7841a5b5a: exists |++++++++++++++++++++++++++++++++++++++| +manifest-sha256:d7342993700f8cd7aba8496c2d0e57be0666e80b4c441925fc6f9361fa81d10e: exists |++++++++++++++++++++++++++++++++++++++| +layer-sha256:188c0c94c7c576fff0792aca7ec73d67a2f7f4cb3a6e53a84559337260b36964: exists |++++++++++++++++++++++++++++++++++++++| +config-sha256:d6e46aa2470df1d32034c6707c8041158b652f38d2a9ae3d7ad7e7532d22ebe0: exists |++++++++++++++++++++++++++++++++++++++| +elapsed: 6.5 s total: 0.0 B (0.0 B/s) +unpacking linux/amd64 sha256:c0e9560cda118f9ec63ddefb4a173a2b2a0347082d7dff7dc14272e7841a5b5a... + + +root@qemux86-64:~# ctr run -t docker.io/library/alpine:latest dtest /bin/sh +/ # uname -a +Linux qemux86-64 5.8.13-yocto-standard #1 SMP PREEMPT Tue Oct 6 12:23:29 UTC 2020 x86_64 Linux +/ # + + + # root@qemux86-64:~# ctr c list +CONTAINER IMAGE RUNTIME +dtest docker.io/library/alpine:latest io.containerd.runc.v2 + +root@qemux86-64:~# ctr c delete dtest +``` \ No newline at end of file diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers/0001-Add-build-option-GODEBUG-1.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers/0001-Add-build-option-GODEBUG-1.patch new file mode 100644 index 000000000..8b43c8a0d --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers/0001-Add-build-option-GODEBUG-1.patch @@ -0,0 +1,32 @@ +From 84874e47aa2025b8e73df0286c44f3b8a1d9fdb2 Mon Sep 17 00:00:00 2001 +From: Hongxu Jia +Date: Mon, 2 Sep 2019 16:20:07 +0800 +Subject: [PATCH] Add build option "GODEBUG=1" + +Make will generate GDB friendly binary with this build option. + +Signed-off-by: Hui Zhu + +Upstream-Status: Backport [c5a0c7f491b435e4eb45972903b00e2d8ed46495] + +Partly backport and refresh to v1.2.7 +Signed-off-by: Hongxu Jia +--- + src/import/Makefile | 8 ++++++-- + 1 file changed, 6 insertions(+), 2 deletions(-) + +Index: git/src/import/Makefile +=================================================================== +--- git.orig/src/import/Makefile 2020-10-12 08:09:41.638977052 -0700 ++++ git/src/import/Makefile 2020-10-12 08:10:49.783074373 -0700 +@@ -72,6 +72,10 @@ + COMMANDS=ctr containerd containerd-stress + MANPAGES=ctr.8 containerd.8 containerd-config.8 containerd-config.toml.5 + ++ifndef GODEBUG ++ EXTRA_LDFLAGS += -s -w ++endif ++ + ifdef BUILDTAGS + GO_BUILDTAGS = ${BUILDTAGS} + endif diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers/0001-Makefile-allow-GO_BUILD_FLAGS-to-be-externally-speci.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers/0001-Makefile-allow-GO_BUILD_FLAGS-to-be-externally-speci.patch new file mode 100644 index 000000000..7f4d75182 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers/0001-Makefile-allow-GO_BUILD_FLAGS-to-be-externally-speci.patch @@ -0,0 +1,38 @@ +From 474b93f8f643651144304a6971ef476add7f06f8 Mon Sep 17 00:00:00 2001 +From: Bruce Ashfield +Date: Tue, 25 May 2021 12:49:41 -0400 +Subject: [PATCH] Makefile: allow GO_BUILD_FLAGS to be externally specified + +Since our oe-core go infrastructure insists on both -pie and static +builds (for the most part), and that is not recommended by many +packages, we end up with errors like: + + cannot find package runtime/cgo (using -importcfg) + ... + recipe-sysroot-native/usr/lib/aarch64-poky-linux/go/pkg/tool/linux_amd64/link: + cannot open file : open : no such file or directory + +Upstream-Status: Inappropriate: specific to OE go configuration and build + +Signed-off-by: Bruce Ashfield +--- + Makefile | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git git.orig/src/import/Makefile git.orig/src/import/Makefile +index c61418e60..54a10eb42 100644 +--- git.orig/src/import/Makefile ++++ git.orig/src/import/Makefile +@@ -112,7 +112,8 @@ endif + GOPATHS=$(shell echo ${GOPATH} | tr ":" "\n" | tr ";" "\n") + + TESTFLAGS_RACE= +-GO_BUILD_FLAGS= ++# allow flags to be exported and picked up. ++# GO_BUILD_FLAGS= + # See Golang issue re: '-trimpath': https://github.com/golang/go/issues/13809 + GO_GCFLAGS=$(shell \ + set -- ${GOPATHS}; \ +-- +2.19.1 + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers_git.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers_git.bb new file mode 100644 index 000000000..fbf0c64c7 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers_git.bb @@ -0,0 +1,127 @@ +HOMEPAGE = "https://github.com/docker/containerd" +SUMMARY = "containerd is a daemon to control runC" +DESCRIPTION = "containerd is a daemon to control runC, built for performance and density. \ + containerd leverages runC's advanced features such as seccomp and user namespace \ + support as well as checkpoint and restore for cloning and live migration of containers." + + +SRCREV = "69e5db821af6458b4078d654ad3dcb3f31faa522" +SRC_URI = "git://github.com/containerd/containerd;branch=release/1.5;protocol=https \ + file://0001-Add-build-option-GODEBUG-1.patch \ + file://0001-Makefile-allow-GO_BUILD_FLAGS-to-be-externally-speci.patch \ + " + +# Apache-2.0 for containerd +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/import/LICENSE;md5=1269f40c0d099c21a871163984590d89" + +CONTAINERD_VERSION = "v1.5.5" + +EXTRA_OEMAKE += "GODEBUG=1" + +PROVIDES += "virtual/containerd" +RPROVIDES:${PN} = "virtual-containerd" + +S = "${WORKDIR}/git" + +PV = "${CONTAINERD_VERSION}+git${SRCPV}" + +inherit go +inherit goarch + +GO_IMPORT = "import" + +CONTAINERD_PKG="github.com/containerd/containerd" + +INSANE_SKIP:${PN} += "ldflags" + +do_configure[noexec] = "1" + +do_compile() { + export GOARCH="${TARGET_GOARCH}" + + # link fixups for compilation + rm -f ${S}/src/import/vendor/src + ln -sf ./ ${S}/src/import/vendor/src + + mkdir -p ${S}/src/import/vendor/src/github.com/containerd/containerd/ + mkdir -p ${S}/src/import/vendor/src/github.com/containerd/containerd/pkg/ + mkdir -p ${S}/src/import/vendor/src/github.com/containerd/containerd/contrib/ + # without this, the stress test parts of the build fail + cp ${S}/src/import/*.go ${S}/src/import/vendor/src/github.com/containerd/containerd + + for c in content timeout ttrpcutil oom stdio process errdefs fs images mount snapshots linux api runtimes defaults progress \ + protobuf reference diff platforms runtime remotes version archive dialer gc metadata \ + metrics filters identifiers labels leases plugin server services \ + cmd cio containers namespaces oci events log reaper sys rootfs nvidia seed apparmor seccomp \ + cap cri userns atomic ioutil os registrar seutil runtimeoptions netns; do + if [ -d ${S}/src/import/${c} ]; then + ln -sfn ${S}/src/import/${c} ${S}/src/import/vendor/github.com/containerd/containerd/${c} + fi + if [ -d ${S}/src/import/pkg/${c} ]; then + ln -sfn ${S}/src/import/pkg/${c} ${S}/src/import/vendor/github.com/containerd/containerd/pkg/${c} + fi + if [ -d ${S}/src/import/contrib/${c} ]; then + ln -sfn ${S}/src/import/contrib/${c} ${S}/src/import/vendor/github.com/containerd/containerd/contrib/${c} + fi + done + + export GOPATH="${S}/src/import/.gopath:${S}/src/import/vendor:${STAGING_DIR_TARGET}/${prefix}/local/go" + export GOROOT="${STAGING_DIR_NATIVE}/${nonarch_libdir}/${HOST_SYS}/go" + + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export CGO_ENABLED="1" + export CGO_CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export BUILDTAGS="no_btrfs static_build netgo" + export CFLAGS="${CFLAGS}" + export LDFLAGS="${LDFLAGS}" + export SHIM_CGO_ENABLED="${CGO_ENABLED}" + # fixes: + # cannot find package runtime/cgo (using -importcfg) + # ... recipe-sysroot-native/usr/lib/aarch64-poky-linux/go/pkg/tool/linux_amd64/link: + # cannot open file : open : no such file or directory + export GO_BUILD_FLAGS="-a -pkgdir dontusecurrentpkgs" + export GO111MODULE=off + + cd ${S}/src/import + oe_runmake binaries +} + +inherit systemd +SYSTEMD_PACKAGES = "${@bb.utils.contains('DISTRO_FEATURES','systemd','${PN}','',d)}" +SYSTEMD_SERVICE:${PN} = "${@bb.utils.contains('DISTRO_FEATURES','systemd','containerd.service','',d)}" + +do_install() { + mkdir -p ${D}/${bindir} + + cp ${S}/src/import/bin/containerd ${D}/${bindir}/containerd + cp ${S}/src/import/bin/containerd-shim ${D}/${bindir}/containerd-shim + cp ${S}/src/import/bin/containerd-shim-runc-v1 ${D}/${bindir}/containerd-shim-runc-v1 + cp ${S}/src/import/bin/containerd-shim-runc-v2 ${D}/${bindir}/containerd-shim-runc-v2 + cp ${S}/src/import/bin/ctr ${D}/${bindir}/containerd-ctr + + ln -sf containerd ${D}/${bindir}/docker-containerd + ln -sf containerd-shim ${D}/${bindir}/docker-containerd-shim + ln -sf containerd-ctr ${D}/${bindir}/docker-containerd-ctr + + ln -sf containerd-ctr ${D}/${bindir}/ctr + + if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then + install -d ${D}${systemd_unitdir}/system + install -m 644 ${S}/src/import/containerd.service ${D}/${systemd_unitdir}/system + # adjust from /usr/local/bin to /usr/bin/ + sed -e "s:/usr/local/bin/containerd:${bindir}/containerd:g" -i ${D}/${systemd_unitdir}/system/containerd.service + fi +} + +FILES:${PN} += "${systemd_system_unitdir}/*" + +INSANE_SKIP:${PN} += "ldflags already-stripped" + +COMPATIBLE_HOST = "^(?!(qemu)?mips).*" + +RDEPENDS:${BPN} += " virtual-runc" + +CVE_PRODUCT = "containerd" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/files/0001-build-use-oe-provided-GO-and-flags.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/files/0001-build-use-oe-provided-GO-and-flags.patch new file mode 100644 index 000000000..544881ef7 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/files/0001-build-use-oe-provided-GO-and-flags.patch @@ -0,0 +1,64 @@ +From 408e8b526d490af817a64b7220e8e2c3789de58f Mon Sep 17 00:00:00 2001 +From: Bruce Ashfield +Date: Sun, 10 Feb 2019 23:46:06 +0000 +Subject: [PATCH] build: use oe provided GO and flags + +We want to use the go compiler as defined in the oe-enviroment, not the +generic call to 'go'. Without changing this, we'll get things like cgo +errors and invalid flag combos. + +Signed-off-by: Bruce Ashfield +--- + Makefile | 8 ++++---- + 1 file changed, 4 insertions(+), 4 deletions(-) + +Index: git/src/import/Makefile +=================================================================== +--- git.orig/src/import/Makefile ++++ git/src/import/Makefile +@@ -121,7 +121,7 @@ + TESTFLAGS_PARALLEL ?= 8 + + # Use this to replace `go test` with, for instance, `gotestsum` +-GOTEST ?= go test ++GOTEST ?= $(GO) test + + OUTPUTDIR = $(join $(ROOTDIR), _output) + CRIDIR=$(OUTPUTDIR)/cri +@@ -169,7 +169,7 @@ + + build: ## build the go packages + @echo "$(WHALE) $@" +- @go build ${DEBUG_GO_GCFLAGS} ${GO_GCFLAGS} ${GO_BUILD_FLAGS} ${EXTRA_FLAGS} ${GO_LDFLAGS} ${PACKAGES} ++ @$(GO) build ${DEBUG_GO_GCFLAGS} ${GO_GCFLAGS} ${GO_BUILD_FLAGS} ${EXTRA_FLAGS} ${GO_LDFLAGS} ${PACKAGES} + + test: ## run tests, except integration tests and tests that require root + @echo "$(WHALE) $@" +@@ -201,7 +201,7 @@ + + define BUILD_BINARY + @echo "$(WHALE) $@" +-@go build ${DEBUG_GO_GCFLAGS} ${GO_GCFLAGS} ${GO_BUILD_FLAGS} -o $@ ${GO_LDFLAGS} ${GO_TAGS} ./$< ++@$(GO) build ${DEBUG_GO_GCFLAGS} ${GO_GCFLAGS} ${GO_BUILD_FLAGS} -o $@ ${GO_LDFLAGS} ${GO_TAGS} ./$< + endef + + # Build a binary from a cmd. +@@ -210,15 +210,15 @@ + + bin/containerd-shim: cmd/containerd-shim FORCE # set !cgo and omit pie for a static shim build: https://github.com/golang/go/issues/17789#issuecomment-258542220 + @echo "$(WHALE) bin/containerd-shim" +- @CGO_ENABLED=${SHIM_CGO_ENABLED} go build ${GO_BUILD_FLAGS} -o bin/containerd-shim ${SHIM_GO_LDFLAGS} ${GO_TAGS} ./cmd/containerd-shim ++ @CGO_ENABLED=${SHIM_CGO_ENABLED} $(GO) build -a -pkgdir dontusecurrentpkgs ${GO_BUILD_FLAGS} -o bin/containerd-shim ${SHIM_GO_LDFLAGS} ${GO_TAGS} ./cmd/containerd-shim + + bin/containerd-shim-runc-v1: cmd/containerd-shim-runc-v1 FORCE # set !cgo and omit pie for a static shim build: https://github.com/golang/go/issues/17789#issuecomment-258542220 + @echo "$(WHALE) bin/containerd-shim-runc-v1" +- @CGO_ENABLED=${SHIM_CGO_ENABLED} go build ${GO_BUILD_FLAGS} -o bin/containerd-shim-runc-v1 ${SHIM_GO_LDFLAGS} ${GO_TAGS} ./cmd/containerd-shim-runc-v1 ++ @CGO_ENABLED=${SHIM_CGO_ENABLED} $(GO) build -a -pkgdir dontusecurrentpkgs ${GO_BUILD_FLAGS} -o bin/containerd-shim-runc-v1 ${SHIM_GO_LDFLAGS} ${GO_TAGS} ./cmd/containerd-shim-runc-v1 + + bin/containerd-shim-runc-v2: cmd/containerd-shim-runc-v2 FORCE # set !cgo and omit pie for a static shim build: https://github.com/golang/go/issues/17789#issuecomment-258542220 + @echo "$(WHALE) bin/containerd-shim-runc-v2" +- @CGO_ENABLED=${SHIM_CGO_ENABLED} go build ${GO_BUILD_FLAGS} -o bin/containerd-shim-runc-v2 ${SHIM_GO_LDFLAGS} ${GO_TAGS} ./cmd/containerd-shim-runc-v2 ++ @CGO_ENABLED=${SHIM_CGO_ENABLED} $(GO) build -a -pkgdir dontusecurrentpkgs ${GO_BUILD_FLAGS} -o bin/containerd-shim-runc-v2 ${SHIM_GO_LDFLAGS} ${GO_TAGS} ./cmd/containerd-shim-runc-v2 + + binaries: $(BINARIES) ## build binaries + @echo "$(WHALE) $@" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/docker-moby_git.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/docker-moby_git.bb new file mode 100644 index 000000000..138d9d22e --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/docker-moby_git.bb @@ -0,0 +1,60 @@ +HOMEPAGE = "http://www.docker.com" +SUMMARY = "Linux container runtime" +DESCRIPTION = "Linux container runtime \ + Docker complements kernel namespacing with a high-level API which \ + operates at the process level. It runs unix processes with strong \ + guarantees of isolation and repeatability across servers. \ + . \ + Docker is a great building block for automating distributed systems: \ + large-scale web deployments, database clusters, continuous deployment \ + systems, private PaaS, service-oriented architectures, etc. \ + . \ + This package contains the daemon and client, which are \ + officially supported on x86_64 and arm hosts. \ + Other architectures are considered experimental. \ + . \ + Also, note that kernel version 3.10 or above is required for proper \ + operation of the daemon process, and that any lower versions may have \ + subtle and/or glaring issues. \ + " + +# Notes: +# - This docker variant uses moby and the other individually maintained +# upstream variants for SRCREVs +# - It is a true community / upstream tracking build, and is not a +# docker curated set of commits or additions +# - The version number on this package tracks the versions assigned to +# the curated docker-ce repository. This allows compatibility and +# functional equivalence, while allowing new features to be more +# easily added. +# - This could be called "docker-moby" or just "moby" in the future, but +# that would require the creation of a virtual/docker dependency, which +# is possible, but overkill at the moment (while we wait for the upstream +# to stop changing). +# - The common components of this recipe and docker-ce do need to be moved +# to a docker.inc recipe + +SRCREV_moby = "d24c6dc5cf5e68dfb30027b2db454099566a9b9e" +SRCREV_libnetwork = "64b7a4574d1426139437d20e81c0b6d391130ec8" +SRCREV_cli = "62eae52c2a76f4c1dcf79dfc7b5ea3bf5eebab8b" +SRCREV_FORMAT = "moby_libnetwork" +SRC_URI = "\ + git://github.com/moby/moby.git;branch=20.10;name=moby;protocol=https \ + git://github.com/docker/libnetwork.git;branch=master;name=libnetwork;destsuffix=git/libnetwork;protocol=https \ + git://github.com/docker/cli;branch=20.10;name=cli;destsuffix=git/cli;protocol=https \ + file://docker.init \ + file://0001-libnetwork-use-GO-instead-of-go.patch \ + file://0001-cli-use-external-GO111MODULE-and-cross-compiler.patch \ + file://0001-dynbinary-use-go-cross-compiler.patch \ + " + +require docker.inc + +# Apache-2.0 for docker +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/import/LICENSE;md5=4859e97a9c7780e77972d989f0823f28" + +DOCKER_VERSION = "20.10.8" +PV = "${DOCKER_VERSION}+git${SRCREV_moby}" + +CVE_PRODUCT = "docker" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/docker.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/docker.inc new file mode 100644 index 000000000..40a3642c8 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/docker.inc @@ -0,0 +1,179 @@ +DEPENDS = " \ + go-cli \ + go-pty \ + go-context \ + go-mux \ + go-patricia \ + go-logrus \ + go-fsnotify \ + go-dbus \ + go-capability \ + go-systemd \ + btrfs-tools \ + sqlite3 \ + go-distribution \ + compose-file \ + go-connections \ + notary \ + grpc-go \ + libtool-native \ + libtool \ + " + +DEPENDS:append:class-target = " lvm2" +RDEPENDS:${PN} = "util-linux util-linux-unshare iptables \ + ${@bb.utils.contains('DISTRO_FEATURES', 'aufs', 'aufs-util', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '', 'cgroup-lite', d)} \ + bridge-utils \ + ca-certificates \ + " +RDEPENDS:${PN} += "virtual-containerd virtual-runc" + +RRECOMMENDS:${PN} = "kernel-module-dm-thin-pool kernel-module-nf-nat kernel-module-nf-conntrack-netlink kernel-module-xt-addrtype kernel-module-xt-masquerade" + +PROVIDES += "virtual/docker" + +# we want all the docker variant recpes to be installable via "docker" +PACKAGE_NAME = "docker" +RPROVIDES:${PN} += "docker" +RPROVIDES:${PN}-dbg += "docker-dbg" +RPROVIDES:${PN}-dev += "docker-dev" +RPROVIDES:${PN}-contrip += "docker-dev" + +inherit pkgconfig +PACKAGECONFIG ??= "docker-init" +PACKAGECONFIG[seccomp] = "seccomp,,libseccomp" +PACKAGECONFIG[docker-init] = ",,,docker-init" +PACKAGECONFIG[transient-config] = "transient-config" + + +GO_IMPORT = "import" +S = "${WORKDIR}/git" + + +inherit systemd update-rc.d +inherit go +inherit goarch +inherit pkgconfig + +do_configure[noexec] = "1" + +DOCKER_PKG="github.com/docker/docker" +# in order to exclude devicemapper and btrfs - https://github.com/docker/docker/issues/14056 +BUILD_TAGS ?= "exclude_graphdriver_btrfs exclude_graphdriver_devicemapper" + +do_compile() { + # Set GOPATH. See 'PACKAGERS.md'. Don't rely on + # docker to download its dependencies but rather + # use dependencies packaged independently. + cd ${S}/src/import + rm -rf .gopath + mkdir -p .gopath/src/"$(dirname "${DOCKER_PKG}")" + ln -sf ../../../.. .gopath/src/"${DOCKER_PKG}" + + mkdir -p .gopath/src/github.com/docker + ln -sf ${WORKDIR}/git/libnetwork .gopath/src/github.com/docker/libnetwork + ln -sf ${WORKDIR}/git/cli .gopath/src/github.com/docker/cli + + export GOPATH="${S}/src/import/.gopath:${S}/src/import/vendor:${STAGING_DIR_TARGET}/${prefix}/local/go" + export GOROOT="${STAGING_DIR_NATIVE}/${nonarch_libdir}/${HOST_SYS}/go" + + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export GOARCH=${TARGET_GOARCH} + export CGO_ENABLED="1" + export CGO_CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export DOCKER_BUILDTAGS='${BUILD_TAGS} ${PACKAGECONFIG_CONFARGS}' + export GO111MODULE=off + + export DISABLE_WARN_OUTSIDE_CONTAINER=1 + + cd ${S}/src/import/ + + # this is the unsupported built structure + # that doesn't rely on an existing docker + # to build this: + VERSION="${DOCKER_VERSION}" DOCKER_GITCOMMIT="${SRCREV_moby}" ./hack/make.sh dynbinary + + # build the cli + cd ${S}/src/import/.gopath/src/github.com/docker/cli + export CFLAGS="" + export LDFLAGS="" + export DOCKER_VERSION=${DOCKER_VERSION} + VERSION="${DOCKER_VERSION}" DOCKER_GITCOMMIT="${SRCREV_moby}" make dynbinary + + # build the proxy + cd ${S}/src/import/.gopath/src/github.com/docker/libnetwork + oe_runmake cross-local +} + +do_install() { + mkdir -p ${D}/${bindir} + cp ${WORKDIR}/git/cli/build/docker ${D}/${bindir}/docker + cp ${S}/src/import/bundles/dynbinary-daemon/dockerd ${D}/${bindir}/dockerd + cp ${WORKDIR}/git/libnetwork/bin/docker-proxy* ${D}/${bindir}/docker-proxy + + if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then + install -d ${D}${systemd_unitdir}/system + install -m 644 ${S}/src/import/contrib/init/systemd/docker.* ${D}/${systemd_unitdir}/system + # replaces one copied from above with one that uses the local registry for a mirror + install -m 644 ${S}/src/import/contrib/init/systemd/docker.service ${D}/${systemd_unitdir}/system + rm -f ${D}/${systemd_unitdir}/system/docker.service.rpm + fi + if ${@bb.utils.contains('DISTRO_FEATURES','sysvinit','true','false',d)}; then + install -d ${D}${sysconfdir}/init.d + install -m 0755 ${WORKDIR}/docker.init ${D}${sysconfdir}/init.d/docker.init + fi + # TLS key that docker creates at run-time if not found is what resides here + if ${@bb.utils.contains('PACKAGECONFIG','transient-config','true','false',d)}; then + install -d ${D}${sysconfdir} + ln -s ..${localstatedir}/run/docker ${D}${sysconfdir}/docker + else + install -d ${D}${sysconfdir}/docker + fi + + mkdir -p ${D}${datadir}/docker/ + install -m 0755 ${S}/src/import/contrib/check-config.sh ${D}${datadir}/docker/ +} + + +SYSTEMD_PACKAGES = "${@bb.utils.contains('DISTRO_FEATURES','systemd','${PN}','',d)}" +SYSTEMD_SERVICE:${PN} = "${@bb.utils.contains('DISTRO_FEATURES','systemd','docker.socket','',d)}" +SYSTEMD_AUTO_ENABLE:${PN} = "enable" + +INITSCRIPT_PACKAGES += "${@bb.utils.contains('DISTRO_FEATURES','sysvinit','${PN}','',d)}" +INITSCRIPT_NAME:${PN} = "${@bb.utils.contains('DISTRO_FEATURES','sysvinit','docker.init','',d)}" +INITSCRIPT_PARAMS:${PN} = "defaults" + +inherit useradd +USERADD_PACKAGES = "${PN}" +GROUPADD_PARAM:${PN} = "-r docker" + +COMPATIBLE_HOST = "^(?!(qemu)?mips).*" + +INSANE_SKIP:${PN} += "ldflags textrel" + +FILES:${PN} += "${systemd_unitdir}/system/* ${sysconfdir}/docker" + +PACKAGES =+ "${PN}-contrib" +FILES:${PN}-contrib += "${datadir}/docker/check-config.sh" +RDEPENDS:${PN}-contrib += "bash" + +# By the docker-packaging repository and https://docs.docker.com/engine/install/centos/#installation-methods +# docker is packaged by most distros with a split between the engine and the CLI. +# +# We do the same here, by introducing the -cli package +# +# But to keep existing use cases working, we also create a RDEPENDS between the main +# docker package (the engine) and the cli, so existing "docker" package installs will +# continue to work the same way. To have separate and non-redepending packages created +# set the DOCKER_UNIFIED_PACKAGE variable to False +# +PACKAGES =+ "${PN}-cli" +FILES:${PN}-cli += "${bindir}/docker" + +# set to "False" if packages should be generated for the cli and engine, and +# NOT rdepend to get a classic one-package install +DOCKER_UNIFIED_PACKAGE ?= "True" +RDEPENDS:${PN} += "${@bb.utils.contains("DOCKER_UNIFIED_PACKAGE", "True", "${PN}-cli", "", d)}" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-cli-use-external-GO111MODULE-and-cross-compiler.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-cli-use-external-GO111MODULE-and-cross-compiler.patch new file mode 100644 index 000000000..dc322612a --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-cli-use-external-GO111MODULE-and-cross-compiler.patch @@ -0,0 +1,27 @@ +From 650c882d3c53db118b01dd5e15fa1bc0ddaa36f1 Mon Sep 17 00:00:00 2001 +From: Bruce Ashfield +Date: Thu, 15 Apr 2021 11:28:05 -0400 +Subject: [PATCH] cli: use external GO111MODULE and cross compiler + +Signed-off-by: Bruce Ashfield +--- + git/cli/scripts/build/binary | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git git/cli/scripts/build/binary git/cli/scripts/build/binary +index e4c5e12a6b..7c47b75c2f 100755 +--- git/cli/scripts/build/binary ++++ git/cli/scripts/build/binary +@@ -73,8 +73,7 @@ fi + + echo "Building $GO_LINKMODE $(basename "${TARGET}")" + +-export GO111MODULE=auto + +-go build -o "${TARGET}" -tags "${GO_BUILDTAGS}" --ldflags "${LDFLAGS}" ${GO_BUILDMODE} "${SOURCE}" ++${GO} build -o "${TARGET}" -tags "${GO_BUILDTAGS}" --ldflags "${LDFLAGS}" ${GO_BUILDMODE} "${SOURCE}" + + ln -sf "$(basename "${TARGET}")" "$(dirname "${TARGET}")/docker" +-- +2.19.1 + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-dynbinary-use-go-cross-compiler.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-dynbinary-use-go-cross-compiler.patch new file mode 100644 index 000000000..971c60d78 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-dynbinary-use-go-cross-compiler.patch @@ -0,0 +1,23 @@ +From bbf600cc4d46c3f7ec0c1b486790a2402d41f550 Mon Sep 17 00:00:00 2001 +From: Bruce Ashfield +Date: Tue, 30 Jun 2020 22:23:33 -0400 +Subject: [PATCH] dynbinary: use go cross compiler + +Signed-off-by: Bruce Ashfield +--- + hack/make/.binary | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +Index: git/src/import/hack/make/.binary +=================================================================== +--- git.orig/src/import/hack/make/.binary ++++ git/src/import/hack/make/.binary +@@ -81,7 +81,7 @@ + + echo "Building: $DEST/$BINARY_FULLNAME" + echo "GOOS=\"${GOOS}\" GOARCH=\"${GOARCH}\" GOARM=\"${GOARM}\"" +- go build \ ++ ${GO} build \ + -o "$DEST/$BINARY_FULLNAME" \ + "${BUILDFLAGS[@]}" \ + -ldflags " diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-libnetwork-use-GO-instead-of-go.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-libnetwork-use-GO-instead-of-go.patch new file mode 100644 index 000000000..c623b260a --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-libnetwork-use-GO-instead-of-go.patch @@ -0,0 +1,59 @@ +From 04c07804930faad708218a3134c81de06a9c742a Mon Sep 17 00:00:00 2001 +From: Bruce Ashfield +Date: Fri, 6 Apr 2018 23:58:22 -0400 +Subject: [PATCH] libnetwork: use $(GO) instead of go + +Ensure that the libnetwork makefile uses the go cross flags and +utilities. + +Signed-off-by: Bruce Ashfield +--- + Makefile | 14 +++++++------- + 1 file changed, 7 insertions(+), 7 deletions(-) + +Index: git/libnetwork/Makefile +=================================================================== +--- git.orig/libnetwork/Makefile ++++ git/libnetwork/Makefile +@@ -45,9 +45,9 @@ + build-local: + @echo "🐳 $@" + @mkdir -p "bin" +- go build -tags experimental -o "bin/dnet" ./cmd/dnet +- go build -o "bin/docker-proxy" ./cmd/proxy +- CGO_ENABLED=0 go build -o "bin/diagnosticClient" ./cmd/diagnostic ++ $(GO) build -tags experimental -o "bin/dnet" ./cmd/dnet ++ $(GO) build -o "bin/proxy" ./cmd/proxy ++ CGO_ENABLED=0 $(GO) build -o "bin/diagnosticClient" ./cmd/diagnostic + CGO_ENABLED=0 go build -o "bin/testMain" ./cmd/networkdb-test/testMain.go + + build-images: +@@ -82,8 +82,8 @@ + + cross-local: + @echo "🐳 $@" +- go build -o "bin/dnet-$$GOOS-$$GOARCH" ./cmd/dnet +- go build -o "bin/docker-proxy-$$GOOS-$$GOARCH" ./cmd/proxy ++ @$(GO) build -linkshared $(GOBUILDFLAGS) -o "bin/docker-proxy-$$GOOS-$$GOARCH" ./cmd/proxy ++ @$(GO) build -linkshared $(GOBUILDFLAGS) -o "bin/dnet-$$GOOS-$$GOARCH" ./cmd/dnet + + # Rebuild protocol buffers. + # These may need to be rebuilt after vendoring updates, so .proto files are declared .PHONY so they are always rebuilt. +@@ -130,7 +130,7 @@ + if ls $$dir/*.go &> /dev/null; then \ + pushd . &> /dev/null ; \ + cd $$dir ; \ +- go test ${INSIDECONTAINER} -test.parallel 5 -test.v -covermode=count -coverprofile=./profile.tmp ; \ ++ $(GO) test ${INSIDECONTAINER} -test.parallel 5 -test.v -covermode=count -coverprofile=./profile.tmp ; \ + ret=$$? ;\ + if [ $$ret -ne 0 ]; then exit $$ret; fi ;\ + popd &> /dev/null; \ +@@ -145,7 +145,7 @@ + # Depends on binaries because vet will silently fail if it can not load compiled imports + vet: ## run go vet + @echo "🐳 $@" +- @test -z "$$(go vet ${PACKAGES} 2>&1 | grep -v 'constant [0-9]* not a string in call to Errorf' | egrep -v '(timestamp_test.go|duration_test.go|exit status 1)' | tee /dev/stderr)" ++ @test -z "$$($(GO) vet ${PACKAGES} 2>&1 | grep -v 'constant [0-9]* not a string in call to Errorf' | egrep -v '(timestamp_test.go|duration_test.go|exit status 1)' | tee /dev/stderr)" + + misspell: + @echo "🐳 $@" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/docker.init b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/docker.init new file mode 100644 index 000000000..24f8fea67 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/docker.init @@ -0,0 +1,131 @@ +#!/bin/sh +# +# /etc/rc.d/init.d/docker +# +# Daemon for docker.com +# +# chkconfig: 2345 95 95 +# description: Daemon for docker.com + +### BEGIN INIT INFO +# Provides: docker +# Required-Start: $network cgconfig +# Required-Stop: +# Should-Start: +# Should-Stop: +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: start and stop docker +# Description: Daemon for docker.com +### END INIT INFO + +# Source function library. +. /etc/init.d/functions + +prog="dockerd" +unshare=/usr/bin/unshare +exec="/usr/bin/$prog" +pidfile="/var/run/$prog.pid" +lockfile="/var/lock/subsys/$prog" +logfile="/var/log/$prog" +other_args="--pidfile $pidfile --registry-mirror=http://localhost:5000 --insecure-registry=http://localhost:5000 --raw-logs" + +[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog + +start() { + [ -x $exec ] || exit 5 + + check_for_cleanup + + if ! [ -f $pidfile ]; then + printf "Starting $prog:\t" + echo -e "\n$(date)\n" >> $logfile + "$unshare" -m -- $exec $other_args >> $logfile 2>&1 & + pid=$! + touch $lockfile + # wait up to 10 seconds for the pidfile to exist. see + # https://github.com/docker/docker/issues/5359 + tries=0 + while [ ! -f $pidfile -a $tries -lt 10 ]; do + sleep 1 + tries=$((tries + 1)) + done + success + echo + else + failure + echo + printf "$pidfile still exists...\n" + exit 7 + fi +} + +stop() { + echo -n $"Stopping $prog: " + killproc $prog + retval=$? + echo + [ $retval -eq 0 ] && rm -f $lockfile + return $retval +} + +restart() { + stop + start +} + +reload() { + restart +} + +force_reload() { + restart +} + +rh_status() { + status $prog +} + +rh_status_q() { + rh_status >/dev/null 2>&1 +} + + +check_for_cleanup() { + if [ -f ${pidfile} ]; then + /bin/ps -fp $(cat ${pidfile}) > /dev/null || rm ${pidfile} + fi +} + +case "$1" in + start) + rh_status_q && exit 0 + $1 + ;; + stop) + rh_status_q || exit 0 + $1 + ;; + restart) + $1 + ;; + reload) + rh_status_q || exit 7 + $1 + ;; + force-reload) + force_reload + ;; + status) + rh_status + ;; + condrestart|try-restart) + rh_status_q || exit 0 + restart + ;; + *) + echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" + exit 2 +esac + +exit $? diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/files/0001-Makefile-respect-GOBUILDFLAGS-for-runc-and-remove-re.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/files/0001-Makefile-respect-GOBUILDFLAGS-for-runc-and-remove-re.patch new file mode 100644 index 000000000..c855d7b57 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/files/0001-Makefile-respect-GOBUILDFLAGS-for-runc-and-remove-re.patch @@ -0,0 +1,37 @@ +From 0fe50d2ca4517f5e3070585040f35ace413acd44 Mon Sep 17 00:00:00 2001 +From: Bruce Ashfield +Date: Tue, 24 Aug 2021 11:38:23 -0400 +Subject: [PATCH] Makefile: respect GOBUILDFLAGS for runc and remove recvtty + from static + +Signed-off-by: Chen Qi +[bva: refreshed for release 1.0.2] +Signed-off-by: Bruce Ashfield +--- + Makefile | 3 +-- + 1 file changed, 1 insertion(+), 2 deletions(-) + +diff --git a/src/import/Makefile b/src/import/Makefile +index efbddf0d..4b174c80 100644 +--- a/src/import/Makefile ++++ b/src/import/Makefile +@@ -24,7 +24,7 @@ ifeq ($(shell $(GO) env GOOS),linux) + endif + endif + endif +-GO_BUILD := $(GO) build -trimpath $(MOD_VENDOR) $(GO_BUILDMODE) $(EXTRA_FLAGS) -tags "$(BUILDTAGS)" \ ++GO_BUILD := $(GO) build $(GOBUILDFLAGS) -trimpath $(MOD_VENDOR) $(GO_BUILDMODE) $(EXTRA_FLAGS) -tags "$(BUILDTAGS)" \ + -ldflags "-X main.gitCommit=$(COMMIT) -X main.version=$(VERSION) $(EXTRA_LDFLAGS)" + GO_BUILD_STATIC := CGO_ENABLED=1 $(GO) build -trimpath $(MOD_VENDOR) $(EXTRA_FLAGS) -tags "$(BUILDTAGS) netgo osusergo" \ + -ldflags "-extldflags -static -X main.gitCommit=$(COMMIT) -X main.version=$(VERSION) $(EXTRA_LDFLAGS)" +@@ -41,7 +41,6 @@ recvtty: + + static: + $(GO_BUILD_STATIC) -o runc . +- $(GO_BUILD_STATIC) -o contrib/cmd/recvtty/recvtty ./contrib/cmd/recvtty + + release: + script/release.sh -r release/$(VERSION) -v $(VERSION) +-- +2.19.1 + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker/0001-runc-Add-console-socket-dev-null.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker/0001-runc-Add-console-socket-dev-null.patch new file mode 100644 index 000000000..bcf4c1037 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker/0001-runc-Add-console-socket-dev-null.patch @@ -0,0 +1,30 @@ +From 3fff2a3505fba1d1ff0074edff15708a77f6cfa9 Mon Sep 17 00:00:00 2001 +From: Jason Wessel +Date: Wed, 12 Jul 2017 13:35:03 -0700 +Subject: [PATCH] runc: Add --console-socket=/dev/null + +This allows for setting up a detached session where you do not want to +set the terminal to false in the config.json. More or less this is a +runtime override. + +Signed-off-by: Jason Wessel +--- + utils_linux.go | 5 +++++ + 1 file changed, 5 insertions(+) + +Index: git/src/import/utils_linux.go +=================================================================== +--- git.orig/src/import/utils_linux.go ++++ git/src/import/utils_linux.go +@@ -267,6 +267,11 @@ + } + + func (r *runner) run(config *specs.Process) (int, error) { ++ if (r.consoleSocket == "/dev/null") { ++ r.detach = false ++ r.consoleSocket = "" ++ config.Terminal = false ++ } + var err error + defer func() { + if err != nil { diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker/0001-runc-docker-SIGUSR1-daemonize.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker/0001-runc-docker-SIGUSR1-daemonize.patch new file mode 100644 index 000000000..4350c40fb --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker/0001-runc-docker-SIGUSR1-daemonize.patch @@ -0,0 +1,131 @@ +From cd7d76a6d1ecb1856f6ed666fb5c30dc105aa94e Mon Sep 17 00:00:00 2001 +From: Jason Wessel +Date: Tue, 5 Dec 2017 18:28:28 -0800 +Subject: [PATCH] runc-docker: Allow "run start ..." to daemonize with $SIGUSR1_PARENT_PID + +The runc-docker has all the code in it to properly run a stop hook if +you use it in the foreground. It doesn't work in the back ground +because there is no way for a golang application to fork a child exit +out of the parent process because all the golang threads stay with the +parent. + +This patch has three parts that happen ONLY when $SIGUSR1_PARENT_PID +is set. + +1) The code was copied which performs the normal the signal handling + block which is used for the foreground operation of runc. + +2) At the point where runc start would normally exit, it closes + stdin/stdout/stderr so it would be possible to daemonize "runc start ...". + +3) The code to send a SIGUSR1 to the parent process was added. The + idea being that a parent process would simply exit at that point + because it was blocking until runc performed everything it was + required to perform. + +Signed-off-by: Jason Wessel +--- + signals.go | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++---- + utils_linux.go | 2 +- + 2 files changed, 51 insertions(+), 5 deletions(-) + +Index: git/src/import/signals.go +=================================================================== +--- git.orig/src/import/signals.go ++++ git/src/import/signals.go +@@ -5,7 +5,9 @@ + import ( + "os" + "os/signal" ++ "syscall" // only for Signal + ++ "strconv" + "github.com/opencontainers/runc/libcontainer" + "github.com/opencontainers/runc/libcontainer/system" + "github.com/opencontainers/runc/libcontainer/utils" +@@ -55,9 +57,6 @@ + func (h *signalHandler) forward(process *libcontainer.Process, tty *tty, detach bool) (int, error) { + // make sure we know the pid of our main process so that we can return + // after it dies. +- if detach && h.notifySocket == nil { +- return 0, nil +- } + + pid1, err := process.Pid() + if err != nil { +@@ -67,12 +66,61 @@ + if h.notifySocket != nil { + if detach { + _ = h.notifySocket.run(pid1) +- return 0, nil + } + _ = h.notifySocket.run(os.Getpid()) + go func() { _ = h.notifySocket.run(0) }() + } + ++ if (detach) { ++ // This allows the parent process to daemonize this process ++ // so long as stdin/stderr/stdout are closed ++ if envVal := os.Getenv("SIGUSR1_PARENT_PID"); envVal != "" { ++ // Close stdin/stdout/stderr ++ os.Stdin.Close() ++ os.Stdout.Close() ++ os.Stderr.Close() ++ // Notify parent to detach ++ i, err := strconv.Atoi(envVal) ++ if (err != nil) { ++ return 0, nil ++ } ++ unix.Kill(i, unix.SIGUSR1) ++ // Loop waiting on the child to signal or exit, ++ // after which all stop hooks will be run ++ for s := range h.signals { ++ switch s { ++ case unix.SIGCHLD: ++ exits, err := h.reap() ++ if err != nil { ++ logrus.Error(err) ++ } ++ for _, e := range exits { ++ logrus.WithFields(logrus.Fields{ ++ "pid": e.pid, ++ "status": e.status, ++ }).Debug("process exited") ++ if e.pid == pid1 { ++ // call Wait() on the process even though we already have the exit ++ // status because we must ensure that any of the go specific process ++ // fun such as flushing pipes are complete before we return. ++ process.Wait() ++ if h.notifySocket != nil { ++ h.notifySocket.Close() ++ } ++ return e.status, nil ++ } ++ } ++ default: ++ logrus.Debugf("sending signal to process %s", s) ++ if err := unix.Kill(pid1, s.(syscall.Signal)); err != nil { ++ logrus.Error(err) ++ } ++ } ++ } ++ } ++ return 0, nil ++ } ++ + // Perform the initial tty resize. Always ignore errors resizing because + // stdout might have disappeared (due to races with when SIGHUP is sent). + _ = tty.resize() +Index: git/src/import/utils_linux.go +=================================================================== +--- git.orig/src/import/utils_linux.go ++++ git/src/import/utils_linux.go +@@ -345,7 +345,7 @@ + if err != nil { + r.terminate(process) + } +- if detach { ++ if (detach && os.Getenv("SIGUSR1_PARENT_PID") == "") { + return 0, nil + } + if err == nil { diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker_git.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker_git.bb new file mode 100644 index 000000000..4a46fd2f3 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker_git.bb @@ -0,0 +1,14 @@ +include runc.inc + +# Note: this rev is before the required protocol field, update when all components +# have been updated to match. +SRCREV_runc-docker = "04bcb7c71550a0212bfb876db7bac723ae13296a" +SRC_URI = "git://github.com/opencontainers/runc;branch=release-1.0;name=runc-docker;protocol=https \ + file://0001-runc-Add-console-socket-dev-null.patch \ + file://0001-Makefile-respect-GOBUILDFLAGS-for-runc-and-remove-re.patch \ + file://0001-runc-docker-SIGUSR1-daemonize.patch \ + " + +RUNC_VERSION = "1.0.2" + +CVE_PRODUCT = "runc" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-opencontainers_git.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-opencontainers_git.bb new file mode 100644 index 000000000..16ef5098f --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-opencontainers_git.bb @@ -0,0 +1,10 @@ +include runc.inc + +SRCREV = "86d83333d765f4535e4898d6778388dab715eb7c" +SRC_URI = " \ + git://github.com/opencontainers/runc;branch=release-1.0;protocol=https \ + file://0001-Makefile-respect-GOBUILDFLAGS-for-runc-and-remove-re.patch \ + " +RUNC_VERSION = "1.0.2" + +CVE_PRODUCT = "runc" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc.inc new file mode 100644 index 000000000..c8e742731 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc.inc @@ -0,0 +1,83 @@ +HOMEPAGE = "https://github.com/opencontainers/runc" +SUMMARY = "runc container cli tools" +DESCRIPTION = "runc is a CLI tool for spawning and running containers according to the OCI specification." + +# Apache-2.0 for containerd +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://src/import/LICENSE;md5=435b266b3899aa8a959f17d41c56def8" + +S = "${WORKDIR}/git" + +PV = "${RUNC_VERSION}+git${SRCPV}" + +inherit go +inherit goarch +inherit pkgconfig + +PACKAGECONFIG[seccomp] = "seccomp,,libseccomp" +PACKAGECONFIG[selinux] = "selinux,,libselinux" +# This PACKAGECONFIG serves the purpose of whether building runc as static or not +PACKAGECONFIG[static] = "" + +PACKAGECONFIG ??= "static \ + ${@bb.utils.contains('DISTRO_FEATURES', 'seccomp', 'seccomp', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'selinux', '', d)} \ + " + + +PROVIDES += "virtual/runc" +RPROVIDES:${PN} = "virtual-runc" + +GO_IMPORT = "import" + +LIBCONTAINER_PACKAGE="github.com/opencontainers/runc/libcontainer" + +do_configure[noexec] = "1" + + +DISTRO_BUILDTAGS ?= "${@bb.utils.contains('DISTRO_FEATURES', 'seccomp', 'seccomp', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'selinux', '', d)}" + +EXTRA_OEMAKE="BUILDTAGS='${PACKAGECONFIG_CONFARGS} ${DISTRO_BUILDTAGS}' GO=${GO}" + +do_compile() { + # Set GOPATH. See 'PACKAGERS.md'. Don't rely on + # docker to download its dependencies but rather + # use dependencies packaged independently. + cd ${S}/src/import + rm -rf .gopath + dname=`dirname "${LIBCONTAINER_PACKAGE}"` + bname=`basename "${LIBCONTAINER_PACKAGE}"` + mkdir -p .gopath/src/${dname} + + (cd .gopath/src/${dname}; ln -sf ../../../../../${bname} ${bname}) + export GOPATH="${S}/src/import/.gopath:${S}/src/import/vendor:${STAGING_DIR_TARGET}/${prefix}/local/go" + + # Fix up symlink for go-cross compiler + rm -f ${S}/src/import/vendor/src + ln -sf ./ ${S}/src/import/vendor/src + + # Pass the needed cflags/ldflags so that cgo + # can find the needed headers files and libraries + export CGO_ENABLED="1" + export CGO_CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export CGO_LDFLAGS="${LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" + export GO=${GO} + + export CFLAGS="" + export LDFLAGS="" + + if ${@bb.utils.contains('PACKAGECONFIG', 'static', 'true', 'false', d)}; then + oe_runmake static + else + oe_runmake runc + fi +} + +do_install() { + mkdir -p ${D}/${bindir} + + cp ${S}/src/import/runc ${D}/${bindir}/runc + ln -sf runc ${D}/${bindir}/docker-runc +} + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16.15.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16.15.inc new file mode 100644 index 000000000..50772346d --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16.15.inc @@ -0,0 +1,25 @@ +require go-common.inc + +GO_BASEVERSION = "1.16" +PV = "1.16.15" +FILESEXTRAPATHS:prepend := "${FILE_DIRNAME}/go-${GO_BASEVERSION}:" + +LIC_FILES_CHKSUM = "file://LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707" + +SRC_URI += "\ + file://0001-allow-CC-and-CXX-to-have-multiple-words.patch \ + file://0002-cmd-go-make-content-based-hash-generation-less-pedan.patch \ + file://0003-allow-GOTOOLDIR-to-be-overridden-in-the-environment.patch \ + file://0004-ld-add-soname-to-shareable-objects.patch \ + file://0005-make.bash-override-CC-when-building-dist-and-go_boot.patch \ + file://0006-cmd-dist-separate-host-and-target-builds.patch \ + file://0007-cmd-go-make-GOROOT-precious-by-default.patch \ + file://0008-use-GOBUILDMODE-to-set-buildmode.patch \ + file://0009-Revert-cmd-go-make-sure-CC-and-CXX-are-absolute.patch \ +" +SRC_URI[main.sha256sum] = "90a08c689279e35f3865ba510998c33a63255c36089b3ec206c912fc0568c3d3" + +# Upstream don't believe it is a signifiant real world issue and will only +# fix in 1.17 onwards where we can drop this. +# https://github.com/golang/go/issues/30999#issuecomment-910470358 +CVE_CHECK_WHITELIST += "CVE-2021-29923" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0001-allow-CC-and-CXX-to-have-multiple-words.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0001-allow-CC-and-CXX-to-have-multiple-words.patch new file mode 100644 index 000000000..5f4823be2 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0001-allow-CC-and-CXX-to-have-multiple-words.patch @@ -0,0 +1,33 @@ +From 9e3dc44cdfa58d96504d0a789dc82617dd5bef55 Mon Sep 17 00:00:00 2001 +From: Alex Kube +Date: Wed, 23 Oct 2019 21:01:13 +0430 +Subject: [PATCH 1/9] cmd/go: Allow CC and CXX to have multiple words + +Upstream-Status: Inappropriate [OE specific] + +Adapted to Go 1.13 from patches originally submitted to +the meta/recipes-devtools/go tree by +Matt Madison . + +Signed-off-by: Alexander J Kube + +--- + src/cmd/go/internal/envcmd/env.go | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/src/cmd/go/internal/envcmd/env.go ++++ b/src/cmd/go/internal/envcmd/env.go +@@ -103,11 +103,11 @@ func MkEnv() []cfg.EnvVar { + + cc := cfg.DefaultCC(cfg.Goos, cfg.Goarch) + if env := strings.Fields(cfg.Getenv("CC")); len(env) > 0 { +- cc = env[0] ++ cc = strings.Join(env, " ") + } + cxx := cfg.DefaultCXX(cfg.Goos, cfg.Goarch) + if env := strings.Fields(cfg.Getenv("CXX")); len(env) > 0 { +- cxx = env[0] ++ cxx = strings.Join(env, " ") + } + env = append(env, cfg.EnvVar{Name: "AR", Value: envOr("AR", "ar")}) + env = append(env, cfg.EnvVar{Name: "CC", Value: cc}) diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0002-cmd-go-make-content-based-hash-generation-less-pedan.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0002-cmd-go-make-content-based-hash-generation-less-pedan.patch new file mode 100644 index 000000000..04d0e496c --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0002-cmd-go-make-content-based-hash-generation-less-pedan.patch @@ -0,0 +1,219 @@ +From a13ae484e41139094505d2834437e9262a5315f7 Mon Sep 17 00:00:00 2001 +From: Alex Kube +Date: Wed, 23 Oct 2019 21:14:22 +0430 +Subject: [PATCH 2/9] cmd/go: make content-based hash generation less pedantic + +Upstream-Status: Inappropriate [OE specific] + +Go 1.10's build tool now uses content-based hashes to +determine when something should be built or re-built. +This same mechanism is used to maintain a built-artifact +cache for speeding up builds. + +However, the hashes it generates include information that +doesn't work well with OE, nor with using a shared runtime +library. + +First, it embeds path names to source files, unless +building within GOROOT. This prevents the building +of a package in GOPATH for later staging into GOROOT. + +This patch adds support for the environment variable +GOPATH_OMIT_IN_ACTIONID. If present, path name +embedding is disabled. + +Second, if cgo is enabled, the build ID for cgo-related +packages will include the current value of the environment +variables for invoking the compiler (CC, CXX, FC) and +any CGO_xxFLAGS variables. Only if the settings used +during a compilation exactly match, character for character, +the values used for compiling runtime/cgo or any other +cgo-enabled package being imported, will the tool +decide that the imported package is up-to-date. + +This is done to help ensure correctness, but is overly +simplistic and effectively prevents the reuse of built +artifacts that use cgo (or shared runtime, which includes +runtime/cgo). + +This patch filters out all compiler flags except those +beginning with '-m'. The default behavior can be restored +by setting the CGO_PEDANTIC environment variable. + +Adapted to Go 1.13 from patches originally submitted to +the meta/recipes-devtools/go tree by +Matt Madison . + +Signed-off-by: Alexander J Kube +--- + src/cmd/go/internal/envcmd/env.go | 2 +- + src/cmd/go/internal/work/exec.go | 66 ++++++++++++++++++++++--------- + 2 files changed, 49 insertions(+), 19 deletions(-) + +--- a/src/cmd/go/internal/envcmd/env.go ++++ b/src/cmd/go/internal/envcmd/env.go +@@ -157,7 +157,7 @@ func ExtraEnvVars() []cfg.EnvVar { + func ExtraEnvVarsCostly() []cfg.EnvVar { + var b work.Builder + b.Init() +- cppflags, cflags, cxxflags, fflags, ldflags, err := b.CFlags(&load.Package{}) ++ cppflags, cflags, cxxflags, fflags, ldflags, err := b.CFlags(&load.Package{}, false) + if err != nil { + // Should not happen - b.CFlags was given an empty package. + fmt.Fprintf(os.Stderr, "go: invalid cflags: %v\n", err) +--- a/src/cmd/go/internal/work/exec.go ++++ b/src/cmd/go/internal/work/exec.go +@@ -37,6 +37,8 @@ import ( + "cmd/go/internal/trace" + ) + ++var omitGopath = os.Getenv("GOPATH_OMIT_IN_ACTIONID") != "" ++ + // actionList returns the list of actions in the dag rooted at root + // as visited in a depth-first post-order traversal. + func actionList(root *Action) []*Action { +@@ -228,7 +230,7 @@ func (b *Builder) buildActionID(a *Actio + // Assume b.WorkDir is being trimmed properly. + // When -trimpath is used with a package built from the module cache, + // use the module path and version instead of the directory. +- if !p.Goroot && !cfg.BuildTrimpath && !strings.HasPrefix(p.Dir, b.WorkDir) { ++ if !p.Goroot && !omitGopath && !cfg.BuildTrimpath && !strings.HasPrefix(p.Dir, b.WorkDir) { + fmt.Fprintf(h, "dir %s\n", p.Dir) + } else if cfg.BuildTrimpath && p.Module != nil { + fmt.Fprintf(h, "module %s@%s\n", p.Module.Path, p.Module.Version) +@@ -247,13 +249,13 @@ func (b *Builder) buildActionID(a *Actio + } + if len(p.CgoFiles)+len(p.SwigFiles) > 0 { + fmt.Fprintf(h, "cgo %q\n", b.toolID("cgo")) +- cppflags, cflags, cxxflags, fflags, ldflags, _ := b.CFlags(p) +- fmt.Fprintf(h, "CC=%q %q %q %q\n", b.ccExe(), cppflags, cflags, ldflags) ++ cppflags, cflags, cxxflags, fflags, ldflags, _ := b.CFlags(p, true) ++ fmt.Fprintf(h, "CC=%q %q %q %q\n", b.ccExe(true), cppflags, cflags, ldflags) + if len(p.CXXFiles)+len(p.SwigFiles) > 0 { +- fmt.Fprintf(h, "CXX=%q %q\n", b.cxxExe(), cxxflags) ++ fmt.Fprintf(h, "CXX=%q %q\n", b.cxxExe(true), cxxflags) + } + if len(p.FFiles) > 0 { +- fmt.Fprintf(h, "FC=%q %q\n", b.fcExe(), fflags) ++ fmt.Fprintf(h, "FC=%q %q\n", b.fcExe(true), fflags) + } + // TODO(rsc): Should we include the SWIG version or Fortran/GCC/G++/Objective-C compiler versions? + } +@@ -2401,33 +2403,48 @@ var ( + // gccCmd returns a gcc command line prefix + // defaultCC is defined in zdefaultcc.go, written by cmd/dist. + func (b *Builder) GccCmd(incdir, workdir string) []string { +- return b.compilerCmd(b.ccExe(), incdir, workdir) ++ return b.compilerCmd(b.ccExe(false), incdir, workdir) + } + + // gxxCmd returns a g++ command line prefix + // defaultCXX is defined in zdefaultcc.go, written by cmd/dist. + func (b *Builder) GxxCmd(incdir, workdir string) []string { +- return b.compilerCmd(b.cxxExe(), incdir, workdir) ++ return b.compilerCmd(b.cxxExe(false), incdir, workdir) + } + + // gfortranCmd returns a gfortran command line prefix. + func (b *Builder) gfortranCmd(incdir, workdir string) []string { +- return b.compilerCmd(b.fcExe(), incdir, workdir) ++ return b.compilerCmd(b.fcExe(false), incdir, workdir) + } + + // ccExe returns the CC compiler setting without all the extra flags we add implicitly. +-func (b *Builder) ccExe() []string { +- return b.compilerExe(origCC, cfg.DefaultCC(cfg.Goos, cfg.Goarch)) ++func (b *Builder) ccExe(filtered bool) []string { ++ return b.compilerExe(origCC, cfg.DefaultCC(cfg.Goos, cfg.Goarch), filtered) + } + + // cxxExe returns the CXX compiler setting without all the extra flags we add implicitly. +-func (b *Builder) cxxExe() []string { +- return b.compilerExe(origCXX, cfg.DefaultCXX(cfg.Goos, cfg.Goarch)) ++func (b *Builder) cxxExe(filtered bool) []string { ++ return b.compilerExe(origCXX, cfg.DefaultCXX(cfg.Goos, cfg.Goarch), filtered) + } + + // fcExe returns the FC compiler setting without all the extra flags we add implicitly. +-func (b *Builder) fcExe() []string { +- return b.compilerExe(cfg.Getenv("FC"), "gfortran") ++func (b *Builder) fcExe(filtered bool) []string { ++ return b.compilerExe(os.Getenv("FC"), "gfortran", filtered) ++} ++ ++var filterFlags = os.Getenv("CGO_PEDANTIC") == "" ++ ++func filterCompilerFlags(flags []string) []string { ++ var newflags []string ++ if !filterFlags { ++ return flags ++ } ++ for _, flag := range flags { ++ if strings.HasPrefix(flag, "-m") { ++ newflags = append(newflags, flag) ++ } ++ } ++ return newflags + } + + // compilerExe returns the compiler to use given an +@@ -2436,11 +2453,16 @@ func (b *Builder) fcExe() []string { + // of the compiler but can have additional arguments if they + // were present in the environment value. + // For example if CC="gcc -DGOPHER" then the result is ["gcc", "-DGOPHER"]. +-func (b *Builder) compilerExe(envValue string, def string) []string { ++func (b *Builder) compilerExe(envValue string, def string, filtered bool) []string { + compiler := strings.Fields(envValue) + if len(compiler) == 0 { + compiler = strings.Fields(def) + } ++ ++ if filtered { ++ return append(compiler[0:1], filterCompilerFlags(compiler[1:])...) ++ } ++ + return compiler + } + +@@ -2620,7 +2642,7 @@ func envList(key, def string) []string { + } + + // CFlags returns the flags to use when invoking the C, C++ or Fortran compilers, or cgo. +-func (b *Builder) CFlags(p *load.Package) (cppflags, cflags, cxxflags, fflags, ldflags []string, err error) { ++func (b *Builder) CFlags(p *load.Package, filtered bool) (cppflags, cflags, cxxflags, fflags, ldflags []string, err error) { + defaults := "-g -O2" + + if cppflags, err = buildFlags("CPPFLAGS", "", p.CgoCPPFLAGS, checkCompilerFlags); err != nil { +@@ -2639,6 +2661,14 @@ func (b *Builder) CFlags(p *load.Package + return + } + ++ if filtered { ++ cppflags = filterCompilerFlags(cppflags) ++ cflags = filterCompilerFlags(cflags) ++ cxxflags = filterCompilerFlags(cxxflags) ++ fflags = filterCompilerFlags(fflags) ++ ldflags = filterCompilerFlags(ldflags) ++ } ++ + return + } + +@@ -2653,7 +2683,7 @@ var cgoRe = lazyregexp.New(`[/\\:]`) + + func (b *Builder) cgo(a *Action, cgoExe, objdir string, pcCFLAGS, pcLDFLAGS, cgofiles, gccfiles, gxxfiles, mfiles, ffiles []string) (outGo, outObj []string, err error) { + p := a.Package +- cgoCPPFLAGS, cgoCFLAGS, cgoCXXFLAGS, cgoFFLAGS, cgoLDFLAGS, err := b.CFlags(p) ++ cgoCPPFLAGS, cgoCFLAGS, cgoCXXFLAGS, cgoFFLAGS, cgoLDFLAGS, err := b.CFlags(p, false) + if err != nil { + return nil, nil, err + } +@@ -3104,7 +3134,7 @@ func (b *Builder) swigIntSize(objdir str + + // Run SWIG on one SWIG input file. + func (b *Builder) swigOne(a *Action, p *load.Package, file, objdir string, pcCFLAGS []string, cxx bool, intgosize string) (outGo, outC string, err error) { +- cgoCPPFLAGS, cgoCFLAGS, cgoCXXFLAGS, _, _, err := b.CFlags(p) ++ cgoCPPFLAGS, cgoCFLAGS, cgoCXXFLAGS, _, _, err := b.CFlags(p, false) + if err != nil { + return "", "", err + } diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0003-allow-GOTOOLDIR-to-be-overridden-in-the-environment.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0003-allow-GOTOOLDIR-to-be-overridden-in-the-environment.patch new file mode 100644 index 000000000..662c70547 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0003-allow-GOTOOLDIR-to-be-overridden-in-the-environment.patch @@ -0,0 +1,47 @@ +From 28ada8896b76d620240bafc22aa395071d601482 Mon Sep 17 00:00:00 2001 +From: Alex Kube +Date: Wed, 23 Oct 2019 21:15:37 +0430 +Subject: [PATCH 3/9] cmd/go: Allow GOTOOLDIR to be overridden in the environment + +to allow for split host/target build roots + +Adapted to Go 1.13 from patches originally submitted to +the meta/recipes-devtools/go tree by +Matt Madison . + +Upstream-Status: Inappropriate [OE specific] + +Signed-off-by: Alexander J Kube +--- + src/cmd/dist/build.go | 4 +++- + src/cmd/go/internal/cfg/cfg.go | 6 +++++- + 2 files changed, 8 insertions(+), 2 deletions(-) + +--- a/src/cmd/dist/build.go ++++ b/src/cmd/dist/build.go +@@ -246,7 +246,9 @@ func xinit() { + workdir = xworkdir() + xatexit(rmworkdir) + +- tooldir = pathf("%s/pkg/tool/%s_%s", goroot, gohostos, gohostarch) ++ if tooldir = os.Getenv("GOTOOLDIR"); tooldir == "" { ++ tooldir = pathf("%s/pkg/tool/%s_%s", goroot, gohostos, gohostarch) ++ } + } + + // compilerEnv returns a map from "goos/goarch" to the +--- a/src/cmd/go/internal/cfg/cfg.go ++++ b/src/cmd/go/internal/cfg/cfg.go +@@ -64,7 +64,11 @@ func defaultContext() build.Context { + // variables. This matches the initialization of ToolDir in + // go/build, except for using ctxt.GOROOT rather than + // runtime.GOROOT. +- build.ToolDir = filepath.Join(ctxt.GOROOT, "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH) ++ if s := os.Getenv("GOTOOLDIR"); s != "" { ++ build.ToolDir = filepath.Clean(s) ++ } else { ++ build.ToolDir = filepath.Join(ctxt.GOROOT, "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH) ++ } + } + + ctxt.GOPATH = envOr("GOPATH", ctxt.GOPATH) diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0004-ld-add-soname-to-shareable-objects.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0004-ld-add-soname-to-shareable-objects.patch new file mode 100644 index 000000000..cd875f116 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0004-ld-add-soname-to-shareable-objects.patch @@ -0,0 +1,45 @@ +From bf5cf5301ae5914498454c87293d1df2e1d8489f Mon Sep 17 00:00:00 2001 +From: Alex Kube +Date: Wed, 23 Oct 2019 21:16:32 +0430 +Subject: [PATCH 4/9] ld: add soname to shareable objects + +so that OE's shared library dependency handling +can find them. + +Adapted to Go 1.13 from patches originally submitted to +the meta/recipes-devtools/go tree by +Matt Madison . + +Upstream-Status: Inappropriate [OE specific] + +Signed-off-by: Alexander J Kube +--- + src/cmd/link/internal/ld/lib.go | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/src/cmd/link/internal/ld/lib.go ++++ b/src/cmd/link/internal/ld/lib.go +@@ -1343,6 +1343,7 @@ func (ctxt *Link) hostlink() { + argv = append(argv, "-Wl,-z,relro") + } + argv = append(argv, "-shared") ++ argv = append(argv, fmt.Sprintf("-Wl,-soname,%s", filepath.Base(*flagOutfile))) + if ctxt.HeadType == objabi.Hwindows { + if *flagAslr { + argv = addASLRargs(argv) +@@ -1358,6 +1359,7 @@ func (ctxt *Link) hostlink() { + argv = append(argv, "-Wl,-z,relro") + } + argv = append(argv, "-shared") ++ argv = append(argv, fmt.Sprintf("-Wl,-soname,%s", filepath.Base(*flagOutfile))) + case BuildModePlugin: + if ctxt.HeadType == objabi.Hdarwin { + argv = append(argv, "-dynamiclib") +@@ -1366,6 +1368,7 @@ func (ctxt *Link) hostlink() { + argv = append(argv, "-Wl,-z,relro") + } + argv = append(argv, "-shared") ++ argv = append(argv, fmt.Sprintf("-Wl,-soname,%s", filepath.Base(*flagOutfile))) + } + } + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0005-make.bash-override-CC-when-building-dist-and-go_boot.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0005-make.bash-override-CC-when-building-dist-and-go_boot.patch new file mode 100644 index 000000000..59c12d954 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0005-make.bash-override-CC-when-building-dist-and-go_boot.patch @@ -0,0 +1,39 @@ +From f05ef3ded52b98537c10efd0b15cd9612471524d Mon Sep 17 00:00:00 2001 +From: Alex Kube +Date: Wed, 23 Oct 2019 21:17:16 +0430 +Subject: [PATCH 5/9] make.bash: override CC when building dist and + go_bootstrap + +for handling OE cross-canadian builds. + +Adapted to Go 1.13 from patches originally submitted to +the meta/recipes-devtools/go tree by +Matt Madison . + +Upstream-Status: Inappropriate [OE specific] + +Signed-off-by: Alexander J Kube +--- + src/make.bash | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +--- a/src/make.bash ++++ b/src/make.bash +@@ -178,7 +178,7 @@ if [ "$GOROOT_BOOTSTRAP" = "$GOROOT" ]; + exit 1 + fi + rm -f cmd/dist/dist +-GOROOT="$GOROOT_BOOTSTRAP" GOOS="" GOARCH="" GO111MODULE=off "$GOROOT_BOOTSTRAP/bin/go" build -o cmd/dist/dist ./cmd/dist ++CC="${BUILD_CC:-${CC}}" GOROOT="$GOROOT_BOOTSTRAP" GOOS="" GOARCH="" GO111MODULE=off "$GOROOT_BOOTSTRAP/bin/go" build -o cmd/dist/dist ./cmd/dist + + # -e doesn't propagate out of eval, so check success by hand. + eval $(./cmd/dist/dist env -p || echo FAIL=true) +@@ -209,7 +209,7 @@ fi + # Run dist bootstrap to complete make.bash. + # Bootstrap installs a proper cmd/dist, built with the new toolchain. + # Throw ours, built with Go 1.4, away after bootstrap. +-./cmd/dist/dist bootstrap $buildall $vflag $GO_DISTFLAGS "$@" ++CC="${BUILD_CC:-${CC}}" ./cmd/dist/dist bootstrap $buildall $vflag $GO_DISTFLAGS "$@" + rm -f ./cmd/dist/dist + + # DO NOT ADD ANY NEW CODE HERE. diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0006-cmd-dist-separate-host-and-target-builds.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0006-cmd-dist-separate-host-and-target-builds.patch new file mode 100644 index 000000000..7aee0bac4 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0006-cmd-dist-separate-host-and-target-builds.patch @@ -0,0 +1,274 @@ +From 10735bb84df17ba657f76835f483cd8543a879c1 Mon Sep 17 00:00:00 2001 +From: Alex Kube +Date: Wed, 23 Oct 2019 21:18:12 +0430 +Subject: [PATCH 6/9] cmd/dist: separate host and target builds + +Upstream-Status: Inappropriate [OE specific] + +Change the dist tool to allow for OE-style cross- +and cross-canadian builds: + + - command flags --host-only and --target only are added; + if one is present, the other changes mentioned below + take effect, and arguments may also be specified on + the command line to enumerate the package(s) to be + built. + + - for OE cross builds, go_bootstrap is always built for + the current build host, and is moved, along with the supporting + toolchain (asm, compile, etc.) to a separate 'native_native' + directory under GOROOT/pkg/tool. + + - go_bootstrap is not automatically removed after the build, + so it can be reused later (e.g., building both static and + shared runtime). + +Note that for --host-only builds, it would be nice to specify +just the "cmd" package to build only the go commands/tools, +the staleness checks in the dist tool will fail if the "std" +library has not also been built. So host-only builds have to +build everything anyway. + +Adapted to Go 1.13 from patches originally submitted to +the meta/recipes-devtools/go tree by +Matt Madison . + +Signed-off-by: Alexander J Kube +--- + src/cmd/dist/build.go | 155 ++++++++++++++++++++++++++++++------------ + 1 file changed, 112 insertions(+), 43 deletions(-) + +--- a/src/cmd/dist/build.go ++++ b/src/cmd/dist/build.go +@@ -41,6 +41,7 @@ var ( + goldflags string + workdir string + tooldir string ++ build_tooldir string + oldgoos string + oldgoarch string + exe string +@@ -53,6 +54,7 @@ var ( + + rebuildall bool + defaultclang bool ++ crossBuild bool + + vflag int // verbosity + ) +@@ -249,6 +251,8 @@ func xinit() { + if tooldir = os.Getenv("GOTOOLDIR"); tooldir == "" { + tooldir = pathf("%s/pkg/tool/%s_%s", goroot, gohostos, gohostarch) + } ++ ++ build_tooldir = pathf("%s/pkg/tool/native_native", goroot) + } + + // compilerEnv returns a map from "goos/goarch" to the +@@ -480,8 +484,10 @@ func setup() { + p := pathf("%s/pkg/%s_%s", goroot, gohostos, gohostarch) + if rebuildall { + xremoveall(p) ++ xremoveall(build_tooldir) + } + xmkdirall(p) ++ xmkdirall(build_tooldir) + + if goos != gohostos || goarch != gohostarch { + p := pathf("%s/pkg/%s_%s", goroot, goos, goarch) +@@ -1244,12 +1250,29 @@ func cmdbootstrap() { + + var noBanner bool + var debug bool ++ var hostOnly bool ++ var targetOnly bool ++ var toBuild = []string{"std", "cmd"} ++ + flag.BoolVar(&rebuildall, "a", rebuildall, "rebuild all") + flag.BoolVar(&debug, "d", debug, "enable debugging of bootstrap process") + flag.BoolVar(&noBanner, "no-banner", noBanner, "do not print banner") ++ flag.BoolVar(&hostOnly, "host-only", hostOnly, "build only host binaries, not target") ++ flag.BoolVar(&targetOnly, "target-only", targetOnly, "build only target binaries, not host") + +- xflagparse(0) ++ xflagparse(-1) + ++ if hostOnly && targetOnly { ++ fatalf("specify only one of --host-only or --target-only\n") ++ } ++ crossBuild = hostOnly || targetOnly ++ if flag.NArg() > 0 { ++ if crossBuild { ++ toBuild = flag.Args() ++ } else { ++ fatalf("package names not permitted without --host-only or --target-only\n") ++ } ++ } + // Set GOPATH to an internal directory. We shouldn't actually + // need to store files here, since the toolchain won't + // depend on modules outside of vendor directories, but if +@@ -1303,8 +1326,13 @@ func cmdbootstrap() { + xprintf("\n") + } + +- gogcflags = os.Getenv("GO_GCFLAGS") // we were using $BOOT_GO_GCFLAGS until now +- goldflags = os.Getenv("GO_LDFLAGS") // we were using $BOOT_GO_LDFLAGS until now ++ // For split host/target cross/cross-canadian builds, we don't ++ // want to be setting these flags until after we have compiled ++ // the toolchain that runs on the build host. ++ if !crossBuild { ++ gogcflags = os.Getenv("GO_GCFLAGS") // we were using $BOOT_GO_GCFLAGS until now ++ goldflags = os.Getenv("GO_LDFLAGS") // we were using $BOOT_GO_LDFLAGS until now ++ } + goBootstrap := pathf("%s/go_bootstrap", tooldir) + cmdGo := pathf("%s/go", gobin) + if debug { +@@ -1333,7 +1361,11 @@ func cmdbootstrap() { + xprintf("\n") + } + xprintf("Building Go toolchain2 using go_bootstrap and Go toolchain1.\n") +- os.Setenv("CC", compilerEnvLookup(defaultcc, goos, goarch)) ++ if crossBuild { ++ os.Setenv("CC", defaultcc[""]) ++ } else { ++ os.Setenv("CC", compilerEnvLookup(defaultcc, goos, goarch)) ++ } + goInstall(goBootstrap, append([]string{"-i"}, toolchain...)...) + if debug { + run("", ShowOutput|CheckExit, pathf("%s/compile", tooldir), "-V=full") +@@ -1370,50 +1402,84 @@ func cmdbootstrap() { + } + checkNotStale(goBootstrap, append(toolchain, "runtime/internal/sys")...) + +- if goos == oldgoos && goarch == oldgoarch { +- // Common case - not setting up for cross-compilation. +- timelog("build", "toolchain") +- if vflag > 0 { +- xprintf("\n") ++ if crossBuild { ++ gogcflags = os.Getenv("GO_GCFLAGS") ++ goldflags = os.Getenv("GO_LDFLAGS") ++ tool_files, _ := filepath.Glob(pathf("%s/*", tooldir)) ++ for _, f := range tool_files { ++ copyfile(pathf("%s/%s", build_tooldir, filepath.Base(f)), f, writeExec) ++ xremove(f) ++ } ++ os.Setenv("GOTOOLDIR", build_tooldir) ++ goBootstrap = pathf("%s/go_bootstrap", build_tooldir) ++ if hostOnly { ++ timelog("build", "host toolchain") ++ if vflag > 0 { ++ xprintf("\n") ++ } ++ xprintf("Building %s for host, %s/%s.\n", strings.Join(toBuild, ","), goos, goarch) ++ goInstall(goBootstrap, toBuild...) ++ checkNotStale(goBootstrap, toBuild...) ++ // Skip cmdGo staleness checks here, since we can't necessarily run the cmdGo binary ++ ++ timelog("build", "target toolchain") ++ if vflag > 0 { ++ xprintf("\n") ++ } ++ } else if targetOnly { ++ goos = oldgoos ++ goarch = oldgoarch ++ os.Setenv("GOOS", goos) ++ os.Setenv("GOARCH", goarch) ++ os.Setenv("CC", compilerEnvLookup(defaultcc, goos, goarch)) ++ xprintf("Building %s for target, %s/%s.\n", strings.Join(toBuild, ","), goos, goarch) ++ goInstall(goBootstrap, toBuild...) ++ checkNotStale(goBootstrap, toBuild...) ++ // Skip cmdGo staleness checks here, since we can't run the target's cmdGo binary + } +- xprintf("Building packages and commands for %s/%s.\n", goos, goarch) + } else { +- // GOOS/GOARCH does not match GOHOSTOS/GOHOSTARCH. +- // Finish GOHOSTOS/GOHOSTARCH installation and then +- // run GOOS/GOARCH installation. +- timelog("build", "host toolchain") +- if vflag > 0 { +- xprintf("\n") ++ ++ if goos == oldgoos && goarch == oldgoarch { ++ // Common case - not setting up for cross-compilation. ++ timelog("build", "toolchain") ++ if vflag > 0 { ++ xprintf("\n") ++ } ++ xprintf("Building packages and commands for %s/%s.\n", goos, goarch) ++ } else { ++ // GOOS/GOARCH does not match GOHOSTOS/GOHOSTARCH. ++ // Finish GOHOSTOS/GOHOSTARCH installation and then ++ // run GOOS/GOARCH installation. ++ timelog("build", "host toolchain") ++ if vflag > 0 { ++ xprintf("\n") ++ } ++ xprintf("Building packages and commands for host, %s/%s.\n", goos, goarch) ++ goInstall(goBootstrap, "std", "cmd") ++ checkNotStale(goBootstrap, "std", "cmd") ++ checkNotStale(cmdGo, "std", "cmd") ++ ++ timelog("build", "target toolchain") ++ if vflag > 0 { ++ xprintf("\n") ++ } ++ goos = oldgoos ++ goarch = oldgoarch ++ os.Setenv("GOOS", goos) ++ os.Setenv("GOARCH", goarch) ++ os.Setenv("CC", compilerEnvLookup(defaultcc, goos, goarch)) ++ xprintf("Building packages and commands for target, %s/%s.\n", goos, goarch) + } +- xprintf("Building packages and commands for host, %s/%s.\n", goos, goarch) + goInstall(goBootstrap, "std", "cmd") + checkNotStale(goBootstrap, "std", "cmd") + checkNotStale(cmdGo, "std", "cmd") + +- timelog("build", "target toolchain") +- if vflag > 0 { +- xprintf("\n") +- } +- goos = oldgoos +- goarch = oldgoarch +- os.Setenv("GOOS", goos) +- os.Setenv("GOARCH", goarch) +- os.Setenv("CC", compilerEnvLookup(defaultcc, goos, goarch)) +- xprintf("Building packages and commands for target, %s/%s.\n", goos, goarch) +- } +- targets := []string{"std", "cmd"} +- if goos == "js" && goarch == "wasm" { +- // Skip the cmd tools for js/wasm. They're not usable. +- targets = targets[:1] +- } +- goInstall(goBootstrap, targets...) +- checkNotStale(goBootstrap, targets...) +- checkNotStale(cmdGo, targets...) +- if debug { +- run("", ShowOutput|CheckExit, pathf("%s/compile", tooldir), "-V=full") +- run("", ShowOutput|CheckExit, pathf("%s/buildid", tooldir), pathf("%s/pkg/%s_%s/runtime/internal/sys.a", goroot, goos, goarch)) +- checkNotStale(goBootstrap, append(toolchain, "runtime/internal/sys")...) +- copyfile(pathf("%s/compile4", tooldir), pathf("%s/compile", tooldir), writeExec) ++ if debug { ++ run("", ShowOutput|CheckExit, pathf("%s/compile", tooldir), "-V=full") ++ run("", ShowOutput|CheckExit, pathf("%s/buildid", tooldir), pathf("%s/pkg/%s_%s/runtime/internal/sys.a", goroot, goos, goarch)) ++ checkNotStale(goBootstrap, append(toolchain, "runtime/internal/sys")...) ++ copyfile(pathf("%s/compile4", tooldir), pathf("%s/compile", tooldir), writeExec) ++ } + } + + // Check that there are no new files in $GOROOT/bin other than +@@ -1430,8 +1496,11 @@ func cmdbootstrap() { + } + } + +- // Remove go_bootstrap now that we're done. +- xremove(pathf("%s/go_bootstrap", tooldir)) ++ // Except that for split host/target cross-builds, we need to ++ // keep it. ++ if !crossBuild { ++ xremove(pathf("%s/go_bootstrap", tooldir)) ++ } + + if goos == "android" { + // Make sure the exec wrapper will sync a fresh $GOROOT to the device. diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0007-cmd-go-make-GOROOT-precious-by-default.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0007-cmd-go-make-GOROOT-precious-by-default.patch new file mode 100644 index 000000000..4b4d0d4f3 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0007-cmd-go-make-GOROOT-precious-by-default.patch @@ -0,0 +1,104 @@ +From 9ba507e076c744f4d394418e4a849e68cd426a4a Mon Sep 17 00:00:00 2001 +From: Alex Kube +Date: Wed, 23 Oct 2019 21:18:56 +0430 +Subject: [PATCH 7/9] cmd/go: make GOROOT precious by default + +Upstream-Status: Inappropriate [OE specific] + +The go build tool normally rebuilds whatever it detects is +stale. This can be a problem when GOROOT is intended to +be read-only and the go runtime has been built as a shared +library, since we don't want every application to be rebuilding +the shared runtime - particularly in cross-build/packaging +setups, since that would lead to 'abi mismatch' runtime errors. + +This patch prevents the install and linkshared actions from +installing to GOROOT unless overridden with the GOROOT_OVERRIDE +environment variable. + +Adapted to Go 1.13 from patches originally submitted to +the meta/recipes-devtools/go tree by +Matt Madison . + +Signed-off-by: Alexander J Kube +--- + src/cmd/go/internal/work/action.go | 3 +++ + src/cmd/go/internal/work/build.go | 6 ++++++ + src/cmd/go/internal/work/exec.go | 25 +++++++++++++++++++++++++ + 3 files changed, 34 insertions(+) + +--- a/src/cmd/go/internal/work/action.go ++++ b/src/cmd/go/internal/work/action.go +@@ -670,6 +670,9 @@ func (b *Builder) addTransitiveLinkDeps( + if p1 == nil || p1.Shlib == "" || haveShlib[filepath.Base(p1.Shlib)] { + continue + } ++ if goRootPrecious && (p1.Standard || p1.Goroot) { ++ continue ++ } + haveShlib[filepath.Base(p1.Shlib)] = true + // TODO(rsc): The use of ModeInstall here is suspect, but if we only do ModeBuild, + // we'll end up building an overall library or executable that depends at runtime +--- a/src/cmd/go/internal/work/build.go ++++ b/src/cmd/go/internal/work/build.go +@@ -167,6 +167,8 @@ See also: go install, go get, go clean. + + const concurrentGCBackendCompilationEnabledByDefault = true + ++var goRootPrecious bool = true ++ + func init() { + // break init cycle + CmdBuild.Run = runBuild +@@ -179,6 +181,10 @@ func init() { + + AddBuildFlags(CmdBuild, DefaultBuildFlags) + AddBuildFlags(CmdInstall, DefaultBuildFlags) ++ ++ if x := os.Getenv("GOROOT_OVERRIDE"); x != "" { ++ goRootPrecious = false ++ } + } + + // Note that flags consulted by other parts of the code +--- a/src/cmd/go/internal/work/exec.go ++++ b/src/cmd/go/internal/work/exec.go +@@ -468,6 +468,23 @@ func (b *Builder) build(a *Action) (err + return errors.New("binary-only packages are no longer supported") + } + ++ if goRootPrecious && (a.Package.Standard || a.Package.Goroot) { ++ _, err := os.Stat(a.Package.Target) ++ if err == nil { ++ a.built = a.Package.Target ++ a.Target = a.Package.Target ++ a.buildID = b.fileHash(a.Package.Target) ++ a.Package.Stale = false ++ a.Package.StaleReason = "GOROOT-resident package" ++ return nil ++ } ++ a.Package.Stale = true ++ a.Package.StaleReason = "missing or invalid GOROOT-resident package" ++ if b.IsCmdList { ++ return nil ++ } ++ } ++ + if err := b.Mkdir(a.Objdir); err != nil { + return err + } +@@ -1520,6 +1537,14 @@ func BuildInstallFunc(b *Builder, a *Act + return err + } + ++ if goRootPrecious && a.Package != nil { ++ p := a.Package ++ if p.Standard || p.Goroot { ++ err := fmt.Errorf("attempting to install package %s into read-only GOROOT", p.ImportPath) ++ return err ++ } ++ } ++ + if err := b.Mkdir(a.Objdir); err != nil { + return err + } diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0008-use-GOBUILDMODE-to-set-buildmode.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0008-use-GOBUILDMODE-to-set-buildmode.patch new file mode 100644 index 000000000..4e5d5021d --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0008-use-GOBUILDMODE-to-set-buildmode.patch @@ -0,0 +1,42 @@ +From 971b5626339ce0c4d57f9721c9a81af566c5a044 Mon Sep 17 00:00:00 2001 +From: Alex Kube +Date: Wed, 23 Oct 2019 21:19:26 +0430 +Subject: [PATCH 8/9] cmd/go: Use GOBUILDMODE to set buildmode + +Upstream-Status: Denied [upstream choose antoher solution: `17a256b +cmd/go: -buildmode=pie for android/arm'] + +While building go itself, the go build system does not support +to set `-buildmode=pie' from environment. + +Add GOBUILDMODE to support it which make PIE executables the default +build mode, as PIE executables are required as of Yocto + +Refers: https://groups.google.com/forum/#!topic/golang-dev/gRCe5URKewI + +Adapted to Go 1.13 from patches originally submitted to +the meta/recipes-devtools/go tree by +Hongxu Jia + +Signed-off-by: Alexander J Kube +--- + src/cmd/go/internal/work/build.go | 8 +++++++- + 1 file changed, 7 insertions(+), 1 deletion(-) + +--- a/src/cmd/go/internal/work/build.go ++++ b/src/cmd/go/internal/work/build.go +@@ -254,7 +254,13 @@ func AddBuildFlags(cmd *base.Command, ma + + cmd.Flag.Var(&load.BuildAsmflags, "asmflags", "") + cmd.Flag.Var(buildCompiler{}, "compiler", "") +- cmd.Flag.StringVar(&cfg.BuildBuildmode, "buildmode", "default", "") ++ ++ if bm := os.Getenv("GOBUILDMODE"); bm != "" { ++ cmd.Flag.StringVar(&cfg.BuildBuildmode, "buildmode", bm, "") ++ } else { ++ cmd.Flag.StringVar(&cfg.BuildBuildmode, "buildmode", "default", "") ++ } ++ + cmd.Flag.Var(&load.BuildGcflags, "gcflags", "") + cmd.Flag.Var(&load.BuildGccgoflags, "gccgoflags", "") + if mask&OmitModFlag == 0 { diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0009-Revert-cmd-go-make-sure-CC-and-CXX-are-absolute.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0009-Revert-cmd-go-make-sure-CC-and-CXX-are-absolute.patch new file mode 100644 index 000000000..dcbdf5875 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0009-Revert-cmd-go-make-sure-CC-and-CXX-are-absolute.patch @@ -0,0 +1,95 @@ +From a983bc6cd48fb0da939e3329cac18d7a3b29ecf8 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Mon, 22 Feb 2021 17:54:01 -0800 +Subject: [PATCH] Revert "cmd/go: make sure CC and CXX are absolute" + +OE uses CC/CXX values which consists of cmpiler and options together, +secondly, the environment is canned so this check add little value to OE +based builds + +Fixes go-runtime build issues + +go install: CXX environment variable is relative; must be absolute path: powerpc64le-yoe-linux-musl-g++ -mlittle-endian -mhard-float -m64 -mabi=elfv2 -mcpu=power9 -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/mnt/b/yoe/master/build/tmp/work/ppc64p9le-yoe-linux-musl/go/1.16-r0/recipe-sysroot + +This reverts commit aa161e799df7e1eba99d2be10271e76b6f758142. + +Upstream-Status: Inappropriate [OE-Specific] +Signed-off-by: Khem Raj +--- + src/cmd/go/internal/envcmd/env.go | 5 ----- + src/cmd/go/internal/work/init.go | 7 ------- + src/cmd/go/testdata/script/env_write.txt | 24 ------------------------ + 3 files changed, 36 deletions(-) + +diff --git a/src/cmd/go/internal/envcmd/env.go b/src/cmd/go/internal/envcmd/env.go +index 6937187522..29f9057c3f 100644 +--- a/src/cmd/go/internal/envcmd/env.go ++++ b/src/cmd/go/internal/envcmd/env.go +@@ -427,11 +427,6 @@ func checkEnvWrite(key, val string) error { + if !filepath.IsAbs(val) && val != "" { + return fmt.Errorf("GOPATH entry is relative; must be absolute path: %q", val) + } +- // Make sure CC and CXX are absolute paths +- case "CC", "CXX": +- if !filepath.IsAbs(val) && val != "" && val != filepath.Base(val) { +- return fmt.Errorf("%s entry is relative; must be absolute path: %q", key, val) +- } + } + + if !utf8.ValidString(val) { +diff --git a/src/cmd/go/internal/work/init.go b/src/cmd/go/internal/work/init.go +index ba7c7c2fbb..3a6df5f758 100644 +--- a/src/cmd/go/internal/work/init.go ++++ b/src/cmd/go/internal/work/init.go +@@ -41,13 +41,6 @@ func BuildInit() { + cfg.BuildPkgdir = p + } + +- // Make sure CC and CXX are absolute paths +- for _, key := range []string{"CC", "CXX"} { +- if path := cfg.Getenv(key); !filepath.IsAbs(path) && path != "" && path != filepath.Base(path) { +- base.Fatalf("go %s: %s environment variable is relative; must be absolute path: %s\n", flag.Args()[0], key, path) +- } +- } +- + // For each experiment that has been enabled in the toolchain, define a + // build tag with the same name but prefixed by "goexperiment." which can be + // used for compiling alternative files for the experiment. This allows +diff --git a/src/cmd/go/testdata/script/env_write.txt b/src/cmd/go/testdata/script/env_write.txt +index bda1e57826..c99aadb7f2 100644 +--- a/src/cmd/go/testdata/script/env_write.txt ++++ b/src/cmd/go/testdata/script/env_write.txt +@@ -129,30 +129,6 @@ go env -w GOTMPDIR= + go env GOTMPDIR + stdout ^$ + +-# go env -w rejects relative CC values +-[!windows] go env -w CC=/usr/bin/clang +-go env -w CC=clang +-[!windows] ! go env -w CC=./clang +-[!windows] ! go env -w CC=bin/clang +-[!windows] stderr 'go env -w: CC entry is relative; must be absolute path' +- +-[windows] go env -w CC=$WORK\bin\clang +-[windows] ! go env -w CC=.\clang +-[windows] ! go env -w CC=bin\clang +-[windows] stderr 'go env -w: CC entry is relative; must be absolute path' +- +-# go env -w rejects relative CXX values +-[!windows] go env -w CC=/usr/bin/cpp +-go env -w CXX=cpp +-[!windows] ! go env -w CXX=./cpp +-[!windows] ! go env -w CXX=bin/cpp +-[!windows] stderr 'go env -w: CXX entry is relative; must be absolute path' +- +-[windows] go env -w CXX=$WORK\bin\cpp +-[windows] ! go env -w CXX=.\cpp +-[windows] ! go env -w CXX=bin\cpp +-[windows] stderr 'go env -w: CXX entry is relative; must be absolute path' +- + # go env -w/-u checks validity of GOOS/ARCH combinations + env GOOS= + env GOARCH= +-- +2.30.1 + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-binary-native_1.16.15.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-binary-native_1.16.15.bb new file mode 100644 index 000000000..ba11ee569 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-binary-native_1.16.15.bb @@ -0,0 +1,46 @@ +# This recipe is for bootstrapping our go-cross from a prebuilt binary of Go from golang.org. + +SUMMARY = "Go programming language compiler (upstream binary for bootstrap)" +HOMEPAGE = " http://golang.org/" +LICENSE = "BSD-3-Clause" +LIC_FILES_CHKSUM = "file://LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707" + +PROVIDES = "go-native" + +SRC_URI = "https://dl.google.com/go/go${PV}.${BUILD_GOOS}-${BUILD_GOARCH}.tar.gz;name=go_${BUILD_GOTUPLE}" +SRC_URI[go_linux_amd64.sha256sum] = "77c782a633186d78c384f972fb113a43c24be0234c42fef22c2d8c4c4c8e7475" +SRC_URI[go_linux_arm64.sha256sum] = "c2f27f0ce5620a9bc2ff3446165d1974ef94e9b885ec12dbfa3c07e0e198b7ce" + +UPSTREAM_CHECK_URI = "https://golang.org/dl/" +UPSTREAM_CHECK_REGEX = "go(?P\d+(\.\d+)+)\.linux" + +S = "${WORKDIR}/go" + +inherit goarch native + +do_compile() { + : +} + +make_wrapper() { + rm -f ${D}${bindir}/$1 + cat <${D}${bindir}/$1 +#!/bin/bash +here=\`dirname \$0\` +export GOROOT="${GOROOT:-\`readlink -f \$here/../lib/go\`}" +\$here/../lib/go/bin/$1 "\$@" +END + chmod +x ${D}${bindir}/$1 +} + +do_install() { + find ${S} -depth -type d -name testdata -exec rm -rf {} + + + install -d ${D}${bindir} ${D}${libdir}/go + cp --preserve=mode,timestamps -R ${S}/ ${D}${libdir}/ + + for f in ${S}/bin/* + do + make_wrapper `basename $f` + done +} diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-common.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-common.inc new file mode 100644 index 000000000..dfccebdb8 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-common.inc @@ -0,0 +1,42 @@ +SUMMARY = "Go programming language compiler" +DESCRIPTION = " The Go programming language is an open source project to make \ + programmers more productive. Go is expressive, concise, clean, and\ + efficient. Its concurrency mechanisms make it easy to write programs\ + that get the most out of multicore and networked machines, while its\ + novel type system enables flexible and modular program construction.\ + Go compiles quickly to machine code yet has the convenience of\ + garbage collection and the power of run-time reflection. It's a\ + fast, statically typed, compiled language that feels like a\ + dynamically typed, interpreted language." + +HOMEPAGE = " http://golang.org/" +LICENSE = "BSD-3-Clause" + +inherit goarch + +SRC_URI = "https://golang.org/dl/go${PV}.src.tar.gz;name=main" +S = "${WORKDIR}/go" +B = "${S}" +UPSTREAM_CHECK_REGEX = "(?P\d+(\.\d+)+)\.src\.tar" + +INHIBIT_PACKAGE_DEBUG_SPLIT = "1" +SSTATE_SCAN_CMD = "true" + +export GOROOT_OVERRIDE = "1" +export GOTMPDIR ?= "${WORKDIR}/go-tmp" +GOTMPDIR[vardepvalue] = "" +export CGO_ENABLED = "1" + +export GOHOSTOS ?= "${BUILD_GOOS}" +export GOHOSTARCH ?= "${BUILD_GOARCH}" +export GOROOT_BOOTSTRAP ?= "${STAGING_LIBDIR_NATIVE}/go" +export GOOS ?= "${TARGET_GOOS}" +export GOARCH ?= "${TARGET_GOARCH}" +export GOARM ?= "${TARGET_GOARM}" +export GO386 ?= "${TARGET_GO386}" +export GOMIPS ?= "${TARGET_GOMIPS}" +export GOROOT_FINAL ?= "${libdir}/go" + +do_compile:prepend() { + BUILD_CC=${BUILD_CC} +} diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross-canadian.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross-canadian.inc new file mode 100644 index 000000000..d49250a8e --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross-canadian.inc @@ -0,0 +1,62 @@ +inherit cross-canadian + +DEPENDS = "go-native virtual/${HOST_PREFIX}go-crosssdk virtual/nativesdk-${HOST_PREFIX}go-runtime \ + virtual/${HOST_PREFIX}gcc-crosssdk virtual/nativesdk-libc \ + virtual/nativesdk-${HOST_PREFIX}compilerlibs" +PN = "go-cross-canadian-${TRANSLATED_TARGET_ARCH}" + +# it uses gcc on build machine during go-cross-canadian bootstrap, but +# the gcc version may be old and not support option '-fmacro-prefix-map' +# which is one of default values of DEBUG_PREFIX_MAP +DEBUG_PREFIX_MAP = "-fdebug-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR} \ + -fdebug-prefix-map=${STAGING_DIR_HOST}= \ + -fdebug-prefix-map=${STAGING_DIR_NATIVE}= \ + " + +export GOTOOLDIR_BOOTSTRAP = "${STAGING_LIBDIR_NATIVE}/${HOST_SYS}/go/pkg/tool/${BUILD_GOTUPLE}" +export CGO_CFLAGS = "${CFLAGS}" +export CGO_LDFLAGS = "${LDFLAGS}" +export GO_LDFLAGS = '-linkmode external -extld ${HOST_PREFIX}gcc -extldflags "--sysroot=${STAGING_DIR_HOST} ${SECURITY_NOPIE_CFLAGS} ${HOST_CC_ARCH} ${LDFLAGS}"' + +do_configure[noexec] = "1" + +do_compile() { + export CC_FOR_${HOST_GOTUPLE}="${HOST_PREFIX}gcc --sysroot=${STAGING_DIR_HOST}${SDKPATHNATIVE} ${SECURITY_NOPIE_CFLAGS}" + export CXX_FOR_${HOST_GOTUPLE}="${HOST_PREFIX}gxx --sysroot=${STAGING_DIR_HOST}${SDKPATHNATIVE} ${SECURITY_NOPIE_CFLAGS}" + cd src + ./make.bash --host-only --no-banner + cd ${B} +} +do_compile[dirs] =+ "${GOTMPDIR} ${B}/bin ${B}/pkg" +do_compile[cleandirs] += "${GOTMPDIR} ${B}/bin ${B}/pkg" + + +make_wrapper() { + rm -f ${D}${bindir}/$2 + cat <${D}${bindir}/$2 +#!/bin/sh +here=\`dirname \$0\` +native_goroot=\`readlink -f \$here/../../lib/${TARGET_SYS}/go\` +export GOARCH="${TARGET_GOARCH}" +export GOOS="${TARGET_GOOS}" +test -n "\$GOARM" || export GOARM="${TARGET_GOARM}" +test -n "\$GO386" || export GO386="${TARGET_GO386}" +test -n "\$GOMIPS" || export GOMIPS="${TARGET_GOMIPS}" +export GOTOOLDIR="\$native_goroot/pkg/tool/${HOST_GOTUPLE}" +test -n "\$GOROOT" || export GOROOT="\$OECORE_TARGET_SYSROOT/${target_libdir}/go" +\$here/../../lib/${TARGET_SYS}/go/bin/$1 "\$@" +END + chmod +x ${D}${bindir}/$2 +} + +do_install() { + install -d ${D}${libdir}/go/pkg/tool + cp --preserve=mode,timestamps -R ${B}/pkg/tool/${HOST_GOTUPLE} ${D}${libdir}/go/pkg/tool/ + install -d ${D}${bindir} ${D}${libdir}/go/bin + for f in ${B}/${GO_BUILD_BINDIR}/* + do + base=`basename $f` + install -m755 $f ${D}${libdir}/go/bin + make_wrapper $base ${TARGET_PREFIX}$base + done +} diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross-canadian_1.16.15.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross-canadian_1.16.15.bb new file mode 100644 index 000000000..7ac9449e4 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross-canadian_1.16.15.bb @@ -0,0 +1,2 @@ +require go-cross-canadian.inc +require go-${PV}.inc diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross.inc new file mode 100644 index 000000000..3d5803bf0 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross.inc @@ -0,0 +1,53 @@ +inherit cross + +PROVIDES = "virtual/${TUNE_PKGARCH}-go" +DEPENDS = "go-native" + +PN = "go-cross-${TUNE_PKGARCH}" + +export GOCACHE = "${B}/.cache" +CC = "${@d.getVar('BUILD_CC').strip()}" + +do_configure[noexec] = "1" + +do_compile() { + export CC_FOR_${TARGET_GOTUPLE}="${TARGET_PREFIX}gcc ${TARGET_CC_ARCH} --sysroot=${STAGING_DIR_TARGET}" + export CXX_FOR_${TARGET_GOTUPLE}="${TARGET_PREFIX}g++ ${TARGET_CC_ARCH} --sysroot=${STAGING_DIR_TARGET}" + cd src + ./make.bash --host-only --no-banner + cd ${B} +} +do_compile[dirs] =+ "${GOTMPDIR} ${B}/bin ${B}/pkg" +do_compile[cleandirs] += "${GOTMPDIR} ${B}/bin ${B}/pkg" + +make_wrapper() { + rm -f ${D}${bindir}/$2 + cat <${D}${bindir}/$2 +#!/bin/bash +here=\`dirname \$0\` +export GOARCH="${TARGET_GOARCH}" +export GOOS="${TARGET_GOOS}" +export GOARM="\${GOARM:-${TARGET_GOARM}}" +export GO386="\${GO386:-${TARGET_GO386}}" +export GOMIPS="\${GOMIPS:-${TARGET_GOMIPS}}" +\$here/../../lib/${CROSS_TARGET_SYS_DIR}/go/bin/$1 "\$@" +END + chmod +x ${D}${bindir}/$2 +} + +do_install() { + install -d ${D}${libdir}/go + cp --preserve=mode,timestamps -R ${B}/pkg ${D}${libdir}/go/ + install -d ${D}${libdir}/go/src + (cd ${S}/src; for d in *; do \ + [ ! -d $d ] || cp --preserve=mode,timestamps -R ${S}/src/$d ${D}${libdir}/go/src/; \ + done) + find ${D}${libdir}/go/src -depth -type d -name testdata -exec rm -rf {} \; + install -d ${D}${bindir} ${D}${libdir}/go/bin + for f in ${B}/bin/* + do + base=`basename $f` + install -m755 $f ${D}${libdir}/go/bin + make_wrapper $base ${TARGET_PREFIX}$base + done +} diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross_1.16.15.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross_1.16.15.bb new file mode 100644 index 000000000..80b5a03f6 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross_1.16.15.bb @@ -0,0 +1,2 @@ +require go-cross.inc +require go-${PV}.inc diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-crosssdk.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-crosssdk.inc new file mode 100644 index 000000000..f0bec7971 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-crosssdk.inc @@ -0,0 +1,43 @@ +inherit crosssdk + +DEPENDS = "go-native virtual/${TARGET_PREFIX}gcc-crosssdk virtual/nativesdk-${TARGET_PREFIX}compilerlibs virtual/${TARGET_PREFIX}binutils-crosssdk" +PN = "go-crosssdk-${SDK_SYS}" +PROVIDES = "virtual/${TARGET_PREFIX}go-crosssdk" + +do_configure[noexec] = "1" + +do_compile() { + export CC_FOR_${TARGET_GOTUPLE}="${TARGET_PREFIX}gcc ${TARGET_CC_ARCH} --sysroot=${STAGING_DIR_TARGET}${SDKPATHNATIVE}" + export CXX_FOR_${TARGET_GOTUPLE}="${TARGET_PREFIX}g++ ${TARGET_CC_ARCH} --sysroot=${STAGING_DIR_TARGET}${SDKPATHNATIVE}" + cd src + ./make.bash --host-only --no-banner + cd ${B} +} +do_compile[dirs] =+ "${GOTMPDIR} ${B}/bin ${B}/pkg" +do_compile[cleandirs] += "${GOTMPDIR} ${B}/bin ${B}/pkg" + +make_wrapper() { + rm -f ${D}${bindir}/$2 + cat <${D}${bindir}/$2 +#!/bin/bash +here=\`dirname \$0\` +export GOARCH="${TARGET_GOARCH}" +export GOOS="${TARGET_GOOS}" +\$here/../../lib/${CROSS_TARGET_SYS_DIR}/go/bin/$1 "\$@" +END + chmod +x ${D}${bindir}/$2 +} + +do_install() { + install -d ${D}${libdir}/go + install -d ${D}${libdir}/go/bin + install -d ${D}${libdir}/go/pkg/tool + install -d ${D}${bindir} + cp --preserve=mode,timestamps -R ${S}/pkg/tool/${BUILD_GOTUPLE} ${D}${libdir}/go/pkg/tool/ + for f in ${B}/bin/* + do + base=`basename $f` + install -m755 $f ${D}${libdir}/go/bin + make_wrapper $base ${TARGET_PREFIX}$base + done +} diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-crosssdk_1.16.15.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-crosssdk_1.16.15.bb new file mode 100644 index 000000000..1857c8a57 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-crosssdk_1.16.15.bb @@ -0,0 +1,2 @@ +require go-crosssdk.inc +require go-${PV}.inc diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-native_1.16.15.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-native_1.16.15.bb new file mode 100644 index 000000000..ffe4ef352 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-native_1.16.15.bb @@ -0,0 +1,59 @@ +# This recipe builds a native Go (written in Go) by first building an old Go 1.4 +# (written in C). However this old Go does not support all hosts platforms. + +require go-${PV}.inc + +inherit native + +SRC_URI:append = " https://dl.google.com/go/go1.4-bootstrap-20171003.tar.gz;name=bootstrap;subdir=go1.4" +SRC_URI[bootstrap.sha256sum] = "f4ff5b5eb3a3cae1c993723f3eab519c5bae18866b5e5f96fe1102f0cb5c3e52" + +export GOOS = "${BUILD_GOOS}" +export GOARCH = "${BUILD_GOARCH}" +CC = "${@d.getVar('BUILD_CC').strip()}" + +GOMAKEARGS ?= "--no-banner" + +do_configure() { + cd ${WORKDIR}/go1.4/go/src + CGO_ENABLED=0 GOROOT=${WORKDIR}/go1.4/go ./make.bash +} + +do_compile() { + export GOROOT_FINAL="${libdir_native}/go" + export GOROOT_BOOTSTRAP="${WORKDIR}/go1.4/go" + + cd src + ./make.bash ${GOMAKEARGS} + cd ${B} +} +do_compile[dirs] =+ "${GOTMPDIR} ${B}/bin" +do_compile[cleandirs] += "${GOTMPDIR} ${B}/bin" + +make_wrapper() { + rm -f ${D}${bindir}/$2$3 + cat <${D}${bindir}/$2$3 +#!/bin/bash +here=\`dirname \$0\` +export GOROOT="${GOROOT:-\`readlink -f \$here/../lib/go\`}" +\$here/../lib/go/bin/$1 "\$@" +END + chmod +x ${D}${bindir}/$2 +} + +do_install() { + install -d ${D}${libdir}/go + cp --preserve=mode,timestamps -R ${B}/pkg ${D}${libdir}/go/ + install -d ${D}${libdir}/go/src + (cd ${S}/src; for d in *; do \ + [ -d $d ] && cp -a ${S}/src/$d ${D}${libdir}/go/src/; \ + done) + find ${D}${libdir}/go/src -depth -type d -name testdata -exec rm -rf {} \; + install -d ${D}${bindir} ${D}${libdir}/go/bin + for f in ${B}/bin/* + do + base=`basename $f` + install -m755 $f ${D}${libdir}/go/bin + make_wrapper $base $base + done +} diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-runtime.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-runtime.inc new file mode 100644 index 000000000..617e6b541 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-runtime.inc @@ -0,0 +1,87 @@ +DEPENDS = "virtual/${TUNE_PKGARCH}-go go-native" +DEPENDS:class-nativesdk = "virtual/${TARGET_PREFIX}go-crosssdk" +PROVIDES = "virtual/${TARGET_PREFIX}go-runtime" + +export CGO_CFLAGS = "${CFLAGS}" +export CGO_CPPFLAGS = "${CPPFLAGS}" +export CGO_CXXFLAGS = "${CXXFLAGS}" +export CGO_LDFLAGS = "${LDFLAGS}" +export GOCACHE = "${B}/.cache" + +GO_EXTLDFLAGS ?= "${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS} ${LDFLAGS}" +GO_SHLIB_LDFLAGS ?= '-ldflags="--linkmode=external -extldflags '${GO_EXTLDFLAGS}'"' + +do_configure() { + : +} + +do_configure:libc-musl() { + rm -f ${S}/src/runtime/race/*.syso +} + +do_compile() { + export CC_FOR_${TARGET_GOTUPLE}="${CC}" + export CXX_FOR_${TARGET_GOTUPLE}="${CXX}" + + cd src + ./make.bash --target-only --no-banner std + if [ -n "${GO_DYNLINK}" ]; then + export GOTOOLDIR="${B}/pkg/tool/native_native" + CC="$CC_FOR_${TARGET_GOTUPLE}" GOARCH="${TARGET_GOARCH}" GOOS="${TARGET_GOOS}" GOROOT=${B} \ + $GOTOOLDIR/go_bootstrap install -linkshared -buildmode=shared ${GO_SHLIB_LDFLAGS} std + fi + cd ${B} +} +do_compile[dirs] =+ "${GOTMPDIR} ${B}/bin ${B}/pkg" +do_compile[cleandirs] += "${GOTMPDIR} ${B}/bin ${B}/pkg" + +do_install() { + install -d ${D}${libdir}/go/src + cp --preserve=mode,timestamps -R ${B}/pkg ${D}${libdir}/go/ + if [ "${BUILD_GOTUPLE}" != "${TARGET_GOTUPLE}" ]; then + rm -rf ${D}${libdir}/go/pkg/${BUILD_GOTUPLE} + rm -rf ${D}${libdir}/go/pkg/obj/${BUILD_GOTUPLE} + fi + rm -rf ${D}${libdir}/go/pkg/tool + rm -rf ${D}${libdir}/go/pkg/obj + rm -rf ${D}${libdir}/go/pkg/bootstrap + find src -mindepth 1 -maxdepth 1 -type d | while read srcdir; do + cp --preserve=mode,timestamps -R $srcdir ${D}${libdir}/go/src/ + done + find ${D}${libdir}/go/src -depth -type d -name testdata -exec rm -rf {} \; + rm -f ${D}${libdir}/go/src/cmd/dist/dist + rm -f ${D}${libdir}/go/src/cmd/cgo/zdefaultcc.go + rm -f ${D}${libdir}/go/src/cmd/go/internal/cfg/zdefaultcc.go + +} + +ALLOW_EMPTY:${PN} = "1" +FILES:${PN} = "${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*${SOLIBSDEV}" +FILES:${PN}-dev = "${libdir}/go/src ${libdir}/go/pkg/include \ + ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*.shlibname \ + ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*.shlibname \ + ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*.shlibname \ + ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*.shlibname \ + ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*/*.shlibname \ + ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*/*/*.shlibname \ + ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*/*/*/*.shlibname \ + ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*.a \ + ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*.a \ + ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*.a \ + ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*.a \ + ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*/*.a \ + ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*/*/*.a \ + ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*/*/*/*.a \ +" +FILES:${PN}-staticdev = "${libdir}/go/pkg/${TARGET_GOTUPLE}" + +# Go sources include some scripts and pre-built binaries for +# multiple architectures. The static .a files for dynamically-linked +# runtime are also required in -dev. +INSANE_SKIP:${PN}-dev = "staticdev file-rdeps arch" + +INHIBIT_PACKAGE_STRIP = "1" +INHIBIT_PACKAGE_DEBUG_SPLIT = "1" +INHIBIT_SYSROOT_STRIP = "1" + +BBCLASSEXTEND = "nativesdk" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-runtime_1.16.15.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-runtime_1.16.15.bb new file mode 100644 index 000000000..63464a150 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-runtime_1.16.15.bb @@ -0,0 +1,3 @@ +require go-${PV}.inc +require go-runtime.inc + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-target.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-target.inc new file mode 100644 index 000000000..47b4411d5 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-target.inc @@ -0,0 +1,45 @@ +DEPENDS = "virtual/${TUNE_PKGARCH}-go go-native" +DEPENDS:class-nativesdk = "virtual/${TARGET_PREFIX}go-crosssdk go-native" + +export GOCACHE = "${B}/.cache" +GO_LDFLAGS = "" +GO_LDFLAGS:class-nativesdk = "-linkmode external" +export GO_LDFLAGS + +CC:append:class-nativesdk = " ${SECURITY_NOPIE_CFLAGS}" + +do_configure[noexec] = "1" + +do_compile() { + export CC_FOR_${TARGET_GOOS}_${TARGET_GOARCH}="${CC}" + export CXX_FOR_${TARGET_GOOS}_${TARGET_GOARCH}="${CXX}" + + cd src + ./make.bash --target-only --no-banner + cd ${B} +} +do_compile[dirs] =+ "${GOTMPDIR} ${B}/bin ${B}/pkg" +do_compile[cleandirs] += "${GOTMPDIR} ${B}/bin ${B}/pkg" + +do_install() { + install -d ${D}${libdir}/go/pkg/tool + cp --preserve=mode,timestamps -R ${B}/pkg/tool/${TARGET_GOTUPLE} ${D}${libdir}/go/pkg/tool/ + install -d ${D}${libdir}/go/src + cp --preserve=mode,timestamps -R ${S}/src/cmd ${D}${libdir}/go/src/ + find ${D}${libdir}/go/src -depth -type d -name testdata -exec rm -rf {} \; + install -d ${D}${libdir}/go/bin + install -d ${D}${bindir} + for f in ${B}/${GO_BUILD_BINDIR}/*; do + name=`basename $f` + install -m 0755 $f ${D}${libdir}/go/bin/ + ln -sf ../${baselib}/go/bin/$name ${D}${bindir}/ + done + rm -rf ${D}${libdir}/go/src +} + +PACKAGES = "${PN} ${PN}-dev" +FILES:${PN} = "${libdir}/go/bin ${libdir}/go/pkg/tool/${TARGET_GOTUPLE} ${bindir}" +RDEPENDS:${PN} = "go-runtime" +INSANE_SKIP:${PN} = "ldflags" + +BBCLASSEXTEND = "nativesdk" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go_1.16.15.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go_1.16.15.bb new file mode 100644 index 000000000..34dc89bb0 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go_1.16.15.bb @@ -0,0 +1,17 @@ +require go-${PV}.inc +require go-target.inc + +inherit linuxloader + +export GOBUILDMODE="" +export GO_LDSO = "${@get_linuxloader(d)}" +export CC_FOR_TARGET = "gcc" +export CXX_FOR_TARGET = "g++" + +# mips/rv64 doesn't support -buildmode=pie, so skip the QA checking for mips/riscv32 and its +# variants. +python() { + if 'mips' in d.getVar('TARGET_ARCH',True) or 'riscv32' in d.getVar('TARGET_ARCH',True): + d.appendVar('INSANE_SKIP:%s' % d.getVar('PN',True), " textrel") +} + diff --git a/meta-webos-virtualization/recipes-containers/docker/docker-moby.bbappend b/meta-webos-virtualization/recipes-containers/docker/docker-moby_%.bbappend similarity index 100% rename from meta-webos-virtualization/recipes-containers/docker/docker-moby.bbappend rename to meta-webos-virtualization/recipes-containers/docker/docker-moby_%.bbappend diff --git a/meta-webos/conf/distro/include/webos-preferred-versions.inc b/meta-webos/conf/distro/include/webos-preferred-versions.inc index 0c0a4665a..284fbf6ac 100644 --- a/meta-webos/conf/distro/include/webos-preferred-versions.inc +++ b/meta-webos/conf/distro/include/webos-preferred-versions.inc @@ -2,3 +2,5 @@ PREFERRED_VERSION_webruntime = "91.%" PREFERRED_VERSION_mksnapshot-cross-${TARGET_ARCH} = "91.%" + +GOVERSION = "1.16.%" From e2629c884ace2a95a15b7161516004d23aee2b5c Mon Sep 17 00:00:00 2001 From: Muniraju Date: Tue, 31 May 2022 09:46:22 +0530 Subject: [PATCH 0386/2022] ose: com.webos.app.settings=19 :Release Notes: Fix Time and Date page not shown :Detailed Notes: com.webos.app.settings: submissions/18..submissions/19 d85f639 Issue fix for Time And Date page not shown :Testing Performed: Please see Ticket WRO-5705 :QA Notes: NA :Issues Addressed: [WRO-5705] CCC: com.webos.app.settings=19 [WRO-4869] [OSE] Overlay app (Settings) hangs in the background Change-Id: I576d66a71e36ced0c1f860ac720cf59449b3c338 --- .../com.webos.app.settings/com.webos.app.settings.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb b/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb index 2d2a9b19b..22492ac2c 100644 --- a/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb +++ b/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=82c76ba3ea1ed22d2b1b41add2fbdc19 \ " -WEBOS_VERSION = "1.1.0-18_8098849eae4a2bb2710e13dfda14f7085d14bd83" +WEBOS_VERSION = "1.1.0-19_49b934b6df3440ed62a9eed26c3f262ad8adc53e" PR = "r3" inherit webos_component From b35e4d1733eb421df263afd88df1355283199b25 Mon Sep 17 00:00:00 2001 From: "manjuraehmad.momin" Date: Mon, 30 May 2022 19:27:15 +0530 Subject: [PATCH 0387/2022] settingsservice=15 :Release Notes: Add check for key in remainKeyList before erasing it :Detailed Notes: We may try to erase non-existing value in remainKeyList, so add a check to avoid invalid erase. settingsservice: submissions/14..submissions/15 bee387a Adding Check for validating value before erase :Testing Performed: Refer [WRO-5681] for test results :QA Notes: :Issues Addressed: [WRO-5681] CCC: settingsservice=15 [WRO-4742] [RDX_CRASH][webos] /usr/sbin/SettingsService Change-Id: I8f2614380e67d620f07f73ee861f26967c34eb2a --- meta-webos/recipes-webos/settingsservice/settingsservice.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/settingsservice/settingsservice.bb b/meta-webos/recipes-webos/settingsservice/settingsservice.bb index 235fc2765..41d3de78e 100644 --- a/meta-webos/recipes-webos/settingsservice/settingsservice.bb +++ b/meta-webos/recipes-webos/settingsservice/settingsservice.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7ca DEPENDS = "glib-2.0 glibmm luna-service2 libpbnjson pmloglib openssl libbson boost" RDEPENDS:${PN} = "settingsservice-conf" -WEBOS_VERSION = "1.0.22-14_c138dcc9f3382ebd1ec939038a5c0399e4daeb82" +WEBOS_VERSION = "1.0.22-15_ed680424a4550b159e25938cff24a071bf43fc04" PR = "r23" inherit webos_component From f08b0aea85a49282d63d698d2e9fe588f284cbed Mon Sep 17 00:00:00 2001 From: "kijoong.lee" Date: Tue, 31 May 2022 10:16:28 +0900 Subject: [PATCH 0388/2022] Add aiframework common recipes to meta-webos :Release Notes: Add aiframework libraries including tensorflow-lite, arm-compute-library, armnn. These recipes require yocto 4.0 (kirkstone) or higher. Therefore, meta-webos-backport-4.0 was added. :Detailed Notes: - add tensorflow-lite(2.6.2) - add arm-compute-library(21.11) - add armnn(21.11)(including armnn tflite delegate) - add opencl(2022.01.04) - add opencv(4.5.5) - add edgeai-vision api(1.0.0) - add 'aiframework' distro feature to webos_features.inc - add aiframework packages to webos_image.bbclass - add gcc patches for xnnpack neondot build edge-ai-computer-vision: ..submissions/7 65e66d9 change default gpu build option to off 1843357 Implement EdgeAI Vision C++ API Facade f7dc193 Fix tflite gpu delegate build error in OSE 7408bba implement tflite gpu delegate db74ec9 apply the number of threads for XNNPACK dc5b30b configurable model path support 9e01b64 Fix to crash armnn gpu delegate option in debug mode 69302db seperate with basic model files from all models upstreamable: arm-compute-library(21.11) arm-nn(21.11) backport 4.0: opencl-headers opencl-clhpp opencl-icd-loader opencv(4.5.5) recipes-devtool: append gcc patches for xnnpack neondot build flatbuffers(1.12) :Testing Performed: Local Build Test and GPVB Build Test :QA Notes: N/A :Issues Addressed: [WRO-5487] CCC: tensorflow-lite=r0,v2.6.2 edgeai-vision=7-r0,v1.0.0 [WRO-2816] [WRO-4350] Change-Id: I0c87bf79ba41b8a0de485fa3025e74b4f0205d56 --- .../meta-webos-backports-4.0/conf/layer.conf | 19 + .../recipes-core/opencl/ocl-icd_2.3.1.bb | 18 + .../recipes-core/opencl/opencl-clhpp_git.bb | 23 + .../recipes-core/opencl/opencl-headers_git.bb | 19 + .../opencl/opencl-icd-loader_git.bb | 60 ++ ...tallDirs-for-detecting-install-paths.patch | 39 + .../recipes-support/opencv/ade_0.1.1f.bb | 22 + ...dparty-ippicv-Use-pre-downloaded-ipp.patch | 36 + .../opencv/opencv/0001-Dont-use-isystem.patch | 28 + .../opencv/0001-Make-ts-module-external.patch | 42 + ...-around-deprecated-ffmpeg-RAW-functi.patch | 31 + .../0001-Use-Os-to-compile-tinyxml2.cpp.patch | 31 + ...update-vec_absd-workaround-condition.patch | 28 + .../0003-To-fix-errors-as-following.patch | 70 ++ .../opencv/opencv/download.patch | 41 + .../recipes-support/opencv/opencv/opencv4.pc | 13 + .../recipes-support/opencv/opencv_4.5.5.bb | 256 ++++++ meta-webos/classes/webos_image.bbclass | 1 + .../conf/distro/include/webos-features.inc | 11 + .../include/webos-preferred-versions.inc | 1 + .../packagegroup-webos-ml-sdk.bb | 48 ++ .../packagegroups/packagegroup-webos-ml.bb | 24 + .../recipes-core/webos-qt-sdk/webos-qt-sdk.bb | 3 +- .../flatbuffers/flatbuffers_1.12.0.bbappend | 21 + .../gcc/gcc-source_9.3%.bbappend | 16 + ...-value-after-stack_protect_test-PR96.patch | 165 ++++ ...c.target-arm-stack-protector-1.c-for.patch | 53 ++ .../gcc/0003-arm-Fix-arm.c-build-error.patch | 55 ++ ...de-support-mslow-flash-data-for-armv.patch | 163 ++++ ...ort-of-the-patch-for-PR-target-91816.patch | 305 +++++++ ...x-up-neon_vector_mem_operand-PR97528.patch | 88 ++ ...ort-for-handling-Xassembler-Wa-optio.patch | 420 ++++++++++ ...-arm-xnnpack-neondot-build-error-fix.patch | 754 ++++++++++++++++++ .../arm-compute-library_21.11.bb | 127 +++ .../files/0001-webos-build-support.patch | 43 + .../files/arm-compute-library.pc.in | 7 + .../armnn/armnn-tensorflow_2.6.2.bb | 40 + .../recipes-upstreamable/armnn/armnn_21.11.bb | 169 ++++ .../files/0001-tflite-build-error-fix.patch | 16 + ...0001-webos-build-error-fix-for-21.11.patch | 47 ++ ...fliteactrelu1-to-ktfliteactrelun1to1.patch | 11 + .../0003-const_tensor_exception_fixed.patch | 91 +++ ...0004-exception-case-pass-to-skipnode.patch | 40 + .../armnn/files/armnn-delegate.pc.in | 6 + .../armnn/files/armnn-tflite.pc.in | 6 + .../files/edgetpu-accelerator.rules | 2 + .../coral/libedgetpu/files/edgetpu.pc.in | 7 + .../coral/libedgetpu/files/libedgetpu.so.1 | Bin 0 -> 764944 bytes .../files/libedgetpu_aarch64.so.1.0 | Bin 0 -> 1118240 bytes .../libedgetpu/files/libedgetpu_arm.so.1.0 | Bin 0 -> 764944 bytes .../libedgetpu/files/libedgetpu_x86_64.so.1.0 | Bin 0 -> 1167464 bytes .../coral/libedgetpu/libedgetpu.bb | 66 ++ .../recipes-upstreamable/half/half_2.1.0.bb | 21 + .../recipes-upstreamable/stb/stb_git.bb | 26 + ...image-benchmark_model-exclude-option.patch | 39 + ...e-external-delegate-in-benchmarktool.patch | 51 ++ .../files/tensorflowlite.pc.in | 7 + .../tensorflow-lite/tensorflow-lite_2.6.2.bb | 124 +++ .../edgeai-vision/edgeai-vision_1.0.0.bb | 110 +++ 59 files changed, 3959 insertions(+), 1 deletion(-) create mode 100644 meta-webos-backports/meta-webos-backports-4.0/conf/layer.conf create mode 100644 meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/ocl-icd_2.3.1.bb create mode 100644 meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-clhpp_git.bb create mode 100644 meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-headers_git.bb create mode 100644 meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-icd-loader_git.bb create mode 100644 meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/ade/0001-use-GNUInstallDirs-for-detecting-install-paths.patch create mode 100644 meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/ade_0.1.1f.bb create mode 100644 meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-3rdparty-ippicv-Use-pre-downloaded-ipp.patch create mode 100644 meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-Dont-use-isystem.patch create mode 100644 meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-Make-ts-module-external.patch create mode 100644 meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-Temporarliy-work-around-deprecated-ffmpeg-RAW-functi.patch create mode 100644 meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-Use-Os-to-compile-tinyxml2.cpp.patch create mode 100644 meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-core-vsx-update-vec_absd-workaround-condition.patch create mode 100644 meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0003-To-fix-errors-as-following.patch create mode 100644 meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/download.patch create mode 100644 meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/opencv4.pc create mode 100644 meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv_4.5.5.bb create mode 100644 meta-webos/recipes-core/packagegroups/packagegroup-webos-ml-sdk.bb create mode 100644 meta-webos/recipes-core/packagegroups/packagegroup-webos-ml.bb create mode 100644 meta-webos/recipes-devtools/flatbuffers/flatbuffers_1.12.0.bbappend create mode 100644 meta-webos/recipes-devtools/gcc/gcc-source_9.3%.bbappend create mode 100644 meta-webos/recipes-devtools/gcc/gcc/0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch create mode 100644 meta-webos/recipes-devtools/gcc/gcc/0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch create mode 100644 meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-arm.c-build-error.patch create mode 100644 meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch create mode 100644 meta-webos/recipes-devtools/gcc/gcc/0004-Backport-of-the-patch-for-PR-target-91816.patch create mode 100644 meta-webos/recipes-devtools/gcc/gcc/0005-arm-Fix-up-neon_vector_mem_operand-PR97528.patch create mode 100644 meta-webos/recipes-devtools/gcc/gcc/0006-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch create mode 100644 meta-webos/recipes-devtools/gcc/gcc/0007-arm-xnnpack-neondot-build-error-fix.patch create mode 100644 meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb create mode 100644 meta-webos/recipes-upstreamable/arm-compute-library/files/0001-webos-build-support.patch create mode 100644 meta-webos/recipes-upstreamable/arm-compute-library/files/arm-compute-library.pc.in create mode 100644 meta-webos/recipes-upstreamable/armnn/armnn-tensorflow_2.6.2.bb create mode 100644 meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb create mode 100644 meta-webos/recipes-upstreamable/armnn/files/0001-tflite-build-error-fix.patch create mode 100644 meta-webos/recipes-upstreamable/armnn/files/0001-webos-build-error-fix-for-21.11.patch create mode 100644 meta-webos/recipes-upstreamable/armnn/files/0002-rename-ktfliteactrelu1-to-ktfliteactrelun1to1.patch create mode 100644 meta-webos/recipes-upstreamable/armnn/files/0003-const_tensor_exception_fixed.patch create mode 100644 meta-webos/recipes-upstreamable/armnn/files/0004-exception-case-pass-to-skipnode.patch create mode 100644 meta-webos/recipes-upstreamable/armnn/files/armnn-delegate.pc.in create mode 100644 meta-webos/recipes-upstreamable/armnn/files/armnn-tflite.pc.in create mode 100644 meta-webos/recipes-upstreamable/coral/libedgetpu/files/edgetpu-accelerator.rules create mode 100644 meta-webos/recipes-upstreamable/coral/libedgetpu/files/edgetpu.pc.in create mode 100755 meta-webos/recipes-upstreamable/coral/libedgetpu/files/libedgetpu.so.1 create mode 100755 meta-webos/recipes-upstreamable/coral/libedgetpu/files/libedgetpu_aarch64.so.1.0 create mode 100755 meta-webos/recipes-upstreamable/coral/libedgetpu/files/libedgetpu_arm.so.1.0 create mode 100755 meta-webos/recipes-upstreamable/coral/libedgetpu/files/libedgetpu_x86_64.so.1.0 create mode 100644 meta-webos/recipes-upstreamable/coral/libedgetpu/libedgetpu.bb create mode 100644 meta-webos/recipes-upstreamable/half/half_2.1.0.bb create mode 100644 meta-webos/recipes-upstreamable/stb/stb_git.bb create mode 100644 meta-webos/recipes-upstreamable/tensorflow-lite/files/0001-remove-label_image-benchmark_model-exclude-option.patch create mode 100644 meta-webos/recipes-upstreamable/tensorflow-lite/files/0002-enable-external-delegate-in-benchmarktool.patch create mode 100644 meta-webos/recipes-upstreamable/tensorflow-lite/files/tensorflowlite.pc.in create mode 100644 meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb create mode 100644 meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb diff --git a/meta-webos-backports/meta-webos-backports-4.0/conf/layer.conf b/meta-webos-backports/meta-webos-backports-4.0/conf/layer.conf new file mode 100644 index 000000000..fe1b4d675 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-4.0/conf/layer.conf @@ -0,0 +1,19 @@ +# Copyright (c) 2022 LG Electronics, Inc. + +# We have conf and classes directories => add to BBPATH +BBPATH .= ":${LAYERDIR}" + +# We have recipes-* directories => add to BBFILES +BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ + ${LAYERDIR}/recipes-*/*/*.bbappend" + +BBFILE_COLLECTIONS += "meta-webos-backports-4.0" +BBFILE_PATTERN_meta-webos-backports-4.0 := "^${LAYERDIR}/" +BBFILE_PRIORITY_meta-webos-backports-4.0 = "36" + +LAYERSERIES_COMPAT_meta-webos-backports-4.0 = "dunfell" + +LAYERDEPENDS_meta-webos-backports-4.0 = " \ + core \ + openembedded-layer \ +" diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/ocl-icd_2.3.1.bb b/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/ocl-icd_2.3.1.bb new file mode 100644 index 000000000..ae9c5bc81 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/ocl-icd_2.3.1.bb @@ -0,0 +1,18 @@ +SUMMARY = "OpenCL ICD library" +DESCRIPTION = "Open Source alternative to vendor specific OpenCL ICD loaders." + +# The LICENSE is BSD 2-Clause "Simplified" License +LICENSE = "BSD-2-Clause" +LIC_FILES_CHKSUM = "file://COPYING;md5=1238d5bccbb6bda30654e48dcc0a554b" + +SRC_URI = "git://github.com/OCL-dev/ocl-icd.git;protocol=https;branch=master" + +SRCREV = "1165deedb2ae741cd76e60986f7c2cb5023059d9" + +S = "${WORKDIR}/git" + +inherit autotools + +DEPENDS = "ruby-native" + +BBCLASSEXTEND = "native" diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-clhpp_git.bb b/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-clhpp_git.bb new file mode 100644 index 000000000..4b92cd381 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-clhpp_git.bb @@ -0,0 +1,23 @@ +SUMMARY = "OpenCL API C++ bindings" +DESCRIPTION = "OpenCL API C++ bindings from Khronos" + +SRC_URI = "git://github.com/KhronosGroup/OpenCL-CLHPP.git;protocol=https;branch=main" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE.txt;md5=3b83ef96387f14655fc854ddc3c6bd57" + +PV = "2.0.16+git${SRCPV}" +SRCREV = "1df82b9749739f2681081092ae163bb0f0d40f66" + +S = "${WORKDIR}/git" + +inherit cmake + +EXTRA_OECMAKE = " \ + -DBUILD_DOCS=OFF \ + -DBUILD_EXAMPLES=OFF \ + -DBUILD_TESTS=OFF \ + " +# Headers only so PN is empty +RDEPENDS_${PN}-dev = "" + diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-headers_git.bb b/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-headers_git.bb new file mode 100644 index 000000000..27079b82d --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-headers_git.bb @@ -0,0 +1,19 @@ +SUMMARY = "OpenCL API Headers" +DESCRIPTION = "OpenCL compute API headers from Khronos Group" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" +SECTION = "base" + +S = "${WORKDIR}/git" +PV = "v2022.01.04+git${SRCPV}" +SRCREV = "59ac4dc2f282286d8db83143686cfe37ec658b84" +SRC_URI = "git://github.com/KhronosGroup/OpenCL-Headers.git;branch=main;protocol=https" + +do_configure[noexec] = "1" +do_compile[noexec] = "1" +ALLOW_EMPTY_${PN} = "1" + +do_install () { + install -d ${D}${includedir}/CL/ + install -m 0644 ${S}/CL/*.h ${D}${includedir}/CL +} diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-icd-loader_git.bb b/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-icd-loader_git.bb new file mode 100644 index 000000000..57848995d --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-icd-loader_git.bb @@ -0,0 +1,60 @@ +SUMMARY = "OpenCL ICD Loader" +DESCRIPTION = "OpenCL compute ICD Loader from Khronos Group" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" +SECTION = "base" + +inherit pkgconfig cmake + +DEPENDS += "opencl-headers" + +#PROVIDES = "virtual/opencl-icd" + +S = "${WORKDIR}/git" +PV = "v2022.01.04+git${SRCPV}" +SRCREV = "169f05d026e65948b30cfe2200595fda92198cf7" +SRC_URI = "git://github.com/KhronosGroup/OpenCL-ICD-Loader.git;branch=main;protocol=https" + +EXTRA_OECMAKE_append = " \ + -DOPENCL_ICD_LOADER_HEADERS_DIR=${STAGING_INCDIR} \ +" + +do_install() { + install -d ${D}${bindir} + install -m 0755 ${B}/test/loader_test/icd_loader_test ${D}${bindir}/ + chrpath -d ${D}${bindir}/icd_loader_test + install -d ${D}${libdir} + install -m 0644 ${B}/test/log/libIcdLog.so ${D}${libdir}/ + install -m 0644 ${B}/test/driver_stub/libOpenCLDriverStub.so ${D}${libdir}/ + chrpath -d ${D}${libdir}/libOpenCLDriverStub.so + install -m 0644 ${B}/libOpenCL.so.1.2 ${D}${libdir}/ + cd ${D}${libdir} + ln -s libOpenCL.so.1.2 libOpenCL.so.1 + ln -s libOpenCL.so.1 libOpenCL.so +} + +PACKAGES = "opencl-icd-loader opencl-icd-loader-dev" +PACKAGES += "libicdlog libicdlog-dbg" +PACKAGE_DEBUG_SPLIT_STYLE = "debug-without-src" + +FILES_${PN} = " \ + ${bindir}/icd_loader_test \ + ${libdir}/libOpenCLDriverStub.so \ + ${libdir}/libOpenCL.so.1.2 \ + ${libdir}/libOpenCL.so.1 \ +" +FILES_${PN}-dev = " \ + ${libdir}/libOpenCL.so \ +" + +FILES_libicdlog = "${libdir}/libIcdLog.so" +FILES_libicdlog-dbg = "${libdir}/.debug/libIcdLog.so" + +RDEPENDS_${PN} = "libicdlog" + +FILES_${PN}-dev = "" + +INSANE_SKIP_${PN} = "dev-so" +INSANE_SKIP_${PN}-dev += "dev-elf" + +FILES_${PN} += "${libdir}/libOpenCL*" diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/ade/0001-use-GNUInstallDirs-for-detecting-install-paths.patch b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/ade/0001-use-GNUInstallDirs-for-detecting-install-paths.patch new file mode 100644 index 000000000..f038b0aa9 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/ade/0001-use-GNUInstallDirs-for-detecting-install-paths.patch @@ -0,0 +1,39 @@ +From 67ccf77d97b76e8260c9d793ab172577e2393dbc Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Thu, 19 Dec 2019 21:33:46 -0800 +Subject: [PATCH] use GNUInstallDirs for detecting install paths + +This helps with multilib builds + +Upstream-Status: Submitted [https://github.com/opencv/ade/pull/19] +Signed-off-by: Khem Raj +--- + sources/ade/CMakeLists.txt | 10 ++++++---- + 1 file changed, 6 insertions(+), 4 deletions(-) + +diff --git a/sources/ade/CMakeLists.txt b/sources/ade/CMakeLists.txt +index 2d1dd20..46415d1 100644 +--- a/sources/ade/CMakeLists.txt ++++ b/sources/ade/CMakeLists.txt +@@ -47,12 +47,14 @@ if(BUILD_ADE_DOCUMENTATION) + VERBATIM) + endif() + ++include(GNUInstallDirs) ++ + install(TARGETS ade COMPONENT dev + EXPORT adeTargets +- ARCHIVE DESTINATION lib +- LIBRARY DESTINATION lib +- RUNTIME DESTINATION lib +- INCLUDES DESTINATION include) ++ ARCHIVE DESTINATION ${CMAKE_INSTALL_LIBDIR} ++ LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR} ++ RUNTIME DESTINATION ${CMAKE_INSTALL_LIBDIR} ++ INCLUDES DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}) + + install(EXPORT adeTargets DESTINATION share/ade COMPONENT dev) + +-- +2.24.1 + diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/ade_0.1.1f.bb b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/ade_0.1.1f.bb new file mode 100644 index 000000000..7e9bbc31c --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/ade_0.1.1f.bb @@ -0,0 +1,22 @@ +SUMMARY = "A graph construction, manipulation, and processing framework" +DESCRIPTION = "ADE Framework is a graph construction, manipulation, \ +and processing framework. ADE Framework is suitable for \ +organizing data flow processing and execution." +HOMEPAGE = "https://github.com/opencv/ade" + +SRC_URI = "git://github.com/opencv/ade.git;branch=master;protocol=https \ + file://0001-use-GNUInstallDirs-for-detecting-install-paths.patch \ + " + +SRCREV = "58b2595a1a95cc807be8bf6222f266a9a1f393a9" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" + +inherit cmake + +S = "${WORKDIR}/git" + +EXTRA_OECMAKE += " -DCMAKE_BUILD_TYPE=Release" + +FILES_${PN}-dev += "${datadir}/${BPN}/*.cmake" diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-3rdparty-ippicv-Use-pre-downloaded-ipp.patch b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-3rdparty-ippicv-Use-pre-downloaded-ipp.patch new file mode 100644 index 000000000..9e6a61371 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-3rdparty-ippicv-Use-pre-downloaded-ipp.patch @@ -0,0 +1,36 @@ +From 9b4959b97d2e95d4b49cf6ca2a3fce3cdb484f2d Mon Sep 17 00:00:00 2001 +From: Ricardo Ribalda Delgado +Date: Thu, 31 Mar 2016 00:20:15 +0200 +Subject: [PATCH] 3rdparty/ippicv: Use pre-downloaded ipp + +Signed-off-by: Ricardo Ribalda Delgado +Signed-off-by: Ismo Puustinen + +--- + 3rdparty/ippicv/ippicv.cmake | 15 +-------------- + 1 file changed, 1 insertion(+), 14 deletions(-) + +diff --git a/3rdparty/ippicv/ippicv.cmake b/3rdparty/ippicv/ippicv.cmake +index 257af6fcc6..f88460450f 100644 +--- a/3rdparty/ippicv/ippicv.cmake ++++ b/3rdparty/ippicv/ippicv.cmake +@@ -34,18 +34,5 @@ function(download_ippicv root_var) + endif() + + set(THE_ROOT "${OpenCV_BINARY_DIR}/3rdparty/ippicv") +- ocv_download(FILENAME ${OPENCV_ICV_NAME} +- HASH ${OPENCV_ICV_HASH} +- URL +- "${OPENCV_IPPICV_URL}" +- "$ENV{OPENCV_IPPICV_URL}" +- "https://raw.githubusercontent.com/opencv/opencv_3rdparty/${IPPICV_COMMIT}/ippicv/" +- DESTINATION_DIR "${THE_ROOT}" +- ID IPPICV +- STATUS res +- UNPACK RELATIVE_URL) +- +- if(res) +- set(${root_var} "${THE_ROOT}/${OPENCV_ICV_PACKAGE_SUBDIR}" PARENT_SCOPE) +- endif() ++ set(${root_var} "${THE_ROOT}/${OPENCV_ICV_PACKAGE_SUBDIR}" PARENT_SCOPE) + endfunction() diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-Dont-use-isystem.patch b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-Dont-use-isystem.patch new file mode 100644 index 000000000..948a80faf --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-Dont-use-isystem.patch @@ -0,0 +1,28 @@ +From 66e50ee69fa9ee2469d349100e70d8b296c4b4dc Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Tue, 11 Sep 2018 00:21:18 -0700 +Subject: [PATCH] Dont use isystem + +clang really does not like it + +Upstream-Status: Pending + +Signed-off-by: Khem Raj + +--- + cmake/OpenCVPCHSupport.cmake | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/cmake/OpenCVPCHSupport.cmake b/cmake/OpenCVPCHSupport.cmake +index 08cd06def4..46c9c02da3 100644 +--- a/cmake/OpenCVPCHSupport.cmake ++++ b/cmake/OpenCVPCHSupport.cmake +@@ -18,6 +18,8 @@ IF(CV_GCC) + SET(PCHSupport_FOUND TRUE) + ENDIF() + ++ SET(CMAKE_INCLUDE_SYSTEM_FLAG_C "-I") ++ SET(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-I") + SET(_PCH_include_prefix "-I") + SET(_PCH_isystem_prefix "-isystem") + SET(_PCH_define_prefix "-D") diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-Make-ts-module-external.patch b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-Make-ts-module-external.patch new file mode 100644 index 000000000..d56b8ae67 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-Make-ts-module-external.patch @@ -0,0 +1,42 @@ +From 11bbf909e08594628bd757d989ae34cf1bfe200b Mon Sep 17 00:00:00 2001 +From: Mingli Yu +Date: Thu, 18 Jun 2020 05:51:38 +0000 +Subject: [PATCH] Make ts module external + +Make ts module external + +Reference: https://github.com/qbonnard/opencv/commit/6b229c5834cb9a0930425e762a6c7b03244d7abb + +Upstream-Status: Submitted [https://github.com/opencv/opencv/issues/8408] + +Signed-off-by: Mingli Yu +--- + modules/ts/CMakeLists.txt | 5 +---- + 1 file changed, 1 insertion(+), 4 deletions(-) + +diff --git a/modules/ts/CMakeLists.txt b/modules/ts/CMakeLists.txt +index f95bed0793..66f315bcca 100644 +--- a/modules/ts/CMakeLists.txt ++++ b/modules/ts/CMakeLists.txt +@@ -4,9 +4,6 @@ if(NOT BUILD_opencv_ts AND NOT BUILD_TESTS AND NOT BUILD_PERF_TESTS) + ocv_module_disable(ts) + endif() + +-set(OPENCV_MODULE_TYPE STATIC) +-set(OPENCV_MODULE_IS_PART_OF_WORLD FALSE) +- + if(WINRT) + # WINRT doesn't have access to environment variables + # so adding corresponding macros during CMake run +@@ -16,7 +13,7 @@ endif() + + ocv_warnings_disable(CMAKE_CXX_FLAGS -Wundef) + +-ocv_add_module(ts INTERNAL opencv_core opencv_imgproc opencv_imgcodecs opencv_videoio opencv_highgui) ++ocv_add_module(ts opencv_core opencv_imgproc opencv_imgcodecs opencv_videoio opencv_highgui) + + ocv_glob_module_sources() + ocv_module_include_directories() +-- +2.24.1 + diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-Temporarliy-work-around-deprecated-ffmpeg-RAW-functi.patch b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-Temporarliy-work-around-deprecated-ffmpeg-RAW-functi.patch new file mode 100644 index 000000000..1e47f8b16 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-Temporarliy-work-around-deprecated-ffmpeg-RAW-functi.patch @@ -0,0 +1,31 @@ +From e4ec6cea72da9e9ae5ba57140fa2f5c63f1f8295 Mon Sep 17 00:00:00 2001 +From: Jason Wessel +Date: Wed, 9 May 2018 13:33:59 -0700 +Subject: [PATCH] Temporarliy work around deprecated ffmpeg RAW function + compile failure until next uprev + +Signed-off-by: Jason Wessel + +--- + modules/videoio/src/cap_ffmpeg_impl.hpp | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/modules/videoio/src/cap_ffmpeg_impl.hpp b/modules/videoio/src/cap_ffmpeg_impl.hpp +index 6dca724a89..ae55dd4555 100644 +--- a/modules/videoio/src/cap_ffmpeg_impl.hpp ++++ b/modules/videoio/src/cap_ffmpeg_impl.hpp +@@ -774,6 +774,14 @@ struct ImplMutex::Impl + + #endif + ++/* NOTE This is deprecated in ffmpeg and the code should be removed */ ++#ifndef AVFMT_RAWPICTURE ++#define AVFMT_RAWPICTURE 0x0020 ++#endif /* AVFMT_RAWPICTURE */ ++#ifndef CODEC_FLAG_GLOBAL_HEADER ++#define CODEC_FLAG_GLOBAL_HEADER AV_CODEC_FLAG_GLOBAL_HEADER ++#endif ++ + void ImplMutex::init() + { + impl = new Impl(); diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-Use-Os-to-compile-tinyxml2.cpp.patch b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-Use-Os-to-compile-tinyxml2.cpp.patch new file mode 100644 index 000000000..c5a64387f --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-Use-Os-to-compile-tinyxml2.cpp.patch @@ -0,0 +1,31 @@ +From 59fafe6e39759e193b5764b36b4c5a93da352123 Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Tue, 18 Aug 2020 00:36:49 -0700 +Subject: [PATCH] Use -Os to compile tinyxml2.cpp + +This workarounds issue [1] seen on riscv with gcc + +[1] https://github.com/riscv/riscv-gnu-toolchain/issues/624 + +Upstream-Status: Inappropriate [ OE-Specific ] +Signed-off-by: Khem Raj +--- + modules/datasets/CMakeLists.txt | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/modules/datasets/CMakeLists.txt b/modules/datasets/CMakeLists.txt +index 56ca9e310..99b7a33f6 100644 +--- a/modules/datasets/CMakeLists.txt ++++ b/modules/datasets/CMakeLists.txt +@@ -2,7 +2,7 @@ set(the_description "datasets framework") + + set(filter_srcs "${CMAKE_CURRENT_LIST_DIR}/src/tinyxml2/tinyxml2.cpp") + if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU") +- ocv_append_source_files_cxx_compiler_options(filter_srcs "-Wno-suggest-override") # GCC ++ ocv_append_source_files_cxx_compiler_options(filter_srcs "-Wno-suggest-override -Os") # GCC + elseif(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + ocv_append_source_files_cxx_compiler_options(filter_srcs "-Wno-inconsistent-missing-override") # Clang + endif() +-- +2.28.0 + diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-core-vsx-update-vec_absd-workaround-condition.patch b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-core-vsx-update-vec_absd-workaround-condition.patch new file mode 100644 index 000000000..d2d3b81fb --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0001-core-vsx-update-vec_absd-workaround-condition.patch @@ -0,0 +1,28 @@ +From c7ce902eed0eb7926c0973b1127037fdd27b99ca Mon Sep 17 00:00:00 2001 +From: Alexander Alekhin +Date: Tue, 15 Feb 2022 07:23:32 +0300 +Subject: [PATCH] core(vsx): update vec_absd() workaround condition + +Upstream-Status: Backport [https://github.com/opencv/opencv/commit/8d88bb06b230b5c4b5bca78d84102f5d1adf48cf] +Signed-off-by: Khem Raj +--- + modules/core/include/opencv2/core/vsx_utils.hpp | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/modules/core/include/opencv2/core/vsx_utils.hpp b/modules/core/include/opencv2/core/vsx_utils.hpp +index 68863ffb36..5cbc066784 100644 +--- a/modules/core/include/opencv2/core/vsx_utils.hpp ++++ b/modules/core/include/opencv2/core/vsx_utils.hpp +@@ -684,7 +684,8 @@ VSX_IMPL_LOAD_L8(vec_double2, double) + #endif + + // absolute difference +-#ifndef vec_absd ++#ifndef _ARCH_PWR9 ++# undef vec_absd + # define vec_absd(a, b) vec_sub(vec_max(a, b), vec_min(a, b)) + #endif + +-- +2.36.0 + diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0003-To-fix-errors-as-following.patch b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0003-To-fix-errors-as-following.patch new file mode 100644 index 000000000..bb47ef2ba --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/0003-To-fix-errors-as-following.patch @@ -0,0 +1,70 @@ +From f42c9b8c7bafcadc7e95fb25a391707f970eb426 Mon Sep 17 00:00:00 2001 +From: Huang Qiyu +Date: Fri, 19 May 2017 04:27:50 +0900 +Subject: [PATCH] To fix errors as following: + +"test_main.cpp:45: undefined reference to `parseCustomOptions(int, char**)'" +"perf_abs.cpp:13: undefined reference to `cvtest::param_seed'" +"test_superres.cpp:270: undefined reference to `checkIppStatus()'" + +Signed-off-by: Huang Qiyu + +Also add the visibility changes for certain OpenCL-related functions in +ts module. + +Signed-off-by: Ismo Puustinen + +--- + modules/ts/include/opencv2/ts.hpp | 4 ++-- + modules/ts/include/opencv2/ts/ocl_test.hpp | 2 +- + modules/ts/include/opencv2/ts/ts_ext.hpp | 2 +- + 3 files changed, 4 insertions(+), 4 deletions(-) + +diff --git a/modules/ts/include/opencv2/ts.hpp b/modules/ts/include/opencv2/ts.hpp +index ed7491a89a..80919d13ee 100644 +--- a/modules/ts/include/opencv2/ts.hpp ++++ b/modules/ts/include/opencv2/ts.hpp +@@ -728,7 +728,7 @@ protected: + } + }; + +-extern uint64 param_seed; ++CV_EXPORTS extern uint64 param_seed; + + struct DefaultRngAuto + { +@@ -791,7 +791,7 @@ private: + #endif + #endif + +-void parseCustomOptions(int argc, char **argv); ++CV_EXPORTS void parseCustomOptions(int argc, char **argv); + + #define CV_TEST_INIT0_NOOP (void)0 + +diff --git a/modules/ts/include/opencv2/ts/ocl_test.hpp b/modules/ts/include/opencv2/ts/ocl_test.hpp +index 11572e9f48..438112e2aa 100644 +--- a/modules/ts/include/opencv2/ts/ocl_test.hpp ++++ b/modules/ts/include/opencv2/ts/ocl_test.hpp +@@ -82,7 +82,7 @@ inline UMat ToUMat(InputArray src) + return dst; + } + +-extern int test_loop_times; ++CV_EXPORTS extern int test_loop_times; + + #define MAX_VALUE 357 + +diff --git a/modules/ts/include/opencv2/ts/ts_ext.hpp b/modules/ts/include/opencv2/ts/ts_ext.hpp +index b2a4cac241..b94c681c0c 100644 +--- a/modules/ts/include/opencv2/ts/ts_ext.hpp ++++ b/modules/ts/include/opencv2/ts/ts_ext.hpp +@@ -9,7 +9,7 @@ + #define OPENCV_TS_EXT_HPP + + namespace cvtest { +-void checkIppStatus(); ++CV_EXPORTS void checkIppStatus(); + extern bool skipUnstableTests; + extern bool runBigDataTests; + extern int testThreads; diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/download.patch b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/download.patch new file mode 100644 index 000000000..33ac48312 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/download.patch @@ -0,0 +1,41 @@ +From b18a280fab06a680d9f831bf8b462647f3cb6214 Mon Sep 17 00:00:00 2001 +From: Ross Burton +Date: Thu, 9 Jan 2020 16:24:24 +0000 +Subject: [PATCH] opencv: abort configure if we need to download + +This CMake module will download files during do_configure. This is bad as it +means we can't do offline builds. + +Add an option to disallow downloads by emitting a fatal error. + +Upstream-Status: Pending +Signed-off-by: Ross Burton + +--- + cmake/OpenCVDownload.cmake | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/cmake/OpenCVDownload.cmake b/cmake/OpenCVDownload.cmake +index 63cf6d3238..4acf477f70 100644 +--- a/cmake/OpenCVDownload.cmake ++++ b/cmake/OpenCVDownload.cmake +@@ -14,6 +14,7 @@ + # RELATIVE_URL - if set, then URL is treated as a base, and FILENAME will be appended to it + # Note: uses OPENCV_DOWNLOAD_PATH folder as cache, default is /.cache + ++set(OPENCV_ALLOW_DOWNLOADS ON CACHE BOOL "Allow downloads") + set(HELP_OPENCV_DOWNLOAD_PATH "Cache directory for downloaded files") + if(DEFINED ENV{OPENCV_DOWNLOAD_PATH}) + set(OPENCV_DOWNLOAD_PATH "$ENV{OPENCV_DOWNLOAD_PATH}" CACHE PATH "${HELP_OPENCV_DOWNLOAD_PATH}") +@@ -156,6 +157,11 @@ function(ocv_download) + + # Download + if(NOT EXISTS "${CACHE_CANDIDATE}") ++ if(NOT OPENCV_ALLOW_DOWNLOADS) ++ message(FATAL_ERROR "Not going to download ${DL_FILENAME}") ++ return() ++ endif() ++ + ocv_download_log("#cmake_download \"${CACHE_CANDIDATE}\" \"${DL_URL}\"") + foreach(try ${OPENCV_DOWNLOAD_TRIES_LIST}) + ocv_download_log("#try ${try}") diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/opencv4.pc b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/opencv4.pc new file mode 100644 index 000000000..6ed98424e --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/opencv4.pc @@ -0,0 +1,13 @@ +# Package Information for pkg-config + +prefix=/usr +exec_prefix=${prefix} +libdir=${exec_prefix}/lib +includedir=${prefix}/include/opencv4 + +Name: OpenCV +Description: Open Source Computer Vision Library +Version: 4.5.5 +Libs: -L${exec_prefix}/lib -lopencv_dnn -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_stitching -lopencv_ts -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dpm -lopencv_face -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_sfm -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_highgui -lopencv_datasets -lopencv_plot -lopencv_videostab -lopencv_videoio -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core +Libs.private: -ldl -lm -lpthread -lrt +Cflags: -I${includedir} diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv_4.5.5.bb b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv_4.5.5.bb new file mode 100644 index 000000000..a1e9797b0 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv_4.5.5.bb @@ -0,0 +1,256 @@ +SUMMARY = "Opencv : The Open Computer Vision Library" +HOMEPAGE = "http://opencv.org/" +SECTION = "libs" + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" + +ARM_INSTRUCTION_SET_armv4 = "arm" +ARM_INSTRUCTION_SET_armv5 = "arm" + +DEPENDS = "libtool swig-native bzip2 zlib glib-2.0 libwebp" + +SRCREV_opencv = "dad26339a975b49cfb6c7dbe4bd5276c9dcb36e2" +SRCREV_contrib = "49e8f123ca08e76891856a1ecce491b62d08ba20" +SRCREV_ipp = "a56b6ac6f030c312b2dce17430eef13aed9af274" +SRCREV_boostdesc = "34e4206aef44d50e6bbcd0ab06354b52e7466d26" +SRCREV_vgg = "fccf7cd6a4b12079f73bbfb21745f9babcd4eb1d" +SRCREV_face = "8afa57abc8229d611c4937165d20e2a2d9fc5a12" +SRCREV_wechat-qrcode = "a8b69ccc738421293254aec5ddb38bd523503252" + +def ipp_filename(d): + import re + arch = d.getVar('TARGET_ARCH') + if re.match("i.86$", arch): + return "ippicv_2020_lnx_ia32_20191018_general.tgz" + else: + return "ippicv_2020_lnx_intel64_20191018_general.tgz" + +def ipp_md5sum(d): + import re + arch = d.getVar('TARGET_ARCH') + if re.match("i.86$", arch): + return "ad189a940fb60eb71f291321322fe3e8" + else: + return "7421de0095c7a39162ae13a6098782f9" + +IPP_FILENAME = "${@ipp_filename(d)}" +IPP_MD5 = "${@ipp_md5sum(d)}" + +SRCREV_FORMAT = "opencv_contrib_ipp_boostdesc_vgg" +SRC_URI = "git://github.com/opencv/opencv.git;name=opencv;branch=master;protocol=https \ + git://github.com/opencv/opencv_contrib.git;destsuffix=contrib;name=contrib;branch=master;protocol=https \ + git://github.com/opencv/opencv_3rdparty.git;branch=ippicv/master_20191018;destsuffix=ipp;name=ipp;protocol=https \ + git://github.com/opencv/opencv_3rdparty.git;branch=contrib_xfeatures2d_boostdesc_20161012;destsuffix=boostdesc;name=boostdesc;protocol=https \ + git://github.com/opencv/opencv_3rdparty.git;branch=contrib_xfeatures2d_vgg_20160317;destsuffix=vgg;name=vgg;protocol=https \ + git://github.com/opencv/opencv_3rdparty.git;branch=contrib_face_alignment_20170818;destsuffix=face;name=face;protocol=https \ + git://github.com/WeChatCV/opencv_3rdparty.git;branch=wechat_qrcode;destsuffix=wechat_qrcode;name=wechat-qrcode;protocol=https \ + file://0001-3rdparty-ippicv-Use-pre-downloaded-ipp.patch \ + file://0003-To-fix-errors-as-following.patch \ + file://0001-Temporarliy-work-around-deprecated-ffmpeg-RAW-functi.patch \ + file://0001-Dont-use-isystem.patch \ + file://download.patch \ + file://0001-Make-ts-module-external.patch \ + file://0001-core-vsx-update-vec_absd-workaround-condition.patch \ + file://opencv4.pc \ + " +SRC_URI_append_riscv64 = " file://0001-Use-Os-to-compile-tinyxml2.cpp.patch;patchdir=../contrib" + +S = "${WORKDIR}/git" + +# OpenCV wants to download more files during configure. We download these in +# do_fetch and construct a source cache in the format it expects +OPENCV_DLDIR = "${WORKDIR}/downloads" + +do_unpack_extra() { + tar xzf ${WORKDIR}/ipp/ippicv/${IPP_FILENAME} -C ${WORKDIR} + + md5() { + # Return the MD5 of $1 + echo $(md5sum $1 | cut -d' ' -f1) + } + cache() { + TAG=$1 + shift + mkdir --parents ${OPENCV_DLDIR}/$TAG + for F in $*; do + DEST=${OPENCV_DLDIR}/$TAG/$(md5 $F)-$(basename $F) + test -e $DEST || ln -s $F $DEST + done + } + cache xfeatures2d/boostdesc ${WORKDIR}/boostdesc/*.i + cache xfeatures2d/vgg ${WORKDIR}/vgg/*.i + cache data ${WORKDIR}/face/*.dat + cache wechat_qrcode ${WORKDIR}/wechat_qrcode/*.caffemodel + cache wechat_qrcode ${WORKDIR}/wechat_qrcode/*.prototxt +} +addtask unpack_extra after do_unpack before do_patch + +CMAKE_VERBOSE = "VERBOSE=1" + +EXTRA_OECMAKE = "-DOPENCV_EXTRA_MODULES_PATH=${WORKDIR}/contrib/modules \ + -DWITH_1394=OFF \ + -DENABLE_PRECOMPILED_HEADERS=OFF \ + -DCMAKE_SKIP_RPATH=ON \ + -DOPENCV_ICV_HASH=${IPP_MD5} \ + -DIPPROOT=${WORKDIR}/ippicv_lnx \ + -DOPENCV_GENERATE_PKGCONFIG=ON \ + -DOPENCV_DOWNLOAD_PATH=${OPENCV_DLDIR} \ + -DOPENCV_ALLOW_DOWNLOADS=OFF \ + ${@bb.utils.contains("TARGET_CC_ARCH", "-msse3", "-DENABLE_SSE=1 -DENABLE_SSE2=1 -DENABLE_SSE3=1 -DENABLE_SSSE3=1", "", d)} \ + ${@bb.utils.contains("TARGET_CC_ARCH", "-msse4.1", "-DENABLE_SSE=1 -DENABLE_SSE2=1 -DENABLE_SSE3=1 -DENABLE_SSSE3=1 -DENABLE_SSE41=1", "", d)} \ + ${@bb.utils.contains("TARGET_CC_ARCH", "-msse4.2", "-DENABLE_SSE=1 -DENABLE_SSE2=1 -DENABLE_SSE3=1 -DENABLE_SSSE3=1 -DENABLE_SSE41=1 -DENABLE_SSE42=1", "", d)} \ +" +EXTRA_OECMAKE_append_x86 = " -DX86=ON" +# disable sse4.1 and sse4.2 to fix 32bit build failure +# https://github.com/opencv/opencv/issues/21597 +EXTRA_OECMAKE_remove_x86 = " -DENABLE_SSE41=1 -DENABLE_SSE42=1" + +PACKAGECONFIG ??= "gapi eigen jpeg png tiff v4l libv4l gstreamer opencl gphoto2 dnn text \ + ${@bb.utils.contains("DISTRO_FEATURES", "x11", "gtk", "", d)} \ + ${@bb.utils.contains("DISTRO_FEATURES", "ml-library-size-reduction", "", "samples", d)} \ + ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "libav", "", d)} \ + " + +# TBB does not build for powerpc so disable that package config +PACKAGECONFIG_remove_powerpc = "tbb" +# tbb now needs getcontect/setcontext which is not there for all arches on musl +PACKAGECONFIG_remove_libc-musl_riscv64 = "tbb" +PACKAGECONFIG_remove_libc-musl_riscv32 = "tbb" + +PACKAGECONFIG[gapi] = "-DWITH_ADE=ON -Dade_DIR=${STAGING_LIBDIR},-DWITH_ADE=OFF,ade" +PACKAGECONFIG[amdblas] = "-DWITH_OPENCLAMDBLAS=ON,-DWITH_OPENCLAMDBLAS=OFF,libclamdblas," +PACKAGECONFIG[amdfft] = "-DWITH_OPENCLAMDFFT=ON,-DWITH_OPENCLAMDFFT=OFF,libclamdfft," +PACKAGECONFIG[dnn] = "-DBUILD_opencv_dnn=ON -DPROTOBUF_UPDATE_FILES=ON -DBUILD_PROTOBUF=OFF,-DBUILD_opencv_dnn=OFF,protobuf protobuf-native," +PACKAGECONFIG[eigen] = "-DWITH_EIGEN=ON,-DWITH_EIGEN=OFF,libeigen gflags glog," +PACKAGECONFIG[freetype] = "-DBUILD_opencv_freetype=ON,-DBUILD_opencv_freetype=OFF,freetype," +PACKAGECONFIG[gphoto2] = "-DWITH_GPHOTO2=ON,-DWITH_GPHOTO2=OFF,libgphoto2," +PACKAGECONFIG[gstreamer] = "-DWITH_GSTREAMER=ON,-DWITH_GSTREAMER=OFF,gstreamer1.0 gstreamer1.0-plugins-base," +PACKAGECONFIG[gtk] = "-DWITH_GTK=ON,-DWITH_GTK=OFF,gtk+3," +PACKAGECONFIG[jasper] = "-DWITH_JASPER=ON,-DWITH_JASPER=OFF,jasper," +PACKAGECONFIG[java] = "-DJAVA_INCLUDE_PATH=${JAVA_HOME}/include -DJAVA_INCLUDE_PATH2=${JAVA_HOME}/include/linux -DJAVA_AWT_INCLUDE_PATH=${JAVA_HOME}/include -DJAVA_AWT_LIBRARY=${JAVA_HOME}/lib/amd64/libjawt.so -DJAVA_JVM_LIBRARY=${JAVA_HOME}/lib/amd64/server/libjvm.so,,ant-native fastjar-native openjdk-8-native," +PACKAGECONFIG[jpeg] = "-DWITH_JPEG=ON,-DWITH_JPEG=OFF,jpeg," +PACKAGECONFIG[libav] = "-DWITH_FFMPEG=ON,-DWITH_FFMPEG=OFF,libav," +PACKAGECONFIG[libv4l] = "-DWITH_LIBV4L=ON,-DWITH_LIBV4L=OFF,v4l-utils," +PACKAGECONFIG[opencl] = "-DWITH_OPENCL=ON,-DWITH_OPENCL=OFF,opencl-headers opencl-icd-loader," +PACKAGECONFIG[oracle-java] = "-DJAVA_INCLUDE_PATH=${ORACLE_JAVA_HOME}/include -DJAVA_INCLUDE_PATH2=${ORACLE_JAVA_HOME}/include/linux -DJAVA_AWT_INCLUDE_PATH=${ORACLE_JAVA_HOME}/include -DJAVA_AWT_LIBRARY=${ORACLE_JAVA_HOME}/lib/amd64/libjawt.so -DJAVA_JVM_LIBRARY=${ORACLE_JAVA_HOME}/lib/amd64/server/libjvm.so,,ant-native oracle-jse-jdk oracle-jse-jdk-native," +PACKAGECONFIG[png] = "-DWITH_PNG=ON,-DWITH_PNG=OFF,libpng," +PACKAGECONFIG[python2] = "-DPYTHON2_NUMPY_INCLUDE_DIRS:PATH=${STAGING_LIBDIR}/${PYTHON_DIR}/site-packages/numpy/core/include,,python-numpy," +PACKAGECONFIG[python3] = "-DPYTHON3_NUMPY_INCLUDE_DIRS:PATH=${STAGING_LIBDIR}/${PYTHON_DIR}/site-packages/numpy/core/include,,python3-numpy," +PACKAGECONFIG[samples] = "-DBUILD_EXAMPLES=ON -DINSTALL_PYTHON_EXAMPLES=ON,-DBUILD_EXAMPLES=OFF,," +PACKAGECONFIG[tbb] = "-DWITH_TBB=ON,-DWITH_TBB=OFF,tbb," +PACKAGECONFIG[tests] = "-DBUILD_TESTS=ON,-DBUILD_TESTS=OFF,," +PACKAGECONFIG[text] = "-DBUILD_opencv_text=ON,-DBUILD_opencv_text=OFF,tesseract," +PACKAGECONFIG[tiff] = "-DWITH_TIFF=ON,-DWITH_TIFF=OFF,tiff," +PACKAGECONFIG[v4l] = "-DWITH_V4L=ON,-DWITH_V4L=OFF,v4l-utils," + +inherit pkgconfig cmake + +#inherit ${@bb.utils.contains('PACKAGECONFIG', 'python3', 'setuptools3-base', '', d)} +inherit ${@bb.utils.contains('PACKAGECONFIG', 'python3', 'distutils3-base', '', d)} +inherit ${@bb.utils.contains('PACKAGECONFIG', 'python2', 'distutils-base', '', d)} + +export PYTHON_CSPEC="-I${STAGING_INCDIR}/${PYTHON_DIR}" +export PYTHON="${STAGING_BINDIR_NATIVE}/${@bb.utils.contains('PACKAGECONFIG', 'python3', 'python3', 'python', d)}" +export ORACLE_JAVA_HOME="${STAGING_DIR_NATIVE}/usr/bin/java" +export JAVA_HOME="${STAGING_DIR_NATIVE}/usr/lib/jvm/openjdk-8-native" +export ANT_DIR="${STAGING_DIR_NATIVE}/usr/share/ant/" + +TARGET_CC_ARCH += "-I${S}/include " + +PACKAGES += "${@bb.utils.contains('PACKAGECONFIG', 'samples', '${PN}-samples', '', d)} \ + ${@bb.utils.contains('PACKAGECONFIG', 'oracle-java', '${PN}-java', '', d)} \ + ${@bb.utils.contains('PACKAGECONFIG', 'java', '${PN}-java', '', d)} \ + ${@bb.utils.contains('PACKAGECONFIG', 'python2', 'python-${BPN}', '', d)} \ + ${@bb.utils.contains('PACKAGECONFIG', 'python3', 'python3-${BPN}', '', d)} \ + ${PN}-apps" + +python populate_packages_prepend () { + cv_libdir = d.expand('${libdir}') + do_split_packages(d, cv_libdir, r'^lib(.*)\.so$', 'lib%s-dev', 'OpenCV %s development package', extra_depends='${PN}-dev', allow_links=True) + do_split_packages(d, cv_libdir, r'^lib(.*)\.la$', 'lib%s-dev', 'OpenCV %s development package', extra_depends='${PN}-dev') + do_split_packages(d, cv_libdir, r'^lib(.*)\.a$', 'lib%s-dev', 'OpenCV %s development package', extra_depends='${PN}-dev') + do_split_packages(d, cv_libdir, r'^lib(.*)\.so\.*', 'lib%s', 'OpenCV %s library', extra_depends='', allow_links=True) + + pn = d.getVar('PN') + metapkg = pn + '-dev' + d.setVar('ALLOW_EMPTY:' + metapkg, "1") + blacklist = [ metapkg ] + metapkg_rdepends = [ ] + packages = d.getVar('PACKAGES').split() + for pkg in packages[1:]: + if not pkg in blacklist and not pkg in metapkg_rdepends and pkg.endswith('-dev'): + metapkg_rdepends.append(pkg) + d.setVar('RRECOMMENDS:' + metapkg, ' '.join(metapkg_rdepends)) + + metapkg = pn + d.setVar('ALLOW_EMPTY:' + metapkg, "1") + blacklist = [ metapkg, "libopencv-ts" ] + metapkg_rdepends = [ ] + for pkg in packages[1:]: + if not pkg in blacklist and not pkg in metapkg_rdepends and not pkg.endswith('-dev') and not pkg.endswith('-dbg') and not pkg.endswith('-doc') and not pkg.endswith('-locale') and not pkg.endswith('-staticdev'): + metapkg_rdepends.append(pkg) + d.setVar('RDEPENDS:' + metapkg, ' '.join(metapkg_rdepends)) +} + +PACKAGES_DYNAMIC += "^libopencv-.*" + +FILES_${PN} = "" +FILES_${PN}-dbg += "${datadir}/OpenCV/java/.debug/* ${datadir}/OpenCV/samples/bin/.debug/*" +FILES_${PN}-dev = "${includedir} ${libdir}/pkgconfig ${libdir}/cmake/opencv4/*.cmake" +FILES_${PN}-staticdev += "${libdir}/opencv4/3rdparty/*.a" +FILES_${PN}-apps = "${bindir}/* ${datadir}/opencv4 ${datadir}/licenses" +FILES_${PN}-java = "${datadir}/OpenCV/java" +FILES_${PN}-samples = "${datadir}/opencv4/samples/" + +INSANE_SKIP_${PN}-java = "libdir" +INSANE_SKIP_${PN}-dbg = "libdir" + +ALLOW_EMPTY_${PN} = "1" + +SUMMARY_python-opencv = "Python bindings to opencv" +FILES_python-opencv = "${PYTHON_SITEPACKAGES_DIR}/*" +RDEPENDS_python-opencv = "python-core python-numpy" + +SUMMARY_python3-opencv = "Python bindings to opencv" +FILES_python3-opencv = "${PYTHON_SITEPACKAGES_DIR}/*" +RDEPENDS_python3-opencv = "python3-core python3-numpy" + +RDEPENDS_${PN}-apps = "bash" + +do_compile_prepend() { + # remove the build host info to improve reproducibility + if [ -f ${WORKDIR}/build/modules/core/version_string.inc ]; then + sed -i "s#${WORKDIR}#/workdir#g" ${WORKDIR}/build/modules/core/version_string.inc + fi +} + +do_install_append() { + # Move Python files into correct library folder (for multilib build) + if [ "$libdir" != "/usr/lib" -a -d ${D}/usr/lib ]; then + mv ${D}/usr/lib/* ${D}/${libdir}/ + rm -rf ${D}/usr/lib + fi + # remove build host path to improve reproducibility + if [ -f ${D}${libdir}/cmake/opencv4/OpenCVModules.cmake ]; then + sed -e 's@${STAGING_DIR_HOST}@@g' \ + -i ${D}${libdir}/cmake/opencv4/OpenCVModules.cmake + fi + # remove setup_vars_opencv4.sh as its content is confusing and useless + if [ -f ${D}${bindir}/setup_vars_opencv4.sh ]; then + rm -rf ${D}${bindir}/setup_vars_opencv4.sh + fi + + # install pkgconfig file + install -d ${D}${libdir}/pkgconfig + install -m 0644 ${WORKDIR}/opencv4.pc ${D}${libdir}/pkgconfig/opencv4.pc + + # remove openc-apps for size reduction(about 40MB over) + if ${@bb.utils.contains('DISTRO_FEATURES', 'ml-library-size-reduction', 'true', 'false', d)}; then + rm -rf ${D}/${bindir}/opencv_annotation + rm -rf ${D}/${bindir}/opencv_interactive-calibration + rm -rf ${D}/${bindir}/opencv_model_diagnostics + rm -rf ${D}/${bindir}/opencv_version + rm -rf ${D}/${bindir}/opencv_visualisation + fi +} diff --git a/meta-webos/classes/webos_image.bbclass b/meta-webos/classes/webos_image.bbclass index 5ae4b2ffb..7ef804b42 100644 --- a/meta-webos/classes/webos_image.bbclass +++ b/meta-webos/classes/webos_image.bbclass @@ -34,6 +34,7 @@ WEBOS_IMAGE_BASE_INSTALL = '\ ' WEBOS_IMAGE_EXTRA_INSTALL ?= "" +WEBOS_IMAGE_EXTRA_INSTALL += "${@bb.utils.contains('DISTRO_FEATURES', 'aiframework', 'packagegroup-webos-ml', '', d)}" IMAGE_INSTALL ?= "${WEBOS_IMAGE_BASE_INSTALL}" diff --git a/meta-webos/conf/distro/include/webos-features.inc b/meta-webos/conf/distro/include/webos-features.inc index c8c5c3534..59c308775 100644 --- a/meta-webos/conf/distro/include/webos-features.inc +++ b/meta-webos/conf/distro/include/webos-features.inc @@ -33,6 +33,16 @@ DISTRO_FEATURES_BACKFILL_CONSIDERED += "${WEBOS_DISTRO_FEATURES_LD_CONSIDERED}" WEBOS_DISTRO_FEATURES_TEST = "ptest" +# Includes AI Framework. You can specify the packages to be installed using the following options: +# aiframework: If this feature is specified, tensorflow-lite, opencv, opencl, edgeai-vision will be installed. +# gpu-delegate: If the installation machine supports gpu acceleration, TFLite will build with the gpu delegate function. +# armnn: Arm's ML SDKs arm-compute-library and armnn are installed. Along with this, the TFLite armnn-delegate for TFLite is installed. +# edgetpu: Install libraries for Google Coral Edge TPU. +# ml-library-size-reduction: If the image does not have enough space to install all of the above ML libraries, +# you can reduce the size of the installed library by adding this option. If this option is specified, +# the examples and test codes are excluded from the installation. +WEBOS_DISTRO_FEATURES_AI_FRAMEWORK = "aiframework armnn" + DISTRO_FEATURES = "\ ${WEBOS_DISTRO_FEATURES_DEFAULT} \ ${WEBOS_DISTRO_FEATURES_OPENGL} \ @@ -44,5 +54,6 @@ DISTRO_FEATURES = "\ ${WEBOS_DISTRO_FEATURES_LIBC} \ ${WEBOS_DISTRO_FEATURES_INIT} \ ${WEBOS_DISTRO_FEATURES_TEST} \ + ${WEBOS_DISTRO_FEATURES_AI_FRAMEWORK} \ virtualization \ " diff --git a/meta-webos/conf/distro/include/webos-preferred-versions.inc b/meta-webos/conf/distro/include/webos-preferred-versions.inc index 284fbf6ac..cc58570c9 100644 --- a/meta-webos/conf/distro/include/webos-preferred-versions.inc +++ b/meta-webos/conf/distro/include/webos-preferred-versions.inc @@ -4,3 +4,4 @@ PREFERRED_VERSION_webruntime = "91.%" PREFERRED_VERSION_mksnapshot-cross-${TARGET_ARCH} = "91.%" GOVERSION = "1.16.%" +PREFERRED_VERSION_opencv = "4.5%" diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-ml-sdk.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-ml-sdk.bb new file mode 100644 index 000000000..acf925e8d --- /dev/null +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-ml-sdk.bb @@ -0,0 +1,48 @@ +# Copyright (c) 2022 LG Electronics, Inc. + +DESCRIPTION = "Machine learning dev components used in webOS" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +# You don't need to change this value when you're changing just RDEPENDS:${PN} variable. +PR = "r0" + +PACKAGE_ARCH = "${MACHINE_ARCH}" +inherit packagegroup +inherit webos_machine_impl_dep +inherit webos_prerelease_dep + +RDEPENDS:${PN} = " \ + flatbuffers-dev \ + tensorflow-lite-dev \ + opencl-icd-loader-dev \ + opencv-dev \ + msgpack-c-dev \ + rapidjson-dev \ + jsoncpp-dev \ + edgeai-vision-dev \ + ${@bb.utils.contains('DISTRO_FEATURES', 'armnn', 'arm-compute-library-dev', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'armnn', 'armnn-dev', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'edgetpu', 'libedgetpu-dev', '', d)} \ +" + +USE_WAYLAND = " \ + qtwayland-dev \ + qtwayland-plugins \ + qtwayland-tools \ +" + +RDEPENDS_${PN} += " \ + packagegroup-core-standalone-sdk-target \ + qtbase-dev \ + qtbase-plugins \ + qtbase-staticdev \ + qtbase-tools \ + qtdeclarative-dev \ + qtdeclarative-tools \ + qtdeclarative-staticdev \ + qttools-dev \ + qttools-tools \ + ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', '${USE_WAYLAND}', '', d)} \ + googletest-dev \ +" diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-ml.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-ml.bb new file mode 100644 index 000000000..4bb81b93d --- /dev/null +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-ml.bb @@ -0,0 +1,24 @@ +# Copyright (c) 2022 LG Electronics, Inc. + +DESCRIPTION = "Machine learning components used in webOS" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" + +# You don't need to change this value when you're changing just RDEPENDS:${PN} variable. +PR = "r0" + +PACKAGE_ARCH = "${MACHINE_ARCH}" +inherit packagegroup +inherit webos_machine_impl_dep +inherit webos_prerelease_dep + +RDEPENDS:${PN} = " \ + flatbuffers \ + tensorflow-lite \ + opencl-icd-loader \ + opencv \ + ${@bb.utils.contains('DISTRO_FEATURES', 'armnn', 'arm-compute-library', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'armnn', 'armnn', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'edgetpu', 'libedgetpu', '', d)} \ + edgeai-vision \ +" diff --git a/meta-webos/recipes-core/webos-qt-sdk/webos-qt-sdk.bb b/meta-webos/recipes-core/webos-qt-sdk/webos-qt-sdk.bb index 475430d39..c2120aa3a 100644 --- a/meta-webos/recipes-core/webos-qt-sdk/webos-qt-sdk.bb +++ b/meta-webos/recipes-core/webos-qt-sdk/webos-qt-sdk.bb @@ -2,7 +2,7 @@ SUMMARY = "webOS SDK Toolchain including qt host tools" -PR = "r4" +PR = "r5" TOOLCHAIN_HOST_TASK = "nativesdk-packagegroup-sdk-host" TOOLCHAIN_HOST_TASK += "nativesdk-packagegroup-qt6-toolchain-host" @@ -19,6 +19,7 @@ TOOLCHAIN_HOST_TASK += "${@oe.utils.conditional('EXTERNAL_TOOLCHAIN', '', 'packa # package instead of in linux-libc-headers-dev (which is where the # linux-libc-headers recipe puts them). TOOLCHAIN_TARGET_TASK += "${@oe.utils.conditional('EXTERNAL_TOOLCHAIN', '', '', '${MLPREFIX}linux-libc-headers', d)}" +TOOLCHAIN_TARGET_TASK += "${@bb.utils.contains('DISTRO_FEATURES', 'aiframework', 'packagegroup-webos-ml-sdk', '', d)}" TOOLCHAIN_OUTPUTNAME = "${SDK_NAME}-${WEBOS_DISTRO_BUILD_ID}" diff --git a/meta-webos/recipes-devtools/flatbuffers/flatbuffers_1.12.0.bbappend b/meta-webos/recipes-devtools/flatbuffers/flatbuffers_1.12.0.bbappend new file mode 100644 index 000000000..3b880247c --- /dev/null +++ b/meta-webos/recipes-devtools/flatbuffers/flatbuffers_1.12.0.bbappend @@ -0,0 +1,21 @@ +# Copyright (c) 2022 LG Electronics, Inc. + +inherit python3-dir + +PACKAGE_BEFORE_PN += "${PN}-${PYTHON_PN}" + +RDEPENDS:${PN}-${PYTHON_PN} = "${PN}" + +do_install:append() { + install -d ${D}${PYTHON_SITEPACKAGES_DIR} + cp -rf ${S}/python/flatbuffers ${D}${PYTHON_SITEPACKAGES_DIR} +} + +FILES:${PN}-dev = "" + +INSANE_SKIP:${PN} = "dev-so" +INSANE_SKIP:${PN}-dev += "dev-elf" +FILES:${PN} += "${libdir}/* ${includedir}/*" +FILES:${PN}-${PYTHON_PN} = "${PYTHON_SITEPACKAGES_DIR}" + + diff --git a/meta-webos/recipes-devtools/gcc/gcc-source_9.3%.bbappend b/meta-webos/recipes-devtools/gcc/gcc-source_9.3%.bbappend new file mode 100644 index 000000000..31cc15530 --- /dev/null +++ b/meta-webos/recipes-devtools/gcc/gcc-source_9.3%.bbappend @@ -0,0 +1,16 @@ +# Copyright (c) 2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "smartscreen1" + +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" + +SRC_URI:append = " \ + file://0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch \ + file://0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch \ + file://0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch \ + file://0004-Backport-of-the-patch-for-PR-target-91816.patch \ + file://0005-arm-Fix-up-neon_vector_mem_operand-PR97528.patch \ + file://0006-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch \ + file://0007-arm-xnnpack-neondot-build-error-fix.patch \ +" + diff --git a/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch b/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch new file mode 100644 index 000000000..29fb2d5cc --- /dev/null +++ b/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch @@ -0,0 +1,165 @@ +From 3e40be9cc92d3fa117be7f4fab07cedeed8361a2 Mon Sep 17 00:00:00 2001 +From: Richard Sandiford +Date: Fri, 7 Aug 2020 12:17:37 +0100 +Subject: [PATCH 0434/1466] arm: Clear canary value after stack_protect_test + [PR96191] + +The stack_protect_test patterns were leaving the canary value in the +temporary register, meaning that it was often still in registers on +return from the function. An attacker might therefore have been +able to use it to defeat stack-smash protection for a later function. + +gcc/ + PR target/96191 + * config/arm/arm.md (arm_stack_protect_test_insn): Zero out + operand 2 after use. + * config/arm/thumb1.md (thumb1_stack_protect_test_insn): Likewise. + +gcc/testsuite/ + * gcc.target/arm/stack-protector-1.c: New test. + * gcc.target/arm/stack-protector-2.c: Likewise. + +(cherry picked from commit 6a3f3e08723063ea2dadb7ddf503f02972a724e2) +--- + gcc/config/arm/arm.md | 6 +- + gcc/config/arm/thumb1.md | 8 ++- + .../gcc.target/arm/stack-protector-1.c | 63 +++++++++++++++++++ + .../gcc.target/arm/stack-protector-2.c | 6 ++ + 4 files changed, 78 insertions(+), 5 deletions(-) + create mode 100644 gcc/testsuite/gcc.target/arm/stack-protector-1.c + create mode 100644 gcc/testsuite/gcc.target/arm/stack-protector-2.c + +diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md +index bfb03f1b96d..aa1f23c8e9e 100644 +--- a/gcc/config/arm/arm.md ++++ b/gcc/config/arm/arm.md +@@ -8903,6 +8903,8 @@ + [(set_attr "arch" "t1,32")] + ) + ++;; DO NOT SPLIT THIS PATTERN. It is important for security reasons that the ++;; canary value does not live beyond the end of this sequence. + (define_insn "arm_stack_protect_test_insn" + [(set (reg:CC_Z CC_REGNUM) + (compare:CC_Z (unspec:SI [(match_operand:SI 1 "memory_operand" "m,m") +@@ -8912,8 +8914,8 @@ + (clobber (match_operand:SI 0 "register_operand" "=&l,&r")) + (clobber (match_dup 2))] + "TARGET_32BIT" +- "ldr\t%0, [%2]\;ldr\t%2, %1\;eors\t%0, %2, %0" +- [(set_attr "length" "8,12") ++ "ldr\t%0, [%2]\;ldr\t%2, %1\;eors\t%0, %2, %0\;mov\t%2, #0" ++ [(set_attr "length" "12,16") + (set_attr "conds" "set") + (set_attr "type" "multiple") + (set_attr "arch" "t,32")] +diff --git a/gcc/config/arm/thumb1.md b/gcc/config/arm/thumb1.md +index 041e2db343f..6eca8c49c0e 100644 +--- a/gcc/config/arm/thumb1.md ++++ b/gcc/config/arm/thumb1.md +@@ -2020,6 +2020,8 @@ + [(set_attr "type" "mov_reg")] + ) + ++;; DO NOT SPLIT THIS PATTERN. It is important for security reasons that the ++;; canary value does not live beyond the end of this sequence. + (define_insn "thumb1_stack_protect_test_insn" + [(set (match_operand:SI 0 "register_operand" "=&l") + (unspec:SI [(match_operand:SI 1 "memory_operand" "m") +@@ -2027,9 +2029,9 @@ + UNSPEC_SP_TEST)) + (clobber (match_dup 2))] + "TARGET_THUMB1" +- "ldr\t%0, [%2]\;ldr\t%2, %1\;eors\t%0, %2, %0" +- [(set_attr "length" "8") +- (set_attr "conds" "set") ++ "ldr\t%0, [%2]\;ldr\t%2, %1\;eors\t%0, %2, %0\;movs\t%2, #0" ++ [(set_attr "length" "10") ++ (set_attr "conds" "clob") + (set_attr "type" "multiple")] + ) + +diff --git a/gcc/testsuite/gcc.target/arm/stack-protector-1.c b/gcc/testsuite/gcc.target/arm/stack-protector-1.c +new file mode 100644 +index 00000000000..b03ea14c4e2 +--- /dev/null ++++ b/gcc/testsuite/gcc.target/arm/stack-protector-1.c +@@ -0,0 +1,63 @@ ++/* { dg-do run } */ ++/* { dg-require-effective-target fstack_protector } */ ++/* { dg-options "-fstack-protector-all -O2" } */ ++ ++extern volatile long *stack_chk_guard_ptr; ++ ++volatile long * ++get_ptr (void) ++{ ++ return stack_chk_guard_ptr; ++} ++ ++void __attribute__ ((noipa)) ++f (void) ++{ ++ volatile int x; ++ x = 1; ++ x += 1; ++} ++ ++#define CHECK(REG) "\tcmp\tr0, " #REG "\n\tbeq\t1f\n" ++ ++asm ( ++" .data\n" ++" .align 3\n" ++" .globl stack_chk_guard_ptr\n" ++"stack_chk_guard_ptr:\n" ++" .word __stack_chk_guard\n" ++" .weak __stack_chk_guard\n" ++"__stack_chk_guard:\n" ++" .word 0xdead4321\n" ++" .text\n" ++" .globl main\n" ++" .type main, %function\n" ++"main:\n" ++" bl get_ptr\n" ++" str r0, [sp, #-8]!\n" ++" bl f\n" ++" str r0, [sp, #4]\n" ++" ldr r0, [sp]\n" ++" ldr r0, [r0]\n" ++ CHECK (r1) ++ CHECK (r2) ++ CHECK (r3) ++ CHECK (r4) ++ CHECK (r5) ++ CHECK (r6) ++ CHECK (r7) ++ CHECK (r8) ++ CHECK (r9) ++ CHECK (r10) ++ CHECK (r11) ++ CHECK (r12) ++ CHECK (r13) ++ CHECK (r14) ++" ldr r1, [sp, #4]\n" ++ CHECK (r1) ++" mov r0, #0\n" ++" b exit\n" ++"1:\n" ++" b abort\n" ++" .size main, .-main" ++); +diff --git a/gcc/testsuite/gcc.target/arm/stack-protector-2.c b/gcc/testsuite/gcc.target/arm/stack-protector-2.c +new file mode 100644 +index 00000000000..266c36fdbc6 +--- /dev/null ++++ b/gcc/testsuite/gcc.target/arm/stack-protector-2.c +@@ -0,0 +1,6 @@ ++/* { dg-do run } */ ++/* { dg-require-effective-target fstack_protector } */ ++/* { dg-require-effective-target fpic } */ ++/* { dg-options "-fstack-protector-all -O2 -fpic" } */ ++ ++#include "stack-protector-1.c" +-- +2.17.1 + diff --git a/meta-webos/recipes-devtools/gcc/gcc/0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch b/meta-webos/recipes-devtools/gcc/gcc/0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch new file mode 100644 index 000000000..bcdb175f0 --- /dev/null +++ b/meta-webos/recipes-devtools/gcc/gcc/0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch @@ -0,0 +1,53 @@ +From 071cfcbc065569dd2384f03634f991afefa9fbea Mon Sep 17 00:00:00 2001 +From: Christophe Lyon +Date: Wed, 12 Aug 2020 09:22:38 +0000 +Subject: [PATCH 0444/1466] testsuite: Fix gcc.target/arm/stack-protector-1.c + for Cortex-M + +The stack-protector-1.c test fails when compiled for Cortex-M: +- for Cortex-M0/M1, str r0, [sp #-8]! is not supported +- for Cortex-M3/M4..., the assembler complains that "use of r13 is + deprecated" + +This patch replaces the str instruction with + sub sp, sp, #8 + str r0, [sp] +and removes the check for r13, which is unlikely to leak the canary +value. + +2020-08-11 Christophe Lyon + + gcc/testsuite/ + * gcc.target/arm/stack-protector-1.c: Adapt code to Cortex-M + restrictions. + +(cherry picked from commit 6606fdc0aad85cbca1bb58e1b2ffe05611aabd7a) +--- + gcc/testsuite/gcc.target/arm/stack-protector-1.c | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/gcc/testsuite/gcc.target/arm/stack-protector-1.c b/gcc/testsuite/gcc.target/arm/stack-protector-1.c +index b03ea14c4e2..8d28b0a847c 100644 +--- a/gcc/testsuite/gcc.target/arm/stack-protector-1.c ++++ b/gcc/testsuite/gcc.target/arm/stack-protector-1.c +@@ -34,7 +34,8 @@ asm ( + " .type main, %function\n" + "main:\n" + " bl get_ptr\n" +-" str r0, [sp, #-8]!\n" ++" sub sp, sp, #8\n" ++" str r0, [sp]\n" + " bl f\n" + " str r0, [sp, #4]\n" + " ldr r0, [sp]\n" +@@ -51,7 +52,6 @@ asm ( + CHECK (r10) + CHECK (r11) + CHECK (r12) +- CHECK (r13) + CHECK (r14) + " ldr r1, [sp, #4]\n" + CHECK (r1) +-- +2.17.1 + diff --git a/meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-arm.c-build-error.patch b/meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-arm.c-build-error.patch new file mode 100644 index 000000000..58e90c523 --- /dev/null +++ b/meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-arm.c-build-error.patch @@ -0,0 +1,55 @@ +From bd5e3027dcee5d8abecf74e6da9c197bacce6f8d Mon Sep 17 00:00:00 2001 +From: "kijoong.lee" +Date: Tue, 16 Nov 2021 04:59:33 +0000 +Subject: [PATCH] arm: Fix arm.c build error + +--- + gcc/config/arm/arm.c | 10 ++++++++++ + 1 file changed, 10 insertions(+) + +diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c +index 71b42ae24..73f6ea3da 100644 +--- a/gcc/config/arm/arm.c ++++ b/gcc/config/arm/arm.c +@@ -3113,6 +3113,7 @@ arm_option_override_internal (struct gcc_options *opts, + } + + static sbitmap isa_all_fpubits; ++static sbitmap isa_all_fpbits; + static sbitmap isa_quirkbits; + + /* Configure a build target TARGET from the user-specified options OPTS and +@@ -3181,6 +3182,11 @@ arm_configure_build_target (struct arm_build_target *target, + /* Ignore (for now) any bits that might be set by -mfpu. */ + bitmap_and_compl (isa_delta, isa_delta, isa_all_fpubits); + ++ /* And if the target ISA lacks floating point, ignore any ++ extensions that depend on that. */ ++ if (!bitmap_bit_p (target->isa, isa_bit_vfpv2)) ++ bitmap_and_compl (isa_delta, isa_delta, isa_all_fpbits); ++ + if (!bitmap_empty_p (isa_delta)) + { + if (warn_compatible) +@@ -3371,6 +3377,8 @@ arm_option_override (void) + { + static const enum isa_feature fpu_bitlist[] + = { ISA_ALL_FPU_INTERNAL, isa_nobit }; ++ static const enum isa_feature fp_bitlist[] ++ = { ISA_ALL_FP, isa_nobit }; + static const enum isa_feature quirk_bitlist[] = { ISA_ALL_QUIRKS, isa_nobit}; + cl_target_option opts; + +@@ -3378,7 +3386,9 @@ arm_option_override (void) + arm_initialize_isa (isa_quirkbits, quirk_bitlist); + + isa_all_fpubits = sbitmap_alloc (isa_num_bits); ++ isa_all_fpbits = sbitmap_alloc (isa_num_bits); + arm_initialize_isa (isa_all_fpubits, fpu_bitlist); ++ arm_initialize_isa (isa_all_fpbits, fp_bitlist); + + arm_active_target.isa = sbitmap_alloc (isa_num_bits); + +-- +2.17.1 + diff --git a/meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch b/meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch new file mode 100644 index 000000000..267931516 --- /dev/null +++ b/meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch @@ -0,0 +1,163 @@ +From 967a5f8e585a5d499870903849c0fa06c326547a Mon Sep 17 00:00:00 2001 +From: Christophe Lyon +Date: Wed, 19 Aug 2020 09:02:21 +0000 +Subject: [PATCH 0474/1466] arm: Fix -mpure-code support/-mslow-flash-data for + armv8-m.base [PR94538] + +armv8-m.base (cortex-m23) has the movt instruction, so we need to +disable the define_split to generate a constant in this case, +otherwise we get incorrect insn constraints as described in PR94538. + +We also need to fix the pure-code alternative for thumb1_movsi_insn +because the assembler complains with instructions like +movs r0, #:upper8_15:1234 +(Internal error in md_apply_fix) +We now generate movs r0, 4 instead. + +2020-08-24 Christophe Lyon + + PR target/94538 + gcc/ + * config/arm/thumb1.md: Disable set-constant splitter when + TARGET_HAVE_MOVT. + (thumb1_movsi_insn): Fix -mpure-code + alternative. + + PR target/94538 + gcc/testsuite/ + * gcc.target/arm/pure-code/pr94538-1.c: New test. + * gcc.target/arm/pure-code/pr94538-2.c: New test. + +(cherry picked from commit 259d072067997ab8f55afcf735c91b6740fd0425) +--- + gcc/config/arm/thumb1.md | 66 +++++++++++++++---- + .../gcc.target/arm/pure-code/pr94538-1.c | 13 ++++ + .../gcc.target/arm/pure-code/pr94538-2.c | 12 ++++ + 3 files changed, 79 insertions(+), 12 deletions(-) + create mode 100644 gcc/testsuite/gcc.target/arm/pure-code/pr94538-1.c + create mode 100644 gcc/testsuite/gcc.target/arm/pure-code/pr94538-2.c + +diff --git a/gcc/config/arm/thumb1.md b/gcc/config/arm/thumb1.md +index 6eca8c49c0e..8f051f87c0f 100644 +--- a/gcc/config/arm/thumb1.md ++++ b/gcc/config/arm/thumb1.md +@@ -70,6 +70,7 @@ + "TARGET_THUMB1 + && arm_disable_literal_pool + && GET_CODE (operands[1]) == CONST_INT ++ && !TARGET_HAVE_MOVT + && !satisfies_constraint_I (operands[1])" + [(clobber (const_int 0))] + " +@@ -696,18 +697,59 @@ + "TARGET_THUMB1 + && ( register_operand (operands[0], SImode) + || register_operand (operands[1], SImode))" +- "@ +- movs %0, %1 +- movs %0, %1 +- movw %0, %1 +- # +- # +- ldmia\\t%1, {%0} +- stmia\\t%0, {%1} +- movs\\t%0, #:upper8_15:%1; lsls\\t%0, #8; adds\\t%0, #:upper0_7:%1; lsls\\t%0, #8; adds\\t%0, #:lower8_15:%1; lsls\\t%0, #8; adds\\t%0, #:lower0_7:%1 +- ldr\\t%0, %1 +- str\\t%1, %0 +- mov\\t%0, %1" ++{ ++ switch (which_alternative) ++ { ++ default: ++ case 0: return "movs\t%0, %1"; ++ case 1: return "movs\t%0, %1"; ++ case 2: return "movw\t%0, %1"; ++ case 3: return "#"; ++ case 4: return "#"; ++ case 5: return "ldmia\t%1, {%0}"; ++ case 6: return "stmia\t%0, {%1}"; ++ case 7: ++ /* pure-code alternative: build the constant byte by byte, ++ instead of loading it from a constant pool. */ ++ { ++ int i; ++ HOST_WIDE_INT op1 = INTVAL (operands[1]); ++ bool mov_done_p = false; ++ rtx ops[2]; ++ ops[0] = operands[0]; ++ ++ /* Emit upper 3 bytes if needed. */ ++ for (i = 0; i < 3; i++) ++ { ++ int byte = (op1 >> (8 * (3 - i))) & 0xff; ++ ++ if (byte) ++ { ++ ops[1] = GEN_INT (byte); ++ if (mov_done_p) ++ output_asm_insn ("adds\t%0, %1", ops); ++ else ++ output_asm_insn ("movs\t%0, %1", ops); ++ mov_done_p = true; ++ } ++ ++ if (mov_done_p) ++ output_asm_insn ("lsls\t%0, #8", ops); ++ } ++ ++ /* Emit lower byte if needed. */ ++ ops[1] = GEN_INT (op1 & 0xff); ++ if (!mov_done_p) ++ output_asm_insn ("movs\t%0, %1", ops); ++ else if (op1 & 0xff) ++ output_asm_insn ("adds\t%0, %1", ops); ++ return ""; ++ } ++ case 8: return "ldr\t%0, %1"; ++ case 9: return "str\t%1, %0"; ++ case 10: return "mov\t%0, %1"; ++ } ++} + [(set_attr "length" "2,2,4,4,4,2,2,14,2,2,2") + (set_attr "type" "mov_reg,mov_imm,mov_imm,multiple,multiple,load_4,store_4,alu_sreg,load_4,store_4,mov_reg") + (set_attr "pool_range" "*,*,*,*,*,*,*, *,1018,*,*") +diff --git a/gcc/testsuite/gcc.target/arm/pure-code/pr94538-1.c b/gcc/testsuite/gcc.target/arm/pure-code/pr94538-1.c +new file mode 100644 +index 00000000000..31061d5d445 +--- /dev/null ++++ b/gcc/testsuite/gcc.target/arm/pure-code/pr94538-1.c +@@ -0,0 +1,13 @@ ++/* { dg-do compile } */ ++/* { dg-skip-if "skip override" { *-*-* } { "-mfloat-abi=hard" } { "" } } */ ++/* { dg-options "-mpure-code -mcpu=cortex-m23 -march=armv8-m.base -mthumb -mfloat-abi=soft" } */ ++ ++typedef int __attribute__ ((__vector_size__ (16))) V; ++ ++V v; ++ ++void ++foo (void) ++{ ++ v += (V){4095}; ++} +diff --git a/gcc/testsuite/gcc.target/arm/pure-code/pr94538-2.c b/gcc/testsuite/gcc.target/arm/pure-code/pr94538-2.c +new file mode 100644 +index 00000000000..c1789da6780 +--- /dev/null ++++ b/gcc/testsuite/gcc.target/arm/pure-code/pr94538-2.c +@@ -0,0 +1,12 @@ ++/* { dg-do compile } */ ++/* { dg-options "-mpure-code" } */ ++ ++typedef int __attribute__ ((__vector_size__ (16))) V; ++ ++V v; ++ ++void ++foo (void) ++{ ++ v += (V){4095}; ++} +-- +2.17.1 + diff --git a/meta-webos/recipes-devtools/gcc/gcc/0004-Backport-of-the-patch-for-PR-target-91816.patch b/meta-webos/recipes-devtools/gcc/gcc/0004-Backport-of-the-patch-for-PR-target-91816.patch new file mode 100644 index 000000000..05e69b81f --- /dev/null +++ b/meta-webos/recipes-devtools/gcc/gcc/0004-Backport-of-the-patch-for-PR-target-91816.patch @@ -0,0 +1,305 @@ +From 6b7ab0e565d79a7e6ae5dbbf17a5eb4eafe56dc8 Mon Sep 17 00:00:00 2001 +From: Stam Markianos-Wright +Date: Mon, 30 Nov 2020 11:05:30 +0000 +Subject: [PATCH 0720/1466] Backport of the patch for PR target/91816 + +This is a patch for an issue where the compiler was generating a +conditional branch in Thumb2, which was too far for b{cond} to handle. + +This backport also includes the subsequent fixes to the test in this +patch. + +gcc/ChangeLog + + * config/arm/arm-protos.h: New function arm_gen_far_branch prototype. + * config/arm/arm.c (arm_gen_far_branch): New function + arm_gen_far_branch. + * config/arm/arm.md: Update b for Thumb2 range checks. + +gcc/testsuite/ChangeLog + + * gcc.target/arm/pr91816.c: New test. +--- + gcc/config/arm/arm-protos.h | 2 + + gcc/config/arm/arm.c | 33 ++++++++ + gcc/config/arm/arm.md | 112 +++++++++++++++++++------ + gcc/testsuite/gcc.target/arm/pr91816.c | 64 ++++++++++++++ + 4 files changed, 185 insertions(+), 26 deletions(-) + create mode 100644 gcc/testsuite/gcc.target/arm/pr91816.c + +diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h +index 98beb6109b9..3e8bba5caea 100644 +--- a/gcc/config/arm/arm-protos.h ++++ b/gcc/config/arm/arm-protos.h +@@ -575,4 +575,6 @@ void arm_parse_option_features (sbitmap, const cpu_arch_option *, + + void arm_initialize_isa (sbitmap, const enum isa_feature *); + ++const char * arm_gen_far_branch (rtx *, int, const char * , const char *); ++ + #endif /* ! GCC_ARM_PROTOS_H */ +diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c +index d4e2ad2a317..04edd637d43 100644 +--- a/gcc/config/arm/arm.c ++++ b/gcc/config/arm/arm.c +@@ -31807,6 +31807,39 @@ arm_emit_speculation_barrier_function () + emit_library_call (speculation_barrier_libfunc, LCT_NORMAL, VOIDmode); + } + ++/* Generate code to enable conditional branches in functions over 1 MiB. ++ Parameters are: ++ operands: is the operands list of the asm insn (see arm_cond_branch or ++ arm_cond_branch_reversed). ++ pos_label: is an index into the operands array where operands[pos_label] is ++ the asm label of the final jump destination. ++ dest: is a string which is used to generate the asm label of the intermediate ++ destination ++ branch_format: is a string denoting the intermediate branch format, e.g. ++ "beq", "bne", etc. */ ++ ++const char * ++arm_gen_far_branch (rtx * operands, int pos_label, const char * dest, ++ const char * branch_format) ++{ ++ rtx_code_label * tmp_label = gen_label_rtx (); ++ char label_buf[256]; ++ char buffer[128]; ++ ASM_GENERATE_INTERNAL_LABEL (label_buf, dest , \ ++ CODE_LABEL_NUMBER (tmp_label)); ++ const char *label_ptr = arm_strip_name_encoding (label_buf); ++ rtx dest_label = operands[pos_label]; ++ operands[pos_label] = tmp_label; ++ ++ snprintf (buffer, sizeof (buffer), "%s%s", branch_format , label_ptr); ++ output_asm_insn (buffer, operands); ++ ++ snprintf (buffer, sizeof (buffer), "b\t%%l0%d\n%s:", pos_label, label_ptr); ++ operands[pos_label] = dest_label; ++ output_asm_insn (buffer, operands); ++ return ""; ++} ++ + #if CHECKING_P + namespace selftest { + +diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md +index aa1f23c8e9e..b5df489dca4 100644 +--- a/gcc/config/arm/arm.md ++++ b/gcc/config/arm/arm.md +@@ -7313,9 +7313,15 @@ + ;; And for backward branches we have + ;; (neg_range - neg_base_offs + pc_offs) = (neg_range - (-2 or -4) + 4). + ;; ++;; In 16-bit Thumb these ranges are: + ;; For a 'b' pos_range = 2046, neg_range = -2048 giving (-2040->2048). + ;; For a 'b' pos_range = 254, neg_range = -256 giving (-250 ->256). + ++;; In 32-bit Thumb these ranges are: ++;; For a 'b' +/- 16MB is not checked for. ++;; For a 'b' pos_range = 1048574, neg_range = -1048576 giving ++;; (-1048568 -> 1048576). ++ + (define_expand "cbranchsi4" + [(set (pc) (if_then_else + (match_operator 0 "expandable_comparison_operator" +@@ -7573,23 +7579,50 @@ + (label_ref (match_operand 0 "" "")) + (pc)))] + "TARGET_32BIT" +- "* +- if (arm_ccfsm_state == 1 || arm_ccfsm_state == 2) ++ { ++ if (arm_ccfsm_state == 1 || arm_ccfsm_state == 2) + { + arm_ccfsm_state += 2; +- return \"\"; ++ return ""; + } +- return \"b%d1\\t%l0\"; +- " ++ switch (get_attr_length (insn)) ++ { ++ case 2: /* Thumb2 16-bit b{cond}. */ ++ case 4: /* Thumb2 32-bit b{cond} or A32 b{cond}. */ ++ return "b%d1\t%l0"; ++ break; ++ ++ /* Thumb2 b{cond} out of range. Use 16-bit b{cond} and ++ unconditional branch b. */ ++ default: return arm_gen_far_branch (operands, 0, "Lbcond", "b%D1\t"); ++ } ++ } + [(set_attr "conds" "use") + (set_attr "type" "branch") + (set (attr "length") +- (if_then_else +- (and (match_test "TARGET_THUMB2") +- (and (ge (minus (match_dup 0) (pc)) (const_int -250)) +- (le (minus (match_dup 0) (pc)) (const_int 256)))) +- (const_int 2) +- (const_int 4)))] ++ (if_then_else (match_test "!TARGET_THUMB2") ++ ++ ;;Target is not Thumb2, therefore is A32. Generate b{cond}. ++ (const_int 4) ++ ++ ;; Check if target is within 16-bit Thumb2 b{cond} range. ++ (if_then_else (and (ge (minus (match_dup 0) (pc)) (const_int -250)) ++ (le (minus (match_dup 0) (pc)) (const_int 256))) ++ ++ ;; Target is Thumb2, within narrow range. ++ ;; Generate b{cond}. ++ (const_int 2) ++ ++ ;; Check if target is within 32-bit Thumb2 b{cond} range. ++ (if_then_else (and (ge (minus (match_dup 0) (pc))(const_int -1048568)) ++ (le (minus (match_dup 0) (pc)) (const_int 1048576))) ++ ++ ;; Target is Thumb2, within wide range. ++ ;; Generate b{cond} ++ (const_int 4) ++ ;; Target is Thumb2, out of range. ++ ;; Generate narrow b{cond} and unconditional branch b. ++ (const_int 6)))))] + ) + + (define_insn "*arm_cond_branch_reversed" +@@ -7599,23 +7632,50 @@ + (pc) + (label_ref (match_operand 0 "" ""))))] + "TARGET_32BIT" +- "* +- if (arm_ccfsm_state == 1 || arm_ccfsm_state == 2) +- { +- arm_ccfsm_state += 2; +- return \"\"; +- } +- return \"b%D1\\t%l0\"; +- " +- [(set_attr "conds" "use") ++ { ++ if (arm_ccfsm_state == 1 || arm_ccfsm_state == 2) ++ { ++ arm_ccfsm_state += 2; ++ return ""; ++ } ++ switch (get_attr_length (insn)) ++ { ++ case 2: /* Thumb2 16-bit b{cond}. */ ++ case 4: /* Thumb2 32-bit b{cond} or A32 b{cond}. */ ++ return "b%D1\t%l0"; ++ break; ++ ++ /* Thumb2 b{cond} out of range. Use 16-bit b{cond} and ++ unconditional branch b. */ ++ default: return arm_gen_far_branch (operands, 0, "Lbcond", "b%d1\t"); ++ } ++ } ++[(set_attr "conds" "use") + (set_attr "type" "branch") + (set (attr "length") +- (if_then_else +- (and (match_test "TARGET_THUMB2") +- (and (ge (minus (match_dup 0) (pc)) (const_int -250)) +- (le (minus (match_dup 0) (pc)) (const_int 256)))) +- (const_int 2) +- (const_int 4)))] ++ (if_then_else (match_test "!TARGET_THUMB2") ++ ++ ;;Target is not Thumb2, therefore is A32. Generate b{cond}. ++ (const_int 4) ++ ++ ;; Check if target is within 16-bit Thumb2 b{cond} range. ++ (if_then_else (and (ge (minus (match_dup 0) (pc)) (const_int -250)) ++ (le (minus (match_dup 0) (pc)) (const_int 256))) ++ ++ ;; Target is Thumb2, within narrow range. ++ ;; Generate b{cond}. ++ (const_int 2) ++ ++ ;; Check if target is within 32-bit Thumb2 b{cond} range. ++ (if_then_else (and (ge (minus (match_dup 0) (pc))(const_int -1048568)) ++ (le (minus (match_dup 0) (pc)) (const_int 1048576))) ++ ++ ;; Target is Thumb2, within wide range. ++ ;; Generate b{cond}. ++ (const_int 4) ++ ;; Target is Thumb2, out of range. ++ ;; Generate narrow b{cond} and unconditional branch b. ++ (const_int 6)))))] + ) + + +diff --git a/gcc/testsuite/gcc.target/arm/pr91816.c b/gcc/testsuite/gcc.target/arm/pr91816.c +new file mode 100644 +index 00000000000..f1269141690 +--- /dev/null ++++ b/gcc/testsuite/gcc.target/arm/pr91816.c +@@ -0,0 +1,64 @@ ++/* { dg-do compile } */ ++/* { dg-require-effective-target arm_thumb2_ok } */ ++/* { dg-additional-options "-mthumb" } */ ++/* { dg-timeout-factor 4.0 } */ ++ ++int printf(const char *, ...); ++ ++#define HW0 printf("Hello World!\n"); ++#define HW1 HW0 HW0 HW0 HW0 HW0 HW0 HW0 HW0 HW0 HW0 ++#define HW2 HW1 HW1 HW1 HW1 HW1 HW1 HW1 HW1 HW1 HW1 ++#define HW3 HW2 HW2 HW2 HW2 HW2 HW2 HW2 HW2 HW2 HW2 ++#define HW4 HW3 HW3 HW3 HW3 HW3 HW3 HW3 HW3 HW3 HW3 ++#define HW5 HW4 HW4 HW4 HW4 HW4 HW4 HW4 HW4 HW4 HW4 ++#define HW6 HW5 HW5 ++ ++__attribute__((noinline,noclone)) void f1 (int a) ++{ ++ if (a) { HW0 } ++} ++ ++__attribute__((noinline,noclone)) void f2 (int a) ++{ ++ if (a) { HW3 } ++} ++ ++ ++__attribute__((noinline,noclone)) void f3 (int a) ++{ ++ if (a) { HW6 } ++} ++ ++__attribute__((noinline,noclone)) void f4 (int a) ++{ ++ if (a == 1) { HW0 } ++} ++ ++__attribute__((noinline,noclone)) void f5 (int a) ++{ ++ if (a == 1) { HW3 } ++} ++ ++ ++__attribute__((noinline,noclone)) void f6 (int a) ++{ ++ if (a == 1) { HW6 } ++} ++ ++ ++int main(void) ++{ ++ f1(0); ++ f2(0); ++ f3(0); ++ f4(0); ++ f5(0); ++ f6(0); ++ return 0; ++} ++ ++ ++/* { dg-final { scan-assembler-times "beq\\t.L\[0-9\]" 2 } } */ ++/* { dg-final { scan-assembler-times "beq\\t.Lbcond\[0-9\]" 1 } } */ ++/* { dg-final { scan-assembler-times "bne\\t.L\[0-9\]" 2 } } */ ++/* { dg-final { scan-assembler-times "bne\\t.Lbcond\[0-9\]" 1 } } */ +-- +2.17.1 + diff --git a/meta-webos/recipes-devtools/gcc/gcc/0005-arm-Fix-up-neon_vector_mem_operand-PR97528.patch b/meta-webos/recipes-devtools/gcc/gcc/0005-arm-Fix-up-neon_vector_mem_operand-PR97528.patch new file mode 100644 index 000000000..3a9b8a636 --- /dev/null +++ b/meta-webos/recipes-devtools/gcc/gcc/0005-arm-Fix-up-neon_vector_mem_operand-PR97528.patch @@ -0,0 +1,88 @@ +From 320d8676c770124a4baffab2d9e82224c74964ed Mon Sep 17 00:00:00 2001 +From: Jakub Jelinek +Date: Fri, 20 Nov 2020 12:26:58 +0100 +Subject: [PATCH 0858/1466] arm: Fix up neon_vector_mem_operand [PR97528] + +The documentation for POST_MODIFY says: + Currently, the compiler can only handle second operands of the + form (plus (reg) (reg)) and (plus (reg) (const_int)), where + the first operand of the PLUS has to be the same register as + the first operand of the *_MODIFY. +The following testcase ICEs, because combine just attempts to simplify +things and ends up with +(post_modify (reg1) (plus (mult (reg2) (const_int 4)) (reg1)) +but the target predicates accept it, because they only verify +that POST_MODIFY's second operand is PLUS and the second operand +of the PLUS is a REG. + +The following patch fixes this by performing further verification that +the POST_MODIFY is in the form it should be. + +2020-11-20 Jakub Jelinek + + PR target/97528 + * config/arm/arm.c (neon_vector_mem_operand): For POST_MODIFY, require + first POST_MODIFY operand is a REG and is equal to the first operand + of PLUS. + + * gcc.target/arm/pr97528.c: New test. + +(cherry picked from commit 410b8f6f41920dad200cd709f9f3de8b840a995c) +--- + gcc/config/arm/arm.c | 4 +++- + gcc/testsuite/gcc.target/arm/pr97528.c | 28 ++++++++++++++++++++++++++ + 2 files changed, 31 insertions(+), 1 deletion(-) + create mode 100644 gcc/testsuite/gcc.target/arm/pr97528.c + +diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c +index 04edd637d43..4679da75dd8 100644 +--- a/gcc/config/arm/arm.c ++++ b/gcc/config/arm/arm.c +@@ -12730,7 +12730,9 @@ neon_vector_mem_operand (rtx op, int type, bool strict) + /* Allow post-increment by register for VLDn */ + if (type == 2 && GET_CODE (ind) == POST_MODIFY + && GET_CODE (XEXP (ind, 1)) == PLUS +- && REG_P (XEXP (XEXP (ind, 1), 1))) ++ && REG_P (XEXP (XEXP (ind, 1), 1)) ++ && REG_P (XEXP (ind, 0)) ++ && rtx_equal_p (XEXP (ind, 0), XEXP (XEXP (ind, 1), 0))) + return true; + + /* Match: +diff --git a/gcc/testsuite/gcc.target/arm/pr97528.c b/gcc/testsuite/gcc.target/arm/pr97528.c +new file mode 100644 +index 00000000000..6cc59f2158c +--- /dev/null ++++ b/gcc/testsuite/gcc.target/arm/pr97528.c +@@ -0,0 +1,28 @@ ++/* PR target/97528 */ ++/* { dg-do compile } */ ++/* { dg-require-effective-target arm_neon_ok } */ ++/* { dg-options "-O1" } */ ++/* { dg-add-options arm_neon } */ ++ ++#include ++ ++typedef __simd64_int16_t T; ++typedef __simd64_uint16_t U; ++unsigned short c; ++int d; ++U e; ++ ++void ++foo (void) ++{ ++ unsigned short *dst = &c; ++ int g = d, b = 4; ++ U dc = e; ++ for (int h = 0; h < b; h++) ++ { ++ unsigned short *i = dst; ++ U j = dc; ++ vst1_s16 ((int16_t *) i, (T) j); ++ dst += g; ++ } ++} +-- +2.17.1 + diff --git a/meta-webos/recipes-devtools/gcc/gcc/0006-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch b/meta-webos/recipes-devtools/gcc/gcc/0006-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch new file mode 100644 index 000000000..861b2350a --- /dev/null +++ b/meta-webos/recipes-devtools/gcc/gcc/0006-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch @@ -0,0 +1,420 @@ +From ecdb697389b284a0f3912932e0a440c1071fbadd Mon Sep 17 00:00:00 2001 +From: Prathamesh Kulkarni +Date: Mon, 24 Feb 2020 11:55:45 +0530 +Subject: [PATCH 0983/1466] PR47785: Add support for handling Xassembler/Wa + options with LTO. + +Skip the test if arm7a is not supported at link time. This is the case +if the toolchain targets an M-profile CPU by default and does not have +A-profile multilib: the link step fails because it tries to mix +M-profile startup files with A-profile testcase. + +gcc/ + +2020-02-24 Prathamesh Kulkarni + Kugan Vivekandarajah + + PR driver/47785 + * gcc.c (putenv_COLLECT_AS_OPTIONS): New function. + (driver::main): Call putenv_COLLECT_AS_OPTIONS. + * opts-common.c (parse_options_from_collect_gcc_options): New function. + (prepend_xassembler_to_collect_as_options): Likewise. + * opts.h (parse_options_from_collect_gcc_options): Declare prototype. + (prepend_xassembler_to_collect_as_options): Likewise. + * lto-opts.c (lto_write_options): Stream assembler options + in COLLECT_AS_OPTIONS. + * lto-wrapper.c (xassembler_options_error): New static variable. + (get_options_from_collect_gcc_options): Move parsing options code to + parse_options_from_collect_gcc_options and call it. + (merge_and_complain): Validate -Xassembler options. + (append_compiler_options): Handle OPT_Xassembler. + (run_gcc): Append command line -Xassembler options to + collect_gcc_options. + * doc/invoke.texi: Add documentation about using Xassembler + options with LTO. + +gcc/testsuite/ + +2020-02-24 Christophe Lyon + + PR lto/78353 + * gcc.target/arm/pr78353-1.c: Add arm_arch_v7a_multilib effective + target. + * gcc.target/arm/pr78353-2.c: Likewise. + +2020-02-24 Prathamesh Kulkarni + Kugan Vivekandarajah + + * gcc.target/arm/pr78353-1.c: New test. + * gcc.target/arm/pr78353-2.c: Likewise. + +(cherry picked from commit f1a681a174cdfb82e62c246d6f4add9a25fc2e43) +--- + gcc/doc/invoke.texi | 6 ++ + gcc/gcc.c | 29 +++++++ + gcc/lto-opts.c | 6 ++ + gcc/lto-wrapper.c | 102 ++++++++++++++++------- + gcc/opts-common.c | 66 +++++++++++++++ + gcc/opts.h | 5 ++ + gcc/testsuite/gcc.target/arm/pr78353-1.c | 9 ++ + gcc/testsuite/gcc.target/arm/pr78353-2.c | 10 +++ + 8 files changed, 202 insertions(+), 31 deletions(-) + create mode 100644 gcc/testsuite/gcc.target/arm/pr78353-1.c + create mode 100644 gcc/testsuite/gcc.target/arm/pr78353-2.c + +diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi +index 280fcc910ad..c39efa0e33e 100644 +--- a/gcc/doc/invoke.texi ++++ b/gcc/doc/invoke.texi +@@ -10273,6 +10273,12 @@ conflicting translation units. Specifically + precedence; and for example @option{-ffp-contract=off} takes precedence + over @option{-ffp-contract=fast}. You can override them at link time. + ++When you need to pass options to the assembler via @option{-Wa} or ++@option{-Xassembler} make sure to either compile such translation ++units with @option{-fno-lto} or consistently use the same assembler ++options on all translation units. You can alternatively also ++specify assembler options at LTO link time. ++ + If LTO encounters objects with C linkage declared with incompatible + types in separate translation units to be linked together (undefined + behavior according to ISO C99 6.2.7), a non-fatal diagnostic may be +diff --git a/gcc/gcc.c b/gcc/gcc.c +index 4f57765b012..410ba67a4b0 100644 +--- a/gcc/gcc.c ++++ b/gcc/gcc.c +@@ -5240,6 +5240,34 @@ do_specs_vec (vec vec) + } + } + ++/* Add options passed via -Xassembler or -Wa to COLLECT_AS_OPTIONS. */ ++ ++static void ++putenv_COLLECT_AS_OPTIONS (vec vec) ++{ ++ if (vec.is_empty ()) ++ return; ++ ++ obstack_init (&collect_obstack); ++ obstack_grow (&collect_obstack, "COLLECT_AS_OPTIONS=", ++ strlen ("COLLECT_AS_OPTIONS=")); ++ ++ char *opt; ++ unsigned ix; ++ ++ FOR_EACH_VEC_ELT (vec, ix, opt) ++ { ++ obstack_1grow (&collect_obstack, '\''); ++ obstack_grow (&collect_obstack, opt, strlen (opt)); ++ obstack_1grow (&collect_obstack, '\''); ++ if (ix < vec.length () - 1) ++ obstack_1grow(&collect_obstack, ' '); ++ } ++ ++ obstack_1grow (&collect_obstack, '\0'); ++ xputenv (XOBFINISH (&collect_obstack, char *)); ++} ++ + /* Process the sub-spec SPEC as a portion of a larger spec. + This is like processing a whole spec except that we do + not initialize at the beginning and we do not supply a +@@ -7355,6 +7383,7 @@ driver::main (int argc, char **argv) + global_initializations (); + build_multilib_strings (); + set_up_specs (); ++ putenv_COLLECT_AS_OPTIONS (assembler_options); + putenv_COLLECT_GCC (argv[0]); + maybe_putenv_COLLECT_LTO_WRAPPER (); + maybe_putenv_OFFLOAD_TARGETS (); +diff --git a/gcc/lto-opts.c b/gcc/lto-opts.c +index 5e59e9327e7..bb0cdfae029 100644 +--- a/gcc/lto-opts.c ++++ b/gcc/lto-opts.c +@@ -159,6 +159,12 @@ lto_write_options (void) + append_to_collect_gcc_options (&temporary_obstack, &first_p, + option->canonical_option[j]); + } ++ ++ const char *collect_as_options = getenv ("COLLECT_AS_OPTIONS"); ++ if (collect_as_options) ++ prepend_xassembler_to_collect_as_options (collect_as_options, ++ &temporary_obstack); ++ + obstack_grow (&temporary_obstack, "\0", 1); + args = XOBFINISH (&temporary_obstack, char *); + lto_write_data (args, strlen (args) + 1); +diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c +index 10bd7c9becb..d12135ade1f 100644 +--- a/gcc/lto-wrapper.c ++++ b/gcc/lto-wrapper.c +@@ -73,6 +73,7 @@ static char *offload_objects_file_name; + static char *makefile; + static unsigned int num_deb_objs; + static const char **early_debug_object_names; ++static bool xassembler_options_error = false; + + const char tool_name[] = "lto-wrapper"; + +@@ -137,41 +138,14 @@ get_options_from_collect_gcc_options (const char *collect_gcc, + unsigned int *decoded_options_count) + { + struct obstack argv_obstack; +- char *argv_storage; + const char **argv; +- int j, k, argc; ++ int argc; + +- argv_storage = xstrdup (collect_gcc_options); + obstack_init (&argv_obstack); + obstack_ptr_grow (&argv_obstack, collect_gcc); + +- for (j = 0, k = 0; argv_storage[j] != '\0'; ++j) +- { +- if (argv_storage[j] == '\'') +- { +- obstack_ptr_grow (&argv_obstack, &argv_storage[k]); +- ++j; +- do +- { +- if (argv_storage[j] == '\0') +- fatal_error (input_location, "malformed COLLECT_GCC_OPTIONS"); +- else if (strncmp (&argv_storage[j], "'\\''", 4) == 0) +- { +- argv_storage[k++] = '\''; +- j += 4; +- } +- else if (argv_storage[j] == '\'') +- break; +- else +- argv_storage[k++] = argv_storage[j++]; +- } +- while (1); +- argv_storage[k++] = '\0'; +- } +- } +- +- obstack_ptr_grow (&argv_obstack, NULL); +- argc = obstack_object_size (&argv_obstack) / sizeof (void *) - 1; ++ parse_options_from_collect_gcc_options (collect_gcc_options, ++ &argv_obstack, &argc); + argv = XOBFINISH (&argv_obstack, const char **); + + decode_cmdline_options_to_array (argc, (const char **)argv, CL_DRIVER, +@@ -509,6 +483,45 @@ merge_and_complain (struct cl_decoded_option **decoded_options, + } + else + j++; ++ ++ if (!xassembler_options_error) ++ for (i = j = 0; ; i++, j++) ++ { ++ for (; i < *decoded_options_count; i++) ++ if ((*decoded_options)[i].opt_index == OPT_Xassembler) ++ break; ++ ++ for (; j < fdecoded_options_count; j++) ++ if (fdecoded_options[j].opt_index == OPT_Xassembler) ++ break; ++ ++ if (i == *decoded_options_count && j == fdecoded_options_count) ++ break; ++ else if (i < *decoded_options_count && j == fdecoded_options_count) ++ { ++ warning (0, "Extra option to -Xassembler: %s," ++ " dropping all -Xassembler and -Wa options.", ++ (*decoded_options)[i].arg); ++ xassembler_options_error = true; ++ break; ++ } ++ else if (i == *decoded_options_count && j < fdecoded_options_count) ++ { ++ warning (0, "Extra option to -Xassembler: %s," ++ " dropping all -Xassembler and -Wa options.", ++ fdecoded_options[j].arg); ++ xassembler_options_error = true; ++ break; ++ } ++ else if (strcmp ((*decoded_options)[i].arg, fdecoded_options[j].arg)) ++ { ++ warning (0, "Options to Xassembler do not match: %s, %s," ++ " dropping all -Xassembler and -Wa options.", ++ (*decoded_options)[i].arg, fdecoded_options[j].arg); ++ xassembler_options_error = true; ++ break; ++ } ++ } + } + + /* Auxiliary function that frees elements of PTR and PTR itself. +@@ -622,6 +635,13 @@ append_compiler_options (obstack *argv_obstack, struct cl_decoded_option *opts, + case OPT_Os: + break; + ++ case OPT_Xassembler: ++ /* When we detected a mismatch in assembler options between ++ the input TU's fall back to previous behavior of ignoring them. */ ++ if (xassembler_options_error) ++ continue; ++ break; ++ + default: + if (!(cl_options[option->opt_index].flags & CL_TARGET)) + continue; +@@ -1117,7 +1137,8 @@ run_gcc (unsigned argc, char *argv[]) + const char **argv_ptr; + char *list_option_full = NULL; + const char *linker_output = NULL; +- const char *collect_gcc, *collect_gcc_options; ++ const char *collect_gcc; ++ char *collect_gcc_options; + int parallel = 0; + int jobserver = 0; + bool no_partition = false; +@@ -1146,6 +1167,25 @@ run_gcc (unsigned argc, char *argv[]) + if (!collect_gcc_options) + fatal_error (input_location, + "environment variable COLLECT_GCC_OPTIONS must be set"); ++ ++ char *collect_as_options = getenv ("COLLECT_AS_OPTIONS"); ++ ++ /* Prepend -Xassembler to each option, and append the string ++ to collect_gcc_options. */ ++ if (collect_as_options) ++ { ++ obstack temporary_obstack; ++ obstack_init (&temporary_obstack); ++ ++ prepend_xassembler_to_collect_as_options (collect_as_options, ++ &temporary_obstack); ++ obstack_1grow (&temporary_obstack, '\0'); ++ ++ char *xassembler_opts_string ++ = XOBFINISH (&temporary_obstack, char *); ++ strcat (collect_gcc_options, xassembler_opts_string); ++ } ++ + get_options_from_collect_gcc_options (collect_gcc, collect_gcc_options, + &decoded_options, + &decoded_options_count); +diff --git a/gcc/opts-common.c b/gcc/opts-common.c +index d0b943bc819..fb48005b665 100644 +--- a/gcc/opts-common.c ++++ b/gcc/opts-common.c +@@ -1711,3 +1711,69 @@ control_warning_option (unsigned int opt_index, int kind, const char *arg, + } + } + } ++ ++/* Parse options in COLLECT_GCC_OPTIONS and push them on ARGV_OBSTACK. ++ Store number of arguments into ARGC_P. */ ++ ++void ++parse_options_from_collect_gcc_options (const char *collect_gcc_options, ++ obstack *argv_obstack, ++ int *argc_p) ++{ ++ char *argv_storage = xstrdup (collect_gcc_options); ++ int j, k; ++ ++ for (j = 0, k = 0; argv_storage[j] != '\0'; ++j) ++ { ++ if (argv_storage[j] == '\'') ++ { ++ obstack_ptr_grow (argv_obstack, &argv_storage[k]); ++ ++j; ++ do ++ { ++ if (argv_storage[j] == '\0') ++ fatal_error (input_location, ++ "malformed %"); ++ else if (strncmp (&argv_storage[j], "'\\''", 4) == 0) ++ { ++ argv_storage[k++] = '\''; ++ j += 4; ++ } ++ else if (argv_storage[j] == '\'') ++ break; ++ else ++ argv_storage[k++] = argv_storage[j++]; ++ } ++ while (1); ++ argv_storage[k++] = '\0'; ++ } ++ } ++ ++ obstack_ptr_grow (argv_obstack, NULL); ++ *argc_p = obstack_object_size (argv_obstack) / sizeof (void *) - 1; ++} ++ ++/* Prepend -Xassembler for each option in COLLECT_AS_OPTIONS, ++ and push on O. */ ++ ++void prepend_xassembler_to_collect_as_options (const char *collect_as_options, ++ obstack *o) ++{ ++ obstack opts_obstack; ++ int opts_count; ++ ++ obstack_init (&opts_obstack); ++ parse_options_from_collect_gcc_options (collect_as_options, ++ &opts_obstack, &opts_count); ++ const char **assembler_opts = XOBFINISH (&opts_obstack, const char **); ++ ++ for (int i = 0; i < opts_count; i++) ++ { ++ obstack_grow (o, " '-Xassembler' ", ++ strlen (" '-Xassembler' ")); ++ const char *opt = assembler_opts[i]; ++ obstack_1grow (o, '\''); ++ obstack_grow (o, opt, strlen (opt)); ++ obstack_1grow (o, '\''); ++ } ++} +diff --git a/gcc/opts.h b/gcc/opts.h +index f14d9bcb896..c517458ddef 100644 +--- a/gcc/opts.h ++++ b/gcc/opts.h +@@ -456,4 +456,9 @@ extern bool parse_and_check_align_values (const char *flag, + bool report_error, + location_t loc); + ++extern void parse_options_from_collect_gcc_options (const char *, obstack *, ++ int *); ++ ++extern void prepend_xassembler_to_collect_as_options (const char *, obstack *); ++ + #endif +diff --git a/gcc/testsuite/gcc.target/arm/pr78353-1.c b/gcc/testsuite/gcc.target/arm/pr78353-1.c +new file mode 100644 +index 00000000000..a107e300269 +--- /dev/null ++++ b/gcc/testsuite/gcc.target/arm/pr78353-1.c +@@ -0,0 +1,9 @@ ++/* { dg-do link } */ ++/* { dg-require-effective-target arm_arch_v7a_multilib } */ ++/* { dg-options "-march=armv7-a -mthumb -O2 -flto -Wa,-mimplicit-it=always" } */ ++ ++int main(int x) ++{ ++ asm("teq %0, #0; addne %0, %0, #1" : "=r" (x)); ++ return x; ++} +diff --git a/gcc/testsuite/gcc.target/arm/pr78353-2.c b/gcc/testsuite/gcc.target/arm/pr78353-2.c +new file mode 100644 +index 00000000000..2589e6135aa +--- /dev/null ++++ b/gcc/testsuite/gcc.target/arm/pr78353-2.c +@@ -0,0 +1,10 @@ ++/* { dg-do link } */ ++/* { dg-require-effective-target arm_arch_v7a_multilib } */ ++/* { dg-options "-march=armv7-a -mthumb -O2 -flto -Wa,-mimplicit-it=always,-mthumb" } */ ++ ++int main(int x) ++{ ++ asm("teq %0, #0; addne %0, %0, #1" : "=r" (x)); ++ return x; ++} ++ +-- +2.17.1 + diff --git a/meta-webos/recipes-devtools/gcc/gcc/0007-arm-xnnpack-neondot-build-error-fix.patch b/meta-webos/recipes-devtools/gcc/gcc/0007-arm-xnnpack-neondot-build-error-fix.patch new file mode 100644 index 000000000..5a0e2b184 --- /dev/null +++ b/meta-webos/recipes-devtools/gcc/gcc/0007-arm-xnnpack-neondot-build-error-fix.patch @@ -0,0 +1,754 @@ +From 4e30d76f885150e3501a9a2858d12353871cfd36 Mon Sep 17 00:00:00 2001 +From: "kijoong.lee" +Date: Tue, 16 Nov 2021 16:24:25 +0000 +Subject: [PATCH] arm: xnnpack neondot build error fix + +--- + gcc/config/arm/arm-c.c | 4 +- + gcc/config/arm/arm-cpus.in | 51 +++++-- + gcc/config/arm/arm-protos.h | 3 +- + gcc/config/arm/arm.c | 270 ++++++++++++++++++------------------ + 4 files changed, 178 insertions(+), 150 deletions(-) + +diff --git a/gcc/config/arm/arm-c.c b/gcc/config/arm/arm-c.c +index 6e256ee0a..8cb08646c 100644 +--- a/gcc/config/arm/arm-c.c ++++ b/gcc/config/arm/arm-c.c +@@ -266,8 +266,8 @@ arm_pragma_target_parse (tree args, tree pop_target) + target_option_current_node, but not handle_pragma_target. */ + target_option_current_node = cur_tree; + arm_configure_build_target (&arm_active_target, +- TREE_TARGET_OPTION (cur_tree), +- &global_options_set, false); ++ TREE_TARGET_OPTION (cur_tree), false); ++ arm_option_reconfigure_globals (); + } + + /* Update macros if target_node changes. The global state will be restored +diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in +index 3a55f6ac6..de2caec54 100644 +--- a/gcc/config/arm/arm-cpus.in ++++ b/gcc/config/arm/arm-cpus.in +@@ -180,6 +180,9 @@ define feature quirk_armv6kz + # Cortex-M3 LDRD quirk. + define feature quirk_cm3_ldrd + ++# Don't use .cpu assembly directive ++define feature quirk_no_asmcpu ++ + # (Very) slow multiply operations. Should probably be a tuning bit. + define feature smallmul + +@@ -213,15 +216,18 @@ define fgroup ALL_CRYPTO crypto + # strip off 32 D-registers, but does not remove support for + # double-precision FP. + define fgroup ALL_SIMD_INTERNAL fp_d32 neon ALL_CRYPTO +-define fgroup ALL_SIMD ALL_SIMD_INTERNAL dotprod fp16fml ++define fgroup ALL_SIMD_EXTERNAL dotprod fp16fml ++define fgroup ALL_SIMD ALL_SIMD_INTERNAL ALL_SIMD_EXTERNAL + + # List of all FPU bits to strip out if -mfpu is used to override the + # default. fp16 is deliberately missing from this list. + define fgroup ALL_FPU_INTERNAL vfpv2 vfpv3 vfpv4 fpv5 fp16conv fp_dbl ALL_SIMD_INTERNAL +- + # Similarly, but including fp16 and other extensions that aren't part of + # -mfpu support. +-define fgroup ALL_FP fp16 ALL_FPU_INTERNAL ++define fgroup ALL_FPU_EXTERNAL fp16 ++ ++# Everything related to the FPU extensions (FP or SIMD). ++define fgroup ALL_FP ALL_FPU_EXTERNAL ALL_FPU_INTERNAL ALL_SIMD + + define fgroup ARMv4 armv4 notm + define fgroup ARMv4t ARMv4 thumb +@@ -274,7 +280,7 @@ define fgroup DOTPROD NEON dotprod + # architectures. + # xscale isn't really a 'quirk', but it isn't an architecture either and we + # need to ignore it for matching purposes. +-define fgroup ALL_QUIRKS quirk_no_volatile_ce quirk_armv6kz quirk_cm3_ldrd xscale ++define fgroup ALL_QUIRKS quirk_no_volatile_ce quirk_armv6kz quirk_cm3_ldrd xscale quirk_no_asmcpu + + # Architecture entries + # format: +@@ -976,6 +982,7 @@ begin cpu generic-armv7-a + cname genericv7a + tune flags LDSCHED + architecture armv7-a+fp ++ isa quirk_no_asmcpu + option mp add mp + option sec add sec + option vfpv3-d16 add VFPv3 FP_DBL +@@ -1301,7 +1308,7 @@ begin cpu cortex-a55 + cname cortexa55 + tune for cortex-a53 + tune flags LDSCHED +- architecture armv8.2-a+fp16+dotprod+simd ++ architecture armv8.2-a+fp16+dotprod + option crypto add FP_ARMv8 CRYPTO + option nofp remove ALL_FP + costs cortex_a53 +@@ -1313,7 +1320,7 @@ begin cpu cortex-a75 + cname cortexa75 + tune for cortex-a57 + tune flags LDSCHED +- architecture armv8.2-a+fp16+dotprod+simd ++ architecture armv8.2-a+fp16+dotprod + option crypto add FP_ARMv8 CRYPTO + costs cortex_a73 + vendor 41 +@@ -1324,7 +1331,7 @@ begin cpu cortex-a76 + cname cortexa76 + tune for cortex-a57 + tune flags LDSCHED +- architecture armv8.2-a+fp16+dotprod+simd ++ architecture armv8.2-a+fp16+dotprod + option crypto add FP_ARMv8 CRYPTO + costs cortex_a57 + vendor 41 +@@ -1336,7 +1343,7 @@ begin cpu neoverse-n1 + alias !ares + tune for cortex-a57 + tune flags LDSCHED +- architecture armv8.2-a+fp16+dotprod+simd ++ architecture armv8.2-a+fp16+dotprod + option crypto add FP_ARMv8 CRYPTO + costs cortex_a57 + vendor 41 +@@ -1348,7 +1355,7 @@ begin cpu cortex-a75.cortex-a55 + cname cortexa75cortexa55 + tune for cortex-a53 + tune flags LDSCHED +- architecture armv8.2-a+fp16+dotprod+simd ++ architecture armv8.2-a+fp16+dotprod + option crypto add FP_ARMv8 CRYPTO + costs cortex_a73 + end cpu cortex-a75.cortex-a55 +@@ -1357,11 +1364,35 @@ begin cpu cortex-a76.cortex-a55 + cname cortexa76cortexa55 + tune for cortex-a53 + tune flags LDSCHED +- architecture armv8.2-a+fp16+dotprod+simd ++ architecture armv8.2-a+fp16+dotprod + option crypto add FP_ARMv8 CRYPTO + costs cortex_a57 + end cpu cortex-a76.cortex-a55 + ++# Armv8.4 A-profile Architecture Processors ++begin cpu neoverse-v1 ++ cname neoversev1 ++ tune for cortex-a57 ++ tune flags LDSCHED ++ architecture armv8.4-a+fp16 ++ option crypto add FP_ARMv8 CRYPTO ++ costs cortex_a57 ++ vendor 41 ++ part 0xd40 ++end cpu neoverse-v1 ++ ++# Armv8.5 A-profile Architecture Processors ++begin cpu neoverse-n2 ++ cname neoversen2 ++ tune for cortex-a57 ++ tune flags LDSCHED ++ architecture armv8.5-a+fp16 ++ option crypto add FP_ARMv8 CRYPTO ++ costs cortex_a57 ++ vendor 41 ++ part 0xd49 ++end cpu neoverse-n2 ++ + # V8 M-profile implementations. + begin cpu cortex-m23 + cname cortexm23 +diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h +index 3e8bba5ca..cd16c3c35 100644 +--- a/gcc/config/arm/arm-protos.h ++++ b/gcc/config/arm/arm-protos.h +@@ -229,8 +229,7 @@ extern bool arm_change_mode_p (tree); + extern tree arm_valid_target_attribute_tree (tree, struct gcc_options *, + struct gcc_options *); + extern void arm_configure_build_target (struct arm_build_target *, +- struct cl_target_option *, +- struct gcc_options *, bool); ++ struct cl_target_option *, bool); + extern void arm_option_reconfigure_globals (void); + extern void arm_options_perform_arch_sanity_checks (void); + extern void arm_pr_long_calls (struct cpp_reader *); +diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c +index cf8774a78..58afc4a26 100644 +--- a/gcc/config/arm/arm.c ++++ b/gcc/config/arm/arm.c +@@ -78,10 +78,6 @@ + typedef struct minipool_node Mnode; + typedef struct minipool_fixup Mfix; + +-/* The last .arch and .fpu assembly strings that we printed. */ +-static std::string arm_last_printed_arch_string; +-static std::string arm_last_printed_fpu_string; +- + void (*arm_lang_output_object_attributes_hook)(void); + + struct four_ints +@@ -325,6 +321,7 @@ static unsigned int arm_hard_regno_nregs (unsigned int, machine_mode); + static bool arm_hard_regno_mode_ok (unsigned int, machine_mode); + static bool arm_modes_tieable_p (machine_mode, machine_mode); + static HOST_WIDE_INT arm_constant_alignment (const_tree, HOST_WIDE_INT); ++static const char *arm_identify_fpu_from_isa (sbitmap); + + /* Table of machine attributes. */ + static const struct attribute_spec arm_attribute_table[] = +@@ -2985,7 +2982,7 @@ arm_override_options_after_change (void) + { + arm_configure_build_target (&arm_active_target, + TREE_TARGET_OPTION (target_option_default_node), +- &global_options_set, false); ++ false); + + arm_override_options_after_change_1 (&global_options); + } +@@ -3006,8 +3003,8 @@ arm_option_restore (struct gcc_options *opts, struct cl_target_option *ptr) + opts->x_arm_arch_string = ptr->x_arm_arch_string; + opts->x_arm_cpu_string = ptr->x_arm_cpu_string; + opts->x_arm_tune_string = ptr->x_arm_tune_string; +- arm_configure_build_target (&arm_active_target, ptr, &global_options_set, +- false); ++ arm_configure_build_target (&arm_active_target, ptr, false); ++ arm_option_reconfigure_globals (); + } + + /* Reset options between modes that the user has specified. */ +@@ -3115,7 +3112,8 @@ arm_option_override_internal (struct gcc_options *opts, + #endif + } + +-static sbitmap isa_all_fpubits; ++static sbitmap isa_all_fpubits_internal; ++static sbitmap isa_all_fpbits; + static sbitmap isa_quirkbits; + + /* Configure a build target TARGET from the user-specified options OPTS and +@@ -3124,7 +3122,6 @@ static sbitmap isa_quirkbits; + void + arm_configure_build_target (struct arm_build_target *target, + struct cl_target_option *opts, +- struct gcc_options *opts_set, + bool warn_compatible) + { + const cpu_option *arm_selected_tune = NULL; +@@ -3139,7 +3136,7 @@ arm_configure_build_target (struct arm_build_target *target, + target->core_name = NULL; + target->arch_name = NULL; + +- if (opts_set->x_arm_arch_string) ++ if (opts->x_arm_arch_string) + { + arm_selected_arch = arm_parse_arch_option_name (all_architectures, + "-march", +@@ -3147,7 +3144,7 @@ arm_configure_build_target (struct arm_build_target *target, + arch_opts = strchr (opts->x_arm_arch_string, '+'); + } + +- if (opts_set->x_arm_cpu_string) ++ if (opts->x_arm_cpu_string) + { + arm_selected_cpu = arm_parse_cpu_option_name (all_cores, "-mcpu", + opts->x_arm_cpu_string); +@@ -3157,7 +3154,7 @@ arm_configure_build_target (struct arm_build_target *target, + options for tuning. */ + } + +- if (opts_set->x_arm_tune_string) ++ if (opts->x_arm_tune_string) + { + arm_selected_tune = arm_parse_cpu_option_name (all_cores, "-mtune", + opts->x_arm_tune_string); +@@ -3182,7 +3179,12 @@ arm_configure_build_target (struct arm_build_target *target, + /* Ignore any bits that are quirk bits. */ + bitmap_and_compl (isa_delta, isa_delta, isa_quirkbits); + /* Ignore (for now) any bits that might be set by -mfpu. */ +- bitmap_and_compl (isa_delta, isa_delta, isa_all_fpubits); ++ bitmap_and_compl (isa_delta, isa_delta, isa_all_fpubits_internal); ++ ++ /* And if the target ISA lacks floating point, ignore any ++ extensions that depend on that. */ ++ if (!bitmap_bit_p (target->isa, isa_bit_vfpv2)) ++ bitmap_and_compl (isa_delta, isa_delta, isa_all_fpbits); + + if (!bitmap_empty_p (isa_delta)) + { +@@ -3341,10 +3343,15 @@ arm_configure_build_target (struct arm_build_target *target, + auto_sbitmap fpu_bits (isa_num_bits); + + arm_initialize_isa (fpu_bits, arm_selected_fpu->isa_bits); +- bitmap_and_compl (target->isa, target->isa, isa_all_fpubits); ++ bitmap_and_compl (target->isa, target->isa, isa_all_fpubits_internal); + bitmap_ior (target->isa, target->isa, fpu_bits); + } + ++ /* If we have the soft-float ABI, clear any feature bits relating to use of ++ floating-point operations. They'll just confuse things later on. */ ++ if (arm_float_abi == ARM_FLOAT_ABI_SOFT) ++ bitmap_and_compl (target->isa, target->isa, isa_all_fpbits); ++ + if (!arm_selected_tune) + arm_selected_tune = arm_selected_cpu; + else /* Validate the features passed to -mtune. */ +@@ -3353,6 +3360,8 @@ arm_configure_build_target (struct arm_build_target *target, + const cpu_tune *tune_data = &all_tunes[arm_selected_tune - all_cores]; + + /* Finish initializing the target structure. */ ++ if (!target->arch_name) ++ target->arch_name = arm_selected_arch->common.name; + target->arch_pp_name = arm_selected_arch->arch; + target->base_arch = arm_selected_arch->base_arch; + target->profile = arm_selected_arch->profile; +@@ -3360,23 +3369,26 @@ arm_configure_build_target (struct arm_build_target *target, + target->tune_flags = tune_data->tune_flags; + target->tune = tune_data->tune; + target->tune_core = tune_data->scheduler; +- arm_option_reconfigure_globals (); + } + + /* Fix up any incompatible options that the user has specified. */ + static void + arm_option_override (void) + { +- static const enum isa_feature fpu_bitlist[] ++ static const enum isa_feature fpu_bitlist_internal[] + = { ISA_ALL_FPU_INTERNAL, isa_nobit }; ++ static const enum isa_feature fp_bitlist[] ++ = { ISA_ALL_FP, isa_nobit }; + static const enum isa_feature quirk_bitlist[] = { ISA_ALL_QUIRKS, isa_nobit}; + cl_target_option opts; + + isa_quirkbits = sbitmap_alloc (isa_num_bits); + arm_initialize_isa (isa_quirkbits, quirk_bitlist); + +- isa_all_fpubits = sbitmap_alloc (isa_num_bits); +- arm_initialize_isa (isa_all_fpubits, fpu_bitlist); ++ isa_all_fpubits_internal = sbitmap_alloc (isa_num_bits); ++ isa_all_fpbits = sbitmap_alloc (isa_num_bits); ++ arm_initialize_isa (isa_all_fpubits_internal, fpu_bitlist_internal); ++ arm_initialize_isa (isa_all_fpbits, fp_bitlist); + + arm_active_target.isa = sbitmap_alloc (isa_num_bits); + +@@ -3392,8 +3404,7 @@ arm_option_override (void) + } + + cl_target_option_save (&opts, &global_options); +- arm_configure_build_target (&arm_active_target, &opts, &global_options_set, +- true); ++ arm_configure_build_target (&arm_active_target, &opts, true); + + #ifdef SUBTARGET_OVERRIDE_OPTIONS + SUBTARGET_OVERRIDE_OPTIONS; +@@ -18410,6 +18421,7 @@ output_move_double (rtx *operands, bool emit, int *count) + if (code0 == REG) + { + unsigned int reg0 = REGNO (operands[0]); ++ const bool can_ldrd = TARGET_LDRD && (TARGET_THUMB2 || (reg0 % 2 == 0)); + + otherops[0] = gen_rtx_REG (SImode, 1 + reg0); + +@@ -18421,7 +18433,7 @@ output_move_double (rtx *operands, bool emit, int *count) + + if (emit) + { +- if (TARGET_LDRD ++ if (can_ldrd + && !(fix_cm3_ldrd && reg0 == REGNO(XEXP (operands[1], 0)))) + output_asm_insn ("ldrd%?\t%0, [%m1]", operands); + else +@@ -18430,7 +18442,7 @@ output_move_double (rtx *operands, bool emit, int *count) + break; + + case PRE_INC: +- gcc_assert (TARGET_LDRD); ++ gcc_assert (can_ldrd); + if (emit) + output_asm_insn ("ldrd%?\t%0, [%m1, #8]!", operands); + break; +@@ -18438,7 +18450,7 @@ output_move_double (rtx *operands, bool emit, int *count) + case PRE_DEC: + if (emit) + { +- if (TARGET_LDRD) ++ if (can_ldrd) + output_asm_insn ("ldrd%?\t%0, [%m1, #-8]!", operands); + else + output_asm_insn ("ldmdb%?\t%m1!, %M0", operands); +@@ -18448,7 +18460,7 @@ output_move_double (rtx *operands, bool emit, int *count) + case POST_INC: + if (emit) + { +- if (TARGET_LDRD) ++ if (can_ldrd) + output_asm_insn ("ldrd%?\t%0, [%m1], #8", operands); + else + output_asm_insn ("ldmia%?\t%m1!, %M0", operands); +@@ -18456,7 +18468,7 @@ output_move_double (rtx *operands, bool emit, int *count) + break; + + case POST_DEC: +- gcc_assert (TARGET_LDRD); ++ gcc_assert (can_ldrd); + if (emit) + output_asm_insn ("ldrd%?\t%0, [%m1], #-8", operands); + break; +@@ -18478,6 +18490,7 @@ output_move_double (rtx *operands, bool emit, int *count) + /* Registers overlap so split out the increment. */ + if (emit) + { ++ gcc_assert (can_ldrd); + output_asm_insn ("add%?\t%1, %1, %2", otherops); + output_asm_insn ("ldrd%?\t%0, [%1] @split", otherops); + } +@@ -18489,10 +18502,11 @@ output_move_double (rtx *operands, bool emit, int *count) + /* Use a single insn if we can. + FIXME: IWMMXT allows offsets larger than ldrd can + handle, fix these up with a pair of ldr. */ +- if (TARGET_THUMB2 ++ if (can_ldrd ++ && (TARGET_THUMB2 + || !CONST_INT_P (otherops[2]) + || (INTVAL (otherops[2]) > -256 +- && INTVAL (otherops[2]) < 256)) ++ && INTVAL (otherops[2]) < 256))) + { + if (emit) + output_asm_insn ("ldrd%?\t%0, [%1, %2]!", otherops); +@@ -18515,10 +18529,11 @@ output_move_double (rtx *operands, bool emit, int *count) + /* Use a single insn if we can. + FIXME: IWMMXT allows offsets larger than ldrd can handle, + fix these up with a pair of ldr. */ +- if (TARGET_THUMB2 ++ if (can_ldrd ++ && (TARGET_THUMB2 + || !CONST_INT_P (otherops[2]) + || (INTVAL (otherops[2]) > -256 +- && INTVAL (otherops[2]) < 256)) ++ && INTVAL (otherops[2]) < 256))) + { + if (emit) + output_asm_insn ("ldrd%?\t%0, [%1], %2", otherops); +@@ -18549,7 +18564,7 @@ output_move_double (rtx *operands, bool emit, int *count) + operands[1] = otherops[0]; + if (emit) + { +- if (TARGET_LDRD) ++ if (can_ldrd) + output_asm_insn ("ldrd%?\t%0, [%1]", operands); + else + output_asm_insn ("ldmia%?\t%1, %M0", operands); +@@ -18594,7 +18609,7 @@ output_move_double (rtx *operands, bool emit, int *count) + } + otherops[0] = gen_rtx_REG(SImode, REGNO(operands[0]) + 1); + operands[1] = otherops[0]; +- if (TARGET_LDRD ++ if (can_ldrd + && (REG_P (otherops[2]) + || TARGET_THUMB2 + || (CONST_INT_P (otherops[2]) +@@ -18655,7 +18670,7 @@ output_move_double (rtx *operands, bool emit, int *count) + if (count) + *count = 2; + +- if (TARGET_LDRD) ++ if (can_ldrd) + return "ldrd%?\t%0, [%1]"; + + return "ldmia%?\t%1, %M0"; +@@ -26650,20 +26665,65 @@ arm_print_tune_info (void) + (int) current_tune->sched_autopref); + } + ++/* The last set of target options used to emit .arch directives, etc. This ++ could be a function-local static if it were not required to expose it as a ++ root to the garbage collector. */ ++static GTY(()) cl_target_option *last_asm_targ_options = NULL; ++ + /* Print .arch and .arch_extension directives corresponding to the + current architecture configuration. */ + static void +-arm_print_asm_arch_directives () ++arm_print_asm_arch_directives (FILE *stream, cl_target_option *targ_options) + { ++ arm_build_target build_target; ++ /* If the target options haven't changed since the last time we were called ++ there is nothing to do. This should be sufficient to suppress the ++ majority of redundant work. */ ++ if (last_asm_targ_options == targ_options) ++ return; ++ ++ last_asm_targ_options = targ_options; ++ ++ build_target.isa = sbitmap_alloc (isa_num_bits); ++ arm_configure_build_target (&build_target, targ_options, false); ++ ++ if (build_target.core_name ++ && !bitmap_bit_p (build_target.isa, isa_bit_quirk_no_asmcpu)) ++ { ++ const char* truncated_name ++ = arm_rewrite_selected_cpu (build_target.core_name); ++ asm_fprintf (stream, "\t.cpu %s\n", truncated_name); ++ } ++ + const arch_option *arch + = arm_parse_arch_option_name (all_architectures, "-march", +- arm_active_target.arch_name); ++ build_target.arch_name); + auto_sbitmap opt_bits (isa_num_bits); + + gcc_assert (arch); + +- asm_fprintf (asm_out_file, "\t.arch %s\n", arm_active_target.arch_name); +- arm_last_printed_arch_string = arm_active_target.arch_name; ++ if (strcmp (build_target.arch_name, "armv7ve") == 0) ++ { ++ /* Keep backward compatability for assemblers which don't support ++ armv7ve. Fortunately, none of the following extensions are reset ++ by a .fpu directive. */ ++ asm_fprintf (stream, "\t.arch armv7-a\n"); ++ asm_fprintf (stream, "\t.arch_extension virt\n"); ++ asm_fprintf (stream, "\t.arch_extension idiv\n"); ++ asm_fprintf (stream, "\t.arch_extension sec\n"); ++ asm_fprintf (stream, "\t.arch_extension mp\n"); ++ } ++ else ++ asm_fprintf (stream, "\t.arch %s\n", build_target.arch_name); ++ ++ /* The .fpu directive will reset any architecture extensions from the ++ assembler that relate to the fp/vector extensions. So put this out before ++ any .arch_extension directives. */ ++ const char *fpu_name = (TARGET_SOFT_FLOAT ++ ? "softvfp" ++ : arm_identify_fpu_from_isa (build_target.isa)); ++ asm_fprintf (stream, "\t.fpu %s\n", fpu_name); ++ + if (!arch->common.extensions) + return; + +@@ -26675,13 +26735,12 @@ arm_print_asm_arch_directives () + { + arm_initialize_isa (opt_bits, opt->isa_bits); + +- /* If every feature bit of this option is set in the target +- ISA specification, print out the option name. However, +- don't print anything if all the bits are part of the +- FPU specification. */ +- if (bitmap_subset_p (opt_bits, arm_active_target.isa) +- && !bitmap_subset_p (opt_bits, isa_all_fpubits)) +- asm_fprintf (asm_out_file, "\t.arch_extension %s\n", opt->name); ++ /* If every feature bit of this option is set in the target ISA ++ specification, print out the option name. However, don't print ++ anything if all the bits are part of the FPU specification. */ ++ if (bitmap_subset_p (opt_bits, build_target.isa) ++ && !bitmap_subset_p (opt_bits, isa_all_fpubits_internal)) ++ asm_fprintf (stream, "\t.arch_extension %s\n", opt->name); + } + } + } +@@ -26691,42 +26750,23 @@ arm_file_start (void) + { + int val; + ++ arm_print_asm_arch_directives ++ (asm_out_file, TREE_TARGET_OPTION (target_option_default_node)); ++ + if (TARGET_BPABI) + { +- /* We don't have a specified CPU. Use the architecture to +- generate the tags. +- +- Note: it might be better to do this unconditionally, then the +- assembler would not need to know about all new CPU names as +- they are added. */ +- if (!arm_active_target.core_name) +- { +- /* armv7ve doesn't support any extensions. */ +- if (strcmp (arm_active_target.arch_name, "armv7ve") == 0) +- { +- /* Keep backward compatability for assemblers +- which don't support armv7ve. */ +- asm_fprintf (asm_out_file, "\t.arch armv7-a\n"); +- asm_fprintf (asm_out_file, "\t.arch_extension virt\n"); +- asm_fprintf (asm_out_file, "\t.arch_extension idiv\n"); +- asm_fprintf (asm_out_file, "\t.arch_extension sec\n"); +- asm_fprintf (asm_out_file, "\t.arch_extension mp\n"); +- arm_last_printed_arch_string = "armv7ve"; +- } +- else +- arm_print_asm_arch_directives (); +- } +- else if (strncmp (arm_active_target.core_name, "generic", 7) == 0) +- { +- asm_fprintf (asm_out_file, "\t.arch %s\n", +- arm_active_target.core_name + 8); +- arm_last_printed_arch_string = arm_active_target.core_name + 8; +- } +- else ++ /* If we have a named cpu, but we the assembler does not support that ++ name via .cpu, put out a cpu name attribute; but don't do this if the ++ name starts with the fictitious prefix, 'generic'. */ ++ if (arm_active_target.core_name ++ && bitmap_bit_p (arm_active_target.isa, isa_bit_quirk_no_asmcpu) ++ && strncmp (arm_active_target.core_name, "generic", 7) != 0) + { + const char* truncated_name + = arm_rewrite_selected_cpu (arm_active_target.core_name); +- asm_fprintf (asm_out_file, "\t.cpu %s\n", truncated_name); ++ if (bitmap_bit_p (arm_active_target.isa, isa_bit_quirk_no_asmcpu)) ++ asm_fprintf (asm_out_file, "\t.eabi_attribute 5, \"%s\"\n", ++ truncated_name); + } + + if (print_tune_info) +@@ -26794,6 +26834,13 @@ arm_file_end (void) + { + int regno; + ++ /* Just in case the last function output in the assembler had non-default ++ architecture directives, we force the assembler state back to the default ++ set, so that any 'calculated' build attributes are based on the default ++ options rather than the special options for that function. */ ++ arm_print_asm_arch_directives ++ (asm_out_file, TREE_TARGET_OPTION (target_option_default_node)); ++ + if (NEED_INDICATE_EXEC_STACK) + /* Add .note.GNU-stack. */ + file_end_indicate_exec_stack (); +@@ -30934,10 +30981,8 @@ arm_can_inline_p (tree caller, tree callee) + caller_target.isa = sbitmap_alloc (isa_num_bits); + callee_target.isa = sbitmap_alloc (isa_num_bits); + +- arm_configure_build_target (&caller_target, caller_opts, &global_options_set, +- false); +- arm_configure_build_target (&callee_target, callee_opts, &global_options_set, +- false); ++ arm_configure_build_target (&caller_target, caller_opts, false); ++ arm_configure_build_target (&callee_target, callee_opts, false); + if (!bitmap_subset_p (callee_target.isa, caller_target.isa)) + can_inline = false; + +@@ -31069,7 +31114,7 @@ arm_valid_target_attribute_tree (tree args, struct gcc_options *opts, + return NULL_TREE; + + cl_target_option_save (&cl_opts, opts); +- arm_configure_build_target (&arm_active_target, &cl_opts, opts_set, false); ++ arm_configure_build_target (&arm_active_target, &cl_opts, false); + arm_option_check_internal (opts); + /* Do any overrides, such as global options arch=xxx. + We do this since arm_active_target was overridden. */ +@@ -31184,7 +31229,7 @@ arm_identify_fpu_from_isa (sbitmap isa) + auto_sbitmap fpubits (isa_num_bits); + auto_sbitmap cand_fpubits (isa_num_bits); + +- bitmap_and (fpubits, isa, isa_all_fpubits); ++ bitmap_and (fpubits, isa, isa_all_fpubits_internal); + + /* If there are no ISA feature bits relating to the FPU, we must be + doing soft-float. */ +@@ -31215,44 +31260,7 @@ arm_declare_function_name (FILE *stream, const char *name, tree decl) + targ_options = TREE_TARGET_OPTION (target_option_current_node); + gcc_assert (targ_options); + +- /* Only update the assembler .arch string if it is distinct from the last +- such string we printed. arch_to_print is set conditionally in case +- targ_options->x_arm_arch_string is NULL which can be the case +- when cc1 is invoked directly without passing -march option. */ +- std::string arch_to_print; +- if (targ_options->x_arm_arch_string) +- arch_to_print = targ_options->x_arm_arch_string; +- +- if (arch_to_print != arm_last_printed_arch_string) +- { +- std::string arch_name +- = arch_to_print.substr (0, arch_to_print.find ("+")); +- asm_fprintf (asm_out_file, "\t.arch %s\n", arch_name.c_str ()); +- const arch_option *arch +- = arm_parse_arch_option_name (all_architectures, "-march", +- targ_options->x_arm_arch_string); +- auto_sbitmap opt_bits (isa_num_bits); +- +- gcc_assert (arch); +- if (arch->common.extensions) +- { +- for (const struct cpu_arch_extension *opt = arch->common.extensions; +- opt->name != NULL; +- opt++) +- { +- if (!opt->remove) +- { +- arm_initialize_isa (opt_bits, opt->isa_bits); +- if (bitmap_subset_p (opt_bits, arm_active_target.isa) +- && !bitmap_subset_p (opt_bits, isa_all_fpubits)) +- asm_fprintf (asm_out_file, "\t.arch_extension %s\n", +- opt->name); +- } +- } +- } +- +- arm_last_printed_arch_string = arch_to_print; +- } ++ arm_print_asm_arch_directives (stream, targ_options); + + fprintf (stream, "\t.syntax unified\n"); + +@@ -31270,16 +31278,6 @@ arm_declare_function_name (FILE *stream, const char *name, tree decl) + else + fprintf (stream, "\t.arm\n"); + +- std::string fpu_to_print +- = TARGET_SOFT_FLOAT +- ? "softvfp" : arm_identify_fpu_from_isa (arm_active_target.isa); +- +- if (fpu_to_print != arm_last_printed_arch_string) +- { +- asm_fprintf (asm_out_file, "\t.fpu %s\n", fpu_to_print.c_str ()); +- arm_last_printed_fpu_string = fpu_to_print; +- } +- + if (TARGET_POKE_FUNCTION_NAME) + arm_poke_function_name (stream, (const char *) name); + } +@@ -31930,28 +31928,28 @@ arm_test_cpu_arch_data (void) + static void + arm_test_fpu_data (void) + { +- auto_sbitmap isa_all_fpubits (isa_num_bits); ++ auto_sbitmap isa_all_fpubits_internal (isa_num_bits); + auto_sbitmap fpubits (isa_num_bits); + auto_sbitmap tmpset (isa_num_bits); + +- static const enum isa_feature fpu_bitlist[] ++ static const enum isa_feature fpu_bitlist_internal[] + = { ISA_ALL_FPU_INTERNAL, isa_nobit }; +- arm_initialize_isa (isa_all_fpubits, fpu_bitlist); ++ arm_initialize_isa (isa_all_fpubits_internal, fpu_bitlist_internal); + + for (unsigned int i = 0; i < TARGET_FPU_auto; i++) + { + arm_initialize_isa (fpubits, all_fpus[i].isa_bits); +- bitmap_and_compl (tmpset, isa_all_fpubits, fpubits); +- bitmap_clear (isa_all_fpubits); +- bitmap_copy (isa_all_fpubits, tmpset); ++ bitmap_and_compl (tmpset, isa_all_fpubits_internal, fpubits); ++ bitmap_clear (isa_all_fpubits_internal); ++ bitmap_copy (isa_all_fpubits_internal, tmpset); + } + +- if (!bitmap_empty_p (isa_all_fpubits)) ++ if (!bitmap_empty_p (isa_all_fpubits_internal)) + { + fprintf (stderr, "Error: found feature bits in the ALL_FPU_INTERAL" + " group that are not defined by any FPU.\n" + " Check your arm-cpus.in.\n"); +- ASSERT_TRUE (bitmap_empty_p (isa_all_fpubits)); ++ ASSERT_TRUE (bitmap_empty_p (isa_all_fpubits_internal)); + } + } + +-- +2.17.1 + diff --git a/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb b/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb new file mode 100644 index 000000000..3cac39fb2 --- /dev/null +++ b/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb @@ -0,0 +1,127 @@ +SUMMARY = "The ARM Computer Vision and Machine Learning library" +DESCRIPTION = "The ARM Computer Vision and Machine Learning library is a set of functions optimised for both ARM CPUs and GPUs." +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=9598101cf48c5f479cfda9f3fc6fc566" + +SRCBRANCH = "master" +SRCREV = "v${PV}" + +SRC_URI = " \ + git://github.com/ARM-software/ComputeLibrary.git;branch=${SRCBRANCH};protocol=https \ + file://0001-webos-build-support.patch \ + file://arm-compute-library.pc.in \ +" + +PR ="r0" + +S = "${WORKDIR}/git" + +inherit scons + +ARM_INSTRUCTION_SET = "arm" +#TUNE_CCARGS = "-marm -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -rdynamic -funsafe-math-optimizations" + +PACKAGECONFIG ?= "cppthreads opencl gles embed openmp examples tests" + +PACKAGECONFIG[Werror] = "Werror=1,Werror=0" +PACKAGECONFIG[tests] = "benchmark_tests=1 validation_tests=1,benchmark_tests=0 validation_tests=0" +PACKAGECONFIG[opencl] = "opencl=1,opencl=0,opencl-headers opencl-icd-loader" +PACKAGECONFIG[gles] = "gles_compute=1,gles_compute=0" +PACKAGECONFIG[embed] = "embed_kernels=1,embed_kernels=0" +PACKAGECONFIG[compress] = "compress_kernels=1,compress_kernels=0,zlib" +PACKAGECONFIG[debug] = "debug=1,debug=0" +PACKAGECONFIG[openmp] = "openmp=1,openmp=0" +PACKAGECONFIG[cppthreads] = "cppthreads=1,cppthreads=0" +PACKAGECONFIG[examples] = "examples=1,examples=0" + +# Specify any options you want to pass to scons using EXTRA_OESCONS: +EXTRA_OESCONS = "build=cross_compile os=linux toolchain_prefix=' ' extra_cxx_flags='-fPIC -O2' ${PACKAGECONFIG_CONFARGS}" +EXTRA_OESCONS += "${@bb.utils.contains('TARGET_ARCH', 'aarch64', 'arch=arm64-v8a neon=1', '', d)}" +EXTRA_OESCONS += "${@bb.utils.contains('TARGET_ARCH', 'arm', 'os=webos arch=armv7a neon=1', '', d)}" +EXTRA_OESCONS += "${@bb.utils.contains('TARGET_ARCH', 'i686', 'arch=x86_32 neon=0', '', d)}" +EXTRA_OESCONS += "${@bb.utils.contains('TARGET_ARCH', 'x86_64', 'arch=x86_64 neon=0', '', d)}" + +TARGET_CC_ARCH += "${LDFLAGS}" + +#CXXFLAGS += "-fopenmp" +LIBS += "-larmpl_lp64_mp" + +do_install() { + CP_ARGS="-Prf --preserve=mode,timestamps --no-preserve=ownership" + install -d ${D}${includedir} + cp $CP_ARGS ${S}/arm_compute ${D}${includedir} + cp $CP_ARGS support ${D}${includedir} + cp $CP_ARGS include/half ${D}${includedir} + + # install libraries + install -d ${D}${libdir} + install -m 0755 ${S}/build/libarm_compute*.so ${D}${libdir} + install -m 0755 ${S}/build/libarm_compute*.a ${D}${libdir} + + # install examples + if ${@bb.utils.contains('PACKAGECONFIG', 'examples', 'true', 'false', d)}; then + install -d ${D}${bindir}/${PN}-${PV}/examples + for example in ${S}/build/examples/*; do + if [ -d "$example" ]; then + continue + fi + case "$example" in + (*.o|*.a) continue;; + esac + install -m 0555 $example ${D}${bindir}/${PN}-${PV}/examples + done + if [ -d "${S}/build/examples/gemm_tuner" ]; then + install -d ${D}${bindir}/${PN}-${PV}/examples/gemm_tuner + for example in ${S}/build/examples/gemm_tuner/*; do + if [ -d "$example" ]; then + continue + fi + case "$example" in + (*.o|*.a) continue;; + esac + install -m 0555 $example ${D}${bindir}/${PN}-${PV}/examples/gemm_tuner + done + fi + fi + + # install tests + if ${@bb.utils.contains('PACKAGECONFIG', 'tests', 'true', 'false', d)}; then + install -d ${D}${bindir}/${PN}-${PV}/tests + for test in ${S}/build/tests/*; do + if [ -d "$test" ]; then + continue + fi + case "$test" in + (*.o|*.a) continue;; + esac + install -m 0555 $test ${D}${bindir}/${PN}-${PV}/tests + done + if [ -d "${S}/build/tests/gemm_tuner" ]; then + install -d ${D}${bindir}/${PN}-${PV}/tests/gemm_tuner + for test in ${S}/build/tests/gemm_tuner/*; do + if [ -d "$test" ]; then + continue + fi + case "$test" in + (*.o|*.a) continue;; + esac + install -m 0555 $test ${D}${bindir}/${PN}-${PV}/tests/gemm_tuner + done + fi + fi + + #install pkgconfig + install -d ${D}${libdir}/pkgconfig + install -m 0644 ${WORKDIR}/arm-compute-library.pc.in ${D}${libdir}/pkgconfig/arm-compute-library.pc + sed -i 's:@version@:${PV}:g + s:@libdir@:${libdir}:g + s:@includedir@:${includedir}:g' ${D}${libdir}/pkgconfig/arm-compute-library.pc +} + +INHIBIT_PACKAGE_DEBUG_SPLIT = "1" +SOLIBS = ".so" +FILES_SOLIBSDEV = "" + +FILES:${PN} += "${libdir}/*.so*" +FILES:${PN}-dev += "${includedir}/* ${bindir}/* ${libdir}/pkgconfig/*" + diff --git a/meta-webos/recipes-upstreamable/arm-compute-library/files/0001-webos-build-support.patch b/meta-webos/recipes-upstreamable/arm-compute-library/files/0001-webos-build-support.patch new file mode 100644 index 000000000..01f4258f7 --- /dev/null +++ b/meta-webos/recipes-upstreamable/arm-compute-library/files/0001-webos-build-support.patch @@ -0,0 +1,43 @@ +From 7391b4397e4e15504c549e801741b396e4a19c90 Mon Sep 17 00:00:00 2001 +From: "kijoong.lee" +Date: Tue, 22 Feb 2022 16:06:36 +0900 +Subject: [PATCH] webos build support + +--- + SConstruct | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/SConstruct b/SConstruct +index 400228c71..295566a36 100644 +--- a/SConstruct ++++ b/SConstruct +@@ -94,7 +94,7 @@ vars.AddVariables( + allowed_values=("armv7a", "armv7a-hf", "arm64-v8a", "arm64-v8.2-a", "arm64-v8.2-a-sve", "arm64-v8.2-a-sve2", "x86_32", "x86_64", + "armv8a", "armv8.2-a", "armv8.2-a-sve", "armv8.6-a", "armv8.6-a-sve", "armv8.6-a-sve2", "armv8r64", "x86")), + EnumVariable("estate", "Execution State", "auto", allowed_values=("auto", "32", "64")), +- EnumVariable("os", "Target OS", "linux", allowed_values=("linux", "android", "tizen", "macos", "bare_metal")), ++ EnumVariable("os", "Target OS", "linux", allowed_values=("linux", "android", "tizen", "macos", "bare_metal", "webos")), + EnumVariable("build", "Build type", "cross_compile", allowed_values=("native", "cross_compile", "embed_only")), + BoolVariable("examples", "Build example programs", True), + BoolVariable("gemm_tuner", "Build gemm_tuner programs", True), +@@ -186,7 +186,7 @@ if env['os'] == 'bare_metal': + print("ERROR: OpenMP and C++11 threads not supported in bare_metal. Use cppthreads=0 openmp=0") + Exit(1) + +-if env['opencl'] and env['embed_kernels'] and env['compress_kernels'] and env['os'] not in ['android']: ++if env['opencl'] and env['embed_kernels'] and env['compress_kernels'] and env['os'] not in ['android', 'webos']: + print("Compressed kernels are supported only for android builds") + Exit(1) + +@@ -252,7 +252,7 @@ if 'v7a' in env['estate'] and env['estate'] == '64': + prefix = "" + if 'v7a' in env['arch']: + env.Append(CXXFLAGS = ['-march=armv7-a', '-mthumb', '-mfpu=neon']) +- if (env['os'] == 'android' or env['os'] == 'tizen') and not 'hf' in env['arch']: ++ if (env['os'] == 'android' or env['os'] == 'tizen' or env['os'] == 'webos') and not 'hf' in env['arch']: + env.Append(CXXFLAGS = ['-mfloat-abi=softfp']) + else: + env.Append(CXXFLAGS = ['-mfloat-abi=hard']) +-- +2.17.1 + diff --git a/meta-webos/recipes-upstreamable/arm-compute-library/files/arm-compute-library.pc.in b/meta-webos/recipes-upstreamable/arm-compute-library/files/arm-compute-library.pc.in new file mode 100644 index 000000000..bf0312440 --- /dev/null +++ b/meta-webos/recipes-upstreamable/arm-compute-library/files/arm-compute-library.pc.in @@ -0,0 +1,7 @@ +Name: ARM ComputeLibrary +Description: ARM ComputeLibrary c++ shared library +Version: @version@ +Requires: +Libs: -L@libdir@ -larm_compute -larm_compute_core -larm_compute_graph +Cflags: -I@includedir@ -I@includedir@/arm_compute + diff --git a/meta-webos/recipes-upstreamable/armnn/armnn-tensorflow_2.6.2.bb b/meta-webos/recipes-upstreamable/armnn/armnn-tensorflow_2.6.2.bb new file mode 100644 index 000000000..e42bc6f15 --- /dev/null +++ b/meta-webos/recipes-upstreamable/armnn/armnn-tensorflow_2.6.2.bb @@ -0,0 +1,40 @@ +SUMMARY = "Tensorflow protobuf files - used in ARMNN for Tensorflow network models" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=c7e17cca1ef4230861fb7868e96c387e" + +SRC_URI = " \ + git://github.com/tensorflow/tensorflow.git;branch=r2.6;name=tensorflow \ + git://github.com/ARM-software/armnn.git;branch=branches/armnn_21_11;name=armnn;subdir=${WORKDIR}/armnn;destsuffix=armnn \ +" + +SRCREV_tensorflow = "v${PV}" +SRCREV_armnn = "v21.11" +SRCREV_FORMAT = "tensorflow" + +DEPENDS = " \ + protobuf-native \ + flatbuffers \ +" + +S = "${WORKDIR}/git" + +do_install() { + bbplain "STAGING_DIR_NATIVE is ${STAGING_DIR_NATIVE}" + bbplain "prefix is ${prefix}" + + # Install TF sources + build artifacts as reuired by ARMNN + install -d ${D}${datadir}/${BPN} + + # Convert protobuf sources to C sources and install + ${WORKDIR}/armnn/scripts/generate_tensorflow_protobuf.sh ${D}${datadir}/${BPN} ${STAGING_DIR_NATIVE}${prefix} + + # Install sources as required by ARMNN + install -d ${D}${datadir}/${BPN}-lite + for file in ${S}/tensorflow/lite/schema/* + do + [ -f $file ] && install -m 0644 $file ${D}${datadir}/${BPN}-lite + done +} + +FILES:${PN} += "${datadir}" + diff --git a/meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb b/meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb new file mode 100644 index 000000000..6489bd71c --- /dev/null +++ b/meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb @@ -0,0 +1,169 @@ +SUMMARY = "ARM Neural Network SDK" +DESCRIPTION = "Linux software and tools to enable machine learning workloads on power-efficient devices" +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=3e14a924c16f7d828b8335a59da64074" + +# Compute branch info from ${PV} as Base PV... +BPV = "${@'_'.join(d.getVar('PV').split('.')[0:2])}" + +BRANCH = "branches/armnn_${BPV}" + +SRC_URI = " \ + git://github.com/ARM-software/armnn.git;branch=${BRANCH};protocol=https \ + file://0001-webos-build-error-fix-for-21.11.patch \ + file://0003-const_tensor_exception_fixed.patch \ + file://0004-exception-case-pass-to-skipnode.patch \ + file://armnn-tflite.pc.in \ + file://armnn-delegate.pc.in \ +" + +SRCREV = "v${PV}" +#SRCREV = "5e9965cae1cc6162649910f423ebd86001fc1931" + +PR = "r0" + +S = "${WORKDIR}/git" + +inherit cmake + +DEPENDS = " \ + boost \ + protobuf \ + stb \ + half \ + xxd-native \ + arm-compute-library \ +" + +RDEPENDS_WEBOS = "" + +RDEPENDS:${PN} = " \ + arm-compute-library \ + protobuf \ + boost \ + ${RDEPENDS_WEBOS} \ +" + +PACKAGECONFIG += "ref opencl tensorflow tensorflow-lite tensorflow-lite-delegate" +PACKAGECONFIG += "${@bb.utils.contains('TARGET_ARCH', 'aarch64', 'neon', '', d)}" +PACKAGECONFIG += "${@bb.utils.contains('TARGET_ARCH', 'arm', 'neon', '', d)}" + +PACKAGECONFIG[neon] = " \ + -DARMCOMPUTENEON=1, \ + -DARMCOMPUTENEON=0 \ +" + +PACKAGECONFIG[opencl] = " \ + -DARMCOMPUTECL=1 \ + -DFLATC=${STAGING_BINDIR_NATIVE}/flatc \ + -DOPENCL_INCLUDE=${STAGING_INCDIR}, \ + -DARMCOMPUTECL=0, \ + opencl-headers opencl-clhpp flatbuffers flatbuffers-native \ +" + +PACKAGECONFIG[tensorflow] = " \ + -DBUILD_TF_PARSER=1 \ + -DTF_GENERATED_SOURCES=${STAGING_DATADIR}/armnn-tensorflow, \ + -DBUILD_TF_PARSER=0, \ + protobuf-native flatbuffers armnn-tensorflow \ +" + +PACKAGECONFIG[tensorflow-lite] = " \ + -DTF_LITE_SCHEMA_INCLUDE_PATH=${STAGING_DATADIR}/armnn-tensorflow-lite \ + -DTF_LITE_GENERATED_PATH=${STAGING_DATADIR}/armnn-tensorflow-lite \ + -DBUILD_TF_LITE_PARSER=1, \ + -DBUILD_TF_LITE_PARSER=0, \ + flatbuffers armnn-tensorflow \ +" + +PACKAGECONFIG[tensorflow-lite-delegate] = " \ + -DBUILD_ARMNN_TFLITE_DELEGATE=1, \ + -DBUILD_ARMNN_TFLITE_DELEGATE=0, \ + tensorflow-lite \ +" + +PACKAGECONFIG[unit-tests] = " \ + -DBUILD_UNIT_TESTS=1, \ + -DBUILD_UNIT_TESTS=0 \ +" + +PACKAGECONFIG[tests] = " \ + -DBUILD_TESTS=1, \ + -DBUILD_TESTS=0 \ +" + +PACKAGECONFIG[ref] = " \ + -DARMNNREF=1, \ + -DARMNNREF=0 \ +" + +EXTRA_OECMAKE += " \ + -DSHARED_BOOST=1 \ + -DHALF_INCLUDE=${STAGING_DIR_HOST} \ +" + +ARMNN_INSTALL_DIR = "${bindir}/${P}" + +do_install:append() { + CP_ARGS="-Prf --preserve=mode,timestamps --no-preserve=ownership" + + if ${@bb.utils.contains('PACKAGECONFIG', 'tests', 'true', 'false', d)}; then + install -d ${D}${ARMNN_INSTALL_DIR} + find ${WORKDIR}/build/tests -maxdepth 1 -type f -executable -exec cp $CP_ARGS {} ${D}${ARMNN_INSTALL_DIR} \; + chrpath -d ${D}${ARMNN_INSTALL_DIR}/* + fi + + if ${@bb.utils.contains('PACKAGECONFIG', 'unit-tests', 'true', 'false', d)}; then + install -d ${D}${ARMNN_INSTALL_DIR} + cp $CP_ARGS ${B}/UnitTests ${D}${ARMNN_INSTALL_DIR} + fi + + if ${@bb.utils.contains('PACKAGECONFIG', 'tensorflow-lite-delegate', 'true', 'false', d)}; then + for lib in ${WORKDIR}/build/delegate/*.so + do + cp $CP_ARGS $lib ${D}${libdir} + done + + # install delegate headers + install -d ${D}${includedir}/armnn/delegate + cd "${S}/delegate/include" + for file in $(find . -name '*.h*'); do + cp $CP_ARGS "${file}" "${D}${includedir}/armnn/delegate" + done + + #install delegate cmake module + install -d ${D}${libdir} + install -d ${D}${libdir}/cmake + install -d ${D}${libdir}/cmake/armnn + cp $CP_ARGS "${B}/delegate/ArmnnDelegateConfig.cmake" "${D}${libdir}/cmake/armnn" + cp $CP_ARGS "${B}/delegate/CMakeFiles/Export/lib/ArmnnDelegateTargets.cmake" "${D}${libdir}/cmake/armnn" + cp $CP_ARGS "${B}/delegate/CMakeFiles/Export/lib/ArmnnDelegateTargets-release.cmake" "${D}${libdir}/cmake/armnn" + + #remove duplicate files + rm ${D}${libdir}/ArmnnDelegate*.cmake + + #install pkgconfig + install -d ${D}${libdir}/pkgconfig + install -m 0644 ${WORKDIR}/armnn-tflite.pc.in ${D}${libdir}/pkgconfig/armnn-tflite.pc + sed -i 's:@version@:${PV}:g + s:@libdir@:${libdir}:g + s:@includedir@:${includedir}:g' ${D}${libdir}/pkgconfig/armnn-tflite.pc + + install -m 0644 ${WORKDIR}/armnn-delegate.pc.in ${D}${libdir}/pkgconfig/armnn-delegate.pc + sed -i 's:@version@:${PV}:g + s:@libdir@:${libdir}:g + s:@includedir@:${includedir}:g' ${D}${libdir}/pkgconfig/armnn-delegate.pc + fi + + +} + +CXXFLAGS += "-fopenmp -I${STAGING_DIR_HOST}/usr" +LIBS += "-larmpl_lp64_mp" + +FILES:${PN}-dev = "" + +INSANE_SKIP:${PN} = "dev-so" +INSANE_SKIP:${PN}-dev += "dev-elf" +FILES:${PN} += "${libdir}/*" +FILES:${PN}-dev += "${includedir}/* ${libdir}/cmake/armnn/* ${libdir}/pkgconfig/*.pc ${bindir}/*" diff --git a/meta-webos/recipes-upstreamable/armnn/files/0001-tflite-build-error-fix.patch b/meta-webos/recipes-upstreamable/armnn/files/0001-tflite-build-error-fix.patch new file mode 100644 index 000000000..528ae8a3f --- /dev/null +++ b/meta-webos/recipes-upstreamable/armnn/files/0001-tflite-build-error-fix.patch @@ -0,0 +1,16 @@ +--- a/delegate/CMakeLists.txt 2021-09-03 08:03:00.531634017 +0000 ++++ b/delegate/CMakeLists.txt 2021-09-03 08:04:15.766594331 +0000 +@@ -66,9 +66,11 @@ + target_link_libraries(armnnDelegate PUBLIC Armnn::Armnn) + + ## Add TfLite v2.3.1 dependency +-find_package(TfLite REQUIRED MODULE) ++#find_package(TfLite REQUIRED MODULE) ++find_package(PkgConfig) ++pkg_check_modules(TfLite REQUIRED tensorflowlite) + +-target_link_libraries(armnnDelegate PUBLIC ${TfLite_LIB}) ++target_link_libraries(armnnDelegate PUBLIC ${TfLite_LIBRARIES}) + + # Various tflite header files are not warning clean + # We can't change compilation flags on header files directly, so we need to add them to an interface library first diff --git a/meta-webos/recipes-upstreamable/armnn/files/0001-webos-build-error-fix-for-21.11.patch b/meta-webos/recipes-upstreamable/armnn/files/0001-webos-build-error-fix-for-21.11.patch new file mode 100644 index 000000000..6258cb1c6 --- /dev/null +++ b/meta-webos/recipes-upstreamable/armnn/files/0001-webos-build-error-fix-for-21.11.patch @@ -0,0 +1,47 @@ +From bfed8b48c6934d9eb5c266b3e1a3969778f2cc07 Mon Sep 17 00:00:00 2001 +From: "kijoong.lee" +Date: Wed, 23 Feb 2022 15:38:15 +0900 +Subject: [PATCH] webos build error fix for 21.11 + +--- + delegate/CMakeLists.txt | 8 +++++--- + src/armnnTfLiteParser/CMakeLists.txt | 3 ++- + 2 files changed, 7 insertions(+), 4 deletions(-) + +diff --git a/delegate/CMakeLists.txt b/delegate/CMakeLists.txt +index bae1d31e7..ebaa368aa 100644 +--- a/delegate/CMakeLists.txt ++++ b/delegate/CMakeLists.txt +@@ -71,10 +71,12 @@ endif() + target_link_libraries(armnnDelegate PUBLIC Armnn::Armnn) + + ## Add TfLite dependency +-find_package(TfLiteSrc REQUIRED MODULE) +-find_package(TfLite REQUIRED MODULE) ++#find_package(TfLiteSrc REQUIRED MODULE) ++#find_package(TfLite REQUIRED MODULE) ++find_package(PkgConfig) ++pkg_check_modules(TfLite REQUIRED tensorflowlite) + +-target_link_libraries(armnnDelegate PUBLIC ${TfLite_LIB}) ++target_link_libraries(armnnDelegate PUBLIC ${TfLite_LIBRARIES}) + + # lpthread and ldl are not required for Android + if(NOT "${CMAKE_SYSTEM_NAME}" STREQUAL Android) +diff --git a/src/armnnTfLiteParser/CMakeLists.txt b/src/armnnTfLiteParser/CMakeLists.txt +index f9653b675..acac684b1 100755 +--- a/src/armnnTfLiteParser/CMakeLists.txt ++++ b/src/armnnTfLiteParser/CMakeLists.txt +@@ -23,7 +23,8 @@ if(BUILD_TF_LITE_PARSER) + # using the armnn/delegate/cmake/Modules/FindTfLiteSrc.cmake to find the TfLite sources + # so that we can use the tensorflow/lite/version.h to determine which version of + # tensorflow lite we are compiling against +- find_package(TfLiteSrc REQUIRED MODULE) ++ #find_package(TfLiteSrc REQUIRED MODULE) ++ find_package(TfLite REQUIRED tensorflowlite) + + # Various tflite header files are not warning clean + # We can't change compilation flags on header files directly, so we need to add them to an interface library first +-- +2.17.1 + diff --git a/meta-webos/recipes-upstreamable/armnn/files/0002-rename-ktfliteactrelu1-to-ktfliteactrelun1to1.patch b/meta-webos/recipes-upstreamable/armnn/files/0002-rename-ktfliteactrelu1-to-ktfliteactrelun1to1.patch new file mode 100644 index 000000000..fc8a0e8ce --- /dev/null +++ b/meta-webos/recipes-upstreamable/armnn/files/0002-rename-ktfliteactrelu1-to-ktfliteactrelun1to1.patch @@ -0,0 +1,11 @@ +--- a/delegate/src/DelegateUtils.hpp 2021-09-01 12:09:11.816029487 +0000 ++++ b/delegate/src/DelegateUtils.hpp 2021-09-01 12:08:56.823411434 +0000 +@@ -294,7 +294,7 @@ + activationDesc.m_Function = armnn::ActivationFunction::ReLu; + break; + } +- case kTfLiteActRelu1: ++ case kTfLiteActReluN1To1: + { + activationDesc.m_Function = armnn::ActivationFunction::BoundedReLu; + activationDesc.m_A = 1.0f; diff --git a/meta-webos/recipes-upstreamable/armnn/files/0003-const_tensor_exception_fixed.patch b/meta-webos/recipes-upstreamable/armnn/files/0003-const_tensor_exception_fixed.patch new file mode 100644 index 000000000..0d626cbe9 --- /dev/null +++ b/meta-webos/recipes-upstreamable/armnn/files/0003-const_tensor_exception_fixed.patch @@ -0,0 +1,91 @@ +diff --git a/delegate/src/Convolution.hpp b/delegate/src/Convolution.hpp +index a7d6c1de2..709432cc2 100644 +--- a/delegate/src/Convolution.hpp ++++ b/delegate/src/Convolution.hpp +@@ -13,6 +13,8 @@ + #include + #include "tensorflow/lite/kernels/internal/tensor.h" + ++#include "tensorflow/lite/kernels/kernel_util.h" ++ + namespace armnnDelegate + { + +@@ -144,6 +146,22 @@ TfLiteStatus VisitConv2dOperator(DelegateData& delegateData, + CalcPadding(inputWidth, filterWidth, descriptor.m_StrideX, descriptor.m_DilationX, + descriptor.m_PadLeft, descriptor.m_PadRight, params->padding); + ++ if (!tflite::IsConstantTensor(&tfLiteContext->tensors[tfLiteNode->inputs->data[1]])) ++ { ++ TF_LITE_MAYBE_KERNEL_LOG( ++ tfLiteContext, ++ "&tfLiteContext->tensors[tfLiteNode->inputs->data[1]] is not Const Tensor"); ++ return kTfLiteError; ++ } ++ ++ if (!tflite::IsConstantTensor(&tfLiteContext->tensors[tfLiteNode->inputs->data[2]])) ++ { ++ TF_LITE_MAYBE_KERNEL_LOG( ++ tfLiteContext, ++ "&tfLiteContext->tensors[tfLiteNode->inputs->data[2]] is not Const Tensor"); ++ return kTfLiteError; ++ } ++ + if (!delegateData.m_Network) + { + bool isSupported = false; +@@ -170,6 +188,14 @@ TfLiteStatus VisitConv2dOperator(DelegateData& delegateData, + + if(biasEnabled) + { ++ if (!tflite::IsConstantTensor(&tfLiteContext->tensors[tfLiteNode->inputs->data[2]])) ++ { ++ TF_LITE_MAYBE_KERNEL_LOG( ++ tfLiteContext, ++ "&tfLiteContext->tensors[tfLiteNode->inputs->data[2]] is not Const Tensor"); ++ return kTfLiteError; ++ } ++ + auto biases = + CreateConstTensor(&tfLiteContext->tensors[tfLiteNode->inputs->data[2]], + biasTensorInfo, +@@ -494,6 +520,24 @@ TfLiteStatus VisitDepthwiseConv2dOperator(DelegateData& delegateData, + biasTensorInfo = armnn::TensorInfo(armnn::TensorShape({1}), GetDataType(tfLiteInputTensor)); + } + ++ if (!tflite::IsConstantTensor(&tfLiteFilterTensor)) ++ { ++ TF_LITE_MAYBE_KERNEL_LOG( ++ tfLiteContext, ++ "tfLiteFilterTensor is not Const Tensor"); ++ return kTfLiteError; ++ } ++ if(biasEnabled) ++ { ++ if (!tflite::IsConstantTensor(&tfLiteContext->tensors[tfLiteNode->inputs->data[2]])) ++ { ++ TF_LITE_MAYBE_KERNEL_LOG( ++ tfLiteContext, ++ "&tfLiteContext->tensors[tfLiteNode->inputs->data[2]] is not Const Tensor"); ++ return kTfLiteError; ++ } ++ } ++ + // For depthwise the weights layout is the same as for tflite [1, H, W, I*M]. No permutation required. + auto filter = CreateConstTensor(&tfLiteFilterTensor, filterTensorInfo); + +@@ -689,6 +733,14 @@ TfLiteStatus VisitTransposeConv2dOperator(DelegateData& delegateData, + parameters->padding); + + // Set up filter ++ if (!tflite::IsConstantTensor(&tfLiteFilterTensor)) ++ { ++ TF_LITE_MAYBE_KERNEL_LOG( ++ tfLiteContext, ++ "tfLiteFilterTensor is not Const Tensor"); ++ return kTfLiteError; ++ } ++ + auto filterTensor = CreateConstTensor(&tfLiteFilterTensor, + filterTensorInfo, + armnn::Optional()); diff --git a/meta-webos/recipes-upstreamable/armnn/files/0004-exception-case-pass-to-skipnode.patch b/meta-webos/recipes-upstreamable/armnn/files/0004-exception-case-pass-to-skipnode.patch new file mode 100644 index 000000000..046acac31 --- /dev/null +++ b/meta-webos/recipes-upstreamable/armnn/files/0004-exception-case-pass-to-skipnode.patch @@ -0,0 +1,40 @@ +diff --git a/delegate/src/armnn_delegate.cpp b/delegate/src/armnn_delegate.cpp +index 0069b4fe0..54c9ce462 100644 +--- a/delegate/src/armnn_delegate.cpp ++++ b/delegate/src/armnn_delegate.cpp +@@ -198,14 +198,23 @@ TfLiteIntArray* Delegate::IdentifyOperatorsToDelegate(TfLiteContext* tfLiteConte + continue; + } + +- if (ArmnnSubgraph::VisitNode( +- delegateData, tfLiteContext, tfLiteRegistration, tfLiteNode, nodeIndex) != kTfLiteOk) ++ try + { +- // node is not supported by ArmNN ++ if (ArmnnSubgraph::VisitNode( ++ delegateData, tfLiteContext, tfLiteRegistration, tfLiteNode, nodeIndex) != kTfLiteOk) ++ { ++ // node is not supported by ArmNN ++ continue; ++ } ++ ++ nodesToDelegate->data[nodesToDelegate->size++] = nodeIndex; ++ } ++ catch (const armnn::Exception& error) ++ { ++ TFLITE_LOG_PROD(tflite::TFLITE_LOG_ERROR, ++ "ArmnnException: Skip this node! %s.", error.what()); + continue; + } +- +- nodesToDelegate->data[nodesToDelegate->size++] = nodeIndex; + } + + std::sort(&nodesToDelegate->data[0], &nodesToDelegate->data[nodesToDelegate->size]); +@@ -941,4 +950,4 @@ TfLiteStatus ArmnnSubgraph::VisitNode(DelegateData& delegateData, + } + } + +-} // armnnDelegate namespace +\ No newline at end of file ++} // armnnDelegate namespace diff --git a/meta-webos/recipes-upstreamable/armnn/files/armnn-delegate.pc.in b/meta-webos/recipes-upstreamable/armnn/files/armnn-delegate.pc.in new file mode 100644 index 000000000..93bf2f649 --- /dev/null +++ b/meta-webos/recipes-upstreamable/armnn/files/armnn-delegate.pc.in @@ -0,0 +1,6 @@ +Name: ArmNN TfLite Delegate Library +Description: ArmNN TfLite Delgate c++ shared library +Version: @version@ +Requires: +Libs: -L@libdir@ -larmnn -larmnnBasePipeServer -ltimelineDecoder -ltimelineDecoderJson -larmnnDelegate +Cflags: -I@includedir@ -I@includedir@/armnn diff --git a/meta-webos/recipes-upstreamable/armnn/files/armnn-tflite.pc.in b/meta-webos/recipes-upstreamable/armnn/files/armnn-tflite.pc.in new file mode 100644 index 000000000..c5a82bc04 --- /dev/null +++ b/meta-webos/recipes-upstreamable/armnn/files/armnn-tflite.pc.in @@ -0,0 +1,6 @@ +Name: ArmNN TfLite Delegate Library +Description: ArmNN TfLite Delgate c++ shared library +Version: @version@ +Requires: +Libs: -L@libdir@ -larmnn -larmnnTfLiteParser -larmnnBasePipeServer -ltimelineDecoder -ltimelineDecoderJson +Cflags: -I@includedir@ -I@includedir@/armnn diff --git a/meta-webos/recipes-upstreamable/coral/libedgetpu/files/edgetpu-accelerator.rules b/meta-webos/recipes-upstreamable/coral/libedgetpu/files/edgetpu-accelerator.rules new file mode 100644 index 000000000..60e034c19 --- /dev/null +++ b/meta-webos/recipes-upstreamable/coral/libedgetpu/files/edgetpu-accelerator.rules @@ -0,0 +1,2 @@ +SUBSYSTEM=="usb",ATTRS{idVendor}=="1a6e",GROUP="plugdev" +SUBSYSTEM=="usb",ATTRS{idVendor}=="18d1",GROUP="plugdev" diff --git a/meta-webos/recipes-upstreamable/coral/libedgetpu/files/edgetpu.pc.in b/meta-webos/recipes-upstreamable/coral/libedgetpu/files/edgetpu.pc.in new file mode 100644 index 000000000..dd5dc0e52 --- /dev/null +++ b/meta-webos/recipes-upstreamable/coral/libedgetpu/files/edgetpu.pc.in @@ -0,0 +1,7 @@ +Name: libedgetpu c++ shared library +Description: libedgetpu runtime library +Version: @version@ +Requires: +Libs: -L@libdir@ -ledgetpu +Cflags: -I@includedir@ + diff --git a/meta-webos/recipes-upstreamable/coral/libedgetpu/files/libedgetpu.so.1 b/meta-webos/recipes-upstreamable/coral/libedgetpu/files/libedgetpu.so.1 new file mode 100755 index 0000000000000000000000000000000000000000..32e01d642d126982d8107e661aca41e56b140a09 GIT binary patch literal 764944 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

Uo4yStL+Uyd*h_`ZY*bX zeOv6;r^OFcjgu`hUv{;45=$+?y@BNh7z3pE$Ld}eK;(Hw0 zzrJkT&FxRV9^YHwQ7@|MXQLt_z&z4P%L!s{IU5?8tkTH6uud7m0hb*5?s9S= zyBnI~qqr;QZQ$-i4<#%oG~Uw(%d4HO{1%o>6en}knjO{Gj7q0r@Xe?aVNjdx?xeILxgs188uS5!@JRXjUs=x25n@QFRQfvMDU^wqE7 zd(okBc|%F75}mF00Gw$~IL!U$Z^-`%V9vryrtx`jrb1UF`2$*M-PUFkK5n>Tq~1Bw z5IIvT%>n4+Gb^muy4s;NcMxB~8!FIp*~Y^r9I8*m92wWc=ps1g{tEK}ixMTjiB(9g z3Y|$M5XWO1@4KMBj{bb9{#A>fdj)-8 zT94h={f%ar32*k)yYkxbCbyov-mI|Nx|#c}u-l?E4bYsFYe^~6kiu%odAJupEO3*8 z>zm=Xw4WC-X!GIOMSVR)kS1^-%=}o&Rr@VTvkW-b1o7lzBrQ@h&Sv`T3;@K8zB+0N^=+ ze}(_lYv$3Z{)&2zIT1LJk30HR(p|95c9r*^!VUxM|1{4xNF7C473q z&d)Or78|kKk}$vP)#WN!9&J6mXr>P{4l*-ue(Q(K{*8P@xe8}qf8|%;FA^;5*Y%X2 ztoTiLrdU5f%*CyUb-MLKMN7Y>^ga;LP5W8rVK!=59q0b`EPeArJe)r1o$uyQln%g9 zgn6)3R~lKKW^arvWtGR59${Y6 z>K7QGR%+n&)&>s%@K|x!Pjd%Wn?to8h^OMk=(r;Mr}vl*8XZ@5*dvb7ypcqAi)Q#R zk?6PE!Q}eDEdC8J{Q)x?Fiqvu;|AD%`FSw=>GTNtK(dG+KIT@#Dr?Z;CDR%B40*oH zmnVy|$M~)MDa^B({!D#x{~rSJ@=393G(^%1x@+DkHu}qYN6k2K4C`_~}dg42E#@sl~>` zu7nTqR_^`^E&N#I$hTVfY6K95DtX{xK4{>ZtLypoa1%vVrFW^{<4w}O5V_y!(=NFb z!sIQ(nI@Go*VZ6zv~6ZXnN;*0aaqN%p;?;$V);)};mBn`NF1nPc3y@LGg(V|&m>Mu zEsPmI2qd$PWPXnKcC@y7#o~a!a7sPcQh2qB< zL0k*@_ft@OKPYaIDPGfw;)hg<@9vi3g2;LNDZcPeUWykKcSrH<#eMGD)&<3nthgS< zldhq7_@5Mt2X#x8+gEf)@#odv3<6!KH@y@uzgx-sK(}r9sknpUJ7kJmK=J*ZD1NG5 zq4*9^{3ztp4WM`#D85am_~uR&-=b1{?R6+#B9C!F{IGtv-x$~3?WOppZqYDn&0UXi zTk-WMzNEhM7%#g^p-ObOR9REp9mT!#XOfz?m*S(Hh(Yy0H&rD%e-zCpc9Q?&Ch!Cb#-?V-^2S;6 zZ)fq_BYtR{%NyU6Plh|E-5~!)XR-H1uaBzvi|kcNrCmSG z|J*>D?VZ~2i?3c=xfuiAHfiFQH=gy?>%=eqZFsATwEyKx`%0&@@jg0sBQ{h#;>&gGb#r~f zFW0}mmZP)ec8R*OLtkrzcZzf%*$29SEG9E6?yz_n|@vQtS z%`jygI&Og4G+z|_T*~e78+>D#ZzdG_mA|}k{57-YU!9&R>rhAiPVG17e{ zs(POU=zSFQJLvgJOIh6&%OcX|kakZHH#?cQd%%rG^$rHkKsKab^5`z&&Q{z9zPVAH z-?FrmZ!}o8+T01L1l%EGv;xJXDYqz3KpeiGr0fgP>@h_3eOT&|`hp3XilD;WHj@sY z`smV3WSc1=s^O8Wd-CY>05+Cw%e9Pe&L?|0g|AM@Utd99t&O6+IXPcn(JsD!bxDDI zS^$1NRak2ts_q^qq*c9Q!3Wz8=wg17F8&Ogjx8I}QXQk8S^U9{&X|T5lfn4g?{Ox&L+^∨`<&ktC7 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

N+^=~cD9@P7owW7Ot0lEdZrTxVp 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%0AC8=Gn-fBwl)>m+~*5yn{ib-m)rj9LV?W! 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 Bl+OSF literal 0 HcmV?d00001 diff --git a/meta-webos/recipes-upstreamable/coral/libedgetpu/files/libedgetpu_aarch64.so.1.0 b/meta-webos/recipes-upstreamable/coral/libedgetpu/files/libedgetpu_aarch64.so.1.0 new file mode 100755 index 0000000000000000000000000000000000000000..df76b98f4e3bf278ea4f9d9bbf8272031a2ec16b GIT binary patch literal 1118240 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

XfI)t(~;U!AG#+ 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

gIpuGh5hmr`z{WVq-|Jb&Erfz}Oci3?m} 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

&jUM{?pX17)p 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%0A8@TJjo*dHi-BR67lU*^|Ra6 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

Os^3@ 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

nQ#U>7(F z4uSqtx7cwo3g(sCb_@)F1E&!ltXxGtz(hv5617N6v z{4PWO48no_Z&P332-peMo=N;*#cKGLlfUm#e&F!M#0S=1MLh+OyO!_4o}0GVQOds; z>;e11UcN7^BmMF_Sh#}nyP0^v>{}=g!sUT+FdxjpZm0wOU<~XeT&SM#e2#*3U?YbJDzfgpl9-X3-R(f&`Lh|To5InzoMT2Yr$X}K6F0dCI2IHXj1?1nM9fRdyIam!=gPmX}82kg_uutJ}A0~Y>~ z`uH{a@jrY|d6oYO9zGY2QI34B-9kB@gnmz<_k3Rt*7A8|8hJj)zyUt@Zv*+9zmxR5 zh#rAKaA59M+j}zoMfO&^5X{+ct6c|H?7!9S2P@}qwX@5q&jYvGez5$Yt#&O~c`(0& zIfrhwb55cES+LbE2cw_fYIlL5&w%hp!4dhqknr*u%*EageRiuoET2I?_IB6jw%XN# zpXYn9?u&$5MgMZ-R=Wz!|MFJ57Yu!6s~rdXkJ)O+B>iCF>GUVZk}hz#ko3NUUW5I7 z4*Is*d3>$|z28K>gmi-WWn1k4-xq*UKIa8UCzx~mR&<;C2lKu~xKl|NpMzj07zGEw zAutAJpGGf@V)18dh1KiGRI>0{oJ zcNys*{>m$e7c9SWs~zI|!fL`vx~|!3=U340-2floSAu!WQ$k<>>;-H2y>1=l2Ik*L zIr4pOJ>mHr1@q6KAH0otz`Uldb`Lllp`5-=xwXOrjz)Ep@IgOnFo_%P}C z4tDe-#P=%Y*F!ynonSTC1BSo>unWw6l=1}&9;aMiqaHR;j>r!@LHU89UgG2X=u?!R z;L}^}QNAB}hIDykCHF2;Ge`JpT|fy zas^;7SO^Y*esB~l2fe?g+`(M16U_cT^|gh10m~;y512a%KfmXJ6<`6_%lC0G2KH|w zpJ$^dal(Un-f_Dh%-(O@t|ELnn7anO$QifG!QlLHyAG^7kZ@r6LF0BD9L*iK3(g^b zpBT3*!Q4-c+nr!f-ncz1pFcZp=bTHu=8xL}uxrt{T?-BzHE#EUv7_OU&tD^+^9Z*L zd9Y%|xIF?!j~}<6QSkAuT}F29*@7s7ul>EZhr7~pfkZR7SRpDVx+pDRLq zmT+Lso1_~If}>#WMesBe4_Fz7hwrN+$niO^m3Y8`DD{0YpYP&(Fy09tSamP;QH4G{ zMEQYvzaTsq?I-*tj5Du{+cEft!R)taPlJ39=79mQ5DbD(>C_JE;RsV8vcHNJ|w!kVs^nbr1u9gyH4;�QRm`9DVAZzLUHVIA>M4nZ&oR)W=F6&M1m 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 B#6AE3 literal 0 HcmV?d00001 diff --git a/meta-webos/recipes-upstreamable/coral/libedgetpu/files/libedgetpu_arm.so.1.0 b/meta-webos/recipes-upstreamable/coral/libedgetpu/files/libedgetpu_arm.so.1.0 new file mode 100755 index 0000000000000000000000000000000000000000..32e01d642d126982d8107e661aca41e56b140a09 GIT binary patch literal 764944 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

Uo4yStL+Uyd*h_`ZY*bX zeOv6;r^OFcjgu`hUv{;45=$+?y@BNh7z3pE$Ld}eK;(Hw0 zzrJkT&FxRV9^YHwQ7@|MXQLt_z&z4P%L!s{IU5?8tkTH6uud7m0hb*5?s9S= zyBnI~qqr;QZQ$-i4<#%oG~Uw(%d4HO{1%o>6en}knjO{Gj7q0r@Xe?aVNjdx?xeILxgs188uS5!@JRXjUs=x25n@QFRQfvMDU^wqE7 zd(okBc|%F75}mF00Gw$~IL!U$Z^-`%V9vryrtx`jrb1UF`2$*M-PUFkK5n>Tq~1Bw z5IIvT%>n4+Gb^muy4s;NcMxB~8!FIp*~Y^r9I8*m92wWc=ps1g{tEK}ixMTjiB(9g z3Y|$M5XWO1@4KMBj{bb9{#A>fdj)-8 zT94h={f%ar32*k)yYkxbCbyov-mI|Nx|#c}u-l?E4bYsFYe^~6kiu%odAJupEO3*8 z>zm=Xw4WC-X!GIOMSVR)kS1^-%=}o&Rr@VTvkW-b1o7lzBrQ@h&Sv`T3;@K8zB+0N^=+ ze}(_lYv$3Z{)&2zIT1LJk30HR(p|95c9r*^!VUxM|1{4xNF7C473q z&d)Or78|kKk}$vP)#WN!9&J6mXr>P{4l*-ue(Q(K{*8P@xe8}qf8|%;FA^;5*Y%X2 ztoTiLrdU5f%*CyUb-MLKMN7Y>^ga;LP5W8rVK!=59q0b`EPeArJe)r1o$uyQln%g9 zgn6)3R~lKKW^arvWtGR59${Y6 z>K7QGR%+n&)&>s%@K|x!Pjd%Wn?to8h^OMk=(r;Mr}vl*8XZ@5*dvb7ypcqAi)Q#R zk?6PE!Q}eDEdC8J{Q)x?Fiqvu;|AD%`FSw=>GTNtK(dG+KIT@#Dr?Z;CDR%B40*oH zmnVy|$M~)MDa^B({!D#x{~rSJ@=393G(^%1x@+DkHu}qYN6k2K4C`_~}dg42E#@sl~>` zu7nTqR_^`^E&N#I$hTVfY6K95DtX{xK4{>ZtLypoa1%vVrFW^{<4w}O5V_y!(=NFb z!sIQ(nI@Go*VZ6zv~6ZXnN;*0aaqN%p;?;$V);)};mBn`NF1nPc3y@LGg(V|&m>Mu zEsPmI2qd$PWPXnKcC@y7#o~a!a7sPcQh2qB< zL0k*@_ft@OKPYaIDPGfw;)hg<@9vi3g2;LNDZcPeUWykKcSrH<#eMGD)&<3nthgS< zldhq7_@5Mt2X#x8+gEf)@#odv3<6!KH@y@uzgx-sK(}r9sknpUJ7kJmK=J*ZD1NG5 zq4*9^{3ztp4WM`#D85am_~uR&-=b1{?R6+#B9C!F{IGtv-x$~3?WOppZqYDn&0UXi zTk-WMzNEhM7%#g^p-ObOR9REp9mT!#XOfz?m*S(Hh(Yy0H&rD%e-zCpc9Q?&Ch!Cb#-?V-^2S;6 zZ)fq_BYtR{%NyU6Plh|E-5~!)XR-H1uaBzvi|kcNrCmSG z|J*>D?VZ~2i?3c=xfuiAHfiFQH=gy?>%=eqZFsATwEyKx`%0&@@jg0sBQ{h#;>&gGb#r~f zFW0}mmZP)ec8R*OLtkrzcZzf%*$29SEG9E6?yz_n|@vQtS z%`jygI&Og4G+z|_T*~e78+>D#ZzdG_mA|}k{57-YU!9&R>rhAiPVG17e{ zs(POU=zSFQJLvgJOIh6&%OcX|kakZHH#?cQd%%rG^$rHkKsKab^5`z&&Q{z9zPVAH z-?FrmZ!}o8+T01L1l%EGv;xJXDYqz3KpeiGr0fgP>@h_3eOT&|`hp3XilD;WHj@sY z`smV3WSc1=s^O8Wd-CY>05+Cw%e9Pe&L?|0g|AM@Utd99t&O6+IXPcn(JsD!bxDDI zS^$1NRak2ts_q^qq*c9Q!3Wz8=wg17F8&Ogjx8I}QXQk8S^U9{&X|T5lfn4g?{Ox&L+^∨`<&ktC7 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

N+^=~cD9@P7owW7Ot0lEdZrTxVp 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%0AC8=Gn-fBwl)>m+~*5yn{ib-m)rj9LV?W! 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 Bl+OSF literal 0 HcmV?d00001 diff --git a/meta-webos/recipes-upstreamable/coral/libedgetpu/files/libedgetpu_x86_64.so.1.0 b/meta-webos/recipes-upstreamable/coral/libedgetpu/files/libedgetpu_x86_64.so.1.0 new file mode 100755 index 0000000000000000000000000000000000000000..3638ca8a86904c10e34331ea1d263643a409385e GIT binary patch literal 1167464 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%0Dkj?KkIxkhdeqES7nS-?sd*3-@EmRrONLolDB9 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 zf865%0AM~)OG9oz#pYaIM92=o9~>rJ@jLYbOtEJJ zOgN1sDqp8=6=#y*(}^721igX~)A1f%X`KcK=HSi-rXtKV!JGOZhfut3rEqFD{_&lZIAk!j#L%HTWz{uY( z%$W2PjOJZIaE4J&%b%5bFi&mmdkgVM3&>w?2)a{`OvX5qvqj0XX9C->QZpRSIlJl}_#c zFKb|yB^yN+&J%*&e`R{`$>(ucBl*bgW`X*Ka;2*xcC`k#pDA*jRn14zAM0qedbNOK zihL%CtVH%w>IMU6jShT+!_QR?tGmuD?_Q|;vUMS23BmkRLeJYc_F2?3JO7Q_ao$Rk z@pWP_(VXM7 zqu)EqBKm#%^f>)~)4}L>dPu(qQM^6<9%|q?`n~F`0%bV*?S3Tmi_jR+?{4@Ken0wc zP6|&k`kk0IRQ|YM0hKQ+3rPNk-!}BSoTR{gZ%@B}A76m7NWW)NViWXhn}h79Y(N9U z#EkVY^Y(1`7R7aO+l0NTOxuLh5kuh>qO34_A;C6VgQMu_PeD1D$mWeQY9Xonv_4_@Xs^wGbt zE9QOOf;YD6*ddq*Cl#q*f&?m7O(ihomp3r-+00s7q&cb#J~^$h@#k|_J|kP)1oYY! z4>fMwcCUQ2K;!ET<3vTSF2}Nqhm$)FBTw$Ga$(k~5N6&Y=Cw$a11k?+Vn1!cGM#~#CUv11A+LC_?ay?KeOCa zh-ejUMEfhrm!YHh3gB%F>B{j(#kCh*)nixWXi9M(+tQT5D(B;Ss389&f86pBu2Am; zL9NKgW`@&2{Z0;>slg}ys6b(#D+|-Rw}Cd4(e`r!9(m0{*OF~h>2vF#z#S669Nu%T2WCqLGjNV(XQ)tqJpHcxC)9ha4UKlkcn(YI1 z5i2RBtopZ*Sq@n-wLcE3Kcc_7rAYcE&I49tpU#gH&{|)O@I~I2TGt}lw+X1&k;JVd zD^nmiiwq%$FemC;fUQXXtkW;k1hc2*+2CJ8O*(y*9}wzD&ZJUvw8`H?NxBDF1n-U& z#m+G5k0|y@j?-V|t_*Sor&C3KB2Q$_pBny-cfT#D*q7v`qA!hqD!Zj3e@rk931)uX z-dna6Q$^*r!h19#*0>Ew3tog1GfS@+?H^})yQ>xCI`zS379Xw_^hQc06*u+7TSL^% zwhFb!9NSUzC2S|H;Q{ZNCh+Q5K;EwA&dekM{J{eLHCimdlzFg#E%*!zSVY_6)HSwL z%vh$}{yf!U{F^@L_qtyg3$VKIOi-ps3A&Fq4%-22*t4m7l7M9RmNMlA{8G&{iMlUv z&37;~+v;%MOy`fmNjETj9Nh1OLgk2-tIolK!)>^&y3i#ft((n)+xU=wPUBRFcby37 zpI&M@dg(4A?p)_`p&~bLu0X;jz#wxGGVLr_-3rFMEly_TARQ$=E~;1Wdl*~}lMy*Z z))_kpys%j&T{d$kCB1Y71C+?6!U?D}JA95tBbt52H8lJ7O<*nuD2^R+zSXF%<-CF=p__r>@P~*5IoffW)_6vb4JULfnEpSM^%hrs8_6 zFz>_tD^M-yyhhE)R;~~)ckos4(`l58_^GpNTeN_T_#1*fnYVGp8Berk>+%xSYGSKv0TWV0&1#Aaw1u6Dr9 z3#Bo@g*p>x9E@!p{4-77Xs3DX=UqbMfb%uQ7`myB*;lF|r|4JeZ|FOL^Scq}7UQ2a z!Ii=#zsuo5Oew3r?OYyysLEViX`

;QTFhggVQ5fYf+oDP>lWxv=}`$V(e$z1GXz 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�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%0AWM>=ee9!QR)VT&*yB04$|av9sfng?7A)j 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 +Date: Wed, 27 Oct 2021 04:13:32 +0000 +Subject: [PATCH] remove label_image benchmark_model exclude option + +--- + tensorflow/lite/examples/label_image/CMakeLists.txt | 2 +- + tensorflow/lite/tools/benchmark/CMakeLists.txt | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/tensorflow/lite/examples/label_image/CMakeLists.txt b/tensorflow/lite/examples/label_image/CMakeLists.txt +index 1bf259aad10..1e6cf0f240f 100644 +--- a/tensorflow/lite/examples/label_image/CMakeLists.txt ++++ b/tensorflow/lite/examples/label_image/CMakeLists.txt +@@ -56,7 +56,7 @@ if(TFLITE_ENABLE_GPU) + endif() # TFLITE_ENABLE_GPU + + add_executable(label_image +- EXCLUDE_FROM_ALL ++# EXCLUDE_FROM_ALL + ${TFLITE_LABEL_IMAGE_SRCS} + ) + target_compile_options(label_image +diff --git a/tensorflow/lite/tools/benchmark/CMakeLists.txt b/tensorflow/lite/tools/benchmark/CMakeLists.txt +index 5de9ab30086..cdddc596367 100644 +--- a/tensorflow/lite/tools/benchmark/CMakeLists.txt ++++ b/tensorflow/lite/tools/benchmark/CMakeLists.txt +@@ -72,7 +72,7 @@ if(TFLITE_ENABLE_GPU) + endif() # TFLITE_ENABLE_GPU + + add_executable(benchmark_model +- EXCLUDE_FROM_ALL ++# EXCLUDE_FROM_ALL + ${TFLITE_BENCHMARK_SRCS} + ) + target_compile_options(benchmark_model +-- +2.17.1 + diff --git a/meta-webos/recipes-upstreamable/tensorflow-lite/files/0002-enable-external-delegate-in-benchmarktool.patch b/meta-webos/recipes-upstreamable/tensorflow-lite/files/0002-enable-external-delegate-in-benchmarktool.patch new file mode 100644 index 000000000..1626c1707 --- /dev/null +++ b/meta-webos/recipes-upstreamable/tensorflow-lite/files/0002-enable-external-delegate-in-benchmarktool.patch @@ -0,0 +1,51 @@ +diff --git a/tensorflow/lite/CMakeLists.txt b/tensorflow/lite/CMakeLists.txt +index f5cc9b97924..ada4f099d03 100644 +--- a/tensorflow/lite/CMakeLists.txt ++++ b/tensorflow/lite/CMakeLists.txt +@@ -70,6 +70,8 @@ option(TFLITE_ENABLE_XNNPACK "Enable XNNPACK backend" ON) + + option(TFLITE_KERNEL_TEST "Enable tflite kernel unit test" OFF) + ++option(TFLITE_ENABLE_EXTERNAL "Enable EXTERNAL backend" ON) ++ + set(CMAKE_CXX_STANDARD 14) # Some components require C++14. + set(CMAKE_CXX_STANDARD_REQUIRED ON) + set(_TFLITE_ENABLE_NNAPI "${TFLITE_ENABLE_NNAPI}") +@@ -331,6 +333,12 @@ if (TFLITE_ENABLE_RESOURCE) + TFLITE_EXPERIMENTAL_RESOURCE_SRCS + ) + endif() ++if(TFLITE_ENABLE_EXTERNAL) ++ set(TFLITE_DELEGATES_EXTERNAL_SRCS ++ "${TFLITE_SOURCE_DIR}/delegates/external/external_delegate.cc" ++ ) ++endif() ++ + populate_tflite_source_vars("experimental/ruy" + TFLITE_EXPERIMENTAL_RUY_SRCS + FILTER +@@ -394,6 +402,7 @@ add_library(tensorflow-lite + ${TFLITE_DELEGATES_NNAPI_SRCS} + ${TFLITE_DELEGATES_SRCS} + ${TFLITE_DELEGATES_XNNPACK_SRCS} ++ ${TFLITE_DELEGATES_EXTERNAL_SRCS} + ${TFLITE_EXPERIMENTAL_RESOURCE_SRCS} + ${TFLITE_EXPERIMENTAL_RUY_PROFILER_SRCS} + ${TFLITE_EXPERIMENTAL_RUY_SRCS} +diff --git a/tensorflow/lite/tools/benchmark/CMakeLists.txt b/tensorflow/lite/tools/benchmark/CMakeLists.txt +index cdddc596367..11a92b4e0a8 100644 +--- a/tensorflow/lite/tools/benchmark/CMakeLists.txt ++++ b/tensorflow/lite/tools/benchmark/CMakeLists.txt +@@ -71,6 +71,12 @@ if(TFLITE_ENABLE_GPU) + ) + endif() # TFLITE_ENABLE_GPU + ++if(TFLITE_ENABLE_EXTERNAL) ++ list(APPEND TFLITE_BENCHMARK_SRCS ++ ${TFLITE_SOURCE_DIR}/tools/delegates/external_delegate_provider.cc ++ ) ++endif() # TFLITE_ENABLE_EXTERNAL ++ + add_executable(benchmark_model + # EXCLUDE_FROM_ALL + ${TFLITE_BENCHMARK_SRCS} diff --git a/meta-webos/recipes-upstreamable/tensorflow-lite/files/tensorflowlite.pc.in b/meta-webos/recipes-upstreamable/tensorflow-lite/files/tensorflowlite.pc.in new file mode 100644 index 000000000..abdb0508a --- /dev/null +++ b/meta-webos/recipes-upstreamable/tensorflow-lite/files/tensorflowlite.pc.in @@ -0,0 +1,7 @@ +Name: tensorflow lite c++ shared library +Description: tensorflow lite c++ shared library +Version: @version@ +Requires: +Libs: -L@libdir@ -ltensorflowlite -lrt +Cflags: -I@includedir@ + diff --git a/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb new file mode 100644 index 000000000..f4aaa0785 --- /dev/null +++ b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb @@ -0,0 +1,124 @@ +# Copyright (c) 2022 LG Electronics, Inc. + +DESCRIPTION = "TensorFlow Lite CPP Library" +LICENSE = "Apache-2.0" + +LIC_FILES_CHKSUM = "file://LICENSE;md5=c7e17cca1ef4230861fb7868e96c387e" +# Compute branch info from ${PV} as Base PV... +BPV = "${@'.'.join(d.getVar('PV').split('.')[0:2])}" +DPV = "${@'.'.join(d.getVar('PV').split('.')[0:3])}" + +# Since they tag off of something resembling ${PV}, use it. +SRCREV = "v${PV}" + +SRC_URI = " \ + git://github.com/tensorflow/tensorflow.git;branch=r${BPV} \ + file://0001-remove-label_image-benchmark_model-exclude-option.patch \ + file://0002-enable-external-delegate-in-benchmarktool.patch \ + file://tensorflowlite.pc.in \ +" + +SRC_URI += "https://storage.googleapis.com/download.tensorflow.org/models/inception_v3_2016_08_28_frozen.pb.tar.gz;name=model-inv3" +SRC_URI[model-inv3.md5sum] = "a904ddf15593d03c7dd786d552e22d73" +SRC_URI[model-inv3.sha256sum] = "7045b72a954af4dce36346f478610acdccbf149168fa25c78e54e32f0c723d6d" + +SRC_URI += "https://storage.googleapis.com/download.tensorflow.org/models/tflite/mobilenet_v1_1.0_224_quant_and_labels.zip;name=model-mobv1" +SRC_URI[model-mobv1.md5sum] = "38ac0c626947875bd311ef96c8baab62" +SRC_URI[model-mobv1.sha256sum] = "2f8054076cf655e1a73778a49bd8fd0306d32b290b7e576dda9574f00f186c0f" + +inherit cmake + +PR = "r0" +S = "${WORKDIR}/git" + +DEPENDS += " \ + unzip-native \ + python3-native \ + python3-numpy-native \ +" + +ARM_INSTRUCTION_SET = "arm" + +TFLITE_TUNE_CCARGS := "${@bb.utils.contains('TARGET_ARCH', 'aarch64', '-funsafe-math-optimizations', '${TUNE_CCARGS} -funsafe-math-optimizations', d)}" +TUNE_CCARGS = "${TFLITE_TUNE_CCARGS}" +TUNE_CCARGS += "${@bb.utils.contains('MACHINE', 'raspberrypi4', '-marm -mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7-a', '', d)}" +TUNE_CCARGS += "${@bb.utils.contains('MACHINE', 'o22', '-marm -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -rdynamic', '', d)}" +TUNE_CCARGS += "${@bb.utils.contains('MACHINE', 'o20', '-marm -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables', '', d)}" + +do_generate_toolchain_file:append() { + + # XNNPACK does not recognize this when CMAKE_SYSTEM_PROCESSOR is arm. + # Instead, you need to change it to armv7. + if ${@bb.utils.contains('TARGET_ARCH', 'arm', 'true', 'false', d)}; then + sed -i 's:CMAKE_SYSTEM_PROCESSOR arm:CMAKE_SYSTEM_PROCESSOR armv7:g' ${WORKDIR}/toolchain.cmake + fi + + # NOTE: Werror=reture-type is recognized as an error when there is no return value from a non void function. + # However, if this option is included, a build error occurred in tensorflow lite and was omitted. + sed -i 's:-Werror=return-type::g' ${WORKDIR}/toolchain.cmake +} + +OECMAKE_SOURCEPATH = "${S}/tensorflow/lite" + +PACKAGECONFIG ?= "xnnpack" +PACKAGECONFIG += "${@bb.utils.contains('MACHINE', 'o22', 'gpu', '', d)}" + +PACKAGECONFIG[xnnpack] = " \ + -DTFLITE_ENABLE_XNNPACK=ON, \ + -DTFLITE_ENABLE_XNNPACK=OFF \ +" + +PACKAGECONFIG[gpu] = " \ + -DTFLITE_ENABLE_GPU=ON, \ + -DTFLITE_ENABLE_GPU=OFF, \ + opencl-headers opencl-icd-loader \ +" + +EXTRA_OECMAKE = " -DBUILD_SHARED_LIBS=ON" + +AIF_INSTALL_DIR = "${datadir}/aif" + +do_install() { + # install libraries + install -d ${D}/${libdir} + + cd ${B} + cp \ + $(find . -name "*.so") \ + ${D}${libdir} + + ln -s -r ${D}/${libdir}/libtensorflow-lite.so ${D}/${libdir}/libtensorflowlite.so + + # install benchmark_model + install -d ${D}${AIF_INSTALL_DIR} + install -m 755 ${B}/tools/benchmark/benchmark_model \ + ${D}${AIF_INSTALL_DIR} + + # install header files + install -d ${D}${includedir}/tensorflow/lite + cd ${S}/tensorflow/lite + cp --parents \ + $(find . -name "*.h*") \ + ${D}${includedir}/tensorflow/lite + + # install version.h from core for armnn + install -d ${D}${includedir}/tensorflow/core/public + cp ${S}/tensorflow/core/public/version.h ${D}${includedir}/tensorflow/core/public + + # install xnnpack.h from xnnpack for libtorch + cp ${B}/xnnpack/include/xnnpack.h ${D}${includedir} + + # install pkgconfig file + install -d ${D}${libdir}/pkgconfig + install -m 0644 ${WORKDIR}/tensorflowlite.pc.in ${D}${libdir}/pkgconfig/tensorflowlite.pc + sed -i 's:@version@:${PV}:g + s:@libdir@:${libdir}:g + s:@includedir@:${includedir}:g' ${D}${libdir}/pkgconfig/tensorflowlite.pc +} + +FILES:${PN}-dev = "" + +INSANE_SKIP:${PN} = "dev-so" + +FILES:${PN} += "${libdir}/*.so* ${AIF_INSTALL_DIR}" +FILES:${PN}-dev += "${includedir}/* ${libdir}/pkgconfig/*.pc" diff --git a/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb b/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb new file mode 100644 index 000000000..7473c8852 --- /dev/null +++ b/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb @@ -0,0 +1,110 @@ +# Copyright (c) 2022 LG Electronics, Inc. + +SUMMARY = "webOS Edge AI Computer Vision Library" +DESCRIPTION = "webOS Edge AI Computer Vision Library using TensorflowLite" +SECTION = "libs" +LICENSE = "CLOSED" + +WEBOS_VERSION = "1.0.0-7_21bd046126c31a1c503aaad418781bc03832d09a" +WEBOS_REPO_NAME = "edge-ai-computer-vision" +SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" + +PR = "r1" +S = "${WORKDIR}/git" + +inherit cmake +inherit webos_filesystem_paths +inherit webos_enhanced_submissions +inherit webos_public_repo + +DEPENDS = " \ + msgpack-c \ + rapidjson \ + flatbuffers \ + opencv \ + tensorflow-lite \ +" + +RDEPENDS:${PN} = " \ + msgpack-c \ + rapidjson \ + opencv \ + tensorflow-lite \ +" + +PACKAGECONFIG ?= "xnnpack" +PACKAGECONFIG += "${@bb.utils.contains('DISTRO_FEATURES', 'gpu-delegate', 'gpu', '', d)}" +PACKAGECONFIG += "${@bb.utils.contains('DISTRO_FEATURES', 'edgetpu', 'edgetpu', '', d)}" +PACKAGECONFIG += "${@bb.utils.contains('DISTRO_FEATURES', 'armnn', 'armnn', '', d)}" +PACKAGECONFIG += "${@bb.utils.contains('DISTRO_FEATURES', 'ml-library-size-reduction', '', 'examples', d)}" + +PACKAGECONFIG[xnnpack] = "-DWITH_XNNPACK:BOOL=TRUE,-DWITH_XNNPACK:BOOL=FALSE" +PACKAGECONFIG[gpu] = "-DWITH_GPU=ON, -DWITH_GPU=OFF" +PACKAGECONFIG[edgetpu] = "-DWITH_EDGETPU:BOOL=TRUE,-DWITH_EDGETPU:BOOL=FALSE,libedgetpu" +PACKAGECONFIG[armnn] = "-DWITH_ARMNN:BOOL=TRUE,-DWITH_ARMNN:BOOL=FALSE,armnn" +PACKAGECONFIG[examples] = "-DBUILD_EXAMPLES=ON,-DBUILD_EXAMPLES=OFF,," + +AIF_INSTALL_DIR = "${datadir}/aif" + +do_install() { + + CP_ARGS="-Prf --preserve=mode,timestamps --no-preserve=ownership" + install -d ${D}${AIF_INSTALL_DIR} + + if ${@bb.utils.contains('PACKAGECONFIG', 'examples', 'true', 'false', d)}; then + # install examples + find ${WORKDIR}/build/example -maxdepth 2 -type f -executable -exec cp $CP_ARGS {} ${D}${AIF_INSTALL_DIR} \; + chrpath -d ${D}${AIF_INSTALL_DIR}/* + + # install images files + cd "${S}/images" + for file in $(find . -type f); do + install -d "${D}${AIF_INSTALL_DIR}/images/$(dirname -- "${file}")" + cp $CP_ARGS "${file}" "${D}${AIF_INSTALL_DIR}/images/${file}" + done + + # install extra models + cd "${S}/extra_models" + for file in $(find . -type f); do + install -d "${D}${AIF_INSTALL_DIR}/extra_models/$(dirname -- "${file}")" + cp $CP_ARGS "${file}" "${D}${AIF_INSTALL_DIR}/extra_models/${file}" + done + fi + + # install library files + install -d ${D}${libdir} + install -m 0755 ${WORKDIR}/build/framework/*.so ${D}${libdir} + + # install header files + cd "${S}/include/aif" + for file in $(find . -name '*.h'); do + install -d "${D}${includedir}/aif/$(dirname -- "${file}")" + cp $CP_ARGS "${file}" "${D}${includedir}/aif/${file}" + done + + # install mandatory model files + cd "${S}/model" + for file in $(find . -name '*.tflite'); do + install -d "${D}${AIF_INSTALL_DIR}/model/$(dirname -- "${file}")" + cp $CP_ARGS "${file}" "${D}${AIF_INSTALL_DIR}/model/${file}" + done + + # install pkgconfig file + install -d ${D}${libdir}/pkgconfig + install -m 0644 ${S}/files/edgeai-vision.pc.in ${D}${libdir}/pkgconfig/edgeai-vision.pc + sed -i 's:@version@:${PV}:g + s:@libdir@:${libdir}:g + s:@includedir@:${includedir}:g' ${D}${libdir}/pkgconfig/edgeai-vision.pc + +} + +FILES:${PN}-dev = "" + +INSANE_SKIP:${PN} = "dev-so" +INSANE_SKIP:${PN}-dev += "dev-elf" + +FILES:${PN}-dev += "${includedir}/* ${libdir}/pkgconfig" +FILES:${PN} += " \ + ${libdir}/*.so \ + ${AIF_INSTALL_DIR} \ +" From 468ca35c301c329ca5e3e204d8749c57df78a10f Mon Sep 17 00:00:00 2001 From: Hyunjae Shin Date: Thu, 2 Jun 2022 08:52:25 +0900 Subject: [PATCH 0389/2022] webos-fluentbit-plugins=32 :Release Notes: Modify app id due to rename to com.webos.app.bugreport :Detailed Notes: webos-fluentbit-plugins: submissions/31..submissions/32 d848808 Update bugreport app Id :Testing Performed: N/A :QA Notes: N/A :Issues Addressed: N/A Change-Id: Ib66085e5662bc3fedce2e58e2c6760595b337f72 --- .../webos-fluentbit-plugins/webos-fluentbit-plugins.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb index 7fb7c2d1a..0e312f814 100644 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "glib-2.0 luna-service2 libpbnjson fluentbit" RDEPENDS:${PN} = "nyx-utils python3-core python3-requests python3-atlassian-python-api" -WEBOS_VERSION = "1.0.0-31_17e38d808d4a0e6f6aa819f3e20dc5bd1fa9a512" +WEBOS_VERSION = "1.0.0-32_2d41ac17e6a120dc8c24121583de864546b3f407" PR = "r5" inherit webos_component From 1526d9b6833372c58c001a7d53f833127738a00d Mon Sep 17 00:00:00 2001 From: JeongBong Seo Date: Tue, 31 May 2022 16:27:57 +0900 Subject: [PATCH 0390/2022] linux-raspberrypi=webosrpi31 containerd-opencontainers=webosvirt2 docker-moby=webosvirt4 :Release Notes: Remove RT_GROUP_SCHED from kernel config Do not start docker related services automatically :Detailed Notes: By previous docker upgrade (>=20.10), systemd starts containerd.service, docker.socket automatially. And it should not be a problem. But with RT_GROUP_SCHED feature, several services are crashed because of it fails to create thread with the sched errors. For now, we don't need to enable this RT features. Also, we don't need to start docker services automatically for now. linux-raspberrypi: webosrpi30..webosrpi31 Remove 'CONFIG_RT_GROUP_SCHED=y' from kernel config containerd-opencontainers: webosvirt1..webosvirt2 Remove [Install] section from the service docker-moby: webosvirt3..webosvirt4 Remove [Install] section from the socket :Testing Performed: See the CCC ticket :QA Notes: :Issues Addressed: [WRO-5724] CCC: linux-raspberrypi=webosrpi31 containerd-opencontainers=webosvirt2 docker-moby=webosvirt4 [WRO-5355] Change-Id: I3fa2e8532b02d36395f82211586204f74833dd96 --- .../recipes-kernel/linux/linux-raspberrypi/lxc.cfg | 1 - .../recipes-kernel/linux/linux-raspberrypi_%.bbappend | 2 +- .../containerd/containerd-opencontainers_git.bbappend | 7 ++++++- .../recipes-containers/docker/docker-moby_%.bbappend | 3 ++- 4 files changed, 9 insertions(+), 4 deletions(-) diff --git a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi/lxc.cfg b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi/lxc.cfg index d3044c169..bef051c15 100644 --- a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi/lxc.cfg +++ b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi/lxc.cfg @@ -14,7 +14,6 @@ CONFIG_NET_NS=y CONFIG_PID_NS=y CONFIG_PROC_PID_CPUSET=y CONFIG_RESOURCE_COUNTERS=y -CONFIG_RT_GROUP_SCHED=y CONFIG_USER_NS=y CONFIG_UTS_NS=y diff --git a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend index 6fafad898..2d54f06a2 100644 --- a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend +++ b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webosrpi30" +EXTENDPRAUTO:append = "webosrpi31" CMDLINE:append = " rw cgroup_memory=1 cgroup_enable=memory swapaccount=1" CMDLINE:remove:sota = "root=/dev/mmcblk0p2 rootfstype=ext4 rootwait rw" diff --git a/meta-webos-virtualization/recipes-containers/containerd/containerd-opencontainers_git.bbappend b/meta-webos-virtualization/recipes-containers/containerd/containerd-opencontainers_git.bbappend index ade5f2b21..95416e9ba 100644 --- a/meta-webos-virtualization/recipes-containers/containerd/containerd-opencontainers_git.bbappend +++ b/meta-webos-virtualization/recipes-containers/containerd/containerd-opencontainers_git.bbappend @@ -1,5 +1,10 @@ # Copyright (c) 2019-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webosvirt1" +EXTENDPRAUTO:append = "webosvirt2" RRECOMMENDS:${PN}:remove = "lxc" + +do_install:append() { + # don't start by default + sed -i '/\[Install\]/,+1 d' ${D}${systemd_system_unitdir}/containerd.service +} diff --git a/meta-webos-virtualization/recipes-containers/docker/docker-moby_%.bbappend b/meta-webos-virtualization/recipes-containers/docker/docker-moby_%.bbappend index 349b8567b..463ebc347 100644 --- a/meta-webos-virtualization/recipes-containers/docker/docker-moby_%.bbappend +++ b/meta-webos-virtualization/recipes-containers/docker/docker-moby_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2019-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webosvirt3" +EXTENDPRAUTO:append = "webosvirt4" VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS:${PN}-contrib:append:class-target = " ${VIRTUAL-RUNTIME_bash}" @@ -23,6 +23,7 @@ RRECOMMENDS:${PN}:append = " \ do_install:append() { # don't start by default sed -i '/\[Install\]/,+1 d' ${D}${systemd_system_unitdir}/docker.service + sed -i '/\[Install\]/,+1 d' ${D}${systemd_system_unitdir}/docker.socket # create symlink for /etc/docker because of it's on the R/O partition. if ${@bb.utils.contains('IMAGE_FEATURES','read-only-rootfs','true','false',d)}; then From 6f7db5407790efe52b84241eaaa92a16a7db2a8a Mon Sep 17 00:00:00 2001 From: "kijoong.lee" Date: Tue, 7 Jun 2022 11:01:13 +0900 Subject: [PATCH 0391/2022] remove armnn features on 32bit OSE :Release Notes: In 32bit OSE (raspberrypi4, qemux86) environment, arm-compute-library caused a build error and removed armnn feature from webos-features. In terms of performance, it is better to remove armnn because it is not usable due to poor performance in 32bit environment. :Detailed Notes: - remove armnn feature on raspberrypi4, qemux86 - add opencv dev package in webos-qt-sdk :Testing Performed: Local Build Test and GPVB Build Test :QA Notes: N/A :Issues Addressed: [WRO-6286] Fix arm-compute-library build error on 32bit enviroment(raspberrypi4/qmeux86) Change-Id: Ia72b8c73fda5720c566a7aa4ed9005573eb52791 --- .../conf/distro/include/webos-features.inc | 3 + .../packagegroup-webos-ml-sdk.bb | 89 ++++++++++++++++--- 2 files changed, 78 insertions(+), 14 deletions(-) diff --git a/meta-webos/conf/distro/include/webos-features.inc b/meta-webos/conf/distro/include/webos-features.inc index 59c308775..6d7f66ac6 100644 --- a/meta-webos/conf/distro/include/webos-features.inc +++ b/meta-webos/conf/distro/include/webos-features.inc @@ -42,6 +42,9 @@ WEBOS_DISTRO_FEATURES_TEST = "ptest" # you can reduce the size of the installed library by adding this option. If this option is specified, # the examples and test codes are excluded from the installation. WEBOS_DISTRO_FEATURES_AI_FRAMEWORK = "aiframework armnn" +WEBOS_DISTRO_FEATURES_AI_FRAMEWORK:remove:raspberrypi3 = "armnn" +WEBOS_DISTRO_FEATURES_AI_FRAMEWORK:remove:raspberrypi4 = "armnn" +WEBOS_DISTRO_FEATURES_AI_FRAMEWORK:remove:qemux86 = "armnn" DISTRO_FEATURES = "\ ${WEBOS_DISTRO_FEATURES_DEFAULT} \ diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-ml-sdk.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-ml-sdk.bb index acf925e8d..ed0235703 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-ml-sdk.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-ml-sdk.bb @@ -4,26 +4,71 @@ DESCRIPTION = "Machine learning dev components used in webOS" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" -# You don't need to change this value when you're changing just RDEPENDS:${PN} variable. -PR = "r0" +# You don't need to change this value when you're changing just RDEPENDS \${PN} variable. +PR = "r1" PACKAGE_ARCH = "${MACHINE_ARCH}" inherit packagegroup inherit webos_machine_impl_dep inherit webos_prerelease_dep -RDEPENDS:${PN} = " \ - flatbuffers-dev \ - tensorflow-lite-dev \ - opencl-icd-loader-dev \ +OPENCV4 = " \ + libopencv-alphamat-dev \ + libopencv-aruco-dev \ + libopencv-barcode-dev \ + libopencv-bgsegm-dev \ + libopencv-bioinspired-dev \ + libopencv-calib3d-dev \ + libopencv-ccalib-dev \ + libopencv-core-dev \ + libopencv-datasets-dev \ + libopencv-dnn-dev \ + libopencv-dnn-objdetect-dev \ + libopencv-dnn-superres-dev \ + libopencv-dpm-dev \ + libopencv-face-dev \ + libopencv-features2d-dev \ + libopencv-flann-dev \ + libopencv-fuzzy-dev \ + libopencv-gapi-dev \ + libopencv-hfs-dev \ + libopencv-highgui-dev \ + libopencv-img-hash-dev \ + libopencv-imgcodecs-dev \ + libopencv-imgproc-dev \ + libopencv-intensity-transform-dev \ + libopencv-line-descriptor-dev \ + libopencv-mcc-dev \ + libopencv-ml-dev \ + libopencv-objdetect-dev \ + libopencv-optflow-dev \ + libopencv-phase-unwrapping-dev \ + libopencv-photo-dev \ + libopencv-plot-dev \ + libopencv-quality-dev \ + libopencv-rapid-dev \ + libopencv-reg-dev \ + libopencv-rgbd-dev \ + libopencv-saliency-dev \ + libopencv-sfm-dev \ + libopencv-shape-dev \ + libopencv-stereo-dev \ + libopencv-stitching-dev \ + libopencv-structured-light-dev \ + libopencv-superres-dev \ + libopencv-surface-matching-dev \ + libopencv-text-dev \ + libopencv-tracking-dev \ + libopencv-ts-dev \ + libopencv-video-dev \ + libopencv-videoio-dev \ + libopencv-videostab-dev \ + libopencv-wechat-qrcode-dev \ + libopencv-xfeatures2d-dev \ + libopencv-ximgproc-dev \ + libopencv-xobjdetect-dev \ + libopencv-xphoto-dev \ opencv-dev \ - msgpack-c-dev \ - rapidjson-dev \ - jsoncpp-dev \ - edgeai-vision-dev \ - ${@bb.utils.contains('DISTRO_FEATURES', 'armnn', 'arm-compute-library-dev', '', d)} \ - ${@bb.utils.contains('DISTRO_FEATURES', 'armnn', 'armnn-dev', '', d)} \ - ${@bb.utils.contains('DISTRO_FEATURES', 'edgetpu', 'libedgetpu-dev', '', d)} \ " USE_WAYLAND = " \ @@ -32,7 +77,7 @@ USE_WAYLAND = " \ qtwayland-tools \ " -RDEPENDS_${PN} += " \ +QT += " \ packagegroup-core-standalone-sdk-target \ qtbase-dev \ qtbase-plugins \ @@ -44,5 +89,21 @@ RDEPENDS_${PN} += " \ qttools-dev \ qttools-tools \ ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', '${USE_WAYLAND}', '', d)} \ +" + +RDEPENDS:${PN} = " \ + flatbuffers-dev \ + tensorflow-lite-dev \ + opencl-icd-loader-dev \ + msgpack-c-dev \ + rapidjson-dev \ + jsoncpp-dev \ + edgeai-vision-dev \ + ${@bb.utils.contains('DISTRO_FEATURES', 'armnn', 'arm-compute-library-dev', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'armnn', 'armnn-dev', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'edgetpu', 'libedgetpu-dev', '', d)} \ googletest-dev \ + ${OPENCV4} \ + ${QT} \ " + From bc755e4e66243e2991abfd218e0bd59622e48af6 Mon Sep 17 00:00:00 2001 From: "vijay.goudnaikar" Date: Fri, 3 Jun 2022 14:32:23 +0530 Subject: [PATCH 0392/2022] ose: umediaserver=24.gav.22 :Release Notes: Fix LS message unref crash on unload command :Detailed Notes: Fix LS Message unref crash on unload with invalid connection id umediaserver: submissions/24.gav.21..submissions/24.gav.22 fba1ba2 Fix LS message unref crash on unload command :Testing Performed: Test results are updated in [WRO-5947] :QA Notes: NA :Issues Addressed: [WRO-5947] CCC: umediaserver=24.gav.22 [WRO-5470] [RDX_CRASH][webos] /usr/sbin/umediaserver in LSMessageUnref Change-Id: I14fcdc5bc2d545ac61a0fb087764b9223db46f4e --- meta-webos/recipes-webos/umediaserver/umediaserver.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/umediaserver/umediaserver.bb b/meta-webos/recipes-webos/umediaserver/umediaserver.bb index d57a0bf13..497dd9ef8 100644 --- a/meta-webos/recipes-webos/umediaserver/umediaserver.bb +++ b/meta-webos/recipes-webos/umediaserver/umediaserver.bb @@ -42,7 +42,7 @@ COMPATIBLE_MACHINE:x86 = "(.*)" COMPATIBLE_MACHINE:x86-64 = "(.*)" WEBOS_GIT_PARAM_BRANCH = "@gav" -WEBOS_VERSION = "1.0.0-24.gav.21_568cdc04e1ba1f3b99267a32dc4adfb9dac43edc" +WEBOS_VERSION = "1.0.0-24.gav.22_2dbfb73a4907ba59181854800d1064bdff162f0b" WEBOS_GIT_PARAM_BRANCH:raspberrypi3 = "master" WEBOS_VERSION:raspberrypi3 = "1.0.0-27_dad33357ba323a69885bc11661330ab07296b0c8" From e9eb4e2d3aa5a21d5acd704d68470ee1f9fafcd6 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 19 May 2022 19:22:04 +0000 Subject: [PATCH 0393/2022] base-passwd: Rename .bbappend to apply on any version :Release Notes: The changes aren't really that version specific. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4709] Create GPVB with Yocto 4.1 Langdale [WRO-4984] CCC: Various build fixes Change-Id: Id5de29d33992d4c6d829613a397de9aaabf7d52e --- .../{base-passwd_3.5.29.bbappend => base-passwd_%.bbappend} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename meta-webos/recipes-core/base-passwd/{base-passwd_3.5.29.bbappend => base-passwd_%.bbappend} (100%) diff --git a/meta-webos/recipes-core/base-passwd/base-passwd_3.5.29.bbappend b/meta-webos/recipes-core/base-passwd/base-passwd_%.bbappend similarity index 100% rename from meta-webos/recipes-core/base-passwd/base-passwd_3.5.29.bbappend rename to meta-webos/recipes-core/base-passwd/base-passwd_%.bbappend From 35e0e7727cd72b9e8a13dee5632da25bdefffe6e Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 23 May 2022 09:26:35 +0000 Subject: [PATCH 0394/2022] mm-common=webos4 (update based on the version I've submitted to meta-oe) :Release Notes: This was introduced in 2012 with: https://github.com/openwebos/meta-webos/commit/f4745112438a5ba1913708b6b6ac30234ec8076e it's time to get rid of it, also because "${FILES_${PN}}" is no longer correct. :Detailed Notes: I've sent this upstream in: https://lists.openembedded.org/g/openembedded-devel/message/97230 :Testing Performed: :QA Notes: N/A :Issues Addressed: [WRO-4984] CCC: Various build fixes Change-Id: Iac24be7f2b33fa0b12c90a054e9324f83e51def0 --- .../mm-common/mm-common_%.bbappend | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/meta-webos/recipes-core/mm-common/mm-common_%.bbappend b/meta-webos/recipes-core/mm-common/mm-common_%.bbappend index 583cb23f6..fef7f4ae4 100644 --- a/meta-webos/recipes-core/mm-common/mm-common_%.bbappend +++ b/meta-webos/recipes-core/mm-common/mm-common_%.bbappend @@ -1,14 +1,20 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webos3" +EXTENDPRAUTO:append = "webos4" # All the original recipe does is stage a tarball and some autotools files; # nothing compiled. inherit allarch -# Nothing in mm-common is installed on the target => the base package should -# be empty. What's below works because ${PN}-dev is packaged ahead of ${PN}. -FILES:${PN}-dev += "${FILES_${PN}}" +# These files aren't very usefull on target image, package them all in PN-dev +FILES:${PN} = "" -# An empty package is needed to satisfy package dependencies in certain cases. -ALLOW_EMPTY:${PN} = "1" +FILES:${PN}-dev += " \ + ${datadir}/${BPN}/build \ + ${datadir}/${BPN}/doctags \ + ${datadir}/${BPN}/doctool \ + ${bindir}/mm-common-get \ + ${bindir}/mm-common-prepare \ +" +# ${PN} package is empty, remove the default dependency on it +RDEPENDS:${PN}-dev = "" From 8a85633d0af9495e8fc5e506a9f70f4092ae8ef4 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 23 May 2022 15:03:40 +0000 Subject: [PATCH 0395/2022] python3=webos2 (remove bash also with ${MLPREFIX}) :Release Notes: It's one of the rare cases where the recipes adds bash dependency with ${MLPREFIX} since: https://git.openembedded.org/openembedded-core/commit/?id=b3fda056a674889cd9697e779de023d4f993d3ce :Detailed Notes: Fixes: ERROR: lib32-python3-3.10.4-r0 do_package_qa: QA Issue: lib32-python3-tests rdepends on lib32-bash, but it isn't a build dependency, missing lib32-bash in DEPENDS or PACKAGECONFIG? [build-deps] :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4984] CCC: Various build fixes Change-Id: I83b4e3a5e69b89089813571b484f53bde64e2eb9 --- meta-webos/recipes-devtools/python/python3_%.bbappend | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-devtools/python/python3_%.bbappend b/meta-webos/recipes-devtools/python/python3_%.bbappend index f8d7c0ff7..5382f5f39 100644 --- a/meta-webos/recipes-devtools/python/python3_%.bbappend +++ b/meta-webos/recipes-devtools/python/python3_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2019-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webos1" +EXTENDPRAUTO:append = "webos2" # We need to revert changes from # @@ -20,6 +20,7 @@ RDEPENDS:${PN}-ptest:remove:libc-glibc = " \ " # ERROR: python3-3.8.1-r0 do_package_qa: QA Issue: /usr/lib/python3.8/test/ziptestdata/header.sh contained in package python3-tests requires /bin/bash, but no providers found in RDEPENDS:python3-tests? [file-rdeps] +# ERROR: lib32-python3-3.10.4-r0 do_package_qa: QA Issue: lib32-python3-tests rdepends on lib32-bash, but it isn't a build dependency, missing lib32-bash in DEPENDS or PACKAGECONFIG? [build-deps] VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS:${PN}-tests:append:class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS:${PN}-tests:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-tests:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash ${MLPREFIX}bash', '', d)}" From 1e39f1cb9be2bb880954c782af4d1e0df256e411 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 30 May 2022 08:29:04 +0000 Subject: [PATCH 0396/2022] webruntime: Fix build on host with newer glibc :Release Notes: Prevent using prebuilt libstdc++.so.6 which ends with GLIBCXX_3.4.28 when linking with host's /usr/lib64/libicuuc.so.71 which might be linked against newer version (e.g. GLIBCXX_3.4.30 from gcc12) when linking gen-regexp-special-case, bytecode_builtins_list_generator :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/409129 [684/1814] LINK v8_snapshot_clang_x64/gen-regexp-special-case FAILED: v8_snapshot_clang_x64/gen-regexp-special-case /usr/bin/python3 "../../git/src/build/toolchain/gcc_link_wrapper.py" --output="v8_snapshot_clang_x64/gen-regexp-special-case" -- ../../git/src/third_party/llvm-build/Release+Asserts/bin/clang++ -pie -fuse-ld=lld -Wl,--fatal-warnings -Wl,--build-id -fPIC -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--icf=all -Wl,--color-diagnostics -Wl,--no-call-graph-profile-sort -m64 -rdynamic -nostdlib++ -Wl,-z,defs -Wl,--as-needed -pie -Wl,--disable-new-dtags -Wl,-O2 -Wl,--gc-sections -o "v8_snapshot_clang_x64/gen-regexp-special-case" -Wl,--start-group @"v8_snapshot_clang_x64/gen-regexp-special-case.rsp" -Wl,--end-group -ldl -lpthread -lrt TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-x86_64/94.0.4606.128-pro.17-r2/build/Release/../../git/src/third_party/llvm-build/Release+Asserts/bin/ld.lld: TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-x86_64/94.0.4606.128-pro.17-r2/git/src/third_party/llvm-build/Release+Asserts/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib/x86_64-linux-gnu/libicuuc.so.71) clang: error: linker command failed with exit code 1 (use -v to see invocation) [685/1814] LINK v8_snapshot_clang_x64/bytecode_builtins_list_generator FAILED: v8_snapshot_clang_x64/bytecode_builtins_list_generator /usr/bin/python3 "../../git/src/build/toolchain/gcc_link_wrapper.py" --output="v8_snapshot_clang_x64/bytecode_builtins_list_generator" -- ../../git/src/third_party/llvm-build/Release+Asserts/bin/clang++ -pie -fuse-ld=lld -Wl,--fatal-warnings -Wl,--build-id -fPIC -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -Wl,--icf=all -Wl,--color-diagnostics -Wl,--no-call-graph-profile-sort -m64 -rdynamic -nostdlib++ -Wl,-z,defs -Wl,--as-needed -pie -Wl,--disable-new-dtags -Wl,-O2 -Wl,--gc-sections -o "v8_snapshot_clang_x64/bytecode_builtins_list_generator" -Wl,--start-group @"v8_snapshot_clang_x64/bytecode_builtins_list_generator.rsp" -Wl,--end-group -ldl -lpthread -lrt TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-x86_64/94.0.4606.128-pro.17-r2/build/Release/../../git/src/third_party/llvm-build/Release+Asserts/bin/ld.lld: TOPDIR/BUILD/work/x86_64-linux/mksnapshot-cross-x86_64/94.0.4606.128-pro.17-r2/git/src/third_party/llvm-build/Release+Asserts/bin/../lib/libstdc++.so.6: version `GLIBCXX_3.4.30' not found (required by /lib/x86_64-linux-gnu/libicuuc.so.71) clang: error: linker command failed with exit code 1 (use -v to see invocation) The whole linking command (shown with -v) is: clang version 13.0.0 (https://github.com/llvm/llvm-project/ 0e92cbd6a652c4f86fa76a3af2820009d5b6c300) Target: x86_64-unknown-linux-gnu Thread model: posix InstalledDir: /OE/tmp-glibc/work/x86_64-linux/mksnapshot-cross-aarch64/91-r1/build/Release/../../git/src/third_party/llvm-build/Release+Asserts/bin Selected GCC installation: /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.1 Candidate multilib: .;@m64 Candidate multilib: 32;@m32 Selected multilib: .;@m64 "/OE/tmp-glibc/work/x86_64-linux/mksnapshot-cross-aarch64/91-r1/build/Release/../../git/src/third_party/llvm-build/Release+Asserts/bin/ld.lld" \ -pie \ -export-dynamic \ --eh-frame-hdr \ -m \ elf_x86_64 \ -export-dynamic \ -dynamic-linker \ /lib64/ld-linux-x86-64.so.2 \ -o \ v8_snapshot_clang_arm64/torque \ /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.1/../../../../lib64/Scrt1.o \ /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.1/../../../../lib64/crti.o \ /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.1/crtbeginS.o \ -L/usr/lib/gcc/x86_64-pc-linux-gnu/12.1.1 \ -L/usr/lib/gcc/x86_64-pc-linux-gnu/12.1.1/../../../../lib64 \ -L/lib/../lib64 \ -L/usr/lib/../lib64 \ -L/usr/lib/gcc/x86_64-pc-linux-gnu/12.1.1/../../../../x86_64-pc-linux-gnu/lib \ -L/OE/tmp-glibc/work/x86_64-linux/mksnapshot-cross-aarch64/91-r1/git/src/third_party/llvm-build/Release+Asserts/bin/../lib \ -L/lib \ -L/usr/lib \ --fatal-warnings \ --build-id \ -z \ noexecstack \ -z \ relro \ -z \ now \ -z \ defs \ --as-needed \ --icf=all \ --color-diagnostics \ --no-call-graph-profile-sort \ --disable-new-dtags \ -O2 \ --gc-sections \ --start-group \ v8_snapshot_clang_arm64/obj/v8/torque/torque.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/cc-generator.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/cfg.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/class-debug-reader-generator.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/csa-generator.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/declarable.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/declaration-visitor.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/declarations.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/earley-parser.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/global-context.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/implementation-visitor.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/instance-type-generator.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/instructions.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/server-data.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/source-positions.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/torque-code-generator.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/torque-compiler.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/torque-parser.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/type-inference.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/type-oracle.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/type-visitor.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/types.o \ v8_snapshot_clang_arm64/obj/v8/torque_base/utils.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/algorithm.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/any.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/atomic.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/barrier.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/bind.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/charconv.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/chrono.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/condition_variable.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/condition_variable_destructor.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/debug.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/exception.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/functional.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/future.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/hash.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/ios.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/ios.instantiations.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/iostream.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/locale.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/memory.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/mutex.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/mutex_destructor.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/new.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/optional.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/random.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/random_shuffle.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/regex.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/shared_mutex.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/stdexcept.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/string.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/strstream.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/system_error.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/thread.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/typeinfo.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/utility.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/valarray.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/variant.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++/libc++/vector.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++abi/libc++abi/abort_message.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++abi/libc++abi/cxa_aux_runtime.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++abi/libc++abi/cxa_default_handlers.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++abi/libc++abi/cxa_exception.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++abi/libc++abi/cxa_exception_storage.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++abi/libc++abi/cxa_handlers.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++abi/libc++abi/cxa_personality.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++abi/libc++abi/cxa_vector.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++abi/libc++abi/cxa_virtual.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++abi/libc++abi/fallback_malloc.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++abi/libc++abi/private_typeinfo.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++abi/libc++abi/stdlib_exception.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++abi/libc++abi/stdlib_stdexcept.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++abi/libc++abi/stdlib_typeinfo.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++abi/libc++abi/cxa_guard.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++abi/libc++abi/cxa_demangle.o \ v8_snapshot_clang_arm64/obj/buildtools/third_party/libc++abi/libc++abi/cxa_thread_atexit.o \ v8_snapshot_clang_arm64/obj/v8/libv8_libbase.a \ v8_snapshot_clang_arm64/obj/v8/libv8_libplatform.a \ --end-group \ -ldl \ -lpthread \ -lrt \ -lm \ -lgcc_s \ -lgcc \ -lc \ -lgcc_s \ -lgcc \ /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.1/crtendS.o \ /usr/lib/gcc/x86_64-pc-linux-gnu/12.1.1/../../../../lib64/crtn.o /OE/tmp-glibc/work/x86_64-linux/mksnapshot-cross-aarch64/91-r1/build/Release/../../git/src/third_party/llvm-build/Release+Asserts/bin/ld.lld: \ /OE/tmp-glibc/work/x86_64-linux/mksnapshot-cross-aarch64/91-r1/git/src/third_party/llvm-build/Release+Asserts/bin/../lib/libstdc++.so.6: \ version \ `GLIBCXX_3.4.30' \ not found (required by /usr/lib64/libicuuc.so.71) clang: error: linker command failed with exit code 1 (use -v to see invocation) :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-5615] webruntime 91 and 94 fail to build with newer host OS [WRO-4984] CCC: Various build fixes Change-Id: I4cbfef2803fb1a4972726a7ef6943317074346d3 --- meta-webos/recipes-webos/chromium/webruntime-common.inc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/meta-webos/recipes-webos/chromium/webruntime-common.inc b/meta-webos/recipes-webos/chromium/webruntime-common.inc index b8e813cff..946f1ffed 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-common.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-common.inc @@ -110,6 +110,12 @@ do_configure() { export GYP_CHROMIUM_NO_ACTION=1 export PATH="${S}/depot_tools:$PATH" + # Prevent using this prebuilt libstdc++.so.6 which ends with GLIBCXX_3.4.28 + # when linking with host's /usr/lib64/libicuuc.so.71 which might be linked + # against newer version (e.g. GLIBCXX_3.4.30 from gcc12) when linking + # gen-regexp-special-case, bytecode_builtins_list_generator + rm -f ${S}/src/third_party/llvm-build/Release+Asserts/lib/libstdc++.so.6 + GN_ARGS="${GN_ARGS}" echo GN_ARGS is "${GN_ARGS}" echo BUILD_TARGETS are ${TARGET} From 945ea32908f079fa543de6aa058eb043864036c9 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 30 May 2022 10:20:56 +0000 Subject: [PATCH 0397/2022] webruntime-common.inc, mksnapshot-cross: use shared do_configure :Release Notes: Add EXTRA_OEGN variable to pass root and dotfile when called from mksnapshot-cross recipe :Detailed Notes: The only differences are quotes in echo, --root=${S}/src --dotfile=mksnapshot.gn and libstdc++.so.6 removal which is also needed in mksnapshot-cross. do_configure() { export GYP_CHROMIUM_NO_ACTION=1 export PATH="${S}/depot_tools:$PATH" + # Prevent using this prebuilt libstdc++.so.6 which ends with GLIBCXX_3.4.28 + # when linking with host's /usr/lib64/libicuuc.so.71 which might be linked + # against newer version (e.g. GLIBCXX_3.4.30 from gcc12) when linking + # gen-regexp-special-case, bytecode_builtins_list_generator + rm -f ${S}/src/third_party/llvm-build/Release+Asserts/lib/libstdc++.so.6 + GN_ARGS="${GN_ARGS}" - echo GN_ARGS is ${GN_ARGS} + echo GN_ARGS is "${GN_ARGS}" echo BUILD_TARGETS are ${TARGET} cd ${S}/src - gn --script-executable=${PYTHON} --root=${S}/src --dotfile=mksnapshot.gn gen ${OUT_DIR} --args="${GN_ARGS}" + gn --script-executable=${PYTHON} gen ${OUT_DIR} --args="${GN_ARGS}" } :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-5615] webruntime 91 and 94 fail to build with newer host OS [WRO-4984] CCC: Various build fixes Change-Id: I1b3c97621664e157ae21d6a538083c51bed6bd3d --- .../recipes-webos/chromium/mksnapshot-cross_91.bb | 11 +---------- .../recipes-webos/chromium/mksnapshot-cross_94.bb | 11 +---------- .../recipes-webos/chromium/webruntime-common.inc | 4 +++- 3 files changed, 5 insertions(+), 21 deletions(-) diff --git a/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb b/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb index 5feb235b7..f2d69f605 100644 --- a/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb +++ b/meta-webos/recipes-webos/chromium/mksnapshot-cross_91.bb @@ -24,16 +24,7 @@ GN_ARGS:append = "\ use_pmlog=false \ " -do_configure() { - export GYP_CHROMIUM_NO_ACTION=1 - export PATH="${S}/depot_tools:$PATH" - - GN_ARGS="${GN_ARGS}" - echo GN_ARGS is ${GN_ARGS} - echo BUILD_TARGETS are ${TARGET} - cd ${S}/src - gn --script-executable=${PYTHON} --root=${S}/src --dotfile=mksnapshot.gn gen ${OUT_DIR} --args="${GN_ARGS}" -} +EXTRA_OEGN = "--root=${S}/src --dotfile=mksnapshot.gn" do_install() { echo "Installing ${PN}" diff --git a/meta-webos/recipes-webos/chromium/mksnapshot-cross_94.bb b/meta-webos/recipes-webos/chromium/mksnapshot-cross_94.bb index a97718e50..ad1377ae0 100644 --- a/meta-webos/recipes-webos/chromium/mksnapshot-cross_94.bb +++ b/meta-webos/recipes-webos/chromium/mksnapshot-cross_94.bb @@ -24,16 +24,7 @@ GN_ARGS:append = "\ use_pmlog=false \ " -do_configure() { - export GYP_CHROMIUM_NO_ACTION=1 - export PATH="${S}/depot_tools:$PATH" - - GN_ARGS="${GN_ARGS}" - echo GN_ARGS is ${GN_ARGS} - echo BUILD_TARGETS are ${TARGET} - cd ${S}/src - gn --script-executable=${PYTHON} --root=${S}/src --dotfile=mksnapshot.gn gen ${OUT_DIR} --args="${GN_ARGS}" -} +EXTRA_OEGN = "--root=${S}/src --dotfile=mksnapshot.gn" do_install() { echo "Installing ${PN}" diff --git a/meta-webos/recipes-webos/chromium/webruntime-common.inc b/meta-webos/recipes-webos/chromium/webruntime-common.inc index 946f1ffed..0a72be737 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-common.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-common.inc @@ -106,6 +106,8 @@ COMPATIBLE_MACHINE:armv7ve = "(.*)" COMPATIBLE_MACHINE:x86 = "(.*)" COMPATIBLE_MACHINE:x86-64 = "(.*)" +EXTRA_OEGN ?= "" + do_configure() { export GYP_CHROMIUM_NO_ACTION=1 export PATH="${S}/depot_tools:$PATH" @@ -120,7 +122,7 @@ do_configure() { echo GN_ARGS is "${GN_ARGS}" echo BUILD_TARGETS are ${TARGET} cd ${S}/src - gn --script-executable=${PYTHON} gen ${OUT_DIR} --args="${GN_ARGS}" + gn --script-executable=${PYTHON} ${EXTRA_OEGN} gen ${OUT_DIR} --args="${GN_ARGS}" } do_compile[progress] = "outof:^\[(\d+)/(\d+)\]\s+" From b355044fb8d5b876c393523e9d5c9cf2e11c6c0d Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 30 May 2022 10:57:19 +0000 Subject: [PATCH 0398/2022] webos-preferred-providers.inc: remove PREFERRED_PROVIDER_libjson :Release Notes: All libjson references were already resolved. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4984] CCC: Various build fixes Change-Id: I85de77555c4f3094a243a28abf52213e44d88467 --- meta-webos/conf/distro/include/webos-preferred-providers.inc | 3 --- 1 file changed, 3 deletions(-) diff --git a/meta-webos/conf/distro/include/webos-preferred-providers.inc b/meta-webos/conf/distro/include/webos-preferred-providers.inc index cd05e6f90..fbb2bd912 100644 --- a/meta-webos/conf/distro/include/webos-preferred-providers.inc +++ b/meta-webos/conf/distro/include/webos-preferred-providers.inc @@ -22,9 +22,6 @@ VIRTUAL-RUNTIME_tar = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_TAR PREFERRED_PROVIDER_jpeg = "libjpeg-turbo" PREFERRED_PROVIDER_jpeg-native = "libjpeg-turbo-native" -# This line is required until all of the references to libjson are changed in metadata to json-c. -PREFERRED_PROVIDER_libjson = "json-c" - PREFERRED_PROVIDER_stat = "busybox" VIRTUAL-RUNTIME_stat = "busybox" VIRTUAL-RUNTIME_webos-ime = "imemanager" From 1180f40abc1304e0708827028fbdb1239ed085ae Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 30 May 2022 10:58:19 +0000 Subject: [PATCH 0399/2022] webos-preferred-providers.inc: set PREFERRED_PROVIDER_go-native :Release Notes: Backport this setting introduced in gatesgarth: https://git.openembedded.org/openembedded-core/commit/?h=gatesgarth&id=c23f9e80492e4b1d47c0ada8eae3decf736253c7 :Detailed Notes: Resolves: NOTE: Multiple providers are available for go-native (go-native, go-binary-native) Consider defining a PREFERRED_PROVIDER entry to match go-native :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4984] CCC: Various build fixes Change-Id: I046566fd6fb92130df2af1000aed0e4c91ef8a50 --- meta-webos/conf/distro/include/webos-preferred-providers.inc | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/meta-webos/conf/distro/include/webos-preferred-providers.inc b/meta-webos/conf/distro/include/webos-preferred-providers.inc index fbb2bd912..810076a18 100644 --- a/meta-webos/conf/distro/include/webos-preferred-providers.inc +++ b/meta-webos/conf/distro/include/webos-preferred-providers.inc @@ -26,6 +26,10 @@ PREFERRED_PROVIDER_stat = "busybox" VIRTUAL-RUNTIME_stat = "busybox" VIRTUAL-RUNTIME_webos-ime = "imemanager" +# Backport from gatesgarth https://git.openembedded.org/openembedded-core/commit/?h=gatesgarth&id=c23f9e80492e4b1d47c0ada8eae3decf736253c7 +# can be dropped after we upgrade to newer oe-core +PREFERRED_PROVIDER_go-native = "go-native" + VIRTUAL-RUNTIME_bluetooth_service = "com.webos.service.bluetooth2" # Options are: bluez4, bluez5. This will only be used if "bluetooth" appears in From bbb696a26ca2b236d2b6015f1bfa774c16460e51 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 3 Jun 2022 08:27:28 +0000 Subject: [PATCH 0400/2022] meta-webos-backports-4.0: use the new overrides syntax :Release Notes: New syntax is required since 3.4 Honister, so this definitely wasn't backported from 4.0 Kirkstone. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4984] CCC: Various build fixes Change-Id: If312fa21099458f3fa048cfbd1aefc2c7278ac5c --- .../recipes-core/opencl/opencl-clhpp_git.bb | 2 +- .../recipes-core/opencl/opencl-headers_git.bb | 2 +- .../opencl/opencl-icd-loader_git.bb | 20 +++---- .../recipes-support/opencv/ade_0.1.1f.bb | 2 +- .../recipes-support/opencv/opencv_4.5.5.bb | 56 +++++++++---------- 5 files changed, 41 insertions(+), 41 deletions(-) diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-clhpp_git.bb b/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-clhpp_git.bb index 4b92cd381..1cdd4c939 100644 --- a/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-clhpp_git.bb +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-clhpp_git.bb @@ -19,5 +19,5 @@ EXTRA_OECMAKE = " \ -DBUILD_TESTS=OFF \ " # Headers only so PN is empty -RDEPENDS_${PN}-dev = "" +RDEPENDS:${PN}-dev = "" diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-headers_git.bb b/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-headers_git.bb index 27079b82d..5e8e6f07f 100644 --- a/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-headers_git.bb +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-headers_git.bb @@ -11,7 +11,7 @@ SRC_URI = "git://github.com/KhronosGroup/OpenCL-Headers.git;branch=main;protocol do_configure[noexec] = "1" do_compile[noexec] = "1" -ALLOW_EMPTY_${PN} = "1" +ALLOW_EMPTY:${PN} = "1" do_install () { install -d ${D}${includedir}/CL/ diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-icd-loader_git.bb b/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-icd-loader_git.bb index 57848995d..292ed56b5 100644 --- a/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-icd-loader_git.bb +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-icd-loader_git.bb @@ -15,7 +15,7 @@ PV = "v2022.01.04+git${SRCPV}" SRCREV = "169f05d026e65948b30cfe2200595fda92198cf7" SRC_URI = "git://github.com/KhronosGroup/OpenCL-ICD-Loader.git;branch=main;protocol=https" -EXTRA_OECMAKE_append = " \ +EXTRA_OECMAKE:append = " \ -DOPENCL_ICD_LOADER_HEADERS_DIR=${STAGING_INCDIR} \ " @@ -37,24 +37,24 @@ PACKAGES = "opencl-icd-loader opencl-icd-loader-dev" PACKAGES += "libicdlog libicdlog-dbg" PACKAGE_DEBUG_SPLIT_STYLE = "debug-without-src" -FILES_${PN} = " \ +FILES:${PN} = " \ ${bindir}/icd_loader_test \ ${libdir}/libOpenCLDriverStub.so \ ${libdir}/libOpenCL.so.1.2 \ ${libdir}/libOpenCL.so.1 \ " -FILES_${PN}-dev = " \ +FILES:${PN}-dev = " \ ${libdir}/libOpenCL.so \ " -FILES_libicdlog = "${libdir}/libIcdLog.so" -FILES_libicdlog-dbg = "${libdir}/.debug/libIcdLog.so" +FILES:libicdlog = "${libdir}/libIcdLog.so" +FILES:libicdlog-dbg = "${libdir}/.debug/libIcdLog.so" -RDEPENDS_${PN} = "libicdlog" +RDEPENDS:${PN} = "libicdlog" -FILES_${PN}-dev = "" +FILES:${PN}-dev = "" -INSANE_SKIP_${PN} = "dev-so" -INSANE_SKIP_${PN}-dev += "dev-elf" +INSANE_SKIP:${PN} = "dev-so" +INSANE_SKIP:${PN}-dev += "dev-elf" -FILES_${PN} += "${libdir}/libOpenCL*" +FILES:${PN} += "${libdir}/libOpenCL*" diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/ade_0.1.1f.bb b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/ade_0.1.1f.bb index 7e9bbc31c..48a45143d 100644 --- a/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/ade_0.1.1f.bb +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/ade_0.1.1f.bb @@ -19,4 +19,4 @@ S = "${WORKDIR}/git" EXTRA_OECMAKE += " -DCMAKE_BUILD_TYPE=Release" -FILES_${PN}-dev += "${datadir}/${BPN}/*.cmake" +FILES:${PN}-dev += "${datadir}/${BPN}/*.cmake" diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv_4.5.5.bb b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv_4.5.5.bb index a1e9797b0..7888e0ffc 100644 --- a/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv_4.5.5.bb +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv_4.5.5.bb @@ -5,8 +5,8 @@ SECTION = "libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" -ARM_INSTRUCTION_SET_armv4 = "arm" -ARM_INSTRUCTION_SET_armv5 = "arm" +ARM_INSTRUCTION_SET:armv4 = "arm" +ARM_INSTRUCTION_SET:armv5 = "arm" DEPENDS = "libtool swig-native bzip2 zlib glib-2.0 libwebp" @@ -54,7 +54,7 @@ SRC_URI = "git://github.com/opencv/opencv.git;name=opencv;branch=master;protocol file://0001-core-vsx-update-vec_absd-workaround-condition.patch \ file://opencv4.pc \ " -SRC_URI_append_riscv64 = " file://0001-Use-Os-to-compile-tinyxml2.cpp.patch;patchdir=../contrib" +SRC_URI:append:riscv64 = " file://0001-Use-Os-to-compile-tinyxml2.cpp.patch;patchdir=../contrib" S = "${WORKDIR}/git" @@ -101,10 +101,10 @@ EXTRA_OECMAKE = "-DOPENCV_EXTRA_MODULES_PATH=${WORKDIR}/contrib/modules \ ${@bb.utils.contains("TARGET_CC_ARCH", "-msse4.1", "-DENABLE_SSE=1 -DENABLE_SSE2=1 -DENABLE_SSE3=1 -DENABLE_SSSE3=1 -DENABLE_SSE41=1", "", d)} \ ${@bb.utils.contains("TARGET_CC_ARCH", "-msse4.2", "-DENABLE_SSE=1 -DENABLE_SSE2=1 -DENABLE_SSE3=1 -DENABLE_SSSE3=1 -DENABLE_SSE41=1 -DENABLE_SSE42=1", "", d)} \ " -EXTRA_OECMAKE_append_x86 = " -DX86=ON" +EXTRA_OECMAKE:append:x86 = " -DX86=ON" # disable sse4.1 and sse4.2 to fix 32bit build failure # https://github.com/opencv/opencv/issues/21597 -EXTRA_OECMAKE_remove_x86 = " -DENABLE_SSE41=1 -DENABLE_SSE42=1" +EXTRA_OECMAKE:remove:x86 = " -DENABLE_SSE41=1 -DENABLE_SSE42=1" PACKAGECONFIG ??= "gapi eigen jpeg png tiff v4l libv4l gstreamer opencl gphoto2 dnn text \ ${@bb.utils.contains("DISTRO_FEATURES", "x11", "gtk", "", d)} \ @@ -113,10 +113,10 @@ PACKAGECONFIG ??= "gapi eigen jpeg png tiff v4l libv4l gstreamer opencl gphoto2 " # TBB does not build for powerpc so disable that package config -PACKAGECONFIG_remove_powerpc = "tbb" +PACKAGECONFIG:remove:powerpc = "tbb" # tbb now needs getcontect/setcontext which is not there for all arches on musl -PACKAGECONFIG_remove_libc-musl_riscv64 = "tbb" -PACKAGECONFIG_remove_libc-musl_riscv32 = "tbb" +PACKAGECONFIG:remove:libc-musl:riscv64 = "tbb" +PACKAGECONFIG:remove:libc-musl:riscv32 = "tbb" PACKAGECONFIG[gapi] = "-DWITH_ADE=ON -Dade_DIR=${STAGING_LIBDIR},-DWITH_ADE=OFF,ade" PACKAGECONFIG[amdblas] = "-DWITH_OPENCLAMDBLAS=ON,-DWITH_OPENCLAMDBLAS=OFF,libclamdblas," @@ -165,7 +165,7 @@ PACKAGES += "${@bb.utils.contains('PACKAGECONFIG', 'samples', '${PN}-samples', ' ${@bb.utils.contains('PACKAGECONFIG', 'python3', 'python3-${BPN}', '', d)} \ ${PN}-apps" -python populate_packages_prepend () { +python populate_packages:prepend () { cv_libdir = d.expand('${libdir}') do_split_packages(d, cv_libdir, r'^lib(.*)\.so$', 'lib%s-dev', 'OpenCV %s development package', extra_depends='${PN}-dev', allow_links=True) do_split_packages(d, cv_libdir, r'^lib(.*)\.la$', 'lib%s-dev', 'OpenCV %s development package', extra_depends='${PN}-dev') @@ -195,37 +195,37 @@ python populate_packages_prepend () { PACKAGES_DYNAMIC += "^libopencv-.*" -FILES_${PN} = "" -FILES_${PN}-dbg += "${datadir}/OpenCV/java/.debug/* ${datadir}/OpenCV/samples/bin/.debug/*" -FILES_${PN}-dev = "${includedir} ${libdir}/pkgconfig ${libdir}/cmake/opencv4/*.cmake" -FILES_${PN}-staticdev += "${libdir}/opencv4/3rdparty/*.a" -FILES_${PN}-apps = "${bindir}/* ${datadir}/opencv4 ${datadir}/licenses" -FILES_${PN}-java = "${datadir}/OpenCV/java" -FILES_${PN}-samples = "${datadir}/opencv4/samples/" +FILES:${PN} = "" +FILES:${PN}-dbg += "${datadir}/OpenCV/java/.debug/* ${datadir}/OpenCV/samples/bin/.debug/*" +FILES:${PN}-dev = "${includedir} ${libdir}/pkgconfig ${libdir}/cmake/opencv4/*.cmake" +FILES:${PN}-staticdev += "${libdir}/opencv4/3rdparty/*.a" +FILES:${PN}-apps = "${bindir}/* ${datadir}/opencv4 ${datadir}/licenses" +FILES:${PN}-java = "${datadir}/OpenCV/java" +FILES:${PN}-samples = "${datadir}/opencv4/samples/" -INSANE_SKIP_${PN}-java = "libdir" -INSANE_SKIP_${PN}-dbg = "libdir" +INSANE_SKIP:${PN}-java = "libdir" +INSANE_SKIP:${PN}-dbg = "libdir" -ALLOW_EMPTY_${PN} = "1" +ALLOW_EMPTY:${PN} = "1" -SUMMARY_python-opencv = "Python bindings to opencv" -FILES_python-opencv = "${PYTHON_SITEPACKAGES_DIR}/*" -RDEPENDS_python-opencv = "python-core python-numpy" +SUMMARY:python-opencv = "Python bindings to opencv" +FILES:python-opencv = "${PYTHON_SITEPACKAGES_DIR}/*" +RDEPENDS:python-opencv = "python-core python-numpy" -SUMMARY_python3-opencv = "Python bindings to opencv" -FILES_python3-opencv = "${PYTHON_SITEPACKAGES_DIR}/*" -RDEPENDS_python3-opencv = "python3-core python3-numpy" +SUMMARY:python3-opencv = "Python bindings to opencv" +FILES:python3-opencv = "${PYTHON_SITEPACKAGES_DIR}/*" +RDEPENDS:python3-opencv = "python3-core python3-numpy" -RDEPENDS_${PN}-apps = "bash" +RDEPENDS:${PN}-apps = "bash" -do_compile_prepend() { +do_compile:prepend() { # remove the build host info to improve reproducibility if [ -f ${WORKDIR}/build/modules/core/version_string.inc ]; then sed -i "s#${WORKDIR}#/workdir#g" ${WORKDIR}/build/modules/core/version_string.inc fi } -do_install_append() { +do_install:append() { # Move Python files into correct library folder (for multilib build) if [ "$libdir" != "/usr/lib" -a -d ${D}/usr/lib ]; then mv ${D}/usr/lib/* ${D}/${libdir}/ From a5ed4e032cd5829a26a541db4acf4b89b52c05f7 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 3 Jun 2022 08:39:07 +0000 Subject: [PATCH 0401/2022] meta-webos-backports-4.0: import as-is in meta-oe/kirkstone :Release Notes: The purpose of meta-webos-backports layers is to be able to drop the backported recipes without unexpected side-effects, any webOS specific changes should still be implemented in .bbappend, so that they stay even after the backports layer is removed. :Detailed Notes: The only acceptable exception is the inherit of distutils3-base instead of setuptools3-base in opencv, as setuptools3-base doesn't exist yet in dunfell and distutils3-base works well enough in this case. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4984] CCC: Various build fixes Change-Id: I1285c29e3fcdb285a8df667b53ea2eb872c7ec7b --- .../recipes-core/opencl/opencl-clhpp_git.bb | 2 +- .../opencl/opencl-icd-loader_git.bb | 9 +-------- .../recipes-support/opencv/opencv/opencv4.pc | 13 ------------ .../recipes-support/opencv/opencv_4.5.5.bb | 20 ++----------------- 4 files changed, 4 insertions(+), 40 deletions(-) delete mode 100644 meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/opencv4.pc diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-clhpp_git.bb b/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-clhpp_git.bb index 1cdd4c939..8a712602c 100644 --- a/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-clhpp_git.bb +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-clhpp_git.bb @@ -18,6 +18,6 @@ EXTRA_OECMAKE = " \ -DBUILD_EXAMPLES=OFF \ -DBUILD_TESTS=OFF \ " + # Headers only so PN is empty RDEPENDS:${PN}-dev = "" - diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-icd-loader_git.bb b/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-icd-loader_git.bb index 292ed56b5..67437732d 100644 --- a/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-icd-loader_git.bb +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-core/opencl/opencl-icd-loader_git.bb @@ -8,7 +8,7 @@ inherit pkgconfig cmake DEPENDS += "opencl-headers" -#PROVIDES = "virtual/opencl-icd" +PROVIDES = "virtual/opencl-icd" S = "${WORKDIR}/git" PV = "v2022.01.04+git${SRCPV}" @@ -51,10 +51,3 @@ FILES:libicdlog = "${libdir}/libIcdLog.so" FILES:libicdlog-dbg = "${libdir}/.debug/libIcdLog.so" RDEPENDS:${PN} = "libicdlog" - -FILES:${PN}-dev = "" - -INSANE_SKIP:${PN} = "dev-so" -INSANE_SKIP:${PN}-dev += "dev-elf" - -FILES:${PN} += "${libdir}/libOpenCL*" diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/opencv4.pc b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/opencv4.pc deleted file mode 100644 index 6ed98424e..000000000 --- a/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv/opencv4.pc +++ /dev/null @@ -1,13 +0,0 @@ -# Package Information for pkg-config - -prefix=/usr -exec_prefix=${prefix} -libdir=${exec_prefix}/lib -includedir=${prefix}/include/opencv4 - -Name: OpenCV -Description: Open Source Computer Vision Library -Version: 4.5.5 -Libs: -L${exec_prefix}/lib -lopencv_dnn -lopencv_dnn_objdetect -lopencv_dnn_superres -lopencv_stitching -lopencv_ts -lopencv_aruco -lopencv_bgsegm -lopencv_bioinspired -lopencv_ccalib -lopencv_dpm -lopencv_face -lopencv_fuzzy -lopencv_hfs -lopencv_img_hash -lopencv_line_descriptor -lopencv_quality -lopencv_reg -lopencv_rgbd -lopencv_saliency -lopencv_sfm -lopencv_stereo -lopencv_structured_light -lopencv_phase_unwrapping -lopencv_superres -lopencv_optflow -lopencv_surface_matching -lopencv_tracking -lopencv_highgui -lopencv_datasets -lopencv_plot -lopencv_videostab -lopencv_videoio -lopencv_xfeatures2d -lopencv_shape -lopencv_ml -lopencv_ximgproc -lopencv_video -lopencv_xobjdetect -lopencv_objdetect -lopencv_calib3d -lopencv_imgcodecs -lopencv_features2d -lopencv_flann -lopencv_xphoto -lopencv_photo -lopencv_imgproc -lopencv_core -Libs.private: -ldl -lm -lpthread -lrt -Cflags: -I${includedir} diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv_4.5.5.bb b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv_4.5.5.bb index 7888e0ffc..7101f1d03 100644 --- a/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv_4.5.5.bb +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-support/opencv/opencv_4.5.5.bb @@ -52,7 +52,6 @@ SRC_URI = "git://github.com/opencv/opencv.git;name=opencv;branch=master;protocol file://download.patch \ file://0001-Make-ts-module-external.patch \ file://0001-core-vsx-update-vec_absd-workaround-condition.patch \ - file://opencv4.pc \ " SRC_URI:append:riscv64 = " file://0001-Use-Os-to-compile-tinyxml2.cpp.patch;patchdir=../contrib" @@ -106,10 +105,8 @@ EXTRA_OECMAKE:append:x86 = " -DX86=ON" # https://github.com/opencv/opencv/issues/21597 EXTRA_OECMAKE:remove:x86 = " -DENABLE_SSE41=1 -DENABLE_SSE42=1" -PACKAGECONFIG ??= "gapi eigen jpeg png tiff v4l libv4l gstreamer opencl gphoto2 dnn text \ +PACKAGECONFIG ??= "gapi python3 eigen jpeg png tiff v4l libv4l gstreamer samples tbb gphoto2 \ ${@bb.utils.contains("DISTRO_FEATURES", "x11", "gtk", "", d)} \ - ${@bb.utils.contains("DISTRO_FEATURES", "ml-library-size-reduction", "", "samples", d)} \ - ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "libav", "", d)} \ " # TBB does not build for powerpc so disable that package config @@ -132,7 +129,7 @@ PACKAGECONFIG[java] = "-DJAVA_INCLUDE_PATH=${JAVA_HOME}/include -DJAVA_INCLUDE_P PACKAGECONFIG[jpeg] = "-DWITH_JPEG=ON,-DWITH_JPEG=OFF,jpeg," PACKAGECONFIG[libav] = "-DWITH_FFMPEG=ON,-DWITH_FFMPEG=OFF,libav," PACKAGECONFIG[libv4l] = "-DWITH_LIBV4L=ON,-DWITH_LIBV4L=OFF,v4l-utils," -PACKAGECONFIG[opencl] = "-DWITH_OPENCL=ON,-DWITH_OPENCL=OFF,opencl-headers opencl-icd-loader," +PACKAGECONFIG[opencl] = "-DWITH_OPENCL=ON,-DWITH_OPENCL=OFF,opencl-headers virtual/opencl-icd," PACKAGECONFIG[oracle-java] = "-DJAVA_INCLUDE_PATH=${ORACLE_JAVA_HOME}/include -DJAVA_INCLUDE_PATH2=${ORACLE_JAVA_HOME}/include/linux -DJAVA_AWT_INCLUDE_PATH=${ORACLE_JAVA_HOME}/include -DJAVA_AWT_LIBRARY=${ORACLE_JAVA_HOME}/lib/amd64/libjawt.so -DJAVA_JVM_LIBRARY=${ORACLE_JAVA_HOME}/lib/amd64/server/libjvm.so,,ant-native oracle-jse-jdk oracle-jse-jdk-native," PACKAGECONFIG[png] = "-DWITH_PNG=ON,-DWITH_PNG=OFF,libpng," PACKAGECONFIG[python2] = "-DPYTHON2_NUMPY_INCLUDE_DIRS:PATH=${STAGING_LIBDIR}/${PYTHON_DIR}/site-packages/numpy/core/include,,python-numpy," @@ -240,17 +237,4 @@ do_install:append() { if [ -f ${D}${bindir}/setup_vars_opencv4.sh ]; then rm -rf ${D}${bindir}/setup_vars_opencv4.sh fi - - # install pkgconfig file - install -d ${D}${libdir}/pkgconfig - install -m 0644 ${WORKDIR}/opencv4.pc ${D}${libdir}/pkgconfig/opencv4.pc - - # remove openc-apps for size reduction(about 40MB over) - if ${@bb.utils.contains('DISTRO_FEATURES', 'ml-library-size-reduction', 'true', 'false', d)}; then - rm -rf ${D}/${bindir}/opencv_annotation - rm -rf ${D}/${bindir}/opencv_interactive-calibration - rm -rf ${D}/${bindir}/opencv_model_diagnostics - rm -rf ${D}/${bindir}/opencv_version - rm -rf ${D}/${bindir}/opencv_visualisation - fi } From ee7eff4adf8733f2afc787753c4cbf2905ba2974 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 3 Jun 2022 09:12:13 +0000 Subject: [PATCH 0402/2022] tensorflow-lite, armnn, armnn-tensorflow, arm-compute-library: fix various issues :Release Notes: Use SUMMARY instead of DESCRIPTION. :Detailed Notes: Use protocol=https to fix: WARNING: lib32-tensorflow-lite-2.6.2-r0 do_fetch: URL: git://github.com/tensorflow/tensorflow.git;branch=r2.6 uses git protocol which is no longer supported by github. Please change to ;protocol=https in the url. WARNING: lib32-armnn-tensorflow-2.6.2-r0 do_fetch: URL: git://github.com/tensorflow/tensorflow.git;branch=r2.6;name=tensorflow uses git protocol which is no longer supported by github. Please change to ;protocol=https in the url. Use sha instead of tag name in SRCREV to prevent accessing network every time the recipe is parsed and to fix: ERROR: lib32-tensorflow-lite-2.6.2-r0 do_fetch: Bitbake Fetcher Error: FetchError("Recipe uses a floating tag/branch without a fixed SRCREV yet doesn't call bb.fetch2.get_srcrev() (use SRCPV in PV for OE).", None) ERROR: Logfile of failure stored in: lib32-tensorflow-lite/2.6.2-r0/temp/log.do_fetch.2398611 ERROR: Task (virtual:multilib:lib32:meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb:do_fetch) failed with exit code '1' ERROR: lib32-arm-compute-library-21.11-r0 do_fetch: Bitbake Fetcher Error: FetchError("Recipe uses a floating tag/branch without a fixed SRCREV yet doesn't call bb.fetch2.get_srcrev() (use SRCPV in PV for OE).", None) ERROR: Logfile of failure stored in: lib32-arm-compute-library/21.11-r0/temp/log.do_fetch.2398860 ERROR: Task (virtual:multilib:lib32:meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb:do_fetch) failed with exit code '1' ERROR: lib32-armnn-21.11-r0 do_fetch: Bitbake Fetcher Error: FetchError("Recipe uses a floating tag/branch without a fixed SRCREV yet doesn't call bb.fetch2.get_srcrev() (use SRCPV in PV for OE).", None) ERROR: Logfile of failure stored in: lib32-armnn/21.11-r0/temp/log.do_fetch.2398954 ERROR: Task (virtual:multilib:lib32:meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb:do_fetch) failed with exit code '1' ERROR: lib32-armnn-tensorflow-2.6.2-r0 do_fetch: Bitbake Fetcher Error: FetchError("Recipe uses a floating tag/branch without a fixed SRCREV yet doesn't call bb.fetch2.get_srcrev() (use SRCPV in PV for OE).", None) ERROR: Logfile of failure stored in: lib32-armnn-tensorflow/2.6.2-r0/temp/log.do_fetch.2399243 ERROR: Task (virtual:multilib:lib32:meta-webos/recipes-upstreamable/armnn/armnn-tensorflow_2.6.2.bb:do_fetch) failed with exit code '1' :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4984] CCC: Various build fixes Change-Id: I89b5d6e18e5313b57e2597265c0f39ce97f29fe5 --- .../arm-compute-library/arm-compute-library_21.11.bb | 5 +++-- .../armnn/armnn-tensorflow_2.6.2.bb | 10 ++++++---- meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb | 4 ++-- .../tensorflow-lite/tensorflow-lite_2.6.2.bb | 7 ++++--- 4 files changed, 15 insertions(+), 11 deletions(-) diff --git a/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb b/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb index 3cac39fb2..f3ea05f30 100644 --- a/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb +++ b/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb @@ -4,7 +4,8 @@ LICENSE = "MIT" LIC_FILES_CHKSUM = "file://LICENSE;md5=9598101cf48c5f479cfda9f3fc6fc566" SRCBRANCH = "master" -SRCREV = "v${PV}" +# Matches v${PV} +SRCREV = "91ee4d0a9ef128b16936921470a0e3ffef347536" SRC_URI = " \ git://github.com/ARM-software/ComputeLibrary.git;branch=${SRCBRANCH};protocol=https \ @@ -12,7 +13,7 @@ SRC_URI = " \ file://arm-compute-library.pc.in \ " -PR ="r0" +PR = "r0" S = "${WORKDIR}/git" diff --git a/meta-webos/recipes-upstreamable/armnn/armnn-tensorflow_2.6.2.bb b/meta-webos/recipes-upstreamable/armnn/armnn-tensorflow_2.6.2.bb index e42bc6f15..9d61dec1c 100644 --- a/meta-webos/recipes-upstreamable/armnn/armnn-tensorflow_2.6.2.bb +++ b/meta-webos/recipes-upstreamable/armnn/armnn-tensorflow_2.6.2.bb @@ -3,12 +3,14 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=c7e17cca1ef4230861fb7868e96c387e" SRC_URI = " \ - git://github.com/tensorflow/tensorflow.git;branch=r2.6;name=tensorflow \ - git://github.com/ARM-software/armnn.git;branch=branches/armnn_21_11;name=armnn;subdir=${WORKDIR}/armnn;destsuffix=armnn \ + git://github.com/tensorflow/tensorflow.git;branch=r2.6;name=tensorflow;protocol=https \ + git://github.com/ARM-software/armnn.git;branch=branches/armnn_21_11;name=armnn;subdir=${WORKDIR}/armnn;destsuffix=armnn;protocol=https \ " -SRCREV_tensorflow = "v${PV}" -SRCREV_armnn = "v21.11" +# Matches v${PV} +SRCREV_tensorflow = "c2363d6d025981c661f8cbecf4c73ca7fbf38caf" +# Matches v21.11 +SRCREV_armnn = "5e9965cae1cc6162649910f423ebd86001fc1931" SRCREV_FORMAT = "tensorflow" DEPENDS = " \ diff --git a/meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb b/meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb index 6489bd71c..05b1eaaff 100644 --- a/meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb +++ b/meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb @@ -17,8 +17,8 @@ SRC_URI = " \ file://armnn-delegate.pc.in \ " -SRCREV = "v${PV}" -#SRCREV = "5e9965cae1cc6162649910f423ebd86001fc1931" +# Matches v${PV} +SRCREV = "5e9965cae1cc6162649910f423ebd86001fc1931" PR = "r0" diff --git a/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb index f4aaa0785..c3f38b838 100644 --- a/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb +++ b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb @@ -1,6 +1,6 @@ # Copyright (c) 2022 LG Electronics, Inc. -DESCRIPTION = "TensorFlow Lite CPP Library" +SUMMARY = "TensorFlow Lite CPP Library" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=c7e17cca1ef4230861fb7868e96c387e" @@ -9,10 +9,11 @@ BPV = "${@'.'.join(d.getVar('PV').split('.')[0:2])}" DPV = "${@'.'.join(d.getVar('PV').split('.')[0:3])}" # Since they tag off of something resembling ${PV}, use it. -SRCREV = "v${PV}" +# Matches v${PV} +SRCREV = "c2363d6d025981c661f8cbecf4c73ca7fbf38caf" SRC_URI = " \ - git://github.com/tensorflow/tensorflow.git;branch=r${BPV} \ + git://github.com/tensorflow/tensorflow.git;branch=r${BPV};protocol=https \ file://0001-remove-label_image-benchmark_model-exclude-option.patch \ file://0002-enable-external-delegate-in-benchmarktool.patch \ file://tensorflowlite.pc.in \ From 0600e9432c511d73b00034d7ca905db4fb387964 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 3 Jun 2022 09:35:46 +0000 Subject: [PATCH 0403/2022] gcc-source=webos2 (remove unused 0003-arm-Fix-arm.c-build-error.patch) :Release Notes: It was added to meta-lg-webos in WRO-5487 but never added to SRC_URI. :Detailed Notes: It also conflicts with: 0007-arm-xnnpack-neondot-build-error-fix.patch :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-5487] CCC: tensorflow-lite=r0,v2.6.2 edgeai-vision=7-r0,v1.0.0 [WRO-4984] CCC: Various build fixes Change-Id: If075e70cf4c7177fec57b5095f41e2d4fe0a4bb6 --- .../gcc/gcc-source_9.3%.bbappend | 2 +- .../gcc/0003-arm-Fix-arm.c-build-error.patch | 55 ------------------- 2 files changed, 1 insertion(+), 56 deletions(-) delete mode 100644 meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-arm.c-build-error.patch diff --git a/meta-webos/recipes-devtools/gcc/gcc-source_9.3%.bbappend b/meta-webos/recipes-devtools/gcc/gcc-source_9.3%.bbappend index 31cc15530..29b172738 100644 --- a/meta-webos/recipes-devtools/gcc/gcc-source_9.3%.bbappend +++ b/meta-webos/recipes-devtools/gcc/gcc-source_9.3%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "smartscreen1" +EXTENDPRAUTO:append = "webos2" FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" diff --git a/meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-arm.c-build-error.patch b/meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-arm.c-build-error.patch deleted file mode 100644 index 58e90c523..000000000 --- a/meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-arm.c-build-error.patch +++ /dev/null @@ -1,55 +0,0 @@ -From bd5e3027dcee5d8abecf74e6da9c197bacce6f8d Mon Sep 17 00:00:00 2001 -From: "kijoong.lee" -Date: Tue, 16 Nov 2021 04:59:33 +0000 -Subject: [PATCH] arm: Fix arm.c build error - ---- - gcc/config/arm/arm.c | 10 ++++++++++ - 1 file changed, 10 insertions(+) - -diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c -index 71b42ae24..73f6ea3da 100644 ---- a/gcc/config/arm/arm.c -+++ b/gcc/config/arm/arm.c -@@ -3113,6 +3113,7 @@ arm_option_override_internal (struct gcc_options *opts, - } - - static sbitmap isa_all_fpubits; -+static sbitmap isa_all_fpbits; - static sbitmap isa_quirkbits; - - /* Configure a build target TARGET from the user-specified options OPTS and -@@ -3181,6 +3182,11 @@ arm_configure_build_target (struct arm_build_target *target, - /* Ignore (for now) any bits that might be set by -mfpu. */ - bitmap_and_compl (isa_delta, isa_delta, isa_all_fpubits); - -+ /* And if the target ISA lacks floating point, ignore any -+ extensions that depend on that. */ -+ if (!bitmap_bit_p (target->isa, isa_bit_vfpv2)) -+ bitmap_and_compl (isa_delta, isa_delta, isa_all_fpbits); -+ - if (!bitmap_empty_p (isa_delta)) - { - if (warn_compatible) -@@ -3371,6 +3377,8 @@ arm_option_override (void) - { - static const enum isa_feature fpu_bitlist[] - = { ISA_ALL_FPU_INTERNAL, isa_nobit }; -+ static const enum isa_feature fp_bitlist[] -+ = { ISA_ALL_FP, isa_nobit }; - static const enum isa_feature quirk_bitlist[] = { ISA_ALL_QUIRKS, isa_nobit}; - cl_target_option opts; - -@@ -3378,7 +3386,9 @@ arm_option_override (void) - arm_initialize_isa (isa_quirkbits, quirk_bitlist); - - isa_all_fpubits = sbitmap_alloc (isa_num_bits); -+ isa_all_fpbits = sbitmap_alloc (isa_num_bits); - arm_initialize_isa (isa_all_fpubits, fpu_bitlist); -+ arm_initialize_isa (isa_all_fpbits, fp_bitlist); - - arm_active_target.isa = sbitmap_alloc (isa_num_bits); - --- -2.17.1 - From 35937ad234cbf2d2ab296469a909c03e3fb189fd Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 3 Jun 2022 10:20:36 +0000 Subject: [PATCH 0404/2022] gcc-source=webos3 (use standard Upstream-Status in .patch files) :Release Notes: Add the version from which these changes were backported to make it easier in following changes which upgrade to newer Yocto with gcc-12.1 (through 10.2 in gatesgarth, 10.3 in hardknot 11.2 in honister, ..) :Detailed Notes: Replace 0007-arm-xnnpack-neondot-build-error-fix.patch with individual patches from upstream releases/gcc-9 branch, so that they can be separately dropped when upgrading to newer gcc which includes some of them. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-5487] CCC: tensorflow-lite=r0,v2.6.2 edgeai-vision=7-r0,v1.0.0 [WRO-4984] CCC: Various build fixes Change-Id: I0d73c239404792760d379155a130272e503fa534 --- .../gcc/gcc-source_9.3%.bbappend | 23 +- ...rm-Don-t-generate-invalid-LDRD-insns.patch | 214 +++++ ...value-after-stack_protect_test-PR96.patch} | 15 +- ....target-arm-stack-protector-1.c-for.patch} | 10 +- ...e-support-mslow-flash-data-for-armv.patch} | 8 +- ...-arm-Add-support-for-Neoverse-V1-CPU.patch | 88 ++ ...-arm-Add-support-for-Neoverse-N2-CPU.patch | 90 +++ ...-missing-part-number-for-Neoverse-V1.patch | 31 + ...-arm-xnnpack-neondot-build-error-fix.patch | 754 ------------------ ...rt-of-the-patch-for-PR-target-91816.patch} | 17 +- ...-up-neon_vector_mem_operand-PR97528.patch} | 8 +- ...rt-for-handling-Xassembler-Wa-optio.patch} | 20 +- ...f-opts_set-in-arm_configure_build_ta.patch | 160 ++++ ...rect-warning-when-mcpu-cortex-a55-is.patch | 261 ++++++ ...rch_name-is-always-set-for-the-build.patch | 38 + ...igure-globals-in-arm_configure_build.patch | 68 ++ ...mbler-architecture-directives-PR1017.patch | 467 +++++++++++ 17 files changed, 1465 insertions(+), 807 deletions(-) create mode 100644 meta-webos/recipes-devtools/gcc/gcc/0001-arm-Don-t-generate-invalid-LDRD-insns.patch rename meta-webos/recipes-devtools/gcc/gcc/{0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch => 0002-arm-Clear-canary-value-after-stack_protect_test-PR96.patch} (93%) rename meta-webos/recipes-devtools/gcc/gcc/{0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch => 0003-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch} (83%) rename meta-webos/recipes-devtools/gcc/gcc/{0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch => 0004-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch} (94%) create mode 100644 meta-webos/recipes-devtools/gcc/gcc/0005-arm-Add-support-for-Neoverse-V1-CPU.patch create mode 100644 meta-webos/recipes-devtools/gcc/gcc/0006-arm-Add-support-for-Neoverse-N2-CPU.patch create mode 100644 meta-webos/recipes-devtools/gcc/gcc/0007-arm-Add-missing-part-number-for-Neoverse-V1.patch delete mode 100644 meta-webos/recipes-devtools/gcc/gcc/0007-arm-xnnpack-neondot-build-error-fix.patch rename meta-webos/recipes-devtools/gcc/gcc/{0004-Backport-of-the-patch-for-PR-target-91816.patch => 0008-Backport-of-the-patch-for-PR-target-91816.patch} (95%) rename meta-webos/recipes-devtools/gcc/gcc/{0005-arm-Fix-up-neon_vector_mem_operand-PR97528.patch => 0009-arm-Fix-up-neon_vector_mem_operand-PR97528.patch} (91%) rename meta-webos/recipes-devtools/gcc/gcc/{0006-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch => 0010-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch} (96%) create mode 100644 meta-webos/recipes-devtools/gcc/gcc/0011-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch create mode 100644 meta-webos/recipes-devtools/gcc/gcc/0012-arm-Fix-an-incorrect-warning-when-mcpu-cortex-a55-is.patch create mode 100644 meta-webos/recipes-devtools/gcc/gcc/0013-arm-ensure-the-arch_name-is-always-set-for-the-build.patch create mode 100644 meta-webos/recipes-devtools/gcc/gcc/0014-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch create mode 100644 meta-webos/recipes-devtools/gcc/gcc/0015-arm-reorder-assembler-architecture-directives-PR1017.patch diff --git a/meta-webos/recipes-devtools/gcc/gcc-source_9.3%.bbappend b/meta-webos/recipes-devtools/gcc/gcc-source_9.3%.bbappend index 29b172738..e13bbcb19 100644 --- a/meta-webos/recipes-devtools/gcc/gcc-source_9.3%.bbappend +++ b/meta-webos/recipes-devtools/gcc/gcc-source_9.3%.bbappend @@ -5,12 +5,19 @@ EXTENDPRAUTO:append = "webos2" FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI:append = " \ - file://0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch \ - file://0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch \ - file://0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch \ - file://0004-Backport-of-the-patch-for-PR-target-91816.patch \ - file://0005-arm-Fix-up-neon_vector_mem_operand-PR97528.patch \ - file://0006-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch \ - file://0007-arm-xnnpack-neondot-build-error-fix.patch \ + file://0001-arm-Don-t-generate-invalid-LDRD-insns.patch \ + file://0002-arm-Clear-canary-value-after-stack_protect_test-PR96.patch \ + file://0003-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch \ + file://0004-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch \ + file://0005-arm-Add-support-for-Neoverse-V1-CPU.patch \ + file://0006-arm-Add-support-for-Neoverse-N2-CPU.patch \ + file://0007-arm-Add-missing-part-number-for-Neoverse-V1.patch \ + file://0008-Backport-of-the-patch-for-PR-target-91816.patch \ + file://0009-arm-Fix-up-neon_vector_mem_operand-PR97528.patch \ + file://0010-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch \ + file://0011-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch \ + file://0012-arm-Fix-an-incorrect-warning-when-mcpu-cortex-a55-is.patch \ + file://0013-arm-ensure-the-arch_name-is-always-set-for-the-build.patch \ + file://0014-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch \ + file://0015-arm-reorder-assembler-architecture-directives-PR1017.patch \ " - diff --git a/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Don-t-generate-invalid-LDRD-insns.patch b/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Don-t-generate-invalid-LDRD-insns.patch new file mode 100644 index 000000000..a7f8640fc --- /dev/null +++ b/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Don-t-generate-invalid-LDRD-insns.patch @@ -0,0 +1,214 @@ +From da4a59805e99eec6594f78a1c4b95761ccc193f5 Mon Sep 17 00:00:00 2001 +From: Alex Coplan +Date: Mon, 18 May 2020 16:29:04 +0100 +Subject: [PATCH] arm: Don't generate invalid LDRD insns + +This fixes a bug in the arm backend where GCC generates invalid LDRD +instructions. The LDRD instruction requires the first transfer register to be +even, but GCC attempts to use odd registers here. For example, with the +following C code: + + struct c { + double a; + } __attribute((aligned)) __attribute((packed)); + struct c d; + struct c f(struct c); + void e() { f(d); } + +The struct d is passed in registers r1 and r2 to the function f, and GCC +attempted to do this with a LDRD instruction when compiling with -march=armv7-a +on a soft float toolchain. + +The fix is analogous to the corresponding one for STRD in the same function: +https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=52057dc4ac5295caebf83147f688d769c93cbc8d + +gcc/: + * config/arm/arm.c (output_move_double): Fix codegen when loading into + a register pair with an odd base register. + +gcc/testsuite/: + * gcc.c-torture/compile/packed-aligned-1.c: New test. + * gcc.c-torture/execute/packed-aligned.c: New test. + +(cherry picked from commit 8b8f3117263ca79b3febadadb07732588d99d5f6) + +Upstream-Status: Backport [9.4.0 1b9f2e47a7d5d39df7b8248f2a199aa5c7a1778c == 11.1.0 8b8f3117263ca79b3febadadb07732588d99d5f6] +--- + gcc/config/arm/arm.c | 28 +++++++++++-------- + .../gcc.c-torture/compile/packed-aligned-1.c | 11 ++++++++ + .../gcc.c-torture/execute/packed-aligned.c | 28 +++++++++++++++++++ + 3 files changed, 55 insertions(+), 12 deletions(-) + create mode 100644 gcc/testsuite/gcc.c-torture/compile/packed-aligned-1.c + create mode 100644 gcc/testsuite/gcc.c-torture/execute/packed-aligned.c + +diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c +index cdfc0f9e72f..d4e2ad2a317 100644 +--- a/gcc/config/arm/arm.c ++++ b/gcc/config/arm/arm.c +@@ -18408,6 +18408,7 @@ output_move_double (rtx *operands, bool emit, int *count) + if (code0 == REG) + { + unsigned int reg0 = REGNO (operands[0]); ++ const bool can_ldrd = TARGET_LDRD && (TARGET_THUMB2 || (reg0 % 2 == 0)); + + otherops[0] = gen_rtx_REG (SImode, 1 + reg0); + +@@ -18419,7 +18420,7 @@ output_move_double (rtx *operands, bool emit, int *count) + + if (emit) + { +- if (TARGET_LDRD ++ if (can_ldrd + && !(fix_cm3_ldrd && reg0 == REGNO(XEXP (operands[1], 0)))) + output_asm_insn ("ldrd%?\t%0, [%m1]", operands); + else +@@ -18428,7 +18429,7 @@ output_move_double (rtx *operands, bool emit, int *count) + break; + + case PRE_INC: +- gcc_assert (TARGET_LDRD); ++ gcc_assert (can_ldrd); + if (emit) + output_asm_insn ("ldrd%?\t%0, [%m1, #8]!", operands); + break; +@@ -18436,7 +18437,7 @@ output_move_double (rtx *operands, bool emit, int *count) + case PRE_DEC: + if (emit) + { +- if (TARGET_LDRD) ++ if (can_ldrd) + output_asm_insn ("ldrd%?\t%0, [%m1, #-8]!", operands); + else + output_asm_insn ("ldmdb%?\t%m1!, %M0", operands); +@@ -18446,7 +18447,7 @@ output_move_double (rtx *operands, bool emit, int *count) + case POST_INC: + if (emit) + { +- if (TARGET_LDRD) ++ if (can_ldrd) + output_asm_insn ("ldrd%?\t%0, [%m1], #8", operands); + else + output_asm_insn ("ldmia%?\t%m1!, %M0", operands); +@@ -18454,7 +18455,7 @@ output_move_double (rtx *operands, bool emit, int *count) + break; + + case POST_DEC: +- gcc_assert (TARGET_LDRD); ++ gcc_assert (can_ldrd); + if (emit) + output_asm_insn ("ldrd%?\t%0, [%m1], #-8", operands); + break; +@@ -18476,6 +18477,7 @@ output_move_double (rtx *operands, bool emit, int *count) + /* Registers overlap so split out the increment. */ + if (emit) + { ++ gcc_assert (can_ldrd); + output_asm_insn ("add%?\t%1, %1, %2", otherops); + output_asm_insn ("ldrd%?\t%0, [%1] @split", otherops); + } +@@ -18487,10 +18489,11 @@ output_move_double (rtx *operands, bool emit, int *count) + /* Use a single insn if we can. + FIXME: IWMMXT allows offsets larger than ldrd can + handle, fix these up with a pair of ldr. */ +- if (TARGET_THUMB2 ++ if (can_ldrd ++ && (TARGET_THUMB2 + || !CONST_INT_P (otherops[2]) + || (INTVAL (otherops[2]) > -256 +- && INTVAL (otherops[2]) < 256)) ++ && INTVAL (otherops[2]) < 256))) + { + if (emit) + output_asm_insn ("ldrd%?\t%0, [%1, %2]!", otherops); +@@ -18513,10 +18516,11 @@ output_move_double (rtx *operands, bool emit, int *count) + /* Use a single insn if we can. + FIXME: IWMMXT allows offsets larger than ldrd can handle, + fix these up with a pair of ldr. */ +- if (TARGET_THUMB2 ++ if (can_ldrd ++ && (TARGET_THUMB2 + || !CONST_INT_P (otherops[2]) + || (INTVAL (otherops[2]) > -256 +- && INTVAL (otherops[2]) < 256)) ++ && INTVAL (otherops[2]) < 256))) + { + if (emit) + output_asm_insn ("ldrd%?\t%0, [%1], %2", otherops); +@@ -18547,7 +18551,7 @@ output_move_double (rtx *operands, bool emit, int *count) + operands[1] = otherops[0]; + if (emit) + { +- if (TARGET_LDRD) ++ if (can_ldrd) + output_asm_insn ("ldrd%?\t%0, [%1]", operands); + else + output_asm_insn ("ldmia%?\t%1, %M0", operands); +@@ -18592,7 +18596,7 @@ output_move_double (rtx *operands, bool emit, int *count) + } + otherops[0] = gen_rtx_REG(SImode, REGNO(operands[0]) + 1); + operands[1] = otherops[0]; +- if (TARGET_LDRD ++ if (can_ldrd + && (REG_P (otherops[2]) + || TARGET_THUMB2 + || (CONST_INT_P (otherops[2]) +@@ -18653,7 +18657,7 @@ output_move_double (rtx *operands, bool emit, int *count) + if (count) + *count = 2; + +- if (TARGET_LDRD) ++ if (can_ldrd) + return "ldrd%?\t%0, [%1]"; + + return "ldmia%?\t%1, %M0"; +diff --git a/gcc/testsuite/gcc.c-torture/compile/packed-aligned-1.c b/gcc/testsuite/gcc.c-torture/compile/packed-aligned-1.c +new file mode 100644 +index 00000000000..9f0923e29ee +--- /dev/null ++++ b/gcc/testsuite/gcc.c-torture/compile/packed-aligned-1.c +@@ -0,0 +1,11 @@ ++struct c { ++ double a; ++} __attribute((packed)) __attribute((aligned)); ++ ++void f(struct c *, struct c); ++ ++void g(struct c *ptr) ++{ ++ ptr++; ++ f(ptr, *ptr); ++} +diff --git a/gcc/testsuite/gcc.c-torture/execute/packed-aligned.c b/gcc/testsuite/gcc.c-torture/execute/packed-aligned.c +new file mode 100644 +index 00000000000..f768af0ab02 +--- /dev/null ++++ b/gcc/testsuite/gcc.c-torture/execute/packed-aligned.c +@@ -0,0 +1,28 @@ ++struct c { ++ double a; ++} __attribute((packed)) __attribute((aligned)); ++ ++extern void abort(void); ++ ++double g_expect = 32.25; ++ ++void f(unsigned x, struct c y) ++{ ++ if (x != 0) ++ abort(); ++ ++ if (y.a != g_expect) ++ abort(); ++} ++ ++struct c e = { 64.25 }; ++ ++int main(void) ++{ ++ struct c d = { 32.25 }; ++ f(0, d); ++ ++ g_expect = 64.25; ++ f(0, e); ++ return 0; ++} diff --git a/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch b/meta-webos/recipes-devtools/gcc/gcc/0002-arm-Clear-canary-value-after-stack_protect_test-PR96.patch similarity index 93% rename from meta-webos/recipes-devtools/gcc/gcc/0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch rename to meta-webos/recipes-devtools/gcc/gcc/0002-arm-Clear-canary-value-after-stack_protect_test-PR96.patch index 29fb2d5cc..e9ff7d72a 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0002-arm-Clear-canary-value-after-stack_protect_test-PR96.patch @@ -1,8 +1,7 @@ -From 3e40be9cc92d3fa117be7f4fab07cedeed8361a2 Mon Sep 17 00:00:00 2001 +From 1366ffdd2d6f22a09b341acaa6ac968b7c3d85c5 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Fri, 7 Aug 2020 12:17:37 +0100 -Subject: [PATCH 0434/1466] arm: Clear canary value after stack_protect_test - [PR96191] +Subject: [PATCH] arm: Clear canary value after stack_protect_test [PR96191] The stack_protect_test patterns were leaving the canary value in the temporary register, meaning that it was often still in registers on @@ -20,6 +19,7 @@ gcc/testsuite/ * gcc.target/arm/stack-protector-2.c: Likewise. (cherry picked from commit 6a3f3e08723063ea2dadb7ddf503f02972a724e2) +Upstream-Status: Backport [9.4.0 3e40be9cc92d3fa117be7f4fab07cedeed8361a2 == 11.1.0 6a3f3e08723063ea2dadb7ddf503f02972a724e2] --- gcc/config/arm/arm.md | 6 +- gcc/config/arm/thumb1.md | 8 ++- @@ -30,10 +30,10 @@ gcc/testsuite/ create mode 100644 gcc/testsuite/gcc.target/arm/stack-protector-2.c diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md -index bfb03f1b96d..aa1f23c8e9e 100644 +index 53e54874c12..9f249800471 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md -@@ -8903,6 +8903,8 @@ +@@ -8898,6 +8898,8 @@ [(set_attr "arch" "t1,32")] ) @@ -42,7 +42,7 @@ index bfb03f1b96d..aa1f23c8e9e 100644 (define_insn "arm_stack_protect_test_insn" [(set (reg:CC_Z CC_REGNUM) (compare:CC_Z (unspec:SI [(match_operand:SI 1 "memory_operand" "m,m") -@@ -8912,8 +8914,8 @@ +@@ -8907,8 +8909,8 @@ (clobber (match_operand:SI 0 "register_operand" "=&l,&r")) (clobber (match_dup 2))] "TARGET_32BIT" @@ -160,6 +160,3 @@ index 00000000000..266c36fdbc6 +/* { dg-options "-fstack-protector-all -O2 -fpic" } */ + +#include "stack-protector-1.c" --- -2.17.1 - diff --git a/meta-webos/recipes-devtools/gcc/gcc/0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch b/meta-webos/recipes-devtools/gcc/gcc/0003-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch similarity index 83% rename from meta-webos/recipes-devtools/gcc/gcc/0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch rename to meta-webos/recipes-devtools/gcc/gcc/0003-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch index bcdb175f0..d5ebaf28a 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0003-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch @@ -1,8 +1,8 @@ -From 071cfcbc065569dd2384f03634f991afefa9fbea Mon Sep 17 00:00:00 2001 +From 4c9b3409418700f41920e6b148e354b5156384f1 Mon Sep 17 00:00:00 2001 From: Christophe Lyon Date: Wed, 12 Aug 2020 09:22:38 +0000 -Subject: [PATCH 0444/1466] testsuite: Fix gcc.target/arm/stack-protector-1.c - for Cortex-M +Subject: [PATCH] testsuite: Fix gcc.target/arm/stack-protector-1.c for + Cortex-M The stack-protector-1.c test fails when compiled for Cortex-M: - for Cortex-M0/M1, str r0, [sp #-8]! is not supported @@ -22,6 +22,7 @@ value. restrictions. (cherry picked from commit 6606fdc0aad85cbca1bb58e1b2ffe05611aabd7a) +Upstream-Status: Backport [9.4.0 071cfcbc065569dd2384f03634f991afefa9fbea == 11.1.0 6606fdc0aad85cbca1bb58e1b2ffe05611aabd7a] --- gcc/testsuite/gcc.target/arm/stack-protector-1.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) @@ -48,6 +49,3 @@ index b03ea14c4e2..8d28b0a847c 100644 CHECK (r14) " ldr r1, [sp, #4]\n" CHECK (r1) --- -2.17.1 - diff --git a/meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch b/meta-webos/recipes-devtools/gcc/gcc/0004-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch similarity index 94% rename from meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch rename to meta-webos/recipes-devtools/gcc/gcc/0004-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch index 267931516..e86381fab 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0004-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch @@ -1,7 +1,7 @@ -From 967a5f8e585a5d499870903849c0fa06c326547a Mon Sep 17 00:00:00 2001 +From d6c959d5f230c7610aa2c29bb40f0a349849b77e Mon Sep 17 00:00:00 2001 From: Christophe Lyon Date: Wed, 19 Aug 2020 09:02:21 +0000 -Subject: [PATCH 0474/1466] arm: Fix -mpure-code support/-mslow-flash-data for +Subject: [PATCH] arm: Fix -mpure-code support/-mslow-flash-data for armv8-m.base [PR94538] armv8-m.base (cortex-m23) has the movt instruction, so we need to @@ -29,6 +29,7 @@ We now generate movs r0, 4 instead. * gcc.target/arm/pure-code/pr94538-2.c: New test. (cherry picked from commit 259d072067997ab8f55afcf735c91b6740fd0425) +Upstream-Status: Backport [9.4.0 967a5f8e585a5d499870903849c0fa06c326547a == 11.1.0 259d072067997ab8f55afcf735c91b6740fd0425] --- gcc/config/arm/thumb1.md | 66 +++++++++++++++---- .../gcc.target/arm/pure-code/pr94538-1.c | 13 ++++ @@ -158,6 +159,3 @@ index 00000000000..c1789da6780 +{ + v += (V){4095}; +} --- -2.17.1 - diff --git a/meta-webos/recipes-devtools/gcc/gcc/0005-arm-Add-support-for-Neoverse-V1-CPU.patch b/meta-webos/recipes-devtools/gcc/gcc/0005-arm-Add-support-for-Neoverse-V1-CPU.patch new file mode 100644 index 000000000..fd0e97b86 --- /dev/null +++ b/meta-webos/recipes-devtools/gcc/gcc/0005-arm-Add-support-for-Neoverse-V1-CPU.patch @@ -0,0 +1,88 @@ +From 448af3d898ddf4978ab8f443b9c5d8bfff9b9c44 Mon Sep 17 00:00:00 2001 +From: Alex Coplan +Date: Tue, 29 Sep 2020 11:42:24 +0100 +Subject: [PATCH] arm: Add support for Neoverse V1 CPU + +This patch backports the AArch32 support for Arm's Neoverse V1 CPU to +GCC 9. + +gcc/ChangeLog: + + * config/arm/arm-cpus.in (neoverse-v1): New. + * config/arm/arm-tables.opt: Regenerate. + * config/arm/arm-tune.md: Regenerate. + * doc/invoke.texi: Document AArch32 support for Neoverse V1. + +Upstream-Status: Backport [9.4.0 f6d4b96180adec4fc5ea34de6d268350b98bb4ab == 11.1.0 da13b7737662da11f8fefb28eaf4ed7c50c51767] +--- + gcc/config/arm/arm-cpus.in | 10 ++++++++++ + gcc/config/arm/arm-tables.opt | 3 +++ + gcc/config/arm/arm-tune.md | 4 ++-- + gcc/doc/invoke.texi | 6 +++--- + 4 files changed, 18 insertions(+), 5 deletions(-) + +diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in +index 3a55f6ac6d2..747767ab386 100644 +--- a/gcc/config/arm/arm-cpus.in ++++ b/gcc/config/arm/arm-cpus.in +@@ -1362,6 +1362,16 @@ begin cpu cortex-a76.cortex-a55 + costs cortex_a57 + end cpu cortex-a76.cortex-a55 + ++# Armv8.4 A-profile Architecture Processors ++begin cpu neoverse-v1 ++ cname neoversev1 ++ tune for cortex-a57 ++ tune flags LDSCHED ++ architecture armv8.4-a+fp16 ++ option crypto add FP_ARMv8 CRYPTO ++ costs cortex_a57 ++end cpu neoverse-v1 ++ + # V8 M-profile implementations. + begin cpu cortex-m23 + cname cortexm23 +diff --git a/gcc/config/arm/arm-tables.opt b/gcc/config/arm/arm-tables.opt +index bba54aea3d6..5384284b53a 100644 +--- a/gcc/config/arm/arm-tables.opt ++++ b/gcc/config/arm/arm-tables.opt +@@ -243,6 +243,9 @@ Enum(processor_type) String(cortex-a75.cortex-a55) Value( TARGET_CPU_cortexa75co + EnumValue + Enum(processor_type) String(cortex-a76.cortex-a55) Value( TARGET_CPU_cortexa76cortexa55) + ++EnumValue ++Enum(processor_type) String(neoverse-v1) Value( TARGET_CPU_neoversev1) ++ + EnumValue + Enum(processor_type) String(cortex-m23) Value( TARGET_CPU_cortexm23) + +diff --git a/gcc/config/arm/arm-tune.md b/gcc/config/arm/arm-tune.md +index b9dfb66ec84..1257daff074 100644 +--- a/gcc/config/arm/arm-tune.md ++++ b/gcc/config/arm/arm-tune.md +@@ -45,6 +45,6 @@ + cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35, + cortexa73cortexa53,cortexa55,cortexa75, + cortexa76,neoversen1,cortexa75cortexa55, +- cortexa76cortexa55,cortexm23,cortexm33, +- cortexr52" ++ cortexa76cortexa55,neoversev1,cortexm23, ++ cortexm33,cortexr52" + (const (symbol_ref "((enum attr_tune) arm_tune)"))) +diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi +index 5f04a7d2bbf..6d21f16e005 100644 +--- a/gcc/doc/invoke.texi ++++ b/gcc/doc/invoke.texi +@@ -17583,9 +17583,9 @@ Permissible names are: @samp{arm7tdmi}, @samp{arm7tdmi-s}, @samp{arm710t}, + @samp{cortex-m4}, @samp{cortex-m7}, @samp{cortex-m23}, @samp{cortex-m33}, + @samp{cortex-m1.small-multiply}, @samp{cortex-m0.small-multiply}, + @samp{cortex-m0plus.small-multiply}, @samp{exynos-m1}, @samp{marvell-pj4}, +-@samp{neoverse-n1}, @samp{xscale}, @samp{iwmmxt}, @samp{iwmmxt2}, +-@samp{ep9312}, @samp{fa526}, @samp{fa626}, @samp{fa606te}, @samp{fa626te}, +-@samp{fmp626}, @samp{fa726te}, @samp{xgene1}. ++@samp{neoverse-n1}, @samp{neoverse-v1}, @samp{xscale}, @samp{iwmmxt}, ++@samp{iwmmxt2}, @samp{ep9312}, @samp{fa526}, @samp{fa626}, @samp{fa606te}, ++@samp{fa626te}, @samp{fmp626}, @samp{fa726te}, @samp{xgene1}. + + Additionally, this option can specify that GCC should tune the performance + of the code for a big.LITTLE system. Permissible names are: diff --git a/meta-webos/recipes-devtools/gcc/gcc/0006-arm-Add-support-for-Neoverse-N2-CPU.patch b/meta-webos/recipes-devtools/gcc/gcc/0006-arm-Add-support-for-Neoverse-N2-CPU.patch new file mode 100644 index 000000000..9731b7b5d --- /dev/null +++ b/meta-webos/recipes-devtools/gcc/gcc/0006-arm-Add-support-for-Neoverse-N2-CPU.patch @@ -0,0 +1,90 @@ +From 8aa74c785c72ef0db86f7353d92eda36db81f853 Mon Sep 17 00:00:00 2001 +From: Alex Coplan +Date: Fri, 2 Oct 2020 16:09:06 +0100 +Subject: [PATCH] arm: Add support for Neoverse N2 CPU + +This patch backports the AArch32 support for Arm's Neoverse N2 CPU to +GCC 9. + +gcc/ChangeLog: + + * config/arm/arm-cpus.in (neoverse-n2): New. + * config/arm/arm-tables.opt: Regenerate. + * config/arm/arm-tune.md: Regenerate. + * doc/invoke.texi: Document support for Neoverse N2. + +Upstream-Status: Backport [9.4.0 54e50dc2d7633d1d5930f472aaeb4e52ba403ade == 11.1.0 637ad78cdf4026234308973bb87839f10f3d39cf] +--- + gcc/config/arm/arm-cpus.in | 12 ++++++++++++ + gcc/config/arm/arm-tables.opt | 3 +++ + gcc/config/arm/arm-tune.md | 4 ++-- + gcc/doc/invoke.texi | 6 +++--- + 4 files changed, 20 insertions(+), 5 deletions(-) + +diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in +index 747767ab386..3c375b9a7b9 100644 +--- a/gcc/config/arm/arm-cpus.in ++++ b/gcc/config/arm/arm-cpus.in +@@ -1372,6 +1372,18 @@ begin cpu neoverse-v1 + costs cortex_a57 + end cpu neoverse-v1 + ++# Armv8.5 A-profile Architecture Processors ++begin cpu neoverse-n2 ++ cname neoversen2 ++ tune for cortex-a57 ++ tune flags LDSCHED ++ architecture armv8.5-a+fp16 ++ option crypto add FP_ARMv8 CRYPTO ++ costs cortex_a57 ++ vendor 41 ++ part 0xd49 ++end cpu neoverse-n2 ++ + # V8 M-profile implementations. + begin cpu cortex-m23 + cname cortexm23 +diff --git a/gcc/config/arm/arm-tables.opt b/gcc/config/arm/arm-tables.opt +index 5384284b53a..5befadddf9e 100644 +--- a/gcc/config/arm/arm-tables.opt ++++ b/gcc/config/arm/arm-tables.opt +@@ -246,6 +246,9 @@ Enum(processor_type) String(cortex-a76.cortex-a55) Value( TARGET_CPU_cortexa76co + EnumValue + Enum(processor_type) String(neoverse-v1) Value( TARGET_CPU_neoversev1) + ++EnumValue ++Enum(processor_type) String(neoverse-n2) Value( TARGET_CPU_neoversen2) ++ + EnumValue + Enum(processor_type) String(cortex-m23) Value( TARGET_CPU_cortexm23) + +diff --git a/gcc/config/arm/arm-tune.md b/gcc/config/arm/arm-tune.md +index 1257daff074..102765e6568 100644 +--- a/gcc/config/arm/arm-tune.md ++++ b/gcc/config/arm/arm-tune.md +@@ -45,6 +45,6 @@ + cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35, + cortexa73cortexa53,cortexa55,cortexa75, + cortexa76,neoversen1,cortexa75cortexa55, +- cortexa76cortexa55,neoversev1,cortexm23, +- cortexm33,cortexr52" ++ cortexa76cortexa55,neoversev1,neoversen2, ++ cortexm23,cortexm33,cortexr52" + (const (symbol_ref "((enum attr_tune) arm_tune)"))) +diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi +index 6d21f16e005..6451ce0c767 100644 +--- a/gcc/doc/invoke.texi ++++ b/gcc/doc/invoke.texi +@@ -17583,9 +17583,9 @@ Permissible names are: @samp{arm7tdmi}, @samp{arm7tdmi-s}, @samp{arm710t}, + @samp{cortex-m4}, @samp{cortex-m7}, @samp{cortex-m23}, @samp{cortex-m33}, + @samp{cortex-m1.small-multiply}, @samp{cortex-m0.small-multiply}, + @samp{cortex-m0plus.small-multiply}, @samp{exynos-m1}, @samp{marvell-pj4}, +-@samp{neoverse-n1}, @samp{neoverse-v1}, @samp{xscale}, @samp{iwmmxt}, +-@samp{iwmmxt2}, @samp{ep9312}, @samp{fa526}, @samp{fa626}, @samp{fa606te}, +-@samp{fa626te}, @samp{fmp626}, @samp{fa726te}, @samp{xgene1}. ++@samp{neoverse-n1}, @samp{neoverse-n2}, @samp{neoverse-v1}, @samp{xscale}, ++@samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}, @samp{fa526}, @samp{fa626}, ++@samp{fa606te}, @samp{fa626te}, @samp{fmp626}, @samp{fa726te}, @samp{xgene1}. + + Additionally, this option can specify that GCC should tune the performance + of the code for a big.LITTLE system. Permissible names are: diff --git a/meta-webos/recipes-devtools/gcc/gcc/0007-arm-Add-missing-part-number-for-Neoverse-V1.patch b/meta-webos/recipes-devtools/gcc/gcc/0007-arm-Add-missing-part-number-for-Neoverse-V1.patch new file mode 100644 index 000000000..a0839290e --- /dev/null +++ b/meta-webos/recipes-devtools/gcc/gcc/0007-arm-Add-missing-part-number-for-Neoverse-V1.patch @@ -0,0 +1,31 @@ +From a7a6dad197b0b809fbc6e89bf9cf7b76eaea84bd Mon Sep 17 00:00:00 2001 +From: Alex Coplan +Date: Mon, 5 Oct 2020 15:49:50 +0100 +Subject: [PATCH] arm: Add missing part number for Neoverse V1 + +This patch adds vendor and part numbers which were missing from the +initial entry for Neoverse V1 in AArch32 GCC. + +gcc/ChangeLog: + + * config/arm/arm-cpus.in (neoverse-v1): Add missing vendor and + part numbers. + +Upstream-Status: Backport [9.4.0 6725de4e8376afefa7ee501ba7b31d74cbf4303d] +--- + gcc/config/arm/arm-cpus.in | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in +index 3c375b9a7b9..f87044fd25c 100644 +--- a/gcc/config/arm/arm-cpus.in ++++ b/gcc/config/arm/arm-cpus.in +@@ -1370,6 +1370,8 @@ begin cpu neoverse-v1 + architecture armv8.4-a+fp16 + option crypto add FP_ARMv8 CRYPTO + costs cortex_a57 ++ vendor 41 ++ part 0xd40 + end cpu neoverse-v1 + + # Armv8.5 A-profile Architecture Processors diff --git a/meta-webos/recipes-devtools/gcc/gcc/0007-arm-xnnpack-neondot-build-error-fix.patch b/meta-webos/recipes-devtools/gcc/gcc/0007-arm-xnnpack-neondot-build-error-fix.patch deleted file mode 100644 index 5a0e2b184..000000000 --- a/meta-webos/recipes-devtools/gcc/gcc/0007-arm-xnnpack-neondot-build-error-fix.patch +++ /dev/null @@ -1,754 +0,0 @@ -From 4e30d76f885150e3501a9a2858d12353871cfd36 Mon Sep 17 00:00:00 2001 -From: "kijoong.lee" -Date: Tue, 16 Nov 2021 16:24:25 +0000 -Subject: [PATCH] arm: xnnpack neondot build error fix - ---- - gcc/config/arm/arm-c.c | 4 +- - gcc/config/arm/arm-cpus.in | 51 +++++-- - gcc/config/arm/arm-protos.h | 3 +- - gcc/config/arm/arm.c | 270 ++++++++++++++++++------------------ - 4 files changed, 178 insertions(+), 150 deletions(-) - -diff --git a/gcc/config/arm/arm-c.c b/gcc/config/arm/arm-c.c -index 6e256ee0a..8cb08646c 100644 ---- a/gcc/config/arm/arm-c.c -+++ b/gcc/config/arm/arm-c.c -@@ -266,8 +266,8 @@ arm_pragma_target_parse (tree args, tree pop_target) - target_option_current_node, but not handle_pragma_target. */ - target_option_current_node = cur_tree; - arm_configure_build_target (&arm_active_target, -- TREE_TARGET_OPTION (cur_tree), -- &global_options_set, false); -+ TREE_TARGET_OPTION (cur_tree), false); -+ arm_option_reconfigure_globals (); - } - - /* Update macros if target_node changes. The global state will be restored -diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in -index 3a55f6ac6..de2caec54 100644 ---- a/gcc/config/arm/arm-cpus.in -+++ b/gcc/config/arm/arm-cpus.in -@@ -180,6 +180,9 @@ define feature quirk_armv6kz - # Cortex-M3 LDRD quirk. - define feature quirk_cm3_ldrd - -+# Don't use .cpu assembly directive -+define feature quirk_no_asmcpu -+ - # (Very) slow multiply operations. Should probably be a tuning bit. - define feature smallmul - -@@ -213,15 +216,18 @@ define fgroup ALL_CRYPTO crypto - # strip off 32 D-registers, but does not remove support for - # double-precision FP. - define fgroup ALL_SIMD_INTERNAL fp_d32 neon ALL_CRYPTO --define fgroup ALL_SIMD ALL_SIMD_INTERNAL dotprod fp16fml -+define fgroup ALL_SIMD_EXTERNAL dotprod fp16fml -+define fgroup ALL_SIMD ALL_SIMD_INTERNAL ALL_SIMD_EXTERNAL - - # List of all FPU bits to strip out if -mfpu is used to override the - # default. fp16 is deliberately missing from this list. - define fgroup ALL_FPU_INTERNAL vfpv2 vfpv3 vfpv4 fpv5 fp16conv fp_dbl ALL_SIMD_INTERNAL -- - # Similarly, but including fp16 and other extensions that aren't part of - # -mfpu support. --define fgroup ALL_FP fp16 ALL_FPU_INTERNAL -+define fgroup ALL_FPU_EXTERNAL fp16 -+ -+# Everything related to the FPU extensions (FP or SIMD). -+define fgroup ALL_FP ALL_FPU_EXTERNAL ALL_FPU_INTERNAL ALL_SIMD - - define fgroup ARMv4 armv4 notm - define fgroup ARMv4t ARMv4 thumb -@@ -274,7 +280,7 @@ define fgroup DOTPROD NEON dotprod - # architectures. - # xscale isn't really a 'quirk', but it isn't an architecture either and we - # need to ignore it for matching purposes. --define fgroup ALL_QUIRKS quirk_no_volatile_ce quirk_armv6kz quirk_cm3_ldrd xscale -+define fgroup ALL_QUIRKS quirk_no_volatile_ce quirk_armv6kz quirk_cm3_ldrd xscale quirk_no_asmcpu - - # Architecture entries - # format: -@@ -976,6 +982,7 @@ begin cpu generic-armv7-a - cname genericv7a - tune flags LDSCHED - architecture armv7-a+fp -+ isa quirk_no_asmcpu - option mp add mp - option sec add sec - option vfpv3-d16 add VFPv3 FP_DBL -@@ -1301,7 +1308,7 @@ begin cpu cortex-a55 - cname cortexa55 - tune for cortex-a53 - tune flags LDSCHED -- architecture armv8.2-a+fp16+dotprod+simd -+ architecture armv8.2-a+fp16+dotprod - option crypto add FP_ARMv8 CRYPTO - option nofp remove ALL_FP - costs cortex_a53 -@@ -1313,7 +1320,7 @@ begin cpu cortex-a75 - cname cortexa75 - tune for cortex-a57 - tune flags LDSCHED -- architecture armv8.2-a+fp16+dotprod+simd -+ architecture armv8.2-a+fp16+dotprod - option crypto add FP_ARMv8 CRYPTO - costs cortex_a73 - vendor 41 -@@ -1324,7 +1331,7 @@ begin cpu cortex-a76 - cname cortexa76 - tune for cortex-a57 - tune flags LDSCHED -- architecture armv8.2-a+fp16+dotprod+simd -+ architecture armv8.2-a+fp16+dotprod - option crypto add FP_ARMv8 CRYPTO - costs cortex_a57 - vendor 41 -@@ -1336,7 +1343,7 @@ begin cpu neoverse-n1 - alias !ares - tune for cortex-a57 - tune flags LDSCHED -- architecture armv8.2-a+fp16+dotprod+simd -+ architecture armv8.2-a+fp16+dotprod - option crypto add FP_ARMv8 CRYPTO - costs cortex_a57 - vendor 41 -@@ -1348,7 +1355,7 @@ begin cpu cortex-a75.cortex-a55 - cname cortexa75cortexa55 - tune for cortex-a53 - tune flags LDSCHED -- architecture armv8.2-a+fp16+dotprod+simd -+ architecture armv8.2-a+fp16+dotprod - option crypto add FP_ARMv8 CRYPTO - costs cortex_a73 - end cpu cortex-a75.cortex-a55 -@@ -1357,11 +1364,35 @@ begin cpu cortex-a76.cortex-a55 - cname cortexa76cortexa55 - tune for cortex-a53 - tune flags LDSCHED -- architecture armv8.2-a+fp16+dotprod+simd -+ architecture armv8.2-a+fp16+dotprod - option crypto add FP_ARMv8 CRYPTO - costs cortex_a57 - end cpu cortex-a76.cortex-a55 - -+# Armv8.4 A-profile Architecture Processors -+begin cpu neoverse-v1 -+ cname neoversev1 -+ tune for cortex-a57 -+ tune flags LDSCHED -+ architecture armv8.4-a+fp16 -+ option crypto add FP_ARMv8 CRYPTO -+ costs cortex_a57 -+ vendor 41 -+ part 0xd40 -+end cpu neoverse-v1 -+ -+# Armv8.5 A-profile Architecture Processors -+begin cpu neoverse-n2 -+ cname neoversen2 -+ tune for cortex-a57 -+ tune flags LDSCHED -+ architecture armv8.5-a+fp16 -+ option crypto add FP_ARMv8 CRYPTO -+ costs cortex_a57 -+ vendor 41 -+ part 0xd49 -+end cpu neoverse-n2 -+ - # V8 M-profile implementations. - begin cpu cortex-m23 - cname cortexm23 -diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h -index 3e8bba5ca..cd16c3c35 100644 ---- a/gcc/config/arm/arm-protos.h -+++ b/gcc/config/arm/arm-protos.h -@@ -229,8 +229,7 @@ extern bool arm_change_mode_p (tree); - extern tree arm_valid_target_attribute_tree (tree, struct gcc_options *, - struct gcc_options *); - extern void arm_configure_build_target (struct arm_build_target *, -- struct cl_target_option *, -- struct gcc_options *, bool); -+ struct cl_target_option *, bool); - extern void arm_option_reconfigure_globals (void); - extern void arm_options_perform_arch_sanity_checks (void); - extern void arm_pr_long_calls (struct cpp_reader *); -diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c -index cf8774a78..58afc4a26 100644 ---- a/gcc/config/arm/arm.c -+++ b/gcc/config/arm/arm.c -@@ -78,10 +78,6 @@ - typedef struct minipool_node Mnode; - typedef struct minipool_fixup Mfix; - --/* The last .arch and .fpu assembly strings that we printed. */ --static std::string arm_last_printed_arch_string; --static std::string arm_last_printed_fpu_string; -- - void (*arm_lang_output_object_attributes_hook)(void); - - struct four_ints -@@ -325,6 +321,7 @@ static unsigned int arm_hard_regno_nregs (unsigned int, machine_mode); - static bool arm_hard_regno_mode_ok (unsigned int, machine_mode); - static bool arm_modes_tieable_p (machine_mode, machine_mode); - static HOST_WIDE_INT arm_constant_alignment (const_tree, HOST_WIDE_INT); -+static const char *arm_identify_fpu_from_isa (sbitmap); - - /* Table of machine attributes. */ - static const struct attribute_spec arm_attribute_table[] = -@@ -2985,7 +2982,7 @@ arm_override_options_after_change (void) - { - arm_configure_build_target (&arm_active_target, - TREE_TARGET_OPTION (target_option_default_node), -- &global_options_set, false); -+ false); - - arm_override_options_after_change_1 (&global_options); - } -@@ -3006,8 +3003,8 @@ arm_option_restore (struct gcc_options *opts, struct cl_target_option *ptr) - opts->x_arm_arch_string = ptr->x_arm_arch_string; - opts->x_arm_cpu_string = ptr->x_arm_cpu_string; - opts->x_arm_tune_string = ptr->x_arm_tune_string; -- arm_configure_build_target (&arm_active_target, ptr, &global_options_set, -- false); -+ arm_configure_build_target (&arm_active_target, ptr, false); -+ arm_option_reconfigure_globals (); - } - - /* Reset options between modes that the user has specified. */ -@@ -3115,7 +3112,8 @@ arm_option_override_internal (struct gcc_options *opts, - #endif - } - --static sbitmap isa_all_fpubits; -+static sbitmap isa_all_fpubits_internal; -+static sbitmap isa_all_fpbits; - static sbitmap isa_quirkbits; - - /* Configure a build target TARGET from the user-specified options OPTS and -@@ -3124,7 +3122,6 @@ static sbitmap isa_quirkbits; - void - arm_configure_build_target (struct arm_build_target *target, - struct cl_target_option *opts, -- struct gcc_options *opts_set, - bool warn_compatible) - { - const cpu_option *arm_selected_tune = NULL; -@@ -3139,7 +3136,7 @@ arm_configure_build_target (struct arm_build_target *target, - target->core_name = NULL; - target->arch_name = NULL; - -- if (opts_set->x_arm_arch_string) -+ if (opts->x_arm_arch_string) - { - arm_selected_arch = arm_parse_arch_option_name (all_architectures, - "-march", -@@ -3147,7 +3144,7 @@ arm_configure_build_target (struct arm_build_target *target, - arch_opts = strchr (opts->x_arm_arch_string, '+'); - } - -- if (opts_set->x_arm_cpu_string) -+ if (opts->x_arm_cpu_string) - { - arm_selected_cpu = arm_parse_cpu_option_name (all_cores, "-mcpu", - opts->x_arm_cpu_string); -@@ -3157,7 +3154,7 @@ arm_configure_build_target (struct arm_build_target *target, - options for tuning. */ - } - -- if (opts_set->x_arm_tune_string) -+ if (opts->x_arm_tune_string) - { - arm_selected_tune = arm_parse_cpu_option_name (all_cores, "-mtune", - opts->x_arm_tune_string); -@@ -3182,7 +3179,12 @@ arm_configure_build_target (struct arm_build_target *target, - /* Ignore any bits that are quirk bits. */ - bitmap_and_compl (isa_delta, isa_delta, isa_quirkbits); - /* Ignore (for now) any bits that might be set by -mfpu. */ -- bitmap_and_compl (isa_delta, isa_delta, isa_all_fpubits); -+ bitmap_and_compl (isa_delta, isa_delta, isa_all_fpubits_internal); -+ -+ /* And if the target ISA lacks floating point, ignore any -+ extensions that depend on that. */ -+ if (!bitmap_bit_p (target->isa, isa_bit_vfpv2)) -+ bitmap_and_compl (isa_delta, isa_delta, isa_all_fpbits); - - if (!bitmap_empty_p (isa_delta)) - { -@@ -3341,10 +3343,15 @@ arm_configure_build_target (struct arm_build_target *target, - auto_sbitmap fpu_bits (isa_num_bits); - - arm_initialize_isa (fpu_bits, arm_selected_fpu->isa_bits); -- bitmap_and_compl (target->isa, target->isa, isa_all_fpubits); -+ bitmap_and_compl (target->isa, target->isa, isa_all_fpubits_internal); - bitmap_ior (target->isa, target->isa, fpu_bits); - } - -+ /* If we have the soft-float ABI, clear any feature bits relating to use of -+ floating-point operations. They'll just confuse things later on. */ -+ if (arm_float_abi == ARM_FLOAT_ABI_SOFT) -+ bitmap_and_compl (target->isa, target->isa, isa_all_fpbits); -+ - if (!arm_selected_tune) - arm_selected_tune = arm_selected_cpu; - else /* Validate the features passed to -mtune. */ -@@ -3353,6 +3360,8 @@ arm_configure_build_target (struct arm_build_target *target, - const cpu_tune *tune_data = &all_tunes[arm_selected_tune - all_cores]; - - /* Finish initializing the target structure. */ -+ if (!target->arch_name) -+ target->arch_name = arm_selected_arch->common.name; - target->arch_pp_name = arm_selected_arch->arch; - target->base_arch = arm_selected_arch->base_arch; - target->profile = arm_selected_arch->profile; -@@ -3360,23 +3369,26 @@ arm_configure_build_target (struct arm_build_target *target, - target->tune_flags = tune_data->tune_flags; - target->tune = tune_data->tune; - target->tune_core = tune_data->scheduler; -- arm_option_reconfigure_globals (); - } - - /* Fix up any incompatible options that the user has specified. */ - static void - arm_option_override (void) - { -- static const enum isa_feature fpu_bitlist[] -+ static const enum isa_feature fpu_bitlist_internal[] - = { ISA_ALL_FPU_INTERNAL, isa_nobit }; -+ static const enum isa_feature fp_bitlist[] -+ = { ISA_ALL_FP, isa_nobit }; - static const enum isa_feature quirk_bitlist[] = { ISA_ALL_QUIRKS, isa_nobit}; - cl_target_option opts; - - isa_quirkbits = sbitmap_alloc (isa_num_bits); - arm_initialize_isa (isa_quirkbits, quirk_bitlist); - -- isa_all_fpubits = sbitmap_alloc (isa_num_bits); -- arm_initialize_isa (isa_all_fpubits, fpu_bitlist); -+ isa_all_fpubits_internal = sbitmap_alloc (isa_num_bits); -+ isa_all_fpbits = sbitmap_alloc (isa_num_bits); -+ arm_initialize_isa (isa_all_fpubits_internal, fpu_bitlist_internal); -+ arm_initialize_isa (isa_all_fpbits, fp_bitlist); - - arm_active_target.isa = sbitmap_alloc (isa_num_bits); - -@@ -3392,8 +3404,7 @@ arm_option_override (void) - } - - cl_target_option_save (&opts, &global_options); -- arm_configure_build_target (&arm_active_target, &opts, &global_options_set, -- true); -+ arm_configure_build_target (&arm_active_target, &opts, true); - - #ifdef SUBTARGET_OVERRIDE_OPTIONS - SUBTARGET_OVERRIDE_OPTIONS; -@@ -18410,6 +18421,7 @@ output_move_double (rtx *operands, bool emit, int *count) - if (code0 == REG) - { - unsigned int reg0 = REGNO (operands[0]); -+ const bool can_ldrd = TARGET_LDRD && (TARGET_THUMB2 || (reg0 % 2 == 0)); - - otherops[0] = gen_rtx_REG (SImode, 1 + reg0); - -@@ -18421,7 +18433,7 @@ output_move_double (rtx *operands, bool emit, int *count) - - if (emit) - { -- if (TARGET_LDRD -+ if (can_ldrd - && !(fix_cm3_ldrd && reg0 == REGNO(XEXP (operands[1], 0)))) - output_asm_insn ("ldrd%?\t%0, [%m1]", operands); - else -@@ -18430,7 +18442,7 @@ output_move_double (rtx *operands, bool emit, int *count) - break; - - case PRE_INC: -- gcc_assert (TARGET_LDRD); -+ gcc_assert (can_ldrd); - if (emit) - output_asm_insn ("ldrd%?\t%0, [%m1, #8]!", operands); - break; -@@ -18438,7 +18450,7 @@ output_move_double (rtx *operands, bool emit, int *count) - case PRE_DEC: - if (emit) - { -- if (TARGET_LDRD) -+ if (can_ldrd) - output_asm_insn ("ldrd%?\t%0, [%m1, #-8]!", operands); - else - output_asm_insn ("ldmdb%?\t%m1!, %M0", operands); -@@ -18448,7 +18460,7 @@ output_move_double (rtx *operands, bool emit, int *count) - case POST_INC: - if (emit) - { -- if (TARGET_LDRD) -+ if (can_ldrd) - output_asm_insn ("ldrd%?\t%0, [%m1], #8", operands); - else - output_asm_insn ("ldmia%?\t%m1!, %M0", operands); -@@ -18456,7 +18468,7 @@ output_move_double (rtx *operands, bool emit, int *count) - break; - - case POST_DEC: -- gcc_assert (TARGET_LDRD); -+ gcc_assert (can_ldrd); - if (emit) - output_asm_insn ("ldrd%?\t%0, [%m1], #-8", operands); - break; -@@ -18478,6 +18490,7 @@ output_move_double (rtx *operands, bool emit, int *count) - /* Registers overlap so split out the increment. */ - if (emit) - { -+ gcc_assert (can_ldrd); - output_asm_insn ("add%?\t%1, %1, %2", otherops); - output_asm_insn ("ldrd%?\t%0, [%1] @split", otherops); - } -@@ -18489,10 +18502,11 @@ output_move_double (rtx *operands, bool emit, int *count) - /* Use a single insn if we can. - FIXME: IWMMXT allows offsets larger than ldrd can - handle, fix these up with a pair of ldr. */ -- if (TARGET_THUMB2 -+ if (can_ldrd -+ && (TARGET_THUMB2 - || !CONST_INT_P (otherops[2]) - || (INTVAL (otherops[2]) > -256 -- && INTVAL (otherops[2]) < 256)) -+ && INTVAL (otherops[2]) < 256))) - { - if (emit) - output_asm_insn ("ldrd%?\t%0, [%1, %2]!", otherops); -@@ -18515,10 +18529,11 @@ output_move_double (rtx *operands, bool emit, int *count) - /* Use a single insn if we can. - FIXME: IWMMXT allows offsets larger than ldrd can handle, - fix these up with a pair of ldr. */ -- if (TARGET_THUMB2 -+ if (can_ldrd -+ && (TARGET_THUMB2 - || !CONST_INT_P (otherops[2]) - || (INTVAL (otherops[2]) > -256 -- && INTVAL (otherops[2]) < 256)) -+ && INTVAL (otherops[2]) < 256))) - { - if (emit) - output_asm_insn ("ldrd%?\t%0, [%1], %2", otherops); -@@ -18549,7 +18564,7 @@ output_move_double (rtx *operands, bool emit, int *count) - operands[1] = otherops[0]; - if (emit) - { -- if (TARGET_LDRD) -+ if (can_ldrd) - output_asm_insn ("ldrd%?\t%0, [%1]", operands); - else - output_asm_insn ("ldmia%?\t%1, %M0", operands); -@@ -18594,7 +18609,7 @@ output_move_double (rtx *operands, bool emit, int *count) - } - otherops[0] = gen_rtx_REG(SImode, REGNO(operands[0]) + 1); - operands[1] = otherops[0]; -- if (TARGET_LDRD -+ if (can_ldrd - && (REG_P (otherops[2]) - || TARGET_THUMB2 - || (CONST_INT_P (otherops[2]) -@@ -18655,7 +18670,7 @@ output_move_double (rtx *operands, bool emit, int *count) - if (count) - *count = 2; - -- if (TARGET_LDRD) -+ if (can_ldrd) - return "ldrd%?\t%0, [%1]"; - - return "ldmia%?\t%1, %M0"; -@@ -26650,20 +26665,65 @@ arm_print_tune_info (void) - (int) current_tune->sched_autopref); - } - -+/* The last set of target options used to emit .arch directives, etc. This -+ could be a function-local static if it were not required to expose it as a -+ root to the garbage collector. */ -+static GTY(()) cl_target_option *last_asm_targ_options = NULL; -+ - /* Print .arch and .arch_extension directives corresponding to the - current architecture configuration. */ - static void --arm_print_asm_arch_directives () -+arm_print_asm_arch_directives (FILE *stream, cl_target_option *targ_options) - { -+ arm_build_target build_target; -+ /* If the target options haven't changed since the last time we were called -+ there is nothing to do. This should be sufficient to suppress the -+ majority of redundant work. */ -+ if (last_asm_targ_options == targ_options) -+ return; -+ -+ last_asm_targ_options = targ_options; -+ -+ build_target.isa = sbitmap_alloc (isa_num_bits); -+ arm_configure_build_target (&build_target, targ_options, false); -+ -+ if (build_target.core_name -+ && !bitmap_bit_p (build_target.isa, isa_bit_quirk_no_asmcpu)) -+ { -+ const char* truncated_name -+ = arm_rewrite_selected_cpu (build_target.core_name); -+ asm_fprintf (stream, "\t.cpu %s\n", truncated_name); -+ } -+ - const arch_option *arch - = arm_parse_arch_option_name (all_architectures, "-march", -- arm_active_target.arch_name); -+ build_target.arch_name); - auto_sbitmap opt_bits (isa_num_bits); - - gcc_assert (arch); - -- asm_fprintf (asm_out_file, "\t.arch %s\n", arm_active_target.arch_name); -- arm_last_printed_arch_string = arm_active_target.arch_name; -+ if (strcmp (build_target.arch_name, "armv7ve") == 0) -+ { -+ /* Keep backward compatability for assemblers which don't support -+ armv7ve. Fortunately, none of the following extensions are reset -+ by a .fpu directive. */ -+ asm_fprintf (stream, "\t.arch armv7-a\n"); -+ asm_fprintf (stream, "\t.arch_extension virt\n"); -+ asm_fprintf (stream, "\t.arch_extension idiv\n"); -+ asm_fprintf (stream, "\t.arch_extension sec\n"); -+ asm_fprintf (stream, "\t.arch_extension mp\n"); -+ } -+ else -+ asm_fprintf (stream, "\t.arch %s\n", build_target.arch_name); -+ -+ /* The .fpu directive will reset any architecture extensions from the -+ assembler that relate to the fp/vector extensions. So put this out before -+ any .arch_extension directives. */ -+ const char *fpu_name = (TARGET_SOFT_FLOAT -+ ? "softvfp" -+ : arm_identify_fpu_from_isa (build_target.isa)); -+ asm_fprintf (stream, "\t.fpu %s\n", fpu_name); -+ - if (!arch->common.extensions) - return; - -@@ -26675,13 +26735,12 @@ arm_print_asm_arch_directives () - { - arm_initialize_isa (opt_bits, opt->isa_bits); - -- /* If every feature bit of this option is set in the target -- ISA specification, print out the option name. However, -- don't print anything if all the bits are part of the -- FPU specification. */ -- if (bitmap_subset_p (opt_bits, arm_active_target.isa) -- && !bitmap_subset_p (opt_bits, isa_all_fpubits)) -- asm_fprintf (asm_out_file, "\t.arch_extension %s\n", opt->name); -+ /* If every feature bit of this option is set in the target ISA -+ specification, print out the option name. However, don't print -+ anything if all the bits are part of the FPU specification. */ -+ if (bitmap_subset_p (opt_bits, build_target.isa) -+ && !bitmap_subset_p (opt_bits, isa_all_fpubits_internal)) -+ asm_fprintf (stream, "\t.arch_extension %s\n", opt->name); - } - } - } -@@ -26691,42 +26750,23 @@ arm_file_start (void) - { - int val; - -+ arm_print_asm_arch_directives -+ (asm_out_file, TREE_TARGET_OPTION (target_option_default_node)); -+ - if (TARGET_BPABI) - { -- /* We don't have a specified CPU. Use the architecture to -- generate the tags. -- -- Note: it might be better to do this unconditionally, then the -- assembler would not need to know about all new CPU names as -- they are added. */ -- if (!arm_active_target.core_name) -- { -- /* armv7ve doesn't support any extensions. */ -- if (strcmp (arm_active_target.arch_name, "armv7ve") == 0) -- { -- /* Keep backward compatability for assemblers -- which don't support armv7ve. */ -- asm_fprintf (asm_out_file, "\t.arch armv7-a\n"); -- asm_fprintf (asm_out_file, "\t.arch_extension virt\n"); -- asm_fprintf (asm_out_file, "\t.arch_extension idiv\n"); -- asm_fprintf (asm_out_file, "\t.arch_extension sec\n"); -- asm_fprintf (asm_out_file, "\t.arch_extension mp\n"); -- arm_last_printed_arch_string = "armv7ve"; -- } -- else -- arm_print_asm_arch_directives (); -- } -- else if (strncmp (arm_active_target.core_name, "generic", 7) == 0) -- { -- asm_fprintf (asm_out_file, "\t.arch %s\n", -- arm_active_target.core_name + 8); -- arm_last_printed_arch_string = arm_active_target.core_name + 8; -- } -- else -+ /* If we have a named cpu, but we the assembler does not support that -+ name via .cpu, put out a cpu name attribute; but don't do this if the -+ name starts with the fictitious prefix, 'generic'. */ -+ if (arm_active_target.core_name -+ && bitmap_bit_p (arm_active_target.isa, isa_bit_quirk_no_asmcpu) -+ && strncmp (arm_active_target.core_name, "generic", 7) != 0) - { - const char* truncated_name - = arm_rewrite_selected_cpu (arm_active_target.core_name); -- asm_fprintf (asm_out_file, "\t.cpu %s\n", truncated_name); -+ if (bitmap_bit_p (arm_active_target.isa, isa_bit_quirk_no_asmcpu)) -+ asm_fprintf (asm_out_file, "\t.eabi_attribute 5, \"%s\"\n", -+ truncated_name); - } - - if (print_tune_info) -@@ -26794,6 +26834,13 @@ arm_file_end (void) - { - int regno; - -+ /* Just in case the last function output in the assembler had non-default -+ architecture directives, we force the assembler state back to the default -+ set, so that any 'calculated' build attributes are based on the default -+ options rather than the special options for that function. */ -+ arm_print_asm_arch_directives -+ (asm_out_file, TREE_TARGET_OPTION (target_option_default_node)); -+ - if (NEED_INDICATE_EXEC_STACK) - /* Add .note.GNU-stack. */ - file_end_indicate_exec_stack (); -@@ -30934,10 +30981,8 @@ arm_can_inline_p (tree caller, tree callee) - caller_target.isa = sbitmap_alloc (isa_num_bits); - callee_target.isa = sbitmap_alloc (isa_num_bits); - -- arm_configure_build_target (&caller_target, caller_opts, &global_options_set, -- false); -- arm_configure_build_target (&callee_target, callee_opts, &global_options_set, -- false); -+ arm_configure_build_target (&caller_target, caller_opts, false); -+ arm_configure_build_target (&callee_target, callee_opts, false); - if (!bitmap_subset_p (callee_target.isa, caller_target.isa)) - can_inline = false; - -@@ -31069,7 +31114,7 @@ arm_valid_target_attribute_tree (tree args, struct gcc_options *opts, - return NULL_TREE; - - cl_target_option_save (&cl_opts, opts); -- arm_configure_build_target (&arm_active_target, &cl_opts, opts_set, false); -+ arm_configure_build_target (&arm_active_target, &cl_opts, false); - arm_option_check_internal (opts); - /* Do any overrides, such as global options arch=xxx. - We do this since arm_active_target was overridden. */ -@@ -31184,7 +31229,7 @@ arm_identify_fpu_from_isa (sbitmap isa) - auto_sbitmap fpubits (isa_num_bits); - auto_sbitmap cand_fpubits (isa_num_bits); - -- bitmap_and (fpubits, isa, isa_all_fpubits); -+ bitmap_and (fpubits, isa, isa_all_fpubits_internal); - - /* If there are no ISA feature bits relating to the FPU, we must be - doing soft-float. */ -@@ -31215,44 +31260,7 @@ arm_declare_function_name (FILE *stream, const char *name, tree decl) - targ_options = TREE_TARGET_OPTION (target_option_current_node); - gcc_assert (targ_options); - -- /* Only update the assembler .arch string if it is distinct from the last -- such string we printed. arch_to_print is set conditionally in case -- targ_options->x_arm_arch_string is NULL which can be the case -- when cc1 is invoked directly without passing -march option. */ -- std::string arch_to_print; -- if (targ_options->x_arm_arch_string) -- arch_to_print = targ_options->x_arm_arch_string; -- -- if (arch_to_print != arm_last_printed_arch_string) -- { -- std::string arch_name -- = arch_to_print.substr (0, arch_to_print.find ("+")); -- asm_fprintf (asm_out_file, "\t.arch %s\n", arch_name.c_str ()); -- const arch_option *arch -- = arm_parse_arch_option_name (all_architectures, "-march", -- targ_options->x_arm_arch_string); -- auto_sbitmap opt_bits (isa_num_bits); -- -- gcc_assert (arch); -- if (arch->common.extensions) -- { -- for (const struct cpu_arch_extension *opt = arch->common.extensions; -- opt->name != NULL; -- opt++) -- { -- if (!opt->remove) -- { -- arm_initialize_isa (opt_bits, opt->isa_bits); -- if (bitmap_subset_p (opt_bits, arm_active_target.isa) -- && !bitmap_subset_p (opt_bits, isa_all_fpubits)) -- asm_fprintf (asm_out_file, "\t.arch_extension %s\n", -- opt->name); -- } -- } -- } -- -- arm_last_printed_arch_string = arch_to_print; -- } -+ arm_print_asm_arch_directives (stream, targ_options); - - fprintf (stream, "\t.syntax unified\n"); - -@@ -31270,16 +31278,6 @@ arm_declare_function_name (FILE *stream, const char *name, tree decl) - else - fprintf (stream, "\t.arm\n"); - -- std::string fpu_to_print -- = TARGET_SOFT_FLOAT -- ? "softvfp" : arm_identify_fpu_from_isa (arm_active_target.isa); -- -- if (fpu_to_print != arm_last_printed_arch_string) -- { -- asm_fprintf (asm_out_file, "\t.fpu %s\n", fpu_to_print.c_str ()); -- arm_last_printed_fpu_string = fpu_to_print; -- } -- - if (TARGET_POKE_FUNCTION_NAME) - arm_poke_function_name (stream, (const char *) name); - } -@@ -31930,28 +31928,28 @@ arm_test_cpu_arch_data (void) - static void - arm_test_fpu_data (void) - { -- auto_sbitmap isa_all_fpubits (isa_num_bits); -+ auto_sbitmap isa_all_fpubits_internal (isa_num_bits); - auto_sbitmap fpubits (isa_num_bits); - auto_sbitmap tmpset (isa_num_bits); - -- static const enum isa_feature fpu_bitlist[] -+ static const enum isa_feature fpu_bitlist_internal[] - = { ISA_ALL_FPU_INTERNAL, isa_nobit }; -- arm_initialize_isa (isa_all_fpubits, fpu_bitlist); -+ arm_initialize_isa (isa_all_fpubits_internal, fpu_bitlist_internal); - - for (unsigned int i = 0; i < TARGET_FPU_auto; i++) - { - arm_initialize_isa (fpubits, all_fpus[i].isa_bits); -- bitmap_and_compl (tmpset, isa_all_fpubits, fpubits); -- bitmap_clear (isa_all_fpubits); -- bitmap_copy (isa_all_fpubits, tmpset); -+ bitmap_and_compl (tmpset, isa_all_fpubits_internal, fpubits); -+ bitmap_clear (isa_all_fpubits_internal); -+ bitmap_copy (isa_all_fpubits_internal, tmpset); - } - -- if (!bitmap_empty_p (isa_all_fpubits)) -+ if (!bitmap_empty_p (isa_all_fpubits_internal)) - { - fprintf (stderr, "Error: found feature bits in the ALL_FPU_INTERAL" - " group that are not defined by any FPU.\n" - " Check your arm-cpus.in.\n"); -- ASSERT_TRUE (bitmap_empty_p (isa_all_fpubits)); -+ ASSERT_TRUE (bitmap_empty_p (isa_all_fpubits_internal)); - } - } - --- -2.17.1 - diff --git a/meta-webos/recipes-devtools/gcc/gcc/0004-Backport-of-the-patch-for-PR-target-91816.patch b/meta-webos/recipes-devtools/gcc/gcc/0008-Backport-of-the-patch-for-PR-target-91816.patch similarity index 95% rename from meta-webos/recipes-devtools/gcc/gcc/0004-Backport-of-the-patch-for-PR-target-91816.patch rename to meta-webos/recipes-devtools/gcc/gcc/0008-Backport-of-the-patch-for-PR-target-91816.patch index 05e69b81f..6788e9cbe 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0004-Backport-of-the-patch-for-PR-target-91816.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0008-Backport-of-the-patch-for-PR-target-91816.patch @@ -1,7 +1,7 @@ -From 6b7ab0e565d79a7e6ae5dbbf17a5eb4eafe56dc8 Mon Sep 17 00:00:00 2001 +From 37872b691223e6c019232a4108f50d18a8248c0d Mon Sep 17 00:00:00 2001 From: Stam Markianos-Wright Date: Mon, 30 Nov 2020 11:05:30 +0000 -Subject: [PATCH 0720/1466] Backport of the patch for PR target/91816 +Subject: [PATCH] Backport of the patch for PR target/91816 This is a patch for an issue where the compiler was generating a conditional branch in Thumb2, which was too far for b{cond} to handle. @@ -19,6 +19,8 @@ gcc/ChangeLog gcc/testsuite/ChangeLog * gcc.target/arm/pr91816.c: New test. + +Upstream-Status: Backport [9.4.0 6b7ab0e565d79a7e6ae5dbbf17a5eb4eafe56dc8 == 10.1.0 44f77a6dea2f312ee1743f3dde465c1b8453ee13 + 10.3.0 8804b6ae3da91f3baa82da2fe28090025d5717d3] --- gcc/config/arm/arm-protos.h | 2 + gcc/config/arm/arm.c | 33 ++++++++ @@ -83,10 +85,10 @@ index d4e2ad2a317..04edd637d43 100644 namespace selftest { diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md -index aa1f23c8e9e..b5df489dca4 100644 +index 9f249800471..8557f2e544f 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md -@@ -7313,9 +7313,15 @@ +@@ -7308,9 +7308,15 @@ ;; And for backward branches we have ;; (neg_range - neg_base_offs + pc_offs) = (neg_range - (-2 or -4) + 4). ;; @@ -102,7 +104,7 @@ index aa1f23c8e9e..b5df489dca4 100644 (define_expand "cbranchsi4" [(set (pc) (if_then_else (match_operator 0 "expandable_comparison_operator" -@@ -7573,23 +7579,50 @@ +@@ -7568,23 +7574,50 @@ (label_ref (match_operand 0 "" "")) (pc)))] "TARGET_32BIT" @@ -164,7 +166,7 @@ index aa1f23c8e9e..b5df489dca4 100644 ) (define_insn "*arm_cond_branch_reversed" -@@ -7599,23 +7632,50 @@ +@@ -7594,23 +7627,50 @@ (pc) (label_ref (match_operand 0 "" ""))))] "TARGET_32BIT" @@ -300,6 +302,3 @@ index 00000000000..f1269141690 +/* { dg-final { scan-assembler-times "beq\\t.Lbcond\[0-9\]" 1 } } */ +/* { dg-final { scan-assembler-times "bne\\t.L\[0-9\]" 2 } } */ +/* { dg-final { scan-assembler-times "bne\\t.Lbcond\[0-9\]" 1 } } */ --- -2.17.1 - diff --git a/meta-webos/recipes-devtools/gcc/gcc/0005-arm-Fix-up-neon_vector_mem_operand-PR97528.patch b/meta-webos/recipes-devtools/gcc/gcc/0009-arm-Fix-up-neon_vector_mem_operand-PR97528.patch similarity index 91% rename from meta-webos/recipes-devtools/gcc/gcc/0005-arm-Fix-up-neon_vector_mem_operand-PR97528.patch rename to meta-webos/recipes-devtools/gcc/gcc/0009-arm-Fix-up-neon_vector_mem_operand-PR97528.patch index 3a9b8a636..bb8ff1cbc 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0005-arm-Fix-up-neon_vector_mem_operand-PR97528.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0009-arm-Fix-up-neon_vector_mem_operand-PR97528.patch @@ -1,7 +1,7 @@ -From 320d8676c770124a4baffab2d9e82224c74964ed Mon Sep 17 00:00:00 2001 +From 20fac686312b1be21181abfe74471a3ee7416b16 Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 20 Nov 2020 12:26:58 +0100 -Subject: [PATCH 0858/1466] arm: Fix up neon_vector_mem_operand [PR97528] +Subject: [PATCH] arm: Fix up neon_vector_mem_operand [PR97528] The documentation for POST_MODIFY says: Currently, the compiler can only handle second operands of the @@ -28,6 +28,7 @@ the POST_MODIFY is in the form it should be. * gcc.target/arm/pr97528.c: New test. (cherry picked from commit 410b8f6f41920dad200cd709f9f3de8b840a995c) +Upstream-Status: Backport [9.4.0 320d8676c770124a4baffab2d9e82224c74964ed == 11.1.0 410b8f6f41920dad200cd709f9f3de8b840a995c] --- gcc/config/arm/arm.c | 4 +++- gcc/testsuite/gcc.target/arm/pr97528.c | 28 ++++++++++++++++++++++++++ @@ -83,6 +84,3 @@ index 00000000000..6cc59f2158c + dst += g; + } +} --- -2.17.1 - diff --git a/meta-webos/recipes-devtools/gcc/gcc/0006-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch b/meta-webos/recipes-devtools/gcc/gcc/0010-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch similarity index 96% rename from meta-webos/recipes-devtools/gcc/gcc/0006-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch rename to meta-webos/recipes-devtools/gcc/gcc/0010-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch index 861b2350a..d5e827e50 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0006-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0010-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch @@ -1,8 +1,8 @@ -From ecdb697389b284a0f3912932e0a440c1071fbadd Mon Sep 17 00:00:00 2001 +From 800dc0cda58797b4327122a98e295bc87f3fd81e Mon Sep 17 00:00:00 2001 From: Prathamesh Kulkarni Date: Mon, 24 Feb 2020 11:55:45 +0530 -Subject: [PATCH 0983/1466] PR47785: Add support for handling Xassembler/Wa - options with LTO. +Subject: [PATCH] PR47785: Add support for handling Xassembler/Wa options with + LTO. Skip the test if arm7a is not supported at link time. This is the case if the toolchain targets an M-profile CPU by default and does not have @@ -49,6 +49,7 @@ gcc/testsuite/ * gcc.target/arm/pr78353-2.c: Likewise. (cherry picked from commit f1a681a174cdfb82e62c246d6f4add9a25fc2e43) +Upstream-Status: Backport [9.4.0 ecdb697389b284a0f3912932e0a440c1071fbadd == 10.1.0 f1a681a174cdfb82e62c246d6f4add9a25fc2e43] --- gcc/doc/invoke.texi | 6 ++ gcc/gcc.c | 29 +++++++ @@ -63,10 +64,10 @@ gcc/testsuite/ create mode 100644 gcc/testsuite/gcc.target/arm/pr78353-2.c diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 280fcc910ad..c39efa0e33e 100644 +index 6451ce0c767..ef2e98fb1d2 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi -@@ -10273,6 +10273,12 @@ conflicting translation units. Specifically +@@ -10279,6 +10279,12 @@ conflicting translation units. Specifically precedence; and for example @option{-ffp-contract=off} takes precedence over @option{-ffp-contract=fast}. You can override them at link time. @@ -80,10 +81,10 @@ index 280fcc910ad..c39efa0e33e 100644 types in separate translation units to be linked together (undefined behavior according to ISO C99 6.2.7), a non-fatal diagnostic may be diff --git a/gcc/gcc.c b/gcc/gcc.c -index 4f57765b012..410ba67a4b0 100644 +index 3e79da4238c..c0b05f3ef4e 100644 --- a/gcc/gcc.c +++ b/gcc/gcc.c -@@ -5240,6 +5240,34 @@ do_specs_vec (vec vec) +@@ -5282,6 +5282,34 @@ do_specs_vec (vec vec) } } @@ -118,7 +119,7 @@ index 4f57765b012..410ba67a4b0 100644 /* Process the sub-spec SPEC as a portion of a larger spec. This is like processing a whole spec except that we do not initialize at the beginning and we do not supply a -@@ -7355,6 +7383,7 @@ driver::main (int argc, char **argv) +@@ -7402,6 +7430,7 @@ driver::main (int argc, char **argv) global_initializations (); build_multilib_strings (); set_up_specs (); @@ -415,6 +416,3 @@ index 00000000000..2589e6135aa + return x; +} + --- -2.17.1 - diff --git a/meta-webos/recipes-devtools/gcc/gcc/0011-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch b/meta-webos/recipes-devtools/gcc/gcc/0011-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch new file mode 100644 index 000000000..d40d005f2 --- /dev/null +++ b/meta-webos/recipes-devtools/gcc/gcc/0011-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch @@ -0,0 +1,160 @@ +From d1651f733d2104137a83ac65f7686cc58c9e608a Mon Sep 17 00:00:00 2001 +From: Richard Earnshaw +Date: Thu, 27 May 2021 10:25:37 +0100 +Subject: [PATCH] arm: Remove use of opts_set in arm_configure_build_target + [PR100767] + +The variable global_options_set is a reflection of which options have +been explicitly set from the command line in the structure +global_options. But it doesn't describe the contents of a +cl_target_option. cl_target_option is a set of options to apply and +once configured should represent a viable set of options without +needing to know which were explicitly set by the user. + +Unfortunately arm_configure_build_target was incorrectly conflating +the two. Fortunately, however, we do not really need to know this +since the various override_options functions should have sanitized the +target_options values before constructing a cl_target_option +structure. It is safe, therefore, to simply drop this parameter to +arm_configure_build_target and rely on checking that various string +parameters are non-null before dereferencing them. + +gcc: + + PR target/100767 + * config/arm/arm.c (arm_configure_build_target): Remove parameter + opts_set, directly check opts parameters for being non-null. + (arm_option_restore): Update call to arm_configure_build_target. + (arm_option_override): Likewise. + (arm_can_inline_p): Likewise. + (arm_valid_target_attribute_tree): Likewise. + * config/arm/arm-c.c (arm_pragma_target_parse): Likewise. + * config/arm/arm-protos.h (arm_configure_build_target): Adjust + prototype. + +(cherry picked from commit 262e75d22c350acbdf4c1fb4f224cc5d3d711eff) +Upstream-Status: Backport [releases/gcc-9 (9.5.0) 255fe52e8ad859f59bb863ad75d00fa84caa88bd == 12.1 262e75d22c350acbdf4c1fb4f224cc5d3d711eff] +--- + gcc/config/arm/arm-c.c | 3 +-- + gcc/config/arm/arm-protos.h | 3 +-- + gcc/config/arm/arm.c | 23 +++++++++-------------- + 3 files changed, 11 insertions(+), 18 deletions(-) + +diff --git a/gcc/config/arm/arm-c.c b/gcc/config/arm/arm-c.c +index 6e256ee0a12..38da34203d0 100644 +--- a/gcc/config/arm/arm-c.c ++++ b/gcc/config/arm/arm-c.c +@@ -266,8 +266,7 @@ arm_pragma_target_parse (tree args, tree pop_target) + target_option_current_node, but not handle_pragma_target. */ + target_option_current_node = cur_tree; + arm_configure_build_target (&arm_active_target, +- TREE_TARGET_OPTION (cur_tree), +- &global_options_set, false); ++ TREE_TARGET_OPTION (cur_tree), false); + } + + /* Update macros if target_node changes. The global state will be restored +diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h +index 3e8bba5caea..cd16c3c35f9 100644 +--- a/gcc/config/arm/arm-protos.h ++++ b/gcc/config/arm/arm-protos.h +@@ -229,8 +229,7 @@ extern bool arm_change_mode_p (tree); + extern tree arm_valid_target_attribute_tree (tree, struct gcc_options *, + struct gcc_options *); + extern void arm_configure_build_target (struct arm_build_target *, +- struct cl_target_option *, +- struct gcc_options *, bool); ++ struct cl_target_option *, bool); + extern void arm_option_reconfigure_globals (void); + extern void arm_options_perform_arch_sanity_checks (void); + extern void arm_pr_long_calls (struct cpp_reader *); +diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c +index 4679da75dd8..3895007dcdb 100644 +--- a/gcc/config/arm/arm.c ++++ b/gcc/config/arm/arm.c +@@ -2985,7 +2985,7 @@ arm_override_options_after_change (void) + { + arm_configure_build_target (&arm_active_target, + TREE_TARGET_OPTION (target_option_default_node), +- &global_options_set, false); ++ false); + + arm_override_options_after_change_1 (&global_options); + } +@@ -3006,8 +3006,7 @@ arm_option_restore (struct gcc_options *opts, struct cl_target_option *ptr) + opts->x_arm_arch_string = ptr->x_arm_arch_string; + opts->x_arm_cpu_string = ptr->x_arm_cpu_string; + opts->x_arm_tune_string = ptr->x_arm_tune_string; +- arm_configure_build_target (&arm_active_target, ptr, &global_options_set, +- false); ++ arm_configure_build_target (&arm_active_target, ptr, false); + } + + /* Reset options between modes that the user has specified. */ +@@ -3124,7 +3123,6 @@ static sbitmap isa_quirkbits; + void + arm_configure_build_target (struct arm_build_target *target, + struct cl_target_option *opts, +- struct gcc_options *opts_set, + bool warn_compatible) + { + const cpu_option *arm_selected_tune = NULL; +@@ -3139,7 +3137,7 @@ arm_configure_build_target (struct arm_build_target *target, + target->core_name = NULL; + target->arch_name = NULL; + +- if (opts_set->x_arm_arch_string) ++ if (opts->x_arm_arch_string) + { + arm_selected_arch = arm_parse_arch_option_name (all_architectures, + "-march", +@@ -3147,7 +3145,7 @@ arm_configure_build_target (struct arm_build_target *target, + arch_opts = strchr (opts->x_arm_arch_string, '+'); + } + +- if (opts_set->x_arm_cpu_string) ++ if (opts->x_arm_cpu_string) + { + arm_selected_cpu = arm_parse_cpu_option_name (all_cores, "-mcpu", + opts->x_arm_cpu_string); +@@ -3157,7 +3155,7 @@ arm_configure_build_target (struct arm_build_target *target, + options for tuning. */ + } + +- if (opts_set->x_arm_tune_string) ++ if (opts->x_arm_tune_string) + { + arm_selected_tune = arm_parse_cpu_option_name (all_cores, "-mtune", + opts->x_arm_tune_string); +@@ -3392,8 +3390,7 @@ arm_option_override (void) + } + + cl_target_option_save (&opts, &global_options); +- arm_configure_build_target (&arm_active_target, &opts, &global_options_set, +- true); ++ arm_configure_build_target (&arm_active_target, &opts, true); + + #ifdef SUBTARGET_OVERRIDE_OPTIONS + SUBTARGET_OVERRIDE_OPTIONS; +@@ -30938,10 +30935,8 @@ arm_can_inline_p (tree caller, tree callee) + caller_target.isa = sbitmap_alloc (isa_num_bits); + callee_target.isa = sbitmap_alloc (isa_num_bits); + +- arm_configure_build_target (&caller_target, caller_opts, &global_options_set, +- false); +- arm_configure_build_target (&callee_target, callee_opts, &global_options_set, +- false); ++ arm_configure_build_target (&caller_target, caller_opts, false); ++ arm_configure_build_target (&callee_target, callee_opts, false); + if (!bitmap_subset_p (callee_target.isa, caller_target.isa)) + can_inline = false; + +@@ -31073,7 +31068,7 @@ arm_valid_target_attribute_tree (tree args, struct gcc_options *opts, + return NULL_TREE; + + cl_target_option_save (&cl_opts, opts); +- arm_configure_build_target (&arm_active_target, &cl_opts, opts_set, false); ++ arm_configure_build_target (&arm_active_target, &cl_opts, false); + arm_option_check_internal (opts); + /* Do any overrides, such as global options arch=xxx. + We do this since arm_active_target was overridden. */ diff --git a/meta-webos/recipes-devtools/gcc/gcc/0012-arm-Fix-an-incorrect-warning-when-mcpu-cortex-a55-is.patch b/meta-webos/recipes-devtools/gcc/gcc/0012-arm-Fix-an-incorrect-warning-when-mcpu-cortex-a55-is.patch new file mode 100644 index 000000000..f7f707c20 --- /dev/null +++ b/meta-webos/recipes-devtools/gcc/gcc/0012-arm-Fix-an-incorrect-warning-when-mcpu-cortex-a55-is.patch @@ -0,0 +1,261 @@ +From eaf62130c7171417760d6e2be7e323d4f5a58ad4 Mon Sep 17 00:00:00 2001 +From: Richard Earnshaw +Date: Wed, 11 Dec 2019 11:59:04 +0000 +Subject: [PATCH] arm: Fix an incorrect warning when -mcpu=cortex-a55 is used + with -mfloat-abi=soft + +When a CPU such as cortex-a55 is used with the soft-float ABI variant, +the compiler is incorrectly issuing a warning about a mismatch between +the architecture (generated internally) and the CPU. This is not +expected or intended. + +The problem stems from the fact that we generate (correctly) an +architecture for a soft-float compilation, but then try to compare it +against the one recorded for the CPU. Normally we strip out the +floating point information before doing that comparison, but we +currently only do that for the features that can be affected by the +-mfpu option. For a soft-float environment we also need to strip out +any bits that depend on having floating-point present. + +So this patch implements that and does a bit of housekeeping at the +same time: + +- in arm-cpus.in it is not necessary for a CPU to specify both + +dotprod and +simd in its architecture specification, since +dotprod + implies +simd. + +- I've refactored the ALL_SIMD fgroup in arm-cpus.in to create a new + subgroup ALL_SIMD_EXTERNAL and containing the bits that were + previously added directly to ALL_SIMD. Similarly, I've added an + ALL_FPU_EXTERNAL subgroup. + +- in arm.c rename fpu_bitlist and all_fpubits to fpu_bitlist_internal + and all_fpubits_internal for consistency with the fgroup bits which + they contain. + + * config/arm/arm-cpus.in (ALL_SIMD_EXTERNAL): New fgroup. + (ALL_SIMD): Use it. + (ALL_FPU_EXTERNAL): New fgroup. + (ALL_FP): Use it. + (cortex-a55, cortex-a75, cortex-a76): Remove redundant + +simd from architecture specification. + (neoverse-n1, cortex-a75.cortex-a55): Likewise. + * config/arm/arm.c (isa_all_fpubits, fpu_bitlist): Rename to ... + (isa_all_fpubits_internal, fpu_bitlist_internal): ... these. + (isa_all_fpbits): New bitmap. + (arm_option_override): Initialize it. + (arm_configure_build_target): If the target isa does not have any + FP enabled, do not warn about mismatches in FP-related feature bits. + +(cherry picked from commit fd9058b6fcda19f63849a28735e3d2616cfd4e89) +Upstream-Status: Backport [releases/gcc-9 (9.5.0) 09e0bac0d5b9548131c0dd6f69c235fb228c28e8 == 10.1 fd9058b6fcda19f63849a28735e3d2616cfd4e89] +--- + gcc/config/arm/arm-cpus.in | 21 ++++++++++-------- + gcc/config/arm/arm.c | 44 +++++++++++++++++++++++--------------- + 2 files changed, 39 insertions(+), 26 deletions(-) + +diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in +index f87044fd25c..37fcf2a9a8f 100644 +--- a/gcc/config/arm/arm-cpus.in ++++ b/gcc/config/arm/arm-cpus.in +@@ -213,15 +213,18 @@ define fgroup ALL_CRYPTO crypto + # strip off 32 D-registers, but does not remove support for + # double-precision FP. + define fgroup ALL_SIMD_INTERNAL fp_d32 neon ALL_CRYPTO +-define fgroup ALL_SIMD ALL_SIMD_INTERNAL dotprod fp16fml ++define fgroup ALL_SIMD_EXTERNAL dotprod fp16fml ++define fgroup ALL_SIMD ALL_SIMD_INTERNAL ALL_SIMD_EXTERNAL + + # List of all FPU bits to strip out if -mfpu is used to override the + # default. fp16 is deliberately missing from this list. + define fgroup ALL_FPU_INTERNAL vfpv2 vfpv3 vfpv4 fpv5 fp16conv fp_dbl ALL_SIMD_INTERNAL +- + # Similarly, but including fp16 and other extensions that aren't part of + # -mfpu support. +-define fgroup ALL_FP fp16 ALL_FPU_INTERNAL ++define fgroup ALL_FPU_EXTERNAL fp16 ++ ++# Everything related to the FPU extensions (FP or SIMD). ++define fgroup ALL_FP ALL_FPU_EXTERNAL ALL_FPU_INTERNAL ALL_SIMD + + define fgroup ARMv4 armv4 notm + define fgroup ARMv4t ARMv4 thumb +@@ -1301,7 +1304,7 @@ begin cpu cortex-a55 + cname cortexa55 + tune for cortex-a53 + tune flags LDSCHED +- architecture armv8.2-a+fp16+dotprod+simd ++ architecture armv8.2-a+fp16+dotprod + option crypto add FP_ARMv8 CRYPTO + option nofp remove ALL_FP + costs cortex_a53 +@@ -1313,7 +1316,7 @@ begin cpu cortex-a75 + cname cortexa75 + tune for cortex-a57 + tune flags LDSCHED +- architecture armv8.2-a+fp16+dotprod+simd ++ architecture armv8.2-a+fp16+dotprod + option crypto add FP_ARMv8 CRYPTO + costs cortex_a73 + vendor 41 +@@ -1324,7 +1327,7 @@ begin cpu cortex-a76 + cname cortexa76 + tune for cortex-a57 + tune flags LDSCHED +- architecture armv8.2-a+fp16+dotprod+simd ++ architecture armv8.2-a+fp16+dotprod + option crypto add FP_ARMv8 CRYPTO + costs cortex_a57 + vendor 41 +@@ -1336,7 +1339,7 @@ begin cpu neoverse-n1 + alias !ares + tune for cortex-a57 + tune flags LDSCHED +- architecture armv8.2-a+fp16+dotprod+simd ++ architecture armv8.2-a+fp16+dotprod + option crypto add FP_ARMv8 CRYPTO + costs cortex_a57 + vendor 41 +@@ -1348,7 +1351,7 @@ begin cpu cortex-a75.cortex-a55 + cname cortexa75cortexa55 + tune for cortex-a53 + tune flags LDSCHED +- architecture armv8.2-a+fp16+dotprod+simd ++ architecture armv8.2-a+fp16+dotprod + option crypto add FP_ARMv8 CRYPTO + costs cortex_a73 + end cpu cortex-a75.cortex-a55 +@@ -1357,7 +1360,7 @@ begin cpu cortex-a76.cortex-a55 + cname cortexa76cortexa55 + tune for cortex-a53 + tune flags LDSCHED +- architecture armv8.2-a+fp16+dotprod+simd ++ architecture armv8.2-a+fp16+dotprod + option crypto add FP_ARMv8 CRYPTO + costs cortex_a57 + end cpu cortex-a76.cortex-a55 +diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c +index 3895007dcdb..19b9cc37324 100644 +--- a/gcc/config/arm/arm.c ++++ b/gcc/config/arm/arm.c +@@ -3114,7 +3114,8 @@ arm_option_override_internal (struct gcc_options *opts, + #endif + } + +-static sbitmap isa_all_fpubits; ++static sbitmap isa_all_fpubits_internal; ++static sbitmap isa_all_fpbits; + static sbitmap isa_quirkbits; + + /* Configure a build target TARGET from the user-specified options OPTS and +@@ -3180,7 +3181,12 @@ arm_configure_build_target (struct arm_build_target *target, + /* Ignore any bits that are quirk bits. */ + bitmap_and_compl (isa_delta, isa_delta, isa_quirkbits); + /* Ignore (for now) any bits that might be set by -mfpu. */ +- bitmap_and_compl (isa_delta, isa_delta, isa_all_fpubits); ++ bitmap_and_compl (isa_delta, isa_delta, isa_all_fpubits_internal); ++ ++ /* And if the target ISA lacks floating point, ignore any ++ extensions that depend on that. */ ++ if (!bitmap_bit_p (target->isa, isa_bit_vfpv2)) ++ bitmap_and_compl (isa_delta, isa_delta, isa_all_fpbits); + + if (!bitmap_empty_p (isa_delta)) + { +@@ -3339,7 +3345,7 @@ arm_configure_build_target (struct arm_build_target *target, + auto_sbitmap fpu_bits (isa_num_bits); + + arm_initialize_isa (fpu_bits, arm_selected_fpu->isa_bits); +- bitmap_and_compl (target->isa, target->isa, isa_all_fpubits); ++ bitmap_and_compl (target->isa, target->isa, isa_all_fpubits_internal); + bitmap_ior (target->isa, target->isa, fpu_bits); + } + +@@ -3365,16 +3371,20 @@ arm_configure_build_target (struct arm_build_target *target, + static void + arm_option_override (void) + { +- static const enum isa_feature fpu_bitlist[] ++ static const enum isa_feature fpu_bitlist_internal[] + = { ISA_ALL_FPU_INTERNAL, isa_nobit }; ++ static const enum isa_feature fp_bitlist[] ++ = { ISA_ALL_FP, isa_nobit }; + static const enum isa_feature quirk_bitlist[] = { ISA_ALL_QUIRKS, isa_nobit}; + cl_target_option opts; + + isa_quirkbits = sbitmap_alloc (isa_num_bits); + arm_initialize_isa (isa_quirkbits, quirk_bitlist); + +- isa_all_fpubits = sbitmap_alloc (isa_num_bits); +- arm_initialize_isa (isa_all_fpubits, fpu_bitlist); ++ isa_all_fpubits_internal = sbitmap_alloc (isa_num_bits); ++ isa_all_fpbits = sbitmap_alloc (isa_num_bits); ++ arm_initialize_isa (isa_all_fpubits_internal, fpu_bitlist_internal); ++ arm_initialize_isa (isa_all_fpbits, fp_bitlist); + + arm_active_target.isa = sbitmap_alloc (isa_num_bits); + +@@ -26681,7 +26691,7 @@ arm_print_asm_arch_directives () + don't print anything if all the bits are part of the + FPU specification. */ + if (bitmap_subset_p (opt_bits, arm_active_target.isa) +- && !bitmap_subset_p (opt_bits, isa_all_fpubits)) ++ && !bitmap_subset_p (opt_bits, isa_all_fpubits_internal)) + asm_fprintf (asm_out_file, "\t.arch_extension %s\n", opt->name); + } + } +@@ -31183,7 +31193,7 @@ arm_identify_fpu_from_isa (sbitmap isa) + auto_sbitmap fpubits (isa_num_bits); + auto_sbitmap cand_fpubits (isa_num_bits); + +- bitmap_and (fpubits, isa, isa_all_fpubits); ++ bitmap_and (fpubits, isa, isa_all_fpubits_internal); + + /* If there are no ISA feature bits relating to the FPU, we must be + doing soft-float. */ +@@ -31243,7 +31253,7 @@ arm_declare_function_name (FILE *stream, const char *name, tree decl) + { + arm_initialize_isa (opt_bits, opt->isa_bits); + if (bitmap_subset_p (opt_bits, arm_active_target.isa) +- && !bitmap_subset_p (opt_bits, isa_all_fpubits)) ++ && !bitmap_subset_p (opt_bits, isa_all_fpubits_internal)) + asm_fprintf (asm_out_file, "\t.arch_extension %s\n", + opt->name); + } +@@ -31929,28 +31939,28 @@ arm_test_cpu_arch_data (void) + static void + arm_test_fpu_data (void) + { +- auto_sbitmap isa_all_fpubits (isa_num_bits); ++ auto_sbitmap isa_all_fpubits_internal (isa_num_bits); + auto_sbitmap fpubits (isa_num_bits); + auto_sbitmap tmpset (isa_num_bits); + +- static const enum isa_feature fpu_bitlist[] ++ static const enum isa_feature fpu_bitlist_internal[] + = { ISA_ALL_FPU_INTERNAL, isa_nobit }; +- arm_initialize_isa (isa_all_fpubits, fpu_bitlist); ++ arm_initialize_isa (isa_all_fpubits_internal, fpu_bitlist_internal); + + for (unsigned int i = 0; i < TARGET_FPU_auto; i++) + { + arm_initialize_isa (fpubits, all_fpus[i].isa_bits); +- bitmap_and_compl (tmpset, isa_all_fpubits, fpubits); +- bitmap_clear (isa_all_fpubits); +- bitmap_copy (isa_all_fpubits, tmpset); ++ bitmap_and_compl (tmpset, isa_all_fpubits_internal, fpubits); ++ bitmap_clear (isa_all_fpubits_internal); ++ bitmap_copy (isa_all_fpubits_internal, tmpset); + } + +- if (!bitmap_empty_p (isa_all_fpubits)) ++ if (!bitmap_empty_p (isa_all_fpubits_internal)) + { + fprintf (stderr, "Error: found feature bits in the ALL_FPU_INTERAL" + " group that are not defined by any FPU.\n" + " Check your arm-cpus.in.\n"); +- ASSERT_TRUE (bitmap_empty_p (isa_all_fpubits)); ++ ASSERT_TRUE (bitmap_empty_p (isa_all_fpubits_internal)); + } + } + diff --git a/meta-webos/recipes-devtools/gcc/gcc/0013-arm-ensure-the-arch_name-is-always-set-for-the-build.patch b/meta-webos/recipes-devtools/gcc/gcc/0013-arm-ensure-the-arch_name-is-always-set-for-the-build.patch new file mode 100644 index 000000000..e27e0c145 --- /dev/null +++ b/meta-webos/recipes-devtools/gcc/gcc/0013-arm-ensure-the-arch_name-is-always-set-for-the-build.patch @@ -0,0 +1,38 @@ +From 40276487efdbc07cf0a2e4c4d3b0060d1fc7445c Mon Sep 17 00:00:00 2001 +From: Richard Earnshaw +Date: Mon, 26 Jul 2021 17:07:14 +0100 +Subject: [PATCH] arm: ensure the arch_name is always set for the build target + +This should never happen now if GCC is invoked by the driver, but in +the unusual case of calling cc1 (or its ilk) directly from the command +line the build target's arch_name string can remain NULL. This can +complicate later processing meaning that we need to check for this +case explicitly in some circumstances. Nothing should rely on this +behaviour, so it's simpler to always set the arch_name when +configuring the build target and be done with it. + +gcc: + + * config/arm/arm.c (arm_configure_build_target): Ensure the target's + arch_name is always set. + +(cherry picked from commit 62e66c6a6cc52dc0e014141d369cff52757cd7ae) + +Upstream-Status: Backport [releases/gcc-9 (9.5.0) 140a8089000ffa340b2f188be8abec134f1b888f == 12.1 62e66c6a6cc52dc0e014141d369cff52757cd7ae] +--- + gcc/config/arm/arm.c | 2 ++ + 1 file changed, 2 insertions(+) + +diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c +index 19b9cc37324..4685fd88327 100644 +--- a/gcc/config/arm/arm.c ++++ b/gcc/config/arm/arm.c +@@ -3357,6 +3357,8 @@ arm_configure_build_target (struct arm_build_target *target, + const cpu_tune *tune_data = &all_tunes[arm_selected_tune - all_cores]; + + /* Finish initializing the target structure. */ ++ if (!target->arch_name) ++ target->arch_name = arm_selected_arch->common.name; + target->arch_pp_name = arm_selected_arch->arch; + target->base_arch = arm_selected_arch->base_arch; + target->profile = arm_selected_arch->profile; diff --git a/meta-webos/recipes-devtools/gcc/gcc/0014-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch b/meta-webos/recipes-devtools/gcc/gcc/0014-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch new file mode 100644 index 000000000..563b84e6e --- /dev/null +++ b/meta-webos/recipes-devtools/gcc/gcc/0014-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch @@ -0,0 +1,68 @@ +From b38ce648cb4fd3229caf55fe1b9e159d89861e99 Mon Sep 17 00:00:00 2001 +From: Richard Earnshaw +Date: Tue, 27 Jul 2021 15:44:57 +0100 +Subject: [PATCH] arm: Don't reconfigure globals in arm_configure_build_target + +arm_configure_build_target is usually used to reconfigure the +arm_active_target structure, which is then used to reconfigure a +number of other global variables describing the current target. +Occasionally, however, we need to use arm_configure_build_target to +construct a temporary target structure and in that case it is wrong to +try to reconfigure the global variables (although probably harmless, +since arm_option_reconfigure_globals() only looks at +arm_active_target). At the very least, however, this is wasted work, +so it is best not to do it unless needed. What's more, several +callers of arm_configure_build target call +arm_option_reconfigure_globals themselves within a few lines, making +the call from within arm_configure_build_target completely redundant. + +So this patch moves the responsibility of calling of +arm_configure_build_target to its callers (only two places needed +updating). + +gcc: + * config/arm/arm.c (arm_configure_build_target): Don't call + arm_option_reconfigure_globals. + (arm_option_restore): Call arm_option_reconfigure_globals after + reconfiguring the target. + * config/arm/arm-c.c (arm_pragma_target_parse): Likewise. +(cherry picked from commit 6a37d0331c25f23628d4308e5a75624005c223b2) + +Upstream-Status: Backport [releases/gcc-9 (9.5.0) 9a48ce5c29158af88c0b98a97f5336c0896394a5 == 12.1 6a37d0331c25f23628d4308e5a75624005c223b2] +--- + gcc/config/arm/arm-c.c | 1 + + gcc/config/arm/arm.c | 2 +- + 2 files changed, 2 insertions(+), 1 deletion(-) + +diff --git a/gcc/config/arm/arm-c.c b/gcc/config/arm/arm-c.c +index 38da34203d0..8cb08646ce5 100644 +--- a/gcc/config/arm/arm-c.c ++++ b/gcc/config/arm/arm-c.c +@@ -267,6 +267,7 @@ arm_pragma_target_parse (tree args, tree pop_target) + target_option_current_node = cur_tree; + arm_configure_build_target (&arm_active_target, + TREE_TARGET_OPTION (cur_tree), false); ++ arm_option_reconfigure_globals (); + } + + /* Update macros if target_node changes. The global state will be restored +diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c +index 4685fd88327..f4ed21ebb50 100644 +--- a/gcc/config/arm/arm.c ++++ b/gcc/config/arm/arm.c +@@ -3007,6 +3007,7 @@ arm_option_restore (struct gcc_options *opts, struct cl_target_option *ptr) + opts->x_arm_cpu_string = ptr->x_arm_cpu_string; + opts->x_arm_tune_string = ptr->x_arm_tune_string; + arm_configure_build_target (&arm_active_target, ptr, false); ++ arm_option_reconfigure_globals (); + } + + /* Reset options between modes that the user has specified. */ +@@ -3366,7 +3367,6 @@ arm_configure_build_target (struct arm_build_target *target, + target->tune_flags = tune_data->tune_flags; + target->tune = tune_data->tune; + target->tune_core = tune_data->scheduler; +- arm_option_reconfigure_globals (); + } + + /* Fix up any incompatible options that the user has specified. */ diff --git a/meta-webos/recipes-devtools/gcc/gcc/0015-arm-reorder-assembler-architecture-directives-PR1017.patch b/meta-webos/recipes-devtools/gcc/gcc/0015-arm-reorder-assembler-architecture-directives-PR1017.patch new file mode 100644 index 000000000..96bf4abcc --- /dev/null +++ b/meta-webos/recipes-devtools/gcc/gcc/0015-arm-reorder-assembler-architecture-directives-PR1017.patch @@ -0,0 +1,467 @@ +From fb5e19b4c2492e50c8a1eeb9055bea46d5ddd680 Mon Sep 17 00:00:00 2001 +From: Richard Earnshaw +Date: Thu, 29 Jul 2021 11:00:31 +0100 +Subject: [PATCH] arm: reorder assembler architecture directives [PR101723] + +A change to the way gas interprets the .fpu directive in binutils-2.34 +means that issuing .fpu will clear any features set by .arch_extension +that apply to the floating point or simd units. This unfortunately +causes problems for more recent versions of the architecture because +we currently emit .arch, .arch_extension and .fpu directives at +different times and try to suppress redundant changes. + +This change addresses this by firstly unifying all the places where we +emit these directives to a single block of code and secondly +(re)emitting all the directives if any changes have been made to the +target options. Whilst this is slightly more than the strict minimum +it should be enough to catch all cases where a change could have +happened. The new code also emits the directives in the order: .arch, +.fpu, .arch_extension. This ensures that the additional architectural +extensions are not removed by a later .fpu directive. + +Whilst writing this patch I also noticed that in the corner case where +the last function to be compiled had a non-standard set of +architecture flags, the assembler would add an incorrect set of +derived attributes for the file as a whole. Instead of reflecting the +command-line options it would reflect the flags from the last file in +the function. To address this I've also added a call to re-emit the +flags from the asm_file_end callback so the assembler will be in the +correct state when it finishes processing the intput. + +There's some slight churn to the testsuite as a consequence of this, +because previously we had a hack to suppress emitting a .fpu directive +for one specific case, but with the new order this is no-longer +necessary. + +gcc/ChangeLog: + + PR target/101723 + * config/arm/arm-cpus.in (quirk_no_asmcpu): New feature bit. + (ALL_QUIRKS): Add it. + (generic-armv7-a): Add quirk to suppress writing .cpu directive in + asm output. + * config/arm/arm.c (arm_identify_fpu_from_isa): New variable. + (arm_last_printed_arch_string): Delete. + (arm_last-printed_fpu_string): Delete. + (arm_configure_build_target): If use of floating-point/SIMD is + disabled, remove all fp/simd related features from the target ISA. + (last_arm_targ_options): New variable. + (arm_print_asm_arch_directives): Add new parameters. Change order + of emitted directives and handle all cases here. + (arm_file_start): Always call arm_print_asm_arch_directives, move + all generation of .arch/.arch_extension here. + (arm_file_end): Call arm_print_asm_arch. + (arm_declare_function_name): Call arm_print_asm_arch_directives + instead of printing .arch/.fpu directives directly. + +gcc/testsuite/ChangeLog: + + PR target/101723 + * gcc.target/arm/attr-neon.c: Tighten scan-assembler tests. + * gcc.target/arm/attr-neon2.c: Likewise. + * gcc.target/arm/attr-neon3.c: Likewise. + * gcc.target/arm/pr69245.c: Tighten scan-assembler match, but allow + multiple instances. + * gcc.target/arm/pragma_fpu_attribute.c: Likewise. + * gcc.target/arm/pragma_fpu_attribute_2.c: Likewise. + +(cherry picked from commit c1cdabe3aab817d95a8db00a8b5e9f6bcdea936f) +Upstream-Status: Backport [releases/gcc-9 (9.5.0) 04c568961e793a1d7ad86248b4ca929fc84acf8d == 12.1 c1cdabe3aab817d95a8db00a8b5e9f6bcdea936f] +--- + gcc/config/arm/arm-cpus.in | 6 +- + gcc/config/arm/arm.c | 173 ++++++++---------- + gcc/testsuite/gcc.target/arm/attr-neon.c | 9 +- + gcc/testsuite/gcc.target/arm/attr-neon2.c | 4 +- + gcc/testsuite/gcc.target/arm/attr-neon3.c | 6 +- + gcc/testsuite/gcc.target/arm/pr69245.c | 6 +- + .../gcc.target/arm/pragma_fpu_attribute.c | 7 +- + .../gcc.target/arm/pragma_fpu_attribute_2.c | 7 +- + 8 files changed, 111 insertions(+), 107 deletions(-) + +diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in +index 37fcf2a9a8f..de2caec5497 100644 +--- a/gcc/config/arm/arm-cpus.in ++++ b/gcc/config/arm/arm-cpus.in +@@ -180,6 +180,9 @@ define feature quirk_armv6kz + # Cortex-M3 LDRD quirk. + define feature quirk_cm3_ldrd + ++# Don't use .cpu assembly directive ++define feature quirk_no_asmcpu ++ + # (Very) slow multiply operations. Should probably be a tuning bit. + define feature smallmul + +@@ -277,7 +280,7 @@ define fgroup DOTPROD NEON dotprod + # architectures. + # xscale isn't really a 'quirk', but it isn't an architecture either and we + # need to ignore it for matching purposes. +-define fgroup ALL_QUIRKS quirk_no_volatile_ce quirk_armv6kz quirk_cm3_ldrd xscale ++define fgroup ALL_QUIRKS quirk_no_volatile_ce quirk_armv6kz quirk_cm3_ldrd xscale quirk_no_asmcpu + + # Architecture entries + # format: +@@ -979,6 +982,7 @@ begin cpu generic-armv7-a + cname genericv7a + tune flags LDSCHED + architecture armv7-a+fp ++ isa quirk_no_asmcpu + option mp add mp + option sec add sec + option vfpv3-d16 add VFPv3 FP_DBL +diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c +index f4ed21ebb50..58afc4a2647 100644 +--- a/gcc/config/arm/arm.c ++++ b/gcc/config/arm/arm.c +@@ -78,10 +78,6 @@ + typedef struct minipool_node Mnode; + typedef struct minipool_fixup Mfix; + +-/* The last .arch and .fpu assembly strings that we printed. */ +-static std::string arm_last_printed_arch_string; +-static std::string arm_last_printed_fpu_string; +- + void (*arm_lang_output_object_attributes_hook)(void); + + struct four_ints +@@ -325,6 +321,7 @@ static unsigned int arm_hard_regno_nregs (unsigned int, machine_mode); + static bool arm_hard_regno_mode_ok (unsigned int, machine_mode); + static bool arm_modes_tieable_p (machine_mode, machine_mode); + static HOST_WIDE_INT arm_constant_alignment (const_tree, HOST_WIDE_INT); ++static const char *arm_identify_fpu_from_isa (sbitmap); + + /* Table of machine attributes. */ + static const struct attribute_spec arm_attribute_table[] = +@@ -3350,6 +3347,11 @@ arm_configure_build_target (struct arm_build_target *target, + bitmap_ior (target->isa, target->isa, fpu_bits); + } + ++ /* If we have the soft-float ABI, clear any feature bits relating to use of ++ floating-point operations. They'll just confuse things later on. */ ++ if (arm_float_abi == ARM_FLOAT_ABI_SOFT) ++ bitmap_and_compl (target->isa, target->isa, isa_all_fpbits); ++ + if (!arm_selected_tune) + arm_selected_tune = arm_selected_cpu; + else /* Validate the features passed to -mtune. */ +@@ -26663,20 +26665,65 @@ arm_print_tune_info (void) + (int) current_tune->sched_autopref); + } + ++/* The last set of target options used to emit .arch directives, etc. This ++ could be a function-local static if it were not required to expose it as a ++ root to the garbage collector. */ ++static GTY(()) cl_target_option *last_asm_targ_options = NULL; ++ + /* Print .arch and .arch_extension directives corresponding to the + current architecture configuration. */ + static void +-arm_print_asm_arch_directives () ++arm_print_asm_arch_directives (FILE *stream, cl_target_option *targ_options) + { ++ arm_build_target build_target; ++ /* If the target options haven't changed since the last time we were called ++ there is nothing to do. This should be sufficient to suppress the ++ majority of redundant work. */ ++ if (last_asm_targ_options == targ_options) ++ return; ++ ++ last_asm_targ_options = targ_options; ++ ++ build_target.isa = sbitmap_alloc (isa_num_bits); ++ arm_configure_build_target (&build_target, targ_options, false); ++ ++ if (build_target.core_name ++ && !bitmap_bit_p (build_target.isa, isa_bit_quirk_no_asmcpu)) ++ { ++ const char* truncated_name ++ = arm_rewrite_selected_cpu (build_target.core_name); ++ asm_fprintf (stream, "\t.cpu %s\n", truncated_name); ++ } ++ + const arch_option *arch + = arm_parse_arch_option_name (all_architectures, "-march", +- arm_active_target.arch_name); ++ build_target.arch_name); + auto_sbitmap opt_bits (isa_num_bits); + + gcc_assert (arch); + +- asm_fprintf (asm_out_file, "\t.arch %s\n", arm_active_target.arch_name); +- arm_last_printed_arch_string = arm_active_target.arch_name; ++ if (strcmp (build_target.arch_name, "armv7ve") == 0) ++ { ++ /* Keep backward compatability for assemblers which don't support ++ armv7ve. Fortunately, none of the following extensions are reset ++ by a .fpu directive. */ ++ asm_fprintf (stream, "\t.arch armv7-a\n"); ++ asm_fprintf (stream, "\t.arch_extension virt\n"); ++ asm_fprintf (stream, "\t.arch_extension idiv\n"); ++ asm_fprintf (stream, "\t.arch_extension sec\n"); ++ asm_fprintf (stream, "\t.arch_extension mp\n"); ++ } ++ else ++ asm_fprintf (stream, "\t.arch %s\n", build_target.arch_name); ++ ++ /* The .fpu directive will reset any architecture extensions from the ++ assembler that relate to the fp/vector extensions. So put this out before ++ any .arch_extension directives. */ ++ const char *fpu_name = (TARGET_SOFT_FLOAT ++ ? "softvfp" ++ : arm_identify_fpu_from_isa (build_target.isa)); ++ asm_fprintf (stream, "\t.fpu %s\n", fpu_name); ++ + if (!arch->common.extensions) + return; + +@@ -26688,13 +26735,12 @@ arm_print_asm_arch_directives () + { + arm_initialize_isa (opt_bits, opt->isa_bits); + +- /* If every feature bit of this option is set in the target +- ISA specification, print out the option name. However, +- don't print anything if all the bits are part of the +- FPU specification. */ +- if (bitmap_subset_p (opt_bits, arm_active_target.isa) ++ /* If every feature bit of this option is set in the target ISA ++ specification, print out the option name. However, don't print ++ anything if all the bits are part of the FPU specification. */ ++ if (bitmap_subset_p (opt_bits, build_target.isa) + && !bitmap_subset_p (opt_bits, isa_all_fpubits_internal)) +- asm_fprintf (asm_out_file, "\t.arch_extension %s\n", opt->name); ++ asm_fprintf (stream, "\t.arch_extension %s\n", opt->name); + } + } + } +@@ -26704,42 +26750,23 @@ arm_file_start (void) + { + int val; + ++ arm_print_asm_arch_directives ++ (asm_out_file, TREE_TARGET_OPTION (target_option_default_node)); ++ + if (TARGET_BPABI) + { +- /* We don't have a specified CPU. Use the architecture to +- generate the tags. +- +- Note: it might be better to do this unconditionally, then the +- assembler would not need to know about all new CPU names as +- they are added. */ +- if (!arm_active_target.core_name) +- { +- /* armv7ve doesn't support any extensions. */ +- if (strcmp (arm_active_target.arch_name, "armv7ve") == 0) +- { +- /* Keep backward compatability for assemblers +- which don't support armv7ve. */ +- asm_fprintf (asm_out_file, "\t.arch armv7-a\n"); +- asm_fprintf (asm_out_file, "\t.arch_extension virt\n"); +- asm_fprintf (asm_out_file, "\t.arch_extension idiv\n"); +- asm_fprintf (asm_out_file, "\t.arch_extension sec\n"); +- asm_fprintf (asm_out_file, "\t.arch_extension mp\n"); +- arm_last_printed_arch_string = "armv7ve"; +- } +- else +- arm_print_asm_arch_directives (); +- } +- else if (strncmp (arm_active_target.core_name, "generic", 7) == 0) +- { +- asm_fprintf (asm_out_file, "\t.arch %s\n", +- arm_active_target.core_name + 8); +- arm_last_printed_arch_string = arm_active_target.core_name + 8; +- } +- else ++ /* If we have a named cpu, but we the assembler does not support that ++ name via .cpu, put out a cpu name attribute; but don't do this if the ++ name starts with the fictitious prefix, 'generic'. */ ++ if (arm_active_target.core_name ++ && bitmap_bit_p (arm_active_target.isa, isa_bit_quirk_no_asmcpu) ++ && strncmp (arm_active_target.core_name, "generic", 7) != 0) + { + const char* truncated_name + = arm_rewrite_selected_cpu (arm_active_target.core_name); +- asm_fprintf (asm_out_file, "\t.cpu %s\n", truncated_name); ++ if (bitmap_bit_p (arm_active_target.isa, isa_bit_quirk_no_asmcpu)) ++ asm_fprintf (asm_out_file, "\t.eabi_attribute 5, \"%s\"\n", ++ truncated_name); + } + + if (print_tune_info) +@@ -26807,6 +26834,13 @@ arm_file_end (void) + { + int regno; + ++ /* Just in case the last function output in the assembler had non-default ++ architecture directives, we force the assembler state back to the default ++ set, so that any 'calculated' build attributes are based on the default ++ options rather than the special options for that function. */ ++ arm_print_asm_arch_directives ++ (asm_out_file, TREE_TARGET_OPTION (target_option_default_node)); ++ + if (NEED_INDICATE_EXEC_STACK) + /* Add .note.GNU-stack. */ + file_end_indicate_exec_stack (); +@@ -31226,44 +31260,7 @@ arm_declare_function_name (FILE *stream, const char *name, tree decl) + targ_options = TREE_TARGET_OPTION (target_option_current_node); + gcc_assert (targ_options); + +- /* Only update the assembler .arch string if it is distinct from the last +- such string we printed. arch_to_print is set conditionally in case +- targ_options->x_arm_arch_string is NULL which can be the case +- when cc1 is invoked directly without passing -march option. */ +- std::string arch_to_print; +- if (targ_options->x_arm_arch_string) +- arch_to_print = targ_options->x_arm_arch_string; +- +- if (arch_to_print != arm_last_printed_arch_string) +- { +- std::string arch_name +- = arch_to_print.substr (0, arch_to_print.find ("+")); +- asm_fprintf (asm_out_file, "\t.arch %s\n", arch_name.c_str ()); +- const arch_option *arch +- = arm_parse_arch_option_name (all_architectures, "-march", +- targ_options->x_arm_arch_string); +- auto_sbitmap opt_bits (isa_num_bits); +- +- gcc_assert (arch); +- if (arch->common.extensions) +- { +- for (const struct cpu_arch_extension *opt = arch->common.extensions; +- opt->name != NULL; +- opt++) +- { +- if (!opt->remove) +- { +- arm_initialize_isa (opt_bits, opt->isa_bits); +- if (bitmap_subset_p (opt_bits, arm_active_target.isa) +- && !bitmap_subset_p (opt_bits, isa_all_fpubits_internal)) +- asm_fprintf (asm_out_file, "\t.arch_extension %s\n", +- opt->name); +- } +- } +- } +- +- arm_last_printed_arch_string = arch_to_print; +- } ++ arm_print_asm_arch_directives (stream, targ_options); + + fprintf (stream, "\t.syntax unified\n"); + +@@ -31281,16 +31278,6 @@ arm_declare_function_name (FILE *stream, const char *name, tree decl) + else + fprintf (stream, "\t.arm\n"); + +- std::string fpu_to_print +- = TARGET_SOFT_FLOAT +- ? "softvfp" : arm_identify_fpu_from_isa (arm_active_target.isa); +- +- if (fpu_to_print != arm_last_printed_arch_string) +- { +- asm_fprintf (asm_out_file, "\t.fpu %s\n", fpu_to_print.c_str ()); +- arm_last_printed_fpu_string = fpu_to_print; +- } +- + if (TARGET_POKE_FUNCTION_NAME) + arm_poke_function_name (stream, (const char *) name); + } +diff --git a/gcc/testsuite/gcc.target/arm/attr-neon.c b/gcc/testsuite/gcc.target/arm/attr-neon.c +index 225fb8dc3db..e8e3086247d 100644 +--- a/gcc/testsuite/gcc.target/arm/attr-neon.c ++++ b/gcc/testsuite/gcc.target/arm/attr-neon.c +@@ -1,7 +1,10 @@ + /* { dg-do compile } */ + /* { dg-require-effective-target arm_neon_ok } */ + /* { dg-options "-O2 -ftree-vectorize" } */ +-/* { dg-add-options arm_neon arm_v8_vfp } */ /* The arm_v8_vfp adds -mfpu=fp-armv8 to the command line, overriding any -mfpu= option set by arm_neon, thus ensuring that the attributes below really are checked for correct fpu selection. */ ++/* { dg-add-options arm_neon arm_v8_vfp } */ ++/* The arm_v8_vfp adds -mfpu=fp-armv8 to the command line, overriding any ++ -mfpu= option set by arm_neon, thus ensuring that the attributes below ++ really are checked for correct fpu selection. */ + + /* Verify that neon instructions are emitted once. */ + void __attribute__ ((target("fpu=neon"))) +@@ -18,6 +21,6 @@ f3(int n, int x[], int y[]) { + y[i] = x[i] << 3; + } + +-/* { dg-final { scan-assembler-times "\.fpu vfp" 1 } } */ +-/* { dg-final { scan-assembler-times "\.fpu neon" 1 } } */ ++/* { dg-final { scan-assembler-times "\.fpu\\s+vfp\n" 1 } } */ ++/* { dg-final { scan-assembler-times "\.fpu\\s+neon\n" 1 } } */ + /* { dg-final { scan-assembler-times "vshl" 1 } } */ +diff --git a/gcc/testsuite/gcc.target/arm/attr-neon2.c b/gcc/testsuite/gcc.target/arm/attr-neon2.c +index 29668256cf5..91cf4dde8db 100644 +--- a/gcc/testsuite/gcc.target/arm/attr-neon2.c ++++ b/gcc/testsuite/gcc.target/arm/attr-neon2.c +@@ -27,8 +27,8 @@ my1 (int8x8_t __a, int8x8_t __b) + return __a + __b; + } + +-/* { dg-final { scan-assembler-times "\.fpu vfp" 1 } } */ +-/* { dg-final { scan-assembler-times "\.fpu neon" 1 } } */ ++/* { dg-final { scan-assembler {\.fpu\s+vfp\n} } } */ ++/* { dg-final { scan-assembler {\.fpu\s+neon\n} } } */ + /* { dg-final { scan-assembler "vadd" } } */ + + +diff --git a/gcc/testsuite/gcc.target/arm/attr-neon3.c b/gcc/testsuite/gcc.target/arm/attr-neon3.c +index 17e429ad739..0acb7f98dc6 100644 +--- a/gcc/testsuite/gcc.target/arm/attr-neon3.c ++++ b/gcc/testsuite/gcc.target/arm/attr-neon3.c +@@ -31,8 +31,8 @@ my1 (int8x8_t __a, int8x8_t __b) + return __a + __b; + } + +-/* { dg-final { scan-assembler-times "\.fpu vfp" 1 } } */ +-/* { dg-final { scan-assembler-times "\.fpu neon" 1 } } */ +-/* { dg-final { scan-assembler-times "\.fpu crypto-neon-fp-armv8" 1 } } */ ++/* { dg-final { scan-assembler {\.fpu\s+vfp\n} } } */ ++/* { dg-final { scan-assembler {\.fpu\s+neon\n} } } */ ++/* { dg-final { scan-assembler {\.fpu\s+crypto-neon-fp-armv8\n} } } */ + /* { dg-final { scan-assembler-times "vld1" 1 } } */ + /* { dg-final { scan-assembler-times "vadd" 1} } */ +diff --git a/gcc/testsuite/gcc.target/arm/pr69245.c b/gcc/testsuite/gcc.target/arm/pr69245.c +index bd505187728..34b97a22e15 100644 +--- a/gcc/testsuite/gcc.target/arm/pr69245.c ++++ b/gcc/testsuite/gcc.target/arm/pr69245.c +@@ -23,4 +23,8 @@ void fn2 () + d = b * c + a; + } + +-/* { dg-final { scan-assembler-times "\.fpu vfp" 1 } } */ ++/* Because we don't know the exact command-line options used to invoke the test ++ we cannot expect these tests to match exactly once. But they must appear at ++ least once. */ ++/* { dg-final { scan-assembler "\.fpu\s+vfp\n" } } */ ++/* { dg-final { scan-assembler "\.fpu\s+neon-vfpv4\n" } } */ +diff --git a/gcc/testsuite/gcc.target/arm/pragma_fpu_attribute.c b/gcc/testsuite/gcc.target/arm/pragma_fpu_attribute.c +index 174be85f3f7..7e63cf53013 100644 +--- a/gcc/testsuite/gcc.target/arm/pragma_fpu_attribute.c ++++ b/gcc/testsuite/gcc.target/arm/pragma_fpu_attribute.c +@@ -22,5 +22,8 @@ uint32_t restored () + return bar(); + } + +-/* { dg-final { scan-assembler-times {\.fpu\s+vfpv4} 1 } } */ +-/* { dg-final { scan-assembler-times {\.fpu\s+vfpv3-d16} 1 } } */ ++/* We can't tell exactly how many times the following tests will match because ++ command-line options may cause additional instances to be generated, but ++ each must be present at least once. */ ++/* { dg-final { scan-assembler {\.fpu\s+vfpv4\n} } } */ ++/* { dg-final { scan-assembler {\.fpu\s+vfpv3-d16\n} } } */ +diff --git a/gcc/testsuite/gcc.target/arm/pragma_fpu_attribute_2.c b/gcc/testsuite/gcc.target/arm/pragma_fpu_attribute_2.c +index add40ddc6b8..398d8fff35c 100644 +--- a/gcc/testsuite/gcc.target/arm/pragma_fpu_attribute_2.c ++++ b/gcc/testsuite/gcc.target/arm/pragma_fpu_attribute_2.c +@@ -25,5 +25,8 @@ uint32_t restored () + return bar(); + } + +-/* { dg-final { scan-assembler-times {\.fpu\s+vfpv4} 1 } } */ +-/* { dg-final { scan-assembler-times {\.fpu\s+vfpv3-d16} 1 } } */ ++/* We can't tell exactly how many times the following tests will match because ++ command-line options may cause additional instances to be generated, but ++ each must be present at least once. */ ++/* { dg-final { scan-assembler {\.fpu\s+vfpv4\n} } } */ ++/* { dg-final { scan-assembler {\.fpu\s+vfpv3-d16\n} } } */ From e30723dc84fbcaf8bdaca59464a4e52f4ad9416a Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 3 Jun 2022 18:55:39 +0000 Subject: [PATCH 0405/2022] armnn-tensorflow: fix various build issues :Release Notes: Drop unnecessary subdir parameter from SRC_URI. Use 4 space indentation for DEPENDS. Drop some useless debug output from do_install() Call armnn scripts from ${S} Use prefix_native instead of prefix. :Detailed Notes: With subdir parameter it creates another armnn directory in ${WORKDIR}: docker-lge @ ~/build/webos/honister/BUILD/work/raspberrypi4_64-webos-linux/armnn-tensorflow $ ls 2.6.2-r0-*/armnn/ 2.6.2-r0-honister/armnn/: Android.bp BuildGuideAndroidNDK.md CMakeLists.txt InstallationViaAptRepository.md README.md cmake docker include python scripts tests Android.mk BuildGuideCrossCompilation.md ContributorGuide.md LICENSE SECURITY.md delegate docs profiling samples src third-party 2.6.2-r0-kirkstone/armnn/: armnn docker-lge @ ~/build/webos/honister/BUILD/work/raspberrypi4_64-webos-linux/armnn-tensorflow $ ls 2.6.2-r0-kirkstone/armnn/armnn Android.bp BuildGuideAndroidNDK.md CMakeLists.txt InstallationViaAptRepository.md README.md cmake docker include python scripts tests Android.mk BuildGuideCrossCompilation.md ContributorGuide.md LICENSE SECURITY.md delegate docs profiling samples src third-party And build with kirkstone then fails to find scripts directory: http://gecko.lge.com/Errors/Details/415390 DEBUG: Executing shell function do_install STAGING_DIR_NATIVE is TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/armnn-tensorflow/2.6.2-r0/recipe-sysroot-native prefix is /usr TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/armnn-tensorflow/2.6.2-r0/temp/run.do_install.742337: 154: TOPDIR/BUILD/work/raspberrypi4_64-webos-linux/armnn-tensorflow/2.6.2-r0/armnn/scripts/generate_tensorflow_protobuf.sh: not found WARNING: exit code 127 from a shell command. Additional benefit is that do_unpack will properly clean armnn with ${S} with cleandirs. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4984] CCC: Various build fixes Change-Id: I0d1ec21cea13423e2a6c5bab0b8a870040bc07b7 --- .../armnn/armnn-tensorflow_2.6.2.bb | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/meta-webos/recipes-upstreamable/armnn/armnn-tensorflow_2.6.2.bb b/meta-webos/recipes-upstreamable/armnn/armnn-tensorflow_2.6.2.bb index 9d61dec1c..3c9db2e3a 100644 --- a/meta-webos/recipes-upstreamable/armnn/armnn-tensorflow_2.6.2.bb +++ b/meta-webos/recipes-upstreamable/armnn/armnn-tensorflow_2.6.2.bb @@ -4,7 +4,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=c7e17cca1ef4230861fb7868e96c387e" SRC_URI = " \ git://github.com/tensorflow/tensorflow.git;branch=r2.6;name=tensorflow;protocol=https \ - git://github.com/ARM-software/armnn.git;branch=branches/armnn_21_11;name=armnn;subdir=${WORKDIR}/armnn;destsuffix=armnn;protocol=https \ + git://github.com/ARM-software/armnn.git;branch=branches/armnn_21_11;name=armnn;destsuffix=git/armnn;protocol=https \ " # Matches v${PV} @@ -14,21 +14,18 @@ SRCREV_armnn = "5e9965cae1cc6162649910f423ebd86001fc1931" SRCREV_FORMAT = "tensorflow" DEPENDS = " \ - protobuf-native \ - flatbuffers \ + protobuf-native \ + flatbuffers \ " S = "${WORKDIR}/git" do_install() { - bbplain "STAGING_DIR_NATIVE is ${STAGING_DIR_NATIVE}" - bbplain "prefix is ${prefix}" - # Install TF sources + build artifacts as reuired by ARMNN install -d ${D}${datadir}/${BPN} # Convert protobuf sources to C sources and install - ${WORKDIR}/armnn/scripts/generate_tensorflow_protobuf.sh ${D}${datadir}/${BPN} ${STAGING_DIR_NATIVE}${prefix} + ${S}/armnn/scripts/generate_tensorflow_protobuf.sh ${D}${datadir}/${BPN} ${STAGING_DIR_NATIVE}${prefix_native} # Install sources as required by ARMNN install -d ${D}${datadir}/${BPN}-lite From 430cd2f542481e71f05c1063f3aa1d5b19166b35 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 3 Jun 2022 19:38:30 +0000 Subject: [PATCH 0406/2022] arm-compute-library=r1 (fix various build issues) :Release Notes: Fix build with gcc-12. Fix build with softfp. Use append with overrides. :Detailed Notes: The fix for build with gcc-12 was already applied in: http://gpro.lge.com/c/webos-pro/meta-lg-webos/+/330062 but it wasn't migrated to this new recipes. Setting the option for SConstruct is very limited and was causing build failure for any machine with call-convention hard as in: http://gecko.lge.com/Errors/Details/415425 TOPDIR/BUILD/work/raspberrypi4-webos-linux-gnueabi/arm-compute-library/21.11-r0/recipe-sysroot/usr/include/gnu/stubs-32.h:7:11: fatal error: gnu/stubs-soft.h: No such file or directory 7 | # include | ^~~~~~~~~~~~~~~~~~ compilation terminated. That's because of this chunk of SConstruct: if (env['os'] == 'android' or env['os'] == 'tizen' or env['os'] == 'webos') and not 'hf' in env['arch']: env.Append(CXXFLAGS = ['-mfloat-abi=softfp']) else: env.Append(CXXFLAGS = ['-mfloat-abi=hard']) It expects to find 'hf' in env['arch'] but for all 32bit arm we were passing just 'arch=armv7a', add 'hf' suffix where needed to fix this issue, but it's still very limited for other possible MACHINEs and their DEFAULTTUNEs. Also add explicit estate=32 to fix build with qemux86: http://gecko.lge.com:8000/Errors/Details/415527 i686-webos-linux-g++ -m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -Wl,-z,relro,-z,now -fstack-protector-strong -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/qemux86-webos-linux/arm-compute-library/21.11-r1/recipe-sysroot -o build/utils/CommonGraphOptions.o -c -Wall -DARCH_ARM -Wextra -pedantic -Wdisabled-optimization -Wformat=2 -Winit-self -Wstrict-overflow=2 -Wswitch-default -std=c++14 -Woverloaded-virtual -Wformat-security -Wctor-dtor-privacy -Wsign-promo -Weffc++ -Wno-overlength-strings -Wlogical-op -Wnoexcept -Wstrict-null-sentinel -fopenmp -fPIC -DENABLE_NEON -DARM_COMPUTE_ENABLE_NEON -Wno-ignored-attributes -DENABLE_FP16_KERNELS -DENABLE_FP32_KERNELS -DENABLE_QASYMM8_KERNELS -DENABLE_QASYMM8_SIGNED_KERNELS -DENABLE_QSYMM16_KERNELS -DENABLE_INTEGER_KERNELS -DENABLE_NHWC_KERNELS -DENABLE_NCHW_KERNELS -O3 -fPIC -O2 -m64 -D_GLIBCXX_USE_NANOSLEEP -DARM_COMPUTE_CPP_SCHEDULER=1 -DARM_COMPUTE_OPENMP_SCHEDULER=1 -DARM_COMPUTE_GRAPH_ENABLED -DARM_COMPUTE_OPENCL_ENABLED -DEMBEDDED_KERNELS -Iinclude -I. -I. utils/CommonGraphOptions.cpp cc1plus: sorry, unimplemented: 64-bit mode not compiled in Because the SConstruct only sets 32 for 'v7a' in arch: # Validate and define state if env['estate'] == 'auto': if 'v7a' in env['arch']: env['estate'] = '32' else: env['estate'] = '64' so -m64 ends in command line even when we want to build 32bit qemux86. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4984] CCC: Various build fixes Change-Id: I01db5382f405d588b3f515c23e34693ad5ac17e5 --- .../0001-Fix-build-with-newer-gcc.patch | 60 +++++++++++++++++++ .../0001-webos-build-support.patch | 0 .../arm-compute-library_21.11.bb | 13 ++-- 3 files changed, 67 insertions(+), 6 deletions(-) create mode 100644 meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library/0001-Fix-build-with-newer-gcc.patch rename meta-webos/recipes-upstreamable/arm-compute-library/{files => arm-compute-library}/0001-webos-build-support.patch (100%) diff --git a/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library/0001-Fix-build-with-newer-gcc.patch b/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library/0001-Fix-build-with-newer-gcc.patch new file mode 100644 index 000000000..54e756e62 --- /dev/null +++ b/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library/0001-Fix-build-with-newer-gcc.patch @@ -0,0 +1,60 @@ +From 9327d45d0ef51ff82fb60539497e332f7133d33d Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Fri, 3 Jun 2022 19:19:57 +0000 +Subject: [PATCH] Fix build with newer gcc + +* fixes: + http://gecko.lge.com/Errors/Details/415423 + +In file included from utils/CommonGraphOptions.h:28, + from utils/CommonGraphOptions.cpp:24: +./utils/command_line/CommandLineParser.h: In member function 'void arm_compute::utils::CommandLineParser::parse(int, char**)': +./utils/command_line/CommandLineParser.h:142:55: error: 'strlen' was not declared in this scope + 142 | int pos = (equal_sign == -1) ? strlen(argv[i]) : equal_sign; + | ^~~~~~ +./utils/command_line/CommandLineParser.h:37:1: note: 'strlen' is defined in header ''; did you forget to '#include '? + 36 | #include + +++ |+#include + 37 | #include +In file included from utils/Utils.h:39, + from utils/Utils.cpp:24: +include/libnpy/npy.hpp: In function 'std::string npy::pyparse::write_tuple(const std::vector&)': +include/libnpy/npy.hpp:298:42: error: 'ostream_iterator' is not a member of 'std' + 298 | std::copy(v.begin(), v.end()-1, std::ostream_iterator(ss, delimiter.c_str())); + | ^~~~~~~~~~~~~~~~ +include/libnpy/npy.hpp:37:1: note: 'std::ostream_iterator' is defined in header ''; did you forget to '#include '? + 36 | #include + +++ |+#include + 37 | #include +include/libnpy/npy.hpp:298:60: error: expected primary-expression before '>' token + 298 | std::copy(v.begin(), v.end()-1, std::ostream_iterator(ss, delimiter.c_str())); + | ^ +--- + include/libnpy/npy.hpp | 1 + + utils/command_line/CommandLineParser.h | 1 + + 2 files changed, 2 insertions(+) + +diff --git a/include/libnpy/npy.hpp b/include/libnpy/npy.hpp +index 24244ca27..7c9e5792f 100644 +--- a/include/libnpy/npy.hpp ++++ b/include/libnpy/npy.hpp +@@ -27,6 +27,7 @@ + #include + #include + #include ++#include + #include + #include + #include +diff --git a/utils/command_line/CommandLineParser.h b/utils/command_line/CommandLineParser.h +index e8fabc425..fa486b47a 100644 +--- a/utils/command_line/CommandLineParser.h ++++ b/utils/command_line/CommandLineParser.h +@@ -27,6 +27,7 @@ + #include "Option.h" + #include "arm_compute/core/utils/misc/Utility.h" + ++#include + #include + #include + #include diff --git a/meta-webos/recipes-upstreamable/arm-compute-library/files/0001-webos-build-support.patch b/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library/0001-webos-build-support.patch similarity index 100% rename from meta-webos/recipes-upstreamable/arm-compute-library/files/0001-webos-build-support.patch rename to meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library/0001-webos-build-support.patch diff --git a/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb b/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb index f3ea05f30..c22c542c9 100644 --- a/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb +++ b/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb @@ -11,16 +11,16 @@ SRC_URI = " \ git://github.com/ARM-software/ComputeLibrary.git;branch=${SRCBRANCH};protocol=https \ file://0001-webos-build-support.patch \ file://arm-compute-library.pc.in \ + file://0001-Fix-build-with-newer-gcc.patch \ " -PR = "r0" +PR = "r1" S = "${WORKDIR}/git" inherit scons ARM_INSTRUCTION_SET = "arm" -#TUNE_CCARGS = "-marm -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -rdynamic -funsafe-math-optimizations" PACKAGECONFIG ?= "cppthreads opencl gles embed openmp examples tests" @@ -37,10 +37,11 @@ PACKAGECONFIG[examples] = "examples=1,examples=0" # Specify any options you want to pass to scons using EXTRA_OESCONS: EXTRA_OESCONS = "build=cross_compile os=linux toolchain_prefix=' ' extra_cxx_flags='-fPIC -O2' ${PACKAGECONFIG_CONFARGS}" -EXTRA_OESCONS += "${@bb.utils.contains('TARGET_ARCH', 'aarch64', 'arch=arm64-v8a neon=1', '', d)}" -EXTRA_OESCONS += "${@bb.utils.contains('TARGET_ARCH', 'arm', 'os=webos arch=armv7a neon=1', '', d)}" -EXTRA_OESCONS += "${@bb.utils.contains('TARGET_ARCH', 'i686', 'arch=x86_32 neon=0', '', d)}" -EXTRA_OESCONS += "${@bb.utils.contains('TARGET_ARCH', 'x86_64', 'arch=x86_64 neon=0', '', d)}" + +EXTRA_OESCONS:append:aarch64 = " arch=arm64-v8a neon=1" +EXTRA_OESCONS:append:arm = " os=webos neon=1 arch=armv7a${@ '-hf' if (d.getVar('TUNE_CCARGS_MFLOAT') == 'hard') else ''}" +EXTRA_OESCONS:append:x86 = " arch=x86_32 neon=0 estate=32" +EXTRA_OESCONS:append:x86-64 = " arch=x86_64 neon=0" TARGET_CC_ARCH += "${LDFLAGS}" From 3579736c957d681af0aabeb79e4d7909b69c242a Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 3 Jun 2022 19:57:32 +0000 Subject: [PATCH 0407/2022] tensorflow-lite=r1 (fix various build issues) :Release Notes: Prevent fetching additional dependencies during do_configure. :Detailed Notes: Don't use MACHINE variable just to set TUNE_CCARGS (which are already set correctly for each MACHINE by tune files. Use install instead of cp. CMake will try to download bunch of additional dependencies: grep -i download.step BUILD/work/raspberrypi4_64-webos-linux/tensorflow-lite/2.6.2-r0/temp/log.do_configure [2/9] Performing download step (download, verify and extract) for 'clog' [2/9] Performing download step (download, verify and extract) for 'cpuinfo' [2/9] Performing download step (download, verify and extract) for 'fp16' [2/9] Performing download step (download, verify and extract) for 'fxdiv' [2/9] Performing download step (download, verify and extract) for 'pthreadpool' [2/9] Performing download step (git clone) for 'psimd' And with newer Yocto which prevents this silly behavior by restricting network access only to do_fetch task this fails with: http://gecko.lge.com/Errors/Details/415381 CMake Error at tools/cmake/modules/abseil-cpp.cmake:40 (add_subdirectory): add_subdirectory given source "TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r0/build/abseil-cpp" which is not an existing directory. Call Stack (most recent call first): tools/cmake/modules/Findabsl.cmake:18 (include) CMakeLists.txt:129 (find_package) CMake Error at tools/cmake/modules/eigen.cmake:102 (add_subdirectory): The source directory TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r0/build/eigen does not contain a CMakeLists.txt file. Call Stack (most recent call first): tools/cmake/modules/Findeigen.cmake:18 (include) CMakeLists.txt:130 (find_package) CMake Error at tools/cmake/modules/Findeigen.cmake:21 (get_target_property): get_target_property() called with non-existent target "eigen". Call Stack (most recent call first): CMakeLists.txt:130 (find_package) -- Performing Test FARMHASH_HAS_BUILTIN_EXPECT -- Performing Test FARMHASH_HAS_BUILTIN_EXPECT - Success CMake Error at tools/cmake/modules/flatbuffers.cmake:40 (add_subdirectory): add_subdirectory given source "TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r0/build/flatbuffers" which is not an existing directory. Call Stack (most recent call first): tools/cmake/modules/Findflatbuffers.cmake:18 (include) CMakeLists.txt:133 (find_package) CMake Error at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r0/recipe-sysroot-native/usr/share/cmake-3.23/Modules/ExternalProject.cmake:2776 (message): No download info given for 'flatbuffers-flatc' and its source directory: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r0/build/flatbuffers is not an existing non-empty directory. Please specify one of: * SOURCE_DIR with an existing non-empty directory * DOWNLOAD_COMMAND * URL * GIT_REPOSITORY * SVN_REPOSITORY * HG_REPOSITORY * CVS_REPOSITORY and CVS_MODULE Call Stack (most recent call first): TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r0/recipe-sysroot-native/usr/share/cmake-3.23/Modules/ExternalProject.cmake:3640 (_ep_add_download_command) tools/cmake/modules/flatbuffers.cmake:56 (ExternalProject_Add) tools/cmake/modules/Findflatbuffers.cmake:18 (include) CMakeLists.txt:133 (find_package) CMake Error at tools/cmake/modules/Findflatbuffers.cmake:21 (get_target_property): get_target_property() called with non-existent target "flatbuffers". Call Stack (most recent call first): CMakeLists.txt:133 (find_package) CMake Error at tools/cmake/modules/neon2sse.cmake:35 (add_subdirectory): add_subdirectory given source "TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r0/build/neon2sse" which is not an existing directory. Call Stack (most recent call first): tools/cmake/modules/Findneon2sse.cmake:18 (include) CMakeLists.txt:135 (find_package) CMake Error at tools/cmake/modules/Findneon2sse.cmake:21 (get_target_property): get_target_property() called with non-existent target "NEON_2_SSE". Call Stack (most recent call first): CMakeLists.txt:135 (find_package) CMake Error at tools/cmake/modules/xnnpack.cmake:43 (add_subdirectory): add_subdirectory given source "TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r0/build/xnnpack" which is not an existing directory. Call Stack (most recent call first): tools/cmake/modules/Findxnnpack.cmake:16 (include) CMakeLists.txt:321 (find_package) :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4984] CCC: Various build fixes Change-Id: I989e01206f853c458fcfa908606b0f0fa98d2993 --- ...image-benchmark_model-exclude-option.patch | 5 +- ...e-external-delegate-in-benchmarktool.patch | 10 + .../0003-Fix-return-type-issues.patch | 585 ++++++++++++++++++ .../tensorflowlite.pc.in | 0 .../tensorflow-lite/tensorflow-lite_2.6.2.bb | 122 ++-- 5 files changed, 677 insertions(+), 45 deletions(-) rename meta-webos/recipes-upstreamable/tensorflow-lite/{files => tensorflow-lite}/0001-remove-label_image-benchmark_model-exclude-option.patch (94%) rename meta-webos/recipes-upstreamable/tensorflow-lite/{files => tensorflow-lite}/0002-enable-external-delegate-in-benchmarktool.patch (82%) create mode 100644 meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0003-Fix-return-type-issues.patch rename meta-webos/recipes-upstreamable/tensorflow-lite/{files => tensorflow-lite}/tensorflowlite.pc.in (100%) diff --git a/meta-webos/recipes-upstreamable/tensorflow-lite/files/0001-remove-label_image-benchmark_model-exclude-option.patch b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0001-remove-label_image-benchmark_model-exclude-option.patch similarity index 94% rename from meta-webos/recipes-upstreamable/tensorflow-lite/files/0001-remove-label_image-benchmark_model-exclude-option.patch rename to meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0001-remove-label_image-benchmark_model-exclude-option.patch index fadbb95d5..779e16e9e 100644 --- a/meta-webos/recipes-upstreamable/tensorflow-lite/files/0001-remove-label_image-benchmark_model-exclude-option.patch +++ b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0001-remove-label_image-benchmark_model-exclude-option.patch @@ -1,4 +1,4 @@ -From dd3130a64c88faab57a2613861b1f689aa444a30 Mon Sep 17 00:00:00 2001 +From 332e70dcc147a3a86548ed504037a78e06733027 Mon Sep 17 00:00:00 2001 From: "kijoong.lee" Date: Wed, 27 Oct 2021 04:13:32 +0000 Subject: [PATCH] remove label_image benchmark_model exclude option @@ -34,6 +34,3 @@ index 5de9ab30086..cdddc596367 100644 ${TFLITE_BENCHMARK_SRCS} ) target_compile_options(benchmark_model --- -2.17.1 - diff --git a/meta-webos/recipes-upstreamable/tensorflow-lite/files/0002-enable-external-delegate-in-benchmarktool.patch b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0002-enable-external-delegate-in-benchmarktool.patch similarity index 82% rename from meta-webos/recipes-upstreamable/tensorflow-lite/files/0002-enable-external-delegate-in-benchmarktool.patch rename to meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0002-enable-external-delegate-in-benchmarktool.patch index 1626c1707..939e6f91c 100644 --- a/meta-webos/recipes-upstreamable/tensorflow-lite/files/0002-enable-external-delegate-in-benchmarktool.patch +++ b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0002-enable-external-delegate-in-benchmarktool.patch @@ -1,3 +1,13 @@ +From c3a9e0bdc45c9cc9cba9bbf48c0301f90d9ff02b Mon Sep 17 00:00:00 2001 +From: "kijoong.lee" +Date: Wed, 27 Oct 2021 04:13:32 +0000 +Subject: [PATCH] enable external delegate in benchmarktool + +--- + tensorflow/lite/CMakeLists.txt | 9 +++++++++ + tensorflow/lite/tools/benchmark/CMakeLists.txt | 6 ++++++ + 2 files changed, 15 insertions(+) + diff --git a/tensorflow/lite/CMakeLists.txt b/tensorflow/lite/CMakeLists.txt index f5cc9b97924..ada4f099d03 100644 --- a/tensorflow/lite/CMakeLists.txt diff --git a/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0003-Fix-return-type-issues.patch b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0003-Fix-return-type-issues.patch new file mode 100644 index 000000000..8cc0f4300 --- /dev/null +++ b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0003-Fix-return-type-issues.patch @@ -0,0 +1,585 @@ +From ba192298c0a4db132205bf64f03dfbcc90f05b8d Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Fri, 3 Jun 2022 21:34:38 +0000 +Subject: [PATCH] Fix return-type issues + +* fixes: + http://gecko.lge.com/Errors/Details/415449 + +FAILED: CMakeFiles/tensorflow-lite.dir/delegates/gpu/common/precision.cc.o +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/recipe-sysroot-native/usr/bin/arm-distromllib32-linux-gnueabi/arm-distromllib32-linux-gnueabi-g++ -DEIGEN_MPL2_ONLY -DNOMINMAX=1 -DPTHREADPOOL_NO_DEPRECATED_API=1 -Dtensorflow_lite_EXPORTS -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/schema -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/opencl_headers -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/vulkan_headers/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/opengl_headers/api -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/egl_headers/api -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/pthreadpool-source/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/FP16-source/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/xnnpack/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/cpuinfo-source -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/eigen -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/neon2sse -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/abseil-cpp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/farmhash/src -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/flatbuffers/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/gemmlowp/public -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/gemmlowp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/ruy -marm -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1=/usr/src/debug/lib32-tensorflow-lite/2.6.2-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1=/usr/src/debug/lib32-tensorflow-lite/2.6.2-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/recipe-sysroot-native= -fvisibility-inlines-hidden -DNDEBUG -fPIC -DCL_DELEGATE_NO_GL -DEGL_NO_X11 -DTFLITE_BUILD_WITH_XNNPACK_DELEGATE -pthread -std=gnu++14 -MD -MT CMakeFiles/tensorflow-lite.dir/delegates/gpu/common/precision.cc.o -MF CMakeFiles/tensorflow-lite.dir/delegates/gpu/common/precision.cc.o.d -o CMakeFiles/tensorflow-lite.dir/delegates/gpu/common/precision.cc.o -c TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/common/precision.cc +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/common/precision.cc: In function 'std::string tflite::gpu::ToString(CalculationsPrecision)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/common/precision.cc:30:1: error: control reaches end of non-void function [-Werror=return-type] + 30 | } + | ^ + +FAILED: CMakeFiles/tensorflow-lite.dir/delegates/gpu/cl/cl_program.cc.o +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/recipe-sysroot-native/usr/bin/arm-distromllib32-linux-gnueabi/arm-distromllib32-linux-gnueabi-g++ -DEIGEN_MPL2_ONLY -DNOMINMAX=1 -DPTHREADPOOL_NO_DEPRECATED_API=1 -Dtensorflow_lite_EXPORTS -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/schema -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/opencl_headers -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/vulkan_headers/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/opengl_headers/api -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/egl_headers/api -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/pthreadpool-source/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/FP16-source/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/xnnpack/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/cpuinfo-source -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/eigen -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/neon2sse -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/abseil-cpp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/farmhash/src -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/flatbuffers/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/gemmlowp/public -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/gemmlowp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/ruy -marm -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1=/usr/src/debug/lib32-tensorflow-lite/2.6.2-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1=/usr/src/debug/lib32-tensorflow-lite/2.6.2-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/recipe-sysroot-native= -fvisibility-inlines-hidden -DNDEBUG -fPIC -DCL_DELEGATE_NO_GL -DEGL_NO_X11 -DTFLITE_BUILD_WITH_XNNPACK_DELEGATE -pthread -std=gnu++14 -MD -MT CMakeFiles/tensorflow-lite.dir/delegates/gpu/cl/cl_program.cc.o -MF CMakeFiles/tensorflow-lite.dir/delegates/gpu/cl/cl_program.cc.o.d -o CMakeFiles/tensorflow-lite.dir/delegates/gpu/cl/cl_program.cc.o -c TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_program.cc +In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot/usr/include/CL/cl.h:20, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/opencl_wrapper.h:19, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_device.h:22, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_context.h:19, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_program.h:23, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_program.cc:16: +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot/usr/include/CL/cl_version.h:22:104: note: '#pragma message: cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)' + 22 | #pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)") + | ^ +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_program.cc: In function 'std::string tflite::gpu::cl::{anonymous}::CompilerOptionToString(const tflite::gpu::GpuInfo&, tflite::gpu::CompilerOptions)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_program.cc:111:1: error: control reaches end of non-void function [-Werror=return-type] + 111 | } + | ^ + +FAILED: CMakeFiles/tensorflow-lite.dir/delegates/gpu/common/gpu_info.cc.o +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/recipe-sysroot-native/usr/bin/arm-distromllib32-linux-gnueabi/arm-distromllib32-linux-gnueabi-g++ -DEIGEN_MPL2_ONLY -DNOMINMAX=1 -DPTHREADPOOL_NO_DEPRECATED_API=1 -Dtensorflow_lite_EXPORTS -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/schema -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/opencl_headers -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/vulkan_headers/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/opengl_headers/api -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/egl_headers/api -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/pthreadpool-source/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/FP16-source/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/xnnpack/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/cpuinfo-source -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/eigen -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/neon2sse -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/abseil-cpp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/farmhash/src -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/flatbuffers/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/gemmlowp/public -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/gemmlowp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/ruy -marm -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1=/usr/src/debug/lib32-tensorflow-lite/2.6.2-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1=/usr/src/debug/lib32-tensorflow-lite/2.6.2-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/recipe-sysroot-native= -fvisibility-inlines-hidden -DNDEBUG -fPIC -DCL_DELEGATE_NO_GL -DEGL_NO_X11 -DTFLITE_BUILD_WITH_XNNPACK_DELEGATE -pthread -std=gnu++14 -MD -MT CMakeFiles/tensorflow-lite.dir/delegates/gpu/common/gpu_info.cc.o -MF CMakeFiles/tensorflow-lite.dir/delegates/gpu/common/gpu_info.cc.o.d -o CMakeFiles/tensorflow-lite.dir/delegates/gpu/common/gpu_info.cc.o -c TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/common/gpu_info.cc +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/common/gpu_info.cc: In member function 'int tflite::gpu::AppleInfo::GetComputeUnitsCount() const': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/common/gpu_info.cc:307:1: error: control reaches end of non-void function [-Werror=return-type] + 307 | } + | ^ + +FAILED: CMakeFiles/tensorflow-lite.dir/delegates/gpu/common/model_builder_helper.cc.o +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/recipe-sysroot-native/usr/bin/arm-distromllib32-linux-gnueabi/arm-distromllib32-linux-gnueabi-g++ -DEIGEN_MPL2_ONLY -DNOMINMAX=1 -DPTHREADPOOL_NO_DEPRECATED_API=1 -Dtensorflow_lite_EXPORTS -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/schema -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/opencl_headers -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/vulkan_headers/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/opengl_headers/api -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/egl_headers/api -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/pthreadpool-source/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/FP16-source/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/xnnpack/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/cpuinfo-source -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/eigen -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/neon2sse -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/abseil-cpp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/farmhash/src -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/flatbuffers/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/gemmlowp/public -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/gemmlowp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/ruy -marm -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1=/usr/src/debug/lib32-tensorflow-lite/2.6.2-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1=/usr/src/debug/lib32-tensorflow-lite/2.6.2-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/recipe-sysroot-native= -fvisibility-inlines-hidden -DNDEBUG -fPIC -DCL_DELEGATE_NO_GL -DEGL_NO_X11 -DTFLITE_BUILD_WITH_XNNPACK_DELEGATE -pthread -std=gnu++14 -MD -MT CMakeFiles/tensorflow-lite.dir/delegates/gpu/common/model_builder_helper.cc.o -MF CMakeFiles/tensorflow-lite.dir/delegates/gpu/common/model_builder_helper.cc.o.d -o CMakeFiles/tensorflow-lite.dir/delegates/gpu/common/model_builder_helper.cc.o -c TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/common/model_builder_helper.cc +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/common/model_builder_helper.cc: In function 'absl::lts_20210324::Status tflite::gpu::IsActivationSupported(TfLiteFusedActivation)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/common/model_builder_helper.cc:397:1: error: control reaches end of non-void function [-Werror=return-type] + 397 | } + | ^ + +FAILED: CMakeFiles/tensorflow-lite.dir/delegates/gpu/cl/tensor.cc.o +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/recipe-sysroot-native/usr/bin/arm-distromllib32-linux-gnueabi/arm-distromllib32-linux-gnueabi-g++ -DEIGEN_MPL2_ONLY -DNOMINMAX=1 -DPTHREADPOOL_NO_DEPRECATED_API=1 -Dtensorflow_lite_EXPORTS -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/schema -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/opencl_headers -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/vulkan_headers/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/opengl_headers/api -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/egl_headers/api -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/pthreadpool-source/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/FP16-source/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/xnnpack/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/cpuinfo-source -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/eigen -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/neon2sse -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/abseil-cpp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/farmhash/src -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/flatbuffers/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/gemmlowp/public -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/gemmlowp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/ruy -marm -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1=/usr/src/debug/lib32-tensorflow-lite/2.6.2-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1=/usr/src/debug/lib32-tensorflow-lite/2.6.2-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/recipe-sysroot-native= -fvisibility-inlines-hidden -DNDEBUG -fPIC -DCL_DELEGATE_NO_GL -DEGL_NO_X11 -DTFLITE_BUILD_WITH_XNNPACK_DELEGATE -pthread -std=gnu++14 -MD -MT CMakeFiles/tensorflow-lite.dir/delegates/gpu/cl/tensor.cc.o -MF CMakeFiles/tensorflow-lite.dir/delegates/gpu/cl/tensor.cc.o.d -o CMakeFiles/tensorflow-lite.dir/delegates/gpu/cl/tensor.cc.o -c TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/tensor.cc +In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot/usr/include/CL/cl.h:20, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/opencl_wrapper.h:19, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_device.h:22, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_context.h:19, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_command_queue.h:23, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/tensor.h:22, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/tensor.cc:16: +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot/usr/include/CL/cl_version.h:22:104: note: '#pragma message: cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)' + 22 | #pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)") + | ^ +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/tensor.cc: In member function 'tflite::gpu::int3 tflite::gpu::cl::Tensor::GetFullTensorRegion() const': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/tensor.cc:465:1: error: control reaches end of non-void function [-Werror=return-type] + 465 | } + | ^ + +FAILED: CMakeFiles/tensorflow-lite.dir/delegates/gpu/cl/environment.cc.o +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/recipe-sysroot-native/usr/bin/arm-distromllib32-linux-gnueabi/arm-distromllib32-linux-gnueabi-g++ -DEIGEN_MPL2_ONLY -DNOMINMAX=1 -DPTHREADPOOL_NO_DEPRECATED_API=1 -Dtensorflow_lite_EXPORTS -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/schema -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/opencl_headers -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/vulkan_headers/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/opengl_headers/api -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/egl_headers/api -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/pthreadpool-source/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/FP16-source/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/xnnpack/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/cpuinfo-source -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/eigen -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/neon2sse -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/abseil-cpp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/farmhash/src -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/flatbuffers/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/gemmlowp/public -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/gemmlowp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/ruy -marm -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1=/usr/src/debug/lib32-tensorflow-lite/2.6.2-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1=/usr/src/debug/lib32-tensorflow-lite/2.6.2-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/recipe-sysroot-native= -fvisibility-inlines-hidden -DNDEBUG -fPIC -DCL_DELEGATE_NO_GL -DEGL_NO_X11 -DTFLITE_BUILD_WITH_XNNPACK_DELEGATE -pthread -std=gnu++14 -MD -MT CMakeFiles/tensorflow-lite.dir/delegates/gpu/cl/environment.cc.o -MF CMakeFiles/tensorflow-lite.dir/delegates/gpu/cl/environment.cc.o.d -o CMakeFiles/tensorflow-lite.dir/delegates/gpu/cl/environment.cc.o -c TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/environment.cc +In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot/usr/include/CL/cl.h:20, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/opencl_wrapper.h:19, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_device.h:22, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_context.h:19, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_command_queue.h:23, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/environment.h:19, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/environment.cc:16: +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot/usr/include/CL/cl_version.h:22:104: note: '#pragma message: cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)' + 22 | #pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)") + | ^ +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/environment.cc: In function 'bool tflite::gpu::cl::{anonymous}::IsGpuSupportsPrecision(const tflite::gpu::GpuInfo&, tflite::gpu::CalculationsPrecision)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/environment.cc:82:1: error: control reaches end of non-void function [-Werror=return-type] + 82 | } + | ^ + +FAILED: CMakeFiles/tensorflow-lite.dir/delegates/gpu/common/operations.cc.o +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/recipe-sysroot-native/usr/bin/arm-distromllib32-linux-gnueabi/arm-distromllib32-linux-gnueabi-g++ -DEIGEN_MPL2_ONLY -DNOMINMAX=1 -DPTHREADPOOL_NO_DEPRECATED_API=1 -Dtensorflow_lite_EXPORTS -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/schema -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/opencl_headers -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/vulkan_headers/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/opengl_headers/api -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/egl_headers/api -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/pthreadpool-source/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/FP16-source/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/xnnpack/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/cpuinfo-source -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/eigen -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/neon2sse -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/abseil-cpp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/farmhash/src -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/flatbuffers/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/gemmlowp/public -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/gemmlowp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/ruy -marm -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1=/usr/src/debug/lib32-tensorflow-lite/2.6.2-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1=/usr/src/debug/lib32-tensorflow-lite/2.6.2-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/recipe-sysroot-native= -fvisibility-inlines-hidden -DNDEBUG -fPIC -DCL_DELEGATE_NO_GL -DEGL_NO_X11 -DTFLITE_BUILD_WITH_XNNPACK_DELEGATE -pthread -std=gnu++14 -MD -MT CMakeFiles/tensorflow-lite.dir/delegates/gpu/common/operations.cc.o -MF CMakeFiles/tensorflow-lite.dir/delegates/gpu/common/operations.cc.o.d -o CMakeFiles/tensorflow-lite.dir/delegates/gpu/common/operations.cc.o -c TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/common/operations.cc +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/common/operations.cc: In function 'std::string tflite::gpu::ToString(OperationType)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/common/operations.cc:214:1: error: control reaches end of non-void function [-Werror=return-type] + 214 | } + | ^ + +FAILED: CMakeFiles/tensorflow-lite.dir/delegates/gpu/cl/cl_arguments.cc.o +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/recipe-sysroot-native/usr/bin/arm-distromllib32-linux-gnueabi/arm-distromllib32-linux-gnueabi-g++ -DEIGEN_MPL2_ONLY -DNOMINMAX=1 -DPTHREADPOOL_NO_DEPRECATED_API=1 -Dtensorflow_lite_EXPORTS -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/schema -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/opencl_headers -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/vulkan_headers/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/opengl_headers/api -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/egl_headers/api -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/pthreadpool-source/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/FP16-source/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/xnnpack/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/cpuinfo-source -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/eigen -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/neon2sse -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/abseil-cpp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/farmhash/src -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/flatbuffers/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/gemmlowp/public -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/gemmlowp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/ruy -marm -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1=/usr/src/debug/lib32-tensorflow-lite/2.6.2-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1=/usr/src/debug/lib32-tensorflow-lite/2.6.2-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/recipe-sysroot-native= -fvisibility-inlines-hidden -DNDEBUG -fPIC -DCL_DELEGATE_NO_GL -DEGL_NO_X11 -DTFLITE_BUILD_WITH_XNNPACK_DELEGATE -pthread -std=gnu++14 -MD -MT CMakeFiles/tensorflow-lite.dir/delegates/gpu/cl/cl_arguments.cc.o -MF CMakeFiles/tensorflow-lite.dir/delegates/gpu/cl/cl_arguments.cc.o.d -o CMakeFiles/tensorflow-lite.dir/delegates/gpu/cl/cl_arguments.cc.o -c TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_arguments.cc +In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot/usr/include/CL/cl.h:20, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/opencl_wrapper.h:19, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_device.h:22, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_context.h:19, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_arguments.h:23, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_arguments.cc:16: +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot/usr/include/CL/cl_version.h:22:104: note: '#pragma message: cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)' + 22 | #pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)") + | ^ +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_arguments.cc: In function 'std::string tflite::gpu::cl::{anonymous}::GetImageModifier(tflite::gpu::AccessType)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_arguments.cc:137:1: error: control reaches end of non-void function [-Werror=return-type] + 137 | } + | ^ + +FAILED: CMakeFiles/tensorflow-lite.dir/delegates/gpu/cl/serialization.cc.o +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/recipe-sysroot-native/usr/bin/arm-distromllib32-linux-gnueabi/arm-distromllib32-linux-gnueabi-g++ -DEIGEN_MPL2_ONLY -DNOMINMAX=1 -DPTHREADPOOL_NO_DEPRECATED_API=1 -Dtensorflow_lite_EXPORTS -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/schema -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/opencl_headers -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/vulkan_headers/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/opengl_headers/api -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/egl_headers/api -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/pthreadpool-source/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/FP16-source/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/xnnpack/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/cpuinfo-source -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/eigen -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/neon2sse -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/abseil-cpp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/farmhash/src -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/flatbuffers/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/gemmlowp/public -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/gemmlowp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/ruy -marm -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1=/usr/src/debug/lib32-tensorflow-lite/2.6.2-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1=/usr/src/debug/lib32-tensorflow-lite/2.6.2-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/recipe-sysroot-native= -fvisibility-inlines-hidden -DNDEBUG -fPIC -DCL_DELEGATE_NO_GL -DEGL_NO_X11 -DTFLITE_BUILD_WITH_XNNPACK_DELEGATE -pthread -std=gnu++14 -MD -MT CMakeFiles/tensorflow-lite.dir/delegates/gpu/cl/serialization.cc.o -MF CMakeFiles/tensorflow-lite.dir/delegates/gpu/cl/serialization.cc.o.d -o CMakeFiles/tensorflow-lite.dir/delegates/gpu/cl/serialization.cc.o -c TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc +In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot/usr/include/CL/cl.h:20, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/opencl_wrapper.h:19, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_device.h:22, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/cl_context.h:19, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.h:20, + from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc:16: +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot/usr/include/CL/cl_version.h:22:104: note: '#pragma message: cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)' + 22 | #pragma message("cl_version.h: CL_TARGET_OPENCL_VERSION is not defined. Defaulting to 300 (OpenCL 3.0)") + | ^ +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc: In function 'tflite::gpu::AccessType tflite::gpu::{anonymous}::ToEnum(tflite::gpu::data::AccessType)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc:171:1: error: control reaches end of non-void function [-Werror=return-type] + 171 | } + | ^ +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc: In function 'tflite::gpu::data::DataType tflite::gpu::{anonymous}::ToFB(tflite::gpu::DataType)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc:77:1: error: control reaches end of non-void function [-Werror=return-type] + 77 | } + | ^ +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc: In function 'tflite::gpu::data::MemoryType tflite::gpu::{anonymous}::ToFB(tflite::gpu::MemoryType)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc:88:1: error: control reaches end of non-void function [-Werror=return-type] + 88 | } + | ^ +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc: In function 'tflite::gpu::DataType tflite::gpu::{anonymous}::ToEnum(tflite::gpu::data::DataType)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc:160:1: error: control reaches end of non-void function [-Werror=return-type] + 160 | } + | ^ +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc: In function 'tflite::gpu::MemoryType tflite::gpu::{anonymous}::ToEnum(tflite::gpu::data::MemoryType)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc:182:1: error: control reaches end of non-void function [-Werror=return-type] + 182 | } + | ^ +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc: In function 'tflite::gpu::data::LinearStorageType tflite::gpu::{anonymous}::ToFB(tflite::gpu::LinearStorageType)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc:97:1: error: control reaches end of non-void function [-Werror=return-type] + 97 | } + | ^ +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc: In function 'tflite::gpu::LinearStorageType tflite::gpu::{anonymous}::ToEnum(tflite::gpu::data::LinearStorageType)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc:191:1: error: control reaches end of non-void function [-Werror=return-type] + 191 | } + | ^ +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc: In function 'tflite::gpu::data::TensorStorageType tflite::gpu::{anonymous}::ToFB(tflite::gpu::TensorStorageType)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc:116:1: error: control reaches end of non-void function [-Werror=return-type] + 116 | } + | ^ +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc: In function 'tflite::gpu::TensorStorageType tflite::gpu::{anonymous}::ToEnum(tflite::gpu::data::TensorStorageType)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc:210:1: error: control reaches end of non-void function [-Werror=return-type] + 210 | } + | ^ +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc: In function 'tflite::gpu::data::CalculationsPrecision tflite::gpu::{anonymous}::ToFB(tflite::gpu::CalculationsPrecision)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc:236:1: error: control reaches end of non-void function [-Werror=return-type] + 236 | } + | ^ +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc: In function 'tflite::gpu::CalculationsPrecision tflite::gpu::{anonymous}::ToEnum(tflite::gpu::data::CalculationsPrecision)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc:279:1: error: control reaches end of non-void function [-Werror=return-type] + 279 | } + | ^ +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc: In function 'tflite::gpu::CompilerOptions tflite::gpu::{anonymous}::ToEnum(tflite::gpu::data::CompilerOptions)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc:311:1: error: control reaches end of non-void function [-Werror=return-type] + 311 | } + | ^ +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc: In function 'tflite::gpu::TensorToGrid tflite::gpu::{anonymous}::ToEnum(tflite::gpu::data::TensorToGrid)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc:294:1: error: control reaches end of non-void function [-Werror=return-type] + 294 | } + | ^ +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc: In function 'tflite::gpu::data::CompilerOptions tflite::gpu::{anonymous}::ToFB(tflite::gpu::CompilerOptions)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc:268:1: error: control reaches end of non-void function [-Werror=return-type] + 268 | } + | ^ +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc: In function 'tflite::gpu::data::TensorToGrid tflite::gpu::{anonymous}::ToFB(tflite::gpu::TensorToGrid)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/cl/serialization.cc:251:1: eror: control reaches end of non-void function [-Werror=return-type] + 251 | } + | ^ + +FAILED: CMakeFiles/tensorflow-lite.dir/delegates/gpu/common/model_builder.cc.o +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/recipe-sysroot-native/usr/bin/arm-distromllib32-linux-gnueabi/arm-distromllib32-linux-gnueabi-g++ -DEIGEN_MPL2_ONLY -DNOMINMAX=1 -DPTHREADPOOL_NO_DEPRECATED_API=1 -Dtensorflow_lite_EXPORTS -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/schema -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/opencl_headers -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/vulkan_headers/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/opengl_headers/api -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/egl_headers/api -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/pthreadpool-source/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/FP16-source/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/xnnpack/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/cpuinfo-source -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/eigen -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/neon2sse -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/abseil-cpp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/farmhash/src -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/flatbuffers/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/gemmlowp/public -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/gemmlowp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/build/ruy -marm -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1=/usr/src/debug/lib32-tensorflow-lite/2.6.2-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1=/usr/src/debug/lib32-tensorflow-lite/2.6.2-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/lib32-recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/recipe-sysroot-native= -fvisibility-inlines-hidden -DNDEBUG -fPIC -DCL_DELEGATE_NO_GL -DEGL_NO_X11 -DTFLITE_BUILD_WITH_XNNPACK_DELEGATE -pthread -std=gnu++14 -MD -MT CMakeFiles/tensorflow-lite.dir/delegates/gpu/common/model_builder.cc.o -MF CMakeFiles/tensorflow-lite.dir/delegates/gpu/common/model_builder.cc.o.d -o CMakeFiles/tensorflow-lite.dir/delegates/gpu/common/model_builder.cc.o -c TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/common/model_builder.cc +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/common/model_builder.cc: In member function 'virtual absl::lts_20210324::Status tflite::gpu::{anonymous}::LSTMOperationParser::IsSupported(const TfLiteContext*, const TfLiteNode*, const TfLiteRegistration*)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/common/model_builder.cc:1230:3: error: control reaches end of non-void function [-Werror=return-type] + 1230 | } + | ^ +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/common/model_builder.cc: In member function 'virtual absl::lts_20210324::Status tflite::gpu::{anonymous}::LSTMOperationParser::Parse(const TfLiteNode*, const TfLiteRegistration*, tflite::gpu::GraphFloat32*, tflite::gpu::ObjectReader*)': +TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-tensorflow-lite/2.6.2-r1/git/tensorflow/lite/delegates/gpu/common/model_builder.cc:1243:3: error: control reaches end of non-void function [-Werror=return-type] + 1243 | } + | ^ +--- + tensorflow/lite/delegates/gpu/api.cc | 2 ++ + .../lite/delegates/gpu/cl/cl_arguments.cc | 2 ++ + .../lite/delegates/gpu/cl/cl_program.cc | 2 ++ + .../lite/delegates/gpu/cl/environment.cc | 2 ++ + .../lite/delegates/gpu/cl/serialization.cc | 30 +++++++++++++++++++ + tensorflow/lite/delegates/gpu/cl/tensor.cc | 2 ++ + .../lite/delegates/gpu/common/gpu_info.cc | 2 ++ + .../delegates/gpu/common/model_builder.cc | 4 +++ + .../gpu/common/model_builder_helper.cc | 2 ++ + .../lite/delegates/gpu/common/operations.cc | 2 ++ + .../lite/delegates/gpu/common/precision.cc | 2 ++ + tensorflow/lite/delegates/gpu/common/shape.h | 2 ++ + .../delegates/gpu/common/task/tensor_desc.cc | 20 +++++++++++++ + 13 files changed, 74 insertions(+) + +diff --git a/tensorflow/lite/delegates/gpu/api.cc b/tensorflow/lite/delegates/gpu/api.cc +index 9b16a6a4596..d0fba22b188 100644 +--- a/tensorflow/lite/delegates/gpu/api.cc ++++ b/tensorflow/lite/delegates/gpu/api.cc +@@ -95,6 +95,8 @@ bool IsObjectPresent(ObjectType type, const TensorObject& obj) { + return absl::holds_alternative(obj); + case ObjectType::UNKNOWN: + return false; ++ default: ++ __builtin_unreachable (); + } + } + +diff --git a/tensorflow/lite/delegates/gpu/cl/cl_arguments.cc b/tensorflow/lite/delegates/gpu/cl/cl_arguments.cc +index 335ea4f63d7..adbc7e3a5cf 100644 +--- a/tensorflow/lite/delegates/gpu/cl/cl_arguments.cc ++++ b/tensorflow/lite/delegates/gpu/cl/cl_arguments.cc +@@ -133,6 +133,8 @@ std::string GetImageModifier(AccessType access) { + return "__write_only"; + case AccessType::READ_WRITE: + return "__read_write"; ++ default: ++ __builtin_unreachable (); + } + } + +diff --git a/tensorflow/lite/delegates/gpu/cl/cl_program.cc b/tensorflow/lite/delegates/gpu/cl/cl_program.cc +index 621e6106ce1..540cc2ec2d3 100644 +--- a/tensorflow/lite/delegates/gpu/cl/cl_program.cc ++++ b/tensorflow/lite/delegates/gpu/cl/cl_program.cc +@@ -107,6 +107,8 @@ std::string CompilerOptionToString(const GpuInfo& gpu_info, + return "-cl-std=CL2.0"; + case CompilerOptions::kCl30: + return "-cl-std=CL3.0"; ++ default: ++ __builtin_unreachable (); + } + } + +diff --git a/tensorflow/lite/delegates/gpu/cl/environment.cc b/tensorflow/lite/delegates/gpu/cl/environment.cc +index 0fa88573f28..2296c21e080 100644 +--- a/tensorflow/lite/delegates/gpu/cl/environment.cc ++++ b/tensorflow/lite/delegates/gpu/cl/environment.cc +@@ -78,6 +78,8 @@ bool IsGpuSupportsPrecision(const GpuInfo& gpu_info, + return gpu_info.SupportsFP16(); + case CalculationsPrecision::F32: + return true; ++ default: ++ __builtin_unreachable (); + } + } + +diff --git a/tensorflow/lite/delegates/gpu/cl/serialization.cc b/tensorflow/lite/delegates/gpu/cl/serialization.cc +index c71fc9c1b75..9abe41f5b13 100644 +--- a/tensorflow/lite/delegates/gpu/cl/serialization.cc ++++ b/tensorflow/lite/delegates/gpu/cl/serialization.cc +@@ -73,6 +73,8 @@ data::DataType ToFB(DataType type) { + return data::DataType::INT64; + case DataType::UNKNOWN: + return data::DataType::UNKNOWN; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -84,6 +86,8 @@ data::MemoryType ToFB(MemoryType type) { + return data::MemoryType::GLOBAL; + case MemoryType::LOCAL: + return data::MemoryType::LOCAL; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -93,6 +97,8 @@ data::LinearStorageType ToFB(LinearStorageType type) { + return data::LinearStorageType::BUFFER; + case LinearStorageType::TEXTURE_2D: + return data::LinearStorageType::TEXTURE_2D; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -112,6 +118,8 @@ data::TensorStorageType ToFB(TensorStorageType type) { + return data::TensorStorageType::SINGLE_TEXTURE_2D; + case TensorStorageType::UNKNOWN: + return data::TensorStorageType::UNKNOWN; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -156,6 +164,8 @@ DataType ToEnum(data::DataType type) { + return DataType::INT64; + case data::DataType::UNKNOWN: + return DataType::UNKNOWN; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -167,6 +177,8 @@ AccessType ToEnum(data::AccessType type) { + return AccessType::WRITE; + case data::AccessType::READ_WRITE: + return AccessType::READ_WRITE; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -178,6 +190,8 @@ MemoryType ToEnum(data::MemoryType type) { + return MemoryType::GLOBAL; + case data::MemoryType::LOCAL: + return MemoryType::LOCAL; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -187,6 +201,8 @@ LinearStorageType ToEnum(data::LinearStorageType type) { + return LinearStorageType::BUFFER; + case data::LinearStorageType::TEXTURE_2D: + return LinearStorageType::TEXTURE_2D; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -206,6 +222,8 @@ TensorStorageType ToEnum(data::TensorStorageType type) { + return TensorStorageType::SINGLE_TEXTURE_2D; + case data::TensorStorageType::UNKNOWN: + return TensorStorageType::UNKNOWN; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -232,6 +250,8 @@ data::CalculationsPrecision ToFB(CalculationsPrecision type) { + return data::CalculationsPrecision::F32_F16; + case CalculationsPrecision::F16: + return data::CalculationsPrecision::F16; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -247,6 +267,8 @@ data::TensorToGrid ToFB(TensorToGrid type) { + return data::TensorToGrid::WB_TO_X_H_TO_Y_D_TO_Z; + case TensorToGrid::kBToX_YIs1_ZIs1: + return data::TensorToGrid::B_TO_X_Y_IS_1_Z_IS_1; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -264,6 +286,8 @@ data::CompilerOptions ToFB(CompilerOptions type) { + return data::CompilerOptions::CL_2_0; + case CompilerOptions::kCl30: + return data::CompilerOptions::CL_3_0; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -275,6 +299,8 @@ CalculationsPrecision ToEnum(data::CalculationsPrecision type) { + return CalculationsPrecision::F32_F16; + case data::CalculationsPrecision::F16: + return CalculationsPrecision::F16; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -290,6 +316,8 @@ TensorToGrid ToEnum(data::TensorToGrid type) { + return TensorToGrid::kWBToX_HToY_DToZ; + case data::TensorToGrid::B_TO_X_Y_IS_1_Z_IS_1: + return TensorToGrid::kBToX_YIs1_ZIs1; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -307,6 +335,8 @@ CompilerOptions ToEnum(data::CompilerOptions type) { + return CompilerOptions::kCl20; + case data::CompilerOptions::CL_3_0: + return CompilerOptions::kCl30; ++ default: ++ __builtin_unreachable (); + } + } + +diff --git a/tensorflow/lite/delegates/gpu/cl/tensor.cc b/tensorflow/lite/delegates/gpu/cl/tensor.cc +index 301ca6f59a8..c6686aa4834 100644 +--- a/tensorflow/lite/delegates/gpu/cl/tensor.cc ++++ b/tensorflow/lite/delegates/gpu/cl/tensor.cc +@@ -461,6 +461,8 @@ int3 Tensor::GetFullTensorRegion() const { + return {shape_.w * shape_.b * shape_.d, shape_.h, 1}; + case TensorStorageType::UNKNOWN: + return {-1, -1, -1}; ++ default: ++ __builtin_unreachable (); + } + } + +diff --git a/tensorflow/lite/delegates/gpu/common/gpu_info.cc b/tensorflow/lite/delegates/gpu/common/gpu_info.cc +index b02df988a0d..06b09ed31fe 100644 +--- a/tensorflow/lite/delegates/gpu/common/gpu_info.cc ++++ b/tensorflow/lite/delegates/gpu/common/gpu_info.cc +@@ -303,6 +303,8 @@ int AppleInfo::GetComputeUnitsCount() const { + return 4; + case AppleGpu::kUnknown: + return 1; ++ default: ++ __builtin_unreachable (); + } + } + +diff --git a/tensorflow/lite/delegates/gpu/common/model_builder.cc b/tensorflow/lite/delegates/gpu/common/model_builder.cc +index 0a73ca29a36..de8d32183d3 100644 +--- a/tensorflow/lite/delegates/gpu/common/model_builder.cc ++++ b/tensorflow/lite/delegates/gpu/common/model_builder.cc +@@ -1226,6 +1226,8 @@ class LSTMOperationParser : public TFLiteOperationParser { + CheckInputsConstsOutputs(context, tflite_node, /*runtime_inputs=*/3, + /*const_inputs=*/2, /*outputs=*/4)); + return CheckBasicParameters(tf_options); ++ default: ++ __builtin_unreachable (); + } + } + +@@ -1239,6 +1241,8 @@ class LSTMOperationParser : public TFLiteOperationParser { + return ParseFull(tflite_node, registration, graph, reader, tf_options); + case kTfLiteLSTMBasicKernel: + return ParseBasic(tflite_node, registration, graph, reader, tf_options); ++ default: ++ __builtin_unreachable (); + } + } + +diff --git a/tensorflow/lite/delegates/gpu/common/model_builder_helper.cc b/tensorflow/lite/delegates/gpu/common/model_builder_helper.cc +index 4f67495152c..b045916c810 100644 +--- a/tensorflow/lite/delegates/gpu/common/model_builder_helper.cc ++++ b/tensorflow/lite/delegates/gpu/common/model_builder_helper.cc +@@ -393,6 +393,8 @@ absl::Status IsActivationSupported(TfLiteFusedActivation fused_activation) { + + // Do not add default; we want compilation error rather than run-time + // error. ++ default: ++ __builtin_unreachable (); + } + } + +diff --git a/tensorflow/lite/delegates/gpu/common/operations.cc b/tensorflow/lite/delegates/gpu/common/operations.cc +index 6320d019658..e24cd857d49 100644 +--- a/tensorflow/lite/delegates/gpu/common/operations.cc ++++ b/tensorflow/lite/delegates/gpu/common/operations.cc +@@ -210,6 +210,8 @@ std::string ToString(enum OperationType op) { + return "transpose"; + case OperationType::UNKNOWN: + return "unknown_operation"; ++ default: ++ __builtin_unreachable (); + } + } + +diff --git a/tensorflow/lite/delegates/gpu/common/precision.cc b/tensorflow/lite/delegates/gpu/common/precision.cc +index 7dc619eb112..c6d10776928 100644 +--- a/tensorflow/lite/delegates/gpu/common/precision.cc ++++ b/tensorflow/lite/delegates/gpu/common/precision.cc +@@ -26,6 +26,8 @@ std::string ToString(CalculationsPrecision precision) { + return "CalculationsPrecision::F32"; + case CalculationsPrecision::F16: + return "CalculationsPrecision::F16"; ++ default: ++ __builtin_unreachable (); + } + } + +diff --git a/tensorflow/lite/delegates/gpu/common/shape.h b/tensorflow/lite/delegates/gpu/common/shape.h +index 541446d89d8..884fdba50ff 100644 +--- a/tensorflow/lite/delegates/gpu/common/shape.h ++++ b/tensorflow/lite/delegates/gpu/common/shape.h +@@ -620,6 +620,8 @@ auto DispatchByLayout(Layout type, F f) + return f.template operator()(); + case Layout::UNKNOWN: + return f.template operator()(); ++ default: ++ __builtin_unreachable (); + } + } + +diff --git a/tensorflow/lite/delegates/gpu/common/task/tensor_desc.cc b/tensorflow/lite/delegates/gpu/common/task/tensor_desc.cc +index ef9db12ec4a..28e84ed8f3a 100644 +--- a/tensorflow/lite/delegates/gpu/common/task/tensor_desc.cc ++++ b/tensorflow/lite/delegates/gpu/common/task/tensor_desc.cc +@@ -51,6 +51,8 @@ std::string AddressModeToCLSampler(AddressMode address_mode) { + return "smp_none"; + case AddressMode::kZero: + return "smp_zero"; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -72,6 +74,8 @@ std::string ToString(TensorStorageType type) { + return "TensorStorageType::SINGLE_TEXTURE_2D"; + case TensorStorageType::IMAGE_BUFFER: + return "TensorStorageType::IMAGE_BUFFER"; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -418,6 +422,8 @@ std::string TensorDescriptor::Read( + } + case TensorStorageType::UNKNOWN: + return ""; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -464,6 +470,8 @@ std::string TensorDescriptor::Write( + } + case TensorStorageType::UNKNOWN: + return ""; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -558,6 +566,8 @@ absl::Status TensorDescriptor::PerformGetHandleSelector( + return absl::OkStatus(); + case TensorStorageType::UNKNOWN: + return absl::UnavailableError("Unknown type"); ++ default: ++ __builtin_unreachable (); + } + } + +@@ -580,6 +590,8 @@ std::string TensorDescriptor::StorageTypeToAddressType() const { + return "int4"; + case TensorStorageType::UNKNOWN: + return ""; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -704,6 +716,8 @@ std::string TensorDescriptor::GetGlobalAddressNoDeclaration( + coords[2]); + case TensorStorageType::UNKNOWN: + return "error"; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -908,6 +922,8 @@ bool TensorDescriptor::SupportsZeroClamp(const Axis& axis) const { + return axis == Axis::WIDTH || axis == Axis::HEIGHT; + case TensorStorageType::TEXTURE_3D: + return axis == Axis::WIDTH || axis == Axis::HEIGHT || axis == Axis::DEPTH; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -923,6 +939,8 @@ bool TensorDescriptor::CanReadOutOfBorder(const Axis& axis) const { + case TensorStorageType::SINGLE_TEXTURE_2D: + case TensorStorageType::TEXTURE_ARRAY: + return true; ++ default: ++ __builtin_unreachable (); + } + } + +@@ -956,6 +974,8 @@ int GetLinearIndex(const TensorDescriptor& desc, const BHWDC& shape, int b, + sub_c; // HWBDC + case TensorStorageType::UNKNOWN: + return -1; ++ default: ++ __builtin_unreachable (); + } + } + diff --git a/meta-webos/recipes-upstreamable/tensorflow-lite/files/tensorflowlite.pc.in b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/tensorflowlite.pc.in similarity index 100% rename from meta-webos/recipes-upstreamable/tensorflow-lite/files/tensorflowlite.pc.in rename to meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/tensorflowlite.pc.in diff --git a/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb index c3f38b838..4a6f1ec8f 100644 --- a/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb +++ b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb @@ -10,12 +10,39 @@ DPV = "${@'.'.join(d.getVar('PV').split('.')[0:3])}" # Since they tag off of something resembling ${PV}, use it. # Matches v${PV} -SRCREV = "c2363d6d025981c661f8cbecf4c73ca7fbf38caf" +SRCREV_tensorflow = "c2363d6d025981c661f8cbecf4c73ca7fbf38caf" +SRCREV_abseil-cpp = "997aaf3a28308eba1b9156aa35ab7bca9688e9f6" +# v1.12.0 +SRCREV_flatbuffers = "6df40a2471737b27271bdd9b900ab5f3aec746c7" +SRCREV_eigen = "7b35638ddb99a0298c5d3450de506a8e8e0203d3" +SRCREV_xnnpack = "476eb84d6a8e6f8249d5584d30759c6fbdbf791d" +SRCREV_neon2sse = "1200fe90bb174a6224a525ee60148671a786a71f" +SRCREV_fft2d = "c6fd2dd6d21397baa6653139d31d84540d5449a2" +SRCREV_farmhash = "816a4ae622e964763ca0862d9dbd19324a1eaf45" +SRCREV_ruy = "e6c1b8dc8a8b00ee74e7268aac8b18d7260ab1ce" +SRCREV_gemmlowp = "fda83bdc38b118cc6b56753bd540caa49e570745" +SRCREV_vulkan-headers = "ec2db85225ab410bc6829251bef6c578aaed5868" +SRCREV_egl-headers = "649981109e263b737e7735933c90626c29a306f2" +SRCREV_opengl-headers = "0cb0880d91581d34f96899c86fc1bf35627b4b81" +SRCREV_FORMAT = "tensorflow" SRC_URI = " \ - git://github.com/tensorflow/tensorflow.git;branch=r${BPV};protocol=https \ + git://github.com/tensorflow/tensorflow.git;branch=r${BPV};protocol=https;name=tensorflow \ + git://github.com/abseil/abseil-cpp.git;branch=lts_2021_03_24;protocol=https;destsuffix=git/abseil-cpp;name=abseil-cpp \ + git://github.com/google/flatbuffers;branch=master;protocol=https;destsuffix=git/flatbuffers;name=flatbuffers \ + git://gitlab.com/libeigen/eigen;branch=master;protocol=https;destsuffix=git/eigen;name=eigen \ + git://github.com/google/XNNPACK;branch=master;protocol=https;destsuffix=git/xnnpack;name=xnnpack \ + git://github.com/intel/ARM_NEON_2_x86_SSE;branch=master;protocol=https;destsuffix=git/neon2sse;name=neon2sse \ + git://github.com/petewarden/OouraFFT;branch=master;protocol=https;destsuffix=git/fft2d;name=fft2d \ + git://github.com/google/farmhash;branch=master;protocol=https;destsuffix=git/farmhash;name=farmhash \ + git://github.com/google/ruy;branch=master;protocol=https;destsuffix=git/ruy;name=ruy \ + git://github.com/google/gemmlowp;branch=master;protocol=https;destsuffix=git/gemmlowp;name=gemmlowp \ + git://github.com/KhronosGroup/Vulkan-Headers;branch=master;protocol=https;destsuffix=git/vulkan_headers;name=vulkan-headers \ + git://github.com/KhronosGroup/EGL-Registry;branch=main;protocol=https;destsuffix=git/egl_headers;name=egl-headers \ + git://github.com/KhronosGroup/OpenGL-Registry;branch=main;protocol=https;destsuffix=git/opengl_headers;name=opengl-headers \ file://0001-remove-label_image-benchmark_model-exclude-option.patch \ file://0002-enable-external-delegate-in-benchmarktool.patch \ + file://0003-Fix-return-type-issues.patch \ file://tensorflowlite.pc.in \ " @@ -29,7 +56,7 @@ SRC_URI[model-mobv1.sha256sum] = "2f8054076cf655e1a73778a49bd8fd0306d32b290b7e57 inherit cmake -PR = "r0" +PR = "r1" S = "${WORKDIR}/git" DEPENDS += " \ @@ -40,55 +67,66 @@ DEPENDS += " \ ARM_INSTRUCTION_SET = "arm" -TFLITE_TUNE_CCARGS := "${@bb.utils.contains('TARGET_ARCH', 'aarch64', '-funsafe-math-optimizations', '${TUNE_CCARGS} -funsafe-math-optimizations', d)}" -TUNE_CCARGS = "${TFLITE_TUNE_CCARGS}" -TUNE_CCARGS += "${@bb.utils.contains('MACHINE', 'raspberrypi4', '-marm -mfpu=neon-vfpv4 -mfloat-abi=hard -march=armv7-a', '', d)}" -TUNE_CCARGS += "${@bb.utils.contains('MACHINE', 'o22', '-marm -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -rdynamic', '', d)}" -TUNE_CCARGS += "${@bb.utils.contains('MACHINE', 'o20', '-marm -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables', '', d)}" - -do_generate_toolchain_file:append() { - +do_generate_toolchain_file:append:arm() { # XNNPACK does not recognize this when CMAKE_SYSTEM_PROCESSOR is arm. # Instead, you need to change it to armv7. - if ${@bb.utils.contains('TARGET_ARCH', 'arm', 'true', 'false', d)}; then - sed -i 's:CMAKE_SYSTEM_PROCESSOR arm:CMAKE_SYSTEM_PROCESSOR armv7:g' ${WORKDIR}/toolchain.cmake - fi - - # NOTE: Werror=reture-type is recognized as an error when there is no return value from a non void function. - # However, if this option is included, a build error occurred in tensorflow lite and was omitted. - sed -i 's:-Werror=return-type::g' ${WORKDIR}/toolchain.cmake + sed -i 's:CMAKE_SYSTEM_PROCESSOR arm:CMAKE_SYSTEM_PROCESSOR armv7:g' ${WORKDIR}/toolchain.cmake } +# tensorflow-lite doesn't respect TUNE_CCARGS correctly and adds its own +# flags like -march=armv8.2-a+fp16+dotprod which then cause: +# rpi4: cc1: warning: switch '-mcpu=cortex-a72' conflicts with '-march=armv8.2-a+fp16+dotprod' switch +# rpi3: cc1: warning: switch '-mcpu=armv8-a' conflicts with '-march=armv8.2-a' switch +# and: +# http://gecko.lge.com/Errors/Details/415456 +# tensorflow-lite/2.6.2-r1/build/xnnpack/src/f16-gemm/gen-inc/1x16inc-minmax-aarch64-neonfp16arith-ld32.S: Assembler messages: +# tensorflow-lite/2.6.2-r1/build/xnnpack/src/f16-gemm/gen-inc/1x16inc-minmax-aarch64-neonfp16arith-ld32.S:64: Error: selected processor does not support `fmla v16.8h,v20.8h,v0.h[0]' +# -mcpu=cortex-a72+crc+crypto is used for raspberrypi4-64 with dunfell +# -mcpu=cortex-a72 with kirkstone and newer where crypto is disabled since oe-core commit 2568d537087adb0b592aa250bf628a7b48c3a9d3 +MCPU_OPTS_TO_REMOVE = "-mcpu=cortex-a72+crc+crypto -mcpu=cortex-a72 -mcpu=cortex-a53+crc -mcpu=cortex-a53" +TUNE_CCARGS:remove = "${MCPU_OPTS_TO_REMOVE}" + OECMAKE_SOURCEPATH = "${S}/tensorflow/lite" PACKAGECONFIG ?= "xnnpack" -PACKAGECONFIG += "${@bb.utils.contains('MACHINE', 'o22', 'gpu', '', d)}" -PACKAGECONFIG[xnnpack] = " \ - -DTFLITE_ENABLE_XNNPACK=ON, \ - -DTFLITE_ENABLE_XNNPACK=OFF \ -" - -PACKAGECONFIG[gpu] = " \ - -DTFLITE_ENABLE_GPU=ON, \ - -DTFLITE_ENABLE_GPU=OFF, \ - opencl-headers opencl-icd-loader \ -" +PACKAGECONFIG[xnnpack] = "-DTFLITE_ENABLE_XNNPACK=ON,-DTFLITE_ENABLE_XNNPACK=OFF" +PACKAGECONFIG[gpu] = "-DTFLITE_ENABLE_GPU=ON,-DTFLITE_ENABLE_GPU=OFF,opencl-headers opencl-icd-loader" + +# There are many external dependencies fetched in do_configure if not found: +# tensorflow/lite/tools/cmake/modules/Findgoogletest.cmake:OverridableFetchContent_GetProperties(googletest) +# tensorflow/lite/tools/cmake/modules/Findnsync.cmake:OverridableFetchContent_GetProperties(nsync) +# tensorflow/lite/tools/cmake/modules/Findre2.cmake:OverridableFetchContent_GetProperties(re2) +# tensorflow/lite/tools/cmake/modules/abseil-cpp.cmake:OverridableFetchContent_GetProperties(abseil-cpp) +# tensorflow/lite/tools/cmake/modules/egl_headers.cmake:OverridableFetchContent_GetProperties(egl_headers) +# tensorflow/lite/tools/cmake/modules/eigen.cmake:OverridableFetchContent_GetProperties(eigen) +# tensorflow/lite/tools/cmake/modules/farmhash.cmake:OverridableFetchContent_GetProperties(farmhash) +# tensorflow/lite/tools/cmake/modules/fft2d.cmake:OverridableFetchContent_GetProperties(fft2d) +# tensorflow/lite/tools/cmake/modules/flatbuffers.cmake:OverridableFetchContent_GetProperties(flatbuffers) +# tensorflow/lite/tools/cmake/modules/fp16_headers.cmake:OverridableFetchContent_GetProperties(fp16_headers) +# tensorflow/lite/tools/cmake/modules/gemmlowp.cmake:OverridableFetchContent_GetProperties(gemmlowp) +# tensorflow/lite/tools/cmake/modules/neon2sse.cmake:OverridableFetchContent_GetProperties(neon2sse) +# tensorflow/lite/tools/cmake/modules/opencl_headers.cmake:OverridableFetchContent_GetProperties(opencl_headers) +# tensorflow/lite/tools/cmake/modules/opengl_headers.cmake:OverridableFetchContent_GetProperties(opengl_headers) +# tensorflow/lite/tools/cmake/modules/ruy.cmake:OverridableFetchContent_GetProperties(ruy) +# tensorflow/lite/tools/cmake/modules/vulkan_headers.cmake:OverridableFetchContent_GetProperties(vulkan_headers) +# tensorflow/lite/tools/cmake/modules/xnnpack.cmake:OverridableFetchContent_GetProperties(xnnpack) +do_configure:prepend() { + for i in abseil-cpp flatbuffers eigen xnnpack neon2sse fft2d farmhash ruy gemmlowp vulkan_headers egl_headers opengl_headers; do + cp -ra ${S}/$i ${B}/$i + done +} -EXTRA_OECMAKE = " -DBUILD_SHARED_LIBS=ON" +EXTRA_OECMAKE = "-DBUILD_SHARED_LIBS=ON" AIF_INSTALL_DIR = "${datadir}/aif" do_install() { # install libraries install -d ${D}/${libdir} + install -m 0644 $(find . -name "*.so") ${D}${libdir} - cd ${B} - cp \ - $(find . -name "*.so") \ - ${D}${libdir} - - ln -s -r ${D}/${libdir}/libtensorflow-lite.so ${D}/${libdir}/libtensorflowlite.so + ln -snf libtensorflow-lite.so ${D}/${libdir}/libtensorflowlite.so # install benchmark_model install -d ${D}${AIF_INSTALL_DIR} @@ -98,16 +136,18 @@ do_install() { # install header files install -d ${D}${includedir}/tensorflow/lite cd ${S}/tensorflow/lite - cp --parents \ - $(find . -name "*.h*") \ - ${D}${includedir}/tensorflow/lite + for h in $(find . -name "*.h*"); do + [ -d ${D}${includedir}/tensorflow/lite/$(dirname $h) ] || install -d ${D}${includedir}/tensorflow/lite/$(dirname $h) + install -m 0644 $h ${D}${includedir}/tensorflow/lite/$(dirname $h) + done + cd - # install version.h from core for armnn install -d ${D}${includedir}/tensorflow/core/public - cp ${S}/tensorflow/core/public/version.h ${D}${includedir}/tensorflow/core/public + install -m 0644 ${S}/tensorflow/core/public/version.h ${D}${includedir}/tensorflow/core/public # install xnnpack.h from xnnpack for libtorch - cp ${B}/xnnpack/include/xnnpack.h ${D}${includedir} + install -m 0644 ${B}/xnnpack/include/xnnpack.h ${D}${includedir} # install pkgconfig file install -d ${D}${libdir}/pkgconfig From 1858f7890938935ce08d8ccfce9d10bdec3768d2 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 3 Jun 2022 22:31:29 +0000 Subject: [PATCH 0408/2022] armnn=r1 (inherit pkgconfig and ignore array-bounds and deprecated-declarations issues) :Release Notes: :Detailed Notes: pkgconfig fixes: http://gecko.lge.com/Errors/Details/415457 -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) CMake Error at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r0/recipe-sysroot-native/usr/share/cmake-3.23/Modules/FindPkgConfig.cmake:659 (message): pkg-config tool not found Call Stack (most recent call first): TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r0/recipe-sysroot-native/usr/share/cmake-3.23/Modules/FindPkgConfig.cmake:825 (_pkg_check_modules_internal) delegate/CMakeLists.txt:77 (pkg_check_modules) array-bounds fixes: http://gecko.lge.com/Errors/Details/415459 FAILED: CMakeFiles/armnnUtils.dir/src/armnnUtils/Transpose.cpp.o TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/recipe-sysroot-native/usr/bin/arm-distromllib32-linux-gnueabi/arm-distromllib32-linux-gnueabi-g++ -DARMCOMPUTECL_ENABLED -DARMCOMPUTENEON_ENABLED -DARMNNREF_ENABLED -DARMNN_TFLITE_DELEGATE -DARMNN_TF_LITE_DELEGATE -DARMNN_TF_LITE_PARSER -DDYNAMIC_BACKEND_BUILD_DIR=\"TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/build\" -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/profiling -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends -isystem TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/third-party -isystem TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot -mthumb -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1=/usr/src/debug/lib32-armnn/21.11-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1=/usr/src/debug/lib32-armnn/21.11-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/recipe-sysroot-native= -fvisibility-inlines-hidden -fopenmp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr -std=c++14 -Wall -Wextra -Werror -Wold-style-cast -Wno-missing-braces -Wconversion -Wsign-conversion -Wno-psabi -DNDEBUG -DNDEBUG -O3 -fPIC -MD -MT CMakeFiles/armnnUtils.dir/src/armnnUtils/Transpose.cpp.o -MF CMakeFiles/armnnUtils.dir/src/armnnUtils/Transpose.cpp.o.d -o CMakeFiles/armnnUtils.dir/src/armnnUtils/Transpose.cpp.o -c TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Transpose.cpp In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include/armnn/Types.hpp:7, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include/armnn/Tensor.hpp:11, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Transpose.cpp:6: In static member function 'static constexpr _Tp& std::__array_traits<_Tp, _Nm>::_S_ref(const _Tp (&)[_Nm], std::size_t) [with _Tp = unsigned int; unsigned int _Nm = 5]', inlined from 'std::array<_Tp, _Nm>::value_type& std::array<_Tp, _Nm>::operator[](size_type) [with _Tp = unsigned int; unsigned int _Nm = 5]' at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/array:209:25, inlined from 'void {anonymous}::TransposeLoop::Unroll(size_type, const unsigned char*, unsigned char*, const unsigned char*, unsigned char*, size_t)' at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Transpose.cpp:83:50, inlined from 'void {anonymous}::TransposeLoop::Unroll(size_type, const unsigned char*, unsigned char*, const unsigned char*, unsigned char*, size_t)' at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Transpose.cpp:80:23, inlined from 'void {anonymous}::TransposeLoop::Unroll(size_type, const unsigned char*, unsigned char*, const unsigned char*, unsigned char*, size_t)' at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Transpose.cpp:80:23, inlined from 'void {anonymous}::TransposeLoop::Unroll(size_type, const unsigned char*, unsigned char*, const unsigned char*, unsigned char*, size_t)' at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Transpose.cpp:80:23, inlined from 'void {anonymous}::TransposeLoop::Unroll(size_type, const unsigned char*, unsigned char*, const unsigned char*, unsigned char*, size_t)' at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Transpose.cpp:80:23, inlined from 'void {anonymous}::TransposeLoop::Unroll(size_type, const unsigned char*, unsigned char*, const unsigned char*, unsigned char*, size_t)' at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Transpose.cpp:80:23, inlined from 'void {anonymous}::TransposeLoop::Unroll(const void*, void*, size_t)' at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Transpose.cpp:55:15, inlined from 'void armnnUtils::Transpose(const armnn::TensorShape&, const armnn::PermutationVector&, const void*, void*, size_t)' at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Transpose.cpp:123:45: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/array:61:36: error: array subscript 5 is above array bounds of 'std::__array_traits::_Type' {aka 'const unsigned int [5]'} [-Werror=array-bounds] 61 | { return const_cast<_Tp&>(__t[__n]); } | ~~~^ TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Transpose.cpp: In function 'void armnnUtils::Transpose(const armnn::TensorShape&, const armnn::PermutationVector&, const void*, void*, size_t)': TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Transpose.cpp:123:37: note: while referencing '' 123 | TransposeLoop(srcShape, mappings).Unroll(src, dst, dataTypeSize); | ^ FAILED: CMakeFiles/armnnUtils.dir/src/armnnUtils/Permute.cpp.o TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/recipe-sysroot-native/usr/bin/arm-distromllib32-linux-gnueabi/arm-distromllib32-linux-gnueabi-g++ -DARMCOMPUTECL_ENABLED -DARMCOMPUTENEON_ENABLED -DARMNNREF_ENABLED -DARMNN_TFLITE_DELEGATE -DARMNN_TF_LITE_DELEGATE -DARMNN_TF_LITE_PARSER -DDYNAMIC_BACKEND_BUILD_DIR=\"TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/build\" -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/profiling -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends -isystem TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/third-party -isystem TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot -mthumb -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1=/usr/src/debug/lib32-armnn/21.11-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1=/usr/src/debug/lib32-armnn/21.11-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/recipe-sysroot-native= -fvisibility-inlines-hidden -fopenmp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr -std=c++14 -Wall -Wextra -Werror -Wold-style-cast -Wno-missing-braces -Wconversion -Wsign-conversion -Wno-psabi -DNDEBUG -DNDEBUG -O3 -fPIC -MD -MT CMakeFiles/armnnUtils.dir/src/armnnUtils/Permute.cpp.o -MF CMakeFiles/armnnUtils.dir/src/armnnUtils/Permute.cpp.o.d -o CMakeFiles/armnnUtils.dir/src/armnnUtils/Permute.cpp.o -c TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Permute.cpp In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include/armnn/Types.hpp:7, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include/armnn/Tensor.hpp:11, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Permute.cpp:6: In static member function 'static constexpr _Tp& std::__array_traits<_Tp, _Nm>::_S_ref(const _Tp (&)[_Nm], std::size_t) [with _Tp = unsigned int; unsigned int _Nm = 5]', inlined from 'std::array<_Tp, _Nm>::value_type& std::array<_Tp, _Nm>::operator[](size_type) [with _Tp = unsigned int; unsigned int _Nm = 5]' at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/array:209:25, inlined from 'void {anonymous}::PermuteLoop::Unroll(size_type, const unsigned char*, unsigned char*, const unsigned char*, unsigned char*, size_t)' at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Permute.cpp:83:50, inlined from 'void {anonymous}::PermuteLoop::Unroll(size_type, const unsigned char*, unsigned char*, const unsigned char*, unsigned char*, size_t)' at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Permute.cpp:80:23, inlined from 'void {anonymous}::PermuteLoop::Unroll(size_type, const unsigned char*, unsigned char*, const unsigned char*, unsigned char*, size_t)' at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Permute.cpp:80:23, inlined from 'void {anonymous}::PermuteLoop::Unroll(size_type, const unsigned char*, unsigned char*, const unsigned char*, unsigned char*, size_t)' at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Permute.cpp:80:23, inlined from 'void {anonymous}::PermuteLoop::Unroll(size_type, const unsigned char*, unsigned char*, const unsigned char*, unsigned char*, size_t)' at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Permute.cpp:80:23, inlined from 'void {anonymous}::PermuteLoop::Unroll(size_type, const unsigned char*, unsigned char*, const unsigned char*, unsigned char*, size_t)' at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Permute.cpp:80:23, inlined from 'void {anonymous}::PermuteLoop::Unroll(const void*, void*, size_t)' at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Permute.cpp:55:15, inlined from 'void armnnUtils::Permute(const armnn::TensorShape&, const armnn::PermutationVector&, const void*, void*, size_t)' at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Permute.cpp:134:43: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/array:61:36: error: array subscript 5 is above array bounds of 'std::__array_traits::_Type' {aka 'const unsigned int [5]'} [-Werror=array-bounds] 61 | { return const_cast<_Tp&>(__t[__n]); } | ~~~^ TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Permute.cpp: In function 'void armnnUtils::Permute(const armnn::TensorShape&, const armnn::PermutationVector&, const void*, void*, size_t)': TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils/Permute.cpp:134:35: note: while referencing '' 134 | PermuteLoop(dstShape, mappings).Unroll(src, dst, dataTypeSize); | ^ deprecated-declarations fixes: http://gecko.lge.com/Errors/Details/415464 FAILED: src/backends/reference/workloads/CMakeFiles/armnnRefBackendWorkloads.dir/ElementwiseFunction.cpp.o TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/recipe-sysroot-native/usr/bin/arm-distromllib32-linux-gnueabi/arm-distromllib32-linux-gnueabi-g++ -DARMCOMPUTECL_ENABLED -DARMCOMPUTENEON_ENABLED -DARMNNREF_ENABLED -DARMNN_TFLITE_DELEGATE -DARMNN_TF_LITE_DELEGATE -DARMNN_TF_LITE_PARSER -DDYNAMIC_BACKEND_BUILD_DIR=\"TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/build\" -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/profiling -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnn -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/profiling -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/profiling/common/include -isystem TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/third-party -isystem TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot -mthumb -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1=/usr/src/debug/lib32-armnn/21.11-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1=/usr/src/debug/lib32-armnn/21.11-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/recipe-sysroot-native= -fvisibility-inlines-hidden -fopenmp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr -Wno-error=array-bounds -std=c++14 -Wall -Wextra -Werror -Wold-style-cast -Wno-missing-braces -Wconversion -Wsign-conversion -Wno-psabi -DNDEBUG -DNDEBUG -O3 -fPIC -MD -MT src/backends/reference/workloads/CMakeFiles/armnnRefBackendWorkloads.dir/ElementwiseFunction.cpp.o -MF src/backends/reference/workloads/CMakeFiles/armnnRefBackendWorkloads.dir/ElementwiseFunction.cpp.o.d -o src/backends/reference/workloads/CMakeFiles/armnnRefBackendWorkloads.dir/ElementwiseFunction.cpp.o -c TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/ElementwiseFunction.cpp In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/ElementwiseFunction.cpp:9: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/Minimum.hpp:12:30: error: 'template struct std::binary_function' is deprecated [-Werror=deprecated-declarations] 12 | struct minimum : public std::binary_function | ^~~~~~~~~~~~~~~ In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/string:48, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/locale_classes.h:40, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/ios_base.h:41, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/ios:42, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/istream:38, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/sstream:38, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include/armnn/Exceptions.hpp:7, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include/armnn/Tensor.hpp:9, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include/armnn/TypesUtils.hpp:7, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/BaseIterator.hpp:8, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/ElementwiseFunction.hpp:8, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/ElementwiseFunction.cpp:6: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/stl_function.h:131:12: note: declared here 131 | struct binary_function | ^~~~~~~~~~~~~~~ In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/ElementwiseFunction.cpp:10: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/Maximum.hpp:13:30: error: 'template struct std::binary_function' is deprecated [-Werror=deprecated-declarations] 13 | struct maximum : public std::binary_function | ^~~~~~~~~~~~~~~ TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/stl_function.h:131:12: note: declared here 131 | struct binary_function | ^~~~~~~~~~~~~~~ In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/ElementwiseFunction.cpp:11: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/Abs.hpp:13:26: error: 'template struct std::unary_function' is deprecated [-Werror=deprecated-declarations] 13 | struct abs : public std::unary_function | ^~~~~~~~~~~~~~ TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/stl_function.h:117:12: note: declared here 117 | struct unary_function | ^~~~~~~~~~~~~~ In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/ElementwiseFunction.cpp:12: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/Exp.hpp:13:26: error: 'template struct std::unary_function' is deprecated [-Werror=deprecated-declarations] 13 | struct exp : public std::unary_function | ^~~~~~~~~~~~~~ TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/stl_function.h:117:12: note: declared here 117 | struct unary_function | ^~~~~~~~~~~~~~ In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/ElementwiseFunction.cpp:13: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/Log.hpp:13:26: error: 'template struct std::unary_function' is deprecated [-Werror=deprecated-declarations] 13 | struct log : public std::unary_function | ^~~~~~~~~~~~~~ TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/stl_function.h:117:12: note: declared here 117 | struct unary_function | ^~~~~~~~~~~~~~ In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/ElementwiseFunction.cpp:14: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/Rsqrt.hpp:13:28: error: 'template struct std::unary_function' is deprecated [-Werror=deprecated-declarations] 13 | struct rsqrt : public std::unary_function | ^~~~~~~~~~~~~~ TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/stl_function.h:117:12: note: declared here 117 | struct unary_function | ^~~~~~~~~~~~~~ In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/ElementwiseFunction.cpp:15: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/Sin.hpp:13:26: error: 'template struct std::unary_function' is deprecated [-Werror=deprecated-declarations] 13 | struct sin : public std::unary_function | ^~~~~~~~~~~~~~ TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/stl_function.h:117:12: note: declared here 117 | struct unary_function | ^~~~~~~~~~~~~~ In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/ElementwiseFunction.cpp:16: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/Sqrt.hpp:13:27: error: 'template struct std::unary_function' is deprecated [-Werror=deprecated-declarations] 13 | struct sqrt : public std::unary_function | ^~~~~~~~~~~~~~ TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/stl_function.h:117:12: note: declared here 117 | struct unary_function | ^~~~~~~~~~~~~~ cc1plus: all warnings being treated as errors FAILED: src/backends/reference/workloads/CMakeFiles/armnnRefBackendWorkloads.dir/RefElementwiseUnaryWorkload.cpp.o TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/recipe-sysroot-native/usr/bin/arm-distromllib32-linux-gnueabi/arm-distromllib32-linux-gnueabi-g++ -DARMCOMPUTECL_ENABLED -DARMCOMPUTENEON_ENABLED -DARMNNREF_ENABLED -DARMNN_TFLITE_DELEGATE -DARMNN_TF_LITE_DELEGATE -DARMNN_TF_LITE_PARSER -DDYNAMIC_BACKEND_BUILD_DIR=\"TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/build\" -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/profiling -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnn -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/profiling -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/profiling/common/include -isystem TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/third-party -isystem TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot -mthumb -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1=/usr/src/debug/lib32-armnn/21.11-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1=/usr/src/debug/lib32-armnn/21.11-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/recipe-sysroot-native= -fvisibility-inlines-hidden -fopenmp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr -Wno-error=array-bounds -std=c++14 -Wall -Wextra -Werror -Wold-style-cast -Wno-missing-braces -Wconversion -Wsign-conversion -Wno-psabi -DNDEBUG -DNDEBUG -O3 -fPIC -MD -MT src/backends/reference/workloads/CMakeFiles/armnnRefBackendWorkloads.dir/RefElementwiseUnaryWorkload.cpp.o -MF src/backends/reference/workloads/CMakeFiles/armnnRefBackendWorkloads.dir/RefElementwiseUnaryWorkload.cpp.o.d -o src/backends/reference/workloads/CMakeFiles/armnnRefBackendWorkloads.dir/RefElementwiseUnaryWorkload.cpp.o -c TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/RefElementwiseUnaryWorkload.cpp In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/RefElementwiseUnaryWorkload.cpp:12: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/Abs.hpp:13:26: error: 'template struct std::unary_function' is deprecated [-Werror=deprecated-declarations] 13 | struct abs : public std::unary_function | ^~~~~~~~~~~~~~ In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/string:48, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/locale_classes.h:40, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/ios_base.h:41, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/ios:42, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/istream:38, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/sstream:38, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include/armnn/Exceptions.hpp:7, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include/armnn/Tensor.hpp:9, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include/armnn/TypesUtils.hpp:7, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/BaseIterator.hpp:8, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/RefElementwiseUnaryWorkload.hpp:8, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/RefElementwiseUnaryWorkload.cpp:6: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/stl_function.h:117:12: note: declared here 117 | struct unary_function | ^~~~~~~~~~~~~~ In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/RefElementwiseUnaryWorkload.cpp:13: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/Exp.hpp:13:26: error: 'template struct std::unary_function' is deprecated [-Werror=deprecated-declarations] 13 | struct exp : public std::unary_function | ^~~~~~~~~~~~~~ TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/stl_function.h:117:12: note: declared here 117 | struct unary_function | ^~~~~~~~~~~~~~ In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/RefElementwiseUnaryWorkload.cpp:14: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/Log.hpp:13:26: error: 'template struct std::unary_function' is deprecated [-Werror=deprecated-declarations] 13 | struct log : public std::unary_function | ^~~~~~~~~~~~~~ TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/stl_function.h:117:12: note: declared here 117 | struct unary_function | ^~~~~~~~~~~~~~ In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/RefElementwiseUnaryWorkload.cpp:15: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/Rsqrt.hpp:13:28: error: 'template struct std::unary_function' is deprecated [-Werror=deprecated-declarations] 13 | struct rsqrt : public std::unary_function | ^~~~~~~~~~~~~~ TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/stl_function.h:117:12: note: declared here 117 | struct unary_function | ^~~~~~~~~~~~~~ In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/RefElementwiseUnaryWorkload.cpp:16: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/Sin.hpp:13:26: error: 'template struct std::unary_function' is deprecated [-Werror=deprecated-declarations] 13 | struct sin : public std::unary_function | ^~~~~~~~~~~~~~ TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/stl_function.h:117:12: note: declared here 117 | struct unary_function | ^~~~~~~~~~~~~~ In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/RefElementwiseUnaryWorkload.cpp:17: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/Sqrt.hpp:13:27: error: 'template struct std::unary_function' is deprecated [-Werror=deprecated-declarations] 13 | struct sqrt : public std::unary_function | ^~~~~~~~~~~~~~ TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/stl_function.h:117:12: note: declared here 117 | struct unary_function | ^~~~~~~~~~~~~~ cc1plus: all warnings being treated as errors FAILED: src/backends/reference/workloads/CMakeFiles/armnnRefBackendWorkloads.dir/RefElementwiseWorkload.cpp.o TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/recipe-sysroot-native/usr/bin/arm-distromllib32-linux-gnueabi/arm-distromllib32-linux-gnueabi-g++ -DARMCOMPUTECL_ENABLED -DARMCOMPUTENEON_ENABLED -DARMNNREF_ENABLED -DARMNN_TFLITE_DELEGATE -DARMNN_TF_LITE_DELEGATE -DARMNN_TF_LITE_PARSER -DDYNAMIC_BACKEND_BUILD_DIR=\"TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/build\" -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/profiling -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnn -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/profiling -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/profiling/common/include -isystem TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/third-party -isystem TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot -mthumb -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1=/usr/src/debug/lib32-armnn/21.11-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1=/usr/src/debug/lib32-armnn/21.11-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/recipe-sysroot-native= -fvisibility-inlines-hidden -fopenmp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr -Wno-error=array-bounds -std=c++14 -Wall -Wextra -Werror -Wold-style-cast -Wno-missing-braces -Wconversion -Wsign-conversion -Wno-psabi -DNDEBUG -DNDEBUG -O3 -fPIC -MD -MT src/backends/reference/workloads/CMakeFiles/armnnRefBackendWorkloads.dir/RefElementwiseWorkload.cpp.o -MF src/backends/reference/workloads/CMakeFiles/armnnRefBackendWorkloads.dir/RefElementwiseWorkload.cpp.o.d -o src/backends/reference/workloads/CMakeFiles/armnnRefBackendWorkloads.dir/RefElementwiseWorkload.cpp.o -c TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/RefElementwiseWorkload.cpp In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/RefElementwiseWorkload.hpp:13, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/RefElementwiseWorkload.cpp:6: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/Maximum.hpp:13:30: error: 'template struct std::binary_function' is deprecated [-Werror=deprecated-declarations] 13 | struct maximum : public std::binary_function | ^~~~~~~~~~~~~~~ In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/functional:49, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include/armnn/Types.hpp:8, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/RefElementwiseWorkload.hpp:8: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/stl_function.h:131:12: note: declared here 131 | struct binary_function | ^~~~~~~~~~~~~~~ In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/RefElementwiseWorkload.hpp:14: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/Minimum.hpp:12:30: error: 'template struct std::binary_function' is deprecated [-Werror=deprecated-declarations] 12 | struct minimum : public std::binary_function | ^~~~~~~~~~~~~~~ TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/stl_function.h:131:12: note: declared here 131 | struct binary_function | ^~~~~~~~~~~~~~~ cc1plus: all warnings being treated as errors FAILED: src/backends/reference/CMakeFiles/armnnRefBackend.dir/RefWorkloadFactory.cpp.o TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/recipe-sysroot-native/usr/bin/arm-distromllib32-linux-gnueabi/arm-distromllib32-linux-gnueabi-g++ -DARMCOMPUTECL_ENABLED -DARMCOMPUTENEON_ENABLED -DARMNNREF_ENABLED -DARMNN_TFLITE_DELEGATE -DARMNN_TF_LITE_DELEGATE -DARMNN_TF_LITE_PARSER -DDYNAMIC_BACKEND_BUILD_DIR=\"TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/build\" -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/profiling -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnn -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnnUtils -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/profiling -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/profiling/common/include -isystem TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/third-party -isystem TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot -mthumb -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1=/usr/src/debug/lib32-armnn/21.11-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1=/usr/src/debug/lib32-armnn/21.11-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/recipe-sysroot-native= -fvisibility-inlines-hidden -fopenmp -ITOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr -Wno-error=array-bounds -std=c++14 -Wall -Wextra -Werror -Wold-style-cast -Wno-missing-braces -Wconversion -Wsign-conversion -Wno-psabi -DNDEBUG -DNDEBUG -O3 -fPIC -MD -MT src/backends/reference/CMakeFiles/armnnRefBackend.dir/RefWorkloadFactory.cpp.o -MF src/backends/reference/CMakeFiles/armnnRefBackend.dir/RefWorkloadFactory.cpp.o.d -o src/backends/reference/CMakeFiles/armnnRefBackend.dir/RefWorkloadFactory.cpp.o -c TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/RefWorkloadFactory.cpp In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/RefElementwiseWorkload.hpp:13, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/RefWorkloads.hpp:38, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/RefWorkloadFactory.cpp:12: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/Maximum.hpp:13:30: error: 'template struct std::binary_function' is deprecated [-Werror=deprecated-declarations] 13 | struct maximum : public std::binary_function | ^~~~~~~~~~~~~~~ In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/functional:49, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include/armnn/Types.hpp:8, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include/armnn/MemorySources.hpp:8, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include/armnn/backends/ITensorHandle.hpp:7, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/include/armnn/backends/ITensorHandleFactory.hpp:8, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/armnn/Layer.hpp:9, from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/RefWorkloadFactory.cpp:5: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/stl_function.h:131:12: note: declared here 131 | struct binary_function | ^~~~~~~~~~~~~~~ In file included from TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/RefElementwiseWorkload.hpp:14: TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/git/src/backends/reference/workloads/Minimum.hpp:12:30: error: 'template struct std::binary_function' is deprecated [-Werror=deprecated-declarations] 12 | struct minimum : public std::binary_function | ^~~~~~~~~~~~~~~ TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-armnn/21.11-r1/lib32-recipe-sysroot/usr/include/c++/12.1.0/bits/stl_function.h:131:12: note: declared here 131 | struct binary_function | ^~~~~~~~~~~~~~~ cc1plus: all warnings being treated as errors :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4984] CCC: Various build fixes Change-Id: I9f4d9b18b7249480f09b9f0414c8004635f6f45f --- meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb b/meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb index 05b1eaaff..422cc1bce 100644 --- a/meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb +++ b/meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb @@ -20,11 +20,12 @@ SRC_URI = " \ # Matches v${PV} SRCREV = "5e9965cae1cc6162649910f423ebd86001fc1931" -PR = "r0" +PR = "r1" S = "${WORKDIR}/git" inherit cmake +inherit pkgconfig DEPENDS = " \ boost \ @@ -159,6 +160,9 @@ do_install:append() { } CXXFLAGS += "-fopenmp -I${STAGING_DIR_HOST}/usr" + +CXXFLAGS += "-Wno-error=array-bounds -Wno-error=deprecated-declarations" + LIBS += "-larmpl_lp64_mp" FILES:${PN}-dev = "" From 93d494ffc194312b9513140a23fa115601d2b429 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 3 Jun 2022 22:43:13 +0000 Subject: [PATCH 0409/2022] stb=r1 (add protocol to SRC_URI) :Release Notes: :Detailed Notes: Fixes: WARNING: stb-2.31-r0 do_fetch: URL: git://github.com/nothings/stb.git;branch=master uses git protocol which is no longer supported by github. Please change to ;protocol=https in the url. WARNING: stb-2.31-r0 do_unpack: URL: git://github.com/nothings/stb.git;branch=master uses git protocol which is no longer supported by github. Please change to ;protocol=https in the url. WARNING: stb-2.31-r0 do_patch: URL: git://github.com/nothings/stb.git;branch=master uses git protocol which is no longer supported by github. Please change to ;protocol=https in the url. WARNING: stb-2.31-r0 do_packagedata: URL: git://github.com/nothings/stb.git;branch=master uses git protocol which is no longer supported by github. Please change to ;protocol=https in the url. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4984] CCC: Various build fixes Change-Id: I515788ad033b88d3fc291286c168c5daf3bc7e28 --- meta-webos/recipes-upstreamable/stb/stb_git.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-upstreamable/stb/stb_git.bb b/meta-webos/recipes-upstreamable/stb/stb_git.bb index b5ee79d39..ec16202d6 100644 --- a/meta-webos/recipes-upstreamable/stb/stb_git.bb +++ b/meta-webos/recipes-upstreamable/stb/stb_git.bb @@ -6,13 +6,13 @@ LICENSE = "MIT" LIC_FILES_CHKSUM = "file://README.md;md5=42144ce827adcfa5170032f0ea03c227" PV = "2.31" -PR = "r0" +PR = "r1" BRANCH = "master" SRCREV = "e6afb9cbae4064da8c3e69af3ff5c4629579c1d2" SRC_URI = " \ - git://github.com/nothings/stb.git;branch=${BRANCH} \ + git://github.com/nothings/stb.git;branch=${BRANCH};protocol=https \ " S = "${WORKDIR}/git" From 3433b8f666174d7f1a6339e3582f84ff82572cfd Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 3 Jun 2022 22:57:44 +0000 Subject: [PATCH 0410/2022] edgeai-vision=r2 (inherit pkgconfig) :Release Notes: :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/415468 -- Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) CMake Error at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r0/recipe-sysroot-native/usr/share/cmake-3.23/Modules/FindPkgConfig.cmake:659 (message): pkg-config tool not found Call Stack (most recent call first): TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r0/recipe-sysroot-native/usr/share/cmake-3.23/Modules/FindPkgConfig.cmake:825 (_pkg_check_modules_internal) framework/CMakeLists.txt:22 (pkg_check_modules) CMake Error at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r0/recipe-sysroot-native/usr/share/cmake-3.23/Modules/FindPkgConfig.cmake:659 (message): pkg-config tool not found Call Stack (most recent call first): TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r0/recipe-sysroot-native/usr/share/cmake-3.23/Modules/FindPkgConfig.cmake:825 (_pkg_check_modules_internal) framework/CMakeLists.txt:23 (pkg_check_modules) CMake Error at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r0/recipe-sysroot-native/usr/share/cmake-3.23/Modules/FindPkgConfig.cmake:659 (message): pkg-config tool not found Call Stack (most recent call first): TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r0/recipe-sysroot-native/usr/share/cmake-3.23/Modules/FindPkgConfig.cmake:825 (_pkg_check_modules_internal) framework/CMakeLists.txt:24 (pkg_check_modules) CMake Error at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r0/recipe-sysroot-native/usr/share/cmake-3.23/Modules/FindPkgConfig.cmake:659 (message): pkg-config tool not found Call Stack (most recent call first): TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r0/recipe-sysroot-native/usr/share/cmake-3.23/Modules/FindPkgConfig.cmake:825 (_pkg_check_modules_internal) framework/CMakeLists.txt:25 (pkg_check_modules) CMake Error at TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r0/recipe-sysroot-native/usr/share/cmake-3.23/Modules/FindPackageHandleStandardArgs.cmake:230 (message): Could NOT find PkgConfig (missing: PKG_CONFIG_EXECUTABLE) Call Stack (most recent call first): TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r0/recipe-sysroot-native/usr/share/cmake-3.23/Modules/FindPackageHandleStandardArgs.cmake:594 (_FPHSA_FAILURE_MESSAGE) TOPDIR/BUILD/work/mach-distromllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r0/recipe-sysroot-native/usr/share/cmake-3.23/Modules/FindPkgConfig.cmake:99 (find_package_handle_standard_args) framework/CMakeLists.txt:61 (FIND_PACKAGE) :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4984] CCC: Various build fixes Change-Id: I46fdd4595f02db7e720170d8a49687ec59429ed0 --- meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb b/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb index 7473c8852..9a1f5ff88 100644 --- a/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb +++ b/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb @@ -9,10 +9,11 @@ WEBOS_VERSION = "1.0.0-7_21bd046126c31a1c503aaad418781bc03832d09a" WEBOS_REPO_NAME = "edge-ai-computer-vision" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" -PR = "r1" +PR = "r2" S = "${WORKDIR}/git" inherit cmake +inherit pkgconfig inherit webos_filesystem_paths inherit webos_enhanced_submissions inherit webos_public_repo From 24b7cacc7af1fb73720b30cdee3d19fb8c5f2811 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 6 Jun 2022 18:12:41 +0000 Subject: [PATCH 0411/2022] python3-pyyaml=v5.4.1 :Release Notes: Upgrade to fix: https://nvd.nist.gov/vuln/detail/CVE-2020-14343 :Detailed Notes: :Testing Performed: :QA Notes: :Issues Addressed: [WRO-5449] CVE patches are required for @nbr [WRO-4984] CCC: Various build fixes Change-Id: I2f7490fd0ec36b6132693ca31819c9631ccab856 --- .../python/python3-pyyaml_5.4.1.bb | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 meta-webos-backports/meta-webos-backports-3.3/recipes-devtools/python/python3-pyyaml_5.4.1.bb diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-devtools/python/python3-pyyaml_5.4.1.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-devtools/python/python3-pyyaml_5.4.1.bb new file mode 100644 index 000000000..f00497245 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-devtools/python/python3-pyyaml_5.4.1.bb @@ -0,0 +1,18 @@ +SUMMARY = "Python support for YAML" +DEPENDS += "libyaml ${PYTHON_PN}-cython-native" + +LICENSE = "MIT" +LIC_FILES_CHKSUM = "file://LICENSE;md5=6d8242660a8371add5fe547adf083079" + +PYPI_PACKAGE = "PyYAML" + +inherit pypi setuptools3 + +SRC_URI[sha256sum] = "607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e" + +RDEPENDS:${PN} += "\ + ${PYTHON_PN}-datetime \ + ${PYTHON_PN}-netclient \ +" + +BBCLASSEXTEND = "native nativesdk" From 1fd92081354fb6d00fab97d769d5721a741be625 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 7 Jun 2022 09:50:03 +0000 Subject: [PATCH 0412/2022] tensorflow-lite=r2 (dlopen libOpenCL.so.1) Release Notes: opencl-icd-loader creates libOpenCL.so.1 and libOpenCL.so is symlink to it, which is correctly packaged in $PN-dev, not $PN, so it's not installed by default. Then benchmark_model incorrectly tries to dlopen libOpenCL.so instead of libOpenCL.so.1 which fails, instead of changing opencl-icd-loader packaging fix the opencl_wrapper. :Detailed Notes: Fixes: $ benchmark_model --graph=/usr/share/aif/model/pose_landmark_lit e.tflite --use_gpu=true STARTING! Log parameter values verbosely: [0] Graph: [/usr/share/aif/model/pose_landmark_lite.tflite] Use gpu: [1] Loaded model /usr/share/aif/model/pose_landmark_lite.tflite INFO: Created TensorFlow Lite XNNPACK delegate for CPU. INFO: Created TensorFlow Lite delegate for GPU. GPU delegate created. Going to apply 1 delegates one after another. ERROR: Can not open OpenCL library on this device - libOpenCL.so: cannot open shared object file: No such file or directory ERROR: Falling back to OpenGL ERROR: TfLiteGpuDelegate Init: OpenGL-based API disabled INFO: Created 0 GPU delegate kernels. ERROR: TfLiteGpuDelegate Prepare: delegate is not initialized ERROR: Node number 305 (TfLiteGpuDelegateV2) failed to prepare. ERROR: Restored original execution plan after delegate application failure. Failed to apply GPU delegate. Benchmarking failed. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4984] CCC: Various build fixes Change-Id: Iaf61314f927a45fb28ecbac553ff0e86e380afef --- ...lopen-libOpenCL.so.1-instead-of-libO.patch | 56 +++++++++++++++++++ .../tensorflow-lite/tensorflow-lite_2.6.2.bb | 9 ++- 2 files changed, 63 insertions(+), 2 deletions(-) create mode 100644 meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0004-opencl_wrapper-dlopen-libOpenCL.so.1-instead-of-libO.patch diff --git a/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0004-opencl_wrapper-dlopen-libOpenCL.so.1-instead-of-libO.patch b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0004-opencl_wrapper-dlopen-libOpenCL.so.1-instead-of-libO.patch new file mode 100644 index 000000000..23ca7d2c5 --- /dev/null +++ b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0004-opencl_wrapper-dlopen-libOpenCL.so.1-instead-of-libO.patch @@ -0,0 +1,56 @@ +From 2c4d6a23660e5dc49b6bd30804d13f713c4e9155 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Tue, 7 Jun 2022 09:45:30 +0000 +Subject: [PATCH] opencl_wrapper: dlopen libOpenCL.so.1 instead of libOpenCL.so + symlink + +:Release Notes: +opencl-icd-loader creates libOpenCL.so.1 and libOpenCL.so is symlink to it, which is +correctly packaged in $PN-dev, not $PN, so it's not installed by default. + +Then benchmark_model incorrectly tries to dlopen libOpenCL.so instead of +libOpenCL.so.1 which fails, instead of changing opencl-icd-loader packaging +fix the opencl_wrapper. + +:Detailed Notes: +Fixes: +$ benchmark_model --graph=/usr/share/aif/model/pose_landmark_lit e.tflite --use_gpu=true +STARTING! Log parameter values verbosely: [0] +Graph: [/usr/share/aif/model/pose_landmark_lite.tflite] +Use gpu: [1] +Loaded model /usr/share/aif/model/pose_landmark_lite.tflite +INFO: Created TensorFlow Lite XNNPACK delegate for CPU. +INFO: Created TensorFlow Lite delegate for GPU. +GPU delegate created. Going to apply 1 delegates one after another. +ERROR: Can not open OpenCL library on this device - libOpenCL.so: cannot open shared object file: No such file or directory +ERROR: Falling back to OpenGL +ERROR: TfLiteGpuDelegate Init: OpenGL-based API disabled +INFO: Created 0 GPU delegate kernels. +ERROR: TfLiteGpuDelegate Prepare: delegate is not initialized ERROR: Node number 305 (TfLiteGpuDelegateV2) failed to prepare. +ERROR: Restored original execution plan after delegate application failure. Failed to apply GPU delegate. Benchmarking failed. + +:Testing Performed: +Only build tested. + +:QA Notes: +No change to image. + +:Issues Addressed: +[WRO-4984] CCC: Various build fixes +--- + tensorflow/lite/delegates/gpu/cl/opencl_wrapper.cc | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/tensorflow/lite/delegates/gpu/cl/opencl_wrapper.cc b/tensorflow/lite/delegates/gpu/cl/opencl_wrapper.cc +index a7d765e70fa..0a8521c6def 100644 +--- a/tensorflow/lite/delegates/gpu/cl/opencl_wrapper.cc ++++ b/tensorflow/lite/delegates/gpu/cl/opencl_wrapper.cc +@@ -89,7 +89,7 @@ absl::Status LoadOpenCL() { + static const char* kClLibName = + "/System/Library/Frameworks/OpenCL.framework/OpenCL"; + #else +- static const char* kClLibName = "libOpenCL.so"; ++ static const char* kClLibName = "libOpenCL.so.1"; + #endif + libopencl = dlopen(kClLibName, RTLD_NOW | RTLD_LOCAL); + if (libopencl) { diff --git a/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb index 4a6f1ec8f..0f4f14478 100644 --- a/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb +++ b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb @@ -43,6 +43,7 @@ SRC_URI = " \ file://0001-remove-label_image-benchmark_model-exclude-option.patch \ file://0002-enable-external-delegate-in-benchmarktool.patch \ file://0003-Fix-return-type-issues.patch \ + file://0004-opencl_wrapper-dlopen-libOpenCL.so.1-instead-of-libO.patch \ file://tensorflowlite.pc.in \ " @@ -56,7 +57,7 @@ SRC_URI[model-mobv1.sha256sum] = "2f8054076cf655e1a73778a49bd8fd0306d32b290b7e57 inherit cmake -PR = "r1" +PR = "r2" S = "${WORKDIR}/git" DEPENDS += " \ @@ -91,7 +92,8 @@ OECMAKE_SOURCEPATH = "${S}/tensorflow/lite" PACKAGECONFIG ?= "xnnpack" PACKAGECONFIG[xnnpack] = "-DTFLITE_ENABLE_XNNPACK=ON,-DTFLITE_ENABLE_XNNPACK=OFF" -PACKAGECONFIG[gpu] = "-DTFLITE_ENABLE_GPU=ON,-DTFLITE_ENABLE_GPU=OFF,opencl-headers opencl-icd-loader" +# opencl_wrapper only dlopens libOpenCL.so.1, so do_package shlibs cannot dynamically add the runtime dependency, add it explicitly here +PACKAGECONFIG[gpu] = "-DTFLITE_ENABLE_GPU=ON,-DTFLITE_ENABLE_GPU=OFF,opencl-headers opencl-icd-loader,opencl-icd-loader" # There are many external dependencies fetched in do_configure if not found: # tensorflow/lite/tools/cmake/modules/Findgoogletest.cmake:OverridableFetchContent_GetProperties(googletest) @@ -126,6 +128,9 @@ do_install() { install -d ${D}/${libdir} install -m 0644 $(find . -name "*.so") ${D}${libdir} + # armnn expects libtensorflowlite.so not libtensorflow-lite.sh: + # $ grep libtensorflowlite /OE/lge/build/webos/dunfell/BUILD/work/qemux86_64-webos-linux/armnn/21.11-r1/git/delegate/cmake/Modules/FindTfLite.cmake + # find_library(TfLite_LIB NAMES "libtensorflow_lite_all.so" "libtensorflowlite.so" HINTS ${TFLITE_LIB_ROOT} ${TFLITE_LIB_ROOT}/tensorflow/lite) ln -snf libtensorflow-lite.so ${D}/${libdir}/libtensorflowlite.so # install benchmark_model From 9d49cecbd0954ade9afeb66e8304de38ee0cf366 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 7 Jun 2022 10:29:49 +0000 Subject: [PATCH 0413/2022] libedgetpu: move one directory up for bitbake to actually find the recipe :Release Notes: It's not included in any image by default and nobody noticed that it's not even included in BBFILES because of extra directory level not included in: BBFILES += "${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes-*/*/*.bbappend" :Detailed Notes: Fixes: $ bitbake libedgetpu ERROR: Nothing PROVIDES 'libedgetpu'. Close matches: libdnet libedit but the recipe is still broken: | /bin/bash: line 1: bazel: command not found :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4984] CCC: Various build fixes Change-Id: I48a9722a04b0f32de7fee9bf229e1c203dad3c4b --- .../coral/{libedgetpu => }/libedgetpu.bb | 0 .../{files => }/edgetpu-accelerator.rules | 0 .../coral/libedgetpu/{files => }/edgetpu.pc.in | 0 .../coral/libedgetpu/{files => }/libedgetpu.so.1 | Bin .../{files => }/libedgetpu_aarch64.so.1.0 | Bin .../libedgetpu/{files => }/libedgetpu_arm.so.1.0 | Bin .../libedgetpu/{files => }/libedgetpu_x86_64.so.1.0 | Bin 7 files changed, 0 insertions(+), 0 deletions(-) rename meta-webos/recipes-upstreamable/coral/{libedgetpu => }/libedgetpu.bb (100%) rename meta-webos/recipes-upstreamable/coral/libedgetpu/{files => }/edgetpu-accelerator.rules (100%) rename meta-webos/recipes-upstreamable/coral/libedgetpu/{files => }/edgetpu.pc.in (100%) rename meta-webos/recipes-upstreamable/coral/libedgetpu/{files => }/libedgetpu.so.1 (100%) rename meta-webos/recipes-upstreamable/coral/libedgetpu/{files => }/libedgetpu_aarch64.so.1.0 (100%) rename meta-webos/recipes-upstreamable/coral/libedgetpu/{files => }/libedgetpu_arm.so.1.0 (100%) rename meta-webos/recipes-upstreamable/coral/libedgetpu/{files => }/libedgetpu_x86_64.so.1.0 (100%) diff --git a/meta-webos/recipes-upstreamable/coral/libedgetpu/libedgetpu.bb b/meta-webos/recipes-upstreamable/coral/libedgetpu.bb similarity index 100% rename from meta-webos/recipes-upstreamable/coral/libedgetpu/libedgetpu.bb rename to meta-webos/recipes-upstreamable/coral/libedgetpu.bb diff --git a/meta-webos/recipes-upstreamable/coral/libedgetpu/files/edgetpu-accelerator.rules b/meta-webos/recipes-upstreamable/coral/libedgetpu/edgetpu-accelerator.rules similarity index 100% rename from meta-webos/recipes-upstreamable/coral/libedgetpu/files/edgetpu-accelerator.rules rename to meta-webos/recipes-upstreamable/coral/libedgetpu/edgetpu-accelerator.rules diff --git a/meta-webos/recipes-upstreamable/coral/libedgetpu/files/edgetpu.pc.in b/meta-webos/recipes-upstreamable/coral/libedgetpu/edgetpu.pc.in similarity index 100% rename from meta-webos/recipes-upstreamable/coral/libedgetpu/files/edgetpu.pc.in rename to meta-webos/recipes-upstreamable/coral/libedgetpu/edgetpu.pc.in diff --git a/meta-webos/recipes-upstreamable/coral/libedgetpu/files/libedgetpu.so.1 b/meta-webos/recipes-upstreamable/coral/libedgetpu/libedgetpu.so.1 similarity index 100% rename from meta-webos/recipes-upstreamable/coral/libedgetpu/files/libedgetpu.so.1 rename to meta-webos/recipes-upstreamable/coral/libedgetpu/libedgetpu.so.1 diff --git a/meta-webos/recipes-upstreamable/coral/libedgetpu/files/libedgetpu_aarch64.so.1.0 b/meta-webos/recipes-upstreamable/coral/libedgetpu/libedgetpu_aarch64.so.1.0 similarity index 100% rename from meta-webos/recipes-upstreamable/coral/libedgetpu/files/libedgetpu_aarch64.so.1.0 rename to meta-webos/recipes-upstreamable/coral/libedgetpu/libedgetpu_aarch64.so.1.0 diff --git a/meta-webos/recipes-upstreamable/coral/libedgetpu/files/libedgetpu_arm.so.1.0 b/meta-webos/recipes-upstreamable/coral/libedgetpu/libedgetpu_arm.so.1.0 similarity index 100% rename from meta-webos/recipes-upstreamable/coral/libedgetpu/files/libedgetpu_arm.so.1.0 rename to meta-webos/recipes-upstreamable/coral/libedgetpu/libedgetpu_arm.so.1.0 diff --git a/meta-webos/recipes-upstreamable/coral/libedgetpu/files/libedgetpu_x86_64.so.1.0 b/meta-webos/recipes-upstreamable/coral/libedgetpu/libedgetpu_x86_64.so.1.0 similarity index 100% rename from meta-webos/recipes-upstreamable/coral/libedgetpu/files/libedgetpu_x86_64.so.1.0 rename to meta-webos/recipes-upstreamable/coral/libedgetpu/libedgetpu_x86_64.so.1.0 From a8991767278ebd5b2b792dbc68ec829679adef29 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 7 Jun 2022 10:38:41 +0000 Subject: [PATCH 0414/2022] libedgetpu: disable default do_compile from base.bbclass :Release Notes: Depends on bazel-native (or worse bazel on host), but there are also prebuilt binaries in SRC_URI, not sure what was the original intention but the default do_compile is definitely broken. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/416562 NOTE: make -j 64 bazel build --sandbox_debug --subcommands --experimental_repo_remote_exec --compilation_mode=opt --define darwinn_portable=1 --action_env PYTHON_BIN_PATH=TOPDIR/BUILD/hosttools/python3 --cpu=k8 --embed_label='TENSORFLOW_COMMIT=855c4c0ee34257b98ce2d01121940efb5423a059' --stamp --crosstool_top=@crosstool//:toolchains --compiler=gcc --linkopt=-l:libusb-1.0.so --linkopt=-Wl,--strip-all //tflite/public:libedgetpu_direct_all.so bazel build --sandbox_debug --subcommands --experimental_repo_remote_exec --compilation_mode=opt --define darwinn_portable=1 --action_env PYTHON_BIN_PATH=TOPDIR/BUILD/hosttools/python3 --cpu=k8 --embed_label='TENSORFLOW_COMMIT=855c4c0ee34257b98ce2d01121940efb5423a059' --stamp --crosstool_top=@crosstool//:toolchains --compiler=gcc --linkopt=-l:libusb-1.0.so --linkopt=-Wl,--strip-all --copt=-DTHROTTLE_EDGE_TPU //tflite/public:libedgetpu_direct_all.so /bin/bash: line 1: bazel: command not found /bin/bash: line 1: bazel: command not found make: *** [Makefile:105: libedgetpu-direct] Error 127 make: *** Waiting for unfinished jobs.... :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4984] CCC: Various build fixes Change-Id: If904ba9307d86f6c67016774079017cfbc6c32d1 --- .../recipes-upstreamable/coral/libedgetpu.bb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/meta-webos/recipes-upstreamable/coral/libedgetpu.bb b/meta-webos/recipes-upstreamable/coral/libedgetpu.bb index be6396b58..8e8948a3e 100644 --- a/meta-webos/recipes-upstreamable/coral/libedgetpu.bb +++ b/meta-webos/recipes-upstreamable/coral/libedgetpu.bb @@ -17,6 +17,22 @@ RDEPENDS:${PN} += " \ libusb1 \ " +do_compile() { + # depends on bazel-native (or worse bazel on host), but there are also + # prebuilt binaries in SRC_URI, not sure what was the original intention + # but the default do_compile is definitely broken: + # http://gecko.lge.com/Errors/Details/416562 + # NOTE: make -j 64 + # bazel build --sandbox_debug --subcommands --experimental_repo_remote_exec --compilation_mode=opt --define darwinn_portable=1 --action_env PYTHON_BIN_PATH=TOPDIR/BUILD/hosttools/python3 --cpu=k8 --embed_label='TENSORFLOW_COMMIT=855c4c0ee34257b98ce2d01121940efb5423a059' --stamp --crosstool_top=@crosstool//:toolchains --compiler=gcc --linkopt=-l:libusb-1.0.so --linkopt=-Wl,--strip-all //tflite/public:libedgetpu_direct_all.so + # bazel build --sandbox_debug --subcommands --experimental_repo_remote_exec --compilation_mode=opt --define darwinn_portable=1 --action_env PYTHON_BIN_PATH=TOPDIR/BUILD/hosttools/python3 --cpu=k8 --embed_label='TENSORFLOW_COMMIT=855c4c0ee34257b98ce2d01121940efb5423a059' --stamp --crosstool_top=@crosstool//:toolchains --compiler=gcc --linkopt=-l:libusb-1.0.so --linkopt=-Wl,--strip-all --copt=-DTHROTTLE_EDGE_TPU //tflite/public:libedgetpu_direct_all.so + # /bin/bash: line 1: bazel: command not found + # /bin/bash: line 1: bazel: command not found + # make: *** [Makefile:105: libedgetpu-direct] Error 127 + # make: *** Waiting for unfinished jobs.... + # make: *** [Makefile:110: libedgetpu-throttled] Error 127 + : +} + do_configure() { if [ ${TARGET_ARCH} = "aarch64" ]; then From ee107c1f5b5ea18252400ce86d17fec81813ca12 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 8 Jun 2022 05:54:41 +0000 Subject: [PATCH 0415/2022] Revert "remove armnn features on 32bit OSE" :Release Notes: This partially reverts commit 32b761a23eabdbceca7de9ff0aa9fee4d8c104d4. :Detailed Notes: DISTRO_FEATURES should be global for a DISTRO, we already break this rule for sota on rpi, lets not add more like this. Fix accidental edit in packagegroup-webos-ml-sdk comment and remove unnecessary P_V_opencv. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4984] CCC: Various build fixes Change-Id: Icfb1b4bc54cbd9c020d86ad8dfcb2198377065f5 --- meta-webos/conf/distro/include/webos-features.inc | 3 --- meta-webos/conf/distro/include/webos-preferred-versions.inc | 1 - .../recipes-core/packagegroups/packagegroup-webos-ml-sdk.bb | 2 +- 3 files changed, 1 insertion(+), 5 deletions(-) diff --git a/meta-webos/conf/distro/include/webos-features.inc b/meta-webos/conf/distro/include/webos-features.inc index 6d7f66ac6..59c308775 100644 --- a/meta-webos/conf/distro/include/webos-features.inc +++ b/meta-webos/conf/distro/include/webos-features.inc @@ -42,9 +42,6 @@ WEBOS_DISTRO_FEATURES_TEST = "ptest" # you can reduce the size of the installed library by adding this option. If this option is specified, # the examples and test codes are excluded from the installation. WEBOS_DISTRO_FEATURES_AI_FRAMEWORK = "aiframework armnn" -WEBOS_DISTRO_FEATURES_AI_FRAMEWORK:remove:raspberrypi3 = "armnn" -WEBOS_DISTRO_FEATURES_AI_FRAMEWORK:remove:raspberrypi4 = "armnn" -WEBOS_DISTRO_FEATURES_AI_FRAMEWORK:remove:qemux86 = "armnn" DISTRO_FEATURES = "\ ${WEBOS_DISTRO_FEATURES_DEFAULT} \ diff --git a/meta-webos/conf/distro/include/webos-preferred-versions.inc b/meta-webos/conf/distro/include/webos-preferred-versions.inc index cc58570c9..284fbf6ac 100644 --- a/meta-webos/conf/distro/include/webos-preferred-versions.inc +++ b/meta-webos/conf/distro/include/webos-preferred-versions.inc @@ -4,4 +4,3 @@ PREFERRED_VERSION_webruntime = "91.%" PREFERRED_VERSION_mksnapshot-cross-${TARGET_ARCH} = "91.%" GOVERSION = "1.16.%" -PREFERRED_VERSION_opencv = "4.5%" diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-ml-sdk.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-ml-sdk.bb index ed0235703..5b2e6a9fd 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-ml-sdk.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-ml-sdk.bb @@ -4,7 +4,7 @@ DESCRIPTION = "Machine learning dev components used in webOS" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" -# You don't need to change this value when you're changing just RDEPENDS \${PN} variable. +# You don't need to change this value when you're changing just RDEPENDS:${PN} variable. PR = "r1" PACKAGE_ARCH = "${MACHINE_ARCH}" From 5fdd9c7c2c82c4842b0f2fd8b4c8ac9c28325942 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 18 May 2022 22:53:32 +0000 Subject: [PATCH 0416/2022] Revert "python3-cryptography: backport 3 changes to fix CVE-2020-36242" :Release Notes: This reverts commit dc9106299bf3869d4764732d673730e4641dd1a8. :Detailed Notes: https://lists.openembedded.org/g/openembedded-devel/message/97027 is merged in meta-oe/dunfell revision we're using now. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4984] CCC: Various build fixes Change-Id: I498087df50d7361235157a2700ce4ef4dce086c4 --- .../0001-chunked-update_into-5419.patch | 99 ------------------- ...2-chunking-didn-t-actually-work-5499.patch | 43 -------- ...verflows-cause-by-integer-overflow-i.patch | 37 ------- .../python/python3-cryptography_2.8.bbappend | 7 -- 4 files changed, 186 deletions(-) delete mode 100644 meta-webos/recipes-devtools/python/python3-cryptography/0001-chunked-update_into-5419.patch delete mode 100644 meta-webos/recipes-devtools/python/python3-cryptography/0002-chunking-didn-t-actually-work-5499.patch delete mode 100644 meta-webos/recipes-devtools/python/python3-cryptography/0003-correct-buffer-overflows-cause-by-integer-overflow-i.patch delete mode 100644 meta-webos/recipes-devtools/python/python3-cryptography_2.8.bbappend diff --git a/meta-webos/recipes-devtools/python/python3-cryptography/0001-chunked-update_into-5419.patch b/meta-webos/recipes-devtools/python/python3-cryptography/0001-chunked-update_into-5419.patch deleted file mode 100644 index c5d7ca386..000000000 --- a/meta-webos/recipes-devtools/python/python3-cryptography/0001-chunked-update_into-5419.patch +++ /dev/null @@ -1,99 +0,0 @@ -From 7dee5927eb528f7ddebd62fbab31232d505acc22 Mon Sep 17 00:00:00 2001 -From: Paul Kehrer -Date: Sun, 23 Aug 2020 23:41:33 -0500 -Subject: [PATCH] chunked update_into (#5419) - -* chunked update_into - -* all pointer arithmetic all the time - -* review feedback - -Upstream-Status: Backport [https://github.com/pyca/cryptography/commit/f90ba1808ee9bd9a13c5673b776484644f29d7ba] - -Signed-off-by: Martin Jansa ---- - .../hazmat/backends/openssl/ciphers.py | 31 +++++++++++++------ - tests/hazmat/primitives/test_ciphers.py | 17 ++++++++++ - 2 files changed, 38 insertions(+), 10 deletions(-) - -diff --git a/src/cryptography/hazmat/backends/openssl/ciphers.py b/src/cryptography/hazmat/backends/openssl/ciphers.py -index 94b48f52..86bc94b3 100644 ---- a/src/cryptography/hazmat/backends/openssl/ciphers.py -+++ b/src/cryptography/hazmat/backends/openssl/ciphers.py -@@ -17,6 +17,7 @@ from cryptography.hazmat.primitives.ciphers import modes - class _CipherContext(object): - _ENCRYPT = 1 - _DECRYPT = 0 -+ _MAX_CHUNK_SIZE = 2 ** 31 - - def __init__(self, backend, cipher, mode, operation): - self._backend = backend -@@ -125,22 +126,32 @@ class _CipherContext(object): - return bytes(buf[:n]) - - def update_into(self, data, buf): -- if len(buf) < (len(data) + self._block_size_bytes - 1): -+ total_data_len = len(data) -+ if len(buf) < (total_data_len + self._block_size_bytes - 1): - raise ValueError( - "buffer must be at least {} bytes for this " - "payload".format(len(data) + self._block_size_bytes - 1) - ) - -- buf = self._backend._ffi.cast( -- "unsigned char *", self._backend._ffi.from_buffer(buf) -- ) -+ data_processed = 0 -+ total_out = 0 - outlen = self._backend._ffi.new("int *") -- res = self._backend._lib.EVP_CipherUpdate( -- self._ctx, buf, outlen, -- self._backend._ffi.from_buffer(data), len(data) -- ) -- self._backend.openssl_assert(res != 0) -- return outlen[0] -+ baseoutbuf = self._backend._ffi.from_buffer(buf) -+ baseinbuf = self._backend._ffi.from_buffer(data) -+ -+ while data_processed != total_data_len: -+ outbuf = baseoutbuf + total_out -+ inbuf = baseinbuf + data_processed -+ inlen = min(self._MAX_CHUNK_SIZE, total_data_len - data_processed) -+ -+ res = self._backend._lib.EVP_CipherUpdate( -+ self._ctx, outbuf, outlen, inbuf, inlen -+ ) -+ self._backend.openssl_assert(res != 0) -+ data_processed += inlen -+ total_out += outlen[0] -+ -+ return total_out - - def finalize(self): - # OpenSSL 1.0.1 on Ubuntu 12.04 (and possibly other distributions) -diff --git a/tests/hazmat/primitives/test_ciphers.py b/tests/hazmat/primitives/test_ciphers.py -index f29ba9a9..b88610e7 100644 ---- a/tests/hazmat/primitives/test_ciphers.py -+++ b/tests/hazmat/primitives/test_ciphers.py -@@ -309,3 +309,20 @@ class TestCipherUpdateInto(object): - buf = bytearray(5) - with pytest.raises(ValueError): - encryptor.update_into(b"testing", buf) -+ -+ def test_update_into_auto_chunking(self, backend, monkeypatch): -+ key = b"\x00" * 16 -+ c = ciphers.Cipher(AES(key), modes.ECB(), backend) -+ encryptor = c.encryptor() -+ # Lower max chunk size so we can test chunking -+ monkeypatch.setattr(encryptor._ctx, "_MAX_CHUNK_SIZE", 40) -+ buf = bytearray(527) -+ pt = b"abcdefghijklmnopqrstuvwxyz012345" * 16 # 512 bytes -+ processed = encryptor.update_into(pt, buf) -+ assert processed == 512 -+ decryptor = c.decryptor() -+ # Change max chunk size to verify alternate boundaries don't matter -+ monkeypatch.setattr(decryptor._ctx, "_MAX_CHUNK_SIZE", 73) -+ decbuf = bytearray(527) -+ decprocessed = decryptor.update_into(buf[:processed], decbuf) -+ assert decbuf[:decprocessed] == pt diff --git a/meta-webos/recipes-devtools/python/python3-cryptography/0002-chunking-didn-t-actually-work-5499.patch b/meta-webos/recipes-devtools/python/python3-cryptography/0002-chunking-didn-t-actually-work-5499.patch deleted file mode 100644 index f28f41419..000000000 --- a/meta-webos/recipes-devtools/python/python3-cryptography/0002-chunking-didn-t-actually-work-5499.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 7c72190620c3ccaeeab53fdd93547ca4d37b2f6b Mon Sep 17 00:00:00 2001 -From: Paul Kehrer -Date: Sun, 25 Oct 2020 06:15:18 -0700 -Subject: [PATCH] chunking didn't actually work (#5499) - -Upstream-Status: Backport [https://github.com/pyca/cryptography/commit/836a92a28fbe9df8c37121e340b91ed9cd519ddd] - -Signed-off-by: Martin Jansa ---- - src/cryptography/hazmat/backends/openssl/ciphers.py | 2 +- - tests/hazmat/primitives/test_ciphers.py | 9 +++++++++ - 2 files changed, 10 insertions(+), 1 deletion(-) - -diff --git a/src/cryptography/hazmat/backends/openssl/ciphers.py b/src/cryptography/hazmat/backends/openssl/ciphers.py -index 86bc94b3..2b7da80c 100644 ---- a/src/cryptography/hazmat/backends/openssl/ciphers.py -+++ b/src/cryptography/hazmat/backends/openssl/ciphers.py -@@ -17,7 +17,7 @@ from cryptography.hazmat.primitives.ciphers import modes - class _CipherContext(object): - _ENCRYPT = 1 - _DECRYPT = 0 -- _MAX_CHUNK_SIZE = 2 ** 31 -+ _MAX_CHUNK_SIZE = 2 ** 31 - 1 - - def __init__(self, backend, cipher, mode, operation): - self._backend = backend -diff --git a/tests/hazmat/primitives/test_ciphers.py b/tests/hazmat/primitives/test_ciphers.py -index b88610e7..fd9048b7 100644 ---- a/tests/hazmat/primitives/test_ciphers.py -+++ b/tests/hazmat/primitives/test_ciphers.py -@@ -326,3 +326,12 @@ class TestCipherUpdateInto(object): - decbuf = bytearray(527) - decprocessed = decryptor.update_into(buf[:processed], decbuf) - assert decbuf[:decprocessed] == pt -+ -+ def test_max_chunk_size_fits_in_int32(self, backend): -+ # max chunk must fit in signed int32 or else a call large enough to -+ # cause chunking will result in the very OverflowError we want to -+ # avoid with chunking. -+ key = b"\x00" * 16 -+ c = ciphers.Cipher(AES(key), modes.ECB(), backend) -+ encryptor = c.encryptor() -+ backend._ffi.new("int *", encryptor._ctx._MAX_CHUNK_SIZE) diff --git a/meta-webos/recipes-devtools/python/python3-cryptography/0003-correct-buffer-overflows-cause-by-integer-overflow-i.patch b/meta-webos/recipes-devtools/python/python3-cryptography/0003-correct-buffer-overflows-cause-by-integer-overflow-i.patch deleted file mode 100644 index 449dd692e..000000000 --- a/meta-webos/recipes-devtools/python/python3-cryptography/0003-correct-buffer-overflows-cause-by-integer-overflow-i.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 6d0a76521abe287f5ddb5cd1cfbc799d35f08cf9 Mon Sep 17 00:00:00 2001 -From: Alex Gaynor -Date: Sun, 7 Feb 2021 11:36:56 -0500 -Subject: [PATCH] correct buffer overflows cause by integer overflow in openssl - (#5747) - -* correct buffer overflows cause by integer overflow in openssl - -frustratingly, there is no test for this -- that's because testing this -requires allocating more memory than is available in CI. - -fixes #5615. - -* backport CI fixes - -* another CI backport - -Upstream-Status: Backport [https://github.com/pyca/cryptography/commit/82b6ce28389f0a317bc55ba2091a74b346db7cae] - -Signed-off-by: Martin Jansa ---- - src/cryptography/hazmat/backends/openssl/ciphers.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/cryptography/hazmat/backends/openssl/ciphers.py b/src/cryptography/hazmat/backends/openssl/ciphers.py -index 2b7da80c..7ef5f1ea 100644 ---- a/src/cryptography/hazmat/backends/openssl/ciphers.py -+++ b/src/cryptography/hazmat/backends/openssl/ciphers.py -@@ -17,7 +17,7 @@ from cryptography.hazmat.primitives.ciphers import modes - class _CipherContext(object): - _ENCRYPT = 1 - _DECRYPT = 0 -- _MAX_CHUNK_SIZE = 2 ** 31 - 1 -+ _MAX_CHUNK_SIZE = 2 ** 30 - 1 - - def __init__(self, backend, cipher, mode, operation): - self._backend = backend diff --git a/meta-webos/recipes-devtools/python/python3-cryptography_2.8.bbappend b/meta-webos/recipes-devtools/python/python3-cryptography_2.8.bbappend deleted file mode 100644 index 03ae774c0..000000000 --- a/meta-webos/recipes-devtools/python/python3-cryptography_2.8.bbappend +++ /dev/null @@ -1,7 +0,0 @@ -# From https://lists.openembedded.org/g/openembedded-devel/message/97027 -FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -SRC_URI += " \ - file://0001-chunked-update_into-5419.patch \ - file://0002-chunking-didn-t-actually-work-5499.patch \ - file://0003-correct-buffer-overflows-cause-by-integer-overflow-i.patch \ -" From fba2618925310781ea81e995893b4e4444e637ba Mon Sep 17 00:00:00 2001 From: Muniraju Date: Thu, 9 Jun 2022 15:09:38 +0530 Subject: [PATCH 0417/2022] com.webos.app.enactbrowser=53 :Release Notes: Fix Tab reload and enter key issue :Detailed Notes: com.webos.app.enactbrowser: submissions/51..submissions/53 a1cd95b Handle VKB Enter key in the Input Box 0f6aeff Fix Tab reload and enter key issue :Testing Performed: Please check CCC tickets. :QA Notes: NA :Issues Addressed: [WRO-5943] CCC: com.webos.app.enactbrowser=53 [WRO-5489] [webOS OSE]:Enter button is not working when adding URL in Blocked Site filter. [WRO-6394] [OSE-RPi4]: Suspended Tab is reloaded [WRO-6448] [OSE-RPi4]: VKB is not disappearing after pressing Enter key Change-Id: I6f2a52314ef6083c04af53b0a824822d661bc036 --- .../com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb index aea5f90f8..bea508946 100644 --- a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb +++ b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=72b3e3cef46e5ab3e175e5b515dc3b18 \ " -WEBOS_VERSION = "1.0.0-51_95ef5379e8618915ed9adb7a0e41d833db45e3ae" +WEBOS_VERSION = "1.0.0-53_486958c512dca2e88a511cd8b2879c316c0e3e10" PR = "r16" inherit webos_public_repo From 1d61ee9739d61c061256077b231eb3fceed68f04 Mon Sep 17 00:00:00 2001 From: Sushovan G Date: Fri, 6 May 2022 12:39:04 +0530 Subject: [PATCH 0418/2022] ose: pulseaudio=34-r0,v15.0 audiod=39 ofono=webos2 :Release Notes: Pulseaudio version 15 upgradation & migration of features Static issues fix in audiod component :Detailed Notes: pulseaudio:submissions/33..submissions/34 a1f5f34a7 Pulseaudio upgradation V9.0 to v15.0 audiod:submissions/37..submissions/39 6a068a4 Fix static issues for AudioD fbca508 Revert "Fix static issues for AudioD" 9a0ed5c Added a2dp sink in audioRouter module b5632da Fix static issues for AudioD ofono: webos2 Fix pulseaudio hfp device error :Testing Performed: Testing details mentioned in the CCC ticket :QA Notes: NA :Issues Addressed: [WRO-6502] CCC: pulseaudio=ose:34-r0,v15.0 audiod=39 ofono=webos2 [WRO-5141] Pulseaudio v15.0 BT A2DP profile bug fix [WRO-3444] Implement pulseaudio 15.0 changes and meta changes [CID-8993230] Calling risky function [CID-97322] Calling risky function [CID-9005927] CERT-C Miscellaneous (CERT MSC33-C) Change-Id: I9acc49c54f7c06de37279a00cc24fd9d3b31f6f9 --- .../include/webos-preferred-versions.inc | 3 +- ...0001-Fix-pulseaudio-hfp-device-error.patch | 42 +++ .../ofono/ofono_%.bbappend | 3 +- .../recipes-multimedia/audiod/audiod.bb | 2 +- ...nt-conf-Add-allow-autospawn-for-root.patch | 96 ++++++ ...ild-remove-dependency-on-doxygen-bin.patch | 26 ++ .../0001-meson-Check-for-__get_cpuid.patch | 81 +++++ ...LFAGS-to-improve-reproducibility-bui.patch | 29 ++ .../pulseaudio/pulseaudio_15.0.bb | 98 ++++++ .../pulseaudio/pulseaudio_15.0.inc | 287 ++++++++++++++++++ 10 files changed, 664 insertions(+), 3 deletions(-) create mode 100644 meta-webos/recipes-connectivity/ofono/ofono/0001-Fix-pulseaudio-hfp-device-error.patch create mode 100644 meta-webos/recipes-multimedia/pulseaudio/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch create mode 100644 meta-webos/recipes-multimedia/pulseaudio/pulseaudio/0001-doxygen-meson.build-remove-dependency-on-doxygen-bin.patch create mode 100644 meta-webos/recipes-multimedia/pulseaudio/pulseaudio/0001-meson-Check-for-__get_cpuid.patch create mode 100644 meta-webos/recipes-multimedia/pulseaudio/pulseaudio/0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch create mode 100644 meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bb create mode 100644 meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.inc diff --git a/meta-webos/conf/distro/include/webos-preferred-versions.inc b/meta-webos/conf/distro/include/webos-preferred-versions.inc index 284fbf6ac..c94c50a45 100644 --- a/meta-webos/conf/distro/include/webos-preferred-versions.inc +++ b/meta-webos/conf/distro/include/webos-preferred-versions.inc @@ -2,5 +2,6 @@ PREFERRED_VERSION_webruntime = "91.%" PREFERRED_VERSION_mksnapshot-cross-${TARGET_ARCH} = "91.%" - GOVERSION = "1.16.%" +PREFERRED_VERSION_pulseaudio = "15.0-%" + diff --git a/meta-webos/recipes-connectivity/ofono/ofono/0001-Fix-pulseaudio-hfp-device-error.patch b/meta-webos/recipes-connectivity/ofono/ofono/0001-Fix-pulseaudio-hfp-device-error.patch new file mode 100644 index 000000000..5a2aab14c --- /dev/null +++ b/meta-webos/recipes-connectivity/ofono/ofono/0001-Fix-pulseaudio-hfp-device-error.patch @@ -0,0 +1,42 @@ +From 389dd8daedf97ee3e97319185c7682eaff99a675 Mon Sep 17 00:00:00 2001 +From: Thomas George C +Date: Wed, 1 Jun 2022 14:36:27 +0530 +Subject: [PATCH] Fix pulseaudio hfp device error + +:Release Notes: +Implement Fix pulseaudio hfp device error + +:Detailed Notes: +To fix the hfp sink creation from pulseaudio ofono backend, +permission for pulseaudio to use ofono is added in ofono conf + +:Testing Performed: +NA + +:QA Notes: +NA + +:Issues Addressed: +NA +--- + src/ofono.conf | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/src/ofono.conf b/src/ofono.conf +index 45cb15c1..9c546618 100644 +--- a/src/ofono.conf ++++ b/src/ofono.conf +@@ -19,6 +19,10 @@ + + + ++ ++ ++ ++ + + + +-- +2.17.1 + diff --git a/meta-webos/recipes-connectivity/ofono/ofono_%.bbappend b/meta-webos/recipes-connectivity/ofono/ofono_%.bbappend index 632ccae04..a0e8a48fa 100644 --- a/meta-webos/recipes-connectivity/ofono/ofono_%.bbappend +++ b/meta-webos/recipes-connectivity/ofono/ofono_%.bbappend @@ -2,8 +2,9 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -EXTENDPRAUTO:append = "webos1" +EXTENDPRAUTO:append = "webos2" SRC_URI += " \ file://0001-Fix-ougoing-call-hangup-not-responding.patch \ + file://0001-Fix-pulseaudio-hfp-device-error.patch \ " diff --git a/meta-webos/recipes-multimedia/audiod/audiod.bb b/meta-webos/recipes-multimedia/audiod/audiod.bb index f950bd9ce..14fb2a68f 100644 --- a/meta-webos/recipes-multimedia/audiod/audiod.bb +++ b/meta-webos/recipes-multimedia/audiod/audiod.bb @@ -23,7 +23,7 @@ RDEPENDS:${PN} = "\ pulseaudio-server \ " -WEBOS_VERSION = "1.0.0-37_6d94cf26af1696b8d907a886cc3600748d04d9af" +WEBOS_VERSION = "1.0.0-39_cf3bd1c9fe590040353b8049b9c73235dee74432" PR = "r31" inherit webos_component diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch new file mode 100644 index 000000000..3bdbab0a1 --- /dev/null +++ b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch @@ -0,0 +1,96 @@ +From babec3a50dd710d26b72f6c6d43bd79b04e954a6 Mon Sep 17 00:00:00 2001 +From: Tanu Kaskinen +Date: Tue, 28 Apr 2015 14:32:43 +0300 +Subject: [PATCH] client-conf: Add allow-autospawn-for-root + +Usually autospawning for root is a bad idea, since it can easily +interfere with other users' PulseAudio instances, but in embedded +environments where only root exists, autospawning is fine. + +Upstream-Status: Denied [Upstream hasn't so far been convinced that +this feature is needed. The view is that running the graphical session +as root doesn't make sense even on embedded systems, or if it does, +running PulseAudio in the system mode should be a good solution for +that use case. If someone can prove otherwise, the patch would +probably be accepted.] + +Signed-off-by: Tanu Kaskinen +--- + man/pulse-client.conf.5.xml.in | 9 +++++++++ + src/pulse/client-conf.c | 1 + + src/pulse/client-conf.h | 1 + + src/pulse/client.conf.in | 1 + + src/pulse/context.c | 2 +- + 5 files changed, 13 insertions(+), 1 deletion(-) + +diff --git a/man/pulse-client.conf.5.xml.in b/man/pulse-client.conf.5.xml.in +index b88898c..e737c96 100644 +--- a/man/pulse-client.conf.5.xml.in ++++ b/man/pulse-client.conf.5.xml.in +@@ -82,6 +82,15 @@ License along with PulseAudio; if not, see . + + +

allow-autospawn-for-root= Allow autospawning also for root. ++ Takes a boolean value, defaults to no. If the autospawn ++ option is disabled, this option has no effect. Autospawning for ++ root is disabled by default, because running PulseAudio as root will ++ interfere with regular users' PulseAudio instances. This option should be ++ enabled only in environments where there are no regular users at all.

++ ++ ++ \' \'{print$2}\' | awk -F \'>\' \'{print$NF}\'' % (self.feed_uri)) + if ret[0] != 0: + print('Error occured in curl : %s' % (ret[1])) + exit(ret[0]) + dirs=ret[1].strip().split('\n') + for idx,var in (enumerate(reversed(dirs))): + if (len(var) == 0) or not var[0].isalpha(): + dirs.pop() + return dirs + + def showAllVersions(self): + print('show all versions') + for i in self.support_version: + print(i[:-1]) + exit(0) + + def Update(self, silent=False): + if not silent: + print("Installed image version: %s" % self.installed_version) + for i in self.support_version: + if self.installed_version < i[:-1]: + self.upgradable_version.append(i[:-1]) + if not silent: + print('Upgradable image version') + for i in self.upgradable_version: + print(i) + + def Upgrade(self, version: str): + self.Update(silent=True) + if not self.isUpgradable(version): + print('Not Found version : %s' % version) + exit(1) + try: + os.makedirs(self.sysconfdir) + except OSError as exception: + if exception.errno != errno.EEXIST: + raise + os.chdir(self.sysconfdir) + with open('%s.conf' % (version), 'w') as f: + os.fchmod(f.fileno(), 0o644) + f.write('src/gz %s \"%s\"' % (version, os.path.join(self.feed_uri,version))) + print('Add package feed version : %s' % (version)) + + def isUpgradable(self, version: str): + for i in self.upgradable_version: + if i == version: + return True + return False + +if __name__ == '__main__': + opkg = parse() + if opkg.show_all_versions: + opkg.showAllVersions() + elif opkg.update: + opkg.Update() + elif opkg.upgrade: + opkg.Upgrade(opkg.upgrade_version) \ No newline at end of file diff --git a/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend b/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend index 9d532d914..af01b3058 100644 --- a/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend +++ b/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend @@ -1,16 +1,27 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webos7" +EXTENDPRAUTO:append = "webos8" FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" inherit webos_core_os_dep -SRC_URI += "file://fix-lsb_release-to-work-if-there-are-parens-in-release-codename.patch" +SRC_URI += "file://fix-lsb_release-to-work-if-there-are-parens-in-release-codename.patch \ + file://dist-update" WEBOS_TARGET_CORE_OS ?= "undefined" BUILD_INFO_FILE = "${DISTRO}-release" BUILD_DISTRIB_ID = "${@'${WEBOS_TARGET_CORE_OS}'.capitalize()}" +TRIMED_DISTRO_VERSION = "${@oe.utils.trim_version('${DISTRO_VERSION}')}" + +do_configure:append() { + cp ${WORKDIR}/dist-update ${S}/dist-update + if [ ! -z ${PACKAGE_FEED_URI} -a ! -z ${PACKAGE_FEED_BASE_PATH} ]; then + sed -e "s#@PACKAGE_FEED_URI@#${PACKAGE_FEED_URI}#" -e "s#@PACKAGE_FEED_BASE_PATH@#${PACKAGE_FEED_BASE_PATH}#" -e"s#@PACKAGE_DISTRO@#${DISTRO}#" -e"s#@TRIMED_DISTRO_VERSION@#${TRIMED_DISTRO_VERSION}#" -i ${S}/dist-update + URI="${@os.path.join('${PACKAGE_FEED_URI}','${PACKAGE_FEED_BASE_PATH}','${DISTRO}','${TRIMED_DISTRO_VERSION}')}" + echo "src/gz ${TRIMED_DISTRO_VERSION} \"${URI}\"" > ${S}/${TRIMED_DISTRO_VERSION}.conf + fi +} do_install:append() { # Remove lsb-release file and directory created by parent recipe. @@ -19,4 +30,16 @@ do_install:append() { sed -i -e 's/^CHECKFIRST=.*/CHECKFIRST="\${sysconfdir}\/${BUILD_INFO_FILE}"/' ${D}${base_bindir}/lsb_release echo "${BUILD_DISTRIB_ID} release ${DISTRO_VERSION}-${WEBOS_DISTRO_BUILD_ID} (${WEBOS_DISTRO_RELEASE_CODENAME})" > ${D}${sysconfdir}/${BUILD_INFO_FILE} -} + + # install dist-update + if [ ! -z ${PACKAGE_FEED_URI} -a ! -z ${PACKAGE_FEED_BASE_PATH} ]; then + install -d ${D}${bindir} + install -m 0755 ${S}/dist-update ${D}${bindir} + fi + + # install ${TRIMED_DISTRO_VERSION}.conf + if [ ! -z ${PACKAGE_FEED_URI} -a ! -z ${PACKAGE_FEED_BASE_PATH} ]; then + install -d ${D}${sysconfdir}/opkg + install -m 0644 ${S}/${TRIMED_DISTRO_VERSION}.conf ${D}${sysconfdir}/opkg + fi +} \ No newline at end of file From 39952585e780dfb635fb29f5409dcc551de50dbc Mon Sep 17 00:00:00 2001 From: Muniraju Date: Thu, 16 Jun 2022 20:34:24 +0530 Subject: [PATCH 0425/2022] com.webos.app.home=20 :Release Notes: Fix Home app relaunch issue :Detailed Notes: com.webos.app.home: submissions/19..submissions/20 04273f7 Fix Home app relauch issue :Testing Performed: Please check CCC tickets. :QA Notes: NA :Issues Addressed: [WRO-6696] CCC: com.webos.app.home=20 [WRO-3101] [OSE-RPi4] : Home app is relaunched at the first boot Change-Id: I4f850f4dd8574851748b129fc61a1715fdb86a64 --- .../recipes-webos/com.webos.app.home/com.webos.app.home.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb b/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb index f386a80bf..9a86383a7 100644 --- a/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb +++ b/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=0ec407cd2d4a192e0c60888f4ec66dd7 \ " -WEBOS_VERSION = "0.1.0-19_c696682500bf6cbdc02a79f6879bf1294e7ecfd0" +WEBOS_VERSION = "0.1.0-20_cf80667ececed393389d35291248148693c7742e" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" PR = "r3" From 0fb37ba0ced59e3c66a892e2ba6e329ba5b9b782 Mon Sep 17 00:00:00 2001 From: Muniraju Date: Thu, 16 Jun 2022 14:17:15 +0530 Subject: [PATCH 0426/2022] com.webos.app.settings=20 :Release Notes: Fix timezone loading issue :Detailed Notes: com.webos.app.settings: submissions/19..submissions/20 3cc7450 Fix timezone loading :Testing Performed: Please check CCC tickets. :QA Notes: NA :Issues Addressed: [WRO-6693] CCC: com.webos.app.settings=20 [WRO-6214] [OSE-RPi4]: TimeZone is Not Loading when Set Automatically is turned off Change-Id: Ib0e2b9ad320cbc7a8270dcbcacf7947fa5d2e039 --- .../com.webos.app.settings/com.webos.app.settings.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb b/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb index 22492ac2c..a7e59e533 100644 --- a/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb +++ b/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=82c76ba3ea1ed22d2b1b41add2fbdc19 \ " -WEBOS_VERSION = "1.1.0-19_49b934b6df3440ed62a9eed26c3f262ad8adc53e" +WEBOS_VERSION = "1.1.0-20_b5732f7291b83757c340c6cb58481bd0103dde85" PR = "r3" inherit webos_component From 89d73386ffb54437c5e68c0123da9a8dbbd808ef Mon Sep 17 00:00:00 2001 From: "moorthy.bs" Date: Thu, 16 Jun 2022 11:10:10 +0530 Subject: [PATCH 0427/2022] ose: g-camera-pipeline=13.gav.28 :Release Notes: Coverity static analysis issue fix :Detailed Notes: g-camera-pipeline: submissions/13.gav.27..submissions/13.gav.28 9287f86 fix for static analysis issues :Testing Performed: Please refer test results in WRO-6680 :QA Notes: NA :Issues Addressed: [WRO-6680] CCC: g-camera-pipeline=13.gav.28 [WRO-6011] address static analysis issue in ose Change-Id: Ib7efc27adf14b9786978be1d8bcb00c1b6f9b63a --- meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb index e7566d450..a81cbdfcd 100644 --- a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb +++ b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb @@ -24,7 +24,7 @@ DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad DEPENDS:append:rpi = " userland" WEBOS_GIT_PARAM_BRANCH = "@gav" -WEBOS_VERSION = "1.0.0-13.gav.27_e68fd50c6837edd62501448bcdf75e2c8a766a01" +WEBOS_VERSION = "1.0.0-13.gav.28_0ff829db657fdcd4637c5c874774d1b8c77f9a61" WEBOS_GIT_PARAM_BRANCH:raspberrypi3 = "master" From bb66dce92c0865aebae2081628fcb6ad054122e6 Mon Sep 17 00:00:00 2001 From: "manjuraehmad.momin" Date: Wed, 15 Jun 2022 18:49:18 +0530 Subject: [PATCH 0428/2022] pmtrace=10 notificationmgr=20 :Release Notes: Fix static analysis issues for pmtrace and notificationmgr :Detailed Notes: Fix static issues related to integer overflow and out-of-bound access for pmtrace and tring not null terminated related issues for notificationmgr pmtrace: submissions/9..submissions/10 01403cd Fix integer overflow and out-of-bound access issues notificationmgr: submissions/19..submissions/20 c5fc3d7 Fix coverity issues having high impact :Testing Performed: Refer [WRO-6650] for test results :QA Notes: :Issues Addressed: [WRO-6650] CCC: pmtrace=10 notificationmgr=20 [WRO-6154] Fix static issues for pmtrace, notificationmgr on OSE [CID-9325515] String not null terminated [CID-9325514] String not null terminated [CID-9304896] Out-of-bounds access [CID-87679] Integer overflowed argument Change-Id: I84e460b97f0555ba79ff4ceb9e912179155bf995 --- meta-webos/recipes-webos/notificationmgr/notificationmgr.bb | 2 +- meta-webos/recipes-webos/pmtrace/pmtrace.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb b/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb index 531c4bce8..b66e17af3 100644 --- a/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb +++ b/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb @@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7ca DEPENDS = "glib-2.0 luna-service2 libpbnjson pmloglib boost libxml++" -WEBOS_VERSION = "1.0.0-19_c45801ac37686aa5552a5218ab50103677aada67" +WEBOS_VERSION = "1.0.0-20_ce98cd171cdd5ed57d3a7aeeefb1938e1ccbc686" PR = "r9" inherit webos_component diff --git a/meta-webos/recipes-webos/pmtrace/pmtrace.bb b/meta-webos/recipes-webos/pmtrace/pmtrace.bb index ab29445b2..9d5649324 100644 --- a/meta-webos/recipes-webos/pmtrace/pmtrace.bb +++ b/meta-webos/recipes-webos/pmtrace/pmtrace.bb @@ -18,7 +18,7 @@ RDEPENDS:${PN} += " \ lttng-modules \ " -WEBOS_VERSION = "1.0.0-9_baf2c8ce00a722e9f58a1359993bf887b30d27e5" +WEBOS_VERSION = "1.0.0-10_69f1fdfaa50672e7c08c79960c5f0de57714c242" PR = "r11" inherit webos_component From 93939eae180bc90a2eb5bd1489616ba479eb2053 Mon Sep 17 00:00:00 2001 From: "akanksha.gupta" Date: Wed, 15 Jun 2022 18:38:33 +0530 Subject: [PATCH 0429/2022] activitymanager=32 :Release Notes: Fix coverity issues in activitymanager :Detailed Notes: Fixed below coverity issue 9005590 CERT-C Miscellaneous 9005599 CERT-C Miscellaneous Adding srandom() before generating random number using random() - Generation of random numbers depends on seed. - If no seed value is provided, the random function is automatically seeded with a value of 1 which may result to same random numbers on execution - srandom() is used to randomize the seed itself. activitymanager: submissions/31..submissions/32 d027d11 Fix coverity issue activitymanager :Testing Performed: Refer [WRO-6649] for Results :QA Notes: N/A :Issues Addressed: [WRO-6093] Fix coverity issue for Activitymanager [WRO-6649] CCC: activitymanager=32 Change-Id: I18474854c785c5f8b3a814aad31f98e8b7fcbb67 --- meta-webos/recipes-webos/activitymanager/activitymanager.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/activitymanager/activitymanager.bb b/meta-webos/recipes-webos/activitymanager/activitymanager.bb index b44c0d99b..994c79fb2 100644 --- a/meta-webos/recipes-webos/activitymanager/activitymanager.bb +++ b/meta-webos/recipes-webos/activitymanager/activitymanager.bb @@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "luna-service2 db8 boost libpbnjson glib-2.0 pmloglib ${VIRTUAL-RUNTIME_init_manager}" -WEBOS_VERSION = "3.0.0-31_98f0e91eef90e5f8c2b4c22d1164d0b824d39995" +WEBOS_VERSION = "3.0.0-32_984034d835f3f59d95739b6ca85793f4b734913e" PR = "r11" inherit webos_component From 1fe7a66c1ceeb3ab59058dd1779b2163a4f36a54 Mon Sep 17 00:00:00 2001 From: "venugopal.k" Date: Wed, 15 Jun 2022 16:08:57 +0530 Subject: [PATCH 0430/2022] ose: appinstalld2=39 :Release Notes: Fix coverity issue AUTO_CAUSES_COPY (AUTO_CAUSES_COPY) :Detailed Notes: appinstalld2: submissions/37..submissions/39 0a5f7a3 Revert "Support Service-Only Installation" b87a7cf Fix coverity issue AUTO_CAUSES_COPY (AUTO_CAUSES_COPY) 4195269 Support Service-Only Installation :Testing Performed: Test Result updated in WRO-6640 :QA Notes: N/A :Issues Addressed: [WRO-6620] Fix coverity issue AUTO_CAUSES_COPY (AUTO_CAUSES_COPY) [WRO-6640] CCC: appinstalld2=39 Change-Id: I4309bb0e7ad7622c8f1f063b16be6ff14daf8fbe --- meta-webos/recipes-webos/appinstalld2/appinstalld2.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb b/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb index 678d006f2..b5f5b0b85 100644 --- a/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb +++ b/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ DEPENDS = "glib-2.0 luna-service2 libpbnjson pmloglib pmtrace boost icu" RDEPENDS:${PN} = "applicationinstallerutility ecryptfs-utils librolegen" -WEBOS_VERSION = "1.0.0-37_df8107da7a26b683a84098a9e0dee83cb333008e" +WEBOS_VERSION = "1.0.0-39_d7aed464e6e702c4a72f23aaaad0545a5dee74aa" PR = "r4" inherit webos_component From 7db09276a3fc24464695398b899fc9fb98a4015f Mon Sep 17 00:00:00 2001 From: "kijoong.lee" Date: Tue, 14 Jun 2022 14:40:02 +0900 Subject: [PATCH 0431/2022] opencv=webos3 tensorflow-lite=r3 :Release Notes: Add TensorFlow Lite patch for auto delegation Add dnn library to OpenCV :Detailed Notes: :Testing Performed: Local Build Test :QA Notes: N/A :Issues Addressed: [WRO-6603] CCC: opencv=webos3 tensorflow-lite=r3 [WRO-1525] Implement Auto Acceleration Policy Manager Change-Id: If32e49df700e5fecae0c2d7e7475d7c47d790a51 --- .../opencv/opencv_4.%.bbappend | 5 +- ...to-delegation-support-when-using-gpu.patch | 84 +++++++++++++++++++ .../tensorflow-lite/tensorflow-lite_2.6.2.bb | 3 +- 3 files changed, 90 insertions(+), 2 deletions(-) create mode 100644 meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0005-auto-delegation-support-when-using-gpu.patch diff --git a/meta-webos/recipes-support/opencv/opencv_4.%.bbappend b/meta-webos/recipes-support/opencv/opencv_4.%.bbappend index d142c48a9..61ebfd5a0 100644 --- a/meta-webos/recipes-support/opencv/opencv_4.%.bbappend +++ b/meta-webos/recipes-support/opencv/opencv_4.%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2018-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webos2" +EXTENDPRAUTO:append = "webos3" # Adds dependency on GPLv2 tbb PACKAGECONFIG:remove = "tbb" @@ -9,6 +9,9 @@ PACKAGECONFIG:remove = "tbb" PACKAGECONFIG:remove:armv4 = "eigen" PACKAGECONFIG:remove:armv5 = "eigen" +# Adds deep learning library for AI Framework +PACKAGECONFIG:append = "${@bb.utils.contains('DISTRO_FEATURES', 'aiframework', ' opencl dnn text', '', d)}" + # http://caprica.lgsvl.com:8080/Errors/Details/1447234 VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS:${PN}-apps:append:class-target = " ${VIRTUAL-RUNTIME_bash}" diff --git a/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0005-auto-delegation-support-when-using-gpu.patch b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0005-auto-delegation-support-when-using-gpu.patch new file mode 100644 index 000000000..e14ec284b --- /dev/null +++ b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0005-auto-delegation-support-when-using-gpu.patch @@ -0,0 +1,84 @@ +From b0ecee5b05259d8804b1a344d307be4bf8673f48 Mon Sep 17 00:00:00 2001 +From: "kijoong.lee" +Date: Mon, 13 Jun 2022 18:43:31 +0900 +Subject: [PATCH] auto delegation support when using gpu + +--- + tensorflow/lite/delegates/gpu/delegate.cc | 23 +++++++++++++++++++++++ + tensorflow/lite/delegates/gpu/delegate.h | 5 +++++ + 2 files changed, 28 insertions(+) + +diff --git a/tensorflow/lite/delegates/gpu/delegate.cc b/tensorflow/lite/delegates/gpu/delegate.cc +index 63ed22373dd..f044d0844fb 100644 +--- a/tensorflow/lite/delegates/gpu/delegate.cc ++++ b/tensorflow/lite/delegates/gpu/delegate.cc +@@ -86,6 +86,11 @@ class Delegate { + if (options_.max_delegated_partitions <= 0) { + options_.max_delegated_partitions = 1; + } ++ if (options_.cpu_fallback_percentage < 0) { ++ options_.cpu_fallback_percentage = 0; ++ } else if (options_.cpu_fallback_percentage > 100) { ++ options_.cpu_fallback_percentage = 100; ++ } + } + + TfLiteDelegate* tflite_delegate() { return &delegate_; } +@@ -98,6 +103,7 @@ class Delegate { + int MaxDelegatedPartitions() const { + return options_.max_delegated_partitions; + } ++ int CPUFallbackPercentage() const { return options_.cpu_fallback_percentage; } + int num_delegate_kernels() const { return num_delegate_kernels_; } + + private: +@@ -427,6 +433,22 @@ TfLiteStatus DelegatePrepare(TfLiteContext* context, TfLiteDelegate* delegate) { + TfLiteIntArray* ops_to_replace = + GetOpsToReplace(context, gpu_delegate->IsQuantOpsAllowed(), + gpu_delegate->MaxDelegatedPartitions()); ++ if (gpu_delegate->CPUFallbackPercentage() != 0) { ++ auto partition_size = ++ ops_to_replace->size - ++ ops_to_replace->size * gpu_delegate->CPUFallbackPercentage() / 100; ++ TfLiteIntArray* partitioned_ops_to_replace = ++ TfLiteIntArrayCreate(partition_size); ++ for (int i = 0; i < partition_size; i++) { ++ partitioned_ops_to_replace->data[i] = ops_to_replace->data[i]; ++ } ++ TFLITE_LOG_PROD( ++ TFLITE_LOG_INFO, ++ "GPU Load Balancing: %d operations are forced to run on CPU.", ++ ops_to_replace->size * gpu_delegate->CPUFallbackPercentage() / 100); ++ TfLiteIntArrayFree(ops_to_replace); ++ ops_to_replace = partitioned_ops_to_replace; ++ } + const auto status = context->ReplaceNodeSubsetsWithDelegateKernels( + context, kRegistration, ops_to_replace, delegate); + TFLITE_LOG_PROD(TFLITE_LOG_INFO, "Created %d GPU delegate kernels.", +@@ -450,6 +472,7 @@ TfLiteGpuDelegateOptionsV2 TfLiteGpuDelegateOptionsV2Default() { + options.inference_priority3 = TFLITE_GPU_INFERENCE_PRIORITY_AUTO; + options.experimental_flags = TFLITE_GPU_EXPERIMENTAL_FLAGS_ENABLE_QUANT; + options.max_delegated_partitions = 1; ++ options.cpu_fallback_percentage = 0; + return options; + } + +diff --git a/tensorflow/lite/delegates/gpu/delegate.h b/tensorflow/lite/delegates/gpu/delegate.h +index 40a06bb4384..8a84b0771f8 100644 +--- a/tensorflow/lite/delegates/gpu/delegate.h ++++ b/tensorflow/lite/delegates/gpu/delegate.h +@@ -101,6 +101,11 @@ typedef struct { + // This limits the maximum number of partitions to be delegated. By default, + // it's set to 1 in TfLiteGpuDelegateOptionsV2Default(). + int32_t max_delegated_partitions; ++ ++ // A value between 0 and 100, that represents percentage of nodes that are ++ // forced to run on CPU despite it is supported in GPU. ++ // it's set to 0 in TfLiteGpuDelegateOptionsV2Default(). ++ int32_t cpu_fallback_percentage; + } TfLiteGpuDelegateOptionsV2; + + // Populates TfLiteGpuDelegateOptionsV2 as follows: +-- +2.17.1 + diff --git a/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb index 0f4f14478..48dbc1ff4 100644 --- a/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb +++ b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb @@ -44,6 +44,7 @@ SRC_URI = " \ file://0002-enable-external-delegate-in-benchmarktool.patch \ file://0003-Fix-return-type-issues.patch \ file://0004-opencl_wrapper-dlopen-libOpenCL.so.1-instead-of-libO.patch \ + file://0005-auto-delegation-support-when-using-gpu.patch \ file://tensorflowlite.pc.in \ " @@ -57,7 +58,7 @@ SRC_URI[model-mobv1.sha256sum] = "2f8054076cf655e1a73778a49bd8fd0306d32b290b7e57 inherit cmake -PR = "r2" +PR = "r3" S = "${WORKDIR}/git" DEPENDS += " \ From 36b62a99eee15977e47fcfacd1d1f6c175fc87c9 Mon Sep 17 00:00:00 2001 From: "seungchul.han" Date: Thu, 16 Jun 2022 10:51:44 +0900 Subject: [PATCH 0432/2022] edgeai-vision=8 :Release Notes: Fixed static analysis issues for edge ai vision :Detailed Notes: edgeai-vision: submissions/7..submissions/8 dd2ff3a Fixed static analysis issues for edge ai vision Fixed static analysis issues for edge ai vision CID 9326480 Identical code for different branches CID 9326491 Identical code for different branches CID 9326495 Identical code for different branches CID 9326499 Identical code for different branches CID 9326503 Uninitialized scalar field CID 9326508 Identical code for different branches CID 9326518 Identical code for different branches CID 9326524 Uncaught exception CID 9326526 Identical code for different branches CID 9326545 Uncaught exception CID 9326556 Uninitialized scalar variable CID 9326558 Identical code for different branches CID 9326562 Identical code for different branches CID 9326564 Uninitialized scalar field CID 9326575 Identical code for different branches CID 9326584 Pointer comparison with string literal CID 9326594 Uninitialized scalar field CID 9326595 Identical code for different branches CID 9326605 Pointer comparison with string literal CID 9326618 Identical code for different branches CID 9326633 Identical code for different branches CID 9326636 Identical code for different branches :Testing Performed: Local test :QA Notes: N/A :Issues Addressed: [WRO-6603] CCC: edgeai-vision=8 [WRO-6580] Fixed static analysis issues for edge ai vision Change-Id: I512e345e83be663205e033c82a45f68df1a464ed --- meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb b/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb index 9a1f5ff88..e0036e437 100644 --- a/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb +++ b/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb @@ -5,7 +5,7 @@ DESCRIPTION = "webOS Edge AI Computer Vision Library using TensorflowLite" SECTION = "libs" LICENSE = "CLOSED" -WEBOS_VERSION = "1.0.0-7_21bd046126c31a1c503aaad418781bc03832d09a" +WEBOS_VERSION = "1.0.0-8_4c00ce905a21e4e297a8a7f77b5445780825f934" WEBOS_REPO_NAME = "edge-ai-computer-vision" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" From a02d5cc3a91c850e47721d83eb76885719188b99 Mon Sep 17 00:00:00 2001 From: Pankaj Maharana Date: Thu, 3 Mar 2022 17:22:32 +0530 Subject: [PATCH 0433/2022] ose: media-codec-interface=7-r5,webosrpi1 wam=59-r45 webruntime_91=19-r54 :Release Notes: - Implement VEA/VDA in MCIL using V4L2 - Address Site filter, Popup blocker and Cookie Manager review comments for browser service :Detailed Notes: media-codec-interface: submissions/3..submissions/7 83f7779 Add FlushFrame function to VideoEncoderAPI 744d3bb Fix Static Analysis issue for using uninitialized variable 9a53849 Fix error, info and debug logs for both encoder & decoder c4eab74 fixup! Video Encoder/Decoder API changes for future expansion 2bb8e3f Support extension of V4L2VideoEncoder for other platforms f6654bc Video Encoder/Decoder API changes for future expansion 14b64e4 fixup! Rename codec_api as api and add impl from media-codec-ose d3aaaa4 Rename codec_api as api and add impl from media-codec-ose 5b698ad Move encoder/decoder api files to codec_api directory eb80529 Rename VideoCodecType and remove unnecessary usage f424024 fixup! Encoder interface changes to support VEA implementation 2813271 fixup! Encoder interface changes to support VEA implementation 22689c0 Encoder interface changes to support VEA implementation 8a19725 Fix dmabuf fd data type for default initialization a9873dd Separate interface classes and reformat code for data types ec94965 Modify namespace for encoder related classes. fbbc27f Modify namespace for decoder related classes. 3b6fd8f Remove OutputRecord type from mcil since not needed 4a2baec Rename decoder/encoder delegate classes as client classes e2d0f5e Remove StartDevicePoll to allow device poll thread in MCIL 9e765bd Fix interfaces for getting current input buffer id and split DoReset 50fcbb6 Remove delay ms arguement for decoder thread tasks c375cd6 Fix buffer PTS data type from unsigned to signed int64 bdf314c Pass correct frameRate values of encoder/decoder at acquire() API 0a2dd2b Encoder resouce calculator changes 4c716c8 Vdec resource handling acquire/release reformating 6921dc5 Add resource calculator implementation for vdec resource f14d6f4 Remove unnecessary implementation class name as friend class dfe6bb8 Fix getting supported profiles for encoder a885936 Fix some logs, init sequence and thread class to base 64f1e7b Update encoder interfaces and add interfaces for decoder 244904f Initial and base commit for video encoder interface media-codec-interface: r4..r5 - Remove media-codec-ose repo information media-codec-interface: webosrpi1 - Add "V4L2" as encoder for Raspberrypi webruntime_91: submissions/18..submissions/19 64367b22bd [op][n_upsable][media] Implement WebOSVideoEncodeAccelerator for webOS f1b4c01ccb [op][n_upsable][media] Implement WebOSVideoDecodeAccelerator for webOS 507ff3d456 [op][n_upsable][media] Add support for "enableWebOSVDA" property 0c4fadc705 Revert "[op][n_upsable][webrtc] Implement webrtc video encoder interface" 9beeb7bbfb [op][n_upsable][app_shell] Implement Cookie Management using JS Injection 1f81cf234f [op][n_upsable][app_shell] PopUp blocker feature using JS Injection ea3f8f6787 [op][n_upsable][app_shell] Implement site filter using JS Injection 49a24b43b6 [op][n_upsable][app_shell] Implement URLDatabase using sqlite 2b3ec25c82 [op][n_upsable][app_shell] implement neva browser service 6ab69dee30 Revert "[op][n_upsable][app_shell] Implement URLDatabase using sqlite" e1a9e126a2 Revert "[op][n_upsable][app_shell] Implement site filter using JS Injection" 9cecf97d65 Revert "[op][n_upsable][app_shell] PopUp blocker feature using JS Injection" 0a776f25d0 Revert "[op][n_upsable][app_shell] Implement Cookie Management using JS Injection" 2ba5e092dd Revert "fixup! [op][n_upsable][app_shell] Implement Cookie Management using JS Injection" 89ace26c49 Revert "fixup! [op][n_upsable][app_shell] Implement site filter using JS" 10966e9817 Revert "[op][n_upsable][static_analysis] Fix "Unchecked return value" issue" webruntime: r53..r54 - Add webos-codec PACKAGECONFIG wam: submissions/58..submissions/59 3aafd7b [op][n_upsable][webrtc] Add app info property named "enableWebOSVDA" 42dfad3 [op][systemd][webos] Add lsm-ready condition 1231106 [op][systemd] Don't bind to surface-manager.service wam: r44..r45 - Add WebCodecs,MediaStreamInsertableStreams to ENABLE_BLINK_FEATURES - Disable runtime Platform Encoder :Testing Performed: CCC testing :QA Notes: N/A :Issues Addressed: [WRO-4776] Implement WebOSVideoEncodeAccelerator for webOS [WRO-6349] Implement WebOSVideoDecodeAccelerator for webOS [WRO-1909] Add support for enableWebOSVDA property in appinfo json [WRO-4014] [RDX_CRASH][webos] /usr/bin/WebAppMgr in raise (libc.so.6 + 0x3681c) [WRO-6168] Address Site filter, Popup blocker and Cookie Manager review comments for browser service [WRO-6499] CCC: media-codec-interface=7-r5webosrpi1 wam=59-r45 webruntime_91=19-r54 Change-Id: I38daec2086409a2ec577fd67802bb600dac761b4 --- .../media-codec-interface.bbappend | 6 ++++ .../media-codec-interface.bb | 20 +++--------- ...module-for-replacing-webos-variables.patch | 32 ------------------- .../chromium/webruntime-repo_91.inc | 2 +- .../recipes-webos/chromium/webruntime.inc | 8 +++-- meta-webos/recipes-webos/wam/wam.bb | 8 ++--- 6 files changed, 20 insertions(+), 56 deletions(-) create mode 100644 meta-webos-raspberrypi/recipes-webos/media-codec-interface/media-codec-interface.bbappend delete mode 100644 meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface/0001-Include-webOS-module-for-replacing-webos-variables.patch diff --git a/meta-webos-raspberrypi/recipes-webos/media-codec-interface/media-codec-interface.bbappend b/meta-webos-raspberrypi/recipes-webos/media-codec-interface/media-codec-interface.bbappend new file mode 100644 index 000000000..816fc9822 --- /dev/null +++ b/meta-webos-raspberrypi/recipes-webos/media-codec-interface/media-codec-interface.bbappend @@ -0,0 +1,6 @@ +# Copyright (c) 2022 LG Electronics, Inc. + +EXTENDPRAUTO:append:rpi = "webosrpi1" + +USE_ENCODER:rpi = "V4L2" + diff --git a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb index d838f26d1..26f458ddc 100644 --- a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb +++ b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb @@ -21,25 +21,13 @@ COMPATIBLE_MACHINE = "^qemux86$|^qemux86-64$|^raspberrypi3$|^raspberrypi3-64$|^r DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad umediaserver media-resource-calculator" DEPENDS:append:rpi = " virtual/libomxil" -WEBOS_VERSION = "1.0.0-3_13f4a0e50c95f7ecf04be37949c0da266ba221d3" -PR = "r4" - -SRCREV_mcil = "ef2a9b183262a04e8246df951acf4693a18b3cd6" - -WEBOS_REPO_NAME_MCIL ?= "media-codec-ose" -WEBOS_GIT_REPO_MCIL ?= "${WEBOSOSE_GIT_REPO}" -WEBOS_GIT_REPO_COMPLETE_MCIL ?= "${WEBOS_GIT_REPO_MCIL}/${WEBOS_REPO_NAME_MCIL}${WEBOSOSE_GIT_PROTOCOL};branch=master" +WEBOS_VERSION = "1.0.0-7_e987aaf361d9e6d94c0b446c6e3bee544c5fdf47" +PR = "r5" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE};name=main" -SRC_URI:append = "\ - ${WEBOS_GIT_REPO_COMPLETE_MCIL};destsuffix=git/src/codec_impl;name=mcil \ -" - -FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -SRC_URI:append = "\ - file://0001-Include-webOS-module-for-replacing-webos-variables.patch \ -" +USE_ENCODER ?= "GST" +EXTRA_OECMAKE += "-DUSE_ENCODER_BUILD:STRING=${USE_ENCODER}" S = "${WORKDIR}/git" diff --git a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface/0001-Include-webOS-module-for-replacing-webos-variables.patch b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface/0001-Include-webOS-module-for-replacing-webos-variables.patch deleted file mode 100644 index 59617e055..000000000 --- a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface/0001-Include-webOS-module-for-replacing-webos-variables.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 3d879e5ff146067af014898efde115115f23ad62 Mon Sep 17 00:00:00 2001 -From: Kyungjik Min -Date: Sat, 10 Jul 2021 02:35:13 +0900 -Subject: [PATCH] Include webOS module for replacing webos variables correctly - ---- - src/CMakeLists.txt | 5 ++++- - ...{media-codec-interface.pc => media-codec-interface.pc.in} | 0 - 2 files changed, 4 insertions(+), 1 deletion(-) - rename src/{media-codec-interface.pc => media-codec-interface.pc.in} (100%) - -diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt -index 18cbd41..257218e 100644 ---- a/src/CMakeLists.txt -+++ b/src/CMakeLists.txt -@@ -53,5 +53,8 @@ install(TARGETS ${MEDIA_CODEC_INTERFACE_LIB} DESTINATION lib) - install(FILES ${MEDIA_CODEC_INTERFACE_HEADERS} DESTINATION include/mcil) - - #install media-codec-interface.pc file --install(FILES media-codec-interface.pc DESTINATION share/pkgconfig) -+include(webOS/webOS) -+webos_modules_init(1 6 3) -+configure_file(media-codec-interface.pc.in ${CMAKE_BINARY_DIR}/media-codec-interface.pc @ONLY) -+install(FILES ${CMAKE_BINARY_DIR}/media-codec-interface.pc DESTINATION share/pkgconfig) - -diff --git a/src/media-codec-interface.pc b/src/media-codec-interface.pc.in -similarity index 100% -rename from src/media-codec-interface.pc -rename to src/media-codec-interface.pc.in --- -2.17.1 - diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc index cdba5c4e6..12c8dfb08 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=c31f1ae166739be9ca186deacf4b32e4" WEBOS_REPO_NAME = "chromium91" -WEBOS_VERSION = "91.0.4472.114-18_427f71612496e3072c1a0c2ee6126be3fa11a941" +WEBOS_VERSION = "91.0.4472.114-19_c024dab06aef29336785ff514d34ee53a55c7a2d" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" diff --git a/meta-webos/recipes-webos/chromium/webruntime.inc b/meta-webos/recipes-webos/chromium/webruntime.inc index 9c6eb3f3e..09726dfe2 100644 --- a/meta-webos/recipes-webos/chromium/webruntime.inc +++ b/meta-webos/recipes-webos/chromium/webruntime.inc @@ -20,7 +20,7 @@ inherit webos_system_bus DEPENDS = "virtual/gettext wayland wayland-native luna-service2 pixman freetype fontconfig openssl pango cairo icu webos-wayland-extensions libxkbcommon libexif dbus pciutils udev libcap alsa-lib virtual/egl elfutils-native libdrm atk gperf-native gconf libwebosi18n bison-native xorgproto nss nspr curl nspr-native nss-native pmloglib glib-2.0-native python3-six-native python3-beautifulsoup4-native python3-soupsieve-native python3-lxml-native python3-html5lib-native python3-webencodings-native" -INC_PR = "r53" +INC_PR = "r54" # Enable this in webos-local.conf or in recipe to build DEPLOY_CHROMEDRIVER ?= "false" DEPLOY_WAM_DEMO ?= "false" @@ -42,9 +42,10 @@ WEBOS_SYSTEM_BUS_FILES_LOCATION = "${S}/files/sysbus" WEBOS_SYSTEM_BUS_MANIFEST_TYPE = "PASS" PACKAGECONFIG_NEVA_WEBRTC ?= "neva-webrtc" +PACKAGECONFIG_WEBOS_CODEC ?= "webos-codec" PACKAGECONFIG_MEDIA ?= "neva-media gstreamer umediaserver gav" PACKAGECONFIG ?= "" -PACKAGECONFIG:append:hardware = " ${PACKAGECONFIG_MEDIA} ${PACKAGECONFIG_NEVA_WEBRTC}" +PACKAGECONFIG:append:hardware = " ${PACKAGECONFIG_MEDIA} ${PACKAGECONFIG_NEVA_WEBRTC} ${PACKAGECONFIG_WEBOS_CODEC}" PACKAGECONFIG[gstreamer] = "use_gst_media=true enable_webm_video_codecs=false,use_gst_media=false,g-media-pipeline" PACKAGECONFIG[umediaserver] = ",,umediaserver" # Options to enable debug build. Add this PACKAGECONFIG to webos-local.conf to enable debug build @@ -54,7 +55,8 @@ PACKAGECONFIG[debug-blink] = "blink_symbol_level=2,blink_symbol_level=1" PACKAGECONFIG[neva-media] = "use_neva_media=true, use_neva_media=false" PACKAGECONFIG[av1-codec] = "enable_av1_decoder=true, enable_av1_decoder=false" PACKAGECONFIG[gav] = "use_gav=true,use_gav=false" -PACKAGECONFIG[neva-webrtc] = "use_neva_webrtc=true,use_neva_webrtc=false,media-codec-interface,media-codec-interface" +PACKAGECONFIG[neva-webrtc] = "use_neva_webrtc=true,use_neva_webrtc=false,media-codec-interface" +PACKAGECONFIG[webos-codec] = "use_webos_codec=true,use_webos_codec=false,media-codec-interface" PACKAGECONFIG:append = " ${@bb.utils.contains('WEBOS_LTTNG_ENABLED', '1', 'lttng', '', d)}" PACKAGECONFIG[lttng] = "use_lttng=true,use_lttng=false,lttng-ust,lttng-tools lttng-modules babeltrace" diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index 5c3eef42a..c45a5df1d 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -18,8 +18,8 @@ RDEPENDS:${PN} += "util-linux" VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" -WEBOS_VERSION = "1.0.2-58_abdd3a3484ada38b4691628588008d974d7c2f22" -PR = "r44" +WEBOS_VERSION = "1.0.2-59_9a5ce61cdbfb7ccf5dd925237ddf683306adf78f" +PR = "r45" WAM_BUILD_SYSTEM = "webos_qmake6" WAM_BUILD_SYSTEM:webos = "webos_cmake" @@ -73,7 +73,7 @@ TOUCH_ENABLED ?= "true" PLATFORM_DECODER_ENABLED ?= "true" # Flag to control runtime flag for platform encoder -PLATFORM_ENCODER_ENABLED ?= "true" +PLATFORM_ENCODER_ENABLED ?= "false" do_configure:append() { if [ -f "${S}/files/launch/systemd/webapp-mgr.sh.in" ]; then @@ -82,7 +82,7 @@ do_configure:append() { cp ${S}/files/launch/systemd/webapp-mgr.service ${B}/webapp-mgr.service sed -i -e "s/NETWORK_STABLE_TIMEOUT/NETWORK_QUIET_TIMEOUT/gI" -e "s/network-stable-timeout/network-quiet-timeout/gI" ${B}/webapp-mgr.sh sed -i '/export WAM_COMMON_SWITCHES=\" \\/a\ --disable-in-process-stack-traces \\' ${B}/webapp-mgr.sh - sed -i '/export ENABLE_BLINK_FEATURES=/ s/$/,LocalResourceCodeCache,CustomEventExtension/' ${B}/webapp-mgr.sh + sed -i '/export ENABLE_BLINK_FEATURES=/ s/$/,LocalResourceCodeCache,CustomEventExtension,WebCodecs,MediaStreamInsertableStreams/' ${B}/webapp-mgr.sh sed -i -e "s/\$WAM_V8_CODE_CACHE_SWITCHES//g" ${B}/webapp-mgr.sh # disable pinch zoom From 16523c0c65c2d18bb93132b8f6ff113ab72352a6 Mon Sep 17 00:00:00 2001 From: Hyunjae Shin Date: Fri, 17 Jun 2022 14:38:05 +0900 Subject: [PATCH 0434/2022] webos.conf: Release webOS OSE v2.17.0 :Release Notes: Set software version as webOS OSE v2.17.0 :Detailed Notes: Set WEBOS_DISTRO_VERSION_MINOR to "17.0" :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: N/A Change-Id: Ib0b1c2271d81c237c542fde22e103c89ee2def9b --- meta-webos/conf/distro/webos.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/conf/distro/webos.conf b/meta-webos/conf/distro/webos.conf index 663012413..d19a1c802 100644 --- a/meta-webos/conf/distro/webos.conf +++ b/meta-webos/conf/distro/webos.conf @@ -13,7 +13,7 @@ WEBOS_DISTRO_BUILD_CODENAME = "master" # g - github WEBOS_DISTRO_VERSION_MAJOR = "2" -WEBOS_DISTRO_VERSION_MINOR = "16.0" +WEBOS_DISTRO_VERSION_MINOR = "17.0" WEBOS_DISTRO_VERSION_TYPE = "g" DISTRO_VERSION = "${WEBOS_DISTRO_VERSION_MAJOR}.${WEBOS_DISTRO_VERSION_MINOR}.${WEBOS_DISTRO_VERSION_TYPE}" From 57e9831a160417422938e83a2bd8156e30c3bced Mon Sep 17 00:00:00 2001 From: "mark.yang" Date: Mon, 20 Jun 2022 12:22:56 +0900 Subject: [PATCH 0435/2022] ose: lsb-release=webos9 :Release Notes: Fix bug in dist-update :Detailed Notes: Fix string bug when update using dist-update :Testing Performed: Jenkins Build Test. :QA Notes: N/A :Issues Addressed: [WRO-6476] Create package feed config and dist-update tool Change-Id: Ibf9065c4a327843697caa60a717db020191041cb --- .../recipes-extended/lsb/lsb-release/dist-update | 11 +++++++---- .../recipes-extended/lsb/lsb-release_%.bbappend | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/meta-webos/recipes-extended/lsb/lsb-release/dist-update b/meta-webos/recipes-extended/lsb/lsb-release/dist-update index bb1a390ff..5cdf5987a 100644 --- a/meta-webos/recipes-extended/lsb/lsb-release/dist-update +++ b/meta-webos/recipes-extended/lsb/lsb-release/dist-update @@ -6,6 +6,7 @@ PACKAGE_FEED_BASE_PATH = "@PACKAGE_FEED_BASE_PATH@" PACKAGE_DISTRO = "@PACKAGE_DISTRO@" TRIMED_DISTRO_VERSION = "@TRIMED_DISTRO_VERSION@" +from collections import deque import errno import argparse import subprocess @@ -76,10 +77,12 @@ class Opkg(): print('Error occured in curl : %s' % (ret[1])) exit(ret[0]) dirs=ret[1].strip().split('\n') - for idx,var in (enumerate(reversed(dirs))): - if (len(var) == 0) or not var[0].isalpha(): - dirs.pop() - return dirs + fetch_dirs=deque() + for var in dirs: + if (len(var) == 0) or not (var[0].isalpha()): + fetch_dirs.append(var) + del dirs + return fetch_dirs def showAllVersions(self): print('show all versions') diff --git a/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend b/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend index af01b3058..0695529ff 100644 --- a/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend +++ b/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webos8" +EXTENDPRAUTO:append = "webos9" FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" From 60c66bf551dafb4edac0acb83731f3185bf5e17a Mon Sep 17 00:00:00 2001 From: "milan.shah" Date: Thu, 26 May 2022 16:36:39 +0530 Subject: [PATCH 0436/2022] ose: stop using ambiguous BSD license :Release Notes: Replace license "BSD" with other suitable licenses. :Detailed Notes: Fix LICENSE to use specific version of BSD. Fixes warnings like: WARNING: glibc-2.35-r0 do_populate_lic: QA Issue: glibc: No generic license file exists for: BSD in any provider [license-exists] in builds where this ambiguous "BSD" license text was removed in: https://git.openembedded.org/openembedded-core/commit/?h=kirkstone&id=14d4c007c49652d836d325a12bdbcd3bfa42e6d5 jemalloc: submissions/4..submissions/5 10459ac Update package license information :Testing Performed: Only build tested. :QA Notes: No Change to image. :Issues Addressed: [WRO-6343] CCC: stop using BSD license [WRO-5365] Stop using ambiguous 'BSD' license Change-Id: Idfaf91da3817fd8f1173702d44c260a52c85edba --- .../recipes-core/glibc/glibc_%.bbappend | 18 +++++----- .../qt6/qtgraphicaleffects_6.2.0.bb | 2 +- .../recipes-qt/qt6/qtmultimedia_6.0.0.bb | 2 +- .../node-gyp/node-gyp-packages-native.inc | 36 +++++++++---------- .../ptmalloc3/ptmalloc3.bb | 9 +++-- .../sqlcipher/sqlcipher.bb | 2 +- meta-webos/recipes-webos/jemalloc/jemalloc.bb | 8 ++--- 7 files changed, 40 insertions(+), 37 deletions(-) diff --git a/meta-webos/recipes-core/glibc/glibc_%.bbappend b/meta-webos/recipes-core/glibc/glibc_%.bbappend index 67347fa86..92b0c157f 100644 --- a/meta-webos/recipes-core/glibc/glibc_%.bbappend +++ b/meta-webos/recipes-core/glibc/glibc_%.bbappend @@ -1,13 +1,13 @@ # Copyright (c) 2014-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webos7" +EXTENDPRAUTO:append = "webos8" -LICENSE += "& BSD" +LICENSE += "& BSD-3-Clause" -# Add missing dependency on BSD license for -LICENSE:eglibc-extra-nss = "GPLv2 & LGPLv2.1 & BSD" -LICENSE:${PN}-dbg = "GPLv2 & LGPLv2.1 & BSD" -LICENSE:${PN}-dev = "GPLv2 & LGPLv2.1 & BSD" -LICENSE:${PN} = "GPLv2 & LGPLv2.1 & BSD" -LICENSE:${PN}-staticdev = "GPLv2 & LGPLv2.1 & BSD" -LICENSE:${PN}-utils = "GPLv2 & LGPLv2.1 & BSD" +# Add missing dependency on BSD-3-Clause license for +LICENSE:eglibc-extra-nss = "GPLv2 & LGPLv2.1 & BSD-3-Clause" +LICENSE:${PN}-dbg = "GPLv2 & LGPLv2.1 & BSD-3-Clause" +LICENSE:${PN}-dev = "GPLv2 & LGPLv2.1 & BSD-3-Clause" +LICENSE:${PN} = "GPLv2 & LGPLv2.1 & BSD-3-Clause" +LICENSE:${PN}-staticdev = "GPLv2 & LGPLv2.1 & BSD-3-Clause" +LICENSE:${PN}-utils = "GPLv2 & LGPLv2.1 & BSD-3-Clause" diff --git a/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb b/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb index ae1ec08b5..91c291a6c 100644 --- a/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb +++ b/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb @@ -1,5 +1,5 @@ # copied from meta-qt6, which is removed from meta-qt6 -LICENSE = "GFDL-1.3 & BSD & ( GPL-3.0 & The-Qt-Company-GPL-Exception-1.0 ) | The-Qt-Company-Commercial" +LICENSE = "GFDL-1.3 & BSD-3-Clause & ( GPL-3.0 & The-Qt-Company-GPL-Exception-1.0 ) | The-Qt-Company-Commercial" LIC_FILES_CHKSUM = " \ file://LICENSE.BSD;md5=b2609ece79465e2b9eb9b94e80b03e5e \ file://LICENSE.FDL;md5=6d9f2a9af4c8b8c3c769f6cc1b6aaf7e \ diff --git a/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb b/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb index 4ac90599c..4056f87d3 100644 --- a/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb +++ b/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb @@ -1,4 +1,4 @@ -LICENSE = "GFDL-1.3 & BSD & ( GPL-3.0 & The-Qt-Company-GPL-Exception-1.0 | The-Qt-Company-Commercial ) & ( GPL-2.0+ | LGPL-3.0 | The-Qt-Company-Commercial )" +LICENSE = "GFDL-1.3 & BSD-3-Clause & ( GPL-3.0 & The-Qt-Company-GPL-Exception-1.0 | The-Qt-Company-Commercial ) & ( GPL-2.0+ | LGPL-3.0 | The-Qt-Company-Commercial )" LIC_FILES_CHKSUM = " \ file://LICENSE.LGPL3;md5=e6a600fd5e1d9cbde2d983680233ad02 \ file://LICENSE.GPL2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ diff --git a/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc b/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc index 910312698..56ea6e6ef 100644 --- a/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc +++ b/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc @@ -1,6 +1,6 @@ # Copyright (c) 2014-2022 LG Electronics, Inc. -INC_PR = "r2" +INC_PR = "r3" SRC_URI +=" \ https://registry.npmjs.org/fstream/-/fstream-0.1.25.tgz;name=fstream_0.1.25;unpack=yes;downloadfilename=fstream-0.1.25-tarball.tgz;subdir=${BPN}/fstream_0.1.25 \ @@ -225,18 +225,18 @@ LICENSE_asn1-0.1.11 = "MIT" LICENSE_assert-plus-0.1.2 = "MIT" LICENSE_async-0.2.10 = "MIT" LICENSE_aws-sign2-0.5.0 = "Apache-2.0" -LICENSE_block-stream-0.0.7 = "BSD" -LICENSE_boom-0.4.2 = "BSD" +LICENSE_block-stream-0.0.7 = "BSD-2-Clause" +LICENSE_boom-0.4.2 = "BSD-3-Clause" LICENSE_combined-stream-0.0.4 = "MIT" -LICENSE_cryptiles-0.2.2 = "BSD" +LICENSE_cryptiles-0.2.2 = "MIT" LICENSE_ctype-0.5.2 = "MIT" LICENSE_delayed-stream-0.0.5 = "MIT" LICENSE_forever-agent-0.5.2 = "Apache-2.0" LICENSE_form-data-0.1.2 = "MIT" -LICENSE_fstream-0.1.25 = "BSD" -LICENSE_glob-3.2.9 = "BSD" -LICENSE_graceful-fs-1.2.3 = "BSD" -LICENSE_graceful-fs-2.0.3 = "BSD" +LICENSE_fstream-0.1.25 = "MIT" +LICENSE_glob-3.2.9 = "ISC" +LICENSE_graceful-fs-1.2.3 = "ISC" +LICENSE_graceful-fs-2.0.3 = "ISC" LICENSE_grunt-0.4.5 = "MIT" LICENSE_grunt-contrib-concat-0.5.1 = "MIT" LICENSE_grunt-contrib-jshint-0.10.0 = "MIT" @@ -244,11 +244,11 @@ LICENSE_grunt-contrib-nodeunit-0.4.1 = "MIT" LICENSE_grunt-contrib-qunit-0.7.0 = "MIT" LICENSE_grunt-contrib-uglify-0.5.0 = "MIT" LICENSE_grunt-contrib-watch-0.6.1 = "MIT" -LICENSE_hawk-1.0.0 = "BSD" -LICENSE_hoek-0.9.1 = "BSD" +LICENSE_hawk-1.0.0 = "Apache-2.0" +LICENSE_hoek-0.9.1 = "MIT" LICENSE_http-signature-0.10.0 = "MIT" LICENSE_inherits-2.0.1 = "ISC" -LICENSE_json-stringify-safe-5.0.0 = "BSD" +LICENSE_json-stringify-safe-5.0.0 = "ISC" LICENSE_lru-cache-2.5.0 = "MIT" LICENSE_mime-1.2.11 = "MIT" LICENSE_minimatch-0.2.14 = "MIT" @@ -256,18 +256,18 @@ LICENSE_mkdirp-0.3.5 = "MIT" LICENSE_mkdirp-0.4.0 = "MIT" LICENSE_node-uuid-1.4.1 = "MIT" LICENSE_nopt-2.2.1 = "MIT" -LICENSE_npmlog-0.0.6 = "BSD" +LICENSE_npmlog-0.0.6 = "ISC" LICENSE_oauth-sign-0.3.0 = "Apache-2.0" -LICENSE_osenv-0.0.3 = "BSD" -LICENSE_punycode-1.2.4 = "BSD & MIT" +LICENSE_osenv-0.0.3 = "ISC" +LICENSE_punycode-1.2.4 = "MIT" LICENSE_qs-0.6.6 = "MIT" LICENSE_qunitjs-1.18.0 = "MIT" LICENSE_request-2.34.0 = "Apache-2.0" LICENSE_rimraf-2.2.6 = "MIT" -LICENSE_semver-2.2.1 = "BSD" -LICENSE_sigmund-1.0.0 = "BSD" -LICENSE_sntp-0.2.4 = "BSD" -LICENSE_tar-0.1.19 = "BSD" +LICENSE_semver-2.2.1 = "ISC" +LICENSE_sigmund-1.0.0 = "ISC" +LICENSE_sntp-0.2.4 = "BSD-3-Clause" +LICENSE_tar-0.1.19 = "ISC & MIT" LICENSE_tough-cookie-0.12.1 = "CC0-1.0 & (MPL-1.1 | GPL-2.0 | LGPL-2.1) & MIT" LICENSE_tunnel-agent-0.3.0 = "Apache-2.0" LICENSE_which-1.0.5 = "MIT" diff --git a/meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb b/meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb index 2211ff80a..d096605e9 100644 --- a/meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb +++ b/meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb @@ -3,10 +3,13 @@ SECTION = "libs" DESCRIPTION = "Multi-thread malloc implementation" HOMEPAGE = "http://www.malloc.de/en/" -LICENSE = "LGPLv2" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/BSD;md5=3775480a712fc46a69647678acb234cb" +LICENSE = "LGPLv2 & PD" +LIC_FILES_CHKSUM = " \ + file://COPYRIGHT;md5=5c8ad593874e48b27ded5334b58f1e0c \ + file://README;beginline=25;endline=30;md5=8bf336b6ed939dc95c1c22ebc255a082 \ +" -PR = "r4" +PR = "r5" SRC_URI = "http://www.malloc.de/malloc/ptmalloc3-current.tar.gz \ file://ptmalloc3-current-webos.patch " diff --git a/meta-webos/recipes-upstreamable/sqlcipher/sqlcipher.bb b/meta-webos/recipes-upstreamable/sqlcipher/sqlcipher.bb index 4fa3bfbe3..bdf56dc4f 100644 --- a/meta-webos/recipes-upstreamable/sqlcipher/sqlcipher.bb +++ b/meta-webos/recipes-upstreamable/sqlcipher/sqlcipher.bb @@ -3,7 +3,7 @@ SUMMARY = "Open Source Full Database Encryption for SQLite" DESCRIPTION = "SQLCipher is an open source library that provides transparent, secure 256-bit AES encryption of SQLite database files." SECTION = "webos/libs" -LICENSE = "BSD" +LICENSE = "BSD-3-Clause" DEPENDS = "tcl-native openssl" LIC_FILES_CHKSUM = "file://LICENSE;md5=7edde5c030f9654613438a18b9b56308" diff --git a/meta-webos/recipes-webos/jemalloc/jemalloc.bb b/meta-webos/recipes-webos/jemalloc/jemalloc.bb index 8d84a18fb..a95f081e5 100644 --- a/meta-webos/recipes-webos/jemalloc/jemalloc.bb +++ b/meta-webos/recipes-webos/jemalloc/jemalloc.bb @@ -3,13 +3,13 @@ SUMMARY = "webOS of the open-source FreeBSD memory allocation library" AUTHOR = "Rama Krishna " SECTION = "libs" -LICENSE = "BSD" +LICENSE = "BSD-2-Clause" LIC_FILES_CHKSUM = "file://README.md;beginline=94;md5=b159f6c7121460dba2c5965602bc3268 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://oss-pkg-info.yaml;md5=a062b932da63efa0c8ac4060de1864cf \ " -WEBOS_VERSION = "0.20080828a-0webos9-4_c8b71a08f17c7fbed48cd40b383f4ff91a0d3eb8" -PR = "r3" +WEBOS_VERSION = "0.20080828a-0webos9-5_959943d029e341cef3839f6b2e8cba04825a852d" +PR = "r4" inherit webos_upstream_from_repo inherit webos_public_repo From 4f96999d9b62d3e31ffdafc2cb210e6c5066901c Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 9 Jun 2022 19:23:36 +0000 Subject: [PATCH 0437/2022] nodejs-module-webos: use nodejs=v12.22.2 :Release Notes: Use nodejs=v12.22.2 for building nodejs-module-webos-* recipes. :Detailed Notes: Matches the version in meta-oe: https://git.openembedded.org/meta-openembedded/commit/?h=dunfell&id=89d2876e2e6d22d59389e70579bae72d3ec1406d be aware that EOL gatesgarth and hardknott are using older v12.21.0 :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [PLAT-78621] NodeJS upgrade to 10.15.3 [WRO-6542] CCC: Various build fixes Change-Id: I103d4937a3076115225e7c1c701d4089a62201fe --- .../recipes-webos/nodejs-module-webos/nodejs-module-webos.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos.inc b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos.inc index c486a7ff8..ea2c224de 100644 --- a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos.inc +++ b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos.inc @@ -17,12 +17,12 @@ inherit python3native export PYTHON = "python3" -NODE_VERSION = "12.20.1" +NODE_VERSION = "12.22.2" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE} \ https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}.tar.xz;name=node \ " -SRC_URI[node.sha256sum] = "e00eee325d705b2bfa9929b7d061eb2315402d7e8548945eac9870bf84321853" +SRC_URI[node.sha256sum] = "7fd805571df106f086f4c45e131efed98bfd62628d9dec96bd62f8c11b0c48dc" S = "${WORKDIR}/git" From 38cec5ef7a2ea7da95cc9e66525e47dd638670f0 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 22 Feb 2022 11:04:39 +0100 Subject: [PATCH 0438/2022] ose: update license names :Release Notes: Use SPDX identifiers where available. :Detailed Notes: $ openembedded-core/scripts/contrib/convert-spdx-licenses.py . ... All files processed with version 0.01 :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-6542] CCC: Various build fixes Change-Id: Id197456dc300e3a3c0ba50a369d5253f9d377a7b --- .../recipes-connectivity/connman/connman.inc | 2 +- .../recipes-devtools/guilder/guider_3.9.7.bb | 2 +- .../recipes-extended/procps/procps_3.3.17.bb | 2 +- .../gstreamer/gst-devtools_1.18.2.bb | 2 +- .../gstreamer/gst-examples_1.18.2.bb | 2 +- .../gstreamer/gstreamer1.0-libav_1.18.2.bb | 2 +- .../gstreamer/gstreamer1.0-omx_1.18.2.bb | 2 +- .../gstreamer/gstreamer1.0-plugins-bad_1.18.2.bb | 2 +- .../gstreamer/gstreamer1.0-plugins-base_1.18.2.bb | 2 +- .../gstreamer/gstreamer1.0-plugins-good_1.18.2.bb | 2 +- .../gstreamer/gstreamer1.0-plugins-ugly_1.18.2.bb | 2 +- .../gstreamer/gstreamer1.0-python_1.18.2.bb | 2 +- .../gstreamer/gstreamer1.0-rtsp-server_1.18.2.bb | 2 +- .../gstreamer/gstreamer1.0-vaapi_1.18.2.bb | 2 +- .../gstreamer/gstreamer1.0_1.18.2.bb | 2 +- .../recipes-bsp/u-boot/libubootenv_0.3.2.bb | 2 +- .../recipes-bsp/u-boot/u-boot-common.inc | 2 +- .../recipes-core/systemd/systemd-serialgetty.bb | 2 +- .../recipes-core/systemd/systemd.inc | 2 +- meta-webos/recipes-core/dbus/dbus_%.bbappend | 4 ++-- meta-webos/recipes-core/gator/gator_git.bb | 2 +- meta-webos/recipes-core/glibc/glibc_%.bbappend | 12 ++++++------ meta-webos/recipes-core/shadow/shadow_%.bbappend | 4 ++-- .../recipes-multimedia/pulseaudio/pulseaudio_15.0.bb | 2 +- .../pulseaudio/pulseaudio_15.0.inc | 2 +- .../recipes-multimedia/pulseaudio/pulseaudio_9.0.bb | 2 +- .../recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb | 2 +- meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb | 2 +- .../ecryptfs-utils/ecryptfs-utils_111.bb | 2 +- .../recipes-upstreamable/gphotofs/gphotofs_0.5.bb | 2 +- .../gtkmm-utils/gtkmm-utils_0.4.1.bb | 2 +- meta-webos/recipes-upstreamable/gupnp/gssdp_1.2.3.bb | 2 +- meta-webos/recipes-upstreamable/gupnp/gupnp.inc | 2 +- .../recipes-upstreamable/libhangul/libhangul.bb | 2 +- .../node-gyp/node-gyp-packages-native.inc | 2 +- .../recipes-upstreamable/pacrunner/pacrunner_0.9.bb | 2 +- .../recipes-upstreamable/ptmalloc3/ptmalloc3.bb | 2 +- meta-webos/recipes-upstreamable/pyzy/pyzy.bb | 2 +- .../sp-measure/sp-measure_git.bb | 2 +- .../sp-memusage/sp-memusage_git.bb | 2 +- .../recipes-upstreamable/sunpinyin/sunpinyin.bb | 2 +- .../recipes-upstreamable/uchardet/uchardet_0.0.1.bb | 2 +- .../recipes-webos/chromium/webruntime-common.inc | 2 +- .../maliit-framework-webos/maliit-framework-webos.bb | 2 +- meta-webos/recipes-webos/pmtrace/pmtrace.bb | 2 +- 45 files changed, 52 insertions(+), 52 deletions(-) diff --git a/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman.inc b/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman.inc index 856bb9ee1..2680ed20d 100644 --- a/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman.inc +++ b/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman.inc @@ -9,7 +9,7 @@ configuration methods, like DHCP and domain name resolving, are \ implemented using plug-ins." HOMEPAGE = "http://connman.net/" BUGTRACKER = "https://01.org/jira/browse/CM" -LICENSE = "GPLv2" +LICENSE = "GPL-2.0-only" LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e \ file://src/main.c;beginline=1;endline=20;md5=486a279a6ab0c8d152bcda3a5b5edc36" diff --git a/meta-webos-backports/meta-webos-backports-3.2/recipes-devtools/guilder/guider_3.9.7.bb b/meta-webos-backports/meta-webos-backports-3.2/recipes-devtools/guilder/guider_3.9.7.bb index 8a29dd4d0..1d8eb0043 100644 --- a/meta-webos-backports/meta-webos-backports-3.2/recipes-devtools/guilder/guider_3.9.7.bb +++ b/meta-webos-backports/meta-webos-backports-3.2/recipes-devtools/guilder/guider_3.9.7.bb @@ -6,7 +6,7 @@ HOMEPAGE = "https://github.com/iipeace/guider" BUGTRACKER = "https://github.com/iipeace/guider/issues" AUTHOR = "Peace Lee " -LICENSE = "GPLv2+" +LICENSE = "GPL-2.0-or-later" LIC_FILES_CHKSUM = "file://LICENSE;md5=2c1c00f9d3ed9e24fa69b932b7e7aff2" PV = "3.9.7+git${SRCPV}" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps_3.3.17.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps_3.3.17.bb index 8b5b4fb7f..0a5ab7555 100644 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps_3.3.17.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps_3.3.17.bb @@ -3,7 +3,7 @@ DESCRIPTION = "Procps contains a set of system utilities that provide system inf the /proc filesystem. The package includes the programs ps, top, vmstat, w, kill, and skill." HOMEPAGE = "https://gitlab.com/procps-ng/procps" SECTION = "base" -LICENSE = "GPLv2+ & LGPLv2+" +LICENSE = "GPL-2.0-or-later & LGPL-2.0-or-later" LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ file://COPYING.LIB;md5=4cf66a4984120007c9881cc871cf49db \ " diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools_1.18.2.bb index 55bec0adf..850da83d4 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools_1.18.2.bb @@ -3,7 +3,7 @@ DESCRIPTION = "A Tool to test GStreamer components" HOMEPAGE = "https://gstreamer.freedesktop.org/documentation/gst-devtools/index.html" SECTION = "multimedia" -LICENSE = "LGPLv2.1" +LICENSE = "LGPL-2.1-only" LIC_FILES_CHKSUM = "file://validate/COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343" #S = "${WORKDIR}/gst-devtools-${PV}" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples_1.18.2.bb index 77dbf1f4d..d57e1a9a4 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples_1.18.2.bb @@ -1,5 +1,5 @@ SUMMARY = "GStreamer examples (including gtk-play, gst-play)" -LICENSE = "LGPL-2.0+" +LICENSE = "LGPL-2.0-or-later" LIC_FILES_CHKSUM = "file://playback/player/gtk/gtk-play.c;beginline=1;endline=20;md5=f8c72dae3d36823ec716a9ebcae593b9" DEPENDS = "glib-2.0 gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad gtk+3 libsoup-2.4 json-glib glib-2.0-native" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.18.2.bb index 20267edce..bbd107de8 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.18.2.bb @@ -4,7 +4,7 @@ SECTION = "multimedia" # ffmpeg has comercial license flags so add it as we need ffmpeg as a dependency LICENSE_FLAGS = "commercial" -LICENSE = "LGPLv2+" +LICENSE = "LGPL-2.0-or-later" LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d \ file://ext/libav/gstav.h;beginline=1;endline=18;md5=a752c35267d8276fd9ca3db6994fca9c \ " diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.18.2.bb index 5a5396954..5c060e33e 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.18.2.bb @@ -2,7 +2,7 @@ SUMMARY = "OpenMAX IL plugins for GStreamer" HOMEPAGE = "http://gstreamer.freedesktop.org/" SECTION = "multimedia" -LICENSE = "LGPLv2.1" +LICENSE = "LGPL-2.1-only" LICENSE_FLAGS = "commercial" LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \ file://omx/gstomx.h;beginline=1;endline=21;md5=5c8e1fca32704488e76d2ba9ddfa935f" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.2.bb index 8e0cb7eb6..5f7ada5a5 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.2.bb @@ -11,7 +11,7 @@ SRC_URI[sha256sum] = "8ad5822f1118fe46a19af54422b74e3a16d79a6800dcb173b49e199a49 S = "${WORKDIR}/gst-plugins-bad-${PV}" -LICENSE = "GPLv2+ & LGPLv2+ & LGPLv2.1+" +LICENSE = "GPL-2.0-or-later & LGPL-2.0-or-later & LGPL-2.1-or-later" LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c" DEPENDS += "gstreamer1.0-plugins-base" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.2.bb index a40e8aec2..92b8c8ea4 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.2.bb @@ -1,6 +1,6 @@ require gstreamer1.0-plugins-common.inc -LICENSE = "GPLv2+ & LGPLv2+" +LICENSE = "GPL-2.0-or-later & LGPL-2.0-or-later" LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d" SRC_URI = "https://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-${PV}.tar.xz \ diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.2.bb index 7288adc3a..a9e999ef4 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.2.bb @@ -8,7 +8,7 @@ SRC_URI[sha256sum] = "f71752dde434d9ec55fa5e8d2e2a3be3fc6eb5b34f397b065f84aead25 S = "${WORKDIR}/gst-plugins-good-${PV}" -LICENSE = "GPLv2+ & LGPLv2.1+" +LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later" LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \ file://gst/replaygain/rganalysis.c;beginline=1;endline=23;md5=b60ebefd5b2f5a8e0cab6bfee391a5fe" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.18.2.bb index bb8fe6853..8095510e9 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.18.2.bb @@ -3,7 +3,7 @@ require gstreamer1.0-plugins-common.inc LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \ file://tests/check/elements/xingmux.c;beginline=1;endline=21;md5=4c771b8af188724855cb99cadd390068" -LICENSE = "GPLv2+ & LGPLv2.1+ & LGPLv2+" +LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later & LGPL-2.0-or-later" LICENSE_FLAGS = "commercial" SRC_URI = " \ diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-python_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-python_1.18.2.bb index f0b1c1337..3b9efaafe 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-python_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-python_1.18.2.bb @@ -2,7 +2,7 @@ SUMMARY = "Python bindings for GStreamer 1.0" HOMEPAGE = "http://cgit.freedesktop.org/gstreamer/gst-python/" SECTION = "multimedia" -LICENSE = "LGPLv2.1" +LICENSE = "LGPL-2.1-only" LIC_FILES_CHKSUM = "file://COPYING;md5=c34deae4e395ca07e725ab0076a5f740" SRC_URI = "https://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.xz" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.18.2.bb index b680aa38d..bcb25e19f 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.18.2.bb @@ -1,7 +1,7 @@ SUMMARY = "A library on top of GStreamer for building an RTSP server" HOMEPAGE = "http://cgit.freedesktop.org/gstreamer/gst-rtsp-server/" SECTION = "multimedia" -LICENSE = "LGPLv2" +LICENSE = "LGPL-2.0-only" LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d" DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.18.2.bb index f670e8f50..56fa435f8 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.18.2.bb @@ -5,7 +5,7 @@ based plugins for GStreamer and helper libraries: `vaapidecode', \ REALPN = "gstreamer-vaapi" -LICENSE = "LGPLv2.1+" +LICENSE = "LGPL-2.1-or-later" LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c" SRC_URI = "https://gstreamer.freedesktop.org/src/${REALPN}/${REALPN}-${PV}.tar.xz" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0_1.18.2.bb index dc7009d2f..a0da577f1 100755 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0_1.18.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0_1.18.2.bb @@ -4,7 +4,7 @@ It supports a wide range of formats including mp3, ogg, avi, mpeg and quicktime. HOMEPAGE = "http://gstreamer.freedesktop.org/" BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer" SECTION = "multimedia" -LICENSE = "LGPLv2+" +LICENSE = "LGPL-2.0-or-later" DEPENDS = "glib-2.0 glib-2.0-native libxml2 bison-native flex-native" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/libubootenv_0.3.2.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/libubootenv_0.3.2.bb index 6906e5362..e8f58941c 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/libubootenv_0.3.2.bb +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/libubootenv_0.3.2.bb @@ -6,7 +6,7 @@ It provides a hardware-independent replacement for fw_printenv/setenv utilities provided by U-Boot" HOMEPAGE = "https://github.com/sbabic/libubootenv" -LICENSE = "LGPL-2.1" +LICENSE = "LGPL-2.1-only" LIC_FILES_CHKSUM = "file://Licenses/lgpl-2.1.txt;md5=4fbd65380cdd255951079008b364516c" SECTION = "libs" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-common.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-common.inc index 2423e9ca1..4a256da11 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-common.inc +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-common.inc @@ -6,7 +6,7 @@ application code." SECTION = "bootloaders" DEPENDS += "flex-native bison-native" -LICENSE = "GPLv2+" +LICENSE = "GPL-2.0-or-later" LIC_FILES_CHKSUM = "file://Licenses/README;md5=5a7450c57ffe5ae63fd732446b988025" PE = "1" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-serialgetty.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-serialgetty.bb index 2d6bebe92..ad413e022 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-serialgetty.bb +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-serialgetty.bb @@ -1,6 +1,6 @@ SUMMARY = "Serial terminal support for systemd" HOMEPAGE = "https://www.freedesktop.org/wiki/Software/systemd/" -LICENSE = "GPLv2+" +LICENSE = "GPL-2.0-or-later" LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6" PR = "r5" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd.inc index 13b8b61af..36530649f 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd.inc +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd.inc @@ -10,7 +10,7 @@ state, maintains mount and automount points and implements an \ elaborate transactional dependency-based service control logic. It can \ work as a drop-in replacement for sysvinit." -LICENSE = "GPLv2 & LGPLv2.1" +LICENSE = "GPL-2.0-only & LGPL-2.1-only" LIC_FILES_CHKSUM = "file://LICENSE.GPL2;md5=751419260aa954499f7abaabaa882bbe \ file://LICENSE.LGPL2.1;md5=4fbd65380cdd255951079008b364516c" diff --git a/meta-webos/recipes-core/dbus/dbus_%.bbappend b/meta-webos/recipes-core/dbus/dbus_%.bbappend index 32986fb8c..aeceb4b31 100644 --- a/meta-webos/recipes-core/dbus/dbus_%.bbappend +++ b/meta-webos/recipes-core/dbus/dbus_%.bbappend @@ -3,8 +3,8 @@ EXTENDPRAUTO:append = "webos5" PACKAGES =+ "${PN}-gpl" -LICENSE += "& GPL-2.0" -LICENSE:${PN}-gpl = "GPL-2.0" +LICENSE += "& GPL-2.0-only" +LICENSE:${PN}-gpl = "GPL-2.0-only" # using "dbus" instead of "${PN}" due to: # WARNING: Variable key RDEPENDS:${PN} ( ${PN}-gpl) replaces original key RDEPENDS:dbus diff --git a/meta-webos/recipes-core/gator/gator_git.bb b/meta-webos/recipes-core/gator/gator_git.bb index eb46a9053..1850261b0 100644 --- a/meta-webos/recipes-core/gator/gator_git.bb +++ b/meta-webos/recipes-core/gator/gator_git.bb @@ -4,7 +4,7 @@ SUMMARY = "DS-5 Gator daemon" DESCRIPTION = "Target-side daemon gathering data for ARM Streamline Performance Analyzer." -LICENSE = "GPL-2" +LICENSE = "GPL-2.0-only" LIC_FILES_CHKSUM = "file://driver/COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263" SRCREV = "3ff46fedd4d097813156069edab9704cc65e0a42" diff --git a/meta-webos/recipes-core/glibc/glibc_%.bbappend b/meta-webos/recipes-core/glibc/glibc_%.bbappend index 92b0c157f..33357be0d 100644 --- a/meta-webos/recipes-core/glibc/glibc_%.bbappend +++ b/meta-webos/recipes-core/glibc/glibc_%.bbappend @@ -5,9 +5,9 @@ EXTENDPRAUTO:append = "webos8" LICENSE += "& BSD-3-Clause" # Add missing dependency on BSD-3-Clause license for -LICENSE:eglibc-extra-nss = "GPLv2 & LGPLv2.1 & BSD-3-Clause" -LICENSE:${PN}-dbg = "GPLv2 & LGPLv2.1 & BSD-3-Clause" -LICENSE:${PN}-dev = "GPLv2 & LGPLv2.1 & BSD-3-Clause" -LICENSE:${PN} = "GPLv2 & LGPLv2.1 & BSD-3-Clause" -LICENSE:${PN}-staticdev = "GPLv2 & LGPLv2.1 & BSD-3-Clause" -LICENSE:${PN}-utils = "GPLv2 & LGPLv2.1 & BSD-3-Clause" +LICENSE:eglibc-extra-nss = "GPL-2.0-only & LGPL-2.1-only & BSD-3-Clause" +LICENSE:${PN}-dbg = "GPL-2.0-only & LGPL-2.1-only & BSD-3-Clause" +LICENSE:${PN}-dev = "GPL-2.0-only & LGPL-2.1-only & BSD-3-Clause" +LICENSE:${PN} = "GPL-2.0-only & LGPL-2.1-only & BSD-3-Clause" +LICENSE:${PN}-staticdev = "GPL-2.0-only & LGPL-2.1-only & BSD-3-Clause" +LICENSE:${PN}-utils = "GPL-2.0-only & LGPL-2.1-only & BSD-3-Clause" diff --git a/meta-webos/recipes-core/shadow/shadow_%.bbappend b/meta-webos/recipes-core/shadow/shadow_%.bbappend index 162a60cf3..3ec9244bb 100644 --- a/meta-webos/recipes-core/shadow/shadow_%.bbappend +++ b/meta-webos/recipes-core/shadow/shadow_%.bbappend @@ -4,8 +4,8 @@ EXTENDPRAUTO:append = "webos2" PACKAGES =+ "${PN}-gpl" -LICENSE += "& GPL-2.0" -LICENSE:${PN}-gpl = "GPL-2.0" +LICENSE += "& GPL-2.0-only" +LICENSE:${PN}-gpl = "GPL-2.0-only" RDEPENDS:${PN} += "${PN}-gpl" diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bb b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bb index df8cc1344..4b22dafee 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bb +++ b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bb @@ -2,7 +2,7 @@ require pulseaudio_15.0.inc -LICENSE = "GPLv2+ & LGPLv2.1" +LICENSE = "GPL-2.0-or-later & LGPL-2.1-only" LIC_FILES_CHKSUM = "file://LICENSE;md5=0e5cd938de1a7a53ea5adac38cc10c39 \ file://GPL;md5=4325afd396febcb659c36b49533135d4 \ file://LGPL;md5=2d5025d4aa3495befef8f17206a5b0a1 \ diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.inc b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.inc index f4187f264..c4d16dc2f 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.inc +++ b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.inc @@ -44,7 +44,7 @@ SECTION = "libs/multimedia" # of the licenses apply? What a mess. Some people hold the view that libdbus is # a system library that is covered by the "special exception" in GPLv2's # section 3, and therefore libdbus's GPL license doesn't affect PulseAudio. -LICENSE = "LGPLv2.1+ & MIT & BSD-3-Clause" +LICENSE = "LGPL-2.1-or-later & MIT & BSD-3-Clause" LIC_FILES_CHKSUM = "file://LICENSE;md5=0e5cd938de1a7a53ea5adac38cc10c39 \ file://GPL;md5=4325afd396febcb659c36b49533135d4 \ diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb index 76497a46c..199c81e16 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb +++ b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb @@ -4,7 +4,7 @@ require recipes-multimedia/pulseaudio/pulseaudio.inc # Restore the LIC_FILES_CHKSUM for 9.0 version # pulseaudio.inc is already using different one for 10.0 -LICENSE = "GPLv2+ & LGPLv2.1" +LICENSE = "GPL-2.0-or-later & LGPL-2.1-only" LIC_FILES_CHKSUM = "file://LICENSE;md5=d9ae089c8dc5339f8ac9d8563038a29f \ file://GPL;md5=4325afd396febcb659c36b49533135d4 \ file://LGPL;md5=2d5025d4aa3495befef8f17206a5b0a1 \ diff --git a/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb b/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb index 91c291a6c..0caa646b2 100644 --- a/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb +++ b/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb @@ -1,5 +1,5 @@ # copied from meta-qt6, which is removed from meta-qt6 -LICENSE = "GFDL-1.3 & BSD-3-Clause & ( GPL-3.0 & The-Qt-Company-GPL-Exception-1.0 ) | The-Qt-Company-Commercial" +LICENSE = "GFDL-1.3 & BSD-3-Clause & ( GPL-3.0-only & The-Qt-Company-GPL-Exception-1.0 ) | The-Qt-Company-Commercial" LIC_FILES_CHKSUM = " \ file://LICENSE.BSD;md5=b2609ece79465e2b9eb9b94e80b03e5e \ file://LICENSE.FDL;md5=6d9f2a9af4c8b8c3c769f6cc1b6aaf7e \ diff --git a/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb b/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb index 4056f87d3..79f378248 100644 --- a/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb +++ b/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb @@ -1,4 +1,4 @@ -LICENSE = "GFDL-1.3 & BSD-3-Clause & ( GPL-3.0 & The-Qt-Company-GPL-Exception-1.0 | The-Qt-Company-Commercial ) & ( GPL-2.0+ | LGPL-3.0 | The-Qt-Company-Commercial )" +LICENSE = "GFDL-1.3 & BSD-3-Clause & ( GPL-3.0-only & The-Qt-Company-GPL-Exception-1.0 | The-Qt-Company-Commercial ) & ( GPL-2.0-or-later | LGPL-3.0-only | The-Qt-Company-Commercial )" LIC_FILES_CHKSUM = " \ file://LICENSE.LGPL3;md5=e6a600fd5e1d9cbde2d983680233ad02 \ file://LICENSE.GPL2;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ diff --git a/meta-webos/recipes-support/ecryptfs-utils/ecryptfs-utils_111.bb b/meta-webos/recipes-support/ecryptfs-utils/ecryptfs-utils_111.bb index 82376e67c..97d7b0f6e 100644 --- a/meta-webos/recipes-support/ecryptfs-utils/ecryptfs-utils_111.bb +++ b/meta-webos/recipes-support/ecryptfs-utils/ecryptfs-utils_111.bb @@ -10,7 +10,7 @@ DESCRIPTION = "eCryptfs is a stacked cryptographic filesystem \ HOMEPAGE = "https://launchpad.net/ecryptfs" SECTION = "base" -LICENSE = "GPL-2.0" +LICENSE = "GPL-2.0-only" LIC_FILES_CHKSUM = "file://COPYING;md5=8ca43cbc842c2336e835926c2166c28b" DEPENDS = "keyutils libgcrypt intltool-native glib-2.0-native" diff --git a/meta-webos/recipes-upstreamable/gphotofs/gphotofs_0.5.bb b/meta-webos/recipes-upstreamable/gphotofs/gphotofs_0.5.bb index 570a5133d..dc7bf523d 100644 --- a/meta-webos/recipes-upstreamable/gphotofs/gphotofs_0.5.bb +++ b/meta-webos/recipes-upstreamable/gphotofs/gphotofs_0.5.bb @@ -3,7 +3,7 @@ SUMMARY = "FUSE filesystem module to mount camera" HOMEPAGE = "http://www.gphoto.org/proj/gphotofs/" SECTION = "console/utils" -LICENSE = "GPL-2.0" +LICENSE = "GPL-2.0-only" LIC_FILES_CHKSUM = "file://COPYING;md5=94d55d512a9ba36caa9b7df079bae19f" DEPENDS = "fuse glib-2.0 libgphoto2 glib-2.0-native" diff --git a/meta-webos/recipes-upstreamable/gtkmm-utils/gtkmm-utils_0.4.1.bb b/meta-webos/recipes-upstreamable/gtkmm-utils/gtkmm-utils_0.4.1.bb index 60c435118..980e44c9d 100644 --- a/meta-webos/recipes-upstreamable/gtkmm-utils/gtkmm-utils_0.4.1.bb +++ b/meta-webos/recipes-upstreamable/gtkmm-utils/gtkmm-utils_0.4.1.bb @@ -4,7 +4,7 @@ DESCRIPTION = "C++ utility and widget library based on glibmm and gtkmm" HOMEPAGE = "http://code.google.com/p/gtkmm-utils/" SECTION = "libs" -LICENSE = "LGPLv2.1" +LICENSE = "LGPL-2.1-only" LIC_FILES_CHKSUM = "file://COPYING;md5=9740aaebee0708fe3dd67fdc3f6902b2" DEPENDS = "glibmm" diff --git a/meta-webos/recipes-upstreamable/gupnp/gssdp_1.2.3.bb b/meta-webos/recipes-upstreamable/gupnp/gssdp_1.2.3.bb index 5c95e3612..2d7d5018e 100644 --- a/meta-webos/recipes-upstreamable/gupnp/gssdp_1.2.3.bb +++ b/meta-webos/recipes-upstreamable/gupnp/gssdp_1.2.3.bb @@ -1,6 +1,6 @@ SUMMARY = "Resource discovery and announcement over SSDP" DESCRIPTION = "GSSDP implements resource discovery and announcement over SSDP (Simpe Service Discovery Protocol)." -LICENSE = "LGPLv2" +LICENSE = "LGPL-2.0-only" LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7" DEPENDS = "glib-2.0 libsoup-2.4" diff --git a/meta-webos/recipes-upstreamable/gupnp/gupnp.inc b/meta-webos/recipes-upstreamable/gupnp/gupnp.inc index a728616d8..860312266 100644 --- a/meta-webos/recipes-upstreamable/gupnp/gupnp.inc +++ b/meta-webos/recipes-upstreamable/gupnp/gupnp.inc @@ -1,6 +1,6 @@ SUMMARY = "UPnP framework" DESCRIPTION = "GUPnP is an elegant, object-oriented open source framework for creating UPnP devices and control points, written in C using GObject and libsoup. The GUPnP API is intended to be easy to use, efficient and flexible. It provides the same set of features as libupnp, but shields the developer from most of UPnP's internals." -LICENSE = "LGPLv2+" +LICENSE = "LGPL-2.0-or-later" DEPENDS = "e2fsprogs gssdp libsoup-2.4 libxml2" diff --git a/meta-webos/recipes-upstreamable/libhangul/libhangul.bb b/meta-webos/recipes-upstreamable/libhangul/libhangul.bb index 18de6a67d..444747ff2 100644 --- a/meta-webos/recipes-upstreamable/libhangul/libhangul.bb +++ b/meta-webos/recipes-upstreamable/libhangul/libhangul.bb @@ -4,7 +4,7 @@ SUMMARY = "Hangul input method library" AUTHOR = "Pugalendhi Ganesan " HOMEPAGE = "https://github.com/choehwanjin/libhangul" SECTION = "libs" -LICENSE = "LGPLv2.1" +LICENSE = "LGPL-2.1-only" LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343" PR = "r3" diff --git a/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc b/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc index 56ea6e6ef..bcb554b11 100644 --- a/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc +++ b/meta-webos/recipes-upstreamable/node-gyp/node-gyp-packages-native.inc @@ -268,7 +268,7 @@ LICENSE_semver-2.2.1 = "ISC" LICENSE_sigmund-1.0.0 = "ISC" LICENSE_sntp-0.2.4 = "BSD-3-Clause" LICENSE_tar-0.1.19 = "ISC & MIT" -LICENSE_tough-cookie-0.12.1 = "CC0-1.0 & (MPL-1.1 | GPL-2.0 | LGPL-2.1) & MIT" +LICENSE_tough-cookie-0.12.1 = "CC0-1.0 & (MPL-1.1 | GPL-2.0-only | LGPL-2.1-only) & MIT" LICENSE_tunnel-agent-0.3.0 = "Apache-2.0" LICENSE_which-1.0.5 = "MIT" diff --git a/meta-webos/recipes-upstreamable/pacrunner/pacrunner_0.9.bb b/meta-webos/recipes-upstreamable/pacrunner/pacrunner_0.9.bb index bbe7c6f2f..e4fe0fa37 100644 --- a/meta-webos/recipes-upstreamable/pacrunner/pacrunner_0.9.bb +++ b/meta-webos/recipes-upstreamable/pacrunner/pacrunner_0.9.bb @@ -3,7 +3,7 @@ SUMMARY = "Proxy daemon" AUTHOR = "Sungmok Shin " SECTION = "console/utils" -LICENSE = "GPLv2" +LICENSE = "GPL-2.0-only" LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e" DEPENDS = "dbus glib-2.0" diff --git a/meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb b/meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb index d096605e9..dfe267b24 100644 --- a/meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb +++ b/meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb @@ -3,7 +3,7 @@ SECTION = "libs" DESCRIPTION = "Multi-thread malloc implementation" HOMEPAGE = "http://www.malloc.de/en/" -LICENSE = "LGPLv2 & PD" +LICENSE = "LGPL-2.0-only & PD" LIC_FILES_CHKSUM = " \ file://COPYRIGHT;md5=5c8ad593874e48b27ded5334b58f1e0c \ file://README;beginline=25;endline=30;md5=8bf336b6ed939dc95c1c22ebc255a082 \ diff --git a/meta-webos/recipes-upstreamable/pyzy/pyzy.bb b/meta-webos/recipes-upstreamable/pyzy/pyzy.bb index 7944ed375..25433709e 100644 --- a/meta-webos/recipes-upstreamable/pyzy/pyzy.bb +++ b/meta-webos/recipes-upstreamable/pyzy/pyzy.bb @@ -4,7 +4,7 @@ SUMMARY = "The Chinese PinYin and Bopomofo conversion library" AUTHOR = "Pugalendhi Ganesan " HOMEPAGE = "https://github.com/pyzy/pyzy" SECTION = "libs" -LICENSE = "LGPLv2.1+" +LICENSE = "LGPL-2.1-or-later" LIC_FILES_CHKSUM = "file://COPYING;md5=4b54a1fd55a448865a0b32d41598759d" DEPENDS = "sqlite3 sqlite3-native glib-2.0 util-linux" diff --git a/meta-webos/recipes-upstreamable/sp-measure/sp-measure_git.bb b/meta-webos/recipes-upstreamable/sp-measure/sp-measure_git.bb index 6b509f9fe..a23b5b5ac 100644 --- a/meta-webos/recipes-upstreamable/sp-measure/sp-measure_git.bb +++ b/meta-webos/recipes-upstreamable/sp-measure/sp-measure_git.bb @@ -1,7 +1,7 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "A library for measuring resource consumption (CPU, memory)" -LICENSE = "LGPLv2.1" +LICENSE = "LGPL-2.1-only" LIC_FILES_CHKSUM = "file://COPYING;md5=2d5025d4aa3495befef8f17206a5b0a1" SRCREV = "bb4ced89842f8d2dc0b8a6bc5d631bb36355207b" diff --git a/meta-webos/recipes-upstreamable/sp-memusage/sp-memusage_git.bb b/meta-webos/recipes-upstreamable/sp-memusage/sp-memusage_git.bb index dd9ffedd2..f59157aa0 100644 --- a/meta-webos/recipes-upstreamable/sp-memusage/sp-memusage_git.bb +++ b/meta-webos/recipes-upstreamable/sp-memusage/sp-memusage_git.bb @@ -1,7 +1,7 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "A collection of memory usage monitoring tools and scripts" -LICENSE = "GPL-2.0" +LICENSE = "GPL-2.0-only" LIC_FILES_CHKSUM = "file://COPYING;md5=751419260aa954499f7abaabaa882bbe" DEPENDS = "sp-measure" diff --git a/meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb b/meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb index 2f31ee1f2..8060ae139 100644 --- a/meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb +++ b/meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb @@ -4,7 +4,7 @@ SUMMARY = "Pinyin input method library" AUTHOR = "pugalendhi Ganesan " HOMEPAGE = "https://github.com/sunpinyin/sunpinyin" SECTION = "libs" -LICENSE = "LGPLv2.1" +LICENSE = "LGPL-2.1-only" LIC_FILES_CHKSUM = "file://COPYING;md5=0fb040b9b86a214885e3285fe25d74bc" DEPENDS = "sqlite3" diff --git a/meta-webos/recipes-upstreamable/uchardet/uchardet_0.0.1.bb b/meta-webos/recipes-upstreamable/uchardet/uchardet_0.0.1.bb index 52a565477..b2205d03f 100644 --- a/meta-webos/recipes-upstreamable/uchardet/uchardet_0.0.1.bb +++ b/meta-webos/recipes-upstreamable/uchardet/uchardet_0.0.1.bb @@ -3,7 +3,7 @@ DESCRIPTION = "uchardet is a C language binding of the original C++ \ implementation of the universal charset detection library by Mozilla." HOMEPAGE = "https://code.google.com/p/uchardet/" -LICENSE = "MPLv1.1" +LICENSE = "MPL-1.1" LIC_FILES_CHKSUM = "file://COPYING;md5=bfe1f75d606912a4111c90743d6c7325" PR = "r1" diff --git a/meta-webos/recipes-webos/chromium/webruntime-common.inc b/meta-webos/recipes-webos/chromium/webruntime-common.inc index 0a72be737..81eb2c1b6 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-common.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-common.inc @@ -2,7 +2,7 @@ # This file configures common SRC_URI for both of mksnapshot and webruntime # Also it contains variables for gn command such as GN_ARGS -LICENSE = "Apache-2.0 & BSD-3-Clause & LGPL-2.0 & LGPL-2.1" +LICENSE = "Apache-2.0 & BSD-3-Clause & LGPL-2.0-only & LGPL-2.1-only" LIC_FILES_CHKSUM = "\ file://src/LICENSE;md5=0fca02217a5d49a14dfe2d11837bb34d \ file://src/third_party/blink/renderer/core/LICENSE-LGPL-2;md5=36357ffde2b64ae177b2494445b79d21 \ diff --git a/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb b/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb index 5f6d62fba..1c03a876d 100644 --- a/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb +++ b/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb @@ -4,7 +4,7 @@ SUMMARY = "Maliit Input Method Framework" DESCRIPTION = "This is the webOS edition of the Maliit input method framework. It differs from upstream in that it supports a hardware keyboard using the wayland protocol." AUTHOR = "Minjoong Park " SECTION = "webos/base" -LICENSE = "LGPLv2" +LICENSE = "LGPL-2.0-only" LIC_FILES_CHKSUM = " \ file://LICENSE.LGPL;md5=5c917f6ce94ceb8d8d5e16e2fca5b9ad \ file://oss-pkg-info.yaml;md5=1b633545a82af651ad37b9f03288651e \ diff --git a/meta-webos/recipes-webos/pmtrace/pmtrace.bb b/meta-webos/recipes-webos/pmtrace/pmtrace.bb index 9d5649324..bd33c53d5 100644 --- a/meta-webos/recipes-webos/pmtrace/pmtrace.bb +++ b/meta-webos/recipes-webos/pmtrace/pmtrace.bb @@ -3,7 +3,7 @@ SUMMARY = "lttng-ust tracepoints wrapper library and performance tools" AUTHOR = "Andre Rosa " SECTION = "webos/libs" -LICENSE = "LGPLv2.1 & MIT & Apache-2.0" +LICENSE = "LGPL-2.1-only & MIT & Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE.LGPL;md5=e2aa4f66375a24019b0ff5e99cec40ad \ file://LICENSE.MIT;md5=19b5d9061141f7ab05cfcfdd4404ed08 \ file://README.md;md5=35108c1521572d2a526926333b233cd7 \ From 6e0d90b843b50f498ae5c7fcb0a524c394f629b1 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 16 Jun 2022 18:37:38 +0000 Subject: [PATCH 0439/2022] glibc: add LGPL-2.1-only & GPL-2.0-only to LICENSE :Release Notes: :Detailed Notes: Fixes: ERROR: lib32-glibc-2.31+gitAUTOINC+3ef8be9b89-r0 do_package_qa: QA Issue: LICENSE_lib32-glibc-dev includes licenses (LGPL-2.1-only GPL-2.0-only) that are not listed in LICENSE [unlisted-pkg-lics] :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-6542] CCC: Various build fixes Change-Id: I1914d32a29793679ceacdbf5aca268acaaa20058 --- meta-webos/recipes-core/glibc/glibc_%.bbappend | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-core/glibc/glibc_%.bbappend b/meta-webos/recipes-core/glibc/glibc_%.bbappend index 33357be0d..5401c0382 100644 --- a/meta-webos/recipes-core/glibc/glibc_%.bbappend +++ b/meta-webos/recipes-core/glibc/glibc_%.bbappend @@ -2,7 +2,9 @@ EXTENDPRAUTO:append = "webos8" -LICENSE += "& BSD-3-Clause" +# Including "& LGPL-2.1-only & GPL-2.0-only" is needed only until it's updated in ustream recipe in kirkstone: +# https://git.openembedded.org/openembedded-core/commit/meta/recipes-core/glibc/glibc-common.inc?id=ceda3238cdbf1beb216ae9ddb242470d5dfc25e0 +LICENSE += "& BSD-3-Clause & LGPL-2.1-only & GPL-2.0-only" # Add missing dependency on BSD-3-Clause license for LICENSE:eglibc-extra-nss = "GPL-2.0-only & LGPL-2.1-only & BSD-3-Clause" From 24fc667bc8c43f8b1cc0e5833e7423bee98b0ef2 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 13 Jun 2022 15:09:49 +0000 Subject: [PATCH 0440/2022] meta-webos-backports-3.3: backport {,L}GPL-*-{only,or-later} licenses :Release Notes: More SPDX licenses were added to common licenses in: https://git.openembedded.org/openembedded-core/commit/?h=hardknott&id=5ecf139a31fa7bd813855f1235ea9f434fbcb2e0 we already use some of them, backport them. :Detailed Notes: Fixes: do_rootfs: The license listed GPL-3.0-or-later was not in the licenses collected for recipe lib32-gstreamer1.0-libav do_rootfs: The license listed LGPL-3.0-or-later was not in the licenses collected for recipe lib32-gstreamer1.0-libav :Release Notes: Be aware of SPDXLICENSEMAP entries in meta-qt6/conf/layer.conf. :Testing Performed: Only build tested. :QA Notes: No change to image. :Build Notes: This depends on: http://gpro.lge.com/c/webos/build-webos/+/331296 weboslayers.py: add layer with backports from Yocto 3.3 Hardknott http://gpro.lge.com/c/webos-pro/build-webos-pro/+/331297 weboslayers.py: add layer with backports from Yocto 3.3 Hardknott :Issues Addressed: [WRO-6542] CCC: Various build fixes Change-Id: I427050c0d53d335f1e6e4ab590befff2a5f06e0e --- .../meta-webos-backports-3.3/conf/layer.conf | 9 + .../licenses/GPL-2.0-only | 132 ++++ .../licenses/GPL-2.0-or-later | 319 +++++++++ .../licenses/GPL-3.0-only | 225 +++++++ .../licenses/GPL-3.0-or-later | 625 ++++++++++++++++++ .../licenses/LGPL-2.0-only | 342 ++++++++++ .../licenses/LGPL-2.0-or-later | 446 +++++++++++++ .../licenses/LGPL-2.1-only | 176 +++++ .../licenses/LGPL-2.1-or-later | 468 +++++++++++++ .../licenses/LGPL-3.0-only | 65 ++ .../licenses/LGPL-3.0-or-later | 163 +++++ 11 files changed, 2970 insertions(+) create mode 100644 meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-2.0-only create mode 100644 meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-2.0-or-later create mode 100644 meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-3.0-only create mode 100644 meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-3.0-or-later create mode 100644 meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.0-only create mode 100644 meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.0-or-later create mode 100644 meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.1-only create mode 100644 meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.1-or-later create mode 100644 meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-3.0-only create mode 100644 meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-3.0-or-later diff --git a/meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf b/meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf index 9f208f43e..0ce5b3f7f 100644 --- a/meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf +++ b/meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf @@ -17,3 +17,12 @@ LAYERDEPENDS_meta-webos-backports-3.3 = " \ core \ openembedded-layer \ " + +LICENSE_PATH += "${LAYERDIR}/licenses" + +# NB: meta-qt6/conf/layer.conf has license mapping back to old license files: +# SPDXLICENSEMAP[GPL-3.0-only] = "GPL-3.0" +# SPDXLICENSEMAP[LGPL-3.0-only] = "LGPL-3.0" +# SPDXLICENSEMAP[GPL-2.0-or-later] = "GPL-2.0" +# which prevent using the new license identifiers and common-licenses added here +# and in oe-core diff --git a/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-2.0-only b/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-2.0-only new file mode 100644 index 000000000..7f5abbce2 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-2.0-only @@ -0,0 +1,132 @@ + +GNU GENERAL PUBLIC LICENSE + +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. +Preamble + +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation`s software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. + +To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. + +Also, for each author`s protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors` reputations. + +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone`s free use or not licensed at all. + +The precise terms and conditions for copying, distribution and modification follow. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. + +1. You may copy and distribute verbatim copies of the Program`s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + +a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. +b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. +c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + +3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: + +a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, +b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, +c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) +The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + +If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + +5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients` exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + +9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + +NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + +one line to give the program`s name and an idea of what it does. +Copyright (C) yyyy name of author + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this when it starts in an interactive mode: + +Gnomovision version 69, Copyright (C) year name of author +Gnomovision comes with ABSOLUTELY NO WARRANTY; for details +type `show w`. This is free software, and you are welcome +to redistribute it under certain conditions; type `show c` +for details. +The hypothetical commands `show w` and `show c` should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w` and `show c`; they could even be mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: + +Yoyodyne, Inc., hereby disclaims all copyright +interest in the program `Gnomovision` +(which makes passes at compilers) written +by James Hacker. + +signature of Ty Coon, 1 April 1989 +Ty Coon, President of Vice +This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. + diff --git a/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-2.0-or-later b/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-2.0-or-later new file mode 100644 index 000000000..1d80ac365 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-2.0-or-later @@ -0,0 +1,319 @@ +GNU GENERAL PUBLIC LICENSE + +Version 2, June 1991 + +Copyright (C) 1989, 1991 Free Software Foundation, Inc. + +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +Preamble + +The licenses for most software are designed to take away your freedom to share +and change it. By contrast, the GNU General Public License is intended to +guarantee your freedom to share and change free software--to make sure the +software is free for all its users. This General Public License applies to +most of the Free Software Foundation's software and to any other program whose +authors commit to using it. (Some other Free Software Foundation software +is covered by the GNU Lesser General Public License instead.) You can apply +it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our +General Public Licenses are designed to make sure that you have the freedom +to distribute copies of free software (and charge for this service if you +wish), that you receive source code or can get it if you want it, that you +can change the software or use pieces of it in new free programs; and that +you know you can do these things. + +To protect your rights, we need to make restrictions that forbid anyone to +deny you these rights or to ask you to surrender the rights. These restrictions +translate to certain responsibilities for you if you distribute copies of +the software, or if you modify it. + +For example, if you distribute copies of such a program, whether gratis or +for a fee, you must give the recipients all the rights that you have. You +must make sure that they, too, receive or can get the source code. And you +must show them these terms so they know their rights. + +We protect your rights with two steps: (1) copyright the software, and (2) +offer you this license which gives you legal permission to copy, distribute +and/or modify the software. + +Also, for each author's protection and ours, we want to make certain that +everyone understands that there is no warranty for this free software. If +the software is modified by someone else and passed on, we want its recipients +to know that what they have is not the original, so that any problems introduced +by others will not reflect on the original authors' reputations. + +Finally, any free program is threatened constantly by software patents. We +wish to avoid the danger that redistributors of a free program will individually +obtain patent licenses, in effect making the program proprietary. To prevent +this, we have made it clear that any patent must be licensed for everyone's +free use or not licensed at all. + +The precise terms and conditions for copying, distribution and modification +follow. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License applies to any program or other work which contains a notice +placed by the copyright holder saying it may be distributed under the terms +of this General Public License. The "Program", below, refers to any such program +or work, and a "work based on the Program" means either the Program or any +derivative work under copyright law: that is to say, a work containing the +Program or a portion of it, either verbatim or with modifications and/or translated +into another language. (Hereinafter, translation is included without limitation +in the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not covered +by this License; they are outside its scope. The act of running the Program +is not restricted, and the output from the Program is covered only if its +contents constitute a work based on the Program (independent of having been +made by running the Program). Whether that is true depends on what the Program +does. + +1. You may copy and distribute verbatim copies of the Program's source code +as you receive it, in any medium, provided that you conspicuously and appropriately +publish on each copy an appropriate copyright notice and disclaimer of warranty; +keep intact all the notices that refer to this License and to the absence +of any warranty; and give any other recipients of the Program a copy of this +License along with the Program. + +You may charge a fee for the physical act of transferring a copy, and you +may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Program or any portion of it, +thus forming a work based on the Program, and copy and distribute such modifications +or work under the terms of Section 1 above, provided that you also meet all +of these conditions: + +a) You must cause the modified files to carry prominent notices stating that +you changed the files and the date of any change. + +b) You must cause any work that you distribute or publish, that in whole or +in part contains or is derived from the Program or any part thereof, to be +licensed as a whole at no charge to all third parties under the terms of this +License. + +c) If the modified program normally reads commands interactively when run, +you must cause it, when started running for such interactive use in the most +ordinary way, to print or display an announcement including an appropriate +copyright notice and a notice that there is no warranty (or else, saying that +you provide a warranty) and that users may redistribute the program under +these conditions, and telling the user how to view a copy of this License. +(Exception: if the Program itself is interactive but does not normally print +such an announcement, your work based on the Program is not required to print +an announcement.) + +These requirements apply to the modified work as a whole. If identifiable +sections of that work are not derived from the Program, and can be reasonably +considered independent and separate works in themselves, then this License, +and its terms, do not apply to those sections when you distribute them as +separate works. But when you distribute the same sections as part of a whole +which is a work based on the Program, the distribution of the whole must be +on the terms of this License, whose permissions for other licensees extend +to the entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest your +rights to work written entirely by you; rather, the intent is to exercise +the right to control the distribution of derivative or collective works based +on the Program. + +In addition, mere aggregation of another work not based on the Program with +the Program (or with a work based on the Program) on a volume of a storage +or distribution medium does not bring the other work under the scope of this +License. + +3. You may copy and distribute the Program (or a work based on it, under Section +2) in object code or executable form under the terms of Sections 1 and 2 above +provided that you also do one of the following: + +a) Accompany it with the complete corresponding machine-readable source code, +which must be distributed under the terms of Sections 1 and 2 above on a medium +customarily used for software interchange; or, + +b) Accompany it with a written offer, valid for at least three years, to give +any third party, for a charge no more than your cost of physically performing +source distribution, a complete machine-readable copy of the corresponding +source code, to be distributed under the terms of Sections 1 and 2 above on +a medium customarily used for software interchange; or, + +c) Accompany it with the information you received as to the offer to distribute +corresponding source code. (This alternative is allowed only for noncommercial +distribution and only if you received the program in object code or executable +form with such an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for making +modifications to it. For an executable work, complete source code means all +the source code for all modules it contains, plus any associated interface +definition files, plus the scripts used to control compilation and installation +of the executable. However, as a special exception, the source code distributed +need not include anything that is normally distributed (in either source or +binary form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component itself +accompanies the executable. + +If distribution of executable or object code is made by offering access to +copy from a designated place, then offering equivalent access to copy the +source code from the same place counts as distribution of the source code, +even though third parties are not compelled to copy the source along with +the object code. + +4. You may not copy, modify, sublicense, or distribute the Program except +as expressly provided under this License. Any attempt otherwise to copy, modify, +sublicense or distribute the Program is void, and will automatically terminate +your rights under this License. However, parties who have received copies, +or rights, from you under this License will not have their licenses terminated +so long as such parties remain in full compliance. + +5. You are not required to accept this License, since you have not signed +it. However, nothing else grants you permission to modify or distribute the +Program or its derivative works. These actions are prohibited by law if you +do not accept this License. Therefore, by modifying or distributing the Program +(or any work based on the Program), you indicate your acceptance of this License +to do so, and all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + +6. Each time you redistribute the Program (or any work based on the Program), +the recipient automatically receives a license from the original licensor +to copy, distribute or modify the Program subject to these terms and conditions. +You may not impose any further restrictions on the recipients' exercise of +the rights granted herein. You are not responsible for enforcing compliance +by third parties to this License. + +7. If, as a consequence of a court judgment or allegation of patent infringement +or for any other reason (not limited to patent issues), conditions are imposed +on you (whether by court order, agreement or otherwise) that contradict the +conditions of this License, they do not excuse you from the conditions of +this License. If you cannot distribute so as to satisfy simultaneously your +obligations under this License and any other pertinent obligations, then as +a consequence you may not distribute the Program at all. For example, if a +patent license would not permit royalty-free redistribution of the Program +by all those who receive copies directly or indirectly through you, then the +only way you could satisfy both it and this License would be to refrain entirely +from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply and +the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents +or other property right claims or to contest validity of any such claims; +this section has the sole purpose of protecting the integrity of the free +software distribution system, which is implemented by public license practices. +Many people have made generous contributions to the wide range of software +distributed through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing to +distribute software through any other system and a licensee cannot impose +that choice. + +This section is intended to make thoroughly clear what is believed to be a +consequence of the rest of this License. + +8. If the distribution and/or use of the Program is restricted in certain +countries either by patents or by copyrighted interfaces, the original copyright +holder who places the Program under this License may add an explicit geographical +distribution limitation excluding those countries, so that distribution is +permitted only in or among countries not thus excluded. In such case, this +License incorporates the limitation as if written in the body of this License. + +9. The Free Software Foundation may publish revised and/or new versions of +the General Public License from time to time. Such new versions will be similar +in spirit to the present version, but may differ in detail to address new +problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies +a version number of this License which applies to it and "any later version", +you have the option of following the terms and conditions either of that version +or of any later version published by the Free Software Foundation. If the +Program does not specify a version number of this License, you may choose +any version ever published by the Free Software Foundation. + +10. If you wish to incorporate parts of the Program into other free programs +whose distribution conditions are different, write to the author to ask for +permission. For software which is copyrighted by the Free Software Foundation, +write to the Free Software Foundation; we sometimes make exceptions for this. +Our decision will be guided by the two goals of preserving the free status +of all derivatives of our free software and of promoting the sharing and reuse +of software generally. + + NO WARRANTY + +11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR +THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE +STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM +"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE +OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE +OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA +OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES +OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH +HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible +use to the public, the best way to achieve this is to make it free software +which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach +them to the start of each source file to most effectively convey the exclusion +of warranty; and each file should have at least the "copyright" line and a +pointer to where the full notice is found. + + + +Copyright (C) + +This program is free software; you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program; if not, write to the Free Software Foundation, Inc., 51 Franklin +Street, Fifth Floor, Boston, MA 02110-1301, USA. + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this when +it starts in an interactive mode: + +Gnomovision version 69, Copyright (C) year name of author Gnomovision comes +with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, +and you are welcome to redistribute it under certain conditions; type `show +c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may be +called something other than `show w' and `show c'; they could even be mouse-clicks +or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your school, +if any, to sign a "copyright disclaimer" for the program, if necessary. Here +is a sample; alter the names: + +Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' +(which makes passes at compilers) written by James Hacker. + +, 1 April 1989 Ty Coon, President of Vice This General +Public License does not permit incorporating your program into proprietary +programs. If your program is a subroutine library, you may consider it more +useful to permit linking proprietary applications with the library. If this +is what you want to do, use the GNU Lesser General Public License instead +of this License. diff --git a/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-3.0-only b/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-3.0-only new file mode 100644 index 000000000..e0665a64a --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-3.0-only @@ -0,0 +1,225 @@ +GNU GENERAL PUBLIC LICENSE + +Version 3, 29 June 2007 + +Copyright © 2007 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. +Preamble + +The GNU General Public License is a free, copyleft license for software and other kinds of works. + +The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. + +To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. + +For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. + +Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. + +Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. + +Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. + +The precise terms and conditions for copying, distribution and modification follow. +TERMS AND CONDITIONS +0. Definitions. + +“This License” refers to version 3 of the GNU General Public License. + +“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. + +“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. + +To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. + +A “covered work” means either the unmodified Program or a work based on the Program. + +To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. + +To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. + +An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. +1. Source Code. + +The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. + +A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. + +The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. + +The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. + +The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. + +The Corresponding Source for a work in source code form is that same work. +2. Basic Permissions. + +All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. + +You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. +3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. + +When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. +4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. +5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: + + * a) The work must carry prominent notices stating that you modified it, and giving a relevant date. + * b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. + * c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. + * d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. + +A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. +6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: + + * a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. + * b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. + * c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. + * d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. + * e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. + +A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. + +“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. + +If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). + +The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. + +Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. +7. Additional Terms. + +“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. + +Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: + + * a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or + * b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or + * c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or + * d) Limiting the use for publicity purposes of names of licensors or authors of the material; or + * e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or + * f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. + +All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. +8. Termination. + +You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). + +However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. + +Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. +9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. +10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. + +An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. +11. Patents. + +A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. + +A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. + +In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. + +If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. + +A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. +12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. +13. Use with the GNU Affero General Public License. + +Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. +14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. + +Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. +15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. +16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. + +END OF TERMS AND CONDITIONS +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. + +You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . + +The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . diff --git a/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-3.0-or-later b/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-3.0-or-later new file mode 100644 index 000000000..e142a525b --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-3.0-or-later @@ -0,0 +1,625 @@ +GNU GENERAL PUBLIC LICENSE + +Version 3, 29 June 2007 + +Copyright © 2007 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +Preamble + +The GNU General Public License is a free, copyleft license for software and +other kinds of works. + +The licenses for most software and other practical works are designed to take +away your freedom to share and change the works. By contrast, the GNU General +Public License is intended to guarantee your freedom to share and change all +versions of a program--to make sure it remains free software for all its users. +We, the Free Software Foundation, use the GNU General Public License for most +of our software; it applies also to any other work released this way by its +authors. You can apply it to your programs, too. + +When we speak of free software, we are referring to freedom, not price. Our +General Public Licenses are designed to make sure that you have the freedom +to distribute copies of free software (and charge for them if you wish), that +you receive source code or can get it if you want it, that you can change +the software or use pieces of it in new free programs, and that you know you +can do these things. + +To protect your rights, we need to prevent others from denying you these rights +or asking you to surrender the rights. Therefore, you have certain responsibilities +if you distribute copies of the software, or if you modify it: responsibilities +to respect the freedom of others. + +For example, if you distribute copies of such a program, whether gratis or +for a fee, you must pass on to the recipients the same freedoms that you received. +You must make sure that they, too, receive or can get the source code. And +you must show them these terms so they know their rights. + +Developers that use the GNU GPL protect your rights with two steps: (1) assert +copyright on the software, and (2) offer you this License giving you legal +permission to copy, distribute and/or modify it. + +For the developers' and authors' protection, the GPL clearly explains that +there is no warranty for this free software. For both users' and authors' +sake, the GPL requires that modified versions be marked as changed, so that +their problems will not be attributed erroneously to authors of previous versions. + +Some devices are designed to deny users access to install or run modified +versions of the software inside them, although the manufacturer can do so. +This is fundamentally incompatible with the aim of protecting users' freedom +to change the software. The systematic pattern of such abuse occurs in the +area of products for individuals to use, which is precisely where it is most +unacceptable. Therefore, we have designed this version of the GPL to prohibit +the practice for those products. If such problems arise substantially in other +domains, we stand ready to extend this provision to those domains in future +versions of the GPL, as needed to protect the freedom of users. + +Finally, every program is threatened constantly by software patents. States +should not allow patents to restrict development and use of software on general-purpose +computers, but in those that do, we wish to avoid the special danger that +patents applied to a free program could make it effectively proprietary. To +prevent this, the GPL assures that patents cannot be used to render the program +non-free. + +The precise terms and conditions for copying, distribution and modification +follow. + +TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + +"Copyright" also means copyright-like laws that apply to other kinds of works, +such as semiconductor masks. + +"The Program" refers to any copyrightable work licensed under this License. +Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals +or organizations. + +To "modify" a work means to copy from or adapt all or part of the work in +a fashion requiring copyright permission, other than the making of an exact +copy. The resulting work is called a "modified version" of the earlier work +or a work "based on" the earlier work. + +A "covered work" means either the unmodified Program or a work based on the +Program. + +To "propagate" a work means to do anything with it that, without permission, +would make you directly or secondarily liable for infringement under applicable +copyright law, except executing it on a computer or modifying a private copy. +Propagation includes copying, distribution (with or without modification), +making available to the public, and in some countries other activities as +well. + +To "convey" a work means any kind of propagation that enables other parties +to make or receive copies. Mere interaction with a user through a computer +network, with no transfer of a copy, is not conveying. + +An interactive user interface displays "Appropriate Legal Notices" to the +extent that it includes a convenient and prominently visible feature that +(1) displays an appropriate copyright notice, and (2) tells the user that +there is no warranty for the work (except to the extent that warranties are +provided), that licensees may convey the work under this License, and how +to view a copy of this License. If the interface presents a list of user commands +or options, such as a menu, a prominent item in the list meets this criterion. + + 1. Source Code. + +The "source code" for a work means the preferred form of the work for making +modifications to it. "Object code" means any non-source form of a work. + +A "Standard Interface" means an interface that either is an official standard +defined by a recognized standards body, or, in the case of interfaces specified +for a particular programming language, one that is widely used among developers +working in that language. + +The "System Libraries" of an executable work include anything, other than +the work as a whole, that (a) is included in the normal form of packaging +a Major Component, but which is not part of that Major Component, and (b) +serves only to enable use of the work with that Major Component, or to implement +a Standard Interface for which an implementation is available to the public +in source code form. A "Major Component", in this context, means a major essential +component (kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to produce +the work, or an object code interpreter used to run it. + +The "Corresponding Source" for a work in object code form means all the source +code needed to generate, install, and (for an executable work) run the object +code and to modify the work, including scripts to control those activities. +However, it does not include the work's System Libraries, or general-purpose +tools or generally available free programs which are used unmodified in performing +those activities but which are not part of the work. For example, Corresponding +Source includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically linked +subprograms that the work is specifically designed to require, such as by +intimate data communication or control flow between those subprograms and +other parts of the work. + +The Corresponding Source need not include anything that users can regenerate +automatically from other parts of the Corresponding Source. + + The Corresponding Source for a work in source code form is that same work. + + 2. Basic Permissions. + +All rights granted under this License are granted for the term of copyright +on the Program, and are irrevocable provided the stated conditions are met. +This License explicitly affirms your unlimited permission to run the unmodified +Program. The output from running a covered work is covered by this License +only if the output, given its content, constitutes a covered work. This License +acknowledges your rights of fair use or other equivalent, as provided by copyright +law. + +You may make, run and propagate covered works that you do not convey, without +conditions so long as your license otherwise remains in force. You may convey +covered works to others for the sole purpose of having them make modifications +exclusively for you, or provide you with facilities for running those works, +provided that you comply with the terms of this License in conveying all material +for which you do not control copyright. Those thus making or running the covered +works for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of your copyrighted +material outside their relationship with you. + +Conveying under any other circumstances is permitted solely under the conditions +stated below. Sublicensing is not allowed; section 10 makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + +No covered work shall be deemed part of an effective technological measure +under any applicable law fulfilling obligations under article 11 of the WIPO +copyright treaty adopted on 20 December 1996, or similar laws prohibiting +or restricting circumvention of such measures. + +When you convey a covered work, you waive any legal power to forbid circumvention +of technological measures to the extent such circumvention is effected by +exercising rights under this License with respect to the covered work, and +you disclaim any intention to limit operation or modification of the work +as a means of enforcing, against the work's users, your or third parties' +legal rights to forbid circumvention of technological measures. + + 4. Conveying Verbatim Copies. + +You may convey verbatim copies of the Program's source code as you receive +it, in any medium, provided that you conspicuously and appropriately publish +on each copy an appropriate copyright notice; keep intact all notices stating +that this License and any non-permissive terms added in accord with section +7 apply to the code; keep intact all notices of the absence of any warranty; +and give all recipients a copy of this License along with the Program. + +You may charge any price or no price for each copy that you convey, and you +may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + +You may convey a work based on the Program, or the modifications to produce +it from the Program, in the form of source code under the terms of section +4, provided that you also meet all of these conditions: + +a) The work must carry prominent notices stating that you modified it, and +giving a relevant date. + +b) The work must carry prominent notices stating that it is released under +this License and any conditions added under section 7. This requirement modifies +the requirement in section 4 to "keep intact all notices". + +c) You must license the entire work, as a whole, under this License to anyone +who comes into possession of a copy. This License will therefore apply, along +with any applicable section 7 additional terms, to the whole of the work, +and all its parts, regardless of how they are packaged. This License gives +no permission to license the work in any other way, but it does not invalidate +such permission if you have separately received it. + +d) If the work has interactive user interfaces, each must display Appropriate +Legal Notices; however, if the Program has interactive interfaces that do +not display Appropriate Legal Notices, your work need not make them do so. + +A compilation of a covered work with other separate and independent works, +which are not by their nature extensions of the covered work, and which are +not combined with it such as to form a larger program, in or on a volume of +a storage or distribution medium, is called an "aggregate" if the compilation +and its resulting copyright are not used to limit the access or legal rights +of the compilation's users beyond what the individual works permit. Inclusion +of a covered work in an aggregate does not cause this License to apply to +the other parts of the aggregate. + + 6. Conveying Non-Source Forms. + +You may convey a covered work in object code form under the terms of sections +4 and 5, provided that you also convey the machine-readable Corresponding +Source under the terms of this License, in one of these ways: + +a) Convey the object code in, or embodied in, a physical product (including +a physical distribution medium), accompanied by the Corresponding Source fixed +on a durable physical medium customarily used for software interchange. + +b) Convey the object code in, or embodied in, a physical product (including +a physical distribution medium), accompanied by a written offer, valid for +at least three years and valid for as long as you offer spare parts or customer +support for that product model, to give anyone who possesses the object code +either (1) a copy of the Corresponding Source for all the software in the +product that is covered by this License, on a durable physical medium customarily +used for software interchange, for a price no more than your reasonable cost +of physically performing this conveying of source, or (2) access to copy the +Corresponding Source from a network server at no charge. + +c) Convey individual copies of the object code with a copy of the written +offer to provide the Corresponding Source. This alternative is allowed only +occasionally and noncommercially, and only if you received the object code +with such an offer, in accord with subsection 6b. + +d) Convey the object code by offering access from a designated place (gratis +or for a charge), and offer equivalent access to the Corresponding Source +in the same way through the same place at no further charge. You need not +require recipients to copy the Corresponding Source along with the object +code. If the place to copy the object code is a network server, the Corresponding +Source may be on a different server (operated by you or a third party) that +supports equivalent copying facilities, provided you maintain clear directions +next to the object code saying where to find the Corresponding Source. Regardless +of what server hosts the Corresponding Source, you remain obligated to ensure +that it is available for as long as needed to satisfy these requirements. + +e) Convey the object code using peer-to-peer transmission, provided you inform +other peers where the object code and Corresponding Source of the work are +being offered to the general public at no charge under subsection 6d. + +A separable portion of the object code, whose source code is excluded from +the Corresponding Source as a System Library, need not be included in conveying +the object code work. + +A "User Product" is either (1) a "consumer product", which means any tangible +personal property which is normally used for personal, family, or household +purposes, or (2) anything designed or sold for incorporation into a dwelling. +In determining whether a product is a consumer product, doubtful cases shall +be resolved in favor of coverage. For a particular product received by a particular +user, "normally used" refers to a typical or common use of that class of product, +regardless of the status of the particular user or of the way in which the +particular user actually uses, or expects or is expected to use, the product. +A product is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent the +only significant mode of use of the product. + +"Installation Information" for a User Product means any methods, procedures, +authorization keys, or other information required to install and execute modified +versions of a covered work in that User Product from a modified version of +its Corresponding Source. The information must suffice to ensure that the +continued functioning of the modified object code is in no case prevented +or interfered with solely because modification has been made. + +If you convey an object code work under this section in, or with, or specifically +for use in, a User Product, and the conveying occurs as part of a transaction +in which the right of possession and use of the User Product is transferred +to the recipient in perpetuity or for a fixed term (regardless of how the +transaction is characterized), the Corresponding Source conveyed under this +section must be accompanied by the Installation Information. But this requirement +does not apply if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has been installed +in ROM). + +The requirement to provide Installation Information does not include a requirement +to continue to provide support service, warranty, or updates for a work that +has been modified or installed by the recipient, or for the User Product in +which it has been modified or installed. Access to a network may be denied +when the modification itself materially and adversely affects the operation +of the network or violates the rules and protocols for communication across +the network. + +Corresponding Source conveyed, and Installation Information provided, in accord +with this section must be in a format that is publicly documented (and with +an implementation available to the public in source code form), and must require +no special password or key for unpacking, reading or copying. + + 7. Additional Terms. + +"Additional permissions" are terms that supplement the terms of this License +by making exceptions from one or more of its conditions. Additional permissions +that are applicable to the entire Program shall be treated as though they +were included in this License, to the extent that they are valid under applicable +law. If additional permissions apply only to part of the Program, that part +may be used separately under those permissions, but the entire Program remains +governed by this License without regard to the additional permissions. + +When you convey a copy of a covered work, you may at your option remove any +additional permissions from that copy, or from any part of it. (Additional +permissions may be written to require their own removal in certain cases when +you modify the work.) You may place additional permissions on material, added +by you to a covered work, for which you have or can give appropriate copyright +permission. + +Notwithstanding any other provision of this License, for material you add +to a covered work, you may (if authorized by the copyright holders of that +material) supplement the terms of this License with terms: + +a) Disclaiming warranty or limiting liability differently from the terms of +sections 15 and 16 of this License; or + +b) Requiring preservation of specified reasonable legal notices or author +attributions in that material or in the Appropriate Legal Notices displayed +by works containing it; or + +c) Prohibiting misrepresentation of the origin of that material, or requiring +that modified versions of such material be marked in reasonable ways as different +from the original version; or + +d) Limiting the use for publicity purposes of names of licensors or authors +of the material; or + +e) Declining to grant rights under trademark law for use of some trade names, +trademarks, or service marks; or + +f) Requiring indemnification of licensors and authors of that material by +anyone who conveys the material (or modified versions of it) with contractual +assumptions of liability to the recipient, for any liability that these contractual +assumptions directly impose on those licensors and authors. + +All other non-permissive additional terms are considered "further restrictions" +within the meaning of section 10. If the Program as you received it, or any +part of it, contains a notice stating that it is governed by this License +along with a term that is a further restriction, you may remove that term. +If a license document contains a further restriction but permits relicensing +or conveying under this License, you may add to a covered work material governed +by the terms of that license document, provided that the further restriction +does not survive such relicensing or conveying. + +If you add terms to a covered work in accord with this section, you must place, +in the relevant source files, a statement of the additional terms that apply +to those files, or a notice indicating where to find the applicable terms. + +Additional terms, permissive or non-permissive, may be stated in the form +of a separately written license, or stated as exceptions; the above requirements +apply either way. + + 8. Termination. + +You may not propagate or modify a covered work except as expressly provided +under this License. Any attempt otherwise to propagate or modify it is void, +and will automatically terminate your rights under this License (including +any patent licenses granted under the third paragraph of section 11). + +However, if you cease all violation of this License, then your license from +a particular copyright holder is reinstated (a) provisionally, unless and +until the copyright holder explicitly and finally terminates your license, +and (b) permanently, if the copyright holder fails to notify you of the violation +by some reasonable means prior to 60 days after the cessation. + +Moreover, your license from a particular copyright holder is reinstated permanently +if the copyright holder notifies you of the violation by some reasonable means, +this is the first time you have received notice of violation of this License +(for any work) from that copyright holder, and you cure the violation prior +to 30 days after your receipt of the notice. + +Termination of your rights under this section does not terminate the licenses +of parties who have received copies or rights from you under this License. +If your rights have been terminated and not permanently reinstated, you do +not qualify to receive new licenses for the same material under section 10. + + 9. Acceptance Not Required for Having Copies. + +You are not required to accept this License in order to receive or run a copy +of the Program. Ancillary propagation of a covered work occurring solely as +a consequence of using peer-to-peer transmission to receive a copy likewise +does not require acceptance. However, nothing other than this License grants +you permission to propagate or modify any covered work. These actions infringe +copyright if you do not accept this License. Therefore, by modifying or propagating +a covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + +Each time you convey a covered work, the recipient automatically receives +a license from the original licensors, to run, modify and propagate that work, +subject to this License. You are not responsible for enforcing compliance +by third parties with this License. + +An "entity transaction" is a transaction transferring control of an organization, +or substantially all assets of one, or subdividing an organization, or merging +organizations. If propagation of a covered work results from an entity transaction, +each party to that transaction who receives a copy of the work also receives +whatever licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the Corresponding +Source of the work from the predecessor in interest, if the predecessor has +it or can get it with reasonable efforts. + +You may not impose any further restrictions on the exercise of the rights +granted or affirmed under this License. For example, you may not impose a +license fee, royalty, or other charge for exercise of rights granted under +this License, and you may not initiate litigation (including a cross-claim +or counterclaim in a lawsuit) alleging that any patent claim is infringed +by making, using, selling, offering for sale, or importing the Program or +any portion of it. + + 11. Patents. + +A "contributor" is a copyright holder who authorizes use under this License +of the Program or a work on which the Program is based. The work thus licensed +is called the contributor's "contributor version". + +A contributor's "essential patent claims" are all patent claims owned or controlled +by the contributor, whether already acquired or hereafter acquired, that would +be infringed by some manner, permitted by this License, of making, using, +or selling its contributor version, but do not include claims that would be +infringed only as a consequence of further modification of the contributor +version. For purposes of this definition, "control" includes the right to +grant patent sublicenses in a manner consistent with the requirements of this +License. + +Each contributor grants you a non-exclusive, worldwide, royalty-free patent +license under the contributor's essential patent claims, to make, use, sell, +offer for sale, import and otherwise run, modify and propagate the contents +of its contributor version. + +In the following three paragraphs, a "patent license" is any express agreement +or commitment, however denominated, not to enforce a patent (such as an express +permission to practice a patent or covenant not to sue for patent infringement). +To "grant" such a patent license to a party means to make such an agreement +or commitment not to enforce a patent against the party. + +If you convey a covered work, knowingly relying on a patent license, and the +Corresponding Source of the work is not available for anyone to copy, free +of charge and under the terms of this License, through a publicly available +network server or other readily accessible means, then you must either (1) +cause the Corresponding Source to be so available, or (2) arrange to deprive +yourself of the benefit of the patent license for this particular work, or +(3) arrange, in a manner consistent with the requirements of this License, +to extend the patent license to downstream recipients. "Knowingly relying" +means you have actual knowledge that, but for the patent license, your conveying +the covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that country +that you have reason to believe are valid. + +If, pursuant to or in connection with a single transaction or arrangement, +you convey, or propagate by procuring conveyance of, a covered work, and grant +a patent license to some of the parties receiving the covered work authorizing +them to use, propagate, modify or convey a specific copy of the covered work, +then the patent license you grant is automatically extended to all recipients +of the covered work and works based on it. + +A patent license is "discriminatory" if it does not include within the scope +of its coverage, prohibits the exercise of, or is conditioned on the non-exercise +of one or more of the rights that are specifically granted under this License. +You may not convey a covered work if you are a party to an arrangement with +a third party that is in the business of distributing software, under which +you make payment to the third party based on the extent of your activity of +conveying the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory patent +license (a) in connection with copies of the covered work conveyed by you +(or copies made from those copies), or (b) primarily for and in connection +with specific products or compilations that contain the covered work, unless +you entered into that arrangement, or that patent license was granted, prior +to 28 March 2007. + +Nothing in this License shall be construed as excluding or limiting any implied +license or other defenses to infringement that may otherwise be available +to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + +If conditions are imposed on you (whether by court order, agreement or otherwise) +that contradict the conditions of this License, they do not excuse you from +the conditions of this License. If you cannot convey a covered work so as +to satisfy simultaneously your obligations under this License and any other +pertinent obligations, then as a consequence you may not convey it at all. +For example, if you agree to terms that obligate you to collect a royalty +for further conveying from those to whom you convey the Program, the only +way you could satisfy both those terms and this License would be to refrain +entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + +Notwithstanding any other provision of this License, you have permission to +link or combine any covered work with a work licensed under version 3 of the +GNU Affero General Public License into a single combined work, and to convey +the resulting work. The terms of this License will continue to apply to the +part which is the covered work, but the special requirements of the GNU Affero +General Public License, section 13, concerning interaction through a network +will apply to the combination as such. + + 14. Revised Versions of this License. + +The Free Software Foundation may publish revised and/or new versions of the +GNU General Public License from time to time. Such new versions will be similar +in spirit to the present version, but may differ in detail to address new +problems or concerns. + +Each version is given a distinguishing version number. If the Program specifies +that a certain numbered version of the GNU General Public License "or any +later version" applies to it, you have the option of following the terms and +conditions either of that numbered version or of any later version published +by the Free Software Foundation. If the Program does not specify a version +number of the GNU General Public License, you may choose any version ever +published by the Free Software Foundation. + +If the Program specifies that a proxy can decide which future versions of +the GNU General Public License can be used, that proxy's public statement +of acceptance of a version permanently authorizes you to choose that version +for the Program. + +Later license versions may give you additional or different permissions. However, +no additional obligations are imposed on any author or copyright holder as +a result of your choosing to follow a later version. + + 15. Disclaimer of Warranty. + +THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE +LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR +OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER +EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES +OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM +PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR +CORRECTION. + + 16. Limitation of Liability. + +IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL +ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM +AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, +INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO +USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED +INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE +PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER +PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + +If the disclaimer of warranty and limitation of liability provided above cannot +be given local legal effect according to their terms, reviewing courts shall +apply local law that most closely approximates an absolute waiver of all civil +liability in connection with the Program, unless a warranty or assumption +of liability accompanies a copy of the Program in return for a fee. END OF +TERMS AND CONDITIONS + +How to Apply These Terms to Your New Programs + +If you develop a new program, and you want it to be of the greatest possible +use to the public, the best way to achieve this is to make it free software +which everyone can redistribute and change under these terms. + +To do so, attach the following notices to the program. It is safest to attach +them to the start of each source file to most effectively state the exclusion +of warranty; and each file should have at least the "copyright" line and a +pointer to where the full notice is found. + + + +Copyright (C) + +This program is free software: you can redistribute it and/or modify it under +the terms of the GNU General Public License as published by the Free Software +Foundation, either version 3 of the License, or (at your option) any later +version. + +This program is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + +You should have received a copy of the GNU General Public License along with +this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + +If the program does terminal interaction, make it output a short notice like +this when it starts in an interactive mode: + + Copyright (C) + +This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + +This is free software, and you are welcome to redistribute it under certain +conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands might +be different; for a GUI interface, you would use an "about box". + +You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. For +more information on this, and how to apply and follow the GNU GPL, see . + +The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Lesser General Public +License instead of this License. But first, please read . diff --git a/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.0-only b/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.0-only new file mode 100644 index 000000000..5931d439b --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.0-only @@ -0,0 +1,342 @@ +GNU LIBRARY GENERAL PUBLIC LICENSE + + + +Version 2, June 1991 + + + +Copyright (C) 1991 Free Software Foundation, Inc. + +51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + +Everyone is permitted to copy and distribute verbatim copies + +of this license document, but changing it is not allowed. + + + +[This is the first released version of the library GPL. It is + + numbered 2 because it goes with version 2 of the ordinary GPL.] + +Preamble + + + +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. + + + +This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. + + + +When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. + + + +To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. + + + +For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. + + + +Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. + + + +Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. + + + +Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. + + + +Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. + + + +The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. + + + +Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. + + + +However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. + + + +The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. + + + +Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. + + + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + + +0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". + + + +A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. + + + +The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) + + + +"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. + + + +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. + + + +1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. + + + +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + + + +2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + + + +a) The modified work must itself be a software library. + +b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. + +c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. + +d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. + +(For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) + + + +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + + + +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. + + + +In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + + + +3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. + + + +Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. + + + +This option is useful when you wish to copy part of the code of the Library into a program that is not a library. + + + +4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. + + + +If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. + + + +5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. + + + +However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. + + + +When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. + + + +If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) + + + +Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. + + + +6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. + + + +You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: + + + +a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) + +b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. + +c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. + +d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. + +For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + + + +It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. + + + +7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: + + + +a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. + +b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. + +8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + + + +9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. + + + +10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. + + + +11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. + + + +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. + + + +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + + + +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + + + +12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + + + +13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + + + +Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. + + + +14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + + + +NO WARRANTY + + + +15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + + +16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + + + +END OF TERMS AND CONDITIONS + + + +How to Apply These Terms to Your New Libraries + + + +If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). + + + +To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + + + +one line to give the library's name and an idea of what it does. + +Copyright (C) year name of author + + + +This library is free software; you can redistribute it and/or + +modify it under the terms of the GNU Library General Public + +License as published by the Free Software Foundation; either + +version 2 of the License, or (at your option) any later version. + + + +This library is distributed in the hope that it will be useful, + +but WITHOUT ANY WARRANTY; without even the implied warranty of + +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + +Library General Public License for more details. + + + +You should have received a copy of the GNU Library General Public + +License along with this library; if not, write to the + +Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, + +Boston, MA 02110-1301, USA. + +Also add information on how to contact you by electronic and paper mail. + + + +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: + + + +Yoyodyne, Inc., hereby disclaims all copyright interest in + +the library `Frob' (a library for tweaking knobs) written + +by James Random Hacker. + + + +signature of Ty Coon, 1 April 1990 + +Ty Coon, President of Vice + +That's all there is to it! + diff --git a/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.0-or-later b/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.0-or-later new file mode 100644 index 000000000..5c96471aa --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.0-or-later @@ -0,0 +1,446 @@ +GNU LIBRARY GENERAL PUBLIC LICENSE + +Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. + +51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +[This is the first released version of the library GPL. It is numbered 2 because +it goes with version 2 of the ordinary GPL.] + +Preamble + +The licenses for most software are designed to take away your freedom to share +and change it. By contrast, the GNU General Public Licenses are intended to +guarantee your freedom to share and change free software--to make sure the +software is free for all its users. + +This license, the Library General Public License, applies to some specially +designated Free Software Foundation software, and to any other libraries whose +authors decide to use it. You can use it for your libraries, too. + +When we speak of free software, we are referring to freedom, not price. Our +General Public Licenses are designed to make sure that you have the freedom +to distribute copies of free software (and charge for this service if you +wish), that you receive source code or can get it if you want it, that you +can change the software or use pieces of it in new free programs; and that +you know you can do these things. + +To protect your rights, we need to make restrictions that forbid anyone to +deny you these rights or to ask you to surrender the rights. These restrictions +translate to certain responsibilities for you if you distribute copies of +the library, or if you modify it. + +For example, if you distribute copies of the library, whether gratis or for +a fee, you must give the recipients all the rights that we gave you. You must +make sure that they, too, receive or can get the source code. If you link +a program with the library, you must provide complete object files to the +recipients so that they can relink them with the library, after making changes +to the library and recompiling it. And you must show them these terms so they +know their rights. + +Our method of protecting your rights has two steps: (1) copyright the library, +and (2) offer you this license which gives you legal permission to copy, distribute +and/or modify the library. + +Also, for each distributor's protection, we want to make certain that everyone +understands that there is no warranty for this free library. If the library +is modified by someone else and passed on, we want its recipients to know +that what they have is not the original version, so that any problems introduced +by others will not reflect on the original authors' reputations. + +Finally, any free program is threatened constantly by software patents. We +wish to avoid the danger that companies distributing free software will individually +obtain patent licenses, thus in effect transforming the program into proprietary +software. To prevent this, we have made it clear that any patent must be licensed +for everyone's free use or not licensed at all. + +Most GNU software, including some libraries, is covered by the ordinary GNU +General Public License, which was designed for utility programs. This license, +the GNU Library General Public License, applies to certain designated libraries. +This license is quite different from the ordinary one; be sure to read it +in full, and don't assume that anything in it is the same as in the ordinary +license. + +The reason we have a separate public license for some libraries is that they +blur the distinction we usually make between modifying or adding to a program +and simply using it. Linking a program with a library, without changing the +library, is in some sense simply using the library, and is analogous to running +a utility program or application program. However, in a textual and legal +sense, the linked executable is a combined work, a derivative of the original +library, and the ordinary General Public License treats it as such. + +Because of this blurred distinction, using the ordinary General Public License +for libraries did not effectively promote software sharing, because most developers +did not use the libraries. We concluded that weaker conditions might promote +sharing better. + +However, unrestricted linking of non-free programs would deprive the users +of those programs of all benefit from the free status of the libraries themselves. +This Library General Public License is intended to permit developers of non-free +programs to use free libraries, while preserving your freedom as a user of +such programs to change the free libraries that are incorporated in them. +(We have not seen how to achieve this as regards changes in header files, +but we have achieved it as regards changes in the actual functions of the +Library.) The hope is that this will lead to faster development of free libraries. + +The precise terms and conditions for copying, distribution and modification +follow. Pay close attention to the difference between a "work based on the +library" and a "work that uses the library". The former contains code derived +from the library, while the latter only works together with the library. + +Note that it is possible for a library to be covered by the ordinary General +Public License rather than by this special one. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License Agreement applies to any software library which contains a +notice placed by the copyright holder or other authorized party saying it +may be distributed under the terms of this Library General Public License +(also called "this License"). Each licensee is addressed as "you". + +A "library" means a collection of software functions and/or data prepared +so as to be conveniently linked with application programs (which use some +of those functions and data) to form executables. + +The "Library", below, refers to any such software library or work which has +been distributed under these terms. A "work based on the Library" means either +the Library or any derivative work under copyright law: that is to say, a +work containing the Library or a portion of it, either verbatim or with modifications +and/or translated straightforwardly into another language. (Hereinafter, translation +is included without limitation in the term "modification".) + +"Source code" for a work means the preferred form of the work for making modifications +to it. For a library, complete source code means all the source code for all +modules it contains, plus any associated interface definition files, plus +the scripts used to control compilation and installation of the library. + +Activities other than copying, distribution and modification are not covered +by this License; they are outside its scope. The act of running a program +using the Library is not restricted, and output from such a program is covered +only if its contents constitute a work based on the Library (independent of +the use of the Library in a tool for writing it). Whether that is true depends +on what the Library does and what the program that uses the Library does. + +1. You may copy and distribute verbatim copies of the Library's complete source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and disclaimer +of warranty; keep intact all the notices that refer to this License and to +the absence of any warranty; and distribute a copy of this License along with +the Library. + +You may charge a fee for the physical act of transferring a copy, and you +may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Library or any portion of it, +thus forming a work based on the Library, and copy and distribute such modifications +or work under the terms of Section 1 above, provided that you also meet all +of these conditions: + + a) The modified work must itself be a software library. + +b) You must cause the files modified to carry prominent notices stating that +you changed the files and the date of any change. + +c) You must cause the whole of the work to be licensed at no charge to all +third parties under the terms of this License. + +d) If a facility in the modified Library refers to a function or a table of +data to be supplied by an application program that uses the facility, other +than as an argument passed when the facility is invoked, then you must make +a good faith effort to ensure that, in the event an application does not supply +such function or table, the facility still operates, and performs whatever +part of its purpose remains meaningful. + +(For example, a function in a library to compute square roots has a purpose +that is entirely well-defined independent of the application. Therefore, Subsection +2d requires that any application-supplied function or table used by this function +must be optional: if the application does not supply it, the square root function +must still compute square roots.) + +These requirements apply to the modified work as a whole. If identifiable +sections of that work are not derived from the Library, and can be reasonably +considered independent and separate works in themselves, then this License, +and its terms, do not apply to those sections when you distribute them as +separate works. But when you distribute the same sections as part of a whole +which is a work based on the Library, the distribution of the whole must be +on the terms of this License, whose permissions for other licensees extend +to the entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest your +rights to work written entirely by you; rather, the intent is to exercise +the right to control the distribution of derivative or collective works based +on the Library. + +In addition, mere aggregation of another work not based on the Library with +the Library (or with a work based on the Library) on a volume of a storage +or distribution medium does not bring the other work under the scope of this +License. + +3. You may opt to apply the terms of the ordinary GNU General Public License +instead of this License to a given copy of the Library. To do this, you must +alter all the notices that refer to this License, so that they refer to the +ordinary GNU General Public License, version 2, instead of to this License. +(If a newer version than version 2 of the ordinary GNU General Public License +has appeared, then you can specify that version instead if you wish.) Do not +make any other change in these notices. + +Once this change is made in a given copy, it is irreversible for that copy, +so the ordinary GNU General Public License applies to all subsequent copies +and derivative works made from that copy. + +This option is useful when you wish to copy part of the code of the Library +into a program that is not a library. + +4. You may copy and distribute the Library (or a portion or derivative of +it, under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you accompany it with the complete corresponding +machine-readable source code, which must be distributed under the terms of +Sections 1 and 2 above on a medium customarily used for software interchange. + +If distribution of object code is made by offering access to copy from a designated +place, then offering equivalent access to copy the source code from the same +place satisfies the requirement to distribute the source code, even though +third parties are not compelled to copy the source along with the object code. + +5. A program that contains no derivative of any portion of the Library, but +is designed to work with the Library by being compiled or linked with it, +is called a "work that uses the Library". Such a work, in isolation, is not +a derivative work of the Library, and therefore falls outside the scope of +this License. + +However, linking a "work that uses the Library" with the Library creates an +executable that is a derivative of the Library (because it contains portions +of the Library), rather than a "work that uses the library". The executable +is therefore covered by this License. Section 6 states terms for distribution +of such executables. + +When a "work that uses the Library" uses material from a header file that +is part of the Library, the object code for the work may be a derivative work +of the Library even though the source code is not. Whether this is true is +especially significant if the work can be linked without the Library, or if +the work is itself a library. The threshold for this to be true is not precisely +defined by law. + +If such an object file uses only numerical parameters, data structure layouts +and accessors, and small macros and small inline functions (ten lines or less +in length), then the use of the object file is unrestricted, regardless of +whether it is legally a derivative work. (Executables containing this object +code plus portions of the Library will still fall under Section 6.) + +Otherwise, if the work is a derivative of the Library, you may distribute +the object code for the work under the terms of Section 6. Any executables +containing that work also fall under Section 6, whether or not they are linked +directly with the Library itself. + +6. As an exception to the Sections above, you may also compile or link a "work +that uses the Library" with the Library to produce a work containing portions +of the Library, and distribute that work under terms of your choice, provided +that the terms permit modification of the work for the customer's own use +and reverse engineering for debugging such modifications. + +You must give prominent notice with each copy of the work that the Library +is used in it and that the Library and its use are covered by this License. +You must supply a copy of this License. If the work during execution displays +copyright notices, you must include the copyright notice for the Library among +them, as well as a reference directing the user to the copy of this License. +Also, you must do one of these things: + +a) Accompany the work with the complete corresponding machine-readable source +code for the Library including whatever changes were used in the work (which +must be distributed under Sections 1 and 2 above); and, if the work is an +executable linked with the Library, with the complete machine-readable "work +that uses the Library", as object code and/or source code, so that the user +can modify the Library and then relink to produce a modified executable containing +the modified Library. (It is understood that the user who changes the contents +of definitions files in the Library will not necessarily be able to recompile +the application to use the modified definitions.) + +b) Accompany the work with a written offer, valid for at least three years, +to give the same user the materials specified in Subsection 6a, above, for +a charge no more than the cost of performing this distribution. + +c) If distribution of the work is made by offering access to copy from a designated +place, offer equivalent access to copy the above specified materials from +the same place. + +d) Verify that the user has already received a copy of these materials or +that you have already sent this user a copy. + +For an executable, the required form of the "work that uses the Library" must +include any data and utility programs needed for reproducing the executable +from it. However, as a special exception, the source code distributed need +not include anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the operating +system on which the executable runs, unless that component itself accompanies +the executable. + +It may happen that this requirement contradicts the license restrictions of +other proprietary libraries that do not normally accompany the operating system. +Such a contradiction means you cannot use both them and the Library together +in an executable that you distribute. + +7. You may place library facilities that are a work based on the Library side-by-side +in a single library together with other library facilities not covered by +this License, and distribute such a combined library, provided that the separate +distribution of the work based on the Library and of the other library facilities +is otherwise permitted, and provided that you do these two things: + +a) Accompany the combined library with a copy of the same work based on the +Library, uncombined with any other library facilities. This must be distributed +under the terms of the Sections above. + +b) Give prominent notice with the combined library of the fact that part of +it is a work based on the Library, and explaining where to find the accompanying +uncombined form of the same work. + +8. You may not copy, modify, sublicense, link with, or distribute the Library +except as expressly provided under this License. Any attempt otherwise to +copy, modify, sublicense, link with, or distribute the Library is void, and +will automatically terminate your rights under this License. However, parties +who have received copies, or rights, from you under this License will not +have their licenses terminated so long as such parties remain in full compliance. + +9. You are not required to accept this License, since you have not signed +it. However, nothing else grants you permission to modify or distribute the +Library or its derivative works. These actions are prohibited by law if you +do not accept this License. Therefore, by modifying or distributing the Library +(or any work based on the Library), you indicate your acceptance of this License +to do so, and all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + +10. Each time you redistribute the Library (or any work based on the Library), +the recipient automatically receives a license from the original licensor +to copy, distribute, link with or modify the Library subject to these terms +and conditions. You may not impose any further restrictions on the recipients' +exercise of the rights granted herein. You are not responsible for enforcing +compliance by third parties to this License. + +11. If, as a consequence of a court judgment or allegation of patent infringement +or for any other reason (not limited to patent issues), conditions are imposed +on you (whether by court order, agreement or otherwise) that contradict the +conditions of this License, they do not excuse you from the conditions of +this License. If you cannot distribute so as to satisfy simultaneously your +obligations under this License and any other pertinent obligations, then as +a consequence you may not distribute the Library at all. For example, if a +patent license would not permit royalty-free redistribution of the Library +by all those who receive copies directly or indirectly through you, then the +only way you could satisfy both it and this License would be to refrain entirely +from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents +or other property right claims or to contest validity of any such claims; +this section has the sole purpose of protecting the integrity of the free +software distribution system which is implemented by public license practices. +Many people have made generous contributions to the wide range of software +distributed through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing to +distribute software through any other system and a licensee cannot impose +that choice. + +This section is intended to make thoroughly clear what is believed to be a +consequence of the rest of this License. + +12. If the distribution and/or use of the Library is restricted in certain +countries either by patents or by copyrighted interfaces, the original copyright +holder who places the Library under this License may add an explicit geographical +distribution limitation excluding those countries, so that distribution is +permitted only in or among countries not thus excluded. In such case, this +License incorporates the limitation as if written in the body of this License. + +13. The Free Software Foundation may publish revised and/or new versions of +the Library General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to address +new problems or concerns. + +Each version is given a distinguishing version number. If the Library specifies +a version number of this License which applies to it and "any later version", +you have the option of following the terms and conditions either of that version +or of any later version published by the Free Software Foundation. If the +Library does not specify a license version number, you may choose any version +ever published by the Free Software Foundation. + +14. If you wish to incorporate parts of the Library into other free programs +whose distribution conditions are incompatible with these, write to the author +to ask for permission. For software which is copyrighted by the Free Software +Foundation, write to the Free Software Foundation; we sometimes make exceptions +for this. Our decision will be guided by the two goals of preserving the free +status of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + +15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR +THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE +STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY +"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE +OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE +THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE +OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA +OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES +OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH +HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Libraries + +If you develop a new library, and you want it to be of the greatest possible +use to the public, we recommend making it free software that everyone can +redistribute and change. You can do so by permitting redistribution under +these terms (or, alternatively, under the terms of the ordinary General Public +License). + +To apply these terms, attach the following notices to the library. It is safest +to attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the "copyright" +line and a pointer to where the full notice is found. + +one line to give the library's name and an idea of what it does. + +Copyright (C) year name of author + +This library is free software; you can redistribute it and/or modify it under +the terms of the GNU Library General Public License as published by the Free +Software Foundation; either version 2 of the License, or (at your option) +any later version. + +This library is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more +details. + +You should have received a copy of the GNU Library General Public License +along with this library; if not, write to the Free Software Foundation, Inc., +51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your school, +if any, to sign a "copyright disclaimer" for the library, if necessary. Here +is a sample; alter the names: + +Yoyodyne, Inc., hereby disclaims all copyright interest in + +the library `Frob' (a library for tweaking knobs) written + +by James Random Hacker. + +signature of Ty Coon, 1 April 1990 + +Ty Coon, President of Vice + +That's all there is to it! diff --git a/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.1-only b/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.1-only new file mode 100644 index 000000000..a0e735a98 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.1-only @@ -0,0 +1,176 @@ + +GNU LESSER GENERAL PUBLIC LICENSE + +Version 2.1, February 1999 + +Copyright (C) 1991, 1999 Free Software Foundation, Inc. +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +Everyone is permitted to copy and distribute verbatim copies +of this license document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts + as the successor of the GNU Library Public License, version 2, hence + the version number 2.1.] +Preamble + +The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. + +This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. + +When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. + +To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. + +For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. + +We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. + +To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author`s reputation will not be affected by problems that might be introduced by others. + +Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. + +Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. + +When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. + +We call this license the "Lesser" General Public License because it does Less to protect the user`s freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. + +For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. + +In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. + +Although the Lesser General Public License is Less protective of the users` freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. + +The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". + +A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. + +The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) + +"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. + +Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. + +1. You may copy and distribute verbatim copies of the Library`s complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. + +You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: + +a) The modified work must itself be a software library. +b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. +c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. +d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. +(For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) + +These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. + +In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. + +3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. + +Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. + +This option is useful when you wish to copy part of the code of the Library into a program that is not a library. + +4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. + +If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. + +5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. + +However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. + +When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. + +If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) + +Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. + +6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer`s own use and reverse engineering for debugging such modifications. + +You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: + +a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) +b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user`s computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. +c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. +d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. +e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. +For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. + +It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. + +7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: + +a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. +b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. +8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. + +9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. + +10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients` exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. + +11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. + +This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. + +12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. + +13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. + +14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. + +NO WARRANTY + +15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. + +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Libraries + +If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). + +To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. + +one line to give the library`s name and an idea of what it does. +Copyright (C) year name of author + +This library is free software; you can redistribute it and/or +modify it under the terms of the GNU Lesser General Public +License as published by the Free Software Foundation; either +version 2.1 of the License, or (at your option) any later version. + +This library is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +Lesser General Public License for more details. + +You should have received a copy of the GNU Lesser General Public +License along with this library; if not, write to the Free Software +Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: + +Yoyodyne, Inc., hereby disclaims all copyright interest in +the library `Frob` (a library for tweaking knobs) written +by James Random Hacker. + +signature of Ty Coon, 1 April 1990 +Ty Coon, President of Vice +That`s all there is to it! + diff --git a/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.1-or-later b/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.1-or-later new file mode 100644 index 000000000..04bb156e7 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.1-or-later @@ -0,0 +1,468 @@ +GNU LESSER GENERAL PUBLIC LICENSE + +Version 2.1, February 1999 + +Copyright (C) 1991, 1999 Free Software Foundation, Inc. + +51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +[This is the first released version of the Lesser GPL. It also counts as the +successor of the GNU Library Public License, version 2, hence the version +number 2.1.] + +Preamble + +The licenses for most software are designed to take away your freedom to share +and change it. By contrast, the GNU General Public Licenses are intended to +guarantee your freedom to share and change free software--to make sure the +software is free for all its users. + +This license, the Lesser General Public License, applies to some specially +designated software packages--typically libraries--of the Free Software Foundation +and other authors who decide to use it. You can use it too, but we suggest +you first think carefully about whether this license or the ordinary General +Public License is the better strategy to use in any particular case, based +on the explanations below. + +When we speak of free software, we are referring to freedom of use, not price. +Our General Public Licenses are designed to make sure that you have the freedom +to distribute copies of free software (and charge for this service if you +wish); that you receive source code or can get it if you want it; that you +can change the software and use pieces of it in new free programs; and that +you are informed that you can do these things. + +To protect your rights, we need to make restrictions that forbid distributors +to deny you these rights or to ask you to surrender these rights. These restrictions +translate to certain responsibilities for you if you distribute copies of +the library or if you modify it. + +For example, if you distribute copies of the library, whether gratis or for +a fee, you must give the recipients all the rights that we gave you. You must +make sure that they, too, receive or can get the source code. If you link +other code with the library, you must provide complete object files to the +recipients, so that they can relink them with the library after making changes +to the library and recompiling it. And you must show them these terms so they +know their rights. + +We protect your rights with a two-step method: (1) we copyright the library, +and (2) we offer you this license, which gives you legal permission to copy, +distribute and/or modify the library. + +To protect each distributor, we want to make it very clear that there is no +warranty for the free library. Also, if the library is modified by someone +else and passed on, the recipients should know that what they have is not +the original version, so that the original author's reputation will not be +affected by problems that might be introduced by others. + +Finally, software patents pose a constant threat to the existence of any free +program. We wish to make sure that a company cannot effectively restrict the +users of a free program by obtaining a restrictive license from a patent holder. +Therefore, we insist that any patent license obtained for a version of the +library must be consistent with the full freedom of use specified in this +license. + +Most GNU software, including some libraries, is covered by the ordinary GNU +General Public License. This license, the GNU Lesser General Public License, +applies to certain designated libraries, and is quite different from the ordinary +General Public License. We use this license for certain libraries in order +to permit linking those libraries into non-free programs. + +When a program is linked with a library, whether statically or using a shared +library, the combination of the two is legally speaking a combined work, a +derivative of the original library. The ordinary General Public License therefore +permits such linking only if the entire combination fits its criteria of freedom. +The Lesser General Public License permits more lax criteria for linking other +code with the library. + +We call this license the "Lesser" General Public License because it does Less +to protect the user's freedom than the ordinary General Public License. It +also provides other free software developers Less of an advantage over competing +non-free programs. These disadvantages are the reason we use the ordinary +General Public License for many libraries. However, the Lesser license provides +advantages in certain special circumstances. + +For example, on rare occasions, there may be a special need to encourage the +widest possible use of a certain library, so that it becomes a de-facto standard. +To achieve this, non-free programs must be allowed to use the library. A more +frequent case is that a free library does the same job as widely used non-free +libraries. In this case, there is little to gain by limiting the free library +to free software only, so we use the Lesser General Public License. + +In other cases, permission to use a particular library in non-free programs +enables a greater number of people to use a large body of free software. For +example, permission to use the GNU C Library in non-free programs enables +many more people to use the whole GNU operating system, as well as its variant, +the GNU/Linux operating system. + +Although the Lesser General Public License is Less protective of the users' +freedom, it does ensure that the user of a program that is linked with the +Library has the freedom and the wherewithal to run that program using a modified +version of the Library. + +The precise terms and conditions for copying, distribution and modification +follow. Pay close attention to the difference between a "work based on the +library" and a "work that uses the library". The former contains code derived +from the library, whereas the latter must be combined with the library in +order to run. + +TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + +0. This License Agreement applies to any software library or other program +which contains a notice placed by the copyright holder or other authorized +party saying it may be distributed under the terms of this Lesser General +Public License (also called "this License"). Each licensee is addressed as +"you". + +A "library" means a collection of software functions and/or data prepared +so as to be conveniently linked with application programs (which use some +of those functions and data) to form executables. + +The "Library", below, refers to any such software library or work which has +been distributed under these terms. A "work based on the Library" means either +the Library or any derivative work under copyright law: that is to say, a +work containing the Library or a portion of it, either verbatim or with modifications +and/or translated straightforwardly into another language. (Hereinafter, translation +is included without limitation in the term "modification".) + +"Source code" for a work means the preferred form of the work for making modifications +to it. For a library, complete source code means all the source code for all +modules it contains, plus any associated interface definition files, plus +the scripts used to control compilation and installation of the library. + +Activities other than copying, distribution and modification are not covered +by this License; they are outside its scope. The act of running a program +using the Library is not restricted, and output from such a program is covered +only if its contents constitute a work based on the Library (independent of +the use of the Library in a tool for writing it). Whether that is true depends +on what the Library does and what the program that uses the Library does. + +1. You may copy and distribute verbatim copies of the Library's complete source +code as you receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice and disclaimer +of warranty; keep intact all the notices that refer to this License and to +the absence of any warranty; and distribute a copy of this License along with +the Library. + +You may charge a fee for the physical act of transferring a copy, and you +may at your option offer warranty protection in exchange for a fee. + +2. You may modify your copy or copies of the Library or any portion of it, +thus forming a work based on the Library, and copy and distribute such modifications +or work under the terms of Section 1 above, provided that you also meet all +of these conditions: + + a) The modified work must itself be a software library. + +b) You must cause the files modified to carry prominent notices stating that +you changed the files and the date of any change. + +c) You must cause the whole of the work to be licensed at no charge to all +third parties under the terms of this License. + +d) If a facility in the modified Library refers to a function or a table of +data to be supplied by an application program that uses the facility, other +than as an argument passed when the facility is invoked, then you must make +a good faith effort to ensure that, in the event an application does not supply +such function or table, the facility still operates, and performs whatever +part of its purpose remains meaningful. + +(For example, a function in a library to compute square roots has a purpose +that is entirely well-defined independent of the application. Therefore, Subsection +2d requires that any application-supplied function or table used by this function +must be optional: if the application does not supply it, the square root function +must still compute square roots.) + +These requirements apply to the modified work as a whole. If identifiable +sections of that work are not derived from the Library, and can be reasonably +considered independent and separate works in themselves, then this License, +and its terms, do not apply to those sections when you distribute them as +separate works. But when you distribute the same sections as part of a whole +which is a work based on the Library, the distribution of the whole must be +on the terms of this License, whose permissions for other licensees extend +to the entire whole, and thus to each and every part regardless of who wrote +it. + +Thus, it is not the intent of this section to claim rights or contest your +rights to work written entirely by you; rather, the intent is to exercise +the right to control the distribution of derivative or collective works based +on the Library. + +In addition, mere aggregation of another work not based on the Library with +the Library (or with a work based on the Library) on a volume of a storage +or distribution medium does not bring the other work under the scope of this +License. + +3. You may opt to apply the terms of the ordinary GNU General Public License +instead of this License to a given copy of the Library. To do this, you must +alter all the notices that refer to this License, so that they refer to the +ordinary GNU General Public License, version 2, instead of to this License. +(If a newer version than version 2 of the ordinary GNU General Public License +has appeared, then you can specify that version instead if you wish.) Do not +make any other change in these notices. + +Once this change is made in a given copy, it is irreversible for that copy, +so the ordinary GNU General Public License applies to all subsequent copies +and derivative works made from that copy. + +This option is useful when you wish to copy part of the code of the Library +into a program that is not a library. + +4. You may copy and distribute the Library (or a portion or derivative of +it, under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you accompany it with the complete corresponding +machine-readable source code, which must be distributed under the terms of +Sections 1 and 2 above on a medium customarily used for software interchange. + +If distribution of object code is made by offering access to copy from a designated +place, then offering equivalent access to copy the source code from the same +place satisfies the requirement to distribute the source code, even though +third parties are not compelled to copy the source along with the object code. + +5. A program that contains no derivative of any portion of the Library, but +is designed to work with the Library by being compiled or linked with it, +is called a "work that uses the Library". Such a work, in isolation, is not +a derivative work of the Library, and therefore falls outside the scope of +this License. + +However, linking a "work that uses the Library" with the Library creates an +executable that is a derivative of the Library (because it contains portions +of the Library), rather than a "work that uses the library". The executable +is therefore covered by this License. Section 6 states terms for distribution +of such executables. + +When a "work that uses the Library" uses material from a header file that +is part of the Library, the object code for the work may be a derivative work +of the Library even though the source code is not. Whether this is true is +especially significant if the work can be linked without the Library, or if +the work is itself a library. The threshold for this to be true is not precisely +defined by law. + +If such an object file uses only numerical parameters, data structure layouts +and accessors, and small macros and small inline functions (ten lines or less +in length), then the use of the object file is unrestricted, regardless of +whether it is legally a derivative work. (Executables containing this object +code plus portions of the Library will still fall under Section 6.) + +Otherwise, if the work is a derivative of the Library, you may distribute +the object code for the work under the terms of Section 6. Any executables +containing that work also fall under Section 6, whether or not they are linked +directly with the Library itself. + +6. As an exception to the Sections above, you may also combine or link a "work +that uses the Library" with the Library to produce a work containing portions +of the Library, and distribute that work under terms of your choice, provided +that the terms permit modification of the work for the customer's own use +and reverse engineering for debugging such modifications. + +You must give prominent notice with each copy of the work that the Library +is used in it and that the Library and its use are covered by this License. +You must supply a copy of this License. If the work during execution displays +copyright notices, you must include the copyright notice for the Library among +them, as well as a reference directing the user to the copy of this License. +Also, you must do one of these things: + +a) Accompany the work with the complete corresponding machine-readable source +code for the Library including whatever changes were used in the work (which +must be distributed under Sections 1 and 2 above); and, if the work is an +executable linked with the Library, with the complete machine-readable "work +that uses the Library", as object code and/or source code, so that the user +can modify the Library and then relink to produce a modified executable containing +the modified Library. (It is understood that the user who changes the contents +of definitions files in the Library will not necessarily be able to recompile +the application to use the modified definitions.) + +b) Use a suitable shared library mechanism for linking with the Library. A +suitable mechanism is one that (1) uses at run time a copy of the library +already present on the user's computer system, rather than copying library +functions into the executable, and (2) will operate properly with a modified +version of the library, if the user installs one, as long as the modified +version is interface-compatible with the version that the work was made with. + +c) Accompany the work with a written offer, valid for at least three years, +to give the same user the materials specified in Subsection 6a, above, for +a charge no more than the cost of performing this distribution. + +d) If distribution of the work is made by offering access to copy from a designated +place, offer equivalent access to copy the above specified materials from +the same place. + +e) Verify that the user has already received a copy of these materials or +that you have already sent this user a copy. + +For an executable, the required form of the "work that uses the Library" must +include any data and utility programs needed for reproducing the executable +from it. However, as a special exception, the materials to be distributed +need not include anything that is normally distributed (in either source or +binary form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component itself +accompanies the executable. + +It may happen that this requirement contradicts the license restrictions of +other proprietary libraries that do not normally accompany the operating system. +Such a contradiction means you cannot use both them and the Library together +in an executable that you distribute. + +7. You may place library facilities that are a work based on the Library side-by-side +in a single library together with other library facilities not covered by +this License, and distribute such a combined library, provided that the separate +distribution of the work based on the Library and of the other library facilities +is otherwise permitted, and provided that you do these two things: + +a) Accompany the combined library with a copy of the same work based on the +Library, uncombined with any other library facilities. This must be distributed +under the terms of the Sections above. + +b) Give prominent notice with the combined library of the fact that part of +it is a work based on the Library, and explaining where to find the accompanying +uncombined form of the same work. + +8. You may not copy, modify, sublicense, link with, or distribute the Library +except as expressly provided under this License. Any attempt otherwise to +copy, modify, sublicense, link with, or distribute the Library is void, and +will automatically terminate your rights under this License. However, parties +who have received copies, or rights, from you under this License will not +have their licenses terminated so long as such parties remain in full compliance. + +9. You are not required to accept this License, since you have not signed +it. However, nothing else grants you permission to modify or distribute the +Library or its derivative works. These actions are prohibited by law if you +do not accept this License. Therefore, by modifying or distributing the Library +(or any work based on the Library), you indicate your acceptance of this License +to do so, and all its terms and conditions for copying, distributing or modifying +the Library or works based on it. + +10. Each time you redistribute the Library (or any work based on the Library), +the recipient automatically receives a license from the original licensor +to copy, distribute, link with or modify the Library subject to these terms +and conditions. You may not impose any further restrictions on the recipients' +exercise of the rights granted herein. You are not responsible for enforcing +compliance by third parties with this License. + +11. If, as a consequence of a court judgment or allegation of patent infringement +or for any other reason (not limited to patent issues), conditions are imposed +on you (whether by court order, agreement or otherwise) that contradict the +conditions of this License, they do not excuse you from the conditions of +this License. If you cannot distribute so as to satisfy simultaneously your +obligations under this License and any other pertinent obligations, then as +a consequence you may not distribute the Library at all. For example, if a +patent license would not permit royalty-free redistribution of the Library +by all those who receive copies directly or indirectly through you, then the +only way you could satisfy both it and this License would be to refrain entirely +from distribution of the Library. + +If any portion of this section is held invalid or unenforceable under any +particular circumstance, the balance of the section is intended to apply, +and the section as a whole is intended to apply in other circumstances. + +It is not the purpose of this section to induce you to infringe any patents +or other property right claims or to contest validity of any such claims; +this section has the sole purpose of protecting the integrity of the free +software distribution system which is implemented by public license practices. +Many people have made generous contributions to the wide range of software +distributed through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing to +distribute software through any other system and a licensee cannot impose +that choice. + +This section is intended to make thoroughly clear what is believed to be a +consequence of the rest of this License. + +12. If the distribution and/or use of the Library is restricted in certain +countries either by patents or by copyrighted interfaces, the original copyright +holder who places the Library under this License may add an explicit geographical +distribution limitation excluding those countries, so that distribution is +permitted only in or among countries not thus excluded. In such case, this +License incorporates the limitation as if written in the body of this License. + +13. The Free Software Foundation may publish revised and/or new versions of +the Lesser General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to address +new problems or concerns. + +Each version is given a distinguishing version number. If the Library specifies +a version number of this License which applies to it and "any later version", +you have the option of following the terms and conditions either of that version +or of any later version published by the Free Software Foundation. If the +Library does not specify a license version number, you may choose any version +ever published by the Free Software Foundation. + +14. If you wish to incorporate parts of the Library into other free programs +whose distribution conditions are incompatible with these, write to the author +to ask for permission. For software which is copyrighted by the Free Software +Foundation, write to the Free Software Foundation; we sometimes make exceptions +for this. Our decision will be guided by the two goals of preserving the free +status of all derivatives of our free software and of promoting the sharing +and reuse of software generally. + + NO WARRANTY + +15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR +THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE +STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY +"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, +BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE +OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME +THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + +16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE +THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE +OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA +OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES +OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH +HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. +END OF TERMS AND CONDITIONS + +How to Apply These Terms to Your New Libraries + +If you develop a new library, and you want it to be of the greatest possible +use to the public, we recommend making it free software that everyone can +redistribute and change. You can do so by permitting redistribution under +these terms (or, alternatively, under the terms of the ordinary General Public +License). + +To apply these terms, attach the following notices to the library. It is safest +to attach them to the start of each source file to most effectively convey +the exclusion of warranty; and each file should have at least the "copyright" +line and a pointer to where the full notice is found. + + + +Copyright (C) + +This library is free software; you can redistribute it and/or modify it under +the terms of the GNU Lesser General Public License as published by the Free +Software Foundation; either version 2.1 of the License, or (at your option) +any later version. + +This library is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more +details. + +You should have received a copy of the GNU Lesser General Public License along +with this library; if not, write to the Free Software Foundation, Inc., 51 +Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA + +Also add information on how to contact you by electronic and paper mail. + +You should also get your employer (if you work as a programmer) or your school, +if any, to sign a "copyright disclaimer" for the library, if necessary. Here +is a sample; alter the names: + +Yoyodyne, Inc., hereby disclaims all copyright interest in + +the library `Frob' (a library for tweaking knobs) written + +by James Random Hacker. + +< signature of Ty Coon > , 1 April 1990 + +Ty Coon, President of Vice + +That's all there is to it! diff --git a/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-3.0-only b/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-3.0-only new file mode 100644 index 000000000..6be29bf20 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-3.0-only @@ -0,0 +1,65 @@ +GNU LESSER GENERAL PUBLIC LICENSE + +Version 3, 29 June 2007 + +Copyright © 2007 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. + +This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. +0. Additional Definitions. + +As used herein, “this License” refers to version 3 of the GNU Lesser General Public License, and the “GNU GPL” refers to version 3 of the GNU General Public License. + +“The Library” refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. + +An “Application” is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. + +A “Combined Work” is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the “Linked Version”. + +The “Minimal Corresponding Source” for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. + +The “Corresponding Application Code” for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. +1. Exception to Section 3 of the GNU GPL. + +You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. +2. Conveying Modified Versions. + +If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: + + * a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or + * b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. + +3. Object Code Incorporating Material from Library Header Files. + +The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: + + * a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. + * b) Accompany the object code with a copy of the GNU GPL and this license document. + +4. Combined Works. + +You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: + + * a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. + * b) Accompany the Combined Work with a copy of the GNU GPL and this license document. + * c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. + * d) Do one of the following: + o 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. + o 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. + * e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) + +5. Combined Libraries. + +You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: + + * a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. + * b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. + +6. Revised Versions of the GNU Lesser General Public License. + +The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. + +Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. + +If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. diff --git a/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-3.0-or-later b/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-3.0-or-later new file mode 100644 index 000000000..bd405afbe --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-3.0-or-later @@ -0,0 +1,163 @@ +GNU LESSER GENERAL PUBLIC LICENSE + +Version 3, 29 June 2007 + +Copyright (C) 2007 Free Software Foundation, Inc. + +Everyone is permitted to copy and distribute verbatim copies of this license +document, but changing it is not allowed. + +This version of the GNU Lesser General Public License incorporates the terms +and conditions of version 3 of the GNU General Public License, supplemented +by the additional permissions listed below. + + 0. Additional Definitions. + + + +As used herein, "this License" refers to version 3 of the GNU Lesser General +Public License, and the "GNU GPL" refers to version 3 of the GNU General Public +License. + + + +"The Library" refers to a covered work governed by this License, other than +an Application or a Combined Work as defined below. + + + +An "Application" is any work that makes use of an interface provided by the +Library, but which is not otherwise based on the Library. Defining a subclass +of a class defined by the Library is deemed a mode of using an interface provided +by the Library. + + + +A "Combined Work" is a work produced by combining or linking an Application +with the Library. The particular version of the Library with which the Combined +Work was made is also called the "Linked Version". + + + +The "Minimal Corresponding Source" for a Combined Work means the Corresponding +Source for the Combined Work, excluding any source code for portions of the +Combined Work that, considered in isolation, are based on the Application, +and not on the Linked Version. + + + +The "Corresponding Application Code" for a Combined Work means the object +code and/or source code for the Application, including any data and utility +programs needed for reproducing the Combined Work from the Application, but +excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + +You may convey a covered work under sections 3 and 4 of this License without +being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + +If you modify a copy of the Library, and, in your modifications, a facility +refers to a function or data to be supplied by an Application that uses the +facility (other than as an argument passed when the facility is invoked), +then you may convey a copy of the modified version: + +a) under this License, provided that you make a good faith effort to ensure +that, in the event an Application does not supply the function or data, the +facility still operates, and performs whatever part of its purpose remains +meaningful, or + +b) under the GNU GPL, with none of the additional permissions of this License +applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + +The object code form of an Application may incorporate material from a header +file that is part of the Library. You may convey such object code under terms +of your choice, provided that, if the incorporated material is not limited +to numerical parameters, data structure layouts and accessors, or small macros, +inline functions and templates (ten or fewer lines in length), you do both +of the following: + +a) Give prominent notice with each copy of the object code that the Library +is used in it and that the Library and its use are covered by this License. + +b) Accompany the object code with a copy of the GNU GPL and this license document. + + 4. Combined Works. + +You may convey a Combined Work under terms of your choice that, taken together, +effectively do not restrict modification of the portions of the Library contained +in the Combined Work and reverse engineering for debugging such modifications, +if you also do each of the following: + +a) Give prominent notice with each copy of the Combined Work that the Library +is used in it and that the Library and its use are covered by this License. + +b) Accompany the Combined Work with a copy of the GNU GPL and this license +document. + +c) For a Combined Work that displays copyright notices during execution, include +the copyright notice for the Library among these notices, as well as a reference +directing the user to the copies of the GNU GPL and this license document. + + d) Do one of the following: + +0) Convey the Minimal Corresponding Source under the terms of this License, +and the Corresponding Application Code in a form suitable for, and under terms +that permit, the user to recombine or relink the Application with a modified +version of the Linked Version to produce a modified Combined Work, in the +manner specified by section 6 of the GNU GPL for conveying Corresponding Source. + +1) Use a suitable shared library mechanism for linking with the Library. A +suitable mechanism is one that (a) uses at run time a copy of the Library +already present on the user's computer system, and (b) will operate properly +with a modified version of the Library that is interface-compatible with the +Linked Version. + +e) Provide Installation Information, but only if you would otherwise be required +to provide such information under section 6 of the GNU GPL, and only to the +extent that such information is necessary to install and execute a modified +version of the Combined Work produced by recombining or relinking the Application +with a modified version of the Linked Version. (If you use option 4d0, the +Installation Information must accompany the Minimal Corresponding Source and +Corresponding Application Code. If you use option 4d1, you must provide the +Installation Information in the manner specified by section 6 of the GNU GPL +for conveying Corresponding Source.) + + 5. Combined Libraries. + +You may place library facilities that are a work based on the Library side +by side in a single library together with other library facilities that are +not Applications and are not covered by this License, and convey such a combined +library under terms of your choice, if you do both of the following: + +a) Accompany the combined library with a copy of the same work based on the +Library, uncombined with any other library facilities, conveyed under the +terms of this License. + +b) Give prominent notice with the combined library that part of it is a work +based on the Library, and explaining where to find the accompanying uncombined +form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + +The Free Software Foundation may publish revised and/or new versions of the +GNU Lesser General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to address +new problems or concerns. + +Each version is given a distinguishing version number. If the Library as you +received it specifies that a certain numbered version of the GNU Lesser General +Public License "or any later version" applies to it, you have the option of +following the terms and conditions either of that published version or of +any later version published by the Free Software Foundation. If the Library +as you received it does not specify a version number of the GNU Lesser General +Public License, you may choose any version of the GNU Lesser General Public +License ever published by the Free Software Foundation. + +If the Library as you received it specifies that a proxy can decide whether +future versions of the GNU Lesser General Public License shall apply, that +proxy's public statement of acceptance of any version is permanent authorization +for you to choose that version for the Library. From d313b039647b05a733e2fdfbbbc0d147a8843ee1 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 17 Jun 2022 08:17:52 +0000 Subject: [PATCH 0441/2022] meta-webos-backports-3.4: backport NPL-1.1, IJG and curl licenses :Release Notes: More SPDX licenses were added to common licenses in: https://git.openembedded.org/openembedded-core/commit/?h=honister&id=e2f9092c37395f4e3ee9d0777e28c83cce6007ee we already use NPL-1.1, IJG and curl, backport them. :Detailed Notes: Fixes: do_rootfs: The license listed curl was not in the licenses collected for recipe lib32-acr2 do_rootfs: The license listed NPL-1.1 was not in the licenses collected for recipe lib32-npapi-plugins do_rootfs: The license listed IJG was not in the licenses collected for recipe lib32-mheg :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-6542] CCC: Various build fixes Change-Id: Ic100ccf87baa98b78e0b61493fa4950635c080bc --- .../meta-webos-backports-3.4/conf/layer.conf | 2 + .../meta-webos-backports-3.4/licenses/IJG | 38 ++++ .../meta-webos-backports-3.4/licenses/NPL-1.1 | 186 ++++++++++++++++++ .../meta-webos-backports-3.4/licenses/curl | 10 + 4 files changed, 236 insertions(+) create mode 100644 meta-webos-backports/meta-webos-backports-3.4/licenses/IJG create mode 100644 meta-webos-backports/meta-webos-backports-3.4/licenses/NPL-1.1 create mode 100644 meta-webos-backports/meta-webos-backports-3.4/licenses/curl diff --git a/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf b/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf index 33268fb2c..b3d3a43f4 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf +++ b/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf @@ -17,3 +17,5 @@ LAYERDEPENDS_meta-webos-backports-3.4 = " \ core \ openembedded-layer \ " + +LICENSE_PATH += "${LAYERDIR}/licenses" diff --git a/meta-webos-backports/meta-webos-backports-3.4/licenses/IJG b/meta-webos-backports/meta-webos-backports-3.4/licenses/IJG new file mode 100644 index 000000000..761071caa --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/licenses/IJG @@ -0,0 +1,38 @@ +Independent JPEG Group License + +LEGAL ISSUES + +In plain English: + +1. We don't promise that this software works. (But if you find any bugs, please let us know!) +2. You can use this software for whatever you want. You don't have to pay us. +3. You may not pretend that you wrote this software. If you use it in a program, you must acknowledge somewhere in your documentation that you've used the IJG code. + +In legalese: + +The authors make NO WARRANTY or representation, either express or implied, with respect to this software, its quality, accuracy, merchantability, or fitness for a particular purpose. This software is provided "AS IS", and you, its user, assume the entire risk as to its quality and accuracy. + +This software is copyright (C) 1991-1998, Thomas G. Lane. All Rights Reserved except as specified below. + +Permission is hereby granted to use, copy, modify, and distribute this software (or portions thereof) for any purpose, without fee, subject to these conditions: + + (1) If any part of the source code for this software is distributed, then this README file must be included, with this copyright and no-warranty notice unaltered; and any additions, deletions, or changes to the original files must be clearly indicated in accompanying documentation. + (2) If only executable code is distributed, then the accompanying documentation must state that "this software is based in part on the work of the Independent JPEG Group". + (3) Permission for use of this software is granted only if the user accepts full responsibility for any undesirable consequences; the authors accept NO LIABILITY for damages of any kind. + +These conditions apply to any software derived from or based on the IJG code, not just to the unmodified library. If you use our work, you ought to acknowledge us. + +Permission is NOT granted for the use of any IJG author's name or company name in advertising or publicity relating to this software or products derived from it. This software may be referred to only as "the Independent JPEG Group's software". + +We specifically permit and encourage the use of this software as the basis of commercial products, provided that all warranty or liability claims are assumed by the product vendor. + +ansi2knr.c is included in this distribution by permission of L. Peter Deutsch, sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA. ansi2knr.c is NOT covered by the above copyright and conditions, but instead by the usual distribution terms of the Free Software Foundation; principally, that you must include source code if you redistribute it. (See the file ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part of any program generated from the IJG code, this does not limit you more than the foregoing paragraphs do. + +The Unix configuration script "configure" was produced with GNU Autoconf. It is copyright by the Free Software Foundation but is freely distributable. The same holds for its supporting scripts (config.guess, config.sub, ltconfig, ltmain.sh). Another support script, install-sh, is copyright by M.I.T. but is also freely distributable. + +It appears that the arithmetic coding option of the JPEG spec is covered by patents owned by IBM, AT&T, and Mitsubishi. Hence arithmetic coding cannot legally be used without obtaining one or more licenses. For this reason, support for arithmetic coding has been removed from the free JPEG software. (Since arithmetic coding provides only a marginal gain over the unpatented Huffman mode, it is unlikely that very many implementations will support it.) So far as we are aware, there are no patent restrictions on the remaining code. + +The IJG distribution formerly included code to read and write GIF files. To avoid entanglement with the Unisys LZW patent, GIF reading support has been removed altogether, and the GIF writer has been simplified to produce "uncompressed GIFs". This technique does not use the LZW algorithm; the resulting GIF files are larger than usual, but are readable by all standard GIF decoders. + +We are required to state that + "The Graphics Interchange Format(c) is the Copyright property of CompuServe Incorporated. GIF(sm) is a Service Mark property of CompuServe Incorporated." diff --git a/meta-webos-backports/meta-webos-backports-3.4/licenses/NPL-1.1 b/meta-webos-backports/meta-webos-backports-3.4/licenses/NPL-1.1 new file mode 100644 index 000000000..62c529640 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/licenses/NPL-1.1 @@ -0,0 +1,186 @@ +Netscape Public LIcense version 1.1 + +AMENDMENTS + +The Netscape Public License Version 1.1 ("NPL") consists of the Mozilla Public License Version 1.1 with the following Amendments, including Exhibit A-Netscape Public License.  Files identified with "Exhibit A-Netscape Public License" are governed by the Netscape Public License Version 1.1. + +Additional Terms applicable to the Netscape Public License. + + I. Effect. + These additional terms described in this Netscape Public License -- Amendments shall apply to the Mozilla Communicator client code and to all Covered Code under this License. + + II. "Netscape's Branded Code" means Covered Code that Netscape distributes and/or permits others to distribute under one or more trademark(s) which are controlled by Netscape but which are not licensed for use under this License. + III. Netscape and logo. + This License does not grant any rights to use the trademarks "Netscape", the "Netscape N and horizon" logo or the "Netscape lighthouse" logo, "Netcenter", "Gecko", "Java" or "JavaScript", "Smart Browsing" even if such marks are included in the Original Code or Modifications. + IV. Inability to Comply Due to Contractual Obligation. + Prior to licensing the Original Code under this License, Netscape has licensed third party code for use in Netscape's Branded Code. To the extent that Netscape is limited contractually from making such third party code available under this License, Netscape may choose to reintegrate such code into Covered Code without being required to distribute such code in Source Code form, even if such code would otherwise be considered "Modifications" under this License. + V. Use of Modifications and Covered Code by Initial Developer. + V.1. In General. + The obligations of Section 3 apply to Netscape, except to the extent specified in this Amendment, Section V.2 and V.3. + + V.2. Other Products. + Netscape may include Covered Code in products other than the Netscape's Branded Code which are released by Netscape during the two (2) years following the release date of the Original Code, without such additional products becoming subject to the terms of this License, and may license such additional products on different terms from those contained in this License. + + V.3. Alternative Licensing. + Netscape may license the Source Code of Netscape's Branded Code, including Modifications incorporated therein, without such Netscape Branded Code becoming subject to the terms of this License, and may license such Netscape Branded Code on different terms from those contained in this License. + + VI. Litigation. + Notwithstanding the limitations of Section 11 above, the provisions regarding litigation in Section 11(a), (b) and (c) of the License shall apply to all disputes relating to this License. + + EXHIBIT A-Netscape Public License. +   +"The contents of this file are subject to the Netscape Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/NPL/ + +Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. + +The Original Code is Mozilla Communicator client code, released March 31, 1998. + +The Initial Developer of the Original Code is Netscape Communications Corporation. Portions created by Netscape are Copyright (C) 1998-1999 Netscape Communications Corporation. All Rights Reserved. +Contributor(s): ______________________________________. +   +Alternatively, the contents of this file may be used under the terms of the _____ license (the  "[___] License"), in which case the provisions of [______] License are applicable  instead of those above.  If you wish to allow use of your version of this file only under the terms of the [____] License and not to allow others to use your version of this file under the NPL, indicate your decision by deleting  the provisions above and replace  them with the notice and other provisions required by the [___] License.  If you do not delete the provisions above, a recipient may use your version of this file under either the NPL or the [___] License." + + +Mozilla Public License Version 1.1 + +1. Definitions. + + 1.0.1. "Commercial Use" means distribution or otherwise making the Covered Code available to a third party. + + 1.1. "Contributor" means each entity that creates or contributes to the creation of Modifications. + + 1.2. "Contributor Version" means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor. + + 1.3. "Covered Code" means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof. + + 1.4. "Electronic Distribution Mechanism" means a mechanism generally accepted in the software development community for the electronic transfer of data. + + 1.5. "Executable" means Covered Code in any form other than Source Code. + + 1.6. "Initial Developer" means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A. + + 1.7. "Larger Work" means a work which combines Covered Code or portions thereof with code not governed by the terms of this License. + + 1.8. "License" means this document. + + 1.8.1. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. + + 1.9. "Modifications" means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is: +Any addition to or deletion from the contents of a file containing Original Code or previous Modifications. +Any new file that contains any part of the Original Code or previous Modifications. + + 1.10. "Original Code" means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License. + + 1.10.1. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. + + 1.11. "Source Code" means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge. + + 1.12. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. + +2. Source Code License. + + 2.1. The Initial Developer Grant. The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims: + + a. under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and + b. under Patents Claims infringed by the making, using or selling of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code (or portions thereof). + c. the licenses granted in this Section 2.1 (a) and (b) are effective on the date Initial Developer first distributes Original Code under the terms of this License. + d. Notwithstanding Section 2.1 (b) above, no patent license is granted: 1) for code that You delete from the Original Code; 2) separate from the Original Code; or 3) for infringements caused by: i) the modification of the Original Code or ii) the combination of the Original Code with other software or devices. + + 2.2. Contributor Grant. Subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license + + a. under intellectual property rights (other than patent or trademark) Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger Work; and + b. under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor (or portions thereof); and 2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). + c. the licenses granted in Sections 2.2 (a) and 2.2 (b) are effective on the date Contributor first makes Commercial Use of the Covered Code. + d. Notwithstanding Section 2.2 (b) above, no patent license is granted: 1) for any code that Contributor has deleted from the Contributor Version; 2) separate from the Contributor Version; 3) for infringements caused by: i) third party modifications of Contributor Version or ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code in the absence of Modifications made by that Contributor. + +3. Distribution Obligations. + + 3.1. Application of License. The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5. + + 3.2. Availability of Source Code. Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party. + + 3.3. Description of Modifications. You must cause all Covered Code to which You contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code. + + 3.4. Intellectual Property Matters + + (a) Third Party Claims + If Contributor has knowledge that a license under a third party's intellectual property rights is required to exercise the rights granted by such Contributor under Sections 2.1 or 2.2, Contributor must include a text file with the Source Code distribution titled "LEGAL" which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If Contributor obtains such knowledge after the Modification is made available as described in Section 3.2, Contributor shall promptly modify the LEGAL file in all copies Contributor makes available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained. + + (b) Contributor APIs + If Contributor's Modifications include an application programming interface and Contributor has knowledge of patent licenses which are reasonably necessary to implement that API, Contributor must also include this information in the LEGAL file. + + (c) Representations. + Contributor represents that, except as disclosed pursuant to Section 3.4 (a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License. + + 3.5. Required Notices. You must duplicate the notice in Exhibit A in each file of the Source Code. If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice. If You created one or more Modification(s) You may add your name as a Contributor to the notice described in Exhibit A. You must also duplicate this License in any documentation for the Source Code where You describe recipients' rights or ownership rights relating to Covered Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. + + 3.6. Distribution of Executable Versions. You may distribute Covered Code in Executable form only if the requirements of Sections 3.1, 3.2, 3.3, 3.4 and 3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. + + 3.7. Larger Works. You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code. + +4. Inability to Comply Due to Statute or Regulation. + +If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. + +5. Application of this License. +This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Covered Code. + +6. Versions of the License. + + 6.1. New Versions + Netscape Communications Corporation ("Netscape") may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number. + + 6.2. Effect of New Versions + Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Netscape. No one other than Netscape has the right to modify the terms applicable to Covered Code created under this License. + + 6.3. Derivative Works + If You create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), You must (a) rename Your license so that the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", "MPL", "NPL" or any confusingly similar phrase do not appear in your license (except to note that your license differs from this License) and (b) otherwise make it clear that Your version of the license contains terms which differ from the Mozilla Public License and Netscape Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.) + +7. DISCLAIMER OF WARRANTY +COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. + +8. Termination + + 8.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. + + 8.2. If You initiate litigation by asserting a patent infringement claim (excluding declatory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You file such action is referred to as "Participant") alleging that: + + a. such Participant's Contributor Version directly or indirectly infringes any patent, then any and all rights granted by such Participant to You under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively, unless if within 60 days after receipt of notice You either: (i) agree in writing to pay Participant a mutually agreeable reasonable royalty for Your past and future use of Modifications made by such Participant, or (ii) withdraw Your litigation claim with respect to the Contributor Version against such Participant. If within 60 days of notice, a reasonable royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not withdrawn, the rights granted by Participant to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration of the 60 day notice period specified above. + b. any software, hardware, or device, other than such Participant's Contributor Version, directly or indirectly infringes any patent, then any rights granted to You by such Participant under Sections 2.1(b) and 2.2(b) are revoked effective as of the date You first made, used, sold, distributed, or had made, Modifications made by that Participant. + + 8.3. If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license. + + 8.4. In the event of termination under Sections 8.1 or 8.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination. + +9. LIMITATION OF LIABILITY +UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. + +10. U.S. government end users +The Covered Code is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein. + +11. Miscellaneous +This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in the United States of America, any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. + +12. Responsibility for claims +As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. + +13. Multiple-licensed code +Initial Developer may designate portions of the Covered Code as "Multiple-Licensed". "Multiple-Licensed" means that the Initial Developer permits you to utilize portions of the Covered Code under Your choice of the MPL or the alternative licenses, if any, specified by the Initial Developer in the file described in Exhibit A. + +Exhibit A - Mozilla Public License. + +"The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ + +Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. + +The Original Code is ______________________________________. + +The Initial Developer of the Original Code is ________________________. +Portions created by ______________________ are Copyright (C) ______ +_______________________. All Rights Reserved. + +Contributor(s): ______________________________________. + +Alternatively, the contents of this file may be used under the terms of the _____ license (the "[___] License"), in which case the provisions of [______] License are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the [____] License and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the [___] License. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the [___] License." + +NOTE: The text of this Exhibit A may differ slightly from the text of the notices in the Source Code files of the Original Code. You should use the text of this Exhibit A rather than the text found in the Original Code Source Code for Your Modifications. diff --git a/meta-webos-backports/meta-webos-backports-3.4/licenses/curl b/meta-webos-backports/meta-webos-backports-3.4/licenses/curl new file mode 100644 index 000000000..dd333ab2e --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/licenses/curl @@ -0,0 +1,10 @@ +COPYRIGHT AND PERMISSION NOTICE + +Copyright (c) 1996 - 2015, Daniel Stenberg, . +All rights reserved. + +Permission to use, copy, modify, and 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. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. From 7200a5ad3e57d928b8a99ac588f29d8fa53f5bcd Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 14 Jun 2022 07:38:58 +0000 Subject: [PATCH 0442/2022] meta-webos: declare dependency on meta-webos-backports-* layers :Release Notes: Add explicit dependency to make sure all layers are included in bblayers.conf with reasonable error message when some are missing. :Detailed Notes: People not using mcf might not realize which layers meta-webos expects to be enabled and is tested against. :Testing Performed: Only build tested. :QA Notes: No change to image. :Build Notes: This depends on: http://gpro.lge.com/c/webos/build-webos/+/331296 weboslayers.py: add layer with backports from Yocto 3.3 Hardknott http://gpro.lge.com/c/webos-pro/build-webos-pro/+/331297 weboslayers.py: add layer with backports from Yocto 3.3 Hardknott :Issues Addressed: [WRO-6542] CCC: Various build fixes Change-Id: I103a00a938a458864b4edcd13a89501c476ba511 --- meta-webos/conf/layer.conf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/meta-webos/conf/layer.conf b/meta-webos/conf/layer.conf index efb18e44a..e7cdf17cc 100644 --- a/meta-webos/conf/layer.conf +++ b/meta-webos/conf/layer.conf @@ -20,6 +20,10 @@ LAYERDEPENDS_meta-webos = " \ networking-layer \ multimedia-layer \ meta-python \ + meta-webos-backports-3.2 \ + meta-webos-backports-3.3 \ + meta-webos-backports-3.4 \ + meta-webos-backports-4.0 \ " # Prepend scripts to WEBOS_EXTRA_PATH From 1dc13b18637706fe239c548f33df5fc9cb24ecc1 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 14 Jun 2022 07:27:29 +0000 Subject: [PATCH 0443/2022] gst*: set PREFERRED_VERSION and use 1.16 from oe-core instead of 1.18 from meta-webos-backports-3.3 :Release Notes: Now with meta-webos-backports-3.3 layer included in webos builds it would build 1.18 by default, but e.g. g-media-pipeline fails to build and needs to be updated by multimedia team first. :Detailed Notes: g-media-pipeline: http://gecko.lge.com:8000/Errors/Details/419151 g-media-pipeline/1.0.0-21.gav.28-r10/git/src/player/BufferPlayer.cpp:269:19: error: 'gst_pipeline_get_base_time' was not declared in this scope; did you mean 'gst_element_get_base_time'? 269 | newBaseTime = gst_pipeline_get_base_time ((GstPipeline *) pipeline_, /*start-time*/0); | ^~~~~~~~~~~~~~~~~~~~~~~~~~ | gst_element_get_base_time gstreamer1.0-plugins-good (with meta-qt5): http://gecko.lge.com:8000/Errors/Details/419164 meson: error: unrecognized arguments: --disable-qt gstreamer1.0-plugins-bad (with meta-gplv2): http://gecko.lge.com:8000/Errors/Details/419163 ext/hls/meson.build:48:4: ERROR: Problem encountered: HLS plugin enabled with crypto, but crypto library "nettle" not found :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-6542] CCC: Various build fixes Change-Id: I36f9dbc1f3d88a5b7f45cbf9236406df0fd86eaa --- .../distro/include/webos-preferred-versions.inc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/meta-webos/conf/distro/include/webos-preferred-versions.inc b/meta-webos/conf/distro/include/webos-preferred-versions.inc index c94c50a45..c2ddd5d5f 100644 --- a/meta-webos/conf/distro/include/webos-preferred-versions.inc +++ b/meta-webos/conf/distro/include/webos-preferred-versions.inc @@ -5,3 +5,20 @@ PREFERRED_VERSION_mksnapshot-cross-${TARGET_ARCH} = "91.%" GOVERSION = "1.16.%" PREFERRED_VERSION_pulseaudio = "15.0-%" +# Prefer gstreamer version 1.16.% for webos (instead of 1.18 from meta-webos-backports-3.3) +GSTREAMER_VERSION = "1.16.%" + +PREFERRED_VERSION_gstreamer1.0 = "${GSTREAMER_VERSION}" +PREFERRED_VERSION_gstreamer1.0-plugins-bad = "${GSTREAMER_VERSION}" +PREFERRED_VERSION_gstreamer1.0-plugins-base = "${GSTREAMER_VERSION}" +PREFERRED_VERSION_gstreamer1.0-plugins-cool = "${GSTREAMER_VERSION}" +PREFERRED_VERSION_gstreamer1.0-plugins-good = "${GSTREAMER_VERSION}" +PREFERRED_VERSION_gstreamer1.0-plugins-ugly = "${GSTREAMER_VERSION}" +PREFERRED_VERSION_gstreamer1.0-libav = "${GSTREAMER_VERSION}" +PREFERRED_VERSION_gstreamer1.0-omx = "${GSTREAMER_VERSION}" +PREFERRED_VERSION_gstreamer1.0-python = "${GSTREAMER_VERSION}" +PREFERRED_VERSION_gstreamer1.0-rtsp-server = "${GSTREAMER_VERSION}" +PREFERRED_VERSION_gstreamer1.0-vaapi = "${GSTREAMER_VERSION}" +PREFERRED_VERSION_gst-devtools = "${GSTREAMER_VERSION}" +PREFERRED_VERSION_gst-examples = "${GSTREAMER_VERSION}" +PREFERRED_VERSION_gst-validate1.0 = "${GSTREAMER_VERSION}" From 4ec8d8c18e6e270379b9060ef6a4cda55d3b9642 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 16 Jun 2022 09:00:37 +0000 Subject: [PATCH 0444/2022] qtgraphicaleeffects: fix comment :Release Notes: :Detailed Notes: Intentionally not bumping PR. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-6542] CCC: Various build fixes Change-Id: I255f1b0b6ea63083ee58fb66e2e51c2cf18d8851 --- meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb b/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb index 0caa646b2..afa22179f 100644 --- a/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb +++ b/meta-webos/recipes-qt/qt6/qtgraphicaleffects_6.2.0.bb @@ -1,4 +1,10 @@ -# copied from meta-qt6, which is removed from meta-qt6 +# copied from meta-qt6, before it was removed from meta-qt6 in: +# https://codereview.qt-project.org/gitweb?p=yocto/meta-qt6.git;a=commit;h=29999c4ffbe83ee3c850b4e3a2fddd132c7ec826 +# +# QtGraphicalEffects has been moved to be part of qt5compat +# module for compatibility with Qt 5 code. This can be accessed +# by importing "Qt5Compat.GraphicalEffects +# LICENSE = "GFDL-1.3 & BSD-3-Clause & ( GPL-3.0-only & The-Qt-Company-GPL-Exception-1.0 ) | The-Qt-Company-Commercial" LIC_FILES_CHKSUM = " \ file://LICENSE.BSD;md5=b2609ece79465e2b9eb9b94e80b03e5e \ From 3617a293afb869a800dbb9bb2f17a3e10f6c1616 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 16 Jun 2022 12:22:26 +0000 Subject: [PATCH 0445/2022] webos_preferred_gfx_image_format.bbclass: change the warning into fatal error :Release Notes: It's easy to disable with WEBOS_PREFERRED_GFX_IMAGE_FORMAT_ENABLED so this should be triggered only when something is really wrong. :Detailed Notes: I've noticed this in kirkstone builds which trigger: WARNING: com.webos.app.camera-0.0.1-8-r0 do_convert_webos_preferred_gfx_image_format: Could not find com.webos.app.camera:appinfo.json, no conversion will be performed But the issue is actually caused by broken enact (old webpack not compatible with openssl-3): grep Error: BUILD/work/qemux86_64-webos-linux/com.webos.app.camera/0.0.1-8-r0/temp/log.do_install Error: error:0308010C:digital envelope routines::unsupported Error: error:0308010C:digital envelope routines::unsupported Error: error:0308010C:digital envelope routines::unsupported Error: error:0308010C:digital envelope routines::unsupported 10% building 1/2 modules src/index.js Error: error:0308010C:digital envelope routines::unsupported at new Hash (node:internal/crypto/hash:67:19) at Object.createHash (node:crypto:130:10) at module.exports (/OE/lge/build/webos/kirkstone/BUILD/work/qemux86_64-webos-linux/com.webos.app.camera/0.0.1-8-r0/recipe-sysroot-native/opt/cli-legacy/node_modules/webpack/lib/util/createHash.js:135:53) at NormalModule._initBuildHash (/OE/lge/build/webos/kirkstone/BUILD/work/qemux86_64-webos-linux/com.webos.app.camera/0.0.1-8-r0/recipe-sysroot-native/opt/cli-legacy/node_modules/webpack/lib/NormalModule.js:417:16) at /OE/lge/build/webos/kirkstone/BUILD/work/qemux86_64-webos-linux/com.webos.app.camera/0.0.1-8-r0/recipe-sysroot-native/opt/cli-legacy/node_modules/webpack/lib/NormalModule.js:452:10 at /OE/lge/build/webos/kirkstone/BUILD/work/qemux86_64-webos-linux/com.webos.app.camera/0.0.1-8-r0/recipe-sysroot-native/opt/cli-legacy/node_modules/webpack/lib/NormalModule.js:323:13 at /OE/lge/build/webos/kirkstone/BUILD/work/qemux86_64-webos-linux/com.webos.app.camera/0.0.1-8-r0/recipe-sysroot-native/opt/cli-legacy/node_modules/loader-runner/lib/LoaderRunner.js:367:11 at /OE/lge/build/webos/kirkstone/BUILD/work/qemux86_64-webos-linux/com.webos.app.camera/0.0.1-8-r0/recipe-sysroot-native/opt/cli-legacy/node_modules/loader-runner/lib/LoaderRunner.js:233:18 at context.callback (/OE/lge/build/webos/kirkstone/BUILD/work/qemux86_64-webos-linux/com.webos.app.camera/0.0.1-8-r0/recipe-sysroot-native/opt/cli-legacy/node_modules/loader-runner/lib/LoaderRunner.js:111:13) at /OE/lge/build/webos/kirkstone/BUILD/work/qemux86_64-webos-linux/com.webos.app.camera/0.0.1-8-r0/recipe-sysroot-native/opt/cli-legacy/node_modules/eslint-loader/dist/cacheLoader.js:48:12 :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-6542] CCC: Various build fixes Change-Id: Iced4e13bb767c66fa19f8f3e91b6b99f41a5c54f --- meta-webos/classes/webos_preferred_gfx_image_format.bbclass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/classes/webos_preferred_gfx_image_format.bbclass b/meta-webos/classes/webos_preferred_gfx_image_format.bbclass index 3c2a04a00..5079ff97a 100644 --- a/meta-webos/classes/webos_preferred_gfx_image_format.bbclass +++ b/meta-webos/classes/webos_preferred_gfx_image_format.bbclass @@ -102,7 +102,7 @@ fakeroot python do_convert_webos_preferred_gfx_image_format () { app_info_dir = webos_preferred_gfx_image_format_find_app_info_dir(d, d.getVar('D', True)) if not app_info_dir: - bb.warn("Could not find %s:appinfo.json, no conversion will be performed" % pn) + bb.fatal("Could not find %s:appinfo.json, no conversion will be performed" % pn) return for app_info in app_info_dir: From d333fec00fb0bc57d38375ddcda269780837ce79 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 13 Jun 2022 13:01:44 +0000 Subject: [PATCH 0446/2022] pulseaudio: Use meta-webos-backports-4.0 and shorter bbappend :Release Notes: Most of the files were imported as-is from newer oe-core, only the recipe itself had some modification which are easy to implement in a .bbappend. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-5141] Pulseaudio v15.0 BT A2DP profile bug fix [WRO-3444] Implement pulseaudio 15.0 changes and meta changes [WRO-6542] CCC: Various build fixes Change-Id: Ib67301b05c159100333d2aa4bc4bd50acbf27343 --- .../pulseaudio/pulseaudio.inc | 32 ++++++++--------- ...nt-conf-Add-allow-autospawn-for-root.patch | 15 ++++---- ...ild-remove-dependency-on-doxygen-bin.patch | 2 +- .../0001-meson-Check-for-__get_cpuid.patch | 17 +++++----- ...LFAGS-to-improve-reproducibility-bui.patch | 9 ++--- .../pulseaudio/pulseaudio/volatiles.04_pulse | 2 ++ .../pulseaudio/pulseaudio_15.0.bb | 11 ++++++ ...audio_15.0.bb => pulseaudio_15.0.bbappend} | 34 +++++++++---------- 8 files changed, 66 insertions(+), 56 deletions(-) rename meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.inc => meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio.inc (93%) rename {meta-webos => meta-webos-backports/meta-webos-backports-4.0}/recipes-multimedia/pulseaudio/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch (99%) rename {meta-webos => meta-webos-backports/meta-webos-backports-4.0}/recipes-multimedia/pulseaudio/pulseaudio/0001-doxygen-meson.build-remove-dependency-on-doxygen-bin.patch (99%) rename {meta-webos => meta-webos-backports/meta-webos-backports-4.0}/recipes-multimedia/pulseaudio/pulseaudio/0001-meson-Check-for-__get_cpuid.patch (98%) rename {meta-webos => meta-webos-backports/meta-webos-backports-4.0}/recipes-multimedia/pulseaudio/pulseaudio/0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch (98%) create mode 100644 meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio/volatiles.04_pulse create mode 100644 meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio_15.0.bb rename meta-webos/recipes-multimedia/pulseaudio/{pulseaudio_15.0.bb => pulseaudio_15.0.bbappend} (79%) diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.inc b/meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio.inc similarity index 93% rename from meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.inc rename to meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio.inc index c4d16dc2f..821ce7d1d 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.inc +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio.inc @@ -5,7 +5,8 @@ HOMEPAGE = "http://www.pulseaudio.org" AUTHOR = "Lennart Poettering" SECTION = "libs/multimedia" -# Most of PulseAudio code is under LGPLv2.1+. There are a few exceptions: +# Most of PulseAudio code is under LGPL-2.1-or-later. There are a few +# exceptions: # # The "adrian" echo canceller variant has code under a non-standard permissive # license. See src/modules/echo-cancel/adrian-license.txt for details. This @@ -39,11 +40,12 @@ SECTION = "libs/multimedia" # The dependency with the most complicated licensing considerations is libdbus. # When PACKAGECONFIG[dbus] is enabled (like it is by default), libdbus will be # used by both the server and the client library (libpulse). Does this affect -# applications that use libpulse? It should be also noted that libdbus is -# dual-licensed: either GPLv2+ or AFL-2 terms apply. Whose decision is it which -# of the licenses apply? What a mess. Some people hold the view that libdbus is -# a system library that is covered by the "special exception" in GPLv2's -# section 3, and therefore libdbus's GPL license doesn't affect PulseAudio. +# applications that use libpulse? It should also be noted that libdbus is +# dual-licensed: either GPL-2.0-or-later or AFL-2.0 terms apply. Whose decision +# is it which of the licenses apply? What a mess. Some people hold the view that +# libdbus is a system library that is covered by the "special exception" in +# GPLv2's section 3, and therefore libdbus's GPL license doesn't affect +# PulseAudio. LICENSE = "LGPL-2.1-or-later & MIT & BSD-3-Clause" LIC_FILES_CHKSUM = "file://LICENSE;md5=0e5cd938de1a7a53ea5adac38cc10c39 \ @@ -105,9 +107,7 @@ PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez5' ${@bb.utils.contains('DISTRO_FEATURES', '3g', 'ofono', '', d)} \ ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6 systemd x11', d)} \ dbus gsettings \ - palm-resampler \ - rpi \ -" + " PACKAGECONFIG[dbus] = "-Ddbus=enabled,-Ddbus=disabled,dbus" PACKAGECONFIG[bluez5] = "-Dbluez5=enabled,-Dbluez5=disabled,bluez5 sbc" @@ -125,8 +125,7 @@ PACKAGECONFIG[lirc] = "-Dlirc=enabled,-Dlirc=disabled,lirc" PACKAGECONFIG[webrtc] = "-Dwebrtc-aec=enabled,-Dwebrtc-aec=disabled,webrtc-audio-processing" PACKAGECONFIG[ipv6] = "-Dipv6=true,-Dipv6=false," PACKAGECONFIG[manpages] = "-Dman=true,-Dman=false," -PACKAGECONFIG[palm-resampler] = "-Dpalm-resampler=true,-Dpalm-resampler=false," -PACKAGECONFIG[rpi] = "-Drpi=true,-Drpi=false," + export TARGET_PFPU = "${TARGET_FPU}" set_cfg_value () { @@ -185,7 +184,7 @@ FILES:libpulse = "${libdir}/libpulse.so.* ${sysconfdir}/pulse/client.conf" FILES:libpulse-simple = "${libdir}/libpulse-simple.so.*" FILES:libpulse-mainloop-glib = "${libdir}/libpulse-mainloop-glib.so.*" -FILES:${PN}-dev += "${libdir}/pulse-15.0/modules/*.la ${datadir}/vala" +FILES:${PN}-dev += "${libdir}/pulse-${PV}/modules/*.la ${datadir}/vala" FILES:${PN}-bin += "${sysconfdir}/default/volatiles/04_pulse" FILES:${PN}-pa-info = "${bindir}/pa-info" FILES:${PN}-server = "${bindir}/pulseaudio ${bindir}/start-* ${sysconfdir} ${bindir}/pactl */udev/rules.d/*.rules */*/udev/rules.d/*.rules ${systemd_user_unitdir}/*" @@ -201,7 +200,7 @@ ALLOW_EMPTY:${PN} = "1" CONFFILES:libpulse = "${sysconfdir}/pulse/client.conf" -CONFFILES:pulseaudio-server = "\ +CONFFILES:pulseaudio-server = "\ ${sysconfdir}/pulse/default.pa \ ${sysconfdir}/pulse/daemon.conf \ ${sysconfdir}/pulse/system.pa \ @@ -214,7 +213,7 @@ pkg_postinst:${PN}-server() { } python populate_packages:prepend() { - plugindir = d.expand('${libdir}/pulse-15.0/modules/') + plugindir = d.expand('${libdir}/pulse-${PV}/modules/') do_split_packages(d, plugindir, r'^module-(.*)\.so$', '${PN}-module-%s', 'PulseAudio module for %s', extra_depends='', prepend=True) do_split_packages(d, plugindir, r'^lib(.*)\.so$', '${PN}-lib-%s', 'PulseAudio library for %s', extra_depends='', prepend=True) } @@ -250,13 +249,12 @@ RDEPENDS:pulseaudio-server = " \ pulseaudio-module-suspend-on-idle \ pulseaudio-module-position-event-sounds \ pulseaudio-module-role-cork \ - pulseaudio-module-palm-policy \ pulseaudio-module-switch-on-port-available" # If the server is installed, it's usually desirable to make ALSA applications # use PulseAudio. alsa-plugins-pulseaudio-conf will install the configuration # that makes the PulseAudio plugin the default ALSA device. -RDEPENDS:pulseaudio-server += "alsa-plugins-pulseaudio-conf" +RDEPENDS:pulseaudio-server += "${@bb.utils.contains('DISTRO_FEATURES', 'pulseaudio', 'alsa-plugins-pulseaudio-conf', '', d)}" # pulseaudio-module-console-kit is built whenever dbus is enabled by PACKAGECONFIG # but consolekit depends on libx11 and is available only for DISTRO with x11 in DISTRO_FEATURES @@ -268,7 +266,6 @@ FILES:${PN}-module-alsa-card += "${datadir}/pulseaudio/alsa-mixer" GSETTINGS_PACKAGE = "${@bb.utils.contains('PACKAGECONFIG', 'gsettings', '${PN}-module-gsettings', '', d)}" FILES:${PN}-module-gsettings += "${libexecdir}/pulse/gsettings-helper ${datadir}/GConf/gsettings ${datadir}/glib-2.0/schemas" - # The console-kit module is good to have on X11 systems (it keeps PulseAudio # running for the duration of the user login session). The device-manager and # x11-* modules are referenced from the start-pulseaudio-x11 script, so those @@ -284,4 +281,3 @@ RDEPENDS:pulseaudio-server += "\ RDEPENDS:pulseaudio-server += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', \ bb.utils.contains('DISTRO_FEATURES', 'systemd', 'pulseaudio-module-systemd-login', 'pulseaudio-module-console-kit', d), \ '', d)}" - diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch b/meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch similarity index 99% rename from meta-webos/recipes-multimedia/pulseaudio/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch rename to meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch index 3bdbab0a1..33f7709ae 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio/0001-client-conf-Add-allow-autospawn-for-root.patch @@ -29,7 +29,7 @@ index b88898c..e737c96 100644 +++ b/man/pulse-client.conf.5.xml.in @@ -82,6 +82,15 @@ License along with PulseAudio; if not, see . - +

allow-autospawn-for-root= Allow autospawning also for root. + Takes a boolean value, defaults to no. If the autospawn @@ -66,31 +66,32 @@ index 7691ec7..19db7ed 100644 + bool allow_autospawn_for_root; size_t shm_size; } pa_client_conf; - + diff --git a/src/pulse/client.conf.in b/src/pulse/client.conf.in index 26b7790..69830ef 100644 --- a/src/pulse/client.conf.in +++ b/src/pulse/client.conf.in @@ -23,6 +23,7 @@ ; default-dbus-server = - + ; autospawn = yes +; allow-autospawn-for-root = no ; daemon-binary = @PA_BINARY@ ; extra-arguments = --log-target=syslog - + diff --git a/src/pulse/context.c b/src/pulse/context.c index 69be5f4..d6e13e8 100644 --- a/src/pulse/context.c +++ b/src/pulse/context.c @@ -1027,7 +1027,7 @@ int pa_context_connect( if (!(flags & PA_CONTEXT_NOAUTOSPAWN) && c->conf->autospawn) { - + #ifdef HAVE_GETUID - if (getuid() == 0) + if (!c->conf->allow_autospawn_for_root && getuid() == 0) pa_log_debug("Not doing autospawn since we are root."); else { c->do_autospawn = true; --- -2.8.1 \ No newline at end of file +-- +2.8.1 + diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio/0001-doxygen-meson.build-remove-dependency-on-doxygen-bin.patch b/meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio/0001-doxygen-meson.build-remove-dependency-on-doxygen-bin.patch similarity index 99% rename from meta-webos/recipes-multimedia/pulseaudio/pulseaudio/0001-doxygen-meson.build-remove-dependency-on-doxygen-bin.patch rename to meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio/0001-doxygen-meson.build-remove-dependency-on-doxygen-bin.patch index 85cd4b83a..b1a43bd7f 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio/0001-doxygen-meson.build-remove-dependency-on-doxygen-bin.patch +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio/0001-doxygen-meson.build-remove-dependency-on-doxygen-bin.patch @@ -21,6 +21,6 @@ index afc0e49..df55c83 100644 @@ -6,5 +6,3 @@ doxygen_conf = configure_file( configuration : cdata, ) - + -run_target('doxygen', - command : ['doxygen', doxygen_conf]) diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio/0001-meson-Check-for-__get_cpuid.patch b/meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio/0001-meson-Check-for-__get_cpuid.patch similarity index 98% rename from meta-webos/recipes-multimedia/pulseaudio/pulseaudio/0001-meson-Check-for-__get_cpuid.patch rename to meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio/0001-meson-Check-for-__get_cpuid.patch index 4d0377db4..c9d8abcbf 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio/0001-meson-Check-for-__get_cpuid.patch +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio/0001-meson-Check-for-__get_cpuid.patch @@ -43,13 +43,13 @@ index 2589627..5f5127e 100644 @@ -243,6 +242,10 @@ if cc.has_header_symbol('pthread.h', 'PTHREAD_PRIO_INHERIT') cdata.set('HAVE_PTHREAD_PRIO_INHERIT', 1) endif - + +if cc.has_header_symbol('cpuid.h', '__get_cpuid') + cdata.set('HAVE_GET_CPUID', 1) +endif + # Functions - + check_functions = [ diff --git a/src/pulsecore/core-util.c b/src/pulsecore/core-util.c index 601b1d1..6f34e7c 100644 @@ -58,24 +58,25 @@ index 601b1d1..6f34e7c 100644 @@ -109,7 +109,7 @@ #include #endif - + -#ifdef HAVE_CPUID_H +#ifdef HAVE_GET_CPUID #include #endif - + diff --git a/src/pulsecore/cpu-x86.c b/src/pulsecore/cpu-x86.c index 4e59e14..86595d4 100644 --- a/src/pulsecore/cpu-x86.c +++ b/src/pulsecore/cpu-x86.c @@ -24,7 +24,7 @@ - + #include - + -#ifdef HAVE_CPUID_H +#ifdef HAVE_GET_CPUID #include #endif + +-- +2.29.2 --- -2.29.2 \ No newline at end of file diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio/0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch b/meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio/0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch similarity index 98% rename from meta-webos/recipes-multimedia/pulseaudio/pulseaudio/0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch rename to meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio/0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch index 05b99c91e..48f049217 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio/0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio/0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch @@ -18,12 +18,13 @@ index 30ef499..5c3abf0 100644 +++ b/src/daemon/main.c @@ -916,7 +916,7 @@ int main(int argc, char *argv[]) { pa_set_env_and_record("PULSE_SYSTEM", conf->system_instance ? "1" : "0"); - + pa_log_info("This is PulseAudio %s", PACKAGE_VERSION); - pa_log_debug("Compilation CFLAGS: %s", PA_CFLAGS); + pa_log_debug("Compilation CFLAGS: ***"); - + #ifdef HAVE_LIBSAMPLERATE pa_log_warn("Compiled with DEPRECATED libsamplerate support!"); --- -2.25.1 \ No newline at end of file +-- +2.25.1 + diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio/volatiles.04_pulse b/meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio/volatiles.04_pulse new file mode 100644 index 000000000..5b1998032 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio/volatiles.04_pulse @@ -0,0 +1,2 @@ +# +d pulse pulse 0755 /var/run/pulse none diff --git a/meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio_15.0.bb b/meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio_15.0.bb new file mode 100644 index 000000000..239d31810 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-4.0/recipes-multimedia/pulseaudio/pulseaudio_15.0.bb @@ -0,0 +1,11 @@ +require pulseaudio.inc + +SRC_URI = "http://freedesktop.org/software/pulseaudio/releases/${BP}.tar.xz \ + file://0001-client-conf-Add-allow-autospawn-for-root.patch \ + file://0002-do-not-display-CLFAGS-to-improve-reproducibility-bui.patch \ + file://0001-meson-Check-for-__get_cpuid.patch \ + file://volatiles.04_pulse \ + file://0001-doxygen-meson.build-remove-dependency-on-doxygen-bin.patch \ + " +SRC_URI[sha256sum] = "a40b887a3ba98cc26976eb11bdb6613988f145b19024d1b6555c6a03c9cba1a0" +UPSTREAM_CHECK_REGEX = "pulseaudio-(?P\d+(\.(?!99)\d+)+)\.tar" diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bb b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend similarity index 79% rename from meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bb rename to meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend index 4b22dafee..3b2d173e6 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bb +++ b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend @@ -1,14 +1,6 @@ # Copyright (c) 2022 LG Electronics, Inc. -require pulseaudio_15.0.inc - -LICENSE = "GPL-2.0-or-later & LGPL-2.1-only" -LIC_FILES_CHKSUM = "file://LICENSE;md5=0e5cd938de1a7a53ea5adac38cc10c39 \ - file://GPL;md5=4325afd396febcb659c36b49533135d4 \ - file://LGPL;md5=2d5025d4aa3495befef8f17206a5b0a1 \ - file://src/pulsecore/resampler.h;beginline=4;endline=21;md5=09794012ae16912c0270f3280cc8ff84 \ - file://oss-pkg-info.yaml;md5=5c4ec8703e42f87fdf96fa3794704163 \ -" +LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=5c4ec8703e42f87fdf96fa3794704163" # This is blacklisted because of the license DEPENDS:remove = "libatomic-ops" @@ -16,13 +8,14 @@ DEPENDS:remove = "libatomic-ops" DEPENDS += "pmloglib" WEBOS_VERSION = "15.0-34_6e214e382862fb6288b3f7ae59f25893cb0c2810" -PR = "r0" +EXTENDPRAUTO:append = "webos1" inherit webos_enhanced_submissions inherit webos_public_repo WEBOS_REPO_NAME = "pulseaudio-webos" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE} \ file://pulseaudio.service \ file://0001-client-conf-Add-allow-autospawn-for-root.patch \ @@ -33,11 +26,13 @@ SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE} \ S = "${WORKDIR}/git" -FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" EXTRA_OECONF += "--with-access-group=root \ --disable-samplerate \ " +PACKAGECONFIG[palm-resampler] = "-Dpalm-resampler=true,-Dpalm-resampler=false," +PACKAGECONFIG[rpi] = "-Drpi=true,-Drpi=false," + # Compared to oe-core default, remove gsettings, add palm-resampler and add ofono even without 3g in DISTRO_FEATURES PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez5', '', d)} \ ${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)} \ @@ -47,6 +42,7 @@ PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez5' palm-resampler \ ofono \ " + PACKAGECONFIG:append:rpi = " rpi" do_install:prepend() { @@ -66,8 +62,6 @@ do_install:append:qemuall() { install -v -m 644 ${S}/palm/qemux86_system.pa ${D}${sysconfdir}/pulse/system.pa } -FILES:${PN}-dev += "${libdir}/pulse-15.0/modules/*.la ${datadir}/vala ${libdir}/cmake" - RDEPENDS:pulseaudio-server:append = "\ pulseaudio-module-palm-policy \ pulseaudio-module-null-source \ @@ -77,14 +71,18 @@ RDEPENDS:pulseaudio-server:append = "\ pulseaudio-module-combine-sink \ pulseaudio-module-ladspa-sink \ ${@bb.utils.contains('PACKAGECONFIG', 'bluez5', '\ - pulseaudio-lib-bluez5-util \ - pulseaudio-module-bluetooth-discover \ - pulseaudio-module-bluetooth-policy \ - pulseaudio-module-bluez5-device \ - pulseaudio-module-bluez5-discover \ + pulseaudio-lib-bluez5-util \ + pulseaudio-module-bluetooth-discover \ + pulseaudio-module-bluetooth-policy \ + pulseaudio-module-bluez5-device \ + pulseaudio-module-bluez5-discover \ ', '', d)} \ " +# This is needed because pulseaudio.inc uses +# "${libdir}/pulse-${PV}/modules/" +# and our PV "15.0-34" doesn't match it, this can be dropped after upgrading to pulseaudio-16 which uses just ${libdir}/pulseaudio/modules/ +# https://git.openembedded.org/openembedded-core/commit/?id=e5399a09bf44700f97607b283379172dac0cf9c7 python populate_packages:prepend() { plugindir = d.expand('${libdir}/pulse-15.0/modules/') do_split_packages(d, plugindir, r'^module-(.*)\.so$', 'pulseaudio-module-%s', 'PulseAudio module for %s', extra_depends='', prepend=True) From 7fc913774c59a76c0c7c6c3fcc91afbaa4dc29d6 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 13 Jun 2022 13:08:52 +0000 Subject: [PATCH 0447/2022] pulseaudio: remove recipe for version 9 :Release Notes: It's not used anywhere now. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-5141] Pulseaudio v15.0 BT A2DP profile bug fix [WRO-3444] Implement pulseaudio 15.0 changes and meta changes [WRO-6542] CCC: Various build fixes Change-Id: I895e3545cb545bd94d7e84ec3ac4c791c5467448 --- .../pulseaudio/pulseaudio_9.0.bb | 125 ------------------ 1 file changed, 125 deletions(-) delete mode 100644 meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb deleted file mode 100644 index 199c81e16..000000000 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb +++ /dev/null @@ -1,125 +0,0 @@ -# Copyright (c) 2014-2022 LG Electronics, Inc. - -require recipes-multimedia/pulseaudio/pulseaudio.inc - -# Restore the LIC_FILES_CHKSUM for 9.0 version -# pulseaudio.inc is already using different one for 10.0 -LICENSE = "GPL-2.0-or-later & LGPL-2.1-only" -LIC_FILES_CHKSUM = "file://LICENSE;md5=d9ae089c8dc5339f8ac9d8563038a29f \ - file://GPL;md5=4325afd396febcb659c36b49533135d4 \ - file://LGPL;md5=2d5025d4aa3495befef8f17206a5b0a1 \ - file://src/pulsecore/resampler.h;beginline=4;endline=21;md5=09794012ae16912c0270f3280cc8ff84 \ - file://oss-pkg-info.yaml;md5=5c4ec8703e42f87fdf96fa3794704163 \ -" - -# removed from oe-core's pulseaudio.inc in upgrade from 9.0 to 10.0 -# commit 4ddaf28fd36294fd940f26d55973da20eeeeb0d8 -# Author: Tanu Kaskinen -# Date: Fri Feb 3 09:06:35 2017 +0200 -# Subject: pulseaudio: 9.0 -> 10.0 -DEPENDS += "json-c gdbm" -# removed from oe-core's pulseaudio.inc in upgrade from 12.2 to 13.0 -# commit e4b9e98100cdeb74d4898afcab2d76f2e0855960 -# Author: Tanu Kaskinen -# Date: Thu Nov 21 16:06:24 2019 +0200 -# Subject: pulseaudio: 12.2 -> 13.0 -# -# Release notes: -# https://www.freedesktop.org/wiki/Software/PulseAudio/Notes/13.0/ -# -# Dropped intltool-native from DEPENDS. The .desktop file translations -# don't need intltool any more, gettext is enough. -DEPENDS += "intltool-native" - -# This is blacklisted because of the license -DEPENDS:remove = "libatomic-ops" - -DEPENDS += "pmloglib" - -WEBOS_VERSION = "9.0-33_4216d63902b6f13d37dbbe0b56948677cdc22b68" -PR = "r28" - -inherit webos_enhanced_submissions - -inherit webos_public_repo - -WEBOS_REPO_NAME = "pulseaudio-webos" -SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE} \ - file://pulseaudio.service \ -" - -S = "${WORKDIR}/git" - -FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" -EXTRA_OECONF += "--with-access-group=root \ - --disable-samplerate \ - " - -# Added to oe-core pulseaudio.inc when upgrading to 12.2 version -# but our old 9.* version doesn't support it -EXTRA_OECONF:remove = "--disable-gsettings" - -# Added to oe-core pulseaudio.inc to improve build reproducibility with 12.2 version -# but our old 9.* version doesn't support it -EXTRA_OECONF:remove = "--disable-running-from-build-tree" - -# Compared to oe-core default, remove gsettings, add palm-resampler and add ofono even without 3g in DISTRO_FEATURES -PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez5', '', d)} \ - ${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)} \ - ${@bb.utils.contains('DISTRO_FEATURES', '3g', 'ofono', '', d)} \ - ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6 systemd x11', d)} \ - dbus \ - palm-resampler \ - ofono \ -" -PACKAGECONFIG:append:rpi = " rpi" - -PACKAGECONFIG[palm-resampler] = "--enable-palm-resampler,--disable-palm-resampler" -PACKAGECONFIG[rpi] = "--enable-rpi,--disable-rpi" - -do_install:prepend() { - install -v -m 0644 ${S}/volatiles.04_pulse ${WORKDIR}/volatiles.04_pulse -} - -do_install:append() { - install -v -d ${D}${sysconfdir}/systemd/system - install -v -m 644 ${WORKDIR}/pulseaudio.service ${D}${sysconfdir}/systemd/system/ - install -v -m 644 ${S}/src/modules/module-palm-policy-default.h ${D}${includedir}/pulse/module-palm-policy.h - install -v -m 644 ${S}/src/modules/module-palm-policy-tables-default.h ${D}${includedir}/pulse/module-palm-policy-tables.h -} -do_install:append:webos() { - install -v -m 644 ${S}/palm/open_system.pa ${D}${sysconfdir}/pulse/system.pa -} -do_install:append:qemuall() { - install -v -m 644 ${S}/palm/qemux86_system.pa ${D}${sysconfdir}/pulse/system.pa -} - -FILES:${PN}-dev += "${libdir}/pulse-9.0/modules/*.la ${datadir}/vala ${libdir}/cmake" - -RDEPENDS:pulseaudio-server:append = "\ - pulseaudio-module-palm-policy \ - pulseaudio-module-null-source \ - pulseaudio-module-rtp-send \ - pulseaudio-module-rtp-recv \ - pulseaudio-module-loopback \ - pulseaudio-module-combine-sink \ - pulseaudio-module-ladspa-sink \ - ${@bb.utils.contains('PACKAGECONFIG', 'bluez5', '\ - pulseaudio-lib-bluez5-util \ - pulseaudio-module-bluetooth-discover \ - pulseaudio-module-bluetooth-policy \ - pulseaudio-module-bluez5-device \ - pulseaudio-module-bluez5-discover \ - ', '', d)} \ -" - -python populate_packages:prepend() { - plugindir = d.expand('${libdir}/pulse-9.0/modules/') - do_split_packages(d, plugindir, r'^module-(.*)\.so$', 'pulseaudio-module-%s', 'PulseAudio module for %s', extra_depends='', prepend=True) - do_split_packages(d, plugindir, r'^lib(.*)\.so$', 'pulseaudio-lib-%s', 'PulseAudio library for %s', extra_depends='', prepend=True) -} - -# ERROR: pulseaudio-9.0-13-r20 do_package_qa: QA Issue: pulseaudio-pa-info rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] -VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS:${PN}-pa-info:append:class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS:${PN}-pa-info:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" From d75f8f08cc62447a56a3415a31feb89bc68a541d Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 13 Jun 2022 06:32:44 +0000 Subject: [PATCH 0448/2022] webos-preferred-versions.inc: remove unnecessary P_V_pulseaudio :Release Notes: meta-webos has higher 15.0% recipe with highest BBFILE_PRIORITY, no need to select it with P_V. :Detailed Notes: It's not needed. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-5141] Pulseaudio v15.0 BT A2DP profile bug fix [WRO-3444] Implement pulseaudio 15.0 changes and meta changes [WRO-6542] CCC: Various build fixes Change-Id: I1e94aa3b4b0768427b928c6556f562470d0122a9 --- meta-webos/conf/distro/include/webos-preferred-versions.inc | 1 - 1 file changed, 1 deletion(-) diff --git a/meta-webos/conf/distro/include/webos-preferred-versions.inc b/meta-webos/conf/distro/include/webos-preferred-versions.inc index c2ddd5d5f..acd85d96f 100644 --- a/meta-webos/conf/distro/include/webos-preferred-versions.inc +++ b/meta-webos/conf/distro/include/webos-preferred-versions.inc @@ -3,7 +3,6 @@ PREFERRED_VERSION_webruntime = "91.%" PREFERRED_VERSION_mksnapshot-cross-${TARGET_ARCH} = "91.%" GOVERSION = "1.16.%" -PREFERRED_VERSION_pulseaudio = "15.0-%" # Prefer gstreamer version 1.16.% for webos (instead of 1.18 from meta-webos-backports-3.3) GSTREAMER_VERSION = "1.16.%" From fc201922635c81abc9dd8ded9fa75c8b43f9770a Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Wed, 15 Jun 2022 14:42:51 +0900 Subject: [PATCH 0449/2022] auto-luna-surface-manager=42 luna-surfacemanager=375 qtbase-plugins-webos=14 :Release Notes: Support 4K resolution Support ID_INPUT_KEY input device :Detailed Notes: auto-luna-surface-manager: submissions/41..submissions/42 a7dcf45 Add WEBOS_DEVICE_PIXEL_RATIO for 4k resolution support luna-surfacemanager: submissions/374..submissions/375 1db41fb Set devicePixelRatio to 1.0 when highDpiScaling is active qtbase-plugins-webos: submissions/12..submissions/14 487195d Fix touch event on dual-screen f407ebe Implement logicalDPI to support screen scale factor beef2af support input device marked ID_INPUT_KEY=1 :Testing Performed: See the related CCC Jira ticket :QA Notes: N/A :Issues Addressed: [WRO-6631] CCC: auto-luna-surface-manager=42 luna-surfacemanager=375 qtbase-plugins-webos=14 Change-Id: Iead8c110d203f83d843ba1114e24478f467af6fb --- .../auto-luna-surface-manager/auto-luna-surface-manager.bb | 2 +- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 2 +- .../recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb index cd83cbd4f..5e492a995 100644 --- a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb +++ b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb @@ -15,7 +15,7 @@ RDEPENDS:${PN} = " \ qtbase-plugins-webos \ " -WEBOS_VERSION = "0.0.1-41_775c6b4b6589c096b6b6030bcd857565527623ee" +WEBOS_VERSION = "0.0.1-42_70067f0ab4a4e62bc64235f7514fd253fe476f1f" PR = "r7" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index f4fe8ac71..974e4fa57 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0 qtwayland-webos" -WEBOS_VERSION = "2.0.0-374_0ad11a50a04912b4e88d2b064307ba8e3a5b475d" +WEBOS_VERSION = "2.0.0-375_3b0b1c85b46b92be8fc5a53290addaccb9abd6a8" PR = "r54" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb index e2b40039d..1f0e3644f 100644 --- a/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb +++ b/meta-webos/recipes-webos/qtbase-plugins-webos/qtbase-plugins-webos.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtbase" -WEBOS_VERSION = "1.0.0-12_4e2332c77f1cd215b1da2c879a27ffa57678a6db" +WEBOS_VERSION = "1.0.0-14_c4b4a838abb44892c6a348365f9f6b81ed5b9376" PR = "r5" inherit webos_qmake6 From a502c8f8dce8eb9bbd72d296942d91b6623cddb3 Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Wed, 15 Jun 2022 15:05:47 +0900 Subject: [PATCH 0450/2022] luna-surfacemanager=376 qtwayland-webos=79 webos-initscripts=84 :Release Notes: Fix WAM crash while restarting LSM Fix video ratio issue Fix static analysis Fix Qt webOS CI issue :Detailed Notes: luna-surfacemanager: submissions/375..submissions/376 f54756a Fix m_videoDispRatio and m_exportedWindowRatio qtwayland-webos: submissions/77..submissions/79 429022a Fix time_t for static analysis 7e12932 Allow platform window creation with RasterSurface type webos-initscripts: submissions/83..submissions/84 91697ec Remove the lsm-ready file when the service stops :Testing Performed: See the related Jira ticket :QA Notes: N/A :Issues Addressed: [WRO-6631] CCC: luna-surfacemanager=376 qtwayland-webos=79 webos-initscripts=84 Change-Id: I5c36345b512703c1f87561dedd9e5c8715e78618 --- meta-webos/recipes-core/initscripts/webos-initscripts.bb | 2 +- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 2 +- meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-core/initscripts/webos-initscripts.bb b/meta-webos/recipes-core/initscripts/webos-initscripts.bb index ede12c27d..d64735fbd 100644 --- a/meta-webos/recipes-core/initscripts/webos-initscripts.bb +++ b/meta-webos/recipes-core/initscripts/webos-initscripts.bb @@ -18,7 +18,7 @@ RDEPENDS:${PN} = "${VIRTUAL-RUNTIME_init_manager} ${VIRTUAL-RUNTIME_bash} python PROVIDES = "initscripts" RPROVIDES:${PN} = "initscripts initd-functions" -WEBOS_VERSION = "3.0.0-83_75a7d1c58ce9701732119a40e493d393a45a8e89" +WEBOS_VERSION = "3.0.0-84_6e34df6eaefe392465aba2682fc066a92d7cfffc" PR = "r17" inherit webos_component diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index 974e4fa57..54e040675 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0 qtwayland-webos" -WEBOS_VERSION = "2.0.0-375_3b0b1c85b46b92be8fc5a53290addaccb9abd6a8" +WEBOS_VERSION = "2.0.0-376_4e4a9881fd5a13c695da9d073175b4e37070cc58" PR = "r54" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb index 0e15814e9..5be76d142 100644 --- a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb +++ b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtwayland webos-wayland-extensions libxkbcommon qt-features-webos wayland-native qtwayland-native wayland-protocols" -WEBOS_VERSION = "2.0.0-77_06206d9e24f73c3317ecebee95d427ffb61587c5" +WEBOS_VERSION = "2.0.0-79_df52f9e59c64bdc0dba2a7cbf7777645c1c5ab81" PR = "r16" inherit webos_qmake6 From a27007691c18844450803b2812df688fb9a978be Mon Sep 17 00:00:00 2001 From: "kijoong.lee" Date: Tue, 21 Jun 2022 17:50:21 +0900 Subject: [PATCH 0451/2022] edgeai-vision=11-r3 armnn=r2 arm-compute-library=r2 :Release Notes: Add License info: edgeai-vision Remove arm-tensorflow.bb opencl-icd-loader creates libOpenCL.so.1 and libOpenCL.so is symlink to it, which is correctly packaged in $PN-dev, not $PN, so it's not installed by default. Integrate auto delegate selector and edge ai vision Then armnn tflite delegate incorrectly tries to dlopen libOpenCL.so instead of libOpenCL.so.1 which fails, instead of changing opencl-icd-loader packaging fix the OpenCL. :Detailed Notes: There was a problem of unnecessarily re-downloading the tensorflow source from arm-tensorflow.bb, so this recipe was removed and the build dependency problem was solved by adding tensorflow-lite to DEPENDS of armnn.bb. armnn delegate error fixes: Can't load libOpenCL.so: libOpenCL.so: cannot open shared object file: No such file or directory Can't load libGLES_mali.so: libGLES_mali.so: cannot open shared object file: No such file or directory edgeai-vision: submissions/8..submissions/11 c040aa8 change edgeai-vision soversion 1.0.0 a35cacb Change unit test images as free copyrights fabdba1 Integrate auto delegate selector and edge ai vision 5607cdd add copyrights and license 16385c4 remove gtest code and add c api for tas system :Testing Performed: Local Build Test :QA Notes: N/A :Issues Addressed: [WRO-7328] CCC: edgeai-vision=11-r3 armnn=r2 arm-compute-library=r2 [WRO-6578] AI Framework Open Source License Review [WRO-7288] Change unit test images as free copyrights [WRO-6325] integrate auto delegate selector and edge ai vision [WRO-7052] Add license and check open source license for delivery [WRO-7053] Prepare to deliver Edge AI Vision API Change-Id: Ibe90f2f17556c8212b078f68ebda028e2cb1d840 --- ...lopen-libOpenCL.so.1-instead-of-libO.patch | 29 ++++++++++++++ .../arm-compute-library.pc.in | 0 .../arm-compute-library_21.11.bb | 3 +- .../armnn/armnn-tensorflow_2.6.2.bb | 39 ------------------- .../recipes-upstreamable/armnn/armnn_21.11.bb | 18 +++------ .../edgeai-vision/edgeai-vision_1.0.0.bb | 35 +++++++++++------ 6 files changed, 61 insertions(+), 63 deletions(-) create mode 100644 meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library/0001-OpenCL-dlopen-libOpenCL.so.1-instead-of-libO.patch rename meta-webos/recipes-upstreamable/arm-compute-library/{files => arm-compute-library}/arm-compute-library.pc.in (100%) delete mode 100644 meta-webos/recipes-upstreamable/armnn/armnn-tensorflow_2.6.2.bb diff --git a/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library/0001-OpenCL-dlopen-libOpenCL.so.1-instead-of-libO.patch b/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library/0001-OpenCL-dlopen-libOpenCL.so.1-instead-of-libO.patch new file mode 100644 index 000000000..5f5717d7b --- /dev/null +++ b/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library/0001-OpenCL-dlopen-libOpenCL.so.1-instead-of-libO.patch @@ -0,0 +1,29 @@ +From 50db5248d9f5665a9229afbd18b00a1b155bbabc Mon Sep 17 00:00:00 2001 +From: "kijoong.lee" +Date: Wed, 22 Jun 2022 18:02:47 +0900 +Subject: [PATCH] OpenCL-dlopen-libOpenCL.so.1-instead-of-libO + +Fixes: +Can't load libOpenCL.so: libOpenCL.so: cannot open shared object file: No such file or directory +Can't load libGLES_mali.so: libGLES_mali.so: cannot open shared object file: No such file or directory + +--- + src/core/CL/OpenCL.cpp | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/core/CL/OpenCL.cpp b/src/core/CL/OpenCL.cpp +index d8c2736ef..2c9492de1 100644 +--- a/src/core/CL/OpenCL.cpp ++++ b/src/core/CL/OpenCL.cpp +@@ -50,7 +50,7 @@ CLSymbols &CLSymbols::get() + + bool CLSymbols::load_default() + { +- static const std::vector libraries{ "libOpenCL.so", "libGLES_mali.so", "libmali.so" }; ++ static const std::vector libraries{ "libOpenCL.so.1", "libGLES.so", "libmali.so" }; + + if(_loaded.first) + { +-- +2.17.1 + diff --git a/meta-webos/recipes-upstreamable/arm-compute-library/files/arm-compute-library.pc.in b/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library/arm-compute-library.pc.in similarity index 100% rename from meta-webos/recipes-upstreamable/arm-compute-library/files/arm-compute-library.pc.in rename to meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library/arm-compute-library.pc.in diff --git a/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb b/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb index c22c542c9..104444d80 100644 --- a/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb +++ b/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb @@ -12,9 +12,10 @@ SRC_URI = " \ file://0001-webos-build-support.patch \ file://arm-compute-library.pc.in \ file://0001-Fix-build-with-newer-gcc.patch \ + file://0001-OpenCL-dlopen-libOpenCL.so.1-instead-of-libO.patch \ " -PR = "r1" +PR = "r2" S = "${WORKDIR}/git" diff --git a/meta-webos/recipes-upstreamable/armnn/armnn-tensorflow_2.6.2.bb b/meta-webos/recipes-upstreamable/armnn/armnn-tensorflow_2.6.2.bb deleted file mode 100644 index 3c9db2e3a..000000000 --- a/meta-webos/recipes-upstreamable/armnn/armnn-tensorflow_2.6.2.bb +++ /dev/null @@ -1,39 +0,0 @@ -SUMMARY = "Tensorflow protobuf files - used in ARMNN for Tensorflow network models" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=c7e17cca1ef4230861fb7868e96c387e" - -SRC_URI = " \ - git://github.com/tensorflow/tensorflow.git;branch=r2.6;name=tensorflow;protocol=https \ - git://github.com/ARM-software/armnn.git;branch=branches/armnn_21_11;name=armnn;destsuffix=git/armnn;protocol=https \ -" - -# Matches v${PV} -SRCREV_tensorflow = "c2363d6d025981c661f8cbecf4c73ca7fbf38caf" -# Matches v21.11 -SRCREV_armnn = "5e9965cae1cc6162649910f423ebd86001fc1931" -SRCREV_FORMAT = "tensorflow" - -DEPENDS = " \ - protobuf-native \ - flatbuffers \ -" - -S = "${WORKDIR}/git" - -do_install() { - # Install TF sources + build artifacts as reuired by ARMNN - install -d ${D}${datadir}/${BPN} - - # Convert protobuf sources to C sources and install - ${S}/armnn/scripts/generate_tensorflow_protobuf.sh ${D}${datadir}/${BPN} ${STAGING_DIR_NATIVE}${prefix_native} - - # Install sources as required by ARMNN - install -d ${D}${datadir}/${BPN}-lite - for file in ${S}/tensorflow/lite/schema/* - do - [ -f $file ] && install -m 0644 $file ${D}${datadir}/${BPN}-lite - done -} - -FILES:${PN} += "${datadir}" - diff --git a/meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb b/meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb index 422cc1bce..a03fb154e 100644 --- a/meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb +++ b/meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb @@ -20,7 +20,7 @@ SRC_URI = " \ # Matches v${PV} SRCREV = "5e9965cae1cc6162649910f423ebd86001fc1931" -PR = "r1" +PR = "r2" S = "${WORKDIR}/git" @@ -45,7 +45,7 @@ RDEPENDS:${PN} = " \ ${RDEPENDS_WEBOS} \ " -PACKAGECONFIG += "ref opencl tensorflow tensorflow-lite tensorflow-lite-delegate" +PACKAGECONFIG += "ref opencl tensorflow-lite tensorflow-lite-delegate" PACKAGECONFIG += "${@bb.utils.contains('TARGET_ARCH', 'aarch64', 'neon', '', d)}" PACKAGECONFIG += "${@bb.utils.contains('TARGET_ARCH', 'arm', 'neon', '', d)}" @@ -62,19 +62,13 @@ PACKAGECONFIG[opencl] = " \ opencl-headers opencl-clhpp flatbuffers flatbuffers-native \ " -PACKAGECONFIG[tensorflow] = " \ - -DBUILD_TF_PARSER=1 \ - -DTF_GENERATED_SOURCES=${STAGING_DATADIR}/armnn-tensorflow, \ - -DBUILD_TF_PARSER=0, \ - protobuf-native flatbuffers armnn-tensorflow \ -" - PACKAGECONFIG[tensorflow-lite] = " \ - -DTF_LITE_SCHEMA_INCLUDE_PATH=${STAGING_DATADIR}/armnn-tensorflow-lite \ - -DTF_LITE_GENERATED_PATH=${STAGING_DATADIR}/armnn-tensorflow-lite \ + -DTF_LITE_GENERATED_PATH=${STAGING_DIR_TARGET}/usr/include/tensorflow/lite/schema \ + -DTfLite_INCLUDE_DIR=${STAGING_DIR_TARGET}/usr/include/tensorflow-lite \ + -DTfLite_Schema_INCLUDE_PATH=${STAGING_DIR_TARGET}/usr/include/tensorflow/lite/schema \ -DBUILD_TF_LITE_PARSER=1, \ -DBUILD_TF_LITE_PARSER=0, \ - flatbuffers armnn-tensorflow \ + flatbuffers tensorflow-lite \ " PACKAGECONFIG[tensorflow-lite-delegate] = " \ diff --git a/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb b/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb index e0036e437..1c925608b 100644 --- a/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb +++ b/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb @@ -3,13 +3,17 @@ SUMMARY = "webOS Edge AI Computer Vision Library" DESCRIPTION = "webOS Edge AI Computer Vision Library using TensorflowLite" SECTION = "libs" -LICENSE = "CLOSED" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ + file://oss-pkg-info.yaml;md5=4b1ab5610fc16b165f0ff6bf836ad2a8 \ +" -WEBOS_VERSION = "1.0.0-8_4c00ce905a21e4e297a8a7f77b5445780825f934" +WEBOS_VERSION = "1.0.0-11_fdd8fdc48201aab1b7fcd9691f501855488a5e95" WEBOS_REPO_NAME = "edge-ai-computer-vision" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" -PR = "r2" +PR = "r3" S = "${WORKDIR}/git" inherit cmake @@ -24,6 +28,7 @@ DEPENDS = " \ flatbuffers \ opencv \ tensorflow-lite \ + googletest \ " RDEPENDS:${PN} = " \ @@ -38,23 +43,25 @@ PACKAGECONFIG += "${@bb.utils.contains('DISTRO_FEATURES', 'gpu-delegate', 'gpu', PACKAGECONFIG += "${@bb.utils.contains('DISTRO_FEATURES', 'edgetpu', 'edgetpu', '', d)}" PACKAGECONFIG += "${@bb.utils.contains('DISTRO_FEATURES', 'armnn', 'armnn', '', d)}" PACKAGECONFIG += "${@bb.utils.contains('DISTRO_FEATURES', 'ml-library-size-reduction', '', 'examples', d)}" +PACKAGECONFIG += "${@bb.utils.contains('DISTRO_FEATURES', 'auto-acceleration', 'ads', '', d)}" PACKAGECONFIG[xnnpack] = "-DWITH_XNNPACK:BOOL=TRUE,-DWITH_XNNPACK:BOOL=FALSE" PACKAGECONFIG[gpu] = "-DWITH_GPU=ON, -DWITH_GPU=OFF" PACKAGECONFIG[edgetpu] = "-DWITH_EDGETPU:BOOL=TRUE,-DWITH_EDGETPU:BOOL=FALSE,libedgetpu" PACKAGECONFIG[armnn] = "-DWITH_ARMNN:BOOL=TRUE,-DWITH_ARMNN:BOOL=FALSE,armnn" PACKAGECONFIG[examples] = "-DBUILD_EXAMPLES=ON,-DBUILD_EXAMPLES=OFF,," +PACKAGECONFIG[ads] = "-DWITH_AUTO_DELEGATE=ON,-DWITH_AUTO_DELEGATE=OFF,tflite-auto-delegation" AIF_INSTALL_DIR = "${datadir}/aif" -do_install() { +do_install:append() { CP_ARGS="-Prf --preserve=mode,timestamps --no-preserve=ownership" install -d ${D}${AIF_INSTALL_DIR} if ${@bb.utils.contains('PACKAGECONFIG', 'examples', 'true', 'false', d)}; then # install examples - find ${WORKDIR}/build/example -maxdepth 2 -type f -executable -exec cp $CP_ARGS {} ${D}${AIF_INSTALL_DIR} \; + find ${B}/example -maxdepth 2 -type f -executable -exec cp $CP_ARGS {} ${D}${AIF_INSTALL_DIR} \; chrpath -d ${D}${AIF_INSTALL_DIR}/* # install images files @@ -67,14 +74,14 @@ do_install() { # install extra models cd "${S}/extra_models" for file in $(find . -type f); do - install -d "${D}${AIF_INSTALL_DIR}/extra_models/$(dirname -- "${file}")" - cp $CP_ARGS "${file}" "${D}${AIF_INSTALL_DIR}/extra_models/${file}" + install -d "${D}${AIF_INSTALL_DIR}/model/$(dirname -- "${file}")" + cp $CP_ARGS "${file}" "${D}${AIF_INSTALL_DIR}/model/${file}" done fi - # install library files - install -d ${D}${libdir} - install -m 0755 ${WORKDIR}/build/framework/*.so ${D}${libdir} + # install unit test + install -m 0755 ${B}/test/edgeai-vision-test ${D}${AIF_INSTALL_DIR}/edgeai-vision-test + chrpath -d ${D}${AIF_INSTALL_DIR}/edgeai-vision-test # install header files cd "${S}/include/aif" @@ -97,6 +104,12 @@ do_install() { s:@libdir@:${libdir}:g s:@includedir@:${includedir}:g' ${D}${libdir}/pkgconfig/edgeai-vision.pc + # install test image files + cd "${S}/images" + for file in $(find . -name '*.jpg'); do + install -d "${D}${AIF_INSTALL_DIR}/images/$(dirname -- "${file}")" + cp $CP_ARGS "${file}" "${D}${AIF_INSTALL_DIR}/images/${file}" + done } FILES:${PN}-dev = "" @@ -106,6 +119,6 @@ INSANE_SKIP:${PN}-dev += "dev-elf" FILES:${PN}-dev += "${includedir}/* ${libdir}/pkgconfig" FILES:${PN} += " \ - ${libdir}/*.so \ ${AIF_INSTALL_DIR} \ + ${libdir}/*.so* \ " From 8428a661cfc2204e318906aacd7d1dbdd65fa74d Mon Sep 17 00:00:00 2001 From: "paramesh.kuberappa" Date: Sat, 25 Jun 2022 15:56:04 +0530 Subject: [PATCH 0452/2022] ose: com.webos.service.mediaindexer=21 :Release Notes: Fix Image viewer application is not launching media file not exist is displayed :Detailed Notes: com.webos.service.mediaindexer: submissions/20...submissions/21 7080425 Fix Image viewer application is not launched media file not exit is displayed :Testing Performed: Test results are updated in WRO-7364 :QA Notes: NA :Issues Addressed: [WRO-7364] CCC: com.webos.service.mediaindexer=21 [WRO-7203] Image viewer application is not launched media file not exist is displayed Change-Id: I1706c66d681b1931fa4a3093b9a867b40891380b --- .../com.webos.service.mediaindexer.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb b/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb index 030346388..33478a730 100644 --- a/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb +++ b/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb @@ -7,7 +7,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " -WEBOS_VERSION = "1.0.0-20_8e2a9efe571970d0f92fc250150ab5ed15cd28e8" +WEBOS_VERSION = "1.0.0-21_dc4b39e9302d7c9b2822e19f9e905bcd06bb86f1" PR = "r8" inherit webos_component From 066ff1bcede89905c0d3a502cbe3c352e1d05447 Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Wed, 25 May 2022 11:36:05 +0900 Subject: [PATCH 0453/2022] qtmultimedia=r1 (fix build issue with Qt 6.3.0) :Release Notes: Fix build issue with QPluginParsedMetaData. :Detailed Notes: qtmultimedia=r1 Add patch file to fix build issue Note: The new qtmultimedia in Qt 6.x does not work in webOS and we have decided to use 6.0.0. http://gpro.lge.com/c/webos-pro/meta-lg-webos/+/300166 :Testing Performed: Build tested. Video playback using gstreamer based media player. :QA Notes: :Issues Addressed: [WRO-7293] CCC: qtmultimedia=r1 (fix build issue with Qt 6.3.0) Change-Id: I8e619df6f840ee459749879733c1494008460982 --- ...ild-issue-with-QPluginParsedMetaData.patch | 30 +++++++++++++++++++ .../recipes-qt/qt6/qtmultimedia_6.0.0.bb | 3 ++ 2 files changed, 33 insertions(+) create mode 100644 meta-webos/recipes-qt/qt6/qtmultimedia/0001-Fix-build-issue-with-QPluginParsedMetaData.patch diff --git a/meta-webos/recipes-qt/qt6/qtmultimedia/0001-Fix-build-issue-with-QPluginParsedMetaData.patch b/meta-webos/recipes-qt/qt6/qtmultimedia/0001-Fix-build-issue-with-QPluginParsedMetaData.patch new file mode 100644 index 000000000..7fe362b56 --- /dev/null +++ b/meta-webos/recipes-qt/qt6/qtmultimedia/0001-Fix-build-issue-with-QPluginParsedMetaData.patch @@ -0,0 +1,30 @@ +From 7f604b901f58dda232781f2435668da8da9e4834 Mon Sep 17 00:00:00 2001 +From: Jaeyoon Jung +Date: Wed, 25 May 2022 11:31:41 +0900 +Subject: [PATCH] Fix build issue with QPluginParsedMetaData + +qtmultimedia/6.0.0-r0/git/src/multimedia/qmediapluginloader.cpp:154:56: error: conversion from 'QList' to non-scalar type 'QList' requested + 154 | QList meta = m_factoryLoader->metaData(); + | ~~~~~~~~~~~~~~~~~~~~~~~~~^~ + +Change-Id: Id3d1547edec549eb9ebf397fb0a342c629450252 +--- + src/multimedia/qmediapluginloader.cpp | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/multimedia/qmediapluginloader.cpp b/src/multimedia/qmediapluginloader.cpp +index 3e9e6cc21..2d741271e 100644 +--- a/src/multimedia/qmediapluginloader.cpp ++++ b/src/multimedia/qmediapluginloader.cpp +@@ -151,9 +151,9 @@ void QMediaPluginLoader::loadMetadata() + return; + } + +- QList meta = m_factoryLoader->metaData(); ++ QList meta = m_factoryLoader->metaData(); + for (int i = 0; i < meta.size(); i++) { +- QJsonObject jsonobj = meta.at(i).value(QStringLiteral("MetaData")).toObject(); ++ QJsonObject jsonobj = meta.at(i).value(QtPluginMetaDataKeys::MetaData).toMap().toJsonObject(); + jsonobj.insert(QStringLiteral("index"), i); + #if !defined QT_NO_DEBUG + if (showDebug) diff --git a/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb b/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb index 79f378248..216eca557 100644 --- a/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb +++ b/meta-webos/recipes-qt/qt6/qtmultimedia_6.0.0.bb @@ -43,8 +43,11 @@ QT_MODULE_BRANCH = "dev" SRCREV_qtmultimedia = "e22a4c82ee24d3d574a6be629e3049248cfba9d9" PV = "6.0.0" +PR = "r1" + SRC_URI += "\ file://0001-Fix-build-error-for-qtmultimedia-dev-branch.patch \ + file://0001-Fix-build-issue-with-QPluginParsedMetaData.patch \ " # this is already in the upstream recipe since: From dc6f172e865889857ffb2326b669b0d9dbd1ce11 Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Wed, 15 Jun 2022 16:27:54 +0900 Subject: [PATCH 0454/2022] qtbase=webos100 qtdeclarative=webos78 (rebase patches to v6.3.1) :Release Notes: Rebase patches to v6.3.1 :Detailed Notes: qtbase=webos100 Increment maxver for webOS specific patch qtdeclarative=webos78 Increment maxver for webOS specific patch :Testing Performed: See related CCC jira ticket :QA Notes: N/A :Issues Addressed: [WRO-7293] CCC: qtbase=webos100 qtdeclarative=webos78 (rebase patches to v6.3.1) Change-Id: Ib6f6d97f641e0a14279770a04fc9be64319ef260 --- meta-webos/recipes-qt/qt6/qtbase_git.bbappend | 4 ++-- meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend index b70969e97..fb777df82 100644 --- a/meta-webos/recipes-qt/qt6/qtbase_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtbase_git.bbappend @@ -2,7 +2,7 @@ inherit webos_qt_global -EXTENDPRAUTO:append = "webos99" +EXTENDPRAUTO:append = "webos100" # Remove LGPL3-only files python do_patch:append() { @@ -91,7 +91,7 @@ SRC_URI:append = " \ # Upstream-Status: Inappropriate # NOTE: Increase maxver when upgrading Qt version SRC_URI:append = " \ - file://9901-Disable-Faux-bolding-in-Qts-FreeType-FontEngine.patch;maxver=6.3.0 \ + file://9901-Disable-Faux-bolding-in-Qts-FreeType-FontEngine.patch;maxver=6.3.1 \ " # Flags needed for webOS diff --git a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend index 1809c979f..f2d783785 100644 --- a/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtdeclarative_git.bbappend @@ -2,7 +2,7 @@ inherit webos_qt_global -EXTENDPRAUTO:append = "webos77" +EXTENDPRAUTO:append = "webos78" FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" @@ -16,13 +16,13 @@ SRC_URI:append = " \ # Upstream-Status: Submitted # NOTE: Increase maxver when upgrading Qt version SRC_URI:append = " \ - file://0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch;maxver=6.3.0 \ + file://0001-Check-if-a-device-in-knownPointingDevices-is-destroy.patch;maxver=6.3.1 \ " # Upstream-Status: Inappropriate # NOTE: Increase maxver when upgrading Qt version SRC_URI:append = " \ - file://0002-Revert-Don-t-hide-the-inputMethod-when-finishing-the.patch;maxver=6.3.0 \ + file://0002-Revert-Don-t-hide-the-inputMethod-when-finishing-the.patch;maxver=6.3.1 \ " # Supplement tool for qmllint From 1a16c1edd39847a7a25dca6637e04a306963b0c9 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 21 Jun 2022 10:23:08 +0000 Subject: [PATCH 0455/2022] webos_localizable.bbclass: fix and shorten the warning message :Release Notes: When WEBOS_LOCALIZATION_SOURCE_DIR was set to something else, the warning was still showing ${S}/resources. :Detailed Notes: Shorten the message by replacing TMPDIR value with 'TMPDIR' similarly to what report-error.bbclass and insane.bbclass does. Especially the TOPDIR part is host specific sometimes quite long (e.g. jenkins builds). e.g.: WARNING: com.webos.app.mediagallery-1.0.0-17-r2 do_install: com.webos.app.mediagallery inherits webos_localizable, but doesn't have any localized files in TMPDIR/work/raspberrypi4_64-webos-linux/com.webos.app.mediagallery/1.0.0-17-r2/git/resources Also change this warning into fatal error to prevent similar issues being introduced without good reason (there is easy way to disable installing the resources with WEBOS_LOCALIZATION_INSTALL_RESOURCES) :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-7292] CCC: Various build fixes Change-Id: I2e9e5a24bfab7843bd339e17caef3f402ab7d0cc --- meta-webos/classes/webos_localizable.bbclass | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/meta-webos/classes/webos_localizable.bbclass b/meta-webos/classes/webos_localizable.bbclass index 6c811c3f8..a22b35396 100644 --- a/meta-webos/classes/webos_localizable.bbclass +++ b/meta-webos/classes/webos_localizable.bbclass @@ -37,6 +37,8 @@ do_generate_webos_localization[depends] += "localization-tool-native:do_populate WEBOS_LOCALIZATION_DEPENDS += "localization-tool-native" WEBOS_LOCALIZATION_DATA_PATH ?= "${S}" WEBOS_LOCALIZATION_SOURCE_DIR ?= "${S}" +WEBOS_LOCALIZATION_SOURCE_RESOURCES ?= "${WEBOS_LOCALIZATION_SOURCE_DIR}/resources" +WEBOS_LOCALIZATION_SOURCE_RESOURCES_WITHOUT_TMPDIR ?= "${@d.getVar('WEBOS_LOCALIZATION_SOURCE_RESOURCES').replace(d.getVar('TMPDIR'), 'TMPDIR')}" WEBOS_JS_LOCTOOL_PATH = "${STAGING_DIR_NATIVE}/opt/js-loctool" WEBOS_JS_LOCTOOL = "${WEBOS_JS_LOCTOOL_PATH}/node_modules/loctool/loctool.js" @@ -73,17 +75,17 @@ WEBOS_LOCALIZATION_INSTALL_RESOURCES ?= "true" do_install:append() { if "${WEBOS_LOCALIZATION_INSTALL_RESOURCES}" ; then - if ls ${WEBOS_LOCALIZATION_SOURCE_DIR}/resources/* >/dev/null 2>/dev/null ; then + if ls ${WEBOS_LOCALIZATION_SOURCE_RESOURCES}/* >/dev/null 2>/dev/null ; then bbnote "Installing localized files" install -d ${D}${webos_localization_resources_dir} - cp -R --no-dereference --preserve=mode,links -v ${WEBOS_LOCALIZATION_SOURCE_DIR}/resources/* ${D}${webos_localization_resources_dir} + cp -R --no-dereference --preserve=mode,links -v ${WEBOS_LOCALIZATION_SOURCE_RESOURCES}/* ${D}${webos_localization_resources_dir} find ${D}${webos_localization_resources_dir} -name \*.xliff -exec rm -vf {} \; find ${D}${webos_localization_resources_dir} -name \*.qm -exec rm -vf {} \; find ${D}${webos_localization_resources_dir} -name \*.ts -exec rm -vf {} \; find ${D}${webos_localization_resources_dir} -type d -empty -delete chown -R root:root ${D}${webos_localization_resources_dir} else - bbwarn "${PN} inherits webos_localizable, but doesn't have any localized files in ${S}/resources" + bbfatal "${PN} inherits webos_localizable, but doesn't have any localized files in ${WEBOS_LOCALIZATION_SOURCE_RESOURCES_WITHOUT_TMPDIR}" fi else bbnote "Not installing localized files, because WEBOS_LOCALIZATION_INSTALL_RESOURCES was set to false" From 08deaebe5742c7833c64b79151de0e4d39375f23 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 21 Jun 2022 12:56:14 +0000 Subject: [PATCH 0456/2022] com.webos.app.mediagallery=r3 (don't try to install localized files) :Release Notes: Disable WEBOS_LOCALIZATION_INSTALL_RESOURCES, because webos doesn't have any localization data for this recipe. :Detailed Notes: Fixes: WARNING: com.webos.app.mediagallery-1.0.0-17-r2 do_install: com.webos.app.mediagallery inherits webos_localizable, but doesn't have any localized files in TMPDIR/work/ qemux86_64-webos-linux/com.webos.app.mediagallery/ 1.0.0-17-r2/git/resources :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-7292] CCC: Various build fixes Change-Id: I8e8d3e74747e0e1a8b132d59d3d2dc33e239ede6 --- .../com.webos.app.mediagallery/com.webos.app.mediagallery.bb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.mediagallery/com.webos.app.mediagallery.bb b/meta-webos/recipes-webos/com.webos.app.mediagallery/com.webos.app.mediagallery.bb index 345c5b669..b1da7157b 100644 --- a/meta-webos/recipes-webos/com.webos.app.mediagallery/com.webos.app.mediagallery.bb +++ b/meta-webos/recipes-webos/com.webos.app.mediagallery/com.webos.app.mediagallery.bb @@ -22,7 +22,7 @@ RDEPENDS:${PN} += "qml-webos-framework qml-webos-bridge" WEBOS_VERSION = "1.0.0-17_4fe324a62ee8d06e344e935f17cbda3d3e568b59" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" -PR = "r2" +PR = "r3" inherit webos_enhanced_submissions inherit webos_public_repo @@ -36,3 +36,6 @@ QMAKE_PROFILES = "${S}/com.webos.app.mediagallery.pro" QE_QMAKE_PATH_HEADERS = "${QE_QMAKE_PATH_QT_HEADERS}" FILES:${PN} += "${webos_applicationsdir}" + +# webos doesn't have localization data for this recipe +WEBOS_LOCALIZATION_INSTALL_RESOURCES = "false" From 9419b5909a8b78048909f3ddae7156973d4fc136 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 21 Jun 2022 12:59:40 +0000 Subject: [PATCH 0457/2022] com.webos.service.pdm=r6 (don't try to install localized files) :Release Notes: Disable WEBOS_LOCALIZATION_INSTALL_RESOURCES, because webos doesn't have any localization data for this recipe. :Detailed Notes: Fixes: WARNING: com.webos.service.pdm do_install: com.webos.service.pdm inherits webos_localizable, but doesn't have any localized files in TMPDIR :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-7292] CCC: Various build fixes Change-Id: Ibf7558984efb735d264cdcb12abeb40be270de3a --- .../com.webos.service.pdm/com.webos.service.pdm.bb | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb b/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb index 615469165..8dfbf6670 100644 --- a/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb +++ b/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb @@ -17,7 +17,7 @@ RDEPENDS:${PN} = "fuse-utils hdparm gphoto2 gphotofs sdparm gptfdisk-sgdisk e2fs RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_pdm-plugin}" WEBOS_VERSION = "1.0.1-69_863dd16e6634f0f5f6964a9f87db78f2c4fee20f" -PR = "r5" +PR = "r6" inherit webos_component inherit webos_enhanced_submissions @@ -39,3 +39,6 @@ SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" FILES:${PN} += "${datadir}" + +# webos doesn't have localization data for this recipe +WEBOS_LOCALIZATION_INSTALL_RESOURCES = "false" From ef92b2ba64d8d9d5c2681b8b4e6ea3bca6c2c4be Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 22 Jun 2022 08:50:29 +0000 Subject: [PATCH 0458/2022] ose: improve indentation mostly on LIC_FILES_CHKSUM :Release Notes: webOS is using 4 spaces for multiline indentation with closing quote on separate line. :Detailed Notes: Intentionally not bumping PR as there is now change other than white-space. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-7292] CCC: Various build fixes Change-Id: Ia269812eab6393dabc7a53f8835b63f3e7257ca2 --- .../videooutput-adaptation-layer-rpi.bb | 4 ++-- .../wpa-supplicant/wpa-supplicant_%.bbappend | 7 ++++--- meta-webos/recipes-core/gator/gator_git.bb | 8 +++---- .../initscripts/webos-initscripts.bb | 5 +++-- .../lsb/lsb-release_%.bbappend | 8 ++++--- .../recipes-location/nmeaparser/nmeaparser.bb | 4 ++-- .../recipes-multimedia/audiod/audiod.bb | 5 +++-- .../com.webos.service.audiofocusmanager.bb | 4 ++-- .../com.webos.service.mediaindexer.bb | 8 ++++--- .../g-media-pipeline/g-media-pipeline.bb | 5 +++-- .../pulseaudio/pulseaudio_15.0.bbappend | 7 ++++--- meta-webos/recipes-multimedia/umi/umi.bb | 5 +++-- .../ecryptfs-utils/ecryptfs-utils_111.bb | 6 +++--- .../recipes-upstreamable/coral/libedgetpu.bb | 21 ++++++++++--------- .../recipes-upstreamable/gupnp/gupnp_1.2.4.bb | 6 ++++-- .../libbson/libbson_git.bb | 3 ++- .../libnsbmp/libnsbmp_0.1.0.bb | 3 ++- .../ptmalloc3/ptmalloc3.bb | 3 ++- .../vmwgfx-layout/vmwgfx-layout.bb | 2 +- .../activitymanager/activitymanager.bb | 8 ++++--- .../appinstalld2/appinstalld2.bb | 6 ++++-- .../applicationinstallerutility.bb | 6 ++++-- .../bluetooth/com.webos.service.hfp.bb | 6 ++++-- meta-webos/recipes-webos/bootd/bootd.bb | 6 ++++-- .../com.palm.service.devmode.bb | 6 ++++-- .../com.webos.app.camera.bb | 7 ++++--- .../com.webos.service.audiooutput.bb | 5 +++-- .../com.webos.service.camera.bb | 5 +++-- .../com.webos.service.cec.bb | 6 ++++-- .../com.webos.service.contextintentmgr.bb | 7 +++++-- .../com.webos.service.intent.bb | 6 ++++-- .../com.webos.service.mediacontroller.bb | 5 +++-- .../com.webos.service.pdm.bb | 8 ++++--- .../com.webos.service.peripheralmanager.bb | 6 ++++-- .../com.webos.service.storageaccess.bb | 7 +++++-- .../com.webos.service.tts.bb | 7 +++++-- .../configd-data/configd-data.bb | 6 ++++-- meta-webos/recipes-webos/configd/configd.bb | 6 ++++-- .../configurator/configurator.bb | 6 ++++-- .../cpushareholder-stub.bb | 5 +++-- meta-webos/recipes-webos/db8/db8.bb | 5 +++-- .../edgeai-vision/edgeai-vision_1.0.0.bb | 4 ++-- .../event-monitor/event-monitor.bb | 7 ++++--- .../recipes-webos/filecache/filecache.bb | 5 +++-- .../frameworks/nodejs-module-webos-service.bb | 7 +++++-- .../g-camera-pipeline/g-camera-pipeline.bb | 5 +++-- .../recipes-webos/imemanager/imemanager.bb | 7 +++++-- meta-webos/recipes-webos/jemalloc/jemalloc.bb | 6 ++++-- .../recipes-webos/libpbnjson/libpbnjson.bb | 5 +++-- .../recipes-webos/libpmscore/libpmscore.bb | 7 ++++--- .../recipes-webos/librolegen/librolegen.bb | 8 ++++--- .../recipes-webos/libsandbox/libsandbox.bb | 7 +++++-- .../luna-downloadmgr/luna-downloadmgr.bb | 6 ++++-- .../recipes-webos/luna-init/luna-init.bb | 5 +++-- .../recipes-webos/luna-prefs/luna-prefs.bb | 6 ++++-- .../luna-service2-security-conf.bb | 5 +++-- .../luna-service2/luna-service2.bb | 5 +++-- .../luna-sysservice/luna-sysservice.bb | 6 ++++-- .../media-resource-calculator.bb | 6 +++--- .../recipes-webos/mojoloader/mojoloader.bb | 7 +++++-- .../mojoservicelauncher.bb | 7 +++++-- .../notificationmgr/notificationmgr.bb | 6 ++++-- meta-webos/recipes-webos/nyx-lib/nyx-lib.bb | 5 +++-- .../nyx-modules-qemux86.bb | 5 +++-- .../recipes-webos/nyx-modules/nyx-modules.bb | 16 ++++++++------ .../recipes-webos/nyx-utils/nyx-utils.bb | 5 +++-- .../openwnn-webos/openwnn-webos.bb | 7 +++++-- .../recipes-webos/pdm-plugin/pdm-plugin.bb | 6 ++++-- meta-webos/recipes-webos/pmklogd/pmklogd.bb | 6 ++++-- meta-webos/recipes-webos/pmlogctl/pmlogctl.bb | 6 ++++-- .../recipes-webos/pmlogdaemon/pmlogdaemon.bb | 6 ++++-- meta-webos/recipes-webos/pmloglib/pmloglib.bb | 7 +++++-- meta-webos/recipes-webos/pmtrace/pmtrace.bb | 10 +++++---- .../qml-app-components/qml-app-components.bb | 3 ++- meta-webos/recipes-webos/sam/sam.bb | 6 ++++-- .../serviceinstaller/serviceinstaller.bb | 6 ++++-- .../settingsservice/settingsservice.bb | 6 ++++-- meta-webos/recipes-webos/sleepd/sleepd.bb | 5 +++-- meta-webos/recipes-webos/test-apps/bareapp.bb | 2 +- .../test-apps/com.webos.app.test.enact.bb | 2 +- .../test-apps/com.webos.app.test.webosose.bb | 2 +- .../test-apps/com.webos.app.test.youtube.bb | 2 +- .../umediaserver/umediaserver-configs.bb | 5 +++-- .../umediaserver/umediaserver.bb | 5 +++-- .../com.webos.service.videooutput.bb | 5 +++-- .../videooutput-adaptation-layer-api.bb | 5 +++-- .../webos-fluentbit-plugins.bb | 5 +++-- .../webos-nettools/webos-nettools.bb | 10 ++++----- 88 files changed, 326 insertions(+), 198 deletions(-) diff --git a/meta-webos-raspberrypi/recipes-webos/videooutputd/videooutput-adaptation-layer-rpi.bb b/meta-webos-raspberrypi/recipes-webos/videooutputd/videooutput-adaptation-layer-rpi.bb index 2d70398f0..b90a6ddeb 100644 --- a/meta-webos-raspberrypi/recipes-webos/videooutputd/videooutput-adaptation-layer-rpi.bb +++ b/meta-webos-raspberrypi/recipes-webos/videooutputd/videooutput-adaptation-layer-rpi.bb @@ -5,8 +5,8 @@ AUTHOR = "Kwanghee Lee " SECTION = "webos/libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " PROVIDES = "val-impl" diff --git a/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend b/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend index 2383f31f2..05a27b096 100644 --- a/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend +++ b/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend @@ -4,9 +4,10 @@ EXTENDPRAUTO:append = "webos4" FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" -SRC_URI += "file://wpa-supplicant.sh \ - file://wpa-supplicant.service \ - file://0001-Add-p2p-changes.patch \ +SRC_URI += " \ + file://wpa-supplicant.sh \ + file://wpa-supplicant.service \ + file://0001-Add-p2p-changes.patch \ " # Replace the wpa_supplicant.service from wpa-supplicant source with our own version (for some unknown reason) SYSTEMD_SERVICE:${PN}:remove = "wpa_supplicant.service" diff --git a/meta-webos/recipes-core/gator/gator_git.bb b/meta-webos/recipes-core/gator/gator_git.bb index 1850261b0..c2badbe8f 100644 --- a/meta-webos/recipes-core/gator/gator_git.bb +++ b/meta-webos/recipes-core/gator/gator_git.bb @@ -12,10 +12,10 @@ PV = "6.7+git${SRCPV}" PR = "r4" SRC_URI = "git://github.com/ARM-software/gator.git;protocol=https;branch=main \ - file://0001-disable-stripping-debug-info.patch \ - file://0001-gator_main.c-gator_backtrace.c-fix-build-with-linux-.patch \ - file://Mali_events_disable.patch \ - file://git/gcc-wrapper.py \ + file://0001-disable-stripping-debug-info.patch \ + file://0001-gator_main.c-gator_backtrace.c-fix-build-with-linux-.patch \ + file://Mali_events_disable.patch \ + file://git/gcc-wrapper.py \ " S = "${WORKDIR}/git" diff --git a/meta-webos/recipes-core/initscripts/webos-initscripts.bb b/meta-webos/recipes-core/initscripts/webos-initscripts.bb index d64735fbd..0f21048c5 100644 --- a/meta-webos/recipes-core/initscripts/webos-initscripts.bb +++ b/meta-webos/recipes-core/initscripts/webos-initscripts.bb @@ -4,8 +4,9 @@ SUMMARY = "Systemd service files for system services" AUTHOR = "Sangwoo Kang " SECTION = "webos/base" LICENSE = "Apache-2.0 & MIT" -LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " # TODO: systemd dependency is for fake initctl. diff --git a/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend b/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend index 0695529ff..4cfd536b2 100644 --- a/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend +++ b/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend @@ -6,8 +6,10 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" inherit webos_core_os_dep -SRC_URI += "file://fix-lsb_release-to-work-if-there-are-parens-in-release-codename.patch \ - file://dist-update" +SRC_URI += " \ + file://fix-lsb_release-to-work-if-there-are-parens-in-release-codename.patch \ + file://dist-update \ +" WEBOS_TARGET_CORE_OS ?= "undefined" BUILD_INFO_FILE = "${DISTRO}-release" @@ -42,4 +44,4 @@ do_install:append() { install -d ${D}${sysconfdir}/opkg install -m 0644 ${S}/${TRIMED_DISTRO_VERSION}.conf ${D}${sysconfdir}/opkg fi -} \ No newline at end of file +} diff --git a/meta-webos/recipes-location/nmeaparser/nmeaparser.bb b/meta-webos/recipes-location/nmeaparser/nmeaparser.bb index f5855c00b..f77073343 100644 --- a/meta-webos/recipes-location/nmeaparser/nmeaparser.bb +++ b/meta-webos/recipes-location/nmeaparser/nmeaparser.bb @@ -13,7 +13,7 @@ inherit webos_cmake SRCREV = "d3029a5dc8833d9e76146259a6a4ff9bf225d9e2" SRC_URI = "git://github.com/VisualGPS/NMEAParser.git;branch=master;protocol=https \ - file://0001-Changes-to-support-compilation.patch \ - file://0002-NMEA-checksum-passing-to-nyx-module.patch \ + file://0001-Changes-to-support-compilation.patch \ + file://0002-NMEA-checksum-passing-to-nyx-module.patch \ " S = "${WORKDIR}/git" diff --git a/meta-webos/recipes-multimedia/audiod/audiod.bb b/meta-webos/recipes-multimedia/audiod/audiod.bb index 14fb2a68f..f0f2ba08f 100644 --- a/meta-webos/recipes-multimedia/audiod/audiod.bb +++ b/meta-webos/recipes-multimedia/audiod/audiod.bb @@ -3,10 +3,11 @@ SUMMARY = "webOS Audiod daemon and utilities" AUTHOR = "Manohar Babu " SECTION = "webos/base" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ -file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0 libpbnjson luna-service2 pmloglib luna-prefs boost pulseaudio" diff --git a/meta-webos/recipes-multimedia/com.webos.service.audiofocusmanager/com.webos.service.audiofocusmanager.bb b/meta-webos/recipes-multimedia/com.webos.service.audiofocusmanager/com.webos.service.audiofocusmanager.bb index a0f9b7aad..e3b921edf 100644 --- a/meta-webos/recipes-multimedia/com.webos.service.audiofocusmanager/com.webos.service.audiofocusmanager.bb +++ b/meta-webos/recipes-multimedia/com.webos.service.audiofocusmanager/com.webos.service.audiofocusmanager.bb @@ -5,8 +5,8 @@ AUTHOR = "Mallikarjun Hanganalli " SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0 libpbnjson luna-service2 pmloglib" diff --git a/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb b/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb index 33478a730..a628350ac 100644 --- a/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb +++ b/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb @@ -2,10 +2,12 @@ SUMMARY = "Media indexer service" AUTHOR = "Jaehoon Lee " + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ - " +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +" WEBOS_VERSION = "1.0.0-21_dc4b39e9302d7c9b2822e19f9e905bcd06bb86f1" PR = "r8" diff --git a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb index f5e63847c..31b97d143 100644 --- a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb +++ b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb @@ -3,10 +3,11 @@ SUMMARY = "G media pipeline is a media pipeline which uses GStreamer" AUTHOR = "Jinwoo Ahn " SECTION = "webos/media" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " inherit webos_component diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend index 3b2d173e6..0d947895f 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend +++ b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend @@ -26,9 +26,10 @@ SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE} \ S = "${WORKDIR}/git" -EXTRA_OECONF += "--with-access-group=root \ - --disable-samplerate \ - " +EXTRA_OECONF += " \ + --with-access-group=root \ + --disable-samplerate \ +" PACKAGECONFIG[palm-resampler] = "-Dpalm-resampler=true,-Dpalm-resampler=false," PACKAGECONFIG[rpi] = "-Drpi=true,-Drpi=false," diff --git a/meta-webos/recipes-multimedia/umi/umi.bb b/meta-webos/recipes-multimedia/umi/umi.bb index 59a25a7e8..e17111ae4 100644 --- a/meta-webos/recipes-multimedia/umi/umi.bb +++ b/meta-webos/recipes-multimedia/umi/umi.bb @@ -2,10 +2,11 @@ SUMMARY = "AudioOutputd adaptation layer (UMI) API definition and test harness" SECTION = "webos/libs" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://CMakeLists.txt;beginline=1;endline=15;md5=059bf74645cdef24f5e9a0ccb2a4cb94 \ -file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://CMakeLists.txt;beginline=1;endline=15;md5=059bf74645cdef24f5e9a0ccb2a4cb94 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " inherit webos_component diff --git a/meta-webos/recipes-support/ecryptfs-utils/ecryptfs-utils_111.bb b/meta-webos/recipes-support/ecryptfs-utils/ecryptfs-utils_111.bb index 97d7b0f6e..1e24805a7 100644 --- a/meta-webos/recipes-support/ecryptfs-utils/ecryptfs-utils_111.bb +++ b/meta-webos/recipes-support/ecryptfs-utils/ecryptfs-utils_111.bb @@ -21,7 +21,7 @@ SRC_URI = "\ https://launchpad.net/ecryptfs/trunk/${PV}/+download/${BPN}_${PV}.orig.tar.gz \ file://ecryptfs-utils-CVE-2016-6224.patch \ file://ecryptfs.service \ - " +" SRC_URI[md5sum] = "83513228984f671930752c3518cac6fd" SRC_URI[sha256sum] = "112cb3e37e81a1ecd8e39516725dec0ce55c5f3df6284e0f4cc0f118750a987f" @@ -35,11 +35,11 @@ EXTRA_OECONF = "\ --libdir=${base_libdir} \ --disable-pywrap \ --disable-nls \ - " +" PACKAGECONFIG ??= "nss \ ${@bb.utils.contains('DISTRO_FEATURES', 'pam', 'pam', '', d)} \ - " +" PACKAGECONFIG[nss] = "--enable-nss,--disable-nss,nss," PACKAGECONFIG[openssl] = "--enable-openssl,--disable-openssl,openssl," PACKAGECONFIG[pam] = "--enable-pam,--disable-pam,libpam," diff --git a/meta-webos/recipes-upstreamable/coral/libedgetpu.bb b/meta-webos/recipes-upstreamable/coral/libedgetpu.bb index 8e8948a3e..80ce4fcff 100644 --- a/meta-webos/recipes-upstreamable/coral/libedgetpu.bb +++ b/meta-webos/recipes-upstreamable/coral/libedgetpu.bb @@ -4,12 +4,12 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" SRCREV = "efb73cc94dac29dc590a243109d4654c223e008c" SRC_URI = "git://github.com/google-coral/libedgetpu \ - file://libedgetpu_arm.so.1.0 \ - file://libedgetpu_aarch64.so.1.0 \ - file://libedgetpu_x86_64.so.1.0 \ - file://edgetpu-accelerator.rules \ - file://edgetpu.pc.in \ - " + file://libedgetpu_arm.so.1.0 \ + file://libedgetpu_aarch64.so.1.0 \ + file://libedgetpu_x86_64.so.1.0 \ + file://edgetpu-accelerator.rules \ + file://edgetpu.pc.in \ +" S = "${WORKDIR}/git" @@ -73,10 +73,11 @@ do_install() { FILES:${PN}-dev = "" -INSANE_SKIP:${PN} += "dev-so \ - already-stripped \ - file-rdeps \ - " +INSANE_SKIP:${PN} += " \ + dev-so \ + already-stripped \ + file-rdeps \ +" INSANE_SKIP:${PN}-dev += "dev-elf" FILES:${PN} += "${libdir}/* ${includedir}/* ${sysconfdir}/*" diff --git a/meta-webos/recipes-upstreamable/gupnp/gupnp_1.2.4.bb b/meta-webos/recipes-upstreamable/gupnp/gupnp_1.2.4.bb index 3080a5732..16c135545 100644 --- a/meta-webos/recipes-upstreamable/gupnp/gupnp_1.2.4.bb +++ b/meta-webos/recipes-upstreamable/gupnp/gupnp_1.2.4.bb @@ -4,7 +4,9 @@ SRC_URI = "${GNOME_MIRROR}/${BPN}/1.2/${BPN}-${PV}.tar.xz" SRC_URI[md5sum] = "7c9c7cd80e36d9fb1e5b0267571fc17d" SRC_URI[sha256sum] = "f7a0307ea51f5e44d1b832f493dd9045444a3a4e211ef85dfd9aa5dd6eaea7d1" -LIC_FILES_CHKSUM = "file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7 \ - file://libgupnp/gupnp.h;beginline=1;endline=20;md5=d78a69d9b6e63ee2dc72e7b674d97520" +LIC_FILES_CHKSUM = " \ + file://COPYING;md5=3bf50002aefd002f49e7bb854063f7e7 \ + file://libgupnp/gupnp.h;beginline=1;endline=20;md5=d78a69d9b6e63ee2dc72e7b674d97520 \ +" PR = "r0" diff --git a/meta-webos/recipes-upstreamable/libbson/libbson_git.bb b/meta-webos/recipes-upstreamable/libbson/libbson_git.bb index 76a3b2f66..67edd4a9c 100644 --- a/meta-webos/recipes-upstreamable/libbson/libbson_git.bb +++ b/meta-webos/recipes-upstreamable/libbson/libbson_git.bb @@ -13,7 +13,8 @@ PV = "0.98.0+git${SRCPV}" # corresponds to 0.98.0 SRCREV = "b2d142f48676124e80578b5d491bd9aec50e748d" SRC_URI = "git://github.com/mongodb/${BPN};branch=master;protocol=https \ - file://0001-Update-CMakelist-file-to-install-lib-correctly.patch" + file://0001-Update-CMakelist-file-to-install-lib-correctly.patch \ +" S = "${WORKDIR}/git" diff --git a/meta-webos/recipes-upstreamable/libnsbmp/libnsbmp_0.1.0.bb b/meta-webos/recipes-upstreamable/libnsbmp/libnsbmp_0.1.0.bb index 7edafb720..59716e385 100644 --- a/meta-webos/recipes-upstreamable/libnsbmp/libnsbmp_0.1.0.bb +++ b/meta-webos/recipes-upstreamable/libnsbmp/libnsbmp_0.1.0.bb @@ -12,6 +12,7 @@ PR = "r1" inherit autotools pkgconfig cmake SRC_URI = "http://download.netsurf-browser.org/libs/releases/${BP}-src.tar.gz \ - file://replace-makefile-with-cmake.patch" + file://replace-makefile-with-cmake.patch \ +" SRC_URI[md5sum] = "5b33ff44dfb48e628bcadbe7e51edf90" SRC_URI[sha256sum] = "fb576af6bd4d02d3626d5c2092bc06c80b2a80089a14decf40c813d9ec80ddc0" diff --git a/meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb b/meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb index dfe267b24..b436dc65d 100644 --- a/meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb +++ b/meta-webos/recipes-upstreamable/ptmalloc3/ptmalloc3.bb @@ -12,7 +12,8 @@ LIC_FILES_CHKSUM = " \ PR = "r5" SRC_URI = "http://www.malloc.de/malloc/ptmalloc3-current.tar.gz \ - file://ptmalloc3-current-webos.patch " + file://ptmalloc3-current-webos.patch \ +" SRC_URI[md5sum] = "c0b9dd5f16f8eae979166dc74b60015c" SRC_URI[sha256sum] = "f353606f24a579597a1ff5b51009a45d75da047b3975d82c3f613f85bcf312db" diff --git a/meta-webos/recipes-utils/vmwgfx-layout/vmwgfx-layout.bb b/meta-webos/recipes-utils/vmwgfx-layout/vmwgfx-layout.bb index 0433f547f..4939ba996 100644 --- a/meta-webos/recipes-utils/vmwgfx-layout/vmwgfx-layout.bb +++ b/meta-webos/recipes-utils/vmwgfx-layout/vmwgfx-layout.bb @@ -14,7 +14,7 @@ inherit systemd inherit webos_cmake SRC_URI = "git://github.com/sparkleholic/vmwgfx-layout.git;branch=master;protocol=https \ - file://0001-Set-2-outputs-to-call-DRM_IOCTL_VMW_UPDATE_LAYOUT-fo.patch \ + file://0001-Set-2-outputs-to-call-DRM_IOCTL_VMW_UPDATE_LAYOUT-fo.patch \ " S = "${WORKDIR}/git" diff --git a/meta-webos/recipes-webos/activitymanager/activitymanager.bb b/meta-webos/recipes-webos/activitymanager/activitymanager.bb index 994c79fb2..9d3104127 100644 --- a/meta-webos/recipes-webos/activitymanager/activitymanager.bb +++ b/meta-webos/recipes-webos/activitymanager/activitymanager.bb @@ -2,10 +2,12 @@ DESCRIPTION = "webOS component to manage all running activities." AUTHOR = "Ludovic Legrand " -LICENSE = "Apache-2.0" SECTION = "webos/dameons" -LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "luna-service2 db8 boost libpbnjson glib-2.0 pmloglib ${VIRTUAL-RUNTIME_init_manager}" diff --git a/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb b/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb index b5f5b0b85..95021e67a 100644 --- a/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb +++ b/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb @@ -3,9 +3,11 @@ SUMMARY = "Application Install Service" AUTHOR = "Sangwoo Kang " SECTION = "webos/base" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0 luna-service2 libpbnjson pmloglib pmtrace boost icu" diff --git a/meta-webos/recipes-webos/applicationinstallerutility/applicationinstallerutility.bb b/meta-webos/recipes-webos/applicationinstallerutility/applicationinstallerutility.bb index 385883c92..e495e60f7 100644 --- a/meta-webos/recipes-webos/applicationinstallerutility/applicationinstallerutility.bb +++ b/meta-webos/recipes-webos/applicationinstallerutility/applicationinstallerutility.bb @@ -3,9 +3,11 @@ SUMMARY="The Application Installer Utility supports the installing and removing of applications on a HP webOS device." AUTHOR = "Seokjun Lee " SECTION = "webos/apps" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "pmloglib openssl glib-2.0" diff --git a/meta-webos/recipes-webos/bluetooth/com.webos.service.hfp.bb b/meta-webos/recipes-webos/bluetooth/com.webos.service.hfp.bb index 3c36bb8b7..a6d6a5fe0 100644 --- a/meta-webos/recipes-webos/bluetooth/com.webos.service.hfp.bb +++ b/meta-webos/recipes-webos/bluetooth/com.webos.service.hfp.bb @@ -3,9 +3,11 @@ SUMMARY = "Bluetooth HFP(Hands Free Profile) support service" AUTHOR = "Sameer Mulla " SECTION = "webos/services" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=2763f3ed850f8412903ea776e0526bea \ - file://oss-pkg-info.yaml;md5=63319cd2c369569050a7c0cc246fc8ba \ +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=2763f3ed850f8412903ea776e0526bea \ + file://oss-pkg-info.yaml;md5=63319cd2c369569050a7c0cc246fc8ba \ " DEPENDS = "glib-2.0 glib-2.0-native luna-service2 pmloglib libpbnjson" diff --git a/meta-webos/recipes-webos/bootd/bootd.bb b/meta-webos/recipes-webos/bootd/bootd.bb index dd7ef59c9..ebb7f58a2 100644 --- a/meta-webos/recipes-webos/bootd/bootd.bb +++ b/meta-webos/recipes-webos/bootd/bootd.bb @@ -4,9 +4,11 @@ SUMMARY = "Bootd single-shot launching service" DESCRIPTION = "Bootd is a simplified upstart-like component. It provides automatic single-shot launching at boot time" AUTHOR = "Sangwoo Kang " SECTION = "webos/base" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "luna-service2 libpbnjson pmloglib glib-2.0 boost" diff --git a/meta-webos/recipes-webos/com.palm.service.devmode/com.palm.service.devmode.bb b/meta-webos/recipes-webos/com.palm.service.devmode/com.palm.service.devmode.bb index 942ed0cb1..9ff9b2252 100644 --- a/meta-webos/recipes-webos/com.palm.service.devmode/com.palm.service.devmode.bb +++ b/meta-webos/recipes-webos/com.palm.service.devmode/com.palm.service.devmode.bb @@ -3,9 +3,11 @@ SUMMARY = "JS service for Developer Mode" AUTHOR = "Steve Lemke " SECTION = "webos/apps" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " WEBOS_VERSION = "1.0.0-11_aaf580cc77fb3ae14f72408601040e0932699a8b" diff --git a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb index 6b02707d4..e4e6e3693 100644 --- a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb +++ b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb @@ -3,10 +3,11 @@ SUMMARY = "Camera application" AUTHOR = "Muniraju " SECTION = "webos/apps" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ -file://oss-pkg-info.yaml;md5=3072ffcf5bdbbc376ed21c9d378d14d5 \ + file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ + file://oss-pkg-info.yaml;md5=3072ffcf5bdbbc376ed21c9d378d14d5 \ " WEBOS_VERSION = "0.0.1-8_8939a2009fb96bb16236b59c95da3b14893c8c13" @@ -22,4 +23,4 @@ WEBOS_ENACTJS_SHRINKWRAP_OVERRIDE = "false" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" -WEBOS_ENACTJS_APP_ID = "com.webos.app.camera" \ No newline at end of file +WEBOS_ENACTJS_APP_ID = "com.webos.app.camera" diff --git a/meta-webos/recipes-webos/com.webos.service.audiooutput/com.webos.service.audiooutput.bb b/meta-webos/recipes-webos/com.webos.service.audiooutput/com.webos.service.audiooutput.bb index bca289baa..41e58d7f0 100644 --- a/meta-webos/recipes-webos/com.webos.service.audiooutput/com.webos.service.audiooutput.bb +++ b/meta-webos/recipes-webos/com.webos.service.audiooutput/com.webos.service.audiooutput.bb @@ -3,10 +3,11 @@ SUMMARY = "Service which controls audio output" AUTHOR = "Premalatha MVS " SECTION = "webos/services" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://CMakeLists.txt;beginline=1;endline=15;md5=232fd0174eef9aa036a9c08ff983b67b \ -file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://CMakeLists.txt;beginline=1;endline=15;md5=232fd0174eef9aa036a9c08ff983b67b \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0 luna-service2 pmloglib libpbnjson umi" diff --git a/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb b/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb index 4d85a1b6a..7737a1ade 100644 --- a/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb +++ b/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb @@ -3,10 +3,11 @@ SUMMARY = "Camera service framework to control camera devices" AUTHOR = "Gururaj Patil" SECTION = "webos/services" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0 luna-service2 json-c alsa-lib pmloglib udev" diff --git a/meta-webos/recipes-webos/com.webos.service.cec/com.webos.service.cec.bb b/meta-webos/recipes-webos/com.webos.service.cec/com.webos.service.cec.bb index 4bc2fc268..3abf3eb5b 100644 --- a/meta-webos/recipes-webos/com.webos.service.cec/com.webos.service.cec.bb +++ b/meta-webos/recipes-webos/com.webos.service.cec/com.webos.service.cec.bb @@ -3,9 +3,11 @@ SUMMARY = "HDMI CEC service for webOS OSE" AUTHOR = "Manjuraehmad Momin " SECTION = "webosose" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0 libpbnjson luna-service2 pmloglib nyx-lib" diff --git a/meta-webos/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bb b/meta-webos/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bb index 30d693ee4..d0c5fa474 100644 --- a/meta-webos/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bb +++ b/meta-webos/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bb @@ -3,9 +3,12 @@ SUMMARY = "Node-red based context intent manager (CIM)" AUTHOR = "Tirthadeep Roy " SECTION = "webos/extended-service" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=fe9bd85c6f789c8ada9c8b72c7454254" +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=fe9bd85c6f789c8ada9c8b72c7454254 \ +" DEPENDS = "nodejs-module-node-red" diff --git a/meta-webos/recipes-webos/com.webos.service.intent/com.webos.service.intent.bb b/meta-webos/recipes-webos/com.webos.service.intent/com.webos.service.intent.bb index 68a1fc2e0..ecdd70f1b 100644 --- a/meta-webos/recipes-webos/com.webos.service.intent/com.webos.service.intent.bb +++ b/meta-webos/recipes-webos/com.webos.service.intent/com.webos.service.intent.bb @@ -3,9 +3,11 @@ SUMMARY = "Intent Manager" AUTHOR = "Sangwoo Kang " SECTION = "webos/base" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0 luna-service2 libpbnjson" diff --git a/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb b/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb index 6f01e370d..315be9c20 100644 --- a/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb +++ b/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb @@ -3,10 +3,11 @@ SUMMARY = "Mediacontroller service" AUTHOR = "Sapna Kumari" SECTION = "webos/services" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0 luna-service2 json-c pmloglib" diff --git a/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb b/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb index 8dfbf6670..5f8152caf 100644 --- a/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb +++ b/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb @@ -2,11 +2,13 @@ SUMMARY = "Physical Device Manager handles physical devices using netlink events" DESCRIPTION = "Service for detecting and managing physical devices using netlink events. A physical device is a USB device, available internal storage device and so on." -SECTION = "webos/services" AUTHOR = "Preetham Bhat " +SECTION = "webos/services" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " VIRTUAL-RUNTIME_pdm-plugin ?= "pdm-plugin" diff --git a/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb b/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb index 5b287ebeb..92fd59688 100644 --- a/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb +++ b/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb @@ -3,9 +3,11 @@ SUMMARY = "Peripheral Manager service for webOS OSE" AUTHOR = "Yogish S " SECTION = "webosose" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0 libpbnjson luna-service2 pmloglib " diff --git a/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb b/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb index cb9770f67..b4054e486 100644 --- a/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb +++ b/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb @@ -3,9 +3,12 @@ SUMMARY = "Storage Access Framework for OSE" AUTHOR = "RajeshGopu IV " SECTION = "webos/base" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ - file://oss-pkg-info.yaml;md5=13b5f44cefd7b1b0040a056eeddf6174" +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ + file://oss-pkg-info.yaml;md5=13b5f44cefd7b1b0040a056eeddf6174 \ +" DEPENDS= "glib-2.0 libxml2 luna-service2 pmloglib libgdrive libpbnjson curl gupnp" diff --git a/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb b/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb index c7d8d2714..c467f06ff 100644 --- a/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb +++ b/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb @@ -3,9 +3,12 @@ SUMMARY = "webOS text to speech service" SECTION = "webos/base" AUTHOR = "Rachana Agarwal " + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ - file://oss-pkg-info.yaml;md5=eb0fefa4904ac8820261e985096d5ad4" +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ + file://oss-pkg-info.yaml;md5=eb0fefa4904ac8820261e985096d5ad4 \ +" DEPENDS = "glib-2.0 luna-service2 libpbnjson pmloglib json-c pulseaudio googleapis grpc" diff --git a/meta-webos/recipes-webos/configd-data/configd-data.bb b/meta-webos/recipes-webos/configd-data/configd-data.bb index 2cb1e8ac1..8e4a14337 100644 --- a/meta-webos/recipes-webos/configd-data/configd-data.bb +++ b/meta-webos/recipes-webos/configd-data/configd-data.bb @@ -3,9 +3,11 @@ SUMMARY = "webOS Configuration Service data" AUTHOR = "SangWook Han " SECTION = "webos/base" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " WEBOS_VERSION = "1.0.0-2_26762505fae3b2b7c2603d85ee05712abd647897" diff --git a/meta-webos/recipes-webos/configd/configd.bb b/meta-webos/recipes-webos/configd/configd.bb index 648f88d51..d00254c7e 100644 --- a/meta-webos/recipes-webos/configd/configd.bb +++ b/meta-webos/recipes-webos/configd/configd.bb @@ -3,9 +3,11 @@ SUMMARY = "webOS Configuration Service" AUTHOR = "Sangwoo Kang " SECTION = "webos/base" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "luna-service2 pmloglib glib-2.0 libpbnjson gtest" diff --git a/meta-webos/recipes-webos/configurator/configurator.bb b/meta-webos/recipes-webos/configurator/configurator.bb index 996c2f848..be0f69c5e 100644 --- a/meta-webos/recipes-webos/configurator/configurator.bb +++ b/meta-webos/recipes-webos/configurator/configurator.bb @@ -3,9 +3,11 @@ SUMMARY = "Creates the database schema for webOS apps" AUTHOR = "Ludovic Legrand " SECTION = "webos/base" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "luna-service2 db8 glib-2.0 pmloglib" diff --git a/meta-webos/recipes-webos/cpushareholder-stub/cpushareholder-stub.bb b/meta-webos/recipes-webos/cpushareholder-stub/cpushareholder-stub.bb index b7e0dd6bf..80123e846 100644 --- a/meta-webos/recipes-webos/cpushareholder-stub/cpushareholder-stub.bb +++ b/meta-webos/recipes-webos/cpushareholder-stub/cpushareholder-stub.bb @@ -4,8 +4,9 @@ SUMMARY = "Stubbed implementation of the webOS CPU shares scripts" AUTHOR = "Maksym Shevchenko " SECTION = "webos/base" LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " RPROVIDES:${PN} = "cpushareholder" diff --git a/meta-webos/recipes-webos/db8/db8.bb b/meta-webos/recipes-webos/db8/db8.bb index 5e5aa05d8..a83f3926a 100644 --- a/meta-webos/recipes-webos/db8/db8.bb +++ b/meta-webos/recipes-webos/db8/db8.bb @@ -3,10 +3,11 @@ SUMMARY = "A userspace service that provides access to the webOS database" SECTION = "webos/base" AUTHOR = "Maksym Sditanov " + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ -file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "icu glib-2.0 leveldb leveldb-tl boost" diff --git a/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb b/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb index 1c925608b..079c51657 100644 --- a/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb +++ b/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb @@ -5,8 +5,8 @@ DESCRIPTION = "webOS Edge AI Computer Vision Library using TensorflowLite" SECTION = "libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ - file://oss-pkg-info.yaml;md5=4b1ab5610fc16b165f0ff6bf836ad2a8 \ + file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ + file://oss-pkg-info.yaml;md5=4b1ab5610fc16b165f0ff6bf836ad2a8 \ " WEBOS_VERSION = "1.0.0-11_fdd8fdc48201aab1b7fcd9691f501855488a5e95" diff --git a/meta-webos/recipes-webos/event-monitor/event-monitor.bb b/meta-webos/recipes-webos/event-monitor/event-monitor.bb index 7f3fd56b6..a3920e6ac 100644 --- a/meta-webos/recipes-webos/event-monitor/event-monitor.bb +++ b/meta-webos/recipes-webos/event-monitor/event-monitor.bb @@ -3,10 +3,11 @@ SUMMARY = "Event Monitoring Service for generic notifications" AUTHOR = "Viesturs Zarins " SECTION = "webos/base" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0 luna-service2 pmloglib libpbnjson libwebosi18n" diff --git a/meta-webos/recipes-webos/filecache/filecache.bb b/meta-webos/recipes-webos/filecache/filecache.bb index fc16a934d..d1ca64837 100644 --- a/meta-webos/recipes-webos/filecache/filecache.bb +++ b/meta-webos/recipes-webos/filecache/filecache.bb @@ -3,10 +3,11 @@ SUMMARY = "webOS daemon to cache filesystem requests" AUTHOR = "Alekseyev Oleksandr " SECTION = "webos/base" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ -file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "jemalloc luna-service2 db8 glibmm boost libsandbox glib-2.0 libsigc++-2.0" diff --git a/meta-webos/recipes-webos/frameworks/nodejs-module-webos-service.bb b/meta-webos/recipes-webos/frameworks/nodejs-module-webos-service.bb index 13adaad39..b40d88f80 100644 --- a/meta-webos/recipes-webos/frameworks/nodejs-module-webos-service.bb +++ b/meta-webos/recipes-webos/frameworks/nodejs-module-webos-service.bb @@ -3,9 +3,12 @@ SUMMARY = "Loadable Node.js module for webOS services" AUTHOR = "Sergiy Kryvonos " SECTION = "webOS/frameworks" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=fd2307a91bcd8a2af8959dc45ad202f7" +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=fd2307a91bcd8a2af8959dc45ad202f7 \ +" WEBOS_VERSION = "1.0.1-4_3e28f26fac7b8a24bb4d52a9e988f2004d6e1ad2" PR = "r4" diff --git a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb index a81cbdfcd..6822db2ad 100644 --- a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb +++ b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb @@ -3,10 +3,11 @@ SUMMARY = "g-camera-pipeline is a player which uses GStreamer" AUTHOR = "Praveen P " SECTION = "webos/media" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " inherit webos_component diff --git a/meta-webos/recipes-webos/imemanager/imemanager.bb b/meta-webos/recipes-webos/imemanager/imemanager.bb index f78aa1049..923a66a4d 100644 --- a/meta-webos/recipes-webos/imemanager/imemanager.bb +++ b/meta-webos/recipes-webos/imemanager/imemanager.bb @@ -4,9 +4,12 @@ SUMMARY = "Maliit Input Method Plugins" DESCRIPTION = "Mallit-based virtual keyboard and input method engine for open webOS" AUTHOR = "Pugalendhi Ganesan " SECTION = "webos/base" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=7c010a972eb989740843ee18e1577536" +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=7c010a972eb989740843ee18e1577536 \ +" DEPENDS = "qtbase luna-service2 luna-prefs qt-features-webos qtdeclarative maliit-framework-webos qtdeclarative-native" RDEPENDS:${PN} += "libhangul sunpinyin pyzy qml-webos-bridge openwnn-webos" diff --git a/meta-webos/recipes-webos/jemalloc/jemalloc.bb b/meta-webos/recipes-webos/jemalloc/jemalloc.bb index a95f081e5..f16e05d66 100644 --- a/meta-webos/recipes-webos/jemalloc/jemalloc.bb +++ b/meta-webos/recipes-webos/jemalloc/jemalloc.bb @@ -3,9 +3,11 @@ SUMMARY = "webOS of the open-source FreeBSD memory allocation library" AUTHOR = "Rama Krishna " SECTION = "libs" + LICENSE = "BSD-2-Clause" -LIC_FILES_CHKSUM = "file://README.md;beginline=94;md5=b159f6c7121460dba2c5965602bc3268 \ - file://oss-pkg-info.yaml;md5=a062b932da63efa0c8ac4060de1864cf \ +LIC_FILES_CHKSUM = " \ + file://README.md;beginline=94;md5=b159f6c7121460dba2c5965602bc3268 \ + file://oss-pkg-info.yaml;md5=a062b932da63efa0c8ac4060de1864cf \ " WEBOS_VERSION = "0.20080828a-0webos9-5_959943d029e341cef3839f6b2e8cba04825a852d" diff --git a/meta-webos/recipes-webos/libpbnjson/libpbnjson.bb b/meta-webos/recipes-webos/libpbnjson/libpbnjson.bb index a5cb62192..3305cda8f 100644 --- a/meta-webos/recipes-webos/libpbnjson/libpbnjson.bb +++ b/meta-webos/recipes-webos/libpbnjson/libpbnjson.bb @@ -3,10 +3,11 @@ SUMMARY = "Palm's Better Native JSON library" AUTHOR = "Anatolii Sakhnik " SECTION = "webos/libs" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ -file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "yajl glib-2.0 gperf-native flex-native lemon-native gmp uriparser boost" diff --git a/meta-webos/recipes-webos/libpmscore/libpmscore.bb b/meta-webos/recipes-webos/libpmscore/libpmscore.bb index 041072622..ad9dd9436 100644 --- a/meta-webos/recipes-webos/libpmscore/libpmscore.bb +++ b/meta-webos/recipes-webos/libpmscore/libpmscore.bb @@ -2,12 +2,13 @@ SUMMARY = "pmscore handles device states" AUTHOR = "Abhsiehk Srivastava " +SECTION = "webos/libs" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ -file://oss-pkg-info.yaml;md5=ceae6b60c3da8e439a7f94eb5f011878 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=ceae6b60c3da8e439a7f94eb5f011878 \ " -SECTION = "webos/libs" DEPENDS = "luna-service2 glib-2.0 pmloglib libpbnjson nyx-lib" diff --git a/meta-webos/recipes-webos/librolegen/librolegen.bb b/meta-webos/recipes-webos/librolegen/librolegen.bb index ca7efefdc..610020631 100644 --- a/meta-webos/recipes-webos/librolegen/librolegen.bb +++ b/meta-webos/recipes-webos/librolegen/librolegen.bb @@ -3,10 +3,12 @@ SUMMARY = "Library for dynamically generating webOS system bus role files for webOS JavaScript services" SECTION = "webos/libs" AUTHOR = "Seokhyon Seong " + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ - " +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +" DEPENDS = "glib-2.0" diff --git a/meta-webos/recipes-webos/libsandbox/libsandbox.bb b/meta-webos/recipes-webos/libsandbox/libsandbox.bb index 6f501ccdd..574ddc7e4 100644 --- a/meta-webos/recipes-webos/libsandbox/libsandbox.bb +++ b/meta-webos/recipes-webos/libsandbox/libsandbox.bb @@ -3,9 +3,12 @@ SUMMARY = "libsandbox is a collection of APIs for separating running programs" AUTHOR = "Andrew Innes " SECTION = "webos/devel" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=629222c36a9c68f9e1855667faef01ae" +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=629222c36a9c68f9e1855667faef01ae \ +" WEBOS_VERSION = "2.0.0-2_03120c12ebae2cb2fbd4cb2b58e6b2c6b565efa5" PR = "r3" diff --git a/meta-webos/recipes-webos/luna-downloadmgr/luna-downloadmgr.bb b/meta-webos/recipes-webos/luna-downloadmgr/luna-downloadmgr.bb index def62f374..cc8507f9c 100644 --- a/meta-webos/recipes-webos/luna-downloadmgr/luna-downloadmgr.bb +++ b/meta-webos/recipes-webos/luna-downloadmgr/luna-downloadmgr.bb @@ -3,9 +3,11 @@ SUMMARY="The Download Manager service supports the downloading and uploading of files to and from a HP webOS device." AUTHOR = "Sangwoo Kang " SECTION = "webos/apps" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2714381d01eb5a6e963e62a212e277be \ +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2714381d01eb5a6e963e62a212e277be \ " DEPENDS = "libpbnjson luna-service2 sqlite3 curl uriparser pmloglib jemalloc luna-prefs boost glib-2.0" diff --git a/meta-webos/recipes-webos/luna-init/luna-init.bb b/meta-webos/recipes-webos/luna-init/luna-init.bb index d2a8b9f84..02c237f1c 100644 --- a/meta-webos/recipes-webos/luna-init/luna-init.bb +++ b/meta-webos/recipes-webos/luna-init/luna-init.bb @@ -3,10 +3,11 @@ SUMMARY = "Initialization, setup, and font files used by luna-sysmgr and luna-sysservice" AUTHOR = "Alekseyev Oleksandr " SECTION = "webos/base" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ -file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "tzdata python3-pytz-native" diff --git a/meta-webos/recipes-webos/luna-prefs/luna-prefs.bb b/meta-webos/recipes-webos/luna-prefs/luna-prefs.bb index 1f196e10f..352e4efcf 100644 --- a/meta-webos/recipes-webos/luna-prefs/luna-prefs.bb +++ b/meta-webos/recipes-webos/luna-prefs/luna-prefs.bb @@ -3,9 +3,11 @@ SUMMARY = "webOS preferences manager" AUTHOR = "Oleksandr Ivanov " SECTION = "webos/base" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "luna-service2 json-c sqlite3 glib-2.0 nyx-lib" diff --git a/meta-webos/recipes-webos/luna-service2-security-conf/luna-service2-security-conf.bb b/meta-webos/recipes-webos/luna-service2-security-conf/luna-service2-security-conf.bb index a612fe634..81b6c847d 100644 --- a/meta-webos/recipes-webos/luna-service2-security-conf/luna-service2-security-conf.bb +++ b/meta-webos/recipes-webos/luna-service2-security-conf/luna-service2-security-conf.bb @@ -3,10 +3,11 @@ SUMMARY = "webOS LS2 security configuration" AUTHOR = "Anatolii Sakhnik " SECTION = "webos/base" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ -file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " WEBOS_VERSION = "1.0.2-24_408d29b850749c79ecd6356ed8917df53116b4b3" diff --git a/meta-webos/recipes-webos/luna-service2/luna-service2.bb b/meta-webos/recipes-webos/luna-service2/luna-service2.bb index 9a4f712b0..b89c2a259 100644 --- a/meta-webos/recipes-webos/luna-service2/luna-service2.bb +++ b/meta-webos/recipes-webos/luna-service2/luna-service2.bb @@ -3,10 +3,11 @@ SUMMARY = "webOS Luna System Bus library, daemon, and utilities" AUTHOR = "Anatolii Sakhnik " SECTION = "webos/base" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ -file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "libpbnjson pmloglib glib-2.0 gtest systemd" diff --git a/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb b/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb index 853a47571..334b4db23 100644 --- a/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb +++ b/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb @@ -3,9 +3,11 @@ SUMMARY = "Provides preference, timezone and ringtone services" AUTHOR = "Keith Derrick " SECTION = "webos/base" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=7bd705f8ae3d5077cbd3da7078607d8b \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=7bd705f8ae3d5077cbd3da7078607d8b \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " VIRTUAL-RUNTIME_ntp ?= "sntp" diff --git a/meta-webos/recipes-webos/media-resource-calculator/media-resource-calculator.bb b/meta-webos/recipes-webos/media-resource-calculator/media-resource-calculator.bb index 8e2a70215..ec5671d06 100644 --- a/meta-webos/recipes-webos/media-resource-calculator/media-resource-calculator.bb +++ b/meta-webos/recipes-webos/media-resource-calculator/media-resource-calculator.bb @@ -5,9 +5,9 @@ AUTHOR = "Bhooshan Supe " SECTION = "webos/libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ - " + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +" DEPENDS = "libpbnjson" diff --git a/meta-webos/recipes-webos/mojoloader/mojoloader.bb b/meta-webos/recipes-webos/mojoloader/mojoloader.bb index 84666b05a..8c918b38d 100644 --- a/meta-webos/recipes-webos/mojoloader/mojoloader.bb +++ b/meta-webos/recipes-webos/mojoloader/mojoloader.bb @@ -3,9 +3,12 @@ SUMMARY = "JavaScript loader for foundation frameworks and other loadable libraries" AUTHOR = "Suresh Arumugam " SECTION = "webos/frameworks" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=3603ec4c4d5216855fff467ef39c1bb4" +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=3603ec4c4d5216855fff467ef39c1bb4 \ +" WEBOS_VERSION = "1.1-3_7c22039cbef6e78adc0b4165a0f6c7232eac24d8" PR = "r7" diff --git a/meta-webos/recipes-webos/mojoservicelauncher/mojoservicelauncher.bb b/meta-webos/recipes-webos/mojoservicelauncher/mojoservicelauncher.bb index 94f8a2662..8792e55f4 100644 --- a/meta-webos/recipes-webos/mojoservicelauncher/mojoservicelauncher.bb +++ b/meta-webos/recipes-webos/mojoservicelauncher/mojoservicelauncher.bb @@ -3,9 +3,12 @@ SUMMARY = "webOS component responsible for launching the node.js services" AUTHOR = "Steve Lemke " SECTION = "webos/frameworks" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=bc052cc0f232b815569ebc81a4ef6490" +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=bc052cc0f232b815569ebc81a4ef6490 \ +" DEPENDS = "boost libpbnjson" RDEPENDS:${PN} = "nodejs" diff --git a/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb b/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb index b66e17af3..ae806616f 100644 --- a/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb +++ b/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb @@ -3,9 +3,11 @@ DESCRIPTION = "Notification Manager" AUTHOR = "Suresh Arumugam " SECTION = "webos/base" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0 luna-service2 libpbnjson pmloglib boost libxml++" diff --git a/meta-webos/recipes-webos/nyx-lib/nyx-lib.bb b/meta-webos/recipes-webos/nyx-lib/nyx-lib.bb index 9f57a1591..6cdf64636 100644 --- a/meta-webos/recipes-webos/nyx-lib/nyx-lib.bb +++ b/meta-webos/recipes-webos/nyx-lib/nyx-lib.bb @@ -2,10 +2,11 @@ SUMMARY = "webOS portability layer - library" AUTHOR = "Keith Derrick " + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ -file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " SECTION = "webos/libs" diff --git a/meta-webos/recipes-webos/nyx-modules-qemux86/nyx-modules-qemux86.bb b/meta-webos/recipes-webos/nyx-modules-qemux86/nyx-modules-qemux86.bb index 134b7e979..75d067e68 100644 --- a/meta-webos/recipes-webos/nyx-modules-qemux86/nyx-modules-qemux86.bb +++ b/meta-webos/recipes-webos/nyx-modules-qemux86/nyx-modules-qemux86.bb @@ -3,10 +3,11 @@ SUMMARY = "webOS portability layer - qemux86 nyx module" AUTHOR = "Sapna Todwal " SECTION = "webos/base" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ -file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "nyx-lib glib-2.0 luna-service2 openssl udev" diff --git a/meta-webos/recipes-webos/nyx-modules/nyx-modules.bb b/meta-webos/recipes-webos/nyx-modules/nyx-modules.bb index b7f7af5c1..bd458cbb9 100644 --- a/meta-webos/recipes-webos/nyx-modules/nyx-modules.bb +++ b/meta-webos/recipes-webos/nyx-modules/nyx-modules.bb @@ -3,10 +3,11 @@ SUMMARY = "webOS portability layer - ${MACHINE}-specific modules" AUTHOR = "Keith Derrick " SECTION = "webos/base" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ -file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "nyx-lib glib-2.0 luna-service2 openssl udev" @@ -16,10 +17,13 @@ RDEPENDS:${PN} = "lsb-release gzip" WEBOS_VERSION = "7.1.0-18_75df81a8aaf23947e80f94161197b15712e294ed" PR = "r18" -EXTRA_OECMAKE += "-DDISTRO_VERSION:STRING='${DISTRO_VERSION}' -DDISTRO_NAME:STRING='${DISTRO_NAME}${WEBOS_DISTRO_NAME_SUFFIX}' \ - -DWEBOS_DISTRO_RELEASE_PLATFORMCODE:STRING='${WEBOS_DISTRO_RELEASE_PLATFORMCODE}' \ - -DWEBOS_DISTRO_RELEASE_CODENAME:STRING='${WEBOS_DISTRO_RELEASE_CODENAME}' \ - -DWEBOS_DISTRO_BUILD_ID:STRING='${WEBOS_DISTRO_BUILD_ID}'" +EXTRA_OECMAKE += "\ + -DDISTRO_VERSION:STRING='${DISTRO_VERSION}' \ + -DDISTRO_NAME:STRING='${DISTRO_NAME}${WEBOS_DISTRO_NAME_SUFFIX}' \ + -DWEBOS_DISTRO_RELEASE_PLATFORMCODE:STRING='${WEBOS_DISTRO_RELEASE_PLATFORMCODE}' \ + -DWEBOS_DISTRO_RELEASE_CODENAME:STRING='${WEBOS_DISTRO_RELEASE_CODENAME}' \ + -DWEBOS_DISTRO_BUILD_ID:STRING='${WEBOS_DISTRO_BUILD_ID}' \ +" # Only pass in a value for the Manufacturing version if one is actually # defined. Otherwise, let the CMake script provide the default value. diff --git a/meta-webos/recipes-webos/nyx-utils/nyx-utils.bb b/meta-webos/recipes-webos/nyx-utils/nyx-utils.bb index d8ada66eb..0beda5631 100644 --- a/meta-webos/recipes-webos/nyx-utils/nyx-utils.bb +++ b/meta-webos/recipes-webos/nyx-utils/nyx-utils.bb @@ -3,10 +3,11 @@ SUMMARY = "Command line utilities for the webOS Platform Portability Layer" AUTHOR = "Ed Chejlava " SECTION = "webos/base" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ -file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "nyx-lib glib-2.0" diff --git a/meta-webos/recipes-webos/openwnn-webos/openwnn-webos.bb b/meta-webos/recipes-webos/openwnn-webos/openwnn-webos.bb index af130061d..42a9a4eee 100755 --- a/meta-webos/recipes-webos/openwnn-webos/openwnn-webos.bb +++ b/meta-webos/recipes-webos/openwnn-webos/openwnn-webos.bb @@ -3,9 +3,12 @@ SUMMARY = "A Japanese IME library (input method editor for typing Japanese)" AUTHOR = "Pugalendhi Ganesan " SECTION = "libs" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://COPYING;md5=34e549453b3e73c1d635e93b4a01b96b \ - file://oss-pkg-info.yaml;md5=9e866a0c61ba2b36863c702e9a4c9163" +LIC_FILES_CHKSUM = " \ + file://COPYING;md5=34e549453b3e73c1d635e93b4a01b96b \ + file://oss-pkg-info.yaml;md5=9e866a0c61ba2b36863c702e9a4c9163 \ +" inherit pkgconfig inherit webos_enhanced_submissions diff --git a/meta-webos/recipes-webos/pdm-plugin/pdm-plugin.bb b/meta-webos/recipes-webos/pdm-plugin/pdm-plugin.bb index f74da26e6..818aee8f1 100644 --- a/meta-webos/recipes-webos/pdm-plugin/pdm-plugin.bb +++ b/meta-webos/recipes-webos/pdm-plugin/pdm-plugin.bb @@ -4,9 +4,11 @@ SUMMARY = " Pdm-plugin to support Physical device manager for webOS OSE" DESCRIPTION = "Pdm-plugin to initialize hardware required by Physical device manager in for webOS OSE" SECTION = "webos/services" AUTHOR = "Preetham Bhat " + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "com.webos.service.pdm" diff --git a/meta-webos/recipes-webos/pmklogd/pmklogd.bb b/meta-webos/recipes-webos/pmklogd/pmklogd.bb index 7a4d2b689..3e5fcf5e1 100644 --- a/meta-webos/recipes-webos/pmklogd/pmklogd.bb +++ b/meta-webos/recipes-webos/pmklogd/pmklogd.bb @@ -3,9 +3,11 @@ SUMMARY = "Kernel logging daemon" AUTHOR = "Anatolii Sakhnik " SECTION = "webos/base" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0" diff --git a/meta-webos/recipes-webos/pmlogctl/pmlogctl.bb b/meta-webos/recipes-webos/pmlogctl/pmlogctl.bb index 5b2f5bce4..13c8d8918 100644 --- a/meta-webos/recipes-webos/pmlogctl/pmlogctl.bb +++ b/meta-webos/recipes-webos/pmlogctl/pmlogctl.bb @@ -3,9 +3,11 @@ SUMMARY = "webOS logging control application" AUTHOR = "Anatolii Sakhnik " SECTION = "webos/base" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "pmloglib" diff --git a/meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb b/meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb index e71900cd7..92f99e395 100644 --- a/meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb +++ b/meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb @@ -3,9 +3,11 @@ SUMMARY = "webOS logging daemon" AUTHOR = "Gayathri Srinivasan " SECTION = "webos/base" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "pmloglib zlib glib-2.0 libpbnjson pmloglib-private luna-service2" diff --git a/meta-webos/recipes-webos/pmloglib/pmloglib.bb b/meta-webos/recipes-webos/pmloglib/pmloglib.bb index 451700fe9..8c4840789 100644 --- a/meta-webos/recipes-webos/pmloglib/pmloglib.bb +++ b/meta-webos/recipes-webos/pmloglib/pmloglib.bb @@ -3,10 +3,13 @@ SUMMARY = "webOS logging library" AUTHOR = "Gayathri Srinivasan " SECTION = "webos/libs" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " + DEPENDS = "glib-2.0 libpbnjson" WEBOS_VERSION = "3.3.0-7_70ff1081b4ff6d910b89b96c86c6e42a5fa29c6a" diff --git a/meta-webos/recipes-webos/pmtrace/pmtrace.bb b/meta-webos/recipes-webos/pmtrace/pmtrace.bb index bd33c53d5..6d81817eb 100644 --- a/meta-webos/recipes-webos/pmtrace/pmtrace.bb +++ b/meta-webos/recipes-webos/pmtrace/pmtrace.bb @@ -3,11 +3,13 @@ SUMMARY = "lttng-ust tracepoints wrapper library and performance tools" AUTHOR = "Andre Rosa " SECTION = "webos/libs" + LICENSE = "LGPL-2.1-only & MIT & Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE.LGPL;md5=e2aa4f66375a24019b0ff5e99cec40ad \ - file://LICENSE.MIT;md5=19b5d9061141f7ab05cfcfdd4404ed08 \ - file://README.md;md5=35108c1521572d2a526926333b233cd7 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://LICENSE.LGPL;md5=e2aa4f66375a24019b0ff5e99cec40ad \ + file://LICENSE.MIT;md5=19b5d9061141f7ab05cfcfdd4404ed08 \ + file://README.md;md5=35108c1521572d2a526926333b233cd7 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "lttng-ust libpbnjson pmloglib glib-2.0" diff --git a/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb b/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb index 1eb47b455..5fbfd82a8 100644 --- a/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb +++ b/meta-webos/recipes-webos/qml-app-components/qml-app-components.bb @@ -3,9 +3,10 @@ SUMMARY = "webOS QML app components" AUTHOR = "Jongson Kim " SECTION = "webos/libs" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ " DEPENDS = "qtdeclarative luna-service2 glib-2.0" diff --git a/meta-webos/recipes-webos/sam/sam.bb b/meta-webos/recipes-webos/sam/sam.bb index 21270293a..deaa8da58 100644 --- a/meta-webos/recipes-webos/sam/sam.bb +++ b/meta-webos/recipes-webos/sam/sam.bb @@ -3,9 +3,11 @@ DESCRIPTION = "System Application Manager" AUTHOR = "Sangwoo Kang " SECTION = "webos/base" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0 luna-service2 libpbnjson boost icu pmloglib procps libwebosi18n" diff --git a/meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb b/meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb index 185d2d0a2..c241e6b01 100644 --- a/meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb +++ b/meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb @@ -3,9 +3,11 @@ SUMMARY = "An extensible object oriented component used to add service components to webOS" AUTHOR = "Anatolii Sakhnik " SECTION = "webos/devel" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "librolegen glib-2.0 libpbnjson luna-service2" diff --git a/meta-webos/recipes-webos/settingsservice/settingsservice.bb b/meta-webos/recipes-webos/settingsservice/settingsservice.bb index 41d3de78e..20d9224da 100644 --- a/meta-webos/recipes-webos/settingsservice/settingsservice.bb +++ b/meta-webos/recipes-webos/settingsservice/settingsservice.bb @@ -3,9 +3,11 @@ SUMMARY = "Settings Service" AUTHOR = "Radhika S " SECTION = "webos/base" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0 glibmm luna-service2 libpbnjson pmloglib openssl libbson boost" diff --git a/meta-webos/recipes-webos/sleepd/sleepd.bb b/meta-webos/recipes-webos/sleepd/sleepd.bb index 8e72d987e..3f6d59f26 100644 --- a/meta-webos/recipes-webos/sleepd/sleepd.bb +++ b/meta-webos/recipes-webos/sleepd/sleepd.bb @@ -3,10 +3,11 @@ SUMMARY = "Sleep scheduling policy daemon" AUTHOR = "Sapna Todwal " SECTION = "webos/base" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ -file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ -file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "nyx-lib luna-service2 json-c libxml2 sqlite3 glib-2.0" diff --git a/meta-webos/recipes-webos/test-apps/bareapp.bb b/meta-webos/recipes-webos/test-apps/bareapp.bb index 629425228..b54a637a3 100644 --- a/meta-webos/recipes-webos/test-apps/bareapp.bb +++ b/meta-webos/recipes-webos/test-apps/bareapp.bb @@ -3,7 +3,7 @@ require webos-open-test-apps.inc LIC_FILES_CHKSUM += " \ -file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " PR = "${INC_PR}.2" diff --git a/meta-webos/recipes-webos/test-apps/com.webos.app.test.enact.bb b/meta-webos/recipes-webos/test-apps/com.webos.app.test.enact.bb index acdc41fa6..51873901f 100644 --- a/meta-webos/recipes-webos/test-apps/com.webos.app.test.enact.bb +++ b/meta-webos/recipes-webos/test-apps/com.webos.app.test.enact.bb @@ -3,7 +3,7 @@ require webos-open-test-apps.inc LIC_FILES_CHKSUM += " \ -file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " PR = "${INC_PR}.2" diff --git a/meta-webos/recipes-webos/test-apps/com.webos.app.test.webosose.bb b/meta-webos/recipes-webos/test-apps/com.webos.app.test.webosose.bb index 0ac0711d4..f14f1290f 100644 --- a/meta-webos/recipes-webos/test-apps/com.webos.app.test.webosose.bb +++ b/meta-webos/recipes-webos/test-apps/com.webos.app.test.webosose.bb @@ -3,7 +3,7 @@ require webos-open-test-apps.inc LIC_FILES_CHKSUM += " \ -file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " PR = "${INC_PR}.2" diff --git a/meta-webos/recipes-webos/test-apps/com.webos.app.test.youtube.bb b/meta-webos/recipes-webos/test-apps/com.webos.app.test.youtube.bb index 48cd05d84..431f83e21 100644 --- a/meta-webos/recipes-webos/test-apps/com.webos.app.test.youtube.bb +++ b/meta-webos/recipes-webos/test-apps/com.webos.app.test.youtube.bb @@ -3,7 +3,7 @@ require webos-open-test-apps.inc LIC_FILES_CHKSUM += " \ -file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " PR = "${INC_PR}.3" diff --git a/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb b/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb index 92f243ed7..ec7b5e638 100644 --- a/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb +++ b/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb @@ -3,10 +3,11 @@ SUMMARY = "umediaserver configs installation" AUTHOR = "Peter Nordström " SECTION = "webos/base" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " WEBOS_VERSION = "1.0.0-14_c86ef2e55ed374db383e8ca8946b7c2c73c9a61d" diff --git a/meta-webos/recipes-webos/umediaserver/umediaserver.bb b/meta-webos/recipes-webos/umediaserver/umediaserver.bb index a1c615361..fce5d288e 100644 --- a/meta-webos/recipes-webos/umediaserver/umediaserver.bb +++ b/meta-webos/recipes-webos/umediaserver/umediaserver.bb @@ -3,10 +3,11 @@ SUMMARY = "webOS uMediaserver daemon and utilities" AUTHOR = "Ian Cain " SECTION = "webos/base" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0 libpbnjson libconfig swig-native libxml2 luna-service2 pmloglib boost luna-prefs" diff --git a/meta-webos/recipes-webos/videooutputd/com.webos.service.videooutput.bb b/meta-webos/recipes-webos/videooutputd/com.webos.service.videooutput.bb index acb3c98de..b6308af6e 100644 --- a/meta-webos/recipes-webos/videooutputd/com.webos.service.videooutput.bb +++ b/meta-webos/recipes-webos/videooutputd/com.webos.service.videooutput.bb @@ -3,10 +3,11 @@ SUMMARY = "Service which controls video output" AUTHOR = "Kwanghee Lee " SECTION = "webos/services" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " VIRTUAL-RUNTIME_val-impl ??= "videooutput-adaptation-layer-mock" diff --git a/meta-webos/recipes-webos/videooutputd/videooutput-adaptation-layer-api.bb b/meta-webos/recipes-webos/videooutputd/videooutput-adaptation-layer-api.bb index 4673c082c..1bf8749c3 100644 --- a/meta-webos/recipes-webos/videooutputd/videooutput-adaptation-layer-api.bb +++ b/meta-webos/recipes-webos/videooutputd/videooutput-adaptation-layer-api.bb @@ -2,10 +2,11 @@ SUMMARY = "Vidououtputd Adaptation Layer (VAL) API definition and test harness" SECTION = "webos/libs" + LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ - file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ + file://LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0" diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb index 1b43771d8..554a5c23f 100644 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb @@ -4,8 +4,9 @@ SUMMARY = "webOS fluentbit plugins" AUTHOR = "Sangwoo Kang " LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ - file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10 \ + file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " DEPENDS = "glib-2.0 luna-service2 libpbnjson fluentbit" diff --git a/meta-webos/recipes-webos/webos-nettools/webos-nettools.bb b/meta-webos/recipes-webos/webos-nettools/webos-nettools.bb index e4a45d957..2d125c795 100644 --- a/meta-webos/recipes-webos/webos-nettools/webos-nettools.bb +++ b/meta-webos/recipes-webos/webos-nettools/webos-nettools.bb @@ -2,13 +2,14 @@ DESCRIPTION = "Luna-service2 service providing network utility tools like ping and arping" AUTHOR = "Rakes Pani " +SECTION = "webos/services" + LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=2763f3ed850f8412903ea776e0526bea \ - file://oss-pkg-info.yaml;md5=19d9ec0fe1295511ff6de5bf74c43d46 \ +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=2763f3ed850f8412903ea776e0526bea \ + file://oss-pkg-info.yaml;md5=19d9ec0fe1295511ff6de5bf74c43d46 \ " -SECTION = "webos/services" - DEPENDS = "luna-service2 libpbnjson glib-2.0" RDEPENDS:${PN} = "iputils" @@ -24,6 +25,5 @@ inherit webos_cmake inherit webos_daemon inherit webos_system_bus - SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" From e749616b5b156fcc58b2ba13607361ec74af01e3 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 22 Jun 2022 10:06:37 +0000 Subject: [PATCH 0459/2022] linux-yocto: improve indentation and use common variables :Release Notes: webOS is using 4 spaces for multiline indentation with closing quote on separate line. :Detailed Notes: Intentionally not bumping PR as there is now change other than white-space. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-7292] CCC: Various build fixes Change-Id: I21a987695c6f7a966c9fe0e721a83f0ba2f16884 --- .../linux/linux-yocto_%.bbappend | 59 ++++++++----------- 1 file changed, 26 insertions(+), 33 deletions(-) diff --git a/meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend b/meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend index e22fd82dd..163543a79 100644 --- a/meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend +++ b/meta-webos/recipes-kernel/linux/linux-yocto_%.bbappend @@ -7,29 +7,24 @@ PE = "1" FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" -SRC_URI:append:qemux86 = " file://crypto.cfg \ - file://my_gfx.cfg \ - file://vbox_gfx.cfg \ - file://sound.cfg \ - file://enable_uinput.cfg \ - file://network_testing.cfg \ - file://0001-change-keymax-value.patch \ - file://file_system.cfg \ - file://bluetooth_ext.cfg \ - file://oomd.cfg \ - file://zram.cfg \ +SRC_URI_EMULATOR = " \ + file://crypto.cfg \ + file://my_gfx.cfg \ + file://vbox_gfx.cfg \ + file://sound.cfg \ + file://enable_uinput.cfg \ + file://network_testing.cfg \ + file://0001-change-keymax-value.patch \ + file://file_system.cfg \ + file://bluetooth_ext.cfg \ + file://oomd.cfg \ + file://zram.cfg \ " -SRC_URI:append:qemux86-64 = " file://crypto.cfg \ - file://my_gfx.cfg \ - file://vbox_gfx.cfg \ - file://sound.cfg \ - file://enable_uinput.cfg \ - file://network_testing.cfg \ - file://0001-change-keymax-value.patch \ - file://file_system.cfg \ - file://bluetooth_ext.cfg \ - file://oomd.cfg \ - file://zram.cfg \ +SRC_URI:append:qemux86 = " \ + ${SRC_URI_EMULATOR} \ +" +SRC_URI:append:qemux86-64 = " \ + ${SRC_URI_EMULATOR} \ " KERNEL_FEATURES:append:qemux86 = " features/bluetooth/bluetooth-usb.scc" @@ -39,18 +34,16 @@ KERNEL_FEATURES:append:qemux86-64 = " features/bluetooth/bluetooth-usb.scc" KERNEL_FEATURES:append:qemux86 = " features/profiling/profiling.cfg" KERNEL_FEATURES:append:qemux86-64 = " features/profiling/profiling.cfg" - +KERNEL_MODULE_AUTOLOAD_EMULATOR = " \ + vboxguest \ + snd-pcm \ + ac97_bus \ + snd-ac97-codec \ + snd-intel8x0 \ +" KERNEL_MODULE_AUTOLOAD:append:qemux86 = "\ - vboxguest \ - snd-pcm \ - ac97_bus \ - snd-ac97-codec \ - snd-intel8x0 \ + ${KERNEL_MODULE_AUTOLOAD_EMULATOR} \ " KERNEL_MODULE_AUTOLOAD:append:qemux86-64 = "\ - vboxguest \ - snd-pcm \ - ac97_bus \ - snd-ac97-codec \ - snd-intel8x0 \ + ${KERNEL_MODULE_AUTOLOAD_EMULATOR} \ " From e029b399785fedf05d19e8dac87ea18ba4704f8d Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Fri, 24 Jun 2022 17:36:45 +0900 Subject: [PATCH 0460/2022] ose: webruntime_91=20 :Release Notes: - Fix static analysis issue :Detailed Notes: webruntime_91: submissions/19..submissions/20 3c7d23aca0 [op][n_upsable][injection] Fixup crash in DoCall operation e3f8a3524b [op][n_ups][pal] Resolve static analysis issues in PAL's LunaClient implementation 662fdf5b57 [op][n_upsable][static_analysis] Avoid time_t :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRO-6563] [Static_Analysis][High_Impact] Use of 32-bit time_t [WRO-7207] [Static Analysis] 9197179 Using a moved object & 9197186 Using a moved object [WRO-7211] [Static Analysis] 9197222 Using a moved object & 9326297 Using a moved object [WRO-7357] CCC: ose: webruntime_91=20 pro: webruntime_94=pro.20 Change-Id: I632fd4092ee4483893a859aadf086bdb1d8130fa --- meta-webos/recipes-webos/chromium/webruntime-repo_91.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc index 12c8dfb08..a10b4d8d6 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=c31f1ae166739be9ca186deacf4b32e4" WEBOS_REPO_NAME = "chromium91" -WEBOS_VERSION = "91.0.4472.114-19_c024dab06aef29336785ff514d34ee53a55c7a2d" +WEBOS_VERSION = "91.0.4472.114-20_569c81589986ae4773558afc3328033acd04bba6" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" From f76b2b88d0123e515e813c92c9997b200f401db2 Mon Sep 17 00:00:00 2001 From: "mark.yang" Date: Tue, 21 Jun 2022 11:12:38 +0900 Subject: [PATCH 0461/2022] ose: lsb-release=webos10 :Release Notes: Modify versioning policy of lsb-release Upgrade dist-update (v1.0.1) :Detailed Notes: Package version is updated according to webos-release Add opkg update feature in dist-update :Testing Performed: Local test suite. :QA Notes: N/A :Issues Addressed: [WRO-7183] CCC: lsb-release=webos10 [WRO-7182] Modify versioning policy of lsb-release Change-Id: I1af0e67d5a38216818dc0aa4b23e190d0ea3bf56 --- .../lsb/lsb-release/dist-update | 104 +++++++----------- .../lsb/lsb-release_%.bbappend | 9 +- 2 files changed, 43 insertions(+), 70 deletions(-) diff --git a/meta-webos/recipes-extended/lsb/lsb-release/dist-update b/meta-webos/recipes-extended/lsb/lsb-release/dist-update index 5cdf5987a..e3d5e951e 100644 --- a/meta-webos/recipes-extended/lsb/lsb-release/dist-update +++ b/meta-webos/recipes-extended/lsb/lsb-release/dist-update @@ -1,42 +1,34 @@ #!/usr/bin/env python3 -__DIST_UPDATE_VERSION__ = "1.0.0" +__DIST_UPDATE_VERSION__ = "1.0.1" PACKAGE_FEED_URI = "@PACKAGE_FEED_URI@" PACKAGE_FEED_BASE_PATH = "@PACKAGE_FEED_BASE_PATH@" PACKAGE_DISTRO = "@PACKAGE_DISTRO@" TRIMED_DISTRO_VERSION = "@TRIMED_DISTRO_VERSION@" from collections import deque +from collections import defaultdict import errno import argparse import subprocess import os import sys +import glob def parse(): parser = argparse.ArgumentParser() - parser.add_argument('-V','--version', help="Show installed distro image version", action="store_true", dest='installed_version') group = parser.add_mutually_exclusive_group() - group.add_argument('--show_versions', help="Show All Fetchable versions", action="store_true", dest='show_all_versions') + group.add_argument('--show-versions', help="Show All Fetchable versions", action="store_true", dest='show_all_versions') group.add_argument('--update', help="Update package list", action="store_true", dest='update') - group.add_argument('--upgrade', help="Upgrade package list to ", metavar="", default=None) args = parser.parse_args() if len(sys.argv) <= 1: parser.print_help() exit(0) - if args.installed_version: - os.system('lsb_release -rs') - exit(0) opkg = Opkg() if args.show_all_versions: opkg.show_all_versions = True elif args.update: opkg.update = True - elif args.upgrade is None: - print('Specify Upgrade version') - else: - opkg.upgrade = True - opkg.upgrade_version = args.upgrade return opkg def bash_cmd(cmd: str): @@ -49,29 +41,18 @@ def bash_cmd(cmd: str): class Opkg(): def __init__(self): - self.installed_version = self.getInstalledVersionString() self.feed_uri = self.getCorrectURI() self.support_version = self.getSupportVersions() self.sysconfdir = '/etc/opkg' - self.upgradable_version = list() + self.installed_pkg_conf = self.getInstalledPkgConf(base_path=self.sysconfdir) self.show_all_versions = False self.update = False - self.upgrade = False - self.upgrade_version = None - - def getInstalledVersionString(self): - ret = bash_cmd('lsb_release -rs') - if ret[0] != 0: - print('Error: %s' % (ret[1])) - exit(ret[0]) - installed_version=ret[1].strip() - return installed_version def getCorrectURI(self): - return os.path.join(PACKAGE_FEED_URI,PACKAGE_FEED_BASE_PATH,PACKAGE_DISTRO,TRIMED_DISTRO_VERSION) + return os.path.join(PACKAGE_FEED_URI,PACKAGE_FEED_BASE_PATH,PACKAGE_DISTRO) def getSupportVersions(self): - print("[INFO] fetch : %s" % self.feed_uri) + print("fetch : %s" % self.feed_uri) ret = bash_cmd('curl -sL %s --list-only | egrep \'\[DIR\]\' | awk -F \'\' \'{print$2}\' | awk -F \'>\' \'{print$NF}\'' % (self.feed_uri)) if ret[0] != 0: print('Error occured in curl : %s' % (ret[1])) @@ -83,51 +64,46 @@ class Opkg(): fetch_dirs.append(var) del dirs return fetch_dirs - - def showAllVersions(self): - print('show all versions') + + def getInstalledPkgConf(self,base_path): + pkg_feed_conf = defaultdict(bool) + for i in glob.iglob(base_path+'/*.conf'): + installed_conf_version=os.path.basename(i).rstrip('.conf') + if not installed_conf_version[0].isdigit(): + continue + if installed_conf_version+'/' in self.support_version: + pkg_feed_conf[installed_conf_version]=True for i in self.support_version: - print(i[:-1]) - exit(0) + if pkg_feed_conf[i[:-1]] == False: + pkg_feed_conf[i[:-1]] = False + return pkg_feed_conf - def Update(self, silent=False): - if not silent: - print("Installed image version: %s" % self.installed_version) + def showAllVersions(self,isUpdate=False): + self.installed_pkg_conf = self.getInstalledPkgConf(base_path=self.sysconfdir) for i in self.support_version: - if self.installed_version < i[:-1]: - self.upgradable_version.append(i[:-1]) - if not silent: - print('Upgradable image version') - for i in self.upgradable_version: - print(i) - - def Upgrade(self, version: str): - self.Update(silent=True) - if not self.isUpgradable(version): - print('Not Found version : %s' % version) - exit(1) - try: - os.makedirs(self.sysconfdir) - except OSError as exception: - if exception.errno != errno.EEXIST: - raise - os.chdir(self.sysconfdir) - with open('%s.conf' % (version), 'w') as f: - os.fchmod(f.fileno(), 0o644) - f.write('src/gz %s \"%s\"' % (version, os.path.join(self.feed_uri,version))) - print('Add package feed version : %s' % (version)) + if self.installed_pkg_conf[i[:-1]] == True: + print(f'{i[:-1]} [Installed]') + else: + print(f'{i[:-1]} [Not Installed]') + if not isUpdate: + exit(0) - def isUpgradable(self, version: str): - for i in self.upgradable_version: - if i == version: - return True - return False + def Update(self): + for k,v in self.installed_pkg_conf.items(): + if not v: + os.chdir(self.sysconfdir) + with open('%s.conf' % (k), 'w') as f: + os.fchmod(f.fileno(), 0o644) + f.write('src/gz %s \"%s\"' % (k, os.path.join(self.feed_uri,k))) + print('Add package feed version : %s' % (k)) + ret = bash_cmd('opkg update') + print(ret[1]) + print("To upgrade platform latest distro version.\nrun '$ opkg upgrade'") if __name__ == '__main__': opkg = parse() if opkg.show_all_versions: opkg.showAllVersions() elif opkg.update: - opkg.Update() - elif opkg.upgrade: - opkg.Upgrade(opkg.upgrade_version) \ No newline at end of file + opkg.showAllVersions(isUpdate=True) + opkg.Update() \ No newline at end of file diff --git a/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend b/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend index 4cfd536b2..7cc6175ca 100644 --- a/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend +++ b/meta-webos/recipes-extended/lsb/lsb-release_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webos9" +EXTENDPRAUTO:append = "webos10.${WEBOS_DISTRO_BUILD_ID}" FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" @@ -33,14 +33,11 @@ do_install:append() { sed -i -e 's/^CHECKFIRST=.*/CHECKFIRST="\${sysconfdir}\/${BUILD_INFO_FILE}"/' ${D}${base_bindir}/lsb_release echo "${BUILD_DISTRIB_ID} release ${DISTRO_VERSION}-${WEBOS_DISTRO_BUILD_ID} (${WEBOS_DISTRO_RELEASE_CODENAME})" > ${D}${sysconfdir}/${BUILD_INFO_FILE} - # install dist-update if [ ! -z ${PACKAGE_FEED_URI} -a ! -z ${PACKAGE_FEED_BASE_PATH} ]; then + # install dist-update install -d ${D}${bindir} install -m 0755 ${S}/dist-update ${D}${bindir} - fi - - # install ${TRIMED_DISTRO_VERSION}.conf - if [ ! -z ${PACKAGE_FEED_URI} -a ! -z ${PACKAGE_FEED_BASE_PATH} ]; then + # install ${TRIMED_DISTRO_VERSION}.conf install -d ${D}${sysconfdir}/opkg install -m 0644 ${S}/${TRIMED_DISTRO_VERSION}.conf ${D}${sysconfdir}/opkg fi From 434bdf040f4e244e1a7c964a5165bebe265861cb Mon Sep 17 00:00:00 2001 From: "myonggu.lee" Date: Tue, 28 Jun 2022 16:54:41 +0900 Subject: [PATCH 0462/2022] fix_branch_name.bbclass: Update to display a message when not in use :Release Notes: If this bbclass is inherited but not applied, a warning message is displayed. :Detailed Notes: :Testing Performed: :QA Notes: No change to image. :Issues Addressed: [WRO-7475] Update fix_branch_name.bbclass to display a message when not in use Change-Id: Idac61dce1f5b793c59b3c7c731f2bdef51317cb2 --- meta-webos/classes/fix_branch_name.bbclass | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/meta-webos/classes/fix_branch_name.bbclass b/meta-webos/classes/fix_branch_name.bbclass index 1e9b80e57..bd0b67821 100644 --- a/meta-webos/classes/fix_branch_name.bbclass +++ b/meta-webos/classes/fix_branch_name.bbclass @@ -2,15 +2,20 @@ # # fix_branch_name # -# It is used to change the branch name specified in 'SRC_URI'. -# This can be used for workround when branch name is changed from master to another on github etc. +# This is mainly used to temporarily change the branch name specified in 'SRC_URI' +# This can be used as a workaround when the branch name is changed from master +# to something else unexpectedly on github, etc. +# If this bbclass is inherited but not applied, a warning message is displayed. # FIX_BRANCH_FROM ?= "branch=master" FIX_BRANCH_TO ?= "branch=main" python() { - src_uri = d.getVar('SRC_URI').replace(d.getVar('FIX_BRANCH_FROM'),d.getVar('FIX_BRANCH_TO')) - d.delVar('SRC_URI') - d.setVar('SRC_URI',src_uri) + src_uri_org = d.getVar('SRC_URI') + src_uri_new = src_uri_org.replace(d.getVar('FIX_BRANCH_FROM'),d.getVar('FIX_BRANCH_TO')) + if src_uri_org == src_uri_new: + bb.warn("inherit fix_branch_name line has no effect and can be removed.") + else: + d.setVar('SRC_URI',src_uri_new) } From e8bf6223a14d9f8a63dc8fde2c4626500162c094 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Thu, 30 Jun 2022 09:23:57 +0900 Subject: [PATCH 0463/2022] ose: wam=60 :Release Notes: Fix static analysis issue :Detailed Notes: wam: submissions/59..submissions/60 7a2bea7 [op][static_analysis] Avoid time_t :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRO-6563] [Static_Analysis][High_Impact] Use of 32-bit time_t [WRO-7545] CCC: wam={ose:60 pro:176} Change-Id: I4462dae38736271d36bbc906d3adabba2893a8c5 --- meta-webos/recipes-webos/wam/wam.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index c45a5df1d..191ea0b24 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -18,7 +18,7 @@ RDEPENDS:${PN} += "util-linux" VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" -WEBOS_VERSION = "1.0.2-59_9a5ce61cdbfb7ccf5dd925237ddf683306adf78f" +WEBOS_VERSION = "1.0.2-60_16eac384ecb2f5fb25736ca2f198974dc36056c8" PR = "r45" WAM_BUILD_SYSTEM = "webos_qmake6" From 7c99ba01f499b30882b1d5cf33f03452c5435807 Mon Sep 17 00:00:00 2001 From: "venugopal.k" Date: Tue, 5 Jul 2022 10:12:27 +0530 Subject: [PATCH 0464/2022] ose: sam=64 :Release Notes: Fix timeout for retrying killing running applications :Detailed Notes: The GLib function used to set up a timeout to wait for closing or killing applications, g_timeout_add, accepts an "interval" parameter in milliseconds. But, when an application is closed, the close transition timeout is set to 1 (1ms), when it was actually expected to wait 1 second per attempt to retry closing/killing an application.Fix the timeout (and define a constant to store the value). sam: submissions/63..submissions/64 445570c Fix timeout for retrying killing running applications :Testing Performed: Test Result updated in WRO-8090 :QA Notes: N/A :Issues Addressed: [WRO-8090] CCC : sam=64 [WRO-7198][RDX_CRASH][webos] /usr/bin/WebAppMgr in __poll (libc.so.6 + 0xc78e4) Change-Id: Id1991e072765cb8a5c6aaf99aa14b52af31cc2bd --- meta-webos/recipes-webos/sam/sam.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/sam/sam.bb b/meta-webos/recipes-webos/sam/sam.bb index deaa8da58..903660392 100644 --- a/meta-webos/recipes-webos/sam/sam.bb +++ b/meta-webos/recipes-webos/sam/sam.bb @@ -16,7 +16,7 @@ RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_webos-customization}" VIRTUAL-RUNTIME_webos-customization ?= "" -WEBOS_VERSION = "2.0.0-63_6204f493184cbbceaf4cb26ab2fa2e34263dd818" +WEBOS_VERSION = "2.0.0-64_83502ad22f40344f5b4a94a6e68da3800121c2a8" PR = "r26" inherit webos_component From eb4109be169305f86c23b3232ce1960824558a89 Mon Sep 17 00:00:00 2001 From: Muniraju Date: Tue, 5 Jul 2022 12:50:59 +0530 Subject: [PATCH 0465/2022] com.webos.app.enactbrowser=55 :Release Notes: Fix favicon fetch issue by extract the origin from the src :Detailed Notes: com.webos.app.enactbrowser: submissions/54..submissions/55 e72b8fd Fix for favicon fetch issue :Testing Performed: Please check CCC tickets. :QA Notes: NA :Issues Addressed: [WRO-8095] CCC: com.webos.app.enactbrowser=55 [WRO-7307] [OSE-RPi4]: Favicons are not displayed Change-Id: Ic6c365b8882ea5eb7bfcad693581db34721531dc --- .../com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb index 341543f32..4024f4654 100644 --- a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb +++ b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=72b3e3cef46e5ab3e175e5b515dc3b18 \ " -WEBOS_VERSION = "1.0.0-54_6e2f0bae600b4ab57d9c847a7a00e18b44923be7" +WEBOS_VERSION = "1.0.0-55_f2a34ecd6e2c180419b2fc8f485647bdb39c99b5" PR = "r16" inherit webos_public_repo From bce0694fc249072552bf53b72c8a85bfc65c4884 Mon Sep 17 00:00:00 2001 From: Bharath Patil Date: Thu, 7 Jul 2022 17:26:29 +0530 Subject: [PATCH 0466/2022] ose: webruntime_91=21 :Release Notes: - Malware sites detection using Web Risk API :Detailed Notes: webruntime_91: submissions/20..submissions/21 b2be3e2079 [op][n_upsable][app_shell] Implement MalwareDetectionService :Testing Performed: CCC testing :QA Notes: NA :Issues Addressed: [WRO-6302] Implementation of Malware site Detection using Web Risk API [WRO-8177] CCC: ose: webruntime_91=21 Change-Id: If5c8f3c741e2ad0a6e66193b34f445e69c4b2877 --- meta-webos/recipes-webos/chromium/webruntime-repo_91.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc index a10b4d8d6..fb3c13c77 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=c31f1ae166739be9ca186deacf4b32e4" WEBOS_REPO_NAME = "chromium91" -WEBOS_VERSION = "91.0.4472.114-20_569c81589986ae4773558afc3328033acd04bba6" +WEBOS_VERSION = "91.0.4472.114-21_cc098d71225116d3a0a0e3548daf6505562e66b8" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" From 387f2d115a32c173ca6b411ab6d4d02137b285b3 Mon Sep 17 00:00:00 2001 From: "paramesh.kuberappa" Date: Wed, 6 Jul 2022 13:29:35 +0530 Subject: [PATCH 0467/2022] ose: com.webos.service.mediaindexer=22 media-codec-interface=8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit :Release Notes: Fix coverity issues vdec resource handling acquire/release reformating :Detailed Notes: com.webos.service.mediaindexer: submissions/21..submissions/22 09b2b7d Fix coverity issues of mediaindexer component in OSE media-codec-interface: submissions/7..submissions/8 02b7036 Fix coverity issues for OSE media-codec-interface 553b206 fixup! Vdec resource handling acquire/release reformating :Testing Performed: Test results are updated in WRO-8142 :QA Notes: NA :Issues Addressed: [WRO-8142] CCC: com.webos.service.mediaindexer=22 media-codec-interface=8 [WRO-7883] Fix Static Issues for MediaIndexer component in OSE [WRO-6943] Fixing Static Issues for Media-Codec-Interface in OSE [WRO-7338] media-codec-interface fails to build for rpi3(-64) after WRO-6499 Change-Id: Iac5578a65fe89092d28772712e808bdf1368f68a --- .../com.webos.service.mediaindexer.bb | 2 +- .../media-codec-interface/media-codec-interface.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb b/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb index a628350ac..a18011799 100644 --- a/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb +++ b/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " -WEBOS_VERSION = "1.0.0-21_dc4b39e9302d7c9b2822e19f9e905bcd06bb86f1" +WEBOS_VERSION = "1.0.0-22_db4e8b7cdb20f3cfccafa572f0aac3f97e058957" PR = "r8" inherit webos_component diff --git a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb index 26f458ddc..29ff44eca 100644 --- a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb +++ b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb @@ -21,7 +21,7 @@ COMPATIBLE_MACHINE = "^qemux86$|^qemux86-64$|^raspberrypi3$|^raspberrypi3-64$|^r DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad umediaserver media-resource-calculator" DEPENDS:append:rpi = " virtual/libomxil" -WEBOS_VERSION = "1.0.0-7_e987aaf361d9e6d94c0b446c6e3bee544c5fdf47" +WEBOS_VERSION = "1.0.0-8_d957796c4bd36391f12a443bdddcf5a17362a3e8" PR = "r5" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE};name=main" From bbec6dd18f0d8a8a8b1b7c6e9af51c714ab90fae Mon Sep 17 00:00:00 2001 From: Myungchul Kim Date: Thu, 7 Jul 2022 13:54:35 +0900 Subject: [PATCH 0468/2022] ose: webos-fluentbit-plugins=33 :Release Notes: Enable data collection pipeline :Detailed Notes: webos-fluentbit-plugins: submissions/32..submissions/33 2ef43f1 Revert "Stop data collection pipeline" :Testing Performed: See the CCC Jira ticket :QA Notes: N/A :Issues Addressed: [WRO-8169] CCC: webos-fluentbit-plugins=33 Change-Id: I7aae12d11dedbc2ad5526e99ef4bd1ebc65c4866 --- .../webos-fluentbit-plugins/webos-fluentbit-plugins.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb index 554a5c23f..55b07dc0b 100644 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb @@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 luna-service2 libpbnjson fluentbit" RDEPENDS:${PN} = "nyx-utils python3-core python3-requests python3-atlassian-python-api" -WEBOS_VERSION = "1.0.0-32_2d41ac17e6a120dc8c24121583de864546b3f407" +WEBOS_VERSION = "1.0.0-33_f0dd348555a483b6e6de8456e515df39a51cb89a" PR = "r6" inherit webos_component From bd79e36ec4cff1f30029d4e8a708d08df11a3778 Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Mon, 11 Jul 2022 16:42:33 +0900 Subject: [PATCH 0469/2022] luna-surfacemanager=377 :Release Notes: Fix LSM crash and static analysis :Detailed Notes: luna-surfacemanager: submissions/376..submissions/377 3b58487 Avoid SIGABRT when actual screen less than requested 5a3a7da Fix AUTO_CAUSES_COPY for static analysis 722c3a8 Fix REVERSE_INULL for static analysis :Testing Performed: See the CCC jira ticket :QA Notes: N/A :Issues Addressed: [WRO-8131] luna-surfacemanager=377 Change-Id: I176c4ed3facdff00d2371cbde06da6a3734c2e26 --- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index 54e040675..a468c774a 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0 qtwayland-webos" -WEBOS_VERSION = "2.0.0-376_4e4a9881fd5a13c695da9d073175b4e37070cc58" +WEBOS_VERSION = "2.0.0-377_906acef34467bdcaf0246cab2367ba8c817ff1e7" PR = "r54" inherit webos_qmake6 From e92ecf86e44531d814366f507fa4c14ca62e3acb Mon Sep 17 00:00:00 2001 From: Bharath Patil Date: Thu, 14 Jul 2022 18:25:30 +0530 Subject: [PATCH 0470/2022] ose: webruntime_91=22 :Release Notes: - Fix for receiving auth key in AES-CTR encrypted format and static issue :Detailed Notes: webruntime_91: submissions/21..submissions/22 583cd32823 fixup! [op][n_upsable][app_shell] Implement MalwareDetectionService :Testing Performed: CCC testing :QA Notes: NA :Issues Addressed: [WRO-7982] Implement auth key decryption in AES-CTR encrypted format and Fix static issue [WRO-8404] CCC: ose: webruntime_91=22 Change-Id: I4a4948ea9cf31821d52f7b002e596dc274225f08 --- meta-webos/recipes-webos/chromium/webruntime-repo_91.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc index fb3c13c77..4e2261193 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=c31f1ae166739be9ca186deacf4b32e4" WEBOS_REPO_NAME = "chromium91" -WEBOS_VERSION = "91.0.4472.114-21_cc098d71225116d3a0a0e3548daf6505562e66b8" +WEBOS_VERSION = "91.0.4472.114-22_64e4cd0408dfc7a49294f3109cacc2622f491f6e" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" From 93285c08d95f0def9cf332a673ce5f782044001c Mon Sep 17 00:00:00 2001 From: Muniraju Date: Thu, 14 Jul 2022 13:09:53 +0530 Subject: [PATCH 0471/2022] com.webos.app.enactbrowser=56 :Release Notes: Close Previous sites VKB :Detailed Notes: com.webos.app.enactbrowser: submissions/55..submissions/56 6625e8c Close Previous sites VKB :Testing Performed: Please check CCC tickets. :QA Notes: NA :Issues Addressed: [WRO-8391] CCC: com.webos.app.enactbrowser=56 [WRO-7637] [OSE-RPi4]: VKB of previous sites is displayed in next sites Change-Id: Ic426a9b466c3843afc1966dc63ada722e54f0a9d --- .../com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb index 4024f4654..105a7814c 100644 --- a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb +++ b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=72b3e3cef46e5ab3e175e5b515dc3b18 \ " -WEBOS_VERSION = "1.0.0-55_f2a34ecd6e2c180419b2fc8f485647bdb39c99b5" +WEBOS_VERSION = "1.0.0-56_98d6d8d3a1506a92b482001a5b1aba298520e29e" PR = "r16" inherit webos_public_repo From 96f21c7fd3b27a97b9f68bafcbd539ace00e51df Mon Sep 17 00:00:00 2001 From: "seungchul.han" Date: Thu, 30 Jun 2022 12:53:46 +0900 Subject: [PATCH 0472/2022] edgeai-vision=17-r4 tensorflow-lite=r4 :Release Notes: Support model path configuration Implement YuNetFaceDetector move installing headers and pkgconfig to CMakeLists.txt fix tensorflow lite patch for auto delegation support when using gpu :Detailed Notes: Support model path configuration add YuNetFaceDetector move installing headers and pkgconfig to CMakeLists.txt Fix GLES so library name in arm-compute-library edgeai-vision: submissions/11..submissions/17 fe0a151 Support model path configuration 5c1270f Update oss-pkg-info 8257572 Implement YuNetFaceDetector 411a831 fix .pc file 96fe15a modify typo 5ada7d4 move installing headers and pkgconfig to CMakeLists.txt :Testing Performed: Local test :QA Notes: N/A :Issues Addressed: [WRO-8389] CCC: edgeai-vision=17-r4 tensorflow-lite=r4 [WRO-7579] edgeai vision api can use auto delegation library [WRO-7776] Modify build configuration to build and install unit test and example following the selected models [WRO-7777] Implement to change base model path for edgeai-vision [WRO-7636] Investigate how dequantize node works in TensorFlow Lite [WRO-7638] when partitioning a model containing dequantize node. fallback every dequantize node to CPU Change-Id: Idf8c0fcc3492d31b47351639826dc89096ce664e --- .../packagegroups/packagegroup-webos-ml.bb | 1 + ...lopen-libOpenCL.so.1-instead-of-libO.patch | 2 +- ...to-delegation-support-when-using-gpu.patch | 158 +++++++++++++++--- .../tensorflow-lite/tensorflow-lite_2.6.2.bb | 2 +- .../edgeai-vision/edgeai-vision_1.0.0.bb | 97 +++-------- 5 files changed, 160 insertions(+), 100 deletions(-) diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-ml.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-ml.bb index 4bb81b93d..10bd77e3f 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-ml.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-ml.bb @@ -21,4 +21,5 @@ RDEPENDS:${PN} = " \ ${@bb.utils.contains('DISTRO_FEATURES', 'armnn', 'armnn', '', d)} \ ${@bb.utils.contains('DISTRO_FEATURES', 'edgetpu', 'libedgetpu', '', d)} \ edgeai-vision \ + edgeai-vision-tests \ " diff --git a/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library/0001-OpenCL-dlopen-libOpenCL.so.1-instead-of-libO.patch b/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library/0001-OpenCL-dlopen-libOpenCL.so.1-instead-of-libO.patch index 5f5717d7b..19262a26f 100644 --- a/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library/0001-OpenCL-dlopen-libOpenCL.so.1-instead-of-libO.patch +++ b/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library/0001-OpenCL-dlopen-libOpenCL.so.1-instead-of-libO.patch @@ -20,7 +20,7 @@ index d8c2736ef..2c9492de1 100644 bool CLSymbols::load_default() { - static const std::vector libraries{ "libOpenCL.so", "libGLES_mali.so", "libmali.so" }; -+ static const std::vector libraries{ "libOpenCL.so.1", "libGLES.so", "libmali.so" }; ++ static const std::vector libraries{ "libOpenCL.so.1", "libGLESv2.so.2", "libmali.so" }; if(_loaded.first) { diff --git a/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0005-auto-delegation-support-when-using-gpu.patch b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0005-auto-delegation-support-when-using-gpu.patch index e14ec284b..6c48b1a50 100644 --- a/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0005-auto-delegation-support-when-using-gpu.patch +++ b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite/0005-auto-delegation-support-when-using-gpu.patch @@ -1,15 +1,72 @@ -From b0ecee5b05259d8804b1a344d307be4bf8673f48 Mon Sep 17 00:00:00 2001 -From: "kijoong.lee" -Date: Mon, 13 Jun 2022 18:43:31 +0900 +From 9310ba0ecfbeb071b72079875b8ef0fb886b7e1a Mon Sep 17 00:00:00 2001 +From: "yeseul.joo" +Date: Tue, 12 Jul 2022 16:45:04 +0900 Subject: [PATCH] auto delegation support when using gpu +:Release Notes: +add tensorflow lite patch to support auto delegation + +:Detailed Notes: +support Enable Load Balancing policy for auto delegation library +models that contain dequantize node can also be partitioned for load +balancing + +:Testing Performed: +Local Build Test + +:QA Notes: +N/A + +:Issues Addressed: +N/A --- - tensorflow/lite/delegates/gpu/delegate.cc | 23 +++++++++++++++++++++++ - tensorflow/lite/delegates/gpu/delegate.h | 5 +++++ - 2 files changed, 28 insertions(+) + .../lite/delegates/gpu/common/model_builder.cc | 5 ++++- + .../lite/delegates/gpu/common/model_builder.h | 3 ++- + tensorflow/lite/delegates/gpu/delegate.cc | 15 ++++++++++++++- + tensorflow/lite/delegates/gpu/delegate.h | 5 +++++ + tensorflow/lite/delegates/utils.cc | 9 ++++++--- + tensorflow/lite/delegates/utils.h | 7 +++++++ + 6 files changed, 38 insertions(+), 6 deletions(-) +diff --git a/tensorflow/lite/delegates/gpu/common/model_builder.cc b/tensorflow/lite/delegates/gpu/common/model_builder.cc +index de8d32183d3..f5074f695f4 100644 +--- a/tensorflow/lite/delegates/gpu/common/model_builder.cc ++++ b/tensorflow/lite/delegates/gpu/common/model_builder.cc +@@ -3039,7 +3039,8 @@ std::unique_ptr NewOperationParser( + // TODO(impjdi): Check number of input/output tensors and their dimensions. + // TODO(impjdi): Check ops' parameters. + TfLiteIntArray* GetOpsToReplace(TfLiteContext* context, bool allow_quant_ops, +- int max_delegated_partitions) { ++ int max_delegated_partitions, ++ int cpu_fallback_percentage) { + delegates::IsNodeSupportedFn node_supported_fn = + [=](TfLiteContext* context, TfLiteNode* node, + TfLiteRegistration* registration, +@@ -3082,6 +3083,8 @@ TfLiteIntArray* GetOpsToReplace(TfLiteContext* context, bool allow_quant_ops, + + delegates::FP16GraphPartitionHelper partition_helper(context, + node_supported_fn); ++ if(cpu_fallback_percentage != 0) ++ partition_helper.SetCpuFallbackPercentage(cpu_fallback_percentage); + std::set unsupported_nodes_info; + if (partition_helper.Partition(&unsupported_nodes_info) != kTfLiteOk) { + return TfLiteIntArrayCreate(0); +diff --git a/tensorflow/lite/delegates/gpu/common/model_builder.h b/tensorflow/lite/delegates/gpu/common/model_builder.h +index a46e09a7b94..db1969e8314 100644 +--- a/tensorflow/lite/delegates/gpu/common/model_builder.h ++++ b/tensorflow/lite/delegates/gpu/common/model_builder.h +@@ -35,7 +35,8 @@ namespace gpu { + // consists of a subset of ops) to be replaced. + TfLiteIntArray* GetOpsToReplace(TfLiteContext* context, + bool allow_quant_ops = false, +- int max_delegated_partitions = 1); ++ int max_delegated_partitions = 1, ++ int cpu_fallback_percentage = 0); + + // Extracts TFLite delegate execution plan from the input TFLite context and + // converts it into generic graph format. diff --git a/tensorflow/lite/delegates/gpu/delegate.cc b/tensorflow/lite/delegates/gpu/delegate.cc -index 63ed22373dd..f044d0844fb 100644 +index 63ed22373dd..72bc99fc040 100644 --- a/tensorflow/lite/delegates/gpu/delegate.cc +++ b/tensorflow/lite/delegates/gpu/delegate.cc @@ -86,6 +86,11 @@ class Delegate { @@ -32,30 +89,24 @@ index 63ed22373dd..f044d0844fb 100644 int num_delegate_kernels() const { return num_delegate_kernels_; } private: -@@ -427,6 +433,22 @@ TfLiteStatus DelegatePrepare(TfLiteContext* context, TfLiteDelegate* delegate) { +@@ -424,9 +430,15 @@ TfLiteStatus DelegatePrepare(TfLiteContext* context, TfLiteDelegate* delegate) { + }; + + auto* gpu_delegate = GetDelegate(delegate); ++ if(gpu_delegate->CPUFallbackPercentage() != 0) { ++ TFLITE_LOG_PROD(TFLITE_LOG_INFO, ++ "GPU Load Balancing : %d percent CPU Fallback", ++ gpu_delegate->CPUFallbackPercentage()); ++ } TfLiteIntArray* ops_to_replace = GetOpsToReplace(context, gpu_delegate->IsQuantOpsAllowed(), - gpu_delegate->MaxDelegatedPartitions()); -+ if (gpu_delegate->CPUFallbackPercentage() != 0) { -+ auto partition_size = -+ ops_to_replace->size - -+ ops_to_replace->size * gpu_delegate->CPUFallbackPercentage() / 100; -+ TfLiteIntArray* partitioned_ops_to_replace = -+ TfLiteIntArrayCreate(partition_size); -+ for (int i = 0; i < partition_size; i++) { -+ partitioned_ops_to_replace->data[i] = ops_to_replace->data[i]; -+ } -+ TFLITE_LOG_PROD( -+ TFLITE_LOG_INFO, -+ "GPU Load Balancing: %d operations are forced to run on CPU.", -+ ops_to_replace->size * gpu_delegate->CPUFallbackPercentage() / 100); -+ TfLiteIntArrayFree(ops_to_replace); -+ ops_to_replace = partitioned_ops_to_replace; -+ } +- gpu_delegate->MaxDelegatedPartitions()); ++ gpu_delegate->MaxDelegatedPartitions(), ++ gpu_delegate->CPUFallbackPercentage()); const auto status = context->ReplaceNodeSubsetsWithDelegateKernels( context, kRegistration, ops_to_replace, delegate); TFLITE_LOG_PROD(TFLITE_LOG_INFO, "Created %d GPU delegate kernels.", -@@ -450,6 +472,7 @@ TfLiteGpuDelegateOptionsV2 TfLiteGpuDelegateOptionsV2Default() { +@@ -450,6 +462,7 @@ TfLiteGpuDelegateOptionsV2 TfLiteGpuDelegateOptionsV2Default() { options.inference_priority3 = TFLITE_GPU_INFERENCE_PRIORITY_AUTO; options.experimental_flags = TFLITE_GPU_EXPERIMENTAL_FLAGS_ENABLE_QUANT; options.max_delegated_partitions = 1; @@ -79,6 +130,61 @@ index 40a06bb4384..8a84b0771f8 100644 } TfLiteGpuDelegateOptionsV2; // Populates TfLiteGpuDelegateOptionsV2 as follows: +diff --git a/tensorflow/lite/delegates/utils.cc b/tensorflow/lite/delegates/utils.cc +index 2d56981db73..0697c9b74e8 100644 +--- a/tensorflow/lite/delegates/utils.cc ++++ b/tensorflow/lite/delegates/utils.cc +@@ -167,7 +167,7 @@ FP16GraphPartitionHelper::GetNodesOfFirstNLargestPartitionsImpl( + std::vector ops_to_replace; + + if (num_supported_nodes() + constant_dequant_nodes_.size() == +- num_total_nodes()) { ++ num_total_nodes() && cpu_fallback_percentage() == 0) { + // Scenario 1: Full Delegation. + // We delegate all nodes in this case to avoid unnecessary partitions due to + // FP16 DEQUANT nodes. This is safe to do since no non-delegated op needs +@@ -186,8 +186,11 @@ FP16GraphPartitionHelper::GetNodesOfFirstNLargestPartitionsImpl( + if (first_n_partitions.empty()) return ops_to_replace; + for (int i = 0; i < first_n_partitions.size(); ++i) { + auto nodes = first_n_partitions[i]->nodes_to_replace; +- ops_to_replace.insert(ops_to_replace.end(), nodes->data, +- nodes->data + nodes->size); ++ auto partition_size = nodes->size ++ - nodes->size * cpu_fallback_percentage() / 100; ++ ops_to_replace.insert(ops_to_replace.end(), ++ nodes->data + nodes->size - partition_size, ++ nodes->data + nodes->size); + } + } + +diff --git a/tensorflow/lite/delegates/utils.h b/tensorflow/lite/delegates/utils.h +index 90dd20e34d9..d06bd12489d 100644 +--- a/tensorflow/lite/delegates/utils.h ++++ b/tensorflow/lite/delegates/utils.h +@@ -91,9 +91,14 @@ class GraphPartitionHelper { + return GetNodesOfFirstNLargestPartitionsImpl(n, min_nodes_per_partition); + } + ++ void SetCpuFallbackPercentage(int percentage){ cpu_fallback_percentage_ = percentage; } ++ + int num_total_nodes() const { return num_total_nodes_; } + int num_supported_nodes() const { return num_supported_nodes_; } + int num_partitions() const { return partitions_.size(); } ++ int cpu_fallback_percentage() const { return cpu_fallback_percentage_; } ++ ++ TfLiteIntArray* GetSupportedNodes() const {return supported_nodes_;} + + protected: + virtual bool IsNodeSupported(TfLiteContext* context, TfLiteNode* node, +@@ -136,6 +141,8 @@ class GraphPartitionHelper { + + // Contains an array of supported node indices. + TfLiteIntArray* supported_nodes_ = nullptr; // owns the memory ++ ++ int cpu_fallback_percentage_ = 0; + }; + + // Specialized partitioner for graphs that possibly contain fp16 tensors. -- 2.17.1 diff --git a/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb index 48dbc1ff4..b2207426a 100644 --- a/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb +++ b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb @@ -58,7 +58,7 @@ SRC_URI[model-mobv1.sha256sum] = "2f8054076cf655e1a73778a49bd8fd0306d32b290b7e57 inherit cmake -PR = "r3" +PR = "r4" S = "${WORKDIR}/git" DEPENDS += " \ diff --git a/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb b/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb index 079c51657..693cc3dbb 100644 --- a/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb +++ b/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb @@ -6,14 +6,14 @@ SECTION = "libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ - file://oss-pkg-info.yaml;md5=4b1ab5610fc16b165f0ff6bf836ad2a8 \ + file://oss-pkg-info.yaml;md5=e9325f9b6b90063538bfeda1635999ed \ " -WEBOS_VERSION = "1.0.0-11_fdd8fdc48201aab1b7fcd9691f501855488a5e95" +WEBOS_VERSION = "1.0.0-17_d56a9ac8316acccf0f7b3c66a6cc79e307aa8993" WEBOS_REPO_NAME = "edge-ai-computer-vision" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" -PR = "r3" +PR = "r4" S = "${WORKDIR}/git" inherit cmake @@ -21,6 +21,7 @@ inherit pkgconfig inherit webos_filesystem_paths inherit webos_enhanced_submissions inherit webos_public_repo +inherit webos_test_provider DEPENDS = " \ msgpack-c \ @@ -29,14 +30,17 @@ DEPENDS = " \ opencv \ tensorflow-lite \ googletest \ + pmloglib \ " -RDEPENDS:${PN} = " \ - msgpack-c \ - rapidjson \ - opencv \ - tensorflow-lite \ -" +AIF_INSTALL_DIR = "${datadir}/aif" +AIF_INSTALL_TEST_DIR = "${AIF_INSTALL_DIR}/test" +AIF_INSTALL_EXAMPLE_DIR = "${AIF_INSTALL_DIR}/example" + +EXTRA_OECMAKE += "-DAIF_INSTALL_DIR=${AIF_INSTALL_DIR}" +EXTRA_OECMAKE += "-DAIF_INSTALL_TEST_DIR=${AIF_INSTALL_TEST_DIR}" +EXTRA_OECMAKE += "-DAIF_INSTALL_EXAMPLE_DIR=${AIF_INSTALL_EXAMPLE_DIR}" +EXTRA_OECMAKE += "-DWITH_UPDATABLE_MODELS=OFF" PACKAGECONFIG ?= "xnnpack" PACKAGECONFIG += "${@bb.utils.contains('DISTRO_FEATURES', 'gpu-delegate', 'gpu', '', d)}" @@ -49,75 +53,24 @@ PACKAGECONFIG[xnnpack] = "-DWITH_XNNPACK:BOOL=TRUE,-DWITH_XNNPACK:BOOL=FALSE" PACKAGECONFIG[gpu] = "-DWITH_GPU=ON, -DWITH_GPU=OFF" PACKAGECONFIG[edgetpu] = "-DWITH_EDGETPU:BOOL=TRUE,-DWITH_EDGETPU:BOOL=FALSE,libedgetpu" PACKAGECONFIG[armnn] = "-DWITH_ARMNN:BOOL=TRUE,-DWITH_ARMNN:BOOL=FALSE,armnn" -PACKAGECONFIG[examples] = "-DBUILD_EXAMPLES=ON,-DBUILD_EXAMPLES=OFF,," +PACKAGECONFIG[examples] = "-DWITH_EXAMPLES=ON -DWITH_EXTRA_MODELS=ON,-DWITH_EXAMPLES=OFF -DWITH_EXTRA_MODELS=OFF,," PACKAGECONFIG[ads] = "-DWITH_AUTO_DELEGATE=ON,-DWITH_AUTO_DELEGATE=OFF,tflite-auto-delegation" -AIF_INSTALL_DIR = "${datadir}/aif" - -do_install:append() { - - CP_ARGS="-Prf --preserve=mode,timestamps --no-preserve=ownership" - install -d ${D}${AIF_INSTALL_DIR} - - if ${@bb.utils.contains('PACKAGECONFIG', 'examples', 'true', 'false', d)}; then - # install examples - find ${B}/example -maxdepth 2 -type f -executable -exec cp $CP_ARGS {} ${D}${AIF_INSTALL_DIR} \; - chrpath -d ${D}${AIF_INSTALL_DIR}/* - - # install images files - cd "${S}/images" - for file in $(find . -type f); do - install -d "${D}${AIF_INSTALL_DIR}/images/$(dirname -- "${file}")" - cp $CP_ARGS "${file}" "${D}${AIF_INSTALL_DIR}/images/${file}" - done - - # install extra models - cd "${S}/extra_models" - for file in $(find . -type f); do - install -d "${D}${AIF_INSTALL_DIR}/model/$(dirname -- "${file}")" - cp $CP_ARGS "${file}" "${D}${AIF_INSTALL_DIR}/model/${file}" - done - fi - - # install unit test - install -m 0755 ${B}/test/edgeai-vision-test ${D}${AIF_INSTALL_DIR}/edgeai-vision-test - chrpath -d ${D}${AIF_INSTALL_DIR}/edgeai-vision-test - - # install header files - cd "${S}/include/aif" - for file in $(find . -name '*.h'); do - install -d "${D}${includedir}/aif/$(dirname -- "${file}")" - cp $CP_ARGS "${file}" "${D}${includedir}/aif/${file}" - done - - # install mandatory model files - cd "${S}/model" - for file in $(find . -name '*.tflite'); do - install -d "${D}${AIF_INSTALL_DIR}/model/$(dirname -- "${file}")" - cp $CP_ARGS "${file}" "${D}${AIF_INSTALL_DIR}/model/${file}" - done - - # install pkgconfig file - install -d ${D}${libdir}/pkgconfig - install -m 0644 ${S}/files/edgeai-vision.pc.in ${D}${libdir}/pkgconfig/edgeai-vision.pc - sed -i 's:@version@:${PV}:g - s:@libdir@:${libdir}:g - s:@includedir@:${includedir}:g' ${D}${libdir}/pkgconfig/edgeai-vision.pc - - # install test image files - cd "${S}/images" - for file in $(find . -name '*.jpg'); do - install -d "${D}${AIF_INSTALL_DIR}/images/$(dirname -- "${file}")" - cp $CP_ARGS "${file}" "${D}${AIF_INSTALL_DIR}/images/${file}" - done -} - FILES:${PN}-dev = "" INSANE_SKIP:${PN} = "dev-so" -INSANE_SKIP:${PN}-dev += "dev-elf" -FILES:${PN}-dev += "${includedir}/* ${libdir}/pkgconfig" +FILES:${PN}-dev += " \ + ${includedir}/* \ + ${libdir}/pkgconfig \ +" + +PACKAGES =+ "${PN}-tests" +FILES:${PN}-tests = " \ + ${AIF_INSTALL_TEST_DIR} \ + ${AIF_INSTALL_DIR}/images \ +" + FILES:${PN} += " \ ${AIF_INSTALL_DIR} \ ${libdir}/*.so* \ From 3b672f8a79e257eaf72a6f25981ad9a8ae5d7c01 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 29 Jun 2022 20:20:54 +0200 Subject: [PATCH 0473/2022] wpa-supplicant=webos5 (respect WPA_EXTRA_PARAM) :Release Notes: It's set in environment but wasn't respected in .service file. :Detailed Notes: It's set in: meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.sh: systemctl set-environment WPA_EXTRA_PARAM=" -ddd -t -K" :Testing Performed: Build only. :QA Notes: :Issues Addressed: [WRO-7683] CCC: wpa-supplicant=91webos5,v2.9 Change-Id: Id02c5ee1062191104177536e000f08fdb1373a94 --- .../wpa-supplicant/wpa-supplicant/wpa-supplicant.service | 2 +- .../wpa-supplicant/wpa-supplicant_%.bbappend | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.service b/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.service index b98d59c8e..c6ed4a64e 100644 --- a/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.service +++ b/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant/wpa-supplicant.service @@ -27,5 +27,5 @@ Type=simple OOMScoreAdjust=-500 EnvironmentFile=-/var/systemd/system/env/wpa-supplicant.env ExecStartPre=/etc/systemd/system/scripts/wpa-supplicant.sh -ExecStart=/usr/sbin/wpa_supplicant -u -s +ExecStart=/usr/sbin/wpa_supplicant -u $WPA_EXTRA_PARAM -s Restart=on-failure diff --git a/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend b/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend index 05a27b096..73183d8d0 100644 --- a/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend +++ b/meta-webos/recipes-connectivity/wpa-supplicant/wpa-supplicant_%.bbappend @@ -1,8 +1,8 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webos4" +EXTENDPRAUTO:append = "webos5" -FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI += " \ file://wpa-supplicant.sh \ From f248364663291d3673ed068407f858a9925a1d03 Mon Sep 17 00:00:00 2001 From: Hyunjae Shin Date: Mon, 11 Jul 2022 15:52:53 +0900 Subject: [PATCH 0474/2022] ose: Change recipe author :Release Notes: :Detailed Notes: :Testing Performed: :QA Notes: N/A :Issues Addressed: [WRO-8343] Fix author of webOS component Change-Id: I0b4931645a272b317c741e5aa97c354fbddc9922 --- meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb | 2 +- .../com.webos.service.location/com.webos.service.location.bb | 2 +- meta-webos/recipes-location/loc-utils/loc-utils.bb | 2 +- meta-webos/recipes-multimedia/audiod/audiod.bb | 2 +- .../com.webos.service.audiofocusmanager.bb | 2 +- .../com.webos.service.mediaindexer.bb | 2 +- .../recipes-multimedia/g-media-pipeline/g-media-pipeline.bb | 2 +- .../media-codec-interface/media-codec-interface.bb | 2 +- .../recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend | 2 ++ meta-webos/recipes-multimedia/umi/umi.bb | 1 + meta-webos/recipes-webos/activitymanager/activitymanager.bb | 2 +- meta-webos/recipes-webos/appinstalld2/appinstalld2.bb | 2 +- .../applicationinstallerutility/applicationinstallerutility.bb | 2 +- .../auto-luna-surface-manager/auto-luna-surface-manager.bb | 2 +- meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb | 2 +- meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb | 2 +- .../recipes-webos/bluetooth/com.webos.service.bluetooth2.bb | 2 +- meta-webos/recipes-webos/bluetooth/com.webos.service.hfp.bb | 2 +- meta-webos/recipes-webos/chromium/webruntime.inc | 2 +- .../cmake-modules-webos/cmake-modules-webos-native.bb | 1 + .../com.palm.service.devmode/com.palm.service.devmode.bb | 2 +- .../recipes-webos/com.webos.app.camera/com.webos.app.camera.bb | 2 +- .../com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb | 2 +- .../recipes-webos/com.webos.app.home/com.webos.app.home.bb | 2 +- .../com.webos.app.imageviewer/com.webos.app.imageviewer.bb | 2 +- .../com.webos.app.notification/com.webos.app.notification.bb | 2 +- .../com.webos.app.settings/com.webos.app.settings.bb | 2 +- .../com.webos.app.videoplayer/com.webos.app.videoplayer.bb | 2 +- .../recipes-webos/com.webos.app.volume/com.webos.app.volume.bb | 2 +- .../com.webos.service.audiooutput.bb | 2 +- .../com.webos.service.camera/com.webos.service.camera.bb | 2 +- .../com.webos.service.contextintentmgr.bb | 2 +- .../com.webos.service.flowmanager/com.webos.app.mediaviewer.bb | 2 +- .../com.webos.service.flowmanager.bb | 2 +- .../com.webos.service.mediacontroller.bb | 2 +- .../com.webos.service.pdm/com.webos.service.pdm.bb | 2 +- .../com.webos.service.peripheralmanager.bb | 2 +- .../com.webos.service.power2/com.webos.service.power2.bb | 2 +- .../com.webos.service.tts/com.webos.service.tts.bb | 2 +- meta-webos/recipes-webos/configd-data/configd-data.bb | 2 +- meta-webos/recipes-webos/configd/configd.bb | 2 +- meta-webos/recipes-webos/configurator/configurator.bb | 2 +- .../recipes-webos/cpushareholder-stub/cpushareholder-stub.bb | 2 +- meta-webos/recipes-webos/db8/db8.bb | 2 +- meta-webos/recipes-webos/enact-dev/enact-dev-native.bb | 2 +- meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb | 2 +- .../event-monitor-network/event-monitor-network.bb | 2 +- meta-webos/recipes-webos/event-monitor/event-monitor.bb | 2 +- meta-webos/recipes-webos/filecache/filecache.bb | 2 +- .../recipes-webos/frameworks/nodejs-module-webos-service.bb | 2 +- meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb | 2 +- meta-webos/recipes-webos/ilib-webapp/ilib-qml-plugin.bb | 2 +- meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb | 2 +- meta-webos/recipes-webos/imemanager/imemanager.bb | 2 +- meta-webos/recipes-webos/jemalloc/jemalloc.bb | 2 +- meta-webos/recipes-webos/libpbnjson/libpbnjson.bb | 2 +- meta-webos/recipes-webos/libpmscore/libpmscore.bb | 2 +- meta-webos/recipes-webos/librolegen/librolegen.bb | 2 +- meta-webos/recipes-webos/libsandbox/libsandbox.bb | 2 +- .../recipes-webos/localization-tool/localization-tool-native.bb | 2 +- meta-webos/recipes-webos/ls2-helpers/ls2-helpers.bb | 2 +- meta-webos/recipes-webos/luna-downloadmgr/luna-downloadmgr.bb | 2 +- meta-webos/recipes-webos/luna-init/luna-init.bb | 2 +- meta-webos/recipes-webos/luna-prefs/luna-prefs.bb | 2 +- .../luna-service2-security-conf/luna-service2-security-conf.bb | 2 +- meta-webos/recipes-webos/luna-service2/luna-service2.bb | 2 +- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 2 +- meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb | 2 +- .../maliit-framework-webos/maliit-framework-webos.bb | 2 +- .../media-resource-calculator/media-resource-calculator.bb | 2 +- meta-webos/recipes-webos/mojoloader/mojoloader.bb | 2 +- .../recipes-webos/mojoservicelauncher/mojoservicelauncher.bb | 2 +- .../nodejs-module-webos/nodejs-module-webos-dynaload.bb | 1 + .../nodejs-module-webos/nodejs-module-webos-pmlog.bb | 1 + .../nodejs-module-webos/nodejs-module-webos-sysbus.bb | 1 + meta-webos/recipes-webos/notificationmgr/notificationmgr.bb | 2 +- meta-webos/recipes-webos/nyx-lib/nyx-lib.bb | 2 +- .../recipes-webos/nyx-modules-qemux86/nyx-modules-qemux86.bb | 2 +- meta-webos/recipes-webos/nyx-modules/nyx-modules.bb | 2 +- meta-webos/recipes-webos/nyx-utils/nyx-utils.bb | 2 +- meta-webos/recipes-webos/openwnn-webos/openwnn-webos.bb | 2 +- meta-webos/recipes-webos/pdm-plugin/pdm-plugin.bb | 2 +- meta-webos/recipes-webos/pmklogd/pmklogd.bb | 2 +- meta-webos/recipes-webos/pmlogctl/pmlogctl.bb | 2 +- meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb | 2 +- meta-webos/recipes-webos/pmloglib/pmloglib-private.bb | 2 +- meta-webos/recipes-webos/pmloglib/pmloglib.bb | 2 +- .../pms-support-reference/pms-support-reference.bb | 2 +- meta-webos/recipes-webos/pmtrace/pmtrace.bb | 2 +- meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb | 2 +- .../recipes-webos/qml-webos-components/qml-webos-components.bb | 2 +- .../recipes-webos/qml-webos-framework/qml-webos-framework.bb | 2 +- meta-webos/recipes-webos/qt-features-webos/qt-features-webos.bb | 2 +- meta-webos/recipes-webos/sam/sam.bb | 2 +- meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb | 2 +- .../recipes-webos/settingsservice-conf/settingsservice-conf.bb | 2 +- meta-webos/recipes-webos/settingsservice/settingsservice.bb | 2 +- meta-webos/recipes-webos/sleepd/sleepd.bb | 2 +- meta-webos/recipes-webos/test-apps/bareapp.bb | 2 +- meta-webos/recipes-webos/test-apps/com.webos.app.test.enact.bb | 2 +- .../recipes-webos/test-apps/com.webos.app.test.webosose.bb | 2 +- meta-webos/recipes-webos/test-apps/com.webos.app.test.webrtc.bb | 2 +- .../recipes-webos/test-apps/com.webos.app.test.youtube.bb | 2 +- .../recipes-webos/test-apps/test.redirection.backgroundmedia.bb | 2 +- meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb | 2 +- meta-webos/recipes-webos/umediaserver/umediaserver.bb | 2 +- meta-webos/recipes-webos/wam/wam.bb | 2 +- .../recipes-webos/webos-connman-adapter/wca-support-api.bb | 2 +- meta-webos/recipes-webos/webos-connman-adapter/wca-support.bb | 2 +- .../webos-connman-adapter/webos-connman-adapter.bb | 2 +- meta-webos/recipes-webos/webos-fonts/webos-fonts.inc | 1 + meta-webos/recipes-webos/webos-nettools/webos-nettools.bb | 2 +- .../webos-wayland-extensions/webos-wayland-extensions.bb | 2 +- 113 files changed, 114 insertions(+), 106 deletions(-) diff --git a/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb b/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb index 1ac774390..80fd6df64 100644 --- a/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb +++ b/meta-webos/recipes-connectivity/uwb/com.webos.service.uwb.bb @@ -1,7 +1,7 @@ # Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "Webos UwbService" -AUTHOR = "Bojung.Ko " +AUTHOR = "Seokhee Lee " SECTION = "webos/services" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=3b83ef96387f14655fc854ddc3c6bd57" diff --git a/meta-webos/recipes-location/com.webos.service.location/com.webos.service.location.bb b/meta-webos/recipes-location/com.webos.service.location/com.webos.service.location.bb index 6e8398ecb..53bb41713 100644 --- a/meta-webos/recipes-location/com.webos.service.location/com.webos.service.location.bb +++ b/meta-webos/recipes-location/com.webos.service.location/com.webos.service.location.bb @@ -1,7 +1,7 @@ # Copyright (c) 2020-2022 LG Electronics, Inc. DESCRIPTION = "location framework which provides location based services implementing location handlers, plugins, and Luna location service" -AUTHOR = "vibhanshu.dhote " +AUTHOR = "Muralidhar N " SECTION = "webos/location" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-location/loc-utils/loc-utils.bb b/meta-webos/recipes-location/loc-utils/loc-utils.bb index bbe495f92..1da26999e 100644 --- a/meta-webos/recipes-location/loc-utils/loc-utils.bb +++ b/meta-webos/recipes-location/loc-utils/loc-utils.bb @@ -1,7 +1,7 @@ # Copyright (c) 2020-2022 LG Electronics, Inc. DESCRIPTION = "Utility library used in Location Framework" -AUTHOR = "vibhanshu.dhote " +AUTHOR = "Muralidhar N " SECTION = "webos/location" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-multimedia/audiod/audiod.bb b/meta-webos/recipes-multimedia/audiod/audiod.bb index f0f2ba08f..762242c39 100644 --- a/meta-webos/recipes-multimedia/audiod/audiod.bb +++ b/meta-webos/recipes-multimedia/audiod/audiod.bb @@ -1,7 +1,7 @@ # Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "webOS Audiod daemon and utilities" -AUTHOR = "Manohar Babu " +AUTHOR = "Sushovan G " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-multimedia/com.webos.service.audiofocusmanager/com.webos.service.audiofocusmanager.bb b/meta-webos/recipes-multimedia/com.webos.service.audiofocusmanager/com.webos.service.audiofocusmanager.bb index e3b921edf..2cca5d298 100644 --- a/meta-webos/recipes-multimedia/com.webos.service.audiofocusmanager/com.webos.service.audiofocusmanager.bb +++ b/meta-webos/recipes-multimedia/com.webos.service.audiofocusmanager/com.webos.service.audiofocusmanager.bb @@ -1,7 +1,7 @@ # Copyright (c) 2021-2022 LG Electronics, Inc. DESCRIPTION = "webOS audiofocusmanager" -AUTHOR = "Mallikarjun Hanganalli " +AUTHOR = "Sushovan G " SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb b/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb index a18011799..528a71349 100644 --- a/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb +++ b/meta-webos/recipes-multimedia/com.webos.service.mediaindexer/com.webos.service.mediaindexer.bb @@ -1,7 +1,7 @@ # Copyright (c) 2020-2022 LG Electronics, Inc. SUMMARY = "Media indexer service" -AUTHOR = "Jaehoon Lee " +AUTHOR = "Kalaimani K " LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb index 31b97d143..091f70511 100644 --- a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb +++ b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb @@ -1,7 +1,7 @@ # Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "G media pipeline is a media pipeline which uses GStreamer" -AUTHOR = "Jinwoo Ahn " +AUTHOR = "Kalaimani K " SECTION = "webos/media" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb index 29ff44eca..3af63fd36 100644 --- a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb +++ b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb @@ -1,7 +1,7 @@ # Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "Media codec interface for webOS" -AUTHOR = "Pankaj Maharana " +AUTHOR = "Kalaimani K " SECTION = "webos/media" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend index 0d947895f..d21da8e72 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend +++ b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend @@ -1,5 +1,7 @@ # Copyright (c) 2022 LG Electronics, Inc. +AUTHOR = "Sushovan G " + LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=5c4ec8703e42f87fdf96fa3794704163" # This is blacklisted because of the license diff --git a/meta-webos/recipes-multimedia/umi/umi.bb b/meta-webos/recipes-multimedia/umi/umi.bb index e17111ae4..10306ce62 100644 --- a/meta-webos/recipes-multimedia/umi/umi.bb +++ b/meta-webos/recipes-multimedia/umi/umi.bb @@ -1,6 +1,7 @@ # Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "AudioOutputd adaptation layer (UMI) API definition and test harness" +AUTHOR = "Sushovan G " SECTION = "webos/libs" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/activitymanager/activitymanager.bb b/meta-webos/recipes-webos/activitymanager/activitymanager.bb index 9d3104127..24e3eca0d 100644 --- a/meta-webos/recipes-webos/activitymanager/activitymanager.bb +++ b/meta-webos/recipes-webos/activitymanager/activitymanager.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. DESCRIPTION = "webOS component to manage all running activities." -AUTHOR = "Ludovic Legrand " +AUTHOR = "Guruprasad KN " SECTION = "webos/dameons" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb b/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb index 95021e67a..2cef28bba 100644 --- a/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb +++ b/meta-webos/recipes-webos/appinstalld2/appinstalld2.bb @@ -1,7 +1,7 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "Application Install Service" -AUTHOR = "Sangwoo Kang " +AUTHOR = "Guruprasad KN " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/applicationinstallerutility/applicationinstallerutility.bb b/meta-webos/recipes-webos/applicationinstallerutility/applicationinstallerutility.bb index e495e60f7..515c22597 100644 --- a/meta-webos/recipes-webos/applicationinstallerutility/applicationinstallerutility.bb +++ b/meta-webos/recipes-webos/applicationinstallerutility/applicationinstallerutility.bb @@ -1,7 +1,7 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY="The Application Installer Utility supports the installing and removing of applications on a HP webOS device." -AUTHOR = "Seokjun Lee " +AUTHOR = "Guruprasad KN " SECTION = "webos/apps" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb index 5e492a995..1c6c2736f 100644 --- a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb +++ b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb @@ -1,7 +1,7 @@ # Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "Surface Manager for webOS Auto Reference UX" -AUTHOR = "Jaeyoon Jung " +AUTHOR = "Elvis Lee " SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb index c051f0637..21ea679f5 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb @@ -1,7 +1,7 @@ # Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "webOS Bluetooth SIL API" -AUTHOR = "Sameer Mulla " +AUTHOR = "Muralidhar N " SECTION = "webos/services" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb index 73e732d38..020bf1c62 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb @@ -1,7 +1,7 @@ # Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "webOS Bluetooth SIL implementation for bluez5" -AUTHOR = "Sameeer Mulla " +AUTHOR = "Muralidhar N " SECTION = "webos/services" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb index d31eec510..740cdfa00 100644 --- a/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb +++ b/meta-webos/recipes-webos/bluetooth/com.webos.service.bluetooth2.bb @@ -1,7 +1,7 @@ # Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "webOS Bluetooth management service" -AUTHOR = "Sameer Mulla " +AUTHOR = "Muralidhar N " SECTION = "webos/services" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/bluetooth/com.webos.service.hfp.bb b/meta-webos/recipes-webos/bluetooth/com.webos.service.hfp.bb index a6d6a5fe0..c2d03946f 100644 --- a/meta-webos/recipes-webos/bluetooth/com.webos.service.hfp.bb +++ b/meta-webos/recipes-webos/bluetooth/com.webos.service.hfp.bb @@ -1,7 +1,7 @@ # Copyright (c) 2020-2022 LG Electronics, Inc. SUMMARY = "Bluetooth HFP(Hands Free Profile) support service" -AUTHOR = "Sameer Mulla " +AUTHOR = "Muralidhar N " SECTION = "webos/services" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/chromium/webruntime.inc b/meta-webos/recipes-webos/chromium/webruntime.inc index 09726dfe2..5045e902f 100644 --- a/meta-webos/recipes-webos/chromium/webruntime.inc +++ b/meta-webos/recipes-webos/chromium/webruntime.inc @@ -1,7 +1,7 @@ # Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "Chromium webruntime for webOS" -AUTHOR = "Lokesh Kumar Goel " +AUTHOR = "Donghyun Kim " SECTION = "webos/apps" require webruntime-common.inc diff --git a/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos-native.bb b/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos-native.bb index 94e0882fa..f39022ee7 100644 --- a/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos-native.bb +++ b/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos-native.bb @@ -2,6 +2,7 @@ DESCRIPTION = "CMake modules used by webOS" LICENSE = "Apache-2.0" +AUTHOR = "Vijaya Sundaram " SECTION = "webos/devel/tools" LIC_FILES_CHKSUM = "file://LICENSE;md5=89aea4e17d99a7cacdbeed46a0096b10" diff --git a/meta-webos/recipes-webos/com.palm.service.devmode/com.palm.service.devmode.bb b/meta-webos/recipes-webos/com.palm.service.devmode/com.palm.service.devmode.bb index 9ff9b2252..bafa3a45b 100644 --- a/meta-webos/recipes-webos/com.palm.service.devmode/com.palm.service.devmode.bb +++ b/meta-webos/recipes-webos/com.palm.service.devmode/com.palm.service.devmode.bb @@ -1,7 +1,7 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "JS service for Developer Mode" -AUTHOR = "Steve Lemke " +AUTHOR = "Rajesh Gopu I.V " SECTION = "webos/apps" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb index e4e6e3693..1daf8efee 100644 --- a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb +++ b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb @@ -1,7 +1,7 @@ # Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "Camera application" -AUTHOR = "Muniraju " +AUTHOR = "Revanth Kumar " SECTION = "webos/apps" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb index 105a7814c..a1c9f7fd1 100644 --- a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb +++ b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb @@ -1,7 +1,7 @@ # Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "Enact Based Web Browser" -AUTHOR = "Anish.td " +AUTHOR = "Revanth Kumar " SECTION = "webos/apps" LICENSE = "LicenseRef-EnactBrowser-Evaluation" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb b/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb index 9a86383a7..9fddb45fa 100644 --- a/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb +++ b/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb @@ -1,7 +1,7 @@ # Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "General System Launcher application" -AUTHOR = "Jongson Kim" +AUTHOR = "Revanth Kumar " SECTION = "webos/apps" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/com.webos.app.imageviewer/com.webos.app.imageviewer.bb b/meta-webos/recipes-webos/com.webos.app.imageviewer/com.webos.app.imageviewer.bb index 8d25e0051..89cd9be2d 100644 --- a/meta-webos/recipes-webos/com.webos.app.imageviewer/com.webos.app.imageviewer.bb +++ b/meta-webos/recipes-webos/com.webos.app.imageviewer/com.webos.app.imageviewer.bb @@ -1,7 +1,7 @@ # Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "Image Viewer application" -AUTHOR = "Anish TD " +AUTHOR = "Revanth Kumar " SECTION = "webos/apps" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb b/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb index 12111c094..a67c851e2 100644 --- a/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb +++ b/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb @@ -1,7 +1,7 @@ # Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "General System Launcher application" -AUTHOR = "Kiho Choi" +AUTHOR = "Revanth Kumar " SECTION = "webos/apps" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb b/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb index a7e59e533..16d8c70bf 100644 --- a/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb +++ b/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb @@ -1,7 +1,7 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "General Settings application" -AUTHOR = "Anish TD " +AUTHOR = "Revanth Kumar " SECTION = "webos/apps" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/com.webos.app.videoplayer/com.webos.app.videoplayer.bb b/meta-webos/recipes-webos/com.webos.app.videoplayer/com.webos.app.videoplayer.bb index 214656867..642c5ead2 100644 --- a/meta-webos/recipes-webos/com.webos.app.videoplayer/com.webos.app.videoplayer.bb +++ b/meta-webos/recipes-webos/com.webos.app.videoplayer/com.webos.app.videoplayer.bb @@ -1,7 +1,7 @@ # Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "Video Player application" -AUTHOR = "Anish TD " +AUTHOR = "Revanth Kumar " SECTION = "webos/apps" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/com.webos.app.volume/com.webos.app.volume.bb b/meta-webos/recipes-webos/com.webos.app.volume/com.webos.app.volume.bb index b5c8a173d..c9c4b753d 100644 --- a/meta-webos/recipes-webos/com.webos.app.volume/com.webos.app.volume.bb +++ b/meta-webos/recipes-webos/com.webos.app.volume/com.webos.app.volume.bb @@ -1,7 +1,7 @@ # Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "General System Volume UI application" -AUTHOR = "Jongson Kim" +AUTHOR = "Revanth Kumar " SECTION = "webos/apps" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/com.webos.service.audiooutput/com.webos.service.audiooutput.bb b/meta-webos/recipes-webos/com.webos.service.audiooutput/com.webos.service.audiooutput.bb index 41e58d7f0..7b36d3e0c 100644 --- a/meta-webos/recipes-webos/com.webos.service.audiooutput/com.webos.service.audiooutput.bb +++ b/meta-webos/recipes-webos/com.webos.service.audiooutput/com.webos.service.audiooutput.bb @@ -1,7 +1,7 @@ # Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "Service which controls audio output" -AUTHOR = "Premalatha MVS " +AUTHOR = "Sushovan G " SECTION = "webos/services" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb b/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb index 7737a1ade..27dae2976 100644 --- a/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb +++ b/meta-webos/recipes-webos/com.webos.service.camera/com.webos.service.camera.bb @@ -1,7 +1,7 @@ # Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "Camera service framework to control camera devices" -AUTHOR = "Gururaj Patil" +AUTHOR = "Premalatha M V S " SECTION = "webos/services" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bb b/meta-webos/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bb index d0c5fa474..81bed0857 100644 --- a/meta-webos/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bb +++ b/meta-webos/recipes-webos/com.webos.service.contextintentmgr/com.webos.service.contextintentmgr.bb @@ -1,7 +1,7 @@ # Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "Node-red based context intent manager (CIM)" -AUTHOR = "Tirthadeep Roy " +AUTHOR = "Muthu Santhosh Kumar " SECTION = "webos/extended-service" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.app.mediaviewer.bb b/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.app.mediaviewer.bb index 3fadecce3..db07a3ecd 100644 --- a/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.app.mediaviewer.bb +++ b/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.app.mediaviewer.bb @@ -1,7 +1,7 @@ # Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "webOS OSE sample app for flow" -AUTHOR = "Namsu Kim " +AUTHOR = "Sangwoo Kang " SECTION = "webos/apps" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.service.flowmanager.bb b/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.service.flowmanager.bb index 205796084..25818ccc0 100644 --- a/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.service.flowmanager.bb +++ b/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.service.flowmanager.bb @@ -1,7 +1,7 @@ # Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "webOS Flow manager" -AUTHOR = "Namsu Kim " +AUTHOR = "Sangwoo Kang " SECTION = "webos/extended-service" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb b/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb index 315be9c20..5ddc73826 100644 --- a/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb +++ b/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb @@ -1,7 +1,7 @@ # Copyright (c) 2020-2022 LG Electronics, Inc. SUMMARY = "Mediacontroller service" -AUTHOR = "Sapna Kumari" +AUTHOR = "Kalaimani K " SECTION = "webos/services" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb b/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb index 5f8152caf..6df66f71a 100644 --- a/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb +++ b/meta-webos/recipes-webos/com.webos.service.pdm/com.webos.service.pdm.bb @@ -2,7 +2,7 @@ SUMMARY = "Physical Device Manager handles physical devices using netlink events" DESCRIPTION = "Service for detecting and managing physical devices using netlink events. A physical device is a USB device, available internal storage device and so on." -AUTHOR = "Preetham Bhat " +AUTHOR = "Rajesh Gopu I.V " SECTION = "webos/services" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb b/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb index 92fd59688..e897ce9c5 100644 --- a/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb +++ b/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb @@ -1,7 +1,7 @@ # Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "Peripheral Manager service for webOS OSE" -AUTHOR = "Yogish S " +AUTHOR = "Rajesh Gopu I.V " SECTION = "webosose" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/com.webos.service.power2/com.webos.service.power2.bb b/meta-webos/recipes-webos/com.webos.service.power2/com.webos.service.power2.bb index f1e4207fc..27e9bc116 100644 --- a/meta-webos/recipes-webos/com.webos.service.power2/com.webos.service.power2.bb +++ b/meta-webos/recipes-webos/com.webos.service.power2/com.webos.service.power2.bb @@ -1,7 +1,7 @@ # Copyright (c) 2020-2022 LG Electronics, Inc. SUMMARY = "Power manager service handles device suspend/resume/display states" -AUTHOR = "Abhsiehk Srivastava " +AUTHOR = "Yogish S " LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" SECTION = "webos/libs" diff --git a/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb b/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb index c467f06ff..589a5f7cd 100644 --- a/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb +++ b/meta-webos/recipes-webos/com.webos.service.tts/com.webos.service.tts.bb @@ -2,7 +2,7 @@ SUMMARY = "webOS text to speech service" SECTION = "webos/base" -AUTHOR = "Rachana Agarwal " +AUTHOR = "Rajesh Gopu I.V " LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/configd-data/configd-data.bb b/meta-webos/recipes-webos/configd-data/configd-data.bb index 8e4a14337..14d2ee4bc 100644 --- a/meta-webos/recipes-webos/configd-data/configd-data.bb +++ b/meta-webos/recipes-webos/configd-data/configd-data.bb @@ -1,7 +1,7 @@ # Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "webOS Configuration Service data" -AUTHOR = "SangWook Han " +AUTHOR = "Guruprasad KN " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/configd/configd.bb b/meta-webos/recipes-webos/configd/configd.bb index d00254c7e..a59b03d29 100644 --- a/meta-webos/recipes-webos/configd/configd.bb +++ b/meta-webos/recipes-webos/configd/configd.bb @@ -1,7 +1,7 @@ # Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "webOS Configuration Service" -AUTHOR = "Sangwoo Kang " +AUTHOR = "Guruprasad KN " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/configurator/configurator.bb b/meta-webos/recipes-webos/configurator/configurator.bb index be0f69c5e..a54946093 100644 --- a/meta-webos/recipes-webos/configurator/configurator.bb +++ b/meta-webos/recipes-webos/configurator/configurator.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "Creates the database schema for webOS apps" -AUTHOR = "Ludovic Legrand " +AUTHOR = "Rajesh Gopu I.V " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/cpushareholder-stub/cpushareholder-stub.bb b/meta-webos/recipes-webos/cpushareholder-stub/cpushareholder-stub.bb index 80123e846..8f79a8868 100644 --- a/meta-webos/recipes-webos/cpushareholder-stub/cpushareholder-stub.bb +++ b/meta-webos/recipes-webos/cpushareholder-stub/cpushareholder-stub.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "Stubbed implementation of the webOS CPU shares scripts" -AUTHOR = "Maksym Shevchenko " +AUTHOR = "Rajesh Gopu I.V " SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/db8/db8.bb b/meta-webos/recipes-webos/db8/db8.bb index a83f3926a..491967e72 100644 --- a/meta-webos/recipes-webos/db8/db8.bb +++ b/meta-webos/recipes-webos/db8/db8.bb @@ -2,7 +2,7 @@ SUMMARY = "A userspace service that provides access to the webOS database" SECTION = "webos/base" -AUTHOR = "Maksym Sditanov " +AUTHOR = "Yogish S " LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb b/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb index 79fb79070..cf742ff8b 100644 --- a/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb +++ b/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb @@ -1,7 +1,7 @@ # Copyright (c) 2016-2022 LG Electronics, Inc. DESCRIPTION = "enact-dev command-line tools used by webOS" -AUTHOR = "Jason Robitaille " +AUTHOR = "Seungho Park " SECTION = "webos/devel/tools" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://cli/LICENSE;md5=9456eea7fa7e9e4a4fcdf8e430bd36c8" diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb b/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb index c7df6d9ac..d4415c75a 100644 --- a/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb +++ b/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb @@ -1,7 +1,7 @@ # Copyright (c) 2020-2022 LG Electronics, Inc. SUMMARY = "Enact Sandstone standard override used for Enact apps" -AUTHOR = "Jason Robitaille " +AUTHOR = "Seungho Park " SECTION = "webos/apps" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://enact/LICENSE;md5=e3fc50a88d0a364313df4b21ef20c29e" diff --git a/meta-webos/recipes-webos/event-monitor-network/event-monitor-network.bb b/meta-webos/recipes-webos/event-monitor-network/event-monitor-network.bb index de5362be6..6805e7e8e 100644 --- a/meta-webos/recipes-webos/event-monitor-network/event-monitor-network.bb +++ b/meta-webos/recipes-webos/event-monitor-network/event-monitor-network.bb @@ -1,7 +1,7 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "Event Monitoring for Network service" -AUTHOR = "Seokhee Lee " +AUTHOR = "Muralidhar N " SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/event-monitor/event-monitor.bb b/meta-webos/recipes-webos/event-monitor/event-monitor.bb index a3920e6ac..ccf90ebb1 100644 --- a/meta-webos/recipes-webos/event-monitor/event-monitor.bb +++ b/meta-webos/recipes-webos/event-monitor/event-monitor.bb @@ -1,7 +1,7 @@ # Copyright (c) 2015-2022 LG Electronics, Inc. SUMMARY = "Event Monitoring Service for generic notifications" -AUTHOR = "Viesturs Zarins " +AUTHOR = "Rajesh Gopu I.V " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/filecache/filecache.bb b/meta-webos/recipes-webos/filecache/filecache.bb index d1ca64837..0d6567bdd 100644 --- a/meta-webos/recipes-webos/filecache/filecache.bb +++ b/meta-webos/recipes-webos/filecache/filecache.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS daemon to cache filesystem requests" -AUTHOR = "Alekseyev Oleksandr " +AUTHOR = "Yogish S " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/frameworks/nodejs-module-webos-service.bb b/meta-webos/recipes-webos/frameworks/nodejs-module-webos-service.bb index b40d88f80..77484b560 100644 --- a/meta-webos/recipes-webos/frameworks/nodejs-module-webos-service.bb +++ b/meta-webos/recipes-webos/frameworks/nodejs-module-webos-service.bb @@ -1,7 +1,7 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "Loadable Node.js module for webOS services" -AUTHOR = "Sergiy Kryvonos " +AUTHOR = "Seokhee Lee " SECTION = "webOS/frameworks" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb index 6822db2ad..cf636af63 100644 --- a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb +++ b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb @@ -1,7 +1,7 @@ # Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "g-camera-pipeline is a player which uses GStreamer" -AUTHOR = "Praveen P " +AUTHOR = "Premalatha M V S " SECTION = "webos/media" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/ilib-webapp/ilib-qml-plugin.bb b/meta-webos/recipes-webos/ilib-webapp/ilib-qml-plugin.bb index 4a51516f5..c2e1dc027 100644 --- a/meta-webos/recipes-webos/ilib-webapp/ilib-qml-plugin.bb +++ b/meta-webos/recipes-webos/ilib-webapp/ilib-qml-plugin.bb @@ -1,7 +1,7 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "iLib Qml loader" -AUTHOR = "Goun Lee " +AUTHOR = "Seonmi Jin " SECTION = "libs/qtplugin" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb b/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb index 7fbaffe0f..aef1b53ed 100644 --- a/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb +++ b/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb @@ -1,7 +1,7 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "iLib code and locale data" -AUTHOR = "Goun Lee " +AUTHOR = "Seonmi Jin " SECTION = "libs/javascript" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/imemanager/imemanager.bb b/meta-webos/recipes-webos/imemanager/imemanager.bb index 923a66a4d..9120b7a8c 100644 --- a/meta-webos/recipes-webos/imemanager/imemanager.bb +++ b/meta-webos/recipes-webos/imemanager/imemanager.bb @@ -2,7 +2,7 @@ SUMMARY = "Maliit Input Method Plugins" DESCRIPTION = "Mallit-based virtual keyboard and input method engine for open webOS" -AUTHOR = "Pugalendhi Ganesan " +AUTHOR = "Guruprasad KN " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/jemalloc/jemalloc.bb b/meta-webos/recipes-webos/jemalloc/jemalloc.bb index f16e05d66..7b9841792 100644 --- a/meta-webos/recipes-webos/jemalloc/jemalloc.bb +++ b/meta-webos/recipes-webos/jemalloc/jemalloc.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS of the open-source FreeBSD memory allocation library" -AUTHOR = "Rama Krishna " +AUTHOR = "Rajesh Gopu I.V " SECTION = "libs" LICENSE = "BSD-2-Clause" diff --git a/meta-webos/recipes-webos/libpbnjson/libpbnjson.bb b/meta-webos/recipes-webos/libpbnjson/libpbnjson.bb index 3305cda8f..806a493f9 100644 --- a/meta-webos/recipes-webos/libpbnjson/libpbnjson.bb +++ b/meta-webos/recipes-webos/libpbnjson/libpbnjson.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "Palm's Better Native JSON library" -AUTHOR = "Anatolii Sakhnik " +AUTHOR = "Yogish S " SECTION = "webos/libs" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/libpmscore/libpmscore.bb b/meta-webos/recipes-webos/libpmscore/libpmscore.bb index ad9dd9436..2f6d9dc8e 100644 --- a/meta-webos/recipes-webos/libpmscore/libpmscore.bb +++ b/meta-webos/recipes-webos/libpmscore/libpmscore.bb @@ -1,7 +1,7 @@ # Copyright (c) 2020-2022 LG Electronics, Inc. SUMMARY = "pmscore handles device states" -AUTHOR = "Abhsiehk Srivastava " +AUTHOR = "Yogish S " SECTION = "webos/libs" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/librolegen/librolegen.bb b/meta-webos/recipes-webos/librolegen/librolegen.bb index 610020631..91e47f0af 100644 --- a/meta-webos/recipes-webos/librolegen/librolegen.bb +++ b/meta-webos/recipes-webos/librolegen/librolegen.bb @@ -2,7 +2,7 @@ SUMMARY = "Library for dynamically generating webOS system bus role files for webOS JavaScript services" SECTION = "webos/libs" -AUTHOR = "Seokhyon Seong " +AUTHOR = "Rajesh Gopu I.V " LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/libsandbox/libsandbox.bb b/meta-webos/recipes-webos/libsandbox/libsandbox.bb index 574ddc7e4..1453434e3 100644 --- a/meta-webos/recipes-webos/libsandbox/libsandbox.bb +++ b/meta-webos/recipes-webos/libsandbox/libsandbox.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "libsandbox is a collection of APIs for separating running programs" -AUTHOR = "Andrew Innes " +AUTHOR = "Vibhanshu Dhote " SECTION = "webos/devel" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb b/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb index 14f1dfcf5..bb68c524e 100644 --- a/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb +++ b/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb @@ -1,7 +1,7 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "A localization tool is written in JavaScript" -AUTHOR = "Goun Lee" +AUTHOR = "Seonmi Jin " SECTION = "webos/devel/tools" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327" diff --git a/meta-webos/recipes-webos/ls2-helpers/ls2-helpers.bb b/meta-webos/recipes-webos/ls2-helpers/ls2-helpers.bb index 7bce7f7b2..04721530c 100644 --- a/meta-webos/recipes-webos/ls2-helpers/ls2-helpers.bb +++ b/meta-webos/recipes-webos/ls2-helpers/ls2-helpers.bb @@ -1,7 +1,7 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "Luna service C++11 helpers library" -AUTHOR = "Viesturs Zarins " +AUTHOR = "Yogish S " SECTION = "webos/services" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" diff --git a/meta-webos/recipes-webos/luna-downloadmgr/luna-downloadmgr.bb b/meta-webos/recipes-webos/luna-downloadmgr/luna-downloadmgr.bb index cc8507f9c..7817d3b04 100644 --- a/meta-webos/recipes-webos/luna-downloadmgr/luna-downloadmgr.bb +++ b/meta-webos/recipes-webos/luna-downloadmgr/luna-downloadmgr.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY="The Download Manager service supports the downloading and uploading of files to and from a HP webOS device." -AUTHOR = "Sangwoo Kang " +AUTHOR = "Guruprasad KN " SECTION = "webos/apps" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/luna-init/luna-init.bb b/meta-webos/recipes-webos/luna-init/luna-init.bb index 02c237f1c..1d4411d04 100644 --- a/meta-webos/recipes-webos/luna-init/luna-init.bb +++ b/meta-webos/recipes-webos/luna-init/luna-init.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "Initialization, setup, and font files used by luna-sysmgr and luna-sysservice" -AUTHOR = "Alekseyev Oleksandr " +AUTHOR = "Yogish S " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/luna-prefs/luna-prefs.bb b/meta-webos/recipes-webos/luna-prefs/luna-prefs.bb index 352e4efcf..cb5baae70 100644 --- a/meta-webos/recipes-webos/luna-prefs/luna-prefs.bb +++ b/meta-webos/recipes-webos/luna-prefs/luna-prefs.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS preferences manager" -AUTHOR = "Oleksandr Ivanov " +AUTHOR = "Rajesh Gopu I.V " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/luna-service2-security-conf/luna-service2-security-conf.bb b/meta-webos/recipes-webos/luna-service2-security-conf/luna-service2-security-conf.bb index 81b6c847d..269680a62 100644 --- a/meta-webos/recipes-webos/luna-service2-security-conf/luna-service2-security-conf.bb +++ b/meta-webos/recipes-webos/luna-service2-security-conf/luna-service2-security-conf.bb @@ -1,7 +1,7 @@ # Copyright (c) 2015-2022 LG Electronics, Inc. SUMMARY = "webOS LS2 security configuration" -AUTHOR = "Anatolii Sakhnik " +AUTHOR = "Yogish S " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/luna-service2/luna-service2.bb b/meta-webos/recipes-webos/luna-service2/luna-service2.bb index b89c2a259..ddab8c81d 100644 --- a/meta-webos/recipes-webos/luna-service2/luna-service2.bb +++ b/meta-webos/recipes-webos/luna-service2/luna-service2.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS Luna System Bus library, daemon, and utilities" -AUTHOR = "Anatolii Sakhnik " +AUTHOR = "Yogish S " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index a468c774a..e8d327bc8 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -1,7 +1,7 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "The core of the Luna Surface Manager (compositor)" -AUTHOR = "Anupam Kaul " +AUTHOR = "Elvis Lee " SECTION = "webos/libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb b/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb index 334b4db23..efa3d9135 100644 --- a/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb +++ b/meta-webos/recipes-webos/luna-sysservice/luna-sysservice.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "Provides preference, timezone and ringtone services" -AUTHOR = "Keith Derrick " +AUTHOR = "Rajesh Gopu I.V " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb b/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb index 1c03a876d..671d4f0b9 100644 --- a/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb +++ b/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb @@ -2,7 +2,7 @@ SUMMARY = "Maliit Input Method Framework" DESCRIPTION = "This is the webOS edition of the Maliit input method framework. It differs from upstream in that it supports a hardware keyboard using the wayland protocol." -AUTHOR = "Minjoong Park " +AUTHOR = "Elvis Lee " SECTION = "webos/base" LICENSE = "LGPL-2.0-only" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/media-resource-calculator/media-resource-calculator.bb b/meta-webos/recipes-webos/media-resource-calculator/media-resource-calculator.bb index ec5671d06..2b8a3c9f7 100644 --- a/meta-webos/recipes-webos/media-resource-calculator/media-resource-calculator.bb +++ b/meta-webos/recipes-webos/media-resource-calculator/media-resource-calculator.bb @@ -1,7 +1,7 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. DESCRIPTION = "Media Resource Calculator for webOS" -AUTHOR = "Bhooshan Supe " +AUTHOR = "Kalaimani K " SECTION = "webos/libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/mojoloader/mojoloader.bb b/meta-webos/recipes-webos/mojoloader/mojoloader.bb index 8c918b38d..80df9340b 100644 --- a/meta-webos/recipes-webos/mojoloader/mojoloader.bb +++ b/meta-webos/recipes-webos/mojoloader/mojoloader.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "JavaScript loader for foundation frameworks and other loadable libraries" -AUTHOR = "Suresh Arumugam " +AUTHOR = "Seokhee Lee " SECTION = "webos/frameworks" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/mojoservicelauncher/mojoservicelauncher.bb b/meta-webos/recipes-webos/mojoservicelauncher/mojoservicelauncher.bb index 8792e55f4..8a0e8d777 100644 --- a/meta-webos/recipes-webos/mojoservicelauncher/mojoservicelauncher.bb +++ b/meta-webos/recipes-webos/mojoservicelauncher/mojoservicelauncher.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS component responsible for launching the node.js services" -AUTHOR = "Steve Lemke " +AUTHOR = "Seokhee Lee " SECTION = "webos/frameworks" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-dynaload.bb b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-dynaload.bb index d70eedbbf..4f36e555e 100644 --- a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-dynaload.bb +++ b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-dynaload.bb @@ -2,6 +2,7 @@ require nodejs-module-webos.inc +AUTHOR = "Seokhee Lee " SUMMARY = "A module for nodejs that allows dynamic loading and execution of Javascript files" LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=d980a35955bef62f4f06ee11e344c4d0" diff --git a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-pmlog.bb b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-pmlog.bb index 1e146edb0..f93c7f0ca 100644 --- a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-pmlog.bb +++ b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-pmlog.bb @@ -2,6 +2,7 @@ require nodejs-module-webos.inc +AUTHOR = "Seokhee Lee " SUMMARY = "A module for nodejs that allows Javascript access to the webOS logging system" LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=d486dd326df35bb9d577c353691f0455" diff --git a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-sysbus.bb b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-sysbus.bb index 62b46ecd2..0599dfe50 100644 --- a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-sysbus.bb +++ b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-sysbus.bb @@ -2,6 +2,7 @@ require nodejs-module-webos.inc +AUTHOR = "Seokhee Lee " SUMMARY = "A module for nodejs that allows Javascript access to the webOS system bus" LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=ab2a5dc5745e5204bf0926e2d6ccf877" diff --git a/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb b/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb index ae806616f..3019185d9 100644 --- a/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb +++ b/meta-webos/recipes-webos/notificationmgr/notificationmgr.bb @@ -1,7 +1,7 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. DESCRIPTION = "Notification Manager" -AUTHOR = "Suresh Arumugam " +AUTHOR = "Rajesh Gopu I.V " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/nyx-lib/nyx-lib.bb b/meta-webos/recipes-webos/nyx-lib/nyx-lib.bb index 6cdf64636..15997fd3d 100644 --- a/meta-webos/recipes-webos/nyx-lib/nyx-lib.bb +++ b/meta-webos/recipes-webos/nyx-lib/nyx-lib.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS portability layer - library" -AUTHOR = "Keith Derrick " +AUTHOR = "Yogish S " LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/nyx-modules-qemux86/nyx-modules-qemux86.bb b/meta-webos/recipes-webos/nyx-modules-qemux86/nyx-modules-qemux86.bb index 75d067e68..f2d37a635 100644 --- a/meta-webos/recipes-webos/nyx-modules-qemux86/nyx-modules-qemux86.bb +++ b/meta-webos/recipes-webos/nyx-modules-qemux86/nyx-modules-qemux86.bb @@ -1,7 +1,7 @@ # Copyright (c) 2016-2022 LG Electronics, Inc. SUMMARY = "webOS portability layer - qemux86 nyx module" -AUTHOR = "Sapna Todwal " +AUTHOR = "Yogish S " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/nyx-modules/nyx-modules.bb b/meta-webos/recipes-webos/nyx-modules/nyx-modules.bb index bd458cbb9..2b2a45a91 100644 --- a/meta-webos/recipes-webos/nyx-modules/nyx-modules.bb +++ b/meta-webos/recipes-webos/nyx-modules/nyx-modules.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS portability layer - ${MACHINE}-specific modules" -AUTHOR = "Keith Derrick " +AUTHOR = "Yogish S " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/nyx-utils/nyx-utils.bb b/meta-webos/recipes-webos/nyx-utils/nyx-utils.bb index 0beda5631..18896c86a 100644 --- a/meta-webos/recipes-webos/nyx-utils/nyx-utils.bb +++ b/meta-webos/recipes-webos/nyx-utils/nyx-utils.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "Command line utilities for the webOS Platform Portability Layer" -AUTHOR = "Ed Chejlava " +AUTHOR = "Yogish S " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/openwnn-webos/openwnn-webos.bb b/meta-webos/recipes-webos/openwnn-webos/openwnn-webos.bb index 42a9a4eee..d54cca229 100755 --- a/meta-webos/recipes-webos/openwnn-webos/openwnn-webos.bb +++ b/meta-webos/recipes-webos/openwnn-webos/openwnn-webos.bb @@ -1,7 +1,7 @@ # Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "A Japanese IME library (input method editor for typing Japanese)" -AUTHOR = "Pugalendhi Ganesan " +AUTHOR = "Guruprasad KN " SECTION = "libs" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/pdm-plugin/pdm-plugin.bb b/meta-webos/recipes-webos/pdm-plugin/pdm-plugin.bb index 818aee8f1..574772836 100644 --- a/meta-webos/recipes-webos/pdm-plugin/pdm-plugin.bb +++ b/meta-webos/recipes-webos/pdm-plugin/pdm-plugin.bb @@ -3,7 +3,7 @@ SUMMARY = " Pdm-plugin to support Physical device manager for webOS OSE" DESCRIPTION = "Pdm-plugin to initialize hardware required by Physical device manager in for webOS OSE" SECTION = "webos/services" -AUTHOR = "Preetham Bhat " +AUTHOR = "Rajesh Gopu I.V " LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/pmklogd/pmklogd.bb b/meta-webos/recipes-webos/pmklogd/pmklogd.bb index 3e5fcf5e1..2ae59b67c 100644 --- a/meta-webos/recipes-webos/pmklogd/pmklogd.bb +++ b/meta-webos/recipes-webos/pmklogd/pmklogd.bb @@ -1,7 +1,7 @@ # Copyright (c) 2011-2022 LG Electronics, Inc. SUMMARY = "Kernel logging daemon" -AUTHOR = "Anatolii Sakhnik " +AUTHOR = "Rajesh Gopu I.V " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/pmlogctl/pmlogctl.bb b/meta-webos/recipes-webos/pmlogctl/pmlogctl.bb index 13c8d8918..ab280eaee 100644 --- a/meta-webos/recipes-webos/pmlogctl/pmlogctl.bb +++ b/meta-webos/recipes-webos/pmlogctl/pmlogctl.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS logging control application" -AUTHOR = "Anatolii Sakhnik " +AUTHOR = "Rajesh Gopu I.V " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb b/meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb index 92f99e395..4bda33a6d 100644 --- a/meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb +++ b/meta-webos/recipes-webos/pmlogdaemon/pmlogdaemon.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS logging daemon" -AUTHOR = "Gayathri Srinivasan " +AUTHOR = "Rajesh Gopu I.V " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/pmloglib/pmloglib-private.bb b/meta-webos/recipes-webos/pmloglib/pmloglib-private.bb index e95ec6a04..142b06a65 100644 --- a/meta-webos/recipes-webos/pmloglib/pmloglib-private.bb +++ b/meta-webos/recipes-webos/pmloglib/pmloglib-private.bb @@ -1,7 +1,7 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "webOS logging library - private interface" -AUTHOR = "Anatolii Sakhnik " +AUTHOR = "Rajesh Gopu I.V " SECTION = "webos/libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" diff --git a/meta-webos/recipes-webos/pmloglib/pmloglib.bb b/meta-webos/recipes-webos/pmloglib/pmloglib.bb index 8c4840789..e69feea50 100644 --- a/meta-webos/recipes-webos/pmloglib/pmloglib.bb +++ b/meta-webos/recipes-webos/pmloglib/pmloglib.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "webOS logging library" -AUTHOR = "Gayathri Srinivasan " +AUTHOR = "Rajesh Gopu I.V " SECTION = "webos/libs" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/pms-support-reference/pms-support-reference.bb b/meta-webos/recipes-webos/pms-support-reference/pms-support-reference.bb index b3547e568..0f6dca74c 100644 --- a/meta-webos/recipes-webos/pms-support-reference/pms-support-reference.bb +++ b/meta-webos/recipes-webos/pms-support-reference/pms-support-reference.bb @@ -1,7 +1,7 @@ # Copyright (c) 2020-2022 LG Electronics, Inc. SUMMARY = "Reference power manager plugin" -AUTHOR = "Abhsiehk Srivastava " +AUTHOR = "Yogish S " LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" SECTION = "webos/libs" diff --git a/meta-webos/recipes-webos/pmtrace/pmtrace.bb b/meta-webos/recipes-webos/pmtrace/pmtrace.bb index 6d81817eb..4c1357c31 100644 --- a/meta-webos/recipes-webos/pmtrace/pmtrace.bb +++ b/meta-webos/recipes-webos/pmtrace/pmtrace.bb @@ -1,7 +1,7 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "lttng-ust tracepoints wrapper library and performance tools" -AUTHOR = "Andre Rosa " +AUTHOR = "Rajesh Gopu I.V " SECTION = "webos/libs" LICENSE = "LGPL-2.1-only & MIT & Apache-2.0" diff --git a/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb b/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb index 5994e042a..ac736891f 100644 --- a/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb +++ b/meta-webos/recipes-webos/qml-webos-bridge/qml-webos-bridge.bb @@ -1,7 +1,7 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "webOS QML LS2 bridge" -AUTHOR = "Anupam Kaul " +AUTHOR = "Elvis Lee " SECTION = "webos/libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb b/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb index 16170e7be..f1486d554 100644 --- a/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb +++ b/meta-webos/recipes-webos/qml-webos-components/qml-webos-components.bb @@ -1,7 +1,7 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "Shareable QML components for webOS" -AUTHOR = "Anupam Kaul " +AUTHOR = "Elvis Lee " SECTION = "webos/libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb b/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb index 772dc4b13..f4aa27f5a 100644 --- a/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb +++ b/meta-webos/recipes-webos/qml-webos-framework/qml-webos-framework.bb @@ -1,7 +1,7 @@ # Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "QML widgets and runtime framework for webOS apps" -AUTHOR = "Mikko Levonmaa " +AUTHOR = "Elvis Lee " SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/qt-features-webos/qt-features-webos.bb b/meta-webos/recipes-webos/qt-features-webos/qt-features-webos.bb index f8fbb8e7b..4d2be7179 100644 --- a/meta-webos/recipes-webos/qt-features-webos/qt-features-webos.bb +++ b/meta-webos/recipes-webos/qt-features-webos/qt-features-webos.bb @@ -1,7 +1,7 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "Common Qt features for webOS components" -AUTHOR = "Anupam Kaul " +AUTHOR = "Elvis Lee " SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/sam/sam.bb b/meta-webos/recipes-webos/sam/sam.bb index 903660392..c66e606f3 100644 --- a/meta-webos/recipes-webos/sam/sam.bb +++ b/meta-webos/recipes-webos/sam/sam.bb @@ -1,7 +1,7 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. DESCRIPTION = "System Application Manager" -AUTHOR = "Sangwoo Kang " +AUTHOR = "Guruprasad KN " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb b/meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb index c241e6b01..7ad61a319 100644 --- a/meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb +++ b/meta-webos/recipes-webos/serviceinstaller/serviceinstaller.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "An extensible object oriented component used to add service components to webOS" -AUTHOR = "Anatolii Sakhnik " +AUTHOR = "Rajesh Gopu I.V " SECTION = "webos/devel" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/settingsservice-conf/settingsservice-conf.bb b/meta-webos/recipes-webos/settingsservice-conf/settingsservice-conf.bb index dcf8d366c..5ed71eb45 100644 --- a/meta-webos/recipes-webos/settingsservice-conf/settingsservice-conf.bb +++ b/meta-webos/recipes-webos/settingsservice-conf/settingsservice-conf.bb @@ -1,7 +1,7 @@ # Copyright (c) 2015-2022 LG Electronics, Inc. SUMMARY = "Settings Service Configs" -AUTHOR = "Denys Romanchuk " +AUTHOR = "Rajesh Gopu I.V " SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" diff --git a/meta-webos/recipes-webos/settingsservice/settingsservice.bb b/meta-webos/recipes-webos/settingsservice/settingsservice.bb index 20d9224da..d99fc1209 100644 --- a/meta-webos/recipes-webos/settingsservice/settingsservice.bb +++ b/meta-webos/recipes-webos/settingsservice/settingsservice.bb @@ -1,7 +1,7 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "Settings Service" -AUTHOR = "Radhika S " +AUTHOR = "Rajesh Gopu I.V " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/sleepd/sleepd.bb b/meta-webos/recipes-webos/sleepd/sleepd.bb index 3f6d59f26..b26b99936 100644 --- a/meta-webos/recipes-webos/sleepd/sleepd.bb +++ b/meta-webos/recipes-webos/sleepd/sleepd.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. SUMMARY = "Sleep scheduling policy daemon" -AUTHOR = "Sapna Todwal " +AUTHOR = "Yogish S " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/test-apps/bareapp.bb b/meta-webos/recipes-webos/test-apps/bareapp.bb index b54a637a3..d2caf4559 100644 --- a/meta-webos/recipes-webos/test-apps/bareapp.bb +++ b/meta-webos/recipes-webos/test-apps/bareapp.bb @@ -9,4 +9,4 @@ LIC_FILES_CHKSUM += " \ PR = "${INC_PR}.2" SUMMARY = "Bare (no-enyo) test application" -AUTHOR = "Anish TD " +AUTHOR = "Donghyun Kim " diff --git a/meta-webos/recipes-webos/test-apps/com.webos.app.test.enact.bb b/meta-webos/recipes-webos/test-apps/com.webos.app.test.enact.bb index 51873901f..42e946ec1 100644 --- a/meta-webos/recipes-webos/test-apps/com.webos.app.test.enact.bb +++ b/meta-webos/recipes-webos/test-apps/com.webos.app.test.enact.bb @@ -9,4 +9,4 @@ LIC_FILES_CHKSUM += " \ PR = "${INC_PR}.2" SUMMARY = "Enact test application" -AUTHOR = "Anish TD " +AUTHOR = "Revanth Kumar " diff --git a/meta-webos/recipes-webos/test-apps/com.webos.app.test.webosose.bb b/meta-webos/recipes-webos/test-apps/com.webos.app.test.webosose.bb index f14f1290f..a08e8fb37 100644 --- a/meta-webos/recipes-webos/test-apps/com.webos.app.test.webosose.bb +++ b/meta-webos/recipes-webos/test-apps/com.webos.app.test.webosose.bb @@ -8,4 +8,4 @@ LIC_FILES_CHKSUM += " \ PR = "${INC_PR}.2" SUMMARY = "webOS OSE test application" -AUTHOR = "Anish TD " +AUTHOR = "Revanth Kumar " diff --git a/meta-webos/recipes-webos/test-apps/com.webos.app.test.webrtc.bb b/meta-webos/recipes-webos/test-apps/com.webos.app.test.webrtc.bb index 8dc835b39..fbc1bb518 100644 --- a/meta-webos/recipes-webos/test-apps/com.webos.app.test.webrtc.bb +++ b/meta-webos/recipes-webos/test-apps/com.webos.app.test.webrtc.bb @@ -5,5 +5,5 @@ require webos-open-test-apps.inc PR = "${INC_PR}.0" SUMMARY = "WebRTC" -AUTHOR = "Pankaj Kumar Maharana " +AUTHOR = "Sujeet Nayak " diff --git a/meta-webos/recipes-webos/test-apps/com.webos.app.test.youtube.bb b/meta-webos/recipes-webos/test-apps/com.webos.app.test.youtube.bb index 431f83e21..ab9b2003e 100644 --- a/meta-webos/recipes-webos/test-apps/com.webos.app.test.youtube.bb +++ b/meta-webos/recipes-webos/test-apps/com.webos.app.test.youtube.bb @@ -10,4 +10,4 @@ PR = "${INC_PR}.3" WEBOS_PREFERRED_GFX_IMAGE_FORMAT_ENABLED = "0" SUMMARY = "YouTube Test Application" -AUTHOR = "Anish TD " +AUTHOR = "Revanth Kumar " diff --git a/meta-webos/recipes-webos/test-apps/test.redirection.backgroundmedia.bb b/meta-webos/recipes-webos/test-apps/test.redirection.backgroundmedia.bb index e4ad20817..48c03d6c8 100644 --- a/meta-webos/recipes-webos/test-apps/test.redirection.backgroundmedia.bb +++ b/meta-webos/recipes-webos/test-apps/test.redirection.backgroundmedia.bb @@ -1,7 +1,7 @@ # Copyright (c) 2022 LG Electronics, Inc. SUMMARY = "Background Media Test Application" -AUTHOR = "Kalaiselvi P " +AUTHOR = "Sujeet Nayak " require webos-open-test-apps.inc diff --git a/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb b/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb index ec7b5e638..e7360b642 100644 --- a/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb +++ b/meta-webos/recipes-webos/umediaserver/umediaserver-configs.bb @@ -1,7 +1,7 @@ # Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "umediaserver configs installation" -AUTHOR = "Peter Nordström " +AUTHOR = "Kalaimani K " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/umediaserver/umediaserver.bb b/meta-webos/recipes-webos/umediaserver/umediaserver.bb index fce5d288e..519e613a1 100644 --- a/meta-webos/recipes-webos/umediaserver/umediaserver.bb +++ b/meta-webos/recipes-webos/umediaserver/umediaserver.bb @@ -1,7 +1,7 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "webOS uMediaserver daemon and utilities" -AUTHOR = "Ian Cain " +AUTHOR = "Kalaimani K " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index 191ea0b24..4fbc301eb 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -1,7 +1,7 @@ # Copyright (c) 2015-2022 LG Electronics, Inc. SUMMARY = "WebAppMgr is responsible for running web applications on webOS" -AUTHOR = "Lokesh Kumar Goel " +AUTHOR = "Donghyun Kim " SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=790420e31fa17284afec484d5b2ad2d8" diff --git a/meta-webos/recipes-webos/webos-connman-adapter/wca-support-api.bb b/meta-webos/recipes-webos/webos-connman-adapter/wca-support-api.bb index af69e2050..d41c04141 100644 --- a/meta-webos/recipes-webos/webos-connman-adapter/wca-support-api.bb +++ b/meta-webos/recipes-webos/webos-connman-adapter/wca-support-api.bb @@ -1,7 +1,7 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "webOS connman adapter support API" -AUTHOR = "Seokhee Lee " +AUTHOR = "Muralidhar N " SECTION = "webos/libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/webos-connman-adapter/wca-support.bb b/meta-webos/recipes-webos/webos-connman-adapter/wca-support.bb index de255c310..38b5ccb9e 100644 --- a/meta-webos/recipes-webos/webos-connman-adapter/wca-support.bb +++ b/meta-webos/recipes-webos/webos-connman-adapter/wca-support.bb @@ -1,7 +1,7 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "webOS connman adapter support library" -AUTHOR = "Seokhee Lee " +AUTHOR = "Muralidhar N " SECTION = "webos/libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/webos-connman-adapter/webos-connman-adapter.bb b/meta-webos/recipes-webos/webos-connman-adapter/webos-connman-adapter.bb index f2c0372a8..245ad8ebc 100644 --- a/meta-webos/recipes-webos/webos-connman-adapter/webos-connman-adapter.bb +++ b/meta-webos/recipes-webos/webos-connman-adapter/webos-connman-adapter.bb @@ -1,7 +1,7 @@ # Copyright (c) 2012-2022 LG Electronics, Inc. DESCRIPTION = "webOS component for managing network connections using connman" -AUTHOR = "Seokhee Lee " +AUTHOR = "Muralidhar N " LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ file://LICENSE;md5=2763f3ed850f8412903ea776e0526bea \ diff --git a/meta-webos/recipes-webos/webos-fonts/webos-fonts.inc b/meta-webos/recipes-webos/webos-fonts/webos-fonts.inc index 32ce7adb2..16a3cf1c2 100644 --- a/meta-webos/recipes-webos/webos-fonts/webos-fonts.inc +++ b/meta-webos/recipes-webos/webos-fonts/webos-fonts.inc @@ -1,6 +1,7 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. SUMMARY = "Fonts used by webOS" +AUTHOR = "Seonmi Jin " SECTION = "webos/fonts" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/webos-nettools/webos-nettools.bb b/meta-webos/recipes-webos/webos-nettools/webos-nettools.bb index 2d125c795..9aa306b5a 100644 --- a/meta-webos/recipes-webos/webos-nettools/webos-nettools.bb +++ b/meta-webos/recipes-webos/webos-nettools/webos-nettools.bb @@ -1,7 +1,7 @@ # Copyright (c) 2021-2022 LG Electronics, Inc. DESCRIPTION = "Luna-service2 service providing network utility tools like ping and arping" -AUTHOR = "Rakes Pani " +AUTHOR = "Muralidhar N " SECTION = "webos/services" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/webos-wayland-extensions/webos-wayland-extensions.bb b/meta-webos/recipes-webos/webos-wayland-extensions/webos-wayland-extensions.bb index 5b430f1ef..d9931f700 100644 --- a/meta-webos/recipes-webos/webos-wayland-extensions/webos-wayland-extensions.bb +++ b/meta-webos/recipes-webos/webos-wayland-extensions/webos-wayland-extensions.bb @@ -1,7 +1,7 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "Wayland protocol extensions for webOS" -AUTHOR = "Anupam Kaul " +AUTHOR = "Elvis Lee " SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ From db80fb49532a2071bb00cbffbf8fa4e775b66d69 Mon Sep 17 00:00:00 2001 From: Hyunjae Shin Date: Mon, 18 Jul 2022 08:13:03 +0900 Subject: [PATCH 0475/2022] ose: Modify recipe author :Release Notes: :Detailed Notes: :Testing Performed: :QA Notes: N/A :Issues Addressed: [WRO-8343] Fix author of webOS component Change-Id: I63ca7601f28bbde6b8d7ac761e66044a78c2992f --- meta-webos/recipes-extended/procps/procps_%.bbappend | 2 +- meta-webos/recipes-multimedia/umi/umi.bb | 2 +- .../auto-luna-surface-manager/auto-luna-surface-manager.bb | 2 +- meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb | 2 +- .../com.webos.service.cec/com.webos.service.cec.bb | 2 +- .../com.webos.service.flowmanager/com.webos.app.mediaviewer.bb | 2 +- .../com.webos.service.flowmanager.bb | 2 +- .../com.webos.service.peripheralmanager.bb | 2 +- meta-webos/recipes-webos/configd-data/configd-data.bb | 2 +- meta-webos/recipes-webos/configd/configd.bb | 2 +- meta-webos/recipes-webos/libtimedautomata/libtimedautomata.bb | 2 +- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 2 +- .../nodejs-module-webos/nodejs-module-webos-dynaload.bb | 2 +- .../nodejs-module-webos/nodejs-module-webos-pmlog.bb | 2 +- .../nodejs-module-webos/nodejs-module-webos-sysbus.bb | 2 +- .../recipes-webos/nyx-modules-qemux86/nyx-modules-qemux86.bb | 2 +- 16 files changed, 16 insertions(+), 16 deletions(-) diff --git a/meta-webos/recipes-extended/procps/procps_%.bbappend b/meta-webos/recipes-extended/procps/procps_%.bbappend index 42590ee50..97a6cb712 100644 --- a/meta-webos/recipes-extended/procps/procps_%.bbappend +++ b/meta-webos/recipes-extended/procps/procps_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2015-2022 LG Electronics, Inc. -AUTHOR = "Viesturs Zarins " +AUTHOR = "Viesturs Zarins " EXTENDPRAUTO:append = "webos3" inherit webos_machine_impl_dep diff --git a/meta-webos/recipes-multimedia/umi/umi.bb b/meta-webos/recipes-multimedia/umi/umi.bb index 10306ce62..51813e092 100644 --- a/meta-webos/recipes-multimedia/umi/umi.bb +++ b/meta-webos/recipes-multimedia/umi/umi.bb @@ -1,7 +1,7 @@ # Copyright (c) 2018-2022 LG Electronics, Inc. SUMMARY = "AudioOutputd adaptation layer (UMI) API definition and test harness" -AUTHOR = "Sushovan G " +AUTHOR = "Sushovan G " SECTION = "webos/libs" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb index 1c6c2736f..0c2b60a5b 100644 --- a/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb +++ b/meta-webos/recipes-webos/auto-luna-surface-manager/auto-luna-surface-manager.bb @@ -1,7 +1,7 @@ # Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "Surface Manager for webOS Auto Reference UX" -AUTHOR = "Elvis Lee " +AUTHOR = "Elvis Lee " SECTION = "webos/base" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb index 21ea679f5..ef4ec2744 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-api.bb @@ -1,7 +1,7 @@ # Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "webOS Bluetooth SIL API" -AUTHOR = "Muralidhar N " +AUTHOR = "Muralidhar N " SECTION = "webos/services" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/com.webos.service.cec/com.webos.service.cec.bb b/meta-webos/recipes-webos/com.webos.service.cec/com.webos.service.cec.bb index 3abf3eb5b..bc0264950 100644 --- a/meta-webos/recipes-webos/com.webos.service.cec/com.webos.service.cec.bb +++ b/meta-webos/recipes-webos/com.webos.service.cec/com.webos.service.cec.bb @@ -1,7 +1,7 @@ # Copyright (c) 2022 LG Electronics, Inc. SUMMARY = "HDMI CEC service for webOS OSE" -AUTHOR = "Manjuraehmad Momin " +AUTHOR = "Manjuraehmad Momin " SECTION = "webosose" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.app.mediaviewer.bb b/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.app.mediaviewer.bb index db07a3ecd..a7a14874d 100644 --- a/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.app.mediaviewer.bb +++ b/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.app.mediaviewer.bb @@ -1,7 +1,7 @@ # Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "webOS OSE sample app for flow" -AUTHOR = "Sangwoo Kang " +AUTHOR = "Sangwoo Kang " SECTION = "webos/apps" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.service.flowmanager.bb b/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.service.flowmanager.bb index 25818ccc0..13680ebfd 100644 --- a/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.service.flowmanager.bb +++ b/meta-webos/recipes-webos/com.webos.service.flowmanager/com.webos.service.flowmanager.bb @@ -1,7 +1,7 @@ # Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "webOS Flow manager" -AUTHOR = "Sangwoo Kang " +AUTHOR = "Sangwoo Kang " SECTION = "webos/extended-service" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb b/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb index e897ce9c5..1805c4e59 100644 --- a/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb +++ b/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb @@ -1,7 +1,7 @@ # Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "Peripheral Manager service for webOS OSE" -AUTHOR = "Rajesh Gopu I.V " +AUTHOR = "Rajesh Gopu I.V " SECTION = "webosose" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/configd-data/configd-data.bb b/meta-webos/recipes-webos/configd-data/configd-data.bb index 14d2ee4bc..a5e6fa0bb 100644 --- a/meta-webos/recipes-webos/configd-data/configd-data.bb +++ b/meta-webos/recipes-webos/configd-data/configd-data.bb @@ -1,7 +1,7 @@ # Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "webOS Configuration Service data" -AUTHOR = "Guruprasad KN " +AUTHOR = "Guruprasad KN " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/configd/configd.bb b/meta-webos/recipes-webos/configd/configd.bb index a59b03d29..81ce2808a 100644 --- a/meta-webos/recipes-webos/configd/configd.bb +++ b/meta-webos/recipes-webos/configd/configd.bb @@ -1,7 +1,7 @@ # Copyright (c) 2014-2022 LG Electronics, Inc. SUMMARY = "webOS Configuration Service" -AUTHOR = "Guruprasad KN " +AUTHOR = "Guruprasad KN " SECTION = "webos/base" LICENSE = "Apache-2.0" diff --git a/meta-webos/recipes-webos/libtimedautomata/libtimedautomata.bb b/meta-webos/recipes-webos/libtimedautomata/libtimedautomata.bb index aebf5311f..85fef9f95 100644 --- a/meta-webos/recipes-webos/libtimedautomata/libtimedautomata.bb +++ b/meta-webos/recipes-webos/libtimedautomata/libtimedautomata.bb @@ -1,7 +1,7 @@ # Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "Timed Automata library for Event translation" -AUTHOR = "Byunggul Koh " +AUTHOR = "Byunggul Koh " SECTION = "webos/libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index e8d327bc8..81d4f24f8 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -1,7 +1,7 @@ # Copyright (c) 2013-2022 LG Electronics, Inc. SUMMARY = "The core of the Luna Surface Manager (compositor)" -AUTHOR = "Elvis Lee " +AUTHOR = "Elvis Lee " SECTION = "webos/libs" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-dynaload.bb b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-dynaload.bb index 4f36e555e..9abc0f804 100644 --- a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-dynaload.bb +++ b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-dynaload.bb @@ -2,7 +2,7 @@ require nodejs-module-webos.inc -AUTHOR = "Seokhee Lee " +AUTHOR = "Seokhee Lee " SUMMARY = "A module for nodejs that allows dynamic loading and execution of Javascript files" LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=d980a35955bef62f4f06ee11e344c4d0" diff --git a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-pmlog.bb b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-pmlog.bb index f93c7f0ca..a35469705 100644 --- a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-pmlog.bb +++ b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-pmlog.bb @@ -2,7 +2,7 @@ require nodejs-module-webos.inc -AUTHOR = "Seokhee Lee " +AUTHOR = "Seokhee Lee " SUMMARY = "A module for nodejs that allows Javascript access to the webOS logging system" LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=d486dd326df35bb9d577c353691f0455" diff --git a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-sysbus.bb b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-sysbus.bb index 0599dfe50..7ee217233 100644 --- a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-sysbus.bb +++ b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-sysbus.bb @@ -2,7 +2,7 @@ require nodejs-module-webos.inc -AUTHOR = "Seokhee Lee " +AUTHOR = "Seokhee Lee " SUMMARY = "A module for nodejs that allows Javascript access to the webOS system bus" LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=ab2a5dc5745e5204bf0926e2d6ccf877" diff --git a/meta-webos/recipes-webos/nyx-modules-qemux86/nyx-modules-qemux86.bb b/meta-webos/recipes-webos/nyx-modules-qemux86/nyx-modules-qemux86.bb index f2d37a635..e7f728c33 100644 --- a/meta-webos/recipes-webos/nyx-modules-qemux86/nyx-modules-qemux86.bb +++ b/meta-webos/recipes-webos/nyx-modules-qemux86/nyx-modules-qemux86.bb @@ -1,7 +1,7 @@ # Copyright (c) 2016-2022 LG Electronics, Inc. SUMMARY = "webOS portability layer - qemux86 nyx module" -AUTHOR = "Yogish S " +AUTHOR = "Yogish S " SECTION = "webos/base" LICENSE = "Apache-2.0" From 6468975c8a6aae995dd0f6309706e23d54847a55 Mon Sep 17 00:00:00 2001 From: "muralidhar.n" Date: Thu, 14 Jul 2022 12:12:45 +0530 Subject: [PATCH 0476/2022] bluetooth-sil-bluez5=79 :Release Notes: g_bit_lock crash issue fix in OSE :Detailed Notes: bluetooth-sil-bluez5: submissions/78..submissions/79 b3f35ec g_bit_lock crash issue fix in OSE :Testing Performed: Refer CCC Ticket [WRO-8386] :QA Notes: NA :Issues Addressed: [WRO-8386] CCC: bluetooth-sil-bluez5=79 Change-Id: Ifdaec98b959d5318eb249ff7ea60b50e82a5ced7 --- meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb index 020bf1c62..45a50f060 100644 --- a/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb +++ b/meta-webos/recipes-webos/bluetooth/bluetooth-sil-bluez5.bb @@ -17,7 +17,7 @@ WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES ??= "" # Add runtime dependency on bluez5 OBEX service when we have to support FTP RDEPENDS:${PN} += "${@ bb.utils.contains('WEBOS_BLUETOOTH_ENABLED_SERVICE_CLASSES', 'FTP', 'bluez5-obex', '', d)}" -WEBOS_VERSION = "0.1.0-78_a66bf9ebb7bf1f4fde127742f43393b387fa3a73" +WEBOS_VERSION = "0.1.0-79_da8c20f4c37fe582b49036f859269bc29fb92915" PR = "r6" inherit webos_component From ef413f36100b680a048ac44a702acf678696bb66 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 18 Jul 2022 13:07:07 +0200 Subject: [PATCH 0477/2022] ose: Modify recipe author :Release Notes: Add missing spaces before '<' or remove extra space after 'AUTHOR'. :Detailed Notes: Where name different spelling was used for the same e-mail address, unify them to the most commonly used one. :Testing Performed: :QA Notes: N/A :Issues Addressed: [WRO-8343] Fix author of webOS component Change-Id: If4453c5e274e621797d7d7c1644ae03c1736e1a7 --- meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb | 2 +- .../com.webos.app.mediagallery/com.webos.app.mediagallery.bb | 2 +- .../com.webos.service.storageaccess.bb | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb b/meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb index 8060ae139..a37693165 100644 --- a/meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb +++ b/meta-webos/recipes-upstreamable/sunpinyin/sunpinyin.bb @@ -1,7 +1,7 @@ # Copyright (c) 2019-2022 LG Electronics, Inc. SUMMARY = "Pinyin input method library" -AUTHOR = "pugalendhi Ganesan " +AUTHOR = "Pugalendhi Ganesan " HOMEPAGE = "https://github.com/sunpinyin/sunpinyin" SECTION = "libs" LICENSE = "LGPL-2.1-only" diff --git a/meta-webos/recipes-webos/com.webos.app.mediagallery/com.webos.app.mediagallery.bb b/meta-webos/recipes-webos/com.webos.app.mediagallery/com.webos.app.mediagallery.bb index b1da7157b..2288aedef 100644 --- a/meta-webos/recipes-webos/com.webos.app.mediagallery/com.webos.app.mediagallery.bb +++ b/meta-webos/recipes-webos/com.webos.app.mediagallery/com.webos.app.mediagallery.bb @@ -7,7 +7,7 @@ # under vendor's standard commercial license. SUMMARY = "Mediagallery QML App" -AUTHOR = "Hyein Lee" +AUTHOR = "Hyein Lee " SECTION = "webos/apps" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = " \ diff --git a/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb b/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb index b4054e486..ab17c082c 100644 --- a/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb +++ b/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb @@ -1,7 +1,7 @@ # Copyright (c) 2021-2022 LG Electronics, Inc. SUMMARY = "Storage Access Framework for OSE" -AUTHOR = "RajeshGopu IV " +AUTHOR = "Rajesh Gopu I.V " SECTION = "webos/base" LICENSE = "Apache-2.0" From fd804560e34aed96d0933e78a3be551ce5b4b5fc Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Mon, 18 Jul 2022 15:22:48 +0900 Subject: [PATCH 0478/2022] ose: wam=61 :Release Notes: Remove the deprecated functions related to deleteStorageData :Detailed Notes: wam: submissions/60..submissions/61 01809c6 [op] Remove the deprecated functions related to deleteStorageData :Testing Performed: CCC testing :QA Notes: :Issues Addressed: [WRO-7781] [WAM Refactoring] unreachable code - deleteStorageData [WRO-8671] CCC: wam=61 Change-Id: I4095763a7ab3035cdb7975750c181b71aea8076a --- meta-webos/recipes-webos/wam/wam.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index 4fbc301eb..327ec272d 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -18,7 +18,7 @@ RDEPENDS:${PN} += "util-linux" VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" -WEBOS_VERSION = "1.0.2-60_16eac384ecb2f5fb25736ca2f198974dc36056c8" +WEBOS_VERSION = "1.0.2-61_c35a65e0101756327c8b8198d11d8a123d00610b" PR = "r45" WAM_BUILD_SYSTEM = "webos_qmake6" From 0b0e3ac7ecd8c57c3a81bb4a68dc9ed73aead1f8 Mon Sep 17 00:00:00 2001 From: Kyungjik Min Date: Mon, 27 Jun 2022 14:25:50 +0900 Subject: [PATCH 0479/2022] ose: fluentbit=webos4 webos-fluentbit-plugins=r7 :Release Notes: Remove msgpack headers from fluentbit-dev package. :Detailed Notes: fluentbit-plugins should depend msgpack-c because fluentbit-dev conflicts with libmsgpack-dev when populate_sdk as below. Configuring applicationinstallerCollected errors: * check_data_file_clashes: Package fluentbit-dev wants to install file ../usr/include/msgpack.h But that file is already provided by package * libmsgpackc-dev * check_data_file_clashes: Package fluentbit-dev wants to install file ../usr/include/msgpack/fbuffer.h But that file is already provided by package * libmsgpackc-dev * check_data_file_clashes: Package fluentbit-dev wants to install file ../usr/include/msgpack/gcc_atomic.h But that file is already provided by package * libmsgpackc-dev * check_data_file_clashes: Package fluentbit-dev wants to install file ../usr/include/msgpack/object.h But that file is already provided by package * libmsgpackc-dev * check_data_file_clashes: Package fluentbit-dev wants to install file ../usr/include/msgpack/pack.h But that file is already provided by package * libmsgpackc-dev * check_data_file_clashes: Package fluentbit-dev wants to install file ../usr/include/msgpack/pack_define.h But that file is already provided by package * libmsgpackc-dev * check_data_file_clashes: Package fluentbit-dev wants to install file ../usr/include/msgpack/pack_template.h But that file is already provided by package * libmsgpackc-dev * check_data_file_clashes: Package fluentbit-dev wants to install file ../usr/include/msgpack/sbuffer.h But that file is already provided by package * libmsgpackc-dev * check_data_file_clashes: Package fluentbit-dev wants to install file ../usr/include/msgpack/sysdep.h But that file is already provided by package * libmsgpackc-dev * check_data_file_clashes: Package fluentbit-dev wants to install file ../usr/include/msgpack/timestamp.h But that file is already provided by package * libmsgpackc-dev * check_data_file_clashes: Package fluentbit-dev wants to install file ../usr/include/msgpack/unpack.h But that file is already provided by package * libmsgpackc-dev * check_data_file_clashes: Package fluentbit-dev wants to install file ../usr/include/msgpack/unpack_define.h But that file is already provided by package * libmsgpackc-dev * check_data_file_clashes: Package fluentbit-dev wants to install file ../usr/include/msgpack/unpack_template.h But that file is already provided by package * libmsgpackc-dev * check_data_file_clashes: Package fluentbit-dev wants to install file ../usr/include/msgpack/util.h But that file is already provided by package * libmsgpackc-dev * check_data_file_clashes: Package fluentbit-dev wants to install file ../usr/include/msgpack/version.h But that file is already provided by package * libmsgpackc-dev * check_data_file_clashes: Package fluentbit-dev wants to install file ../usr/include/msgpack/version_master.h But that file is already provided by package * libmsgpackc-dev * check_data_file_clashes: Package fluentbit-dev wants to install file ../usr/include/msgpack/vrefbuffer.h But that file is already provided by package * libmsgpackc-dev * check_data_file_clashes: Package fluentbit-dev wants to install file ../usr/include/msgpack/zbuffer.h But that file is already provided by package * libmsgpackc-dev * check_data_file_clashes: Package fluentbit-dev wants to install file ../usr/include/msgpack/zone.h But that file is already provided by package * libmsgpackc-dev :Testing Performed: Local Build Test :QA Notes: N/A :Issues Addressed: [WRO-6672] [OSE] : Cmake files is not installed and configuring incomplete error is displaying [WRO-8076] CCC: Various build fixes Change-Id: I16fcf7c0d887e7f6a7830b3c7ac67402b3b8f3e7 --- .../recipes-webos/fluentbit/fluentbit_%.bbappend | 11 ++--------- .../webos-fluentbit-plugins.bb | 4 ++-- 2 files changed, 4 insertions(+), 11 deletions(-) diff --git a/meta-webos/recipes-webos/fluentbit/fluentbit_%.bbappend b/meta-webos/recipes-webos/fluentbit/fluentbit_%.bbappend index 611cfe6f3..7678955b1 100644 --- a/meta-webos/recipes-webos/fluentbit/fluentbit_%.bbappend +++ b/meta-webos/recipes-webos/fluentbit/fluentbit_%.bbappend @@ -1,10 +1,10 @@ # Copyright (c) 2021-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webos3" +EXTENDPRAUTO:append = "webos4" FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -DEPENDS +="openssl" +DEPENDS += "openssl" # fix /usr/include/features.h:397:4: error: #warning _FORTIFY_SOURCE requires compiling with optimization (-O) [-Werror=cpp] SRC_URI += " \ @@ -22,13 +22,6 @@ do_install:append() { install -v -m 644 ${S}/lib/monkey/include/monkey/mk_core.h ${D}${includedir}/monkey/ install -v -m 644 ${S}/lib/monkey/include/monkey/mk_core/*.h ${D}${includedir}/monkey/mk_core - # install msgpack.h - install -v -m 644 ${S}/lib/msgpack-c/include/msgpack.h ${D}${includedir} - - # install msgpack/*.h - install -d ${D}${includedir}/msgpack/ - install -v -m 644 ${S}/lib/msgpack-c/include/msgpack/*.h ${D}${includedir}/msgpack/ - # install libco.h install -v -m 644 ${S}/lib/flb_libco/*.h ${D}${includedir} diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb index 55b07dc0b..981e9ba33 100644 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb @@ -9,11 +9,11 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=2bdfe040dcf81b4038370ae96036c519 \ " -DEPENDS = "glib-2.0 luna-service2 libpbnjson fluentbit" +DEPENDS = "glib-2.0 luna-service2 libpbnjson fluentbit msgpack-c" RDEPENDS:${PN} = "nyx-utils python3-core python3-requests python3-atlassian-python-api" WEBOS_VERSION = "1.0.0-33_f0dd348555a483b6e6de8456e515df39a51cb89a" -PR = "r6" +PR = "r7" inherit webos_component inherit webos_enhanced_submissions From da8964b9bdf7108bcbd03a103e98a9a37749998f Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 5 Jul 2022 09:43:54 +0000 Subject: [PATCH 0480/2022] arm-compute-library=r3 (package examples and tests in separate package) :Release Notes: There is a PACKAGECONFIG for tests and examples, but all are then packaged inside ${PN}-dev introduce ${PN}-tests and ${PN}-examples. :Detailed Notes: Fixes: ERROR: arm-compute-library-21.11-r1 do_package_qa: QA Issue: /usr/bin/arm-compute-library-21.11/tests/arm_compute_validation contained in package arm-compute-library-dev requires libarm_compute.so()(64bit), but no providers found in RDEPENDS:arm-compute-library-dev? [file-rdeps] ERROR: arm-compute-library-21.11-r1 do_package_qa: QA Issue: /usr/bin/arm-compute-library-21.11/tests/arm_compute_validation contained in package arm-compute-library-dev requires libarm_compute_graph.so()(64bit), but no providers found in RDEPENDS:arm-compute-library-dev? [file-rdeps] ERROR: arm-compute-library-21.11-r1 do_package_qa: Fatal QA errors were found, failing task. For latest oe-core which changed default RDEPENDS:${PN}-dev = ${PN} to be just RRECOMMENDS:${PN}-dev in: https://git.openembedded.org/openembedded-core/commit/?id=a5b381c0f45c590a762647a9956a8f41e2e2315e https://git.openembedded.org/openembedded-core/commit/?id=6f28420ab0e8f2ab5eb06326024777a40aded0a6 :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4709] Create GPVB with Yocto 4.1 Langdale [WRO-8076] CCC: Various build fixes Change-Id: Iac6d2aef83f59467e60fbc49976030fd0b4650ed --- .../arm-compute-library_21.11.bb | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb b/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb index 104444d80..c825c779a 100644 --- a/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb +++ b/meta-webos/recipes-upstreamable/arm-compute-library/arm-compute-library_21.11.bb @@ -15,7 +15,7 @@ SRC_URI = " \ file://0001-OpenCL-dlopen-libOpenCL.so.1-instead-of-libO.patch \ " -PR = "r2" +PR = "r3" S = "${WORKDIR}/git" @@ -122,9 +122,13 @@ do_install() { } INHIBIT_PACKAGE_DEBUG_SPLIT = "1" -SOLIBS = ".so" -FILES_SOLIBSDEV = "" -FILES:${PN} += "${libdir}/*.so*" -FILES:${PN}-dev += "${includedir}/* ${bindir}/* ${libdir}/pkgconfig/*" +# package unversioned .so files in PN (they are not dev symlinks) +FILES_SOLIBSDEV = "" +FILES:${PN} += "${libdir}/*.so" +PACKAGES =+ "${PN}-tests ${PN}-examples" +FILES:${PN}-tests = "${bindir}/*/tests" +FILES:${PN}-examples = "${bindir}/*/examples" +RDEPENDS:${PN}-tests += "${PN}" +RDEPENDS:${PN}-examples += "${PN}" From ad19e5e28aa7d1252a33b9367432fb0a5be88f7d Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 5 Jul 2022 16:41:35 +0000 Subject: [PATCH 0481/2022] tensorflow-lite=r4 (fetch even more 3rdparty dependencies) :Release Notes: I've missed some of the downloaded dependencies, because network is enabled in do_configure when icecc.bbclass is enabled, see: https://lists.openembedded.org/g/openembedded-core/message/167731 :Detailed Notes: Notice that pytorch/cpuinfo is used in different revision for clog-source and cpuinfo-source, I've tried to use the newer revision for both in the recipe, but it failed to build, so use different revisions again. Fixes: http://gecko.lge.com/Errors/Details/431813 http://gecko.lge.com/Errors/Details/432641 http://gecko.lge.com/Errors/Details/432689 $ grep src= BUILD/work/qemux86_64-webos-linux/tensorflow-lite/2.6.2-r3/temp/log.do_configure.3* -- Using src='https://github.com/pytorch/cpuinfo/archive/d5e37adf1406cf899d7d9ec1d317c47506ccb970.tar.gz' src='/OE/lge/build/webos/kirkstone/BUILD/work/qemux86_64-webos-linux/tensorflow-lite/2.6.2-r3/build/clog-download/clog-prefix/src/d5e37adf1406cf899d7d9ec1d317c47506ccb970.tar.gz' -- Using src='https://github.com/pytorch/cpuinfo/archive/5916273f79a21551890fd3d56fc5375a78d1598d.zip' src='/OE/lge/build/webos/kirkstone/BUILD/work/qemux86_64-webos-linux/tensorflow-lite/2.6.2-r3/build/cpuinfo-download/cpuinfo-prefix/src/5916273f79a21551890fd3d56fc5375a78d1598d.zip' -- Using src='https://github.com/Maratyszcza/FP16/archive/0a92994d729ff76a58f692d3028ca1b64b145d91.zip' src='/OE/lge/build/webos/kirkstone/BUILD/work/qemux86_64-webos-linux/tensorflow-lite/2.6.2-r3/build/FP16-download/fp16-prefix/src/0a92994d729ff76a58f692d3028ca1b64b145d91.zip' -- Using src='https://github.com/Maratyszcza/FXdiv/archive/b408327ac2a15ec3e43352421954f5b1967701d1.zip' src='/OE/lge/build/webos/kirkstone/BUILD/work/qemux86_64-webos-linux/tensorflow-lite/2.6.2-r3/build/FXdiv-download/fxdiv-prefix/src/b408327ac2a15ec3e43352421954f5b1967701d1.zip' -- Using src='https://github.com/Maratyszcza/pthreadpool/archive/545ebe9f225aec6dca49109516fac02e973a3de2.zip' src='/OE/lge/build/webos/kirkstone/BUILD/work/qemux86_64-webos-linux/tensorflow-lite/2.6.2-r3/build/pthreadpool-download/pthreadpool-prefix/src/545ebe9f225aec6dca49109516fac02e973a3de2.zip' :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4709] Create GPVB with Yocto 4.1 Langdale [WRO-8076] CCC: Various build fixes Change-Id: If9af4ce302bb130e2146a5a67b6d0db81dab371f --- .../tensorflow-lite/tensorflow-lite_2.6.2.bb | 68 ++++++++++++++++--- 1 file changed, 60 insertions(+), 8 deletions(-) diff --git a/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb index b2207426a..0cd418071 100644 --- a/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb +++ b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb @@ -4,12 +4,11 @@ SUMMARY = "TensorFlow Lite CPP Library" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://LICENSE;md5=c7e17cca1ef4230861fb7868e96c387e" -# Compute branch info from ${PV} as Base PV... -BPV = "${@'.'.join(d.getVar('PV').split('.')[0:2])}" -DPV = "${@'.'.join(d.getVar('PV').split('.')[0:3])}" -# Since they tag off of something resembling ${PV}, use it. -# Matches v${PV} +BRANCH = "r${@oe.utils.trim_version('${PV}', 2)}" + +SRCREV_FORMAT = "tensorflow" +# Matches v${PV} tag SRCREV_tensorflow = "c2363d6d025981c661f8cbecf4c73ca7fbf38caf" SRCREV_abseil-cpp = "997aaf3a28308eba1b9156aa35ab7bca9688e9f6" # v1.12.0 @@ -24,10 +23,34 @@ SRCREV_gemmlowp = "fda83bdc38b118cc6b56753bd540caa49e570745" SRCREV_vulkan-headers = "ec2db85225ab410bc6829251bef6c578aaed5868" SRCREV_egl-headers = "649981109e263b737e7735933c90626c29a306f2" SRCREV_opengl-headers = "0cb0880d91581d34f96899c86fc1bf35627b4b81" -SRCREV_FORMAT = "tensorflow" + +# Following are needed for XNNPACK: +# tensorflow-lite/2.6.2-r3/git $ grep 'URL ' xnnpack/cmake/Download* +# xnnpack/cmake/DownloadCLog.cmake: URL https://github.com/pytorch/cpuinfo/archive/d5e37adf1406cf899d7d9ec1d317c47506ccb970.tar.gz +# xnnpack/cmake/DownloadCpuinfo.cmake: URL https://github.com/pytorch/cpuinfo/archive/5916273f79a21551890fd3d56fc5375a78d1598d.zip +# xnnpack/cmake/DownloadFP16.cmake: URL https://github.com/Maratyszcza/FP16/archive/0a92994d729ff76a58f692d3028ca1b64b145d91.zip +# xnnpack/cmake/DownloadFXdiv.cmake: URL https://github.com/Maratyszcza/FXdiv/archive/b408327ac2a15ec3e43352421954f5b1967701d1.zip +# xnnpack/cmake/DownloadGoogleBenchmark.cmake: URL https://github.com/google/benchmark/archive/v1.5.3.zip +# xnnpack/cmake/DownloadGoogleTest.cmake: URL https://github.com/google/googletest/archive/5a509dbd2e5a6c694116e329c5a20dc190653724.zip +# xnnpack/cmake/DownloadPThreadPool.cmake: URL https://github.com/Maratyszcza/pthreadpool/archive/545ebe9f225aec6dca49109516fac02e973a3de2.zip + +# Notice that cpuinfo-source and clog-source use different revisions from the same repo: +# the newer (by 60 commits) 5916273f79a21551890fd3d56fc5375a78d1598d for cpuinfo +# https://github.com/pytorch/cpuinfo/compare/d5e37adf1406cf899d7d9ec1d317c47506ccb970...5916273f79a21551890fd3d56fc5375a78d1598d +SRCREV_clog = "d5e37adf1406cf899d7d9ec1d317c47506ccb970" +SRCREV_cpuinfo = "5916273f79a21551890fd3d56fc5375a78d1598d" +SRCREV_fp16 = "0a92994d729ff76a58f692d3028ca1b64b145d91" +SRCREV_fxdiv = "b408327ac2a15ec3e43352421954f5b1967701d1" +SRCREV_pthreadpool = "545ebe9f225aec6dca49109516fac02e973a3de2" + +# Following is for FP16: +# tensorflow-lite/2.6.2-r3/git $ grep 'GIT' FP16-source/cmake/Download* +# FP16-source/cmake/DownloadPSimd.cmake: GIT_REPOSITORY https://github.com/Maratyszcza/psimd.git +# FP16-source/cmake/DownloadPSimd.cmake: GIT_TAG master +SRCREV_psimd = "072586a71b55b7f8c584153d223e95687148a900" SRC_URI = " \ - git://github.com/tensorflow/tensorflow.git;branch=r${BPV};protocol=https;name=tensorflow \ + git://github.com/tensorflow/tensorflow.git;branch=${BRANCH};protocol=https;name=tensorflow \ git://github.com/abseil/abseil-cpp.git;branch=lts_2021_03_24;protocol=https;destsuffix=git/abseil-cpp;name=abseil-cpp \ git://github.com/google/flatbuffers;branch=master;protocol=https;destsuffix=git/flatbuffers;name=flatbuffers \ git://gitlab.com/libeigen/eigen;branch=master;protocol=https;destsuffix=git/eigen;name=eigen \ @@ -40,6 +63,12 @@ SRC_URI = " \ git://github.com/KhronosGroup/Vulkan-Headers;branch=master;protocol=https;destsuffix=git/vulkan_headers;name=vulkan-headers \ git://github.com/KhronosGroup/EGL-Registry;branch=main;protocol=https;destsuffix=git/egl_headers;name=egl-headers \ git://github.com/KhronosGroup/OpenGL-Registry;branch=main;protocol=https;destsuffix=git/opengl_headers;name=opengl-headers \ + git://github.com/pytorch/cpuinfo;branch=master;protocol=https;destsuffix=git/cpuinfo-source;name=cpuinfo \ + git://github.com/pytorch/cpuinfo;branch=master;protocol=https;destsuffix=git/clog-source;name=clog \ + git://github.com/Maratyszcza/FP16;branch=master;protocol=https;destsuffix=git/FP16-source;name=fp16 \ + git://github.com/Maratyszcza/FXdiv;branch=master;protocol=https;destsuffix=git/FXdiv-source;name=fxdiv \ + git://github.com/Maratyszcza/pthreadpool;branch=master;protocol=https;destsuffix=git/pthreadpool-source;name=pthreadpool \ + git://github.com/Maratyszcza/psimd;branch=master;protocol=https;destsuffix=git/psimd-source;name=psimd \ file://0001-remove-label_image-benchmark_model-exclude-option.patch \ file://0002-enable-external-delegate-in-benchmarktool.patch \ file://0003-Fix-return-type-issues.patch \ @@ -120,7 +149,30 @@ do_configure:prepend() { done } -EXTRA_OECMAKE = "-DBUILD_SHARED_LIBS=ON" +# For these we can set *_SOURCE_DIR to avoid copy in do_configure:prepend: +# tensorflow-lite/2.6.2-r3/git $ grep SOURCE_DIR xnnpack/CMakeLists.txt | grep Downloading +# MESSAGE(STATUS "Downloading clog to ${CMAKE_BINARY_DIR}/clog-source (define CLOG_SOURCE_DIR to avoid it)") +# MESSAGE(STATUS "Downloading cpuinfo to ${CMAKE_BINARY_DIR}/cpuinfo-source (define CPUINFO_SOURCE_DIR to avoid it)") +# MESSAGE(STATUS "Downloading FP16 to ${CMAKE_BINARY_DIR}/FP16-source (define FP16_SOURCE_DIR to avoid it)") +# MESSAGE(STATUS "Downloading FXdiv to ${CMAKE_BINARY_DIR}/FXdiv-source (define FXDIV_SOURCE_DIR to avoid it)") +# MESSAGE(STATUS "Downloading pthreadpool to ${CMAKE_BINARY_DIR}/pthreadpool-source (define PTHREADPOOL_SOURCE_DIR to avoid it)") +# MESSAGE(STATUS "Downloading Google Test to ${CMAKE_BINARY_DIR}/googletest-source (define GOOGLETEST_SOURCE_DIR to avoid it)") +# MESSAGE(STATUS "Downloading Google Benchmark to ${CMAKE_BINARY_DIR}/googlebenchmark-source (define GOOGLEBENCHMARK_SOURCE_DIR to avoid it)") +# tensorflow-lite/2.6.2-r3/git $ grep SOURCE_DIR FP16-source/CMakeLists.txt | grep Downloading +# MESSAGE(STATUS "Downloading PSimd to ${CMAKE_BINARY_DIR}/psimd-source (define PSIMD_SOURCE_DIR to avoid it)") +# MESSAGE(STATUS "Downloading Google Test to ${CMAKE_BINARY_DIR}/googletest-source (define GOOGLETEST_SOURCE_DIR to avoid it)") +# MESSAGE(STATUS "Downloading Google Benchmark to ${CMAKE_BINARY_DIR}/googlebenchmark-source (define GOOGLEBENCHMARK_SOURCE_DIR to avoid it)") + +EXTRA_OECMAKE += " \ + -DCLOG_SOURCE_DIR=${S}/clog-source \ + -DCPUINFO_SOURCE_DIR=${S}/cpuinfo-source \ + -DFP16_SOURCE_DIR=${S}/FP16-source \ + -DFXDIV_SOURCE_DIR=${S}/FXdiv-source \ + -DPTHREADPOOL_SOURCE_DIR=${S}/pthreadpool-source \ + -DPSIMD_SOURCE_DIR=${S}/psimd-source \ +" + +EXTRA_OECMAKE += "-DBUILD_SHARED_LIBS=ON" AIF_INSTALL_DIR = "${datadir}/aif" From 645ee2e2f9ee461f3e6b01a3c63284001efc1f51 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 6 Jul 2022 22:49:43 +0000 Subject: [PATCH 0482/2022] libgdrive=r3 (make do_compile re-executable) :Release Notes: do_compile fails when re-executed in the same WORKDIR :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/432708 DEBUG: Executing shell function do_compile NOTE: make -j 64 mkdir -p build/test mkdir -p build mkdir: cannot create directory 'TOPDIR/BUILD/work/qemux86_64-webos-linux/libgdrive/0.0.1+gitAUTOINC+a7838bcf55-r2/git/lib': File exists WARNING: exit code 1 from a shell command. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-8076] CCC: Various build fixes Change-Id: Ib540a2ccc0389b5d25d9e70a5ce86eeb6bc749e4 --- meta-webos/recipes-webos/libgdrive/libgdrive.bb | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/libgdrive/libgdrive.bb b/meta-webos/recipes-webos/libgdrive/libgdrive.bb index dac749c64..426be22b8 100644 --- a/meta-webos/recipes-webos/libgdrive/libgdrive.bb +++ b/meta-webos/recipes-webos/libgdrive/libgdrive.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = "file://LICENSE;md5=82938594632d748d209a71bb60e3cdcb \ DEPENDS = "curl" PV = "0.0.1+git${SRCPV}" -PR = "r2" +PR = "r3" SRCREV_FORMAT = "libgdrive" SRCREV_libgdrive = "a7838bcf55fbbc6cfb66209bb2db1fbe82758924" @@ -32,6 +32,7 @@ do_compile:prepend() { cd ${S}/jconer oe_runmake cp -R ${S}/jconer/include/jconer ${S}/include/ + rm -rfv ${S}/lib mkdir ${S}/lib cp ${S}/jconer/libjconer.a ${S}/lib/ cp -R ${S}/common/include/common ${S}/include/ From 778990e12ffa3905e45decee2643b4eacb495448 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 13 Jul 2022 14:57:14 +0000 Subject: [PATCH 0483/2022] armnn=r3 (respect baselib) :Release Notes: use baselib instead of 'lib'. :Detailed Notes: With aarch64: BASE_LIB_tune-aarch64="lib64" we have: export libdir="/usr/lib64" causing: http://gecko.lge.com/Errors/Details/438297 because this file is actually installed in build/delegate/CMakeFiles/Export/lib64 :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-8076] CCC: Various build fixes Change-Id: I3e09f1c4d100cc80ba95b0ef22bdaacf64433de5 --- meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb b/meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb index a03fb154e..29736491c 100644 --- a/meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb +++ b/meta-webos/recipes-upstreamable/armnn/armnn_21.11.bb @@ -20,7 +20,7 @@ SRC_URI = " \ # Matches v${PV} SRCREV = "5e9965cae1cc6162649910f423ebd86001fc1931" -PR = "r2" +PR = "r3" S = "${WORKDIR}/git" @@ -131,8 +131,8 @@ do_install:append() { install -d ${D}${libdir}/cmake install -d ${D}${libdir}/cmake/armnn cp $CP_ARGS "${B}/delegate/ArmnnDelegateConfig.cmake" "${D}${libdir}/cmake/armnn" - cp $CP_ARGS "${B}/delegate/CMakeFiles/Export/lib/ArmnnDelegateTargets.cmake" "${D}${libdir}/cmake/armnn" - cp $CP_ARGS "${B}/delegate/CMakeFiles/Export/lib/ArmnnDelegateTargets-release.cmake" "${D}${libdir}/cmake/armnn" + cp $CP_ARGS "${B}/delegate/CMakeFiles/Export/${baselib}/ArmnnDelegateTargets.cmake" "${D}${libdir}/cmake/armnn" + cp $CP_ARGS "${B}/delegate/CMakeFiles/Export/${baselib}/ArmnnDelegateTargets-release.cmake" "${D}${libdir}/cmake/armnn" #remove duplicate files rm ${D}${libdir}/ArmnnDelegate*.cmake From 6f9ba59d7169022d302f8e1da6b5435a6a556ec4 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 4 Jul 2022 18:10:14 +0000 Subject: [PATCH 0484/2022] leveldb, grpc, tesseract-lang, bridge-utils: remove fix_branch_name inherit :Release Notes: These issues were already fixed in upstream recipes. :Detailed Notes: Resolves: WARNING: meta-oe/meta-oe/recipes-dbs/leveldb/leveldb_1.22.bb: inherit fix_branch_name line has no effect and can be removed. WARNING: meta-oe/meta-oe/recipes-dbs/leveldb/leveldb_1.22.bb: inherit fix_branch_name line has no effect and can be removed. WARNING: meta-oe/meta-oe/recipes-dbs/leveldb/leveldb_1.22.bb: inherit fix_branch_name line has no effect and can be removed. WARNING: meta-oe/meta-networking/recipes-support/bridge-utils/bridge-utils_1.7.1.bb: inherit fix_branch_name line has no effect and can be removed. WARNING: meta-oe/meta-networking/recipes-support/bridge-utils/bridge-utils_1.7.1.bb: inherit fix_branch_name line has no effect and can be removed. WARNING: meta-oe/meta-oe/recipes-devtools/grpc/grpc_1.45.2.bb: inherit fix_branch_name line has no effect and can be removed. WARNING: meta-oe/meta-oe/recipes-devtools/grpc/grpc_1.45.2.bb: inherit fix_branch_name line has no effect and can be removed. WARNING: meta-oe/meta-oe/recipes-graphics/tesseract/tesseract-lang_4.1.0.bb: inherit fix_branch_name line has no effect and can be removed. WARNING: meta-oe/meta-oe/recipes-graphics/tesseract/tesseract-lang_4.1.0.bb: inherit fix_branch_name line has no effect and can be removed. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRN-9820] Create GPVB with Yocto 4.0 Kirkstone [WRO-8076] CCC: Various build fixes Change-Id: I1c90bbaf6b02c4393ee686325c18cab5eb5e8ceb --- meta-webos/recipes-dbs/leveldb/leveldb_%.bbappend | 5 ----- meta-webos/recipes-devtools/grpc/grpc_%.bbappend | 5 ----- .../recipes-graphics/tesseract/tesseract-lang_%.bbappend | 7 ------- .../recipes-support/bridge-utils/bridge-utils_%.bbappend | 6 ------ 4 files changed, 23 deletions(-) delete mode 100644 meta-webos/recipes-graphics/tesseract/tesseract-lang_%.bbappend delete mode 100644 meta-webos/recipes-support/bridge-utils/bridge-utils_%.bbappend diff --git a/meta-webos/recipes-dbs/leveldb/leveldb_%.bbappend b/meta-webos/recipes-dbs/leveldb/leveldb_%.bbappend index dabdeb8f8..610469c93 100644 --- a/meta-webos/recipes-dbs/leveldb/leveldb_%.bbappend +++ b/meta-webos/recipes-dbs/leveldb/leveldb_%.bbappend @@ -1,10 +1,5 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. -# workaround for the upstream branch name change from master to main. -# inherit line below can be removed when the request is applied upstream. -# : https://lists.openembedded.org/g/openembedded-devel/message/97510 -inherit fix_branch_name - EXTENDPRAUTO:append = "webos1" PACKAGECONFIG:append = " snappy" diff --git a/meta-webos/recipes-devtools/grpc/grpc_%.bbappend b/meta-webos/recipes-devtools/grpc/grpc_%.bbappend index 70f3c36e3..cd2c1f096 100644 --- a/meta-webos/recipes-devtools/grpc/grpc_%.bbappend +++ b/meta-webos/recipes-devtools/grpc/grpc_%.bbappend @@ -1,10 +1,5 @@ # Copyright (c) 2018-2022 LG Electronics, Inc. -# workaround for the upstream branch name change from master to main. -# inherit line below can be removed when the request is applied upstream. -# : https://lists.openembedded.org/g/openembedded-devel/message/97511 -inherit fix_branch_name - EXTENDPRAUTO:append = "webos4" do_install:append() { diff --git a/meta-webos/recipes-graphics/tesseract/tesseract-lang_%.bbappend b/meta-webos/recipes-graphics/tesseract/tesseract-lang_%.bbappend deleted file mode 100644 index d12c65a53..000000000 --- a/meta-webos/recipes-graphics/tesseract/tesseract-lang_%.bbappend +++ /dev/null @@ -1,7 +0,0 @@ -# Copyright (c) 2022 LG Electronics, Inc. - -# workaround for the upstream branch name change from master to main. -# inherit line below can be removed when the request is applied upstream. -# : https://lists.openembedded.org/g/openembedded-devel/message/97507 -# : https://lists.openembedded.org/g/openembedded-devel/message/97508 -inherit fix_branch_name diff --git a/meta-webos/recipes-support/bridge-utils/bridge-utils_%.bbappend b/meta-webos/recipes-support/bridge-utils/bridge-utils_%.bbappend deleted file mode 100644 index ec249ad62..000000000 --- a/meta-webos/recipes-support/bridge-utils/bridge-utils_%.bbappend +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) 2022 LG Electronics, Inc. - -# workaround for the upstream branch name change from master to main. -# inherit line below can be removed when the request is applied upstream. -# : https://lists.openembedded.org/g/openembedded-devel/message/97509 -inherit fix_branch_name From 557b2f13851a03a7eb09e6c7f2b6843c05c5e9a9 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 8 Jul 2022 18:24:42 +0000 Subject: [PATCH 0485/2022] webos.inc: add openssh to BAD_RECOMMENDATIONS :Release Notes: We were already doing that because of openssh-dbg, but now the openssh-ptest is causing similar issue in devel images after: https://git.openembedded.org/openembedded-core/commit/?id=a98188e83b2c027d99cc38e3367e1ec2a98efbb0 With openssh-9 which by default uses sftp, you need to use -O flag to switch to old scp protocol and then we don't need RRECOMMENDed openssh-sftp-server on target image. :Detailed Notes: Fixes: ERROR: webos-image-devel-1.0-r2 do_rootfs: Unable to install packages. Command '/OE/lge/build/webosose/langdale/BUILD/work/qemux86_64-webos-linux/webos-image-devel/1.0-r2/recipe-sysroot-native/usr/bin/opkg --volatile-cache -f /OE/lge/build/webosose/langdale/BUILD/work/qemux86_64-webos-linux/webos-image-devel/1.0-r2/opkg.conf -t /OE/lge/build/webosose/langdale/BUILD/work/qemux86_64-webos-linux/webos-image-devel/1.0-r2/temp/ipktemp/ -o /OE/lge/build/webosose/langdale/BUILD/work/qemux86_64-webos-linux/webos-image-devel/1.0-r2/rootfs --force_postinstall --prefer-arch-to-version --add-ignore-recommends update-rc.d --no-install-recommends install acl-ptest attr-ptest babeltrace2-ptest bluez5-ptest busybox-ptest bzip2-ptest com.webos.service.videooutput-ptest coreutils-ptest curl-ptest dbus-ptest e2fsprogs-ptest elfutils-ptest gawk-ptest gettext-ptest glib-networking-ptest gstreamer1.0-ptest gzip-ptest keyutils-ptest leveldb-ptest libevent-2.1-ptest libexpat-ptest libgcrypt-ptest libgdbm-ptest libgdk-pixbuf-2.0-ptest libglib-2.0-ptest libgpg-error-ptest libnl-3-ptest libpcre-ptest libpopt-ptest libprotobuf-ptest libumi-ptest libusb-1.0-ptest libval-mock-ptest libxml++-2.6-ptest libxml2-ptest libz-ptest luna-service2-ptest nettle-ptest openssh-ptest openssl-ptest opkg-ptest packagegroup-core-boot-ptest packagegroup-core-ssh-dropbear-ptest packagegroup-core-tools-debug-ptest packagegroup-core-tools-profile-ptest packagegroup-webos-devel-ptest packagegroup-webos-extended-ptest packagegroup-webos-ml-ptest packagegroup-webos-test-ptest pango-ptest perl-ptest python3-bcrypt-ptest python3-cryptography-ptest python3-jsonpointer-ptest python3-more-itertools-ptest python3-numpy-ptest python3-ptest python3-pyasn1-ptest python3-wcwidth-ptest python3-webcolors-ptest qtbase-ptest qtdeclarative-ptest qtgraphicaleffects-ptest qtwayland-ptest slang-ptest strace-ptest tcl-ptest util-linux-ptest wayland-ptest' returned 1: * Solver encountered 1 problem(s): * Problem 1/1: * - package openssh-9.0p1-r0.0.qemux86_64 conflicts with dropbear provided by dropbear-2022.82-r0.0webos7.qemux86_64 * - package openssh-ptest-9.0p1-r0.0.qemux86_64 requires openssh, but none of the providers can be installed * - package packagegroup-core-ssh-dropbear-1.0-r1.0.qemux86_64 requires dropbear, but none of the providers can be installed * - conflicting requests * - problem with installed package packagegroup-core-ssh-dropbear-1.0-r1.0.qemux86_64 * * Solution 1: * - allow deinstallation of packagegroup-core-ssh-dropbear-1.0-r1.0.qemux86_64 * Solution 2: * - do not ask to install a package providing openssh-ptest :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4709] Create GPVB with Yocto 4.1 Langdale [WRO-8076] CCC: Various build fixes Change-Id: I9f15697db85025bd650bcc5b50ae36be122a202f --- meta-webos/conf/distro/include/webos.inc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/meta-webos/conf/distro/include/webos.inc b/meta-webos/conf/distro/include/webos.inc index 087e84542..c739895dc 100644 --- a/meta-webos/conf/distro/include/webos.inc +++ b/meta-webos/conf/distro/include/webos.inc @@ -197,6 +197,12 @@ WEBOSQEMUDEPS = "${@bb.utils.contains("INCOMPATIBLE_LICENSE", "GPLv3", "", "qemu DISTRO_EXTRA_RDEPENDS:append:qemuarm = " ${WEBOSQEMUDEPS}" DISTRO_EXTRA_RDEPENDS:append:qemux86 = " ${WEBOSQEMUDEPS}" +# Undo: +# https://git.openembedded.org/openembedded-core/commit/?id=a98188e83b2c027d99cc38e3367e1ec2a98efbb0 +# https://git.openembedded.org/openembedded-core/commit/?h=dunfell&id=93796b2787c410385d3176495e5307327449d2f7 +# just use -O when using new openssh-9 and want to scp from image with dropbear +BAD_RECOMMENDATIONS += "openssh-sftp-server" + USER_CLASSES ?= "" # Configure Bluetooth service classes we want to support From 8ed4c44cc74144f7c6b3706cafb6dfc431d770f6 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 12 Jul 2022 17:54:25 +0000 Subject: [PATCH 0486/2022] wam=r46 (fix build with DEBUG_BUILD) :Release Notes: When -Og (e.g. with DEBUG_BUILD) or -O0 is used, linking fails. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/437133 FAILED: src/WebAppMgr : && TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot-native/usr/bin/x86_64-webos-linux/x86_64-webos-linux-g++ -m64 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong -Og -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot -Og -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45=/usr/src/debug/wam/1.0.2-60-r45 -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45=/usr/src/debug/wam/1.0.2-60-r45 -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot-native= -pipe -fvisibility-inlines-hidden -Wno-error=uninitialized -Wno-error=maybe-uninitialized -fno-rtti -fno-exceptions -Wall -fpermissive -funwind-tables -std=c++14 -Wno-psabi -Werror -DNDEBUG -m64 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong -Og -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot -Og -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45=/usr/src/debug/wam/1.0.2-60-r45 -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45=/usr/src/debug/wam/1.0.2-60-r45 -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot-native= -pipe -fvisibility-inlines-hidden -Wno-error=uninitialized -Wno-error=maybe-uninitialized -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -fmacro-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45=/usr/src/debug/wam/1.0.2-60-r45 -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45=/usr/src/debug/wam/1.0.2-60-r45 -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot-native= -Wl,-z,relro,-z,now -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -fmacro-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45=/usr/src/debug/wam/1.0.2-60-r45 -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45=/usr/src/debug/wam/1.0.2-60-r45 -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot-native= -Wl,-z,relro,-z,now -Wl,--no-as-needed -Wno-psabi -rdynamic src/CMakeFiles/WebAppMgrExec.dir/wam_main.cc.o -o src/WebAppMgr -Wl,-rpath,"\$ORIGIN/platform:\$ORIGIN/core:" -lcbe -LTOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot/usr/lib -lluna-prefs -ljson-c -LTOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot/usr/lib -lPmLogLib src/platform/libWebAppMgr.so.1.0.0 src/core/libWebAppMgrCore.so.1.0.0 -lcbe -LTOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot/usr/lib -lglib-2.0 -lPmLogLib TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot/usr/lib/libboost_filesystem.so.1.79.0 TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot/usr/lib/libboost_atomic.so.1.79.0 -ldl -ljsoncpp -lluna-prefs -ljson-c -llunaservice && : src/platform/libWebAppMgr.so.1.0.0: error: undefined reference to 'vtable for WebView' TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot-native/usr/bin/x86_64-webos-linux/../../libexec/x86_64-webos-linux/gcc/x86_64-webos-linux/12.1.0/ld: the vtable symbol may be undefined because the class is missing its key function collect2: error: ld returned 1 exit status Interestingly this happens only with -Og/-O0 but adding all the individual flags from -O1 (as defined in https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options) doesn't prevent that (with -O1 there is no reference to WebView vtable, while with -O0 it's undefined in: 1.0.2-60-r45/build/src/platform/CMakeFiles/WebAppMgr.dir/webengine/web_view_impl.cc.o and 13 UnitTests like 1.0.2-60-r45.debug/build/src/tests/CMakeFiles/WebAppMgrUnitTest.dir/launch_app_test.cc.o As https://gcc.gnu.org/faq.html#vtables and https://lld.llvm.org/missingkeyfunction.html#forgetting-to-declare-a-virtual-function-in-an-abstract-class-as-pure say, make sure that all functions of abstract WebView are pure. It was introduced in submissions/53 with: http://gpro.lge.com/c/webosose/wam/+/312202 commit 4e4fb1decbf78ee04a1ba99fafd26a168a566170 Author: Oleg Bogomolov Date: Tue Jun 1 14:40:32 2021 +0300 [op][tests] Add interfaces for WebView and WebViewWindow :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-4709] Create GPVB with Yocto 4.1 Langdale [WRO-8076] CCC: Various build fixes Change-Id: I8cc225b172aafd7e52d3d9f8831dd12c070fd010 --- meta-webos/recipes-webos/wam/wam.bb | 5 +- ...0002-WebView-Fix-build-with-Og-or-O0.patch | 69 +++++++++++++++++++ 2 files changed, 73 insertions(+), 1 deletion(-) create mode 100644 meta-webos/recipes-webos/wam/wam/0002-WebView-Fix-build-with-Og-or-O0.patch diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index 327ec272d..55521fbf3 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -19,7 +19,7 @@ VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" WEBOS_VERSION = "1.0.2-61_c35a65e0101756327c8b8198d11d8a123d00610b" -PR = "r45" +PR = "r46" WAM_BUILD_SYSTEM = "webos_qmake6" WAM_BUILD_SYSTEM:webos = "webos_cmake" @@ -36,8 +36,11 @@ inherit webos_public_repo WAM_DATA_DIR = "${webos_execstatedir}/${BPN}" +# http://gpro.lge.com/c/webosose/wam/+/332989 Fix build with gcc-11 +# http://gpro.lge.com/c/webosose/wam/+/332990 WebView: Fix build with -Og or -O0 SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE} \ file://0001-Fix-build-with-gcc-11.patch \ + file://0002-WebView-Fix-build-with-Og-or-O0.patch \ " S = "${WORKDIR}/git" diff --git a/meta-webos/recipes-webos/wam/wam/0002-WebView-Fix-build-with-Og-or-O0.patch b/meta-webos/recipes-webos/wam/wam/0002-WebView-Fix-build-with-Og-or-O0.patch new file mode 100644 index 000000000..26848503a --- /dev/null +++ b/meta-webos/recipes-webos/wam/wam/0002-WebView-Fix-build-with-Og-or-O0.patch @@ -0,0 +1,69 @@ +From 083e9a49f2d89a613e51394342def7f4de973eea Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Tue, 12 Jul 2022 17:42:39 +0000 +Subject: [PATCH] WebView: Fix build with -Og or -O0 + +:Release Notes: +When -Og (e.g. with DEBUG_BUILD) or -O0 is used, linking fails. + +:Detailed Notes: +Fixes: +http://gecko.lge.com/Errors/Details/437133 +FAILED: src/WebAppMgr +: && TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot-native/usr/bin/x86_64-webos-linux/x86_64-webos-linux-g++ -m64 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong -Og -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot -Og -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45=/usr/src/debug/wam/1.0.2-60-r45 -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45=/usr/src/debug/wam/1.0.2-60-r45 -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot-native= -pipe -fvisibility-inlines-hidden -Wno-error=uninitialized -Wno-error=maybe-uninitialized -fno-rtti -fno-exceptions -Wall -fpermissive -funwind-tables -std=c++14 -Wno-psabi -Werror -DNDEBUG -m64 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong -Og -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot -Og -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45=/usr/src/debug/wam/1.0.2-60-r45 -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45=/usr/src/debug/wam/1.0.2-60-r45 -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot-native= -pipe -fvisibility-inlines-hidden -Wno-error=uninitialized -Wno-error=maybe-uninitialized -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -fmacro-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45=/usr/src/debug/wam/1.0.2-60-r45 -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45=/usr/src/debug/wam/1.0.2-60-r45 -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot-native= -Wl,-z,relro,-z,now -Wl,-O1 -Wl,--hash-style=gnu -Wl,--as-needed -fmacro-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45=/usr/src/debug/wam/1.0.2-60-r45 -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45=/usr/src/debug/wam/1.0.2-60-r45 -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot-native= -Wl,-z,relro,-z,now -Wl,--no-as-needed -Wno-psabi -rdynamic src/CMakeFiles/WebAppMgrExec.dir/wam_main.cc.o -o src/WebAppMgr -Wl,-rpath,"\$ORIGIN/platform:\$ORIGIN/core:" -lcbe -LTOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot/usr/lib -lluna-prefs -ljson-c -LTOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot/usr/lib -lPmLogLib src/platform/libWebAppMgr.so.1.0.0 src/core/libWebAppMgrCore.so.1.0.0 -lcbe -LTOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot/usr/lib -lglib-2.0 -lPmLogLib TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot/usr/lib/libboost_filesystem.so.1.79.0 TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot/usr/lib/libboost_atomic.so.1.79.0 -ldl -ljsoncpp -lluna-prefs -ljson-c -llunaservice && : +src/platform/libWebAppMgr.so.1.0.0: error: undefined reference to 'vtable for WebView' +TOPDIR/BUILD/work/qemux86_64-webos-linux/wam/1.0.2-60-r45/recipe-sysroot-native/usr/bin/x86_64-webos-linux/../../libexec/x86_64-webos-linux/gcc/x86_64-webos-linux/12.1.0/ld: the vtable symbol may be undefined because the class is missing its key function +collect2: error: ld returned 1 exit status + +Interestingly this happens only with -Og/-O0 but adding all the individual +flags from -O1 (as defined in +https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html#Optimize-Options) +doesn't prevent that (with -O1 there is no reference to WebView vtable, while +with -O0 it's undefined in: +1.0.2-60-r45/build/src/platform/CMakeFiles/WebAppMgr.dir/webengine/web_view_impl.cc.o +and 13 UnitTests like +1.0.2-60-r45.debug/build/src/tests/CMakeFiles/WebAppMgrUnitTest.dir/launch_app_test.cc.o + +As https://gcc.gnu.org/faq.html#vtables and +https://lld.llvm.org/missingkeyfunction.html#forgetting-to-declare-a-virtual-function-in-an-abstract-class-as-pure +say, make sure that all functions of abstract WebView are pure. + +:Testing Performed: +Only build tested. + +:QA Notes: +No change to image. + +:Issues Addressed: +[PLAT-141293] Create GPVB with Yocto 3.4 Honister +--- + src/platform/webengine/web_view.h | 2 +- + src/platform/webengine/web_view_impl.h | 2 +- + 2 files changed, 2 insertions(+), 2 deletions(-) + +diff --git a/src/platform/webengine/web_view.h b/src/platform/webengine/web_view.h +index 0d9b204..dd2b8ac 100644 +--- a/src/platform/webengine/web_view.h ++++ b/src/platform/webengine/web_view.h +@@ -68,7 +68,7 @@ class WebView { + virtual void NotifyMemoryPressure( + webos::WebViewBase::MemoryPressureLevel level) = 0; + virtual void SetVisible(bool visible) = 0; +- virtual void SetPrerenderState(); ++ virtual void SetPrerenderState() = 0; + virtual void SetVisibilityState( + webos::WebViewBase::WebPageVisibilityState visibilityState) = 0; + virtual std::string DocumentTitle() const = 0; +diff --git a/src/platform/webengine/web_view_impl.h b/src/platform/webengine/web_view_impl.h +index 51e2266..e5e5b81 100644 +--- a/src/platform/webengine/web_view_impl.h ++++ b/src/platform/webengine/web_view_impl.h +@@ -66,7 +66,7 @@ class WebViewImpl : public WebView { + void NotifyMemoryPressure( + webos::WebViewBase::MemoryPressureLevel level) override; + void SetVisible(bool visible) override; +- void SetPrerenderState(); ++ void SetPrerenderState() override; + void SetVisibilityState( + webos::WebViewBase::WebPageVisibilityState visibility_state) override; + std::string DocumentTitle() const override; From 10737abb3d07d27b685bcb5524744ec084e71992 Mon Sep 17 00:00:00 2001 From: "paramesh.kuberappa" Date: Mon, 25 Jul 2022 14:32:29 +0530 Subject: [PATCH 0487/2022] ose: g-media-pipeline=21.gav.31 :Release Notes: Fix crash for automation test Fix return type for bufferPlayer test :Detailed Notes: g-media-pipeline: submissions/21.gav.29...submissions/21.gav.31 773582e Fix crash issue in g-media-pipeline component for automation test 319047c Fix return type for bufferPlayer test unload function :Testing Performed: Test results are updated in WRO-9130 :QA Notes: NA :Issues Addressed: [WRO-9130] CCC: g-media-pipeline=21.gav.31 [WRO-8296] [RDX_CRASH][webos] /usr/sbin/uriplayer_test in _ZN3gmp6player17MediaPlayerClientD1Ev (libgmp-player.so + 0x56f74) Change-Id: I601c5ba2c93569263e8dae85de84881c26d80f14 --- .../recipes-multimedia/g-media-pipeline/g-media-pipeline.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb index 091f70511..c1a13a655 100644 --- a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb +++ b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb @@ -34,7 +34,7 @@ DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad DEPENDS:append:rpi = " virtual/libomxil" WEBOS_GIT_PARAM_BRANCH = "@gav" -WEBOS_VERSION = "1.0.0-21.gav.29_d2e18f2123889296be4410a1175b3773b2df77a6" +WEBOS_VERSION = "1.0.0-21.gav.31_5cd3641f1bdabfaafce12600c3d39f48db6fb0ba" # raspberrypi3 uses @21.master branch DEPENDS:remove:raspberrypi3 = "webos-wayland-extensions" From 1184a7892294368b218034d4d61ac3ae29ee5467 Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Fri, 22 Jul 2022 10:34:49 +0900 Subject: [PATCH 0488/2022] ilib-webapp=23 enact-sandstone=r9 localization-tool-native=v1.7.0 :Release Notes: Update iLib and localization-tool :Detailed Notes: Fix an issue where the year was displayed twice in DateRngFmt due to webOS custom data Use logger provided by the loctool instead of using log4js Fix in plugins - (webos-javascript) Fixed an issue where the $L(key, value) usage could not be parsed properly. - (webos-json-resource) Fixed not to generate an empty directory if the content is empty even locale is in the target list. - (webos-appinfo-json) Fixed to set base locale correctly when calculating resource path. - (webos-qml) Added js to the list of file extensions that this plugin handles. - (webos-qml) Fixed an issue not to filter newline characters for a window ilib-webapp: submissions/22..submissions/23 0659824 Fixed an issue where the year was displayed twice due to lg overriding data enact-sandstone: r8..r9 Updated Enact's corresponding iLib dependency localization-tool-native: v1.6.0..v1.7.0 0eed87d update chanelog 96bb61f Update Changelog for v1.7.0 release :Testing Performed: See jira ticket for results. :QA Notes: N/A :Issues Addressed: [WRO-9169] CCC: ilib-webapp=23 enact-sandstone=r9 localization-tool-native=v1.7.0 [WRO-9095] Fix DateRange Bug regarding chinese locales [WRO-8443] Review regarding js-loctool changes and do a submission Change-Id: I6280cce09c0132a5e95e3cb3d324b2243c64ffa2 --- meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb | 4 ++-- meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb | 2 +- .../localization-tool/localization-tool-native.bb | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb b/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb index d4415c75a..24ac86b2d 100644 --- a/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb +++ b/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb @@ -36,7 +36,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ direction@1.0.4 \ dom-walk@0.1.2 \ global@4.4.0 \ - ilib@14.11.1 \ + ilib@14.14.0 \ invariant@2.2.4 \ is-function@1.0.2 \ js-tokens@4.0.0 \ @@ -59,7 +59,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ # NOTE: We only need to bump PR if we change something OTHER than # PV, SRCREV or the dependencies statement above. -PR = "r8" +PR = "r9" # Skip unneeded tasks do_configure[noexec] = "1" diff --git a/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb b/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb index aef1b53ed..5d5906b3a 100644 --- a/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb +++ b/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=be4f2e45a1215076318af43f833aa178 \ " -WEBOS_VERSION = "14.14.0-22_9e8c7ab532e134c6b142026ad6af6b4d8ecf6296" +WEBOS_VERSION = "14.14.0-23_e32f6219189eb3de91fbd88485682b98601d7412" PR = "r8" inherit webos_arch_indep diff --git a/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb b/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb index bb68c524e..c105b15a2 100644 --- a/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb +++ b/meta-webos/recipes-webos/localization-tool/localization-tool-native.bb @@ -19,8 +19,8 @@ S = "${WORKDIR}/git" # iLib-js/ilib-loctool-webos-dist repository on GitHub. This version should correspond to the # tag whose hash is specified in SRCREV, so PV and SRCREV will always change # together. -PV = "1.6.0" -SRCREV = "9ac3d9ada67c29f29f5c92b0e59deb5732b72953" +PV = "1.7.0" +SRCREV = "b2615f9ca37c387df60384d4e363139060aca116" # Skip the unwanted tasks do_configure[noexec] = "1" From ca0dfd9745594c615405c4e768c79995aa997392 Mon Sep 17 00:00:00 2001 From: "divvya.rosna" Date: Wed, 1 Jun 2022 09:01:27 +0530 Subject: [PATCH 0489/2022] g-media-pipeline=21.gav.32 gstreamer1.0=webos2 gstreamer1.0-plugins-bad=webos3 com.webos.service.mediacontroller=25 :Release Notes: -Enable gav support in ose emulator [qemux86-64] -Add gstreamer-bad plugin patches related to initial window size, add video info msg and disable subsurface in subcompositor -Send prepare-seamless-seek custom event when non-flush trick -Implement changes for fixing setvolume failure and rtp playback failure in ose-emulator qemux86-64 -Add support for recieving keyevents in ose-emulator qemux86-64 :Detailed Notes: Add gstreamer-bad plugin patches related to initial window size, add video info msg and disable subsurface in subcompositor Send prepare-seamless-seek custom event when non-flush trick g-media-pipeline: submissions/21.gav.31..submissions/21.gav.32 39c14b6 Implement changes for fixing setvolume failure and rtp playback failure in ose-emulator qemux86-64 com.webos.service.mediacontroller: submissions/24..submissions/25 d141e3e Add support for recieving keyevents in ose-emulator qemux86-64 :Testing Performed: Please refer CCC ticket for details :QA Notes: NA :Issues Addressed: [WRO-9293] CCC: g-media-pipeline=21.gav.32 gstreamer1.0=webos2 gstreamer1.0-plugins-bad=webos3 com.webos.service.mediacontroller=25 [WRO-8584] Implement changes in g-media-pipeline for qemux86-64 support [WRO-8606] Add gstreamer specific patches for supporting qemux86-64 [WRO-8585] Implement changes in mediacontroller service for supporting qemux86-64 Change-Id: I54f9831dfb9160d961ff79c953d7493494648232 --- .../g-media-pipeline/g-media-pipeline.bb | 2 +- .../0001_set_initial_window_size.patch | 17 + .../0002_add_video_info_message.patch | 49 + ...sable_using_subsurface_subcompositor.patch | 299 +++ ...anagerbad-add-RTP-streaming-elements.patch | 1965 +++++++++++++++++ .../gstreamer1.0-plugins-bad_1.16.%.bbappend | 10 +- ...-support-for-seamless-seek-trickplay.patch | 397 ++++ .../gstreamer/gstreamer1.0_1.16.%.bbappend | 4 +- .../com.webos.service.mediacontroller.bb | 2 +- 9 files changed, 2741 insertions(+), 4 deletions(-) create mode 100644 meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001_set_initial_window_size.patch create mode 100644 meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002_add_video_info_message.patch create mode 100644 meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003_disable_using_subsurface_subcompositor.patch create mode 100644 meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-rtpmanagerbad-add-RTP-streaming-elements.patch create mode 100644 meta-webos/recipes-multimedia/gstreamer/gstreamer1.0/0001-Add-support-for-seamless-seek-trickplay.patch diff --git a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb index c1a13a655..d9b322d79 100644 --- a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb +++ b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb @@ -34,7 +34,7 @@ DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad DEPENDS:append:rpi = " virtual/libomxil" WEBOS_GIT_PARAM_BRANCH = "@gav" -WEBOS_VERSION = "1.0.0-21.gav.31_5cd3641f1bdabfaafce12600c3d39f48db6fb0ba" +WEBOS_VERSION = "1.0.0-21.gav.32_5bfbec56a19fc9e14101ed3b735278fd6679561d" # raspberrypi3 uses @21.master branch DEPENDS:remove:raspberrypi3 = "webos-wayland-extensions" diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001_set_initial_window_size.patch b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001_set_initial_window_size.patch new file mode 100644 index 000000000..acb2ff84b --- /dev/null +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001_set_initial_window_size.patch @@ -0,0 +1,17 @@ +--- a/ext/wayland/gstwaylandsink.c 2019-04-19 18:16:36.000000000 +0900 ++++ b/ext/wayland/gstwaylandsink.c 2020-12-04 22:16:24.000000000 +0900 +@@ -700,6 +700,14 @@ + &sink->video_info, sink->fullscreen, &sink->render_lock); + g_signal_connect_object (sink->window, "closed", + G_CALLBACK (on_window_closed), sink, 0); ++ } else { ++ gint width; ++ /* set the initial size to be the same as the reported video size ++ * since the app does not pass the size even if it set window handle */ ++ width = gst_util_uint64_scale_int_round (sink->video_info.width, ++ sink->video_info.par_n, sink->video_info.par_d); ++ gst_wl_window_set_render_rectangle (sink->window, 0, 0, width, ++ sink->video_info.height); + } + } + diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002_add_video_info_message.patch b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002_add_video_info_message.patch new file mode 100644 index 000000000..e2dee9f64 --- /dev/null +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002_add_video_info_message.patch @@ -0,0 +1,49 @@ +--- a/ext/wayland/gstwaylandsink.c 2019-04-19 18:16:36.000000000 +0900 ++++ b/ext/wayland/gstwaylandsink.c 2020-12-07 22:34:22.000000000 +0900 +@@ -541,6 +541,34 @@ + } + + static gboolean ++gst_wayland_sink_post_video_info_message (GstWaylandSink * sink) ++{ ++ g_return_val_if_fail (sink != NULL, FALSE); ++ g_return_val_if_fail (&sink->video_info != NULL, FALSE); ++ ++ /* get video information */ ++ gint width = GST_VIDEO_INFO_WIDTH(&sink->video_info); ++ gint height = GST_VIDEO_INFO_HEIGHT(&sink->video_info); ++ gint fps_n = GST_VIDEO_INFO_FPS_N(&sink->video_info); ++ gint fps_d = GST_VIDEO_INFO_FPS_D(&sink->video_info); ++ gint par_n = GST_VIDEO_INFO_PAR_N(&sink->video_info); ++ gint par_d = GST_VIDEO_INFO_PAR_D(&sink->video_info); ++ GST_DEBUG_OBJECT (sink, "video-info width[%d] height[%d] framerate[%d/%d] pixel-aspect-ratio[%d/%d]", ++ width, height, fps_n, fps_d, par_n, par_d); ++ ++ /* post an application message as video-info */ ++ gboolean ret = gst_element_post_message (GST_ELEMENT_CAST (sink), ++ gst_message_new_application (GST_OBJECT (sink), ++ gst_structure_new ("video-info", ++ "width", G_TYPE_INT, width, ++ "height", G_TYPE_INT, height, ++ "framerate", GST_TYPE_FRACTION, fps_n, fps_d, ++ "pixel-aspect-ratio", GST_TYPE_FRACTION, par_n, par_d, ++ NULL))); ++ return ret; ++} ++ ++static gboolean + gst_wayland_sink_set_caps (GstBaseSink * bsink, GstCaps * caps) + { + GstWaylandSink *sink; +@@ -558,6 +586,11 @@ + format = GST_VIDEO_INFO_FORMAT (&sink->video_info); + sink->video_info_changed = TRUE; + ++ GST_INFO_OBJECT (sink, "Post video-info message to application!"); ++ if (!gst_wayland_sink_post_video_info_message(sink)) { ++ GST_ERROR_OBJECT (sink, "Failed to post video-fino message to application!"); ++ } ++ + /* create a new pool for the new caps */ + if (sink->pool) + gst_object_unref (sink->pool); diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003_disable_using_subsurface_subcompositor.patch b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003_disable_using_subsurface_subcompositor.patch new file mode 100644 index 000000000..e18bd066c --- /dev/null +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003_disable_using_subsurface_subcompositor.patch @@ -0,0 +1,299 @@ +diff -ruN a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c +--- a/ext/wayland/gstwaylandsink.c 2019-04-19 18:16:36.000000000 +0900 ++++ b/ext/wayland/gstwaylandsink.c 2020-12-07 22:41:34.000000000 +0900 +@@ -1005,14 +1005,13 @@ + g_return_if_fail (sink != NULL); + + g_mutex_lock (&sink->render_lock); +- if (!sink->window || !sink->window->area_subsurface) { ++ if (!sink->window) { + g_mutex_unlock (&sink->render_lock); + GST_INFO_OBJECT (sink, + "begin_geometry_change called without window, ignoring"); + return; + } + +- wl_subsurface_set_sync (sink->window->area_subsurface); + g_mutex_unlock (&sink->render_lock); + } + +@@ -1023,14 +1022,13 @@ + g_return_if_fail (sink != NULL); + + g_mutex_lock (&sink->render_lock); +- if (!sink->window || !sink->window->area_subsurface) { ++ if (!sink->window) { + g_mutex_unlock (&sink->render_lock); + GST_INFO_OBJECT (sink, + "end_geometry_change called without window, ignoring"); + return; + } + +- wl_subsurface_set_desync (sink->window->area_subsurface); + g_mutex_unlock (&sink->render_lock); + } + +diff -ruN a/ext/wayland/wldisplay.c b/ext/wayland/wldisplay.c +--- a/ext/wayland/wldisplay.c 2019-04-19 18:16:36.000000000 +0900 ++++ b/ext/wayland/wldisplay.c 2020-12-07 22:43:28.000000000 +0900 +@@ -332,7 +332,10 @@ + } + + VERIFY_INTERFACE_EXISTS (compositor, "wl_compositor"); ++ /* don't use subcompositor interface, it's not supported on webos */ ++#if 0 + VERIFY_INTERFACE_EXISTS (subcompositor, "wl_subcompositor"); ++#endif + VERIFY_INTERFACE_EXISTS (shm, "wl_shm"); + + #undef VERIFY_INTERFACE_EXISTS +diff -ruN a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c +--- a/ext/wayland/wlwindow.c 2020-10-17 02:44:01.000000000 +0900 ++++ b/ext/wayland/wlwindow.c 2020-12-16 21:08:16.000000000 +0900 +@@ -157,8 +157,11 @@ + { + GstWlWindow *self = GST_WL_WINDOW (gobject); + +- if (self->wl_shell_surface) ++ if (self->wl_shell_surface) { + wl_shell_surface_destroy (self->wl_shell_surface); ++ wl_proxy_wrapper_destroy (self->video_surface_wrapper); ++ wl_surface_destroy (self->video_surface); ++ } + + if (self->xdg_toplevel) + xdg_toplevel_destroy (self->xdg_toplevel); +@@ -168,26 +171,13 @@ + if (self->video_viewport) + wp_viewport_destroy (self->video_viewport); + +- wl_proxy_wrapper_destroy (self->video_surface_wrapper); +- wl_subsurface_destroy (self->video_subsurface); +- wl_surface_destroy (self->video_surface); +- +- if (self->area_subsurface) +- wl_subsurface_destroy (self->area_subsurface); +- +- if (self->area_viewport) +- wp_viewport_destroy (self->area_viewport); +- +- wl_proxy_wrapper_destroy (self->area_surface_wrapper); +- wl_surface_destroy (self->area_surface); +- + g_clear_object (&self->display); + + G_OBJECT_CLASS (gst_wl_window_parent_class)->finalize (gobject); + } + + static GstWlWindow * +-gst_wl_window_new_internal (GstWlDisplay * display, GMutex * render_lock) ++gst_wl_window_new_internal (GstWlDisplay * display, struct wl_surface * surface, GMutex * render_lock) + { + GstWlWindow *window; + +@@ -196,33 +186,21 @@ + window->render_lock = render_lock; + g_cond_init (&window->configure_cond); + +- window->area_surface = wl_compositor_create_surface (display->compositor); +- window->video_surface = wl_compositor_create_surface (display->compositor); ++ window->video_surface = surface; + +- window->area_surface_wrapper = wl_proxy_create_wrapper (window->area_surface); + window->video_surface_wrapper = + wl_proxy_create_wrapper (window->video_surface); + +- wl_proxy_set_queue ((struct wl_proxy *) window->area_surface_wrapper, +- display->queue); + wl_proxy_set_queue ((struct wl_proxy *) window->video_surface_wrapper, + display->queue); + +- /* embed video_surface in area_surface */ +- window->video_subsurface = +- wl_subcompositor_get_subsurface (display->subcompositor, +- window->video_surface, window->area_surface); +- wl_subsurface_set_desync (window->video_subsurface); +- + if (display->viewporter) { +- window->area_viewport = wp_viewporter_get_viewport (display->viewporter, +- window->area_surface); ++ + window->video_viewport = wp_viewporter_get_viewport (display->viewporter, + window->video_surface); + } + + /* do not accept input */ +- wl_surface_set_input_region (window->area_surface, NULL); + wl_surface_set_input_region (window->video_surface, NULL); + + return window; +@@ -253,9 +231,11 @@ + gboolean fullscreen, GMutex * render_lock) + { + GstWlWindow *window; ++ struct wl_surface *surface; + gint width; + +- window = gst_wl_window_new_internal (display, render_lock); ++ surface = wl_compositor_create_surface (display->compositor); ++ window = gst_wl_window_new_internal (display, surface, render_lock); + + /* Check which protocol we will use (in order of preference) */ + if (display->xdg_wm_base) { +@@ -263,7 +243,7 @@ + + /* First create the XDG surface */ + window->xdg_surface = xdg_wm_base_get_xdg_surface (display->xdg_wm_base, +- window->area_surface); ++ window->video_surface); + if (!window->xdg_surface) { + GST_ERROR ("Unable to get xdg_surface"); + goto error; +@@ -300,7 +280,7 @@ + } else if (display->wl_shell) { + /* go toplevel */ + window->wl_shell_surface = wl_shell_get_shell_surface (display->wl_shell, +- window->area_surface); ++ window->video_surface); + if (!window->wl_shell_surface) { + GST_ERROR ("Unable to get wl_shell_surface"); + goto error; +@@ -311,7 +291,7 @@ + gst_wl_window_ensure_fullscreen (window, fullscreen); + } else if (display->fullscreen_shell) { + zwp_fullscreen_shell_v1_present_surface (display->fullscreen_shell, +- window->area_surface, ZWP_FULLSCREEN_SHELL_V1_PRESENT_METHOD_ZOOM, ++ window->video_surface, ZWP_FULLSCREEN_SHELL_V1_PRESENT_METHOD_ZOOM, + NULL); + } else { + GST_ERROR ("Unable to use either wl_shell, xdg_wm_base or " +@@ -336,13 +316,8 @@ + struct wl_surface * parent, GMutex * render_lock) + { + GstWlWindow *window; +- window = gst_wl_window_new_internal (display, render_lock); +- +- /* embed in parent */ +- window->area_subsurface = +- wl_subcompositor_get_subsurface (display->subcompositor, +- window->area_surface, parent); +- wl_subsurface_set_desync (window->area_subsurface); ++ /* Since webos does not support subsurface, use the parent surface as it is. */ ++ window = gst_wl_window_new_internal (display, parent, render_lock); + + wl_surface_commit (parent); + +@@ -396,8 +371,6 @@ + gst_video_sink_center_rect (src, dst, &res, FALSE); + } + +- wl_subsurface_set_position (window->video_subsurface, res.x, res.y); +- + if (commit) { + wl_surface_damage (window->video_surface_wrapper, 0, 0, res.w, res.h); + wl_surface_commit (window->video_surface_wrapper); +@@ -409,7 +382,7 @@ + region = wl_compositor_create_region (window->display->compositor); + wl_region_add (region, 0, 0, window->render_rectangle.w, + window->render_rectangle.h); +- wl_surface_set_input_region (window->area_surface, region); ++ wl_surface_set_input_region (window->video_surface, region); + wl_region_destroy (region); + } + +@@ -422,13 +395,6 @@ + { + struct wl_region *region; + +- /* Set area opaque */ +- region = wl_compositor_create_region (window->display->compositor); +- wl_region_add (region, 0, 0, window->render_rectangle.w, +- window->render_rectangle.h); +- wl_surface_set_opaque_region (window->area_surface, region); +- wl_region_destroy (region); +- + if (!GST_VIDEO_INFO_HAS_ALPHA (info)) { + /* Set video opaque */ + region = wl_compositor_create_region (window->display->compositor); +@@ -448,7 +414,6 @@ + gst_util_uint64_scale_int_round (info->width, info->par_n, info->par_d); + window->video_height = info->height; + +- wl_subsurface_set_sync (window->video_subsurface); + gst_wl_window_resize_video_surface (window, FALSE); + gst_wl_window_set_opaque (window, info); + } +@@ -462,17 +427,6 @@ + /* clear both video and parent surfaces */ + wl_surface_attach (window->video_surface_wrapper, NULL, 0, 0); + wl_surface_commit (window->video_surface_wrapper); +- wl_surface_attach (window->area_surface_wrapper, NULL, 0, 0); +- wl_surface_commit (window->area_surface_wrapper); +- } +- +- if (G_UNLIKELY (info)) { +- /* commit also the parent (area_surface) in order to change +- * the position of the video_subsurface */ +- wl_surface_damage (window->area_surface_wrapper, 0, 0, +- window->render_rectangle.w, window->render_rectangle.h); +- wl_surface_commit (window->area_surface_wrapper); +- wl_subsurface_set_desync (window->video_subsurface); + } + + wl_display_flush (window->display->display); +@@ -521,7 +475,7 @@ + gst_wl_shm_memory_construct_wl_buffer (gst_buffer_peek_memory (buf, 0), + window->display, &info); + gwlbuf = gst_buffer_add_wl_buffer (buf, wlbuf, window->display); +- gst_wl_buffer_attach (gwlbuf, window->area_surface_wrapper); ++ gst_wl_buffer_attach (gwlbuf, window->video_surface_wrapper); + + /* at this point, the GstWlBuffer keeps the buffer + * alive and will free it on wl_buffer::release */ +@@ -540,24 +494,17 @@ + window->render_rectangle.w = w; + window->render_rectangle.h = h; + +- /* position the area inside the parent - needs a parent commit to apply */ +- if (window->area_subsurface) +- wl_subsurface_set_position (window->area_subsurface, x, y); +- +- /* change the size of the area */ +- if (window->area_viewport) +- wp_viewport_set_destination (window->area_viewport, w, h); ++ /* change the size of the video */ ++ if (window->video_viewport) ++ wp_viewport_set_destination (window->video_viewport, w, h); + + gst_wl_window_update_borders (window); + + if (window->video_width != 0) { +- wl_subsurface_set_sync (window->video_subsurface); + gst_wl_window_resize_video_surface (window, TRUE); + } + +- wl_surface_damage (window->area_surface_wrapper, 0, 0, w, h); +- wl_surface_commit (window->area_surface_wrapper); ++ wl_surface_damage (window->video_surface_wrapper, 0, 0, w, h); ++ wl_surface_commit (window->video_surface_wrapper); + +- if (window->video_width != 0) +- wl_subsurface_set_desync (window->video_subsurface); + } +diff -ruN a/ext/wayland/wlwindow.h b/ext/wayland/wlwindow.h +--- a/ext/wayland/wlwindow.h 2019-04-19 18:16:36.000000000 +0900 ++++ b/ext/wayland/wlwindow.h 2020-12-07 22:50:33.000000000 +0900 +@@ -44,13 +44,8 @@ + GMutex *render_lock; + + GstWlDisplay *display; +- struct wl_surface *area_surface; +- struct wl_surface *area_surface_wrapper; +- struct wl_subsurface *area_subsurface; +- struct wp_viewport *area_viewport; + struct wl_surface *video_surface; + struct wl_surface *video_surface_wrapper; +- struct wl_subsurface *video_subsurface; + struct wp_viewport *video_viewport; + struct wl_shell_surface *wl_shell_surface; + struct xdg_surface *xdg_surface; diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-rtpmanagerbad-add-RTP-streaming-elements.patch b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-rtpmanagerbad-add-RTP-streaming-elements.patch new file mode 100644 index 000000000..8f7bc5b79 --- /dev/null +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-rtpmanagerbad-add-RTP-streaming-elements.patch @@ -0,0 +1,1965 @@ +From 3ef737605a3df19c4d52736203038037bcaf4ae2 Mon Sep 17 00:00:00 2001 +From: Marc Leeman +Date: Mon, 3 Jun 2019 20:08:23 +0000 +Subject: [PATCH] rtpmanagerbad: add RTP streaming elements + +This is a re-implementation of the RTP elements that are submitted in +2013 to handle RTP streams. The elements handle a correct connection +for the bi-directional use of the RTCP sockets. + +https://bugzilla.gnome.org/show_bug.cgi?id=703111 + +The rtpsink and rtpsrc elements add an URI interface so that streams +can be decoded with decodebin using the rtp:// interface. + +The code can be used as follows + +``` +gst-launch-1.0 videotestsrc ! x264enc ! rtph264pay config-interval=3 ! rtpsink uri=rtp://239.1.1.1:1234 + +gst-launch-1.0 videotestsrc ! x264enc ! rtph264pay config-interval=1 ! rtpsink uri=rtp://239.1.2.3:5000 +gst-launch-1.0 rtpsrc uri=rtp://239.1.2.3:5000?encoding-name=H264 ! rtph264depay ! avdec_h264 ! videoconvert ! xvimagesink + +gst-launch-1.0 videotestsrc ! avenc_mpeg4 ! rtpmp4vpay config-interval=1 ! rtpsink uri=rtp://239.1.2.3:5000 +gst-launch-1.0 rtpsrc uri=rtp://239.1.2.3:5000?encoding-name=MP4V-ES ! rtpmp4vdepay ! avdec_mpeg4 ! videoconvert ! xvimagesink +``` + +rtpmanagerbad: add pkg-config +rtpmanagerbad: Rtp should be uppercase +rtpmanagerbad: add G_OS_WIN32 for shielding unix headers +rtpmanagerbad: remove Since from documentation +rtpmanagerbad: rename lib name from nrtp to rtpmanagerbad +rtpmanagerbad: sync meson.build with other modules +rtpmanagerbad: add Makefile.am +rtpmanagerbad: use GstElement to count pads +rtpmanagerbad: use gst_bin_set_suppressed_flags +rtpmanagerbad: check element creation +rtpmanagerbad: post message when trying to access missing rtpbin +rtpmanagerbad: return FALSE with g_return tests +rtpmanagerbad: use gsocket multicast check +rtpmanagerbad: use gst_caps_new_empty_simple iso gst_caps_from_string +rtpmanagerbad: sync with gstrtppayloads.h +rtpmanagerbad: correct media type X-GST +rtpmanagerbad: test if a compatible pad was found +rtpmanagerbad: remove evil copy of GstRTPPayloadInfo +rtpmanagerbad: add gio_dep to meson +rtpmanagerbad: revert to old glib boilerplate + +GStreamer 1.16 does not yet support the newer GLib templates, so revert. + +rtpmanagerbad: return GST_STATE_CHANGE_NO_PREROLL for live sources + +for live sources, NO_PREROLL should be returned for PLAYING->PAUSED and +READY->PAUSED transitions. + +rtpmanagerbad: use GstElement pad counting +rtpmanagerbad: just use template name to request pad +rtpmanagerbad: remove commented code +rtpmanagerbad: use funnel to send multiple streams on one socket +rtpmanagerbad: avoid beaches + +beaches should only be used during the summer, so rewrite the code to +return explicitly and avoid beaches during the winter. + +rtpmanagerbad: add copyright to test code +rtpmanagerbad: g_free is NULL safe +rtpmanagerbad: do not trace rtpbin +rtpmanagerbad: return NULL explitly +rtpmanagerbad: warn when data port is not even + +According to RFC 3550, RTP data should be sent on even ports, while RTCP +is sent on the following odd port. + +rtpmanagerbad: document port allocation in rtpsink/src +rtpmanagerbad: improve uri description +rtpmanagerbad: add comment re-use socket +rtpmanagerbad: rename gst_object_set_properties_from_uri_query +rtpmanagerbad: loan prop/val setter from rist +rtpmanagerbad: rtpsrc: fix unitialised pointer +rtpmanagerbad: fix silly typo +rtpmanagerbad: test for empty key/value +rtpmanagerbad: rtpsrc: deprecate ssrc collision to INFO +rtpmanagerbad: sync debug with rist +rtpmanagerbad: small strings allocated on stack +rtpmanagerbad: correct rename +rtpmanagerbad: add locking on prop setters/getters + +Locking is added because the URI allows to access the properties too. + +rtpmanagerbad: allow for RTCP through NAT +rtpmanagerbad: move gio to header file +rtpmanagerbad: free small strings too +rtpmanagerbad: ttl_mc for ttl on dynudpsink +rtpmanagerbad: add comments on the URI registered +rtpmanagerbad: correct macro after file rename +rtpmanagerbad: code style +rtpmanagerbad: handle wrong URIs in setter +rtpmanagerbad: nit URI notation correction + +In an URI, the first key/value pair should not have an ampersand, the +parser did not die though. +--- + configure.ac | 2 + + gst/meson.build | 2 +- + gst/rtp/Makefile.am | 17 + + gst/rtp/gstrtp-utils.c | 39 ++ + gst/rtp/gstrtp-utils.h | 8 + + gst/rtp/gstrtpsink.c | 581 +++++++++++++++++++++++++ + gst/rtp/gstrtpsink.h | 72 ++++ + gst/rtp/gstrtpsrc.c | 731 ++++++++++++++++++++++++++++++++ + gst/rtp/gstrtpsrc.h | 76 ++++ + gst/rtp/meson.build | 15 + + gst/rtp/plugin.c | 28 ++ + meson_options.txt | 1 + + tests/check/Makefile.am | 8 + + tests/check/elements/.gitignore | 2 + + tests/check/elements/rtpsink.c | 56 +++ + tests/check/elements/rtpsrc.c | 58 +++ + tests/check/meson.build | 2 + + 17 files changed, 1697 insertions(+), 1 deletion(-) + create mode 100644 gst/rtp/Makefile.am + create mode 100644 gst/rtp/gstrtp-utils.c + create mode 100644 gst/rtp/gstrtp-utils.h + create mode 100644 gst/rtp/gstrtpsink.c + create mode 100644 gst/rtp/gstrtpsink.h + create mode 100644 gst/rtp/gstrtpsrc.c + create mode 100644 gst/rtp/gstrtpsrc.h + create mode 100644 gst/rtp/meson.build + create mode 100644 gst/rtp/plugin.c + create mode 100644 tests/check/elements/rtpsink.c + create mode 100644 tests/check/elements/rtpsrc.c + +diff --git a/configure.ac b/configure.ac +index 5712e739c..8f4b741af 100644 +--- a/configure.ac ++++ b/configure.ac +@@ -478,6 +478,7 @@ AG_GST_CHECK_PLUGIN(pnm) + AG_GST_CHECK_PLUGIN(proxy) + AG_GST_CHECK_PLUGIN(rawparse) + AG_GST_CHECK_PLUGIN(removesilence) ++AG_GST_CHECK_PLUGIN(rtp) + AG_GST_CHECK_PLUGIN(sdp) + AG_GST_CHECK_PLUGIN(segmentclip) + AG_GST_CHECK_PLUGIN(siren) +@@ -2561,6 +2562,7 @@ gst/pnm/Makefile + gst/proxy/Makefile + gst/rawparse/Makefile + gst/removesilence/Makefile ++gst/rtp/Makefile + gst/sdp/Makefile + gst/segmentclip/Makefile + gst/siren/Makefile +diff --git a/gst/meson.build b/gst/meson.build +index f6b306c1e..3266c6e20 100644 +--- a/gst/meson.build ++++ b/gst/meson.build +@@ -8,7 +8,7 @@ foreach plugin : ['accurip', 'adpcmdec', 'adpcmenc', 'aiff', 'asfmux', + 'ivfparse', 'ivtc', 'jp2kdecimator', 'jpegformat', 'librfb', + 'midi', 'mpegdemux', 'mpegpsmux', 'mpegtsdemux', 'mpegtsmux', + 'mxf', 'netsim', 'onvif', 'pcapparse', 'pnm', 'proxy', +- 'rawparse', 'removesilence', 'sdp', 'segmentclip', 'siren', ++ 'rawparse', 'removesilence', 'rtp', 'sdp', 'segmentclip', 'siren', + 'smooth', 'speed', 'subenc', 'timecode', + 'videofilters', 'videoframe_audiolevel', 'videoparsers', + 'videosignal', 'vmnc', 'y4m', 'yadif'] +diff --git a/gst/rtp/Makefile.am b/gst/rtp/Makefile.am +new file mode 100644 +index 000000000..2d8dd1bdd +--- /dev/null ++++ b/gst/rtp/Makefile.am +@@ -0,0 +1,17 @@ ++plugin_LTLIBRARIES = libgstrtpmanagerbad.la ++ ++libgstrtpmanagerbad_la_SOURCES = \ ++ gstrtp-utils.c \ ++ gstrtpsink.c \ ++ gstrtpsrc.c \ ++ plugin.c ++ ++libgstrtpmanagerbad_la_CFLAGS = $(GST_BASE_CFLAGS) $(GST_CFLAGS) ++libgstrtpmanagerbad_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) ++libgstrtpmanagerbad_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) ++ ++noinst_HEADERS = \ ++ gstrtp-utils.h \ ++ gstrtpcaps.h \ ++ gstrtpsink.h \ ++ gstrtpsrc.h +diff --git a/gst/rtp/gstrtp-utils.c b/gst/rtp/gstrtp-utils.c +new file mode 100644 +index 000000000..fc06bba79 +--- /dev/null ++++ b/gst/rtp/gstrtp-utils.c +@@ -0,0 +1,39 @@ ++/* ++ * See: https://bugzilla.gnome.org/show_bug.cgi?id=779765 ++ */ ++ ++#include "gstrtp-utils.h" ++ ++static void ++gst_rtp_utils_uri_query_foreach (const gchar * key, const gchar * value, ++ GObject * src) ++{ ++ if (key == NULL) { ++ GST_WARNING_OBJECT (src, "Refusing to use empty key."); ++ return; ++ } ++ ++ if (value == NULL) { ++ GST_WARNING_OBJECT (src, "Refusing to use NULL for key %s.", key); ++ return; ++ } ++ ++ GST_DEBUG_OBJECT (src, "Setting property '%s' to '%s'", key, value); ++ gst_util_set_object_arg (src, key, value); ++} ++ ++void ++gst_rtp_utils_set_properties_from_uri_query (GObject * obj, const GstUri * uri) ++{ ++ GHashTable *hash_table; ++ ++ g_return_if_fail (uri != NULL); ++ hash_table = gst_uri_get_query_table (uri); ++ ++ if (hash_table) { ++ g_hash_table_foreach (hash_table, ++ (GHFunc) gst_rtp_utils_uri_query_foreach, obj); ++ ++ g_hash_table_unref (hash_table); ++ } ++} +diff --git a/gst/rtp/gstrtp-utils.h b/gst/rtp/gstrtp-utils.h +new file mode 100644 +index 000000000..62ec2aafa +--- /dev/null ++++ b/gst/rtp/gstrtp-utils.h +@@ -0,0 +1,8 @@ ++#ifndef __GST_RTP_UTILS_H__ ++#define __GST_RTP_UTILS_H__ ++ ++#include ++ ++void gst_rtp_utils_set_properties_from_uri_query (GObject * obj, const GstUri * uri); ++ ++#endif +diff --git a/gst/rtp/gstrtpsink.c b/gst/rtp/gstrtpsink.c +new file mode 100644 +index 000000000..23b6df959 +--- /dev/null ++++ b/gst/rtp/gstrtpsink.c +@@ -0,0 +1,581 @@ ++/* GStreamer ++ * Copyright (C) <2018> Marc Leeman ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Library General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Library General Public License for more details. ++ * ++ * You should have received a copy of the GNU Library General Public ++ * License along with this library; if not, write to the ++ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, ++ * Boston, MA 02110-1301, USA. ++ */ ++ ++/** ++ * SECTION: gstrtsinkp ++ * @title: GstRtpSink ++ * @short description: element with Uri interface to stream RTP data to ++ * the network. ++ * ++ * RTP (RFC 3550) is a protocol to stream media over the network while ++ * retaining the timing information and providing enough information to ++ * reconstruct the correct timing domain by the receiver. ++ * ++ * The RTP data port should be even, while the RTCP port should be ++ * odd. The URI that is entered defines the data port, the RTCP port will ++ * be allocated to the next port. ++ * ++ * This element hooks up the correct sockets to support both RTP as the ++ * accompanying RTCP layer. ++ * ++ * This Bin handles streaming RTP payloaded data on the network. ++ * ++ * This element also implements the URI scheme `rtp://` allowing to send ++ * data on the network by bins that allow use the URI to determine the sink. ++ * The RTP URI handler also allows setting properties through the URI query. ++ */ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++ ++#include "gstrtpsink.h" ++#include "gstrtp-utils.h" ++ ++GST_DEBUG_CATEGORY_STATIC (gst_rtp_sink_debug); ++#define GST_CAT_DEFAULT gst_rtp_sink_debug ++ ++#define DEFAULT_PROP_URI "rtp://0.0.0.0:5004" ++#define DEFAULT_PROP_TTL 64 ++#define DEFAULT_PROP_TTL_MC 1 ++ ++enum ++{ ++ PROP_0, ++ ++ PROP_URI, ++ PROP_TTL, ++ PROP_TTL_MC, ++ ++ PROP_LAST ++}; ++ ++static void gst_rtp_sink_uri_handler_init (gpointer g_iface, ++ gpointer iface_data); ++ ++#define gst_rtp_sink_parent_class parent_class ++G_DEFINE_TYPE_WITH_CODE (GstRtpSink, gst_rtp_sink, GST_TYPE_BIN, ++ G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER, gst_rtp_sink_uri_handler_init); ++ GST_DEBUG_CATEGORY_INIT (gst_rtp_sink_debug, "rtpsink", 0, "RTP Sink")); ++ ++#define GST_RTP_SINK_GET_LOCK(obj) (&((GstRtpSink*)(obj))->lock) ++#define GST_RTP_SINK_LOCK(obj) (g_mutex_lock (GST_RTP_SINK_GET_LOCK(obj))) ++#define GST_RTP_SINK_UNLOCK(obj) (g_mutex_unlock (GST_RTP_SINK_GET_LOCK(obj))) ++ ++static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink_%u", ++ GST_PAD_SINK, ++ GST_PAD_REQUEST, ++ GST_STATIC_CAPS ("application/x-rtp")); ++ ++static GstStateChangeReturn ++gst_rtp_sink_change_state (GstElement * element, GstStateChange transition); ++ ++static void ++gst_rtp_sink_set_property (GObject * object, guint prop_id, ++ const GValue * value, GParamSpec * pspec) ++{ ++ GstRtpSink *self = GST_RTP_SINK (object); ++ ++ switch (prop_id) { ++ case PROP_URI:{ ++ GstUri *uri = NULL; ++ ++ GST_RTP_SINK_LOCK (object); ++ uri = gst_uri_from_string (g_value_get_string (value)); ++ if (uri == NULL) ++ break; ++ ++ if (self->uri) ++ gst_uri_unref (self->uri); ++ self->uri = uri; ++ /* RTP data ports should be even according to RFC 3550, while the ++ * RTCP is sent on odd ports. Just warn if there is a mismatch. */ ++ if (gst_uri_get_port (self->uri) % 2) ++ GST_WARNING_OBJECT (self, ++ "Port %u is not even, this is not standard (see RFC 3550).", ++ gst_uri_get_port (self->uri)); ++ ++ gst_rtp_utils_set_properties_from_uri_query (G_OBJECT (self), self->uri); ++ GST_RTP_SINK_UNLOCK (object); ++ break; ++ } ++ case PROP_TTL: ++ self->ttl = g_value_get_int (value); ++ break; ++ case PROP_TTL_MC: ++ self->ttl_mc = g_value_get_int (value); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ break; ++ } ++} ++ ++static void ++gst_rtp_sink_get_property (GObject * object, guint prop_id, ++ GValue * value, GParamSpec * pspec) ++{ ++ GstRtpSink *self = GST_RTP_SINK (object); ++ ++ switch (prop_id) { ++ case PROP_URI: ++ GST_RTP_SINK_LOCK (object); ++ if (self->uri) ++ g_value_take_string (value, gst_uri_to_string (self->uri)); ++ else ++ g_value_set_string (value, NULL); ++ GST_RTP_SINK_UNLOCK (object); ++ break; ++ case PROP_TTL: ++ g_value_set_int (value, self->ttl); ++ break; ++ case PROP_TTL_MC: ++ g_value_set_int (value, self->ttl_mc); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ break; ++ } ++} ++ ++static void ++gst_rtp_sink_finalize (GObject * gobject) ++{ ++ GstRtpSink *self = GST_RTP_SINK (gobject); ++ ++ if (self->uri) ++ gst_uri_unref (self->uri); ++ ++ g_mutex_clear (&self->lock); ++ G_OBJECT_CLASS (parent_class)->finalize (gobject); ++} ++ ++static gboolean ++gst_rtp_sink_setup_elements (GstRtpSink * self) ++{ ++ /*GstPad *pad; */ ++ GSocket *socket; ++ GInetAddress *addr; ++ gchar name[48]; ++ GstCaps *caps; ++ ++ /* Should not be NULL */ ++ g_return_val_if_fail (self->uri != NULL, FALSE); ++ ++ /* if not already configured */ ++ if (self->funnel_rtp == NULL) { ++ self->funnel_rtp = gst_element_factory_make ("funnel", NULL); ++ if (self->funnel_rtp == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "funnel_rtp element is not available")); ++ return FALSE; ++ } ++ ++ self->funnel_rtcp = gst_element_factory_make ("funnel", NULL); ++ if (self->funnel_rtcp == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "funnel_rtcp element is not available")); ++ return FALSE; ++ } ++ ++ self->rtp_sink = gst_element_factory_make ("udpsink", NULL); ++ if (self->rtp_sink == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "rtp_sink element is not available")); ++ return FALSE; ++ } ++ ++ self->rtcp_src = gst_element_factory_make ("udpsrc", NULL); ++ if (self->rtcp_src == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "rtcp_src element is not available")); ++ return FALSE; ++ } ++ ++ self->rtcp_sink = gst_element_factory_make ("udpsink", NULL); ++ if (self->rtcp_sink == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "rtcp_sink element is not available")); ++ return FALSE; ++ } ++ ++ gst_bin_add (GST_BIN (self), self->funnel_rtp); ++ gst_bin_add (GST_BIN (self), self->funnel_rtcp); ++ ++ /* Add elements as needed, since udpsrc/udpsink for RTCP share a socket, ++ * not all at the same moment */ ++ g_object_set (self->rtp_sink, ++ "host", gst_uri_get_host (self->uri), ++ "port", gst_uri_get_port (self->uri), ++ "ttl", self->ttl, "ttl-mc", self->ttl_mc, NULL); ++ ++ gst_bin_add (GST_BIN (self), self->rtp_sink); ++ ++ g_object_set (self->rtcp_sink, ++ "host", gst_uri_get_host (self->uri), ++ "port", gst_uri_get_port (self->uri) + 1, ++ "ttl", self->ttl, "ttl-mc", self->ttl_mc, ++ /* Set false since we're reusing a socket */ ++ "auto-multicast", FALSE, NULL); ++ ++ gst_bin_add (GST_BIN (self), self->rtcp_sink); ++ ++ /* no need to set address if unicast */ ++ caps = gst_caps_new_empty_simple ("application/x-rtcp"); ++ g_object_set (self->rtcp_src, ++ "port", gst_uri_get_port (self->uri) + 1, "caps", caps, NULL); ++ gst_caps_unref (caps); ++ ++ addr = g_inet_address_new_from_string (gst_uri_get_host (self->uri)); ++ if (g_inet_address_get_is_multicast (addr)) { ++ g_object_set (self->rtcp_src, "address", gst_uri_get_host (self->uri), ++ NULL); ++ } ++ g_object_unref (addr); ++ ++ gst_bin_add (GST_BIN (self), self->rtcp_src); ++ ++ gst_element_link (self->funnel_rtp, self->rtp_sink); ++ gst_element_link (self->funnel_rtcp, self->rtcp_sink); ++ ++ gst_element_sync_state_with_parent (self->funnel_rtp); ++ gst_element_sync_state_with_parent (self->funnel_rtcp); ++ gst_element_sync_state_with_parent (self->rtp_sink); ++ gst_element_sync_state_with_parent (self->rtcp_src); ++ ++ g_object_get (G_OBJECT (self->rtcp_src), "used-socket", &socket, NULL); ++ g_object_set (G_OBJECT (self->rtcp_sink), "socket", socket, NULL); ++ ++ gst_element_sync_state_with_parent (self->rtcp_sink); ++ ++ } ++ ++ /* pads are all named */ ++ g_snprintf (name, 48, "send_rtp_src_%u", GST_ELEMENT (self)->numpads); ++ gst_element_link_pads (self->rtpbin, name, self->funnel_rtp, "sink_%u"); ++ ++ g_snprintf (name, 48, "send_rtcp_src_%u", GST_ELEMENT (self)->numpads); ++ gst_element_link_pads (self->rtpbin, name, self->funnel_rtcp, "sink_%u"); ++ ++ g_snprintf (name, 48, "recv_rtcp_sink_%u", GST_ELEMENT (self)->numpads); ++ gst_element_link_pads (self->rtcp_src, "src", self->rtpbin, name); ++ ++ return TRUE; ++} ++ ++static GstPad * ++gst_rtp_sink_request_new_pad (GstElement * element, ++ GstPadTemplate * templ, const gchar * name, const GstCaps * caps) ++{ ++ GstRtpSink *self = GST_RTP_SINK (element); ++ GstPad *pad = NULL; ++ ++ if (self->rtpbin == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "rtpbin element is not available")); ++ return NULL; ++ } ++ ++ if (gst_rtp_sink_setup_elements (self) == FALSE) ++ return NULL; ++ ++ GST_RTP_SINK_LOCK (self); ++ ++ pad = gst_element_get_request_pad (self->rtpbin, "send_rtp_sink_%u"); ++ g_return_val_if_fail (pad != NULL, NULL); ++ ++ GST_RTP_SINK_UNLOCK (self); ++ ++ return pad; ++} ++ ++static void ++gst_rtp_sink_release_pad (GstElement * element, GstPad * pad) ++{ ++ GstRtpSink *self = GST_RTP_SINK (element); ++ GstPad *rpad = gst_ghost_pad_get_target (GST_GHOST_PAD (pad)); ++ ++ GST_RTP_SINK_LOCK (self); ++ gst_element_release_request_pad (self->rtpbin, rpad); ++ gst_object_unref (rpad); ++ ++ gst_pad_set_active (pad, FALSE); ++ gst_element_remove_pad (GST_ELEMENT (self), pad); ++ ++ GST_RTP_SINK_UNLOCK (self); ++} ++ ++static void ++gst_rtp_sink_class_init (GstRtpSinkClass * klass) ++{ ++ GObjectClass *gobject_class = G_OBJECT_CLASS (klass); ++ GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass); ++ ++ gobject_class->set_property = gst_rtp_sink_set_property; ++ gobject_class->get_property = gst_rtp_sink_get_property; ++ gobject_class->finalize = gst_rtp_sink_finalize; ++ gstelement_class->change_state = gst_rtp_sink_change_state; ++ ++ gstelement_class->request_new_pad = ++ GST_DEBUG_FUNCPTR (gst_rtp_sink_request_new_pad); ++ gstelement_class->release_pad = GST_DEBUG_FUNCPTR (gst_rtp_sink_release_pad); ++ ++ /** ++ * GstRtpSink:uri: ++ * ++ * uri to stream RTP to. All GStreamer parameters can be ++ * encoded in the URI, this URI format is RFC compliant. ++ */ ++ g_object_class_install_property (gobject_class, PROP_URI, ++ g_param_spec_string ("uri", "URI", ++ "URI in the form of rtp://host:port?query", DEFAULT_PROP_URI, ++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ ++ /** ++ * GstRtpSink:ttl: ++ * ++ * Set the unicast TTL parameter. ++ */ ++ g_object_class_install_property (gobject_class, PROP_TTL, ++ g_param_spec_int ("ttl", "Unicast TTL", ++ "Used for setting the unicast TTL parameter", ++ 0, 255, DEFAULT_PROP_TTL, ++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ ++ /** ++ * GstRtpSink:ttl-mc: ++ * ++ * Set the multicast TTL parameter. ++ */ ++ g_object_class_install_property (gobject_class, PROP_TTL_MC, ++ g_param_spec_int ("ttl-mc", "Multicast TTL", ++ "Used for setting the multicast TTL parameter", 0, 255, ++ DEFAULT_PROP_TTL_MC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ ++ gst_element_class_add_pad_template (gstelement_class, ++ gst_static_pad_template_get (&sink_template)); ++ ++ gst_element_class_set_static_metadata (gstelement_class, ++ "RTP Sink element", ++ "Generic/Bin/Sink", ++ "Simple RTP sink", "Marc Leeman "); ++} ++ ++static void ++gst_rtp_sink_rtpbin_element_added_cb (GstBin * element, ++ GstElement * new_element, gpointer data) ++{ ++ GstRtpSink *self = GST_RTP_SINK (data); ++ GST_INFO_OBJECT (self, ++ "Element %" GST_PTR_FORMAT " added element %" GST_PTR_FORMAT ".", element, ++ new_element); ++} ++ ++static void ++gst_rtp_sink_rtpbin_pad_added_cb (GstElement * element, GstPad * pad, ++ gpointer data) ++{ ++ GstRtpSink *self = GST_RTP_SINK (data); ++ GstCaps *caps = gst_pad_query_caps (pad, NULL); ++ GstPad *upad; ++ ++ /* Expose RTP data pad only */ ++ GST_INFO_OBJECT (self, ++ "Element %" GST_PTR_FORMAT " added pad %" GST_PTR_FORMAT "with caps %" ++ GST_PTR_FORMAT ".", element, pad, caps); ++ ++ /* Sanity checks */ ++ if (GST_PAD_DIRECTION (pad) == GST_PAD_SINK) { ++ /* Src pad, do not expose */ ++ gst_caps_unref (caps); ++ return; ++ } ++ ++ if (G_LIKELY (caps)) { ++ GstCaps *ref_caps = gst_caps_new_empty_simple ("application/x-rtcp"); ++ ++ if (gst_caps_can_intersect (caps, ref_caps)) { ++ /* SRC RTCP caps, do not expose */ ++ gst_caps_unref (ref_caps); ++ gst_caps_unref (caps); ++ ++ return; ++ } ++ gst_caps_unref (ref_caps); ++ } else { ++ GST_ERROR_OBJECT (self, "Pad with no caps detected."); ++ gst_caps_unref (caps); ++ ++ return; ++ } ++ gst_caps_unref (caps); ++ ++ upad = gst_element_get_compatible_pad (self->funnel_rtp, pad, NULL); ++ if (upad == NULL) { ++ GST_ERROR_OBJECT (self, "No compatible pad found to link pad."); ++ gst_caps_unref (caps); ++ ++ return; ++ } ++ GST_INFO_OBJECT (self, "Linking with pad %" GST_PTR_FORMAT ".", upad); ++ gst_pad_link (pad, upad); ++ gst_object_unref (upad); ++} ++ ++static void ++gst_rtp_sink_rtpbin_pad_removed_cb (GstElement * element, GstPad * pad, ++ gpointer data) ++{ ++ GstRtpSink *self = GST_RTP_SINK (data); ++ GST_INFO_OBJECT (self, ++ "Element %" GST_PTR_FORMAT " removed pad %" GST_PTR_FORMAT ".", element, ++ pad); ++} ++ ++static gboolean ++gst_rtp_sink_setup_rtpbin (GstRtpSink * self) ++{ ++ self->rtpbin = gst_element_factory_make ("rtpbin", NULL); ++ if (self->rtpbin == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "rtpbin element is not available")); ++ return FALSE; ++ } ++ ++ /* Add rtpbin callbacks to monitor the operation of rtpbin */ ++ g_signal_connect (self->rtpbin, "element-added", ++ G_CALLBACK (gst_rtp_sink_rtpbin_element_added_cb), self); ++ g_signal_connect (self->rtpbin, "pad-added", ++ G_CALLBACK (gst_rtp_sink_rtpbin_pad_added_cb), self); ++ g_signal_connect (self->rtpbin, "pad-removed", ++ G_CALLBACK (gst_rtp_sink_rtpbin_pad_removed_cb), self); ++ ++ gst_bin_add (GST_BIN (self), self->rtpbin); ++ ++ gst_element_sync_state_with_parent (self->rtpbin); ++ ++ return TRUE; ++} ++ ++static GstStateChangeReturn ++gst_rtp_sink_change_state (GstElement * element, GstStateChange transition) ++{ ++ GstRtpSink *self = GST_RTP_SINK (element); ++ GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; ++ ++ GST_DEBUG_OBJECT (self, "changing state: %s => %s", ++ gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)), ++ gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition))); ++ ++ switch (transition) { ++ case GST_STATE_CHANGE_NULL_TO_READY: ++ break; ++ case GST_STATE_CHANGE_READY_TO_PAUSED: ++ break; ++ default: ++ break; ++ } ++ ++ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); ++ if (ret == GST_STATE_CHANGE_FAILURE) ++ return ret; ++ ++ switch (transition) { ++ case GST_STATE_CHANGE_READY_TO_PAUSED: ++ break; ++ case GST_STATE_CHANGE_PAUSED_TO_READY: ++ break; ++ default: ++ break; ++ } ++ ++ return ret; ++} ++ ++ ++static void ++gst_rtp_sink_init (GstRtpSink * self) ++{ ++ self->rtpbin = NULL; ++ self->funnel_rtp = NULL; ++ self->funnel_rtcp = NULL; ++ self->rtp_sink = NULL; ++ self->rtcp_src = NULL; ++ self->rtcp_sink = NULL; ++ ++ self->uri = gst_uri_from_string (DEFAULT_PROP_URI); ++ self->ttl = DEFAULT_PROP_TTL; ++ self->ttl_mc = DEFAULT_PROP_TTL_MC; ++ ++ if (gst_rtp_sink_setup_rtpbin (self) == FALSE) ++ return; ++ ++ GST_OBJECT_FLAG_SET (GST_OBJECT (self), GST_ELEMENT_FLAG_SINK); ++ gst_bin_set_suppressed_flags (GST_BIN (self), ++ GST_ELEMENT_FLAG_SOURCE | GST_ELEMENT_FLAG_SINK); ++ ++ g_mutex_init (&self->lock); ++} ++ ++static guint ++gst_rtp_sink_uri_get_type (GType type) ++{ ++ return GST_URI_SINK; ++} ++ ++static const gchar *const * ++gst_rtp_sink_uri_get_protocols (GType type) ++{ ++ static const gchar *protocols[] = { (char *) "rtp", NULL }; ++ ++ return protocols; ++} ++ ++static gchar * ++gst_rtp_sink_uri_get_uri (GstURIHandler * handler) ++{ ++ GstRtpSink *self = (GstRtpSink *) handler; ++ ++ return gst_uri_to_string (self->uri); ++} ++ ++static gboolean ++gst_rtp_sink_uri_set_uri (GstURIHandler * handler, const gchar * uri, ++ GError ** error) ++{ ++ GstRtpSink *self = (GstRtpSink *) handler; ++ ++ g_object_set (G_OBJECT (self), "uri", uri, NULL); ++ ++ return TRUE; ++} ++ ++static void ++gst_rtp_sink_uri_handler_init (gpointer g_iface, gpointer iface_data) ++{ ++ GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface; ++ ++ iface->get_type = gst_rtp_sink_uri_get_type; ++ iface->get_protocols = gst_rtp_sink_uri_get_protocols; ++ iface->get_uri = gst_rtp_sink_uri_get_uri; ++ iface->set_uri = gst_rtp_sink_uri_set_uri; ++} ++ ++/* ex: set tabstop=2 shiftwidth=2 expandtab: */ +diff --git a/gst/rtp/gstrtpsink.h b/gst/rtp/gstrtpsink.h +new file mode 100644 +index 000000000..6f3fec0ac +--- /dev/null ++++ b/gst/rtp/gstrtpsink.h +@@ -0,0 +1,72 @@ ++/* GStreamer ++ * Copyright (C) 2019 Marc Leeman ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Library General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Library General Public License for more details. ++ * ++ * You should have received a copy of the GNU Library General Public ++ * License along with this library; if not, write to the ++ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, ++ * Boston, MA 02110-1301, USA. ++ */ ++ ++#ifndef __GST_RTP_SINK_H__ ++#define __GST_RTP_SINK_H__ ++ ++#include ++ ++G_BEGIN_DECLS ++#define GST_TYPE_RTP_SINK \ ++ (gst_rtp_sink_get_type()) ++#define GST_RTP_SINK(obj) \ ++ (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_RTP_SINK, GstRtpSink)) ++#define GST_RTP_SINK_CAST(obj) \ ++ ((GstRtpSink *) obj) ++#define GST_RTP_SINK_CLASS(klass) \ ++ (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_RTP_SINK, GstRtpSinkClass)) ++#define GST_IS_RTP_SINK(obj) \ ++ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_RTP_SINK)) ++#define GST_IS_RTP_SINK_CLASS(klass) \ ++ (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_RTP_SINK)) ++ ++typedef struct _GstRtpSink GstRtpSink; ++typedef struct _GstRtpSinkClass GstRtpSinkClass; ++ ++struct _GstRtpSink ++{ ++ GstBin parent; ++ ++ GstBin parent_instance; ++ ++ /* Properties */ ++ GstUri *uri; ++ gint ttl; ++ gint ttl_mc; ++ ++ /* Internal elements */ ++ GstElement *rtpbin; ++ GstElement *funnel_rtp; ++ GstElement *funnel_rtcp; ++ GstElement *rtp_sink; ++ GstElement *rtcp_src; ++ GstElement *rtcp_sink; ++ ++ GMutex lock; ++}; ++ ++struct _GstRtpSinkClass ++{ ++ GstBinClass parent; ++}; ++ ++GType gst_rtp_sink_get_type (void); ++ ++G_END_DECLS ++#endif /* __GST_RTP_SINK_H__ */ +diff --git a/gst/rtp/gstrtpsrc.c b/gst/rtp/gstrtpsrc.c +new file mode 100644 +index 000000000..bf958603b +--- /dev/null ++++ b/gst/rtp/gstrtpsrc.c +@@ -0,0 +1,731 @@ ++/* GStreamer ++ * Copyright (C) <2018> Marc Leeman ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Library General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Library General Public License for more details. ++ * ++ * You should have received a copy of the GNU Library General Public ++ * License along with this library; if not, write to the ++ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, ++ * Boston, MA 02110-1301, USA. ++ */ ++ ++/** ++ * SECTION: gstrtpsrc ++ * @title: GstRtpSrc ++ * @short description: element with Uri interface to get RTP data from ++ * the network. ++ * ++ * RTP (RFC 3550) is a protocol to stream media over the network while ++ * retaining the timing information and providing enough information to ++ * reconstruct the correct timing domain by the receiver. ++ * ++ * The RTP data port should be even, while the RTCP port should be ++ * odd. The URI that is entered defines the data port, the RTCP port will ++ * be allocated to the next port. ++ * ++ * This element hooks up the correct sockets to support both RTP as the ++ * accompanying RTCP layer. ++ * ++ * This Bin handles taking in of data from the network and provides the ++ * RTP payloaded data. ++ * ++ * This element also implements the URI scheme `rtp://` allowing to render ++ * RTP streams in GStreamer based media players. The RTP URI handler also ++ * allows setting properties through the URI query. ++ */ ++#ifdef HAVE_CONFIG_H ++#include ++#endif ++ ++#include ++#include ++ ++#include "gstrtpsrc.h" ++#include "gstrtp-utils.h" ++ ++GST_DEBUG_CATEGORY_STATIC (gst_rtp_src_debug); ++#define GST_CAT_DEFAULT gst_rtp_src_debug ++ ++#define DEFAULT_PROP_TTL 64 ++#define DEFAULT_PROP_TTL_MC 1 ++#define DEFAULT_PROP_ENCODING_NAME NULL ++#define DEFAULT_PROP_LATENCY 200 ++ ++#define DEFAULT_PROP_URI "rtp://0.0.0.0:5004" ++ ++enum ++{ ++ PROP_0, ++ ++ PROP_URI, ++ PROP_TTL, ++ PROP_TTL_MC, ++ PROP_ENCODING_NAME, ++ PROP_LATENCY, ++ ++ PROP_LAST ++}; ++ ++static void gst_rtp_src_uri_handler_init (gpointer g_iface, ++ gpointer iface_data); ++ ++#define gst_rtp_src_parent_class parent_class ++G_DEFINE_TYPE_WITH_CODE (GstRtpSrc, gst_rtp_src, GST_TYPE_BIN, ++ G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER, gst_rtp_src_uri_handler_init); ++ GST_DEBUG_CATEGORY_INIT (gst_rtp_src_debug, "rtpsrc", 0, "RTP Source")); ++ ++#define GST_RTP_SRC_GET_LOCK(obj) (&((GstRtpSrc*)(obj))->lock) ++#define GST_RTP_SRC_LOCK(obj) (g_mutex_lock (GST_RTP_SRC_GET_LOCK(obj))) ++#define GST_RTP_SRC_UNLOCK(obj) (g_mutex_unlock (GST_RTP_SRC_GET_LOCK(obj))) ++ ++static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src_%u", ++ GST_PAD_SRC, ++ GST_PAD_SOMETIMES, ++ GST_STATIC_CAPS ("application/x-rtp")); ++ ++static GstStateChangeReturn ++gst_rtp_src_change_state (GstElement * element, GstStateChange transition); ++ ++/** ++ * gst_rtp_src_rtpbin_erquest_pt_map_cb: ++ * @self: The current #GstRtpSrc object ++ * ++ * #GstRtpBin callback to map a pt on RTP caps. ++ * ++ * Returns: (transfer none): the guess on the RTP caps based on the PT ++ * and caps. ++ */ ++static GstCaps * ++gst_rtp_src_rtpbin_request_pt_map_cb (GstElement * rtpbin, guint session_id, ++ guint pt, gpointer data) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (data); ++ const GstRTPPayloadInfo *p = NULL; ++ ++ GST_DEBUG_OBJECT (self, ++ "Requesting caps for session-id 0x%x and pt %u.", session_id, pt); ++ ++ /* the encoding-name has more relevant information */ ++ if (self->encoding_name != NULL) { ++ /* Unfortunately, the media needs to be passed in the function. Since ++ * it is not known, try for video if video not found. */ ++ p = gst_rtp_payload_info_for_name ("video", self->encoding_name); ++ if (p == NULL) ++ p = gst_rtp_payload_info_for_name ("audio", self->encoding_name); ++ ++ } ++ ++ /* Static payload types, this is a simple lookup */ ++ if (!GST_RTP_PAYLOAD_IS_DYNAMIC (pt)) { ++ p = gst_rtp_payload_info_for_pt (pt); ++ } ++ ++ if (p != NULL) { ++ GstCaps *ret = gst_caps_new_simple ("application/x-rtp", ++ "encoding-name", G_TYPE_STRING, p->encoding_name, ++ "clock-rate", G_TYPE_INT, p->clock_rate, ++ "media", G_TYPE_STRING, p->media, NULL); ++ ++ GST_DEBUG_OBJECT (self, "Decided on caps %" GST_PTR_FORMAT, ret); ++ ++ return ret; ++ } ++ ++ GST_DEBUG_OBJECT (self, "Could not determine caps based on pt and" ++ " the encoding-name was not set."); ++ return NULL; ++} ++ ++static void ++gst_rtp_src_set_property (GObject * object, guint prop_id, ++ const GValue * value, GParamSpec * pspec) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (object); ++ GstCaps *caps; ++ ++ switch (prop_id) { ++ case PROP_URI:{ ++ GstUri *uri = NULL; ++ ++ GST_RTP_SRC_LOCK (object); ++ uri = gst_uri_from_string (g_value_get_string (value)); ++ if (uri == NULL) ++ break; ++ ++ if (self->uri) ++ gst_uri_unref (self->uri); ++ self->uri = uri; ++ if (gst_uri_get_port (self->uri) % 2) ++ GST_WARNING_OBJECT (self, ++ "Port %u is not even, this is not standard (see RFC 3550).", ++ gst_uri_get_port (self->uri)); ++ gst_rtp_utils_set_properties_from_uri_query (G_OBJECT (self), self->uri); ++ GST_RTP_SRC_UNLOCK (object); ++ break; ++ } ++ case PROP_TTL: ++ self->ttl = g_value_get_int (value); ++ break; ++ case PROP_TTL_MC: ++ self->ttl_mc = g_value_get_int (value); ++ break; ++ case PROP_ENCODING_NAME: ++ g_free (self->encoding_name); ++ self->encoding_name = g_value_dup_string (value); ++ if (self->rtp_src) { ++ caps = gst_rtp_src_rtpbin_request_pt_map_cb (NULL, 0, 96, self); ++ g_object_set (G_OBJECT (self->rtp_src), "caps", caps, NULL); ++ gst_caps_unref (caps); ++ } ++ break; ++ case PROP_LATENCY: ++ self->latency = g_value_get_uint (value); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ break; ++ } ++} ++ ++static void ++gst_rtp_src_get_property (GObject * object, guint prop_id, ++ GValue * value, GParamSpec * pspec) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (object); ++ ++ switch (prop_id) { ++ case PROP_URI: ++ GST_RTP_SRC_LOCK (object); ++ if (self->uri) ++ g_value_take_string (value, gst_uri_to_string (self->uri)); ++ else ++ g_value_set_string (value, NULL); ++ GST_RTP_SRC_UNLOCK (object); ++ break; ++ case PROP_TTL: ++ g_value_set_int (value, self->ttl); ++ break; ++ case PROP_TTL_MC: ++ g_value_set_int (value, self->ttl_mc); ++ break; ++ case PROP_ENCODING_NAME: ++ g_value_set_string (value, self->encoding_name); ++ break; ++ case PROP_LATENCY: ++ g_value_set_uint (value, self->latency); ++ break; ++ default: ++ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); ++ break; ++ } ++} ++ ++static void ++gst_rtp_src_finalize (GObject * gobject) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (gobject); ++ ++ if (self->uri) ++ gst_uri_unref (self->uri); ++ g_free (self->encoding_name); ++ ++ g_mutex_clear (&self->lock); ++ G_OBJECT_CLASS (parent_class)->finalize (gobject); ++} ++ ++static void ++gst_rtp_src_class_init (GstRtpSrcClass * klass) ++{ ++ GObjectClass *gobject_class = G_OBJECT_CLASS (klass); ++ GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass); ++ ++ gobject_class->set_property = gst_rtp_src_set_property; ++ gobject_class->get_property = gst_rtp_src_get_property; ++ gobject_class->finalize = gst_rtp_src_finalize; ++ gstelement_class->change_state = gst_rtp_src_change_state; ++ ++ /** ++ * GstRtpSrc:uri: ++ * ++ * uri to an RTP from. All GStreamer parameters can be ++ * encoded in the URI, this URI format is RFC compliant. ++ */ ++ g_object_class_install_property (gobject_class, PROP_URI, ++ g_param_spec_string ("uri", "URI", ++ "URI in the form of rtp://host:port?query", DEFAULT_PROP_URI, ++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ ++ /** ++ * GstRtpSrc:ttl: ++ * ++ * Set the unicast TTL parameter. In RTP this of importance for RTCP. ++ */ ++ g_object_class_install_property (gobject_class, PROP_TTL, ++ g_param_spec_int ("ttl", "Unicast TTL", ++ "Used for setting the unicast TTL parameter", ++ 0, 255, DEFAULT_PROP_TTL, ++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ ++ /** ++ * GstRtpSrc:ttl-mc: ++ * ++ * Set the multicast TTL parameter. In RTP this of importance for RTCP. ++ */ ++ g_object_class_install_property (gobject_class, PROP_TTL_MC, ++ g_param_spec_int ("ttl-mc", "Multicast TTL", ++ "Used for setting the multicast TTL parameter", 0, 255, ++ DEFAULT_PROP_TTL_MC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ ++ /** ++ * GstRtpSrc:encoding-name: ++ * ++ * Set the encoding name of the stream to use. This is a short-hand for ++ * the full caps and maps typically to the encoding-name in the RTP caps. ++ */ ++ g_object_class_install_property (gobject_class, PROP_ENCODING_NAME, ++ g_param_spec_string ("encoding-name", "Caps encoding name", ++ "Encoding name use to determine caps parameters", ++ DEFAULT_PROP_ENCODING_NAME, ++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ ++ /** ++ * GstRtpSrc:latency: ++ * ++ * Set the size of the latency buffer in the ++ * GstRtpBin/GstRtpJitterBuffer to compensate for network jitter. ++ */ ++ g_object_class_install_property (gobject_class, PROP_LATENCY, ++ g_param_spec_uint ("latency", "Buffer latency in ms", ++ "Default amount of ms to buffer in the jitterbuffers", 0, ++ G_MAXUINT, DEFAULT_PROP_LATENCY, ++ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); ++ ++ gst_element_class_add_pad_template (gstelement_class, ++ gst_static_pad_template_get (&src_template)); ++ ++ gst_element_class_set_static_metadata (gstelement_class, ++ "RTP Source element", ++ "Generic/Bin/Src", ++ "Simple RTP src", "Marc Leeman "); ++} ++ ++static void ++gst_rtp_src_rtpbin_pad_added_cb (GstElement * element, GstPad * pad, ++ gpointer data) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (data); ++ GstCaps *caps = gst_pad_query_caps (pad, NULL); ++ GstPad *upad; ++ gchar name[48]; ++ ++ /* Expose RTP data pad only */ ++ GST_INFO_OBJECT (self, ++ "Element %" GST_PTR_FORMAT " added pad %" GST_PTR_FORMAT "with caps %" ++ GST_PTR_FORMAT ".", element, pad, caps); ++ ++ /* Sanity checks */ ++ if (GST_PAD_DIRECTION (pad) == GST_PAD_SINK) { ++ /* Sink pad, do not expose */ ++ gst_caps_unref (caps); ++ return; ++ } ++ ++ if (G_LIKELY (caps)) { ++ GstCaps *ref_caps = gst_caps_new_empty_simple ("application/x-rtcp"); ++ ++ if (gst_caps_can_intersect (caps, ref_caps)) { ++ /* SRC RTCP caps, do not expose */ ++ gst_caps_unref (ref_caps); ++ gst_caps_unref (caps); ++ ++ return; ++ } ++ gst_caps_unref (ref_caps); ++ } else { ++ GST_ERROR_OBJECT (self, "Pad with no caps detected."); ++ gst_caps_unref (caps); ++ ++ return; ++ } ++ gst_caps_unref (caps); ++ ++ GST_RTP_SRC_LOCK (self); ++ g_snprintf (name, 48, "src_%u", GST_ELEMENT (self)->numpads); ++ upad = gst_ghost_pad_new (name, pad); ++ ++ gst_pad_set_active (upad, TRUE); ++ gst_element_add_pad (GST_ELEMENT (self), upad); ++ ++ GST_RTP_SRC_UNLOCK (self); ++} ++ ++static void ++gst_rtp_src_rtpbin_pad_removed_cb (GstElement * element, GstPad * pad, ++ gpointer data) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (data); ++ GST_INFO_OBJECT (self, ++ "Element %" GST_PTR_FORMAT " removed pad %" GST_PTR_FORMAT ".", element, ++ pad); ++} ++ ++static void ++gst_rtp_src_rtpbin_on_ssrc_collision_cb (GstElement * rtpbin, guint session_id, ++ guint ssrc, gpointer data) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (data); ++ ++ GST_INFO_OBJECT (self, ++ "Dectected an SSRC collision: session-id 0x%x, ssrc 0x%x.", session_id, ++ ssrc); ++} ++ ++static void ++gst_rtp_src_rtpbin_on_new_ssrc_cb (GstElement * rtpbin, guint session_id, ++ guint ssrc, gpointer data) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (data); ++ ++ GST_INFO_OBJECT (self, "Dectected a new SSRC: session-id 0x%x, ssrc 0x%x.", ++ session_id, ssrc); ++} ++ ++static GstPadProbeReturn ++gst_rtp_src_on_recv_rtcp (GstPad * pad, GstPadProbeInfo * info, ++ gpointer user_data) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (user_data); ++ GstBuffer *buffer; ++ GstNetAddressMeta *meta; ++ ++ if (info->type == GST_PAD_PROBE_TYPE_BUFFER_LIST) { ++ GstBufferList *buffer_list = info->data; ++ buffer = gst_buffer_list_get (buffer_list, 0); ++ } else { ++ buffer = info->data; ++ } ++ ++ meta = gst_buffer_get_net_address_meta (buffer); ++ ++ GST_OBJECT_LOCK (self); ++ g_clear_object (&self->rtcp_send_addr); ++ self->rtcp_send_addr = g_object_ref (meta->addr); ++ GST_OBJECT_UNLOCK (self); ++ ++ return GST_PAD_PROBE_OK; ++} ++ ++static inline void ++gst_rtp_src_attach_net_address_meta (GstRtpSrc * self, GstBuffer * buffer) ++{ ++ GST_OBJECT_LOCK (self); ++ if (self->rtcp_send_addr) ++ gst_buffer_add_net_address_meta (buffer, self->rtcp_send_addr); ++ GST_OBJECT_UNLOCK (self); ++} ++ ++static GstPadProbeReturn ++gst_rtp_src_on_send_rtcp (GstPad * pad, GstPadProbeInfo * info, ++ gpointer user_data) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (user_data); ++ ++ if (info->type == GST_PAD_PROBE_TYPE_BUFFER_LIST) { ++ GstBufferList *buffer_list = info->data; ++ GstBuffer *buffer; ++ gint i; ++ ++ info->data = buffer_list = gst_buffer_list_make_writable (buffer_list); ++ for (i = 0; i < gst_buffer_list_length (buffer_list); i++) { ++ buffer = gst_buffer_list_get (buffer_list, i); ++ gst_rtp_src_attach_net_address_meta (self, buffer); ++ } ++ } else { ++ GstBuffer *buffer = info->data; ++ info->data = buffer = gst_buffer_make_writable (buffer); ++ gst_rtp_src_attach_net_address_meta (self, buffer); ++ } ++ ++ return GST_PAD_PROBE_OK; ++} ++ ++static gboolean ++gst_rtp_src_setup_elements (GstRtpSrc * self) ++{ ++ GstPad *pad; ++ GSocket *socket; ++ GInetAddress *addr; ++ gchar name[48]; ++ GstCaps *caps; ++ gchar *address; ++ guint rtcp_port; ++ ++ /* Construct the RTP receiver pipeline. ++ * ++ * udpsrc -> [recv_rtp_sink_%u] -------- [recv_rtp_src_%u_%u_%u] ++ * | rtpbin | ++ * udpsrc -> [recv_rtcp_sink_%u] -------- [send_rtcp_src_%u] -> udpsink ++ * ++ * This pipeline is fixed for now, note that optionally an FEC stream could ++ * be added later. ++ */ ++ ++ /* Should not be NULL */ ++ g_return_val_if_fail (self->uri != NULL, FALSE); ++ ++ self->rtpbin = gst_element_factory_make ("rtpbin", NULL); ++ if (self->rtpbin == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "rtpbin element is not available")); ++ return FALSE; ++ } ++ ++ self->rtp_src = gst_element_factory_make ("udpsrc", NULL); ++ if (self->rtp_src == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "rtp_src element is not available")); ++ return FALSE; ++ } ++ ++ self->rtcp_src = gst_element_factory_make ("udpsrc", NULL); ++ if (self->rtcp_src == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "rtcp_src element is not available")); ++ return FALSE; ++ } ++ ++ self->rtcp_sink = gst_element_factory_make ("dynudpsink", NULL); ++ if (self->rtcp_sink == NULL) { ++ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), ++ ("%s", "rtcp_sink element is not available")); ++ return FALSE; ++ } ++ ++ /* Add rtpbin callbacks to monitor the operation of rtpbin */ ++ g_signal_connect (self->rtpbin, "pad-added", ++ G_CALLBACK (gst_rtp_src_rtpbin_pad_added_cb), self); ++ g_signal_connect (self->rtpbin, "pad-removed", ++ G_CALLBACK (gst_rtp_src_rtpbin_pad_removed_cb), self); ++ g_signal_connect (self->rtpbin, "request-pt-map", ++ G_CALLBACK (gst_rtp_src_rtpbin_request_pt_map_cb), self); ++ g_signal_connect (self->rtpbin, "on-new-ssrc", ++ G_CALLBACK (gst_rtp_src_rtpbin_on_new_ssrc_cb), self); ++ g_signal_connect (self->rtpbin, "on-ssrc-collision", ++ G_CALLBACK (gst_rtp_src_rtpbin_on_ssrc_collision_cb), self); ++ ++ g_object_set (self->rtpbin, "latency", self->latency, NULL); ++ ++ /* Add elements as needed, since udpsrc/udpsink for RTCP share a socket, ++ * not all at the same moment */ ++ gst_bin_add (GST_BIN (self), self->rtpbin); ++ gst_bin_add (GST_BIN (self), self->rtp_src); ++ ++ g_object_set (self->rtp_src, ++ "address", gst_uri_get_host (self->uri), ++ "port", gst_uri_get_port (self->uri), NULL); ++ ++ gst_bin_add (GST_BIN (self), self->rtcp_sink); ++ ++ /* no need to set address if unicast */ ++ caps = gst_caps_new_empty_simple ("application/x-rtcp"); ++ g_object_set (self->rtcp_src, ++ "port", gst_uri_get_port (self->uri) + 1, "caps", caps, NULL); ++ gst_caps_unref (caps); ++ ++ addr = g_inet_address_new_from_string (gst_uri_get_host (self->uri)); ++ if (g_inet_address_get_is_multicast (addr)) { ++ g_object_set (self->rtcp_src, "address", gst_uri_get_host (self->uri), ++ NULL); ++ } ++ g_object_unref (addr); ++ ++ g_object_set (self->rtcp_sink, ++ "host", gst_uri_get_host (self->uri), ++ "port", gst_uri_get_port (self->uri) + 1, ++ "ttl", self->ttl, "ttl-mc", self->ttl_mc, ++ /* Set false since we're reusing a socket */ ++ "auto-multicast", FALSE, NULL); ++ ++ gst_bin_add (GST_BIN (self), self->rtcp_src); ++ ++ /* share the socket created by the source */ ++ g_object_get (G_OBJECT (self->rtcp_src), "used-socket", &socket, ++ "address", &address, "port", &rtcp_port, NULL); ++ ++ addr = g_inet_address_new_from_string (address); ++ g_free (address); ++ ++ if (g_inet_address_get_is_multicast (addr)) { ++ /* mc-ttl is not supported by dynudpsink */ ++ g_socket_set_multicast_ttl (socket, self->ttl_mc); ++ /* In multicast, send RTCP to the multicast group */ ++ self->rtcp_send_addr = g_inet_socket_address_new (addr, rtcp_port); ++ } else { ++ /* In unicast, send RTCP to the detected sender address */ ++ pad = gst_element_get_static_pad (self->rtcp_src, "src"); ++ self->rtcp_recv_probe = gst_pad_add_probe (pad, ++ GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_BUFFER_LIST, ++ gst_rtp_src_on_recv_rtcp, self, NULL); ++ gst_object_unref (pad); ++ } ++ g_object_unref (addr); ++ ++ pad = gst_element_get_static_pad (self->rtcp_sink, "sink"); ++ self->rtcp_send_probe = gst_pad_add_probe (pad, ++ GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_BUFFER_LIST, ++ gst_rtp_src_on_send_rtcp, self, NULL); ++ gst_object_unref (pad); ++ ++ g_object_set (G_OBJECT (self->rtcp_sink), "socket", socket, NULL); ++ ++ /* pads are all named */ ++ g_snprintf (name, 48, "recv_rtp_sink_%u", GST_ELEMENT (self)->numpads); ++ gst_element_link_pads (self->rtp_src, "src", self->rtpbin, name); ++ ++ g_snprintf (name, 48, "recv_rtcp_sink_%u", GST_ELEMENT (self)->numpads); ++ gst_element_link_pads (self->rtcp_src, "src", self->rtpbin, name); ++ ++ gst_element_sync_state_with_parent (self->rtpbin); ++ gst_element_sync_state_with_parent (self->rtp_src); ++ gst_element_sync_state_with_parent (self->rtcp_sink); ++ ++ g_snprintf (name, 48, "send_rtcp_src_%u", GST_ELEMENT (self)->numpads); ++ gst_element_link_pads (self->rtpbin, name, self->rtcp_sink, "sink"); ++ ++ gst_element_sync_state_with_parent (self->rtcp_src); ++ ++ return TRUE; ++} ++ ++static void ++gst_rtp_src_stop (GstRtpSrc * self) ++{ ++ GstPad *pad; ++ ++ if (self->rtcp_recv_probe) { ++ pad = gst_element_get_static_pad (self->rtcp_src, "src"); ++ gst_pad_remove_probe (pad, self->rtcp_recv_probe); ++ self->rtcp_recv_probe = 0; ++ gst_object_unref (pad); ++ } ++ ++ pad = gst_element_get_static_pad (self->rtcp_sink, "sink"); ++ gst_pad_remove_probe (pad, self->rtcp_send_probe); ++ self->rtcp_send_probe = 0; ++ gst_object_unref (pad); ++} ++ ++static GstStateChangeReturn ++gst_rtp_src_change_state (GstElement * element, GstStateChange transition) ++{ ++ GstRtpSrc *self = GST_RTP_SRC (element); ++ GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; ++ ++ GST_DEBUG_OBJECT (self, "Changing state: %s => %s", ++ gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)), ++ gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition))); ++ ++ switch (transition) { ++ case GST_STATE_CHANGE_NULL_TO_READY: ++ if (gst_rtp_src_setup_elements (self) == FALSE) ++ return GST_STATE_CHANGE_FAILURE; ++ break; ++ default: ++ break; ++ } ++ ++ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); ++ if (ret == GST_STATE_CHANGE_FAILURE) ++ return ret; ++ ++ switch (transition) { ++ case GST_STATE_CHANGE_READY_TO_PAUSED: ++ ret = GST_STATE_CHANGE_NO_PREROLL; ++ break; ++ case GST_STATE_CHANGE_PLAYING_TO_PAUSED: ++ ret = GST_STATE_CHANGE_NO_PREROLL; ++ break; ++ case GST_STATE_CHANGE_READY_TO_NULL: ++ gst_rtp_src_stop (self); ++ break; ++ default: ++ break; ++ } ++ ++ return ret; ++} ++ ++static void ++gst_rtp_src_init (GstRtpSrc * self) ++{ ++ self->rtpbin = NULL; ++ self->rtp_src = NULL; ++ self->rtcp_src = NULL; ++ self->rtcp_sink = NULL; ++ ++ self->uri = gst_uri_from_string (DEFAULT_PROP_URI); ++ self->ttl = DEFAULT_PROP_TTL; ++ self->ttl_mc = DEFAULT_PROP_TTL_MC; ++ self->encoding_name = DEFAULT_PROP_ENCODING_NAME; ++ self->latency = DEFAULT_PROP_LATENCY; ++ ++ GST_OBJECT_FLAG_SET (GST_OBJECT (self), GST_ELEMENT_FLAG_SOURCE); ++ gst_bin_set_suppressed_flags (GST_BIN (self), ++ GST_ELEMENT_FLAG_SOURCE | GST_ELEMENT_FLAG_SINK); ++ ++ g_mutex_init (&self->lock); ++} ++ ++static guint ++gst_rtp_src_uri_get_type (GType type) ++{ ++ return GST_URI_SRC; ++} ++ ++static const gchar *const * ++gst_rtp_src_uri_get_protocols (GType type) ++{ ++ static const gchar *protocols[] = { (char *) "rtp", NULL }; ++ ++ return protocols; ++} ++ ++static gchar * ++gst_rtp_src_uri_get_uri (GstURIHandler * handler) ++{ ++ GstRtpSrc *self = (GstRtpSrc *) handler; ++ ++ return gst_uri_to_string (self->uri); ++} ++ ++static gboolean ++gst_rtp_src_uri_set_uri (GstURIHandler * handler, const gchar * uri, ++ GError ** error) ++{ ++ GstRtpSrc *self = (GstRtpSrc *) handler; ++ ++ g_object_set (G_OBJECT (self), "uri", uri, NULL); ++ ++ return TRUE; ++} ++ ++static void ++gst_rtp_src_uri_handler_init (gpointer g_iface, gpointer iface_data) ++{ ++ GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface; ++ ++ iface->get_type = gst_rtp_src_uri_get_type; ++ iface->get_protocols = gst_rtp_src_uri_get_protocols; ++ iface->get_uri = gst_rtp_src_uri_get_uri; ++ iface->set_uri = gst_rtp_src_uri_set_uri; ++} ++ ++/* ex: set tabstop=2 shiftwidth=2 expandtab: */ +diff --git a/gst/rtp/gstrtpsrc.h b/gst/rtp/gstrtpsrc.h +new file mode 100644 +index 000000000..4bc3535ef +--- /dev/null ++++ b/gst/rtp/gstrtpsrc.h +@@ -0,0 +1,76 @@ ++/* GStreamer ++ * Copyright (C) 2019 Marc Leeman ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Library General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Library General Public License for more details. ++ * ++ * You should have received a copy of the GNU Library General Public ++ * License along with this library; if not, write to the ++ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, ++ * Boston, MA 02110-1301, USA. ++ */ ++ ++#ifndef __GST_RTP_SRC_H__ ++#define __GST_RTP_SRC_H__ ++ ++#include ++#include ++ ++G_BEGIN_DECLS ++#define GST_TYPE_RTP_SRC \ ++ (gst_rtp_src_get_type()) ++#define GST_RTP_SRC(obj) \ ++ (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_RTP_SRC, GstRtpSrc)) ++#define GST_RTP_SRC_CAST(obj) \ ++ ((GstRtpSrc *) obj) ++#define GST_RTP_SRC_CLASS(klass) \ ++ (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_RTP_SRC, GstRtpSrcClass)) ++#define GST_IS_RTP_SRC(obj) \ ++ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_RTP_SRC)) ++#define GST_IS_RTP_SRC_CLASS(klass) \ ++ (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_RTP_SRC)) ++ ++typedef struct _GstRtpSrc GstRtpSrc; ++typedef struct _GstRtpSrcClass GstRtpSrcClass; ++ ++struct _GstRtpSrc ++{ ++ GstBin parent; ++ ++ /* Properties */ ++ GstUri *uri; ++ gint ttl; ++ gint ttl_mc; ++ gint latency; ++ gchar *encoding_name; ++ guint latency_ms; ++ ++ /* Internal elements */ ++ GstElement *rtpbin; ++ GstElement *rtp_src; ++ GstElement *rtcp_src; ++ GstElement *rtcp_sink; ++ ++ gulong rtcp_recv_probe; ++ gulong rtcp_send_probe; ++ GSocketAddress *rtcp_send_addr; ++ ++ GMutex lock; ++}; ++ ++struct _GstRtpSrcClass ++{ ++ GstBinClass parent; ++}; ++ ++GType gst_rtp_src_get_type (void); ++ ++G_END_DECLS ++#endif /* __GST_RTP_SRC_H__ */ +diff --git a/gst/rtp/meson.build b/gst/rtp/meson.build +new file mode 100644 +index 000000000..bb21dae5b +--- /dev/null ++++ b/gst/rtp/meson.build +@@ -0,0 +1,15 @@ ++gst_plugins_rtp_sources = [ ++ 'plugin.c', ++ 'gstrtpsink.c', ++ 'gstrtpsrc.c', ++ 'gstrtp-utils.c', ++] ++ ++gstrtp = library('gstrtpmanagerbad', ++ gst_plugins_rtp_sources, ++ dependencies: [gio_dep, gst_dep, gstbase_dep, gstrtp_dep, gstnet_dep, gstcontroller_dep], ++ include_directories: [configinc], ++ install: true, ++ c_args: gst_plugins_bad_args, ++ install_dir: plugins_install_dir, ++) +diff --git a/gst/rtp/plugin.c b/gst/rtp/plugin.c +new file mode 100644 +index 000000000..8c1d71f8b +--- /dev/null ++++ b/gst/rtp/plugin.c +@@ -0,0 +1,28 @@ ++#ifdef HAVE_CONFIG_H ++#include "config.h" ++#endif ++ ++#include "gstrtpsink.h" ++#include "gstrtpsrc.h" ++ ++ ++static gboolean ++plugin_init (GstPlugin * plugin) ++{ ++ ++ gboolean ret = FALSE; ++ ++ ret |= gst_element_register (plugin, "rtpsrc", ++ GST_RANK_PRIMARY + 1, GST_TYPE_RTP_SRC); ++ ++ ret |= gst_element_register (plugin, "rtpsink", ++ GST_RANK_PRIMARY + 1, GST_TYPE_RTP_SINK); ++ ++ return ret; ++} ++ ++GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, ++ GST_VERSION_MINOR, ++ rtpmanagerbad, ++ "GStreamer RTP Plugins", ++ plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN); +diff --git a/meson_options.txt b/meson_options.txt +index 111679ec9..0c30c253d 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -49,6 +49,7 @@ option('pnm', type : 'feature', value : 'auto') + option('proxy', type : 'feature', value : 'auto') + option('rawparse', type : 'feature', value : 'auto') + option('removesilence', type : 'feature', value : 'auto') ++option('rtp', type : 'feature', value : 'auto') + option('sdp', type : 'feature', value : 'auto') + option('segmentclip', type : 'feature', value : 'auto') + option('siren', type : 'feature', value : 'auto') +diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am +index a05bc5792..dbc746fd7 100644 +--- a/tests/check/Makefile.am ++++ b/tests/check/Makefile.am +@@ -290,6 +290,8 @@ check_PROGRAMS = \ + elements/pnm \ + elements/rtponvifparse \ + elements/rtponviftimestamp \ ++ elements/rtpsrc \ ++ elements/rtpsink \ + elements/id3mux \ + pipelines/mxf \ + libs/isoff \ +@@ -578,6 +580,12 @@ elements_rtponvifparse_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_L + elements_rtponviftimestamp_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS) + elements_rtponviftimestamp_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD) + ++elements_rtpsrc_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS) ++elements_rtpsrc_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD) ++ ++elements_rtpsink_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS) ++elements_rtpsink_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD) ++ + EXTRA_DIST = gst-plugins-bad.supp $(uvch264_dist_data) + + orc_bayer_CFLAGS = $(ORC_CFLAGS) +diff --git a/tests/check/elements/rtpsink.c b/tests/check/elements/rtpsink.c +new file mode 100644 +index 000000000..bb6c5b30d +--- /dev/null ++++ b/tests/check/elements/rtpsink.c +@@ -0,0 +1,56 @@ ++/* GStreamer ++ * Copyright (C) <2018> Marc Leeman ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Library General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Library General Public License for more details. ++ * ++ * You should have received a copy of the GNU Library General Public ++ * License along with this library; if not, write to the ++ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, ++ * Boston, MA 02110-1301, USA. ++ */ ++ ++#include ++ ++GST_START_TEST (test_uri_to_properties) ++{ ++ GstElement *rtpsink; ++ ++ gint ttl, ttl_mc; ++ ++ rtpsink = gst_element_factory_make ("rtpsink", NULL); ++ ++ /* Sets properties to non-default values (make sure this stays in sync) */ ++ g_object_set (rtpsink, "uri", "rtp://1.230.1.2?" "ttl=8" "&ttl-mc=9", NULL); ++ ++ g_object_get (rtpsink, "ttl", &ttl, "ttl_mc", &ttl_mc, NULL); ++ ++ /* Make sure these values are in sync with the one from the URI. */ ++ g_assert_cmpint (ttl, ==, 8); ++ g_assert_cmpint (ttl_mc, ==, 9); ++ ++ gst_object_unref (rtpsink); ++} ++ ++GST_END_TEST; ++ ++static Suite * ++rtpsink_suite (void) ++{ ++ Suite *s = suite_create ("rtpsink"); ++ TCase *tc_chain = tcase_create ("general"); ++ ++ suite_add_tcase (s, tc_chain); ++ tcase_add_test (tc_chain, test_uri_to_properties); ++ ++ return s; ++} ++ ++GST_CHECK_MAIN (rtpsink); +diff --git a/tests/check/elements/rtpsrc.c b/tests/check/elements/rtpsrc.c +new file mode 100644 +index 000000000..6e1f1327c +--- /dev/null ++++ b/tests/check/elements/rtpsrc.c +@@ -0,0 +1,58 @@ ++/* GStreamer ++ * Copyright (C) <2018> Marc Leeman ++ * ++ * This library is free software; you can redistribute it and/or ++ * modify it under the terms of the GNU Library General Public ++ * License as published by the Free Software Foundation; either ++ * version 2 of the License, or (at your option) any later version. ++ * ++ * This library is distributed in the hope that it will be useful, ++ * but WITHOUT ANY WARRANTY; without even the implied warranty of ++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU ++ * Library General Public License for more details. ++ * ++ * You should have received a copy of the GNU Library General Public ++ * License along with this library; if not, write to the ++ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, ++ * Boston, MA 02110-1301, USA. ++ */ ++ ++#include ++ ++GST_START_TEST (test_uri_to_properties) ++{ ++ GstElement *rtpsrc; ++ guint latency, ttl, ttl_mc; ++ ++ rtpsrc = gst_element_factory_make ("rtpsrc", NULL); ++ ++ /* Sets properties to non-default values (make sure this stays in sync) */ ++ g_object_set (rtpsrc, "uri", "rtp://1.230.1.2?" ++ "latency=300" "&ttl=8" "&ttl-mc=9", NULL); ++ ++ g_object_get (rtpsrc, ++ "latency", &latency, "ttl-mc", &ttl_mc, "ttl", &ttl, NULL); ++ ++ /* Make sure these values are in sync with the one from the URI. */ ++ g_assert_cmpuint (latency, ==, 300); ++ g_assert_cmpint (ttl, ==, 8); ++ g_assert_cmpint (ttl_mc, ==, 9); ++ ++ gst_object_unref (rtpsrc); ++} ++ ++GST_END_TEST; ++ ++static Suite * ++rtpsrc_suite (void) ++{ ++ Suite *s = suite_create ("rtpsrc"); ++ TCase *tc_chain = tcase_create ("general"); ++ ++ suite_add_tcase (s, tc_chain); ++ tcase_add_test (tc_chain, test_uri_to_properties); ++ ++ return s; ++} ++ ++GST_CHECK_MAIN (rtpsrc); +diff --git a/tests/check/meson.build b/tests/check/meson.build +index cd77fb4b3..5eb401d42 100644 +--- a/tests/check/meson.build ++++ b/tests/check/meson.build +@@ -47,6 +47,8 @@ base_tests = [ + [['elements/pnm.c']], + [['elements/rtponvifparse.c']], + [['elements/rtponviftimestamp.c']], ++ [['elements/rtpsrc.c']], ++ [['elements/rtpsink.c']], + [['elements/videoframe-audiolevel.c']], + [['elements/viewfinderbin.c']], + [['libs/h264parser.c'], false, [gstcodecparsers_dep]], +-- +2.17.1 + diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend index ebed97935..e114ac629 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend @@ -1,9 +1,17 @@ # Copyright (c) 2018-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webos2" +EXTENDPRAUTO:append = "webos3" PACKAGECONFIG:remove = "rsvg" # Needed only for qemux86 build # FILESEXTRAPATHS:prepend:qemux86 := "${THISDIR}/${BPN}:" # SRC_URI:append:qemux86 = " file://0002-render-into-wl_surface-without-sub-surface.patch" + +FILESEXTRAPATHS:prepend:qemux86-64 := "${THISDIR}/${BPN}:" +SRC_URI:append:qemux86-64 = " \ + file://0001_set_initial_window_size.patch \ + file://0002_add_video_info_message.patch \ + file://0003_disable_using_subsurface_subcompositor.patch \ + file://0004-rtpmanagerbad-add-RTP-streaming-elements.patch \ +" diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0/0001-Add-support-for-seamless-seek-trickplay.patch b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0/0001-Add-support-for-seamless-seek-trickplay.patch new file mode 100644 index 000000000..3b096314e --- /dev/null +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0/0001-Add-support-for-seamless-seek-trickplay.patch @@ -0,0 +1,397 @@ +diff -ruN a/gst/gstpipeline.c b/gst/gstpipeline.c +--- a/gst/gstpipeline.c 2020-08-06 09:59:25.481041707 +0000 ++++ b/gst/gstpipeline.c 2020-08-06 09:58:51.195687907 +0000 +@@ -308,6 +308,13 @@ + GST_OBJECT_UNLOCK (pipeline); + } + ++void ++gst_pipeline_reset_start_time (GstPipeline * pipeline, GstClockTime start_time) ++{ ++ GST_DEBUG_OBJECT (pipeline, "Reset start_time to 0"); ++ reset_start_time (pipeline, start_time); ++} ++ + /** + * gst_pipeline_new: + * @name: (allow-none): name of new pipeline +@@ -368,6 +375,152 @@ + GST_OBJECT_UNLOCK (element); + } + ++GstClockTime ++gst_pipeline_get_base_time (GstPipeline * pipeline, GstClockTime stime) ++{ ++ GstElement *element = GST_ELEMENT_CAST (pipeline); ++ GstClock *clock; ++ GstClockTime now, start_time, delay; ++ GstClock *cur_clock; ++ GstClockTime new_base_time = GST_CLOCK_TIME_NONE; ++ ++ GST_DEBUG_OBJECT (element, "Obtaining new base_time"); ++ ++ GST_OBJECT_LOCK (element); ++ cur_clock = element->clock; ++ if (cur_clock) ++ gst_object_ref (cur_clock); ++ /* get the desired running_time of the first buffer aka the start_time */ ++ if (stime == GST_CLOCK_TIME_NONE) ++ start_time = GST_ELEMENT_START_TIME (pipeline); ++ else ++ start_time = stime; ++ ++ /* see if we need to update the clock */ ++ delay = pipeline->delay; ++ GST_OBJECT_UNLOCK (element); ++ ++ if (cur_clock) ++ gst_object_ref (cur_clock); ++ clock = cur_clock; ++ ++ if (clock) { ++ now = gst_clock_get_time (clock); ++ } else { ++ GST_DEBUG_OBJECT (pipeline, "no clock, using base time of NONE"); ++ now = GST_CLOCK_TIME_NONE; ++ } ++ ++ if (clock) ++ gst_object_unref (clock); ++ ++ if (start_time != GST_CLOCK_TIME_NONE && now != GST_CLOCK_TIME_NONE) { ++ new_base_time = now - start_time + delay; ++ GST_DEBUG_OBJECT (element, ++ "start_time=%" GST_TIME_FORMAT ", now=%" GST_TIME_FORMAT ++ ", base_time %" GST_TIME_FORMAT, ++ GST_TIME_ARGS (start_time), GST_TIME_ARGS (now), ++ GST_TIME_ARGS (new_base_time)); ++ ++ } else { ++ GST_DEBUG_OBJECT (pipeline, ++ "NOT obtaining base_time because start_time is NONE"); ++ } ++ ++ if (cur_clock) ++ gst_object_unref (cur_clock); ++ ++ return new_base_time; ++} ++ ++gboolean ++gst_pipeline_update_base_time (GstPipeline * pipeline, GstClockTime btime) ++{ ++ GstElement *element = GST_ELEMENT_CAST (pipeline); ++ GstClock *clock; ++ GstClockTime now, start_time, delay; ++ GstClock *cur_clock; ++ ++ GST_DEBUG_OBJECT (element, "selecting clock and base_time %" GST_TIME_FORMAT, ++ GST_TIME_ARGS (btime)); ++ ++ GST_OBJECT_LOCK (element); ++ cur_clock = element->clock; ++ if (cur_clock) ++ gst_object_ref (cur_clock); ++ /* get the desired running_time of the first buffer aka the start_time */ ++ start_time = GST_ELEMENT_START_TIME (pipeline); ++ pipeline->priv->last_start_time = start_time; ++ delay = pipeline->delay; ++ GST_OBJECT_UNLOCK (element); ++ ++ GST_DEBUG_OBJECT (element, "start_time: %" GST_TIME_FORMAT, ++ GST_TIME_ARGS (start_time)); ++ ++ GST_DEBUG_OBJECT (pipeline, "Don't need to update clock, using old clock."); ++ /* only try to ref if cur_clock is not NULL */ ++ if (cur_clock) ++ gst_object_ref (cur_clock); ++ clock = cur_clock; ++ ++ if (clock) { ++ now = gst_clock_get_time (clock); ++ } else { ++ GST_DEBUG_OBJECT (pipeline, "no clock, using base time of NONE"); ++ now = GST_CLOCK_TIME_NONE; ++ } ++ ++ if (clock != cur_clock) { ++ /* now distribute the clock (which could be NULL). If some ++ * element refuses the clock, this will return FALSE and ++ * we effectively fail the state change. */ ++ if (!gst_element_set_clock (element, clock)) ++ goto invalid_clock; ++ ++ /* if we selected and distributed a new clock, let the app ++ * know about it */ ++ gst_element_post_message (element, ++ gst_message_new_new_clock (GST_OBJECT_CAST (element), clock)); ++ } ++ ++ if (clock) ++ gst_object_unref (clock); ++ ++ if (start_time != GST_CLOCK_TIME_NONE && now != GST_CLOCK_TIME_NONE) { ++ GstClockTime new_base_time = ++ (btime != GST_CLOCK_TIME_NONE) ? btime : (now - start_time + delay); ++ GST_DEBUG_OBJECT (element, ++ "start_time=%" GST_TIME_FORMAT ", now=%" GST_TIME_FORMAT ++ ", base_time %" GST_TIME_FORMAT, GST_TIME_ARGS (start_time), ++ GST_TIME_ARGS (now), GST_TIME_ARGS (new_base_time)); ++ ++ gst_element_set_base_time (element, new_base_time); ++ } else { ++ GST_DEBUG_OBJECT (pipeline, ++ "NOT adjusting base_time because start_time is NONE"); ++ } ++ ++ if (cur_clock) ++ gst_object_unref (cur_clock); ++ ++ return TRUE; ++ ++ /* ERRORS */ ++invalid_clock: ++ { ++ /* we generate this error when the selected clock was not ++ * accepted by some element */ ++ GST_ELEMENT_ERROR (pipeline, CORE, CLOCK, ++ (_("Selected clock cannot be used in pipeline.")), ++ ("Pipeline cannot operate with selected clock")); ++ GST_DEBUG_OBJECT (pipeline, ++ "Pipeline cannot operate with selected clock %p", clock); ++ if (clock) ++ gst_object_unref (clock); ++ return FALSE; ++ } ++} ++ + /* MT safe */ + static GstStateChangeReturn + gst_pipeline_change_state (GstElement * element, GstStateChange transition) +diff -ruN a/gst/gstpipeline.h b/gst/gstpipeline.h +--- a/gst/gstpipeline.h 2020-08-06 09:59:25.481041707 +0000 ++++ b/gst/gstpipeline.h 2020-08-06 09:58:51.195687907 +0000 +@@ -130,6 +130,15 @@ + GST_API + gboolean gst_pipeline_get_auto_flush_bus (GstPipeline *pipeline); + ++GST_API ++void gst_pipeline_reset_start_time (GstPipeline *pipeline, GstClockTime start_time); ++ ++GST_API ++GstClockTime gst_pipeline_get_base_time (GstPipeline *pipeline, GstClockTime start_time); ++ ++GST_API ++gboolean gst_pipeline_update_base_time (GstPipeline *pipeline, GstClockTime base_time); ++ + #ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC + G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstPipeline, gst_object_unref) + #endif +diff -ruN a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c +--- a/libs/gst/base/gstbasesink.c 2020-08-06 10:18:02.181275530 +0000 ++++ b/libs/gst/base/gstbasesink.c 2020-08-06 10:18:27.906295706 +0000 +@@ -259,6 +259,8 @@ + gsize rc_accumulated; + + gboolean drop_out_of_segment; ++ ++ gboolean reset_stime; + }; + + #define DO_RUNNING_AVG(avg,val,size) (((val) + ((size)-1) * (avg)) / (size)) +@@ -688,6 +690,8 @@ + + priv->drop_out_of_segment = DEFAULT_DROP_OUT_OF_SEGMENT; + ++ priv->reset_stime = FALSE; ++ + GST_OBJECT_FLAG_SET (basesink, GST_ELEMENT_FLAG_SINK); + } + +@@ -2267,6 +2271,8 @@ + GstClock *clock; + GstClockTime base_time; + ++ GstBaseSinkPrivate *priv = gst_base_sink_get_instance_private (sink); ++ + if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (time))) + goto invalid_time; + +@@ -2277,6 +2283,12 @@ + if (G_UNLIKELY ((clock = GST_ELEMENT_CLOCK (sink)) == NULL)) + goto no_clock; + ++ if (priv->reset_stime) { ++ priv->reset_stime = FALSE; ++ GST_DEBUG_OBJECT (sink, "Reset stime to 0 !!"); ++ time = 0; ++ } ++ + base_time = GST_ELEMENT_CAST (sink)->base_time; + GST_LOG_OBJECT (sink, + "time %" GST_TIME_FORMAT ", base_time %" GST_TIME_FORMAT, +@@ -4037,6 +4049,92 @@ + return res; + } + ++static gboolean ++gst_base_sink_prepare_seamless_seek (GstBaseSink * sink, GstSegment * segment, ++ gboolean reset_start_time, gboolean update_base_time, ++ GstClockTime btime, gboolean propagate) ++{ ++ GstBaseSinkClass *bclass; ++ gboolean res = FALSE; ++ GstSegment new_segment; ++ GstClockTime new_base_time; ++ GstElement *top; ++ GstPipeline *pipe; ++ ++ bclass = GST_BASE_SINK_GET_CLASS (sink); ++ ++ GST_DEBUG_OBJECT (sink, "new segment: %" GST_PTR_FORMAT, segment); ++ ++ top = (GstElement *) sink; ++ while (GST_ELEMENT_PARENT (top)) ++ top = GST_ELEMENT_PARENT (top); ++ ++ pipe = (GstPipeline *) top; ++ ++ if (reset_start_time) { ++ GST_DEBUG_OBJECT (sink, "Reset start-time to 0"); ++ gst_pipeline_reset_start_time (pipe, 0); ++ } ++ ++ if (btime != GST_CLOCK_TIME_NONE) ++ new_base_time = btime; ++ else ++#if 1 ++ new_base_time = ++ gst_pipeline_get_base_time (pipe, ++ (reset_start_time ? 0 : GST_CLOCK_TIME_NONE)); ++#endif ++#if 0 ++ new_base_time = GST_ELEMENT_CAST (sink)->base_time; ++#endif ++ GST_DEBUG_OBJECT (sink, "New base-time %" GST_TIME_FORMAT, ++ GST_TIME_ARGS (new_base_time)); ++ ++ memcpy (&new_segment, segment, sizeof (GstSegment)); ++ ++ if (bclass->prepare_seamless_seek) ++ res = bclass->prepare_seamless_seek (sink, &new_segment, new_base_time); ++ ++ GST_DEBUG_OBJECT (sink, "segment configured from %" G_GINT64_FORMAT ++ " to %" G_GINT64_FORMAT ", position %" G_GINT64_FORMAT, ++ new_segment.start, new_segment.stop, new_segment.position); ++ ++ GST_INFO_OBJECT (sink, "seeking done %d: %" GST_SEGMENT_FORMAT, res, ++ &new_segment); ++ ++ gst_segment_copy_into (&new_segment, &sink->segment); ++ ++ sink->have_newsegment = TRUE; ++ gst_base_sink_reset_qos (sink); ++ ++ if (GST_STATE (sink) != GST_STATE_PLAYING) { ++ GstBaseSinkPrivate *priv = gst_base_sink_get_instance_private (sink); ++ GST_DEBUG_OBJECT (sink, "Reset stime to sync between now and base-time !!"); ++ priv->reset_stime = TRUE; ++ } ++ ++ if (sink->segment.flags & GST_SEGMENT_FLAG_SEGMENT) { ++ gst_element_post_message (GST_ELEMENT (sink), ++ gst_message_new_segment_start (GST_OBJECT (sink), ++ sink->segment.format, sink->segment.position)); ++ } ++ ++ sink->priv->discont = TRUE; ++ ++ if (update_base_time) { ++ GST_DEBUG_OBJECT (sink, "Update new base-time"); ++ gst_pipeline_update_base_time ((GstPipeline *) pipe, new_base_time); ++ } ++ ++ if (propagate) { ++ GST_DEBUG_OBJECT (sink, "Propagate new base-time and start-time"); ++ GST_ELEMENT_CAST (sink)->base_time = new_base_time; ++ GST_ELEMENT_CAST (sink)->start_time = 0; ++ } ++ ++ return res; ++} ++ + static void + set_step_info (GstBaseSink * sink, GstStepInfo * current, GstStepInfo * pending, + guint seqnum, GstFormat format, guint64 amount, gdouble rate, +@@ -4603,6 +4701,58 @@ + result = gst_base_sink_perform_step (basesink, pad, event); + forward = FALSE; + break; ++ case GST_EVENT_CUSTOM_UPSTREAM: ++ { ++ if (gst_event_has_name (event, "prepare-seamless-seek")) { ++ const GstStructure *s; ++ const GValue *segment_info; ++ ++ GST_DEBUG_OBJECT (basesink, "Doing NON-FLUSH seek"); ++ forward = FALSE; ++ s = gst_event_get_structure (event); ++ ++ /* Parse new segment and propagate sub-class */ ++ segment_info = gst_structure_get_value (s, "segment-info"); ++ GST_DEBUG_OBJECT (basesink, "segment-info: %p", segment_info); ++ if (segment_info && G_VALUE_TYPE (segment_info) == GST_TYPE_SEGMENT) { ++ gboolean reset_start_time = FALSE; ++ gboolean update_base_time = FALSE; ++ gboolean propagate = FALSE; ++ GstClockTime new_base_time = GST_CLOCK_TIME_NONE; ++ GstSegment *new_segment = NULL; ++ const GValue *reset_value; ++ const GValue *update_value; ++ const GValue *time_value; ++ const GValue *propagate_value; ++ ++ new_segment = (GstSegment *) g_value_dup_boxed (segment_info); ++ GST_DEBUG_OBJECT (basesink, "new_segment: %" GST_PTR_FORMAT, ++ new_segment); ++ ++ reset_value = gst_structure_get_value (s, "reset-start-time"); ++ if (reset_value) ++ reset_start_time = g_value_get_boolean (reset_value); ++ ++ update_value = gst_structure_get_value (s, "update-base-time"); ++ if (update_value) ++ update_base_time = g_value_get_boolean (update_value); ++ ++ time_value = gst_structure_get_value (s, "new-base-time"); ++ if (time_value) ++ new_base_time = (GstClockTime) g_value_get_uint64 (time_value); ++ ++ propagate_value = gst_structure_get_value (s, "propagate"); ++ if (propagate_value) ++ propagate = g_value_get_boolean (propagate_value); ++ ++ result = ++ gst_base_sink_prepare_seamless_seek (basesink, new_segment, ++ reset_start_time, update_base_time, new_base_time, propagate); ++ g_boxed_free (GST_TYPE_SEGMENT, new_segment); ++ } ++ } ++ break; ++ } + default: + break; + } +diff -ruN a/libs/gst/base/gstbasesink.h b/libs/gst/base/gstbasesink.h +--- a/libs/gst/base/gstbasesink.h 2020-08-06 10:18:02.181275530 +0000 ++++ b/libs/gst/base/gstbasesink.h 2020-08-06 10:18:27.906295706 +0000 +@@ -198,6 +198,9 @@ + /* Render a BufferList */ + GstFlowReturn (*render_list) (GstBaseSink *sink, GstBufferList *buffer_list); + ++ /* notify subclass of seamless-seek */ ++ gboolean (*prepare_seamless_seek) (GstBaseSink *sink, GstSegment *segment, GstClockTime new_base_time); ++ + /*< private >*/ + gpointer _gst_reserved[GST_PADDING_LARGE]; + }; diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend index 183444c48..820d32f34 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2018-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webos1" +EXTENDPRAUTO:append = "webos2" # modify tests PACKAGECONFIG to add optional gsl and gmp dependencies # this cannot be merged to oe-core, recipe, because gsl recipe is in @@ -11,3 +11,5 @@ EXTENDPRAUTO:append = "webos1" # ERROR: gstreamer1.0-1.14.2-r0 do_package_qa: QA Issue: gstreamer1.0-ptest rdepends on gsl, but it isn't a build dependency, missing gsl in DEPENDS or PACKAGECONFIG? [build-deps] # ERROR: gstreamer1.0-1.14.2-r0 do_package_qa: QA Issue: gstreamer1.0-ptest rdepends on gmp, but it isn't a build dependency, missing gmp in DEPENDS or PACKAGECONFIG? [build-deps] PACKAGECONFIG[tests] = "-Dtests=enabled -Dinstalled-tests=true,-Dtests=disabled -Dinstalled-tests=false,gsl gmp" +FILESEXTRAPATHS:prepend:qemux86-64 := "${THISDIR}/${BPN}:" +SRC_URI:append:qemux86-64 = "file://0001-Add-support-for-seamless-seek-trickplay.patch" diff --git a/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb b/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb index 5ddc73826..bf8960c80 100644 --- a/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb +++ b/meta-webos/recipes-webos/com.webos.service.mediacontroller/com.webos.service.mediacontroller.bb @@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 luna-service2 json-c pmloglib" -WEBOS_VERSION = "1.0.0-24_363fbf2f0fbb2d0f3dc746e23a62bafb0acfee4d" +WEBOS_VERSION = "1.0.0-25_ec89863c9e53517bf6f76819cf748d0c3057bdec" PR = "r3" inherit webos_component From d6c9cb1f8f1937371bb01de5b79f664b09370b6a Mon Sep 17 00:00:00 2001 From: "seungchul.han" Date: Wed, 27 Jul 2022 18:08:14 +0900 Subject: [PATCH 0490/2022] edgeai-vision=21 :Release Notes: Add aif namespace for AutoDelegationSelector Make Unit Test Coverage over 80% Configure Unit Test Environment for meta-shift test Implement to process multiple requests with thread safety Modify code generator script and templates Add web socket service example Fix typo in full range face detector test case :Detailed Notes: edgeai-vision: submissions/17..submissions/21 596115a Add aif namespace for AutoDelegationSelector 1106a8a Make Unit Test Coverage over 80% 2b285ce Configure Unit Test Environment for meta-shift test (ver.3) 931c081 Implement to process multiple requests with thread safety 878f82e Modify code generator script and templates b26ba14 Add web socket service example 8379774 Fix typo in full range face detector test case dcf4048 Fix missing libs in CMakeLists 925c94b Add c test api with option for tas :Testing Performed: Local test :QA Notes: N/A :Issues Addressed: [WRO-9282] CCC: edgeai-vision=21 [WRO-8646] make coverage over 60% of edgeai vision unit test [WRO-7950] Adjust meta shift unit test environment to new edgeai vision config [WRO-7760] Implement to process multiple requests [WRO-8884] Modify code generator script and templates [WRO-8883] Add web socket service example Change-Id: Ic41a188efa16423d5dbc768c26a2f51dfbc79bfb --- meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb b/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb index 693cc3dbb..56f67114d 100644 --- a/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb +++ b/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=e9325f9b6b90063538bfeda1635999ed \ " -WEBOS_VERSION = "1.0.0-17_d56a9ac8316acccf0f7b3c66a6cc79e307aa8993" +WEBOS_VERSION = "1.0.0-21_ef5bacaac3815fb4574aeba8b18e8dad593c7cdc" WEBOS_REPO_NAME = "edge-ai-computer-vision" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" From 6f6351188d90220f94bdb63acc0827a5328acd8b Mon Sep 17 00:00:00 2001 From: "sankar.panigrahy" Date: Fri, 29 Jul 2022 17:41:16 +0530 Subject: [PATCH 0491/2022] ose: luna-service2=28 :Release Notes: Fix File Descriptor leak while multiple communication with activity manager :Detailed Notes: Fixed Fd Leak issue in proxy call Luna service fixed for File Descriptor leak on the scenario to handle multiple times communication with activity manager luna-service2: submissions/27..submissions/28 e9473aa Fixed Fd Leak for luna-service2 :Testing Performed: Build Successful See WRO-9353 for results :QA Notes: N/A :Issues Addressed: [WRO-9353] CCC: luna-service2=28 [WRO-4809] Fixed Fd Leak for luna-service2 Change-Id: I8168ad192cc96ee223343931d5b536b48e312e3c --- meta-webos/recipes-webos/luna-service2/luna-service2.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/luna-service2/luna-service2.bb b/meta-webos/recipes-webos/luna-service2/luna-service2.bb index ddab8c81d..e9618257c 100644 --- a/meta-webos/recipes-webos/luna-service2/luna-service2.bb +++ b/meta-webos/recipes-webos/luna-service2/luna-service2.bb @@ -15,7 +15,7 @@ VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" VIRTUAL-RUNTIME_bash ?= "bash" RDEPENDS:${PN} = "luna-service2-security-conf ${VIRTUAL-RUNTIME_cpushareholder} ${VIRTUAL-RUNTIME_bash}" -WEBOS_VERSION = "3.21.2-27_0ee0f9692363f615f9e70c251827be79810d4f27" +WEBOS_VERSION = "3.21.2-28_1627734739c6f9ec8446caf7139295f2517a0e13" PR = "r28" EXTRA_OECMAKE += "${@ '-DWEBOS_DISTRO_PRERELEASE:STRING="devel"' \ From fc80166fbbf9dab5016af2ad1796939a5588751d Mon Sep 17 00:00:00 2001 From: "paramesh.kuberappa" Date: Mon, 1 Aug 2022 15:38:40 +0530 Subject: [PATCH 0492/2022] ose: g-media-pipeline=21.gav.33 :Release Notes: Handle Invalid Argument exception thrown from stoll :Detailed Notes: start parameter is parsed and the next string is passed to stoll. If it is not a valid string with a number content, it throws an invalid argument error and program crashes. The exception is caught to avoid the crash g-media-pipeline: submissions/21.gav.32...submissions/21.gav.33 262413b Handle Invalid Argument exception for stoll :Testing Performed: Test results are updated in WRO-9605 :QA Notes: NA :Issues Addressed: [WRO-9605] CCC: g-media-pipeline=21.gav.33 [WRO-9224] [RDX_CRASH][webos] /usr/sbin/g-media-pipeline in raise Change-Id: I383a4c85850699e49ebf2185ffc334bd0771d5f1 --- .../recipes-multimedia/g-media-pipeline/g-media-pipeline.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb index d9b322d79..42c75afda 100644 --- a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb +++ b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb @@ -34,7 +34,7 @@ DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad DEPENDS:append:rpi = " virtual/libomxil" WEBOS_GIT_PARAM_BRANCH = "@gav" -WEBOS_VERSION = "1.0.0-21.gav.32_5bfbec56a19fc9e14101ed3b735278fd6679561d" +WEBOS_VERSION = "1.0.0-21.gav.33_8832c9ee3cff5fde663b2d3f763ce4dfcc0d687d" # raspberrypi3 uses @21.master branch DEPENDS:remove:raspberrypi3 = "webos-wayland-extensions" From e296e599c920e43a495a9b1e7aa4dcb428ee049a Mon Sep 17 00:00:00 2001 From: "manjuraehmad.momin" Date: Wed, 3 Aug 2022 13:59:13 +0530 Subject: [PATCH 0493/2022] ose: com.webos.service.peripheralmanager=11 :Release Notes: Add i2c/getPollingFd API in peripheralmanager.i2c.operation ACG group :Detailed Notes: com.webos.service.peripheralmanager: submissions/10..submissions/11 04a9b65 Add ACG for i2c/getPollingFd API :Testing Performed: Test results are updated in WRO-9812 :QA Notes: NA :Issues Addressed: [WRO-9812] CCC: com.webos.service.peripheralmanager=11 [WRO-9805] Prepare CCC ticket for peripheralmanager ACG changes Change-Id: Ia4bd2eeb907418fc61cf45cc26d1f04b79a87e35 --- .../com.webos.service.peripheralmanager.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb b/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb index 1805c4e59..421d9f214 100644 --- a/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb +++ b/meta-webos/recipes-webos/com.webos.service.peripheralmanager/com.webos.service.peripheralmanager.bb @@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 libpbnjson luna-service2 pmloglib " -WEBOS_VERSION = "1.0.0-10_a43754015d56190ec36d183295f972080d1ebd90" +WEBOS_VERSION = "1.0.0-11_4b01e03fa505c1978e28014d04905855fd84f2f0" PR = "r2" inherit webos_component From 33022904fd42b64ca8aef900684ea66b9af22420 Mon Sep 17 00:00:00 2001 From: Muniraju Date: Fri, 5 Aug 2022 14:41:04 +0530 Subject: [PATCH 0494/2022] ose: Add com.webos.app.videocall=1-r0,v0.0.1 :Release Notes: Video Call basic feature :Detailed Notes: com.webos.app.videocall: ..submissions/1 630234f Video call basic feature 78b305a Initial empty repository :Testing Performed: Refer [WRO-9874] for test results :QA Notes: NA :Issues Addressed: [WRO-9874] CCC: ose: Add com.webos.app.videocall=1-r0,v0.0.1 Change-Id: Icfc2d705ed6f4e09ce859ddf11b9fce879b30ffa --- .../packagegroup-webos-extended.bb | 1 + .../com.webos.app.videocall.bb | 25 +++++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100644 meta-webos/recipes-webos/com.webos.app.videocall/com.webos.app.videocall.bb diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index 451c860d6..be471db98 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -234,6 +234,7 @@ RDEPENDS:${PN}:append:webos = " \ com.webos.app.camera \ com.webos.app.mediaviewer \ com.webos.app.imageviewer \ + com.webos.app.videocall \ com.webos.app.videoplayer \ com.webos.service.storageaccess \ com.webos.service.uwb \ diff --git a/meta-webos/recipes-webos/com.webos.app.videocall/com.webos.app.videocall.bb b/meta-webos/recipes-webos/com.webos.app.videocall/com.webos.app.videocall.bb new file mode 100644 index 000000000..3a105574c --- /dev/null +++ b/meta-webos/recipes-webos/com.webos.app.videocall/com.webos.app.videocall.bb @@ -0,0 +1,25 @@ +# Copyright (c) 2022 LG Electronics, Inc. + +SUMMARY = "Video Call Application" +AUTHOR = "Ganesh Bhat" +SECTION = "webos/apps" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = " \ + file://LICENSE;md5=86d3f3a95c324c9479bd8986968f4327 \ + file://oss-pkg-info.yaml;md5=0ec407cd2d4a192e0c60888f4ec66dd7 \ +" + +WEBOS_VERSION = "0.0.1-1_5fec96c9a256986a7f4d4a36a704cdc767d0f673" +PR = "r0" + + +inherit webos_enhanced_submissions +inherit webos_enactjs_app +inherit webos_public_repo +inherit webos_localizable + + +SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" +S = "${WORKDIR}/git" + +WEBOS_ENACTJS_APP_ID = "com.webos.app.videocall" From 73c6491d213c1fbde6ea9d0b4b4e4c4e0c978985 Mon Sep 17 00:00:00 2001 From: "yogish.s" Date: Fri, 22 Jul 2022 10:20:22 +0530 Subject: [PATCH 0495/2022] webos_app_generate_security_files.bbclass: Add BPN instead of PN :Release Notes: Fix not to prefix "lib32" to path name in role file :Detailed Notes: Role files are generated automatically for native apps In this case, the path to add exeName in role file was getting prepended with lib32, this fix will remove lib32 prepended :Testing Performed: Only build tested and verified in build that role files are generated for native apps. :QA Notes: NA :Issues Addressed: [WRO-9016] CCC: webos_app_generate_security_files.bbclass: Add BPN instead of PN [WRO-8847] Wrong exeName is generated Change-Id: I9e782ac1a12c9b2f269668b04f07ac7f208e3fe3 --- meta-webos/classes/webos_app_generate_security_files.bbclass | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/classes/webos_app_generate_security_files.bbclass b/meta-webos/classes/webos_app_generate_security_files.bbclass index 56ea89e2f..936dd4d19 100644 --- a/meta-webos/classes/webos_app_generate_security_files.bbclass +++ b/meta-webos/classes/webos_app_generate_security_files.bbclass @@ -92,7 +92,7 @@ def webos_app_generate_security_files_write_role_file(d, app_info): if type == "native": exe_name = app_info["main"] app_dir = d.getVar("webos_applicationsdir", True) - role["exeName"] = app_dir + "/" + d.getVar("PN", True) + "/" + exe_name + role["exeName"] = app_dir + "/" + d.getVar("BPN", True) + "/" + exe_name role["type"] = "regular" role["allowedNames"] = [app_id + "*"] role["permissions"] = [{"service": app_id, "outbound": ["*"] }] From 6ca7bb4576d34522637e71ff122fc4afcb2cb59a Mon Sep 17 00:00:00 2001 From: Kyungjik Min Date: Tue, 14 Jun 2022 13:25:34 +0900 Subject: [PATCH 0496/2022] mpeg2dec=webos1 (Remove executable flag in stack) :Release Notes: :Detailed Notes: :Testing Performed: :QA Notes: N/A :Issues Addressed: [WRO-9071] CCC: Various build fixes Change-Id: Ib5b8b75085fa30752eadc5098858cd147a5bebba --- meta-webos/recipes-multimedia/mpeg2dec/mpeg2dec_%.bbappend | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 meta-webos/recipes-multimedia/mpeg2dec/mpeg2dec_%.bbappend diff --git a/meta-webos/recipes-multimedia/mpeg2dec/mpeg2dec_%.bbappend b/meta-webos/recipes-multimedia/mpeg2dec/mpeg2dec_%.bbappend new file mode 100644 index 000000000..4a8ee2e55 --- /dev/null +++ b/meta-webos/recipes-multimedia/mpeg2dec/mpeg2dec_%.bbappend @@ -0,0 +1,6 @@ +# Copyright (c) 2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +# Remove an executable flag in GNU_STACK +CFLAGS += "-Wa,--noexecstack" From c1f039218551af8dbcdbdacc9b70345dd1877856 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 25 Jan 2021 14:25:45 -0800 Subject: [PATCH 0497/2022] gstreamer1.0-plugins-bad=webos4 gstreamer1.0=webos3webosrpi4: update qemux86-64 patches :Release Notes: Use the same 0001-Add-support-for-seamless-seek-trickplay.patch file for rpi in meta-webos-raspberrypi and qemux86-64 in meta-webos. Add missing space in gstreamer1.0_1.16.%.bbappend append. Add git headers in patches. Add Upstream-Status in backported patch. Remove long unused patch 0002-render-into-wl_surface-without-sub-surface.patch which was commented out in 2020 during upgrade to 1.16 and never rebased and re-introduced in SRC_URI. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott [WRO-9071] CCC: Various build fixes Change-Id: I329c52f67af33d0a9897bf295fe10f4040f05f93 --- ...-support-for-seamless-seek-trickplay.patch | 397 ------------------ .../gstreamer/gstreamer1.0_1.16.%.bbappend | 5 +- ...tch => 0001-set-initial-window-size.patch} | 17 +- ...atch => 0002-add-video-info-message.patch} | 25 +- ...-into-wl_surface-without-sub-surface.patch | 218 ---------- ...able-using-subsurface-subcompositor.patch} | 78 ++-- ...anagerbad-add-RTP-streaming-elements.patch | 51 ++- .../gstreamer1.0-plugins-bad_1.16.%.bbappend | 12 +- .../gstreamer/gstreamer1.0_1.16.%.bbappend | 7 +- 9 files changed, 115 insertions(+), 695 deletions(-) delete mode 100644 meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0/0001-Add-support-for-seamless-seek-trickplay.patch rename meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/{0001_set_initial_window_size.patch => 0001-set-initial-window-size.patch} (52%) rename meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/{0002_add_video_info_message.patch => 0002-add-video-info-message.patch} (73%) delete mode 100644 meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-render-into-wl_surface-without-sub-surface.patch rename meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/{0003_disable_using_subsurface_subcompositor.patch => 0003-disable-using-subsurface-subcompositor.patch} (78%) diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0/0001-Add-support-for-seamless-seek-trickplay.patch b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0/0001-Add-support-for-seamless-seek-trickplay.patch deleted file mode 100644 index 3b096314e..000000000 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0/0001-Add-support-for-seamless-seek-trickplay.patch +++ /dev/null @@ -1,397 +0,0 @@ -diff -ruN a/gst/gstpipeline.c b/gst/gstpipeline.c ---- a/gst/gstpipeline.c 2020-08-06 09:59:25.481041707 +0000 -+++ b/gst/gstpipeline.c 2020-08-06 09:58:51.195687907 +0000 -@@ -308,6 +308,13 @@ - GST_OBJECT_UNLOCK (pipeline); - } - -+void -+gst_pipeline_reset_start_time (GstPipeline * pipeline, GstClockTime start_time) -+{ -+ GST_DEBUG_OBJECT (pipeline, "Reset start_time to 0"); -+ reset_start_time (pipeline, start_time); -+} -+ - /** - * gst_pipeline_new: - * @name: (allow-none): name of new pipeline -@@ -368,6 +375,152 @@ - GST_OBJECT_UNLOCK (element); - } - -+GstClockTime -+gst_pipeline_get_base_time (GstPipeline * pipeline, GstClockTime stime) -+{ -+ GstElement *element = GST_ELEMENT_CAST (pipeline); -+ GstClock *clock; -+ GstClockTime now, start_time, delay; -+ GstClock *cur_clock; -+ GstClockTime new_base_time = GST_CLOCK_TIME_NONE; -+ -+ GST_DEBUG_OBJECT (element, "Obtaining new base_time"); -+ -+ GST_OBJECT_LOCK (element); -+ cur_clock = element->clock; -+ if (cur_clock) -+ gst_object_ref (cur_clock); -+ /* get the desired running_time of the first buffer aka the start_time */ -+ if (stime == GST_CLOCK_TIME_NONE) -+ start_time = GST_ELEMENT_START_TIME (pipeline); -+ else -+ start_time = stime; -+ -+ /* see if we need to update the clock */ -+ delay = pipeline->delay; -+ GST_OBJECT_UNLOCK (element); -+ -+ if (cur_clock) -+ gst_object_ref (cur_clock); -+ clock = cur_clock; -+ -+ if (clock) { -+ now = gst_clock_get_time (clock); -+ } else { -+ GST_DEBUG_OBJECT (pipeline, "no clock, using base time of NONE"); -+ now = GST_CLOCK_TIME_NONE; -+ } -+ -+ if (clock) -+ gst_object_unref (clock); -+ -+ if (start_time != GST_CLOCK_TIME_NONE && now != GST_CLOCK_TIME_NONE) { -+ new_base_time = now - start_time + delay; -+ GST_DEBUG_OBJECT (element, -+ "start_time=%" GST_TIME_FORMAT ", now=%" GST_TIME_FORMAT -+ ", base_time %" GST_TIME_FORMAT, -+ GST_TIME_ARGS (start_time), GST_TIME_ARGS (now), -+ GST_TIME_ARGS (new_base_time)); -+ -+ } else { -+ GST_DEBUG_OBJECT (pipeline, -+ "NOT obtaining base_time because start_time is NONE"); -+ } -+ -+ if (cur_clock) -+ gst_object_unref (cur_clock); -+ -+ return new_base_time; -+} -+ -+gboolean -+gst_pipeline_update_base_time (GstPipeline * pipeline, GstClockTime btime) -+{ -+ GstElement *element = GST_ELEMENT_CAST (pipeline); -+ GstClock *clock; -+ GstClockTime now, start_time, delay; -+ GstClock *cur_clock; -+ -+ GST_DEBUG_OBJECT (element, "selecting clock and base_time %" GST_TIME_FORMAT, -+ GST_TIME_ARGS (btime)); -+ -+ GST_OBJECT_LOCK (element); -+ cur_clock = element->clock; -+ if (cur_clock) -+ gst_object_ref (cur_clock); -+ /* get the desired running_time of the first buffer aka the start_time */ -+ start_time = GST_ELEMENT_START_TIME (pipeline); -+ pipeline->priv->last_start_time = start_time; -+ delay = pipeline->delay; -+ GST_OBJECT_UNLOCK (element); -+ -+ GST_DEBUG_OBJECT (element, "start_time: %" GST_TIME_FORMAT, -+ GST_TIME_ARGS (start_time)); -+ -+ GST_DEBUG_OBJECT (pipeline, "Don't need to update clock, using old clock."); -+ /* only try to ref if cur_clock is not NULL */ -+ if (cur_clock) -+ gst_object_ref (cur_clock); -+ clock = cur_clock; -+ -+ if (clock) { -+ now = gst_clock_get_time (clock); -+ } else { -+ GST_DEBUG_OBJECT (pipeline, "no clock, using base time of NONE"); -+ now = GST_CLOCK_TIME_NONE; -+ } -+ -+ if (clock != cur_clock) { -+ /* now distribute the clock (which could be NULL). If some -+ * element refuses the clock, this will return FALSE and -+ * we effectively fail the state change. */ -+ if (!gst_element_set_clock (element, clock)) -+ goto invalid_clock; -+ -+ /* if we selected and distributed a new clock, let the app -+ * know about it */ -+ gst_element_post_message (element, -+ gst_message_new_new_clock (GST_OBJECT_CAST (element), clock)); -+ } -+ -+ if (clock) -+ gst_object_unref (clock); -+ -+ if (start_time != GST_CLOCK_TIME_NONE && now != GST_CLOCK_TIME_NONE) { -+ GstClockTime new_base_time = -+ (btime != GST_CLOCK_TIME_NONE) ? btime : (now - start_time + delay); -+ GST_DEBUG_OBJECT (element, -+ "start_time=%" GST_TIME_FORMAT ", now=%" GST_TIME_FORMAT -+ ", base_time %" GST_TIME_FORMAT, GST_TIME_ARGS (start_time), -+ GST_TIME_ARGS (now), GST_TIME_ARGS (new_base_time)); -+ -+ gst_element_set_base_time (element, new_base_time); -+ } else { -+ GST_DEBUG_OBJECT (pipeline, -+ "NOT adjusting base_time because start_time is NONE"); -+ } -+ -+ if (cur_clock) -+ gst_object_unref (cur_clock); -+ -+ return TRUE; -+ -+ /* ERRORS */ -+invalid_clock: -+ { -+ /* we generate this error when the selected clock was not -+ * accepted by some element */ -+ GST_ELEMENT_ERROR (pipeline, CORE, CLOCK, -+ (_("Selected clock cannot be used in pipeline.")), -+ ("Pipeline cannot operate with selected clock")); -+ GST_DEBUG_OBJECT (pipeline, -+ "Pipeline cannot operate with selected clock %p", clock); -+ if (clock) -+ gst_object_unref (clock); -+ return FALSE; -+ } -+} -+ - /* MT safe */ - static GstStateChangeReturn - gst_pipeline_change_state (GstElement * element, GstStateChange transition) -diff -ruN a/gst/gstpipeline.h b/gst/gstpipeline.h ---- a/gst/gstpipeline.h 2020-08-06 09:59:25.481041707 +0000 -+++ b/gst/gstpipeline.h 2020-08-06 09:58:51.195687907 +0000 -@@ -130,6 +130,15 @@ - GST_API - gboolean gst_pipeline_get_auto_flush_bus (GstPipeline *pipeline); - -+GST_API -+void gst_pipeline_reset_start_time (GstPipeline *pipeline, GstClockTime start_time); -+ -+GST_API -+GstClockTime gst_pipeline_get_base_time (GstPipeline *pipeline, GstClockTime start_time); -+ -+GST_API -+gboolean gst_pipeline_update_base_time (GstPipeline *pipeline, GstClockTime base_time); -+ - #ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC - G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstPipeline, gst_object_unref) - #endif -diff -ruN a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c ---- a/libs/gst/base/gstbasesink.c 2020-08-06 10:18:02.181275530 +0000 -+++ b/libs/gst/base/gstbasesink.c 2020-08-06 10:18:27.906295706 +0000 -@@ -259,6 +259,8 @@ - gsize rc_accumulated; - - gboolean drop_out_of_segment; -+ -+ gboolean reset_stime; - }; - - #define DO_RUNNING_AVG(avg,val,size) (((val) + ((size)-1) * (avg)) / (size)) -@@ -688,6 +690,8 @@ - - priv->drop_out_of_segment = DEFAULT_DROP_OUT_OF_SEGMENT; - -+ priv->reset_stime = FALSE; -+ - GST_OBJECT_FLAG_SET (basesink, GST_ELEMENT_FLAG_SINK); - } - -@@ -2267,6 +2271,8 @@ - GstClock *clock; - GstClockTime base_time; - -+ GstBaseSinkPrivate *priv = gst_base_sink_get_instance_private (sink); -+ - if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (time))) - goto invalid_time; - -@@ -2277,6 +2283,12 @@ - if (G_UNLIKELY ((clock = GST_ELEMENT_CLOCK (sink)) == NULL)) - goto no_clock; - -+ if (priv->reset_stime) { -+ priv->reset_stime = FALSE; -+ GST_DEBUG_OBJECT (sink, "Reset stime to 0 !!"); -+ time = 0; -+ } -+ - base_time = GST_ELEMENT_CAST (sink)->base_time; - GST_LOG_OBJECT (sink, - "time %" GST_TIME_FORMAT ", base_time %" GST_TIME_FORMAT, -@@ -4037,6 +4049,92 @@ - return res; - } - -+static gboolean -+gst_base_sink_prepare_seamless_seek (GstBaseSink * sink, GstSegment * segment, -+ gboolean reset_start_time, gboolean update_base_time, -+ GstClockTime btime, gboolean propagate) -+{ -+ GstBaseSinkClass *bclass; -+ gboolean res = FALSE; -+ GstSegment new_segment; -+ GstClockTime new_base_time; -+ GstElement *top; -+ GstPipeline *pipe; -+ -+ bclass = GST_BASE_SINK_GET_CLASS (sink); -+ -+ GST_DEBUG_OBJECT (sink, "new segment: %" GST_PTR_FORMAT, segment); -+ -+ top = (GstElement *) sink; -+ while (GST_ELEMENT_PARENT (top)) -+ top = GST_ELEMENT_PARENT (top); -+ -+ pipe = (GstPipeline *) top; -+ -+ if (reset_start_time) { -+ GST_DEBUG_OBJECT (sink, "Reset start-time to 0"); -+ gst_pipeline_reset_start_time (pipe, 0); -+ } -+ -+ if (btime != GST_CLOCK_TIME_NONE) -+ new_base_time = btime; -+ else -+#if 1 -+ new_base_time = -+ gst_pipeline_get_base_time (pipe, -+ (reset_start_time ? 0 : GST_CLOCK_TIME_NONE)); -+#endif -+#if 0 -+ new_base_time = GST_ELEMENT_CAST (sink)->base_time; -+#endif -+ GST_DEBUG_OBJECT (sink, "New base-time %" GST_TIME_FORMAT, -+ GST_TIME_ARGS (new_base_time)); -+ -+ memcpy (&new_segment, segment, sizeof (GstSegment)); -+ -+ if (bclass->prepare_seamless_seek) -+ res = bclass->prepare_seamless_seek (sink, &new_segment, new_base_time); -+ -+ GST_DEBUG_OBJECT (sink, "segment configured from %" G_GINT64_FORMAT -+ " to %" G_GINT64_FORMAT ", position %" G_GINT64_FORMAT, -+ new_segment.start, new_segment.stop, new_segment.position); -+ -+ GST_INFO_OBJECT (sink, "seeking done %d: %" GST_SEGMENT_FORMAT, res, -+ &new_segment); -+ -+ gst_segment_copy_into (&new_segment, &sink->segment); -+ -+ sink->have_newsegment = TRUE; -+ gst_base_sink_reset_qos (sink); -+ -+ if (GST_STATE (sink) != GST_STATE_PLAYING) { -+ GstBaseSinkPrivate *priv = gst_base_sink_get_instance_private (sink); -+ GST_DEBUG_OBJECT (sink, "Reset stime to sync between now and base-time !!"); -+ priv->reset_stime = TRUE; -+ } -+ -+ if (sink->segment.flags & GST_SEGMENT_FLAG_SEGMENT) { -+ gst_element_post_message (GST_ELEMENT (sink), -+ gst_message_new_segment_start (GST_OBJECT (sink), -+ sink->segment.format, sink->segment.position)); -+ } -+ -+ sink->priv->discont = TRUE; -+ -+ if (update_base_time) { -+ GST_DEBUG_OBJECT (sink, "Update new base-time"); -+ gst_pipeline_update_base_time ((GstPipeline *) pipe, new_base_time); -+ } -+ -+ if (propagate) { -+ GST_DEBUG_OBJECT (sink, "Propagate new base-time and start-time"); -+ GST_ELEMENT_CAST (sink)->base_time = new_base_time; -+ GST_ELEMENT_CAST (sink)->start_time = 0; -+ } -+ -+ return res; -+} -+ - static void - set_step_info (GstBaseSink * sink, GstStepInfo * current, GstStepInfo * pending, - guint seqnum, GstFormat format, guint64 amount, gdouble rate, -@@ -4603,6 +4701,58 @@ - result = gst_base_sink_perform_step (basesink, pad, event); - forward = FALSE; - break; -+ case GST_EVENT_CUSTOM_UPSTREAM: -+ { -+ if (gst_event_has_name (event, "prepare-seamless-seek")) { -+ const GstStructure *s; -+ const GValue *segment_info; -+ -+ GST_DEBUG_OBJECT (basesink, "Doing NON-FLUSH seek"); -+ forward = FALSE; -+ s = gst_event_get_structure (event); -+ -+ /* Parse new segment and propagate sub-class */ -+ segment_info = gst_structure_get_value (s, "segment-info"); -+ GST_DEBUG_OBJECT (basesink, "segment-info: %p", segment_info); -+ if (segment_info && G_VALUE_TYPE (segment_info) == GST_TYPE_SEGMENT) { -+ gboolean reset_start_time = FALSE; -+ gboolean update_base_time = FALSE; -+ gboolean propagate = FALSE; -+ GstClockTime new_base_time = GST_CLOCK_TIME_NONE; -+ GstSegment *new_segment = NULL; -+ const GValue *reset_value; -+ const GValue *update_value; -+ const GValue *time_value; -+ const GValue *propagate_value; -+ -+ new_segment = (GstSegment *) g_value_dup_boxed (segment_info); -+ GST_DEBUG_OBJECT (basesink, "new_segment: %" GST_PTR_FORMAT, -+ new_segment); -+ -+ reset_value = gst_structure_get_value (s, "reset-start-time"); -+ if (reset_value) -+ reset_start_time = g_value_get_boolean (reset_value); -+ -+ update_value = gst_structure_get_value (s, "update-base-time"); -+ if (update_value) -+ update_base_time = g_value_get_boolean (update_value); -+ -+ time_value = gst_structure_get_value (s, "new-base-time"); -+ if (time_value) -+ new_base_time = (GstClockTime) g_value_get_uint64 (time_value); -+ -+ propagate_value = gst_structure_get_value (s, "propagate"); -+ if (propagate_value) -+ propagate = g_value_get_boolean (propagate_value); -+ -+ result = -+ gst_base_sink_prepare_seamless_seek (basesink, new_segment, -+ reset_start_time, update_base_time, new_base_time, propagate); -+ g_boxed_free (GST_TYPE_SEGMENT, new_segment); -+ } -+ } -+ break; -+ } - default: - break; - } -diff -ruN a/libs/gst/base/gstbasesink.h b/libs/gst/base/gstbasesink.h ---- a/libs/gst/base/gstbasesink.h 2020-08-06 10:18:02.181275530 +0000 -+++ b/libs/gst/base/gstbasesink.h 2020-08-06 10:18:27.906295706 +0000 -@@ -198,6 +198,9 @@ - /* Render a BufferList */ - GstFlowReturn (*render_list) (GstBaseSink *sink, GstBufferList *buffer_list); - -+ /* notify subclass of seamless-seek */ -+ gboolean (*prepare_seamless_seek) (GstBaseSink *sink, GstSegment *segment, GstClockTime new_base_time); -+ - /*< private >*/ - gpointer _gst_reserved[GST_PADDING_LARGE]; - }; diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend index f4b4f59c0..ebf25c338 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend @@ -2,12 +2,13 @@ require gstreamer1.0-webos-common.inc -EXTENDPRAUTO:append:rpi = "webosrpi3" +EXTENDPRAUTO:append:rpi = "webosrpi4" WEBOS_REPO_NAME:rpi = "gstreamer" -FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend:rpi := "${THISDIR}/${BPN}:" +# 0001-Add-support-for-seamless-seek-trickplay.patch is from meta-webos layer SRC_URI:append:rpi = " \ file://0001-Add-support-for-seamless-seek-trickplay.patch \ file://0001-elementfactory-add-GST-ELEMENT-FACTORY-TYPE-HARDWARE.patch \ diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001_set_initial_window_size.patch b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-set-initial-window-size.patch similarity index 52% rename from meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001_set_initial_window_size.patch rename to meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-set-initial-window-size.patch index acb2ff84b..5eeade370 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001_set_initial_window_size.patch +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-set-initial-window-size.patch @@ -1,6 +1,17 @@ ---- a/ext/wayland/gstwaylandsink.c 2019-04-19 18:16:36.000000000 +0900 -+++ b/ext/wayland/gstwaylandsink.c 2020-12-04 22:16:24.000000000 +0900 -@@ -700,6 +700,14 @@ +From 7e589526f4013e0a2d5039e7f32c120a567c1cac Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Mon, 25 Jan 2021 14:17:07 -0800 +Subject: [PATCH] set initial window size + +--- + ext/wayland/gstwaylandsink.c | 8 ++++++++ + 1 file changed, 8 insertions(+) + +diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c +index 78dd294a0..f10582a46 100644 +--- a/ext/wayland/gstwaylandsink.c ++++ b/ext/wayland/gstwaylandsink.c +@@ -700,6 +700,14 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer) &sink->video_info, sink->fullscreen, &sink->render_lock); g_signal_connect_object (sink->window, "closed", G_CALLBACK (on_window_closed), sink, 0); diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002_add_video_info_message.patch b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-add-video-info-message.patch similarity index 73% rename from meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002_add_video_info_message.patch rename to meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-add-video-info-message.patch index e2dee9f64..f6cf0d69f 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002_add_video_info_message.patch +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-add-video-info-message.patch @@ -1,9 +1,21 @@ ---- a/ext/wayland/gstwaylandsink.c 2019-04-19 18:16:36.000000000 +0900 -+++ b/ext/wayland/gstwaylandsink.c 2020-12-07 22:34:22.000000000 +0900 -@@ -541,6 +541,34 @@ +From a12b2fa0d9c7b2a654a3225b146d4eed8b99ae9a Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Mon, 25 Jan 2021 14:17:35 -0800 +Subject: [PATCH] add video info message + +--- + ext/wayland/gstwaylandsink.c | 33 +++++++++++++++++++++++++++++++++ + 1 file changed, 33 insertions(+) + +diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c +index f10582a46..4caf0d32c 100644 +--- a/ext/wayland/gstwaylandsink.c ++++ b/ext/wayland/gstwaylandsink.c +@@ -540,6 +540,34 @@ gst_wayland_create_pool (GstWaylandSink * sink, GstCaps * caps) + return pool; } - static gboolean ++static gboolean +gst_wayland_sink_post_video_info_message (GstWaylandSink * sink) +{ + g_return_val_if_fail (sink != NULL, FALSE); @@ -31,11 +43,10 @@ + return ret; +} + -+static gboolean + static gboolean gst_wayland_sink_set_caps (GstBaseSink * bsink, GstCaps * caps) { - GstWaylandSink *sink; -@@ -558,6 +586,11 @@ +@@ -558,6 +586,11 @@ gst_wayland_sink_set_caps (GstBaseSink * bsink, GstCaps * caps) format = GST_VIDEO_INFO_FORMAT (&sink->video_info); sink->video_info_changed = TRUE; diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-render-into-wl_surface-without-sub-surface.patch b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-render-into-wl_surface-without-sub-surface.patch deleted file mode 100644 index 52d2f806c..000000000 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-render-into-wl_surface-without-sub-surface.patch +++ /dev/null @@ -1,218 +0,0 @@ -Subject: [PATCH] Render into wl_surface without sub surface - -:Release Notes: -Render into wl_surface without sub surface in waylandsink - -:Detailed Notes: -Inqemux86 environment there is wl_subcompositor and hence sub -surface is not available. As a result waylandsink is no able to -render in qemux86 environment. This patch set changes to render -into wl_surface when sub surface is not available. - -This patch set is dervied from Nakyeon's first patch for -waylandsink in unified video compositor branch -Original Author: Nakyeon Choi - -:Testing Performed: -Used gst-launch to test these changes as below -gst-launch-1.0 videotestsrc pattern=ball ! waylandsink - -:Issues Addressed: -[PLAT-76201] Fix rendering issues in waylandsink for sub surface - in qemux86 - -Upstream-Status: Inappropriate - - Only WebOS's qemux86 environment should use these changes - -diff -ruN a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c ---- a/ext/wayland/gstwaylandsink.c 2019-03-25 12:03:33.989756714 +0530 -+++ b/ext/wayland/gstwaylandsink.c 2019-03-25 12:05:02.427927233 +0530 -@@ -209,6 +209,9 @@ - { - g_mutex_init (&sink->display_lock); - g_mutex_init (&sink->render_lock); -+ -+ sink->old_time = 0; -+ sink->frame_cnt_in_sec = 0; - } - - static void -@@ -649,6 +652,15 @@ - - GST_LOG_OBJECT (sink, "render buffer %p", buffer); - -+ gint64 cur_time = 0; -+ sink->frame_cnt_in_sec++; -+ cur_time = g_get_monotonic_time(); -+ if (GST_TIME_AS_MSECONDS(cur_time) != GST_TIME_AS_MSECONDS(sink->old_time)) { -+ GST_INFO_OBJECT (sink, "fps: %d", sink->frame_cnt_in_sec); -+ sink->frame_cnt_in_sec = 0; -+ } -+ sink->old_time = cur_time; -+ - if (G_UNLIKELY (!sink->window)) { - /* ask for window handle. Unlock render_lock while doing that because - * set_window_handle & friends will lock it in this context */ -@@ -664,6 +676,7 @@ - } - - /* drop buffers until we get a frame callback */ -+ sink->redraw_pending = FALSE; // TODO:modify - if (sink->redraw_pending) { - GST_LOG_OBJECT (sink, "buffer %p dropped (redraw pending)", buffer); - goto done; -diff -ruN a/ext/wayland/gstwaylandsink.h b/ext/wayland/gstwaylandsink.h ---- a/ext/wayland/gstwaylandsink.h 2019-03-25 12:03:33.989756714 +0530 -+++ b/ext/wayland/gstwaylandsink.h 2019-03-25 12:05:08.532078944 +0530 -@@ -66,6 +66,9 @@ - gboolean redraw_pending; - GMutex render_lock; - GstBuffer *last_buffer; -+ -+ gint64 old_time; -+ gint frame_cnt_in_sec; - }; - - struct _GstWaylandSinkClass -diff -ruN a/ext/wayland/wldisplay.c b/ext/wayland/wldisplay.c ---- a/ext/wayland/wldisplay.c 2019-03-25 12:03:33.989756714 +0530 -+++ b/ext/wayland/wldisplay.c 2019-03-25 12:05:14.184219624 +0530 -@@ -335,7 +335,8 @@ - } - - VERIFY_INTERFACE_EXISTS (compositor, "wl_compositor"); -- VERIFY_INTERFACE_EXISTS (subcompositor, "wl_subcompositor"); -+ if (self->subcompositor) -+ VERIFY_INTERFACE_EXISTS (subcompositor, "wl_subcompositor"); - VERIFY_INTERFACE_EXISTS (shell, "wl_shell"); - VERIFY_INTERFACE_EXISTS (shm, "wl_shm"); - -diff -ruN a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c ---- a/ext/wayland/wlwindow.c 2019-03-25 12:03:33.989756714 +0530 -+++ b/ext/wayland/wlwindow.c 2019-03-25 12:05:26.396524245 +0530 -@@ -92,7 +92,8 @@ - if (self->video_viewport) - wp_viewport_destroy (self->video_viewport); - -- wl_subsurface_destroy (self->video_subsurface); -+ if (self->video_subsurface) -+ wl_subsurface_destroy (self->video_subsurface); - wl_surface_destroy (self->video_surface); - - if (self->area_subsurface) -@@ -126,10 +127,12 @@ - display->queue); - - /* embed video_surface in area_surface */ -- window->video_subsurface = -- wl_subcompositor_get_subsurface (display->subcompositor, -- window->video_surface, window->area_surface); -- wl_subsurface_set_desync (window->video_subsurface); -+ if (display->subcompositor) -+ window->video_subsurface = -+ wl_subcompositor_get_subsurface (display->subcompositor, -+ window->video_surface, window->area_surface); -+ if (window->video_subsurface) -+ wl_subsurface_set_desync (window->video_subsurface); - - if (display->viewporter) { - window->area_viewport = wp_viewporter_get_viewport (display->viewporter, -@@ -190,10 +193,12 @@ - window = gst_wl_window_new_internal (display, render_lock); - - /* embed in parent */ -- window->area_subsurface = -- wl_subcompositor_get_subsurface (display->subcompositor, -- window->area_surface, parent); -- wl_subsurface_set_desync (window->area_subsurface); -+ if (display->subcompositor) -+ window->area_subsurface = -+ wl_subcompositor_get_subsurface (display->subcompositor, -+ window->area_surface, parent); -+ if (window->area_subsurface) -+ wl_subsurface_set_desync (window->area_subsurface); - - return window; - } -@@ -242,11 +247,17 @@ - gst_video_sink_center_rect (src, dst, &res, FALSE); - } - -- wl_subsurface_set_position (window->video_subsurface, res.x, res.y); -+ if (window->video_subsurface) -+ wl_subsurface_set_position (window->video_subsurface, res.x, res.y); - - if (commit) { -+ g_warning ("gst_wl_window_resize_video_surface commit & damage"); - wl_surface_damage (window->video_surface, 0, 0, res.w, res.h); - wl_surface_commit (window->video_surface); -+ } else { -+ wl_surface_damage (window->video_surface, -+ 0, 0, window->video_width, window->video_height); -+ wl_surface_commit (window->video_surface); - } - - if (gst_wl_window_is_toplevel (window)) { -@@ -294,19 +305,20 @@ - gst_util_uint64_scale_int_round (info->width, info->par_n, info->par_d); - window->video_height = info->height; - -- wl_subsurface_set_sync (window->video_subsurface); -+ if (window->video_subsurface) -+ wl_subsurface_set_sync (window->video_subsurface); - gst_wl_window_resize_video_surface (window, FALSE); - gst_wl_window_set_opaque (window, info); - } - - if (G_LIKELY (buffer)) -- gst_wl_buffer_attach (buffer, window->video_surface); -+ gst_wl_buffer_attach (buffer, window->area_surface); - else -- wl_surface_attach (window->video_surface, NULL, 0, 0); -+ wl_surface_attach (window->area_surface, NULL, 0, 0); - -- wl_surface_damage (window->video_surface, 0, 0, window->video_rectangle.w, -- window->video_rectangle.h); -- wl_surface_commit (window->video_surface); -+ wl_surface_damage (window->area_surface, -+ 0, 0, window->video_rectangle.w, window->video_rectangle.h); -+ wl_surface_commit (window->area_surface); - - if (G_UNLIKELY (info)) { - /* commit also the parent (area_surface) in order to change -@@ -314,7 +326,8 @@ - wl_surface_damage (window->area_surface, 0, 0, window->render_rectangle.w, - window->render_rectangle.h); - wl_surface_commit (window->area_surface); -- wl_subsurface_set_desync (window->video_subsurface); -+ if (window->video_subsurface) -+ wl_subsurface_set_desync (window->video_subsurface); - } - - wl_display_flush (window->display->display); -@@ -358,7 +371,7 @@ - alloc = gst_wl_shm_allocator_get (); - - buf = gst_buffer_new_allocate (alloc, info.size, NULL); -- gst_buffer_memset (buf, 0, 0, info.size); -+ gst_buffer_memset (buf, 0, 0x77, info.size); - wlbuf = - gst_wl_shm_memory_construct_wl_buffer (gst_buffer_peek_memory (buf, 0), - window->display, &info); -@@ -393,13 +406,14 @@ - gst_wl_window_update_borders (window); - - if (window->video_width != 0) { -- wl_subsurface_set_sync (window->video_subsurface); -+ if (window->video_subsurface) -+ wl_subsurface_set_sync (window->video_subsurface); - gst_wl_window_resize_video_surface (window, TRUE); - } - - wl_surface_damage (window->area_surface, 0, 0, w, h); - wl_surface_commit (window->area_surface); - -- if (window->video_width != 0) -+ if (window->video_width != 0 && window->video_subsurface) - wl_subsurface_set_desync (window->video_subsurface); - } diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003_disable_using_subsurface_subcompositor.patch b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-disable-using-subsurface-subcompositor.patch similarity index 78% rename from meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003_disable_using_subsurface_subcompositor.patch rename to meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-disable-using-subsurface-subcompositor.patch index e18bd066c..5a65eb9b2 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003_disable_using_subsurface_subcompositor.patch +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-disable-using-subsurface-subcompositor.patch @@ -1,7 +1,20 @@ -diff -ruN a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c ---- a/ext/wayland/gstwaylandsink.c 2019-04-19 18:16:36.000000000 +0900 -+++ b/ext/wayland/gstwaylandsink.c 2020-12-07 22:41:34.000000000 +0900 -@@ -1005,14 +1005,13 @@ +From 8ee342dd3c59d2cd2f9b5569211921fd02220fc3 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Mon, 25 Jan 2021 14:18:13 -0800 +Subject: [PATCH] disable using subsurface subcompositor + +--- + ext/wayland/gstwaylandsink.c | 6 +-- + ext/wayland/wldisplay.c | 3 ++ + ext/wayland/wlwindow.c | 97 ++++++++---------------------------- + ext/wayland/wlwindow.h | 5 -- + 4 files changed, 27 insertions(+), 84 deletions(-) + +diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c +index 4caf0d32c..38c5f2678 100644 +--- a/ext/wayland/gstwaylandsink.c ++++ b/ext/wayland/gstwaylandsink.c +@@ -1046,14 +1046,13 @@ gst_wayland_sink_begin_geometry_change (GstWaylandVideo * video) g_return_if_fail (sink != NULL); g_mutex_lock (&sink->render_lock); @@ -17,7 +30,7 @@ diff -ruN a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c g_mutex_unlock (&sink->render_lock); } -@@ -1023,14 +1022,13 @@ +@@ -1064,14 +1063,13 @@ gst_wayland_sink_end_geometry_change (GstWaylandVideo * video) g_return_if_fail (sink != NULL); g_mutex_lock (&sink->render_lock); @@ -33,10 +46,11 @@ diff -ruN a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c g_mutex_unlock (&sink->render_lock); } -diff -ruN a/ext/wayland/wldisplay.c b/ext/wayland/wldisplay.c ---- a/ext/wayland/wldisplay.c 2019-04-19 18:16:36.000000000 +0900 -+++ b/ext/wayland/wldisplay.c 2020-12-07 22:43:28.000000000 +0900 -@@ -332,7 +332,10 @@ +diff --git a/ext/wayland/wldisplay.c b/ext/wayland/wldisplay.c +index 940009556..82e437ab8 100644 +--- a/ext/wayland/wldisplay.c ++++ b/ext/wayland/wldisplay.c +@@ -332,7 +332,10 @@ gst_wl_display_new_existing (struct wl_display * display, } VERIFY_INTERFACE_EXISTS (compositor, "wl_compositor"); @@ -47,10 +61,11 @@ diff -ruN a/ext/wayland/wldisplay.c b/ext/wayland/wldisplay.c VERIFY_INTERFACE_EXISTS (shm, "wl_shm"); #undef VERIFY_INTERFACE_EXISTS -diff -ruN a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c ---- a/ext/wayland/wlwindow.c 2020-10-17 02:44:01.000000000 +0900 -+++ b/ext/wayland/wlwindow.c 2020-12-16 21:08:16.000000000 +0900 -@@ -157,8 +157,11 @@ +diff --git a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c +index c3dc61d28..29df52e1a 100644 +--- a/ext/wayland/wlwindow.c ++++ b/ext/wayland/wlwindow.c +@@ -157,8 +157,11 @@ gst_wl_window_finalize (GObject * gobject) { GstWlWindow *self = GST_WL_WINDOW (gobject); @@ -63,7 +78,7 @@ diff -ruN a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c if (self->xdg_toplevel) xdg_toplevel_destroy (self->xdg_toplevel); -@@ -168,26 +171,13 @@ +@@ -168,26 +171,13 @@ gst_wl_window_finalize (GObject * gobject) if (self->video_viewport) wp_viewport_destroy (self->video_viewport); @@ -91,7 +106,7 @@ diff -ruN a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c { GstWlWindow *window; -@@ -196,33 +186,21 @@ +@@ -196,33 +186,21 @@ gst_wl_window_new_internal (GstWlDisplay * display, GMutex * render_lock) window->render_lock = render_lock; g_cond_init (&window->configure_cond); @@ -127,7 +142,7 @@ diff -ruN a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c wl_surface_set_input_region (window->video_surface, NULL); return window; -@@ -253,9 +231,11 @@ +@@ -253,9 +231,11 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info, gboolean fullscreen, GMutex * render_lock) { GstWlWindow *window; @@ -140,7 +155,7 @@ diff -ruN a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c /* Check which protocol we will use (in order of preference) */ if (display->xdg_wm_base) { -@@ -263,7 +243,7 @@ +@@ -263,7 +243,7 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info, /* First create the XDG surface */ window->xdg_surface = xdg_wm_base_get_xdg_surface (display->xdg_wm_base, @@ -149,7 +164,7 @@ diff -ruN a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c if (!window->xdg_surface) { GST_ERROR ("Unable to get xdg_surface"); goto error; -@@ -300,7 +280,7 @@ +@@ -300,7 +280,7 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info, } else if (display->wl_shell) { /* go toplevel */ window->wl_shell_surface = wl_shell_get_shell_surface (display->wl_shell, @@ -158,7 +173,7 @@ diff -ruN a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c if (!window->wl_shell_surface) { GST_ERROR ("Unable to get wl_shell_surface"); goto error; -@@ -311,7 +291,7 @@ +@@ -311,7 +291,7 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info, gst_wl_window_ensure_fullscreen (window, fullscreen); } else if (display->fullscreen_shell) { zwp_fullscreen_shell_v1_present_surface (display->fullscreen_shell, @@ -167,7 +182,7 @@ diff -ruN a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c NULL); } else { GST_ERROR ("Unable to use either wl_shell, xdg_wm_base or " -@@ -336,13 +316,8 @@ +@@ -336,13 +316,8 @@ gst_wl_window_new_in_surface (GstWlDisplay * display, struct wl_surface * parent, GMutex * render_lock) { GstWlWindow *window; @@ -183,7 +198,7 @@ diff -ruN a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c wl_surface_commit (parent); -@@ -396,8 +371,6 @@ +@@ -396,8 +371,6 @@ gst_wl_window_resize_video_surface (GstWlWindow * window, gboolean commit) gst_video_sink_center_rect (src, dst, &res, FALSE); } @@ -192,7 +207,7 @@ diff -ruN a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c if (commit) { wl_surface_damage (window->video_surface_wrapper, 0, 0, res.w, res.h); wl_surface_commit (window->video_surface_wrapper); -@@ -409,7 +382,7 @@ +@@ -409,7 +382,7 @@ gst_wl_window_resize_video_surface (GstWlWindow * window, gboolean commit) region = wl_compositor_create_region (window->display->compositor); wl_region_add (region, 0, 0, window->render_rectangle.w, window->render_rectangle.h); @@ -201,7 +216,7 @@ diff -ruN a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c wl_region_destroy (region); } -@@ -422,13 +395,6 @@ +@@ -422,13 +395,6 @@ gst_wl_window_set_opaque (GstWlWindow * window, const GstVideoInfo * info) { struct wl_region *region; @@ -215,7 +230,7 @@ diff -ruN a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c if (!GST_VIDEO_INFO_HAS_ALPHA (info)) { /* Set video opaque */ region = wl_compositor_create_region (window->display->compositor); -@@ -448,7 +414,6 @@ +@@ -448,7 +414,6 @@ gst_wl_window_render (GstWlWindow * window, GstWlBuffer * buffer, gst_util_uint64_scale_int_round (info->width, info->par_n, info->par_d); window->video_height = info->height; @@ -223,7 +238,7 @@ diff -ruN a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c gst_wl_window_resize_video_surface (window, FALSE); gst_wl_window_set_opaque (window, info); } -@@ -462,17 +427,6 @@ +@@ -462,17 +427,6 @@ gst_wl_window_render (GstWlWindow * window, GstWlBuffer * buffer, /* clear both video and parent surfaces */ wl_surface_attach (window->video_surface_wrapper, NULL, 0, 0); wl_surface_commit (window->video_surface_wrapper); @@ -241,7 +256,7 @@ diff -ruN a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c } wl_display_flush (window->display->display); -@@ -521,7 +475,7 @@ +@@ -521,7 +475,7 @@ gst_wl_window_update_borders (GstWlWindow * window) gst_wl_shm_memory_construct_wl_buffer (gst_buffer_peek_memory (buf, 0), window->display, &info); gwlbuf = gst_buffer_add_wl_buffer (buf, wlbuf, window->display); @@ -250,7 +265,7 @@ diff -ruN a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c /* at this point, the GstWlBuffer keeps the buffer * alive and will free it on wl_buffer::release */ -@@ -540,24 +494,17 @@ +@@ -540,24 +494,17 @@ gst_wl_window_set_render_rectangle (GstWlWindow * window, gint x, gint y, window->render_rectangle.w = w; window->render_rectangle.h = h; @@ -280,10 +295,11 @@ diff -ruN a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c - if (window->video_width != 0) - wl_subsurface_set_desync (window->video_subsurface); } -diff -ruN a/ext/wayland/wlwindow.h b/ext/wayland/wlwindow.h ---- a/ext/wayland/wlwindow.h 2019-04-19 18:16:36.000000000 +0900 -+++ b/ext/wayland/wlwindow.h 2020-12-07 22:50:33.000000000 +0900 -@@ -44,13 +44,8 @@ +diff --git a/ext/wayland/wlwindow.h b/ext/wayland/wlwindow.h +index c3f017216..fcfa0372a 100644 +--- a/ext/wayland/wlwindow.h ++++ b/ext/wayland/wlwindow.h +@@ -44,13 +44,8 @@ struct _GstWlWindow GMutex *render_lock; GstWlDisplay *display; diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-rtpmanagerbad-add-RTP-streaming-elements.patch b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-rtpmanagerbad-add-RTP-streaming-elements.patch index 8f7bc5b79..455a7955e 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-rtpmanagerbad-add-RTP-streaming-elements.patch +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-rtpmanagerbad-add-RTP-streaming-elements.patch @@ -1,4 +1,4 @@ -From 3ef737605a3df19c4d52736203038037bcaf4ae2 Mon Sep 17 00:00:00 2001 +From f03dee860e8224d3370c5d9d08c2e431c6ee078b Mon Sep 17 00:00:00 2001 From: Marc Leeman Date: Mon, 3 Jun 2019 20:08:23 +0000 Subject: [PATCH] rtpmanagerbad: add RTP streaming elements @@ -98,25 +98,27 @@ rtpmanagerbad: nit URI notation correction In an URI, the first key/value pair should not have an ampersand, the parser did not die though. + +Upstream-Status: Backport [3ef737605a3df19c4d52736203038037bcaf4ae2 from 1.17.1] +Signed-off-by: Martin Jansa --- - configure.ac | 2 + - gst/meson.build | 2 +- - gst/rtp/Makefile.am | 17 + - gst/rtp/gstrtp-utils.c | 39 ++ - gst/rtp/gstrtp-utils.h | 8 + - gst/rtp/gstrtpsink.c | 581 +++++++++++++++++++++++++ - gst/rtp/gstrtpsink.h | 72 ++++ - gst/rtp/gstrtpsrc.c | 731 ++++++++++++++++++++++++++++++++ - gst/rtp/gstrtpsrc.h | 76 ++++ - gst/rtp/meson.build | 15 + - gst/rtp/plugin.c | 28 ++ - meson_options.txt | 1 + - tests/check/Makefile.am | 8 + - tests/check/elements/.gitignore | 2 + - tests/check/elements/rtpsink.c | 56 +++ - tests/check/elements/rtpsrc.c | 58 +++ - tests/check/meson.build | 2 + - 17 files changed, 1697 insertions(+), 1 deletion(-) + configure.ac | 2 + + gst/meson.build | 2 +- + gst/rtp/Makefile.am | 17 + + gst/rtp/gstrtp-utils.c | 39 ++ + gst/rtp/gstrtp-utils.h | 8 + + gst/rtp/gstrtpsink.c | 581 ++++++++++++++++++++++++++ + gst/rtp/gstrtpsink.h | 72 ++++ + gst/rtp/gstrtpsrc.c | 731 +++++++++++++++++++++++++++++++++ + gst/rtp/gstrtpsrc.h | 76 ++++ + gst/rtp/meson.build | 15 + + gst/rtp/plugin.c | 28 ++ + meson_options.txt | 1 + + tests/check/Makefile.am | 8 + + tests/check/elements/rtpsink.c | 56 +++ + tests/check/elements/rtpsrc.c | 58 +++ + tests/check/meson.build | 2 + + 16 files changed, 1695 insertions(+), 1 deletion(-) create mode 100644 gst/rtp/Makefile.am create mode 100644 gst/rtp/gstrtp-utils.c create mode 100644 gst/rtp/gstrtp-utils.h @@ -150,7 +152,7 @@ index 5712e739c..8f4b741af 100644 gst/segmentclip/Makefile gst/siren/Makefile diff --git a/gst/meson.build b/gst/meson.build -index f6b306c1e..3266c6e20 100644 +index 8c8349802..4a3c372fc 100644 --- a/gst/meson.build +++ b/gst/meson.build @@ -8,7 +8,7 @@ foreach plugin : ['accurip', 'adpcmdec', 'adpcmenc', 'aiff', 'asfmux', @@ -1784,10 +1786,10 @@ index 000000000..8c1d71f8b + "GStreamer RTP Plugins", + plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN); diff --git a/meson_options.txt b/meson_options.txt -index 111679ec9..0c30c253d 100644 +index 3a9aa93aa..840dd7271 100644 --- a/meson_options.txt +++ b/meson_options.txt -@@ -49,6 +49,7 @@ option('pnm', type : 'feature', value : 'auto') +@@ -48,6 +48,7 @@ option('pnm', type : 'feature', value : 'auto') option('proxy', type : 'feature', value : 'auto') option('rawparse', type : 'feature', value : 'auto') option('removesilence', type : 'feature', value : 'auto') @@ -1948,7 +1950,7 @@ index 000000000..6e1f1327c + +GST_CHECK_MAIN (rtpsrc); diff --git a/tests/check/meson.build b/tests/check/meson.build -index cd77fb4b3..5eb401d42 100644 +index 85a733045..5835b2547 100644 --- a/tests/check/meson.build +++ b/tests/check/meson.build @@ -47,6 +47,8 @@ base_tests = [ @@ -1960,6 +1962,3 @@ index cd77fb4b3..5eb401d42 100644 [['elements/videoframe-audiolevel.c']], [['elements/viewfinderbin.c']], [['libs/h264parser.c'], false, [gstcodecparsers_dep]], --- -2.17.1 - diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend index e114ac629..92ca772bb 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend @@ -1,17 +1,13 @@ # Copyright (c) 2018-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webos3" +EXTENDPRAUTO:append = "webos4" PACKAGECONFIG:remove = "rsvg" -# Needed only for qemux86 build -# FILESEXTRAPATHS:prepend:qemux86 := "${THISDIR}/${BPN}:" -# SRC_URI:append:qemux86 = " file://0002-render-into-wl_surface-without-sub-surface.patch" - FILESEXTRAPATHS:prepend:qemux86-64 := "${THISDIR}/${BPN}:" SRC_URI:append:qemux86-64 = " \ - file://0001_set_initial_window_size.patch \ - file://0002_add_video_info_message.patch \ - file://0003_disable_using_subsurface_subcompositor.patch \ + file://0001-set-initial-window-size.patch \ + file://0002-add-video-info-message.patch \ + file://0003-disable-using-subsurface-subcompositor.patch \ file://0004-rtpmanagerbad-add-RTP-streaming-elements.patch \ " diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend index 820d32f34..18741df5b 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2018-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webos2" +EXTENDPRAUTO:append = "webos3" # modify tests PACKAGECONFIG to add optional gsl and gmp dependencies # this cannot be merged to oe-core, recipe, because gsl recipe is in @@ -11,5 +11,6 @@ EXTENDPRAUTO:append = "webos2" # ERROR: gstreamer1.0-1.14.2-r0 do_package_qa: QA Issue: gstreamer1.0-ptest rdepends on gsl, but it isn't a build dependency, missing gsl in DEPENDS or PACKAGECONFIG? [build-deps] # ERROR: gstreamer1.0-1.14.2-r0 do_package_qa: QA Issue: gstreamer1.0-ptest rdepends on gmp, but it isn't a build dependency, missing gmp in DEPENDS or PACKAGECONFIG? [build-deps] PACKAGECONFIG[tests] = "-Dtests=enabled -Dinstalled-tests=true,-Dtests=disabled -Dinstalled-tests=false,gsl gmp" -FILESEXTRAPATHS:prepend:qemux86-64 := "${THISDIR}/${BPN}:" -SRC_URI:append:qemux86-64 = "file://0001-Add-support-for-seamless-seek-trickplay.patch" + +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" +SRC_URI:append:qemux86-64 = " file://0001-Add-support-for-seamless-seek-trickplay.patch" From 3235748166d7500818e4f9de1a1027964c68b8bc Mon Sep 17 00:00:00 2001 From: Pankaj Maharana Date: Mon, 4 Jul 2022 16:53:42 +0530 Subject: [PATCH 0498/2022] ose: webruntime_91=23 webruntime=r55 webruntime_%=webosrpi11 wam=62-r47 media-codec-interface=10-r6 :Release Notes: Make MCIL as default in RPI/OSE :Detailed Notes: webruntime_91: submissions/22..submissions/23 2a1a45a3df [op][n_upsable][audio] Fix pulse audio input/output device id a791542294 [op][n_upsable][media] Auto select neva media for custom playback c0cbfc84f5 [op][n_upsable][media] Fix suspend/resume with WebMediaPlayerImpl 4930ecb0b0 [op][n_upsable][webrtc] Enable webrtc decoder and player if possible 0ae12a83e8 Revert "[op][n_upsable][media] Add support for "enableWebOSVDA" property" c8064738f5 [op][n_upsable][webrtc] Fix crash due to callback after player is destroyed webruntime: r54..r55 - Add and enable pulseaudio - Add --disable-accelerated-video-decode to app_shell for qemux86 and qemux86-64 webruntime_%: webosrpi10..webosrpi11 - Add --disable-web-media-player-neva to app_shell for rpi wam: submissions/61..submissions/62 075aa28 Revert "[op][n_upsable][webrtc] Add app info property named "enableWebOSVDA"" wam: r46..r47 - Add --disable-web-media-player-neva to webapp-mgr.sh when DISABLE_NEVA_MEDIA_PLAYER is true. media-codec-interface: submissions/8..submissions/10 ba73371 Remove constraint for checking decode profiles supported d54f7d2 Changes to select encoder/decoder instance at runtime media-codec-interface: r5..r6 - Remove USE_ENCODER :Testing Performed: CCC testing :QA Notes: N/A :Issues Addressed: [WRO-8991] : Youtube video is still playing after launching the bareapp [WRO-8693] Audio is not heard from secondary display in dual display case [WRO-9479] Auto select neva media player for custom playback [WRO-9927] CCC: webruntime_91=23 webruntime=r55 webruntime_%=webosrpi11 wam=62-r47 media-codec-interface=10-r6 Change-Id: Ice3958fda49a876a28c94be26c479893910f5369 --- .../chromium/webruntime_%.bbappend | 4 +++- .../media-codec-interface.bbappend | 6 ------ .../media-codec-interface.bb | 7 ++----- .../chromium/webruntime-repo_91.inc | 2 +- .../recipes-webos/chromium/webruntime.inc | 7 ++++--- meta-webos/recipes-webos/wam/wam.bb | 21 ++++++++++++++----- 6 files changed, 26 insertions(+), 21 deletions(-) delete mode 100644 meta-webos-raspberrypi/recipes-webos/media-codec-interface/media-codec-interface.bbappend diff --git a/meta-webos-raspberrypi/recipes-webos/chromium/webruntime_%.bbappend b/meta-webos-raspberrypi/recipes-webos/chromium/webruntime_%.bbappend index f9f085a6c..0427cfcb8 100644 --- a/meta-webos-raspberrypi/recipes-webos/chromium/webruntime_%.bbappend +++ b/meta-webos-raspberrypi/recipes-webos/chromium/webruntime_%.bbappend @@ -1,12 +1,14 @@ # Copyright (c) 2018-2022 LG Electronics, Inc. -EXTENDPRAUTO:append:rpi = "webosrpi10" +EXTENDPRAUTO:append:rpi = "webosrpi11" modify_run_app_shell:append:rpi() { sed -i 's/# Setup 4Mb limitation mse audio buffer size/# Setup 2Mb limitation mse audio buffer size/' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} sed -i 's/export MSE_AUDIO_BUFFER_SIZE_LIMIT=4194304/export MSE_AUDIO_BUFFER_SIZE_LIMIT=2097152/' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} sed -i 's/# Setup 50Mb limitation mse video buffer size/# Setup 15Mb limitation mse video buffer size/' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} sed -i 's/export MSE_VIDEO_BUFFER_SIZE_LIMIT=52428800/export MSE_VIDEO_BUFFER_SIZE_LIMIT=15728640/' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} + + sed -i '/--in-process-gpu\\/a\ --disable-web-media-player-neva\\' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} } PACKAGECONFIG_MEDIA:raspberrypi3 = "" diff --git a/meta-webos-raspberrypi/recipes-webos/media-codec-interface/media-codec-interface.bbappend b/meta-webos-raspberrypi/recipes-webos/media-codec-interface/media-codec-interface.bbappend deleted file mode 100644 index 816fc9822..000000000 --- a/meta-webos-raspberrypi/recipes-webos/media-codec-interface/media-codec-interface.bbappend +++ /dev/null @@ -1,6 +0,0 @@ -# Copyright (c) 2022 LG Electronics, Inc. - -EXTENDPRAUTO:append:rpi = "webosrpi1" - -USE_ENCODER:rpi = "V4L2" - diff --git a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb index 3af63fd36..71785b806 100644 --- a/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb +++ b/meta-webos/recipes-multimedia/media-codec-interface/media-codec-interface.bb @@ -21,14 +21,11 @@ COMPATIBLE_MACHINE = "^qemux86$|^qemux86-64$|^raspberrypi3$|^raspberrypi3-64$|^r DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad umediaserver media-resource-calculator" DEPENDS:append:rpi = " virtual/libomxil" -WEBOS_VERSION = "1.0.0-8_d957796c4bd36391f12a443bdddcf5a17362a3e8" -PR = "r5" +WEBOS_VERSION = "1.0.0-10_25f5d0aaeee799e84b1bb3616451a1bc94b09986" +PR = "r6" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE};name=main" -USE_ENCODER ?= "GST" -EXTRA_OECMAKE += "-DUSE_ENCODER_BUILD:STRING=${USE_ENCODER}" - S = "${WORKDIR}/git" FILES_SOLIBSDEV = "" diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc index 4e2261193..3097a5e70 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=c31f1ae166739be9ca186deacf4b32e4" WEBOS_REPO_NAME = "chromium91" -WEBOS_VERSION = "91.0.4472.114-22_64e4cd0408dfc7a49294f3109cacc2622f491f6e" +WEBOS_VERSION = "91.0.4472.114-23_ff643827861f858261bb6eee962b5f11741a9b53" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" diff --git a/meta-webos/recipes-webos/chromium/webruntime.inc b/meta-webos/recipes-webos/chromium/webruntime.inc index 5045e902f..90b7379b0 100644 --- a/meta-webos/recipes-webos/chromium/webruntime.inc +++ b/meta-webos/recipes-webos/chromium/webruntime.inc @@ -18,9 +18,9 @@ inherit webos_machine_impl_dep inherit webos_prerelease_dep inherit webos_system_bus -DEPENDS = "virtual/gettext wayland wayland-native luna-service2 pixman freetype fontconfig openssl pango cairo icu webos-wayland-extensions libxkbcommon libexif dbus pciutils udev libcap alsa-lib virtual/egl elfutils-native libdrm atk gperf-native gconf libwebosi18n bison-native xorgproto nss nspr curl nspr-native nss-native pmloglib glib-2.0-native python3-six-native python3-beautifulsoup4-native python3-soupsieve-native python3-lxml-native python3-html5lib-native python3-webencodings-native" +DEPENDS = "virtual/gettext wayland wayland-native luna-service2 pixman freetype fontconfig openssl pango cairo icu webos-wayland-extensions libxkbcommon libexif dbus pciutils udev libcap alsa-lib virtual/egl elfutils-native libdrm atk gperf-native gconf libwebosi18n bison-native xorgproto nss nspr curl nspr-native nss-native pmloglib glib-2.0-native python3-six-native python3-beautifulsoup4-native python3-soupsieve-native python3-lxml-native python3-html5lib-native python3-webencodings-native pulseaudio" -INC_PR = "r54" +INC_PR = "r55" # Enable this in webos-local.conf or in recipe to build DEPLOY_CHROMEDRIVER ?= "false" DEPLOY_WAM_DEMO ?= "false" @@ -85,7 +85,6 @@ GN_ARGS += "\ enable_print_preview=false\ enable_remoting=false\ use_gnome_keyring=false\ - use_pulseaudio=false\ " # TODO: drop this after we migrate to ubuntu 16.04 or above @@ -170,10 +169,12 @@ modify_run_app_shell() { modify_run_app_shell:append:qemux86() { # Disable media hardware acceleration sed -i '/--disable-web-security\\/a\ --disable-web-media-player-neva\\' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} + sed -i '/--disable-web-security\\/a\ --disable-accelerated-video-decode\\' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} } modify_run_app_shell:append:qemux86-64() { # Disable media hardware acceleration sed -i '/--disable-web-security\\/a\ --disable-web-media-player-neva\\' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} + sed -i '/--disable-web-security\\/a\ --disable-accelerated-video-decode\\' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} } WINDOW_SIZE ?= "1920,1080" diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index 55521fbf3..531953340 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -18,8 +18,8 @@ RDEPENDS:${PN} += "util-linux" VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" -WEBOS_VERSION = "1.0.2-61_c35a65e0101756327c8b8198d11d8a123d00610b" -PR = "r46" +WEBOS_VERSION = "1.0.2-62_95556b20926075f24bc833ab4993346c60608f5d" +PR = "r47" WAM_BUILD_SYSTEM = "webos_qmake6" WAM_BUILD_SYSTEM:webos = "webos_cmake" @@ -72,6 +72,9 @@ WAM_ERROR_SCRIPTS_PATH = "${S}/html-ose" # Flag to control runtime flags for touch TOUCH_ENABLED ?= "true" +# Flag to control runtime flag for Media Player Neva +DISABLE_NEVA_MEDIA_PLAYER ?= "true" + # Flag to control runtime flag for platform decoder PLATFORM_DECODER_ENABLED ?= "true" @@ -103,10 +106,16 @@ do_configure:append() { sed -i '/export WAM_COMMON_SWITCHES=\" \\/a\ --enable-neva-media-service \\' ${B}/webapp-mgr.sh - # enable platform decoding if PLATFORM_DECODER_ENABLED is true - if ${PLATFORM_DECODER_ENABLED}; then + # enable platform decoding if DISABLE_NEVA_MEDIA_PLAYER is true + if ${DISABLE_NEVA_MEDIA_PLAYER}; then # enable h/w decoding for webrtc - sed -i '/--enable-aggressive-release-policy \\/a\ --enable-webrtc-platform-video-decoder \\' ${B}/webapp-mgr.sh + sed -i '/--enable-aggressive-release-policy \\/a\ --disable-web-media-player-neva \\' ${B}/webapp-mgr.sh + else + # enable platform decoding if PLATFORM_DECODER_ENABLED is true + if ${PLATFORM_DECODER_ENABLED}; then + # enable h/w decoding for webrtc + sed -i '/--enable-aggressive-release-policy \\/a\ --enable-webrtc-platform-video-decoder \\' ${B}/webapp-mgr.sh + fi fi # enable platform encoding if PLATFORM_ENCODER_ENABLED is true @@ -129,6 +138,7 @@ do_configure:append:qemux86() { if [ -f "${B}/webapp-mgr.sh" ]; then # Disable media hardware acceleration sed -i '/--enable-aggressive-release-policy \\/a\ --disable-web-media-player-neva \\' ${B}/webapp-mgr.sh + sed -i '/--enable-aggressive-release-policy \\/a\ --disable-accelerated-video-decode \\' ${B}/webapp-mgr.sh fi } @@ -137,6 +147,7 @@ do_configure:append:qemux86-64() { if [ -f "${B}/webapp-mgr.sh" ]; then # Disable media hardware acceleration sed -i '/--enable-aggressive-release-policy \\/a\ --disable-web-media-player-neva \\' ${B}/webapp-mgr.sh + sed -i '/--enable-aggressive-release-policy \\/a\ --disable-accelerated-video-decode \\' ${B}/webapp-mgr.sh fi } From 0706f6ea121247d91b440dfdf9f5986e74e79eb4 Mon Sep 17 00:00:00 2001 From: "cleaneye.kim" Date: Tue, 10 Aug 2021 14:44:01 +0900 Subject: [PATCH 0499/2022] webos-initscripts=85 base-passwd: Add users and groups for supporting non-root service :Release Notes: Change users/groups of some services to non-root. Add some users/groups to support more strict DAC :Detailed Notes: webos-initscripts: submissions/84..submissions/85 3751ec0 Use the non-root(system) user for unifiedsearch dca8a89 Add userid and groupid for audio services dee2b44 Add userid for camera service base-passwd: some users and supplementary group are added :Testing Performed: Tested locally based on #487 official build :QA Notes: None. :Issues Addressed: [WRO-9931] CCC: webos-initscripts=85 base-passwd: Add users and groups for supporting non-root service [WRO-1432] non-Root System Service Change-Id: I0b89557b8c0d4f6a9fbd4fbb622e84397934179d --- .../base-passwd/base-passwd/group.master | 18 +++++++++--------- .../base-passwd/base-passwd/passwd.master | 17 +++++++++++++++++ .../initscripts/webos-initscripts.bb | 2 +- 3 files changed, 27 insertions(+), 10 deletions(-) diff --git a/meta-webos/recipes-core/base-passwd/base-passwd/group.master b/meta-webos/recipes-core/base-passwd/base-passwd/group.master index d553b3d3b..7fe0e161f 100644 --- a/meta-webos/recipes-core/base-passwd/base-passwd/group.master +++ b/meta-webos/recipes-core/base-passwd/base-passwd/group.master @@ -4,30 +4,30 @@ bin:x:2:bin sys:x:3:sys adm:x:4: tty:x:5: -disk:x:6: +disk:x:6:system,sdcard,usb mail:x:8:mail wheel:x:10:root proxy:x:13:proxy kmem:x:15: -input:x:19: -audio:x:29:,wam,pulse +input:x:19:input,system +audio:x:29:,wam,pulse,audio,system www:x:33:www backup:x:34:backup operator:x:37:operator utmp:x:43: -video:x:44:wam +video:x:44:wam,graphics,system,camera plugdev:x:46: staff:x:50: games:x:60:game haldaemon:x:68:haldaemon shutdown:x:70: dbus:x:81:dbus -netdev:x:82: +netdev:x:82:system,network,bluetooth,wifi users:x:100:sync -developer:x:504:developer -compositor:x:505:wam -pulse-access:x:506:root,wam +developer:x:504:developer,dev-func +compositor:x:505:wam,graphics +pulse-access:x:506:root,wam,system pulse:x:507:pulse -se:x:509:root,wam +se:x:509:root,wam,system nogroup:x:65534:nobody,sshd blemesh:x:2024: diff --git a/meta-webos/recipes-core/base-passwd/base-passwd/passwd.master b/meta-webos/recipes-core/base-passwd/base-passwd/passwd.master index 3b8fd1e73..cbb196acb 100644 --- a/meta-webos/recipes-core/base-passwd/base-passwd/passwd.master +++ b/meta-webos/recipes-core/base-passwd/base-passwd/passwd.master @@ -15,3 +15,20 @@ sshd:x:103:99:Operator:/var:/bin/false developer:x:504:504:developer:/home/developer:/bin/sh wam:x:505:505::/var/lib/wam:/bin/false pulse:x:507:507::/var/run/pulse:/bin/false +radio:x:1001:1001::/var:/bin/false +bluetooth:x:1002:1002::/var:/bin/false +graphics:x:1003:1003::/var:/bin/false +input:x:1004:1004::/var:/bin/false +audio:x:1005:1005::/var:/bin/false +camera:x:1006:1006::/var:/bin/false +security:x:1008:1008::/var:/bin/false +sdcard:x:1009:1009::/var:/bin/false +wifi:x:1010:1010::/var:/bin/false +media:x:1013:1013::/var:/bin/false +usb:x:1014:1014::/var:/bin/false +drm:x:1015:1015::/var:/bin/false +system:x:1016:1016::/var:/bin/false +network:x:1017:1017::/var:/bin/false +log:x:2001:2001::/var:/bin/false +dev-func:x:2002:2002::/var:/bin/false +debug:x:2003:2003::/var:/bin/false diff --git a/meta-webos/recipes-core/initscripts/webos-initscripts.bb b/meta-webos/recipes-core/initscripts/webos-initscripts.bb index 0f21048c5..15f0ffe71 100644 --- a/meta-webos/recipes-core/initscripts/webos-initscripts.bb +++ b/meta-webos/recipes-core/initscripts/webos-initscripts.bb @@ -19,7 +19,7 @@ RDEPENDS:${PN} = "${VIRTUAL-RUNTIME_init_manager} ${VIRTUAL-RUNTIME_bash} python PROVIDES = "initscripts" RPROVIDES:${PN} = "initscripts initd-functions" -WEBOS_VERSION = "3.0.0-84_6e34df6eaefe392465aba2682fc066a92d7cfffc" +WEBOS_VERSION = "3.0.0-85_6c207ca832afc5e7fd79bf35ca0014ccc3d773c5" PR = "r17" inherit webos_component From 860c94a6206953f6c670f194375407ff1a62cc1f Mon Sep 17 00:00:00 2001 From: Muniraju Date: Thu, 11 Aug 2022 16:54:43 +0530 Subject: [PATCH 0500/2022] ose: com.webos.app.videocall=2 :Release Notes: Video call UI issue fix :Detailed Notes: com.webos.app.videocall: submissions/1..submissions/2 bef8d6d Video call UI issue fix :Testing Performed: Please check CCC tickets. :QA Notes: NA :Issues Addressed: [WRO-10200] CCC: com.webos.app.videocall=2 [WRO-10198] Video Call UI Issue Fix Change-Id: Ic37c5696923722085c336e205430b0f890f1a482 --- .../com.webos.app.videocall/com.webos.app.videocall.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.videocall/com.webos.app.videocall.bb b/meta-webos/recipes-webos/com.webos.app.videocall/com.webos.app.videocall.bb index 3a105574c..883e3f556 100644 --- a/meta-webos/recipes-webos/com.webos.app.videocall/com.webos.app.videocall.bb +++ b/meta-webos/recipes-webos/com.webos.app.videocall/com.webos.app.videocall.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=0ec407cd2d4a192e0c60888f4ec66dd7 \ " -WEBOS_VERSION = "0.0.1-1_5fec96c9a256986a7f4d4a36a704cdc767d0f673" +WEBOS_VERSION = "0.0.1-2_74b3bacbd9ae4d5a8daba53425a109e3de4e3458" PR = "r0" From a9e47a3f38dd678ee3531ba012d17e5a1737d31f Mon Sep 17 00:00:00 2001 From: "paramesh.kuberappa" Date: Thu, 11 Aug 2022 18:43:21 +0530 Subject: [PATCH 0501/2022] ose: webruntime=r56 wam=r48 :Release Notes: Enable GAV support in ose emulator :Detailed Notes: Add GAV support in chromium for gstreamer pipeline support :Testing Performed: Test results are updated in WRO-9926 :QA Notes: NA :Issues Addressed: [WRO-9926] CCC: webruntime=pro24 webruntime=r56 wam=r48 [WRO-9537] Add GAV support for OSE Emulator in Chromium component Change-Id: Id33a2e426835b157bb05db1ed8a7e5923df1e815 --- meta-webos/recipes-webos/chromium/webruntime.inc | 10 +++++----- meta-webos/recipes-webos/wam/wam.bb | 8 +++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime.inc b/meta-webos/recipes-webos/chromium/webruntime.inc index 90b7379b0..ae9169856 100644 --- a/meta-webos/recipes-webos/chromium/webruntime.inc +++ b/meta-webos/recipes-webos/chromium/webruntime.inc @@ -20,7 +20,7 @@ inherit webos_system_bus DEPENDS = "virtual/gettext wayland wayland-native luna-service2 pixman freetype fontconfig openssl pango cairo icu webos-wayland-extensions libxkbcommon libexif dbus pciutils udev libcap alsa-lib virtual/egl elfutils-native libdrm atk gperf-native gconf libwebosi18n bison-native xorgproto nss nspr curl nspr-native nss-native pmloglib glib-2.0-native python3-six-native python3-beautifulsoup4-native python3-soupsieve-native python3-lxml-native python3-html5lib-native python3-webencodings-native pulseaudio" -INC_PR = "r55" +INC_PR = "r56" # Enable this in webos-local.conf or in recipe to build DEPLOY_CHROMEDRIVER ?= "false" DEPLOY_WAM_DEMO ?= "false" @@ -46,6 +46,8 @@ PACKAGECONFIG_WEBOS_CODEC ?= "webos-codec" PACKAGECONFIG_MEDIA ?= "neva-media gstreamer umediaserver gav" PACKAGECONFIG ?= "" PACKAGECONFIG:append:hardware = " ${PACKAGECONFIG_MEDIA} ${PACKAGECONFIG_NEVA_WEBRTC} ${PACKAGECONFIG_WEBOS_CODEC}" +PACKAGECONFIG:append:qemux86 = " ${PACKAGECONFIG_MEDIA}" +PACKAGECONFIG:append:qemux86-64 = " ${PACKAGECONFIG_MEDIA}" PACKAGECONFIG[gstreamer] = "use_gst_media=true enable_webm_video_codecs=false,use_gst_media=false,g-media-pipeline" PACKAGECONFIG[umediaserver] = ",,umediaserver" # Options to enable debug build. Add this PACKAGECONFIG to webos-local.conf to enable debug build @@ -167,13 +169,11 @@ modify_run_app_shell() { } modify_run_app_shell:append:qemux86() { - # Disable media hardware acceleration - sed -i '/--disable-web-security\\/a\ --disable-web-media-player-neva\\' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} + # Disable MCIL hardware acceleration sed -i '/--disable-web-security\\/a\ --disable-accelerated-video-decode\\' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} } modify_run_app_shell:append:qemux86-64() { - # Disable media hardware acceleration - sed -i '/--disable-web-security\\/a\ --disable-web-media-player-neva\\' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} + # Disable MCIL hardware acceleration sed -i '/--disable-web-security\\/a\ --disable-accelerated-video-decode\\' ${D}${APP_SHELL_RUNTIME_RUN_SCRIPT} } diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index 531953340..fb13178f1 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -19,7 +19,7 @@ VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" WEBOS_VERSION = "1.0.2-62_95556b20926075f24bc833ab4993346c60608f5d" -PR = "r47" +PR = "r48" WAM_BUILD_SYSTEM = "webos_qmake6" WAM_BUILD_SYSTEM:webos = "webos_cmake" @@ -136,8 +136,7 @@ do_configure:append() { do_configure:append:qemux86() { # Remove this condition once webos wam is synchronized to get systemd initscripts if [ -f "${B}/webapp-mgr.sh" ]; then - # Disable media hardware acceleration - sed -i '/--enable-aggressive-release-policy \\/a\ --disable-web-media-player-neva \\' ${B}/webapp-mgr.sh + # Disable MCIL hardware acceleration sed -i '/--enable-aggressive-release-policy \\/a\ --disable-accelerated-video-decode \\' ${B}/webapp-mgr.sh fi } @@ -145,8 +144,7 @@ do_configure:append:qemux86() { do_configure:append:qemux86-64() { # Remove this condition once webos wam is synchronized to get systemd initscripts if [ -f "${B}/webapp-mgr.sh" ]; then - # Disable media hardware acceleration - sed -i '/--enable-aggressive-release-policy \\/a\ --disable-web-media-player-neva \\' ${B}/webapp-mgr.sh + # Disable MCIL hardware acceleration sed -i '/--enable-aggressive-release-policy \\/a\ --disable-accelerated-video-decode \\' ${B}/webapp-mgr.sh fi } From 4047508392996e720828be97b87252fe88170355 Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Mon, 8 Aug 2022 15:58:44 +0900 Subject: [PATCH 0502/2022] qtwayland=webos32 (fix build issue with Qt 6.4.0) :Release Notes: Fix build issue with Qt 6.4.0 :Detailed Notes: qtwayland=webos32 Set QT_SKIP_AUTO_PLUGIN_INCLUSION :Testing Performed: See the CCC jira ticket :QA Notes: :Issues Addressed: [WRO-10208] CCC: qtwayland=webos32 (fix build issue with Qt 6.4.0) Change-Id: Id322811d26ef8fa97499eae0f98784e09d8faf68 --- meta-webos/recipes-qt/qt6/qtwayland_git.bbappend | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend b/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend index 7c6d8a7ca..817c1a66a 100644 --- a/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend +++ b/meta-webos/recipes-qt/qt6/qtwayland_git.bbappend @@ -2,7 +2,7 @@ inherit webos_qt_global -EXTENDPRAUTO:append = "webos31" +EXTENDPRAUTO:append = "webos32" FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" @@ -33,6 +33,13 @@ PACKAGECONFIG = "wayland-server wayland-client client-wl-shell" # qtwayland-qmlplugins is not used in webos RRECOMMENDS:${PN}:remove = "${PN}-qmlplugins" +# Set QT_SKIP_AUTO_PLUGIN_INCLUSION as otherwise +# QtModulePluginTargets.cmake would complain during +# do_install_ptest_base about missing files that are deleted +# deliberately in do_install:append below. +# See https://codereview.qt-project.org/c/qt/qtbase/+/420212. +EXTRA_OECMAKE:append = " -DQT_SKIP_AUTO_PLUGIN_INCLUSION=ON" + do_install:append() { # Remove files unnecessary or conflict with qtwayland-webos rm -rf ${D}${QT6_INSTALL_PLUGINSDIR}/platforms \ From 3bae82ec863e9aebddfa2cd69a7bba9fd6c9c198 Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Thu, 11 Aug 2022 14:34:37 +0900 Subject: [PATCH 0503/2022] qtgraphicaleffects=webos4 (fix potential build error) :Release Notes: Fix potential build error :Detailed Notes: qtgraphicaleffects=webos4 Use CLASS_NAME instead of CLASSNAME :Testing Performed: See the CCC jira ticket :QA Notes: :Issues Addressed: [WRO-10208] CCC: qtgraphicaleffects=webos4 (fix potential build error) Change-Id: I04022fb295a47f9fc0b696211d11cf82e92ba0a6 --- ...CMake-Update-to-latest-qml-CMake-API.patch | 19 ++++++++++--------- .../qt6/qtgraphicaleffects_%.bbappend | 2 +- 2 files changed, 11 insertions(+), 10 deletions(-) diff --git a/meta-webos/recipes-qt/qt6/qtgraphicaleffects/0002-CMake-Update-to-latest-qml-CMake-API.patch b/meta-webos/recipes-qt/qt6/qtgraphicaleffects/0002-CMake-Update-to-latest-qml-CMake-API.patch index 0a3b606fd..ad88ed79f 100644 --- a/meta-webos/recipes-qt/qt6/qtgraphicaleffects/0002-CMake-Update-to-latest-qml-CMake-API.patch +++ b/meta-webos/recipes-qt/qt6/qtgraphicaleffects/0002-CMake-Update-to-latest-qml-CMake-API.patch @@ -1,4 +1,4 @@ -From 79e6a25a959cd66012bda7fdf51997c891ebd560 Mon Sep 17 00:00:00 2001 +From 8099dbc33ca5b22d4e8480936157c736c9f7e7a2 Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Thu, 24 Jun 2021 18:30:00 +0900 Subject: [PATCH] CMake: Update to latest qml CMake API @@ -11,13 +11,13 @@ compatibility. Upstream-Status: Inappropriate [webOS specific] --- src/effects/CMakeLists.txt | 124 ++++++++++++++--------------- - src/effects/private/CMakeLists.txt | 36 +++------ + src/effects/private/CMakeLists.txt | 38 ++++----- src/effects/private/qmldir | 4 - - 3 files changed, 72 insertions(+), 92 deletions(-) + 3 files changed, 73 insertions(+), 93 deletions(-) delete mode 100644 src/effects/private/qmldir diff --git a/src/effects/CMakeLists.txt b/src/effects/CMakeLists.txt -index a080d07..60bf1cc 100644 +index a080d07..f0d3a45 100644 --- a/src/effects/CMakeLists.txt +++ b/src/effects/CMakeLists.txt @@ -1,70 +1,7 @@ @@ -101,7 +101,7 @@ index a080d07..60bf1cc 100644 + URI "QtGraphicalEffects" + VERSION "1.${CMAKE_PROJECT_VERSION_MINOR}" + DESIGNER_SUPPORTED -+ CLASSNAME QtGraphicalEffectsPlugin ++ CLASS_NAME QtGraphicalEffectsPlugin + PLUGIN_TARGET qtgraphicaleffectsplugin + NO_GENERATE_PLUGIN_SOURCE + NO_PLUGIN_OPTIONAL @@ -117,7 +117,7 @@ index a080d07..60bf1cc 100644 + PUBLIC_LIBRARIES + Qt::Qml + Qt::Quick - ) ++) + +# Resources: +set(qtgraphicaleffectsshaders_resource_files @@ -149,7 +149,7 @@ index a080d07..60bf1cc 100644 + "shaders_ng/gaussianblur_fixedradius.frag.qsb" + "shaders_ng/gaussianblur_fixedradius_masked_alphaOnly.frag.qsb" + "shaders_ng/gaussianblur_fixedradius_masked.frag.qsb" -+) + ) + +qt_internal_add_resource(qtgraphicaleffectsplugin "qtgraphicaleffectsshaders" + PREFIX @@ -162,7 +162,7 @@ index a080d07..60bf1cc 100644 doc/qtgraphicaleffects.qdocconf ) diff --git a/src/effects/private/CMakeLists.txt b/src/effects/private/CMakeLists.txt -index b8e0e5b..8b77cd3 100644 +index b8e0e5b..96821a8 100644 --- a/src/effects/private/CMakeLists.txt +++ b/src/effects/private/CMakeLists.txt @@ -1,16 +1,27 @@ @@ -182,7 +182,8 @@ index b8e0e5b..8b77cd3 100644 qt_internal_add_qml_module(qtgraphicaleffectsprivate URI "QtGraphicalEffects.private" VERSION "${CMAKE_PROJECT_VERSION}" - CLASSNAME QtGraphicalEffectsPrivatePlugin +- CLASSNAME QtGraphicalEffectsPrivatePlugin ++ CLASS_NAME QtGraphicalEffectsPrivatePlugin + PLUGIN_TARGET qtgraphicaleffectsprivate + NO_GENERATE_PLUGIN_SOURCE + NO_PLUGIN_OPTIONAL diff --git a/meta-webos/recipes-qt/qt6/qtgraphicaleffects_%.bbappend b/meta-webos/recipes-qt/qt6/qtgraphicaleffects_%.bbappend index 9678d5d49..5bbc8cbe1 100644 --- a/meta-webos/recipes-qt/qt6/qtgraphicaleffects_%.bbappend +++ b/meta-webos/recipes-qt/qt6/qtgraphicaleffects_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2021-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webos3" +EXTENDPRAUTO:append = "webos4" FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" From 7235fc5b4c1becc863551fdd972a7c7212dae1f3 Mon Sep 17 00:00:00 2001 From: Muniraju Date: Thu, 11 Aug 2022 14:22:32 +0530 Subject: [PATCH 0504/2022] com.webos.app.home=21-r4 :Release Notes: New home app delivery :Detailed Notes: com.webos.app.home: submissions/20..submissions/21 30bb32d New home app delivery :Testing Performed: Please check CCC tickets. :QA Notes: NA :Issues Addressed: [WRO-10192] CCC: com.webos.app.home=21-r4 [WRO-10135] New home app delivery Change-Id: Ic54f23da6a62ce417f4b6aab9cd871f99c3063fa --- .../recipes-webos/com.webos.app.home/com.webos.app.home.bb | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb b/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb index 9fddb45fa..51a08e893 100644 --- a/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb +++ b/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb @@ -9,17 +9,16 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=0ec407cd2d4a192e0c60888f4ec66dd7 \ " -WEBOS_VERSION = "0.1.0-20_cf80667ececed393389d35291248148693c7742e" +WEBOS_VERSION = "0.1.0-21_56d0b1ce4f2c538ea711d399db6edb005b30ba8c" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" -PR = "r3" +PR = "r4" inherit webos_enhanced_submissions inherit webos_enactjs_app inherit webos_public_repo inherit webos_localizable -WEBOS_ENACTJS_SHRINKWRAP_OVERRIDE = "false" WEBOS_ENACTJS_APP_ID = "com.webos.app.home" WEBOS_LOCALIZATION_XLIFF_BASENAME = "home" From 90be39574260b49dba1dd9eaab3030b88ff6b45d Mon Sep 17 00:00:00 2001 From: "karthick.sundaram" Date: Fri, 12 Aug 2022 16:37:52 +0530 Subject: [PATCH 0505/2022] ose: webruntime_91=24 webruntime=r57 :Release Notes: Fix to support hardware encoder for webrtc conference call. Enable audio and video capture permission for Enact browser. :Detailed Notes: webruntime_91: submissions/23..submissions/24 2e72642f8d [op][n_upsable][app_shell] Enable audio and video capture permissions 98fadfcc13 [op][n_upsable][webrtc] Add Constrained Baseline as supported profile for H264 webruntime: r56..r57 - Add pulseaudio only for webos :Testing Performed: CCC testing :QA Notes: N/A :Issues Addressed: [WRO-10345] CCC: webruntime_91=24 webruntime=r57 [WRO-9582] Media devices (Camera/Mic) are not listed in Enact Browser [WRO-9481] Add Constrained baseline profile for H264 codec Change-Id: Id3d649479dfb40d3c449f3240652105d08a94bef --- meta-webos/recipes-webos/chromium/webruntime-repo_91.inc | 2 +- meta-webos/recipes-webos/chromium/webruntime.inc | 7 ++++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc index 3097a5e70..36ceea489 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=c31f1ae166739be9ca186deacf4b32e4" WEBOS_REPO_NAME = "chromium91" -WEBOS_VERSION = "91.0.4472.114-23_ff643827861f858261bb6eee962b5f11741a9b53" +WEBOS_VERSION = "91.0.4472.114-24_7aad03b7da8c7569c17ed1064b1aa793a15b8ed0" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" diff --git a/meta-webos/recipes-webos/chromium/webruntime.inc b/meta-webos/recipes-webos/chromium/webruntime.inc index ae9169856..7caf12e72 100644 --- a/meta-webos/recipes-webos/chromium/webruntime.inc +++ b/meta-webos/recipes-webos/chromium/webruntime.inc @@ -18,9 +18,9 @@ inherit webos_machine_impl_dep inherit webos_prerelease_dep inherit webos_system_bus -DEPENDS = "virtual/gettext wayland wayland-native luna-service2 pixman freetype fontconfig openssl pango cairo icu webos-wayland-extensions libxkbcommon libexif dbus pciutils udev libcap alsa-lib virtual/egl elfutils-native libdrm atk gperf-native gconf libwebosi18n bison-native xorgproto nss nspr curl nspr-native nss-native pmloglib glib-2.0-native python3-six-native python3-beautifulsoup4-native python3-soupsieve-native python3-lxml-native python3-html5lib-native python3-webencodings-native pulseaudio" +DEPENDS = "virtual/gettext wayland wayland-native luna-service2 pixman freetype fontconfig openssl pango cairo icu webos-wayland-extensions libxkbcommon libexif dbus pciutils udev libcap alsa-lib virtual/egl elfutils-native libdrm atk gperf-native gconf libwebosi18n bison-native xorgproto nss nspr curl nspr-native nss-native pmloglib glib-2.0-native python3-six-native python3-beautifulsoup4-native python3-soupsieve-native python3-lxml-native python3-html5lib-native python3-webencodings-native" -INC_PR = "r56" +INC_PR = "r57" # Enable this in webos-local.conf or in recipe to build DEPLOY_CHROMEDRIVER ?= "false" DEPLOY_WAM_DEMO ?= "false" @@ -42,7 +42,7 @@ WEBOS_SYSTEM_BUS_FILES_LOCATION = "${S}/files/sysbus" WEBOS_SYSTEM_BUS_MANIFEST_TYPE = "PASS" PACKAGECONFIG_NEVA_WEBRTC ?= "neva-webrtc" -PACKAGECONFIG_WEBOS_CODEC ?= "webos-codec" +PACKAGECONFIG_WEBOS_CODEC ?= "webos-codec pulseaudio" PACKAGECONFIG_MEDIA ?= "neva-media gstreamer umediaserver gav" PACKAGECONFIG ?= "" PACKAGECONFIG:append:hardware = " ${PACKAGECONFIG_MEDIA} ${PACKAGECONFIG_NEVA_WEBRTC} ${PACKAGECONFIG_WEBOS_CODEC}" @@ -59,6 +59,7 @@ PACKAGECONFIG[av1-codec] = "enable_av1_decoder=true, enable_av1_decoder=false" PACKAGECONFIG[gav] = "use_gav=true,use_gav=false" PACKAGECONFIG[neva-webrtc] = "use_neva_webrtc=true,use_neva_webrtc=false,media-codec-interface" PACKAGECONFIG[webos-codec] = "use_webos_codec=true,use_webos_codec=false,media-codec-interface" +PACKAGECONFIG[pulseaudio] = "use_pulseaudio=true, use_pulseaudio=false, pulseaudio" PACKAGECONFIG:append = " ${@bb.utils.contains('WEBOS_LTTNG_ENABLED', '1', 'lttng', '', d)}" PACKAGECONFIG[lttng] = "use_lttng=true,use_lttng=false,lttng-ust,lttng-tools lttng-modules babeltrace" From b7487e0870c09a836a8598df7d5f4386028f4c9b Mon Sep 17 00:00:00 2001 From: "sushovan.g" Date: Fri, 12 Aug 2022 17:21:18 +0530 Subject: [PATCH 0506/2022] ose: pulseaudio=35 audiod=41 :Release Notes: Implementation of Audio framework for video call :Detailed Notes: audiod: submissions/39..submissions/41 f5298b0 Static issue fix 3beda73 Implement subscription response for getMicVolume 01215d7 Implement muteMic API in audiod for video call fb4c4ab Implement getMicVolume API 236186e Implement setMicVolume API b18717a Implement /listSupportedDevices API pulseaudio : submissions/34..submissions/35 c7baca115 Fix source routing for usb mic ad1d1a25a Added setMicVolume for video call 88aad40f3 Initialise multiple usb sinks and sources :Testing Performed: Testing details mentioned in the CCC ticket :QA Notes: NA :Issues Addressed: [WRO-10387] CCC: pulseaudio=35 audiod=41 [WRO-6941] implement setMicVolume API in pulseaudio module [WRO-9444] Implement subscription response and pulseaudio changes [WRO-7905] Implement micMute in audiod module [WRO-7901] Implement getMicVolume API in audiod [WRO-7894] Implement setMicVolume in audiod module [WRO-8645] Implementation of get Audio Output and Input device list Change-Id: I8463f53496771b2528babcf8c20a1eee0c911eb7 --- meta-webos/recipes-multimedia/audiod/audiod.bb | 2 +- .../recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-multimedia/audiod/audiod.bb b/meta-webos/recipes-multimedia/audiod/audiod.bb index 762242c39..47021d899 100644 --- a/meta-webos/recipes-multimedia/audiod/audiod.bb +++ b/meta-webos/recipes-multimedia/audiod/audiod.bb @@ -24,7 +24,7 @@ RDEPENDS:${PN} = "\ pulseaudio-server \ " -WEBOS_VERSION = "1.0.0-39_cf3bd1c9fe590040353b8049b9c73235dee74432" +WEBOS_VERSION = "1.0.0-41_bb9de6eab097531306be7267f12532f3c6eed322" PR = "r31" inherit webos_component diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend index d21da8e72..c982070ad 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend +++ b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend @@ -9,7 +9,7 @@ DEPENDS:remove = "libatomic-ops" DEPENDS += "pmloglib" -WEBOS_VERSION = "15.0-34_6e214e382862fb6288b3f7ae59f25893cb0c2810" +WEBOS_VERSION = "15.0-35_8405356686809e02fec2e2923662abf7e93f85e7" EXTENDPRAUTO:append = "webos1" inherit webos_enhanced_submissions From ebf4aadba04664331527725a6260229b8dbfca90 Mon Sep 17 00:00:00 2001 From: Muniraju Date: Thu, 18 Aug 2022 10:23:53 +0530 Subject: [PATCH 0507/2022] com.webos.app.enactbrowser=57 :Release Notes: Fix popup reappear issue :Detailed Notes: com.webos.app.enactbrowser: submissions/56..submissions/57 428b039 Fixed popup reappears issue :Testing Performed: Please check CCC tickets. :QA Notes: NA :Issues Addressed: [WRO-10693] CCC: com.webos.app.enactbrowser=57 [WRO-9959] [OSE-RPi4]: Pop-up reappears and closes when tapped on YES Change-Id: If7a5a925a90337702853bb727cdd5a6810cb44c5 --- .../com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb index a1c9f7fd1..d5af3fd16 100644 --- a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb +++ b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=72b3e3cef46e5ab3e175e5b515dc3b18 \ " -WEBOS_VERSION = "1.0.0-56_98d6d8d3a1506a92b482001a5b1aba298520e29e" +WEBOS_VERSION = "1.0.0-57_882870d4ae1dcb9a4b98851d803e5daadd42e028" PR = "r16" inherit webos_public_repo From 771d89c6dbd16035b697d65942bdb9d3bbd24ef6 Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Thu, 11 Aug 2022 21:43:27 +0900 Subject: [PATCH 0508/2022] webos_qmllint.bbclass: update qmllint options :Release Notes: Fix build error with latest Qt6 :Detailed Notes: Separate qmllint option according to Qt version :Testing Performed: See the CCC jira ticket :QA Notes: :Issues Addressed: [WRO-10677] CCC: webos_qmllint.bbclass: update qmllint options Change-Id: I74f221483bb5ccd22e9bf6c6591fd991bc6633fe --- meta-webos/classes/webos_qmllint.bbclass | 76 ++++++++++++++++++------ 1 file changed, 59 insertions(+), 17 deletions(-) diff --git a/meta-webos/classes/webos_qmllint.bbclass b/meta-webos/classes/webos_qmllint.bbclass index 5e4f97795..914a5fd61 100644 --- a/meta-webos/classes/webos_qmllint.bbclass +++ b/meta-webos/classes/webos_qmllint.bbclass @@ -10,21 +10,63 @@ inherit qt6-paths WEBOS_QMLLINT_EXTRA_VALIDATION ?= "0" WEBOS_QMLLINT_ERROR_ON_WARNING ?= "0" WEBOS_QMLLINT_ERROR_LOG ?= "${T}/qmllint_error.log" -WEBOS_QMLLINT_OPTIONS ?= "${@ ' \ - --alias info \ - --deprecated info \ - --import info \ - --inheritance-cycle info \ - --multiline-strings info \ - --property info \ - --required info \ - --signal info \ - --type info \ - --unqualified info \ - --unused-imports info \ - --with info \ - -I ${STAGING_DIR_NATIVE}${OE_QMAKE_PATH_QML}' \ - if d.getVar('QT_VERSION', True) != '5' else '' }" +WEBOS_QMLLINT_OPTIONS ?= "" + +get_qmllint_options() { + local options="" + if [ "${WEBOS_QMLLINT_OPTIONS}" = "" ]; then + if [ "${QT_VERSION}" = "5" ]; then + options="" + else + version=$(${STAGING_DIR_NATIVE}${OE_QMAKE_PATH_QT_BINS}/qmllint -v | awk '{print $2}') + version_check=$(echo "${version}\n6.5.0" | sort -V | head -n 1) + if [ "${version_check}" != "6.5.0" ]; then + # older than 6.5.0 + options=" \ + --alias info \ + --deprecated info \ + --import info \ + --inheritance-cycle info \ + --multiline-strings info \ + --property info \ + --required info \ + --signal info \ + --type info \ + --unqualified info \ + --unused-imports info \ + --with info \ + -I ${STAGING_DIR_NATIVE}${OE_QMAKE_PATH_QML} \ + " + else + options=" \ + --alias-cycle info \ + --deprecated info \ + --import info \ + --incompatible-type info \ + --inheritance-cycle info \ + --multiline-strings info \ + --missing-property info \ + --missing-type info \ + --non-list-property info \ + --prefixed-import-type info \ + --read-only-property info \ + --required info \ + --restricted-type info \ + --signal-handler-parameters info \ + --unqualified info \ + --unresolved-alias info \ + --unresolved-type info \ + --unused-imports info \ + --with info \ + -I ${STAGING_DIR_NATIVE}${OE_QMAKE_PATH_QML} \ + " + fi + fi + else + options="${WEBOS_QMLLINT_OPTIONS}" + fi + echo "${options}" +} do_compile:prepend () { bbnote "Checking QML syntax error and problematic pattern (Step 1): .qml or .js files stored as qresource" @@ -33,7 +75,7 @@ do_compile:prepend () { local _dirname_=$(dirname $qrc) ${STAGING_BINDIR_NATIVE}/xmllint --xpath '//RCC/qresource/file' $qrc | sed 's///g' | sed 's/<\/file>/\n/g' | grep -E "*.qml$|*.js$" | while read file; do if [ -s "${_dirname_}/${file}" ]; then - ${STAGING_DIR_NATIVE}${OE_QMAKE_PATH_QT_BINS}/qmllint "${_dirname_}/${file}" ${WEBOS_QMLLINT_OPTIONS} \ + ${STAGING_DIR_NATIVE}${OE_QMAKE_PATH_QT_BINS}/qmllint "${_dirname_}/${file}" $(get_qmllint_options) \ || echo "Found syntax error in ${_dirname_}/${file}" >> ${WEBOS_QMLLINT_ERROR_LOG} if [ "${WEBOS_QMLLINT_EXTRA_VALIDATION}" = "1" ]; then PATH=${STAGING_BINDIR_NATIVE}/python3-native:${PATH} \ @@ -54,7 +96,7 @@ do_install:append () { bbnote "Checking QML syntax error and problematic pattern (Step 2): .qml or .js files to be installed" rm -f ${WEBOS_QMLLINT_ERROR_LOG} find ${D} -type f -not -empty -name "*.qml" -o -name "*.js" | while read file; do - ${STAGING_DIR_NATIVE}${OE_QMAKE_PATH_QT_BINS}/qmllint "${file}" ${WEBOS_QMLLINT_OPTIONS} \ + ${STAGING_DIR_NATIVE}${OE_QMAKE_PATH_QT_BINS}/qmllint "${file}" $(get_qmllint_options) \ || echo "Found syntax error in ${file}" >> ${WEBOS_QMLLINT_ERROR_LOG} if [ "${WEBOS_QMLLINT_EXTRA_VALIDATION}" = "1" ]; then PATH=${STAGING_BINDIR_NATIVE}/python3-native:${PATH} \ From e9febcf82e919dd818d78a2f26437e2c9259dd55 Mon Sep 17 00:00:00 2001 From: Jaeyoon Jung Date: Tue, 16 Aug 2022 15:01:54 +0900 Subject: [PATCH 0509/2022] maliit-framework-webos=100 :Release Notes: Fix build error with Qt6 dev branch :Detailed Notes: maliit-framework-webos: submissions/99..submissions/100 ac36e9e Fix potential build error :Testing Performed: See the CCC jira ticket :QA Notes: :Issues Addressed: [WRO-10677] CCC: maliit-framework-webos=100 Change-Id: I39ddfe182f3dcbafe22b0c1eb79d8476a81216e4 --- .../maliit-framework-webos/maliit-framework-webos.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb b/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb index 671d4f0b9..eab039d50 100644 --- a/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb +++ b/meta-webos/recipes-webos/maliit-framework-webos/maliit-framework-webos.bb @@ -15,7 +15,7 @@ RDEPENDS:${PN} = "qtbase-plugins configd" PACKAGECONFIG[libim] = "CONFIG+=enable-libim,CONFIG-=enable-libim,libim" -WEBOS_VERSION = "0.99.0+20-99_27834567bb88cef1a1c0a09de8390debd266d8f8" +WEBOS_VERSION = "0.99.0+20-100_9e32d184140f76107b3be5cb2faff9878de5a117" PR = "r34" inherit webos_daemon From 3ed1da414fae67221b9ec3dc5c4a8563c872add3 Mon Sep 17 00:00:00 2001 From: JeongBong Seo Date: Fri, 12 Aug 2022 16:40:30 +0900 Subject: [PATCH 0510/2022] base-files=webos15 webos-initscripts=86 :Release Notes: Set the db8datadir permission 755 rather than 700 Fix a prepare-system-dirs issue on emulator without serial setting :Detailed Notes: base-files: webos14..webos15 - Move db8datadir to 755 After we moved the unifiedsearch service as non-Root, it's not possible to access /var/db/... on the emulator. There is no problem on the RPI4 because of the db directory is created on runtime due to the ostree folder structure. webos-initscripts: submissions/85..submissions/86 Fix the prepare-system-dirs service file :Testing Performed: Build and runtime tested :QA Notes: N/A :Issues Addressed: [WRO-10543] CCC: base-files=webos15 webos-initscripts=86 [WRO-10169] [OSE Emulator] Searched key app is not displaying in the terminal [WRO-10194] [OSE Emulator] 1 loaded units listed is displaying. Change-Id: Id600b860e826e56561e1422358be6493e3273969 --- meta-webos/recipes-core/base-files/base-files_3.0.14.bbappend | 4 ++-- meta-webos/recipes-core/initscripts/webos-initscripts.bb | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-core/base-files/base-files_3.0.14.bbappend b/meta-webos/recipes-core/base-files/base-files_3.0.14.bbappend index 119095770..3f1ba6fab 100644 --- a/meta-webos/recipes-core/base-files/base-files_3.0.14.bbappend +++ b/meta-webos/recipes-core/base-files/base-files_3.0.14.bbappend @@ -6,15 +6,15 @@ inherit webos_filesystem_paths inherit webos_machine_impl_dep inherit webos_prerelease_dep -EXTENDPRAUTO:append = "webos14" +EXTENDPRAUTO:append = "webos15" dirs700 = " \ - ${webos_db8datadir} \ ${webos_db8datadir}/temp \ ${webos_db8mediadir} \ " dirs755 += " \ + ${webos_db8datadir} \ ${webos_cryptofsdir} \ ${webos_preferencesdir} \ ${webos_optdir} \ diff --git a/meta-webos/recipes-core/initscripts/webos-initscripts.bb b/meta-webos/recipes-core/initscripts/webos-initscripts.bb index 15f0ffe71..d0269d337 100644 --- a/meta-webos/recipes-core/initscripts/webos-initscripts.bb +++ b/meta-webos/recipes-core/initscripts/webos-initscripts.bb @@ -19,7 +19,7 @@ RDEPENDS:${PN} = "${VIRTUAL-RUNTIME_init_manager} ${VIRTUAL-RUNTIME_bash} python PROVIDES = "initscripts" RPROVIDES:${PN} = "initscripts initd-functions" -WEBOS_VERSION = "3.0.0-85_6c207ca832afc5e7fd79bf35ca0014ccc3d773c5" +WEBOS_VERSION = "3.0.0-86_47aa729e1026c96365d48692e937150e6b7d5eaa" PR = "r17" inherit webos_component From 7e4005ddb31b9b3cca47b4f26bf5877ffdffff1b Mon Sep 17 00:00:00 2001 From: "karthick.sundaram" Date: Tue, 23 Aug 2022 08:18:19 +0530 Subject: [PATCH 0511/2022] ose: webruntime_91=25 wam=63-r49 :Release Notes: Bug Fixes for suspend/resume regression issue. :Detailed Notes: webruntime_91: submissions/24..submissions/25 44e93a4bdf fixup! [op][n_upsable][media] Fix suspend/resume with WebMediaPlayerImpl wam: submissions/62..submissions/63 13faf6c [op][n_upsable][media] Pass "enableBackgroundRun" appinfo property 38ed089 WebView: Fix build with -Og or -O0 46515bf Fix build with gcc-11 wam: r48..r49 - Removed build fix patch files, since the changes are merged to wam source code :Testing Performed: CCC testing :QA Notes: N/A :Issues Addressed: [WRO-10884] CCC: webruntime_91=25 wam=63-r49 [WRO-10156] [OSE -RPI4]:Audio not played via BT Headset after launching Test redirection app [WRO-8991] [OSE-RPi4] : Youtube video is still playing after launching the bareapp [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: Ic3b3ccb734a55304c88b5f898a78e456f4cfa909 --- .../recipes-webos/chromium/webruntime-repo_91.inc | 2 +- meta-webos/recipes-webos/wam/wam.bb | 11 +++-------- 2 files changed, 4 insertions(+), 9 deletions(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc index 36ceea489..d42de811f 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=c31f1ae166739be9ca186deacf4b32e4" WEBOS_REPO_NAME = "chromium91" -WEBOS_VERSION = "91.0.4472.114-24_7aad03b7da8c7569c17ed1064b1aa793a15b8ed0" +WEBOS_VERSION = "91.0.4472.114-25_dd304331ccf057e6329745d8272bab9a6ffc1e32" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" diff --git a/meta-webos/recipes-webos/wam/wam.bb b/meta-webos/recipes-webos/wam/wam.bb index fb13178f1..7982fbc2a 100644 --- a/meta-webos/recipes-webos/wam/wam.bb +++ b/meta-webos/recipes-webos/wam/wam.bb @@ -18,8 +18,8 @@ RDEPENDS:${PN} += "util-linux" VIRTUAL-RUNTIME_cpushareholder ?= "cpushareholder-stub" RDEPENDS:${PN} += "${VIRTUAL-RUNTIME_cpushareholder}" -WEBOS_VERSION = "1.0.2-62_95556b20926075f24bc833ab4993346c60608f5d" -PR = "r48" +WEBOS_VERSION = "1.0.2-63_b33aa2ebce1e121d1a48433a8aeaf89318d2dfd1" +PR = "r49" WAM_BUILD_SYSTEM = "webos_qmake6" WAM_BUILD_SYSTEM:webos = "webos_cmake" @@ -36,12 +36,7 @@ inherit webos_public_repo WAM_DATA_DIR = "${webos_execstatedir}/${BPN}" -# http://gpro.lge.com/c/webosose/wam/+/332989 Fix build with gcc-11 -# http://gpro.lge.com/c/webosose/wam/+/332990 WebView: Fix build with -Og or -O0 -SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE} \ - file://0001-Fix-build-with-gcc-11.patch \ - file://0002-WebView-Fix-build-with-Og-or-O0.patch \ -" +SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" From dcef4e99ef01bbf8fbd0a381484ff5fc33f8fd6e Mon Sep 17 00:00:00 2001 From: Muniraju Date: Tue, 23 Aug 2022 15:50:49 +0530 Subject: [PATCH 0512/2022] ose: com.webos.app.videocall=3 :Release Notes: Change webex launch URL to "https://signin.webex.com/join" :Detailed Notes: com.webos.app.videocall: submissions/2..submissions/3 9e93ab8 Changed webex launch URL :Testing Performed: Please check CCC tickets. :QA Notes: NA :Issues Addressed: [WRO-10911] CCC: com.webos.app.videocall=3 [WRO-10907] Change webex launch URL Change-Id: I2d932dad59abd822402d875cdd12db3b00e4ee87 --- .../com.webos.app.videocall/com.webos.app.videocall.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.videocall/com.webos.app.videocall.bb b/meta-webos/recipes-webos/com.webos.app.videocall/com.webos.app.videocall.bb index 883e3f556..9661a9535 100644 --- a/meta-webos/recipes-webos/com.webos.app.videocall/com.webos.app.videocall.bb +++ b/meta-webos/recipes-webos/com.webos.app.videocall/com.webos.app.videocall.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=0ec407cd2d4a192e0c60888f4ec66dd7 \ " -WEBOS_VERSION = "0.0.1-2_74b3bacbd9ae4d5a8daba53425a109e3de4e3458" +WEBOS_VERSION = "0.0.1-3_0fe5db4c3e742c3ccc87721c3e8ad29100fd48b9" PR = "r0" From b1b62d253dfabd6fd654a26c0783e4cff9ec49e7 Mon Sep 17 00:00:00 2001 From: "milan.shah" Date: Fri, 28 Jan 2022 18:42:19 +0530 Subject: [PATCH 0513/2022] packagegroup-webos-devel: update RDEPENDS gator-mod=r5.0 gator=r5.5 :Release Notes: Modify Gator to build gator daemon only. Add new recipe to build gator kernel module only. Enable Gator as Performance Analyzer for raspberrypi4-64. :Detailed Notes: Cleanup recipe and modify to slightly better version, now it just builds Daemon binary and the rest will be handled by a new gator-mod recipe to build gator kernel module. Imported below patches from existing gator daemon recipe. - Mali_events_disable.patch - 0002-gator_main.c-gator_backtrace.c-fix-build-with-linux-.patch Added below new patches to mitigate compilation issues to build gator module. - 0001-gator-mod-makefile-for-yocto.patch to enable use of makefile targets - 0003-gator-Make-the-module-compatilble-with-kernel-4.19.patch tomitigate below error ./git/driver/gator_main.c:1399:41: error: initialization of 'struct tracepoint * const*' from incompatible pointer type 'const tracepoint_ptr_t *' {aka 'const int *'} [-Werror=incompatible-pointer-types] 1399 | struct tracepoint * const * begin = tp_mod->mod->tracepoints_ptrs; | ^~~~~~ ./git/driver/gator_main.c:1400:39: error: initialization of 'struct tracepoint * const*' from incompatible pointer type 'const tracepoint_ptr_t *' {aka 'const int *'} [-Werror=incompatible-pointer-types] 1400 | struct tracepoint * const * end = tp_mod->mod->tracepoints_ptrs + tp_mod->mod->num_tracepoints; | Nobody will probably use ARM gator on x86 so added support for Gator profiling for webOS Platform on devel-image for raspberrypi4 and raspberrypi4-64 machines only and restricted qemux86* machines. :Testing Performed: Refer WRO-8504 for more details. :QA Notes: :Issues Addressed: [WRO-9236] CCC: packagegroup-webos-devel: update RDEPENDS gator-mod=r5.0 gator=r5.5 [WRO-8504] Support SCM activities - Gator feature Change-Id: Ic20ddbe8c51859cf0cc1215216dd5c2298b3542e --- .../packagegroup-webos-devel.bbappend | 9 +- .../gator/files/git/gcc-wrapper.py | 97 ------------------- .../0001-gator-mod-makefile-for-yocto.patch | 95 ++++++++++++++++++ ...r_backtrace.c-fix-build-with-linux-.patch} | 31 +++--- ...-module-compatilble-with-kernel-4.19.patch | 55 +++++++++++ .../Mali_events_disable.patch | 8 +- .../recipes-core/gator/gator-mod_git.bb | 43 ++++++++ meta-webos/recipes-core/gator/gator.inc | 12 +++ .../0001-disable-stripping-debug-info.patch | 6 +- meta-webos/recipes-core/gator/gator_git.bb | 39 ++------ 10 files changed, 240 insertions(+), 155 deletions(-) delete mode 100644 meta-webos/recipes-core/gator/files/git/gcc-wrapper.py create mode 100644 meta-webos/recipes-core/gator/gator-mod/0001-gator-mod-makefile-for-yocto.patch rename meta-webos/recipes-core/gator/{gator/0001-gator_main.c-gator_backtrace.c-fix-build-with-linux-.patch => gator-mod/0002-gator_main.c-gator_backtrace.c-fix-build-with-linux-.patch} (69%) create mode 100644 meta-webos/recipes-core/gator/gator-mod/0003-gator-Make-the-module-compatilble-with-kernel-4.19.patch rename meta-webos/recipes-core/gator/{files => gator-mod}/Mali_events_disable.patch (85%) create mode 100644 meta-webos/recipes-core/gator/gator-mod_git.bb create mode 100644 meta-webos/recipes-core/gator/gator.inc rename meta-webos/recipes-core/gator/{files => gator}/0001-disable-stripping-debug-info.patch (76%) diff --git a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-devel.bbappend b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-devel.bbappend index bcb82d46f..ede356a9b 100644 --- a/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-devel.bbappend +++ b/meta-webos-raspberrypi/recipes-core/packagegroups/packagegroup-webos-devel.bbappend @@ -1,10 +1,5 @@ # Copyright (c) 2020-2022 LG Electronics, Inc. -GATOR:raspberrypi4 = " \ +RDEPENDS:${PN}:append:rpi = " \ gator \ -" - -# Gator functionality cannot be verified on webOS rpi64 which cannot boot yet -GATOR:raspberrypi4-64 = "" - -RDEPENDS:${PN}:append:raspberrypi4 = "${GATOR}" +" \ No newline at end of file diff --git a/meta-webos/recipes-core/gator/files/git/gcc-wrapper.py b/meta-webos/recipes-core/gator/files/git/gcc-wrapper.py deleted file mode 100644 index 4e5e09f9d..000000000 --- a/meta-webos/recipes-core/gator/files/git/gcc-wrapper.py +++ /dev/null @@ -1,97 +0,0 @@ -#! /usr/bin/env python3 -# -*- coding: utf-8 -*- - -# Copyright (c) 2011-2017, The Linux Foundation. All rights reserved. -# -# Redistribution and use in source and binary forms, with or without -# modification, are permitted provided that the following conditions are met: -# * Redistributions of source code must retain the above copyright -# notice, this list of conditions and the following disclaimer. -# * Redistributions in binary form must reproduce the above copyright -# notice, this list of conditions and the following disclaimer in the -# documentation and/or other materials provided with the distribution. -# * Neither the name of The Linux Foundation nor -# the names of its contributors may be used to endorse or promote -# products derived from this software without specific prior written -# permission. -# -# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" -# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE -# IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -# NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR -# CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, -# EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, -# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; -# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, -# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF -# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - -# Invoke gcc, looking for warnings, and causing a failure if there are -# non-whitelisted warnings. - -from __future__ import print_function -import errno -import re -import os -import sys -import subprocess - -# Note that gcc uses unicode, which may depend on the locale. TODO: -# force LANG to be set to en_US.UTF-8 to get consistent warnings. - -allowed_warnings = set([ - "compiler.h:172" - ]) - -# Capture the name of the object file, can find it. -ofile = None - -warning_re = re.compile(r'''(.*/|)([^/]+\.[a-z]+:\d+):(\d+:)? warning:''') -def interpret_warning(line): - """Decode the message from gcc. The messages we care about have a filename, and a warning""" - line = line.decode("utf-8") - line = line.rstrip('\n') - m = warning_re.match(line) - if m and m.group(2) not in allowed_warnings: - print("error, forbidden warning:", m.group(2), file=sys.stderr) - - # If there is a warning, remove any object if it exists. - if ofile: - try: - os.remove(ofile) - except OSError: - pass - sys.exit(1) - -def run_gcc(): - args = sys.argv[1:] - # Look for -o - try: - i = args.index('-o') - global ofile - ofile = args[i+1] - except (ValueError, IndexError): - pass - - compiler = sys.argv[0] - - try: - proc = subprocess.Popen(args, stderr=subprocess.PIPE) - for line in proc.stderr: - print(line, - interpret_warning(line), file=sys.stderr) - - result = proc.wait() - except OSError as e: - result = e.errno - if result == errno.ENOENT: - print(args[0] + ':', e.strerror, file=sys.stderr) - print('Is your PATH set correctly?', file=sys.stderr) - else: - print(' '.join(args), str(e), file=sys.stderr) - return result - -if __name__ == '__main__': - status = run_gcc() - sys.exit(status) diff --git a/meta-webos/recipes-core/gator/gator-mod/0001-gator-mod-makefile-for-yocto.patch b/meta-webos/recipes-core/gator/gator-mod/0001-gator-mod-makefile-for-yocto.patch new file mode 100644 index 000000000..cc4debadb --- /dev/null +++ b/meta-webos/recipes-core/gator/gator-mod/0001-gator-mod-makefile-for-yocto.patch @@ -0,0 +1,95 @@ +From 215332793335f6db8fa47e99797adc7488175802 Mon Sep 17 00:00:00 2001 +From: "milan.shah" +Date: Wed, 12 Jan 2022 11:59:16 +0000 +Subject: [PATCH 3/3] gator: modified driver Makefile to allow compilation + +Signed-off-by: milan.shah +--- + Makefile | 46 ++++++++++++++++++++++++++++++++-------------- + 1 file changed, 32 insertions(+), 14 deletions(-) + +diff --git a/Makefile b/Makefile +index fff8603..088f67d 100644 +--- a/Makefile ++++ b/Makefile +@@ -1,10 +1,22 @@ +-ifneq ($(KERNELRELEASE),) ++#ifneq ($(KERNELRELEASE),) + + # Uncomment the following line to enable kernel stack unwinding within gator, or update gator_backtrace.c + # EXTRA_CFLAGS += -DGATOR_KERNEL_STACK_UNWINDING + ++TARGET = gator + CONFIG_GATOR ?= m +-obj-$(CONFIG_GATOR) := gator.o ++ ++$(TARGET)-objs := gator_main.o \ ++ gator_events_block.o \ ++ gator_events_irq.o \ ++ gator_events_meminfo.o \ ++ gator_events_mmapped.o \ ++ gator_events_net.o \ ++ gator_events_sched.o ++ ++obj-m := $(TARGET).o ++ ++SRC := $(shell pwd) + + gator-y := gator_main.o \ + gator_events_block.o \ +@@ -74,34 +86,40 @@ gator-additional-dependencies := $(obj)/generated_gator_src_md5.h + clean-files := generated_gator_src_md5.h + + # Should the original or new block_rq_complete API be used? +-OLD_BLOCK_RQ_COMPLETE := $(shell grep -A3 block_rq_complete $(srctree)/include/trace/events/block.h | grep nr_bytes -q; echo $$?) ++OLD_BLOCK_RQ_COMPLETE := $(shell grep -A3 block_rq_complete $(KERNEL_SRC)/include/trace/events/block.h | grep nr_bytes -q; echo $$?) + EXTRA_CFLAGS += -DOLD_BLOCK_RQ_COMPLETE=$(OLD_BLOCK_RQ_COMPLETE) + + gator-$(CONFIG_ARM) += gator_events_l2c-310.o + + gator-$(CONFIG_ARM64) += + +-$(obj)/gator_main.o: $(gator-additional-dependencies) ++#gator_main.o: $(gator-additional-dependencies) + + # Note, in the recipe below we use "cd $(srctree) && cd $(src)" rather than + # "cd $(srctree)/$(src)" because under DKMS $(src) is an absolute path, and we + # can't just use $(src) because for normal kernel builds this is relative to + # $(srctree) +-$(obj)/generated_gator_src_md5.h: $(wildcard $(src)/gator_*.h $(src)/gator_*.c $(src)/mali/*.h) +- @$($(quiet)chk_events.h) +- $(Q)cd $(srctree) && cd $(src) ; $(CONFIG_SHELL) -c "echo 'static char * gator_src_md5 = \"'\`ls gator_*.c gator_*.h mali/*.h | grep -Ev '^(generated_gator_src_md5\.h|gator\.mod\.c)$$' | LC_ALL=C sort | xargs cat | md5sum | cut -b 1-32\`'\";'" > $(abspath $@) ++#$(obj)/generated_gator_src_md5.h: $(wildcard $(src)/gator_*.h $(src)/gator_*.c $(src)/mali/*.h) ++# @$($(quiet)chk_events.h) ++# $(Q)cd $(srctree) && cd $(src) ; $(CONFIG_SHELL) -c "echo 'static char * gator_src_md5 = \"'\`ls gator_*.c gator_*.h mali/*.h | grep -Ev '^(generated_gator_src_md5\.h|gator\.mod\.c)$$' | LC_ALL=C sort | xargs cat | md5sum | cut -b 1-32\`'\";'" > $(abspath $@) + +-else ++#else ++ ++#all: ++# @echo ++# @echo "usage:" ++# @echo " make -C M=\`pwd\` ARCH=arm CROSS_COMPILE=<...> modules" ++# @echo ++# $(error) + + all: +- @echo +- @echo "usage:" +- @echo " make -C M=\`pwd\` ARCH=arm CROSS_COMPILE=<...> modules" +- @echo +- $(error) ++ $(MAKE) -C $(KERNEL_SRC) M=$(PWD) ++ ++modules_install: ++ $(MAKE) -C $(KERNEL_SRC) M=$(PWD) modules_install + + clean: + rm -f *.o .*.cmd generated_gator_src_md5.h modules.order Module.symvers gator.ko gator.mod.c + rm -rf .tmp_versions + +-endif ++#endif +-- +2.17.1 + diff --git a/meta-webos/recipes-core/gator/gator/0001-gator_main.c-gator_backtrace.c-fix-build-with-linux-.patch b/meta-webos/recipes-core/gator/gator-mod/0002-gator_main.c-gator_backtrace.c-fix-build-with-linux-.patch similarity index 69% rename from meta-webos/recipes-core/gator/gator/0001-gator_main.c-gator_backtrace.c-fix-build-with-linux-.patch rename to meta-webos/recipes-core/gator/gator-mod/0002-gator_main.c-gator_backtrace.c-fix-build-with-linux-.patch index 6f43bf83e..975a69ca7 100644 --- a/meta-webos/recipes-core/gator/gator/0001-gator_main.c-gator_backtrace.c-fix-build-with-linux-.patch +++ b/meta-webos/recipes-core/gator/gator-mod/0002-gator_main.c-gator_backtrace.c-fix-build-with-linux-.patch @@ -1,19 +1,19 @@ -From 80444adae0a649b50f62b80c0c5d2baaf85d039c Mon Sep 17 00:00:00 2001 +From a48dfeeb3e095adb8533314983cfa76ff2719170 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 18 Aug 2020 03:28:32 -0700 -Subject: [PATCH] gator_main.c, gator_backtrace.c: fix build with linux-5.0 and - newer +Subject: [PATCH 2/3] gator_main.c, gator_backtrace.c: fix build with linux-5.0 + and newer Signed-off-by: Martin Jansa --- - driver/gator_backtrace.c | 5 +++++ - driver/gator_main.c | 8 +++++++- + gator_backtrace.c | 5 +++++ + gator_main.c | 8 +++++++- 2 files changed, 12 insertions(+), 1 deletion(-) -diff --git a/driver/gator_backtrace.c b/driver/gator_backtrace.c +diff --git a/gator_backtrace.c b/gator_backtrace.c index 92b2860..37c1dc3 100644 ---- a/driver/gator_backtrace.c -+++ b/driver/gator_backtrace.c +--- a/gator_backtrace.c ++++ b/gator_backtrace.c @@ -257,7 +257,12 @@ static void arm_backtrace_eabi(int cpu, struct pt_regs *const regs, unsigned int return; @@ -27,11 +27,11 @@ index 92b2860..37c1dc3 100644 __copy_from_user_inatomic(&bufcurr, curr, sizeof(struct stack_frame_eabi))) { return; } -diff --git a/driver/gator_main.c b/driver/gator_main.c -index a7506bd..43f15b8 100644 ---- a/driver/gator_main.c -+++ b/driver/gator_main.c -@@ -779,6 +779,9 @@ static void gator_summary(void) +diff --git a/gator_main.c b/gator_main.c +index 44c3cb2..66ef75d 100644 +--- a/gator_main.c ++++ b/gator_main.c +@@ -782,6 +782,9 @@ static void gator_summary(void) { u64 timestamp, uptime; struct timespec ts; @@ -41,7 +41,7 @@ index a7506bd..43f15b8 100644 char uname_buf[100]; snprintf(uname_buf, sizeof(uname_buf), "%s %s %s %s %s GNU/Linux", utsname()->sysname, utsname()->nodename, utsname()->release, utsname()->version, utsname()->machine); -@@ -797,8 +800,11 @@ static void gator_summary(void) +@@ -800,8 +803,11 @@ static void gator_summary(void) if (m2b) m2b(&ts); } @@ -54,3 +54,6 @@ index a7506bd..43f15b8 100644 #endif uptime = timespec_to_ns(&ts); +-- +2.17.1 + diff --git a/meta-webos/recipes-core/gator/gator-mod/0003-gator-Make-the-module-compatilble-with-kernel-4.19.patch b/meta-webos/recipes-core/gator/gator-mod/0003-gator-Make-the-module-compatilble-with-kernel-4.19.patch new file mode 100644 index 000000000..7fe4e6ede --- /dev/null +++ b/meta-webos/recipes-core/gator/gator-mod/0003-gator-Make-the-module-compatilble-with-kernel-4.19.patch @@ -0,0 +1,55 @@ +From 56c3f8b655b95f196af7f79bd9aa1f7f8457fea5 Mon Sep 17 00:00:00 2001 +From: Madhurkiran Harikrishnan +Date: Fri, 26 Apr 2019 17:24:16 -0700 +Subject: [PATCH 1/3] gator: Make the module compatilble with kernel >=4.19 + +Refer kernel patch 9c0be3f6, which fixes tracepoint array element size +mismatch. This patch leverages the same. + +Signed-off-by: Madhurkiran Harikrishnan +--- + gator_main.c | 13 +++++++++++++ + 1 file changed, 13 insertions(+) + +diff --git a/gator_main.c b/gator_main.c +index abe52ab..44c3cb2 100644 +--- a/gator_main.c ++++ b/gator_main.c +@@ -1393,21 +1393,34 @@ GATOR_TRACEPOINTS; + int gator_new_tracepoint_module(struct notifier_block * nb, unsigned long action, void * data) + { + struct tp_module * tp_mod = (struct tp_module *) data; ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0) ++ tracepoint_ptr_t * begin = tp_mod->mod->tracepoints_ptrs; ++ tracepoint_ptr_t * end = tp_mod->mod->tracepoints_ptrs + tp_mod->mod->num_tracepoints; ++#else + struct tracepoint * const * begin = tp_mod->mod->tracepoints_ptrs; + struct tracepoint * const * end = tp_mod->mod->tracepoints_ptrs + tp_mod->mod->num_tracepoints; ++#endif + + pr_debug("gator: new tracepoint module registered %s\n", tp_mod->mod->name); + + if (action == MODULE_STATE_COMING) + { + for (; begin != end; ++begin) { ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0) ++ gator_save_tracepoint(tracepoint_ptr_deref(begin), NULL); ++#else + gator_save_tracepoint(*begin, NULL); ++#endif + } + } + else if (action == MODULE_STATE_GOING) + { + for (; begin != end; ++begin) { ++#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0) ++ gator_unsave_tracepoint(tracepoint_ptr_deref(begin), NULL); ++#else + gator_unsave_tracepoint(*begin, NULL); ++#endif + } + } + else +-- +2.17.1 + diff --git a/meta-webos/recipes-core/gator/files/Mali_events_disable.patch b/meta-webos/recipes-core/gator/gator-mod/Mali_events_disable.patch similarity index 85% rename from meta-webos/recipes-core/gator/files/Mali_events_disable.patch rename to meta-webos/recipes-core/gator/gator-mod/Mali_events_disable.patch index f263bf00c..18370d3d8 100644 --- a/meta-webos/recipes-core/gator/files/Mali_events_disable.patch +++ b/meta-webos/recipes-core/gator/gator-mod/Mali_events_disable.patch @@ -4,13 +4,13 @@ Date: Tue, 9 Jun 2020 15:13:46 +0530 Subject: [PATCH] malisupport_disable_from_gator --- - driver/gator_main.c | 3 --- + gator_main.c | 3 --- 1 file changed, 3 deletions(-) -diff --git a/driver/gator_main.c b/driver/gator_main.c +diff --git a/gator_main.c b/gator_main.c index abe52ab..a7506bd 100644 ---- a/driver/gator_main.c -+++ b/driver/gator_main.c +--- a/gator_main.c ++++ b/gator_main.c @@ -234,9 +234,6 @@ static DEFINE_PER_CPU(u64, gator_buffer_commit_time); GATOR_EVENT(gator_events_ccn504_init) \ GATOR_EVENT(gator_events_irq_init) \ diff --git a/meta-webos/recipes-core/gator/gator-mod_git.bb b/meta-webos/recipes-core/gator/gator-mod_git.bb new file mode 100644 index 000000000..fbb828d31 --- /dev/null +++ b/meta-webos/recipes-core/gator/gator-mod_git.bb @@ -0,0 +1,43 @@ +# Imported from +# https://github.com/kratsg/meta-l1calo/blob/master/recipes-kernel/gator/gator_git.bb + +require gator.inc + +SUMMARY = "DS-5 Gator Kernel Module" +DESCRIPTION = "Target-side kernel module gathering data for ARM Streamline Performance Analyzer." + +PR = "${INC_PR}.0" + +SRC_URI += " \ + file://0001-gator-mod-makefile-for-yocto.patch \ + file://0002-gator_main.c-gator_backtrace.c-fix-build-with-linux-.patch \ + file://0003-gator-Make-the-module-compatilble-with-kernel-4.19.patch \ + file://Mali_events_disable.patch \ +" + +S = "${WORKDIR}/git/driver" + +inherit module + +#The original gator module Makefile generates an include file that contains the md5sum of all source files. +#After modifying the makefile to make it work with the Yocto build system, this doesn't work anymore. +#Generate it in the bitbake recipe instead. +do_compile:prepend() { + GATOR_SRC_FILES=$(cd ${S} && ls *.c *.h mali/*.h | grep -Ev '^(gator_src_md5\.h|gator\.mod\.c)$$' | LC_ALL=C sort ) + GATOR_SRC_FILES_MD5=$(echo ${GATOR_SRC_FILES} | xargs cat | md5sum | cut -b 1-32 ) + #echo "GATOR_SRC_FILES: ${GATOR_SRC_FILES}" + #echo "GATOR_SRC_FILES_MD5: ${GATOR_SRC_FILES_MD5}" + echo "static char *gator_src_md5 = \"${GATOR_SRC_FILES_MD5}\";" > ${S}/generated_gator_src_md5.h +} + +INHIBIT_PACKAGE_STRIP = "1" + +EXTRA_OEMAKE:append:task-compile = " PYTHON='python3' CONFIG_GATOR=m" +EXTRA_OEMAKE:append:task-install = " -C ${STAGING_KERNEL_DIR} M=${S}" + +# The inherit of module.bbclass will automatically name module packages with +# "kernel-module-" prefix as required by the oe-core build environment. +RPROVIDES:${PN} += "kernel-module-gator" + +# Load the Kernel Module on Boot as it is required by gatord when started +KERNEL_MODULE_AUTOLOAD += "gator" diff --git a/meta-webos/recipes-core/gator/gator.inc b/meta-webos/recipes-core/gator/gator.inc new file mode 100644 index 000000000..a18657f42 --- /dev/null +++ b/meta-webos/recipes-core/gator/gator.inc @@ -0,0 +1,12 @@ +# Based on https://github.com/kratsg/meta-l1calo/blob/master/recipes-kernel/gator/gator_git.bb +# and modified heavily, including split into separate recipe for daemon +# and kernel module + +LICENSE = "GPL-2.0-only" +LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263" + +INC_PR = "r5" + +SRC_URI = "git://github.com/ARM-software/gator.git;protocol=https;branch=main" +SRCREV = "3ff46fedd4d097813156069edab9704cc65e0a42" +PV = "6.7+git${SRCPV}" diff --git a/meta-webos/recipes-core/gator/files/0001-disable-stripping-debug-info.patch b/meta-webos/recipes-core/gator/gator/0001-disable-stripping-debug-info.patch similarity index 76% rename from meta-webos/recipes-core/gator/files/0001-disable-stripping-debug-info.patch rename to meta-webos/recipes-core/gator/gator/0001-disable-stripping-debug-info.patch index a084179c0..f73da6690 100644 --- a/meta-webos/recipes-core/gator/files/0001-disable-stripping-debug-info.patch +++ b/meta-webos/recipes-core/gator/gator/0001-disable-stripping-debug-info.patch @@ -1,7 +1,7 @@ -diff --git a/daemon/common.mk b/daemon/common.mk +diff --git a/common.mk b/common.mk index dfd912d..72e23f6 100644 ---- a/daemon/common.mk -+++ b/daemon/common.mk +--- a/common.mk ++++ b/common.mk @@ -15,8 +15,6 @@ ifeq ($(shell expr `$(CXX) -dumpversion | cut -f1 -d.` \>= 5),1) CXXFLAGS += -fno-sized-deallocation endif diff --git a/meta-webos/recipes-core/gator/gator_git.bb b/meta-webos/recipes-core/gator/gator_git.bb index c2badbe8f..0787dc10b 100644 --- a/meta-webos/recipes-core/gator/gator_git.bb +++ b/meta-webos/recipes-core/gator/gator_git.bb @@ -1,55 +1,34 @@ # Imported from # https://github.com/kratsg/meta-l1calo/blob/master/recipes-kernel/gator/gator_git.bb +require gator.inc + SUMMARY = "DS-5 Gator daemon" DESCRIPTION = "Target-side daemon gathering data for ARM Streamline Performance Analyzer." -LICENSE = "GPL-2.0-only" -LIC_FILES_CHKSUM = "file://driver/COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263" +PR = "${INC_PR}.5" -SRCREV = "3ff46fedd4d097813156069edab9704cc65e0a42" -PV = "6.7+git${SRCPV}" -PR = "r4" +RDEPENDS:${PN} += "kernel-module-gator" -SRC_URI = "git://github.com/ARM-software/gator.git;protocol=https;branch=main \ +SRC_URI += " \ file://0001-disable-stripping-debug-info.patch \ - file://0001-gator_main.c-gator_backtrace.c-fix-build-with-linux-.patch \ - file://Mali_events_disable.patch \ - file://git/gcc-wrapper.py \ " -S = "${WORKDIR}/git" - -inherit module +S = "${WORKDIR}/git/daemon" INHIBIT_PACKAGE_STRIP = "1" -# since "gator=r3,v6.9" commit was reverted, it's failing for e.g. x86 MACHINEs -COMPATIBLE_MACHINE = "^raspberrypi4$" -# But it also fails on aarch64 raspberrypi4-64 (which as raspberrypi4 in MACHINEOVERRIDES), so we need to explicitly disable it -COMPATIBLE_MACHINE:raspberrypi4-64 = "^$" - do_compile() { - unset LDFLAGS - export LDFLAGS='' # The regular makefile tries to be 'smart' by hardcoding ABI assumptions, let's use the clean makefile for everything. - cp ${S}/daemon/Makefile_aarch64 ${S}/daemon/Makefile - oe_runmake -C daemon CROSS_COMPILE=${TARGET_PREFIX} CC='${CC}' CXX='${CXX}' - - #Build gator.ko - #copy python3 compatible gcc-wrapper.py to kernel source - cp ${S}/gcc-wrapper.py ${STAGING_KERNEL_DIR}/scripts/ - oe_runmake -C ${STAGING_KERNEL_BUILDDIR} ARCH=${ARCH} PYTHON='python3' CONFIG_GATOR=m M=${S}/driver modules + cp ${S}/Makefile_aarch64 ${S}/Makefile + oe_runmake CROSS_COMPILE="${TARGET_PREFIX}" CC='${CC}' CXX='${CXX}' } do_install() { install -d ${D}${sbindir} - install -m 0755 ${S}/daemon/gatord ${D}${sbindir}/gatord - install -m 0755 ${S}/driver/gator.ko ${D}${sbindir}/gator.ko + install -m 0755 ${S}/gatord ${D}${sbindir}/gatord } FILES:${PN} = " \ ${sbindir}/gatord \ - ${sbindir}/gator.ko \ " -do_package_qa[noexec] = "1" From ddcd63ff0465e1a6a2b72c033f89555fd3cc8193 Mon Sep 17 00:00:00 2001 From: "sushovan.g" Date: Tue, 23 Aug 2022 11:27:57 +0530 Subject: [PATCH 0514/2022] ose: pulseaudio=36 audiod=42 :Release Notes: Fix static issues and USB device naming :Detailed Notes: audiod: submissions/41..submissions/42 edd227d Fix naming for multiple usb devices a273e5b [OSE] Fix static issues in AudioD pulseaudio : submissions/35..submissions/36 f6050799b Fix naming for usb devices :Testing Performed: Testing details mentioned in the CCC ticket :QA Notes: NA :Issues Addressed: [WRO-10901] CCC: pulseaudio=36 audiod=42 [WRO-10868] usb devices numbered 1,2 instead of 0,1 [CID-8990862] Uninitialized scalar field [CID-97322] Calling risky function Change-Id: I724765ff0c9ee1e58fd5ac626ca66e1c5470c7c2 --- meta-webos/recipes-multimedia/audiod/audiod.bb | 2 +- .../recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-multimedia/audiod/audiod.bb b/meta-webos/recipes-multimedia/audiod/audiod.bb index 47021d899..9494073b0 100644 --- a/meta-webos/recipes-multimedia/audiod/audiod.bb +++ b/meta-webos/recipes-multimedia/audiod/audiod.bb @@ -24,7 +24,7 @@ RDEPENDS:${PN} = "\ pulseaudio-server \ " -WEBOS_VERSION = "1.0.0-41_bb9de6eab097531306be7267f12532f3c6eed322" +WEBOS_VERSION = "1.0.0-42_6874de8cec7fa91ee42fd0c4ebb505c15f0c8854" PR = "r31" inherit webos_component diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend index c982070ad..7074e66a6 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend +++ b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend @@ -9,7 +9,7 @@ DEPENDS:remove = "libatomic-ops" DEPENDS += "pmloglib" -WEBOS_VERSION = "15.0-35_8405356686809e02fec2e2923662abf7e93f85e7" +WEBOS_VERSION = "15.0-36_746a1486177fdfc765a71196d4f109e83293ac1d" EXTENDPRAUTO:append = "webos1" inherit webos_enhanced_submissions From 88edbc6c1286ac9591b09665804cad875e1c27ac Mon Sep 17 00:00:00 2001 From: Muniraju Date: Tue, 23 Aug 2022 10:59:17 +0530 Subject: [PATCH 0515/2022] com.webos.app.camera=9 :Release Notes: Fix wrong message "Media file not exit" :Detailed Notes: com.webos.app.camera: submissions/8..submissions/9 27ccf47 Fixed text message issue :Testing Performed: Please check CCC tickets. :QA Notes: NA :Issues Addressed: [WRO-10877] CCC: com.webos.app.camera=9 [WRO-10698] [OSE-RPi4]: Media File not exit is displayed. Change-Id: Ib125dd59f721aa24f50d76adf9afd5a85e3dd921 --- .../recipes-webos/com.webos.app.camera/com.webos.app.camera.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb index 1daf8efee..a5e0806ab 100644 --- a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb +++ b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb @@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=3072ffcf5bdbbc376ed21c9d378d14d5 \ " -WEBOS_VERSION = "0.0.1-8_8939a2009fb96bb16236b59c95da3b14893c8c13" +WEBOS_VERSION = "0.0.1-9_ec3b488bed642a4e5538320237dbd8d23e18e014" PR = "r0" inherit webos_component From 15115d2d706f6b680f403cf462fbb09688dd5db6 Mon Sep 17 00:00:00 2001 From: Hyunjae Shin Date: Thu, 25 Aug 2022 09:34:49 +0900 Subject: [PATCH 0516/2022] webos.conf: Release webOS OSE v2.18.0 :Release Notes: Set software version as webOS OSE v2.18.0 :Detailed Notes: Set WEBOS_DISTRO_VERSION_MINOR to "18.0" :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: N/A Change-Id: Id65ecf88087489392217ff59b6dd35689632141d --- meta-webos/conf/distro/webos.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/conf/distro/webos.conf b/meta-webos/conf/distro/webos.conf index d19a1c802..322c5547e 100644 --- a/meta-webos/conf/distro/webos.conf +++ b/meta-webos/conf/distro/webos.conf @@ -13,7 +13,7 @@ WEBOS_DISTRO_BUILD_CODENAME = "master" # g - github WEBOS_DISTRO_VERSION_MAJOR = "2" -WEBOS_DISTRO_VERSION_MINOR = "17.0" +WEBOS_DISTRO_VERSION_MINOR = "18.0" WEBOS_DISTRO_VERSION_TYPE = "g" DISTRO_VERSION = "${WEBOS_DISTRO_VERSION_MAJOR}.${WEBOS_DISTRO_VERSION_MINOR}.${WEBOS_DISTRO_VERSION_TYPE}" From 4217e6f6ba7b8a07632bf3c74591d88cdc0102cd Mon Sep 17 00:00:00 2001 From: "jonghen.han" Date: Fri, 12 Aug 2022 19:14:41 +0900 Subject: [PATCH 0517/2022] org.ocf.webossample.{occlientbasicops=r7 ocserverbasicops=r7} packagegroup-webos-iot=r1 packagegroup-webos-extended=r42 :Release Notes: Add occlientbasicops and ocserverbasicops binaries in x86-64 image :Detailed Notes: org.ocf.webossample.occlientbasicops: r6..r7 Add occlientbasicops binaries in x86-64image org.ocf.webossample.ocserverbasicops: r6..r7 Add ocserverbasicops binaries in x86-64image :Testing Performed: Please refer to WRO-10980 :QA Notes: :Issues Addressed: [WRO-10980] CCC: org.ocf.webossample.{occlientbasicops=r7 ocserverbasicops=r7} packagegroup-webos-iot=r1 packagegroup-webos-extended=r42 [WRO-9062] [webOS OSE Emulator]: "not found" displayed for "./ocserverbasicops" Change-Id: Ic8cdcf2dac859a7c0ea22b641e958d6bb130d5af --- .../packagegroups/packagegroup-webos-iot.bb | 3 +-- .../packagegroup-webos-extended.bb | 3 +-- .../org.ocf.webossample.occlientbasicops.bb | 4 ++- .../0002-Add-os_arch-x86_64.patch | 25 +++++++++++++++++++ .../org.ocf.webossample.ocserverbasicops.bb | 4 ++- .../0002-Add-os_arch-x86_64.patch | 25 +++++++++++++++++++ 6 files changed, 58 insertions(+), 6 deletions(-) create mode 100644 meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops/0002-Add-os_arch-x86_64.patch create mode 100644 meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops/0002-Add-os_arch-x86_64.patch diff --git a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot.bb b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot.bb index 7dc982f78..c1ff3bd85 100644 --- a/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot.bb +++ b/meta-webos-iot/recipes-core/packagegroups/packagegroup-webos-iot.bb @@ -5,7 +5,7 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" # You don't need to change this value when you're changing just RDEPENDS:${PN} variable. -PR = "r0" +PR = "r1" PACKAGE_ARCH = "${MACHINE_ARCH}" inherit packagegroup @@ -28,7 +28,6 @@ VIRTUAL-RUNTIME_com.example.service.iotivity:armv5 = "" VIRTUAL-RUNTIME_org.ocf.webossample ?= "org.ocf.webossample.occlientbasicops org.ocf.webossample.ocserverbasicops" VIRTUAL-RUNTIME_org.ocf.webossample:armv4 = "" VIRTUAL-RUNTIME_org.ocf.webossample:armv5 = "" -VIRTUAL-RUNTIME_org.ocf.webossample:x86-64 = "" RDEPENDS:${PN} = " \ activitymanager \ diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index be471db98..fc3014d91 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -5,7 +5,7 @@ LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" # You don't need to change this value when you're changing just RDEPENDS:${PN} variable. -PR = "r41" +PR = "r42" PACKAGE_ARCH = "${MACHINE_ARCH}" inherit packagegroup @@ -106,7 +106,6 @@ VIRTUAL-RUNTIME_com.example.service.iotivity:armv5 = "" VIRTUAL-RUNTIME_org.ocf.webossample ?= "org.ocf.webossample.occlientbasicops org.ocf.webossample.ocserverbasicops" VIRTUAL-RUNTIME_org.ocf.webossample:armv4 = "" VIRTUAL-RUNTIME_org.ocf.webossample:armv5 = "" -VIRTUAL-RUNTIME_org.ocf.webossample:x86-64 = "" VIRTUAL-RUNTIME_nodejs-module-node-red ?= "nodejs-module-node-red" VIRTUAL-RUNTIME_nodejs-module-node-red:armv4 = "" diff --git a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb index 87b62db69..9a625ab96 100644 --- a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb +++ b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb @@ -24,7 +24,7 @@ SRCREV_FORMAT = "main" do_fetch[vardeps] = "SRCREV_main SRCREV_tinycbor SRCREV_mbedtls" S = "${WORKDIR}/iotivity" -PR = "r6" +PR = "r7" inherit scons pkgconfig webos_component webos_filesystem_paths @@ -35,6 +35,7 @@ SRC_URI += " \ file://0002-webOS-Fix-build-error-detected-by-gcc8.patch \ file://0001-webOS-Apply-new-ACG-policy-in-test-applications.patch \ file://0001-webOS-Apply-proper-ACG-group-name-in-test-appl.patch \ + file://0002-Add-os_arch-x86_64.patch \ " EXTRA_OESCONS += " \ @@ -85,5 +86,6 @@ COMPATIBLE_MACHINE:armv6 = "(.*)" COMPATIBLE_MACHINE:armv7a = "(.*)" COMPATIBLE_MACHINE:armv7ve = "(.*)" COMPATIBLE_MACHINE:x86 = "(.*)" +COMPATIBLE_MACHINE:x86-64 = "(.*)" SRC_URI += "file://0001-Fix-missing-return-statement.patch" diff --git a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops/0002-Add-os_arch-x86_64.patch b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops/0002-Add-os_arch-x86_64.patch new file mode 100644 index 000000000..b2fbd7ae9 --- /dev/null +++ b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops/0002-Add-os_arch-x86_64.patch @@ -0,0 +1,25 @@ +From 53026fc9fb02ccf5d7824fbebd5246945d41ba29 Mon Sep 17 00:00:00 2001 +From: Jongwoong Lee +Date: Mon, 1 Jul 2019 19:28:02 +0900 +Subject: [PATCH] Add os_arch x86_64 for webos + +--- + build_common/SConscript | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/build_common/SConscript b/build_common/SConscript +index d5abaaf84..1868ea8d9 100644 +--- a/build_common/SConscript ++++ b/build_common/SConscript +@@ -26,7 +26,7 @@ os_arch_map = { + 'armv6l', 'armv7l' + ], + 'tizen': ['x86', 'x86_64', 'arm', 'arm-v7a', 'armeabi-v7a', 'arm64', 'armv7l'], +- 'webos': ['i586', 'i686', 'aarch64', 'arm'], ++ 'webos': ['i586', 'i686', 'aarch64', 'arm', 'x86_64'], + 'android': [ + 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'armeabi-v7a-hard', + 'arm64-v8a' +-- +2.17.1 + diff --git a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb index 6dd0d8876..300dc4116 100644 --- a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb +++ b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb @@ -14,6 +14,7 @@ SRC_URI += " \ git://github.com/intel/tinycbor.git;destsuffix=iotivity/extlibs/tinycbor/tinycbor;protocol=https;name=tinycbor;branch=master \ git://github.com/ARMmbed/mbedtls.git;destsuffix=iotivity/extlibs/mbedtls/mbedtls;protocol=https;branch=archive/mbedtls-2.4;name=mbedtls \ file://0001-mbedtls-tinycbor-add-DONT_CHECK_GIT_TAGS-env-variabl.patch \ + file://0002-Add-os_arch-x86_64.patch \ " SRCREV_main = "8fe09d4c9859d3ff32b4e8ca2ed996a156fccb81" @@ -24,7 +25,7 @@ SRCREV_FORMAT = "main" do_fetch[vardeps] = "SRCREV_main SRCREV_tinycbor SRCREV_mbedtls" S = "${WORKDIR}/iotivity" -PR = "r6" +PR = "r7" inherit scons pkgconfig webos_component webos_filesystem_paths @@ -83,6 +84,7 @@ COMPATIBLE_MACHINE:armv6 = "(.*)" COMPATIBLE_MACHINE:armv7a = "(.*)" COMPATIBLE_MACHINE:armv7ve = "(.*)" COMPATIBLE_MACHINE:x86 = "(.*)" +COMPATIBLE_MACHINE:x86-64 = "(.*)" SRC_URI += " \ file://0001-Fix-missing-return-statement.patch \ diff --git a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops/0002-Add-os_arch-x86_64.patch b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops/0002-Add-os_arch-x86_64.patch new file mode 100644 index 000000000..b2fbd7ae9 --- /dev/null +++ b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops/0002-Add-os_arch-x86_64.patch @@ -0,0 +1,25 @@ +From 53026fc9fb02ccf5d7824fbebd5246945d41ba29 Mon Sep 17 00:00:00 2001 +From: Jongwoong Lee +Date: Mon, 1 Jul 2019 19:28:02 +0900 +Subject: [PATCH] Add os_arch x86_64 for webos + +--- + build_common/SConscript | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/build_common/SConscript b/build_common/SConscript +index d5abaaf84..1868ea8d9 100644 +--- a/build_common/SConscript ++++ b/build_common/SConscript +@@ -26,7 +26,7 @@ os_arch_map = { + 'armv6l', 'armv7l' + ], + 'tizen': ['x86', 'x86_64', 'arm', 'arm-v7a', 'armeabi-v7a', 'arm64', 'armv7l'], +- 'webos': ['i586', 'i686', 'aarch64', 'arm'], ++ 'webos': ['i586', 'i686', 'aarch64', 'arm', 'x86_64'], + 'android': [ + 'x86', 'x86_64', 'armeabi', 'armeabi-v7a', 'armeabi-v7a-hard', + 'arm64-v8a' +-- +2.17.1 + From f8e7d9ec26f25dd9e4a4413924440af58cf2953f Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Mon, 22 Aug 2022 13:41:47 +0900 Subject: [PATCH 0518/2022] ilib-webapp=24 :Release Notes: Update iLib to handle path correctly :Detailed Notes: Fixed to handle both absolute and relative paths properly in `ilib-web.js` ilib-webapp: submissions/23..submissions/24 3374e76 Fixed to handle path correctly in ilib-web.js :Testing Performed: See clm ticket for results. :QA Notes: N/A :Issues Addressed: [WRO-11317] CCC: ilib-webapp=24 [WRO-10986] Update iLib to webOS Change-Id: I0983065d313d223117ac0c86d7af6d04a683bbea --- meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb b/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb index 5d5906b3a..bd363e7d9 100644 --- a/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb +++ b/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=be4f2e45a1215076318af43f833aa178 \ " -WEBOS_VERSION = "14.14.0-23_e32f6219189eb3de91fbd88485682b98601d7412" +WEBOS_VERSION = "14.14.0-24_8e01fcc94ada302b76f8a8ca4fcdebbdd81eee39" PR = "r8" inherit webos_arch_indep From 6b6fcde25e6979f3bf1df251728d37ba35ed1580 Mon Sep 17 00:00:00 2001 From: Myungchul Kim Date: Wed, 31 Aug 2022 09:44:53 +0900 Subject: [PATCH 0519/2022] systemd=webos10 webos-fluentbit-plugins=34-r8 :Release Notes: Use systemd-coredump with elfutils. Add crashinfo plugin to fluentbit-plugins :Detailed Notes: Add coredump and elfutils to PACKAGECONFIG, regardless of WEBOS_DISTRO_PRERELEASE webos-fluentbit-plugins: submissions/33..submissions/34 32ce6c7 Rename in_coredump to in_crashinfo 72db9a8 out_jira: Remove collecting crash info and focus on creating jira ticket b6cd0df Add out_crashinfo plugin and in_coredump collects crash logs 2158d44 Fix static analysis issues :Testing Performed: See the CCC jira ticket :QA Notes: N/A :Issues Addressed: [WRO-11549] CCC: systemd=webos10 webos-fluentbit-plugins=34-r8 [WRO-11440] [WRO-11441] Change-Id: Ied1a4d4bf6514977f6451f2c1245596e75b11c67 --- .../recipes-core/systemd/systemd_%.bbappend | 6 +- .../webos-fluentbit-plugins.bb | 4 +- .../0001-Fix-static-analysis-issues.patch | 8429 +---------------- 3 files changed, 33 insertions(+), 8406 deletions(-) diff --git a/meta-webos/recipes-core/systemd/systemd_%.bbappend b/meta-webos/recipes-core/systemd/systemd_%.bbappend index e5ef32031..fc5ef331b 100644 --- a/meta-webos/recipes-core/systemd/systemd_%.bbappend +++ b/meta-webos/recipes-core/systemd/systemd_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webos9" +EXTENDPRAUTO:append = "webos10" FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI:append:webos = " \ @@ -32,8 +32,8 @@ PACKAGECONFIG:remove = " \ PACKAGECONFIG:append = " \ ${@oe.utils.conditional('DISTRO', 'webos', 'oomd', '', d)} \ ${@oe.utils.conditional('DISTRO', 'webos', 'cgroupv2', '', d)} \ - ${@oe.utils.conditional('WEBOS_DISTRO_PRERELEASE', 'devel', 'coredump', '', d)} \ - ${@oe.utils.conditional('WEBOS_DISTRO_PRERELEASE', 'devel', 'elfutils', '', d)} \ + coredump \ + elfutils \ " FILES:${PN} += "${@oe.utils.conditional('DISTRO', 'webos','${datadir}/dbus-1/system.d/com.webos.MemoryManager1.conf', '', d)}" diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb index 981e9ba33..51ed170b2 100644 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb @@ -12,8 +12,8 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 luna-service2 libpbnjson fluentbit msgpack-c" RDEPENDS:${PN} = "nyx-utils python3-core python3-requests python3-atlassian-python-api" -WEBOS_VERSION = "1.0.0-33_f0dd348555a483b6e6de8456e515df39a51cb89a" -PR = "r7" +WEBOS_VERSION = "1.0.0-34_f1cb6a52b5bab41f91c2b90d01d4d1680e49fd86" +PR = "r8" inherit webos_component inherit webos_enhanced_submissions diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins/0001-Fix-static-analysis-issues.patch b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins/0001-Fix-static-analysis-issues.patch index 7dca2e716..81ca65ab5 100644 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins/0001-Fix-static-analysis-issues.patch +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins/0001-Fix-static-analysis-issues.patch @@ -1,8411 +1,38 @@ -From 458341a118a6f64b817d1b04679690eab25d73aa Mon Sep 17 00:00:00 2001 +From fff701ba34b6b6805dece7173d4e5908f3d5e146 Mon Sep 17 00:00:00 2001 From: Myungchul Kim -Date: Mon, 13 Jun 2022 19:04:45 +0900 +Date: Thu, 1 Sep 2022 19:21:39 +0900 Subject: [PATCH] Fix static analysis issues -:Release Notes: -Fix static analysis issues - -:Detailed Notes: -Fix static analysis issues - -:Testing Performed: -Local test : OK - -:QA Notes: -N/A - -:Issues Addressed: -[CID-8999325] -[CID-8999326] -[CID-8999327] - -Change-Id: Ib23b80052d8ea66089a8f068483ebb0411d1dfc7 +Change-Id: I94889408a71034e7d51b7fd146de1b525e6d68af --- - plugins/common/util/Time.cpp | 17 +- - plugins/common/util/date.h | 8234 +++++++++++++++++++++++ - plugins/in_coredump/CoredumpHandler.cpp | 26 +- - plugins/in_coredump/CoredumpHandler.h | 4 +- - 4 files changed, 8255 insertions(+), 26 deletions(-) - create mode 100644 plugins/common/util/date.h - -diff --git a/plugins/common/util/Time.cpp b/plugins/common/util/Time.cpp -index 15ba55f..b196062 100644 ---- a/plugins/common/util/Time.cpp -+++ b/plugins/common/util/Time.cpp -@@ -16,6 +16,9 @@ - - #include "Time.h" - -+#include "date.h" -+ -+#include - #include - - #include -@@ -41,18 +44,8 @@ Time::~Time() - - std::string Time::getCurrentTime(const char* format) - { -- time_t timenow; -- time(&timenow); -- -- std::string timeStr(30, '\0'); -- std::strftime(&timeStr[0], timeStr.size(), format, std::localtime(&timenow)); -- -- std::string timeString; -- for (auto it = timeStr.begin(); it != timeStr.end(); ++it) { -- if (*it != '\0') -- timeString.push_back(*it); -- } -- return timeString; -+ auto now = std::chrono::system_clock::now(); -+ return date::format(format, date::floor(now)); - } - - string Time::generateUid() -diff --git a/plugins/common/util/date.h b/plugins/common/util/date.h -new file mode 100644 -index 0000000..143bc9a ---- /dev/null -+++ b/plugins/common/util/date.h -@@ -0,0 +1,8234 @@ -+#ifndef DATE_H -+#define DATE_H -+ -+// The MIT License (MIT) -+// -+// Copyright (c) 2015, 2016, 2017 Howard Hinnant -+// Copyright (c) 2016 Adrian Colomitchi -+// Copyright (c) 2017 Florian Dang -+// Copyright (c) 2017 Paul Thompson -+// Copyright (c) 2018, 2019 Tomasz Kamiński -+// Copyright (c) 2019 Jiangang Zhuang -+// -+// Permission is hereby granted, free of charge, to any person obtaining a copy -+// of this software and associated documentation files (the "Software"), to deal -+// in the Software without restriction, including without limitation the rights -+// to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -+// copies of the Software, and to permit persons to whom the Software is -+// furnished to do so, subject to the following conditions: -+// -+// The above copyright notice and this permission notice shall be included in all -+// copies or substantial portions of the Software. -+// -+// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -+// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -+// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -+// AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -+// LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -+// OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -+// SOFTWARE. -+// -+// Our apologies. When the previous paragraph was written, lowercase had not yet -+// been invented (that would involve another several millennia of evolution). -+// We did not mean to shout. -+ -+#ifndef HAS_STRING_VIEW -+# if __cplusplus >= 201703 || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) -+# define HAS_STRING_VIEW 1 -+# else -+# define HAS_STRING_VIEW 0 -+# endif -+#endif // HAS_STRING_VIEW -+ -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#include -+#if HAS_STRING_VIEW -+# include -+#endif -+#include -+#include -+ -+#ifdef __GNUC__ -+# pragma GCC diagnostic push -+# if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ > 7) -+# pragma GCC diagnostic ignored "-Wpedantic" -+# endif -+# if __GNUC__ < 5 -+ // GCC 4.9 Bug 61489 Wrong warning with -Wmissing-field-initializers -+# pragma GCC diagnostic ignored "-Wmissing-field-initializers" -+# endif -+#endif -+ -+#ifdef _MSC_VER -+# pragma warning(push) -+// warning C4127: conditional expression is constant -+# pragma warning(disable : 4127) -+#endif -+ -+namespace date -+{ -+ -+//---------------+ -+// Configuration | -+//---------------+ -+ -+#ifndef ONLY_C_LOCALE -+# define ONLY_C_LOCALE 0 -+#endif -+ -+#if defined(_MSC_VER) && (!defined(__clang__) || (_MSC_VER < 1910)) -+// MSVC -+# ifndef _SILENCE_CXX17_UNCAUGHT_EXCEPTION_DEPRECATION_WARNING -+# define _SILENCE_CXX17_UNCAUGHT_EXCEPTION_DEPRECATION_WARNING -+# endif -+# if _MSC_VER < 1910 -+// before VS2017 -+# define CONSTDATA const -+# define CONSTCD11 -+# define CONSTCD14 -+# define NOEXCEPT _NOEXCEPT -+# else -+// VS2017 and later -+# define CONSTDATA constexpr const -+# define CONSTCD11 constexpr -+# define CONSTCD14 constexpr -+# define NOEXCEPT noexcept -+# endif -+ -+#elif defined(__SUNPRO_CC) && __SUNPRO_CC <= 0x5150 -+// Oracle Developer Studio 12.6 and earlier -+# define CONSTDATA constexpr const -+# define CONSTCD11 constexpr -+# define CONSTCD14 -+# define NOEXCEPT noexcept -+ -+#elif __cplusplus >= 201402 -+// C++14 -+# define CONSTDATA constexpr const -+# define CONSTCD11 constexpr -+# define CONSTCD14 constexpr -+# define NOEXCEPT noexcept -+#else -+// C++11 -+# define CONSTDATA constexpr const -+# define CONSTCD11 constexpr -+# define CONSTCD14 -+# define NOEXCEPT noexcept -+#endif -+ -+#ifndef HAS_UNCAUGHT_EXCEPTIONS -+# if __cplusplus >= 201703 || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) -+# define HAS_UNCAUGHT_EXCEPTIONS 1 -+# else -+# define HAS_UNCAUGHT_EXCEPTIONS 0 -+# endif -+#endif // HAS_UNCAUGHT_EXCEPTIONS -+ -+#ifndef HAS_VOID_T -+# if __cplusplus >= 201703 || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703L) -+# define HAS_VOID_T 1 -+# else -+# define HAS_VOID_T 0 -+# endif -+#endif // HAS_VOID_T -+ -+// Protect from Oracle sun macro -+#ifdef sun -+# undef sun -+#endif -+ -+// Work around for a NVCC compiler bug which causes it to fail -+// to compile std::ratio_{multiply,divide} when used directly -+// in the std::chrono::duration template instantiations below -+namespace detail { -+template -+using ratio_multiply = decltype(std::ratio_multiply{}); -+ -+template -+using ratio_divide = decltype(std::ratio_divide{}); -+} // namespace detail -+ -+//-----------+ -+// Interface | -+//-----------+ -+ -+// durations -+ -+using days = std::chrono::duration -+ , std::chrono::hours::period>>; -+ -+using weeks = std::chrono::duration -+ , days::period>>; -+ -+using years = std::chrono::duration -+ , days::period>>; -+ -+using months = std::chrono::duration -+ >>; -+ -+// time_point -+ -+template -+ using sys_time = std::chrono::time_point; -+ -+using sys_days = sys_time; -+using sys_seconds = sys_time; -+ -+struct local_t {}; -+ -+template -+ using local_time = std::chrono::time_point; -+ -+using local_seconds = local_time; -+using local_days = local_time; -+ -+// types -+ -+struct last_spec -+{ -+ explicit last_spec() = default; -+}; -+ -+class day; -+class month; -+class year; -+ -+class weekday; -+class weekday_indexed; -+class weekday_last; -+ -+class month_day; -+class month_day_last; -+class month_weekday; -+class month_weekday_last; -+ -+class year_month; -+ -+class year_month_day; -+class year_month_day_last; -+class year_month_weekday; -+class year_month_weekday_last; -+ -+// date composition operators -+ -+CONSTCD11 year_month operator/(const year& y, const month& m) NOEXCEPT; -+CONSTCD11 year_month operator/(const year& y, int m) NOEXCEPT; -+ -+CONSTCD11 month_day operator/(const day& d, const month& m) NOEXCEPT; -+CONSTCD11 month_day operator/(const day& d, int m) NOEXCEPT; -+CONSTCD11 month_day operator/(const month& m, const day& d) NOEXCEPT; -+CONSTCD11 month_day operator/(const month& m, int d) NOEXCEPT; -+CONSTCD11 month_day operator/(int m, const day& d) NOEXCEPT; -+ -+CONSTCD11 month_day_last operator/(const month& m, last_spec) NOEXCEPT; -+CONSTCD11 month_day_last operator/(int m, last_spec) NOEXCEPT; -+CONSTCD11 month_day_last operator/(last_spec, const month& m) NOEXCEPT; -+CONSTCD11 month_day_last operator/(last_spec, int m) NOEXCEPT; -+ -+CONSTCD11 month_weekday operator/(const month& m, const weekday_indexed& wdi) NOEXCEPT; -+CONSTCD11 month_weekday operator/(int m, const weekday_indexed& wdi) NOEXCEPT; -+CONSTCD11 month_weekday operator/(const weekday_indexed& wdi, const month& m) NOEXCEPT; -+CONSTCD11 month_weekday operator/(const weekday_indexed& wdi, int m) NOEXCEPT; -+ -+CONSTCD11 month_weekday_last operator/(const month& m, const weekday_last& wdl) NOEXCEPT; -+CONSTCD11 month_weekday_last operator/(int m, const weekday_last& wdl) NOEXCEPT; -+CONSTCD11 month_weekday_last operator/(const weekday_last& wdl, const month& m) NOEXCEPT; -+CONSTCD11 month_weekday_last operator/(const weekday_last& wdl, int m) NOEXCEPT; -+ -+CONSTCD11 year_month_day operator/(const year_month& ym, const day& d) NOEXCEPT; -+CONSTCD11 year_month_day operator/(const year_month& ym, int d) NOEXCEPT; -+CONSTCD11 year_month_day operator/(const year& y, const month_day& md) NOEXCEPT; -+CONSTCD11 year_month_day operator/(int y, const month_day& md) NOEXCEPT; -+CONSTCD11 year_month_day operator/(const month_day& md, const year& y) NOEXCEPT; -+CONSTCD11 year_month_day operator/(const month_day& md, int y) NOEXCEPT; -+ -+CONSTCD11 -+ year_month_day_last operator/(const year_month& ym, last_spec) NOEXCEPT; -+CONSTCD11 -+ year_month_day_last operator/(const year& y, const month_day_last& mdl) NOEXCEPT; -+CONSTCD11 -+ year_month_day_last operator/(int y, const month_day_last& mdl) NOEXCEPT; -+CONSTCD11 -+ year_month_day_last operator/(const month_day_last& mdl, const year& y) NOEXCEPT; -+CONSTCD11 -+ year_month_day_last operator/(const month_day_last& mdl, int y) NOEXCEPT; -+ -+CONSTCD11 -+year_month_weekday -+operator/(const year_month& ym, const weekday_indexed& wdi) NOEXCEPT; -+ -+CONSTCD11 -+year_month_weekday -+operator/(const year& y, const month_weekday& mwd) NOEXCEPT; -+ -+CONSTCD11 -+year_month_weekday -+operator/(int y, const month_weekday& mwd) NOEXCEPT; -+ -+CONSTCD11 -+year_month_weekday -+operator/(const month_weekday& mwd, const year& y) NOEXCEPT; -+ -+CONSTCD11 -+year_month_weekday -+operator/(const month_weekday& mwd, int y) NOEXCEPT; -+ -+CONSTCD11 -+year_month_weekday_last -+operator/(const year_month& ym, const weekday_last& wdl) NOEXCEPT; -+ -+CONSTCD11 -+year_month_weekday_last -+operator/(const year& y, const month_weekday_last& mwdl) NOEXCEPT; -+ -+CONSTCD11 -+year_month_weekday_last -+operator/(int y, const month_weekday_last& mwdl) NOEXCEPT; -+ -+CONSTCD11 -+year_month_weekday_last -+operator/(const month_weekday_last& mwdl, const year& y) NOEXCEPT; -+ -+CONSTCD11 -+year_month_weekday_last -+operator/(const month_weekday_last& mwdl, int y) NOEXCEPT; -+ -+// Detailed interface -+ -+// day -+ -+class day -+{ -+ unsigned char d_; -+ -+public: -+ day() = default; -+ explicit CONSTCD11 day(unsigned d) NOEXCEPT; -+ -+ CONSTCD14 day& operator++() NOEXCEPT; -+ CONSTCD14 day operator++(int) NOEXCEPT; -+ CONSTCD14 day& operator--() NOEXCEPT; -+ CONSTCD14 day operator--(int) NOEXCEPT; -+ -+ CONSTCD14 day& operator+=(const days& d) NOEXCEPT; -+ CONSTCD14 day& operator-=(const days& d) NOEXCEPT; -+ -+ CONSTCD11 explicit operator unsigned() const NOEXCEPT; -+ CONSTCD11 bool ok() const NOEXCEPT; -+}; -+ -+CONSTCD11 bool operator==(const day& x, const day& y) NOEXCEPT; -+CONSTCD11 bool operator!=(const day& x, const day& y) NOEXCEPT; -+CONSTCD11 bool operator< (const day& x, const day& y) NOEXCEPT; -+CONSTCD11 bool operator> (const day& x, const day& y) NOEXCEPT; -+CONSTCD11 bool operator<=(const day& x, const day& y) NOEXCEPT; -+CONSTCD11 bool operator>=(const day& x, const day& y) NOEXCEPT; -+ -+CONSTCD11 day operator+(const day& x, const days& y) NOEXCEPT; -+CONSTCD11 day operator+(const days& x, const day& y) NOEXCEPT; -+CONSTCD11 day operator-(const day& x, const days& y) NOEXCEPT; -+CONSTCD11 days operator-(const day& x, const day& y) NOEXCEPT; -+ -+template -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const day& d); -+ -+// month -+ -+class month -+{ -+ unsigned char m_; -+ -+public: -+ month() = default; -+ explicit CONSTCD11 month(unsigned m) NOEXCEPT; -+ -+ CONSTCD14 month& operator++() NOEXCEPT; -+ CONSTCD14 month operator++(int) NOEXCEPT; -+ CONSTCD14 month& operator--() NOEXCEPT; -+ CONSTCD14 month operator--(int) NOEXCEPT; -+ -+ CONSTCD14 month& operator+=(const months& m) NOEXCEPT; -+ CONSTCD14 month& operator-=(const months& m) NOEXCEPT; -+ -+ CONSTCD11 explicit operator unsigned() const NOEXCEPT; -+ CONSTCD11 bool ok() const NOEXCEPT; -+}; -+ -+CONSTCD11 bool operator==(const month& x, const month& y) NOEXCEPT; -+CONSTCD11 bool operator!=(const month& x, const month& y) NOEXCEPT; -+CONSTCD11 bool operator< (const month& x, const month& y) NOEXCEPT; -+CONSTCD11 bool operator> (const month& x, const month& y) NOEXCEPT; -+CONSTCD11 bool operator<=(const month& x, const month& y) NOEXCEPT; -+CONSTCD11 bool operator>=(const month& x, const month& y) NOEXCEPT; -+ -+CONSTCD14 month operator+(const month& x, const months& y) NOEXCEPT; -+CONSTCD14 month operator+(const months& x, const month& y) NOEXCEPT; -+CONSTCD14 month operator-(const month& x, const months& y) NOEXCEPT; -+CONSTCD14 months operator-(const month& x, const month& y) NOEXCEPT; -+ -+template -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const month& m); -+ -+// year -+ -+class year -+{ -+ short y_; -+ -+public: -+ year() = default; -+ explicit CONSTCD11 year(int y) NOEXCEPT; -+ -+ CONSTCD14 year& operator++() NOEXCEPT; -+ CONSTCD14 year operator++(int) NOEXCEPT; -+ CONSTCD14 year& operator--() NOEXCEPT; -+ CONSTCD14 year operator--(int) NOEXCEPT; -+ -+ CONSTCD14 year& operator+=(const years& y) NOEXCEPT; -+ CONSTCD14 year& operator-=(const years& y) NOEXCEPT; -+ -+ CONSTCD11 year operator-() const NOEXCEPT; -+ CONSTCD11 year operator+() const NOEXCEPT; -+ -+ CONSTCD11 bool is_leap() const NOEXCEPT; -+ -+ CONSTCD11 explicit operator int() const NOEXCEPT; -+ CONSTCD11 bool ok() const NOEXCEPT; -+ -+ static CONSTCD11 year min() NOEXCEPT { return year{-32767}; } -+ static CONSTCD11 year max() NOEXCEPT { return year{32767}; } -+}; -+ -+CONSTCD11 bool operator==(const year& x, const year& y) NOEXCEPT; -+CONSTCD11 bool operator!=(const year& x, const year& y) NOEXCEPT; -+CONSTCD11 bool operator< (const year& x, const year& y) NOEXCEPT; -+CONSTCD11 bool operator> (const year& x, const year& y) NOEXCEPT; -+CONSTCD11 bool operator<=(const year& x, const year& y) NOEXCEPT; -+CONSTCD11 bool operator>=(const year& x, const year& y) NOEXCEPT; -+ -+CONSTCD11 year operator+(const year& x, const years& y) NOEXCEPT; -+CONSTCD11 year operator+(const years& x, const year& y) NOEXCEPT; -+CONSTCD11 year operator-(const year& x, const years& y) NOEXCEPT; -+CONSTCD11 years operator-(const year& x, const year& y) NOEXCEPT; -+ -+template -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const year& y); -+ -+// weekday -+ -+class weekday -+{ -+ unsigned char wd_; -+public: -+ weekday() = default; -+ explicit CONSTCD11 weekday(unsigned wd) NOEXCEPT; -+ CONSTCD14 weekday(const sys_days& dp) NOEXCEPT; -+ CONSTCD14 explicit weekday(const local_days& dp) NOEXCEPT; -+ -+ CONSTCD14 weekday& operator++() NOEXCEPT; -+ CONSTCD14 weekday operator++(int) NOEXCEPT; -+ CONSTCD14 weekday& operator--() NOEXCEPT; -+ CONSTCD14 weekday operator--(int) NOEXCEPT; -+ -+ CONSTCD14 weekday& operator+=(const days& d) NOEXCEPT; -+ CONSTCD14 weekday& operator-=(const days& d) NOEXCEPT; -+ -+ CONSTCD11 bool ok() const NOEXCEPT; -+ -+ CONSTCD11 unsigned c_encoding() const NOEXCEPT; -+ CONSTCD11 unsigned iso_encoding() const NOEXCEPT; -+ -+ CONSTCD11 weekday_indexed operator[](unsigned index) const NOEXCEPT; -+ CONSTCD11 weekday_last operator[](last_spec) const NOEXCEPT; -+ -+private: -+ static CONSTCD14 unsigned char weekday_from_days(int z) NOEXCEPT; -+ -+ friend CONSTCD11 bool operator==(const weekday& x, const weekday& y) NOEXCEPT; -+ friend CONSTCD14 days operator-(const weekday& x, const weekday& y) NOEXCEPT; -+ friend CONSTCD14 weekday operator+(const weekday& x, const days& y) NOEXCEPT; -+ template -+ friend std::basic_ostream& -+ operator<<(std::basic_ostream& os, const weekday& wd); -+ friend class weekday_indexed; -+}; -+ -+CONSTCD11 bool operator==(const weekday& x, const weekday& y) NOEXCEPT; -+CONSTCD11 bool operator!=(const weekday& x, const weekday& y) NOEXCEPT; -+ -+CONSTCD14 weekday operator+(const weekday& x, const days& y) NOEXCEPT; -+CONSTCD14 weekday operator+(const days& x, const weekday& y) NOEXCEPT; -+CONSTCD14 weekday operator-(const weekday& x, const days& y) NOEXCEPT; -+CONSTCD14 days operator-(const weekday& x, const weekday& y) NOEXCEPT; -+ -+template -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const weekday& wd); -+ -+// weekday_indexed -+ -+class weekday_indexed -+{ -+ unsigned char wd_ : 4; -+ unsigned char index_ : 4; -+ -+public: -+ weekday_indexed() = default; -+ CONSTCD11 weekday_indexed(const date::weekday& wd, unsigned index) NOEXCEPT; -+ -+ CONSTCD11 date::weekday weekday() const NOEXCEPT; -+ CONSTCD11 unsigned index() const NOEXCEPT; -+ CONSTCD11 bool ok() const NOEXCEPT; -+}; -+ -+CONSTCD11 bool operator==(const weekday_indexed& x, const weekday_indexed& y) NOEXCEPT; -+CONSTCD11 bool operator!=(const weekday_indexed& x, const weekday_indexed& y) NOEXCEPT; -+ -+template -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const weekday_indexed& wdi); -+ -+// weekday_last -+ -+class weekday_last -+{ -+ date::weekday wd_; -+ -+public: -+ explicit CONSTCD11 weekday_last(const date::weekday& wd) NOEXCEPT; -+ -+ CONSTCD11 date::weekday weekday() const NOEXCEPT; -+ CONSTCD11 bool ok() const NOEXCEPT; -+}; -+ -+CONSTCD11 bool operator==(const weekday_last& x, const weekday_last& y) NOEXCEPT; -+CONSTCD11 bool operator!=(const weekday_last& x, const weekday_last& y) NOEXCEPT; -+ -+template -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const weekday_last& wdl); -+ -+namespace detail -+{ -+ -+struct unspecified_month_disambiguator {}; -+ -+} // namespace detail -+ -+// year_month -+ -+class year_month -+{ -+ date::year y_; -+ date::month m_; -+ -+public: -+ year_month() = default; -+ CONSTCD11 year_month(const date::year& y, const date::month& m) NOEXCEPT; -+ -+ CONSTCD11 date::year year() const NOEXCEPT; -+ CONSTCD11 date::month month() const NOEXCEPT; -+ -+ template -+ CONSTCD14 year_month& operator+=(const months& dm) NOEXCEPT; -+ template -+ CONSTCD14 year_month& operator-=(const months& dm) NOEXCEPT; -+ CONSTCD14 year_month& operator+=(const years& dy) NOEXCEPT; -+ CONSTCD14 year_month& operator-=(const years& dy) NOEXCEPT; -+ -+ CONSTCD11 bool ok() const NOEXCEPT; -+}; -+ -+CONSTCD11 bool operator==(const year_month& x, const year_month& y) NOEXCEPT; -+CONSTCD11 bool operator!=(const year_month& x, const year_month& y) NOEXCEPT; -+CONSTCD11 bool operator< (const year_month& x, const year_month& y) NOEXCEPT; -+CONSTCD11 bool operator> (const year_month& x, const year_month& y) NOEXCEPT; -+CONSTCD11 bool operator<=(const year_month& x, const year_month& y) NOEXCEPT; -+CONSTCD11 bool operator>=(const year_month& x, const year_month& y) NOEXCEPT; -+ -+template -+CONSTCD14 year_month operator+(const year_month& ym, const months& dm) NOEXCEPT; -+template -+CONSTCD14 year_month operator+(const months& dm, const year_month& ym) NOEXCEPT; -+template -+CONSTCD14 year_month operator-(const year_month& ym, const months& dm) NOEXCEPT; -+ -+CONSTCD11 months operator-(const year_month& x, const year_month& y) NOEXCEPT; -+CONSTCD11 year_month operator+(const year_month& ym, const years& dy) NOEXCEPT; -+CONSTCD11 year_month operator+(const years& dy, const year_month& ym) NOEXCEPT; -+CONSTCD11 year_month operator-(const year_month& ym, const years& dy) NOEXCEPT; -+ -+template -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const year_month& ym); -+ -+// month_day -+ -+class month_day -+{ -+ date::month m_; -+ date::day d_; -+ -+public: -+ month_day() = default; -+ CONSTCD11 month_day(const date::month& m, const date::day& d) NOEXCEPT; -+ -+ CONSTCD11 date::month month() const NOEXCEPT; -+ CONSTCD11 date::day day() const NOEXCEPT; -+ -+ CONSTCD14 bool ok() const NOEXCEPT; -+}; -+ -+CONSTCD11 bool operator==(const month_day& x, const month_day& y) NOEXCEPT; -+CONSTCD11 bool operator!=(const month_day& x, const month_day& y) NOEXCEPT; -+CONSTCD11 bool operator< (const month_day& x, const month_day& y) NOEXCEPT; -+CONSTCD11 bool operator> (const month_day& x, const month_day& y) NOEXCEPT; -+CONSTCD11 bool operator<=(const month_day& x, const month_day& y) NOEXCEPT; -+CONSTCD11 bool operator>=(const month_day& x, const month_day& y) NOEXCEPT; -+ -+template -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const month_day& md); -+ -+// month_day_last -+ -+class month_day_last -+{ -+ date::month m_; -+ -+public: -+ CONSTCD11 explicit month_day_last(const date::month& m) NOEXCEPT; -+ -+ CONSTCD11 date::month month() const NOEXCEPT; -+ CONSTCD11 bool ok() const NOEXCEPT; -+}; -+ -+CONSTCD11 bool operator==(const month_day_last& x, const month_day_last& y) NOEXCEPT; -+CONSTCD11 bool operator!=(const month_day_last& x, const month_day_last& y) NOEXCEPT; -+CONSTCD11 bool operator< (const month_day_last& x, const month_day_last& y) NOEXCEPT; -+CONSTCD11 bool operator> (const month_day_last& x, const month_day_last& y) NOEXCEPT; -+CONSTCD11 bool operator<=(const month_day_last& x, const month_day_last& y) NOEXCEPT; -+CONSTCD11 bool operator>=(const month_day_last& x, const month_day_last& y) NOEXCEPT; -+ -+template -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const month_day_last& mdl); -+ -+// month_weekday -+ -+class month_weekday -+{ -+ date::month m_; -+ date::weekday_indexed wdi_; -+public: -+ CONSTCD11 month_weekday(const date::month& m, -+ const date::weekday_indexed& wdi) NOEXCEPT; -+ -+ CONSTCD11 date::month month() const NOEXCEPT; -+ CONSTCD11 date::weekday_indexed weekday_indexed() const NOEXCEPT; -+ -+ CONSTCD11 bool ok() const NOEXCEPT; -+}; -+ -+CONSTCD11 bool operator==(const month_weekday& x, const month_weekday& y) NOEXCEPT; -+CONSTCD11 bool operator!=(const month_weekday& x, const month_weekday& y) NOEXCEPT; -+ -+template -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const month_weekday& mwd); -+ -+// month_weekday_last -+ -+class month_weekday_last -+{ -+ date::month m_; -+ date::weekday_last wdl_; -+ -+public: -+ CONSTCD11 month_weekday_last(const date::month& m, -+ const date::weekday_last& wd) NOEXCEPT; -+ -+ CONSTCD11 date::month month() const NOEXCEPT; -+ CONSTCD11 date::weekday_last weekday_last() const NOEXCEPT; -+ -+ CONSTCD11 bool ok() const NOEXCEPT; -+}; -+ -+CONSTCD11 -+ bool operator==(const month_weekday_last& x, const month_weekday_last& y) NOEXCEPT; -+CONSTCD11 -+ bool operator!=(const month_weekday_last& x, const month_weekday_last& y) NOEXCEPT; -+ -+template -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const month_weekday_last& mwdl); -+ -+// class year_month_day -+ -+class year_month_day -+{ -+ date::year y_; -+ date::month m_; -+ date::day d_; -+ -+public: -+ year_month_day() = default; -+ CONSTCD11 year_month_day(const date::year& y, const date::month& m, -+ const date::day& d) NOEXCEPT; -+ CONSTCD14 year_month_day(const year_month_day_last& ymdl) NOEXCEPT; -+ -+ CONSTCD14 year_month_day(sys_days dp) NOEXCEPT; -+ CONSTCD14 explicit year_month_day(local_days dp) NOEXCEPT; -+ -+ template -+ CONSTCD14 year_month_day& operator+=(const months& m) NOEXCEPT; -+ template -+ CONSTCD14 year_month_day& operator-=(const months& m) NOEXCEPT; -+ CONSTCD14 year_month_day& operator+=(const years& y) NOEXCEPT; -+ CONSTCD14 year_month_day& operator-=(const years& y) NOEXCEPT; -+ -+ CONSTCD11 date::year year() const NOEXCEPT; -+ CONSTCD11 date::month month() const NOEXCEPT; -+ CONSTCD11 date::day day() const NOEXCEPT; -+ -+ CONSTCD14 operator sys_days() const NOEXCEPT; -+ CONSTCD14 explicit operator local_days() const NOEXCEPT; -+ CONSTCD14 bool ok() const NOEXCEPT; -+ -+private: -+ static CONSTCD14 year_month_day from_days(days dp) NOEXCEPT; -+ CONSTCD14 days to_days() const NOEXCEPT; -+}; -+ -+CONSTCD11 bool operator==(const year_month_day& x, const year_month_day& y) NOEXCEPT; -+CONSTCD11 bool operator!=(const year_month_day& x, const year_month_day& y) NOEXCEPT; -+CONSTCD11 bool operator< (const year_month_day& x, const year_month_day& y) NOEXCEPT; -+CONSTCD11 bool operator> (const year_month_day& x, const year_month_day& y) NOEXCEPT; -+CONSTCD11 bool operator<=(const year_month_day& x, const year_month_day& y) NOEXCEPT; -+CONSTCD11 bool operator>=(const year_month_day& x, const year_month_day& y) NOEXCEPT; -+ -+template -+CONSTCD14 year_month_day operator+(const year_month_day& ymd, const months& dm) NOEXCEPT; -+template -+CONSTCD14 year_month_day operator+(const months& dm, const year_month_day& ymd) NOEXCEPT; -+template -+CONSTCD14 year_month_day operator-(const year_month_day& ymd, const months& dm) NOEXCEPT; -+CONSTCD11 year_month_day operator+(const year_month_day& ymd, const years& dy) NOEXCEPT; -+CONSTCD11 year_month_day operator+(const years& dy, const year_month_day& ymd) NOEXCEPT; -+CONSTCD11 year_month_day operator-(const year_month_day& ymd, const years& dy) NOEXCEPT; -+ -+template -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const year_month_day& ymd); -+ -+// year_month_day_last -+ -+class year_month_day_last -+{ -+ date::year y_; -+ date::month_day_last mdl_; -+ -+public: -+ CONSTCD11 year_month_day_last(const date::year& y, -+ const date::month_day_last& mdl) NOEXCEPT; -+ -+ template -+ CONSTCD14 year_month_day_last& operator+=(const months& m) NOEXCEPT; -+ template -+ CONSTCD14 year_month_day_last& operator-=(const months& m) NOEXCEPT; -+ CONSTCD14 year_month_day_last& operator+=(const years& y) NOEXCEPT; -+ CONSTCD14 year_month_day_last& operator-=(const years& y) NOEXCEPT; -+ -+ CONSTCD11 date::year year() const NOEXCEPT; -+ CONSTCD11 date::month month() const NOEXCEPT; -+ CONSTCD11 date::month_day_last month_day_last() const NOEXCEPT; -+ CONSTCD14 date::day day() const NOEXCEPT; -+ -+ CONSTCD14 operator sys_days() const NOEXCEPT; -+ CONSTCD14 explicit operator local_days() const NOEXCEPT; -+ CONSTCD11 bool ok() const NOEXCEPT; -+}; -+ -+CONSTCD11 -+ bool operator==(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT; -+CONSTCD11 -+ bool operator!=(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT; -+CONSTCD11 -+ bool operator< (const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT; -+CONSTCD11 -+ bool operator> (const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT; -+CONSTCD11 -+ bool operator<=(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT; -+CONSTCD11 -+ bool operator>=(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT; -+ -+template -+CONSTCD14 -+year_month_day_last -+operator+(const year_month_day_last& ymdl, const months& dm) NOEXCEPT; -+ -+template -+CONSTCD14 -+year_month_day_last -+operator+(const months& dm, const year_month_day_last& ymdl) NOEXCEPT; -+ -+CONSTCD11 -+year_month_day_last -+operator+(const year_month_day_last& ymdl, const years& dy) NOEXCEPT; -+ -+CONSTCD11 -+year_month_day_last -+operator+(const years& dy, const year_month_day_last& ymdl) NOEXCEPT; -+ -+template -+CONSTCD14 -+year_month_day_last -+operator-(const year_month_day_last& ymdl, const months& dm) NOEXCEPT; -+ -+CONSTCD11 -+year_month_day_last -+operator-(const year_month_day_last& ymdl, const years& dy) NOEXCEPT; -+ -+template -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const year_month_day_last& ymdl); -+ -+// year_month_weekday -+ -+class year_month_weekday -+{ -+ date::year y_; -+ date::month m_; -+ date::weekday_indexed wdi_; -+ -+public: -+ year_month_weekday() = default; -+ CONSTCD11 year_month_weekday(const date::year& y, const date::month& m, -+ const date::weekday_indexed& wdi) NOEXCEPT; -+ CONSTCD14 year_month_weekday(const sys_days& dp) NOEXCEPT; -+ CONSTCD14 explicit year_month_weekday(const local_days& dp) NOEXCEPT; -+ -+ template -+ CONSTCD14 year_month_weekday& operator+=(const months& m) NOEXCEPT; -+ template -+ CONSTCD14 year_month_weekday& operator-=(const months& m) NOEXCEPT; -+ CONSTCD14 year_month_weekday& operator+=(const years& y) NOEXCEPT; -+ CONSTCD14 year_month_weekday& operator-=(const years& y) NOEXCEPT; -+ -+ CONSTCD11 date::year year() const NOEXCEPT; -+ CONSTCD11 date::month month() const NOEXCEPT; -+ CONSTCD11 date::weekday weekday() const NOEXCEPT; -+ CONSTCD11 unsigned index() const NOEXCEPT; -+ CONSTCD11 date::weekday_indexed weekday_indexed() const NOEXCEPT; -+ -+ CONSTCD14 operator sys_days() const NOEXCEPT; -+ CONSTCD14 explicit operator local_days() const NOEXCEPT; -+ CONSTCD14 bool ok() const NOEXCEPT; -+ -+private: -+ static CONSTCD14 year_month_weekday from_days(days dp) NOEXCEPT; -+ CONSTCD14 days to_days() const NOEXCEPT; -+}; -+ -+CONSTCD11 -+ bool operator==(const year_month_weekday& x, const year_month_weekday& y) NOEXCEPT; -+CONSTCD11 -+ bool operator!=(const year_month_weekday& x, const year_month_weekday& y) NOEXCEPT; -+ -+template -+CONSTCD14 -+year_month_weekday -+operator+(const year_month_weekday& ymwd, const months& dm) NOEXCEPT; -+ -+template -+CONSTCD14 -+year_month_weekday -+operator+(const months& dm, const year_month_weekday& ymwd) NOEXCEPT; -+ -+CONSTCD11 -+year_month_weekday -+operator+(const year_month_weekday& ymwd, const years& dy) NOEXCEPT; -+ -+CONSTCD11 -+year_month_weekday -+operator+(const years& dy, const year_month_weekday& ymwd) NOEXCEPT; -+ -+template -+CONSTCD14 -+year_month_weekday -+operator-(const year_month_weekday& ymwd, const months& dm) NOEXCEPT; -+ -+CONSTCD11 -+year_month_weekday -+operator-(const year_month_weekday& ymwd, const years& dy) NOEXCEPT; -+ -+template -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const year_month_weekday& ymwdi); -+ -+// year_month_weekday_last -+ -+class year_month_weekday_last -+{ -+ date::year y_; -+ date::month m_; -+ date::weekday_last wdl_; -+ -+public: -+ CONSTCD11 year_month_weekday_last(const date::year& y, const date::month& m, -+ const date::weekday_last& wdl) NOEXCEPT; -+ -+ template -+ CONSTCD14 year_month_weekday_last& operator+=(const months& m) NOEXCEPT; -+ template -+ CONSTCD14 year_month_weekday_last& operator-=(const months& m) NOEXCEPT; -+ CONSTCD14 year_month_weekday_last& operator+=(const years& y) NOEXCEPT; -+ CONSTCD14 year_month_weekday_last& operator-=(const years& y) NOEXCEPT; -+ -+ CONSTCD11 date::year year() const NOEXCEPT; -+ CONSTCD11 date::month month() const NOEXCEPT; -+ CONSTCD11 date::weekday weekday() const NOEXCEPT; -+ CONSTCD11 date::weekday_last weekday_last() const NOEXCEPT; -+ -+ CONSTCD14 operator sys_days() const NOEXCEPT; -+ CONSTCD14 explicit operator local_days() const NOEXCEPT; -+ CONSTCD11 bool ok() const NOEXCEPT; -+ -+private: -+ CONSTCD14 days to_days() const NOEXCEPT; -+}; -+ -+CONSTCD11 -+bool -+operator==(const year_month_weekday_last& x, const year_month_weekday_last& y) NOEXCEPT; -+ -+CONSTCD11 -+bool -+operator!=(const year_month_weekday_last& x, const year_month_weekday_last& y) NOEXCEPT; -+ -+template -+CONSTCD14 -+year_month_weekday_last -+operator+(const year_month_weekday_last& ymwdl, const months& dm) NOEXCEPT; -+ -+template -+CONSTCD14 -+year_month_weekday_last -+operator+(const months& dm, const year_month_weekday_last& ymwdl) NOEXCEPT; -+ -+CONSTCD11 -+year_month_weekday_last -+operator+(const year_month_weekday_last& ymwdl, const years& dy) NOEXCEPT; -+ -+CONSTCD11 -+year_month_weekday_last -+operator+(const years& dy, const year_month_weekday_last& ymwdl) NOEXCEPT; -+ -+template -+CONSTCD14 -+year_month_weekday_last -+operator-(const year_month_weekday_last& ymwdl, const months& dm) NOEXCEPT; -+ -+CONSTCD11 -+year_month_weekday_last -+operator-(const year_month_weekday_last& ymwdl, const years& dy) NOEXCEPT; -+ -+template -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const year_month_weekday_last& ymwdl); -+ -+#if !defined(_MSC_VER) || (_MSC_VER >= 1900) -+inline namespace literals -+{ -+ -+CONSTCD11 date::day operator "" _d(unsigned long long d) NOEXCEPT; -+CONSTCD11 date::year operator "" _y(unsigned long long y) NOEXCEPT; -+ -+} // inline namespace literals -+#endif // !defined(_MSC_VER) || (_MSC_VER >= 1900) -+ -+// CONSTDATA date::month January{1}; -+// CONSTDATA date::month February{2}; -+// CONSTDATA date::month March{3}; -+// CONSTDATA date::month April{4}; -+// CONSTDATA date::month May{5}; -+// CONSTDATA date::month June{6}; -+// CONSTDATA date::month July{7}; -+// CONSTDATA date::month August{8}; -+// CONSTDATA date::month September{9}; -+// CONSTDATA date::month October{10}; -+// CONSTDATA date::month November{11}; -+// CONSTDATA date::month December{12}; -+// -+// CONSTDATA date::weekday Sunday{0u}; -+// CONSTDATA date::weekday Monday{1u}; -+// CONSTDATA date::weekday Tuesday{2u}; -+// CONSTDATA date::weekday Wednesday{3u}; -+// CONSTDATA date::weekday Thursday{4u}; -+// CONSTDATA date::weekday Friday{5u}; -+// CONSTDATA date::weekday Saturday{6u}; -+ -+#if HAS_VOID_T -+ -+template > -+struct is_clock -+ : std::false_type -+{}; -+ -+template -+struct is_clock> -+ : std::true_type -+{}; -+ -+template inline constexpr bool is_clock_v = is_clock::value; -+ -+#endif // HAS_VOID_T -+ -+//----------------+ -+// Implementation | -+//----------------+ -+ -+// utilities -+namespace detail { -+ -+template> -+class save_istream -+{ -+protected: -+ std::basic_ios& is_; -+ CharT fill_; -+ std::ios::fmtflags flags_; -+ std::streamsize precision_; -+ std::streamsize width_; -+ std::basic_ostream* tie_; -+ std::locale loc_; -+ -+public: -+ ~save_istream() -+ { -+ is_.fill(fill_); -+ is_.flags(flags_); -+ is_.precision(precision_); -+ is_.width(width_); -+ is_.imbue(loc_); -+ is_.tie(tie_); -+ } -+ -+ save_istream(const save_istream&) = delete; -+ save_istream& operator=(const save_istream&) = delete; -+ -+ explicit save_istream(std::basic_ios& is) -+ : is_(is) -+ , fill_(is.fill()) -+ , flags_(is.flags()) -+ , precision_(is.precision()) -+ , width_(is.width(0)) -+ , tie_(is.tie(nullptr)) -+ , loc_(is.getloc()) -+ { -+ if (tie_ != nullptr) -+ tie_->flush(); -+ } -+}; -+ -+template> -+class save_ostream -+ : private save_istream -+{ -+public: -+ ~save_ostream() -+ { -+ if ((this->flags_ & std::ios::unitbuf) && -+#if HAS_UNCAUGHT_EXCEPTIONS -+ std::uncaught_exceptions() == 0 && -+#else -+ !std::uncaught_exception() && -+#endif -+ this->is_.good()) -+ this->is_.rdbuf()->pubsync(); -+ } -+ -+ save_ostream(const save_ostream&) = delete; -+ save_ostream& operator=(const save_ostream&) = delete; -+ -+ explicit save_ostream(std::basic_ios& os) -+ : save_istream(os) -+ { -+ } -+}; -+ -+template -+struct choose_trunc_type -+{ -+ static const int digits = std::numeric_limits::digits; -+ using type = typename std::conditional -+ < -+ digits < 32, -+ std::int32_t, -+ typename std::conditional -+ < -+ digits < 64, -+ std::int64_t, -+#ifdef __SIZEOF_INT128__ -+ __int128 -+#else -+ std::int64_t -+#endif -+ >::type -+ >::type; -+}; -+ -+template -+CONSTCD11 -+inline -+typename std::enable_if -+< -+ !std::chrono::treat_as_floating_point::value, -+ T -+>::type -+trunc(T t) NOEXCEPT -+{ -+ return t; -+} -+ -+template -+CONSTCD14 -+inline -+typename std::enable_if -+< -+ std::chrono::treat_as_floating_point::value, -+ T -+>::type -+trunc(T t) NOEXCEPT -+{ -+ using std::numeric_limits; -+ using I = typename choose_trunc_type::type; -+ CONSTDATA auto digits = numeric_limits::digits; -+ static_assert(digits < numeric_limits::digits, ""); -+ CONSTDATA auto max = I{1} << (digits-1); -+ CONSTDATA auto min = -max; -+ const auto negative = t < T{0}; -+ if (min <= t && t <= max && t != 0 && t == t) -+ { -+ t = static_cast(static_cast(t)); -+ if (t == 0 && negative) -+ t = -t; -+ } -+ return t; -+} -+ -+template -+struct static_gcd -+{ -+ static const std::intmax_t value = static_gcd::value; -+}; -+ -+template -+struct static_gcd -+{ -+ static const std::intmax_t value = Xp; -+}; -+ -+template <> -+struct static_gcd<0, 0> -+{ -+ static const std::intmax_t value = 1; -+}; -+ -+template -+struct no_overflow -+{ -+private: -+ static const std::intmax_t gcd_n1_n2 = static_gcd::value; -+ static const std::intmax_t gcd_d1_d2 = static_gcd::value; -+ static const std::intmax_t n1 = R1::num / gcd_n1_n2; -+ static const std::intmax_t d1 = R1::den / gcd_d1_d2; -+ static const std::intmax_t n2 = R2::num / gcd_n1_n2; -+ static const std::intmax_t d2 = R2::den / gcd_d1_d2; -+#ifdef __cpp_constexpr -+ static const std::intmax_t max = std::numeric_limits::max(); -+#else -+ static const std::intmax_t max = LLONG_MAX; -+#endif -+ -+ template -+ struct mul // overflow == false -+ { -+ static const std::intmax_t value = Xp * Yp; -+ }; -+ -+ template -+ struct mul -+ { -+ static const std::intmax_t value = 1; -+ }; -+ -+public: -+ static const bool value = (n1 <= max / d2) && (n2 <= max / d1); -+ typedef std::ratio::value, -+ mul::value> type; -+}; -+ -+} // detail -+ -+// trunc towards zero -+template -+CONSTCD11 -+inline -+typename std::enable_if -+< -+ detail::no_overflow::value, -+ To -+>::type -+trunc(const std::chrono::duration& d) -+{ -+ return To{detail::trunc(std::chrono::duration_cast(d).count())}; -+} -+ -+template -+CONSTCD11 -+inline -+typename std::enable_if -+< -+ !detail::no_overflow::value, -+ To -+>::type -+trunc(const std::chrono::duration& d) -+{ -+ using std::chrono::duration_cast; -+ using std::chrono::duration; -+ using rep = typename std::common_type::type; -+ return To{detail::trunc(duration_cast(duration_cast>(d)).count())}; -+} -+ -+#ifndef HAS_CHRONO_ROUNDING -+# if defined(_MSC_FULL_VER) && (_MSC_FULL_VER >= 190023918 || (_MSC_FULL_VER >= 190000000 && defined (__clang__))) -+# define HAS_CHRONO_ROUNDING 1 -+# elif defined(__cpp_lib_chrono) && __cplusplus > 201402 && __cpp_lib_chrono >= 201510 -+# define HAS_CHRONO_ROUNDING 1 -+# elif defined(_LIBCPP_VERSION) && __cplusplus > 201402 && _LIBCPP_VERSION >= 3800 -+# define HAS_CHRONO_ROUNDING 1 -+# else -+# define HAS_CHRONO_ROUNDING 0 -+# endif -+#endif // HAS_CHRONO_ROUNDING -+ -+#if HAS_CHRONO_ROUNDING == 0 -+ -+// round down -+template -+CONSTCD14 -+inline -+typename std::enable_if -+< -+ detail::no_overflow::value, -+ To -+>::type -+floor(const std::chrono::duration& d) -+{ -+ auto t = trunc(d); -+ if (t > d) -+ return t - To{1}; -+ return t; -+} -+ -+template -+CONSTCD14 -+inline -+typename std::enable_if -+< -+ !detail::no_overflow::value, -+ To -+>::type -+floor(const std::chrono::duration& d) -+{ -+ using rep = typename std::common_type::type; -+ return floor(floor>(d)); -+} -+ -+// round to nearest, to even on tie -+template -+CONSTCD14 -+inline -+To -+round(const std::chrono::duration& d) -+{ -+ auto t0 = floor(d); -+ auto t1 = t0 + To{1}; -+ if (t1 == To{0} && t0 < To{0}) -+ t1 = -t1; -+ auto diff0 = d - t0; -+ auto diff1 = t1 - d; -+ if (diff0 == diff1) -+ { -+ if (t0 - trunc(t0/2)*2 == To{0}) -+ return t0; -+ return t1; -+ } -+ if (diff0 < diff1) -+ return t0; -+ return t1; -+} -+ -+// round up -+template -+CONSTCD14 -+inline -+To -+ceil(const std::chrono::duration& d) -+{ -+ auto t = trunc(d); -+ if (t < d) -+ return t + To{1}; -+ return t; -+} -+ -+template ::is_signed -+ >::type> -+CONSTCD11 -+std::chrono::duration -+abs(std::chrono::duration d) -+{ -+ return d >= d.zero() ? d : -d; -+} -+ -+// round down -+template -+CONSTCD11 -+inline -+std::chrono::time_point -+floor(const std::chrono::time_point& tp) -+{ -+ using std::chrono::time_point; -+ return time_point{date::floor(tp.time_since_epoch())}; -+} -+ -+// round to nearest, to even on tie -+template -+CONSTCD11 -+inline -+std::chrono::time_point -+round(const std::chrono::time_point& tp) -+{ -+ using std::chrono::time_point; -+ return time_point{round(tp.time_since_epoch())}; -+} -+ -+// round up -+template -+CONSTCD11 -+inline -+std::chrono::time_point -+ceil(const std::chrono::time_point& tp) -+{ -+ using std::chrono::time_point; -+ return time_point{ceil(tp.time_since_epoch())}; -+} -+ -+#else // HAS_CHRONO_ROUNDING == 1 -+ -+using std::chrono::floor; -+using std::chrono::ceil; -+using std::chrono::round; -+using std::chrono::abs; -+ -+#endif // HAS_CHRONO_ROUNDING -+ -+namespace detail -+{ -+ -+template -+CONSTCD14 -+inline -+typename std::enable_if -+< -+ !std::chrono::treat_as_floating_point::value, -+ To -+>::type -+round_i(const std::chrono::duration& d) -+{ -+ return round(d); -+} -+ -+template -+CONSTCD14 -+inline -+typename std::enable_if -+< -+ std::chrono::treat_as_floating_point::value, -+ To -+>::type -+round_i(const std::chrono::duration& d) -+{ -+ return d; -+} -+ -+template -+CONSTCD11 -+inline -+std::chrono::time_point -+round_i(const std::chrono::time_point& tp) -+{ -+ using std::chrono::time_point; -+ return time_point{round_i(tp.time_since_epoch())}; -+} -+ -+} // detail -+ -+// trunc towards zero -+template -+CONSTCD11 -+inline -+std::chrono::time_point -+trunc(const std::chrono::time_point& tp) -+{ -+ using std::chrono::time_point; -+ return time_point{trunc(tp.time_since_epoch())}; -+} -+ -+// day -+ -+CONSTCD11 inline day::day(unsigned d) NOEXCEPT : d_(static_cast(d)) {} -+CONSTCD14 inline day& day::operator++() NOEXCEPT {++d_; return *this;} -+CONSTCD14 inline day day::operator++(int) NOEXCEPT {auto tmp(*this); ++(*this); return tmp;} -+CONSTCD14 inline day& day::operator--() NOEXCEPT {--d_; return *this;} -+CONSTCD14 inline day day::operator--(int) NOEXCEPT {auto tmp(*this); --(*this); return tmp;} -+CONSTCD14 inline day& day::operator+=(const days& d) NOEXCEPT {*this = *this + d; return *this;} -+CONSTCD14 inline day& day::operator-=(const days& d) NOEXCEPT {*this = *this - d; return *this;} -+CONSTCD11 inline day::operator unsigned() const NOEXCEPT {return d_;} -+CONSTCD11 inline bool day::ok() const NOEXCEPT {return 1 <= d_ && d_ <= 31;} -+ -+CONSTCD11 -+inline -+bool -+operator==(const day& x, const day& y) NOEXCEPT -+{ -+ return static_cast(x) == static_cast(y); -+} -+ -+CONSTCD11 -+inline -+bool -+operator!=(const day& x, const day& y) NOEXCEPT -+{ -+ return !(x == y); -+} -+ -+CONSTCD11 -+inline -+bool -+operator<(const day& x, const day& y) NOEXCEPT -+{ -+ return static_cast(x) < static_cast(y); -+} -+ -+CONSTCD11 -+inline -+bool -+operator>(const day& x, const day& y) NOEXCEPT -+{ -+ return y < x; -+} -+ -+CONSTCD11 -+inline -+bool -+operator<=(const day& x, const day& y) NOEXCEPT -+{ -+ return !(y < x); -+} -+ -+CONSTCD11 -+inline -+bool -+operator>=(const day& x, const day& y) NOEXCEPT -+{ -+ return !(x < y); -+} -+ -+CONSTCD11 -+inline -+days -+operator-(const day& x, const day& y) NOEXCEPT -+{ -+ return days{static_cast(static_cast(x) -+ - static_cast(y))}; -+} -+ -+CONSTCD11 -+inline -+day -+operator+(const day& x, const days& y) NOEXCEPT -+{ -+ return day{static_cast(x) + static_cast(y.count())}; -+} -+ -+CONSTCD11 -+inline -+day -+operator+(const days& x, const day& y) NOEXCEPT -+{ -+ return y + x; -+} -+ -+CONSTCD11 -+inline -+day -+operator-(const day& x, const days& y) NOEXCEPT -+{ -+ return x + -y; -+} -+ -+namespace detail -+{ -+ -+template -+std::basic_ostream& -+low_level_fmt(std::basic_ostream& os, const day& d) -+{ -+ detail::save_ostream _(os); -+ os.fill('0'); -+ os.flags(std::ios::dec | std::ios::right); -+ os.width(2); -+ os << static_cast(d); -+ return os; -+} -+ -+} // namespace detail -+ -+template -+inline -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const day& d) -+{ -+ detail::low_level_fmt(os, d); -+ if (!d.ok()) -+ os << " is not a valid day"; -+ return os; -+} -+ -+// month -+ -+CONSTCD11 inline month::month(unsigned m) NOEXCEPT : m_(static_cast(m)) {} -+CONSTCD14 inline month& month::operator++() NOEXCEPT {*this += months{1}; return *this;} -+CONSTCD14 inline month month::operator++(int) NOEXCEPT {auto tmp(*this); ++(*this); return tmp;} -+CONSTCD14 inline month& month::operator--() NOEXCEPT {*this -= months{1}; return *this;} -+CONSTCD14 inline month month::operator--(int) NOEXCEPT {auto tmp(*this); --(*this); return tmp;} -+ -+CONSTCD14 -+inline -+month& -+month::operator+=(const months& m) NOEXCEPT -+{ -+ *this = *this + m; -+ return *this; -+} -+ -+CONSTCD14 -+inline -+month& -+month::operator-=(const months& m) NOEXCEPT -+{ -+ *this = *this - m; -+ return *this; -+} -+ -+CONSTCD11 inline month::operator unsigned() const NOEXCEPT {return m_;} -+CONSTCD11 inline bool month::ok() const NOEXCEPT {return 1 <= m_ && m_ <= 12;} -+ -+CONSTCD11 -+inline -+bool -+operator==(const month& x, const month& y) NOEXCEPT -+{ -+ return static_cast(x) == static_cast(y); -+} -+ -+CONSTCD11 -+inline -+bool -+operator!=(const month& x, const month& y) NOEXCEPT -+{ -+ return !(x == y); -+} -+ -+CONSTCD11 -+inline -+bool -+operator<(const month& x, const month& y) NOEXCEPT -+{ -+ return static_cast(x) < static_cast(y); -+} -+ -+CONSTCD11 -+inline -+bool -+operator>(const month& x, const month& y) NOEXCEPT -+{ -+ return y < x; -+} -+ -+CONSTCD11 -+inline -+bool -+operator<=(const month& x, const month& y) NOEXCEPT -+{ -+ return !(y < x); -+} -+ -+CONSTCD11 -+inline -+bool -+operator>=(const month& x, const month& y) NOEXCEPT -+{ -+ return !(x < y); -+} -+ -+CONSTCD14 -+inline -+months -+operator-(const month& x, const month& y) NOEXCEPT -+{ -+ auto const d = static_cast(x) - static_cast(y); -+ return months(d <= 11 ? d : d + 12); -+} -+ -+CONSTCD14 -+inline -+month -+operator+(const month& x, const months& y) NOEXCEPT -+{ -+ auto const mu = static_cast(static_cast(x)) + y.count() - 1; -+ auto const yr = (mu >= 0 ? mu : mu-11) / 12; -+ return month{static_cast(mu - yr * 12 + 1)}; -+} -+ -+CONSTCD14 -+inline -+month -+operator+(const months& x, const month& y) NOEXCEPT -+{ -+ return y + x; -+} -+ -+CONSTCD14 -+inline -+month -+operator-(const month& x, const months& y) NOEXCEPT -+{ -+ return x + -y; -+} -+ -+namespace detail -+{ -+ -+template -+std::basic_ostream& -+low_level_fmt(std::basic_ostream& os, const month& m) -+{ -+ if (m.ok()) -+ { -+ CharT fmt[] = {'%', 'b', 0}; -+ os << format(os.getloc(), fmt, m); -+ } -+ else -+ os << static_cast(m); -+ return os; -+} -+ -+} // namespace detail -+ -+template -+inline -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const month& m) -+{ -+ detail::low_level_fmt(os, m); -+ if (!m.ok()) -+ os << " is not a valid month"; -+ return os; -+} -+ -+// year -+ -+CONSTCD11 inline year::year(int y) NOEXCEPT : y_(static_cast(y)) {} -+CONSTCD14 inline year& year::operator++() NOEXCEPT {++y_; return *this;} -+CONSTCD14 inline year year::operator++(int) NOEXCEPT {auto tmp(*this); ++(*this); return tmp;} -+CONSTCD14 inline year& year::operator--() NOEXCEPT {--y_; return *this;} -+CONSTCD14 inline year year::operator--(int) NOEXCEPT {auto tmp(*this); --(*this); return tmp;} -+CONSTCD14 inline year& year::operator+=(const years& y) NOEXCEPT {*this = *this + y; return *this;} -+CONSTCD14 inline year& year::operator-=(const years& y) NOEXCEPT {*this = *this - y; return *this;} -+CONSTCD11 inline year year::operator-() const NOEXCEPT {return year{-y_};} -+CONSTCD11 inline year year::operator+() const NOEXCEPT {return *this;} -+ -+CONSTCD11 -+inline -+bool -+year::is_leap() const NOEXCEPT -+{ -+ return y_ % 4 == 0 && (y_ % 100 != 0 || y_ % 400 == 0); -+} -+ -+CONSTCD11 inline year::operator int() const NOEXCEPT {return y_;} -+ -+CONSTCD11 -+inline -+bool -+year::ok() const NOEXCEPT -+{ -+ return y_ != std::numeric_limits::min(); -+} -+ -+CONSTCD11 -+inline -+bool -+operator==(const year& x, const year& y) NOEXCEPT -+{ -+ return static_cast(x) == static_cast(y); -+} -+ -+CONSTCD11 -+inline -+bool -+operator!=(const year& x, const year& y) NOEXCEPT -+{ -+ return !(x == y); -+} -+ -+CONSTCD11 -+inline -+bool -+operator<(const year& x, const year& y) NOEXCEPT -+{ -+ return static_cast(x) < static_cast(y); -+} -+ -+CONSTCD11 -+inline -+bool -+operator>(const year& x, const year& y) NOEXCEPT -+{ -+ return y < x; -+} -+ -+CONSTCD11 -+inline -+bool -+operator<=(const year& x, const year& y) NOEXCEPT -+{ -+ return !(y < x); -+} -+ -+CONSTCD11 -+inline -+bool -+operator>=(const year& x, const year& y) NOEXCEPT -+{ -+ return !(x < y); -+} -+ -+CONSTCD11 -+inline -+years -+operator-(const year& x, const year& y) NOEXCEPT -+{ -+ return years{static_cast(x) - static_cast(y)}; -+} -+ -+CONSTCD11 -+inline -+year -+operator+(const year& x, const years& y) NOEXCEPT -+{ -+ return year{static_cast(x) + y.count()}; -+} -+ -+CONSTCD11 -+inline -+year -+operator+(const years& x, const year& y) NOEXCEPT -+{ -+ return y + x; -+} -+ -+CONSTCD11 -+inline -+year -+operator-(const year& x, const years& y) NOEXCEPT -+{ -+ return year{static_cast(x) - y.count()}; -+} -+ -+namespace detail -+{ -+ -+template -+std::basic_ostream& -+low_level_fmt(std::basic_ostream& os, const year& y) -+{ -+ detail::save_ostream _(os); -+ os.fill('0'); -+ os.flags(std::ios::dec | std::ios::internal); -+ os.width(4 + (y < year{0})); -+ os.imbue(std::locale::classic()); -+ os << static_cast(y); -+ return os; -+} -+ -+} // namespace detail -+ -+template -+inline -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const year& y) -+{ -+ detail::low_level_fmt(os, y); -+ if (!y.ok()) -+ os << " is not a valid year"; -+ return os; -+} -+ -+// weekday -+ -+CONSTCD14 -+inline -+unsigned char -+weekday::weekday_from_days(int z) NOEXCEPT -+{ -+ auto u = static_cast(z); -+ return static_cast(z >= -4 ? (u+4) % 7 : u % 7); -+} -+ -+CONSTCD11 -+inline -+weekday::weekday(unsigned wd) NOEXCEPT -+ : wd_(static_cast(wd != 7 ? wd : 0)) -+ {} -+ -+CONSTCD14 -+inline -+weekday::weekday(const sys_days& dp) NOEXCEPT -+ : wd_(weekday_from_days(dp.time_since_epoch().count())) -+ {} -+ -+CONSTCD14 -+inline -+weekday::weekday(const local_days& dp) NOEXCEPT -+ : wd_(weekday_from_days(dp.time_since_epoch().count())) -+ {} -+ -+CONSTCD14 inline weekday& weekday::operator++() NOEXCEPT {*this += days{1}; return *this;} -+CONSTCD14 inline weekday weekday::operator++(int) NOEXCEPT {auto tmp(*this); ++(*this); return tmp;} -+CONSTCD14 inline weekday& weekday::operator--() NOEXCEPT {*this -= days{1}; return *this;} -+CONSTCD14 inline weekday weekday::operator--(int) NOEXCEPT {auto tmp(*this); --(*this); return tmp;} -+ -+CONSTCD14 -+inline -+weekday& -+weekday::operator+=(const days& d) NOEXCEPT -+{ -+ *this = *this + d; -+ return *this; -+} -+ -+CONSTCD14 -+inline -+weekday& -+weekday::operator-=(const days& d) NOEXCEPT -+{ -+ *this = *this - d; -+ return *this; -+} -+ -+CONSTCD11 inline bool weekday::ok() const NOEXCEPT {return wd_ <= 6;} -+ -+CONSTCD11 -+inline -+unsigned weekday::c_encoding() const NOEXCEPT -+{ -+ return unsigned{wd_}; -+} -+ -+CONSTCD11 -+inline -+unsigned weekday::iso_encoding() const NOEXCEPT -+{ -+ return unsigned{((wd_ == 0u) ? 7u : wd_)}; -+} -+ -+CONSTCD11 -+inline -+bool -+operator==(const weekday& x, const weekday& y) NOEXCEPT -+{ -+ return x.wd_ == y.wd_; -+} -+ -+CONSTCD11 -+inline -+bool -+operator!=(const weekday& x, const weekday& y) NOEXCEPT -+{ -+ return !(x == y); -+} -+ -+CONSTCD14 -+inline -+days -+operator-(const weekday& x, const weekday& y) NOEXCEPT -+{ -+ auto const wdu = x.wd_ - y.wd_; -+ auto const wk = (wdu >= 0 ? wdu : wdu-6) / 7; -+ return days{wdu - wk * 7}; -+} -+ -+CONSTCD14 -+inline -+weekday -+operator+(const weekday& x, const days& y) NOEXCEPT -+{ -+ auto const wdu = static_cast(static_cast(x.wd_)) + y.count(); -+ auto const wk = (wdu >= 0 ? wdu : wdu-6) / 7; -+ return weekday{static_cast(wdu - wk * 7)}; -+} -+ -+CONSTCD14 -+inline -+weekday -+operator+(const days& x, const weekday& y) NOEXCEPT -+{ -+ return y + x; -+} -+ -+CONSTCD14 -+inline -+weekday -+operator-(const weekday& x, const days& y) NOEXCEPT -+{ -+ return x + -y; -+} -+ -+namespace detail -+{ -+ -+template -+std::basic_ostream& -+low_level_fmt(std::basic_ostream& os, const weekday& wd) -+{ -+ if (wd.ok()) -+ { -+ CharT fmt[] = {'%', 'a', 0}; -+ os << format(fmt, wd); -+ } -+ else -+ os << wd.c_encoding(); -+ return os; -+} -+ -+} // namespace detail -+ -+template -+inline -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const weekday& wd) -+{ -+ detail::low_level_fmt(os, wd); -+ if (!wd.ok()) -+ os << " is not a valid weekday"; -+ return os; -+} -+ -+#if !defined(_MSC_VER) || (_MSC_VER >= 1900) -+inline namespace literals -+{ -+ -+CONSTCD11 -+inline -+date::day -+operator "" _d(unsigned long long d) NOEXCEPT -+{ -+ return date::day{static_cast(d)}; -+} -+ -+CONSTCD11 -+inline -+date::year -+operator "" _y(unsigned long long y) NOEXCEPT -+{ -+ return date::year(static_cast(y)); -+} -+#endif // !defined(_MSC_VER) || (_MSC_VER >= 1900) -+ -+CONSTDATA date::last_spec last{}; -+ -+CONSTDATA date::month jan{1}; -+CONSTDATA date::month feb{2}; -+CONSTDATA date::month mar{3}; -+CONSTDATA date::month apr{4}; -+CONSTDATA date::month may{5}; -+CONSTDATA date::month jun{6}; -+CONSTDATA date::month jul{7}; -+CONSTDATA date::month aug{8}; -+CONSTDATA date::month sep{9}; -+CONSTDATA date::month oct{10}; -+CONSTDATA date::month nov{11}; -+CONSTDATA date::month dec{12}; -+ -+CONSTDATA date::weekday sun{0u}; -+CONSTDATA date::weekday mon{1u}; -+CONSTDATA date::weekday tue{2u}; -+CONSTDATA date::weekday wed{3u}; -+CONSTDATA date::weekday thu{4u}; -+CONSTDATA date::weekday fri{5u}; -+CONSTDATA date::weekday sat{6u}; -+ -+#if !defined(_MSC_VER) || (_MSC_VER >= 1900) -+} // inline namespace literals -+#endif -+ -+CONSTDATA date::month January{1}; -+CONSTDATA date::month February{2}; -+CONSTDATA date::month March{3}; -+CONSTDATA date::month April{4}; -+CONSTDATA date::month May{5}; -+CONSTDATA date::month June{6}; -+CONSTDATA date::month July{7}; -+CONSTDATA date::month August{8}; -+CONSTDATA date::month September{9}; -+CONSTDATA date::month October{10}; -+CONSTDATA date::month November{11}; -+CONSTDATA date::month December{12}; -+ -+CONSTDATA date::weekday Monday{1}; -+CONSTDATA date::weekday Tuesday{2}; -+CONSTDATA date::weekday Wednesday{3}; -+CONSTDATA date::weekday Thursday{4}; -+CONSTDATA date::weekday Friday{5}; -+CONSTDATA date::weekday Saturday{6}; -+CONSTDATA date::weekday Sunday{7}; -+ -+// weekday_indexed -+ -+CONSTCD11 -+inline -+weekday -+weekday_indexed::weekday() const NOEXCEPT -+{ -+ return date::weekday{static_cast(wd_)}; -+} -+ -+CONSTCD11 inline unsigned weekday_indexed::index() const NOEXCEPT {return index_;} -+ -+CONSTCD11 -+inline -+bool -+weekday_indexed::ok() const NOEXCEPT -+{ -+ return weekday().ok() && 1 <= index_ && index_ <= 5; -+} -+ -+#ifdef __GNUC__ -+# pragma GCC diagnostic push -+# pragma GCC diagnostic ignored "-Wconversion" -+#endif // __GNUC__ -+ -+CONSTCD11 -+inline -+weekday_indexed::weekday_indexed(const date::weekday& wd, unsigned index) NOEXCEPT -+ : wd_(static_cast(static_cast(wd.wd_))) -+ , index_(static_cast(index)) -+ {} -+ -+#ifdef __GNUC__ -+# pragma GCC diagnostic pop -+#endif // __GNUC__ -+ -+namespace detail -+{ -+ -+template -+std::basic_ostream& -+low_level_fmt(std::basic_ostream& os, const weekday_indexed& wdi) -+{ -+ return low_level_fmt(os, wdi.weekday()) << '[' << wdi.index() << ']'; -+} -+ -+} // namespace detail -+ -+template -+inline -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const weekday_indexed& wdi) -+{ -+ detail::low_level_fmt(os, wdi); -+ if (!wdi.ok()) -+ os << " is not a valid weekday_indexed"; -+ return os; -+} -+ -+CONSTCD11 -+inline -+weekday_indexed -+weekday::operator[](unsigned index) const NOEXCEPT -+{ -+ return {*this, index}; -+} -+ -+CONSTCD11 -+inline -+bool -+operator==(const weekday_indexed& x, const weekday_indexed& y) NOEXCEPT -+{ -+ return x.weekday() == y.weekday() && x.index() == y.index(); -+} -+ -+CONSTCD11 -+inline -+bool -+operator!=(const weekday_indexed& x, const weekday_indexed& y) NOEXCEPT -+{ -+ return !(x == y); -+} -+ -+// weekday_last -+ -+CONSTCD11 inline date::weekday weekday_last::weekday() const NOEXCEPT {return wd_;} -+CONSTCD11 inline bool weekday_last::ok() const NOEXCEPT {return wd_.ok();} -+CONSTCD11 inline weekday_last::weekday_last(const date::weekday& wd) NOEXCEPT : wd_(wd) {} -+ -+CONSTCD11 -+inline -+bool -+operator==(const weekday_last& x, const weekday_last& y) NOEXCEPT -+{ -+ return x.weekday() == y.weekday(); -+} -+ -+CONSTCD11 -+inline -+bool -+operator!=(const weekday_last& x, const weekday_last& y) NOEXCEPT -+{ -+ return !(x == y); -+} -+ -+namespace detail -+{ -+ -+template -+std::basic_ostream& -+low_level_fmt(std::basic_ostream& os, const weekday_last& wdl) -+{ -+ return low_level_fmt(os, wdl.weekday()) << "[last]"; -+} -+ -+} // namespace detail -+ -+template -+inline -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const weekday_last& wdl) -+{ -+ detail::low_level_fmt(os, wdl); -+ if (!wdl.ok()) -+ os << " is not a valid weekday_last"; -+ return os; -+} -+ -+CONSTCD11 -+inline -+weekday_last -+weekday::operator[](last_spec) const NOEXCEPT -+{ -+ return weekday_last{*this}; -+} -+ -+// year_month -+ -+CONSTCD11 -+inline -+year_month::year_month(const date::year& y, const date::month& m) NOEXCEPT -+ : y_(y) -+ , m_(m) -+ {} -+ -+CONSTCD11 inline year year_month::year() const NOEXCEPT {return y_;} -+CONSTCD11 inline month year_month::month() const NOEXCEPT {return m_;} -+CONSTCD11 inline bool year_month::ok() const NOEXCEPT {return y_.ok() && m_.ok();} -+ -+template -+CONSTCD14 -+inline -+year_month& -+year_month::operator+=(const months& dm) NOEXCEPT -+{ -+ *this = *this + dm; -+ return *this; -+} -+ -+template -+CONSTCD14 -+inline -+year_month& -+year_month::operator-=(const months& dm) NOEXCEPT -+{ -+ *this = *this - dm; -+ return *this; -+} -+ -+CONSTCD14 -+inline -+year_month& -+year_month::operator+=(const years& dy) NOEXCEPT -+{ -+ *this = *this + dy; -+ return *this; -+} -+ -+CONSTCD14 -+inline -+year_month& -+year_month::operator-=(const years& dy) NOEXCEPT -+{ -+ *this = *this - dy; -+ return *this; -+} -+ -+CONSTCD11 -+inline -+bool -+operator==(const year_month& x, const year_month& y) NOEXCEPT -+{ -+ return x.year() == y.year() && x.month() == y.month(); -+} -+ -+CONSTCD11 -+inline -+bool -+operator!=(const year_month& x, const year_month& y) NOEXCEPT -+{ -+ return !(x == y); -+} -+ -+CONSTCD11 -+inline -+bool -+operator<(const year_month& x, const year_month& y) NOEXCEPT -+{ -+ return x.year() < y.year() ? true -+ : (x.year() > y.year() ? false -+ : (x.month() < y.month())); -+} -+ -+CONSTCD11 -+inline -+bool -+operator>(const year_month& x, const year_month& y) NOEXCEPT -+{ -+ return y < x; -+} -+ -+CONSTCD11 -+inline -+bool -+operator<=(const year_month& x, const year_month& y) NOEXCEPT -+{ -+ return !(y < x); -+} -+ -+CONSTCD11 -+inline -+bool -+operator>=(const year_month& x, const year_month& y) NOEXCEPT -+{ -+ return !(x < y); -+} -+ -+template -+CONSTCD14 -+inline -+year_month -+operator+(const year_month& ym, const months& dm) NOEXCEPT -+{ -+ auto dmi = static_cast(static_cast(ym.month())) - 1 + dm.count(); -+ auto dy = (dmi >= 0 ? dmi : dmi-11) / 12; -+ dmi = dmi - dy * 12 + 1; -+ return (ym.year() + years(dy)) / month(static_cast(dmi)); -+} -+ -+template -+CONSTCD14 -+inline -+year_month -+operator+(const months& dm, const year_month& ym) NOEXCEPT -+{ -+ return ym + dm; -+} -+ -+template -+CONSTCD14 -+inline -+year_month -+operator-(const year_month& ym, const months& dm) NOEXCEPT -+{ -+ return ym + -dm; -+} -+ -+CONSTCD11 -+inline -+months -+operator-(const year_month& x, const year_month& y) NOEXCEPT -+{ -+ return (x.year() - y.year()) + -+ months(static_cast(x.month()) - static_cast(y.month())); -+} -+ -+CONSTCD11 -+inline -+year_month -+operator+(const year_month& ym, const years& dy) NOEXCEPT -+{ -+ return (ym.year() + dy) / ym.month(); -+} -+ -+CONSTCD11 -+inline -+year_month -+operator+(const years& dy, const year_month& ym) NOEXCEPT -+{ -+ return ym + dy; -+} -+ -+CONSTCD11 -+inline -+year_month -+operator-(const year_month& ym, const years& dy) NOEXCEPT -+{ -+ return ym + -dy; -+} -+ -+namespace detail -+{ -+ -+template -+std::basic_ostream& -+low_level_fmt(std::basic_ostream& os, const year_month& ym) -+{ -+ low_level_fmt(os, ym.year()) << '/'; -+ return low_level_fmt(os, ym.month()); -+} -+ -+} // namespace detail -+ -+template -+inline -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const year_month& ym) -+{ -+ detail::low_level_fmt(os, ym); -+ if (!ym.ok()) -+ os << " is not a valid year_month"; -+ return os; -+} -+ -+// month_day -+ -+CONSTCD11 -+inline -+month_day::month_day(const date::month& m, const date::day& d) NOEXCEPT -+ : m_(m) -+ , d_(d) -+ {} -+ -+CONSTCD11 inline date::month month_day::month() const NOEXCEPT {return m_;} -+CONSTCD11 inline date::day month_day::day() const NOEXCEPT {return d_;} -+ -+CONSTCD14 -+inline -+bool -+month_day::ok() const NOEXCEPT -+{ -+ CONSTDATA date::day d[] = -+ { -+ date::day(31), date::day(29), date::day(31), -+ date::day(30), date::day(31), date::day(30), -+ date::day(31), date::day(31), date::day(30), -+ date::day(31), date::day(30), date::day(31) -+ }; -+ return m_.ok() && date::day{1} <= d_ && d_ <= d[static_cast(m_)-1]; -+} -+ -+CONSTCD11 -+inline -+bool -+operator==(const month_day& x, const month_day& y) NOEXCEPT -+{ -+ return x.month() == y.month() && x.day() == y.day(); -+} -+ -+CONSTCD11 -+inline -+bool -+operator!=(const month_day& x, const month_day& y) NOEXCEPT -+{ -+ return !(x == y); -+} -+ -+CONSTCD11 -+inline -+bool -+operator<(const month_day& x, const month_day& y) NOEXCEPT -+{ -+ return x.month() < y.month() ? true -+ : (x.month() > y.month() ? false -+ : (x.day() < y.day())); -+} -+ -+CONSTCD11 -+inline -+bool -+operator>(const month_day& x, const month_day& y) NOEXCEPT -+{ -+ return y < x; -+} -+ -+CONSTCD11 -+inline -+bool -+operator<=(const month_day& x, const month_day& y) NOEXCEPT -+{ -+ return !(y < x); -+} -+ -+CONSTCD11 -+inline -+bool -+operator>=(const month_day& x, const month_day& y) NOEXCEPT -+{ -+ return !(x < y); -+} -+ -+namespace detail -+{ -+ -+template -+std::basic_ostream& -+low_level_fmt(std::basic_ostream& os, const month_day& md) -+{ -+ low_level_fmt(os, md.month()) << '/'; -+ return low_level_fmt(os, md.day()); -+} -+ -+} // namespace detail -+ -+template -+inline -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const month_day& md) -+{ -+ detail::low_level_fmt(os, md); -+ if (!md.ok()) -+ os << " is not a valid month_day"; -+ return os; -+} -+ -+// month_day_last -+ -+CONSTCD11 inline month month_day_last::month() const NOEXCEPT {return m_;} -+CONSTCD11 inline bool month_day_last::ok() const NOEXCEPT {return m_.ok();} -+CONSTCD11 inline month_day_last::month_day_last(const date::month& m) NOEXCEPT : m_(m) {} -+ -+CONSTCD11 -+inline -+bool -+operator==(const month_day_last& x, const month_day_last& y) NOEXCEPT -+{ -+ return x.month() == y.month(); -+} -+ -+CONSTCD11 -+inline -+bool -+operator!=(const month_day_last& x, const month_day_last& y) NOEXCEPT -+{ -+ return !(x == y); -+} -+ -+CONSTCD11 -+inline -+bool -+operator<(const month_day_last& x, const month_day_last& y) NOEXCEPT -+{ -+ return x.month() < y.month(); -+} -+ -+CONSTCD11 -+inline -+bool -+operator>(const month_day_last& x, const month_day_last& y) NOEXCEPT -+{ -+ return y < x; -+} -+ -+CONSTCD11 -+inline -+bool -+operator<=(const month_day_last& x, const month_day_last& y) NOEXCEPT -+{ -+ return !(y < x); -+} -+ -+CONSTCD11 -+inline -+bool -+operator>=(const month_day_last& x, const month_day_last& y) NOEXCEPT -+{ -+ return !(x < y); -+} -+ -+namespace detail -+{ -+ -+template -+std::basic_ostream& -+low_level_fmt(std::basic_ostream& os, const month_day_last& mdl) -+{ -+ return low_level_fmt(os, mdl.month()) << "/last"; -+} -+ -+} // namespace detail -+ -+template -+inline -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const month_day_last& mdl) -+{ -+ detail::low_level_fmt(os, mdl); -+ if (!mdl.ok()) -+ os << " is not a valid month_day_last"; -+ return os; -+} -+ -+// month_weekday -+ -+CONSTCD11 -+inline -+month_weekday::month_weekday(const date::month& m, -+ const date::weekday_indexed& wdi) NOEXCEPT -+ : m_(m) -+ , wdi_(wdi) -+ {} -+ -+CONSTCD11 inline month month_weekday::month() const NOEXCEPT {return m_;} -+ -+CONSTCD11 -+inline -+weekday_indexed -+month_weekday::weekday_indexed() const NOEXCEPT -+{ -+ return wdi_; -+} -+ -+CONSTCD11 -+inline -+bool -+month_weekday::ok() const NOEXCEPT -+{ -+ return m_.ok() && wdi_.ok(); -+} -+ -+CONSTCD11 -+inline -+bool -+operator==(const month_weekday& x, const month_weekday& y) NOEXCEPT -+{ -+ return x.month() == y.month() && x.weekday_indexed() == y.weekday_indexed(); -+} -+ -+CONSTCD11 -+inline -+bool -+operator!=(const month_weekday& x, const month_weekday& y) NOEXCEPT -+{ -+ return !(x == y); -+} -+ -+namespace detail -+{ -+ -+template -+std::basic_ostream& -+low_level_fmt(std::basic_ostream& os, const month_weekday& mwd) -+{ -+ low_level_fmt(os, mwd.month()) << '/'; -+ return low_level_fmt(os, mwd.weekday_indexed()); -+} -+ -+} // namespace detail -+ -+template -+inline -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const month_weekday& mwd) -+{ -+ detail::low_level_fmt(os, mwd); -+ if (!mwd.ok()) -+ os << " is not a valid month_weekday"; -+ return os; -+} -+ -+// month_weekday_last -+ -+CONSTCD11 -+inline -+month_weekday_last::month_weekday_last(const date::month& m, -+ const date::weekday_last& wdl) NOEXCEPT -+ : m_(m) -+ , wdl_(wdl) -+ {} -+ -+CONSTCD11 inline month month_weekday_last::month() const NOEXCEPT {return m_;} -+ -+CONSTCD11 -+inline -+weekday_last -+month_weekday_last::weekday_last() const NOEXCEPT -+{ -+ return wdl_; -+} -+ -+CONSTCD11 -+inline -+bool -+month_weekday_last::ok() const NOEXCEPT -+{ -+ return m_.ok() && wdl_.ok(); -+} -+ -+CONSTCD11 -+inline -+bool -+operator==(const month_weekday_last& x, const month_weekday_last& y) NOEXCEPT -+{ -+ return x.month() == y.month() && x.weekday_last() == y.weekday_last(); -+} -+ -+CONSTCD11 -+inline -+bool -+operator!=(const month_weekday_last& x, const month_weekday_last& y) NOEXCEPT -+{ -+ return !(x == y); -+} -+ -+namespace detail -+{ -+ -+template -+std::basic_ostream& -+low_level_fmt(std::basic_ostream& os, const month_weekday_last& mwdl) -+{ -+ low_level_fmt(os, mwdl.month()) << '/'; -+ return low_level_fmt(os, mwdl.weekday_last()); -+} -+ -+} // namespace detail -+ -+template -+inline -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const month_weekday_last& mwdl) -+{ -+ detail::low_level_fmt(os, mwdl); -+ if (!mwdl.ok()) -+ os << " is not a valid month_weekday_last"; -+ return os; -+} -+ -+// year_month_day_last -+ -+CONSTCD11 -+inline -+year_month_day_last::year_month_day_last(const date::year& y, -+ const date::month_day_last& mdl) NOEXCEPT -+ : y_(y) -+ , mdl_(mdl) -+ {} -+ -+template -+CONSTCD14 -+inline -+year_month_day_last& -+year_month_day_last::operator+=(const months& m) NOEXCEPT -+{ -+ *this = *this + m; -+ return *this; -+} -+ -+template -+CONSTCD14 -+inline -+year_month_day_last& -+year_month_day_last::operator-=(const months& m) NOEXCEPT -+{ -+ *this = *this - m; -+ return *this; -+} -+ -+CONSTCD14 -+inline -+year_month_day_last& -+year_month_day_last::operator+=(const years& y) NOEXCEPT -+{ -+ *this = *this + y; -+ return *this; -+} -+ -+CONSTCD14 -+inline -+year_month_day_last& -+year_month_day_last::operator-=(const years& y) NOEXCEPT -+{ -+ *this = *this - y; -+ return *this; -+} -+ -+CONSTCD11 inline year year_month_day_last::year() const NOEXCEPT {return y_;} -+CONSTCD11 inline month year_month_day_last::month() const NOEXCEPT {return mdl_.month();} -+ -+CONSTCD11 -+inline -+month_day_last -+year_month_day_last::month_day_last() const NOEXCEPT -+{ -+ return mdl_; -+} -+ -+CONSTCD14 -+inline -+day -+year_month_day_last::day() const NOEXCEPT -+{ -+ CONSTDATA date::day d[] = -+ { -+ date::day(31), date::day(28), date::day(31), -+ date::day(30), date::day(31), date::day(30), -+ date::day(31), date::day(31), date::day(30), -+ date::day(31), date::day(30), date::day(31) -+ }; -+ return (month() != February || !y_.is_leap()) && mdl_.ok() ? -+ d[static_cast(month()) - 1] : date::day{29}; -+} -+ -+CONSTCD14 -+inline -+year_month_day_last::operator sys_days() const NOEXCEPT -+{ -+ return sys_days(year()/month()/day()); -+} -+ -+CONSTCD14 -+inline -+year_month_day_last::operator local_days() const NOEXCEPT -+{ -+ return local_days(year()/month()/day()); -+} -+ -+CONSTCD11 -+inline -+bool -+year_month_day_last::ok() const NOEXCEPT -+{ -+ return y_.ok() && mdl_.ok(); -+} -+ -+CONSTCD11 -+inline -+bool -+operator==(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT -+{ -+ return x.year() == y.year() && x.month_day_last() == y.month_day_last(); -+} -+ -+CONSTCD11 -+inline -+bool -+operator!=(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT -+{ -+ return !(x == y); -+} -+ -+CONSTCD11 -+inline -+bool -+operator<(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT -+{ -+ return x.year() < y.year() ? true -+ : (x.year() > y.year() ? false -+ : (x.month_day_last() < y.month_day_last())); -+} -+ -+CONSTCD11 -+inline -+bool -+operator>(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT -+{ -+ return y < x; -+} -+ -+CONSTCD11 -+inline -+bool -+operator<=(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT -+{ -+ return !(y < x); -+} -+ -+CONSTCD11 -+inline -+bool -+operator>=(const year_month_day_last& x, const year_month_day_last& y) NOEXCEPT -+{ -+ return !(x < y); -+} -+ -+namespace detail -+{ -+ -+template -+std::basic_ostream& -+low_level_fmt(std::basic_ostream& os, const year_month_day_last& ymdl) -+{ -+ low_level_fmt(os, ymdl.year()) << '/'; -+ return low_level_fmt(os, ymdl.month_day_last()); -+} -+ -+} // namespace detail -+ -+template -+inline -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const year_month_day_last& ymdl) -+{ -+ detail::low_level_fmt(os, ymdl); -+ if (!ymdl.ok()) -+ os << " is not a valid year_month_day_last"; -+ return os; -+} -+ -+template -+CONSTCD14 -+inline -+year_month_day_last -+operator+(const year_month_day_last& ymdl, const months& dm) NOEXCEPT -+{ -+ return (ymdl.year() / ymdl.month() + dm) / last; -+} -+ -+template -+CONSTCD14 -+inline -+year_month_day_last -+operator+(const months& dm, const year_month_day_last& ymdl) NOEXCEPT -+{ -+ return ymdl + dm; -+} -+ -+template -+CONSTCD14 -+inline -+year_month_day_last -+operator-(const year_month_day_last& ymdl, const months& dm) NOEXCEPT -+{ -+ return ymdl + (-dm); -+} -+ -+CONSTCD11 -+inline -+year_month_day_last -+operator+(const year_month_day_last& ymdl, const years& dy) NOEXCEPT -+{ -+ return {ymdl.year()+dy, ymdl.month_day_last()}; -+} -+ -+CONSTCD11 -+inline -+year_month_day_last -+operator+(const years& dy, const year_month_day_last& ymdl) NOEXCEPT -+{ -+ return ymdl + dy; -+} -+ -+CONSTCD11 -+inline -+year_month_day_last -+operator-(const year_month_day_last& ymdl, const years& dy) NOEXCEPT -+{ -+ return ymdl + (-dy); -+} -+ -+// year_month_day -+ -+CONSTCD11 -+inline -+year_month_day::year_month_day(const date::year& y, const date::month& m, -+ const date::day& d) NOEXCEPT -+ : y_(y) -+ , m_(m) -+ , d_(d) -+ {} -+ -+CONSTCD14 -+inline -+year_month_day::year_month_day(const year_month_day_last& ymdl) NOEXCEPT -+ : y_(ymdl.year()) -+ , m_(ymdl.month()) -+ , d_(ymdl.day()) -+ {} -+ -+CONSTCD14 -+inline -+year_month_day::year_month_day(sys_days dp) NOEXCEPT -+ : year_month_day(from_days(dp.time_since_epoch())) -+ {} -+ -+CONSTCD14 -+inline -+year_month_day::year_month_day(local_days dp) NOEXCEPT -+ : year_month_day(from_days(dp.time_since_epoch())) -+ {} -+ -+CONSTCD11 inline year year_month_day::year() const NOEXCEPT {return y_;} -+CONSTCD11 inline month year_month_day::month() const NOEXCEPT {return m_;} -+CONSTCD11 inline day year_month_day::day() const NOEXCEPT {return d_;} -+ -+template -+CONSTCD14 -+inline -+year_month_day& -+year_month_day::operator+=(const months& m) NOEXCEPT -+{ -+ *this = *this + m; -+ return *this; -+} -+ -+template -+CONSTCD14 -+inline -+year_month_day& -+year_month_day::operator-=(const months& m) NOEXCEPT -+{ -+ *this = *this - m; -+ return *this; -+} -+ -+CONSTCD14 -+inline -+year_month_day& -+year_month_day::operator+=(const years& y) NOEXCEPT -+{ -+ *this = *this + y; -+ return *this; -+} -+ -+CONSTCD14 -+inline -+year_month_day& -+year_month_day::operator-=(const years& y) NOEXCEPT -+{ -+ *this = *this - y; -+ return *this; -+} -+ -+CONSTCD14 -+inline -+days -+year_month_day::to_days() const NOEXCEPT -+{ -+ static_assert(std::numeric_limits::digits >= 18, -+ "This algorithm has not been ported to a 16 bit unsigned integer"); -+ static_assert(std::numeric_limits::digits >= 20, -+ "This algorithm has not been ported to a 16 bit signed integer"); -+ auto const y = static_cast(y_) - (m_ <= February); -+ auto const m = static_cast(m_); -+ auto const d = static_cast(d_); -+ auto const era = (y >= 0 ? y : y-399) / 400; -+ auto const yoe = static_cast(y - era * 400); // [0, 399] -+ auto const doy = (153*(m > 2 ? m-3 : m+9) + 2)/5 + d-1; // [0, 365] -+ auto const doe = yoe * 365 + yoe/4 - yoe/100 + doy; // [0, 146096] -+ return days{era * 146097 + static_cast(doe) - 719468}; -+} -+ -+CONSTCD14 -+inline -+year_month_day::operator sys_days() const NOEXCEPT -+{ -+ return sys_days{to_days()}; -+} -+ -+CONSTCD14 -+inline -+year_month_day::operator local_days() const NOEXCEPT -+{ -+ return local_days{to_days()}; -+} -+ -+CONSTCD14 -+inline -+bool -+year_month_day::ok() const NOEXCEPT -+{ -+ if (!(y_.ok() && m_.ok())) -+ return false; -+ return date::day{1} <= d_ && d_ <= (y_ / m_ / last).day(); -+} -+ -+CONSTCD11 -+inline -+bool -+operator==(const year_month_day& x, const year_month_day& y) NOEXCEPT -+{ -+ return x.year() == y.year() && x.month() == y.month() && x.day() == y.day(); -+} -+ -+CONSTCD11 -+inline -+bool -+operator!=(const year_month_day& x, const year_month_day& y) NOEXCEPT -+{ -+ return !(x == y); -+} -+ -+CONSTCD11 -+inline -+bool -+operator<(const year_month_day& x, const year_month_day& y) NOEXCEPT -+{ -+ return x.year() < y.year() ? true -+ : (x.year() > y.year() ? false -+ : (x.month() < y.month() ? true -+ : (x.month() > y.month() ? false -+ : (x.day() < y.day())))); -+} -+ -+CONSTCD11 -+inline -+bool -+operator>(const year_month_day& x, const year_month_day& y) NOEXCEPT -+{ -+ return y < x; -+} -+ -+CONSTCD11 -+inline -+bool -+operator<=(const year_month_day& x, const year_month_day& y) NOEXCEPT -+{ -+ return !(y < x); -+} -+ -+CONSTCD11 -+inline -+bool -+operator>=(const year_month_day& x, const year_month_day& y) NOEXCEPT -+{ -+ return !(x < y); -+} -+ -+template -+inline -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const year_month_day& ymd) -+{ -+ detail::save_ostream _(os); -+ os.fill('0'); -+ os.flags(std::ios::dec | std::ios::right); -+ os.imbue(std::locale::classic()); -+ os << static_cast(ymd.year()) << '-'; -+ os.width(2); -+ os << static_cast(ymd.month()) << '-'; -+ os.width(2); -+ os << static_cast(ymd.day()); -+ if (!ymd.ok()) -+ os << " is not a valid year_month_day"; -+ return os; -+} -+ -+CONSTCD14 -+inline -+year_month_day -+year_month_day::from_days(days dp) NOEXCEPT -+{ -+ static_assert(std::numeric_limits::digits >= 18, -+ "This algorithm has not been ported to a 16 bit unsigned integer"); -+ static_assert(std::numeric_limits::digits >= 20, -+ "This algorithm has not been ported to a 16 bit signed integer"); -+ auto const z = dp.count() + 719468; -+ auto const era = (z >= 0 ? z : z - 146096) / 146097; -+ auto const doe = static_cast(z - era * 146097); // [0, 146096] -+ auto const yoe = (doe - doe/1460 + doe/36524 - doe/146096) / 365; // [0, 399] -+ auto const y = static_cast(yoe) + era * 400; -+ auto const doy = doe - (365*yoe + yoe/4 - yoe/100); // [0, 365] -+ auto const mp = (5*doy + 2)/153; // [0, 11] -+ auto const d = doy - (153*mp+2)/5 + 1; // [1, 31] -+ auto const m = mp < 10 ? mp+3 : mp-9; // [1, 12] -+ return year_month_day{date::year{y + (m <= 2)}, date::month(m), date::day(d)}; -+} -+ -+template -+CONSTCD14 -+inline -+year_month_day -+operator+(const year_month_day& ymd, const months& dm) NOEXCEPT -+{ -+ return (ymd.year() / ymd.month() + dm) / ymd.day(); -+} -+ -+template -+CONSTCD14 -+inline -+year_month_day -+operator+(const months& dm, const year_month_day& ymd) NOEXCEPT -+{ -+ return ymd + dm; -+} -+ -+template -+CONSTCD14 -+inline -+year_month_day -+operator-(const year_month_day& ymd, const months& dm) NOEXCEPT -+{ -+ return ymd + (-dm); -+} -+ -+CONSTCD11 -+inline -+year_month_day -+operator+(const year_month_day& ymd, const years& dy) NOEXCEPT -+{ -+ return (ymd.year() + dy) / ymd.month() / ymd.day(); -+} -+ -+CONSTCD11 -+inline -+year_month_day -+operator+(const years& dy, const year_month_day& ymd) NOEXCEPT -+{ -+ return ymd + dy; -+} -+ -+CONSTCD11 -+inline -+year_month_day -+operator-(const year_month_day& ymd, const years& dy) NOEXCEPT -+{ -+ return ymd + (-dy); -+} -+ -+// year_month_weekday -+ -+CONSTCD11 -+inline -+year_month_weekday::year_month_weekday(const date::year& y, const date::month& m, -+ const date::weekday_indexed& wdi) -+ NOEXCEPT -+ : y_(y) -+ , m_(m) -+ , wdi_(wdi) -+ {} -+ -+CONSTCD14 -+inline -+year_month_weekday::year_month_weekday(const sys_days& dp) NOEXCEPT -+ : year_month_weekday(from_days(dp.time_since_epoch())) -+ {} -+ -+CONSTCD14 -+inline -+year_month_weekday::year_month_weekday(const local_days& dp) NOEXCEPT -+ : year_month_weekday(from_days(dp.time_since_epoch())) -+ {} -+ -+template -+CONSTCD14 -+inline -+year_month_weekday& -+year_month_weekday::operator+=(const months& m) NOEXCEPT -+{ -+ *this = *this + m; -+ return *this; -+} -+ -+template -+CONSTCD14 -+inline -+year_month_weekday& -+year_month_weekday::operator-=(const months& m) NOEXCEPT -+{ -+ *this = *this - m; -+ return *this; -+} -+ -+CONSTCD14 -+inline -+year_month_weekday& -+year_month_weekday::operator+=(const years& y) NOEXCEPT -+{ -+ *this = *this + y; -+ return *this; -+} -+ -+CONSTCD14 -+inline -+year_month_weekday& -+year_month_weekday::operator-=(const years& y) NOEXCEPT -+{ -+ *this = *this - y; -+ return *this; -+} -+ -+CONSTCD11 inline year year_month_weekday::year() const NOEXCEPT {return y_;} -+CONSTCD11 inline month year_month_weekday::month() const NOEXCEPT {return m_;} -+ -+CONSTCD11 -+inline -+weekday -+year_month_weekday::weekday() const NOEXCEPT -+{ -+ return wdi_.weekday(); -+} -+ -+CONSTCD11 -+inline -+unsigned -+year_month_weekday::index() const NOEXCEPT -+{ -+ return wdi_.index(); -+} -+ -+CONSTCD11 -+inline -+weekday_indexed -+year_month_weekday::weekday_indexed() const NOEXCEPT -+{ -+ return wdi_; -+} -+ -+CONSTCD14 -+inline -+year_month_weekday::operator sys_days() const NOEXCEPT -+{ -+ return sys_days{to_days()}; -+} -+ -+CONSTCD14 -+inline -+year_month_weekday::operator local_days() const NOEXCEPT -+{ -+ return local_days{to_days()}; -+} -+ -+CONSTCD14 -+inline -+bool -+year_month_weekday::ok() const NOEXCEPT -+{ -+ if (!y_.ok() || !m_.ok() || !wdi_.weekday().ok() || wdi_.index() < 1) -+ return false; -+ if (wdi_.index() <= 4) -+ return true; -+ auto d2 = wdi_.weekday() - date::weekday(static_cast(y_/m_/1)) + -+ days((wdi_.index()-1)*7 + 1); -+ return static_cast(d2.count()) <= static_cast((y_/m_/last).day()); -+} -+ -+CONSTCD14 -+inline -+year_month_weekday -+year_month_weekday::from_days(days d) NOEXCEPT -+{ -+ sys_days dp{d}; -+ auto const wd = date::weekday(dp); -+ auto const ymd = year_month_day(dp); -+ return {ymd.year(), ymd.month(), wd[(static_cast(ymd.day())-1)/7+1]}; -+} -+ -+CONSTCD14 -+inline -+days -+year_month_weekday::to_days() const NOEXCEPT -+{ -+ auto d = sys_days(y_/m_/1); -+ return (d + (wdi_.weekday() - date::weekday(d) + days{(wdi_.index()-1)*7}) -+ ).time_since_epoch(); -+} -+ -+CONSTCD11 -+inline -+bool -+operator==(const year_month_weekday& x, const year_month_weekday& y) NOEXCEPT -+{ -+ return x.year() == y.year() && x.month() == y.month() && -+ x.weekday_indexed() == y.weekday_indexed(); -+} -+ -+CONSTCD11 -+inline -+bool -+operator!=(const year_month_weekday& x, const year_month_weekday& y) NOEXCEPT -+{ -+ return !(x == y); -+} -+ -+template -+inline -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const year_month_weekday& ymwdi) -+{ -+ detail::low_level_fmt(os, ymwdi.year()) << '/'; -+ detail::low_level_fmt(os, ymwdi.month()) << '/'; -+ detail::low_level_fmt(os, ymwdi.weekday_indexed()); -+ if (!ymwdi.ok()) -+ os << " is not a valid year_month_weekday"; -+ return os; -+} -+ -+template -+CONSTCD14 -+inline -+year_month_weekday -+operator+(const year_month_weekday& ymwd, const months& dm) NOEXCEPT -+{ -+ return (ymwd.year() / ymwd.month() + dm) / ymwd.weekday_indexed(); -+} -+ -+template -+CONSTCD14 -+inline -+year_month_weekday -+operator+(const months& dm, const year_month_weekday& ymwd) NOEXCEPT -+{ -+ return ymwd + dm; -+} -+ -+template -+CONSTCD14 -+inline -+year_month_weekday -+operator-(const year_month_weekday& ymwd, const months& dm) NOEXCEPT -+{ -+ return ymwd + (-dm); -+} -+ -+CONSTCD11 -+inline -+year_month_weekday -+operator+(const year_month_weekday& ymwd, const years& dy) NOEXCEPT -+{ -+ return {ymwd.year()+dy, ymwd.month(), ymwd.weekday_indexed()}; -+} -+ -+CONSTCD11 -+inline -+year_month_weekday -+operator+(const years& dy, const year_month_weekday& ymwd) NOEXCEPT -+{ -+ return ymwd + dy; -+} -+ -+CONSTCD11 -+inline -+year_month_weekday -+operator-(const year_month_weekday& ymwd, const years& dy) NOEXCEPT -+{ -+ return ymwd + (-dy); -+} -+ -+// year_month_weekday_last -+ -+CONSTCD11 -+inline -+year_month_weekday_last::year_month_weekday_last(const date::year& y, -+ const date::month& m, -+ const date::weekday_last& wdl) NOEXCEPT -+ : y_(y) -+ , m_(m) -+ , wdl_(wdl) -+ {} -+ -+template -+CONSTCD14 -+inline -+year_month_weekday_last& -+year_month_weekday_last::operator+=(const months& m) NOEXCEPT -+{ -+ *this = *this + m; -+ return *this; -+} -+ -+template -+CONSTCD14 -+inline -+year_month_weekday_last& -+year_month_weekday_last::operator-=(const months& m) NOEXCEPT -+{ -+ *this = *this - m; -+ return *this; -+} -+ -+CONSTCD14 -+inline -+year_month_weekday_last& -+year_month_weekday_last::operator+=(const years& y) NOEXCEPT -+{ -+ *this = *this + y; -+ return *this; -+} -+ -+CONSTCD14 -+inline -+year_month_weekday_last& -+year_month_weekday_last::operator-=(const years& y) NOEXCEPT -+{ -+ *this = *this - y; -+ return *this; -+} -+ -+CONSTCD11 inline year year_month_weekday_last::year() const NOEXCEPT {return y_;} -+CONSTCD11 inline month year_month_weekday_last::month() const NOEXCEPT {return m_;} -+ -+CONSTCD11 -+inline -+weekday -+year_month_weekday_last::weekday() const NOEXCEPT -+{ -+ return wdl_.weekday(); -+} -+ -+CONSTCD11 -+inline -+weekday_last -+year_month_weekday_last::weekday_last() const NOEXCEPT -+{ -+ return wdl_; -+} -+ -+CONSTCD14 -+inline -+year_month_weekday_last::operator sys_days() const NOEXCEPT -+{ -+ return sys_days{to_days()}; -+} -+ -+CONSTCD14 -+inline -+year_month_weekday_last::operator local_days() const NOEXCEPT -+{ -+ return local_days{to_days()}; -+} -+ -+CONSTCD11 -+inline -+bool -+year_month_weekday_last::ok() const NOEXCEPT -+{ -+ return y_.ok() && m_.ok() && wdl_.ok(); -+} -+ -+CONSTCD14 -+inline -+days -+year_month_weekday_last::to_days() const NOEXCEPT -+{ -+ auto const d = sys_days(y_/m_/last); -+ return (d - (date::weekday{d} - wdl_.weekday())).time_since_epoch(); -+} -+ -+CONSTCD11 -+inline -+bool -+operator==(const year_month_weekday_last& x, const year_month_weekday_last& y) NOEXCEPT -+{ -+ return x.year() == y.year() && x.month() == y.month() && -+ x.weekday_last() == y.weekday_last(); -+} -+ -+CONSTCD11 -+inline -+bool -+operator!=(const year_month_weekday_last& x, const year_month_weekday_last& y) NOEXCEPT -+{ -+ return !(x == y); -+} -+ -+template -+inline -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const year_month_weekday_last& ymwdl) -+{ -+ detail::low_level_fmt(os, ymwdl.year()) << '/'; -+ detail::low_level_fmt(os, ymwdl.month()) << '/'; -+ detail::low_level_fmt(os, ymwdl.weekday_last()); -+ if (!ymwdl.ok()) -+ os << " is not a valid year_month_weekday_last"; -+ return os; -+} -+ -+template -+CONSTCD14 -+inline -+year_month_weekday_last -+operator+(const year_month_weekday_last& ymwdl, const months& dm) NOEXCEPT -+{ -+ return (ymwdl.year() / ymwdl.month() + dm) / ymwdl.weekday_last(); -+} -+ -+template -+CONSTCD14 -+inline -+year_month_weekday_last -+operator+(const months& dm, const year_month_weekday_last& ymwdl) NOEXCEPT -+{ -+ return ymwdl + dm; -+} -+ -+template -+CONSTCD14 -+inline -+year_month_weekday_last -+operator-(const year_month_weekday_last& ymwdl, const months& dm) NOEXCEPT -+{ -+ return ymwdl + (-dm); -+} -+ -+CONSTCD11 -+inline -+year_month_weekday_last -+operator+(const year_month_weekday_last& ymwdl, const years& dy) NOEXCEPT -+{ -+ return {ymwdl.year()+dy, ymwdl.month(), ymwdl.weekday_last()}; -+} -+ -+CONSTCD11 -+inline -+year_month_weekday_last -+operator+(const years& dy, const year_month_weekday_last& ymwdl) NOEXCEPT -+{ -+ return ymwdl + dy; -+} -+ -+CONSTCD11 -+inline -+year_month_weekday_last -+operator-(const year_month_weekday_last& ymwdl, const years& dy) NOEXCEPT -+{ -+ return ymwdl + (-dy); -+} -+ -+// year_month from operator/() -+ -+CONSTCD11 -+inline -+year_month -+operator/(const year& y, const month& m) NOEXCEPT -+{ -+ return {y, m}; -+} -+ -+CONSTCD11 -+inline -+year_month -+operator/(const year& y, int m) NOEXCEPT -+{ -+ return y / month(static_cast(m)); -+} -+ -+// month_day from operator/() -+ -+CONSTCD11 -+inline -+month_day -+operator/(const month& m, const day& d) NOEXCEPT -+{ -+ return {m, d}; -+} -+ -+CONSTCD11 -+inline -+month_day -+operator/(const day& d, const month& m) NOEXCEPT -+{ -+ return m / d; -+} -+ -+CONSTCD11 -+inline -+month_day -+operator/(const month& m, int d) NOEXCEPT -+{ -+ return m / day(static_cast(d)); -+} -+ -+CONSTCD11 -+inline -+month_day -+operator/(int m, const day& d) NOEXCEPT -+{ -+ return month(static_cast(m)) / d; -+} -+ -+CONSTCD11 inline month_day operator/(const day& d, int m) NOEXCEPT {return m / d;} -+ -+// month_day_last from operator/() -+ -+CONSTCD11 -+inline -+month_day_last -+operator/(const month& m, last_spec) NOEXCEPT -+{ -+ return month_day_last{m}; -+} -+ -+CONSTCD11 -+inline -+month_day_last -+operator/(last_spec, const month& m) NOEXCEPT -+{ -+ return m/last; -+} -+ -+CONSTCD11 -+inline -+month_day_last -+operator/(int m, last_spec) NOEXCEPT -+{ -+ return month(static_cast(m))/last; -+} -+ -+CONSTCD11 -+inline -+month_day_last -+operator/(last_spec, int m) NOEXCEPT -+{ -+ return m/last; -+} -+ -+// month_weekday from operator/() -+ -+CONSTCD11 -+inline -+month_weekday -+operator/(const month& m, const weekday_indexed& wdi) NOEXCEPT -+{ -+ return {m, wdi}; -+} -+ -+CONSTCD11 -+inline -+month_weekday -+operator/(const weekday_indexed& wdi, const month& m) NOEXCEPT -+{ -+ return m / wdi; -+} -+ -+CONSTCD11 -+inline -+month_weekday -+operator/(int m, const weekday_indexed& wdi) NOEXCEPT -+{ -+ return month(static_cast(m)) / wdi; -+} -+ -+CONSTCD11 -+inline -+month_weekday -+operator/(const weekday_indexed& wdi, int m) NOEXCEPT -+{ -+ return m / wdi; -+} -+ -+// month_weekday_last from operator/() -+ -+CONSTCD11 -+inline -+month_weekday_last -+operator/(const month& m, const weekday_last& wdl) NOEXCEPT -+{ -+ return {m, wdl}; -+} -+ -+CONSTCD11 -+inline -+month_weekday_last -+operator/(const weekday_last& wdl, const month& m) NOEXCEPT -+{ -+ return m / wdl; -+} -+ -+CONSTCD11 -+inline -+month_weekday_last -+operator/(int m, const weekday_last& wdl) NOEXCEPT -+{ -+ return month(static_cast(m)) / wdl; -+} -+ -+CONSTCD11 -+inline -+month_weekday_last -+operator/(const weekday_last& wdl, int m) NOEXCEPT -+{ -+ return m / wdl; -+} -+ -+// year_month_day from operator/() -+ -+CONSTCD11 -+inline -+year_month_day -+operator/(const year_month& ym, const day& d) NOEXCEPT -+{ -+ return {ym.year(), ym.month(), d}; -+} -+ -+CONSTCD11 -+inline -+year_month_day -+operator/(const year_month& ym, int d) NOEXCEPT -+{ -+ return ym / day(static_cast(d)); -+} -+ -+CONSTCD11 -+inline -+year_month_day -+operator/(const year& y, const month_day& md) NOEXCEPT -+{ -+ return y / md.month() / md.day(); -+} -+ -+CONSTCD11 -+inline -+year_month_day -+operator/(int y, const month_day& md) NOEXCEPT -+{ -+ return year(y) / md; -+} -+ -+CONSTCD11 -+inline -+year_month_day -+operator/(const month_day& md, const year& y) NOEXCEPT -+{ -+ return y / md; -+} -+ -+CONSTCD11 -+inline -+year_month_day -+operator/(const month_day& md, int y) NOEXCEPT -+{ -+ return year(y) / md; -+} -+ -+// year_month_day_last from operator/() -+ -+CONSTCD11 -+inline -+year_month_day_last -+operator/(const year_month& ym, last_spec) NOEXCEPT -+{ -+ return {ym.year(), month_day_last{ym.month()}}; -+} -+ -+CONSTCD11 -+inline -+year_month_day_last -+operator/(const year& y, const month_day_last& mdl) NOEXCEPT -+{ -+ return {y, mdl}; -+} -+ -+CONSTCD11 -+inline -+year_month_day_last -+operator/(int y, const month_day_last& mdl) NOEXCEPT -+{ -+ return year(y) / mdl; -+} -+ -+CONSTCD11 -+inline -+year_month_day_last -+operator/(const month_day_last& mdl, const year& y) NOEXCEPT -+{ -+ return y / mdl; -+} -+ -+CONSTCD11 -+inline -+year_month_day_last -+operator/(const month_day_last& mdl, int y) NOEXCEPT -+{ -+ return year(y) / mdl; -+} -+ -+// year_month_weekday from operator/() -+ -+CONSTCD11 -+inline -+year_month_weekday -+operator/(const year_month& ym, const weekday_indexed& wdi) NOEXCEPT -+{ -+ return {ym.year(), ym.month(), wdi}; -+} -+ -+CONSTCD11 -+inline -+year_month_weekday -+operator/(const year& y, const month_weekday& mwd) NOEXCEPT -+{ -+ return {y, mwd.month(), mwd.weekday_indexed()}; -+} -+ -+CONSTCD11 -+inline -+year_month_weekday -+operator/(int y, const month_weekday& mwd) NOEXCEPT -+{ -+ return year(y) / mwd; -+} -+ -+CONSTCD11 -+inline -+year_month_weekday -+operator/(const month_weekday& mwd, const year& y) NOEXCEPT -+{ -+ return y / mwd; -+} -+ -+CONSTCD11 -+inline -+year_month_weekday -+operator/(const month_weekday& mwd, int y) NOEXCEPT -+{ -+ return year(y) / mwd; -+} -+ -+// year_month_weekday_last from operator/() -+ -+CONSTCD11 -+inline -+year_month_weekday_last -+operator/(const year_month& ym, const weekday_last& wdl) NOEXCEPT -+{ -+ return {ym.year(), ym.month(), wdl}; -+} -+ -+CONSTCD11 -+inline -+year_month_weekday_last -+operator/(const year& y, const month_weekday_last& mwdl) NOEXCEPT -+{ -+ return {y, mwdl.month(), mwdl.weekday_last()}; -+} -+ -+CONSTCD11 -+inline -+year_month_weekday_last -+operator/(int y, const month_weekday_last& mwdl) NOEXCEPT -+{ -+ return year(y) / mwdl; -+} -+ -+CONSTCD11 -+inline -+year_month_weekday_last -+operator/(const month_weekday_last& mwdl, const year& y) NOEXCEPT -+{ -+ return y / mwdl; -+} -+ -+CONSTCD11 -+inline -+year_month_weekday_last -+operator/(const month_weekday_last& mwdl, int y) NOEXCEPT -+{ -+ return year(y) / mwdl; -+} -+ -+template -+struct fields; -+ -+template -+std::basic_ostream& -+to_stream(std::basic_ostream& os, const CharT* fmt, -+ const fields& fds, const std::string* abbrev = nullptr, -+ const std::chrono::seconds* offset_sec = nullptr); -+ -+template -+std::basic_istream& -+from_stream(std::basic_istream& is, const CharT* fmt, -+ fields& fds, std::basic_string* abbrev = nullptr, -+ std::chrono::minutes* offset = nullptr); -+ -+// hh_mm_ss -+ -+namespace detail -+{ -+ -+struct undocumented {explicit undocumented() = default;}; -+ -+// width::value is the number of fractional decimal digits in 1/n -+// width<0>::value and width<1>::value are defined to be 0 -+// If 1/n takes more than 18 fractional decimal digits, -+// the result is truncated to 19. -+// Example: width<2>::value == 1 -+// Example: width<3>::value == 19 -+// Example: width<4>::value == 2 -+// Example: width<10>::value == 1 -+// Example: width<1000>::value == 3 -+template -+struct width -+{ -+ static_assert(d > 0, "width called with zero denominator"); -+ static CONSTDATA unsigned value = 1 + width::value; -+}; -+ -+template -+struct width -+{ -+ static CONSTDATA unsigned value = 0; -+}; -+ -+template -+struct static_pow10 -+{ -+private: -+ static CONSTDATA std::uint64_t h = static_pow10::value; -+public: -+ static CONSTDATA std::uint64_t value = h * h * (exp % 2 ? 10 : 1); -+}; -+ -+template <> -+struct static_pow10<0> -+{ -+ static CONSTDATA std::uint64_t value = 1; -+}; -+ -+template -+class decimal_format_seconds -+{ -+ using CT = typename std::common_type::type; -+ using rep = typename CT::rep; -+ static unsigned CONSTDATA trial_width = -+ detail::width::value; -+public: -+ static unsigned CONSTDATA width = trial_width < 19 ? trial_width : 6u; -+ using precision = std::chrono::duration::value>>; -+ -+private: -+ std::chrono::seconds s_; -+ precision sub_s_; -+ -+public: -+ CONSTCD11 decimal_format_seconds() -+ : s_() -+ , sub_s_() -+ {} -+ -+ CONSTCD11 explicit decimal_format_seconds(const Duration& d) NOEXCEPT -+ : s_(std::chrono::duration_cast(d)) -+ , sub_s_(std::chrono::duration_cast(d - s_)) -+ {} -+ -+ CONSTCD14 std::chrono::seconds& seconds() NOEXCEPT {return s_;} -+ CONSTCD11 std::chrono::seconds seconds() const NOEXCEPT {return s_;} -+ CONSTCD11 precision subseconds() const NOEXCEPT {return sub_s_;} -+ -+ CONSTCD14 precision to_duration() const NOEXCEPT -+ { -+ return s_ + sub_s_; -+ } -+ -+ CONSTCD11 bool in_conventional_range() const NOEXCEPT -+ { -+ return sub_s_ < std::chrono::seconds{1} && s_ < std::chrono::minutes{1}; -+ } -+ -+ template -+ friend -+ std::basic_ostream& -+ operator<<(std::basic_ostream& os, const decimal_format_seconds& x) -+ { -+ return x.print(os, std::chrono::treat_as_floating_point{}); -+ } -+ -+ template -+ std::basic_ostream& -+ print(std::basic_ostream& os, std::true_type) const -+ { -+ date::detail::save_ostream _(os); -+ std::chrono::duration d = s_ + sub_s_; -+ if (d < std::chrono::seconds{10}) -+ os << '0'; -+ os.precision(width+6); -+ os << std::fixed << d.count(); -+ return os; -+ } -+ -+ template -+ std::basic_ostream& -+ print(std::basic_ostream& os, std::false_type) const -+ { -+ date::detail::save_ostream _(os); -+ os.fill('0'); -+ os.flags(std::ios::dec | std::ios::right); -+ os.width(2); -+ os << s_.count(); -+ if (width > 0) -+ { -+#if !ONLY_C_LOCALE -+ os << std::use_facet>(os.getloc()).decimal_point(); -+#else -+ os << '.'; -+#endif -+ date::detail::save_ostream _s(os); -+ os.imbue(std::locale::classic()); -+ os.width(width); -+ os << sub_s_.count(); -+ } -+ return os; -+ } -+}; -+ -+template -+inline -+CONSTCD11 -+typename std::enable_if -+ < -+ std::numeric_limits::is_signed, -+ std::chrono::duration -+ >::type -+abs(std::chrono::duration d) -+{ -+ return d >= d.zero() ? +d : -d; -+} -+ -+template -+inline -+CONSTCD11 -+typename std::enable_if -+ < -+ !std::numeric_limits::is_signed, -+ std::chrono::duration -+ >::type -+abs(std::chrono::duration d) -+{ -+ return d; -+} -+ -+} // namespace detail -+ -+template -+class hh_mm_ss -+{ -+ using dfs = detail::decimal_format_seconds::type>; -+ -+ std::chrono::hours h_; -+ std::chrono::minutes m_; -+ dfs s_; -+ bool neg_; -+ -+public: -+ static unsigned CONSTDATA fractional_width = dfs::width; -+ using precision = typename dfs::precision; -+ -+ CONSTCD11 hh_mm_ss() NOEXCEPT -+ : hh_mm_ss(Duration::zero()) -+ {} -+ -+ CONSTCD11 explicit hh_mm_ss(Duration d) NOEXCEPT -+ : h_(std::chrono::duration_cast(detail::abs(d))) -+ , m_(std::chrono::duration_cast(detail::abs(d)) - h_) -+ , s_(detail::abs(d) - h_ - m_) -+ , neg_(d < Duration::zero()) -+ {} -+ -+ CONSTCD11 std::chrono::hours hours() const NOEXCEPT {return h_;} -+ CONSTCD11 std::chrono::minutes minutes() const NOEXCEPT {return m_;} -+ CONSTCD11 std::chrono::seconds seconds() const NOEXCEPT {return s_.seconds();} -+ CONSTCD14 std::chrono::seconds& -+ seconds(detail::undocumented) NOEXCEPT {return s_.seconds();} -+ CONSTCD11 precision subseconds() const NOEXCEPT {return s_.subseconds();} -+ CONSTCD11 bool is_negative() const NOEXCEPT {return neg_;} -+ -+ CONSTCD11 explicit operator precision() const NOEXCEPT {return to_duration();} -+ CONSTCD11 precision to_duration() const NOEXCEPT -+ {return (s_.to_duration() + m_ + h_) * (1-2*neg_);} -+ -+ CONSTCD11 bool in_conventional_range() const NOEXCEPT -+ { -+ return !neg_ && h_ < days{1} && m_ < std::chrono::hours{1} && -+ s_.in_conventional_range(); -+ } -+ -+private: -+ -+ template -+ friend -+ std::basic_ostream& -+ operator<<(std::basic_ostream& os, hh_mm_ss const& tod) -+ { -+ if (tod.is_negative()) -+ os << '-'; -+ if (tod.h_ < std::chrono::hours{10}) -+ os << '0'; -+ os << tod.h_.count() << ':'; -+ if (tod.m_ < std::chrono::minutes{10}) -+ os << '0'; -+ os << tod.m_.count() << ':' << tod.s_; -+ return os; -+ } -+ -+ template -+ friend -+ std::basic_ostream& -+ date::to_stream(std::basic_ostream& os, const CharT* fmt, -+ const fields& fds, const std::string* abbrev, -+ const std::chrono::seconds* offset_sec); -+ -+ template -+ friend -+ std::basic_istream& -+ date::from_stream(std::basic_istream& is, const CharT* fmt, -+ fields& fds, -+ std::basic_string* abbrev, std::chrono::minutes* offset); -+}; -+ -+inline -+CONSTCD14 -+bool -+is_am(std::chrono::hours const& h) NOEXCEPT -+{ -+ using std::chrono::hours; -+ return hours{0} <= h && h < hours{12}; -+} -+ -+inline -+CONSTCD14 -+bool -+is_pm(std::chrono::hours const& h) NOEXCEPT -+{ -+ using std::chrono::hours; -+ return hours{12} <= h && h < hours{24}; -+} -+ -+inline -+CONSTCD14 -+std::chrono::hours -+make12(std::chrono::hours h) NOEXCEPT -+{ -+ using std::chrono::hours; -+ if (h < hours{12}) -+ { -+ if (h == hours{0}) -+ h = hours{12}; -+ } -+ else -+ { -+ if (h != hours{12}) -+ h = h - hours{12}; -+ } -+ return h; -+} -+ -+inline -+CONSTCD14 -+std::chrono::hours -+make24(std::chrono::hours h, bool is_pm) NOEXCEPT -+{ -+ using std::chrono::hours; -+ if (is_pm) -+ { -+ if (h != hours{12}) -+ h = h + hours{12}; -+ } -+ else if (h == hours{12}) -+ h = hours{0}; -+ return h; -+} -+ -+template -+using time_of_day = hh_mm_ss; -+ -+template -+CONSTCD11 -+inline -+hh_mm_ss> -+make_time(const std::chrono::duration& d) -+{ -+ return hh_mm_ss>(d); -+} -+ -+template -+inline -+typename std::enable_if -+< -+ std::ratio_less::value -+ , std::basic_ostream& -+>::type -+operator<<(std::basic_ostream& os, const sys_time& tp) -+{ -+ auto const dp = date::floor(tp); -+ return os << year_month_day(dp) << ' ' << make_time(tp-dp); -+} -+ -+template -+inline -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const sys_days& dp) -+{ -+ return os << year_month_day(dp); -+} -+ -+template -+inline -+std::basic_ostream& -+operator<<(std::basic_ostream& os, const local_time& ut) -+{ -+ return (os << sys_time{ut.time_since_epoch()}); -+} -+ -+namespace detail -+{ -+ -+template -+class string_literal; -+ -+template -+inline -+CONSTCD14 -+string_literal::type, -+ N1 + N2 - 1> -+operator+(const string_literal& x, const string_literal& y) NOEXCEPT; -+ -+template -+class string_literal -+{ -+ CharT p_[N]; -+ -+ CONSTCD11 string_literal() NOEXCEPT -+ : p_{} -+ {} -+ -+public: -+ using const_iterator = const CharT*; -+ -+ string_literal(string_literal const&) = default; -+ string_literal& operator=(string_literal const&) = delete; -+ -+ template ::type> -+ CONSTCD11 string_literal(CharT c) NOEXCEPT -+ : p_{c} -+ { -+ } -+ -+ template ::type> -+ CONSTCD11 string_literal(CharT c1, CharT c2) NOEXCEPT -+ : p_{c1, c2} -+ { -+ } -+ -+ template ::type> -+ CONSTCD11 string_literal(CharT c1, CharT c2, CharT c3) NOEXCEPT -+ : p_{c1, c2, c3} -+ { -+ } -+ -+ CONSTCD14 string_literal(const CharT(&a)[N]) NOEXCEPT -+ : p_{} -+ { -+ for (std::size_t i = 0; i < N; ++i) -+ p_[i] = a[i]; -+ } -+ -+ template ::type> -+ CONSTCD14 string_literal(const char(&a)[N]) NOEXCEPT -+ : p_{} -+ { -+ for (std::size_t i = 0; i < N; ++i) -+ p_[i] = a[i]; -+ } -+ -+ template ::value>::type> -+ CONSTCD14 string_literal(string_literal const& a) NOEXCEPT -+ : p_{} -+ { -+ for (std::size_t i = 0; i < N; ++i) -+ p_[i] = a[i]; -+ } -+ -+ CONSTCD11 const CharT* data() const NOEXCEPT {return p_;} -+ CONSTCD11 std::size_t size() const NOEXCEPT {return N-1;} -+ -+ CONSTCD11 const_iterator begin() const NOEXCEPT {return p_;} -+ CONSTCD11 const_iterator end() const NOEXCEPT {return p_ + N-1;} -+ -+ CONSTCD11 CharT const& operator[](std::size_t n) const NOEXCEPT -+ { -+ return p_[n]; -+ } -+ -+ template -+ friend -+ std::basic_ostream& -+ operator<<(std::basic_ostream& os, const string_literal& s) -+ { -+ return os << s.p_; -+ } -+ -+ template -+ friend -+ CONSTCD14 -+ string_literal::type, -+ N1 + N2 - 1> -+ operator+(const string_literal& x, const string_literal& y) NOEXCEPT; -+}; -+ -+template -+CONSTCD11 -+inline -+string_literal -+operator+(const string_literal& x, const string_literal& y) NOEXCEPT -+{ -+ return string_literal(x[0], y[0]); -+} -+ -+template -+CONSTCD11 -+inline -+string_literal -+operator+(const string_literal& x, const string_literal& y) NOEXCEPT -+{ -+ return string_literal(x[0], x[1], y[0]); -+} -+ -+template -+CONSTCD14 -+inline -+string_literal::type, -+ N1 + N2 - 1> -+operator+(const string_literal& x, const string_literal& y) NOEXCEPT -+{ -+ using CT = typename std::conditional::type; -+ -+ string_literal r; -+ std::size_t i = 0; -+ for (; i < N1-1; ++i) -+ r.p_[i] = CT(x.p_[i]); -+ for (std::size_t j = 0; j < N2; ++j, ++i) -+ r.p_[i] = CT(y.p_[j]); -+ -+ return r; -+} -+ -+ -+template -+inline -+std::basic_string -+operator+(std::basic_string x, const string_literal& y) -+{ -+ x.append(y.data(), y.size()); -+ return x; -+} -+ -+#if __cplusplus >= 201402 && (!defined(__EDG_VERSION__) || __EDG_VERSION__ > 411) \ -+ && (!defined(__SUNPRO_CC) || __SUNPRO_CC > 0x5150) -+ -+template ::value || -+ std::is_same::value || -+ std::is_same::value || -+ std::is_same::value>> -+CONSTCD14 -+inline -+string_literal -+msl(CharT c) NOEXCEPT -+{ -+ return string_literal{c}; -+} -+ -+CONSTCD14 -+inline -+std::size_t -+to_string_len(std::intmax_t i) -+{ -+ std::size_t r = 0; -+ do -+ { -+ i /= 10; -+ ++r; -+ } while (i > 0); -+ return r; -+} -+ -+template -+CONSTCD14 -+inline -+std::enable_if_t -+< -+ N < 10, -+ string_literal -+> -+msl() NOEXCEPT -+{ -+ return msl(char(N % 10 + '0')); -+} -+ -+template -+CONSTCD14 -+inline -+std::enable_if_t -+< -+ 10 <= N, -+ string_literal -+> -+msl() NOEXCEPT -+{ -+ return msl() + msl(char(N % 10 + '0')); -+} -+ -+template -+CONSTCD14 -+inline -+std::enable_if_t -+< -+ std::ratio::type::den != 1, -+ string_literal::type::num) + -+ to_string_len(std::ratio::type::den) + 4> -+> -+msl(std::ratio) NOEXCEPT -+{ -+ using R = typename std::ratio::type; -+ return msl(CharT{'['}) + msl() + msl(CharT{'/'}) + -+ msl() + msl(CharT{']'}); -+} -+ -+template -+CONSTCD14 -+inline -+std::enable_if_t -+< -+ std::ratio::type::den == 1, -+ string_literal::type::num) + 3> -+> -+msl(std::ratio) NOEXCEPT -+{ -+ using R = typename std::ratio::type; -+ return msl(CharT{'['}) + msl() + msl(CharT{']'}); -+} -+ -+ -+#else // __cplusplus < 201402 || (defined(__EDG_VERSION__) && __EDG_VERSION__ <= 411) -+ -+inline -+std::string -+to_string(std::uint64_t x) -+{ -+ return std::to_string(x); -+} -+ -+template -+inline -+std::basic_string -+to_string(std::uint64_t x) -+{ -+ auto y = std::to_string(x); -+ return std::basic_string(y.begin(), y.end()); -+} -+ -+template -+inline -+typename std::enable_if -+< -+ std::ratio::type::den != 1, -+ std::basic_string -+>::type -+msl(std::ratio) -+{ -+ using R = typename std::ratio::type; -+ return std::basic_string(1, '[') + to_string(R::num) + CharT{'/'} + -+ to_string(R::den) + CharT{']'}; -+} -+ -+template -+inline -+typename std::enable_if -+< -+ std::ratio::type::den == 1, -+ std::basic_string -+>::type -+msl(std::ratio) -+{ -+ using R = typename std::ratio::type; -+ return std::basic_string(1, '[') + to_string(R::num) + CharT{']'}; -+} -+ -+#endif // __cplusplus < 201402 || (defined(__EDG_VERSION__) && __EDG_VERSION__ <= 411) -+ -+template -+CONSTCD11 -+inline -+string_literal -+msl(std::atto) NOEXCEPT -+{ -+ return string_literal{'a'}; -+} -+ -+template -+CONSTCD11 -+inline -+string_literal -+msl(std::femto) NOEXCEPT -+{ -+ return string_literal{'f'}; -+} -+ -+template -+CONSTCD11 -+inline -+string_literal -+msl(std::pico) NOEXCEPT -+{ -+ return string_literal{'p'}; -+} -+ -+template -+CONSTCD11 -+inline -+string_literal -+msl(std::nano) NOEXCEPT -+{ -+ return string_literal{'n'}; -+} -+ -+template -+CONSTCD11 -+inline -+typename std::enable_if -+< -+ std::is_same::value, -+ string_literal -+>::type -+msl(std::micro) NOEXCEPT -+{ -+ return string_literal{'\xC2', '\xB5'}; -+} -+ -+template -+CONSTCD11 -+inline -+typename std::enable_if -+< -+ !std::is_same::value, -+ string_literal -+>::type -+msl(std::micro) NOEXCEPT -+{ -+ return string_literal{CharT{static_cast('\xB5')}}; -+} -+ -+template -+CONSTCD11 -+inline -+string_literal -+msl(std::milli) NOEXCEPT -+{ -+ return string_literal{'m'}; -+} -+ -+template -+CONSTCD11 -+inline -+string_literal -+msl(std::centi) NOEXCEPT -+{ -+ return string_literal{'c'}; -+} -+ -+template -+CONSTCD11 -+inline -+string_literal -+msl(std::deca) NOEXCEPT -+{ -+ return string_literal{'d', 'a'}; -+} -+ -+template -+CONSTCD11 -+inline -+string_literal -+msl(std::deci) NOEXCEPT -+{ -+ return string_literal{'d'}; -+} -+ -+template -+CONSTCD11 -+inline -+string_literal -+msl(std::hecto) NOEXCEPT -+{ -+ return string_literal{'h'}; -+} -+ -+template -+CONSTCD11 -+inline -+string_literal -+msl(std::kilo) NOEXCEPT -+{ -+ return string_literal{'k'}; -+} -+ -+template -+CONSTCD11 -+inline -+string_literal -+msl(std::mega) NOEXCEPT -+{ -+ return string_literal{'M'}; -+} -+ -+template -+CONSTCD11 -+inline -+string_literal -+msl(std::giga) NOEXCEPT -+{ -+ return string_literal{'G'}; -+} -+ -+template -+CONSTCD11 -+inline -+string_literal -+msl(std::tera) NOEXCEPT -+{ -+ return string_literal{'T'}; -+} -+ -+template -+CONSTCD11 -+inline -+string_literal -+msl(std::peta) NOEXCEPT -+{ -+ return string_literal{'P'}; -+} -+ -+template -+CONSTCD11 -+inline -+string_literal -+msl(std::exa) NOEXCEPT -+{ -+ return string_literal{'E'}; -+} -+ -+template -+CONSTCD11 -+inline -+auto -+get_units(Period p) -+ -> decltype(msl(p) + string_literal{'s'}) -+{ -+ return msl(p) + string_literal{'s'}; -+} -+ -+template -+CONSTCD11 -+inline -+string_literal -+get_units(std::ratio<1>) -+{ -+ return string_literal{'s'}; -+} -+ -+template -+CONSTCD11 -+inline -+string_literal -+get_units(std::ratio<3600>) -+{ -+ return string_literal{'h'}; -+} -+ -+template -+CONSTCD11 -+inline -+string_literal -+get_units(std::ratio<60>) -+{ -+ return string_literal{'m', 'i', 'n'}; -+} -+ -+template -+CONSTCD11 -+inline -+string_literal -+get_units(std::ratio<86400>) -+{ -+ return string_literal{'d'}; -+} -+ -+template > -+struct make_string; -+ -+template <> -+struct make_string -+{ -+ template -+ static -+ std::string -+ from(Rep n) -+ { -+ return std::to_string(n); -+ } -+}; -+ -+template -+struct make_string -+{ -+ template -+ static -+ std::basic_string -+ from(Rep n) -+ { -+ auto s = std::to_string(n); -+ return std::basic_string(s.begin(), s.end()); -+ } -+}; -+ -+template <> -+struct make_string -+{ -+ template -+ static -+ std::wstring -+ from(Rep n) -+ { -+ return std::to_wstring(n); -+ } -+}; -+ -+template -+struct make_string -+{ -+ template -+ static -+ std::basic_string -+ from(Rep n) -+ { -+ auto s = std::to_wstring(n); -+ return std::basic_string(s.begin(), s.end()); -+ } -+}; -+ -+} // namespace detail -+ -+// to_stream -+ -+CONSTDATA year nanyear{-32768}; -+ -+template -+struct fields -+{ -+ year_month_day ymd{nanyear/0/0}; -+ weekday wd{8u}; -+ hh_mm_ss tod{}; -+ bool has_tod = false; -+ -+#if !defined(__clang__) && defined(__GNUC__) && (__GNUC__ * 100 + __GNUC_MINOR__ <= 409) -+ fields() : ymd{nanyear/0/0}, wd{8u}, tod{}, has_tod{false} {} -+#else -+ fields() = default; -+#endif -+ -+ fields(year_month_day ymd_) : ymd(ymd_) {} -+ fields(weekday wd_) : wd(wd_) {} -+ fields(hh_mm_ss tod_) : tod(tod_), has_tod(true) {} -+ -+ fields(year_month_day ymd_, weekday wd_) : ymd(ymd_), wd(wd_) {} -+ fields(year_month_day ymd_, hh_mm_ss tod_) : ymd(ymd_), tod(tod_), -+ has_tod(true) {} -+ -+ fields(weekday wd_, hh_mm_ss tod_) : wd(wd_), tod(tod_), has_tod(true) {} -+ -+ fields(year_month_day ymd_, weekday wd_, hh_mm_ss tod_) -+ : ymd(ymd_) -+ , wd(wd_) -+ , tod(tod_) -+ , has_tod(true) -+ {} -+}; -+ -+namespace detail -+{ -+ -+template -+unsigned -+extract_weekday(std::basic_ostream& os, const fields& fds) -+{ -+ if (!fds.ymd.ok() && !fds.wd.ok()) -+ { -+ // fds does not contain a valid weekday -+ os.setstate(std::ios::failbit); -+ return 8; -+ } -+ weekday wd; -+ if (fds.ymd.ok()) -+ { -+ wd = weekday{sys_days(fds.ymd)}; -+ if (fds.wd.ok() && wd != fds.wd) -+ { -+ // fds.ymd and fds.wd are inconsistent -+ os.setstate(std::ios::failbit); -+ return 8; -+ } -+ } -+ else -+ wd = fds.wd; -+ return static_cast((wd - Sunday).count()); -+} -+ -+template -+unsigned -+extract_month(std::basic_ostream& os, const fields& fds) -+{ -+ if (!fds.ymd.month().ok()) -+ { -+ // fds does not contain a valid month -+ os.setstate(std::ios::failbit); -+ return 0; -+ } -+ return static_cast(fds.ymd.month()); -+} -+ -+} // namespace detail -+ -+#if ONLY_C_LOCALE -+ -+namespace detail -+{ -+ -+inline -+std::pair -+weekday_names() -+{ -+ static const std::string nm[] = -+ { -+ "Sunday", -+ "Monday", -+ "Tuesday", -+ "Wednesday", -+ "Thursday", -+ "Friday", -+ "Saturday", -+ "Sun", -+ "Mon", -+ "Tue", -+ "Wed", -+ "Thu", -+ "Fri", -+ "Sat" -+ }; -+ return std::make_pair(nm, nm+sizeof(nm)/sizeof(nm[0])); -+} -+ -+inline -+std::pair -+month_names() -+{ -+ static const std::string nm[] = -+ { -+ "January", -+ "February", -+ "March", -+ "April", -+ "May", -+ "June", -+ "July", -+ "August", -+ "September", -+ "October", -+ "November", -+ "December", -+ "Jan", -+ "Feb", -+ "Mar", -+ "Apr", -+ "May", -+ "Jun", -+ "Jul", -+ "Aug", -+ "Sep", -+ "Oct", -+ "Nov", -+ "Dec" -+ }; -+ return std::make_pair(nm, nm+sizeof(nm)/sizeof(nm[0])); -+} -+ -+inline -+std::pair -+ampm_names() -+{ -+ static const std::string nm[] = -+ { -+ "AM", -+ "PM" -+ }; -+ return std::make_pair(nm, nm+sizeof(nm)/sizeof(nm[0])); -+} -+ -+template -+FwdIter -+scan_keyword(std::basic_istream& is, FwdIter kb, FwdIter ke) -+{ -+ size_t nkw = static_cast(std::distance(kb, ke)); -+ const unsigned char doesnt_match = '\0'; -+ const unsigned char might_match = '\1'; -+ const unsigned char does_match = '\2'; -+ unsigned char statbuf[100]; -+ unsigned char* status = statbuf; -+ std::unique_ptr stat_hold(0, free); -+ if (nkw > sizeof(statbuf)) -+ { -+ status = (unsigned char*)std::malloc(nkw); -+ if (status == nullptr) -+ throw std::bad_alloc(); -+ stat_hold.reset(status); -+ } -+ size_t n_might_match = nkw; // At this point, any keyword might match -+ size_t n_does_match = 0; // but none of them definitely do -+ // Initialize all statuses to might_match, except for "" keywords are does_match -+ unsigned char* st = status; -+ for (auto ky = kb; ky != ke; ++ky, ++st) -+ { -+ if (!ky->empty()) -+ *st = might_match; -+ else -+ { -+ *st = does_match; -+ --n_might_match; -+ ++n_does_match; -+ } -+ } -+ // While there might be a match, test keywords against the next CharT -+ for (size_t indx = 0; is && n_might_match > 0; ++indx) -+ { -+ // Peek at the next CharT but don't consume it -+ auto ic = is.peek(); -+ if (ic == EOF) -+ { -+ is.setstate(std::ios::eofbit); -+ break; -+ } -+ auto c = static_cast(toupper(static_cast(ic))); -+ bool consume = false; -+ // For each keyword which might match, see if the indx character is c -+ // If a match if found, consume c -+ // If a match is found, and that is the last character in the keyword, -+ // then that keyword matches. -+ // If the keyword doesn't match this character, then change the keyword -+ // to doesn't match -+ st = status; -+ for (auto ky = kb; ky != ke; ++ky, ++st) -+ { -+ if (*st == might_match) -+ { -+ if (c == static_cast(toupper(static_cast((*ky)[indx])))) -+ { -+ consume = true; -+ if (ky->size() == indx+1) -+ { -+ *st = does_match; -+ --n_might_match; -+ ++n_does_match; -+ } -+ } -+ else -+ { -+ *st = doesnt_match; -+ --n_might_match; -+ } -+ } -+ } -+ // consume if we matched a character -+ if (consume) -+ { -+ (void)is.get(); -+ // If we consumed a character and there might be a matched keyword that -+ // was marked matched on a previous iteration, then such keywords -+ // are now marked as not matching. -+ if (n_might_match + n_does_match > 1) -+ { -+ st = status; -+ for (auto ky = kb; ky != ke; ++ky, ++st) -+ { -+ if (*st == does_match && ky->size() != indx+1) -+ { -+ *st = doesnt_match; -+ --n_does_match; -+ } -+ } -+ } -+ } -+ } -+ // We've exited the loop because we hit eof and/or we have no more "might matches". -+ // Return the first matching result -+ for (st = status; kb != ke; ++kb, ++st) -+ if (*st == does_match) -+ break; -+ if (kb == ke) -+ is.setstate(std::ios::failbit); -+ return kb; -+} -+ -+} // namespace detail -+ -+#endif // ONLY_C_LOCALE -+ -+template -+std::basic_ostream& -+to_stream(std::basic_ostream& os, const CharT* fmt, -+ const fields& fds, const std::string* abbrev, -+ const std::chrono::seconds* offset_sec) -+{ -+#if ONLY_C_LOCALE -+ using detail::weekday_names; -+ using detail::month_names; -+ using detail::ampm_names; -+#endif -+ using detail::save_ostream; -+ using detail::get_units; -+ using detail::extract_weekday; -+ using detail::extract_month; -+ using std::ios; -+ using std::chrono::duration_cast; -+ using std::chrono::seconds; -+ using std::chrono::minutes; -+ using std::chrono::hours; -+ date::detail::save_ostream ss(os); -+ os.fill(' '); -+ os.flags(std::ios::skipws | std::ios::dec); -+ os.width(0); -+ tm tm{}; -+ bool insert_negative = fds.has_tod && fds.tod.to_duration() < Duration::zero(); -+#if !ONLY_C_LOCALE -+ auto& facet = std::use_facet>(os.getloc()); -+#endif -+ const CharT* command = nullptr; -+ CharT modified = CharT{}; -+ for (; *fmt; ++fmt) -+ { -+ switch (*fmt) -+ { -+ case 'a': -+ case 'A': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ tm.tm_wday = static_cast(extract_weekday(os, fds)); -+ if (os.fail()) -+ return os; -+#if !ONLY_C_LOCALE -+ const CharT f[] = {'%', *fmt}; -+ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); -+#else // ONLY_C_LOCALE -+ os << weekday_names().first[tm.tm_wday+7*(*fmt == 'a')]; -+#endif // ONLY_C_LOCALE -+ } -+ else -+ { -+ os << CharT{'%'} << modified << *fmt; -+ modified = CharT{}; -+ } -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'b': -+ case 'B': -+ case 'h': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ tm.tm_mon = static_cast(extract_month(os, fds)) - 1; -+#if !ONLY_C_LOCALE -+ const CharT f[] = {'%', *fmt}; -+ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); -+#else // ONLY_C_LOCALE -+ os << month_names().first[tm.tm_mon+12*(*fmt != 'B')]; -+#endif // ONLY_C_LOCALE -+ } -+ else -+ { -+ os << CharT{'%'} << modified << *fmt; -+ modified = CharT{}; -+ } -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'c': -+ case 'x': -+ if (command) -+ { -+ if (modified == CharT{'O'}) -+ os << CharT{'%'} << modified << *fmt; -+ else -+ { -+ if (!fds.ymd.ok()) -+ os.setstate(std::ios::failbit); -+ if (*fmt == 'c' && !fds.has_tod) -+ os.setstate(std::ios::failbit); -+#if !ONLY_C_LOCALE -+ tm = std::tm{}; -+ auto const& ymd = fds.ymd; -+ auto ld = local_days(ymd); -+ if (*fmt == 'c') -+ { -+ tm.tm_sec = static_cast(fds.tod.seconds().count()); -+ tm.tm_min = static_cast(fds.tod.minutes().count()); -+ tm.tm_hour = static_cast(fds.tod.hours().count()); -+ } -+ tm.tm_mday = static_cast(static_cast(ymd.day())); -+ tm.tm_mon = static_cast(extract_month(os, fds) - 1); -+ tm.tm_year = static_cast(ymd.year()) - 1900; -+ tm.tm_wday = static_cast(extract_weekday(os, fds)); -+ if (os.fail()) -+ return os; -+ tm.tm_yday = static_cast((ld - local_days(ymd.year()/1/1)).count()); -+ CharT f[3] = {'%'}; -+ auto fe = std::begin(f) + 1; -+ if (modified == CharT{'E'}) -+ *fe++ = modified; -+ *fe++ = *fmt; -+ facet.put(os, os, os.fill(), &tm, std::begin(f), fe); -+#else // ONLY_C_LOCALE -+ if (*fmt == 'c') -+ { -+ auto wd = static_cast(extract_weekday(os, fds)); -+ os << weekday_names().first[static_cast(wd)+7] -+ << ' '; -+ os << month_names().first[extract_month(os, fds)-1+12] << ' '; -+ auto d = static_cast(static_cast(fds.ymd.day())); -+ if (d < 10) -+ os << ' '; -+ os << d << ' ' -+ << make_time(duration_cast(fds.tod.to_duration())) -+ << ' ' << fds.ymd.year(); -+ -+ } -+ else // *fmt == 'x' -+ { -+ auto const& ymd = fds.ymd; -+ save_ostream _(os); -+ os.fill('0'); -+ os.flags(std::ios::dec | std::ios::right); -+ os.width(2); -+ os << static_cast(ymd.month()) << CharT{'/'}; -+ os.width(2); -+ os << static_cast(ymd.day()) << CharT{'/'}; -+ os.width(2); -+ os << static_cast(ymd.year()) % 100; -+ } -+#endif // ONLY_C_LOCALE -+ } -+ command = nullptr; -+ modified = CharT{}; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'C': -+ if (command) -+ { -+ if (modified == CharT{'O'}) -+ os << CharT{'%'} << modified << *fmt; -+ else -+ { -+ if (!fds.ymd.year().ok()) -+ os.setstate(std::ios::failbit); -+ auto y = static_cast(fds.ymd.year()); -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+#endif -+ { -+ save_ostream _(os); -+ os.fill('0'); -+ os.flags(std::ios::dec | std::ios::right); -+ if (y >= 0) -+ { -+ os.width(2); -+ os << y/100; -+ } -+ else -+ { -+ os << CharT{'-'}; -+ os.width(2); -+ os << -(y-99)/100; -+ } -+ } -+#if !ONLY_C_LOCALE -+ else if (modified == CharT{'E'}) -+ { -+ tm.tm_year = y - 1900; -+ CharT f[3] = {'%', 'E', 'C'}; -+ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); -+ } -+#endif -+ } -+ command = nullptr; -+ modified = CharT{}; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'd': -+ case 'e': -+ if (command) -+ { -+ if (modified == CharT{'E'}) -+ os << CharT{'%'} << modified << *fmt; -+ else -+ { -+ if (!fds.ymd.day().ok()) -+ os.setstate(std::ios::failbit); -+ auto d = static_cast(static_cast(fds.ymd.day())); -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+#endif -+ { -+ save_ostream _(os); -+ if (*fmt == CharT{'d'}) -+ os.fill('0'); -+ else -+ os.fill(' '); -+ os.flags(std::ios::dec | std::ios::right); -+ os.width(2); -+ os << d; -+ } -+#if !ONLY_C_LOCALE -+ else if (modified == CharT{'O'}) -+ { -+ tm.tm_mday = d; -+ CharT f[3] = {'%', 'O', *fmt}; -+ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); -+ } -+#endif -+ } -+ command = nullptr; -+ modified = CharT{}; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'D': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ if (!fds.ymd.ok()) -+ os.setstate(std::ios::failbit); -+ auto const& ymd = fds.ymd; -+ save_ostream _(os); -+ os.fill('0'); -+ os.flags(std::ios::dec | std::ios::right); -+ os.width(2); -+ os << static_cast(ymd.month()) << CharT{'/'}; -+ os.width(2); -+ os << static_cast(ymd.day()) << CharT{'/'}; -+ os.width(2); -+ os << static_cast(ymd.year()) % 100; -+ } -+ else -+ { -+ os << CharT{'%'} << modified << *fmt; -+ modified = CharT{}; -+ } -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'F': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ if (!fds.ymd.ok()) -+ os.setstate(std::ios::failbit); -+ auto const& ymd = fds.ymd; -+ save_ostream _(os); -+ os.imbue(std::locale::classic()); -+ os.fill('0'); -+ os.flags(std::ios::dec | std::ios::right); -+ os.width(4); -+ os << static_cast(ymd.year()) << CharT{'-'}; -+ os.width(2); -+ os << static_cast(ymd.month()) << CharT{'-'}; -+ os.width(2); -+ os << static_cast(ymd.day()); -+ } -+ else -+ { -+ os << CharT{'%'} << modified << *fmt; -+ modified = CharT{}; -+ } -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'g': -+ case 'G': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ if (!fds.ymd.ok()) -+ os.setstate(std::ios::failbit); -+ auto ld = local_days(fds.ymd); -+ auto y = year_month_day{ld + days{3}}.year(); -+ auto start = local_days((y-years{1})/December/Thursday[last]) + -+ (Monday-Thursday); -+ if (ld < start) -+ --y; -+ if (*fmt == CharT{'G'}) -+ os << y; -+ else -+ { -+ save_ostream _(os); -+ os.fill('0'); -+ os.flags(std::ios::dec | std::ios::right); -+ os.width(2); -+ os << std::abs(static_cast(y)) % 100; -+ } -+ } -+ else -+ { -+ os << CharT{'%'} << modified << *fmt; -+ modified = CharT{}; -+ } -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'H': -+ case 'I': -+ if (command) -+ { -+ if (modified == CharT{'E'}) -+ os << CharT{'%'} << modified << *fmt; -+ else -+ { -+ if (!fds.has_tod) -+ os.setstate(std::ios::failbit); -+ if (insert_negative) -+ { -+ os << '-'; -+ insert_negative = false; -+ } -+ auto hms = fds.tod; -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+#endif -+ { -+ auto h = *fmt == CharT{'I'} ? date::make12(hms.hours()) : hms.hours(); -+ if (h < hours{10}) -+ os << CharT{'0'}; -+ os << h.count(); -+ } -+#if !ONLY_C_LOCALE -+ else if (modified == CharT{'O'}) -+ { -+ const CharT f[] = {'%', modified, *fmt}; -+ tm.tm_hour = static_cast(hms.hours().count()); -+ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); -+ } -+#endif -+ } -+ modified = CharT{}; -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'j': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ if (fds.ymd.ok() || fds.has_tod) -+ { -+ days doy; -+ if (fds.ymd.ok()) -+ { -+ auto ld = local_days(fds.ymd); -+ auto y = fds.ymd.year(); -+ doy = ld - local_days(y/January/1) + days{1}; -+ } -+ else -+ { -+ doy = duration_cast(fds.tod.to_duration()); -+ } -+ save_ostream _(os); -+ os.fill('0'); -+ os.flags(std::ios::dec | std::ios::right); -+ os.width(3); -+ os << doy.count(); -+ } -+ else -+ { -+ os.setstate(std::ios::failbit); -+ } -+ } -+ else -+ { -+ os << CharT{'%'} << modified << *fmt; -+ modified = CharT{}; -+ } -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'm': -+ if (command) -+ { -+ if (modified == CharT{'E'}) -+ os << CharT{'%'} << modified << *fmt; -+ else -+ { -+ if (!fds.ymd.month().ok()) -+ os.setstate(std::ios::failbit); -+ auto m = static_cast(fds.ymd.month()); -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+#endif -+ { -+ if (m < 10) -+ os << CharT{'0'}; -+ os << m; -+ } -+#if !ONLY_C_LOCALE -+ else if (modified == CharT{'O'}) -+ { -+ const CharT f[] = {'%', modified, *fmt}; -+ tm.tm_mon = static_cast(m-1); -+ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); -+ } -+#endif -+ } -+ modified = CharT{}; -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'M': -+ if (command) -+ { -+ if (modified == CharT{'E'}) -+ os << CharT{'%'} << modified << *fmt; -+ else -+ { -+ if (!fds.has_tod) -+ os.setstate(std::ios::failbit); -+ if (insert_negative) -+ { -+ os << '-'; -+ insert_negative = false; -+ } -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+#endif -+ { -+ if (fds.tod.minutes() < minutes{10}) -+ os << CharT{'0'}; -+ os << fds.tod.minutes().count(); -+ } -+#if !ONLY_C_LOCALE -+ else if (modified == CharT{'O'}) -+ { -+ const CharT f[] = {'%', modified, *fmt}; -+ tm.tm_min = static_cast(fds.tod.minutes().count()); -+ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); -+ } -+#endif -+ } -+ modified = CharT{}; -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'n': -+ if (command) -+ { -+ if (modified == CharT{}) -+ os << CharT{'\n'}; -+ else -+ { -+ os << CharT{'%'} << modified << *fmt; -+ modified = CharT{}; -+ } -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'p': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ if (!fds.has_tod) -+ os.setstate(std::ios::failbit); -+#if !ONLY_C_LOCALE -+ const CharT f[] = {'%', *fmt}; -+ tm.tm_hour = static_cast(fds.tod.hours().count()); -+ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); -+#else -+ if (date::is_am(fds.tod.hours())) -+ os << ampm_names().first[0]; -+ else -+ os << ampm_names().first[1]; -+#endif -+ } -+ else -+ { -+ os << CharT{'%'} << modified << *fmt; -+ } -+ modified = CharT{}; -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'Q': -+ case 'q': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ if (!fds.has_tod) -+ os.setstate(std::ios::failbit); -+ auto d = fds.tod.to_duration(); -+ if (*fmt == 'q') -+ os << get_units(typename decltype(d)::period::type{}); -+ else -+ os << d.count(); -+ } -+ else -+ { -+ os << CharT{'%'} << modified << *fmt; -+ } -+ modified = CharT{}; -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'r': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ if (!fds.has_tod) -+ os.setstate(std::ios::failbit); -+#if !ONLY_C_LOCALE -+ const CharT f[] = {'%', *fmt}; -+ tm.tm_hour = static_cast(fds.tod.hours().count()); -+ tm.tm_min = static_cast(fds.tod.minutes().count()); -+ tm.tm_sec = static_cast(fds.tod.seconds().count()); -+ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); -+#else -+ hh_mm_ss tod(duration_cast(fds.tod.to_duration())); -+ save_ostream _(os); -+ os.fill('0'); -+ os.width(2); -+ os << date::make12(tod.hours()).count() << CharT{':'}; -+ os.width(2); -+ os << tod.minutes().count() << CharT{':'}; -+ os.width(2); -+ os << tod.seconds().count() << CharT{' '}; -+ if (date::is_am(tod.hours())) -+ os << ampm_names().first[0]; -+ else -+ os << ampm_names().first[1]; -+#endif -+ } -+ else -+ { -+ os << CharT{'%'} << modified << *fmt; -+ } -+ modified = CharT{}; -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'R': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ if (!fds.has_tod) -+ os.setstate(std::ios::failbit); -+ if (fds.tod.hours() < hours{10}) -+ os << CharT{'0'}; -+ os << fds.tod.hours().count() << CharT{':'}; -+ if (fds.tod.minutes() < minutes{10}) -+ os << CharT{'0'}; -+ os << fds.tod.minutes().count(); -+ } -+ else -+ { -+ os << CharT{'%'} << modified << *fmt; -+ modified = CharT{}; -+ } -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'S': -+ if (command) -+ { -+ if (modified == CharT{'E'}) -+ os << CharT{'%'} << modified << *fmt; -+ else -+ { -+ if (!fds.has_tod) -+ os.setstate(std::ios::failbit); -+ if (insert_negative) -+ { -+ os << '-'; -+ insert_negative = false; -+ } -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+#endif -+ { -+ os << fds.tod.s_; -+ } -+#if !ONLY_C_LOCALE -+ else if (modified == CharT{'O'}) -+ { -+ const CharT f[] = {'%', modified, *fmt}; -+ tm.tm_sec = static_cast(fds.tod.s_.seconds().count()); -+ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); -+ } -+#endif -+ } -+ modified = CharT{}; -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 't': -+ if (command) -+ { -+ if (modified == CharT{}) -+ os << CharT{'\t'}; -+ else -+ { -+ os << CharT{'%'} << modified << *fmt; -+ modified = CharT{}; -+ } -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'T': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ if (!fds.has_tod) -+ os.setstate(std::ios::failbit); -+ os << fds.tod; -+ } -+ else -+ { -+ os << CharT{'%'} << modified << *fmt; -+ modified = CharT{}; -+ } -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'u': -+ if (command) -+ { -+ if (modified == CharT{'E'}) -+ os << CharT{'%'} << modified << *fmt; -+ else -+ { -+ auto wd = extract_weekday(os, fds); -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+#endif -+ { -+ os << (wd != 0 ? wd : 7u); -+ } -+#if !ONLY_C_LOCALE -+ else if (modified == CharT{'O'}) -+ { -+ const CharT f[] = {'%', modified, *fmt}; -+ tm.tm_wday = static_cast(wd); -+ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); -+ } -+#endif -+ } -+ modified = CharT{}; -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'U': -+ if (command) -+ { -+ if (modified == CharT{'E'}) -+ os << CharT{'%'} << modified << *fmt; -+ else -+ { -+ auto const& ymd = fds.ymd; -+ if (!ymd.ok()) -+ os.setstate(std::ios::failbit); -+ auto ld = local_days(ymd); -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+#endif -+ { -+ auto st = local_days(Sunday[1]/January/ymd.year()); -+ if (ld < st) -+ os << CharT{'0'} << CharT{'0'}; -+ else -+ { -+ auto wn = duration_cast(ld - st).count() + 1; -+ if (wn < 10) -+ os << CharT{'0'}; -+ os << wn; -+ } -+ } -+ #if !ONLY_C_LOCALE -+ else if (modified == CharT{'O'}) -+ { -+ const CharT f[] = {'%', modified, *fmt}; -+ tm.tm_year = static_cast(ymd.year()) - 1900; -+ tm.tm_wday = static_cast(extract_weekday(os, fds)); -+ if (os.fail()) -+ return os; -+ tm.tm_yday = static_cast((ld - local_days(ymd.year()/1/1)).count()); -+ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); -+ } -+#endif -+ } -+ modified = CharT{}; -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'V': -+ if (command) -+ { -+ if (modified == CharT{'E'}) -+ os << CharT{'%'} << modified << *fmt; -+ else -+ { -+ if (!fds.ymd.ok()) -+ os.setstate(std::ios::failbit); -+ auto ld = local_days(fds.ymd); -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+#endif -+ { -+ auto y = year_month_day{ld + days{3}}.year(); -+ auto st = local_days((y-years{1})/12/Thursday[last]) + -+ (Monday-Thursday); -+ if (ld < st) -+ { -+ --y; -+ st = local_days((y - years{1})/12/Thursday[last]) + -+ (Monday-Thursday); -+ } -+ auto wn = duration_cast(ld - st).count() + 1; -+ if (wn < 10) -+ os << CharT{'0'}; -+ os << wn; -+ } -+#if !ONLY_C_LOCALE -+ else if (modified == CharT{'O'}) -+ { -+ const CharT f[] = {'%', modified, *fmt}; -+ auto const& ymd = fds.ymd; -+ tm.tm_year = static_cast(ymd.year()) - 1900; -+ tm.tm_wday = static_cast(extract_weekday(os, fds)); -+ if (os.fail()) -+ return os; -+ tm.tm_yday = static_cast((ld - local_days(ymd.year()/1/1)).count()); -+ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); -+ } -+#endif -+ } -+ modified = CharT{}; -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'w': -+ if (command) -+ { -+ auto wd = extract_weekday(os, fds); -+ if (os.fail()) -+ return os; -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+#else -+ if (modified != CharT{'E'}) -+#endif -+ { -+ os << wd; -+ } -+#if !ONLY_C_LOCALE -+ else if (modified == CharT{'O'}) -+ { -+ const CharT f[] = {'%', modified, *fmt}; -+ tm.tm_wday = static_cast(wd); -+ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); -+ } -+#endif -+ else -+ { -+ os << CharT{'%'} << modified << *fmt; -+ } -+ modified = CharT{}; -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'W': -+ if (command) -+ { -+ if (modified == CharT{'E'}) -+ os << CharT{'%'} << modified << *fmt; -+ else -+ { -+ auto const& ymd = fds.ymd; -+ if (!ymd.ok()) -+ os.setstate(std::ios::failbit); -+ auto ld = local_days(ymd); -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+#endif -+ { -+ auto st = local_days(Monday[1]/January/ymd.year()); -+ if (ld < st) -+ os << CharT{'0'} << CharT{'0'}; -+ else -+ { -+ auto wn = duration_cast(ld - st).count() + 1; -+ if (wn < 10) -+ os << CharT{'0'}; -+ os << wn; -+ } -+ } -+#if !ONLY_C_LOCALE -+ else if (modified == CharT{'O'}) -+ { -+ const CharT f[] = {'%', modified, *fmt}; -+ tm.tm_year = static_cast(ymd.year()) - 1900; -+ tm.tm_wday = static_cast(extract_weekday(os, fds)); -+ if (os.fail()) -+ return os; -+ tm.tm_yday = static_cast((ld - local_days(ymd.year()/1/1)).count()); -+ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); -+ } -+#endif -+ } -+ modified = CharT{}; -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'X': -+ if (command) -+ { -+ if (modified == CharT{'O'}) -+ os << CharT{'%'} << modified << *fmt; -+ else -+ { -+ if (!fds.has_tod) -+ os.setstate(std::ios::failbit); -+#if !ONLY_C_LOCALE -+ tm = std::tm{}; -+ tm.tm_sec = static_cast(fds.tod.seconds().count()); -+ tm.tm_min = static_cast(fds.tod.minutes().count()); -+ tm.tm_hour = static_cast(fds.tod.hours().count()); -+ CharT f[3] = {'%'}; -+ auto fe = std::begin(f) + 1; -+ if (modified == CharT{'E'}) -+ *fe++ = modified; -+ *fe++ = *fmt; -+ facet.put(os, os, os.fill(), &tm, std::begin(f), fe); -+#else -+ os << fds.tod; -+#endif -+ } -+ command = nullptr; -+ modified = CharT{}; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'y': -+ if (command) -+ { -+ if (!fds.ymd.year().ok()) -+ os.setstate(std::ios::failbit); -+ auto y = static_cast(fds.ymd.year()); -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+ { -+#endif -+ y = std::abs(y) % 100; -+ if (y < 10) -+ os << CharT{'0'}; -+ os << y; -+#if !ONLY_C_LOCALE -+ } -+ else -+ { -+ const CharT f[] = {'%', modified, *fmt}; -+ tm.tm_year = y - 1900; -+ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); -+ } -+#endif -+ modified = CharT{}; -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'Y': -+ if (command) -+ { -+ if (modified == CharT{'O'}) -+ os << CharT{'%'} << modified << *fmt; -+ else -+ { -+ if (!fds.ymd.year().ok()) -+ os.setstate(std::ios::failbit); -+ auto y = fds.ymd.year(); -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+#endif -+ { -+ save_ostream _(os); -+ os.imbue(std::locale::classic()); -+ os << y; -+ } -+#if !ONLY_C_LOCALE -+ else if (modified == CharT{'E'}) -+ { -+ const CharT f[] = {'%', modified, *fmt}; -+ tm.tm_year = static_cast(y) - 1900; -+ facet.put(os, os, os.fill(), &tm, std::begin(f), std::end(f)); -+ } -+#endif -+ } -+ modified = CharT{}; -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'z': -+ if (command) -+ { -+ if (offset_sec == nullptr) -+ { -+ // Can not format %z with unknown offset -+ os.setstate(ios::failbit); -+ return os; -+ } -+ auto m = duration_cast(*offset_sec); -+ auto neg = m < minutes{0}; -+ m = date::abs(m); -+ auto h = duration_cast(m); -+ m -= h; -+ if (neg) -+ os << CharT{'-'}; -+ else -+ os << CharT{'+'}; -+ if (h < hours{10}) -+ os << CharT{'0'}; -+ os << h.count(); -+ if (modified != CharT{}) -+ os << CharT{':'}; -+ if (m < minutes{10}) -+ os << CharT{'0'}; -+ os << m.count(); -+ command = nullptr; -+ modified = CharT{}; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'Z': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ if (abbrev == nullptr) -+ { -+ // Can not format %Z with unknown time_zone -+ os.setstate(ios::failbit); -+ return os; -+ } -+ for (auto c : *abbrev) -+ os << CharT(c); -+ } -+ else -+ { -+ os << CharT{'%'} << modified << *fmt; -+ modified = CharT{}; -+ } -+ command = nullptr; -+ } -+ else -+ os << *fmt; -+ break; -+ case 'E': -+ case 'O': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ modified = *fmt; -+ } -+ else -+ { -+ os << CharT{'%'} << modified << *fmt; -+ command = nullptr; -+ modified = CharT{}; -+ } -+ } -+ else -+ os << *fmt; -+ break; -+ case '%': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ os << CharT{'%'}; -+ command = nullptr; -+ } -+ else -+ { -+ os << CharT{'%'} << modified << CharT{'%'}; -+ command = nullptr; -+ modified = CharT{}; -+ } -+ } -+ else -+ command = fmt; -+ break; -+ default: -+ if (command) -+ { -+ os << CharT{'%'}; -+ command = nullptr; -+ } -+ if (modified != CharT{}) -+ { -+ os << modified; -+ modified = CharT{}; -+ } -+ os << *fmt; -+ break; -+ } -+ } -+ if (command) -+ os << CharT{'%'}; -+ if (modified != CharT{}) -+ os << modified; -+ return os; -+} -+ -+template -+inline -+std::basic_ostream& -+to_stream(std::basic_ostream& os, const CharT* fmt, const year& y) -+{ -+ using CT = std::chrono::seconds; -+ fields fds{y/0/0}; -+ return to_stream(os, fmt, fds); -+} -+ -+template -+inline -+std::basic_ostream& -+to_stream(std::basic_ostream& os, const CharT* fmt, const month& m) -+{ -+ using CT = std::chrono::seconds; -+ fields fds{m/0/nanyear}; -+ return to_stream(os, fmt, fds); -+} -+ -+template -+inline -+std::basic_ostream& -+to_stream(std::basic_ostream& os, const CharT* fmt, const day& d) -+{ -+ using CT = std::chrono::seconds; -+ fields fds{d/0/nanyear}; -+ return to_stream(os, fmt, fds); -+} -+ -+template -+inline -+std::basic_ostream& -+to_stream(std::basic_ostream& os, const CharT* fmt, const weekday& wd) -+{ -+ using CT = std::chrono::seconds; -+ fields fds{wd}; -+ return to_stream(os, fmt, fds); -+} -+ -+template -+inline -+std::basic_ostream& -+to_stream(std::basic_ostream& os, const CharT* fmt, const year_month& ym) -+{ -+ using CT = std::chrono::seconds; -+ fields fds{ym/0}; -+ return to_stream(os, fmt, fds); -+} -+ -+template -+inline -+std::basic_ostream& -+to_stream(std::basic_ostream& os, const CharT* fmt, const month_day& md) -+{ -+ using CT = std::chrono::seconds; -+ fields fds{md/nanyear}; -+ return to_stream(os, fmt, fds); -+} -+ -+template -+inline -+std::basic_ostream& -+to_stream(std::basic_ostream& os, const CharT* fmt, -+ const year_month_day& ymd) -+{ -+ using CT = std::chrono::seconds; -+ fields fds{ymd}; -+ return to_stream(os, fmt, fds); -+} -+ -+template -+inline -+std::basic_ostream& -+to_stream(std::basic_ostream& os, const CharT* fmt, -+ const std::chrono::duration& d) -+{ -+ using Duration = std::chrono::duration; -+ using CT = typename std::common_type::type; -+ fields fds{hh_mm_ss{d}}; -+ return to_stream(os, fmt, fds); -+} -+ -+template -+std::basic_ostream& -+to_stream(std::basic_ostream& os, const CharT* fmt, -+ const local_time& tp, const std::string* abbrev = nullptr, -+ const std::chrono::seconds* offset_sec = nullptr) -+{ -+ using CT = typename std::common_type::type; -+ auto ld = std::chrono::time_point_cast(tp); -+ fields fds; -+ if (ld <= tp) -+ fds = fields{year_month_day{ld}, hh_mm_ss{tp-local_seconds{ld}}}; -+ else -+ fds = fields{year_month_day{ld - days{1}}, -+ hh_mm_ss{days{1} - (local_seconds{ld} - tp)}}; -+ return to_stream(os, fmt, fds, abbrev, offset_sec); -+} -+ -+template -+std::basic_ostream& -+to_stream(std::basic_ostream& os, const CharT* fmt, -+ const sys_time& tp) -+{ -+ using std::chrono::seconds; -+ using CT = typename std::common_type::type; -+ const std::string abbrev("UTC"); -+ CONSTDATA seconds offset{0}; -+ auto sd = std::chrono::time_point_cast(tp); -+ fields fds; -+ if (sd <= tp) -+ fds = fields{year_month_day{sd}, hh_mm_ss{tp-sys_seconds{sd}}}; -+ else -+ fds = fields{year_month_day{sd - days{1}}, -+ hh_mm_ss{days{1} - (sys_seconds{sd} - tp)}}; -+ return to_stream(os, fmt, fds, &abbrev, &offset); -+} -+ -+// format -+ -+template -+auto -+format(const std::locale& loc, const CharT* fmt, const Streamable& tp) -+ -> decltype(to_stream(std::declval&>(), fmt, tp), -+ std::basic_string{}) -+{ -+ std::basic_ostringstream os; -+ os.exceptions(std::ios::failbit | std::ios::badbit); -+ os.imbue(loc); -+ to_stream(os, fmt, tp); -+ return os.str(); -+} -+ -+template -+auto -+format(const CharT* fmt, const Streamable& tp) -+ -> decltype(to_stream(std::declval&>(), fmt, tp), -+ std::basic_string{}) -+{ -+ std::basic_ostringstream os; -+ os.exceptions(std::ios::failbit | std::ios::badbit); -+ to_stream(os, fmt, tp); -+ return os.str(); -+} -+ -+template -+auto -+format(const std::locale& loc, const std::basic_string& fmt, -+ const Streamable& tp) -+ -> decltype(to_stream(std::declval&>(), fmt.c_str(), tp), -+ std::basic_string{}) -+{ -+ std::basic_ostringstream os; -+ os.exceptions(std::ios::failbit | std::ios::badbit); -+ os.imbue(loc); -+ to_stream(os, fmt.c_str(), tp); -+ return os.str(); -+} -+ -+template -+auto -+format(const std::basic_string& fmt, const Streamable& tp) -+ -> decltype(to_stream(std::declval&>(), fmt.c_str(), tp), -+ std::basic_string{}) -+{ -+ std::basic_ostringstream os; -+ os.exceptions(std::ios::failbit | std::ios::badbit); -+ to_stream(os, fmt.c_str(), tp); -+ return os.str(); -+} -+ -+// parse -+ -+namespace detail -+{ -+ -+template -+bool -+read_char(std::basic_istream& is, CharT fmt, std::ios::iostate& err) -+{ -+ auto ic = is.get(); -+ if (Traits::eq_int_type(ic, Traits::eof()) || -+ !Traits::eq(Traits::to_char_type(ic), fmt)) -+ { -+ err |= std::ios::failbit; -+ is.setstate(std::ios::failbit); -+ return false; -+ } -+ return true; -+} -+ -+template -+unsigned -+read_unsigned(std::basic_istream& is, unsigned m = 1, unsigned M = 10) -+{ -+ unsigned x = 0; -+ unsigned count = 0; -+ while (true) -+ { -+ auto ic = is.peek(); -+ if (Traits::eq_int_type(ic, Traits::eof())) -+ break; -+ auto c = static_cast(Traits::to_char_type(ic)); -+ if (!('0' <= c && c <= '9')) -+ break; -+ (void)is.get(); -+ ++count; -+ x = 10*x + static_cast(c - '0'); -+ if (count == M) -+ break; -+ } -+ if (count < m) -+ is.setstate(std::ios::failbit); -+ return x; -+} -+ -+template -+int -+read_signed(std::basic_istream& is, unsigned m = 1, unsigned M = 10) -+{ -+ auto ic = is.peek(); -+ if (!Traits::eq_int_type(ic, Traits::eof())) -+ { -+ auto c = static_cast(Traits::to_char_type(ic)); -+ if (('0' <= c && c <= '9') || c == '-' || c == '+') -+ { -+ if (c == '-' || c == '+') -+ (void)is.get(); -+ auto x = static_cast(read_unsigned(is, std::max(m, 1u), M)); -+ if (!is.fail()) -+ { -+ if (c == '-') -+ x = -x; -+ return x; -+ } -+ } -+ } -+ if (m > 0) -+ is.setstate(std::ios::failbit); -+ return 0; -+} -+ -+template -+long double -+read_long_double(std::basic_istream& is, unsigned m = 1, unsigned M = 10) -+{ -+ unsigned count = 0; -+ unsigned fcount = 0; -+ unsigned long long i = 0; -+ unsigned long long f = 0; -+ bool parsing_fraction = false; -+#if ONLY_C_LOCALE -+ typename Traits::int_type decimal_point = '.'; -+#else -+ auto decimal_point = Traits::to_int_type( -+ std::use_facet>(is.getloc()).decimal_point()); -+#endif -+ while (true) -+ { -+ auto ic = is.peek(); -+ if (Traits::eq_int_type(ic, Traits::eof())) -+ break; -+ if (Traits::eq_int_type(ic, decimal_point)) -+ { -+ decimal_point = Traits::eof(); -+ parsing_fraction = true; -+ } -+ else -+ { -+ auto c = static_cast(Traits::to_char_type(ic)); -+ if (!('0' <= c && c <= '9')) -+ break; -+ if (!parsing_fraction) -+ { -+ i = 10*i + static_cast(c - '0'); -+ } -+ else -+ { -+ f = 10*f + static_cast(c - '0'); -+ ++fcount; -+ } -+ } -+ (void)is.get(); -+ if (++count == M) -+ break; -+ } -+ if (count < m) -+ { -+ is.setstate(std::ios::failbit); -+ return 0; -+ } -+ return static_cast(i) + static_cast(f)/std::pow(10.L, fcount); -+} -+ -+struct rs -+{ -+ int& i; -+ unsigned m; -+ unsigned M; -+}; -+ -+struct ru -+{ -+ int& i; -+ unsigned m; -+ unsigned M; -+}; -+ -+struct rld -+{ -+ long double& i; -+ unsigned m; -+ unsigned M; -+}; -+ -+template -+void -+read(std::basic_istream&) -+{ -+} -+ -+template -+void -+read(std::basic_istream& is, CharT a0, Args&& ...args); -+ -+template -+void -+read(std::basic_istream& is, rs a0, Args&& ...args); -+ -+template -+void -+read(std::basic_istream& is, ru a0, Args&& ...args); -+ -+template -+void -+read(std::basic_istream& is, int a0, Args&& ...args); -+ -+template -+void -+read(std::basic_istream& is, rld a0, Args&& ...args); -+ -+template -+void -+read(std::basic_istream& is, CharT a0, Args&& ...args) -+{ -+ // No-op if a0 == CharT{} -+ if (a0 != CharT{}) -+ { -+ auto ic = is.peek(); -+ if (Traits::eq_int_type(ic, Traits::eof())) -+ { -+ is.setstate(std::ios::failbit | std::ios::eofbit); -+ return; -+ } -+ if (!Traits::eq(Traits::to_char_type(ic), a0)) -+ { -+ is.setstate(std::ios::failbit); -+ return; -+ } -+ (void)is.get(); -+ } -+ read(is, std::forward(args)...); -+} -+ -+template -+void -+read(std::basic_istream& is, rs a0, Args&& ...args) -+{ -+ auto x = read_signed(is, a0.m, a0.M); -+ if (is.fail()) -+ return; -+ a0.i = x; -+ read(is, std::forward(args)...); -+} -+ -+template -+void -+read(std::basic_istream& is, ru a0, Args&& ...args) -+{ -+ auto x = read_unsigned(is, a0.m, a0.M); -+ if (is.fail()) -+ return; -+ a0.i = static_cast(x); -+ read(is, std::forward(args)...); -+} -+ -+template -+void -+read(std::basic_istream& is, int a0, Args&& ...args) -+{ -+ if (a0 != -1) -+ { -+ auto u = static_cast(a0); -+ CharT buf[std::numeric_limits::digits10+2u] = {}; -+ auto e = buf; -+ do -+ { -+ *e++ = static_cast(CharT(u % 10) + CharT{'0'}); -+ u /= 10; -+ } while (u > 0); -+ std::reverse(buf, e); -+ for (auto p = buf; p != e && is.rdstate() == std::ios::goodbit; ++p) -+ read(is, *p); -+ } -+ if (is.rdstate() == std::ios::goodbit) -+ read(is, std::forward(args)...); -+} -+ -+template -+void -+read(std::basic_istream& is, rld a0, Args&& ...args) -+{ -+ auto x = read_long_double(is, a0.m, a0.M); -+ if (is.fail()) -+ return; -+ a0.i = x; -+ read(is, std::forward(args)...); -+} -+ -+template -+inline -+void -+checked_set(T& value, T from, T not_a_value, std::basic_ios& is) -+{ -+ if (!is.fail()) -+ { -+ if (value == not_a_value) -+ value = std::move(from); -+ else if (value != from) -+ is.setstate(std::ios::failbit); -+ } -+} -+ -+} // namespace detail; -+ -+template > -+std::basic_istream& -+from_stream(std::basic_istream& is, const CharT* fmt, -+ fields& fds, std::basic_string* abbrev, -+ std::chrono::minutes* offset) -+{ -+ using std::numeric_limits; -+ using std::ios; -+ using std::chrono::duration; -+ using std::chrono::duration_cast; -+ using std::chrono::seconds; -+ using std::chrono::minutes; -+ using std::chrono::hours; -+ using detail::round_i; -+ typename std::basic_istream::sentry ok{is, true}; -+ if (ok) -+ { -+ date::detail::save_istream ss(is); -+ is.fill(' '); -+ is.flags(std::ios::skipws | std::ios::dec); -+ is.width(0); -+#if !ONLY_C_LOCALE -+ auto& f = std::use_facet>(is.getloc()); -+ std::tm tm{}; -+#endif -+ const CharT* command = nullptr; -+ auto modified = CharT{}; -+ auto width = -1; -+ -+ CONSTDATA int not_a_year = numeric_limits::min(); -+ CONSTDATA int not_a_2digit_year = 100; -+ CONSTDATA int not_a_century = not_a_year / 100; -+ CONSTDATA int not_a_month = 0; -+ CONSTDATA int not_a_day = 0; -+ CONSTDATA int not_a_hour = numeric_limits::min(); -+ CONSTDATA int not_a_hour_12_value = 0; -+ CONSTDATA int not_a_minute = not_a_hour; -+ CONSTDATA Duration not_a_second = Duration::min(); -+ CONSTDATA int not_a_doy = -1; -+ CONSTDATA int not_a_weekday = 8; -+ CONSTDATA int not_a_week_num = 100; -+ CONSTDATA int not_a_ampm = -1; -+ CONSTDATA minutes not_a_offset = minutes::min(); -+ -+ int Y = not_a_year; // c, F, Y * -+ int y = not_a_2digit_year; // D, x, y * -+ int g = not_a_2digit_year; // g * -+ int G = not_a_year; // G * -+ int C = not_a_century; // C * -+ int m = not_a_month; // b, B, h, m, c, D, F, x * -+ int d = not_a_day; // c, d, D, e, F, x * -+ int j = not_a_doy; // j * -+ int wd = not_a_weekday; // a, A, u, w * -+ int H = not_a_hour; // c, H, R, T, X * -+ int I = not_a_hour_12_value; // I, r * -+ int p = not_a_ampm; // p, r * -+ int M = not_a_minute; // c, M, r, R, T, X * -+ Duration s = not_a_second; // c, r, S, T, X * -+ int U = not_a_week_num; // U * -+ int V = not_a_week_num; // V * -+ int W = not_a_week_num; // W * -+ std::basic_string temp_abbrev; // Z * -+ minutes temp_offset = not_a_offset; // z * -+ -+ using detail::read; -+ using detail::rs; -+ using detail::ru; -+ using detail::rld; -+ using detail::checked_set; -+ for (; *fmt != CharT{} && !is.fail(); ++fmt) -+ { -+ switch (*fmt) -+ { -+ case 'a': -+ case 'A': -+ case 'u': -+ case 'w': // wd: a, A, u, w -+ if (command) -+ { -+ int trial_wd = not_a_weekday; -+ if (*fmt == 'a' || *fmt == 'A') -+ { -+ if (modified == CharT{}) -+ { -+#if !ONLY_C_LOCALE -+ ios::iostate err = ios::goodbit; -+ f.get(is, nullptr, is, err, &tm, command, fmt+1); -+ is.setstate(err); -+ if (!is.fail()) -+ trial_wd = tm.tm_wday; -+#else -+ auto nm = detail::weekday_names(); -+ auto i = detail::scan_keyword(is, nm.first, nm.second) - nm.first; -+ if (!is.fail()) -+ trial_wd = i % 7; -+#endif -+ } -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ } -+ else // *fmt == 'u' || *fmt == 'w' -+ { -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+#else -+ if (modified != CharT{'E'}) -+#endif -+ { -+ read(is, ru{trial_wd, 1, width == -1 ? -+ 1u : static_cast(width)}); -+ if (!is.fail()) -+ { -+ if (*fmt == 'u') -+ { -+ if (!(1 <= trial_wd && trial_wd <= 7)) -+ { -+ trial_wd = not_a_weekday; -+ is.setstate(ios::failbit); -+ } -+ else if (trial_wd == 7) -+ trial_wd = 0; -+ } -+ else // *fmt == 'w' -+ { -+ if (!(0 <= trial_wd && trial_wd <= 6)) -+ { -+ trial_wd = not_a_weekday; -+ is.setstate(ios::failbit); -+ } -+ } -+ } -+ } -+#if !ONLY_C_LOCALE -+ else if (modified == CharT{'O'}) -+ { -+ ios::iostate err = ios::goodbit; -+ f.get(is, nullptr, is, err, &tm, command, fmt+1); -+ is.setstate(err); -+ if (!is.fail()) -+ trial_wd = tm.tm_wday; -+ } -+#endif -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ } -+ if (trial_wd != not_a_weekday) -+ checked_set(wd, trial_wd, not_a_weekday, is); -+ } -+ else // !command -+ read(is, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ break; -+ case 'b': -+ case 'B': -+ case 'h': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ int ttm = not_a_month; -+#if !ONLY_C_LOCALE -+ ios::iostate err = ios::goodbit; -+ f.get(is, nullptr, is, err, &tm, command, fmt+1); -+ if ((err & ios::failbit) == 0) -+ ttm = tm.tm_mon + 1; -+ is.setstate(err); -+#else -+ auto nm = detail::month_names(); -+ auto i = detail::scan_keyword(is, nm.first, nm.second) - nm.first; -+ if (!is.fail()) -+ ttm = i % 12 + 1; -+#endif -+ checked_set(m, ttm, not_a_month, is); -+ } -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'c': -+ if (command) -+ { -+ if (modified != CharT{'O'}) -+ { -+#if !ONLY_C_LOCALE -+ ios::iostate err = ios::goodbit; -+ f.get(is, nullptr, is, err, &tm, command, fmt+1); -+ if ((err & ios::failbit) == 0) -+ { -+ checked_set(Y, tm.tm_year + 1900, not_a_year, is); -+ checked_set(m, tm.tm_mon + 1, not_a_month, is); -+ checked_set(d, tm.tm_mday, not_a_day, is); -+ checked_set(H, tm.tm_hour, not_a_hour, is); -+ checked_set(M, tm.tm_min, not_a_minute, is); -+ checked_set(s, duration_cast(seconds{tm.tm_sec}), -+ not_a_second, is); -+ } -+ is.setstate(err); -+#else -+ // "%a %b %e %T %Y" -+ auto nm = detail::weekday_names(); -+ auto i = detail::scan_keyword(is, nm.first, nm.second) - nm.first; -+ checked_set(wd, static_cast(i % 7), not_a_weekday, is); -+ ws(is); -+ nm = detail::month_names(); -+ i = detail::scan_keyword(is, nm.first, nm.second) - nm.first; -+ checked_set(m, static_cast(i % 12 + 1), not_a_month, is); -+ ws(is); -+ int td = not_a_day; -+ read(is, rs{td, 1, 2}); -+ checked_set(d, td, not_a_day, is); -+ ws(is); -+ using dfs = detail::decimal_format_seconds; -+ CONSTDATA auto w = Duration::period::den == 1 ? 2 : 3 + dfs::width; -+ int tH; -+ int tM; -+ long double S{}; -+ read(is, ru{tH, 1, 2}, CharT{':'}, ru{tM, 1, 2}, -+ CharT{':'}, rld{S, 1, w}); -+ checked_set(H, tH, not_a_hour, is); -+ checked_set(M, tM, not_a_minute, is); -+ checked_set(s, round_i(duration{S}), -+ not_a_second, is); -+ ws(is); -+ int tY = not_a_year; -+ read(is, rs{tY, 1, 4u}); -+ checked_set(Y, tY, not_a_year, is); -+#endif -+ } -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'x': -+ if (command) -+ { -+ if (modified != CharT{'O'}) -+ { -+#if !ONLY_C_LOCALE -+ ios::iostate err = ios::goodbit; -+ f.get(is, nullptr, is, err, &tm, command, fmt+1); -+ if ((err & ios::failbit) == 0) -+ { -+ checked_set(Y, tm.tm_year + 1900, not_a_year, is); -+ checked_set(m, tm.tm_mon + 1, not_a_month, is); -+ checked_set(d, tm.tm_mday, not_a_day, is); -+ } -+ is.setstate(err); -+#else -+ // "%m/%d/%y" -+ int ty = not_a_2digit_year; -+ int tm = not_a_month; -+ int td = not_a_day; -+ read(is, ru{tm, 1, 2}, CharT{'/'}, ru{td, 1, 2}, CharT{'/'}, -+ rs{ty, 1, 2}); -+ checked_set(y, ty, not_a_2digit_year, is); -+ checked_set(m, tm, not_a_month, is); -+ checked_set(d, td, not_a_day, is); -+#endif -+ } -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'X': -+ if (command) -+ { -+ if (modified != CharT{'O'}) -+ { -+#if !ONLY_C_LOCALE -+ ios::iostate err = ios::goodbit; -+ f.get(is, nullptr, is, err, &tm, command, fmt+1); -+ if ((err & ios::failbit) == 0) -+ { -+ checked_set(H, tm.tm_hour, not_a_hour, is); -+ checked_set(M, tm.tm_min, not_a_minute, is); -+ checked_set(s, duration_cast(seconds{tm.tm_sec}), -+ not_a_second, is); -+ } -+ is.setstate(err); -+#else -+ // "%T" -+ using dfs = detail::decimal_format_seconds; -+ CONSTDATA auto w = Duration::period::den == 1 ? 2 : 3 + dfs::width; -+ int tH = not_a_hour; -+ int tM = not_a_minute; -+ long double S{}; -+ read(is, ru{tH, 1, 2}, CharT{':'}, ru{tM, 1, 2}, -+ CharT{':'}, rld{S, 1, w}); -+ checked_set(H, tH, not_a_hour, is); -+ checked_set(M, tM, not_a_minute, is); -+ checked_set(s, round_i(duration{S}), -+ not_a_second, is); -+#endif -+ } -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'C': -+ if (command) -+ { -+ int tC = not_a_century; -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+ { -+#endif -+ read(is, rs{tC, 1, width == -1 ? 2u : static_cast(width)}); -+#if !ONLY_C_LOCALE -+ } -+ else -+ { -+ ios::iostate err = ios::goodbit; -+ f.get(is, nullptr, is, err, &tm, command, fmt+1); -+ if ((err & ios::failbit) == 0) -+ { -+ auto tY = tm.tm_year + 1900; -+ tC = (tY >= 0 ? tY : tY-99) / 100; -+ } -+ is.setstate(err); -+ } -+#endif -+ checked_set(C, tC, not_a_century, is); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'D': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ int tn = not_a_month; -+ int td = not_a_day; -+ int ty = not_a_2digit_year; -+ read(is, ru{tn, 1, 2}, CharT{'\0'}, CharT{'/'}, CharT{'\0'}, -+ ru{td, 1, 2}, CharT{'\0'}, CharT{'/'}, CharT{'\0'}, -+ rs{ty, 1, 2}); -+ checked_set(y, ty, not_a_2digit_year, is); -+ checked_set(m, tn, not_a_month, is); -+ checked_set(d, td, not_a_day, is); -+ } -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'F': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ int tY = not_a_year; -+ int tn = not_a_month; -+ int td = not_a_day; -+ read(is, rs{tY, 1, width == -1 ? 4u : static_cast(width)}, -+ CharT{'-'}, ru{tn, 1, 2}, CharT{'-'}, ru{td, 1, 2}); -+ checked_set(Y, tY, not_a_year, is); -+ checked_set(m, tn, not_a_month, is); -+ checked_set(d, td, not_a_day, is); -+ } -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'd': -+ case 'e': -+ if (command) -+ { -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+#else -+ if (modified != CharT{'E'}) -+#endif -+ { -+ int td = not_a_day; -+ read(is, rs{td, 1, width == -1 ? 2u : static_cast(width)}); -+ checked_set(d, td, not_a_day, is); -+ } -+#if !ONLY_C_LOCALE -+ else if (modified == CharT{'O'}) -+ { -+ ios::iostate err = ios::goodbit; -+ f.get(is, nullptr, is, err, &tm, command, fmt+1); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ if ((err & ios::failbit) == 0) -+ checked_set(d, tm.tm_mday, not_a_day, is); -+ is.setstate(err); -+ } -+#endif -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'H': -+ if (command) -+ { -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+#else -+ if (modified != CharT{'E'}) -+#endif -+ { -+ int tH = not_a_hour; -+ read(is, ru{tH, 1, width == -1 ? 2u : static_cast(width)}); -+ checked_set(H, tH, not_a_hour, is); -+ } -+#if !ONLY_C_LOCALE -+ else if (modified == CharT{'O'}) -+ { -+ ios::iostate err = ios::goodbit; -+ f.get(is, nullptr, is, err, &tm, command, fmt+1); -+ if ((err & ios::failbit) == 0) -+ checked_set(H, tm.tm_hour, not_a_hour, is); -+ is.setstate(err); -+ } -+#endif -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'I': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ int tI = not_a_hour_12_value; -+ // reads in an hour into I, but most be in [1, 12] -+ read(is, rs{tI, 1, width == -1 ? 2u : static_cast(width)}); -+ if (!(1 <= tI && tI <= 12)) -+ is.setstate(ios::failbit); -+ checked_set(I, tI, not_a_hour_12_value, is); -+ } -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'j': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ int tj = not_a_doy; -+ read(is, ru{tj, 1, width == -1 ? 3u : static_cast(width)}); -+ checked_set(j, tj, not_a_doy, is); -+ } -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'M': -+ if (command) -+ { -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+#else -+ if (modified != CharT{'E'}) -+#endif -+ { -+ int tM = not_a_minute; -+ read(is, ru{tM, 1, width == -1 ? 2u : static_cast(width)}); -+ checked_set(M, tM, not_a_minute, is); -+ } -+#if !ONLY_C_LOCALE -+ else if (modified == CharT{'O'}) -+ { -+ ios::iostate err = ios::goodbit; -+ f.get(is, nullptr, is, err, &tm, command, fmt+1); -+ if ((err & ios::failbit) == 0) -+ checked_set(M, tm.tm_min, not_a_minute, is); -+ is.setstate(err); -+ } -+#endif -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'm': -+ if (command) -+ { -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+#else -+ if (modified != CharT{'E'}) -+#endif -+ { -+ int tn = not_a_month; -+ read(is, rs{tn, 1, width == -1 ? 2u : static_cast(width)}); -+ checked_set(m, tn, not_a_month, is); -+ } -+#if !ONLY_C_LOCALE -+ else if (modified == CharT{'O'}) -+ { -+ ios::iostate err = ios::goodbit; -+ f.get(is, nullptr, is, err, &tm, command, fmt+1); -+ if ((err & ios::failbit) == 0) -+ checked_set(m, tm.tm_mon + 1, not_a_month, is); -+ is.setstate(err); -+ } -+#endif -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'n': -+ case 't': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ // %n matches a single white space character -+ // %t matches 0 or 1 white space characters -+ auto ic = is.peek(); -+ if (Traits::eq_int_type(ic, Traits::eof())) -+ { -+ ios::iostate err = ios::eofbit; -+ if (*fmt == 'n') -+ err |= ios::failbit; -+ is.setstate(err); -+ break; -+ } -+ if (isspace(ic)) -+ { -+ (void)is.get(); -+ } -+ else if (*fmt == 'n') -+ is.setstate(ios::failbit); -+ } -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'p': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ int tp = not_a_ampm; -+#if !ONLY_C_LOCALE -+ tm = std::tm{}; -+ tm.tm_hour = 1; -+ ios::iostate err = ios::goodbit; -+ f.get(is, nullptr, is, err, &tm, command, fmt+1); -+ is.setstate(err); -+ if (tm.tm_hour == 1) -+ tp = 0; -+ else if (tm.tm_hour == 13) -+ tp = 1; -+ else -+ is.setstate(err); -+#else -+ auto nm = detail::ampm_names(); -+ auto i = detail::scan_keyword(is, nm.first, nm.second) - nm.first; -+ tp = static_cast(i); -+#endif -+ checked_set(p, tp, not_a_ampm, is); -+ } -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ -+ break; -+ case 'r': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+#if !ONLY_C_LOCALE -+ ios::iostate err = ios::goodbit; -+ f.get(is, nullptr, is, err, &tm, command, fmt+1); -+ if ((err & ios::failbit) == 0) -+ { -+ checked_set(H, tm.tm_hour, not_a_hour, is); -+ checked_set(M, tm.tm_min, not_a_hour, is); -+ checked_set(s, duration_cast(seconds{tm.tm_sec}), -+ not_a_second, is); -+ } -+ is.setstate(err); -+#else -+ // "%I:%M:%S %p" -+ using dfs = detail::decimal_format_seconds; -+ CONSTDATA auto w = Duration::period::den == 1 ? 2 : 3 + dfs::width; -+ long double S{}; -+ int tI = not_a_hour_12_value; -+ int tM = not_a_minute; -+ read(is, ru{tI, 1, 2}, CharT{':'}, ru{tM, 1, 2}, -+ CharT{':'}, rld{S, 1, w}); -+ checked_set(I, tI, not_a_hour_12_value, is); -+ checked_set(M, tM, not_a_minute, is); -+ checked_set(s, round_i(duration{S}), -+ not_a_second, is); -+ ws(is); -+ auto nm = detail::ampm_names(); -+ auto i = detail::scan_keyword(is, nm.first, nm.second) - nm.first; -+ checked_set(p, static_cast(i), not_a_ampm, is); -+#endif -+ } -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'R': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ int tH = not_a_hour; -+ int tM = not_a_minute; -+ read(is, ru{tH, 1, 2}, CharT{'\0'}, CharT{':'}, CharT{'\0'}, -+ ru{tM, 1, 2}, CharT{'\0'}); -+ checked_set(H, tH, not_a_hour, is); -+ checked_set(M, tM, not_a_minute, is); -+ } -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'S': -+ if (command) -+ { -+ #if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+#else -+ if (modified != CharT{'E'}) -+#endif -+ { -+ using dfs = detail::decimal_format_seconds; -+ CONSTDATA auto w = Duration::period::den == 1 ? 2 : 3 + dfs::width; -+ long double S{}; -+ read(is, rld{S, 1, width == -1 ? w : static_cast(width)}); -+ checked_set(s, round_i(duration{S}), -+ not_a_second, is); -+ } -+#if !ONLY_C_LOCALE -+ else if (modified == CharT{'O'}) -+ { -+ ios::iostate err = ios::goodbit; -+ f.get(is, nullptr, is, err, &tm, command, fmt+1); -+ if ((err & ios::failbit) == 0) -+ checked_set(s, duration_cast(seconds{tm.tm_sec}), -+ not_a_second, is); -+ is.setstate(err); -+ } -+#endif -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'T': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ using dfs = detail::decimal_format_seconds; -+ CONSTDATA auto w = Duration::period::den == 1 ? 2 : 3 + dfs::width; -+ int tH = not_a_hour; -+ int tM = not_a_minute; -+ long double S{}; -+ read(is, ru{tH, 1, 2}, CharT{':'}, ru{tM, 1, 2}, -+ CharT{':'}, rld{S, 1, w}); -+ checked_set(H, tH, not_a_hour, is); -+ checked_set(M, tM, not_a_minute, is); -+ checked_set(s, round_i(duration{S}), -+ not_a_second, is); -+ } -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'Y': -+ if (command) -+ { -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+#else -+ if (modified != CharT{'O'}) -+#endif -+ { -+ int tY = not_a_year; -+ read(is, rs{tY, 1, width == -1 ? 4u : static_cast(width)}); -+ checked_set(Y, tY, not_a_year, is); -+ } -+#if !ONLY_C_LOCALE -+ else if (modified == CharT{'E'}) -+ { -+ ios::iostate err = ios::goodbit; -+ f.get(is, nullptr, is, err, &tm, command, fmt+1); -+ if ((err & ios::failbit) == 0) -+ checked_set(Y, tm.tm_year + 1900, not_a_year, is); -+ is.setstate(err); -+ } -+#endif -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'y': -+ if (command) -+ { -+#if !ONLY_C_LOCALE -+ if (modified == CharT{}) -+#endif -+ { -+ int ty = not_a_2digit_year; -+ read(is, ru{ty, 1, width == -1 ? 2u : static_cast(width)}); -+ checked_set(y, ty, not_a_2digit_year, is); -+ } -+#if !ONLY_C_LOCALE -+ else -+ { -+ ios::iostate err = ios::goodbit; -+ f.get(is, nullptr, is, err, &tm, command, fmt+1); -+ if ((err & ios::failbit) == 0) -+ checked_set(Y, tm.tm_year + 1900, not_a_year, is); -+ is.setstate(err); -+ } -+#endif -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'g': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ int tg = not_a_2digit_year; -+ read(is, ru{tg, 1, width == -1 ? 2u : static_cast(width)}); -+ checked_set(g, tg, not_a_2digit_year, is); -+ } -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'G': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ int tG = not_a_year; -+ read(is, rs{tG, 1, width == -1 ? 4u : static_cast(width)}); -+ checked_set(G, tG, not_a_year, is); -+ } -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'U': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ int tU = not_a_week_num; -+ read(is, ru{tU, 1, width == -1 ? 2u : static_cast(width)}); -+ checked_set(U, tU, not_a_week_num, is); -+ } -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'V': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ int tV = not_a_week_num; -+ read(is, ru{tV, 1, width == -1 ? 2u : static_cast(width)}); -+ checked_set(V, tV, not_a_week_num, is); -+ } -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'W': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ int tW = not_a_week_num; -+ read(is, ru{tW, 1, width == -1 ? 2u : static_cast(width)}); -+ checked_set(W, tW, not_a_week_num, is); -+ } -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'E': -+ case 'O': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ modified = *fmt; -+ } -+ else -+ { -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ } -+ else -+ read(is, *fmt); -+ break; -+ case '%': -+ if (command) -+ { -+ if (modified == CharT{}) -+ read(is, *fmt); -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ command = fmt; -+ break; -+ case 'z': -+ if (command) -+ { -+ int tH, tM; -+ minutes toff = not_a_offset; -+ bool neg = false; -+ auto ic = is.peek(); -+ if (!Traits::eq_int_type(ic, Traits::eof())) -+ { -+ auto c = static_cast(Traits::to_char_type(ic)); -+ if (c == '-') -+ neg = true; -+ } -+ if (modified == CharT{}) -+ { -+ read(is, rs{tH, 2, 2}); -+ if (!is.fail()) -+ toff = hours{std::abs(tH)}; -+ if (is.good()) -+ { -+ ic = is.peek(); -+ if (!Traits::eq_int_type(ic, Traits::eof())) -+ { -+ auto c = static_cast(Traits::to_char_type(ic)); -+ if ('0' <= c && c <= '9') -+ { -+ read(is, ru{tM, 2, 2}); -+ if (!is.fail()) -+ toff += minutes{tM}; -+ } -+ } -+ } -+ } -+ else -+ { -+ read(is, rs{tH, 1, 2}); -+ if (!is.fail()) -+ toff = hours{std::abs(tH)}; -+ if (is.good()) -+ { -+ ic = is.peek(); -+ if (!Traits::eq_int_type(ic, Traits::eof())) -+ { -+ auto c = static_cast(Traits::to_char_type(ic)); -+ if (c == ':') -+ { -+ (void)is.get(); -+ read(is, ru{tM, 2, 2}); -+ if (!is.fail()) -+ toff += minutes{tM}; -+ } -+ } -+ } -+ } -+ if (neg) -+ toff = -toff; -+ checked_set(temp_offset, toff, not_a_offset, is); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ case 'Z': -+ if (command) -+ { -+ if (modified == CharT{}) -+ { -+ std::basic_string buf; -+ while (is.rdstate() == std::ios::goodbit) -+ { -+ auto i = is.rdbuf()->sgetc(); -+ if (Traits::eq_int_type(i, Traits::eof())) -+ { -+ is.setstate(ios::eofbit); -+ break; -+ } -+ auto wc = Traits::to_char_type(i); -+ auto c = static_cast(wc); -+ // is c a valid time zone name or abbreviation character? -+ if (!(CharT{1} < wc && wc < CharT{127}) || !(isalnum(c) || -+ c == '_' || c == '/' || c == '-' || c == '+')) -+ break; -+ buf.push_back(c); -+ is.rdbuf()->sbumpc(); -+ } -+ if (buf.empty()) -+ is.setstate(ios::failbit); -+ checked_set(temp_abbrev, buf, {}, is); -+ } -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ else -+ read(is, *fmt); -+ break; -+ default: -+ if (command) -+ { -+ if (width == -1 && modified == CharT{} && '0' <= *fmt && *fmt <= '9') -+ { -+ width = static_cast(*fmt) - '0'; -+ while ('0' <= fmt[1] && fmt[1] <= '9') -+ width = 10*width + static_cast(*++fmt) - '0'; -+ } -+ else -+ { -+ if (modified == CharT{}) -+ read(is, CharT{'%'}, width, *fmt); -+ else -+ read(is, CharT{'%'}, width, modified, *fmt); -+ command = nullptr; -+ width = -1; -+ modified = CharT{}; -+ } -+ } -+ else // !command -+ { -+ if (isspace(static_cast(*fmt))) -+ { -+ // space matches 0 or more white space characters -+ if (is.good()) -+ ws(is); -+ } -+ else -+ read(is, *fmt); -+ } -+ break; -+ } -+ } -+ // is.fail() || *fmt == CharT{} -+ if (is.rdstate() == ios::goodbit && command) -+ { -+ if (modified == CharT{}) -+ read(is, CharT{'%'}, width); -+ else -+ read(is, CharT{'%'}, width, modified); -+ } -+ if (!is.fail()) -+ { -+ if (y != not_a_2digit_year) -+ { -+ // Convert y and an optional C to Y -+ if (!(0 <= y && y <= 99)) -+ goto broken; -+ if (C == not_a_century) -+ { -+ if (Y == not_a_year) -+ { -+ if (y >= 69) -+ C = 19; -+ else -+ C = 20; -+ } -+ else -+ { -+ C = (Y >= 0 ? Y : Y-100) / 100; -+ } -+ } -+ int tY; -+ if (C >= 0) -+ tY = 100*C + y; -+ else -+ tY = 100*(C+1) - (y == 0 ? 100 : y); -+ if (Y != not_a_year && Y != tY) -+ goto broken; -+ Y = tY; -+ } -+ if (g != not_a_2digit_year) -+ { -+ // Convert g and an optional C to G -+ if (!(0 <= g && g <= 99)) -+ goto broken; -+ if (C == not_a_century) -+ { -+ if (G == not_a_year) -+ { -+ if (g >= 69) -+ C = 19; -+ else -+ C = 20; -+ } -+ else -+ { -+ C = (G >= 0 ? G : G-100) / 100; -+ } -+ } -+ int tG; -+ if (C >= 0) -+ tG = 100*C + g; -+ else -+ tG = 100*(C+1) - (g == 0 ? 100 : g); -+ if (G != not_a_year && G != tG) -+ goto broken; -+ G = tG; -+ } -+ if (Y < static_cast(year::min()) || Y > static_cast(year::max())) -+ Y = not_a_year; -+ bool computed = false; -+ if (G != not_a_year && V != not_a_week_num && wd != not_a_weekday) -+ { -+ year_month_day ymd_trial = sys_days(year{G-1}/December/Thursday[last]) + -+ (Monday-Thursday) + weeks{V-1} + -+ (weekday{static_cast(wd)}-Monday); -+ if (Y == not_a_year) -+ Y = static_cast(ymd_trial.year()); -+ else if (year{Y} != ymd_trial.year()) -+ goto broken; -+ if (m == not_a_month) -+ m = static_cast(static_cast(ymd_trial.month())); -+ else if (month(static_cast(m)) != ymd_trial.month()) -+ goto broken; -+ if (d == not_a_day) -+ d = static_cast(static_cast(ymd_trial.day())); -+ else if (day(static_cast(d)) != ymd_trial.day()) -+ goto broken; -+ computed = true; -+ } -+ if (Y != not_a_year && U != not_a_week_num && wd != not_a_weekday) -+ { -+ year_month_day ymd_trial = sys_days(year{Y}/January/Sunday[1]) + -+ weeks{U-1} + -+ (weekday{static_cast(wd)} - Sunday); -+ if (Y == not_a_year) -+ Y = static_cast(ymd_trial.year()); -+ else if (year{Y} != ymd_trial.year()) -+ goto broken; -+ if (m == not_a_month) -+ m = static_cast(static_cast(ymd_trial.month())); -+ else if (month(static_cast(m)) != ymd_trial.month()) -+ goto broken; -+ if (d == not_a_day) -+ d = static_cast(static_cast(ymd_trial.day())); -+ else if (day(static_cast(d)) != ymd_trial.day()) -+ goto broken; -+ computed = true; -+ } -+ if (Y != not_a_year && W != not_a_week_num && wd != not_a_weekday) -+ { -+ year_month_day ymd_trial = sys_days(year{Y}/January/Monday[1]) + -+ weeks{W-1} + -+ (weekday{static_cast(wd)} - Monday); -+ if (Y == not_a_year) -+ Y = static_cast(ymd_trial.year()); -+ else if (year{Y} != ymd_trial.year()) -+ goto broken; -+ if (m == not_a_month) -+ m = static_cast(static_cast(ymd_trial.month())); -+ else if (month(static_cast(m)) != ymd_trial.month()) -+ goto broken; -+ if (d == not_a_day) -+ d = static_cast(static_cast(ymd_trial.day())); -+ else if (day(static_cast(d)) != ymd_trial.day()) -+ goto broken; -+ computed = true; -+ } -+ if (j != not_a_doy && Y != not_a_year) -+ { -+ auto ymd_trial = year_month_day{local_days(year{Y}/1/1) + days{j-1}}; -+ if (m == not_a_month) -+ m = static_cast(static_cast(ymd_trial.month())); -+ else if (month(static_cast(m)) != ymd_trial.month()) -+ goto broken; -+ if (d == not_a_day) -+ d = static_cast(static_cast(ymd_trial.day())); -+ else if (day(static_cast(d)) != ymd_trial.day()) -+ goto broken; -+ j = not_a_doy; -+ } -+ auto ymd = year{Y}/m/d; -+ if (ymd.ok()) -+ { -+ if (wd == not_a_weekday) -+ wd = static_cast((weekday(sys_days(ymd)) - Sunday).count()); -+ else if (wd != static_cast((weekday(sys_days(ymd)) - Sunday).count())) -+ goto broken; -+ if (!computed) -+ { -+ if (G != not_a_year || V != not_a_week_num) -+ { -+ sys_days sd = ymd; -+ auto G_trial = year_month_day{sd + days{3}}.year(); -+ auto start = sys_days((G_trial - years{1})/December/Thursday[last]) + -+ (Monday - Thursday); -+ if (sd < start) -+ { -+ --G_trial; -+ if (V != not_a_week_num) -+ start = sys_days((G_trial - years{1})/December/Thursday[last]) -+ + (Monday - Thursday); -+ } -+ if (G != not_a_year && G != static_cast(G_trial)) -+ goto broken; -+ if (V != not_a_week_num) -+ { -+ auto V_trial = duration_cast(sd - start).count() + 1; -+ if (V != V_trial) -+ goto broken; -+ } -+ } -+ if (U != not_a_week_num) -+ { -+ auto start = sys_days(Sunday[1]/January/ymd.year()); -+ auto U_trial = floor(sys_days(ymd) - start).count() + 1; -+ if (U != U_trial) -+ goto broken; -+ } -+ if (W != not_a_week_num) -+ { -+ auto start = sys_days(Monday[1]/January/ymd.year()); -+ auto W_trial = floor(sys_days(ymd) - start).count() + 1; -+ if (W != W_trial) -+ goto broken; -+ } -+ } -+ } -+ fds.ymd = ymd; -+ if (I != not_a_hour_12_value) -+ { -+ if (!(1 <= I && I <= 12)) -+ goto broken; -+ if (p != not_a_ampm) -+ { -+ // p is in [0, 1] == [AM, PM] -+ // Store trial H in I -+ if (I == 12) -+ --p; -+ I += p*12; -+ // Either set H from I or make sure H and I are consistent -+ if (H == not_a_hour) -+ H = I; -+ else if (I != H) -+ goto broken; -+ } -+ else // p == not_a_ampm -+ { -+ // if H, make sure H and I could be consistent -+ if (H != not_a_hour) -+ { -+ if (I == 12) -+ { -+ if (H != 0 && H != 12) -+ goto broken; -+ } -+ else if (!(I == H || I == H+12)) -+ { -+ goto broken; -+ } -+ } -+ else // I is ambiguous, AM or PM? -+ goto broken; -+ } -+ } -+ if (H != not_a_hour) -+ { -+ fds.has_tod = true; -+ fds.tod = hh_mm_ss{hours{H}}; -+ } -+ if (M != not_a_minute) -+ { -+ fds.has_tod = true; -+ fds.tod.m_ = minutes{M}; -+ } -+ if (s != not_a_second) -+ { -+ fds.has_tod = true; -+ fds.tod.s_ = detail::decimal_format_seconds{s}; -+ } -+ if (j != not_a_doy) -+ { -+ fds.has_tod = true; -+ fds.tod.h_ += hours{days{j}}; -+ } -+ if (wd != not_a_weekday) -+ fds.wd = weekday{static_cast(wd)}; -+ if (abbrev != nullptr) -+ *abbrev = std::move(temp_abbrev); -+ if (offset != nullptr && temp_offset != not_a_offset) -+ *offset = temp_offset; -+ } -+ return is; -+ } -+broken: -+ is.setstate(ios::failbit); -+ return is; -+} -+ -+template > -+std::basic_istream& -+from_stream(std::basic_istream& is, const CharT* fmt, year& y, -+ std::basic_string* abbrev = nullptr, -+ std::chrono::minutes* offset = nullptr) -+{ -+ using CT = std::chrono::seconds; -+ fields fds{}; -+ date::from_stream(is, fmt, fds, abbrev, offset); -+ if (!fds.ymd.year().ok()) -+ is.setstate(std::ios::failbit); -+ if (!is.fail()) -+ y = fds.ymd.year(); -+ return is; -+} -+ -+template > -+std::basic_istream& -+from_stream(std::basic_istream& is, const CharT* fmt, month& m, -+ std::basic_string* abbrev = nullptr, -+ std::chrono::minutes* offset = nullptr) -+{ -+ using CT = std::chrono::seconds; -+ fields fds{}; -+ date::from_stream(is, fmt, fds, abbrev, offset); -+ if (!fds.ymd.month().ok()) -+ is.setstate(std::ios::failbit); -+ if (!is.fail()) -+ m = fds.ymd.month(); -+ return is; -+} -+ -+template > -+std::basic_istream& -+from_stream(std::basic_istream& is, const CharT* fmt, day& d, -+ std::basic_string* abbrev = nullptr, -+ std::chrono::minutes* offset = nullptr) -+{ -+ using CT = std::chrono::seconds; -+ fields fds{}; -+ date::from_stream(is, fmt, fds, abbrev, offset); -+ if (!fds.ymd.day().ok()) -+ is.setstate(std::ios::failbit); -+ if (!is.fail()) -+ d = fds.ymd.day(); -+ return is; -+} -+ -+template > -+std::basic_istream& -+from_stream(std::basic_istream& is, const CharT* fmt, weekday& wd, -+ std::basic_string* abbrev = nullptr, -+ std::chrono::minutes* offset = nullptr) -+{ -+ using CT = std::chrono::seconds; -+ fields fds{}; -+ date::from_stream(is, fmt, fds, abbrev, offset); -+ if (!fds.wd.ok()) -+ is.setstate(std::ios::failbit); -+ if (!is.fail()) -+ wd = fds.wd; -+ return is; -+} -+ -+template > -+std::basic_istream& -+from_stream(std::basic_istream& is, const CharT* fmt, year_month& ym, -+ std::basic_string* abbrev = nullptr, -+ std::chrono::minutes* offset = nullptr) -+{ -+ using CT = std::chrono::seconds; -+ fields fds{}; -+ date::from_stream(is, fmt, fds, abbrev, offset); -+ if (!fds.ymd.month().ok()) -+ is.setstate(std::ios::failbit); -+ if (!is.fail()) -+ ym = fds.ymd.year()/fds.ymd.month(); -+ return is; -+} -+ -+template > -+std::basic_istream& -+from_stream(std::basic_istream& is, const CharT* fmt, month_day& md, -+ std::basic_string* abbrev = nullptr, -+ std::chrono::minutes* offset = nullptr) -+{ -+ using CT = std::chrono::seconds; -+ fields fds{}; -+ date::from_stream(is, fmt, fds, abbrev, offset); -+ if (!fds.ymd.month().ok() || !fds.ymd.day().ok()) -+ is.setstate(std::ios::failbit); -+ if (!is.fail()) -+ md = fds.ymd.month()/fds.ymd.day(); -+ return is; -+} -+ -+template > -+std::basic_istream& -+from_stream(std::basic_istream& is, const CharT* fmt, -+ year_month_day& ymd, std::basic_string* abbrev = nullptr, -+ std::chrono::minutes* offset = nullptr) -+{ -+ using CT = std::chrono::seconds; -+ fields fds{}; -+ date::from_stream(is, fmt, fds, abbrev, offset); -+ if (!fds.ymd.ok()) -+ is.setstate(std::ios::failbit); -+ if (!is.fail()) -+ ymd = fds.ymd; -+ return is; -+} -+ -+template > -+std::basic_istream& -+from_stream(std::basic_istream& is, const CharT* fmt, -+ sys_time& tp, std::basic_string* abbrev = nullptr, -+ std::chrono::minutes* offset = nullptr) -+{ -+ using CT = typename std::common_type::type; -+ using detail::round_i; -+ std::chrono::minutes offset_local{}; -+ auto offptr = offset ? offset : &offset_local; -+ fields fds{}; -+ fds.has_tod = true; -+ date::from_stream(is, fmt, fds, abbrev, offptr); -+ if (!fds.ymd.ok() || !fds.tod.in_conventional_range()) -+ is.setstate(std::ios::failbit); -+ if (!is.fail()) -+ tp = round_i(sys_days(fds.ymd) - *offptr + fds.tod.to_duration()); -+ return is; -+} -+ -+template > -+std::basic_istream& -+from_stream(std::basic_istream& is, const CharT* fmt, -+ local_time& tp, std::basic_string* abbrev = nullptr, -+ std::chrono::minutes* offset = nullptr) -+{ -+ using CT = typename std::common_type::type; -+ using detail::round_i; -+ fields fds{}; -+ fds.has_tod = true; -+ date::from_stream(is, fmt, fds, abbrev, offset); -+ if (!fds.ymd.ok() || !fds.tod.in_conventional_range()) -+ is.setstate(std::ios::failbit); -+ if (!is.fail()) -+ tp = round_i(local_seconds{local_days(fds.ymd)} + fds.tod.to_duration()); -+ return is; -+} -+ -+template > -+std::basic_istream& -+from_stream(std::basic_istream& is, const CharT* fmt, -+ std::chrono::duration& d, -+ std::basic_string* abbrev = nullptr, -+ std::chrono::minutes* offset = nullptr) -+{ -+ using Duration = std::chrono::duration; -+ using CT = typename std::common_type::type; -+ using detail::round_i; -+ fields fds{}; -+ date::from_stream(is, fmt, fds, abbrev, offset); -+ if (!fds.has_tod) -+ is.setstate(std::ios::failbit); -+ if (!is.fail()) -+ d = round_i(fds.tod.to_duration()); -+ return is; -+} -+ -+template , -+ class Alloc = std::allocator> -+struct parse_manip -+{ -+ const std::basic_string format_; -+ Parsable& tp_; -+ std::basic_string* abbrev_; -+ std::chrono::minutes* offset_; -+ -+public: -+ parse_manip(std::basic_string format, Parsable& tp, -+ std::basic_string* abbrev = nullptr, -+ std::chrono::minutes* offset = nullptr) -+ : format_(std::move(format)) -+ , tp_(tp) -+ , abbrev_(abbrev) -+ , offset_(offset) -+ {} -+ -+#if HAS_STRING_VIEW -+ parse_manip(const CharT* format, Parsable& tp, -+ std::basic_string* abbrev = nullptr, -+ std::chrono::minutes* offset = nullptr) -+ : format_(format) -+ , tp_(tp) -+ , abbrev_(abbrev) -+ , offset_(offset) -+ {} -+ -+ parse_manip(std::basic_string_view format, Parsable& tp, -+ std::basic_string* abbrev = nullptr, -+ std::chrono::minutes* offset = nullptr) -+ : format_(format) -+ , tp_(tp) -+ , abbrev_(abbrev) -+ , offset_(offset) -+ {} -+#endif // HAS_STRING_VIEW -+}; -+ -+template -+std::basic_istream& -+operator>>(std::basic_istream& is, -+ const parse_manip& x) -+{ -+ return date::from_stream(is, x.format_.c_str(), x.tp_, x.abbrev_, x.offset_); -+} -+ -+template -+inline -+auto -+parse(const std::basic_string& format, Parsable& tp) -+ -> decltype(date::from_stream(std::declval&>(), -+ format.c_str(), tp), -+ parse_manip{format, tp}) -+{ -+ return {format, tp}; -+} -+ -+template -+inline -+auto -+parse(const std::basic_string& format, Parsable& tp, -+ std::basic_string& abbrev) -+ -> decltype(date::from_stream(std::declval&>(), -+ format.c_str(), tp, &abbrev), -+ parse_manip{format, tp, &abbrev}) -+{ -+ return {format, tp, &abbrev}; -+} -+ -+template -+inline -+auto -+parse(const std::basic_string& format, Parsable& tp, -+ std::chrono::minutes& offset) -+ -> decltype(date::from_stream(std::declval&>(), -+ format.c_str(), tp, -+ std::declval*>(), -+ &offset), -+ parse_manip{format, tp, nullptr, &offset}) -+{ -+ return {format, tp, nullptr, &offset}; -+} -+ -+template -+inline -+auto -+parse(const std::basic_string& format, Parsable& tp, -+ std::basic_string& abbrev, std::chrono::minutes& offset) -+ -> decltype(date::from_stream(std::declval&>(), -+ format.c_str(), tp, &abbrev, &offset), -+ parse_manip{format, tp, &abbrev, &offset}) -+{ -+ return {format, tp, &abbrev, &offset}; -+} -+ -+// const CharT* formats -+ -+template -+inline -+auto -+parse(const CharT* format, Parsable& tp) -+ -> decltype(date::from_stream(std::declval&>(), format, tp), -+ parse_manip{format, tp}) -+{ -+ return {format, tp}; -+} -+ -+template -+inline -+auto -+parse(const CharT* format, Parsable& tp, std::basic_string& abbrev) -+ -> decltype(date::from_stream(std::declval&>(), format, -+ tp, &abbrev), -+ parse_manip{format, tp, &abbrev}) -+{ -+ return {format, tp, &abbrev}; -+} -+ -+template -+inline -+auto -+parse(const CharT* format, Parsable& tp, std::chrono::minutes& offset) -+ -> decltype(date::from_stream(std::declval&>(), format, -+ tp, std::declval*>(), &offset), -+ parse_manip{format, tp, nullptr, &offset}) -+{ -+ return {format, tp, nullptr, &offset}; -+} -+ -+template -+inline -+auto -+parse(const CharT* format, Parsable& tp, -+ std::basic_string& abbrev, std::chrono::minutes& offset) -+ -> decltype(date::from_stream(std::declval&>(), format, -+ tp, &abbrev, &offset), -+ parse_manip{format, tp, &abbrev, &offset}) -+{ -+ return {format, tp, &abbrev, &offset}; -+} -+ -+// duration streaming -+ -+template -+inline -+std::basic_ostream& -+operator<<(std::basic_ostream& os, -+ const std::chrono::duration& d) -+{ -+ return os << detail::make_string::from(d.count()) + -+ detail::get_units(typename Period::type{}); -+} -+ -+} // namespace date -+ -+#ifdef _MSC_VER -+# pragma warning(pop) -+#endif -+ -+#ifdef __GNUC__ -+# pragma GCC diagnostic pop -+#endif -+ -+#endif // DATE_H -diff --git a/plugins/in_coredump/CoredumpHandler.cpp b/plugins/in_coredump/CoredumpHandler.cpp -index 3f5e0a3..9a865aa 100644 ---- a/plugins/in_coredump/CoredumpHandler.cpp -+++ b/plugins/in_coredump/CoredumpHandler.cpp -@@ -227,14 +227,13 @@ int CoredumpHandler::onCollect(struct flb_input_instance *ins, struct flb_config - int i; - - ctx->buf_start = 0; -- ssize_t nRead = read(ctx->fd, ctx->buf, sizeof(ctx->buf) - 1); -- if (nRead <= 0) { -+ ctx->buf_len = read(ctx->fd, ctx->buf, sizeof(ctx->buf) - 1); -+ if (ctx->buf_len <= 0) { - PLUGIN_ERROR("Failed to read data"); - flb_input_collector_pause(ctx->coll_fd, ctx->ins); - flb_engine_exit(config); - return -1; + plugins/in_crashinfo/CrashinfoHandler.cpp | 1 - + plugins/out_crashinfo/CrashinfoHandler.cpp | 1 - + 2 files changed, 2 deletions(-) + +diff --git a/plugins/in_crashinfo/CrashinfoHandler.cpp b/plugins/in_crashinfo/CrashinfoHandler.cpp +index b05e84d..b1698bf 100644 +--- a/plugins/in_crashinfo/CrashinfoHandler.cpp ++++ b/plugins/in_crashinfo/CrashinfoHandler.cpp +@@ -137,7 +137,6 @@ int InCrashinfoHandler::onInit(struct flb_input_instance *ins, struct flb_config + PLUGIN_INFO("Work_Dir : %s", m_workDir.c_str()); + if (!File::createDir(m_workDir)) { + PLUGIN_ERROR("Failed to create Dir: %s", m_workDir.c_str()); +- return -1; } -- ctx->buf_len = nRead; - ctx->buf[ctx->buf_len] = '\0'; - - PLUGIN_INFO("Catch the new coredump event"); -@@ -244,14 +243,17 @@ int CoredumpHandler::onCollect(struct flb_input_instance *ins, struct flb_config - msgpack_packer_init(&mp_pck, &mp_sbuf, msgpack_sbuffer_write); - - for (; ctx->buf_start + EVENT_SIZE < ctx->buf_len; ctx->buf_start += EVENT_SIZE + event->len) { -- PLUGIN_DEBUG("while loop: buf_start=%u, buf_len=%u", ctx->buf_start, ctx->buf_len); -- event=(struct inotify_event*) &ctx->buf[ctx->buf_start]; -+ PLUGIN_DEBUG("while loop: buf_start=%d, buf_len=%d", ctx->buf_start, ctx->buf_len); -+ event=(struct inotify_event*) (ctx->buf+ctx->buf_start); - - if (event->len == 0) { - PLUGIN_ERROR("Event length is 0"); - continue; - } -- -+ if (event->len > ctx->buf_len - ctx->buf_start - EVENT_SIZE) { -+ PLUGIN_ERROR("Too long event : %u (start : %d, len : %d)", event->len, ctx->buf_start, ctx->buf_len); -+ break; -+ } - if (!(event->mask & IN_CREATE)) { - PLUGIN_ERROR("Not create event : %s", event->name); - continue; -@@ -297,12 +299,12 @@ int CoredumpHandler::onCollect(struct flb_input_instance *ins, struct flb_config - if ((access("/run/systemd/journal/socket", F_OK) == 0)) { - // For consistency, change the crash report path to /tmp. -- sprintf(crashreport, "%s/%s-crashreport.txt", "/tmp", event->name); -+ snprintf(crashreport, sizeof(crashreport), "%s/%s-crashreport.txt", "/tmp", event->name); - createCrashreport(ctx->crashreport_script, event->name, crashreport); - } else { - string filename = event->name; - size_t extPos = filename.find_last_of('.'); -- sprintf(crashreport, "/tmp/%s-crashreport.txt", filename.substr(0, extPos).c_str()); -+ snprintf(crashreport, sizeof(crashreport), "/tmp/%s-crashreport.txt", filename.substr(0, extPos).c_str()); - } - - if (access(crashreport, F_OK) != 0) { -@@ -520,9 +522,9 @@ int CoredumpHandler::parseCoredumpComm(const char *full, char *comm, char *pid, - PLUGIN_DEBUG("val : (%s)", val); - - if (strstr(key, "pid") != NULL) -- strcpy(pid, val); -+ snprintf(pid, STR_LEN, "%s", val); - if (strstr(key, "exe") != NULL) -- strcpy(exe, val); -+ snprintf(exe, STR_LEN, "%s", val); - } - free(val); - } -@@ -542,7 +544,7 @@ int CoredumpHandler::parseCoredumpComm(const char *full, char *comm, char *pid, - { - PLUGIN_DEBUG("ptr : (%s)", ptr); - if (strcmp(ptr, "usr") != 0 && strcmp(ptr, "bin") != 0 && strcmp(ptr, "sbin") != 0) { -- strcpy(comm, ptr); -+ snprintf(comm, STR_LEN, "%s", ptr); - break; - } - ptr = strtok(NULL, "/"); -@@ -637,7 +639,7 @@ int CoredumpHandler::createCrashreport(const char *script, const char *corefile, - // command : webos_capture.py --coredump corefile crashreport - - char command[STR_LEN]; -- sprintf(command, "%s --coredump \'%s\' %s", script, corefile, crashreport); -+ snprintf(command, sizeof(command), "%s --coredump \'%s\' %s", script, corefile, crashreport); - PLUGIN_INFO("command : %s", command); - - int ret = system(command); -diff --git a/plugins/in_coredump/CoredumpHandler.h b/plugins/in_coredump/CoredumpHandler.h -index 20ee1ce..24b831d 100644 ---- a/plugins/in_coredump/CoredumpHandler.h -+++ b/plugins/in_coredump/CoredumpHandler.h -@@ -35,8 +35,8 @@ using namespace std; - struct flb_in_coredump_config { - int fd; // coredump file descriptor - int coll_fd; // collector fd -- unsigned int buf_len; // read buffer length -- unsigned int buf_start; // read buffer length -+ int buf_len; // read buffer length -+ int buf_start; // read buffer length - char buf[BUF_LEN]; // read buffer: 16Kb max + pval = flb_input_get_property(PROPS_MAX_ENTRIES, ins); +diff --git a/plugins/out_crashinfo/CrashinfoHandler.cpp b/plugins/out_crashinfo/CrashinfoHandler.cpp +index 989cd5a..fe4d960 100644 +--- a/plugins/out_crashinfo/CrashinfoHandler.cpp ++++ b/plugins/out_crashinfo/CrashinfoHandler.cpp +@@ -81,7 +81,6 @@ int OutCrashinfoHandler::onInit(struct flb_output_instance *ins, struct flb_conf + PLUGIN_INFO("Work_Dir : %s", m_workDir.c_str()); + if (!File::createDir(m_workDir)) { + PLUGIN_ERROR("Failed to create Dir: %s", m_workDir.c_str()); +- return -1; + } - // watch descriptor + tmp = flb_output_get_property(PROPS_MAX_ENTRIES, ins); -- 2.25.1 From 7d61f20ad06966e4df17a200d19ce767cf9e6f92 Mon Sep 17 00:00:00 2001 From: "taeyoung.hong" Date: Sun, 4 Sep 2022 17:08:55 +0900 Subject: [PATCH 0520/2022] ose: enact-framework=v4.5.0-r20 enact-sandstone=v2.5.2-r10 enact-dev-native=v5.0.1-r12 com.example.app.iotivity=r7 com.webos.app.{camera=10-r1 enactbrowser=58-r17 home=22 imageviewer=15-r1 notification=13-r2 settings=21 videocall=4 videoplayer=12-r1 volume=11-r2} :Release Notes: Update Enact Version to 4.5 :Detailed Notes: enact-framework 4.0.4..4.5.0 5240b1ac 4.5.0 release 8f506ec3 Fix docs for 'noAutoDismiss' (#128) 6c4f6f37 Update .travis.yml to make prefer-offline config value false (#127) deaddb15 WRO-2821: Copy `ui/GridListImageItem` into internal directory (#119) 01e5c42c WRO-4771: Fixed isomorphic test for moonstone develop (#125) ae35255f WRO-608: Replace 'className' config to css for ui/MarqueeDecorator (#117) 800ac613 fix import error (#122) 0b89b680 WRO-4551: Update the node version of travis (#124) 8781809c Create PULL_REQUEST_TEMPLATE.md 7ba567ac WRO-3723: Moonstone - merge branch feature/react18 in develop. (#120) 20c35932 Modify handlePopupHide and handlePopupShow to take into account even when ev.currentTarget does not exist (#111) d305e03e WRN-10988: Merge react-testing branch to develop (#102) a2d7b45d Update .travis.yml (#112) 744a980f WRN-842: Add webos-voice props to VirtualList (#109) b1e89c0c WRN-18677: Fix ui-test to use async test (#110) 52fe5f56 changed image service (#108) e31fcd17 WRN-13647: Fix lint warnings (#105) 99bae610 update license (#103) 1844e254 WRN-6748: Fixed Cross-Platform Enact iOS: The placeholder of the input is biased downward (#100) 50b263e9 WRN-12919: Update dependencies (#101) a2b0de65 Revert "* WRN-796: Find a way to test these reliably over network (#98)" 8ca87fd5 * WRN-796: Find a way to test these reliably over network (#98) enact-sandstone 2.1.2..2.5.2 f3df3b01 (tag: 2.5.2) 2.5.2 release 589ca66f Version value updating 41538670 Upacate a change log for 2.5.2 DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 32feb1a7 Update dependencies DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 5ea89254 WRO-3625: Changed Slider to use usePublicClassNames (#1295) 1b3fff29 WRO-9768: Add scaled Item sample for Marquee qa-sampler (#1296) 8f366b6a WRO-9819: [VideoPlayer] Back button is not visible (#1297) 2d6278f6 Merge branch 'master' into develop cdde7503 (tag: 2.5.1) 2.5.1 release 293da1f3 Version value updating 6ac582af Update a change log for 2.5.1 Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 4618f11c Update dependencies Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) f688a4ed Add sandstone icon `r2rappcall` (#1294) e7ae4c9a WRO-615: Add new nested scroller sample in qa-sampler. (#1291) 2482d679 WRO-9081: Fixed `FixedPopupPanles` and `PopupTabLayout` to restore scroll position when going back to the previous panel by left key (#1292) 076ae826 WRO-679: Remove aria-hidden in Input component (#1289) 904daf81 WRO-7727: Sync TC number in ui Test(QWT>QWTC) (#1287) 871f5a1e WRO-6381: Fix security vulnerabilities (#1283) 037b0a81 WRO-4920: Ignore scrollThumb and scrollbarPlaceholder when focus persist and restore (#1282) 8161a035 Merge branch 'master' into develop 076a928c (tag: 2.5.0) 2.5.0 release cf2fa9ce Version value updating 20a52cd9 Update a change log for 2.5.0 Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 46266d97 Update dependencies Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 508f716a WRO-8225: Fixed scoll by hover to work properly when `scrollMode` is translate (#1281) 1127569f WRO-5944: Update docs of the Input/InputPopup `value`prop (#1280) 1d8fd948 WRO-7341: Fixed qa-a11y panel sample to restore focus properly (#1279) 6143db29 WRO-7726: Sync TC number in ss Test(QWT>QWTC) (#1278) cc78b7ca WRO-2545: Fixed ss test Sandstone-View outer div overflow property value to hidden (#1277) df0e6e59 WRO-745: Add spotlightId prop description for Panel and VirtualList (#1272) 0c2f0c56 WRO-7313: Update sample's index.js with the new selective hydrateRoot pattern (#1268) e9bd51e1 Merge branch 'master' into develop 6efae363 (tag: 2.5.0-rc.2) 2.5.0-rc.2 release 2d367fe7 Version value updating 9e1f647e Update a change log for 2.5.0-rc.2 Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) d99808fb Update dependencies Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) adf26727 WRO-7722: Fix Alert override color to show Progressbar properly (#1274) 60f5fc86 WRO-7722: Fix Alert override color to show Progressbar properly (#1274) 57cfad7b WRO-7395: Add locale to the global option in sampler(bn,hi,te) (#1270) 0f1a6602 WRO-567: Added missing screenshot tests for focused state (#1265) 702042c3 WRO-7201: Fixed FixedPopupPanels, PopupTabLayout, and TabLayout onKeyDown handlers to check whether event target is INPUT (#1271) 09d663e8 WRO-2688: Prevent to webfont loading when the webos font is installed (#1269) f5b2da2b WRO-6848: Provide `stopPropagation` method in `onBack` event payload of `WizardPanels` (#1267) b7ac7da4 WRO-6793: Add delay before long Press in ui-test(QWT-2389). (#1266) 696d7ee5 Fix docs for 'noAutoDismiss' (#1264) 76919f18 Merge branch 'master' into develop 979fd55f (tag: 2.5.0-rc.1, origin/test/test_gitpush) 2.5.0-rc.1 release f229cfee Version value updating 0b952e0a Update a change log Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 407f10d5 Update dependencies Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 69397eca WRO-6262: Fixed editable scroller to select item by long press (#1262) 8899ed5c WRO-4784: Added A11y feature for editable scroller (#1263) dd1f8baa WRO-4909: Updated JSDoc for Button's minWidth (#1251) 7ec75375 WRO-4785: Update A11y UX (Picker / ScrollbarTrack) (#1259) ebdd1855 WRO-4505: Replaced React.findDomNode in Sandstone components (#1239) c6996b7b WRO-5933: Fix ui test fail on jenkins(VirtualGridList) (#1261) ce890f0a Fixed scroller to position focused item into view when the window is resized (#1246) 9ebafe11 WRO-5036: Tab does not collapse when enters a menu. (#1258) 814bbb47 Merge branch 'master' into develop af13a6cd (tag: 2.5.0-beta.1) 2.5.0-beta.1 release 5ca67d1f Version value updating 42ea4c37 Update a change log for 2.5.0-beta.1 Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 59529713 Update dependencies Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 4a687670 WRO-396: Restructure color variables for predefined skins (#1257) 8760f150 WRO-3290: Fixed WizardPanels to support hiding subtitle area. (#1254) d4a95348 WRO-5477: Fixed fixedPopupPanels.panel to place the last children component as intended. (#1256) 440117a2 WRO-5469: Fixed `ContextualPopupDecorator` to update `ContextualPopup` position properly when repositioned in open (#1255) 2ebc334d WRO-4544: Remove limitation of the number of horizontal tabs (#1253) 8ba550b8 WRO-4786: Fix editable scroller to scroll properly by wheel (#1252) 63408016 WRO-3415: Provides event payload info for input type (#1250) 726e2cf9 WRO-653: Create Tests(editableScroller). (#1236) b40b91da WRO-591: Fixed editable wrapper to adjust sensitivity to swap the items (#1234) 6e64e621 WRO-2580: Fixed `Scroller` to set initial focus to scrollbar in Panels (#1218) a42d6de4 WRO-3994:[PR supplement]InputFieldSpotlightDecorator : remove unnecessary setState structure (#1242) 40fabbed WRO-2828: Should be prop's default value 'wrap: false' in Picker QA Sampler (#1249) 83962f19 WRO-709: Fixed EditableWrapper to calculate items position properly in RTL locales (#1233) 650ef5ce WRO-2588: Need longer text to marquee in Heading sample. (#1243) f7d8f069 WRO-4059: Fix lint warnings from updated lint rules (#1245) e44f0327 WRO-4551:Update the node version of travis (#1241) 46c9b069 WRO-4697: TimePicker: onComplete event not firing in he-IL (#1237) ec8af8a9 Merge branch 'master' into develop c71e2390 (tag: 2.5.0-alpha.2) 2.5.0-alpha.2 release a981ac29 Version value updating cb648f5d Update a change log for 2.5.0-alpha.2 Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 2b9201c8 Update dependencies Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) a14df65e WRO-4073: Fixed editable wrapper to set proper index of selected item when scrolled by 5way mode (#1232) a8018310 WRO-3721: Update dependencies to match React 18 (#1230) 537a1ffa WRO-3909: Fix isomorphic test (#1231) 060d80ba WRN-17648: updated to override variables and colors for game skin (#1163) d21a54dc WRO-18729: Added editable feature to Scroller to support editing items (#1229) 2d746bb1 WRO-636: InputFieldSpotlightDecorator: Refactored to not use unnecessary setState (#1223) 5c5ed2b0 WRO-608 Replace 'className' config to `css` for `ui/MarqueeDecorator` (#1224) d030333e WRO-2833: Add or fix touch support for sandstone components (#1227) fa44b093 WRN-19985: Fix ui test fail on jenkins(VirtualList, Scroller) (#1212) 27067799 WRO-380: Unify Progress and Scrollbar colors (#1220) 892b0033 Merge branch 'master' into develop 188d7972 (tag: 2.5.0-alpha.1) 2.5.0-alpha.1 release 4d52696c Version value updating 563fe24f Update enact dependencies Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 807981d4 Update enact dependencies Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) a5159ae7 Update a change log for 2.5.0-alpha.1 Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) d6f3a32d Remove blank Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) ba7bc1b2 Update dependencies Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 0b64aca3 Update dependencies Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 67c2612e WRN-13958: Update sandstone samples with new React style APIs (#1192) 147f4214 Merge branch 'feature/react-18' into develop 1dd3582f WRN-20381: Skip scroller ui-test. (#1217) 28f0500e (origin/feature/react-18) WRN-19696 : [React18] Fix unit test fail (#1216) 3b5a9652 WRN-18494: Add a story to test two floating layers in FixedPopupPanel qa-sampler (#1214) 0a8a7f0b WRN-19694: Fix isomorphic build is not working (#1215) 6040f467 fix lint errors c32d0091 Merge branch 'develop' into feature/react-18 037cc576 update the syntax for less 4 (#1207) f8afed7b WRN-19573: Remove focus and press effect on touch input for a joined vertical picker (#1211) 53f1a258 WRN-17764: Added screenshot tests and ui tests for VideoPlayer (#1177) a096cc68 WRN-16710: Fix Scroller and VirtualList to focus the topmost element after scroll in pointer mode (#1178) 980ac030 updated import of createRoot a5196aba Merge branch 'master' into develop 0d7e3bdc (tag: 2.1.4) 2.1.4 release 8d8e0dd1 Version value updating fe17a4d1 Update a change log for 2.1.4 Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) ddb06dfd Update dependencies Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) ec00077e WRN-19246: WizardPanels: Allow preventDefault on onTransition to prevent spotlight to panel element (#1200) af2dbc6d Lint fixes. bdecde27 Update RC to v3. 4ae0f35e WRN-19289: Preload Videos: need to change position of 'videoPlayerOption'. (#1201) 46203a5b WRN-12949: Added an Panel qa-sampler example that controls the timing of restoring focus when transitioning (#1191) a48dda74 WRN-842: Add webos-voice props to Scroller and VirtualList (#1205) ab78a4dc Revert "WRN-842: Add webos-voice props to VirtualList (#1188)" (#1204) 254420f9 WRN-842: Add webos-voice props to VirtualList (#1188) a095c8b3 PLAT-143564: Update screenshot tests for Checkbox and CheckboxItem (#921) 3c597f07 PLAT-143787: Added screenshot tests for TabLayout (#941) d73bb40f fix the bug to call right function (#1196) 10ad905a WRN-17765 : Add Screenshot and UI tests for Input. (#1170) e5c45096 WRN-18236: Add proper ui tests FormcheckboxItem (#1187) 6549edd6 PLAT-143626: ContextualMenuDecorator screenshot tests (#926) f18f1255 WRN-18677: Fix ui-test to use async test (#1195) 5c624b43 (origin/feature/WRN-783) WRN-12923: Added `icon` public class name to `Icon` component (#1175) 4d101319 changed image service (#1185) 4dd1f4ee WRN-17868: Add a scroller sample of centered items (#1184) 9d67b6c6 WRN-17844: Update sample for `locale` option `forceDirection` prop of `Heading` (#1173) b7c6f8df Merge branch 'master' into develop 8807cb19 (tag: 2.1.3) 2.1.3 release 3218fa60 Version value updating 6a6882c3 Update a change log for 2.1.3 Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 741eaa69 Update dependencies Enact-DCO-1.0-Signed-off-by: SJ RO (sj.ro@lge.com) 75326820 WRN-14715: add Heading qa-sampler for bidirectional text (#1171) a9e2a844 WRN-15868 : Added joined horizontal Picker with left/right key (#1153) 9ae8ef70 Update icon font with added glyph name - bluetooth, moodmode and changepassword (#1159) e998acb0 WRN-799: Make Panels navigation events consistent (#1136) 6bda25e7 WRN-14981: Fix lint warnings (#1160) 90a60164 WRN-12696: CrossPlatform: Fixed overlay type Alert layout when width is narrow (#1146) db26c12f WRN-15665: VirtualList: Fix `HoverToScroll` to update properly after changing `dataSize` (#1150) 049f87d5 WRN-848: Updated to use `forwardCustom` and add `type` when forwarding custom events (#1120) 5d0b896e modified package-lock.json and npm-shrinkwrap.json 74308a54 WRN-12703: Fixed container height for Spinner qa-samples (#1131) c124246f WRN-12845: Fixed joined horizontal Picker to go to the next item by touch (#1148) fb9a6752 WRN-15497: React18 POC Setup (#1149) 0b9a0165 WRN-12700: Cross-Platform: Fixed Input to show keypad properly when screen width is narrow (#1135) fbf7e5ae WRN-6748: Fixed Cross-Platform Enact iOS: The placeholder of the input is biased downward (#1140) 09af1afa WRN-12963: Add back button to Video Player (#1145) 30075157 update license (#1147) bcb8dcfe WRN-12919: Update dependencies (#1143) 4c4b59e8 PLAT-125221: Support overscroll effect for flicking (#792) (#1144) 510448b9 WRN-12676: Use web font(thai) instead of system font to avoid truncating tall strings on android devices (#1138) 06b960a7 WRN-12697: Cross-Platform Enact Android/iOS: BodyText - font size should change for rtl locale (#1134) 9462061c WRN-12781: Fixed Scroller to scroll correctly on AndroidChrome in RTL locales (#1139) 15f8f74a Revert "WRN-796: Find a way to test these reliably over network (#1062)" f04eb38b WRN-12869: Cross-Platform Enact Android/IOS: Tooltip not visible for vertical/radial Progressbar (#1128) ee695a56 WRN-796: Find a way to test these reliably over network (#1062) 85461fb2 WRN-13078: Fix missing Control `noScrollByWheel` for Scroller sampler (#1137) 600f6095 changed width of Marquee default sample (#1130) 157f7412 WRN-12843: Fixed Thai characters string in storybook and ui/ss tests (#1127) enact-dev-native 4.1.6..5.0.1 d3cd6e5 (HEAD -> master, tag: 5.0.1, origin/master, origin/HEAD) 5.0.1 release a111dd3 5.0.1 release b98bfd4 WRO-8722: Update in-editor linting guide (#296) eb23f67 WRO-9222: Fix `forceCSSModules` option is not working (#295) e29eeac (feature/WRO-9222, develop) WRO-521: Update documentation for troubleshooting `cannot find module` error of globally installed module (#294) ca32191 5.0.0 release a813630 (tag: 5.0.0) 5.0.0 release 3ddcffb 5.0.0 release d80baf4 WRO-6377: Fix security vulnerabilities (#290) df2f2b7 WRO-2087: Fixed build failure when .env file exists (#293) 59c27d5 WRO-6720: Fix stats filter to show snapshot_blob.bin log (#292) 74bfafe WRO-7036: Remove passing `ProgressPlugin` to `VerboseLogPlugin` (#291) cbc796c 5.0.0-rc.1 release bcd547c (tag: 5.0.0-rc.1) 5.0.0-rc.1 release 4f80aac 5.0.0-rc.1 release 2e7e16b WRO-2902: Fixed `enact serve` fails with multiple ports (#287) 9e1c43f WRO-7169: Fixed `core-js` version to `3.22.8` for compatibility (#289) 8d46a0d WRO-6690: Define `ENACT_PACK_ISOMORPHIC` global variable to hydrate apps when isomorphic build (#288) 1d18ead WRO-5782: Ignore `Module not found` warning from SnapshotPlugin (#286) c4912ec WRO-3992: Changed to tailwindcss support opt-in and added documentation (#278) fbb471e WRO-630: Add support for SCSS/Sass (#272) 9bee9bc WRO-5043:Update .travis.yml in tooling repo (#284) 7b61874 5.0.0-alpha.5 release 637b6ac (tag: 5.0.0-alpha.5) 5.0.0-alpha.5 release 0c9198f 5.0.0-alpha.5 release 911833d WRO-3879: Update the version of npm-shrinkwrap file to v2 (#281) f5f1bbe WRO-4469: added resolveFallback option (#283) f6b59b3 WRO-2912: Updated `eslint-config-enact` and related modules (#282) 250e3a7 WRO-4243: Update postcss-resolution-independence (#280) 114cefb WRO-4074: update @enact/template-sandstone (#279) 7b17ca2 WRO-288: Added `Measuring performance` page for guiding `web-vitals` (#275) ed43ac9 5.0.0-alpha.4 release 4ee845b (tag: 5.0.0-alpha.4) 5.0.0-alpha.4 release 8cd3c2d 5.0.0-alpha.4 release cdfd02f WRO-659: Removed `enzyme` and related modules. (#270) 959ec0d WRO-3254: Fix `enact test` can't find test files on windows (#277) eeb87f4 WRO-3110: Fix `enact pack` fails on windows (#276) 701b723 Create PULL_REQUEST_TEMPLATE.md 7052b21 5.0.0-alpha.3 release f0e9f1f (tag: 5.0.0-alpha.3) 5.0.0-alpha.3 release 9f00752 5.0.0-alpha.3 release 390a655 WRO-3209: Fix `enact lint` is not working on node 16 (#274) 9ed5d15 WRO-3211: Fix `enact test --watch` is not working (#273) 21df6bd update docs (#269) e78f0ee 5.0.0-alpha.2 release cccd258 (tag: 5.0.0-alpha.2) 5.0.0-alpha.2 release 2ed98a2 5.0.0-alpha.2 release 4468ea5 update @enact/template-sandstone (#271) 21f2c7c Merge tag '5.0.0-alpha.1' into develop 5b87161 (tag: 5.0.0-alpha.1) 5.0.0-alpha.1 release 186e37e 5.0.0-alpha.1 release 0116859 WRO-231: Merge feature/webpack5 to develop (#268) b6ca936 Merge tag '4.1.7' into develop 6fef32a (tag: 4.1.7) 4.1.7 release c8faa60 4.1.7 release 0d3494f WRN-14724: Add `additionalModulePaths` to specify additional paths to search when resolving modules (#259) e589b8c update license (#256) com.example.app.iotivity=r7 [PATCH] Update enact version to 4.5 com.webos.app.camera submissions/9..submissions/10 c668bbc Migrate RP apps to use React18 com.webos.app.enactbrowser submissions/57..submissions/58 1e12e37 Migrate RP apps to use React18 com.webos.app.home submissions/21..submissions/22 cede979 Migrate RP apps to use React18 com.webos.app.imageviewer submissions/14..submissions/15 06f5f5b Migrate RP apps to use React18 com.webos.app.notification submissions/12..submissions/13 cb5d130 Migrate RP apps to use React18 com.webos.app.settings submissions/20..submissions/21 19dd2bf Migrate RP apps to use React18 com.webos.app.videocall submissions/3..submissions/4 43b9825 Migrate RP apps to use React18 com.webos.app.videoplayer submissions/11..submissions/12 500dd6a Migrate RP apps to use React18 com.webos.app.volume submissions/10..submissions/11 3ebed39 Merge remote-tracking branch 'origin/develop' 52be965 (origin/develop) Migrate RP apps to use React18 :Testing Performed: Verify built and locally tested :QA Notes: NA :Issues Addressed: [WRO-7546] Migrate RP apps to use React18 [WRO-11586] CCC: Enact: Update Enact Version to 4.5 Change-Id: I39597cd3c1ac6348be83e8ae0733c59a8f0b7851 --- meta-webos/classes/webos_enactjs_app.bbclass | 17 +- meta-webos/classes/webos_enactjs_env.bbclass | 2 - .../com.example.app.iotivity.bb | 7 +- .../0001-Update-enact-version-to-4.5.patch | 1178 +++++++++++++++++ .../com.webos.app.camera.bb | 6 +- .../com.webos.app.enactbrowser.bb | 7 +- .../com.webos.app.home/com.webos.app.home.bb | 2 +- .../com.webos.app.imageviewer.bb | 5 +- .../com.webos.app.notification.bb | 6 +- .../com.webos.app.settings.bb | 2 +- .../com.webos.app.videocall.bb | 2 +- .../com.webos.app.videoplayer.bb | 5 +- .../com.webos.app.volume.bb | 6 +- .../enact-dev/enact-dev-native.bb | 13 +- .../enactjs-apps/enact-framework.bb | 22 +- .../enactjs-apps/enact-sandstone.bb | 21 +- 16 files changed, 1231 insertions(+), 70 deletions(-) create mode 100644 meta-webos/recipes-webos/com.example.app.iotivity/com.example.app.iotivity/0001-Update-enact-version-to-4.5.patch diff --git a/meta-webos/classes/webos_enactjs_app.bbclass b/meta-webos/classes/webos_enactjs_app.bbclass index e38c38989..80dac0573 100644 --- a/meta-webos/classes/webos_enactjs_app.bbclass +++ b/meta-webos/classes/webos_enactjs_app.bbclass @@ -219,8 +219,8 @@ do_install() { # Support forcing CSS modules for apps designed for Enact <3.0 export ENACT_FORCECSSMODULES="${WEBOS_ENACTJS_FORCE_CSS_MODULES}" - # Target build polyfills, transpiling, and CSS autoprefixing to Chrome 72 - export BROWSERSLIST="Chrome 72" + # Target build polyfills, transpiling, and CSS autoprefixing to Chrome 84 + export BROWSERSLIST="Chrome 84" # use local on-device ilib locale assets if [ ! -z "${WEBOS_ENACTJS_ILIB_ASSETS}" ] ; then @@ -241,13 +241,12 @@ do_install() { else # Normal App Build bbnote "Bundling Enact app to ${appdir}" - if [ "${WEBOS_ENACTJS_SHRINKWRAP_OVERRIDE}" = "true" ] ; then - bbnote "Use ENACT_DEV" - ${ENACT_DEV} pack ${WEBOS_ENACTJS_PACK_OPTS} -o "${appdir}" --verbose - else - bbnote "Use ENACT_DEV_LEGACY" - ${ENACT_DEV_LEGACY} pack ${WEBOS_ENACTJS_PACK_OPTS} -o "${appdir}" --verbose - fi + ${ENACT_DEV} pack ${WEBOS_ENACTJS_PACK_OPTS} -o "${appdir}" --verbose + fi + + if [ ! -f ${appdir}/index.html ] ; then + bberror "No bundling results in ${appdir}; exiting!" + exit 1 fi if [ -f ${appdir}/snapshot_blob.bin ] ; then diff --git a/meta-webos/classes/webos_enactjs_env.bbclass b/meta-webos/classes/webos_enactjs_env.bbclass index df56afbe4..ce1ea41d5 100644 --- a/meta-webos/classes/webos_enactjs_env.bbclass +++ b/meta-webos/classes/webos_enactjs_env.bbclass @@ -13,12 +13,10 @@ DEPENDS:append = " enact-dev-native nodejs-native" # Allow overriding the path to the enact-dev tools, in case an app needs # to pull in a different version WEBOS_ENACTJS_TOOL_PATH ??= "${STAGING_DIR_NATIVE}/opt/cli" -WEBOS_ENACTJS_TOOL_LEGACY_PATH ??= "${STAGING_DIR_NATIVE}/opt/cli-legacy" WEBOS_ENACTJS_JSDOC_TO_TS_PATH ??= "${STAGING_DIR_NATIVE}/opt/jsdoc-to-ts" WEBOS_NODE_BIN ??= "${STAGING_BINDIR_NATIVE}/node" ENACT_DEV ??= "${WEBOS_NODE_BIN} ${WEBOS_ENACTJS_TOOL_PATH}/bin/enact.js" -ENACT_DEV_LEGACY ??= "${WEBOS_NODE_BIN} ${WEBOS_ENACTJS_TOOL_LEGACY_PATH}/bin/enact.js" ENACT_JSDOC_TO_TS ??= "${WEBOS_NODE_BIN} ${WEBOS_ENACTJS_JSDOC_TO_TS_PATH}/bin/jsdoc-to-ts.js" ENACT_BOOTSTRAP_OVERRIDE ??= "${ENACT_DEV} bootstrap --base=false --sampler=false --link=false --override" diff --git a/meta-webos/recipes-webos/com.example.app.iotivity/com.example.app.iotivity.bb b/meta-webos/recipes-webos/com.example.app.iotivity/com.example.app.iotivity.bb index adba902d5..ed2e4627e 100644 --- a/meta-webos/recipes-webos/com.example.app.iotivity/com.example.app.iotivity.bb +++ b/meta-webos/recipes-webos/com.example.app.iotivity/com.example.app.iotivity.bb @@ -14,19 +14,20 @@ SRC_URI = " \ file://0001-webOS-Apply-new-ACG-policy-in-test-applications.patch \ file://0001-webOS-Apply-proper-ACG-group-name-in-test-appl.patch \ file://0001-webOS-Fix-bug-that-API-is-not-called.patch \ + file://0001-webOS-Fix-UI-bug-in-iotivity-sampler.patch \ + file://0001-Update-enact-version-to-4.5.patch \ " SRCREV = "ff1837a569494cb9613c3b6c961fcf26f0014515" S = "${WORKDIR}/git" -PR = "r6" +PR = "r7" PV = "1.3.99+git${SRCPV}" inherit pkgconfig webos_enactjs_app webos_component WEBOS_ENACTJS_PROJECT_PATH ??= "./resource/csdk/stack/samples/webos/com.example.app.iotivity" -WEBOS_ENACTJS_SHRINKWRAP_OVERRIDE = "false" WEBOS_ENACTJS_APP_ID = "com.example.app.iotivity" FILES:${PN} = "\ @@ -42,5 +43,3 @@ COMPATIBLE_MACHINE:armv7a = "(.*)" COMPATIBLE_MACHINE:armv7ve = "(.*)" COMPATIBLE_MACHINE:x86 = "(.*)" COMPATIBLE_MACHINE:x86-64 = "(.*)" - -SRC_URI += "file://0001-webOS-Fix-UI-bug-in-iotivity-sampler.patch" diff --git a/meta-webos/recipes-webos/com.example.app.iotivity/com.example.app.iotivity/0001-Update-enact-version-to-4.5.patch b/meta-webos/recipes-webos/com.example.app.iotivity/com.example.app.iotivity/0001-Update-enact-version-to-4.5.patch new file mode 100644 index 000000000..f93db687b --- /dev/null +++ b/meta-webos/recipes-webos/com.example.app.iotivity/com.example.app.iotivity/0001-Update-enact-version-to-4.5.patch @@ -0,0 +1,1178 @@ +From 4f5a9e4779a2dc6a26a35d406dcfd74ac52d24ba Mon Sep 17 00:00:00 2001 +From: "sungho1.shin" +Date: Tue, 26 Jul 2022 14:41:54 +0900 +Subject: [PATCH] Update enact version to 4.5 + +:Release Notes: +Update enact version to 4.5 + +:Detailed Notes: +This commit modifies the sample enact application provided +for webos to be compatiable with enact version 4.5. + +:Testing Performed: +Verified that build is successfully done. + +:Issues Addressed: +[WRO-9280] Support enact 4.5 upgrade +--- + .../npm-shrinkwrap.json | 831 ++++++++++++++---- + .../com.example.app.iotivity/package.json | 16 +- + .../com.example.app.iotivity/src/App/App.js | 1 - + .../com.example.app.iotivity/src/index.js | 19 +- + .../src/views/Client.js | 14 +- + .../src/views/MainPanel.js | 9 +- + .../src/views/Server.js | 18 +- + 7 files changed, 689 insertions(+), 219 deletions(-) + +diff --git a/resource/csdk/stack/samples/webos/com.example.app.iotivity/npm-shrinkwrap.json b/resource/csdk/stack/samples/webos/com.example.app.iotivity/npm-shrinkwrap.json +index 097210db3..5025900a0 100644 +--- a/resource/csdk/stack/samples/webos/com.example.app.iotivity/npm-shrinkwrap.json ++++ b/resource/csdk/stack/samples/webos/com.example.app.iotivity/npm-shrinkwrap.json +@@ -1,258 +1,729 @@ + { + "name": "com.example.app.iotivity", + "version": "1.0.0", ++ "lockfileVersion": 2, ++ "requires": true, ++ "packages": { ++ "": { ++ "name": "com.example.app.iotivity", ++ "version": "1.0.0", ++ "license": "LGE", ++ "dependencies": { ++ "@enact/core": "^4.5.0", ++ "@enact/i18n": "^4.5.0", ++ "@enact/moonstone": "^4.5.0", ++ "@enact/spotlight": "^4.5.0", ++ "@enact/ui": "^4.5.0", ++ "@enact/webos": "^4.5.0", ++ "prop-types": "^15.5.10", ++ "react": "^18.0.0", ++ "react-dom": "^18.0.0", ++ "react-redux": "^5.0.7", ++ "redux": "^3.7.2", ++ "fbjs": "^3.0.0", ++ "redux-thunk": "^2.2.0" ++ } ++ }, ++ "node_modules/@babel/runtime": { ++ "version": "7.18.9", ++ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", ++ "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", ++ "dependencies": { ++ "regenerator-runtime": "^0.13.4" ++ }, ++ "engines": { ++ "node": ">=6.9.0" ++ } ++ }, ++ "node_modules/@enact/core": { ++ "version": "4.5.0", ++ "resolved": "https://registry.npmjs.org/@enact/core/-/core-4.5.0.tgz", ++ "integrity": "sha512-A8539ZuCetFBVUqFqYDVr3abUFI7U4sLKlSyQMcjdvTcdkNwX8AAB4PV4yY09mxVZpVkDGJxcGfTtxsd2Ixl1w==", ++ "dependencies": { ++ "classnames": "^2.3.1", ++ "invariant": "^2.2.4", ++ "prop-types": "^15.8.1", ++ "ramda": "^0.28.0", ++ "react": "^18.0.0", ++ "react-dom": "^18.0.0", ++ "react-is": "^18.0.0", ++ "warning": "^4.0.3" ++ } ++ }, ++ "node_modules/@enact/i18n": { ++ "version": "4.5.0", ++ "resolved": "https://registry.npmjs.org/@enact/i18n/-/i18n-4.5.0.tgz", ++ "integrity": "sha512-W6vebdHPtMj31wwhR45VD9RIP+tJwPoWDRKgLTzRuoahcIpmGHV8+C3i1E+1pMXvweY0Z4P7rjyXhUu2tRZcow==", ++ "dependencies": { ++ "@enact/core": "^4.5.0", ++ "prop-types": "^15.8.1", ++ "ramda": "^0.28.0", ++ "react": "^18.0.0", ++ "react-dom": "^18.0.0", ++ "xhr": "^2.6.0" ++ }, ++ "peerDependencies": { ++ "ilib": "^14.14.0 || ^14.14.0-webos1" ++ } ++ }, ++ "node_modules/@enact/moonstone": { ++ "version": "4.5.0", ++ "resolved": "https://registry.npmjs.org/@enact/moonstone/-/moonstone-4.5.0.tgz", ++ "integrity": "sha512-ELjJ4NMCJy6JjRnRgEQYoyV9fs0yP8YiLTRxvXd3hDcqzYJ7NYIuDN6X1tT/9nh+ZSl+w5sIiaWMEgzHqJOiBw==", ++ "dependencies": { ++ "@enact/core": "^4.5.0-rc.1", ++ "@enact/i18n": "^4.5.0-rc.1", ++ "@enact/spotlight": "^4.5.0-rc.1", ++ "@enact/ui": "^4.5.0-rc.1", ++ "classnames": "^2.3.1", ++ "ilib": "^14.14.0", ++ "invariant": "^2.2.4", ++ "prop-types": "^15.8.1", ++ "ramda": "^0.28.0", ++ "react": "^18.0.0", ++ "react-dom": "^18.0.0", ++ "warning": "^4.0.3" ++ }, ++ "peerDependencies": { ++ "ilib": "^14.14.0 || ^14.14.0-webos1" ++ } ++ }, ++ "node_modules/@enact/spotlight": { ++ "version": "4.5.0", ++ "resolved": "https://registry.npmjs.org/@enact/spotlight/-/spotlight-4.5.0.tgz", ++ "integrity": "sha512-LUAc0Al5aSBHWgS7njyIdvcWrmLjOKiR+zXCKs8lLRd+pHD0b+uf29vDUBG8mMwzwW1YpMwmyXjr+Oi2QiOv5w==", ++ "dependencies": { ++ "@enact/core": "^4.5.0", ++ "classnames": "^2.3.1", ++ "prop-types": "^15.8.1", ++ "ramda": "^0.28.0", ++ "react": "^18.0.0", ++ "react-dom": "^18.0.0", ++ "warning": "^4.0.3" ++ } ++ }, ++ "node_modules/@enact/ui": { ++ "version": "4.5.0", ++ "resolved": "https://registry.npmjs.org/@enact/ui/-/ui-4.5.0.tgz", ++ "integrity": "sha512-0kTQFe5arYai1um6WXFLY6S2ATwkXB9Qw2vrsS8oNX/oDm6T+KAUQ9UlbJCsus/6l6uF/RCFV+tO+52Lmldbdg==", ++ "dependencies": { ++ "@enact/core": "^4.5.0", ++ "classnames": "^2.3.1", ++ "direction": "^1.0.4", ++ "invariant": "^2.2.4", ++ "prop-types": "^15.8.1", ++ "ramda": "^0.28.0", ++ "react": "^18.0.0", ++ "react-dom": "^18.0.0", ++ "react-is": "^18.0.0", ++ "warning": "^4.0.3" ++ } ++ }, ++ "node_modules/@enact/webos": { ++ "version": "4.5.0", ++ "resolved": "https://registry.npmjs.org/@enact/webos/-/webos-4.5.0.tgz", ++ "integrity": "sha512-XO0GQm/DfbRGkLfvkO/iSF2gTN7e5vh9wt3bs18hSBB3FLkPg1WP4Fvg9dIsbR2wrqu2inxVRgKV46TTH1M+bw==", ++ "dependencies": { ++ "@enact/core": "^4.5.0", ++ "prop-types": "^15.8.1", ++ "react": "^18.0.0", ++ "react-dom": "^18.0.0" ++ } ++ }, ++ "node_modules/classnames": { ++ "version": "2.3.1", ++ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", ++ "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" ++ }, ++ "node_modules/direction": { ++ "version": "1.0.4", ++ "resolved": "https://registry.npmjs.org/direction/-/direction-1.0.4.tgz", ++ "integrity": "sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==", ++ "bin": { ++ "direction": "cli.js" ++ }, ++ "funding": { ++ "type": "github", ++ "url": "https://github.com/sponsors/wooorm" ++ } ++ }, ++ "node_modules/dom-walk": { ++ "version": "0.1.2", ++ "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", ++ "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" ++ }, ++ "node_modules/global": { ++ "version": "4.4.0", ++ "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", ++ "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", ++ "dependencies": { ++ "min-document": "^2.19.0", ++ "process": "^0.11.10" ++ } ++ }, ++ "node_modules/hoist-non-react-statics": { ++ "version": "3.3.2", ++ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", ++ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", ++ "dependencies": { ++ "react-is": "^16.7.0" ++ } ++ }, ++ "node_modules/hoist-non-react-statics/node_modules/react-is": { ++ "version": "16.13.1", ++ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", ++ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" ++ }, ++ "node_modules/ilib": { ++ "version": "14.14.0", ++ "resolved": "https://registry.npmjs.org/ilib/-/ilib-14.14.0.tgz", ++ "integrity": "sha512-QuhH6qwJYq8c368+px4KA3KXfWfRC8XDt/zGNdwOz5C19ZOkPaxIh9LRr1RmzHEPJsd0mKj/JGV3pnzx1xXljg==" ++ }, ++ "node_modules/invariant": { ++ "version": "2.2.4", ++ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", ++ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", ++ "dependencies": { ++ "loose-envify": "^1.0.0" ++ } ++ }, ++ "node_modules/is-function": { ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", ++ "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" ++ }, ++ "node_modules/js-tokens": { ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", ++ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" ++ }, ++ "node_modules/lodash": { ++ "version": "4.17.21", ++ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", ++ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" ++ }, ++ "node_modules/lodash-es": { ++ "version": "4.17.21", ++ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", ++ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" ++ }, ++ "node_modules/loose-envify": { ++ "version": "1.4.0", ++ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", ++ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", ++ "dependencies": { ++ "js-tokens": "^3.0.0 || ^4.0.0" ++ }, ++ "bin": { ++ "loose-envify": "cli.js" ++ } ++ }, ++ "node_modules/min-document": { ++ "version": "2.19.0", ++ "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", ++ "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", ++ "dependencies": { ++ "dom-walk": "^0.1.0" ++ } ++ }, ++ "node_modules/object-assign": { ++ "version": "4.1.1", ++ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", ++ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", ++ "engines": { ++ "node": ">=0.10.0" ++ } ++ }, ++ "node_modules/parse-headers": { ++ "version": "2.0.5", ++ "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", ++ "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" ++ }, ++ "node_modules/process": { ++ "version": "0.11.10", ++ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", ++ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", ++ "engines": { ++ "node": ">= 0.6.0" ++ } ++ }, ++ "node_modules/prop-types": { ++ "version": "15.8.1", ++ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", ++ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", ++ "dependencies": { ++ "loose-envify": "^1.4.0", ++ "object-assign": "^4.1.1", ++ "react-is": "^16.13.1" ++ } ++ }, ++ "node_modules/prop-types/node_modules/react-is": { ++ "version": "16.13.1", ++ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", ++ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" ++ }, ++ "node_modules/ramda": { ++ "version": "0.28.0", ++ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz", ++ "integrity": "sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==", ++ "funding": { ++ "type": "opencollective", ++ "url": "https://opencollective.com/ramda" ++ } ++ }, ++ "node_modules/react": { ++ "version": "18.2.0", ++ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", ++ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", ++ "dependencies": { ++ "loose-envify": "^1.1.0" ++ }, ++ "engines": { ++ "node": ">=0.10.0" ++ } ++ }, ++ "node_modules/react-dom": { ++ "version": "18.2.0", ++ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", ++ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", ++ "dependencies": { ++ "loose-envify": "^1.1.0", ++ "scheduler": "^0.23.0" ++ }, ++ "peerDependencies": { ++ "react": "^18.2.0" ++ } ++ }, ++ "node_modules/react-is": { ++ "version": "18.2.0", ++ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", ++ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" ++ }, ++ "node_modules/react-lifecycles-compat": { ++ "version": "3.0.4", ++ "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", ++ "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" ++ }, ++ "node_modules/react-redux": { ++ "version": "5.1.2", ++ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.1.2.tgz", ++ "integrity": "sha512-Ns1G0XXc8hDyH/OcBHOxNgQx9ayH3SPxBnFCOidGKSle8pKihysQw2rG/PmciUQRoclhVBO8HMhiRmGXnDja9Q==", ++ "dependencies": { ++ "@babel/runtime": "^7.1.2", ++ "hoist-non-react-statics": "^3.3.0", ++ "invariant": "^2.2.4", ++ "loose-envify": "^1.1.0", ++ "prop-types": "^15.6.1", ++ "react-is": "^16.6.0", ++ "react-lifecycles-compat": "^3.0.0" ++ }, ++ "peerDependencies": { ++ "react": "^0.14.0 || ^15.0.0-0 || ^16.0.0-0", ++ "redux": "^2.0.0 || ^3.0.0 || ^4.0.0-0" ++ } ++ }, ++ "node_modules/react-redux/node_modules/react-is": { ++ "version": "16.13.1", ++ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", ++ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" ++ }, ++ "node_modules/redux": { ++ "version": "3.7.2", ++ "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", ++ "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", ++ "dependencies": { ++ "lodash": "^4.2.1", ++ "lodash-es": "^4.2.1", ++ "loose-envify": "^1.1.0", ++ "symbol-observable": "^1.0.3" ++ } ++ }, ++ "node_modules/redux-thunk": { ++ "version": "2.4.1", ++ "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz", ++ "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==", ++ "peerDependencies": { ++ "redux": "^4" ++ } ++ }, ++ "node_modules/regenerator-runtime": { ++ "version": "0.13.9", ++ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", ++ "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" ++ }, ++ "node_modules/scheduler": { ++ "version": "0.23.0", ++ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", ++ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", ++ "dependencies": { ++ "loose-envify": "^1.1.0" ++ } ++ }, ++ "node_modules/symbol-observable": { ++ "version": "1.2.0", ++ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", ++ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", ++ "engines": { ++ "node": ">=0.10.0" ++ } ++ }, ++ "node_modules/warning": { ++ "version": "4.0.3", ++ "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", ++ "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", ++ "dependencies": { ++ "loose-envify": "^1.0.0" ++ } ++ }, ++ "node_modules/xhr": { ++ "version": "2.6.0", ++ "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", ++ "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", ++ "dependencies": { ++ "global": "~4.4.0", ++ "is-function": "^1.0.1", ++ "parse-headers": "^2.0.0", ++ "xtend": "^4.0.0" ++ } ++ }, ++ "node_modules/xtend": { ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", ++ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", ++ "engines": { ++ "node": ">=0.4" ++ } ++ } ++ }, + "dependencies": { ++ "@babel/runtime": { ++ "version": "7.18.9", ++ "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.9.tgz", ++ "integrity": "sha512-lkqXDcvlFT5rvEjiu6+QYO+1GXrEHRo2LOtS7E4GtX5ESIZOgepqsZBVIj6Pv+a6zqsya9VCgiK1KAK4BvJDAw==", ++ "requires": { ++ "regenerator-runtime": "^0.13.4" ++ } ++ }, + "@enact/core": { +- "version": "1.15.0", +- "from": "@enact/core@^1.8.0", +- "resolved": "https://registry.npmjs.org/@enact/core/-/core-1.15.0.tgz" ++ "version": "4.5.0", ++ "resolved": "https://registry.npmjs.org/@enact/core/-/core-4.5.0.tgz", ++ "integrity": "sha512-A8539ZuCetFBVUqFqYDVr3abUFI7U4sLKlSyQMcjdvTcdkNwX8AAB4PV4yY09mxVZpVkDGJxcGfTtxsd2Ixl1w==", ++ "requires": { ++ "classnames": "^2.3.1", ++ "invariant": "^2.2.4", ++ "prop-types": "^15.8.1", ++ "ramda": "^0.28.0", ++ "react": "^18.0.0", ++ "react-dom": "^18.0.0", ++ "react-is": "^18.0.0", ++ "warning": "^4.0.3" ++ } + }, + "@enact/i18n": { +- "version": "1.15.0", +- "from": "@enact/i18n@^1.8.0", +- "resolved": "https://registry.npmjs.org/@enact/i18n/-/i18n-1.15.0.tgz" ++ "version": "4.5.0", ++ "resolved": "https://registry.npmjs.org/@enact/i18n/-/i18n-4.5.0.tgz", ++ "integrity": "sha512-W6vebdHPtMj31wwhR45VD9RIP+tJwPoWDRKgLTzRuoahcIpmGHV8+C3i1E+1pMXvweY0Z4P7rjyXhUu2tRZcow==", ++ "requires": { ++ "@enact/core": "^4.5.0", ++ "prop-types": "^15.8.1", ++ "ramda": "^0.28.0", ++ "react": "^18.0.0", ++ "react-dom": "^18.0.0", ++ "xhr": "^2.6.0" ++ } + }, + "@enact/moonstone": { +- "version": "1.15.0", +- "from": "@enact/moonstone@^1.8.0", +- "resolved": "https://registry.npmjs.org/@enact/moonstone/-/moonstone-1.15.0.tgz" ++ "version": "4.5.0", ++ "resolved": "https://registry.npmjs.org/@enact/moonstone/-/moonstone-4.5.0.tgz", ++ "integrity": "sha512-ELjJ4NMCJy6JjRnRgEQYoyV9fs0yP8YiLTRxvXd3hDcqzYJ7NYIuDN6X1tT/9nh+ZSl+w5sIiaWMEgzHqJOiBw==", ++ "requires": { ++ "@enact/core": "^4.5.0-rc.1", ++ "@enact/i18n": "^4.5.0-rc.1", ++ "@enact/spotlight": "^4.5.0-rc.1", ++ "@enact/ui": "^4.5.0-rc.1", ++ "classnames": "^2.3.1", ++ "ilib": "^14.14.0", ++ "invariant": "^2.2.4", ++ "prop-types": "^15.8.1", ++ "ramda": "^0.28.0", ++ "react": "^18.0.0", ++ "react-dom": "^18.0.0", ++ "warning": "^4.0.3" ++ } + }, + "@enact/spotlight": { +- "version": "1.15.0", +- "from": "@enact/spotlight@^1.8.0", +- "resolved": "https://registry.npmjs.org/@enact/spotlight/-/spotlight-1.15.0.tgz" ++ "version": "4.5.0", ++ "resolved": "https://registry.npmjs.org/@enact/spotlight/-/spotlight-4.5.0.tgz", ++ "integrity": "sha512-LUAc0Al5aSBHWgS7njyIdvcWrmLjOKiR+zXCKs8lLRd+pHD0b+uf29vDUBG8mMwzwW1YpMwmyXjr+Oi2QiOv5w==", ++ "requires": { ++ "@enact/core": "^4.5.0", ++ "classnames": "^2.3.1", ++ "prop-types": "^15.8.1", ++ "ramda": "^0.28.0", ++ "react": "^18.0.0", ++ "react-dom": "^18.0.0", ++ "warning": "^4.0.3" ++ } + }, + "@enact/ui": { +- "version": "1.15.0", +- "from": "@enact/ui@^1.8.0", +- "resolved": "https://registry.npmjs.org/@enact/ui/-/ui-1.15.0.tgz" ++ "version": "4.5.0", ++ "resolved": "https://registry.npmjs.org/@enact/ui/-/ui-4.5.0.tgz", ++ "integrity": "sha512-0kTQFe5arYai1um6WXFLY6S2ATwkXB9Qw2vrsS8oNX/oDm6T+KAUQ9UlbJCsus/6l6uF/RCFV+tO+52Lmldbdg==", ++ "requires": { ++ "@enact/core": "^4.5.0", ++ "classnames": "^2.3.1", ++ "direction": "^1.0.4", ++ "invariant": "^2.2.4", ++ "prop-types": "^15.8.1", ++ "ramda": "^0.28.0", ++ "react": "^18.0.0", ++ "react-dom": "^18.0.0", ++ "react-is": "^18.0.0", ++ "warning": "^4.0.3" ++ } + }, + "@enact/webos": { +- "version": "1.15.0", +- "from": "@enact/webos@^1.8.0", +- "resolved": "https://registry.npmjs.org/@enact/webos/-/webos-1.15.0.tgz" +- }, +- "asap": { +- "version": "2.0.6", +- "from": "asap@~2.0.3", +- "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz" +- }, +- "change-emitter": { +- "version": "0.1.6", +- "from": "change-emitter@^0.1.2", +- "resolved": "https://registry.npmjs.org/change-emitter/-/change-emitter-0.1.6.tgz" ++ "version": "4.5.0", ++ "resolved": "https://registry.npmjs.org/@enact/webos/-/webos-4.5.0.tgz", ++ "integrity": "sha512-XO0GQm/DfbRGkLfvkO/iSF2gTN7e5vh9wt3bs18hSBB3FLkPg1WP4Fvg9dIsbR2wrqu2inxVRgKV46TTH1M+bw==", ++ "requires": { ++ "@enact/core": "^4.5.0", ++ "prop-types": "^15.8.1", ++ "react": "^18.0.0", ++ "react-dom": "^18.0.0" ++ } + }, + "classnames": { +- "version": "2.2.5", +- "from": "classnames@~2.2.5", +- "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.2.5.tgz" +- }, +- "core-js": { +- "version": "1.2.7", +- "from": "core-js@^1.0.0", +- "resolved": "https://registry.npmjs.org/core-js/-/core-js-1.2.7.tgz" ++ "version": "2.3.1", ++ "resolved": "https://registry.npmjs.org/classnames/-/classnames-2.3.1.tgz", ++ "integrity": "sha512-OlQdbZ7gLfGarSqxesMesDa5uz7KFbID8Kpq/SxIoNGDqY8lSYs0D+hhtBXhcdB3rcbXArFr7vlHheLk1voeNA==" + }, +- "create-react-class": { +- "version": "15.6.3", +- "from": "create-react-class@^15.6.0", +- "resolved": "https://registry.npmjs.org/create-react-class/-/create-react-class-15.6.3.tgz" ++ "direction": { ++ "version": "1.0.4", ++ "resolved": "https://registry.npmjs.org/direction/-/direction-1.0.4.tgz", ++ "integrity": "sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ==" + }, + "dom-walk": { +- "version": "0.1.1", +- "from": "dom-walk@^0.1.0", +- "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz" +- }, +- "eases": { +- "version": "1.0.8", +- "from": "eases@~1.0.8", +- "resolved": "https://registry.npmjs.org/eases/-/eases-1.0.8.tgz" +- }, +- "encoding": { +- "version": "0.1.12", +- "from": "encoding@^0.1.11", +- "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz" +- }, +- "fbjs": { +- "version": "0.8.16", +- "from": "fbjs@^0.8.16", +- "resolved": "https://registry.npmjs.org/fbjs/-/fbjs-0.8.16.tgz" +- }, +- "for-each": { +- "version": "0.3.2", +- "from": "for-each@^0.3.2", +- "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.2.tgz" ++ "version": "0.1.2", ++ "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz", ++ "integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==" + }, + "global": { +- "version": "4.3.2", +- "from": "global@~4.3.0", +- "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz" ++ "version": "4.4.0", ++ "resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz", ++ "integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==", ++ "requires": { ++ "min-document": "^2.19.0", ++ "process": "^0.11.10" ++ } + }, + "hoist-non-react-statics": { +- "version": "1.2.0", +- "from": "hoist-non-react-statics@^1.0.0", +- "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-1.2.0.tgz" ++ "version": "3.3.2", ++ "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz", ++ "integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==", ++ "requires": { ++ "react-is": "^16.7.0" ++ }, ++ "dependencies": { ++ "react-is": { ++ "version": "16.13.1", ++ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", ++ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" ++ } ++ } + }, +- "iconv-lite": { +- "version": "0.4.19", +- "from": "iconv-lite@~0.4.13", +- "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.19.tgz" ++ "ilib": { ++ "version": "14.14.0", ++ "resolved": "https://registry.npmjs.org/ilib/-/ilib-14.14.0.tgz", ++ "integrity": "sha512-QuhH6qwJYq8c368+px4KA3KXfWfRC8XDt/zGNdwOz5C19ZOkPaxIh9LRr1RmzHEPJsd0mKj/JGV3pnzx1xXljg==" + }, + "invariant": { + "version": "2.2.4", +- "from": "invariant@~2.2.2", +- "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz" ++ "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", ++ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", ++ "requires": { ++ "loose-envify": "^1.0.0" ++ } + }, + "is-function": { +- "version": "1.0.1", +- "from": "is-function@^1.0.1", +- "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.1.tgz" +- }, +- "is-stream": { +- "version": "1.1.0", +- "from": "is-stream@^1.0.1", +- "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz" +- }, +- "isomorphic-fetch": { +- "version": "2.2.1", +- "from": "isomorphic-fetch@^2.1.1", +- "resolved": "https://registry.npmjs.org/isomorphic-fetch/-/isomorphic-fetch-2.2.1.tgz" ++ "version": "1.0.2", ++ "resolved": "https://registry.npmjs.org/is-function/-/is-function-1.0.2.tgz", ++ "integrity": "sha512-lw7DUp0aWXYg+CBCN+JKkcE0Q2RayZnSvnZBlwgxHBQhqt5pZNVy4Ri7H9GmmXkdu7LUthszM+Tor1u/2iBcpQ==" + }, + "js-tokens": { +- "version": "3.0.2", +- "from": "js-tokens@^3.0.0", +- "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-3.0.2.tgz" ++ "version": "4.0.0", ++ "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", ++ "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "lodash": { +- "version": "4.17.5", +- "from": "lodash@^4.17.5", +- "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.5.tgz" ++ "version": "4.17.21", ++ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", ++ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "lodash-es": { +- "version": "4.17.7", +- "from": "lodash-es@^4.17.5", +- "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.7.tgz" ++ "version": "4.17.21", ++ "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", ++ "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + }, + "loose-envify": { +- "version": "1.3.1", +- "from": "loose-envify@^1.0.0", +- "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.3.1.tgz" ++ "version": "1.4.0", ++ "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", ++ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", ++ "requires": { ++ "js-tokens": "^3.0.0 || ^4.0.0" ++ } + }, + "min-document": { + "version": "2.19.0", +- "from": "min-document@^2.19.0", +- "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz" +- }, +- "node-fetch": { +- "version": "1.7.3", +- "from": "node-fetch@^1.0.1", +- "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-1.7.3.tgz" ++ "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", ++ "integrity": "sha512-9Wy1B3m3f66bPPmU5hdA4DR4PB2OfDU/+GS3yAB7IQozE3tqXaVv2zOjgla7MEGSRv95+ILmOuvhLkOK6wJtCQ==", ++ "requires": { ++ "dom-walk": "^0.1.0" ++ } + }, + "object-assign": { + "version": "4.1.1", +- "from": "object-assign@^4.1.1", +- "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" ++ "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", ++ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==" + }, + "parse-headers": { +- "version": "2.0.1", +- "from": "parse-headers@^2.0.0", +- "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.1.tgz" ++ "version": "2.0.5", ++ "resolved": "https://registry.npmjs.org/parse-headers/-/parse-headers-2.0.5.tgz", ++ "integrity": "sha512-ft3iAoLOB/MlwbNXgzy43SWGP6sQki2jQvAyBg/zDFAgr9bfNWZIUj42Kw2eJIl8kEi4PbgE6U1Zau/HwI75HA==" + }, + "process": { +- "version": "0.5.2", +- "from": "process@~0.5.1", +- "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz" +- }, +- "promise": { +- "version": "7.3.1", +- "from": "promise@^7.1.1", +- "resolved": "https://registry.npmjs.org/promise/-/promise-7.3.1.tgz" ++ "version": "0.11.10", ++ "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", ++ "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, + "prop-types": { +- "version": "15.6.1", +- "from": "prop-types@^15.5.10", +- "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.6.1.tgz" ++ "version": "15.8.1", ++ "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.8.1.tgz", ++ "integrity": "sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==", ++ "requires": { ++ "loose-envify": "^1.4.0", ++ "object-assign": "^4.1.1", ++ "react-is": "^16.13.1" ++ }, ++ "dependencies": { ++ "react-is": { ++ "version": "16.13.1", ++ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", ++ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" ++ } ++ } + }, + "ramda": { +- "version": "0.24.1", +- "from": "ramda@~0.24.1", +- "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.24.1.tgz" ++ "version": "0.28.0", ++ "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.28.0.tgz", ++ "integrity": "sha512-9QnLuG/kPVgWvMQ4aODhsBUFKOUmnbUnsSXACv+NCQZcHbeb+v8Lodp8OVxtRULN1/xOyYLLaL6npE6dMq5QTA==" + }, + "react": { +- "version": "15.6.2", +- "from": "react@^15.6.1", +- "resolved": "https://registry.npmjs.org/react/-/react-15.6.2.tgz" ++ "version": "18.2.0", ++ "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", ++ "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", ++ "requires": { ++ "loose-envify": "^1.1.0" ++ } + }, + "react-dom": { +- "version": "15.6.2", +- "from": "react-dom@^15.6.1", +- "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-15.6.2.tgz" ++ "version": "18.2.0", ++ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", ++ "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", ++ "requires": { ++ "loose-envify": "^1.1.0", ++ "scheduler": "^0.23.0" ++ } ++ }, ++ "react-is": { ++ "version": "18.2.0", ++ "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", ++ "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==" ++ }, ++ "react-lifecycles-compat": { ++ "version": "3.0.4", ++ "resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz", ++ "integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==" + }, + "react-redux": { +- "version": "5.0.7", +- "from": "react-redux@^5.0.7", +- "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.0.7.tgz", ++ "version": "5.1.2", ++ "resolved": "https://registry.npmjs.org/react-redux/-/react-redux-5.1.2.tgz", ++ "integrity": "sha512-Ns1G0XXc8hDyH/OcBHOxNgQx9ayH3SPxBnFCOidGKSle8pKihysQw2rG/PmciUQRoclhVBO8HMhiRmGXnDja9Q==", ++ "requires": { ++ "@babel/runtime": "^7.1.2", ++ "hoist-non-react-statics": "^3.3.0", ++ "invariant": "^2.2.4", ++ "loose-envify": "^1.1.0", ++ "prop-types": "^15.6.1", ++ "react-is": "^16.6.0", ++ "react-lifecycles-compat": "^3.0.0" ++ }, + "dependencies": { +- "hoist-non-react-statics": { +- "version": "2.5.0", +- "from": "hoist-non-react-statics@^2.5.0", +- "resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-2.5.0.tgz" ++ "react-is": { ++ "version": "16.13.1", ++ "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", ++ "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==" + } + } + }, +- "recompose": { +- "version": "0.23.5", +- "from": "recompose@~0.23.5", +- "resolved": "https://registry.npmjs.org/recompose/-/recompose-0.23.5.tgz" +- }, + "redux": { + "version": "3.7.2", +- "from": "redux@^3.7.2", +- "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz" ++ "resolved": "https://registry.npmjs.org/redux/-/redux-3.7.2.tgz", ++ "integrity": "sha512-pNqnf9q1hI5HHZRBkj3bAngGZW/JMCmexDlOxw4XagXY2o1327nHH54LoTjiPJ0gizoqPDRqWyX/00g0hD6w+A==", ++ "requires": { ++ "lodash": "^4.2.1", ++ "lodash-es": "^4.2.1", ++ "loose-envify": "^1.1.0", ++ "symbol-observable": "^1.0.3" ++ } + }, + "redux-thunk": { +- "version": "2.2.0", +- "from": "redux-thunk@^2.2.0", +- "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.2.0.tgz" +- }, +- "setimmediate": { +- "version": "1.0.5", +- "from": "setimmediate@^1.0.5", +- "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz" ++ "version": "2.4.1", ++ "resolved": "https://registry.npmjs.org/redux-thunk/-/redux-thunk-2.4.1.tgz", ++ "integrity": "sha512-OOYGNY5Jy2TWvTL1KgAlVy6dcx3siPJ1wTq741EPyUKfn6W6nChdICjZwCd0p8AZBs5kWpZlbkXW2nE/zjUa+Q==", ++ "requires": {} ++ }, ++ "regenerator-runtime": { ++ "version": "0.13.9", ++ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", ++ "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" ++ }, ++ "scheduler": { ++ "version": "0.23.0", ++ "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", ++ "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", ++ "requires": { ++ "loose-envify": "^1.1.0" ++ } + }, + "symbol-observable": { + "version": "1.2.0", +- "from": "symbol-observable@^1.0.4", +- "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz" +- }, +- "trim": { +- "version": "0.0.1", +- "from": "trim@0.0.1", +- "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz" +- }, +- "ua-parser-js": { +- "version": "0.7.17", +- "from": "ua-parser-js@^0.7.9", +- "resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.17.tgz" ++ "resolved": "https://registry.npmjs.org/symbol-observable/-/symbol-observable-1.2.0.tgz", ++ "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==" + }, + "warning": { +- "version": "3.0.0", +- "from": "warning@~3.0.0", +- "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz" +- }, +- "whatwg-fetch": { +- "version": "2.0.3", +- "from": "whatwg-fetch@>=0.10.0", +- "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-2.0.3.tgz" ++ "version": "4.0.3", ++ "resolved": "https://registry.npmjs.org/warning/-/warning-4.0.3.tgz", ++ "integrity": "sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==", ++ "requires": { ++ "loose-envify": "^1.0.0" ++ } + }, + "xhr": { +- "version": "2.4.1", +- "from": "xhr@~2.4.0", +- "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.4.1.tgz" ++ "version": "2.6.0", ++ "resolved": "https://registry.npmjs.org/xhr/-/xhr-2.6.0.tgz", ++ "integrity": "sha512-/eCGLb5rxjx5e3mF1A7s+pLlR6CGyqWN91fv1JgER5mVWg1MZmlhBvy9kjcsOdRk8RrIujotWyJamfyrp+WIcA==", ++ "requires": { ++ "global": "~4.4.0", ++ "is-function": "^1.0.1", ++ "parse-headers": "^2.0.0", ++ "xtend": "^4.0.0" ++ } + }, + "xtend": { +- "version": "4.0.1", +- "from": "xtend@^4.0.0", +- "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz" ++ "version": "4.0.2", ++ "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", ++ "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==" + } + } + } +diff --git a/resource/csdk/stack/samples/webos/com.example.app.iotivity/package.json b/resource/csdk/stack/samples/webos/com.example.app.iotivity/package.json +index c09a70a1f..43f37fcb1 100644 +--- a/resource/csdk/stack/samples/webos/com.example.app.iotivity/package.json ++++ b/resource/csdk/stack/samples/webos/com.example.app.iotivity/package.json +@@ -29,15 +29,15 @@ + "extends": "enact" + }, + "dependencies": { +- "@enact/core": "^1.8.0", +- "@enact/i18n": "^1.8.0", +- "@enact/moonstone": "^1.8.0", +- "@enact/spotlight": "^1.8.0", +- "@enact/ui": "^1.8.0", +- "@enact/webos": "^1.8.0", ++ "@enact/core": "^4.5.0", ++ "@enact/i18n": "^4.5.0", ++ "@enact/moonstone": "^4.5.0", ++ "@enact/spotlight": "^4.5.0", ++ "@enact/ui": "^4.5.0", ++ "@enact/webos": "^4.5.0", + "prop-types": "^15.5.10", +- "react": "^15.6.1", +- "react-dom": "^15.6.1", ++ "react": "^18.0.0", ++ "react-dom": "^18.0.0", + "react-redux": "^5.0.7", + "redux": "^3.7.2", + "redux-thunk": "^2.2.0" +diff --git a/resource/csdk/stack/samples/webos/com.example.app.iotivity/src/App/App.js b/resource/csdk/stack/samples/webos/com.example.app.iotivity/src/App/App.js +index 0c1a9bcf8..a8e96fdac 100644 +--- a/resource/csdk/stack/samples/webos/com.example.app.iotivity/src/App/App.js ++++ b/resource/csdk/stack/samples/webos/com.example.app.iotivity/src/App/App.js +@@ -1,4 +1,3 @@ +-import kind from '@enact/core/kind'; + import MoonstoneDecorator from '@enact/moonstone/MoonstoneDecorator'; + import Panels from '@enact/moonstone/Panels'; + import React from 'react'; +diff --git a/resource/csdk/stack/samples/webos/com.example.app.iotivity/src/index.js b/resource/csdk/stack/samples/webos/com.example.app.iotivity/src/index.js +index 4538c89c4..5c0ebf0cd 100644 +--- a/resource/csdk/stack/samples/webos/com.example.app.iotivity/src/index.js ++++ b/resource/csdk/stack/samples/webos/com.example.app.iotivity/src/index.js +@@ -1,10 +1,11 @@ ++/* global ENACT_PACK_ISOMORPHIC */ ++ + import React from 'react'; +-import {render} from 'react-dom'; ++import {createRoot, hydrateRoot} from 'react-dom/client'; + import {createStore, applyMiddleware, compose} from 'redux'; + import {Provider} from 'react-redux'; + import reducer from './reducer/Reducer'; + import thunkMiddleware from 'redux-thunk'; +- + import App from './App'; + + const composeEnhancers = (typeof window === 'object' && window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__) || compose; +@@ -17,7 +18,6 @@ function configureStore (initialState) { + applyMiddleware(thunkMiddleware) + ) + ); +- + return ret; + } + +@@ -29,12 +29,13 @@ let appElement = ( + + ); + +-// In a browser environment, render instead of exporting ++// In a browser environment, render the app to the document. + if (typeof window !== 'undefined') { +- render( +- appElement, +- document.getElementById('root') +- ); ++ if (ENACT_PACK_ISOMORPHIC) { ++ hydrateRoot(document.getElementById('root'), appElement); ++ } else { ++ createRoot(document.getElementById('root')).render(appElement); ++ } + } + +-export default appElement; +\ No newline at end of file ++export default appElement; +diff --git a/resource/csdk/stack/samples/webos/com.example.app.iotivity/src/views/Client.js b/resource/csdk/stack/samples/webos/com.example.app.iotivity/src/views/Client.js +index 382ef649b..662e8b7cc 100644 +--- a/resource/csdk/stack/samples/webos/com.example.app.iotivity/src/views/Client.js ++++ b/resource/csdk/stack/samples/webos/com.example.app.iotivity/src/views/Client.js +@@ -2,9 +2,9 @@ import React from 'react'; + import { connect } from 'react-redux'; + import PropTypes from 'prop-types'; + +-import { MarqueeText } from '@enact/moonstone/Marquee'; ++import Marquee from '@enact/moonstone/Marquee'; + import Button from '@enact/moonstone/Button'; +-import Divider from '@enact/moonstone/Divider'; ++import Heading from '@enact/moonstone/Heading'; + import CheckboxItem from '@enact/moonstone/CheckboxItem'; + import BodyText from '@enact/moonstone/BodyText'; + import SpotlightContainerDecorator from '@enact/moonstone/Scroller'; +@@ -54,7 +54,7 @@ class Client extends React.Component { + } + this.props.stopClient(); + } +- componentWillReceiveProps(props) { ++ UNSAFE_componentWillReceiveProps(props) { + console.log(props); + if (props.discoveredResources && props.discoveredResources.length > 0) { + discoveredItems = []; +@@ -268,7 +268,7 @@ class Client extends React.Component { + +

+ + +- ++ + + + {discoveredItemDatas ? +@@ -324,7 +324,7 @@ class Client extends React.Component { + + : null} +
+- return ++ return + + {(detailResourceInfo ? JSON.stringify(detailResourceInfo, null, 4) : "")} + +@@ -370,4 +370,4 @@ let mapStateToProps = (state) => { + clientStartable: state.clientStartable + }; + }; +-export default connect(mapStateToProps, mapDispatchToProps)(Client); +\ No newline at end of file ++export default connect(mapStateToProps, mapDispatchToProps)(Client); +diff --git a/resource/csdk/stack/samples/webos/com.example.app.iotivity/src/views/MainPanel.js b/resource/csdk/stack/samples/webos/com.example.app.iotivity/src/views/MainPanel.js +index d5c718623..0308f9fb4 100644 +--- a/resource/csdk/stack/samples/webos/com.example.app.iotivity/src/views/MainPanel.js ++++ b/resource/csdk/stack/samples/webos/com.example.app.iotivity/src/views/MainPanel.js +@@ -1,8 +1,7 @@ +-import React from 'react'; + import kind from '@enact/core/kind'; + + import { Panel, Header } from '@enact/moonstone/Panels'; +-import Divider from '@enact/moonstone/Divider'; ++import Heading from '@enact/moonstone/Heading'; + + import Server from './Server'; + import Client from './Client'; +@@ -16,11 +15,11 @@ const MainPanel = kind({ +
+ + +- Server role ++ Server role + + + +- Client role ++ Client role + + + +@@ -28,4 +27,4 @@ const MainPanel = kind({ + ) + }); + +-export default MainPanel; +\ No newline at end of file ++export default MainPanel; +diff --git a/resource/csdk/stack/samples/webos/com.example.app.iotivity/src/views/Server.js b/resource/csdk/stack/samples/webos/com.example.app.iotivity/src/views/Server.js +index 60e17be6d..b8d128d03 100644 +--- a/resource/csdk/stack/samples/webos/com.example.app.iotivity/src/views/Server.js ++++ b/resource/csdk/stack/samples/webos/com.example.app.iotivity/src/views/Server.js +@@ -2,9 +2,9 @@ import React from 'react'; + import { connect } from 'react-redux'; + import PropTypes from 'prop-types'; + +-import { MarqueeText } from '@enact/moonstone/Marquee'; ++import Marquee from '@enact/moonstone/Marquee'; + import Button from '@enact/moonstone/Button'; +-import Divider from '@enact/moonstone/Divider'; ++import Heading from '@enact/moonstone/Heading'; + + import * as ActionCreators from '../actions/ActionCreators'; + +@@ -31,7 +31,7 @@ class Server extends React.Component { + this.props.stopObserveBinarySwitchValue(); + this.props.stopServer(); + } +- componentWillReceiveProps(props) { ++ UNSAFE_componentWillReceiveProps(props) { + if (props.serverEnabled && !this.state.serverStarted) + { + this.setState({ +@@ -104,7 +104,7 @@ class Server extends React.Component { + + {serverEnabled ? +
+- Server is running ++ Server is running +
+ : null + } +@@ -112,17 +112,17 @@ class Server extends React.Component { + + + +- ++ + {(serverEnabled && enableServerResourceControlUI) ? +
+
+- Resource: binarySwitch +- Type: oic.r.switch.binary +- Observable: true ++ Resource: binarySwitch ++ Type: oic.r.switch.binary ++ Observable: true +
+
+
+- value ++ value +
+ +
+-- +2.17.1 diff --git a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb index a5e0806ab..a4b594c3e 100644 --- a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb +++ b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb @@ -10,16 +10,14 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=3072ffcf5bdbbc376ed21c9d378d14d5 \ " -WEBOS_VERSION = "0.0.1-9_ec3b488bed642a4e5538320237dbd8d23e18e014" -PR = "r0" +WEBOS_VERSION = "0.0.1-10_d8a8778d73fd0e6c0d6f2884b521d1c31111e3c1" +PR = "r1" inherit webos_component inherit webos_enhanced_submissions inherit webos_enactjs_app inherit webos_public_repo -WEBOS_ENACTJS_SHRINKWRAP_OVERRIDE = "false" - SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" diff --git a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb index d5af3fd16..794c7b669 100644 --- a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb +++ b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb @@ -9,8 +9,8 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=72b3e3cef46e5ab3e175e5b515dc3b18 \ " -WEBOS_VERSION = "1.0.0-57_882870d4ae1dcb9a4b98851d803e5daadd42e028" -PR = "r16" +WEBOS_VERSION = "1.0.0-58_56efe6196fdfb90002235c44f89c3c174ad4bbe1" +PR = "r17" inherit webos_public_repo inherit webos_enhanced_submissions @@ -22,7 +22,6 @@ WEBOS_SYSTEM_BUS_SKIP_DO_TASKS = "1" WEBOS_SYSTEM_BUS_FILES_LOCATION = "${S}/files/sysbus" WEBOS_SYSTEM_BUS_MANIFEST_TYPE = "PASS" -WEBOS_ENACTJS_SHRINKWRAP_OVERRIDE = "false" WEBOS_ENACTJS_PACK_OPTS = "--isomorphic --production --snapshot" WEBOS_ENACTJS_ILIB_OVERRIDE = "" WEBOS_PREFERRED_GFX_IMAGE_FORMAT_ENABLED="0" @@ -31,7 +30,7 @@ SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" WEBOS_ENACTJS_PROJECT_PATH = "./samples/enact-based" WEBOS_ENACTJS_PACK_OVERRIDE = "\ - ${ENACT_DEV_LEGACY} pack ${WEBOS_ENACTJS_PACK_OPTS} && \ + ${ENACT_DEV} pack ${WEBOS_ENACTJS_PACK_OPTS} && \ ${WEBOS_NODE_BIN} resbundler.js dist && \ rm -fr ./dist/resources && \ rm -fr ./dist/node_modules/@enact/moonstone/resources && \ diff --git a/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb b/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb index 51a08e893..f2f244425 100644 --- a/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb +++ b/meta-webos/recipes-webos/com.webos.app.home/com.webos.app.home.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=0ec407cd2d4a192e0c60888f4ec66dd7 \ " -WEBOS_VERSION = "0.1.0-21_56d0b1ce4f2c538ea711d399db6edb005b30ba8c" +WEBOS_VERSION = "0.1.0-22_ba99fcd07accd7acee69fb58b8a81d8e2830d918" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" PR = "r4" diff --git a/meta-webos/recipes-webos/com.webos.app.imageviewer/com.webos.app.imageviewer.bb b/meta-webos/recipes-webos/com.webos.app.imageviewer/com.webos.app.imageviewer.bb index 89cd9be2d..97f69b928 100644 --- a/meta-webos/recipes-webos/com.webos.app.imageviewer/com.webos.app.imageviewer.bb +++ b/meta-webos/recipes-webos/com.webos.app.imageviewer/com.webos.app.imageviewer.bb @@ -9,8 +9,8 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=3072ffcf5bdbbc376ed21c9d378d14d5 \ " -WEBOS_VERSION = "0.0.1-14_6a2b6e9efd05e9b18d2ae8a754a314bcae79d141" -PR = "r0" +WEBOS_VERSION = "0.0.1-15_ca49d724d66ff827acee8eb5e95c380fd3fc1de2" +PR = "r1" inherit webos_component inherit webos_enhanced_submissions @@ -21,6 +21,5 @@ SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" WEBOS_ENACTJS_APP_ID = "com.webos.app.imageviewer" -WEBOS_ENACTJS_SHRINKWRAP_OVERRIDE = "false" WEBOS_LOCALIZATION_DATA_PATH = "${S}" WEBOS_LOCALIZATION_XLIFF_BASENAME = "imageviewer" diff --git a/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb b/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb index a67c851e2..4aa3c4ac1 100644 --- a/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb +++ b/meta-webos/recipes-webos/com.webos.app.notification/com.webos.app.notification.bb @@ -9,15 +9,13 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=0ec407cd2d4a192e0c60888f4ec66dd7 \ " -WEBOS_VERSION = "0.1.0-12_1138b6eb8a5bc82b7f4e54a2f1a26c3f9d95ae45" +WEBOS_VERSION = "0.1.0-13_fee4ad5e044c0ba747362166d25a0d34c999be61" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" -PR = "r1" +PR = "r2" inherit webos_enhanced_submissions inherit webos_enactjs_app inherit webos_public_repo -WEBOS_ENACTJS_SHRINKWRAP_OVERRIDE = "false" - WEBOS_ENACTJS_APP_ID = "com.webos.app.notification" diff --git a/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb b/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb index 16d8c70bf..37e61008a 100644 --- a/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb +++ b/meta-webos/recipes-webos/com.webos.app.settings/com.webos.app.settings.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=82c76ba3ea1ed22d2b1b41add2fbdc19 \ " -WEBOS_VERSION = "1.1.0-20_b5732f7291b83757c340c6cb58481bd0103dde85" +WEBOS_VERSION = "1.1.0-21_d59d763ef374e1dc3dfa43abd2a4853bc4b128b1" PR = "r3" inherit webos_component diff --git a/meta-webos/recipes-webos/com.webos.app.videocall/com.webos.app.videocall.bb b/meta-webos/recipes-webos/com.webos.app.videocall/com.webos.app.videocall.bb index 9661a9535..5026682b0 100644 --- a/meta-webos/recipes-webos/com.webos.app.videocall/com.webos.app.videocall.bb +++ b/meta-webos/recipes-webos/com.webos.app.videocall/com.webos.app.videocall.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=0ec407cd2d4a192e0c60888f4ec66dd7 \ " -WEBOS_VERSION = "0.0.1-3_0fe5db4c3e742c3ccc87721c3e8ad29100fd48b9" +WEBOS_VERSION = "0.0.1-4_080a5f75ca8868b9f2ec008f865486631f654e09" PR = "r0" diff --git a/meta-webos/recipes-webos/com.webos.app.videoplayer/com.webos.app.videoplayer.bb b/meta-webos/recipes-webos/com.webos.app.videoplayer/com.webos.app.videoplayer.bb index 642c5ead2..5284c743c 100644 --- a/meta-webos/recipes-webos/com.webos.app.videoplayer/com.webos.app.videoplayer.bb +++ b/meta-webos/recipes-webos/com.webos.app.videoplayer/com.webos.app.videoplayer.bb @@ -9,8 +9,8 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=3072ffcf5bdbbc376ed21c9d378d14d5 \ " -WEBOS_VERSION = "0.0.1-11_d8847b1ff4bf374b03288492d0e8e6d669c896c3" -PR = "r0" +WEBOS_VERSION = "0.0.1-12_ff6e0081d1b0f8ad1bf0480c5f28b2616cd646d4" +PR = "r1" inherit webos_component inherit webos_enhanced_submissions @@ -21,6 +21,5 @@ SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" WEBOS_ENACTJS_APP_ID = "com.webos.app.videoplayer" -WEBOS_ENACTJS_SHRINKWRAP_OVERRIDE = "false" WEBOS_LOCALIZATION_DATA_PATH = "${S}" WEBOS_LOCALIZATION_XLIFF_BASENAME = "videoplayer" diff --git a/meta-webos/recipes-webos/com.webos.app.volume/com.webos.app.volume.bb b/meta-webos/recipes-webos/com.webos.app.volume/com.webos.app.volume.bb index c9c4b753d..bf12a67a2 100644 --- a/meta-webos/recipes-webos/com.webos.app.volume/com.webos.app.volume.bb +++ b/meta-webos/recipes-webos/com.webos.app.volume/com.webos.app.volume.bb @@ -9,15 +9,13 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=0ec407cd2d4a192e0c60888f4ec66dd7 \ " -WEBOS_VERSION = "0.1.0-10_80e24e405a6fffe80c0db65a1c77dd7e92d44340" +WEBOS_VERSION = "0.1.0-11_17bd7cde218fe459c24b1628631f6cb67fe8f3f3" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" -PR = "r1" +PR = "r2" inherit webos_enhanced_submissions inherit webos_enactjs_app inherit webos_public_repo -WEBOS_ENACTJS_SHRINKWRAP_OVERRIDE = "false" - WEBOS_ENACTJS_APP_ID = "com.webos.app.volume" diff --git a/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb b/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb index cf742ff8b..69bed1499 100644 --- a/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb +++ b/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb @@ -17,31 +17,28 @@ inherit native # NOTE: It's only necessary to bump PR if the recipe itself changes # No need to bump PR when changing the values of PV and SRCREV (below) -PR = "r11" +PR = "r12" S = "${WORKDIR}/git" SRC_URI = " \ ${ENACTJS_GIT_REPO}/cli.git;name=main${WEBOS_GIT_PROTOCOL};nobranch=1;destsuffix=git/cli \ - ${ENACTJS_GIT_REPO}/cli.git;name=cli-legacy${WEBOS_GIT_PROTOCOL};nobranch=1;destsuffix=git/cli-legacy \ ${ENACTJS_GIT_REPO}/jsdoc-to-ts.git;name=jsdoc-to-ts${WEBOS_GIT_PROTOCOL};nobranch=1;destsuffix=git/jsdoc-to-ts \ " # we don't include SRCPV in PV, so we have to manually include SRCREVs in do_fetch vardeps do_fetch[vardeps] += "SRCREV" -do_fetch[vardeps] += "SRCREV_cli-legacy" do_fetch[vardeps] += "SRCREV_jsdoc-to-ts" -SRCREV_FORMAT = "main_cli-legacy_jsdoc-to-ts" +SRCREV_FORMAT = "main_jsdoc-to-ts" # PV is the version of the cli distribution, as tagged in the # enactjs/cli repository on GitHub. This version should correspond to the # tag whose hash is specified in SRCREV, so PV and SRCREV will always change # together. -PV = "4.1.6" -SRCREV = "af42d9de312dab537e8a7539b434d1c3ef42cbb7" -SRCREV_cli-legacy = "bf5012e50bdca62ff596b73a55a5b5f93ccf1069" -SRCREV_jsdoc-to-ts = "344e1bf9fe3615380be513a8f7a7bab7a3f71b1b" +PV = "5.0.1" +SRCREV = "b879bf378c2cf661f015ecea6c8a165672c54ac3" +SRCREV_jsdoc-to-ts = "059b9395e5804f943c3eef1afe7a0f80ef7c42ca" # Skip unneeded tasks do_configure[noexec] = "1" diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb index 6614d9276..e75b2b5a2 100644 --- a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb +++ b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb @@ -22,10 +22,10 @@ SRC_URI = " \ # algorithm properly recognizes that a pre-release precedes the associated final # release (e.g., 1.0-pre.1 < 1.0). -PV = "4.0.4" +PV = "4.5.0" -SRCREV_main = "1ce8ae701d66551db1db279fef5927509d683470" -SRCREV_enact = "ae1ef854432b0dedd75b0f104f6c2d3b1033753f" +SRCREV_main = "1440da6ff32008855fc7c9a570ccf66c54fc0d77" +SRCREV_enact = "6e6668d3327d6993b0e80edb73c0fc90765c834e" do_fetch[vardeps] += "SRCREV_enact" SRCREV_FORMAT = "main_enact" @@ -43,14 +43,14 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ loose-envify@1.4.0 \ min-document@2.19.0 \ object-assign@4.1.1 \ - parse-headers@2.0.4 \ + parse-headers@2.0.5 \ process@0.11.10 \ - prop-types@15.8.0 \ - ramda@0.24.1 \ - react@17.0.2 \ - react-dom@17.0.2 \ - react-is@17.0.2 \ - scheduler@0.20.2 \ + prop-types@15.8.1 \ + ramda@0.28.0 \ + react@18.2.0 \ + react-dom@18.2.0 \ + react-is@18.2.0 \ + scheduler@0.23.0 \ warning@4.0.3 \ xhr@2.6.0 \ xtend@4.0.2 \ @@ -59,7 +59,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ # NOTE: We only need to bump PR if we change something OTHER than # PV, SRCREV or the dependencies statement above. -PR = "r19" +PR = "r20" # Skip unneeded tasks do_configure[noexec] = "1" diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb b/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb index 24ac86b2d..4a5606e73 100644 --- a/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb +++ b/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb @@ -22,10 +22,10 @@ SRC_URI = " \ # algorithm properly recognizes that a pre-release precedes the associated final # release (e.g., 1.0-pre.1 < 1.0). -PV = "2.1.2" +PV = "2.5.2" -SRCREV = "74bb529f7703bccf409b37fc9076bcff0c03f604" -SRCREV_enact = "ae1ef854432b0dedd75b0f104f6c2d3b1033753f" +SRCREV = "8d0f11ce16f9280fe511dddf5b7d071f4d35d7ea" +SRCREV_enact = "6e6668d3327d6993b0e80edb73c0fc90765c834e" do_fetch[vardeps] += "SRCREV_enact" SRCREV_FORMAT = "main_enact" @@ -43,14 +43,13 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ loose-envify@1.4.0 \ min-document@2.19.0 \ object-assign@4.1.1 \ - parse-headers@2.0.4 \ + parse-headers@2.0.5 \ process@0.11.10 \ - prop-types@15.8.0 \ - ramda@0.24.1 \ - react@17.0.2 \ - react-dom@17.0.2 \ - react-is@17.0.2 \ - scheduler@0.20.2 \ + prop-types@15.8.1 \ + react@18.2.0 \ + react-dom@18.2.0 \ + react-is@18.2.0 \ + scheduler@0.23.0 \ warning@4.0.3 \ xhr@2.6.0 \ xtend@4.0.2 \ @@ -59,7 +58,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ # NOTE: We only need to bump PR if we change something OTHER than # PV, SRCREV or the dependencies statement above. -PR = "r9" +PR = "r10" # Skip unneeded tasks do_configure[noexec] = "1" From bdbe22c91098efb8022bafa595bf935f53defb1c Mon Sep 17 00:00:00 2001 From: Myungchul Kim Date: Mon, 5 Sep 2022 18:31:09 +0900 Subject: [PATCH 0521/2022] webos-fluentbit-plugins=36-r9 :Release Notes: Fix bug related to bugreport :Detailed Notes: webos-fluentbit-plugins: submissions/34..submissions/36 2412d51 Fix static analysis issues b1824ba Move distro, parseCoredumpComm and getCrashedFunc from in_crashinfo to out_jira 48959e9 Fixed a bug that bug ticket is not created with F12 key. :Testing Performed: See the CCC jira ticket :QA Notes: N/A :Issues Addressed: [WRO-11639] CCC: webos-fluentbit-plugins=36-r9 [WRO-11441] fluentbit: Add out_crashinfo plugin and integrate crash related plugins. Change-Id: Ia423b9c68caf2bf3d47b06d2508c29b2b986b986 --- .../webos-fluentbit-plugins.bb | 8 +--- .../0001-Fix-static-analysis-issues.patch | 38 ------------------- 2 files changed, 2 insertions(+), 44 deletions(-) delete mode 100644 meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins/0001-Fix-static-analysis-issues.patch diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb index 51ed170b2..3ad25431c 100644 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb @@ -12,8 +12,8 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 luna-service2 libpbnjson fluentbit msgpack-c" RDEPENDS:${PN} = "nyx-utils python3-core python3-requests python3-atlassian-python-api" -WEBOS_VERSION = "1.0.0-34_f1cb6a52b5bab41f91c2b90d01d4d1680e49fd86" -PR = "r8" +WEBOS_VERSION = "1.0.0-36_943fa331cf43556faa302ebdf8ef0bbbbca0b977" +PR = "r9" inherit webos_component inherit webos_enhanced_submissions @@ -28,7 +28,3 @@ inherit webos_distro_variant_dep SRC_URI="${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" - -SRC_URI:append = " \ - file://0001-Fix-static-analysis-issues.patch \ -" diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins/0001-Fix-static-analysis-issues.patch b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins/0001-Fix-static-analysis-issues.patch deleted file mode 100644 index 81ca65ab5..000000000 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins/0001-Fix-static-analysis-issues.patch +++ /dev/null @@ -1,38 +0,0 @@ -From fff701ba34b6b6805dece7173d4e5908f3d5e146 Mon Sep 17 00:00:00 2001 -From: Myungchul Kim -Date: Thu, 1 Sep 2022 19:21:39 +0900 -Subject: [PATCH] Fix static analysis issues - -Change-Id: I94889408a71034e7d51b7fd146de1b525e6d68af ---- - plugins/in_crashinfo/CrashinfoHandler.cpp | 1 - - plugins/out_crashinfo/CrashinfoHandler.cpp | 1 - - 2 files changed, 2 deletions(-) - -diff --git a/plugins/in_crashinfo/CrashinfoHandler.cpp b/plugins/in_crashinfo/CrashinfoHandler.cpp -index b05e84d..b1698bf 100644 ---- a/plugins/in_crashinfo/CrashinfoHandler.cpp -+++ b/plugins/in_crashinfo/CrashinfoHandler.cpp -@@ -137,7 +137,6 @@ int InCrashinfoHandler::onInit(struct flb_input_instance *ins, struct flb_config - PLUGIN_INFO("Work_Dir : %s", m_workDir.c_str()); - if (!File::createDir(m_workDir)) { - PLUGIN_ERROR("Failed to create Dir: %s", m_workDir.c_str()); -- return -1; - } - - pval = flb_input_get_property(PROPS_MAX_ENTRIES, ins); -diff --git a/plugins/out_crashinfo/CrashinfoHandler.cpp b/plugins/out_crashinfo/CrashinfoHandler.cpp -index 989cd5a..fe4d960 100644 ---- a/plugins/out_crashinfo/CrashinfoHandler.cpp -+++ b/plugins/out_crashinfo/CrashinfoHandler.cpp -@@ -81,7 +81,6 @@ int OutCrashinfoHandler::onInit(struct flb_output_instance *ins, struct flb_conf - PLUGIN_INFO("Work_Dir : %s", m_workDir.c_str()); - if (!File::createDir(m_workDir)) { - PLUGIN_ERROR("Failed to create Dir: %s", m_workDir.c_str()); -- return -1; - } - - tmp = flb_output_get_property(PROPS_MAX_ENTRIES, ins); --- -2.25.1 - From 4c7962779ea1389d8777c42bab8e9910a63465c4 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 12 Sep 2022 12:49:10 +0000 Subject: [PATCH 0522/2022] image.bbclass: Use hardlinks for more IMAGE_FSTYPES :Release Notes: build.sh expects all build artifacts to be hardlinks, not symlinks, currently this fails for ostree.tar.bz2 and wic.bz2 images, which are hardlinked to BUILD-ARTIFACTS, but only as broken symlinks. :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-10729] CCC: Various build fixes Change-Id: Ie0f2b86d8ae41dad2f1b00b2299255a1ee61a386 --- meta-webos/classes/image.bbclass | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/meta-webos/classes/image.bbclass b/meta-webos/classes/image.bbclass index 367966032..08cc9d75f 100644 --- a/meta-webos/classes/image.bbclass +++ b/meta-webos/classes/image.bbclass @@ -64,6 +64,34 @@ do_webos_deploy_fixup:prepend() { [ -e ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.rpi-sdimg ] && \ ln -vf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.rpi-sdimg \ ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.rpi-sdimg + + [ -e ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ostree ] && \ + ln -vf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ostree \ + ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.ostree + + [ -e ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ostree.tar.bz2 ] && \ + ln -vf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ostree.tar.bz2 \ + ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.ostree.tar.bz2 + + [ -e ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ota-ext4 ] && \ + ln -vf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.ota-ext4 \ + ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.ota-ext4 + + [ -e ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.wic ] && \ + ln -vf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.wic \ + ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.wic + + [ -e ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.wic.bmap ] && \ + ln -vf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.wic.bmap \ + ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.wic.bmap + + [ -e ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.wic.bz2 ] && \ + ln -vf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.rootfs.wic.bz2 \ + ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.wic.bz2 + + [ -e ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.testdata.json ] && \ + ln -vf ${DEPLOY_DIR_IMAGE}/${IMAGE_NAME}.testdata.json \ + ${DEPLOY_DIR_IMAGE}/${IMAGE_LINK_NAME}.testdata.json } # Don't append to IMAGE_LINK_NAME because in webOS we construct IMAGE_LINK_NAME from IMAGE_NAME From cbfb123a64f8ddf55b437d8e6619d8f8fc2c0e16 Mon Sep 17 00:00:00 2001 From: "sandeep.arjun" Date: Thu, 15 Sep 2022 17:26:11 +0530 Subject: [PATCH 0523/2022] ose: com.webos.service.storageaccess=19 :Release Notes: Fix to avoid using uninitialized pointers of mainloop :Detailed Notes: com.webos.service.storageaccess: submissions/18..submissions/19 490e7f6 Fix crash on mainloop execution :Testing Performed: Build Successful. See CCC ticket for details. :QA Notes: :Issues Addressed: [WRO-12322] CCC: com.webos.service.storageaccess=19 [WRO-10800] [RDX_CRASH][webos] /usr/sbin/storageaccess in strcmp (libc.so.6 + 0x7e050) [WRO-11171] [RDX_CRASH][webos] /usr/sbin/storageaccess in n/a (libglib-2.0.so.0 + 0x3de94) Change-Id: Ib442528785cf97680d96a2a7dd94a80e87439b79 --- .../com.webos.service.storageaccess.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb b/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb index ab17c082c..75cc8476d 100644 --- a/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb +++ b/meta-webos/recipes-webos/com.webos.service.storageaccess/com.webos.service.storageaccess.bb @@ -12,7 +12,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS= "glib-2.0 libxml2 luna-service2 pmloglib libgdrive libpbnjson curl gupnp" -WEBOS_VERSION = "1.0.0-18_7a13d2e0d80a506bcf1d44f664a651927d9006a2" +WEBOS_VERSION = "1.0.0-19_f9578b928165dc0a1d9284d6a282d479007d2e86" PR = "r6" inherit webos_component From 02c31e696d598dea55ca66204a965f4516ed6821 Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Wed, 14 Sep 2022 17:17:58 +0900 Subject: [PATCH 0524/2022] luna-surfacemanager=378 :Release Notes: Fix VKB layout showing smaller on closing :Detailed Notes: luna-surfacemanager: submissions/377..submissions/378 e9ae7d3 Fix VKB layout getting smaller before closing :Testing Performed: See the CCC jira ticket :QA Notes: N/A :Issues Addressed: [WRO-12224] CCC: luna-surfacemanager=378 Change-Id: I1b97184121c8c6a9f3f94a87d9da715eeba30597 --- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index 81d4f24f8..439e1e4ed 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0 qtwayland-webos" -WEBOS_VERSION = "2.0.0-377_906acef34467bdcaf0246cab2367ba8c817ff1e7" +WEBOS_VERSION = "2.0.0-378_adddf4c4586cbedad65b5673f4711abbf2c77ef1" PR = "r54" inherit webos_qmake6 From b53b314f7dfebff8ba05bf5cb7217cf2c52f3ab8 Mon Sep 17 00:00:00 2001 From: "paramesh.kuberappa" Date: Wed, 14 Sep 2022 14:28:27 +0530 Subject: [PATCH 0525/2022] ose: g-media-pipeline=21.gav.34 umediaserver=24.gav.24 :Release Notes: Update getPipelineState and getDisplayId APIs parameters Add getPipelineState and notifyPipelineStatus to ACG group Fix seek issue for bufferplayer test application :Detailed Notes: umediaserver: submissions/24.gav.23...submissions/24.gav.24 87da8ca Update getPipelineState and getDisplayId API parameters as per the API convention g-media-pipeline: submissions/21.gav.33...submissions/21.gav.34 682016f Fix seek issue for bufferplayer test application :Testing Performed: Test results are updated in :QA Notes: N/A :Issues Addressed: [WRO-12213] CCC: g-media-pipeline=21.gav.34 umediaserver=24.gav.24 [WRO-8633] Implement and update API change requests for Media [WRO-11704] Video Playback doesn't start from input seek position Change-Id: Ibe78c0043b7f9765dd945249b90736ec053e3181 --- .../recipes-multimedia/g-media-pipeline/g-media-pipeline.bb | 2 +- meta-webos/recipes-webos/umediaserver/umediaserver.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb index 42c75afda..5a9ea70d5 100644 --- a/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb +++ b/meta-webos/recipes-multimedia/g-media-pipeline/g-media-pipeline.bb @@ -34,7 +34,7 @@ DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad DEPENDS:append:rpi = " virtual/libomxil" WEBOS_GIT_PARAM_BRANCH = "@gav" -WEBOS_VERSION = "1.0.0-21.gav.33_8832c9ee3cff5fde663b2d3f763ce4dfcc0d687d" +WEBOS_VERSION = "1.0.0-21.gav.34_5f05e4881fa9b56d6a236dec146ec6d557da66aa" # raspberrypi3 uses @21.master branch DEPENDS:remove:raspberrypi3 = "webos-wayland-extensions" diff --git a/meta-webos/recipes-webos/umediaserver/umediaserver.bb b/meta-webos/recipes-webos/umediaserver/umediaserver.bb index 519e613a1..0e1f9acd5 100644 --- a/meta-webos/recipes-webos/umediaserver/umediaserver.bb +++ b/meta-webos/recipes-webos/umediaserver/umediaserver.bb @@ -43,7 +43,7 @@ COMPATIBLE_MACHINE:x86 = "(.*)" COMPATIBLE_MACHINE:x86-64 = "(.*)" WEBOS_GIT_PARAM_BRANCH = "@gav" -WEBOS_VERSION = "1.0.0-24.gav.23_5d41cd48631da6f41506845248e1201600037ed5" +WEBOS_VERSION = "1.0.0-24.gav.24_1e3ec58702689a47eddb24e5f9427f38a5b951b0" WEBOS_GIT_PARAM_BRANCH:raspberrypi3 = "master" WEBOS_VERSION:raspberrypi3 = "1.0.0-27_dad33357ba323a69885bc11661330ab07296b0c8" From be1344437b63cfceeb147866cc8bc453675e2968 Mon Sep 17 00:00:00 2001 From: Kyungjik Min Date: Fri, 16 Sep 2022 15:31:38 +0900 Subject: [PATCH 0526/2022] pkg_dependency.bbclass: Add more package information #2 :Release Notes: :Detailed Notes: Add dummy key/value when create new object :Testing Performed: Local test suite :QA Notes: N/A :Issues Addressed: [WRN-17702] Add more package information in dependency.json Change-Id: I23d360bd3d7f5763ab709c704bf00515a14e3f96 --- meta-webos/classes/pkg_dependency.bbclass | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/classes/pkg_dependency.bbclass b/meta-webos/classes/pkg_dependency.bbclass index ee392fe69..b8d937d4a 100644 --- a/meta-webos/classes/pkg_dependency.bbclass +++ b/meta-webos/classes/pkg_dependency.bbclass @@ -79,12 +79,12 @@ python create_pkg_dependency_data () { if output.get(dep.split()[0]): output[dep.split()[0]]["requiredby"].append(pkg+' [REC]') else: - output[dep.split()[0]]={"requires":[],"requiredby":[pkg+' [REC]'],"rprovides":[],"version":'',"arch":'',"ipk":''} + output[dep.split()[0]]={"requires":[],"requiredby":[pkg+' [REC]'],"rprovides":[],"version":'',"arch":'',"ipk":'',"recipe":'',"license":'',"section":'',"install_file":''} else: if output.get(dep): output[dep]["requiredby"].append(pkg) else: - output[dep]={"requires":[],"requiredby":[pkg],"rprovides":[],"version":'',"arch":'',"ipk":''} + output[dep]={"requires":[],"requiredby":[pkg],"rprovides":[],"version":'',"arch":'',"ipk":'',"recipe":'',"license":'',"section":'',"install_file":''} file=open(os.path.join(d.getVar('IMGDEPLOYDIR',True),'{}-dependency.json'.format(d.getVar('IMAGE_BASENAME',True))),'w') file.write(json.dumps(output)) From d1ec9868c8766b9643f03044c6001c82fc39a9c0 Mon Sep 17 00:00:00 2001 From: "sushovan.g" Date: Fri, 16 Sep 2022 13:36:03 +0530 Subject: [PATCH 0527/2022] ose: pulseaudio=37 audiod=43 :Release Notes: Fix no audio issue in lineout Fix pulseaudio crash while loading monitor source :Detailed Notes: audiod: submissions/42..submissions/43 ca69ca8 Fix no audio in lineout pulseaudio: submissions/36..submissions/37 8a18b5b83 Fix pulseaudio crash in source load :Testing Performed: Testing details mentioned in the CCC ticket :QA Notes: NA :Issues Addressed: [WRO-12402] CCC: pulseaudio=37 audiod=43 [WRO-12280] [OSE-RPi4]: Audio is not coming via lineout of the RPI board [WRO-12328] pulseaudio crash when loading monitor source Change-Id: Ibd6e27b36ed9cd3e2f6004300f1800869afb1aae --- meta-webos/recipes-multimedia/audiod/audiod.bb | 2 +- .../recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-multimedia/audiod/audiod.bb b/meta-webos/recipes-multimedia/audiod/audiod.bb index 9494073b0..70c904ea0 100644 --- a/meta-webos/recipes-multimedia/audiod/audiod.bb +++ b/meta-webos/recipes-multimedia/audiod/audiod.bb @@ -24,7 +24,7 @@ RDEPENDS:${PN} = "\ pulseaudio-server \ " -WEBOS_VERSION = "1.0.0-42_6874de8cec7fa91ee42fd0c4ebb505c15f0c8854" +WEBOS_VERSION = "1.0.0-43_954b63b3561495ae3badc834f3744d8f46b3cebd" PR = "r31" inherit webos_component diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend index 7074e66a6..1faf9d0c6 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend +++ b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend @@ -9,7 +9,7 @@ DEPENDS:remove = "libatomic-ops" DEPENDS += "pmloglib" -WEBOS_VERSION = "15.0-36_746a1486177fdfc765a71196d4f109e83293ac1d" +WEBOS_VERSION = "15.0-37_ceb8d7948504f181bd88575675aa3d206e13a82c" EXTENDPRAUTO:append = "webos1" inherit webos_enhanced_submissions From bed3f2a6af8565dde9357460998d886f58290fd9 Mon Sep 17 00:00:00 2001 From: "taeyoung.hong" Date: Tue, 12 Oct 2021 14:33:18 +0900 Subject: [PATCH 0528/2022] ose: enact-dev-native=v5.0.2 :Release Notes: Update Enact CLI Version to 5.0.2 :Detailed Notes: enact-dev-native 5.0.1..5.0.2 a18ba45 5.0.2 release e64a239 5.0.2 release 9b3e902 WRO-12268: Pinned versions of dependencies as same as 5.0.0 (#300) 82add20 WRO-8972: Fix DeprecationWarning when `enact serve` (#299) 5eaace5 WRO-11514: Add Repository/Hompage address to @enact/cli at npmjs.com (#297) :Testing Performed: Verify built and locally tested :QA Notes: NA :Issues Addressed: [WRO-12409] CCC: enact-dev-native=v5.0.2 [WRO-12268] Release cli 5.0.2 and related modules Change-Id: I7268c646e2cfee0e048fdb7bee86c79a41687d65 --- meta-webos/recipes-webos/enact-dev/enact-dev-native.bb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb b/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb index 69bed1499..e22058a03 100644 --- a/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb +++ b/meta-webos/recipes-webos/enact-dev/enact-dev-native.bb @@ -36,8 +36,8 @@ SRCREV_FORMAT = "main_jsdoc-to-ts" # tag whose hash is specified in SRCREV, so PV and SRCREV will always change # together. -PV = "5.0.1" -SRCREV = "b879bf378c2cf661f015ecea6c8a165672c54ac3" +PV = "5.0.2" +SRCREV = "37876eebfa39545cabad4c4d1aa30ecfec6417fc" SRCREV_jsdoc-to-ts = "059b9395e5804f943c3eef1afe7a0f80ef7c42ca" # Skip unneeded tasks From 3fe5edeaf0df70aa63bd9408be7474801bc3c204 Mon Sep 17 00:00:00 2001 From: Elvis Lee Date: Mon, 19 Sep 2022 15:28:51 +0900 Subject: [PATCH 0529/2022] luna-surfacemanager=379 qtwayland-webos=81 :Release Notes: Fix playing video on rotation Fix Maliit crash :Detailed Notes: luna-surfacemanager: submissions/378..submissions/379 bb6dd8f Consider viewsRoot when calculating foreign offset #2 qtwayland-webos: submissions/79..submissions/81 c00c39c Wait for at least one wl_output, prevent recursion d5df7f5 Wait for at least one wl_output :Testing Performed: See the CCC jira ticket :QA Notes: N/A :Issues Addressed: [WRO-12432] CCC: luna-surfacemanager=379 qtwayland-webos=81 Change-Id: Ieffa9ad50dfd2c9f0f1bd92141d70d6f5b63862d --- .../recipes-webos/luna-surfacemanager/luna-surfacemanager.bb | 2 +- meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb index 439e1e4ed..2c9047d03 100644 --- a/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb +++ b/meta-webos/recipes-webos/luna-surfacemanager/luna-surfacemanager.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtdeclarative wayland-native qtwayland qtwayland-native qt-features-webos pmloglib webos-wayland-extensions glib-2.0 qtwayland-webos" -WEBOS_VERSION = "2.0.0-378_adddf4c4586cbedad65b5673f4711abbf2c77ef1" +WEBOS_VERSION = "2.0.0-379_2add194251866299b3381c8d5faf41556bfe208c" PR = "r54" inherit webos_qmake6 diff --git a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb index 5be76d142..d39df19d1 100644 --- a/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb +++ b/meta-webos/recipes-webos/qtwayland-webos/qtwayland-webos.bb @@ -11,7 +11,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtwayland webos-wayland-extensions libxkbcommon qt-features-webos wayland-native qtwayland-native wayland-protocols" -WEBOS_VERSION = "2.0.0-79_df52f9e59c64bdc0dba2a7cbf7777645c1c5ab81" +WEBOS_VERSION = "2.0.0-81_5f4d81bce61ae92aa97997dd70954c2651ab503e" PR = "r16" inherit webos_qmake6 From f9a5d81acc252716ff2e9d963e9400ca469927cc Mon Sep 17 00:00:00 2001 From: "kalaiselvi.p" Date: Mon, 19 Sep 2022 10:50:30 +0530 Subject: [PATCH 0530/2022] ose: webruntime_91=26 :Release Notes: Fix suspend/resume with Web Media Player :Detailed Notes: Fix HTML5 continue to play on first tab video as sound heard on second tab webruntime_91: submissions/25..submissions/26 b28e2ae83e fixup! [op][n_upsable][media] Fix suspend/resume with WebMediaPlayerImpl a2d4ac17a3 [op][ups][gamepad] Fixed crash when connecting xbox controller :Testing Performed: CCC testing :QA Notes: N/A :Issues Addressed: [WRO-12430] CCC: webruntime_91=26 [WRO-11385] [OSE-RPi4]:HTML5 Video in the first tab continuous to play and the sound is heard even after opening second tab Change-Id: I0fb5374e3c54339a22fcc60801739bca7a278be6 --- meta-webos/recipes-webos/chromium/webruntime-repo_91.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc index d42de811f..7201470b5 100644 --- a/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc +++ b/meta-webos/recipes-webos/chromium/webruntime-repo_91.inc @@ -3,7 +3,7 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=c31f1ae166739be9ca186deacf4b32e4" WEBOS_REPO_NAME = "chromium91" -WEBOS_VERSION = "91.0.4472.114-25_dd304331ccf057e6329745d8272bab9a6ffc1e32" +WEBOS_VERSION = "91.0.4472.114-26_9ee1b4d48e11f49c65bf817df9c0486765102105" WEBOS_REPO_NAME_V8 = "chromium-v8" WEBOS_GIT_PARAM_BRANCH_V8 = "@chromium91" From fe32597a111a54a56fd6a9ef1d22c8b6d6d963b6 Mon Sep 17 00:00:00 2001 From: Jose Dapena Paz Date: Wed, 27 Jul 2022 10:31:39 +0200 Subject: [PATCH 0531/2022] ose: Add support for WAM using gamepads :Release Notes: Allow to use gamepads in webOS web contents. :Detailed Notes: Give input permissions to WAM so it can detect and use game pads. Also add kernel modules for Sony Dual Shock controller. :Testing Performed: 1. Plug controller with USB 2. Sideload https://gamepadtest.com/ from bareapp in OSE 3. Push any button or action in the controller Controller actions should be visible after first one. :QA Notes: Test-cases: QWTC-8710 :Issues Addressed: [WRO-12431] CCC: Add support for WAM using gamepads [WRO-10107] Verify Web Gamepad support on RPi4 (xbox pad) Change-Id: Ia7d95329ca83700310c3391b7aeebcdc752e4e4b --- meta-webos-raspberrypi/conf/machine/include/webos-rpi.inc | 2 ++ meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend | 3 ++- meta-webos/recipes-core/base-passwd/base-passwd/group.master | 2 +- 3 files changed, 5 insertions(+), 2 deletions(-) diff --git a/meta-webos-raspberrypi/conf/machine/include/webos-rpi.inc b/meta-webos-raspberrypi/conf/machine/include/webos-rpi.inc index 528ae513c..7ecbc5d12 100644 --- a/meta-webos-raspberrypi/conf/machine/include/webos-rpi.inc +++ b/meta-webos-raspberrypi/conf/machine/include/webos-rpi.inc @@ -39,6 +39,7 @@ RPI_KERNEL_MODULES = " \ kernel-module-evdev \ kernel-module-hci-uart \ kernel-module-hid-multitouch \ + kernel-module-hid-sony \ kernel-module-i2c-bcm2708 \ kernel-module-media \ kernel-module-rfcomm \ @@ -48,6 +49,7 @@ RPI_KERNEL_MODULES = " \ kernel-module-uvcvideo \ kernel-module-vc4 \ kernel-module-videodev \ + kernel-module-xpad \ " # Few more modules which are automatically loaded on # raspberrypi4 when all kernel-modules are installed diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend b/meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend index e240980c4..ba618eaa9 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend +++ b/meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend @@ -2,7 +2,7 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" -EXTENDPRAUTO:append = "webos26" +EXTENDPRAUTO:append = "webos27" RRECOMMENDS:${PN} += " \ glibc-gconv-utf-16 \ @@ -49,6 +49,7 @@ SRC_URI:append:raspberrypi4 = " \ " PACKAGECONFIG:append = " mesh \ + sixaxis \ testing \ " diff --git a/meta-webos/recipes-core/base-passwd/base-passwd/group.master b/meta-webos/recipes-core/base-passwd/base-passwd/group.master index 7fe0e161f..173eaee46 100644 --- a/meta-webos/recipes-core/base-passwd/base-passwd/group.master +++ b/meta-webos/recipes-core/base-passwd/base-passwd/group.master @@ -9,7 +9,7 @@ mail:x:8:mail wheel:x:10:root proxy:x:13:proxy kmem:x:15: -input:x:19:input,system +input:x:19:input,system,wam audio:x:29:,wam,pulse,audio,system www:x:33:www backup:x:34:backup From 90e514988af6442c24c5e99665f99ece99160012 Mon Sep 17 00:00:00 2001 From: Wanchang Ryu Date: Tue, 23 Aug 2022 15:09:33 +0900 Subject: [PATCH 0532/2022] ose: Add com.webos.app.test.v8snapshot=21-r6.1 :Release Notes: Add com.webos.app.test.v8snapshot to verify v8 snapshot feature. :Detailed Notes: test-apps: submissions/20..submissions/21 3e84424 Added com.webos.app.test.v8snapshot app :Testing Performed: Launch com.webos.app.test.v8snapshot app luna-send -n 1 -f luna://com.webos.applicationManager/launch '{"id": "com.webos.app.test.v8snapshot"}' Check "V8 snapshot is used." is displaying. :QA Notes: Test-cases: QWTC-8568 :Issues Addressed: [WRO-12438] CCC: Add com.webos.app.test.v8snapshot=21-r6.1 [WRO-9859] Verify that an app starts up with v8 snapshot Change-Id: I5e194c80b80c44a587928c5bae1838e6954951ee --- .../packagegroups/packagegroup-webos-extended.bb | 1 + .../test-apps/com.webos.app.test.v8snapshot.bb | 14 ++++++++++++++ .../test-apps/webos-open-test-apps.inc | 4 ++-- 3 files changed, 17 insertions(+), 2 deletions(-) create mode 100644 meta-webos/recipes-webos/test-apps/com.webos.app.test.v8snapshot.bb diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index fc3014d91..79191ab07 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -64,6 +64,7 @@ VIRTUAL-RUNTIME_pdm ?= "com.webos.service.pdm" WEBOS_PACKAGESET_TESTAPPS = " \ bareapp \ com.webos.app.test.enact \ + com.webos.app.test.v8snapshot \ com.webos.app.test.webosose \ com.webos.app.test.webrtc \ com.webos.app.test.youtube \ diff --git a/meta-webos/recipes-webos/test-apps/com.webos.app.test.v8snapshot.bb b/meta-webos/recipes-webos/test-apps/com.webos.app.test.v8snapshot.bb new file mode 100644 index 000000000..06a53f1d8 --- /dev/null +++ b/meta-webos/recipes-webos/test-apps/com.webos.app.test.v8snapshot.bb @@ -0,0 +1,14 @@ +# Copyright (c) 2022 LG Electronics, Inc. + +SUMMARY = "v8 snapshot test application" +AUTHOR = "Wanchang Ryu " + +EXTRA_INHERIT = "webos_cmake" + +require webos-open-test-apps.inc + +PR = "${INC_PR}.1" + +DEPENDS = "mksnapshot-cross-${TARGET_ARCH}" + +EXTRA_OECMAKE = "-DV8_MKSNAPSHOT=mksnapshot-cross-${TARGET_ARCH}" diff --git a/meta-webos/recipes-webos/test-apps/webos-open-test-apps.inc b/meta-webos/recipes-webos/test-apps/webos-open-test-apps.inc index 98287b259..358d84935 100644 --- a/meta-webos/recipes-webos/test-apps/webos-open-test-apps.inc +++ b/meta-webos/recipes-webos/test-apps/webos-open-test-apps.inc @@ -4,8 +4,8 @@ SECTION = "webos/apps" LICENSE = "Apache-2.0" LIC_FILES_CHKSUM = "file://${COMMON_LICENSE_DIR}/Apache-2.0;md5=89aea4e17d99a7cacdbeed46a0096b10" -WEBOS_VERSION = "1.0.0-20_0b300d2ba87b842e07492a72690c572f2730d740" -INC_PR = "r5" +WEBOS_VERSION = "1.0.0-21_ba427d305c34b323b0469e7fac521b4e89728715" +INC_PR = "r6" EXTRA_INHERIT ?= "webos_arch_indep webos_cmake" From 2427591d8388709a6f887c08e626f3ea015f3b0c Mon Sep 17 00:00:00 2001 From: "moorthy.bs" Date: Wed, 14 Sep 2022 20:46:26 +0530 Subject: [PATCH 0533/2022] ose: g-camera-pipeline=13.gav.30 :Release Notes: Fix RDX crash in g-camera-pipeline Fix crash while stop recording :Detailed Notes: g-camera-pipeline: submissions/13.gav.28..submissions/13.gav.30 c78e8a2 Fix for crash issue reported by RDX 5222ad1 Fix for crash issue while stop recording :Testing Performed: Test results are updated in the CCC ticket :QA Notes: N/A :Issues Addressed: [WRO-12259] CCC: g-camera-pipeline=13.gav.30 [WRO-11529] [RDX_CRASH][webos] /usr/sbin/g-camera-pipeline in n/a (libglib-2.0.so.0 + 0x6fd24) Change-Id: Ic51e9cdfaa8719a7e21d398c6eac74035c86df54 --- meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb index cf636af63..21429c775 100644 --- a/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb +++ b/meta-webos/recipes-webos/g-camera-pipeline/g-camera-pipeline.bb @@ -25,7 +25,7 @@ DEPENDS = "boost gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad DEPENDS:append:rpi = " userland" WEBOS_GIT_PARAM_BRANCH = "@gav" -WEBOS_VERSION = "1.0.0-13.gav.28_0ff829db657fdcd4637c5c874774d1b8c77f9a61" +WEBOS_VERSION = "1.0.0-13.gav.30_79015f3838ba64628e4aa234e16046e89de17936" WEBOS_GIT_PARAM_BRANCH:raspberrypi3 = "master" From d2498c4597b6dec3f8f742312263c0f6d1cd675a Mon Sep 17 00:00:00 2001 From: Muniraju Date: Thu, 22 Sep 2022 12:42:47 +0530 Subject: [PATCH 0534/2022] ose: com.webos.app.enactbrowser=59 com.webos.app.camera=11 :Release Notes: Fix to display exit full screen icon button audioSrc proper change in start camera API :Detailed Notes: Camera App Start camera API audioSrc value changed from pcm_input to record. com.webos.app.enactbrowser: submissions/58..submissions/59 60ecfa1 Full Screen Icon Bug Fix com.webos.app.camera: submissions/10..submissions/11 f1783fa audioSrc property change in start camera API :Testing Performed: Please check CCC tickets. :QA Notes: NA :Issues Addressed: [WRO-12597] CCC: com.webos.app.enactbrowser=59 com.webos.app.camera=11 [WRO-12215] Exit Full Screen button is not visible [WRO-11402] [OSE-RPi4] : Recorded video is not displayed. Change-Id: Ie2022932022bb0d4a9ccacf0df7f9fd2408ced97 --- .../recipes-webos/com.webos.app.camera/com.webos.app.camera.bb | 2 +- .../com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb index a4b594c3e..12bdbced8 100644 --- a/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb +++ b/meta-webos/recipes-webos/com.webos.app.camera/com.webos.app.camera.bb @@ -10,7 +10,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=3072ffcf5bdbbc376ed21c9d378d14d5 \ " -WEBOS_VERSION = "0.0.1-10_d8a8778d73fd0e6c0d6f2884b521d1c31111e3c1" +WEBOS_VERSION = "0.0.1-11_699a632306bb496c4b486c3e1d916880f43013dc" PR = "r1" inherit webos_component diff --git a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb index 794c7b669..1ebcadb02 100644 --- a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb +++ b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=72b3e3cef46e5ab3e175e5b515dc3b18 \ " -WEBOS_VERSION = "1.0.0-58_56efe6196fdfb90002235c44f89c3c174ad4bbe1" +WEBOS_VERSION = "1.0.0-59_ae16542d1cc6f3caa37578fd0b9ffdb449590f38" PR = "r17" inherit webos_public_repo From d8908a4b1cd8362708b811077afc5df1ce3a70c5 Mon Sep 17 00:00:00 2001 From: "venugopala.k" Date: Wed, 21 Sep 2022 17:34:15 +0530 Subject: [PATCH 0535/2022] ose: imemanager=26 :Release Notes: Set focus to VKB with Nav keys after touch event :Detailed Notes: Reverting WRO-7623 Vkb predictions show combination of Capital and small characters issue. Sets focus back to last focused item or default key in VKB when navigation keys are used after touch event. imemanager: submissions/22..submissions/26 19b7412 Set focus to VKB with Nav keys for JP and ZH ba48fd5 Bug(WRO-8168)is closed as a 'not a bug' as per architect team's suggestion e9055e3 Set focus to VKB with Nav keys after touch event 92bc75e Change uppercase letters to lowercase letters in English.dic :Testing Performed: Test result updated in WRO-12553 :QA Notes: N/A :Issues Addressed: [WRO-12612]CCC: imemanager=26 [WRO-7623]Vkb predictions show combination of Capital and small characters. [WRO-10152]VKB is not dismissed when UP key is pressed multiple times. Change-Id: I2b02d4fe8878d2d00d411b92cccbe6ff3cf95d8b --- meta-webos/recipes-webos/imemanager/imemanager.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/imemanager/imemanager.bb b/meta-webos/recipes-webos/imemanager/imemanager.bb index 9120b7a8c..29198dc69 100644 --- a/meta-webos/recipes-webos/imemanager/imemanager.bb +++ b/meta-webos/recipes-webos/imemanager/imemanager.bb @@ -14,7 +14,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtbase luna-service2 luna-prefs qt-features-webos qtdeclarative maliit-framework-webos qtdeclarative-native" RDEPENDS:${PN} += "libhangul sunpinyin pyzy qml-webos-bridge openwnn-webos" -WEBOS_VERSION = "1.0.0-22_13e9a9a7f4f1c755875abff714afd1550fb11a6a" +WEBOS_VERSION = "1.0.0-26_779c3e08a56929af53aa48f2cb70b0617988b09b" PR = "r6" inherit webos_component From 7d4f590990980e7397097f69e4220879ab74fd04 Mon Sep 17 00:00:00 2001 From: Seunghun Kim Date: Fri, 23 Sep 2022 15:32:17 +0900 Subject: [PATCH 0536/2022] ose: pulseaudio=39 audiod=45 :Release Notes: Implement intelligent ECNR(Speech Enhancement) :Detailed Notes: audiod: submissions/43..submissions/45 ac7ff86 Implement audioEffectManager and setAudioEffect API in audiod for ECNR de74de2 Add copyright header for audioEffectManager source files pulseaudio : submissions/37..submissions/39 52e0040 Implement module-ecnr and add setAudioEffect de99277 Add copyright header for ECNR source files :Testing Performed: Testing details mentioned in the CCC ticket :QA Notes: NA :Issues Addressed: [WRO-12665] CCC: pulseaudio=39 audiod=45 [WRO-10051] S12_implement of audioMixer & pulseAudioMixer for AudioEffectManager [WRO-10052] S12_implement of socket communication between audioD and pulseaudio [WRO-10049] S12_implement of pulseaudio routing rule [WRO-10056] S12_implement of sink & source device attachment Change-Id: I0947cf694488371d0e93118538f8498807fa6b19 --- meta-webos/recipes-multimedia/audiod/audiod.bb | 2 +- .../pulseaudio/pulseaudio_15.0.bbappend | 15 ++++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/meta-webos/recipes-multimedia/audiod/audiod.bb b/meta-webos/recipes-multimedia/audiod/audiod.bb index 70c904ea0..a78720c9f 100644 --- a/meta-webos/recipes-multimedia/audiod/audiod.bb +++ b/meta-webos/recipes-multimedia/audiod/audiod.bb @@ -24,7 +24,7 @@ RDEPENDS:${PN} = "\ pulseaudio-server \ " -WEBOS_VERSION = "1.0.0-43_954b63b3561495ae3badc834f3744d8f46b3cebd" +WEBOS_VERSION = "1.0.0-45_9c59d78294d554fececb9305baf7afda399aee03" PR = "r31" inherit webos_component diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend index 1faf9d0c6..60cd646f7 100644 --- a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend +++ b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio_15.0.bbappend @@ -7,10 +7,10 @@ LIC_FILES_CHKSUM += "file://oss-pkg-info.yaml;md5=5c4ec8703e42f87fdf96fa37947041 # This is blacklisted because of the license DEPENDS:remove = "libatomic-ops" -DEPENDS += "pmloglib" +DEPENDS += "pmloglib tensorflow-lite flatbuffers" -WEBOS_VERSION = "15.0-37_ceb8d7948504f181bd88575675aa3d206e13a82c" -EXTENDPRAUTO:append = "webos1" +WEBOS_VERSION = "15.0-39_d74431878cc06d952ea5edeb69380e2912b8fd04" +EXTENDPRAUTO:append = "webos2" inherit webos_enhanced_submissions @@ -57,14 +57,23 @@ do_install:append() { install -v -m 644 ${WORKDIR}/pulseaudio.service ${D}${sysconfdir}/systemd/system/ install -v -m 644 ${S}/src/modules/module-palm-policy-default.h ${D}${includedir}/pulse/module-palm-policy.h install -v -m 644 ${S}/src/modules/module-palm-policy-tables-default.h ${D}${includedir}/pulse/module-palm-policy-tables.h + + install -v -d ${D}${libdir}/pulse-15.0/modules/ecnr } do_install:append:webos() { install -v -m 644 ${S}/palm/open_system.pa ${D}${sysconfdir}/pulse/system.pa + install -v -m 644 ${S}/src/modules/ecnr/hann.txt ${D}${libdir}/pulse-15.0/modules/ecnr/hann.txt + install -v -m 644 ${S}/src/modules/ecnr/model_ecnr.tflite ${D}${libdir}/pulse-15.0/modules/ecnr/model_ecnr.tflite } do_install:append:qemuall() { install -v -m 644 ${S}/palm/qemux86_system.pa ${D}${sysconfdir}/pulse/system.pa } +FILES:${PN} += "${libdir}/pulse-15.0/modules/ecnr" +FILES:${PN} += "${libdir}/pulse-15.0/modules/ecnr/*" +RDEPENDS:pulseaudio-server:append:webos = "\ + pulseaudio-module-ecnr \ +" RDEPENDS:pulseaudio-server:append = "\ pulseaudio-module-palm-policy \ pulseaudio-module-null-source \ From d4761529cbf0f37ee2f4bb83f427ec0bd2779ab7 Mon Sep 17 00:00:00 2001 From: Myungchul Kim Date: Mon, 19 Sep 2022 07:53:13 +0900 Subject: [PATCH 0537/2022] webos-fluentbit-plugins=37-r10 webos-initscripts=87 :Release Notes: Collect device usage data :Detailed Notes: webos-fluentbit-plugins: submissions/36..submissions/37 189cd09 WebOSSystemdFilter: Collect error log 32de273 WebOSSystemdFilter: Collect app usage data c8e1f7a WebOSSystemdFilter: Collect app execution data 8b302b0 Add /usr/sbin/gatord to jira exceptions list 27f9b93 Collect device power on with MAC addr 82b78eb Rename Handler to WebOSSystemdFilter webos-initscripts: submissions/86..submissions/87 20c97eb Fix if statement in fluent-bit.sh :Testing Performed: See the CCC jira ticket :QA Notes: N/A :Issues Addressed: [WRO-12419] CCC: webos-fluentbit-plugins=37-r10 webos-initscripts=87 [WRO-11634] Collect device power on with MAC addr [WRO-12173] Collect app execution time [WRO-12248] Collect error and app usage logs [WRO-12575] Popup is not displaying on screen Change-Id: I1d0302ae0a737360df4b8163c0def55cc05d6a00 --- .../initscripts/webos-initscripts.bb | 2 +- .../webos-fluentbit-plugins.bb | 8 +- .../0001-Fix-build-error.patch | 85 +++++++++++++++++++ 3 files changed, 92 insertions(+), 3 deletions(-) create mode 100644 meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins/0001-Fix-build-error.patch diff --git a/meta-webos/recipes-core/initscripts/webos-initscripts.bb b/meta-webos/recipes-core/initscripts/webos-initscripts.bb index d0269d337..c18e77f18 100644 --- a/meta-webos/recipes-core/initscripts/webos-initscripts.bb +++ b/meta-webos/recipes-core/initscripts/webos-initscripts.bb @@ -19,7 +19,7 @@ RDEPENDS:${PN} = "${VIRTUAL-RUNTIME_init_manager} ${VIRTUAL-RUNTIME_bash} python PROVIDES = "initscripts" RPROVIDES:${PN} = "initscripts initd-functions" -WEBOS_VERSION = "3.0.0-86_47aa729e1026c96365d48692e937150e6b7d5eaa" +WEBOS_VERSION = "3.0.0-87_dbba6ee303189adf276ea9be4342e67b9b35582b" PR = "r17" inherit webos_component diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb index 3ad25431c..269556802 100644 --- a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins.bb @@ -12,8 +12,8 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "glib-2.0 luna-service2 libpbnjson fluentbit msgpack-c" RDEPENDS:${PN} = "nyx-utils python3-core python3-requests python3-atlassian-python-api" -WEBOS_VERSION = "1.0.0-36_943fa331cf43556faa302ebdf8ef0bbbbca0b977" -PR = "r9" +WEBOS_VERSION = "1.0.0-37_63ec3ce1216cd9bb3b0f09a4083aed28440e6e64" +PR = "r10" inherit webos_component inherit webos_enhanced_submissions @@ -28,3 +28,7 @@ inherit webos_distro_variant_dep SRC_URI="${WEBOSOSE_GIT_REPO_COMPLETE}" S = "${WORKDIR}/git" + +SRC_URI:append = " \ + file://0001-Fix-build-error.patch \ +" diff --git a/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins/0001-Fix-build-error.patch b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins/0001-Fix-build-error.patch new file mode 100644 index 000000000..f95117a2f --- /dev/null +++ b/meta-webos/recipes-webos/webos-fluentbit-plugins/webos-fluentbit-plugins/0001-Fix-build-error.patch @@ -0,0 +1,85 @@ +From 9a58800ecb83b477503a421f95caa6e6416dcd75 Mon Sep 17 00:00:00 2001 +From: Myungchul Kim +Date: Mon, 19 Sep 2022 09:33:05 +0900 +Subject: [PATCH] Fix build error + +Build Failed +http://gecko.lge.com/jenkins/job/webos-master-verify-raspberrypi4/12201/ : FAILURE +http://gecko.lge.com/jenkins/job/webos-master-verify-raspberrypi4-64/12149/ : SUCCESS + +Change-Id: I070796f961817ec8623f8e3d964fd0dbe530a2ec +--- + files/conf/fluent-bit_webos_official.conf | 2 +- + plugins/common/util/MSGPackUtil.cpp | 6 +++--- + plugins/common/util/MSGPackUtil.h | 2 +- + plugins/filter_webos_systemd/WebOSSystemdFilter.cpp | 2 +- + 4 files changed, 6 insertions(+), 6 deletions(-) + +diff --git a/files/conf/fluent-bit_webos_official.conf b/files/conf/fluent-bit_webos_official.conf +index 27f4f7b..8c156b8 100644 +--- a/files/conf/fluent-bit_webos_official.conf ++++ b/files/conf/fluent-bit_webos_official.conf +@@ -32,7 +32,7 @@ + Match systemd + Host webosdev.lge.com + Port 9200 +- Index rdx_systemd_raw_v2 ++ Index rdx_systemd_raw_v3 + Time_Key timestamp + HTTP_User rdx + HTTP_Passwd webos123 +diff --git a/plugins/common/util/MSGPackUtil.cpp b/plugins/common/util/MSGPackUtil.cpp +index 61fcaeb..fc0e017 100644 +--- a/plugins/common/util/MSGPackUtil.cpp ++++ b/plugins/common/util/MSGPackUtil.cpp +@@ -68,7 +68,7 @@ void MSGPackUtil::putValue(msgpack_packer* packer, const string& key, const JVal + break; + case JV_NUM: + // pbnjson does not distinguish integer from floating point (even if the serialized form is X.000000). This is by design. +- putValue(packer, kv.first.asString(), kv.second.asNumber()); ++ putValue(packer, kv.first.asString(), kv.second.asNumber()); + break; + case JV_STR: + putValue(packer, kv.first.asString(), kv.second.asString()); +@@ -106,10 +106,10 @@ void MSGPackUtil::putValue(msgpack_packer* packer, const string& key, const char + putValue(packer, key, string(value)); + } + +-void MSGPackUtil::putValue(msgpack_packer* packer, const string& key, int value) ++void MSGPackUtil::putValue(msgpack_packer* packer, const string& key, int64_t value) + { + packStr(packer, key); +- msgpack_pack_int(packer, value); ++ msgpack_pack_int64(packer, value); + } + + void MSGPackUtil::putValue(msgpack_packer* packer, const string& key, double value) +diff --git a/plugins/common/util/MSGPackUtil.h b/plugins/common/util/MSGPackUtil.h +index f624fb5..5c3e670 100644 +--- a/plugins/common/util/MSGPackUtil.h ++++ b/plugins/common/util/MSGPackUtil.h +@@ -35,7 +35,7 @@ public: + static void putValue(msgpack_packer* packer, const string& key, const JValue& value); + static void putValue(msgpack_packer* packer, const string& key, const string& value); + static void putValue(msgpack_packer* packer, const string& key, const char* value); +- static void putValue(msgpack_packer* packer, const string& key, int value); ++ static void putValue(msgpack_packer* packer, const string& key, int64_t value); + static void putValue(msgpack_packer* packer, const string& key, double value); + static void putValue(msgpack_packer* packer, const string& key, bool value); + +diff --git a/plugins/filter_webos_systemd/WebOSSystemdFilter.cpp b/plugins/filter_webos_systemd/WebOSSystemdFilter.cpp +index ec9e944..b46faa1 100644 +--- a/plugins/filter_webos_systemd/WebOSSystemdFilter.cpp ++++ b/plugins/filter_webos_systemd/WebOSSystemdFilter.cpp +@@ -282,7 +282,7 @@ void WebOSSystemdFilter::handleAppExecution(msgpack_unpacked* result, msgpack_pa + MSGPackUtil::putValue(packer, "event", "appExecution"); + MSGPackUtil::putValue(packer, "main", appId); + JValue extra = Object(); +- extra.put("durationSec", duration.tm.tv_sec); ++ extra.put("durationSec", (int64_t)duration.tm.tv_sec); + MSGPackUtil::putValue(packer, "extra", extra); + PLUGIN_INFO("Event (appExecution), Main (%s), Extra %s", appId.c_str(), extra.stringify().c_str()); + } +-- +2.25.1 + From 5d502c3a49aee768bb7e8ca04ab51ba52a8ed4ef Mon Sep 17 00:00:00 2001 From: Muniraju Date: Thu, 29 Sep 2022 11:07:22 +0530 Subject: [PATCH 0538/2022] ose: com.webos.app.enactbrowser=60 :Release Notes: Fix to disable navigation button :Detailed Notes: com.webos.app.enactbrowser: submissions/59..submissions/60 04ed383 Navigation buttons not disabled-Bug fix :Testing Performed: Please check CCC tickets. :QA Notes: NA :Issues Addressed: [WRO-13185] CCC: com.webos.app.enactbrowser=60 [WRO-12606] [OSE-RPi4] : Back /Forward button is not Disabled. Change-Id: I38b903a742e2d6dc251fd17fc564b366d287bba4 --- .../com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb index 1ebcadb02..bfb2bf141 100644 --- a/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb +++ b/meta-webos/recipes-webos/com.webos.app.enactbrowser/com.webos.app.enactbrowser.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=72b3e3cef46e5ab3e175e5b515dc3b18 \ " -WEBOS_VERSION = "1.0.0-59_ae16542d1cc6f3caa37578fd0b9ffdb449590f38" +WEBOS_VERSION = "1.0.0-60_28310dce8cc46678e85f050d19c8b43aad2a88ff" PR = "r17" inherit webos_public_repo From 22cb2dae029848c2d32da4502049edc7814b4ba3 Mon Sep 17 00:00:00 2001 From: "venugopala.k" Date: Wed, 28 Sep 2022 16:07:17 +0530 Subject: [PATCH 0539/2022] ose: imemanager=27 :Release Notes: Fix QJsonObject on with Qt 6.4 :Detailed Notes: Fix QJsonObject on with Qt 6.4 imemanager: submissions/26..submissions/27 8dd0cc9 Fix QJsonObject with Qt 6.4 :Testing Performed: Test result updated in WRO-13130 :QA Notes: N/A :Issues Addressed: [WRO-13130] CCC: imemanager=27 [WRO-10903] Fix usage of the QJsonObject::find Qt 6.4 Change-Id: I9b3b34b83ca9e7659c9ee17cb555b8c398c1f31c --- meta-webos/recipes-webos/imemanager/imemanager.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/imemanager/imemanager.bb b/meta-webos/recipes-webos/imemanager/imemanager.bb index 29198dc69..02ca040ee 100644 --- a/meta-webos/recipes-webos/imemanager/imemanager.bb +++ b/meta-webos/recipes-webos/imemanager/imemanager.bb @@ -14,7 +14,7 @@ LIC_FILES_CHKSUM = " \ DEPENDS = "qtbase luna-service2 luna-prefs qt-features-webos qtdeclarative maliit-framework-webos qtdeclarative-native" RDEPENDS:${PN} += "libhangul sunpinyin pyzy qml-webos-bridge openwnn-webos" -WEBOS_VERSION = "1.0.0-26_779c3e08a56929af53aa48f2cb70b0617988b09b" +WEBOS_VERSION = "1.0.0-27_8b83b972d4480c150da2e6f063888dfc12729eac" PR = "r6" inherit webos_component From e1af9c606f9db96224236317174a9a15dfcee587 Mon Sep 17 00:00:00 2001 From: Goun Lee Date: Wed, 28 Sep 2022 16:06:59 +0900 Subject: [PATCH 0540/2022] ilib-webapp=25,v14.15.1 enact-framework=r21 enact-sanestone=r11 :Release Notes: Sync up iLib 14.15.1 (https://github.com/iLib-js/iLib/releases) :Detailed Notes: * Update to CLDR v41 data * Added useIntl option in DateFmt to choose whether to use Intl.DateTimeFormat * Added the ability to use Intl.PluralRules in IString get the plural category with the number. * Fixed a bug where the DateFmt.formatRelative() does not represent correct result in certain case. * Updated locale data to have a consistently sorted order by rerunning cldr tool code. * Fixed a bug which a default script for uz should be Latin instead of Arabic. * Updated hardcoded locales for LocaleMatcher. (bn-IN, en-KR, hr-HU, ka-IR, ko-US, ku-IQ, ps-PK, pt-MO) * Fixed to generate plurals.json files even when the rule only has other. * Updated to load plurals.json in ResBundle Constructor, then you could call synchronously all the time because we can be sure if is already loaded. * Fixed a bug where the Currency didn't work asynchronously. * Fixed isomorphic test failures in Enact build by adding a value check ilib-webapp: submissions/24..submissions/25 547e63f Sync up iLib 14.15.1 :Testing Performed: See clm ticket for results. :QA Notes: N/A :Issues Addressed: [WRO-13097] CCC: ilib-webapp=25,v14.15.1 enact-framework={ose:r21 pro21} enact-sandstone={ose:r11 pro:pro4} [WRO-12150] Update the latest version of iLib to webOS Change-Id: I1bc2171df08996a3214189ee7917c6de1a27b4a3 --- meta-webos/recipes-webos/enactjs-apps/enact-framework.bb | 4 ++-- meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb | 4 ++-- meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb index e75b2b5a2..b8946a9b2 100644 --- a/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb +++ b/meta-webos/recipes-webos/enactjs-apps/enact-framework.bb @@ -36,7 +36,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ direction@1.0.4 \ dom-walk@0.1.2 \ global@4.4.0 \ - ilib@14.14.0 \ + ilib@14.15.1 \ invariant@2.2.4 \ is-function@1.0.2 \ js-tokens@4.0.0 \ @@ -59,7 +59,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ # NOTE: We only need to bump PR if we change something OTHER than # PV, SRCREV or the dependencies statement above. -PR = "r20" +PR = "r21" # Skip unneeded tasks do_configure[noexec] = "1" diff --git a/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb b/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb index 4a5606e73..ee85da42a 100644 --- a/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb +++ b/meta-webos/recipes-webos/enactjs-apps/enact-sandstone.bb @@ -36,7 +36,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ direction@1.0.4 \ dom-walk@0.1.2 \ global@4.4.0 \ - ilib@14.14.0 \ + ilib@14.15.1 \ invariant@2.2.4 \ is-function@1.0.2 \ js-tokens@4.0.0 \ @@ -58,7 +58,7 @@ WEBOS_ENACT_DEPENDENCIES ??= "\ # NOTE: We only need to bump PR if we change something OTHER than # PV, SRCREV or the dependencies statement above. -PR = "r10" +PR = "r11" # Skip unneeded tasks do_configure[noexec] = "1" diff --git a/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb b/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb index bd363e7d9..4ff589ed8 100644 --- a/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb +++ b/meta-webos/recipes-webos/ilib-webapp/ilib-webapp.bb @@ -9,7 +9,7 @@ LIC_FILES_CHKSUM = " \ file://oss-pkg-info.yaml;md5=be4f2e45a1215076318af43f833aa178 \ " -WEBOS_VERSION = "14.14.0-24_8e01fcc94ada302b76f8a8ca4fcdebbdd81eee39" +WEBOS_VERSION = "14.15.1-25_63f33046926ec0f833bae498bdbddda9ab9d2328" PR = "r8" inherit webos_arch_indep From 5d47aec1af83ed82ec8c1e2dd192cccd4a89778b Mon Sep 17 00:00:00 2001 From: Hotaek Jung Date: Thu, 29 Sep 2022 10:13:23 +0900 Subject: [PATCH 0541/2022] webos-initscripts=88 :Release Notes: Fix bugs to improve performance on Yocto 4.0 build :Detailed Notes: webos-initscripts: submissions/87..submissions/88 cec1108 Fix bugs in OSE RPI4 migration :Testing Performed: Refer to CCC Ticket :QA Notes: :Issues Addressed: [WRO-13159] CCC: webos-initscripts=88 [WRO-12281] [OSE -RPI4]:Performance is slow - YOCTO 4.0 upgrade build [WRO-12539] [OSE-RPI4]:DISKSIZE is not printing. Change-Id: I63a8f195f2ee41e81319f7f25d52eb3f6ff78442 --- meta-webos/recipes-core/initscripts/webos-initscripts.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-core/initscripts/webos-initscripts.bb b/meta-webos/recipes-core/initscripts/webos-initscripts.bb index c18e77f18..ab949746e 100644 --- a/meta-webos/recipes-core/initscripts/webos-initscripts.bb +++ b/meta-webos/recipes-core/initscripts/webos-initscripts.bb @@ -19,7 +19,7 @@ RDEPENDS:${PN} = "${VIRTUAL-RUNTIME_init_manager} ${VIRTUAL-RUNTIME_bash} python PROVIDES = "initscripts" RPROVIDES:${PN} = "initscripts initd-functions" -WEBOS_VERSION = "3.0.0-87_dbba6ee303189adf276ea9be4342e67b9b35582b" +WEBOS_VERSION = "3.0.0-88_01e210ac1e41ae93cd272303a0a187f1962d51ee" PR = "r17" inherit webos_component From 1ed133a807c4495cda99387f6a22a619fb969664 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 22 Sep 2022 14:33:14 +0000 Subject: [PATCH 0542/2022] libcec=webosrpi4 nyx-modules=webosrpi6 (use rpi overrides) :Release Notes: These .bbappends are in meta-webos-raspberrypi layer, so they should use rpi override to affect only rpi builds (and not e.g. qemux86 builds). :Detailed Notes: I don't know if it was intentional, but either these changes should be moved to meta-webos layer to make it clear that they are meant for all MACHINEs built by OSE or these overrides were missing. :Testing Performed: Only build tested. :QA Notes: No change to rpi image, but qemux86* will use diffrent nyx-modules version and won't include libcec at all. :Issues Addressed: [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth [WRO-12257] [OSE-RPI4] CEC adapter does not exist in the adapters list [WRO-12449] CCC: Various build fixes Change-Id: Ie8c06835b10e68ac43e6faf4bb6ecfc743e1d95f --- .../recipes-extended/libcec/libcec_%.bbappend | 6 +++--- .../recipes-webos/nyx-modules/nyx-modules.bbappend | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/meta-webos-raspberrypi/recipes-extended/libcec/libcec_%.bbappend b/meta-webos-raspberrypi/recipes-extended/libcec/libcec_%.bbappend index dce248a00..c0258bff6 100644 --- a/meta-webos-raspberrypi/recipes-extended/libcec/libcec_%.bbappend +++ b/meta-webos-raspberrypi/recipes-extended/libcec/libcec_%.bbappend @@ -1,12 +1,12 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webosrpi2" +EXTENDPRAUTO:append:rpi = "webosrpi3" # The recipe in meta-oe already has conditional dependency: # DEPENDS:append:rpi = "${@bb.utils.contains('MACHINE_FEATURES', 'vc4graphics', '', ' userland', d)}" # but in our builds the userland is used even when vc4graphics is in MACHINE_FEATURES DEPENDS:append:rpi = " virtual/libomxil" -FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" +FILESEXTRAPATHS:prepend:rpi := "${THISDIR}/${BPN}:" -SRC_URI += "file://0001-Fix-MessageReceived.patch" +SRC_URI:append:rpi = " file://0001-Fix-MessageReceived.patch" diff --git a/meta-webos-raspberrypi/recipes-webos/nyx-modules/nyx-modules.bbappend b/meta-webos-raspberrypi/recipes-webos/nyx-modules/nyx-modules.bbappend index d2bc4dbe6..b7022c5f7 100644 --- a/meta-webos-raspberrypi/recipes-webos/nyx-modules/nyx-modules.bbappend +++ b/meta-webos-raspberrypi/recipes-webos/nyx-modules/nyx-modules.bbappend @@ -1,11 +1,11 @@ # Copyright (c) 2020-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webosrpi5" +EXTENDPRAUTO:append:rpi = "webosrpi6" -DEPENDS:append = " nmeaparser" +DEPENDS:append:rpi = " nmeaparser" -RDEPENDS:${PN} += "libcec-tools" +RDEPENDS:${PN}:append:rpi = " libcec-tools" -WEBOS_VERSION = "7.1.0-20_7927148603cb9869421a7a3c35eef273cf085b21" +WEBOS_VERSION:rpi = "7.1.0-20_7927148603cb9869421a7a3c35eef273cf085b21" -NYX_MODULES_REQUIRED:append = "NYXMOD_OW_GPS;NYXMOD_OW_CEC;" +NYX_MODULES_REQUIRED:append:rpi = "NYXMOD_OW_GPS;NYXMOD_OW_CEC;" From d8bcf5d86fabf042084cd1ac05d1e83820d0ac68 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 1 Mar 2021 02:22:56 -0800 Subject: [PATCH 0543/2022] {gatesgarth-start} meta-webos-backports-3.2: delete :Release Notes: :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth Change-Id: I5be5792e1e9969b84491d16a43b759ab6b1c25f2 --- .../meta-webos-backports-3.2/conf/layer.conf | 19 -- .../recipes-connectivity/connman/connman.inc | 215 ------------------ ...stop-systemd-resolved-when-we-use-co.patch | 29 --- ...visibility-to-default-for-debug-symb.patch | 35 --- ...ve-musl-does-not-implement-res_ninit.patch | 83 ------- .../connman/connman/connman | 83 ------- .../connman/connman/no-version-scripts.patch | 27 --- .../connman/connman_1.39.bb | 15 -- .../recipes-devtools/guilder/guider_3.9.7.bb | 22 -- .../leptonica/leptonica_1.80.0.bb | 20 -- meta-webos/conf/layer.conf | 1 - 11 files changed, 549 deletions(-) delete mode 100644 meta-webos-backports/meta-webos-backports-3.2/conf/layer.conf delete mode 100644 meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman.inc delete mode 100644 meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman/0001-connman.service-stop-systemd-resolved-when-we-use-co.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman/0001-plugin.h-Change-visibility-to-default-for-debug-symb.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman/0002-resolve-musl-does-not-implement-res_ninit.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman/connman delete mode 100644 meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman/no-version-scripts.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman_1.39.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.2/recipes-devtools/guilder/guider_3.9.7.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.2/recipes-graphics/leptonica/leptonica_1.80.0.bb diff --git a/meta-webos-backports/meta-webos-backports-3.2/conf/layer.conf b/meta-webos-backports/meta-webos-backports-3.2/conf/layer.conf deleted file mode 100644 index 75bb2b7d5..000000000 --- a/meta-webos-backports/meta-webos-backports-3.2/conf/layer.conf +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright (c) 2021-2022 LG Electronics, Inc. - -# We have conf and classes directories => add to BBPATH -BBPATH .= ":${LAYERDIR}" - -# We have recipes-* directories => add to BBFILES -BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ - ${LAYERDIR}/recipes-*/*/*.bbappend" - -BBFILE_COLLECTIONS += "meta-webos-backports-3.2" -BBFILE_PATTERN_meta-webos-backports-3.2 := "^${LAYERDIR}/" - -LAYERDEPENDS_meta-webos-backports-3.2 = " \ - core \ - openembedded-layer \ -" -BBFILE_PRIORITY_meta-webos-backports-3.2 = "30" - -LAYERSERIES_COMPAT_meta-webos-backports-3.2 = "dunfell" diff --git a/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman.inc b/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman.inc deleted file mode 100644 index 2680ed20d..000000000 --- a/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman.inc +++ /dev/null @@ -1,215 +0,0 @@ -SUMMARY = "A daemon for managing internet connections within embedded devices" -DESCRIPTION = "The ConnMan project provides a daemon for managing \ -internet connections within embedded devices running the Linux \ -operating system. The Connection Manager is designed to be slim and \ -to use as few resources as possible, so it can be easily integrated. \ -It is a fully modular system that can be extended, through plug-ins, \ -to support all kinds of wired or wireless technologies. Also, \ -configuration methods, like DHCP and domain name resolving, are \ -implemented using plug-ins." -HOMEPAGE = "http://connman.net/" -BUGTRACKER = "https://01.org/jira/browse/CM" -LICENSE = "GPL-2.0-only" -LIC_FILES_CHKSUM = "file://COPYING;md5=12f884d2ae1ff87c09e5b7ccc2c4ca7e \ - file://src/main.c;beginline=1;endline=20;md5=486a279a6ab0c8d152bcda3a5b5edc36" - -inherit autotools pkgconfig systemd update-rc.d update-alternatives - -DEPENDS = "dbus glib-2.0 ppp" - -EXTRA_OECONF += "\ - ac_cv_path_WPASUPPLICANT=${sbindir}/wpa_supplicant \ - ac_cv_path_PPPD=${sbindir}/pppd \ - --enable-debug \ - --enable-loopback \ - --enable-ethernet \ - --enable-tools \ - --disable-polkit \ -" - -PACKAGECONFIG ??= "wispr iptables client\ - ${@bb.utils.filter('DISTRO_FEATURES', '3g systemd wifi', d)} \ - ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} \ -" - -# If you want ConnMan to support VPN, add following statement into -# local.conf or distro config -# PACKAGECONFIG:append:pn-connman = " openvpn vpnc l2tp pptp" - -PACKAGECONFIG[systemd] = "--with-systemdunitdir=${systemd_unitdir}/system/ --with-tmpfilesdir=${sysconfdir}/tmpfiles.d/,--with-systemdunitdir='' --with-tmpfilesdir=''" -PACKAGECONFIG[wifi] = "--enable-wifi, --disable-wifi, wpa-supplicant, wpa-supplicant" -PACKAGECONFIG[bluez] = "--enable-bluetooth, --disable-bluetooth, bluez5, bluez5" -PACKAGECONFIG[3g] = "--enable-ofono, --disable-ofono, ofono, ofono" -PACKAGECONFIG[tist] = "--enable-tist,--disable-tist," -PACKAGECONFIG[openvpn] = "--enable-openvpn --with-openvpn=${sbindir}/openvpn,--disable-openvpn,,openvpn" -PACKAGECONFIG[vpnc] = "--enable-vpnc --with-vpnc=${sbindir}/vpnc,--disable-vpnc,,vpnc" -PACKAGECONFIG[l2tp] = "--enable-l2tp --with-l2tp=${sbindir}/xl2tpd,--disable-l2tp,,xl2tpd" -PACKAGECONFIG[pptp] = "--enable-pptp --with-pptp=${sbindir}/pptp,--disable-pptp,,pptp-linux" -# WISPr support for logging into hotspots, requires TLS -PACKAGECONFIG[wispr] = "--enable-wispr,--disable-wispr,gnutls," -PACKAGECONFIG[nftables] = "--with-firewall=nftables ,,libmnl libnftnl,,kernel-module-nf-tables kernel-module-nft-chain-nat-ipv4 kernel-module-nft-chain-route-ipv4 kernel-module-nft-masq-ipv4 kernel-module-nft-nat" -PACKAGECONFIG[iptables] = "--with-firewall=iptables ,,iptables,iptables" -PACKAGECONFIG[nfc] = "--enable-neard, --disable-neard, neard, neard" -PACKAGECONFIG[client] = "--enable-client,--disable-client,readline" -PACKAGECONFIG[wireguard] = "--enable-wireguard,--disable-wireguard,libmnl" - -INITSCRIPT_NAME = "connman" -INITSCRIPT_PARAMS = "start 05 5 2 3 . stop 22 0 1 6 ." - -python __anonymous () { - systemd_packages = "${PN} ${PN}-wait-online" - pkgconfig = d.getVar('PACKAGECONFIG') - if ('openvpn' or 'vpnc' or 'l2tp' or 'pptp') in pkgconfig.split(): - systemd_packages += " ${PN}-vpn" - d.setVar('SYSTEMD_PACKAGES', systemd_packages) -} - -SYSTEMD_SERVICE:${PN} = "connman.service" -SYSTEMD_SERVICE:${PN}-vpn = "connman-vpn.service" -SYSTEMD_SERVICE:${PN}-wait-online = "connman-wait-online.service" - -ALTERNATIVE_PRIORITY = "100" -ALTERNATIVE:${PN} = "${@bb.utils.contains('DISTRO_FEATURES','systemd','resolv-conf','',d)}" -ALTERNATIVE_TARGET[resolv-conf] = "${@bb.utils.contains('DISTRO_FEATURES','systemd','${sysconfdir}/resolv-conf.connman','',d)}" -ALTERNATIVE_LINK_NAME[resolv-conf] = "${@bb.utils.contains('DISTRO_FEATURES','systemd','${sysconfdir}/resolv.conf','',d)}" - -do_install:append() { - if ${@bb.utils.contains('DISTRO_FEATURES','sysvinit','true','false',d)}; then - install -d ${D}${sysconfdir}/init.d - install -m 0755 ${WORKDIR}/connman ${D}${sysconfdir}/init.d/connman - sed -i s%@DATADIR@%${datadir}% ${D}${sysconfdir}/init.d/connman - fi - - install -d ${D}${bindir} - install -m 0755 ${B}/tools/*-test ${D}${bindir} - if [ -e ${B}/tools/wispr ]; then - install -m 0755 ${B}/tools/wispr ${D}${bindir} - fi - - # We don't need to package an empty directory - rmdir --ignore-fail-on-non-empty ${D}${libdir}/connman/scripts - - # Automake 1.12 won't install empty directories, but we need the - # plugins directory to be present for ownership - mkdir -p ${D}${libdir}/connman/plugins - - # For read-only filesystem, do not create links during bootup - if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then - ln -sf ../run/connman/resolv.conf ${D}${sysconfdir}/resolv-conf.connman - fi -} - -# These used to be plugins, but now they are core -RPROVIDES:${PN} = "\ - connman-plugin-loopback \ - connman-plugin-ethernet \ - ${@bb.utils.contains('PACKAGECONFIG', 'bluetooth','connman-plugin-bluetooth', '', d)} \ - ${@bb.utils.contains('PACKAGECONFIG', 'wifi','connman-plugin-wifi', '', d)} \ - ${@bb.utils.contains('PACKAGECONFIG', '3g','connman-plugin-ofono', '', d)} \ - " - -RDEPENDS:${PN} = "\ - dbus \ - " - -PACKAGES_DYNAMIC += "^${PN}-plugin-.*" - -def add_rdepends(bb, d, file, pkg, depmap, multilib_prefix, add_insane_skip): - plugintype = pkg.split( '-' )[-1] - if plugintype in depmap: - rdepends = map(lambda x: multilib_prefix + x, \ - depmap[plugintype].split()) - d.setVar("RDEPENDS:%s" % pkg, " ".join(rdepends)) - if add_insane_skip: - d.appendVar("INSANE_SKIP:%s" % pkg, "dev-so") - -python populate_packages:prepend() { - depmap = dict(pppd="ppp") - multilib_prefix = (d.getVar("MLPREFIX") or "") - - hook = lambda file,pkg,x,y,z: \ - add_rdepends(bb, d, file, pkg, depmap, multilib_prefix, False) - plugin_dir = d.expand('${libdir}/connman/plugins/') - plugin_name = d.expand('${PN}-plugin-%s') - do_split_packages(d, plugin_dir, r'^(.*).so$', plugin_name, \ - '${PN} plugin for %s', extra_depends='', hook=hook, prepend=True ) - - hook = lambda file,pkg,x,y,z: \ - add_rdepends(bb, d, file, pkg, depmap, multilib_prefix, True) - plugin_dir = d.expand('${libdir}/connman/plugins-vpn/') - plugin_name = d.expand('${PN}-plugin-vpn-%s') - do_split_packages(d, plugin_dir, r'^(.*).so$', plugin_name, \ - '${PN} VPN plugin for %s', extra_depends='', hook=hook, prepend=True ) -} - -PACKAGES =+ "${PN}-tools ${PN}-tests ${PN}-client" - -FILES:${PN}-tools = "${bindir}/wispr" -RDEPENDS:${PN}-tools ="${PN}" - -FILES:${PN}-tests = "${bindir}/*-test" - -FILES:${PN}-client = "${bindir}/connmanctl" -RDEPENDS:${PN}-client ="${PN}" - -FILES:${PN} = "${bindir}/* ${sbindir}/* ${libexecdir}/* ${libdir}/lib*.so.* \ - ${libdir}/connman/plugins \ - ${sysconfdir} ${sharedstatedir} ${localstatedir} ${datadir} \ - ${base_bindir}/* ${base_sbindir}/* ${base_libdir}/*.so* ${datadir}/${PN} \ - ${datadir}/dbus-1/system-services/* \ - ${sysconfdir}/tmpfiles.d/connman_resolvconf.conf" - -FILES:${PN}-dev += "${libdir}/connman/*/*.la" - -PACKAGES =+ "${PN}-vpn ${PN}-wait-online" - -SUMMARY:${PN}-vpn = "A daemon for managing VPN connections within embedded devices" -DESCRIPTION:${PN}-vpn = "The ConnMan VPN provides a daemon for \ -managing VPN connections within embedded devices running the Linux \ -operating system. The connman-vpnd handles all the VPN connections \ -and starts/stops VPN client processes when necessary. The connman-vpnd \ -provides a DBus API for managing VPN connections. All the different \ -VPN technogies are implemented using plug-ins." -FILES:${PN}-vpn += "${sbindir}/connman-vpnd \ - ${sysconfdir}/dbus-1/system.d/connman-vpn-dbus.conf \ - ${datadir}/dbus-1/system-services/net.connman.vpn.service \ - ${systemd_unitdir}/system/connman-vpn.service" - -SUMMARY:${PN}-wait-online = "A program that will return once ConnMan has connected to a network" -DESCRIPTION:${PN}-wait-online = "A service that can be enabled so that \ -the system waits until a network connection is established." -FILES:${PN}-wait-online += "${sbindir}/connmand-wait-online \ - ${systemd_unitdir}/system/connman-wait-online.service" - -SUMMARY:${PN}-plugin-vpn-openvpn = "An OpenVPN plugin for ConnMan VPN" -DESCRIPTION:${PN}-plugin-vpn-openvpn = "The ConnMan OpenVPN plugin uses openvpn client \ -to create a VPN connection to OpenVPN server." -FILES:${PN}-plugin-vpn-openvpn += "${libdir}/connman/scripts/openvpn-script \ - ${libdir}/connman/plugins-vpn/openvpn.so" -RDEPENDS:${PN}-plugin-vpn-openvpn += "${PN}-vpn" -RRECOMMENDS:${PN} += "${@bb.utils.contains('PACKAGECONFIG','openvpn','${PN}-plugin-vpn-openvpn', '', d)}" - -SUMMARY:${PN}-plugin-vpn-vpnc = "A vpnc plugin for ConnMan VPN" -DESCRIPTION:${PN}-plugin-vpn-vpnc = "The ConnMan vpnc plugin uses vpnc client \ -to create a VPN connection to Cisco3000 VPN Concentrator." -FILES:${PN}-plugin-vpn-vpnc += "${libdir}/connman/scripts/openconnect-script \ - ${libdir}/connman/plugins-vpn/vpnc.so \ - ${libdir}/connman/scripts/vpn-script" -RDEPENDS:${PN}-plugin-vpn-vpnc += "${PN}-vpn" -RRECOMMENDS:${PN} += "${@bb.utils.contains('PACKAGECONFIG','vpnc','${PN}-plugin-vpn-vpnc', '', d)}" - -SUMMARY:${PN}-plugin-vpn-l2tp = "A L2TP plugin for ConnMan VPN" -DESCRIPTION:${PN}-plugin-vpn-l2tp = "The ConnMan L2TP plugin uses xl2tpd daemon \ -to create a VPN connection to L2TP server." -FILES:${PN}-plugin-vpn-l2tp += "${libdir}/connman/scripts/libppp-plugin.so* \ - ${libdir}/connman/plugins-vpn/l2tp.so" -RDEPENDS:${PN}-plugin-vpn-l2tp += "${PN}-vpn" -RRECOMMENDS:${PN} += "${@bb.utils.contains('PACKAGECONFIG','l2tp','${PN}-plugin-vpn-l2tp', '', d)}" - -SUMMARY:${PN}-plugin-vpn-pptp = "A PPTP plugin for ConnMan VPN" -DESCRIPTION:${PN}-plugin-vpn-pptp = "The ConnMan PPTP plugin uses pptp-linux client \ -to create a VPN connection to PPTP server." -FILES:${PN}-plugin-vpn-pptp += "${libdir}/connman/scripts/libppp-plugin.so* \ - ${libdir}/connman/plugins-vpn/pptp.so" -RDEPENDS:${PN}-plugin-vpn-pptp += "${PN}-vpn" -RRECOMMENDS:${PN} += "${@bb.utils.contains('PACKAGECONFIG','pptp','${PN}-plugin-vpn-pptp', '', d)}" diff --git a/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman/0001-connman.service-stop-systemd-resolved-when-we-use-co.patch b/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman/0001-connman.service-stop-systemd-resolved-when-we-use-co.patch deleted file mode 100644 index 8e2e0bd02..000000000 --- a/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman/0001-connman.service-stop-systemd-resolved-when-we-use-co.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 9f70b94ebf18f52c115634642652830fa77f27a1 Mon Sep 17 00:00:00 2001 -From: "Maxin B. John" -Date: Mon, 12 Jun 2017 16:52:39 +0300 -Subject: [PATCH] connman.service: stop systemd-resolved when we use connman - -Stop systemd-resolved service when we use connman as network manager. - -Upstream-Status: Inappropriate [configuration] - -Signed-off-by: Maxin B. John ---- - src/connman.service.in | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/connman.service.in b/src/connman.service.in -index 9f5c10f..dab48bc 100644 ---- a/src/connman.service.in -+++ b/src/connman.service.in -@@ -6,6 +6,7 @@ RequiresMountsFor=@localstatedir@/lib/connman - After=dbus.service network-pre.target systemd-sysusers.service - Before=network.target multi-user.target shutdown.target - Wants=network.target -+Conflicts=systemd-resolved.service - - [Service] - Type=dbus --- -2.4.0 - diff --git a/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman/0001-plugin.h-Change-visibility-to-default-for-debug-symb.patch b/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman/0001-plugin.h-Change-visibility-to-default-for-debug-symb.patch deleted file mode 100644 index e6f03e632..000000000 --- a/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman/0001-plugin.h-Change-visibility-to-default-for-debug-symb.patch +++ /dev/null @@ -1,35 +0,0 @@ -From 4ddaf78dad5a9ee4a0658235f71b75132192123e Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Sat, 7 Apr 2012 18:52:12 -0700 -Subject: [PATCH] plugin.h: Change visibility to default for debug symbols - -gold refuses to link in undefined weak symbols which -have hidden visibility - -Signed-off-by: Khem Raj - - -Upstream-Status: Pending ---- - include/plugin.h | 4 ++-- - 1 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/include/plugin.h b/include/plugin.h -index 692a4e5..a9361c3 100644 ---- a/include/plugin.h -+++ b/include/plugin.h -@@ -89,9 +89,9 @@ struct connman_plugin_desc { - #else - #define CONNMAN_PLUGIN_DEFINE(name, description, version, priority, init, exit) \ - extern struct connman_debug_desc __start___debug[] \ -- __attribute__ ((weak, visibility("hidden"))); \ -+ __attribute__ ((weak, visibility("default"))); \ - extern struct connman_debug_desc __stop___debug[] \ -- __attribute__ ((weak, visibility("hidden"))); \ -+ __attribute__ ((weak, visibility("default"))); \ - extern struct connman_plugin_desc connman_plugin_desc \ - __attribute__ ((visibility("default"))); \ - struct connman_plugin_desc connman_plugin_desc = { \ --- -1.7.5.4 - diff --git a/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman/0002-resolve-musl-does-not-implement-res_ninit.patch b/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman/0002-resolve-musl-does-not-implement-res_ninit.patch deleted file mode 100644 index 942b9c97b..000000000 --- a/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman/0002-resolve-musl-does-not-implement-res_ninit.patch +++ /dev/null @@ -1,83 +0,0 @@ -From c7734e1547db967eccf242fe4b9e8a30b9ff141c Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Mon, 6 Apr 2015 23:02:21 -0700 -Subject: [PATCH] resolve: musl does not implement res_ninit - -ported from -http://git.alpinelinux.org/cgit/aports/plain/testing/connman/libresolv.patch - -Upstream-Status: Pending - -Signed-off-by: Khem Raj - ---- - gweb/gresolv.c | 34 +++++++++++++--------------------- - 1 file changed, 13 insertions(+), 21 deletions(-) - -diff --git a/gweb/gresolv.c b/gweb/gresolv.c -index 38a554e..a9e8740 100644 ---- a/gweb/gresolv.c -+++ b/gweb/gresolv.c -@@ -36,6 +36,7 @@ - #include - #include - #include -+#include - - #include "gresolv.h" - -@@ -877,8 +878,6 @@ GResolv *g_resolv_new(int index) - resolv->index = index; - resolv->nameserver_list = NULL; - -- res_ninit(&resolv->res); -- - return resolv; - } - -@@ -918,8 +917,6 @@ void g_resolv_unref(GResolv *resolv) - - flush_nameservers(resolv); - -- res_nclose(&resolv->res); -- - g_free(resolv); - } - -@@ -1022,24 +1019,19 @@ guint g_resolv_lookup_hostname(GResolv *resolv, const char *hostname, - debug(resolv, "hostname %s", hostname); - - if (!resolv->nameserver_list) { -- int i; -- -- for (i = 0; i < resolv->res.nscount; i++) { -- char buf[100]; -- int family = resolv->res.nsaddr_list[i].sin_family; -- void *sa_addr = &resolv->res.nsaddr_list[i].sin_addr; -- -- if (family != AF_INET && -- resolv->res._u._ext.nsaddrs[i]) { -- family = AF_INET6; -- sa_addr = &resolv->res._u._ext.nsaddrs[i]->sin6_addr; -+ FILE *f = fopen("/etc/resolv.conf", "r"); -+ if (f) { -+ char line[256], *s; -+ int i; -+ while (fgets(line, sizeof(line), f)) { -+ if (strncmp(line, "nameserver", 10) || !isspace(line[10])) -+ continue; -+ for (s = &line[11]; isspace(s[0]); s++); -+ for (i = 0; s[i] && !isspace(s[i]); i++); -+ s[i] = 0; -+ g_resolv_add_nameserver(resolv, s, 53, 0); - } -- -- if (family != AF_INET && family != AF_INET6) -- continue; -- -- if (inet_ntop(family, sa_addr, buf, sizeof(buf))) -- g_resolv_add_nameserver(resolv, buf, 53, 0); -+ fclose(f); - } - - if (!resolv->nameserver_list) diff --git a/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman/connman b/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman/connman deleted file mode 100644 index c64fa0d71..000000000 --- a/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman/connman +++ /dev/null @@ -1,83 +0,0 @@ -#!/bin/sh - -DAEMON=/usr/sbin/connmand -PIDFILE=/var/run/connmand.pid -DESC="Connection Manager" - -if [ -f /etc/default/connman ] ; then - . /etc/default/connman -fi - -set -e - -nfsroot=0 - -exec 9<&0 < /proc/mounts -while read dev mtpt fstype rest; do - if test $mtpt = "/" ; then - case $fstype in - nfs | nfs4) - nfsroot=1 - break - ;; - *) - ;; - esac - fi -done - -do_start() { - EXTRA_PARAM="" - if test $nfsroot -eq 1 ; then - NET_DEVS=`cat /proc/net/dev | sed -ne 's/^\([a-zA-Z0-9 ]*\):.*$/\1/p'` - NET_ADDR=`cat /proc/cmdline | sed -ne 's/^.*ip=\([^ :]*\).*$/\1/p'` - - if [ ! -z "$NET_ADDR" ]; then - if [ "$NET_ADDR" = dhcp ]; then - ethn=`ifconfig | grep "^eth" | sed -e "s/\(eth[0-9]\)\(.*\)/\1/"` - if [ ! -z "$ethn" ]; then - EXTRA_PARAM="-I $ethn" - fi - else - for i in $NET_DEVS; do - ADDR=`ifconfig $i | sed 's/addr://g' | sed -ne 's/^.*inet \([0-9.]*\) .*$/\1/p'` - if [ "$NET_ADDR" = "$ADDR" ]; then - EXTRA_PARAM="-I $i" - break - fi - done - fi - fi - fi - if [ -f @DATADIR@/connman/wired-setup ] ; then - . @DATADIR@/connman/wired-setup - fi - $DAEMON $EXTRA_PARAM -} - -do_stop() { - start-stop-daemon --stop --name connmand --quiet -} - -case "$1" in - start) - echo "Starting $DESC" - do_start - ;; - stop) - echo "Stopping $DESC" - do_stop - ;; - restart|force-reload) - echo "Restarting $DESC" - do_stop - sleep 1 - do_start - ;; - *) - echo "Usage: $0 {start|stop|restart|force-reload}" >&2 - exit 1 - ;; -esac - -exit 0 diff --git a/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman/no-version-scripts.patch b/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman/no-version-scripts.patch deleted file mode 100644 index e96e38bcf..000000000 --- a/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman/no-version-scripts.patch +++ /dev/null @@ -1,27 +0,0 @@ -With binutils 2.27 on at least MIPS, connmand will crash on startup. This -appears to be due to the symbol visibilty scripts hiding symbols that stdio -looks up at runtime, resulting in it segfaulting. - -This certainly appears to be a bug in binutils 2.27 although the problem has -been known about for some time: - -https://sourceware.org/bugzilla/show_bug.cgi?id=17908 - -As the version scripts are only used to hide symbols from plugins we can safely -remove the scripts to work around the problem until binutils is fixed. - -Upstream-Status: Inappropriate -Signed-off-by: Ross Burton - -diff --git a/Makefile.am b/Makefile.am -index d70725c..76ae432 100644 ---- a/Makefile.am -+++ b/Makefile.am -@@ -132,2 +132 @@ src_connmand_LDADD = gdbus/libgdbus-internal.la $(builtin_libadd) \ --src_connmand_LDFLAGS = -Wl,--export-dynamic \ -- -Wl,--version-script=$(srcdir)/src/connman.ver -+src_connmand_LDFLAGS = -Wl,--export-dynamic -@@ -166,2 +165 @@ vpn_connman_vpnd_LDADD = gdbus/libgdbus-internal.la $(builtin_vpn_libadd) \ --vpn_connman_vpnd_LDFLAGS = -Wl,--export-dynamic \ -- -Wl,--version-script=$(srcdir)/vpn/vpn.ver -+vpn_connman_vpnd_LDFLAGS = -Wl,--export-dynamic diff --git a/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman_1.39.bb b/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman_1.39.bb deleted file mode 100644 index 9fabe2bbc..000000000 --- a/meta-webos-backports/meta-webos-backports-3.2/recipes-connectivity/connman/connman_1.39.bb +++ /dev/null @@ -1,15 +0,0 @@ -require connman.inc - -SRC_URI = "${KERNELORG_MIRROR}/linux/network/${BPN}/${BP}.tar.xz \ - file://0001-plugin.h-Change-visibility-to-default-for-debug-symb.patch \ - file://0001-connman.service-stop-systemd-resolved-when-we-use-co.patch \ - file://connman \ - file://no-version-scripts.patch \ - " - -SRC_URI:append:libc-musl = " file://0002-resolve-musl-does-not-implement-res_ninit.patch" - -SRC_URI[sha256sum] = "9f62a7169b7491c670a1ff2e335b0d966308fb2f62e285c781105eb90f181af3" - -RRECOMMENDS:${PN} = "connman-conf" -RCONFLICTS:${PN} = "networkmanager" diff --git a/meta-webos-backports/meta-webos-backports-3.2/recipes-devtools/guilder/guider_3.9.7.bb b/meta-webos-backports/meta-webos-backports-3.2/recipes-devtools/guilder/guider_3.9.7.bb deleted file mode 100644 index 1d8eb0043..000000000 --- a/meta-webos-backports/meta-webos-backports-3.2/recipes-devtools/guilder/guider_3.9.7.bb +++ /dev/null @@ -1,22 +0,0 @@ -# backported as-is from: -# https://git.openembedded.org/meta-openembedded/commit/?id=93c9a20bf358bc10c2d99fc1d3c7247145344c29 - -SUMMARY = "runtime performance analyzer" -HOMEPAGE = "https://github.com/iipeace/guider" -BUGTRACKER = "https://github.com/iipeace/guider/issues" -AUTHOR = "Peace Lee " - -LICENSE = "GPL-2.0-or-later" -LIC_FILES_CHKSUM = "file://LICENSE;md5=2c1c00f9d3ed9e24fa69b932b7e7aff2" - -PV = "3.9.7+git${SRCPV}" - -SRC_URI = "git://github.com/iipeace/${BPN};branch=master;protocol=https" -SRCREV = "459b5189a46023fc98e19888b196bdc2674022fd" - -S = "${WORKDIR}/git" - -inherit setuptools3 - -RDEPENDS:${PN} = "python3 python3-core \ - python3-ctypes python3-shell python3-json" diff --git a/meta-webos-backports/meta-webos-backports-3.2/recipes-graphics/leptonica/leptonica_1.80.0.bb b/meta-webos-backports/meta-webos-backports-3.2/recipes-graphics/leptonica/leptonica_1.80.0.bb deleted file mode 100644 index a861bba5b..000000000 --- a/meta-webos-backports/meta-webos-backports-3.2/recipes-graphics/leptonica/leptonica_1.80.0.bb +++ /dev/null @@ -1,20 +0,0 @@ -DESCRIPTION = "A pedagogically-oriented open source site containing software that is broadly useful for image processing and image analysis applications" -DEPENDS = "jpeg tiff libpng zlib" -LICENSE = "BSD-2-Clause" -LIC_FILES_CHKSUM = "file://leptonica-license.txt;md5=809b282cea2df68975fbe0ffe02b560f" - -UPSTREAM_CHECK_URI = "https://github.com/DanBloomberg/leptonica/releases" - -SRC_URI = "http://www.leptonica.org/source/leptonica-${PV}.tar.gz" -SRC_URI[md5sum] = "d640d684234442a84c9e8902f0b3ff36" -SRC_URI[sha256sum] = "ec9c46c2aefbb960fb6a6b7f800fe39de48343437b6ce08e30a8d9688ed14ba4" - -EXTRA_OECONF += " \ - --without-libwebp \ -" - -PACKAGECONFIG ??= "giflib" -PACKAGECONFIG[openjpeg] = "--with-libopenjpeg,--without-libopenjpeg,openjpeg" -PACKAGECONFIG[giflib] = "--with-giflib,--without-giflib,giflib" - -inherit autotools pkgconfig diff --git a/meta-webos/conf/layer.conf b/meta-webos/conf/layer.conf index e7cdf17cc..132fa278b 100644 --- a/meta-webos/conf/layer.conf +++ b/meta-webos/conf/layer.conf @@ -20,7 +20,6 @@ LAYERDEPENDS_meta-webos = " \ networking-layer \ multimedia-layer \ meta-python \ - meta-webos-backports-3.2 \ meta-webos-backports-3.3 \ meta-webos-backports-3.4 \ meta-webos-backports-4.0 \ From 65def940525831b5966982a5abdc9113afe46b44 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 11 May 2020 12:00:19 -0700 Subject: [PATCH 0544/2022] glib-2.0: Drop 0002-gdbus-codegen-also-replace-character-with-underscore.patch :Release Notes: Resolved in 2.63.1 release with: https://github.com/GNOME/glib/commit/4aaeac5b3c6d84820d45497cdfc0cdfe1aaed5de :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth Change-Id: Ibad2f879e49df8b2a7c8e980cde0eca40875c40d --- ...so-replace-character-with-underscore.patch | 31 ------------------- .../recipes-core/glib-2.0/glib-2.0_%.bbappend | 6 ---- 2 files changed, 37 deletions(-) delete mode 100644 meta-webos/recipes-core/glib-2.0/glib-2.0/0002-gdbus-codegen-also-replace-character-with-underscore.patch diff --git a/meta-webos/recipes-core/glib-2.0/glib-2.0/0002-gdbus-codegen-also-replace-character-with-underscore.patch b/meta-webos/recipes-core/glib-2.0/glib-2.0/0002-gdbus-codegen-also-replace-character-with-underscore.patch deleted file mode 100644 index 7f924297b..000000000 --- a/meta-webos/recipes-core/glib-2.0/glib-2.0/0002-gdbus-codegen-also-replace-character-with-underscore.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 91f557a7e5e7bb2ac61331f158ca08a4abeecfa8 Mon Sep 17 00:00:00 2001 -From: Simon Busch -Date: Fri, 21 Nov 2014 15:46:21 +0100 -Subject: [PATCH] gdbus-codegen: replace all non alpha characters with an - underscore - -We need to replace all non alpha characters in the header guard name -to avoid breaking the build when the build path includes not allowed -characters. - -Upstream-Status: pending ---- - gio/gdbus-2.0/codegen/codegen.py | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/gio/gdbus-2.0/codegen/codegen.py b/gio/gdbus-2.0/codegen/codegen.py -index e74131cdb..9e5b8fd95 100644 ---- a/gio/gdbus-2.0/codegen/codegen.py -+++ b/gio/gdbus-2.0/codegen/codegen.py -@@ -59,7 +59,7 @@ class HeaderCodeGenerator: - self.namespace, self.ns_upper, self.ns_lower = generate_namespace(namespace) - self.generate_objmanager = generate_objmanager - self.generate_autocleanup = generate_autocleanup -- self.header_guard = header_name.upper().replace('.', '_').replace('-', '_').replace('/', '_').replace(':', '_') -+ self.header_guard = "".join([c if c.isalpha() else "_" for c in header_name.upper()]) - self.input_files_basenames = input_files_basenames - self.use_pragma = use_pragma - self.outfile = outfile --- -2.17.1 - diff --git a/meta-webos/recipes-core/glib-2.0/glib-2.0_%.bbappend b/meta-webos/recipes-core/glib-2.0/glib-2.0_%.bbappend index 21e47d7db..a62f12023 100644 --- a/meta-webos/recipes-core/glib-2.0/glib-2.0_%.bbappend +++ b/meta-webos/recipes-core/glib-2.0/glib-2.0_%.bbappend @@ -3,12 +3,6 @@ PKGV .= "-0webos4" EXTENDPRAUTO:append = "webos4" -FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" - -SRC_URI += " \ - file://0002-gdbus-codegen-also-replace-character-with-underscore.patch \ -" - # We need to revert changes from # http://lists.openembedded.org/pipermail/openembedded-core/2018-October/156510.html # because as described in: From 7091cf84d799d1a297e86b078d125a4c45415e27 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 15 May 2020 07:03:20 -0700 Subject: [PATCH 0545/2022] meta-webos-virtualization: hyperstart: ignore stringop-truncation issue for now :Release Notes: :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth Change-Id: I81cf690cf020cf4c4ef1f8f6a13706e9b56e2e64 --- .../recipes-extended/hyperstart/hyperstart_git.bbappend | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 meta-webos-virtualization/recipes-extended/hyperstart/hyperstart_git.bbappend diff --git a/meta-webos-virtualization/recipes-extended/hyperstart/hyperstart_git.bbappend b/meta-webos-virtualization/recipes-extended/hyperstart/hyperstart_git.bbappend new file mode 100644 index 000000000..48d71e466 --- /dev/null +++ b/meta-webos-virtualization/recipes-extended/hyperstart/hyperstart_git.bbappend @@ -0,0 +1,2 @@ +# hyperstart/v0.2+gitAUTOINC+15bb718ad3-r0/recipe-sysroot/usr/include/bits/string_fortified.h:106:10: error: '__builtin_strncpy' output truncated before terminating nul copying as many bytes from a string as its length [-Werror=stringop-truncation] +CFLAGS += "-Wno-error=stringop-truncation" From 84c4012a5fa6043d228d88c8cdda9a9fe4dec186 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 18 Jun 2020 16:21:53 -0700 Subject: [PATCH 0546/2022] rt-tests, ettercap, igt-gpu-tools, iptables, fuse3, sshfs-fuse, expat, bzip2, libssh2: fix build-deps QA issue with bash :Release Notes: :Detailed Notes: ERROR: iptables-1.8.5-r0 do_package_qa: QA Issue: iptables-apply rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] added in oe-core commit: 9a2386443a iptables: split iptables-apply to its own package ERROR: igt-gpu-tools-1.25+gitAUTOINC+d16ad07e7f-r0 do_package_qa: QA Issue: igt-gpu-tools rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] ERROR: igt-gpu-tools-1.25+gitAUTOINC+d16ad07e7f-r0 do_package_qa: QA Issue: igt-gpu-tools-tests rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] ERROR: igt-gpu-tools-1.25+gitAUTOINC+d16ad07e7f-r0 do_package_qa: QA run found fatal errors. Please consider fixing them. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth Change-Id: If7b7c1b92dcc5ae119414a38869b0548820ca747 --- meta-webos/recipes-core/expat/expat_%.bbappend | 8 ++++++++ meta-webos/recipes-extended/bzip2/bzip2_%.bbappend | 8 ++++++++ meta-webos/recipes-extended/iptables/iptables_%.bbappend | 7 +++++++ .../recipes-filesystems/sshfs-fuse/sshfs-fuse_%.bbappend | 8 ++++++++ .../igt-gpu-tools/igt-gpu-tools_git.bbappend | 9 +++++++++ meta-webos/recipes-rt/rt-tests/rt-tests_%.bbappend | 8 ++++++++ meta-webos/recipes-support/ettercap/ettercap_%.bbappend | 8 ++++++++ meta-webos/recipes-support/fuse/fuse3_%.bbappend | 8 ++++++++ meta-webos/recipes-support/libssh2/libssh2_%.bbappend | 7 +++++++ 9 files changed, 71 insertions(+) create mode 100644 meta-webos/recipes-core/expat/expat_%.bbappend create mode 100644 meta-webos/recipes-extended/bzip2/bzip2_%.bbappend create mode 100644 meta-webos/recipes-extended/iptables/iptables_%.bbappend create mode 100644 meta-webos/recipes-filesystems/sshfs-fuse/sshfs-fuse_%.bbappend create mode 100644 meta-webos/recipes-graphics/igt-gpu-tools/igt-gpu-tools_git.bbappend create mode 100644 meta-webos/recipes-rt/rt-tests/rt-tests_%.bbappend create mode 100644 meta-webos/recipes-support/ettercap/ettercap_%.bbappend create mode 100644 meta-webos/recipes-support/fuse/fuse3_%.bbappend create mode 100644 meta-webos/recipes-support/libssh2/libssh2_%.bbappend diff --git a/meta-webos/recipes-core/expat/expat_%.bbappend b/meta-webos/recipes-core/expat/expat_%.bbappend new file mode 100644 index 000000000..fcd3447cd --- /dev/null +++ b/meta-webos/recipes-core/expat/expat_%.bbappend @@ -0,0 +1,8 @@ +# Copyright (c) 2020-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +VIRTUAL-RUNTIME_bash ?= "bash" +# ERROR: expat-2.2.9-r0 do_package_qa: QA Issue: /usr/lib/expat/ptest/run-ptest contained in package expat-ptest requires /bin/bash, but no providers found in RDEPENDS:expat-ptest? [file-rdeps] +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-extended/bzip2/bzip2_%.bbappend b/meta-webos/recipes-extended/bzip2/bzip2_%.bbappend new file mode 100644 index 000000000..2b8c7a766 --- /dev/null +++ b/meta-webos/recipes-extended/bzip2/bzip2_%.bbappend @@ -0,0 +1,8 @@ +# Copyright (c) 2020-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +VIRTUAL-RUNTIME_bash ?= "bash" +# ERROR: bzip2-1.0.8-r0 do_package_qa: QA Issue: bzip2-ptest rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-extended/iptables/iptables_%.bbappend b/meta-webos/recipes-extended/iptables/iptables_%.bbappend new file mode 100644 index 000000000..8c1c05125 --- /dev/null +++ b/meta-webos/recipes-extended/iptables/iptables_%.bbappend @@ -0,0 +1,7 @@ +# Copyright (c) 2020-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +VIRTUAL-RUNTIME_bash ?= "bash" +RDEPENDS:${PN}-apply:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-apply:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-filesystems/sshfs-fuse/sshfs-fuse_%.bbappend b/meta-webos/recipes-filesystems/sshfs-fuse/sshfs-fuse_%.bbappend new file mode 100644 index 000000000..72162c2bc --- /dev/null +++ b/meta-webos/recipes-filesystems/sshfs-fuse/sshfs-fuse_%.bbappend @@ -0,0 +1,8 @@ +# Copyright (c) 2020-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +VIRTUAL-RUNTIME_bash ?= "bash" +# ERROR: sshfs-fuse-3.7.0-r0 do_package_qa: QA Issue: sshfs-fuse-ptest rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-graphics/igt-gpu-tools/igt-gpu-tools_git.bbappend b/meta-webos/recipes-graphics/igt-gpu-tools/igt-gpu-tools_git.bbappend new file mode 100644 index 000000000..f25ae2ba0 --- /dev/null +++ b/meta-webos/recipes-graphics/igt-gpu-tools/igt-gpu-tools_git.bbappend @@ -0,0 +1,9 @@ +# Copyright (c) 2020-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +VIRTUAL-RUNTIME_bash ?= "bash" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-tests:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-tests:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-rt/rt-tests/rt-tests_%.bbappend b/meta-webos/recipes-rt/rt-tests/rt-tests_%.bbappend new file mode 100644 index 000000000..e748fb450 --- /dev/null +++ b/meta-webos/recipes-rt/rt-tests/rt-tests_%.bbappend @@ -0,0 +1,8 @@ +# Copyright (c) 2020-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +# ERROR: rt-tests-1_1.9-r0 do_package_qa: QA Issue: rt-tests rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] +VIRTUAL-RUNTIME_bash ?= "bash" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/ettercap/ettercap_%.bbappend b/meta-webos/recipes-support/ettercap/ettercap_%.bbappend new file mode 100644 index 000000000..558dbc215 --- /dev/null +++ b/meta-webos/recipes-support/ettercap/ettercap_%.bbappend @@ -0,0 +1,8 @@ +# Copyright (c) 2020-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +VIRTUAL-RUNTIME_bash ?= "bash" +# ERROR: ettercap-0.8.3.1-r0 do_package_qa: QA Issue: ettercap rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/fuse/fuse3_%.bbappend b/meta-webos/recipes-support/fuse/fuse3_%.bbappend new file mode 100644 index 000000000..b78ec0c31 --- /dev/null +++ b/meta-webos/recipes-support/fuse/fuse3_%.bbappend @@ -0,0 +1,8 @@ +# Copyright (c) 2020-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +VIRTUAL-RUNTIME_bash ?= "bash" +# ERROR: fuse3-3.9.2-r0 do_package_qa: QA Issue: fuse3-ptest rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/libssh2/libssh2_%.bbappend b/meta-webos/recipes-support/libssh2/libssh2_%.bbappend new file mode 100644 index 000000000..1ea16a3ff --- /dev/null +++ b/meta-webos/recipes-support/libssh2/libssh2_%.bbappend @@ -0,0 +1,7 @@ +# Copyright (c) 2020-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +VIRTUAL-RUNTIME_bash ?= "bash" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" From a899ac7a79cb08925efd8484e76a8e263bd4a3fe Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 17 Aug 2020 05:08:47 -0700 Subject: [PATCH 0547/2022] build-compare: drop bbappend :Release Notes: :Detailed Notes: Recipe was dropped from oe-core in: commit d6eb93d7c5c9bb1891527581eb0675c3aee271f6 Author: Richard Purdie Date: Tue Aug 11 21:55:02 2020 +0100 build-compare: Drop recipe If we no longer have the packagefeed-stability class, we no longer need need build-compare as it was the only user of it. Therefore drop the recipe too. Signed-off-by: Richard Purdie :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth Change-Id: I7293bd6dcf8b454b95305e4dbcae69522fc513e8 --- .../build-compare/build-compare_%.bbappend | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 meta-webos/recipes-devtools/build-compare/build-compare_%.bbappend diff --git a/meta-webos/recipes-devtools/build-compare/build-compare_%.bbappend b/meta-webos/recipes-devtools/build-compare/build-compare_%.bbappend deleted file mode 100644 index eecdbf911..000000000 --- a/meta-webos/recipes-devtools/build-compare/build-compare_%.bbappend +++ /dev/null @@ -1,7 +0,0 @@ -# Copyright (c) 2017-2022 LG Electronics, Inc. - -EXTENDPRAUTO:append = "webos1" - -VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" From 328bfd15acbade996ce67d8da5d6df4919ac8f4a Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 20 Aug 2020 11:42:29 -0700 Subject: [PATCH 0548/2022] webos: PNBLACKLIST: update for Yocto 3.2 Gatesgarth :Release Notes: man-db dependency was added to libssh2 in: https://git.openembedded.org/meta-openembedded/commit/?id=b3e9b51c9ba58b01e55c5b0a9a9bec3f7f06d07a :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth Change-Id: I328432e95d5b8f1dc65c3180aff720a8b9aebce3 --- meta-webos/conf/distro/include/webos-recipe-blacklist.inc | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/meta-webos/conf/distro/include/webos-recipe-blacklist.inc b/meta-webos/conf/distro/include/webos-recipe-blacklist.inc index 700154946..f1ce29592 100644 --- a/meta-webos/conf/distro/include/webos-recipe-blacklist.inc +++ b/meta-webos/conf/distro/include/webos-recipe-blacklist.inc @@ -52,6 +52,10 @@ PNBLACKLIST[man-db] ?= "BROKEN: without --disable-cache-owner: chown: invalid us # meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb PNBLACKLIST[packagegroup-meta-oe] ?= "depends on blacklisted libsmi, phonet-utils, gradm, scsirastools, tomoyo-tools, s-suite, .." +# meta-oe/recipes-support/libssh2/libssh2_1.9.0.bb +PNBLACKLIST[libssh2] ?= "Depends on blacklisted man-db since https://git.openembedded.org/meta-openembedded/commit/?id=b3e9b51c9ba58b01e55c5b0a9a9bec3f7f06d07a" +# meta-oe/recipes-support/libgit2/libgit2_1.0.1.bb +PNBLACKLIST[libgit2] ?= "Depends on blacklisted libssh2 which depends on blacklisted man-db since https://git.openembedded.org/meta-openembedded/commit/?id=b3e9b51c9ba58b01e55c5b0a9a9bec3f7f06d07a" # meta-oe/recipes-benchmark/s-suite/s-suite_git.bb PNBLACKLIST[s-suite] ?= "rdepends on blacklisted sysstat" @@ -162,5 +166,8 @@ PNBLACKLIST[xen-python2] ?= "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold # meta-virtualization/recipes-extended/xen/xen_git.bb PNBLACKLIST[xen] ?= "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', 'Depends on blacklisted xen-tools', '', d)}" +# meta-oe/meta-multimedia/recipes-multimedia/packagegroups/packagegroup-meta-multimedia.bb +PNBLACKLIST[packagegroup-meta-multimedia] ?= "ERROR: depends on x265 without respecting LICENSE_FLAGS, fixed in kirkstone https://lists.openembedded.org/g/openembedded-devel/message/94141" + # meta-openembedded/meta-oe/recipes-multimedia/pipewire/pipewire_git.bb PNBLACKLIST[pipewire] ?= "Doesn't like our old pulseaudio from meta-webos: meson.build:234:2: ERROR: Invalid version of dependency, need 'libpulse' ['>= 11.1'] found '9.0-14-gdf81'." From 1db1cd3b05695626d4d2110ff90ad9f3ba256133 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 28 Aug 2020 17:03:28 -0700 Subject: [PATCH 0549/2022] webos.inc: update DEFAULT_WARN_QA :Release Notes: :Detailed Notes: Add mime mime-xdg unlisted-pkg-lics unhandled-features-check to ERROR_QA (this is now included in dunfell as well since: https://git.openembedded.org/openembedded-core/commit/?h=dunfell&id=0845f6b09716d927c586be5be878d08fa53b31d1 Default ERROR_QA now contains more entries from WARN_QA since: https://git.openembedded.org/openembedded-core/commit/meta/classes/insane.bbclass?id=a6a3a4a3739df3ab867fbe7e5a8cb5cac5ee124a :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth Change-Id: Ifc47a2813526258c74c1de67c825a40894448bde --- meta-webos/conf/distro/include/webos.inc | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/meta-webos/conf/distro/include/webos.inc b/meta-webos/conf/distro/include/webos.inc index c739895dc..0316b0b52 100644 --- a/meta-webos/conf/distro/include/webos.inc +++ b/meta-webos/conf/distro/include/webos.inc @@ -289,11 +289,9 @@ ERROR_QA:append = " webos-enh-sub-error acg-dirty acg-json ${WEBOS_ERROR_QA_AUTO ERROR_QA:remove = " version-going-backwards" # Move all default WARN_QA from insane.bbclass to ERROR_QA to prevent silently re-introducing these issues DEFAULT_WARN_QA = "\ - ldflags useless-rpaths rpaths staticdev libdir xorg-driver-abi \ - textrel already-stripped incompatible-license files-invalid \ - installed-vs-shipped compile-host-path install-host-path \ - pn-overrides infodir build-deps src-uri-bad \ - unknown-configure-option symlink-to-sysroot multilib \ + libdir xorg-driver-abi \ + textrel incompatible-license files-invalid \ + infodir build-deps src-uri-bad symlink-to-sysroot multilib \ invalid-packageconfig host-user-contaminated uppercase-pn patch-fuzz \ mime mime-xdg unlisted-pkg-lics unhandled-features-check \ missing-update-alternatives \ From ff4e0591dfd85eedcb3db66248908c08c1865ce4 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 31 Aug 2020 09:54:00 -0700 Subject: [PATCH 0550/2022] webos.inc: don't add qemu-config to DISTRO_EXTRA_RDEPENDS :Release Notes: :Detailed Notes: It was provided by packagegroup-core-device-devel before: meta/recipes-devtools/packagegroups/packagegroup-core-device-devel.bb:RPROVIDES_${PN} = "qemu-config" meta/recipes-devtools/packagegroups/packagegroup-core-device-devel.bb:RREPLACES_${PN} = "qemu-config" meta/recipes-devtools/packagegroups/packagegroup-core-device-devel.bb:RCONFLICTS_${PN} = "qemu-config" But that recipe was removed in: commit 910e26321f6d7583ae68dafafffe2040ca9cfa70 Author: Alexander Kanavin Date: Thu Aug 27 12:59:30 2020 +0200 packagegroup-core-device-devel: remove The purpose and content of the group is not clear; the only consumer (poky distro) is no longer using it. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth Change-Id: I3b9c5a578ada5d2c3d7a97f07793b8fb309fc2f5 --- meta-webos/conf/distro/include/webos.inc | 4 ---- 1 file changed, 4 deletions(-) diff --git a/meta-webos/conf/distro/include/webos.inc b/meta-webos/conf/distro/include/webos.inc index 0316b0b52..37fbc59b0 100644 --- a/meta-webos/conf/distro/include/webos.inc +++ b/meta-webos/conf/distro/include/webos.inc @@ -193,10 +193,6 @@ WEBOS_DEFAULT_EXTRA_RRECOMMENDS = "" DISTRO_EXTRA_RDEPENDS += " ${WEBOS_DEFAULT_EXTRA_RDEPENDS}" DISTRO_EXTRA_RRECOMMENDS += " ${WEBOS_DEFAULT_EXTRA_RRECOMMENDS}" -WEBOSQEMUDEPS = "${@bb.utils.contains("INCOMPATIBLE_LICENSE", "GPLv3", "", "qemu-config",d)}" -DISTRO_EXTRA_RDEPENDS:append:qemuarm = " ${WEBOSQEMUDEPS}" -DISTRO_EXTRA_RDEPENDS:append:qemux86 = " ${WEBOSQEMUDEPS}" - # Undo: # https://git.openembedded.org/openembedded-core/commit/?id=a98188e83b2c027d99cc38e3367e1ec2a98efbb0 # https://git.openembedded.org/openembedded-core/commit/?h=dunfell&id=93796b2787c410385d3176495e5307327449d2f7 From f925637904cd56a7261ad839a44476f4be1f45d5 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 8 Jun 2020 17:00:15 -0700 Subject: [PATCH 0551/2022] webos-preferred-providers.inc: adjust to multilib changes from oe-core :Release Notes: :Detailed Notes: Since https://git.openembedded.org/openembedded-core/commit/?id=b3fda056a674889cd9697e779de023d4f993d3ce we need few more MLPREFIX uses in metadata :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth Change-Id: I925b20daa9fbb16d978a7896d7634e5b2526d063 --- meta-webos/conf/distro/include/webos-preferred-providers.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/conf/distro/include/webos-preferred-providers.inc b/meta-webos/conf/distro/include/webos-preferred-providers.inc index 810076a18..a203b5797 100644 --- a/meta-webos/conf/distro/include/webos-preferred-providers.inc +++ b/meta-webos/conf/distro/include/webos-preferred-providers.inc @@ -10,8 +10,8 @@ PREFERRED_PROVIDER_virtual/webruntime = "webruntime" VIRTUAL-RUNTIME_webruntime = "webruntime" WEBOS_PREFERRED_PROVIDER_FOR_BASH = "busybox" -PREFERRED_PROVIDER_bash = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'busybox', 'bash', d)}" -VIRTUAL-RUNTIME_bash = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'busybox', 'bash', d)}" +PREFERRED_PROVIDER_bash = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', '${MLPREFIX}busybox', '${MLPREFIX}bash', d)}" +VIRTUAL-RUNTIME_bash = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', '${MLPREFIX}busybox', '${MLPREFIX}bash', d)}" # Use the busybox Tar instead of GNU Tar WEBOS_PREFERRED_PROVIDER_FOR_TAR = "busybox" From 3061ecd9f7de50a4803fe12710c468c965d2e500 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 2 Sep 2020 14:44:40 -0700 Subject: [PATCH 0552/2022] dhcp: remove bbappend :Release Notes: :Detailed Notes: dhcp recipe was removed from oe-core in: https://git.openembedded.org/openembedded-core/commit/?id=7e3357892f204788162747e907d68f857118cf42 dhclient was replaced with dhcpcd and dhcpd with kea We don't use upstart anymore, so it wasn't needed anyway. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth Change-Id: I8d280ce4c647c87caee186a2ff13296ba54a2720 --- .../dhcp/dhcp/dhclient.conf.upstart | 31 ------------------- .../recipes-connectivity/dhcp/dhcp_%.bbappend | 27 ---------------- .../recipes-core/dropbear/dropbear_%.bbappend | 2 +- .../packagegroup-webos-extended.bb | 4 +-- 4 files changed, 3 insertions(+), 61 deletions(-) delete mode 100644 meta-webos/recipes-connectivity/dhcp/dhcp/dhclient.conf.upstart delete mode 100644 meta-webos/recipes-connectivity/dhcp/dhcp_%.bbappend diff --git a/meta-webos/recipes-connectivity/dhcp/dhcp/dhclient.conf.upstart b/meta-webos/recipes-connectivity/dhcp/dhcp/dhclient.conf.upstart deleted file mode 100644 index 4849555e9..000000000 --- a/meta-webos/recipes-connectivity/dhcp/dhcp/dhclient.conf.upstart +++ /dev/null @@ -1,31 +0,0 @@ -# @@@LICENSE -# -# Copyright (c) 2013-2015 LG Electronics, Inc. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# LICENSE@@@ - -description "DHCP client" - -start on stopped networking - -# Comment this line out to suppress logs on the console -#console output - -script - if grep -qs VirtualBox /proc/bus/input/devices; then - /sbin/dhclient eth0 || true - /sbin/dhclient eth1 || true - fi -end script diff --git a/meta-webos/recipes-connectivity/dhcp/dhcp_%.bbappend b/meta-webos/recipes-connectivity/dhcp/dhcp_%.bbappend deleted file mode 100644 index 3330b62ff..000000000 --- a/meta-webos/recipes-connectivity/dhcp/dhcp_%.bbappend +++ /dev/null @@ -1,27 +0,0 @@ -# Copyright (c) 2012-2022 LG Electronics, Inc. - -inherit webos_machine_impl_dep - -EXTENDPRAUTO:append = "webos6" - -FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" - -SRC_URI += "file://dhclient.conf.upstart" - -# Add dhclient upstart script -# (script should be configured to only run dhclient when needed) - -do_install:append () { - install -d ${D}${sysconfdir}/init - install -m 0644 ${WORKDIR}/dhclient.conf.upstart ${D}${sysconfdir}/init/dhclient.conf -} - -FILES:${PN}-client += "${sysconfdir}/init/dhclient.conf" - -do_install:append:emulator() { - # Start dhclient (and dropbear) as early as possible - # in emulator to make boot-time debugging easier. - sed -i 's/^start on stopped networking$/start on started bootmisc/g' ${D}${sysconfdir}/init/dhclient.conf -} - - diff --git a/meta-webos/recipes-core/dropbear/dropbear_%.bbappend b/meta-webos/recipes-core/dropbear/dropbear_%.bbappend index 56af9b6c6..a8e466614 100644 --- a/meta-webos/recipes-core/dropbear/dropbear_%.bbappend +++ b/meta-webos/recipes-core/dropbear/dropbear_%.bbappend @@ -27,6 +27,6 @@ do_install:append() { # Remove runtime dependency on separate dropbear-upstart package with Upstart 0.3 job file. RDEPENDS:${PN} = "" -RDEPENDS:${PN}:emulator = "dhcp-client" +RDEPENDS:${PN}:emulator = "dhcpcd" FILES:${PN} += "${base_libdir}" diff --git a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb index 79191ab07..21cbd8bd4 100644 --- a/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb +++ b/meta-webos/recipes-core/packagegroups/packagegroup-webos-extended.bb @@ -343,7 +343,7 @@ RDEPENDS:${PN}:append:qemux86 = " \ com.webos.service.mediaindexer \ com.webos.service.power2 \ com.webos.service.storageaccess \ - dhcp-client \ + dhcpcd \ ofono \ v4l-utils \ vmwgfx-layout \ @@ -357,7 +357,7 @@ RDEPENDS:${PN}:append:qemux86-64 = " \ com.webos.service.mediaindexer \ com.webos.service.power2 \ com.webos.service.storageaccess \ - dhcp-client \ + dhcpcd \ ofono \ v4l-utils \ vmwgfx-layout \ From 686165c3b89a87d618f14691c20ca7eee93db032 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 7 Sep 2020 06:49:41 -0700 Subject: [PATCH 0553/2022] webos.inc: python3-{yarl,gevent}: don't use -Werror=return-type :Release Notes: :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth Change-Id: Id46e8a315bb2959eafc83d37145ded5407985924 --- meta-webos/conf/distro/include/webos.inc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/meta-webos/conf/distro/include/webos.inc b/meta-webos/conf/distro/include/webos.inc index 37fbc59b0..1b793b58f 100644 --- a/meta-webos/conf/distro/include/webos.inc +++ b/meta-webos/conf/distro/include/webos.inc @@ -65,6 +65,9 @@ EXTRA_WEBOS_WERROR:pn-webruntime = "" EXTRA_WEBOS_WERROR:pn-ntop = "" # ERROR: python3-twofish-0.3.0-r0 do_compile: Function failed: do_compile: twofish.c:45:1: error: control reaches end of non-void function [-Werror=return-type] EXTRA_WEBOS_WERROR:pn-python3-twofish = "" +# python3-gevent/20.6.2-r0/gevent-20.6.2/deps/libev/ev_iouring.c:227:1: error: no return statement in function returning non-void [-Werror=return-type] +# python3-gevent/20.6.2-r0/gevent-20.6.2/deps/libev/ev_iouring.c:261:1: error: no return statement in function returning non-void [-Werror=return-type] +EXTRA_WEBOS_WERROR:pn-python3-gevent = "" # ERROR: live555-20190828-r0 do_compile: oe_runmake failed: MPEG2TransportStreamParser.cpp:302:1: error: control reaches end of non-void function [-Werror=return-type] EXTRA_WEBOS_WERROR:pn-live555 = "" # ERROR: hdf5-1.8.21-r0 do_compile: hdf5/1.8.21-r0/hdf5-1.8.21/c++/src/H5Location.cpp:258:34: error: control reaches end of non-void function [-Werror=return-type] @@ -73,6 +76,8 @@ EXTRA_WEBOS_WERROR:pn-hdf5 = "" EXTRA_WEBOS_WERROR:pn-libev = "" # temporarily until https://lists.openembedded.org/g/openembedded-devel/message/85109 is resolved: git/meson.build:26:4: ERROR: C library 'argp' not found EXTRA_WEBOS_WERROR:pn-zchunk = "" +# ERROR: python3-yarl-1.6.2-r0 do_compile: 'python3 setup.py build ' execution failed.; yarl/_quoting_c.c:10703:1: error: control reaches end of non-void function [-Werror=return-type] +EXTRA_WEBOS_WERROR:pn-python3-yarl = "" TARGET_CC_ARCH:append = " ${EXTRA_WEBOS_WERROR}" From 58c6482498de6f1a1477ea3f32c891a02fbdeb51 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 17 Sep 2020 14:48:04 -0700 Subject: [PATCH 0554/2022] mesa: update patch to apply on 20.1.6 version :Release Notes: :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth Change-Id: I3b9d514317b73408918d5c28e300dfc718d8ebf2 --- ...ement-drm_create_linear_prime_buffer.patch | 28 +++++++++---------- .../recipes-graphics/mesa/mesa_%.bbappend | 6 ---- 2 files changed, 14 insertions(+), 20 deletions(-) diff --git a/meta-webos-raspberrypi/recipes-graphics/mesa/mesa/0001-implement-drm_create_linear_prime_buffer.patch b/meta-webos-raspberrypi/recipes-graphics/mesa/mesa/0001-implement-drm_create_linear_prime_buffer.patch index 6b7db029f..c7f84075f 100644 --- a/meta-webos-raspberrypi/recipes-graphics/mesa/mesa/0001-implement-drm_create_linear_prime_buffer.patch +++ b/meta-webos-raspberrypi/recipes-graphics/mesa/mesa/0001-implement-drm_create_linear_prime_buffer.patch @@ -1,4 +1,4 @@ -From 31325f0eae04f9260f103ac4f1e52e0b4318dd83 Mon Sep 17 00:00:00 2001 +From 04404c2a1195fa9acd4ace855bcdee0da61c8413 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 7 Feb 2020 07:10:42 -0800 Subject: [PATCH] implement drm_create_linear_prime_buffer @@ -32,10 +32,10 @@ index e40106575c0..6e0ac60cd18 100644 int *strides, int *offsets, void *loaderPrivate); diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c -index 4c0e53ed57e..d52d7d8ddee 100644 +index 00d11b292e4..bf45b9f2f8a 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c -@@ -3099,7 +3099,7 @@ dri2_destroy_image_khr(_EGLDriver *drv, _EGLDisplay *disp, _EGLImage *image) +@@ -3160,7 +3160,7 @@ dri2_destroy_image_khr(_EGLDriver *drv, _EGLDisplay *disp, _EGLImage *image) static void dri2_wl_reference_buffer(void *user_data, uint32_t name, int fd, @@ -44,7 +44,7 @@ index 4c0e53ed57e..d52d7d8ddee 100644 { _EGLDisplay *disp = user_data; struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); -@@ -3120,6 +3120,7 @@ dri2_wl_reference_buffer(void *user_data, uint32_t name, int fd, +@@ -3181,6 +3181,7 @@ dri2_wl_reference_buffer(void *user_data, uint32_t name, int fd, buffer->width, buffer->height, buffer->format, @@ -53,10 +53,10 @@ index 4c0e53ed57e..d52d7d8ddee 100644 buffer->stride, buffer->offset, diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c -index da90c44d601..effecc3d98b 100644 +index 6f90fd46688..3cd3c845717 100644 --- a/src/egl/drivers/dri2/platform_android.c +++ b/src/egl/drivers/dri2/platform_android.c -@@ -626,6 +626,7 @@ get_back_bo(struct dri2_egl_surface *dri2_surf) +@@ -631,6 +631,7 @@ get_back_bo(struct dri2_egl_surface *dri2_surf) dri2_surf->base.Width, dri2_surf->base.Height, fourcc, @@ -198,10 +198,10 @@ index eaf2654ab26..d6913d680ba 100644 diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c -index 8b4402a74aa..65d920627d4 100644 +index d2032dc1e12..26ec2cc9863 100644 --- a/src/gallium/state_trackers/dri/dri2.c +++ b/src/gallium/state_trackers/dri/dri2.c -@@ -1366,13 +1366,26 @@ dri2_from_planar(__DRIimage *image, int plane, void *loaderPrivate) +@@ -1356,13 +1356,26 @@ dri2_from_planar(__DRIimage *image, int plane, void *loaderPrivate) return img; } @@ -232,10 +232,10 @@ index 8b4402a74aa..65d920627d4 100644 } diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c -index 8fe6a0265fb..1c184eedbfd 100644 +index bc68f66766e..856167015bd 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c -@@ -955,6 +955,7 @@ gbm_dri_bo_import(struct gbm_device *gbm, +@@ -953,6 +953,7 @@ gbm_dri_bo_import(struct gbm_device *gbm, fd_data->width, fd_data->height, fourcc, @@ -256,10 +256,10 @@ index 2e1603c3fe2..28867c73863 100644 &stride, &offset, loaderPrivate); close(fds[0]); diff --git a/src/mesa/drivers/dri/i915/intel_screen.c b/src/mesa/drivers/dri/i915/intel_screen.c -index b84dfcaa136..80cde17423b 100644 +index bdf97522a05..6d42d186365 100644 --- a/src/mesa/drivers/dri/i915/intel_screen.c +++ b/src/mesa/drivers/dri/i915/intel_screen.c -@@ -585,7 +585,7 @@ intel_create_image_from_names(__DRIscreen *screen, +@@ -586,7 +586,7 @@ intel_create_image_from_names(__DRIscreen *screen, static __DRIimage * intel_create_image_from_fds(__DRIscreen *screen, @@ -269,10 +269,10 @@ index b84dfcaa136..80cde17423b 100644 void *loaderPrivate) { diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c -index 0bf2181dc8d..478c4c1fe0e 100644 +index 9f7e112aee1..7b36d9d83c1 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c -@@ -1227,7 +1227,7 @@ intel_create_image_from_fds_common(__DRIscreen *dri_screen, +@@ -1235,7 +1235,7 @@ intel_create_image_from_fds_common(__DRIscreen *dri_screen, static __DRIimage * intel_create_image_from_fds(__DRIscreen *dri_screen, diff --git a/meta-webos-raspberrypi/recipes-graphics/mesa/mesa_%.bbappend b/meta-webos-raspberrypi/recipes-graphics/mesa/mesa_%.bbappend index 00e235c12..b4904f1c1 100644 --- a/meta-webos-raspberrypi/recipes-graphics/mesa/mesa_%.bbappend +++ b/meta-webos-raspberrypi/recipes-graphics/mesa/mesa_%.bbappend @@ -7,9 +7,3 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI:append:rpi = " \ file://0001-implement-drm_create_linear_prime_buffer.patch \ " - -# Backport this change from meta-raspberrypi: -# https://github.com/agherzan/meta-raspberrypi/commit/c5633df78832dca24cd584a10f896689b824b84d -SRC_URI:remove:rpi = " \ - file://0001-dri2-query-dma-buf-modifiers.patch \ -" From a87dc1dd8bc33e1e24d08e505e160c3c9ca03b05 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sun, 20 Sep 2020 04:40:28 -0700 Subject: [PATCH 0555/2022] webos-sota: inherit image-artifact-names for IMAGE_BASENAME :Release Notes: :Detailed Notes: Otherwise all builds with meta-updater layer and sota enabled fail with: ERROR: Sota's config sanity checker detected a potential misconfiguration. Please fix the cause of this error then you can continue to build. Following is the list of potential problems / advisories: OSTREE_BRANCHNAME Should only contain characters from the character set [a-zA-Z0-9._-]. because OSTREE_BRANCHNAME will contain unexpanded '${IMAGE_BASENAME}' like this: OSTREE_BRANCHNAME = "${IMAGE_BASENAME}-master" :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth Change-Id: Id2ffb061dee9014c6c180b9ddbc0fc3b2118dcc3 --- meta-webos/conf/distro/include/webos-sota.inc | 2 ++ 1 file changed, 2 insertions(+) diff --git a/meta-webos/conf/distro/include/webos-sota.inc b/meta-webos/conf/distro/include/webos-sota.inc index 3990bff0b..b2ce1ade6 100644 --- a/meta-webos/conf/distro/include/webos-sota.inc +++ b/meta-webos/conf/distro/include/webos-sota.inc @@ -8,6 +8,8 @@ # this file and that's why I use 'include' directive rather than 'require'. include conf/distro/sota.conf.inc +inherit image-artifact-names + # override OSTREE variables OSTREE_OSNAME = "${DISTRO}" OSTREE_BRANCHNAME = "${IMAGE_BASENAME}-${WEBOS_DISTRO_BUILD_CODENAME}" From 39847f12e7cee51f82c3b1d71b172c9c51084a36 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 5 Feb 2021 11:34:26 -0800 Subject: [PATCH 0556/2022] linux-raspberrypi: add bbappend for 5.10 version :Release Notes: Added in meta-raspberrypi with: https://github.com/agherzan/meta-raspberrypi/pull/808 :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I7a9ab84a8c5d37e099e92463c0691b555f2a3392 --- ...35-v4l2-codec-fix-vchiq-mmal-renable.patch | 55 +++++++++++++++++++ .../linux/linux-raspberrypi_5.10.bbappend | 10 ++++ 2 files changed, 65 insertions(+) create mode 100644 meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi-5.10/0001-bcm2835-v4l2-codec-fix-vchiq-mmal-renable.patch create mode 100644 meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.10.bbappend diff --git a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi-5.10/0001-bcm2835-v4l2-codec-fix-vchiq-mmal-renable.patch b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi-5.10/0001-bcm2835-v4l2-codec-fix-vchiq-mmal-renable.patch new file mode 100644 index 000000000..3be080a7b --- /dev/null +++ b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi-5.10/0001-bcm2835-v4l2-codec-fix-vchiq-mmal-renable.patch @@ -0,0 +1,55 @@ +From 88463f033dacf0a605c7cdb671a359f5d6caac9f Mon Sep 17 00:00:00 2001 +From: Pankaj Maharana +Date: Sun, 1 Dec 2019 20:41:59 +0530 +Subject: [PATCH] bcm2835-v4l2-codec: fix vchiq mmal renable + +:Release Notes: +Enable vchiq mmal component on stream start after stream stop + +:Detailed Notes: +Enable vchiq mmal component on stream start after stream stop +When we stop streaming for flush from gst vrl2 decoder element +then vchiq mmal component is disabled. +But it does not start back when we start the stream back from +gst v4l2 decoder element because the ctx->component_enabled flag +is not set to false while disabling the component. So setting +the flag to false while disabling vchiq mmal component +Also fixes an error in vidioc_s_selection that is using height +instead of crop_height. Might be a typo it is effecting in +dynamic resolution change of the stream. + +:Testing Performed: +Tested the 1080p video plays with 22fps in raspberrypi4 + +:QA Notes: + +:Issues Addressed: +[PLAT-94493] Streaming issues in bcm2835-v4l2-codec driver +--- + drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c b/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c +index 66edec1..1986118 100644 +--- a/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c ++++ b/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c +@@ -1342,7 +1342,7 @@ static int vidioc_s_selection(struct file *file, void *priv, + s->r.left = 0; + s->r.top = 0; + s->r.width = min(s->r.width, q_data->crop_width); +- s->r.height = min(s->r.height, q_data->height); ++ s->r.height = min(s->r.height, q_data->crop_height); + q_data->crop_width = s->r.width; + q_data->crop_height = s->r.height; + q_data->selection_set = true; +@@ -2201,6 +2201,7 @@ static void bcm2835_codec_stop_streaming(struct vb2_queue *q) + if (ret) + v4l2_err(&ctx->dev->v4l2_dev, "%s: Failed enabling component, ret %d\n", + __func__, ret); ++ ctx->component_enabled = false; + } + + if (V4L2_TYPE_IS_OUTPUT(q->type)) +-- +2.7.4 + diff --git a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.10.bbappend b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.10.bbappend new file mode 100644 index 000000000..b19742817 --- /dev/null +++ b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.10.bbappend @@ -0,0 +1,10 @@ +# Copyright (c) 2020-2022 LG Electronics, Inc. + +# security.cfg - enable security features. Should be applied to default configuration. +SRC_URI:append = " \ + file://0001-bcm2835-v4l2-codec-fix-vchiq-mmal-renable.patch \ + file://governor.cfg \ + file://ntfs.cfg \ + file://zram.cfg \ + file://security.cfg \ +" From e37534119f1a6757e0ab1f70b0471f8c9c653043 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 5 Oct 2020 06:25:52 -0700 Subject: [PATCH 0557/2022] gator: remove gator-mod which fails to build with newer kernels :Release Notes: Cleanup recipe and upgrade to slightly newer version, otherwise gator fails to build with x86 kernel even after enabling profiling in qemux86 kernel and with 5.10 kernel on rpi. :Detailed Notes: Nobody will probably use ARM gator on x86, but there is no COMPATIBLE_MACHINE restriction in gator recipe and currently it fails for qemux86 with: work/qemux86-webos-linux/gator/6.7+gitAUTOINC+3ff46fedd4-r2/git/driver/gator_main.c:1399:41: error: initialization of 'struct tracepoint * const*' from incompatible pointer type 'const tracepoint_ptr_t *' {aka 'const int *'} [-Werror=incompatible-pointer-types] 1399 | struct tracepoint * const * begin = tp_mod->mod->tracepoints_ptrs; | ^~~~~~ work/qemux86-webos-linux/gator/6.7+gitAUTOINC+3ff46fedd4-r2/git/driver/gator_main.c:1400:39: error: initialization of 'struct tracepoint * const*' from incompatible pointer type 'const tracepoint_ptr_t *' {aka 'const int *'} [-Werror=incompatible-pointer-types] 1400 | struct tracepoint * const * end = tp_mod->mod->tracepoints_ptrs + tp_mod->mod->num_tracepoints; | ^~~~~~ | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_annotate.c:54:9: error: implicit declaration of function 'pr_warning'; did you mean 'pr_warn'? [-Werror=implicit-function-declaration] /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_annotate.c:54:9: error: implicit declaration of function 'pr_warning'; did you mean 'pr_warn'? [-Werror=implicit-function-declaration] | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_cookies.c:18:81: error: too many arguments to function 'get_user_pages_remote' /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_cookies.c:18:81: error: too many arguments to function 'get_user_pages_remote' | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_cookies.c:265:20: error: 'struct mm_struct' has no member named 'mmap_sem'; did you mean 'mmap_base'? /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_cookies.c:265:20: error: 'struct mm_struct' has no member named 'mmap_sem'; did you mean 'mmap_base'? | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_cookies.c:267:35: error: passing argument 1 of 'get_user_pages_remote' from incompatible pointer type [-Werror=incompatible-pointer-types] /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_cookies.c:267:35: error: passing argument 1 of 'get_user_pages_remote' from incompatible pointer type [-Werror=incompatible-pointer-types] | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_cookies.c:267:60: error: passing argument 6 of 'get_user_pages_remote' from incompatible pointer type [-Werror=incompatible-pointer-types] /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_cookies.c:267:60: error: passing argument 6 of 'get_user_pages_remote' from incompatible pointer type [-Werror=incompatible-pointer-types] | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_cookies.c:267:67: error: passing argument 7 of 'get_user_pages_remote' from incompatible pointer type [-Werror=incompatible-pointer-types] /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_cookies.c:267:67: error: passing argument 7 of 'get_user_pages_remote' from incompatible pointer type [-Werror=incompatible-pointer-types] | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_cookies.c:295:18: error: 'struct mm_struct' has no member named 'mmap_sem'; did you mean 'mmap_base'? /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_cookies.c:295:18: error: 'struct mm_struct' has no member named 'mmap_sem'; did you mean 'mmap_base'? | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_events_meminfo.c:252:49: error: 'NR_SLAB_RECLAIMABLE' undeclared (first use in this function); did you mean 'NR_SLAB_RECLAIMABLE_B'? /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_events_meminfo.c:252:49: error: 'NR_SLAB_RECLAIMABLE' undeclared (first use in this function); did you mean 'NR_SLAB_RECLAIMABLE_B'? | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_events_meminfo.c:252:95: error: 'NR_SLAB_UNRECLAIMABLE' undeclared (first use in this function); did you mean 'NR_SLAB_UNRECLAIMABLE_B'? /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_events_meminfo.c:252:95: error: 'NR_SLAB_UNRECLAIMABLE' undeclared (first use in this function); did you mean 'NR_SLAB_UNRECLAIMABLE_B'? | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_events_mmapped.c:165:21: error: storage size of 'ts' isn't known /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_events_mmapped.c:165:21: error: storage size of 'ts' isn't known | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_events_mmapped.c:77:21: error: storage size of 'ts' isn't known /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_events_mmapped.c:77:21: error: storage size of 'ts' isn't known | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_events_mmapped.c:79:5: error: implicit declaration of function 'getnstimeofday' [-Werror=implicit-function-declaration] /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_events_mmapped.c:79:5: error: implicit declaration of function 'getnstimeofday' [-Werror=implicit-function-declaration] | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_events_mmapped.c:80:17: error: implicit declaration of function 'timespec_to_ns'; did you mean 'timespec64_to_ns'? [-Werror=implicit-function-declaration] /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_events_mmapped.c:80:17: error: implicit declaration of function 'timespec_to_ns'; did you mean 'timespec64_to_ns'? [-Werror=implicit-function-declaration] | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_main.c:1469:17: error: implicit declaration of function 'cpu_up' [-Werror=implicit-function-declaration] /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_main.c:1469:17: error: implicit declaration of function 'cpu_up' [-Werror=implicit-function-declaration] | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_main.c:593:21: error: storage size of 'ts' isn't known /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_main.c:593:21: error: storage size of 'ts' isn't known | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_main.c:600:5: error: implicit declaration of function 'getrawmonotonic' [-Werror=implicit-function-declaration] /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_main.c:600:5: error: implicit declaration of function 'getrawmonotonic' [-Werror=implicit-function-declaration] | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_main.c:601:17: error: implicit declaration of function 'timespec_to_ns'; did you mean 'timespec64_to_ns'? [-Werror=implicit-function-declaration] /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_main.c:601:17: error: implicit declaration of function 'timespec_to_ns'; did you mean 'timespec64_to_ns'? [-Werror=implicit-function-declaration] | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_main.c:720:21: error: storage size of 'ts' isn't known /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_main.c:720:21: error: storage size of 'ts' isn't known | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_main.c:733:9: error: implicit declaration of function 'getnstimeofday' [-Werror=implicit-function-declaration] /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_main.c:733:9: error: implicit declaration of function 'getnstimeofday' [-Werror=implicit-function-declaration] | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_main.c:781:21: error: storage size of 'ts' isn't known /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_main.c:781:21: error: storage size of 'ts' isn't known | /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_main.c:807:10: error: implicit declaration of function 'timespec64_to_timespec'; did you mean 'timespec64_to_ktime'? [-Werror=implicit-function-declaration] /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/gator/6.7+gitAUTOINC+3ff46fedd4-r3/git/driver/gator_main.c:807:10: error: implicit declaration of function 'timespec64_to_timespec'; did you mean 'timespec64_to_ktime'? [-Werror=implicit-function-declaration] :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-121806] CCC: various build issues Change-Id: Idb89766c021d79b265f8eebd7bd4f3be672c92c9 --- meta-webos/recipes-core/gator/gator_git.bb | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/meta-webos/recipes-core/gator/gator_git.bb b/meta-webos/recipes-core/gator/gator_git.bb index 0787dc10b..a6f8f45f8 100644 --- a/meta-webos/recipes-core/gator/gator_git.bb +++ b/meta-webos/recipes-core/gator/gator_git.bb @@ -8,7 +8,12 @@ DESCRIPTION = "Target-side daemon gathering data for ARM Streamline Performance PR = "${INC_PR}.5" -RDEPENDS:${PN} += "kernel-module-gator" +# Fails to build with 5.10 kernel +# http://gecko.lge.com:8000/Errors/Details/456083 +# RDEPENDS:${PN} += "kernel-module-gator" +# whole timespec use was removed in 7.2 version with: +# Gatord 7.2 for Arm DS 2020.0 and Arm Mobile Studio 2020.0 +# https://github.com/ARM-software/gator/commit/fc2b7126b15caf818f377dae911af0a3c29c65f6 SRC_URI += " \ file://0001-disable-stripping-debug-info.patch \ From d847966f012d319acab483c226a769f0840be50e Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 6 Apr 2022 14:46:48 +0000 Subject: [PATCH 0558/2022] nyx-modules: runtime depend on libcec-examples instead of libcec-tools :Release Notes: The package was renamed in gatesgarth: https://git.openembedded.org/meta-openembedded/commit/?h=gatesgarth&id=e59b461d19d59b45467ec9933f9c1bb4b962ec4e :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth Change-Id: I75d7a28cd3a952ae0674dfb48a5bcac1bf0186b3 --- .../recipes-webos/nyx-modules/nyx-modules.bbappend | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos-raspberrypi/recipes-webos/nyx-modules/nyx-modules.bbappend b/meta-webos-raspberrypi/recipes-webos/nyx-modules/nyx-modules.bbappend index b7022c5f7..741c0d8fb 100644 --- a/meta-webos-raspberrypi/recipes-webos/nyx-modules/nyx-modules.bbappend +++ b/meta-webos-raspberrypi/recipes-webos/nyx-modules/nyx-modules.bbappend @@ -4,7 +4,7 @@ EXTENDPRAUTO:append:rpi = "webosrpi6" DEPENDS:append:rpi = " nmeaparser" -RDEPENDS:${PN}:append:rpi = " libcec-tools" +RDEPENDS:${PN}:append:rpi = " libcec-examples" WEBOS_VERSION:rpi = "7.1.0-20_7927148603cb9869421a7a3c35eef273cf085b21" From 2fc9a1be4770b248614edb05f38bd0a09378f787 Mon Sep 17 00:00:00 2001 From: "jaekyu.lee" Date: Tue, 20 Sep 2022 18:51:19 +0900 Subject: [PATCH 0559/2022] libcec=webosrpi4 (fix runtime dependencies for ${PN}-examples) :Release Notes: libcec added to the image :Detailed Notes: Backport the fix from: https://lists.openembedded.org/g/openembedded-devel/message/98906 cec-client doesn't link with libcec, but uses LibCecInitialise to dlopen libcec, so do_package cannot add the runtime dependency automatically Fixes: root@rpi4:# cec-client -l libcec.so.6: cannot open shared object file: No such file or directory root@rpi4:# cecc-client -l libcec.so.6: cannot open shared object file: No such file or directory libcec.so.6: cannot open shared object file: No such file or directory libcec/6.0.2-r0 $ objdump -p ./build/src/cec-client/cec-client-6.0.2 | grep NEEDED NEEDED libncurses.so.5 NEEDED libtinfo.so.5 NEEDED libstdc++.so.6 NEEDED libgcc_s.so.1 NEEDED libc.so.6 :Testing Performed: Only build tested. :QA Notes: :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth [WRO-12257] [OSE-RPI4] CEC adapter does not exist in the adapters list Change-Id: I37768642ab5ffd2199a0fa74d776d58f73381f19 --- .../recipes-extended/libcec/libcec_%.bbappend | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/meta-webos-raspberrypi/recipes-extended/libcec/libcec_%.bbappend b/meta-webos-raspberrypi/recipes-extended/libcec/libcec_%.bbappend index c0258bff6..8cb53d990 100644 --- a/meta-webos-raspberrypi/recipes-extended/libcec/libcec_%.bbappend +++ b/meta-webos-raspberrypi/recipes-extended/libcec/libcec_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2017-2022 LG Electronics, Inc. -EXTENDPRAUTO:append:rpi = "webosrpi3" +EXTENDPRAUTO:append:rpi = "webosrpi4" # The recipe in meta-oe already has conditional dependency: # DEPENDS:append:rpi = "${@bb.utils.contains('MACHINE_FEATURES', 'vc4graphics', '', ' userland', d)}" @@ -10,3 +10,7 @@ DEPENDS:append:rpi = " virtual/libomxil" FILESEXTRAPATHS:prepend:rpi := "${THISDIR}/${BPN}:" SRC_URI:append:rpi = " file://0001-Fix-MessageReceived.patch" + +# Backport a fix from: +# https://lists.openembedded.org/g/openembedded-devel/message/98906 +RDEPENDS:${PN}-examples:append:rpi = " ${PN}" From 2def10bd752dbbbcca7dcb6f922340b75ac6f7e8 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 8 Apr 2022 09:10:29 +0000 Subject: [PATCH 0560/2022] libtool: Update 0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch :Release Notes: gatesgarth and hardknott are using libtool-2.4.6 like dunfell, but don't have the patch which adds -f*-prefix-map* parameter in the same chunk: 3dcc84e37c libtool: Fix lto option passing for reproducible builds causing this patch to fail to apply. In honister this change needs to be reverted and in kirkstone this patch gets removed completely as it's already included in upstream version. :Detailed Notes: ERROR: libtool-native-2.4.6-r0 do_patch: Applying patch '0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch' on target directory '/data001/jenkins/gecko/webos-pro_qemux86-64/build/BUILD/work/x86_64-linux/libtool-native/2.4.6-r0/libtool-2.4.6' Command Error: 'quilt --quiltrc /data001/jenkins/gecko/webos-pro_qemux86-64/build/BUILD/work/x86_64-linux/libtool-native/2.4.6-r0/recipe-sysroot-native/etc/quiltrc push' exited with 0 Output: stdout: Applying patch 0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch patching file build-aux/ltmain.in Hunk #1 FAILED at 5425. 1 out of 1 hunk FAILED -- rejects in file build-aux/ltmain.in Patch 0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch does not apply (enforce with -f) stderr: ERROR: Logfile of failure stored in: /data001/jenkins/gecko/webos-pro_qemux86-64/build/BUILD/work/x86_64-linux/libtool-native/2.4.6-r0/temp/log.do_patch.2957 :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth Change-Id: I937b738b706787c94ee751ffc950438ed6d35da7 --- ...ng-linking-with-fsanitize-address-or.patch | 20 ++++++++----------- 1 file changed, 8 insertions(+), 12 deletions(-) diff --git a/meta-webos/recipes-devtools/libtool/libtool/0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch b/meta-webos/recipes-devtools/libtool/libtool/0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch index 5f5f961ee..01a83681e 100644 --- a/meta-webos/recipes-devtools/libtool/libtool/0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch +++ b/meta-webos/recipes-devtools/libtool/libtool/0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch @@ -1,29 +1,25 @@ -From b421a1d2f2406bb1fe7219b430da57832057fc94 Mon Sep 17 00:00:00 2001 +From 0071cf9c364e2410591434907442903f3f1c0bbb Mon Sep 17 00:00:00 2001 From: "jaekyu.lee" Date: Mon, 22 Nov 2021 14:53:08 +0900 Subject: [PATCH] libtool fix clang linking with fsanitize address or --- - build-aux/ltmain.in | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) + build-aux/ltmain.in | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in -index bdda9b4..40a2e1d 100644 +index 7d9ce99..b12abae 100644 --- a/build-aux/ltmain.in +++ b/build-aux/ltmain.in -@@ -5425,9 +5425,11 @@ func_mode_link () +@@ -5424,9 +5424,10 @@ func_mode_link () + # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -stdlib=* select c++ std lib with clang - # -f*-prefix-map* needed for lto linking + # -fsanitize=* Clang memory and address sanitizer -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -- -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*|-f*-prefix-map*) -+ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*|-f*-prefix-map*| \ -+ -specs=*|-fsanitize=*) +- -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) ++ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*|-fsanitize=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" --- -2.17.1 - From 2bbb261d2840d5d220c0de8bb2717e010dddf618 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 30 May 2022 11:13:26 +0000 Subject: [PATCH 0561/2022] Revert "webos-preferred-providers.inc: set PREFERRED_PROVIDER_go-native" :Release Notes: This reverts commit 38a6dbe73ca83457510f929a05a7cb0174117a7e. :Detailed Notes: It was backported from: https://git.openembedded.org/openembedded-core/commit/?h=gatesgarth&id=c23f9e80492e4b1d47c0ada8eae3decf736253c7 which we already have now. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth Change-Id: Ib3c7db0a1b5e37e098f0651fef8385248008b419 --- meta-webos/conf/distro/include/webos-preferred-providers.inc | 4 ---- 1 file changed, 4 deletions(-) diff --git a/meta-webos/conf/distro/include/webos-preferred-providers.inc b/meta-webos/conf/distro/include/webos-preferred-providers.inc index a203b5797..b8c4d2990 100644 --- a/meta-webos/conf/distro/include/webos-preferred-providers.inc +++ b/meta-webos/conf/distro/include/webos-preferred-providers.inc @@ -26,10 +26,6 @@ PREFERRED_PROVIDER_stat = "busybox" VIRTUAL-RUNTIME_stat = "busybox" VIRTUAL-RUNTIME_webos-ime = "imemanager" -# Backport from gatesgarth https://git.openembedded.org/openembedded-core/commit/?h=gatesgarth&id=c23f9e80492e4b1d47c0ada8eae3decf736253c7 -# can be dropped after we upgrade to newer oe-core -PREFERRED_PROVIDER_go-native = "go-native" - VIRTUAL-RUNTIME_bluetooth_service = "com.webos.service.bluetooth2" # Options are: bluez4, bluez5. This will only be used if "bluetooth" appears in From 42bb0c5c2a2ad897bb21ffc07299302690f2e0bb Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 3 Jun 2022 08:11:30 +0000 Subject: [PATCH 0562/2022] gcc-source: update patches to apply on 10.2 version :Release Notes: :Detailed Notes: 0001-arm-Don-t-generate-invalid-LDRD-insns.patch included since 10.1 with: https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=c32074f6debfe77265b49e30ce7d7a35fba828bd 0008-Backport-of-the-patch-for-PR-target-91816.patch included since 10.1 with: https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=44f77a6dea2f312ee1743f3dde465c1b8453ee13 just the testcase was missing which was backported later in 10.3 with: https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=8804b6ae3da91f3baa82da2fe28090025d5717d3 0010-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch is already included since 10.1 with: https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=f1a681a174cdfb82e62c246d6f4add9a25fc2e43 0012-arm-Fix-an-incorrect-warning-when-mcpu-cortex-a55-is.patch is already included since 10.1 with: https://gcc.gnu.org/git/gitweb.cgi?p=gcc.git;h=fd9058b6fcda19f63849a28735e3d2616cfd4e89 0011-arm-Add-nomve-and-nomve.fp-options-to-mcpu-cortex-m5.patch was added just to apply gcc-10 backport of 0012-arm-reorder-assembler-architecture-directives-PR1017.patch without new conflicts :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth Change-Id: Ic2061dcb05ad601163922beb6f0e6597c46267dc --- .../gcc/gcc-source_%.bbappend | 20 + .../gcc/gcc-source_9.3%.bbappend | 23 - ...value-after-stack_protect_test-PR96.patch} | 10 +- ...rm-Don-t-generate-invalid-LDRD-insns.patch | 214 -------- ....target-arm-stack-protector-1.c-for.patch} | 2 +- ...e-support-mslow-flash-data-for-armv.patch} | 4 +- ...arm-Add-support-for-Neoverse-V1-CPU.patch} | 42 +- ...arm-Add-support-for-Neoverse-N2-CPU.patch} | 47 +- ...missing-part-number-for-Neoverse-V1.patch} | 12 +- ...-up-neon_vector_mem_operand-PR97528.patch} | 6 +- ...ort-of-the-patch-for-PR-target-91816.patch | 304 ----------- ...-opts_set-in-arm_configure_build_ta.patch} | 30 +- ...ch_name-is-always-set-for-the-build.patch} | 6 +- ...ort-for-handling-Xassembler-Wa-optio.patch | 418 --------------- ...gure-globals-in-arm_configure_build.patch} | 12 +- ...d-nomve.fp-options-to-mcpu-cortex-m5.patch | 481 ++++++++++++++++++ ...rect-warning-when-mcpu-cortex-a55-is.patch | 261 ---------- ...bler-architecture-directives-PR1017.patch} | 355 ++++++++++--- 18 files changed, 869 insertions(+), 1378 deletions(-) create mode 100644 meta-webos/recipes-devtools/gcc/gcc-source_%.bbappend delete mode 100644 meta-webos/recipes-devtools/gcc/gcc-source_9.3%.bbappend rename meta-webos/recipes-devtools/gcc/gcc/{0002-arm-Clear-canary-value-after-stack_protect_test-PR96.patch => 0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch} (96%) delete mode 100644 meta-webos/recipes-devtools/gcc/gcc/0001-arm-Don-t-generate-invalid-LDRD-insns.patch rename meta-webos/recipes-devtools/gcc/gcc/{0003-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch => 0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch} (96%) rename meta-webos/recipes-devtools/gcc/gcc/{0004-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch => 0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch} (97%) rename meta-webos/recipes-devtools/gcc/gcc/{0005-arm-Add-support-for-Neoverse-V1-CPU.patch => 0004-arm-Add-support-for-Neoverse-V1-CPU.patch} (73%) rename meta-webos/recipes-devtools/gcc/gcc/{0006-arm-Add-support-for-Neoverse-N2-CPU.patch => 0005-arm-Add-support-for-Neoverse-N2-CPU.patch} (70%) rename meta-webos/recipes-devtools/gcc/gcc/{0007-arm-Add-missing-part-number-for-Neoverse-V1.patch => 0006-arm-Add-missing-part-number-for-Neoverse-V1.patch} (72%) rename meta-webos/recipes-devtools/gcc/gcc/{0009-arm-Fix-up-neon_vector_mem_operand-PR97528.patch => 0007-arm-Fix-up-neon_vector_mem_operand-PR97528.patch} (94%) delete mode 100644 meta-webos/recipes-devtools/gcc/gcc/0008-Backport-of-the-patch-for-PR-target-91816.patch rename meta-webos/recipes-devtools/gcc/gcc/{0011-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch => 0008-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch} (87%) rename meta-webos/recipes-devtools/gcc/gcc/{0013-arm-ensure-the-arch_name-is-always-set-for-the-build.patch => 0009-arm-ensure-the-arch_name-is-always-set-for-the-build.patch} (90%) delete mode 100644 meta-webos/recipes-devtools/gcc/gcc/0010-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch rename meta-webos/recipes-devtools/gcc/gcc/{0014-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch => 0010-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch} (89%) create mode 100644 meta-webos/recipes-devtools/gcc/gcc/0011-arm-Add-nomve-and-nomve.fp-options-to-mcpu-cortex-m5.patch delete mode 100644 meta-webos/recipes-devtools/gcc/gcc/0012-arm-Fix-an-incorrect-warning-when-mcpu-cortex-a55-is.patch rename meta-webos/recipes-devtools/gcc/gcc/{0015-arm-reorder-assembler-architecture-directives-PR1017.patch => 0012-arm-reorder-assembler-architecture-directives-PR1017.patch} (59%) diff --git a/meta-webos/recipes-devtools/gcc/gcc-source_%.bbappend b/meta-webos/recipes-devtools/gcc/gcc-source_%.bbappend new file mode 100644 index 000000000..caec25182 --- /dev/null +++ b/meta-webos/recipes-devtools/gcc/gcc-source_%.bbappend @@ -0,0 +1,20 @@ +# Copyright (c) 2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos2" + +FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" + +SRC_URI:append = " \ + file://0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch \ + file://0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch \ + file://0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch \ + file://0004-arm-Add-support-for-Neoverse-V1-CPU.patch \ + file://0005-arm-Add-support-for-Neoverse-N2-CPU.patch \ + file://0006-arm-Add-missing-part-number-for-Neoverse-V1.patch \ + file://0007-arm-Fix-up-neon_vector_mem_operand-PR97528.patch \ + file://0008-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch \ + file://0009-arm-ensure-the-arch_name-is-always-set-for-the-build.patch \ + file://0010-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch \ + file://0011-arm-Add-nomve-and-nomve.fp-options-to-mcpu-cortex-m5.patch \ + file://0012-arm-reorder-assembler-architecture-directives-PR1017.patch \ +" diff --git a/meta-webos/recipes-devtools/gcc/gcc-source_9.3%.bbappend b/meta-webos/recipes-devtools/gcc/gcc-source_9.3%.bbappend deleted file mode 100644 index e13bbcb19..000000000 --- a/meta-webos/recipes-devtools/gcc/gcc-source_9.3%.bbappend +++ /dev/null @@ -1,23 +0,0 @@ -# Copyright (c) 2022 LG Electronics, Inc. - -EXTENDPRAUTO:append = "webos2" - -FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" - -SRC_URI:append = " \ - file://0001-arm-Don-t-generate-invalid-LDRD-insns.patch \ - file://0002-arm-Clear-canary-value-after-stack_protect_test-PR96.patch \ - file://0003-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch \ - file://0004-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch \ - file://0005-arm-Add-support-for-Neoverse-V1-CPU.patch \ - file://0006-arm-Add-support-for-Neoverse-N2-CPU.patch \ - file://0007-arm-Add-missing-part-number-for-Neoverse-V1.patch \ - file://0008-Backport-of-the-patch-for-PR-target-91816.patch \ - file://0009-arm-Fix-up-neon_vector_mem_operand-PR97528.patch \ - file://0010-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch \ - file://0011-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch \ - file://0012-arm-Fix-an-incorrect-warning-when-mcpu-cortex-a55-is.patch \ - file://0013-arm-ensure-the-arch_name-is-always-set-for-the-build.patch \ - file://0014-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch \ - file://0015-arm-reorder-assembler-architecture-directives-PR1017.patch \ -" diff --git a/meta-webos/recipes-devtools/gcc/gcc/0002-arm-Clear-canary-value-after-stack_protect_test-PR96.patch b/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch similarity index 96% rename from meta-webos/recipes-devtools/gcc/gcc/0002-arm-Clear-canary-value-after-stack_protect_test-PR96.patch rename to meta-webos/recipes-devtools/gcc/gcc/0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch index e9ff7d72a..b4b5f36a4 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0002-arm-Clear-canary-value-after-stack_protect_test-PR96.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch @@ -1,4 +1,4 @@ -From 1366ffdd2d6f22a09b341acaa6ac968b7c3d85c5 Mon Sep 17 00:00:00 2001 +From f31142ed4a1a9b6d77d15d6e8284e6577c6c5a73 Mon Sep 17 00:00:00 2001 From: Richard Sandiford Date: Fri, 7 Aug 2020 12:17:37 +0100 Subject: [PATCH] arm: Clear canary value after stack_protect_test [PR96191] @@ -30,10 +30,10 @@ Upstream-Status: Backport [9.4.0 3e40be9cc92d3fa117be7f4fab07cedeed8361a2 == 11. create mode 100644 gcc/testsuite/gcc.target/arm/stack-protector-2.c diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md -index 53e54874c12..9f249800471 100644 +index a6a31f8f4ef..dd13c77e889 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md -@@ -8898,6 +8898,8 @@ +@@ -9320,6 +9320,8 @@ [(set_attr "arch" "t1,32")] ) @@ -42,7 +42,7 @@ index 53e54874c12..9f249800471 100644 (define_insn "arm_stack_protect_test_insn" [(set (reg:CC_Z CC_REGNUM) (compare:CC_Z (unspec:SI [(match_operand:SI 1 "memory_operand" "m,m") -@@ -8907,8 +8909,8 @@ +@@ -9329,8 +9331,8 @@ (clobber (match_operand:SI 0 "register_operand" "=&l,&r")) (clobber (match_dup 2))] "TARGET_32BIT" @@ -54,7 +54,7 @@ index 53e54874c12..9f249800471 100644 (set_attr "type" "multiple") (set_attr "arch" "t,32")] diff --git a/gcc/config/arm/thumb1.md b/gcc/config/arm/thumb1.md -index 041e2db343f..6eca8c49c0e 100644 +index 24861635fa5..0ff819090d9 100644 --- a/gcc/config/arm/thumb1.md +++ b/gcc/config/arm/thumb1.md @@ -2020,6 +2020,8 @@ diff --git a/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Don-t-generate-invalid-LDRD-insns.patch b/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Don-t-generate-invalid-LDRD-insns.patch deleted file mode 100644 index a7f8640fc..000000000 --- a/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Don-t-generate-invalid-LDRD-insns.patch +++ /dev/null @@ -1,214 +0,0 @@ -From da4a59805e99eec6594f78a1c4b95761ccc193f5 Mon Sep 17 00:00:00 2001 -From: Alex Coplan -Date: Mon, 18 May 2020 16:29:04 +0100 -Subject: [PATCH] arm: Don't generate invalid LDRD insns - -This fixes a bug in the arm backend where GCC generates invalid LDRD -instructions. The LDRD instruction requires the first transfer register to be -even, but GCC attempts to use odd registers here. For example, with the -following C code: - - struct c { - double a; - } __attribute((aligned)) __attribute((packed)); - struct c d; - struct c f(struct c); - void e() { f(d); } - -The struct d is passed in registers r1 and r2 to the function f, and GCC -attempted to do this with a LDRD instruction when compiling with -march=armv7-a -on a soft float toolchain. - -The fix is analogous to the corresponding one for STRD in the same function: -https://gcc.gnu.org/git/?p=gcc.git;a=commit;h=52057dc4ac5295caebf83147f688d769c93cbc8d - -gcc/: - * config/arm/arm.c (output_move_double): Fix codegen when loading into - a register pair with an odd base register. - -gcc/testsuite/: - * gcc.c-torture/compile/packed-aligned-1.c: New test. - * gcc.c-torture/execute/packed-aligned.c: New test. - -(cherry picked from commit 8b8f3117263ca79b3febadadb07732588d99d5f6) - -Upstream-Status: Backport [9.4.0 1b9f2e47a7d5d39df7b8248f2a199aa5c7a1778c == 11.1.0 8b8f3117263ca79b3febadadb07732588d99d5f6] ---- - gcc/config/arm/arm.c | 28 +++++++++++-------- - .../gcc.c-torture/compile/packed-aligned-1.c | 11 ++++++++ - .../gcc.c-torture/execute/packed-aligned.c | 28 +++++++++++++++++++ - 3 files changed, 55 insertions(+), 12 deletions(-) - create mode 100644 gcc/testsuite/gcc.c-torture/compile/packed-aligned-1.c - create mode 100644 gcc/testsuite/gcc.c-torture/execute/packed-aligned.c - -diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c -index cdfc0f9e72f..d4e2ad2a317 100644 ---- a/gcc/config/arm/arm.c -+++ b/gcc/config/arm/arm.c -@@ -18408,6 +18408,7 @@ output_move_double (rtx *operands, bool emit, int *count) - if (code0 == REG) - { - unsigned int reg0 = REGNO (operands[0]); -+ const bool can_ldrd = TARGET_LDRD && (TARGET_THUMB2 || (reg0 % 2 == 0)); - - otherops[0] = gen_rtx_REG (SImode, 1 + reg0); - -@@ -18419,7 +18420,7 @@ output_move_double (rtx *operands, bool emit, int *count) - - if (emit) - { -- if (TARGET_LDRD -+ if (can_ldrd - && !(fix_cm3_ldrd && reg0 == REGNO(XEXP (operands[1], 0)))) - output_asm_insn ("ldrd%?\t%0, [%m1]", operands); - else -@@ -18428,7 +18429,7 @@ output_move_double (rtx *operands, bool emit, int *count) - break; - - case PRE_INC: -- gcc_assert (TARGET_LDRD); -+ gcc_assert (can_ldrd); - if (emit) - output_asm_insn ("ldrd%?\t%0, [%m1, #8]!", operands); - break; -@@ -18436,7 +18437,7 @@ output_move_double (rtx *operands, bool emit, int *count) - case PRE_DEC: - if (emit) - { -- if (TARGET_LDRD) -+ if (can_ldrd) - output_asm_insn ("ldrd%?\t%0, [%m1, #-8]!", operands); - else - output_asm_insn ("ldmdb%?\t%m1!, %M0", operands); -@@ -18446,7 +18447,7 @@ output_move_double (rtx *operands, bool emit, int *count) - case POST_INC: - if (emit) - { -- if (TARGET_LDRD) -+ if (can_ldrd) - output_asm_insn ("ldrd%?\t%0, [%m1], #8", operands); - else - output_asm_insn ("ldmia%?\t%m1!, %M0", operands); -@@ -18454,7 +18455,7 @@ output_move_double (rtx *operands, bool emit, int *count) - break; - - case POST_DEC: -- gcc_assert (TARGET_LDRD); -+ gcc_assert (can_ldrd); - if (emit) - output_asm_insn ("ldrd%?\t%0, [%m1], #-8", operands); - break; -@@ -18476,6 +18477,7 @@ output_move_double (rtx *operands, bool emit, int *count) - /* Registers overlap so split out the increment. */ - if (emit) - { -+ gcc_assert (can_ldrd); - output_asm_insn ("add%?\t%1, %1, %2", otherops); - output_asm_insn ("ldrd%?\t%0, [%1] @split", otherops); - } -@@ -18487,10 +18489,11 @@ output_move_double (rtx *operands, bool emit, int *count) - /* Use a single insn if we can. - FIXME: IWMMXT allows offsets larger than ldrd can - handle, fix these up with a pair of ldr. */ -- if (TARGET_THUMB2 -+ if (can_ldrd -+ && (TARGET_THUMB2 - || !CONST_INT_P (otherops[2]) - || (INTVAL (otherops[2]) > -256 -- && INTVAL (otherops[2]) < 256)) -+ && INTVAL (otherops[2]) < 256))) - { - if (emit) - output_asm_insn ("ldrd%?\t%0, [%1, %2]!", otherops); -@@ -18513,10 +18516,11 @@ output_move_double (rtx *operands, bool emit, int *count) - /* Use a single insn if we can. - FIXME: IWMMXT allows offsets larger than ldrd can handle, - fix these up with a pair of ldr. */ -- if (TARGET_THUMB2 -+ if (can_ldrd -+ && (TARGET_THUMB2 - || !CONST_INT_P (otherops[2]) - || (INTVAL (otherops[2]) > -256 -- && INTVAL (otherops[2]) < 256)) -+ && INTVAL (otherops[2]) < 256))) - { - if (emit) - output_asm_insn ("ldrd%?\t%0, [%1], %2", otherops); -@@ -18547,7 +18551,7 @@ output_move_double (rtx *operands, bool emit, int *count) - operands[1] = otherops[0]; - if (emit) - { -- if (TARGET_LDRD) -+ if (can_ldrd) - output_asm_insn ("ldrd%?\t%0, [%1]", operands); - else - output_asm_insn ("ldmia%?\t%1, %M0", operands); -@@ -18592,7 +18596,7 @@ output_move_double (rtx *operands, bool emit, int *count) - } - otherops[0] = gen_rtx_REG(SImode, REGNO(operands[0]) + 1); - operands[1] = otherops[0]; -- if (TARGET_LDRD -+ if (can_ldrd - && (REG_P (otherops[2]) - || TARGET_THUMB2 - || (CONST_INT_P (otherops[2]) -@@ -18653,7 +18657,7 @@ output_move_double (rtx *operands, bool emit, int *count) - if (count) - *count = 2; - -- if (TARGET_LDRD) -+ if (can_ldrd) - return "ldrd%?\t%0, [%1]"; - - return "ldmia%?\t%1, %M0"; -diff --git a/gcc/testsuite/gcc.c-torture/compile/packed-aligned-1.c b/gcc/testsuite/gcc.c-torture/compile/packed-aligned-1.c -new file mode 100644 -index 00000000000..9f0923e29ee ---- /dev/null -+++ b/gcc/testsuite/gcc.c-torture/compile/packed-aligned-1.c -@@ -0,0 +1,11 @@ -+struct c { -+ double a; -+} __attribute((packed)) __attribute((aligned)); -+ -+void f(struct c *, struct c); -+ -+void g(struct c *ptr) -+{ -+ ptr++; -+ f(ptr, *ptr); -+} -diff --git a/gcc/testsuite/gcc.c-torture/execute/packed-aligned.c b/gcc/testsuite/gcc.c-torture/execute/packed-aligned.c -new file mode 100644 -index 00000000000..f768af0ab02 ---- /dev/null -+++ b/gcc/testsuite/gcc.c-torture/execute/packed-aligned.c -@@ -0,0 +1,28 @@ -+struct c { -+ double a; -+} __attribute((packed)) __attribute((aligned)); -+ -+extern void abort(void); -+ -+double g_expect = 32.25; -+ -+void f(unsigned x, struct c y) -+{ -+ if (x != 0) -+ abort(); -+ -+ if (y.a != g_expect) -+ abort(); -+} -+ -+struct c e = { 64.25 }; -+ -+int main(void) -+{ -+ struct c d = { 32.25 }; -+ f(0, d); -+ -+ g_expect = 64.25; -+ f(0, e); -+ return 0; -+} diff --git a/meta-webos/recipes-devtools/gcc/gcc/0003-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch b/meta-webos/recipes-devtools/gcc/gcc/0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch similarity index 96% rename from meta-webos/recipes-devtools/gcc/gcc/0003-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch rename to meta-webos/recipes-devtools/gcc/gcc/0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch index d5ebaf28a..0db302961 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0003-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch @@ -1,4 +1,4 @@ -From 4c9b3409418700f41920e6b148e354b5156384f1 Mon Sep 17 00:00:00 2001 +From d037e48dff782bdc98cc74c3d952e354ea32588d Mon Sep 17 00:00:00 2001 From: Christophe Lyon Date: Wed, 12 Aug 2020 09:22:38 +0000 Subject: [PATCH] testsuite: Fix gcc.target/arm/stack-protector-1.c for diff --git a/meta-webos/recipes-devtools/gcc/gcc/0004-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch b/meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch similarity index 97% rename from meta-webos/recipes-devtools/gcc/gcc/0004-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch rename to meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch index e86381fab..885c569ed 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0004-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch @@ -1,4 +1,4 @@ -From d6c959d5f230c7610aa2c29bb40f0a349849b77e Mon Sep 17 00:00:00 2001 +From 52be19875d4b8828655b89999e04d5de5874698e Mon Sep 17 00:00:00 2001 From: Christophe Lyon Date: Wed, 19 Aug 2020 09:02:21 +0000 Subject: [PATCH] arm: Fix -mpure-code support/-mslow-flash-data for @@ -39,7 +39,7 @@ Upstream-Status: Backport [9.4.0 967a5f8e585a5d499870903849c0fa06c326547a == 11. create mode 100644 gcc/testsuite/gcc.target/arm/pure-code/pr94538-2.c diff --git a/gcc/config/arm/thumb1.md b/gcc/config/arm/thumb1.md -index 6eca8c49c0e..8f051f87c0f 100644 +index 0ff819090d9..f0129db2c3e 100644 --- a/gcc/config/arm/thumb1.md +++ b/gcc/config/arm/thumb1.md @@ -70,6 +70,7 @@ diff --git a/meta-webos/recipes-devtools/gcc/gcc/0005-arm-Add-support-for-Neoverse-V1-CPU.patch b/meta-webos/recipes-devtools/gcc/gcc/0004-arm-Add-support-for-Neoverse-V1-CPU.patch similarity index 73% rename from meta-webos/recipes-devtools/gcc/gcc/0005-arm-Add-support-for-Neoverse-V1-CPU.patch rename to meta-webos/recipes-devtools/gcc/gcc/0004-arm-Add-support-for-Neoverse-V1-CPU.patch index fd0e97b86..e68717220 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0005-arm-Add-support-for-Neoverse-V1-CPU.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0004-arm-Add-support-for-Neoverse-V1-CPU.patch @@ -1,10 +1,10 @@ -From 448af3d898ddf4978ab8f443b9c5d8bfff9b9c44 Mon Sep 17 00:00:00 2001 +From 925f3b09a79c904c1435d50e8165633c867f76c9 Mon Sep 17 00:00:00 2001 From: Alex Coplan -Date: Tue, 29 Sep 2020 11:42:24 +0100 +Date: Tue, 29 Sep 2020 10:06:42 +0100 Subject: [PATCH] arm: Add support for Neoverse V1 CPU This patch backports the AArch32 support for Arm's Neoverse V1 CPU to -GCC 9. +GCC 10. gcc/ChangeLog: @@ -13,7 +13,7 @@ gcc/ChangeLog: * config/arm/arm-tune.md: Regenerate. * doc/invoke.texi: Document AArch32 support for Neoverse V1. -Upstream-Status: Backport [9.4.0 f6d4b96180adec4fc5ea34de6d268350b98bb4ab == 11.1.0 da13b7737662da11f8fefb28eaf4ed7c50c51767] +Upstream-Status: Backport [9.4.0 f6d4b96180adec4fc5ea34de6d268350b98bb4ab == 10.3.0 384274fb7bf81ee9ed1982ffef90eb725de93398 == 11.1.0 da13b7737662da11f8fefb28eaf4ed7c50c51767] --- gcc/config/arm/arm-cpus.in | 10 ++++++++++ gcc/config/arm/arm-tables.opt | 3 +++ @@ -22,10 +22,10 @@ Upstream-Status: Backport [9.4.0 f6d4b96180adec4fc5ea34de6d268350b98bb4ab == 11. 4 files changed, 18 insertions(+), 5 deletions(-) diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in -index 3a55f6ac6d2..747767ab386 100644 +index 728be500b80..b1fe48eb087 100644 --- a/gcc/config/arm/arm-cpus.in +++ b/gcc/config/arm/arm-cpus.in -@@ -1362,6 +1362,16 @@ begin cpu cortex-a76.cortex-a55 +@@ -1478,6 +1478,16 @@ begin cpu cortex-a76.cortex-a55 costs cortex_a57 end cpu cortex-a76.cortex-a55 @@ -34,7 +34,7 @@ index 3a55f6ac6d2..747767ab386 100644 + cname neoversev1 + tune for cortex-a57 + tune flags LDSCHED -+ architecture armv8.4-a+fp16 ++ architecture armv8.4-a+fp16+bf16+i8mm + option crypto add FP_ARMv8 CRYPTO + costs cortex_a57 +end cpu neoverse-v1 @@ -43,10 +43,10 @@ index 3a55f6ac6d2..747767ab386 100644 begin cpu cortex-m23 cname cortexm23 diff --git a/gcc/config/arm/arm-tables.opt b/gcc/config/arm/arm-tables.opt -index bba54aea3d6..5384284b53a 100644 +index ce356611861..1a7c3191784 100644 --- a/gcc/config/arm/arm-tables.opt +++ b/gcc/config/arm/arm-tables.opt -@@ -243,6 +243,9 @@ Enum(processor_type) String(cortex-a75.cortex-a55) Value( TARGET_CPU_cortexa75co +@@ -249,6 +249,9 @@ Enum(processor_type) String(cortex-a75.cortex-a55) Value( TARGET_CPU_cortexa75co EnumValue Enum(processor_type) String(cortex-a76.cortex-a55) Value( TARGET_CPU_cortexa76cortexa55) @@ -57,30 +57,30 @@ index bba54aea3d6..5384284b53a 100644 Enum(processor_type) String(cortex-m23) Value( TARGET_CPU_cortexm23) diff --git a/gcc/config/arm/arm-tune.md b/gcc/config/arm/arm-tune.md -index b9dfb66ec84..1257daff074 100644 +index 8ea9435c0c9..3874f42a26b 100644 --- a/gcc/config/arm/arm-tune.md +++ b/gcc/config/arm/arm-tune.md -@@ -45,6 +45,6 @@ - cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35, +@@ -46,6 +46,6 @@ cortexa73cortexa53,cortexa55,cortexa75, - cortexa76,neoversen1,cortexa75cortexa55, -- cortexa76cortexa55,cortexm23,cortexm33, -- cortexr52" -+ cortexa76cortexa55,neoversev1,cortexm23, -+ cortexm33,cortexr52" + cortexa76,cortexa76ae,cortexa77, + neoversen1,cortexa75cortexa55,cortexa76cortexa55, +- cortexm23,cortexm33,cortexm35p, +- cortexm55,cortexr52" ++ neoversev1,cortexm23,cortexm33, ++ cortexm35p,cortexm55,cortexr52" (const (symbol_ref "((enum attr_tune) arm_tune)"))) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 5f04a7d2bbf..6d21f16e005 100644 +index 772679444c9..3b082dc219a 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi -@@ -17583,9 +17583,9 @@ Permissible names are: @samp{arm7tdmi}, @samp{arm7tdmi-s}, @samp{arm710t}, - @samp{cortex-m4}, @samp{cortex-m7}, @samp{cortex-m23}, @samp{cortex-m33}, +@@ -18835,9 +18835,9 @@ Permissible names are: @samp{arm7tdmi}, @samp{arm7tdmi-s}, @samp{arm710t}, + @samp{cortex-m35p}, @samp{cortex-m55}, @samp{cortex-m1.small-multiply}, @samp{cortex-m0.small-multiply}, @samp{cortex-m0plus.small-multiply}, @samp{exynos-m1}, @samp{marvell-pj4}, -@samp{neoverse-n1}, @samp{xscale}, @samp{iwmmxt}, @samp{iwmmxt2}, -@samp{ep9312}, @samp{fa526}, @samp{fa626}, @samp{fa606te}, @samp{fa626te}, -@samp{fmp626}, @samp{fa726te}, @samp{xgene1}. -+@samp{neoverse-n1}, @samp{neoverse-v1}, @samp{xscale}, @samp{iwmmxt}, ++@samp{neoverse-n1} @samp{neoverse-v1}, @samp{xscale}, @samp{iwmmxt}, +@samp{iwmmxt2}, @samp{ep9312}, @samp{fa526}, @samp{fa626}, @samp{fa606te}, +@samp{fa626te}, @samp{fmp626}, @samp{fa726te}, @samp{xgene1}. diff --git a/meta-webos/recipes-devtools/gcc/gcc/0006-arm-Add-support-for-Neoverse-N2-CPU.patch b/meta-webos/recipes-devtools/gcc/gcc/0005-arm-Add-support-for-Neoverse-N2-CPU.patch similarity index 70% rename from meta-webos/recipes-devtools/gcc/gcc/0006-arm-Add-support-for-Neoverse-N2-CPU.patch rename to meta-webos/recipes-devtools/gcc/gcc/0005-arm-Add-support-for-Neoverse-N2-CPU.patch index 9731b7b5d..7b09caf8b 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0006-arm-Add-support-for-Neoverse-N2-CPU.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0005-arm-Add-support-for-Neoverse-N2-CPU.patch @@ -1,10 +1,10 @@ -From 8aa74c785c72ef0db86f7353d92eda36db81f853 Mon Sep 17 00:00:00 2001 +From c5e9ec756e7bc6735a5228654fe54ce76ffd3140 Mon Sep 17 00:00:00 2001 From: Alex Coplan -Date: Fri, 2 Oct 2020 16:09:06 +0100 +Date: Fri, 2 Oct 2020 16:06:15 +0100 Subject: [PATCH] arm: Add support for Neoverse N2 CPU This patch backports the AArch32 support for Arm's Neoverse N2 CPU to -GCC 9. +GCC 10. gcc/ChangeLog: @@ -13,19 +13,19 @@ gcc/ChangeLog: * config/arm/arm-tune.md: Regenerate. * doc/invoke.texi: Document support for Neoverse N2. -Upstream-Status: Backport [9.4.0 54e50dc2d7633d1d5930f472aaeb4e52ba403ade == 11.1.0 637ad78cdf4026234308973bb87839f10f3d39cf] +Upstream-Status: Backport [9.4.0 54e50dc2d7633d1d5930f472aaeb4e52ba403ade == 10.3.0 d7e8411f6a333d4054894ad3b23f23415a525230 == 11.1.0 637ad78cdf4026234308973bb87839f10f3d39cf] --- gcc/config/arm/arm-cpus.in | 12 ++++++++++++ gcc/config/arm/arm-tables.opt | 3 +++ - gcc/config/arm/arm-tune.md | 4 ++-- + gcc/config/arm/arm-tune.md | 5 +++-- gcc/doc/invoke.texi | 6 +++--- - 4 files changed, 20 insertions(+), 5 deletions(-) + 4 files changed, 21 insertions(+), 5 deletions(-) diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in -index 747767ab386..3c375b9a7b9 100644 +index b1fe48eb087..ca772bdcf6d 100644 --- a/gcc/config/arm/arm-cpus.in +++ b/gcc/config/arm/arm-cpus.in -@@ -1372,6 +1372,18 @@ begin cpu neoverse-v1 +@@ -1488,6 +1488,18 @@ begin cpu neoverse-v1 costs cortex_a57 end cpu neoverse-v1 @@ -34,7 +34,7 @@ index 747767ab386..3c375b9a7b9 100644 + cname neoversen2 + tune for cortex-a57 + tune flags LDSCHED -+ architecture armv8.5-a+fp16 ++ architecture armv8.5-a+fp16+bf16+i8mm + option crypto add FP_ARMv8 CRYPTO + costs cortex_a57 + vendor 41 @@ -45,10 +45,10 @@ index 747767ab386..3c375b9a7b9 100644 begin cpu cortex-m23 cname cortexm23 diff --git a/gcc/config/arm/arm-tables.opt b/gcc/config/arm/arm-tables.opt -index 5384284b53a..5befadddf9e 100644 +index 1a7c3191784..c8f83b03b6f 100644 --- a/gcc/config/arm/arm-tables.opt +++ b/gcc/config/arm/arm-tables.opt -@@ -246,6 +246,9 @@ Enum(processor_type) String(cortex-a76.cortex-a55) Value( TARGET_CPU_cortexa76co +@@ -252,6 +252,9 @@ Enum(processor_type) String(cortex-a76.cortex-a55) Value( TARGET_CPU_cortexa76co EnumValue Enum(processor_type) String(neoverse-v1) Value( TARGET_CPU_neoversev1) @@ -59,27 +59,28 @@ index 5384284b53a..5befadddf9e 100644 Enum(processor_type) String(cortex-m23) Value( TARGET_CPU_cortexm23) diff --git a/gcc/config/arm/arm-tune.md b/gcc/config/arm/arm-tune.md -index 1257daff074..102765e6568 100644 +index 3874f42a26b..f98f7ca9ae5 100644 --- a/gcc/config/arm/arm-tune.md +++ b/gcc/config/arm/arm-tune.md -@@ -45,6 +45,6 @@ - cortexa57cortexa53,cortexa72cortexa53,cortexa73cortexa35, +@@ -46,6 +46,7 @@ cortexa73cortexa53,cortexa55,cortexa75, - cortexa76,neoversen1,cortexa75cortexa55, -- cortexa76cortexa55,neoversev1,cortexm23, -- cortexm33,cortexr52" -+ cortexa76cortexa55,neoversev1,neoversen2, -+ cortexm23,cortexm33,cortexr52" + cortexa76,cortexa76ae,cortexa77, + neoversen1,cortexa75cortexa55,cortexa76cortexa55, +- neoversev1,cortexm23,cortexm33, +- cortexm35p,cortexm55,cortexr52" ++ neoversev1,neoversen2,cortexm23, ++ cortexm33,cortexm35p,cortexm55, ++ cortexr52" (const (symbol_ref "((enum attr_tune) arm_tune)"))) diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 6d21f16e005..6451ce0c767 100644 +index 3b082dc219a..1e53c965bdd 100644 --- a/gcc/doc/invoke.texi +++ b/gcc/doc/invoke.texi -@@ -17583,9 +17583,9 @@ Permissible names are: @samp{arm7tdmi}, @samp{arm7tdmi-s}, @samp{arm710t}, - @samp{cortex-m4}, @samp{cortex-m7}, @samp{cortex-m23}, @samp{cortex-m33}, +@@ -18835,9 +18835,9 @@ Permissible names are: @samp{arm7tdmi}, @samp{arm7tdmi-s}, @samp{arm710t}, + @samp{cortex-m35p}, @samp{cortex-m55}, @samp{cortex-m1.small-multiply}, @samp{cortex-m0.small-multiply}, @samp{cortex-m0plus.small-multiply}, @samp{exynos-m1}, @samp{marvell-pj4}, --@samp{neoverse-n1}, @samp{neoverse-v1}, @samp{xscale}, @samp{iwmmxt}, +-@samp{neoverse-n1} @samp{neoverse-v1}, @samp{xscale}, @samp{iwmmxt}, -@samp{iwmmxt2}, @samp{ep9312}, @samp{fa526}, @samp{fa626}, @samp{fa606te}, -@samp{fa626te}, @samp{fmp626}, @samp{fa726te}, @samp{xgene1}. +@samp{neoverse-n1}, @samp{neoverse-n2}, @samp{neoverse-v1}, @samp{xscale}, diff --git a/meta-webos/recipes-devtools/gcc/gcc/0007-arm-Add-missing-part-number-for-Neoverse-V1.patch b/meta-webos/recipes-devtools/gcc/gcc/0006-arm-Add-missing-part-number-for-Neoverse-V1.patch similarity index 72% rename from meta-webos/recipes-devtools/gcc/gcc/0007-arm-Add-missing-part-number-for-Neoverse-V1.patch rename to meta-webos/recipes-devtools/gcc/gcc/0006-arm-Add-missing-part-number-for-Neoverse-V1.patch index a0839290e..61a91e57e 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0007-arm-Add-missing-part-number-for-Neoverse-V1.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0006-arm-Add-missing-part-number-for-Neoverse-V1.patch @@ -1,6 +1,6 @@ -From a7a6dad197b0b809fbc6e89bf9cf7b76eaea84bd Mon Sep 17 00:00:00 2001 +From 958df3f3d694d38d66295878cd7d5902c5986531 Mon Sep 17 00:00:00 2001 From: Alex Coplan -Date: Mon, 5 Oct 2020 15:49:50 +0100 +Date: Mon, 5 Oct 2020 13:47:51 +0100 Subject: [PATCH] arm: Add missing part number for Neoverse V1 This patch adds vendor and part numbers which were missing from the @@ -11,17 +11,17 @@ gcc/ChangeLog: * config/arm/arm-cpus.in (neoverse-v1): Add missing vendor and part numbers. -Upstream-Status: Backport [9.4.0 6725de4e8376afefa7ee501ba7b31d74cbf4303d] +Upstream-Status: Backport [9.4.0 6725de4e8376afefa7ee501ba7b31d74cbf4303d == 10.3.0 1fce1d3eb3a234e5386bc62cce1980d68018c753] --- gcc/config/arm/arm-cpus.in | 2 ++ 1 file changed, 2 insertions(+) diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in -index 3c375b9a7b9..f87044fd25c 100644 +index ca772bdcf6d..d609113e969 100644 --- a/gcc/config/arm/arm-cpus.in +++ b/gcc/config/arm/arm-cpus.in -@@ -1370,6 +1370,8 @@ begin cpu neoverse-v1 - architecture armv8.4-a+fp16 +@@ -1486,6 +1486,8 @@ begin cpu neoverse-v1 + architecture armv8.4-a+fp16+bf16+i8mm option crypto add FP_ARMv8 CRYPTO costs cortex_a57 + vendor 41 diff --git a/meta-webos/recipes-devtools/gcc/gcc/0009-arm-Fix-up-neon_vector_mem_operand-PR97528.patch b/meta-webos/recipes-devtools/gcc/gcc/0007-arm-Fix-up-neon_vector_mem_operand-PR97528.patch similarity index 94% rename from meta-webos/recipes-devtools/gcc/gcc/0009-arm-Fix-up-neon_vector_mem_operand-PR97528.patch rename to meta-webos/recipes-devtools/gcc/gcc/0007-arm-Fix-up-neon_vector_mem_operand-PR97528.patch index bb8ff1cbc..07786229e 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0009-arm-Fix-up-neon_vector_mem_operand-PR97528.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0007-arm-Fix-up-neon_vector_mem_operand-PR97528.patch @@ -1,4 +1,4 @@ -From 20fac686312b1be21181abfe74471a3ee7416b16 Mon Sep 17 00:00:00 2001 +From 2a428274abb13124e6dc28b5e241044e80f4833f Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Fri, 20 Nov 2020 12:26:58 +0100 Subject: [PATCH] arm: Fix up neon_vector_mem_operand [PR97528] @@ -36,10 +36,10 @@ Upstream-Status: Backport [9.4.0 320d8676c770124a4baffab2d9e82224c74964ed == 11. create mode 100644 gcc/testsuite/gcc.target/arm/pr97528.c diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c -index 04edd637d43..4679da75dd8 100644 +index a8825ee3ee4..e7d060ae21b 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c -@@ -12730,7 +12730,9 @@ neon_vector_mem_operand (rtx op, int type, bool strict) +@@ -13388,7 +13388,9 @@ neon_vector_mem_operand (rtx op, int type, bool strict) /* Allow post-increment by register for VLDn */ if (type == 2 && GET_CODE (ind) == POST_MODIFY && GET_CODE (XEXP (ind, 1)) == PLUS diff --git a/meta-webos/recipes-devtools/gcc/gcc/0008-Backport-of-the-patch-for-PR-target-91816.patch b/meta-webos/recipes-devtools/gcc/gcc/0008-Backport-of-the-patch-for-PR-target-91816.patch deleted file mode 100644 index 6788e9cbe..000000000 --- a/meta-webos/recipes-devtools/gcc/gcc/0008-Backport-of-the-patch-for-PR-target-91816.patch +++ /dev/null @@ -1,304 +0,0 @@ -From 37872b691223e6c019232a4108f50d18a8248c0d Mon Sep 17 00:00:00 2001 -From: Stam Markianos-Wright -Date: Mon, 30 Nov 2020 11:05:30 +0000 -Subject: [PATCH] Backport of the patch for PR target/91816 - -This is a patch for an issue where the compiler was generating a -conditional branch in Thumb2, which was too far for b{cond} to handle. - -This backport also includes the subsequent fixes to the test in this -patch. - -gcc/ChangeLog - - * config/arm/arm-protos.h: New function arm_gen_far_branch prototype. - * config/arm/arm.c (arm_gen_far_branch): New function - arm_gen_far_branch. - * config/arm/arm.md: Update b for Thumb2 range checks. - -gcc/testsuite/ChangeLog - - * gcc.target/arm/pr91816.c: New test. - -Upstream-Status: Backport [9.4.0 6b7ab0e565d79a7e6ae5dbbf17a5eb4eafe56dc8 == 10.1.0 44f77a6dea2f312ee1743f3dde465c1b8453ee13 + 10.3.0 8804b6ae3da91f3baa82da2fe28090025d5717d3] ---- - gcc/config/arm/arm-protos.h | 2 + - gcc/config/arm/arm.c | 33 ++++++++ - gcc/config/arm/arm.md | 112 +++++++++++++++++++------ - gcc/testsuite/gcc.target/arm/pr91816.c | 64 ++++++++++++++ - 4 files changed, 185 insertions(+), 26 deletions(-) - create mode 100644 gcc/testsuite/gcc.target/arm/pr91816.c - -diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h -index 98beb6109b9..3e8bba5caea 100644 ---- a/gcc/config/arm/arm-protos.h -+++ b/gcc/config/arm/arm-protos.h -@@ -575,4 +575,6 @@ void arm_parse_option_features (sbitmap, const cpu_arch_option *, - - void arm_initialize_isa (sbitmap, const enum isa_feature *); - -+const char * arm_gen_far_branch (rtx *, int, const char * , const char *); -+ - #endif /* ! GCC_ARM_PROTOS_H */ -diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c -index d4e2ad2a317..04edd637d43 100644 ---- a/gcc/config/arm/arm.c -+++ b/gcc/config/arm/arm.c -@@ -31807,6 +31807,39 @@ arm_emit_speculation_barrier_function () - emit_library_call (speculation_barrier_libfunc, LCT_NORMAL, VOIDmode); - } - -+/* Generate code to enable conditional branches in functions over 1 MiB. -+ Parameters are: -+ operands: is the operands list of the asm insn (see arm_cond_branch or -+ arm_cond_branch_reversed). -+ pos_label: is an index into the operands array where operands[pos_label] is -+ the asm label of the final jump destination. -+ dest: is a string which is used to generate the asm label of the intermediate -+ destination -+ branch_format: is a string denoting the intermediate branch format, e.g. -+ "beq", "bne", etc. */ -+ -+const char * -+arm_gen_far_branch (rtx * operands, int pos_label, const char * dest, -+ const char * branch_format) -+{ -+ rtx_code_label * tmp_label = gen_label_rtx (); -+ char label_buf[256]; -+ char buffer[128]; -+ ASM_GENERATE_INTERNAL_LABEL (label_buf, dest , \ -+ CODE_LABEL_NUMBER (tmp_label)); -+ const char *label_ptr = arm_strip_name_encoding (label_buf); -+ rtx dest_label = operands[pos_label]; -+ operands[pos_label] = tmp_label; -+ -+ snprintf (buffer, sizeof (buffer), "%s%s", branch_format , label_ptr); -+ output_asm_insn (buffer, operands); -+ -+ snprintf (buffer, sizeof (buffer), "b\t%%l0%d\n%s:", pos_label, label_ptr); -+ operands[pos_label] = dest_label; -+ output_asm_insn (buffer, operands); -+ return ""; -+} -+ - #if CHECKING_P - namespace selftest { - -diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md -index 9f249800471..8557f2e544f 100644 ---- a/gcc/config/arm/arm.md -+++ b/gcc/config/arm/arm.md -@@ -7308,9 +7308,15 @@ - ;; And for backward branches we have - ;; (neg_range - neg_base_offs + pc_offs) = (neg_range - (-2 or -4) + 4). - ;; -+;; In 16-bit Thumb these ranges are: - ;; For a 'b' pos_range = 2046, neg_range = -2048 giving (-2040->2048). - ;; For a 'b' pos_range = 254, neg_range = -256 giving (-250 ->256). - -+;; In 32-bit Thumb these ranges are: -+;; For a 'b' +/- 16MB is not checked for. -+;; For a 'b' pos_range = 1048574, neg_range = -1048576 giving -+;; (-1048568 -> 1048576). -+ - (define_expand "cbranchsi4" - [(set (pc) (if_then_else - (match_operator 0 "expandable_comparison_operator" -@@ -7568,23 +7574,50 @@ - (label_ref (match_operand 0 "" "")) - (pc)))] - "TARGET_32BIT" -- "* -- if (arm_ccfsm_state == 1 || arm_ccfsm_state == 2) -+ { -+ if (arm_ccfsm_state == 1 || arm_ccfsm_state == 2) - { - arm_ccfsm_state += 2; -- return \"\"; -+ return ""; - } -- return \"b%d1\\t%l0\"; -- " -+ switch (get_attr_length (insn)) -+ { -+ case 2: /* Thumb2 16-bit b{cond}. */ -+ case 4: /* Thumb2 32-bit b{cond} or A32 b{cond}. */ -+ return "b%d1\t%l0"; -+ break; -+ -+ /* Thumb2 b{cond} out of range. Use 16-bit b{cond} and -+ unconditional branch b. */ -+ default: return arm_gen_far_branch (operands, 0, "Lbcond", "b%D1\t"); -+ } -+ } - [(set_attr "conds" "use") - (set_attr "type" "branch") - (set (attr "length") -- (if_then_else -- (and (match_test "TARGET_THUMB2") -- (and (ge (minus (match_dup 0) (pc)) (const_int -250)) -- (le (minus (match_dup 0) (pc)) (const_int 256)))) -- (const_int 2) -- (const_int 4)))] -+ (if_then_else (match_test "!TARGET_THUMB2") -+ -+ ;;Target is not Thumb2, therefore is A32. Generate b{cond}. -+ (const_int 4) -+ -+ ;; Check if target is within 16-bit Thumb2 b{cond} range. -+ (if_then_else (and (ge (minus (match_dup 0) (pc)) (const_int -250)) -+ (le (minus (match_dup 0) (pc)) (const_int 256))) -+ -+ ;; Target is Thumb2, within narrow range. -+ ;; Generate b{cond}. -+ (const_int 2) -+ -+ ;; Check if target is within 32-bit Thumb2 b{cond} range. -+ (if_then_else (and (ge (minus (match_dup 0) (pc))(const_int -1048568)) -+ (le (minus (match_dup 0) (pc)) (const_int 1048576))) -+ -+ ;; Target is Thumb2, within wide range. -+ ;; Generate b{cond} -+ (const_int 4) -+ ;; Target is Thumb2, out of range. -+ ;; Generate narrow b{cond} and unconditional branch b. -+ (const_int 6)))))] - ) - - (define_insn "*arm_cond_branch_reversed" -@@ -7594,23 +7627,50 @@ - (pc) - (label_ref (match_operand 0 "" ""))))] - "TARGET_32BIT" -- "* -- if (arm_ccfsm_state == 1 || arm_ccfsm_state == 2) -- { -- arm_ccfsm_state += 2; -- return \"\"; -- } -- return \"b%D1\\t%l0\"; -- " -- [(set_attr "conds" "use") -+ { -+ if (arm_ccfsm_state == 1 || arm_ccfsm_state == 2) -+ { -+ arm_ccfsm_state += 2; -+ return ""; -+ } -+ switch (get_attr_length (insn)) -+ { -+ case 2: /* Thumb2 16-bit b{cond}. */ -+ case 4: /* Thumb2 32-bit b{cond} or A32 b{cond}. */ -+ return "b%D1\t%l0"; -+ break; -+ -+ /* Thumb2 b{cond} out of range. Use 16-bit b{cond} and -+ unconditional branch b. */ -+ default: return arm_gen_far_branch (operands, 0, "Lbcond", "b%d1\t"); -+ } -+ } -+[(set_attr "conds" "use") - (set_attr "type" "branch") - (set (attr "length") -- (if_then_else -- (and (match_test "TARGET_THUMB2") -- (and (ge (minus (match_dup 0) (pc)) (const_int -250)) -- (le (minus (match_dup 0) (pc)) (const_int 256)))) -- (const_int 2) -- (const_int 4)))] -+ (if_then_else (match_test "!TARGET_THUMB2") -+ -+ ;;Target is not Thumb2, therefore is A32. Generate b{cond}. -+ (const_int 4) -+ -+ ;; Check if target is within 16-bit Thumb2 b{cond} range. -+ (if_then_else (and (ge (minus (match_dup 0) (pc)) (const_int -250)) -+ (le (minus (match_dup 0) (pc)) (const_int 256))) -+ -+ ;; Target is Thumb2, within narrow range. -+ ;; Generate b{cond}. -+ (const_int 2) -+ -+ ;; Check if target is within 32-bit Thumb2 b{cond} range. -+ (if_then_else (and (ge (minus (match_dup 0) (pc))(const_int -1048568)) -+ (le (minus (match_dup 0) (pc)) (const_int 1048576))) -+ -+ ;; Target is Thumb2, within wide range. -+ ;; Generate b{cond}. -+ (const_int 4) -+ ;; Target is Thumb2, out of range. -+ ;; Generate narrow b{cond} and unconditional branch b. -+ (const_int 6)))))] - ) - - -diff --git a/gcc/testsuite/gcc.target/arm/pr91816.c b/gcc/testsuite/gcc.target/arm/pr91816.c -new file mode 100644 -index 00000000000..f1269141690 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/arm/pr91816.c -@@ -0,0 +1,64 @@ -+/* { dg-do compile } */ -+/* { dg-require-effective-target arm_thumb2_ok } */ -+/* { dg-additional-options "-mthumb" } */ -+/* { dg-timeout-factor 4.0 } */ -+ -+int printf(const char *, ...); -+ -+#define HW0 printf("Hello World!\n"); -+#define HW1 HW0 HW0 HW0 HW0 HW0 HW0 HW0 HW0 HW0 HW0 -+#define HW2 HW1 HW1 HW1 HW1 HW1 HW1 HW1 HW1 HW1 HW1 -+#define HW3 HW2 HW2 HW2 HW2 HW2 HW2 HW2 HW2 HW2 HW2 -+#define HW4 HW3 HW3 HW3 HW3 HW3 HW3 HW3 HW3 HW3 HW3 -+#define HW5 HW4 HW4 HW4 HW4 HW4 HW4 HW4 HW4 HW4 HW4 -+#define HW6 HW5 HW5 -+ -+__attribute__((noinline,noclone)) void f1 (int a) -+{ -+ if (a) { HW0 } -+} -+ -+__attribute__((noinline,noclone)) void f2 (int a) -+{ -+ if (a) { HW3 } -+} -+ -+ -+__attribute__((noinline,noclone)) void f3 (int a) -+{ -+ if (a) { HW6 } -+} -+ -+__attribute__((noinline,noclone)) void f4 (int a) -+{ -+ if (a == 1) { HW0 } -+} -+ -+__attribute__((noinline,noclone)) void f5 (int a) -+{ -+ if (a == 1) { HW3 } -+} -+ -+ -+__attribute__((noinline,noclone)) void f6 (int a) -+{ -+ if (a == 1) { HW6 } -+} -+ -+ -+int main(void) -+{ -+ f1(0); -+ f2(0); -+ f3(0); -+ f4(0); -+ f5(0); -+ f6(0); -+ return 0; -+} -+ -+ -+/* { dg-final { scan-assembler-times "beq\\t.L\[0-9\]" 2 } } */ -+/* { dg-final { scan-assembler-times "beq\\t.Lbcond\[0-9\]" 1 } } */ -+/* { dg-final { scan-assembler-times "bne\\t.L\[0-9\]" 2 } } */ -+/* { dg-final { scan-assembler-times "bne\\t.Lbcond\[0-9\]" 1 } } */ diff --git a/meta-webos/recipes-devtools/gcc/gcc/0011-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch b/meta-webos/recipes-devtools/gcc/gcc/0008-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch similarity index 87% rename from meta-webos/recipes-devtools/gcc/gcc/0011-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch rename to meta-webos/recipes-devtools/gcc/gcc/0008-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch index d40d005f2..c9e44ffa4 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0011-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0008-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch @@ -1,4 +1,4 @@ -From d1651f733d2104137a83ac65f7686cc58c9e608a Mon Sep 17 00:00:00 2001 +From 18b0fb540b3d275ba31012fe5501b842f04b524b Mon Sep 17 00:00:00 2001 From: Richard Earnshaw Date: Thu, 27 May 2021 10:25:37 +0100 Subject: [PATCH] arm: Remove use of opts_set in arm_configure_build_target @@ -41,10 +41,10 @@ Upstream-Status: Backport [releases/gcc-9 (9.5.0) 255fe52e8ad859f59bb863ad75d00f 3 files changed, 11 insertions(+), 18 deletions(-) diff --git a/gcc/config/arm/arm-c.c b/gcc/config/arm/arm-c.c -index 6e256ee0a12..38da34203d0 100644 +index 7468a20bd98..17b05567101 100644 --- a/gcc/config/arm/arm-c.c +++ b/gcc/config/arm/arm-c.c -@@ -266,8 +266,7 @@ arm_pragma_target_parse (tree args, tree pop_target) +@@ -408,8 +408,7 @@ arm_pragma_target_parse (tree args, tree pop_target) target_option_current_node, but not handle_pragma_target. */ target_option_current_node = cur_tree; arm_configure_build_target (&arm_active_target, @@ -55,10 +55,10 @@ index 6e256ee0a12..38da34203d0 100644 /* Update macros if target_node changes. The global state will be restored diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h -index 3e8bba5caea..cd16c3c35f9 100644 +index 33d162c3e00..e55e4d35c4d 100644 --- a/gcc/config/arm/arm-protos.h +++ b/gcc/config/arm/arm-protos.h -@@ -229,8 +229,7 @@ extern bool arm_change_mode_p (tree); +@@ -239,8 +239,7 @@ extern bool arm_change_mode_p (tree); extern tree arm_valid_target_attribute_tree (tree, struct gcc_options *, struct gcc_options *); extern void arm_configure_build_target (struct arm_build_target *, @@ -69,10 +69,10 @@ index 3e8bba5caea..cd16c3c35f9 100644 extern void arm_options_perform_arch_sanity_checks (void); extern void arm_pr_long_calls (struct cpp_reader *); diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c -index 4679da75dd8..3895007dcdb 100644 +index e7d060ae21b..f91001e8433 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c -@@ -2985,7 +2985,7 @@ arm_override_options_after_change (void) +@@ -3036,7 +3036,7 @@ arm_override_options_after_change (void) { arm_configure_build_target (&arm_active_target, TREE_TARGET_OPTION (target_option_default_node), @@ -81,7 +81,7 @@ index 4679da75dd8..3895007dcdb 100644 arm_override_options_after_change_1 (&global_options); } -@@ -3006,8 +3006,7 @@ arm_option_restore (struct gcc_options *opts, struct cl_target_option *ptr) +@@ -3057,8 +3057,7 @@ arm_option_restore (struct gcc_options *opts, struct cl_target_option *ptr) opts->x_arm_arch_string = ptr->x_arm_arch_string; opts->x_arm_cpu_string = ptr->x_arm_cpu_string; opts->x_arm_tune_string = ptr->x_arm_tune_string; @@ -91,7 +91,7 @@ index 4679da75dd8..3895007dcdb 100644 } /* Reset options between modes that the user has specified. */ -@@ -3124,7 +3123,6 @@ static sbitmap isa_quirkbits; +@@ -3181,7 +3180,6 @@ static sbitmap isa_quirkbits; void arm_configure_build_target (struct arm_build_target *target, struct cl_target_option *opts, @@ -99,7 +99,7 @@ index 4679da75dd8..3895007dcdb 100644 bool warn_compatible) { const cpu_option *arm_selected_tune = NULL; -@@ -3139,7 +3137,7 @@ arm_configure_build_target (struct arm_build_target *target, +@@ -3196,7 +3194,7 @@ arm_configure_build_target (struct arm_build_target *target, target->core_name = NULL; target->arch_name = NULL; @@ -108,7 +108,7 @@ index 4679da75dd8..3895007dcdb 100644 { arm_selected_arch = arm_parse_arch_option_name (all_architectures, "-march", -@@ -3147,7 +3145,7 @@ arm_configure_build_target (struct arm_build_target *target, +@@ -3204,7 +3202,7 @@ arm_configure_build_target (struct arm_build_target *target, arch_opts = strchr (opts->x_arm_arch_string, '+'); } @@ -117,7 +117,7 @@ index 4679da75dd8..3895007dcdb 100644 { arm_selected_cpu = arm_parse_cpu_option_name (all_cores, "-mcpu", opts->x_arm_cpu_string); -@@ -3157,7 +3155,7 @@ arm_configure_build_target (struct arm_build_target *target, +@@ -3214,7 +3212,7 @@ arm_configure_build_target (struct arm_build_target *target, options for tuning. */ } @@ -126,7 +126,7 @@ index 4679da75dd8..3895007dcdb 100644 { arm_selected_tune = arm_parse_cpu_option_name (all_cores, "-mtune", opts->x_arm_tune_string); -@@ -3392,8 +3390,7 @@ arm_option_override (void) +@@ -3458,8 +3456,7 @@ arm_option_override (void) } cl_target_option_save (&opts, &global_options); @@ -136,7 +136,7 @@ index 4679da75dd8..3895007dcdb 100644 #ifdef SUBTARGET_OVERRIDE_OPTIONS SUBTARGET_OVERRIDE_OPTIONS; -@@ -30938,10 +30935,8 @@ arm_can_inline_p (tree caller, tree callee) +@@ -32334,10 +32331,8 @@ arm_can_inline_p (tree caller, tree callee) caller_target.isa = sbitmap_alloc (isa_num_bits); callee_target.isa = sbitmap_alloc (isa_num_bits); @@ -149,7 +149,7 @@ index 4679da75dd8..3895007dcdb 100644 if (!bitmap_subset_p (callee_target.isa, caller_target.isa)) can_inline = false; -@@ -31073,7 +31068,7 @@ arm_valid_target_attribute_tree (tree args, struct gcc_options *opts, +@@ -32473,7 +32468,7 @@ arm_valid_target_attribute_tree (tree args, struct gcc_options *opts, return NULL_TREE; cl_target_option_save (&cl_opts, opts); diff --git a/meta-webos/recipes-devtools/gcc/gcc/0013-arm-ensure-the-arch_name-is-always-set-for-the-build.patch b/meta-webos/recipes-devtools/gcc/gcc/0009-arm-ensure-the-arch_name-is-always-set-for-the-build.patch similarity index 90% rename from meta-webos/recipes-devtools/gcc/gcc/0013-arm-ensure-the-arch_name-is-always-set-for-the-build.patch rename to meta-webos/recipes-devtools/gcc/gcc/0009-arm-ensure-the-arch_name-is-always-set-for-the-build.patch index e27e0c145..0122a49fd 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0013-arm-ensure-the-arch_name-is-always-set-for-the-build.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0009-arm-ensure-the-arch_name-is-always-set-for-the-build.patch @@ -1,4 +1,4 @@ -From 40276487efdbc07cf0a2e4c4d3b0060d1fc7445c Mon Sep 17 00:00:00 2001 +From 59648e90113bef49ac6bf2b0b1891958c6cad382 Mon Sep 17 00:00:00 2001 From: Richard Earnshaw Date: Mon, 26 Jul 2021 17:07:14 +0100 Subject: [PATCH] arm: ensure the arch_name is always set for the build target @@ -24,10 +24,10 @@ Upstream-Status: Backport [releases/gcc-9 (9.5.0) 140a8089000ffa340b2f188be8abec 1 file changed, 2 insertions(+) diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c -index 19b9cc37324..4685fd88327 100644 +index f91001e8433..70bc258f9ce 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c -@@ -3357,6 +3357,8 @@ arm_configure_build_target (struct arm_build_target *target, +@@ -3413,6 +3413,8 @@ arm_configure_build_target (struct arm_build_target *target, const cpu_tune *tune_data = &all_tunes[arm_selected_tune - all_cores]; /* Finish initializing the target structure. */ diff --git a/meta-webos/recipes-devtools/gcc/gcc/0010-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch b/meta-webos/recipes-devtools/gcc/gcc/0010-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch deleted file mode 100644 index d5e827e50..000000000 --- a/meta-webos/recipes-devtools/gcc/gcc/0010-PR47785-Add-support-for-handling-Xassembler-Wa-optio.patch +++ /dev/null @@ -1,418 +0,0 @@ -From 800dc0cda58797b4327122a98e295bc87f3fd81e Mon Sep 17 00:00:00 2001 -From: Prathamesh Kulkarni -Date: Mon, 24 Feb 2020 11:55:45 +0530 -Subject: [PATCH] PR47785: Add support for handling Xassembler/Wa options with - LTO. - -Skip the test if arm7a is not supported at link time. This is the case -if the toolchain targets an M-profile CPU by default and does not have -A-profile multilib: the link step fails because it tries to mix -M-profile startup files with A-profile testcase. - -gcc/ - -2020-02-24 Prathamesh Kulkarni - Kugan Vivekandarajah - - PR driver/47785 - * gcc.c (putenv_COLLECT_AS_OPTIONS): New function. - (driver::main): Call putenv_COLLECT_AS_OPTIONS. - * opts-common.c (parse_options_from_collect_gcc_options): New function. - (prepend_xassembler_to_collect_as_options): Likewise. - * opts.h (parse_options_from_collect_gcc_options): Declare prototype. - (prepend_xassembler_to_collect_as_options): Likewise. - * lto-opts.c (lto_write_options): Stream assembler options - in COLLECT_AS_OPTIONS. - * lto-wrapper.c (xassembler_options_error): New static variable. - (get_options_from_collect_gcc_options): Move parsing options code to - parse_options_from_collect_gcc_options and call it. - (merge_and_complain): Validate -Xassembler options. - (append_compiler_options): Handle OPT_Xassembler. - (run_gcc): Append command line -Xassembler options to - collect_gcc_options. - * doc/invoke.texi: Add documentation about using Xassembler - options with LTO. - -gcc/testsuite/ - -2020-02-24 Christophe Lyon - - PR lto/78353 - * gcc.target/arm/pr78353-1.c: Add arm_arch_v7a_multilib effective - target. - * gcc.target/arm/pr78353-2.c: Likewise. - -2020-02-24 Prathamesh Kulkarni - Kugan Vivekandarajah - - * gcc.target/arm/pr78353-1.c: New test. - * gcc.target/arm/pr78353-2.c: Likewise. - -(cherry picked from commit f1a681a174cdfb82e62c246d6f4add9a25fc2e43) -Upstream-Status: Backport [9.4.0 ecdb697389b284a0f3912932e0a440c1071fbadd == 10.1.0 f1a681a174cdfb82e62c246d6f4add9a25fc2e43] ---- - gcc/doc/invoke.texi | 6 ++ - gcc/gcc.c | 29 +++++++ - gcc/lto-opts.c | 6 ++ - gcc/lto-wrapper.c | 102 ++++++++++++++++------- - gcc/opts-common.c | 66 +++++++++++++++ - gcc/opts.h | 5 ++ - gcc/testsuite/gcc.target/arm/pr78353-1.c | 9 ++ - gcc/testsuite/gcc.target/arm/pr78353-2.c | 10 +++ - 8 files changed, 202 insertions(+), 31 deletions(-) - create mode 100644 gcc/testsuite/gcc.target/arm/pr78353-1.c - create mode 100644 gcc/testsuite/gcc.target/arm/pr78353-2.c - -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 6451ce0c767..ef2e98fb1d2 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -10279,6 +10279,12 @@ conflicting translation units. Specifically - precedence; and for example @option{-ffp-contract=off} takes precedence - over @option{-ffp-contract=fast}. You can override them at link time. - -+When you need to pass options to the assembler via @option{-Wa} or -+@option{-Xassembler} make sure to either compile such translation -+units with @option{-fno-lto} or consistently use the same assembler -+options on all translation units. You can alternatively also -+specify assembler options at LTO link time. -+ - If LTO encounters objects with C linkage declared with incompatible - types in separate translation units to be linked together (undefined - behavior according to ISO C99 6.2.7), a non-fatal diagnostic may be -diff --git a/gcc/gcc.c b/gcc/gcc.c -index 3e79da4238c..c0b05f3ef4e 100644 ---- a/gcc/gcc.c -+++ b/gcc/gcc.c -@@ -5282,6 +5282,34 @@ do_specs_vec (vec vec) - } - } - -+/* Add options passed via -Xassembler or -Wa to COLLECT_AS_OPTIONS. */ -+ -+static void -+putenv_COLLECT_AS_OPTIONS (vec vec) -+{ -+ if (vec.is_empty ()) -+ return; -+ -+ obstack_init (&collect_obstack); -+ obstack_grow (&collect_obstack, "COLLECT_AS_OPTIONS=", -+ strlen ("COLLECT_AS_OPTIONS=")); -+ -+ char *opt; -+ unsigned ix; -+ -+ FOR_EACH_VEC_ELT (vec, ix, opt) -+ { -+ obstack_1grow (&collect_obstack, '\''); -+ obstack_grow (&collect_obstack, opt, strlen (opt)); -+ obstack_1grow (&collect_obstack, '\''); -+ if (ix < vec.length () - 1) -+ obstack_1grow(&collect_obstack, ' '); -+ } -+ -+ obstack_1grow (&collect_obstack, '\0'); -+ xputenv (XOBFINISH (&collect_obstack, char *)); -+} -+ - /* Process the sub-spec SPEC as a portion of a larger spec. - This is like processing a whole spec except that we do - not initialize at the beginning and we do not supply a -@@ -7402,6 +7430,7 @@ driver::main (int argc, char **argv) - global_initializations (); - build_multilib_strings (); - set_up_specs (); -+ putenv_COLLECT_AS_OPTIONS (assembler_options); - putenv_COLLECT_GCC (argv[0]); - maybe_putenv_COLLECT_LTO_WRAPPER (); - maybe_putenv_OFFLOAD_TARGETS (); -diff --git a/gcc/lto-opts.c b/gcc/lto-opts.c -index 5e59e9327e7..bb0cdfae029 100644 ---- a/gcc/lto-opts.c -+++ b/gcc/lto-opts.c -@@ -159,6 +159,12 @@ lto_write_options (void) - append_to_collect_gcc_options (&temporary_obstack, &first_p, - option->canonical_option[j]); - } -+ -+ const char *collect_as_options = getenv ("COLLECT_AS_OPTIONS"); -+ if (collect_as_options) -+ prepend_xassembler_to_collect_as_options (collect_as_options, -+ &temporary_obstack); -+ - obstack_grow (&temporary_obstack, "\0", 1); - args = XOBFINISH (&temporary_obstack, char *); - lto_write_data (args, strlen (args) + 1); -diff --git a/gcc/lto-wrapper.c b/gcc/lto-wrapper.c -index 10bd7c9becb..d12135ade1f 100644 ---- a/gcc/lto-wrapper.c -+++ b/gcc/lto-wrapper.c -@@ -73,6 +73,7 @@ static char *offload_objects_file_name; - static char *makefile; - static unsigned int num_deb_objs; - static const char **early_debug_object_names; -+static bool xassembler_options_error = false; - - const char tool_name[] = "lto-wrapper"; - -@@ -137,41 +138,14 @@ get_options_from_collect_gcc_options (const char *collect_gcc, - unsigned int *decoded_options_count) - { - struct obstack argv_obstack; -- char *argv_storage; - const char **argv; -- int j, k, argc; -+ int argc; - -- argv_storage = xstrdup (collect_gcc_options); - obstack_init (&argv_obstack); - obstack_ptr_grow (&argv_obstack, collect_gcc); - -- for (j = 0, k = 0; argv_storage[j] != '\0'; ++j) -- { -- if (argv_storage[j] == '\'') -- { -- obstack_ptr_grow (&argv_obstack, &argv_storage[k]); -- ++j; -- do -- { -- if (argv_storage[j] == '\0') -- fatal_error (input_location, "malformed COLLECT_GCC_OPTIONS"); -- else if (strncmp (&argv_storage[j], "'\\''", 4) == 0) -- { -- argv_storage[k++] = '\''; -- j += 4; -- } -- else if (argv_storage[j] == '\'') -- break; -- else -- argv_storage[k++] = argv_storage[j++]; -- } -- while (1); -- argv_storage[k++] = '\0'; -- } -- } -- -- obstack_ptr_grow (&argv_obstack, NULL); -- argc = obstack_object_size (&argv_obstack) / sizeof (void *) - 1; -+ parse_options_from_collect_gcc_options (collect_gcc_options, -+ &argv_obstack, &argc); - argv = XOBFINISH (&argv_obstack, const char **); - - decode_cmdline_options_to_array (argc, (const char **)argv, CL_DRIVER, -@@ -509,6 +483,45 @@ merge_and_complain (struct cl_decoded_option **decoded_options, - } - else - j++; -+ -+ if (!xassembler_options_error) -+ for (i = j = 0; ; i++, j++) -+ { -+ for (; i < *decoded_options_count; i++) -+ if ((*decoded_options)[i].opt_index == OPT_Xassembler) -+ break; -+ -+ for (; j < fdecoded_options_count; j++) -+ if (fdecoded_options[j].opt_index == OPT_Xassembler) -+ break; -+ -+ if (i == *decoded_options_count && j == fdecoded_options_count) -+ break; -+ else if (i < *decoded_options_count && j == fdecoded_options_count) -+ { -+ warning (0, "Extra option to -Xassembler: %s," -+ " dropping all -Xassembler and -Wa options.", -+ (*decoded_options)[i].arg); -+ xassembler_options_error = true; -+ break; -+ } -+ else if (i == *decoded_options_count && j < fdecoded_options_count) -+ { -+ warning (0, "Extra option to -Xassembler: %s," -+ " dropping all -Xassembler and -Wa options.", -+ fdecoded_options[j].arg); -+ xassembler_options_error = true; -+ break; -+ } -+ else if (strcmp ((*decoded_options)[i].arg, fdecoded_options[j].arg)) -+ { -+ warning (0, "Options to Xassembler do not match: %s, %s," -+ " dropping all -Xassembler and -Wa options.", -+ (*decoded_options)[i].arg, fdecoded_options[j].arg); -+ xassembler_options_error = true; -+ break; -+ } -+ } - } - - /* Auxiliary function that frees elements of PTR and PTR itself. -@@ -622,6 +635,13 @@ append_compiler_options (obstack *argv_obstack, struct cl_decoded_option *opts, - case OPT_Os: - break; - -+ case OPT_Xassembler: -+ /* When we detected a mismatch in assembler options between -+ the input TU's fall back to previous behavior of ignoring them. */ -+ if (xassembler_options_error) -+ continue; -+ break; -+ - default: - if (!(cl_options[option->opt_index].flags & CL_TARGET)) - continue; -@@ -1117,7 +1137,8 @@ run_gcc (unsigned argc, char *argv[]) - const char **argv_ptr; - char *list_option_full = NULL; - const char *linker_output = NULL; -- const char *collect_gcc, *collect_gcc_options; -+ const char *collect_gcc; -+ char *collect_gcc_options; - int parallel = 0; - int jobserver = 0; - bool no_partition = false; -@@ -1146,6 +1167,25 @@ run_gcc (unsigned argc, char *argv[]) - if (!collect_gcc_options) - fatal_error (input_location, - "environment variable COLLECT_GCC_OPTIONS must be set"); -+ -+ char *collect_as_options = getenv ("COLLECT_AS_OPTIONS"); -+ -+ /* Prepend -Xassembler to each option, and append the string -+ to collect_gcc_options. */ -+ if (collect_as_options) -+ { -+ obstack temporary_obstack; -+ obstack_init (&temporary_obstack); -+ -+ prepend_xassembler_to_collect_as_options (collect_as_options, -+ &temporary_obstack); -+ obstack_1grow (&temporary_obstack, '\0'); -+ -+ char *xassembler_opts_string -+ = XOBFINISH (&temporary_obstack, char *); -+ strcat (collect_gcc_options, xassembler_opts_string); -+ } -+ - get_options_from_collect_gcc_options (collect_gcc, collect_gcc_options, - &decoded_options, - &decoded_options_count); -diff --git a/gcc/opts-common.c b/gcc/opts-common.c -index d0b943bc819..fb48005b665 100644 ---- a/gcc/opts-common.c -+++ b/gcc/opts-common.c -@@ -1711,3 +1711,69 @@ control_warning_option (unsigned int opt_index, int kind, const char *arg, - } - } - } -+ -+/* Parse options in COLLECT_GCC_OPTIONS and push them on ARGV_OBSTACK. -+ Store number of arguments into ARGC_P. */ -+ -+void -+parse_options_from_collect_gcc_options (const char *collect_gcc_options, -+ obstack *argv_obstack, -+ int *argc_p) -+{ -+ char *argv_storage = xstrdup (collect_gcc_options); -+ int j, k; -+ -+ for (j = 0, k = 0; argv_storage[j] != '\0'; ++j) -+ { -+ if (argv_storage[j] == '\'') -+ { -+ obstack_ptr_grow (argv_obstack, &argv_storage[k]); -+ ++j; -+ do -+ { -+ if (argv_storage[j] == '\0') -+ fatal_error (input_location, -+ "malformed %"); -+ else if (strncmp (&argv_storage[j], "'\\''", 4) == 0) -+ { -+ argv_storage[k++] = '\''; -+ j += 4; -+ } -+ else if (argv_storage[j] == '\'') -+ break; -+ else -+ argv_storage[k++] = argv_storage[j++]; -+ } -+ while (1); -+ argv_storage[k++] = '\0'; -+ } -+ } -+ -+ obstack_ptr_grow (argv_obstack, NULL); -+ *argc_p = obstack_object_size (argv_obstack) / sizeof (void *) - 1; -+} -+ -+/* Prepend -Xassembler for each option in COLLECT_AS_OPTIONS, -+ and push on O. */ -+ -+void prepend_xassembler_to_collect_as_options (const char *collect_as_options, -+ obstack *o) -+{ -+ obstack opts_obstack; -+ int opts_count; -+ -+ obstack_init (&opts_obstack); -+ parse_options_from_collect_gcc_options (collect_as_options, -+ &opts_obstack, &opts_count); -+ const char **assembler_opts = XOBFINISH (&opts_obstack, const char **); -+ -+ for (int i = 0; i < opts_count; i++) -+ { -+ obstack_grow (o, " '-Xassembler' ", -+ strlen (" '-Xassembler' ")); -+ const char *opt = assembler_opts[i]; -+ obstack_1grow (o, '\''); -+ obstack_grow (o, opt, strlen (opt)); -+ obstack_1grow (o, '\''); -+ } -+} -diff --git a/gcc/opts.h b/gcc/opts.h -index f14d9bcb896..c517458ddef 100644 ---- a/gcc/opts.h -+++ b/gcc/opts.h -@@ -456,4 +456,9 @@ extern bool parse_and_check_align_values (const char *flag, - bool report_error, - location_t loc); - -+extern void parse_options_from_collect_gcc_options (const char *, obstack *, -+ int *); -+ -+extern void prepend_xassembler_to_collect_as_options (const char *, obstack *); -+ - #endif -diff --git a/gcc/testsuite/gcc.target/arm/pr78353-1.c b/gcc/testsuite/gcc.target/arm/pr78353-1.c -new file mode 100644 -index 00000000000..a107e300269 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/arm/pr78353-1.c -@@ -0,0 +1,9 @@ -+/* { dg-do link } */ -+/* { dg-require-effective-target arm_arch_v7a_multilib } */ -+/* { dg-options "-march=armv7-a -mthumb -O2 -flto -Wa,-mimplicit-it=always" } */ -+ -+int main(int x) -+{ -+ asm("teq %0, #0; addne %0, %0, #1" : "=r" (x)); -+ return x; -+} -diff --git a/gcc/testsuite/gcc.target/arm/pr78353-2.c b/gcc/testsuite/gcc.target/arm/pr78353-2.c -new file mode 100644 -index 00000000000..2589e6135aa ---- /dev/null -+++ b/gcc/testsuite/gcc.target/arm/pr78353-2.c -@@ -0,0 +1,10 @@ -+/* { dg-do link } */ -+/* { dg-require-effective-target arm_arch_v7a_multilib } */ -+/* { dg-options "-march=armv7-a -mthumb -O2 -flto -Wa,-mimplicit-it=always,-mthumb" } */ -+ -+int main(int x) -+{ -+ asm("teq %0, #0; addne %0, %0, #1" : "=r" (x)); -+ return x; -+} -+ diff --git a/meta-webos/recipes-devtools/gcc/gcc/0014-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch b/meta-webos/recipes-devtools/gcc/gcc/0010-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch similarity index 89% rename from meta-webos/recipes-devtools/gcc/gcc/0014-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch rename to meta-webos/recipes-devtools/gcc/gcc/0010-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch index 563b84e6e..92ef9aa49 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0014-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0010-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch @@ -1,4 +1,4 @@ -From b38ce648cb4fd3229caf55fe1b9e159d89861e99 Mon Sep 17 00:00:00 2001 +From 638d471b646189a7138c3ad76e9078fc67c98bb3 Mon Sep 17 00:00:00 2001 From: Richard Earnshaw Date: Tue, 27 Jul 2021 15:44:57 +0100 Subject: [PATCH] arm: Don't reconfigure globals in arm_configure_build_target @@ -35,10 +35,10 @@ Upstream-Status: Backport [releases/gcc-9 (9.5.0) 9a48ce5c29158af88c0b98a97f5336 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/config/arm/arm-c.c b/gcc/config/arm/arm-c.c -index 38da34203d0..8cb08646ce5 100644 +index 17b05567101..36b12215243 100644 --- a/gcc/config/arm/arm-c.c +++ b/gcc/config/arm/arm-c.c -@@ -267,6 +267,7 @@ arm_pragma_target_parse (tree args, tree pop_target) +@@ -409,6 +409,7 @@ arm_pragma_target_parse (tree args, tree pop_target) target_option_current_node = cur_tree; arm_configure_build_target (&arm_active_target, TREE_TARGET_OPTION (cur_tree), false); @@ -47,10 +47,10 @@ index 38da34203d0..8cb08646ce5 100644 /* Update macros if target_node changes. The global state will be restored diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c -index 4685fd88327..f4ed21ebb50 100644 +index 70bc258f9ce..689a6bb82a6 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c -@@ -3007,6 +3007,7 @@ arm_option_restore (struct gcc_options *opts, struct cl_target_option *ptr) +@@ -3058,6 +3058,7 @@ arm_option_restore (struct gcc_options *opts, struct cl_target_option *ptr) opts->x_arm_cpu_string = ptr->x_arm_cpu_string; opts->x_arm_tune_string = ptr->x_arm_tune_string; arm_configure_build_target (&arm_active_target, ptr, false); @@ -58,7 +58,7 @@ index 4685fd88327..f4ed21ebb50 100644 } /* Reset options between modes that the user has specified. */ -@@ -3366,7 +3367,6 @@ arm_configure_build_target (struct arm_build_target *target, +@@ -3422,7 +3423,6 @@ arm_configure_build_target (struct arm_build_target *target, target->tune_flags = tune_data->tune_flags; target->tune = tune_data->tune; target->tune_core = tune_data->scheduler; diff --git a/meta-webos/recipes-devtools/gcc/gcc/0011-arm-Add-nomve-and-nomve.fp-options-to-mcpu-cortex-m5.patch b/meta-webos/recipes-devtools/gcc/gcc/0011-arm-Add-nomve-and-nomve.fp-options-to-mcpu-cortex-m5.patch new file mode 100644 index 000000000..6eba2790d --- /dev/null +++ b/meta-webos/recipes-devtools/gcc/gcc/0011-arm-Add-nomve-and-nomve.fp-options-to-mcpu-cortex-m5.patch @@ -0,0 +1,481 @@ +From fb21f578b5a419b899d3664df2052516973b2d10 Mon Sep 17 00:00:00 2001 +From: Joe Ramsay +Date: Tue, 6 Oct 2020 07:33:52 +0100 +Subject: [PATCH] arm: Add +nomve and +nomve.fp options to -mcpu=cortex-m55 + +This patch rearranges feature bits for MVE and FP to implement the +following flags for -mcpu=cortex-m55. + + - +nomve: equivalent to armv8.1-m.main+fp.dp+dsp. + - +nomve.fp: equivalent to armv8.1-m.main+mve+fp.dp (+dsp is implied by +mve). + - +nofp: equivalent to armv8.1-m.main+mve (+dsp is implied by +mve). + - +nodsp: equivalent to armv8.1-m.main+fp.dp. + +Combinations of the above: + + - +nomve+nofp: equivalent to armv8.1-m.main+dsp. + - +nodsp+nofp: equivalent to armv8.1-m.main. + +Due to MVE and FP sharing vfp_base, some new syntax was required in the CPU +description to implement the concept of 'implied bits'. These are non-named +features added to the ISA late, depending on whether one or more features which +depend on them are present. This means vfp_base can be present when only one of +MVE and FP is removed, but absent when both are removed. + +gcc/ChangeLog: + +2020-07-31 Joe Ramsay + + * config/arm/arm-cpus.in: + (ALL_FPU_INTERNAL): Remove vfp_base. + (VFPv2): Remove vfp_base. + (MVE): Remove vfp_base. + (vfp_base): Redefine as implied bit dependent on MVE or FP + (cortex-m55): Add flags to disable MVE, MVE FP, FP and DSP extensions. + * config/arm/arm.c (arm_configure_build_target): Add implied bits to ISA. + * config/arm/parsecpu.awk: + (gen_isa): Print implied bits and their dependencies to ISA header. + (gen_data): Add parsing for implied feature bits. + +gcc/testsuite/ChangeLog: + + * gcc.target/arm/cortex-m55-nodsp-flag-hard.c: New test. + * gcc.target/arm/cortex-m55-nodsp-flag-softfp.c: New test. + * gcc.target/arm/cortex-m55-nodsp-nofp-flag-softfp.c: New test. + * gcc.target/arm/cortex-m55-nofp-flag-hard.c: New test. + * gcc.target/arm/cortex-m55-nofp-flag-softfp.c: New test. + * gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c: New test. + * gcc.target/arm/cortex-m55-nomve-flag-hard.c: New test. + * gcc.target/arm/cortex-m55-nomve-flag-softfp.c: New test. + * gcc.target/arm/cortex-m55-nomve.fp-flag-hard.c: New test. + * gcc.target/arm/cortex-m55-nomve.fp-flag-softfp.c: New test. + * gcc.target/arm/multilib.exp: Add tests for -mcpu=cortex-m55. + +(cherry picked from commit 3e8fb15a8cfd0e62dd474af9f536863392ed7572) +Upstream-Status: Backport [releases/gcc-10 (10.4.0) 8f560c4d58255f0ffe9fa7458159724b13386700 == 11.1.0 3e8fb15a8cfd0e62dd474af9f536863392ed7572] +--- + gcc/config/arm/arm-cpus.in | 26 +++++++--- + gcc/config/arm/arm.c | 14 +++++ + gcc/config/arm/parsecpu.awk | 51 +++++++++++++++++++ + .../arm/cortex-m55-nodsp-flag-hard.c | 15 ++++++ + .../arm/cortex-m55-nodsp-flag-softfp.c | 15 ++++++ + .../arm/cortex-m55-nodsp-nofp-flag-softfp.c | 15 ++++++ + .../arm/cortex-m55-nofp-flag-hard.c | 15 ++++++ + .../arm/cortex-m55-nofp-flag-softfp.c | 15 ++++++ + .../arm/cortex-m55-nofp-nomve-flag-softfp.c | 15 ++++++ + .../arm/cortex-m55-nomve-flag-hard.c | 15 ++++++ + .../arm/cortex-m55-nomve-flag-softfp.c | 15 ++++++ + .../arm/cortex-m55-nomve.fp-flag-hard.c | 15 ++++++ + .../arm/cortex-m55-nomve.fp-flag-softfp.c | 15 ++++++ + gcc/testsuite/gcc.target/arm/multilib.exp | 16 ++++++ + 14 files changed, 250 insertions(+), 7 deletions(-) + create mode 100644 gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-flag-hard.c + create mode 100644 gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-flag-softfp.c + create mode 100644 gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-nofp-flag-softfp.c + create mode 100644 gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-hard.c + create mode 100644 gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-softfp.c + create mode 100644 gcc/testsuite/gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c + create mode 100644 gcc/testsuite/gcc.target/arm/cortex-m55-nomve-flag-hard.c + create mode 100644 gcc/testsuite/gcc.target/arm/cortex-m55-nomve-flag-softfp.c + create mode 100644 gcc/testsuite/gcc.target/arm/cortex-m55-nomve.fp-flag-hard.c + create mode 100644 gcc/testsuite/gcc.target/arm/cortex-m55-nomve.fp-flag-softfp.c + +diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in +index d609113e969..db0b93f6bb7 100644 +--- a/gcc/config/arm/arm-cpus.in ++++ b/gcc/config/arm/arm-cpus.in +@@ -135,10 +135,6 @@ define feature armv8_1m_main + # Floating point and Neon extensions. + # VFPv1 is not supported in GCC. + +-# This feature bit is enabled for all VFP, MVE and +-# MVE with floating point extensions. +-define feature vfp_base +- + # Vector floating point v2. + define feature vfpv2 + +@@ -251,7 +247,7 @@ define fgroup ALL_SIMD ALL_SIMD_INTERNAL ALL_SIMD_EXTERNAL + + # List of all FPU bits to strip out if -mfpu is used to override the + # default. fp16 is deliberately missing from this list. +-define fgroup ALL_FPU_INTERNAL vfp_base vfpv2 vfpv3 vfpv4 fpv5 fp16conv fp_dbl ALL_SIMD_INTERNAL ++define fgroup ALL_FPU_INTERNAL vfpv2 vfpv3 vfpv4 fpv5 fp16conv fp_dbl ALL_SIMD_INTERNAL + # Similarly, but including fp16 and other extensions that aren't part of + # -mfpu support. + define fgroup ALL_FPU_EXTERNAL fp16 bf16 +@@ -296,11 +292,11 @@ define fgroup ARMv8r ARMv8a + define fgroup ARMv8_1m_main ARMv8m_main armv8_1m_main + + # Useful combinations. +-define fgroup VFPv2 vfp_base vfpv2 ++define fgroup VFPv2 vfpv2 + define fgroup VFPv3 VFPv2 vfpv3 + define fgroup VFPv4 VFPv3 vfpv4 fp16conv + define fgroup FPv5 VFPv4 fpv5 +-define fgroup MVE mve vfp_base armv7em ++define fgroup MVE mve armv7em + define fgroup MVE_FP MVE FPv5 fp16 mve_float + + define fgroup FP_DBL fp_dbl +@@ -310,6 +306,18 @@ define fgroup NEON FP_D32 neon + define fgroup CRYPTO NEON crypto + define fgroup DOTPROD NEON dotprod + ++# Implied feature bits. These are for non-named features shared between fgroups. ++# Shared feature f belonging to fgroups A and B will be erroneously removed if: ++# A and B are enabled by default AND A is disabled by a removal flag. ++# To ensure that f is retained, we must add such bits to the ISA after ++# processing the removal flags. This is implemented by 'implied bits': ++# define implied []+ ++# This indicates that, if any of the listed features are enabled, or if any ++# member of a listed fgroup is enabled, then will be implicitly enabled. ++ ++# Enabled for all VFP, MVE and MVE with floating point extensions. ++define implied vfp_base MVE MVE_FP ALL_FP ++ + # List of all quirk bits to strip out when comparing CPU features with + # architectures. + # xscale isn't really a 'quirk', but it isn't an architecture either and we +@@ -1532,6 +1540,10 @@ begin cpu cortex-m55 + cname cortexm55 + tune flags LDSCHED + architecture armv8.1-m.main+mve.fp+fp.dp ++ option nomve.fp remove mve_float ++ option nomve remove mve mve_float ++ option nofp remove ALL_FP mve_float ++ option nodsp remove MVE mve_float + isa quirk_no_asmcpu + costs v7m + vendor 41 +diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c +index 689a6bb82a6..6de875331b2 100644 +--- a/gcc/config/arm/arm.c ++++ b/gcc/config/arm/arm.c +@@ -3406,6 +3406,20 @@ arm_configure_build_target (struct arm_build_target *target, + bitmap_ior (target->isa, target->isa, fpu_bits); + } + ++ /* There may be implied bits which we still need to enable. These are ++ non-named features which are needed to complete other sets of features, ++ but cannot be enabled from arm-cpus.in due to being shared between ++ multiple fgroups. Each entry in all_implied_fbits is of the form ++ ante -> cons, meaning that if the feature "ante" is enabled, we should ++ implicitly enable "cons". */ ++ const struct fbit_implication *impl = all_implied_fbits; ++ while (impl->ante) ++ { ++ if (bitmap_bit_p (target->isa, impl->ante)) ++ bitmap_set_bit (target->isa, impl->cons); ++ impl++; ++ } ++ + if (!arm_selected_tune) + arm_selected_tune = arm_selected_cpu; + else /* Validate the features passed to -mtune. */ +diff --git a/gcc/config/arm/parsecpu.awk b/gcc/config/arm/parsecpu.awk +index 7fc37541c76..9423e8a9d5c 100644 +--- a/gcc/config/arm/parsecpu.awk ++++ b/gcc/config/arm/parsecpu.awk +@@ -190,6 +190,23 @@ function gen_isa () { + ORS = z + print "\n" + } ++ ++ print "struct fbit_implication {" ++ print " /* Represents a feature implication, where:" ++ print " ante IMPLIES cons" ++ print " meaning that if ante is enabled then we should" ++ print " also implicitly enable cons. */" ++ print " enum isa_feature ante;" ++ print " enum isa_feature cons;" ++ print "};\n" ++ print "static const struct fbit_implication all_implied_fbits[] =" ++ print "{" ++ for (impl in implied_bits) { ++ split (impl, impl_parts, SUBSEP) ++ print " { isa_bit_" impl_parts[2] ", isa_bit_" impl_parts[1] " }," ++ } ++ print " { isa_nobit, isa_nobit }" ++ print "};\n" + } + + function gen_data () { +@@ -600,6 +617,40 @@ BEGIN { + parse_ok = 1 + } + ++/^define implied / { ++ if (NF < 4) fatal("syntax: define implied []+\n" \ ++ "Implied bits must be defined with at least one antecedent.") ++ toplevel() ++ fbit = $3 ++ if (fbit in features) fatal("implied feature " fbit " aliases a real feature") ++ if (fbit in fgroup) fatal("implied feature " fbit " aliases a feature group") ++ fcount = NF ++ features[fbit] = 1 ++ for (n = 4; n <= fcount; n++) { ++ ante = $n ++ if (fbit == ante) fatal("feature cannot imply itself") ++ else if (ante in features) { ++ for (impl in implied_bits) { ++ split(impl, impl_sep, SUBSEP) ++ if (ante == impl_sep[1]) ++ fatal(ante " implies implied bit " fbit \ ++ ". Chained implications not currently supported") ++ } ++ implied_bits[fbit, ante] = 1 ++ } else if (ante in fgroup) { ++ for (bitcomb in fgrp_bits) { ++ split(bitcomb, bitsep, SUBSEP) ++ if (bitsep[1] == ante) { ++ implied_bits[fbit, bitsep[2]] = 1 ++ } ++ } ++ } else { ++ fatal("implied bit antecedent " ante " unrecognized") ++ } ++ } ++ parse_ok = 1 ++} ++ + /^begin fpu / { + if (NF != 3) fatal("syntax: begin fpu ") + toplevel() +diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-flag-hard.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-flag-hard.c +new file mode 100644 +index 00000000000..b3c7fd06a1a +--- /dev/null ++++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-flag-hard.c +@@ -0,0 +1,15 @@ ++/* { dg-do assemble } */ ++/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ ++/* { dg-additional-options "-mcpu=cortex-m55+nodsp -mfloat-abi=hard -mfpu=auto --save-temps" } */ ++/* { dg-final { scan-assembler "\.arch_extension fp" } } */ ++/* { dg-final { scan-assembler "\.arch_extension fp.dp" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension dsp" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension mve" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ ++/* { dg-final { scan-assembler "\.fpu fpv5-d16" } } */ ++ ++int ++f () ++{ ++ return 1; ++} +diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-flag-softfp.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-flag-softfp.c +new file mode 100644 +index 00000000000..3806554761f +--- /dev/null ++++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-flag-softfp.c +@@ -0,0 +1,15 @@ ++/* { dg-do assemble } */ ++/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ ++/* { dg-additional-options "-mcpu=cortex-m55+nodsp -mfloat-abi=softfp -mfpu=auto --save-temps" } */ ++/* { dg-final { scan-assembler "\.arch_extension fp" } } */ ++/* { dg-final { scan-assembler "\.arch_extension fp.dp" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension dsp" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension mve" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ ++/* { dg-final { scan-assembler "\.fpu fpv5-d16" } } */ ++ ++int ++f () ++{ ++ return 1; ++} +diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-nofp-flag-softfp.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-nofp-flag-softfp.c +new file mode 100644 +index 00000000000..d22eb4e0630 +--- /dev/null ++++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-nofp-flag-softfp.c +@@ -0,0 +1,15 @@ ++/* { dg-do assemble } */ ++/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ ++/* { dg-additional-options "-mcpu=cortex-m55+nodsp+nofp -mfloat-abi=softfp -mfpu=auto --save-temps" } */ ++/* { dg-final { scan-assembler-not "\.arch_extension fp" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension fp.dp" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension dsp" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension mve" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ ++/* { dg-final { scan-assembler "\.fpu softvfp" } } */ ++ ++int ++f () ++{ ++ return 1; ++} +diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-hard.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-hard.c +new file mode 100644 +index 00000000000..da1cc25e83b +--- /dev/null ++++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-hard.c +@@ -0,0 +1,15 @@ ++/* { dg-do assemble } */ ++/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ ++/* { dg-additional-options "-mcpu=cortex-m55+nofp -mfloat-abi=hard -mfpu=auto --save-temps" } */ ++/* { dg-final { scan-assembler "\.arch_extension mve" } } */ ++/* { dg-final { scan-assembler "\.arch_extension dsp" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension fp" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension fp.dp" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ ++/* { dg-final { scan-assembler-not "\.fpu" } } */ ++ ++int ++f () ++{ ++ return 1; ++} +diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-softfp.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-softfp.c +new file mode 100644 +index 00000000000..0a4fb14bd9b +--- /dev/null ++++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-softfp.c +@@ -0,0 +1,15 @@ ++/* { dg-do assemble } */ ++/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ ++/* { dg-additional-options "-mcpu=cortex-m55+nofp -mfloat-abi=softfp -mfpu=auto --save-temps" } */ ++/* { dg-final { scan-assembler "\.arch_extension mve" } } */ ++/* { dg-final { scan-assembler "\.arch_extension dsp" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension fp" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension fp.dp" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ ++/* { dg-final { scan-assembler-not "\.fpu" } } */ ++ ++int ++f () ++{ ++ return 1; ++} +diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c +new file mode 100644 +index 00000000000..2ae7f34d456 +--- /dev/null ++++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c +@@ -0,0 +1,15 @@ ++/* { dg-do assemble } */ ++/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ ++/* { dg-additional-options "-mcpu=cortex-m55+nomve+nofp -mfloat-abi=softfp -mfpu=auto --save-temps" } */ ++/* { dg-final { scan-assembler-not "\.arch_extension mve" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension fp" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension fp.dp" } } */ ++/* { dg-final { scan-assembler "\.arch_extension dsp" } } */ ++/* { dg-final { scan-assembler-not "\.fpu" } } */ ++ ++int ++f () ++{ ++ return 1; ++} +diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nomve-flag-hard.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nomve-flag-hard.c +new file mode 100644 +index 00000000000..a6ccd7b6ed4 +--- /dev/null ++++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nomve-flag-hard.c +@@ -0,0 +1,15 @@ ++/* { dg-do assemble } */ ++/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ ++/* { dg-additional-options "-mcpu=cortex-m55+nomve -mfloat-abi=hard -mfpu=auto --save-temps" } */ ++/* { dg-final { scan-assembler-not "\.arch_extension mve" } } */ ++/* { dg-final { scan-assembler "\.arch_extension dsp" } } */ ++/* { dg-final { scan-assembler "\.arch_extension fp" } } */ ++/* { dg-final { scan-assembler "\.arch_extension fp.dp" } } */ ++/* { dg-final { scan-assembler "\.fpu fpv5-d16" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ ++ ++int ++f () ++{ ++ return 1; ++} +diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nomve-flag-softfp.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nomve-flag-softfp.c +new file mode 100644 +index 00000000000..2ad976a7960 +--- /dev/null ++++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nomve-flag-softfp.c +@@ -0,0 +1,15 @@ ++/* { dg-do assemble } */ ++/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ ++/* { dg-additional-options "-mcpu=cortex-m55+nomve -mfloat-abi=softfp -mfpu=auto --save-temps" } */ ++/* { dg-final { scan-assembler-not "\.arch_extension mve" } } */ ++/* { dg-final { scan-assembler "\.arch_extension dsp" } } */ ++/* { dg-final { scan-assembler "\.arch_extension fp" } } */ ++/* { dg-final { scan-assembler "\.arch_extension fp.dp" } } */ ++/* { dg-final { scan-assembler "\.fpu fpv5-d16" } } */ ++/* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ ++ ++int ++f () ++{ ++ return 1; ++} +diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nomve.fp-flag-hard.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nomve.fp-flag-hard.c +new file mode 100644 +index 00000000000..40d54b89bef +--- /dev/null ++++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nomve.fp-flag-hard.c +@@ -0,0 +1,15 @@ ++/* { dg-do assemble } */ ++/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ ++/* { dg-additional-options "-mcpu=cortex-m55+nomve.fp -mfloat-abi=hard -mfpu=auto --save-temps" } */ ++/* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ ++/* { dg-final { scan-assembler "\.arch_extension mve" } } */ ++/* { dg-final { scan-assembler "\.arch_extension dsp" } } */ ++/* { dg-final { scan-assembler "\.arch_extension fp" } } */ ++/* { dg-final { scan-assembler "\.arch_extension fp.dp" } } */ ++/* { dg-final { scan-assembler "\.fpu fpv5-d16" } } */ ++ ++int ++f () ++{ ++ return 1; ++} +diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nomve.fp-flag-softfp.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nomve.fp-flag-softfp.c +new file mode 100644 +index 00000000000..c72680314cf +--- /dev/null ++++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nomve.fp-flag-softfp.c +@@ -0,0 +1,15 @@ ++/* { dg-do assemble } */ ++/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ ++/* { dg-additional-options "-mcpu=cortex-m55+nomve.fp -mfloat-abi=softfp -mfpu=auto --save-temps" } */ ++/* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ ++/* { dg-final { scan-assembler "\.arch_extension mve" } } */ ++/* { dg-final { scan-assembler "\.arch_extension dsp" } } */ ++/* { dg-final { scan-assembler "\.arch_extension fp" } } */ ++/* { dg-final { scan-assembler "\.arch_extension fp.dp" } } */ ++/* { dg-final { scan-assembler "\.fpu fpv5-d16" } } */ ++ ++int ++f () ++{ ++ return 1; ++} +diff --git a/gcc/testsuite/gcc.target/arm/multilib.exp b/gcc/testsuite/gcc.target/arm/multilib.exp +index f67a92a9201..123420a048f 100644 +--- a/gcc/testsuite/gcc.target/arm/multilib.exp ++++ b/gcc/testsuite/gcc.target/arm/multilib.exp +@@ -824,6 +824,22 @@ if {[multilib_config "rmprofile"] } { + {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp" + {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard" + {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard" ++ {-mcpu=cortex-m55+nomve -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp" ++ {-mcpu=cortex-m55+nomve -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp" ++ {-mcpu=cortex-m55+nomve -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard" ++ {-mcpu=cortex-m55+nomve.fp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp" ++ {-mcpu=cortex-m55+nomve.fp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp" ++ {-mcpu=cortex-m55+nomve.fp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard" ++ {-mcpu=cortex-m55+nofp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp" ++ {-mcpu=cortex-m55+nofp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp" ++ {-mcpu=cortex-m55+nofp -mfpu=auto -mfloat-abi=hard} "thumb/v8.1-m.main+mve/hard" ++ {-mcpu=cortex-m55+nodsp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp" ++ {-mcpu=cortex-m55+nodsp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp" ++ {-mcpu=cortex-m55+nodsp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard" ++ {-mcpu=cortex-m55+nomve+nofp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp" ++ {-mcpu=cortex-m55+nomve+nofp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp" ++ {-mcpu=cortex-m55+nodsp+nofp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp" ++ {-mcpu=cortex-m55+nodsp+nofp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp" + } { + check_multi_dir $opts $dir + } diff --git a/meta-webos/recipes-devtools/gcc/gcc/0012-arm-Fix-an-incorrect-warning-when-mcpu-cortex-a55-is.patch b/meta-webos/recipes-devtools/gcc/gcc/0012-arm-Fix-an-incorrect-warning-when-mcpu-cortex-a55-is.patch deleted file mode 100644 index f7f707c20..000000000 --- a/meta-webos/recipes-devtools/gcc/gcc/0012-arm-Fix-an-incorrect-warning-when-mcpu-cortex-a55-is.patch +++ /dev/null @@ -1,261 +0,0 @@ -From eaf62130c7171417760d6e2be7e323d4f5a58ad4 Mon Sep 17 00:00:00 2001 -From: Richard Earnshaw -Date: Wed, 11 Dec 2019 11:59:04 +0000 -Subject: [PATCH] arm: Fix an incorrect warning when -mcpu=cortex-a55 is used - with -mfloat-abi=soft - -When a CPU such as cortex-a55 is used with the soft-float ABI variant, -the compiler is incorrectly issuing a warning about a mismatch between -the architecture (generated internally) and the CPU. This is not -expected or intended. - -The problem stems from the fact that we generate (correctly) an -architecture for a soft-float compilation, but then try to compare it -against the one recorded for the CPU. Normally we strip out the -floating point information before doing that comparison, but we -currently only do that for the features that can be affected by the --mfpu option. For a soft-float environment we also need to strip out -any bits that depend on having floating-point present. - -So this patch implements that and does a bit of housekeeping at the -same time: - -- in arm-cpus.in it is not necessary for a CPU to specify both - +dotprod and +simd in its architecture specification, since +dotprod - implies +simd. - -- I've refactored the ALL_SIMD fgroup in arm-cpus.in to create a new - subgroup ALL_SIMD_EXTERNAL and containing the bits that were - previously added directly to ALL_SIMD. Similarly, I've added an - ALL_FPU_EXTERNAL subgroup. - -- in arm.c rename fpu_bitlist and all_fpubits to fpu_bitlist_internal - and all_fpubits_internal for consistency with the fgroup bits which - they contain. - - * config/arm/arm-cpus.in (ALL_SIMD_EXTERNAL): New fgroup. - (ALL_SIMD): Use it. - (ALL_FPU_EXTERNAL): New fgroup. - (ALL_FP): Use it. - (cortex-a55, cortex-a75, cortex-a76): Remove redundant - +simd from architecture specification. - (neoverse-n1, cortex-a75.cortex-a55): Likewise. - * config/arm/arm.c (isa_all_fpubits, fpu_bitlist): Rename to ... - (isa_all_fpubits_internal, fpu_bitlist_internal): ... these. - (isa_all_fpbits): New bitmap. - (arm_option_override): Initialize it. - (arm_configure_build_target): If the target isa does not have any - FP enabled, do not warn about mismatches in FP-related feature bits. - -(cherry picked from commit fd9058b6fcda19f63849a28735e3d2616cfd4e89) -Upstream-Status: Backport [releases/gcc-9 (9.5.0) 09e0bac0d5b9548131c0dd6f69c235fb228c28e8 == 10.1 fd9058b6fcda19f63849a28735e3d2616cfd4e89] ---- - gcc/config/arm/arm-cpus.in | 21 ++++++++++-------- - gcc/config/arm/arm.c | 44 +++++++++++++++++++++++--------------- - 2 files changed, 39 insertions(+), 26 deletions(-) - -diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in -index f87044fd25c..37fcf2a9a8f 100644 ---- a/gcc/config/arm/arm-cpus.in -+++ b/gcc/config/arm/arm-cpus.in -@@ -213,15 +213,18 @@ define fgroup ALL_CRYPTO crypto - # strip off 32 D-registers, but does not remove support for - # double-precision FP. - define fgroup ALL_SIMD_INTERNAL fp_d32 neon ALL_CRYPTO --define fgroup ALL_SIMD ALL_SIMD_INTERNAL dotprod fp16fml -+define fgroup ALL_SIMD_EXTERNAL dotprod fp16fml -+define fgroup ALL_SIMD ALL_SIMD_INTERNAL ALL_SIMD_EXTERNAL - - # List of all FPU bits to strip out if -mfpu is used to override the - # default. fp16 is deliberately missing from this list. - define fgroup ALL_FPU_INTERNAL vfpv2 vfpv3 vfpv4 fpv5 fp16conv fp_dbl ALL_SIMD_INTERNAL -- - # Similarly, but including fp16 and other extensions that aren't part of - # -mfpu support. --define fgroup ALL_FP fp16 ALL_FPU_INTERNAL -+define fgroup ALL_FPU_EXTERNAL fp16 -+ -+# Everything related to the FPU extensions (FP or SIMD). -+define fgroup ALL_FP ALL_FPU_EXTERNAL ALL_FPU_INTERNAL ALL_SIMD - - define fgroup ARMv4 armv4 notm - define fgroup ARMv4t ARMv4 thumb -@@ -1301,7 +1304,7 @@ begin cpu cortex-a55 - cname cortexa55 - tune for cortex-a53 - tune flags LDSCHED -- architecture armv8.2-a+fp16+dotprod+simd -+ architecture armv8.2-a+fp16+dotprod - option crypto add FP_ARMv8 CRYPTO - option nofp remove ALL_FP - costs cortex_a53 -@@ -1313,7 +1316,7 @@ begin cpu cortex-a75 - cname cortexa75 - tune for cortex-a57 - tune flags LDSCHED -- architecture armv8.2-a+fp16+dotprod+simd -+ architecture armv8.2-a+fp16+dotprod - option crypto add FP_ARMv8 CRYPTO - costs cortex_a73 - vendor 41 -@@ -1324,7 +1327,7 @@ begin cpu cortex-a76 - cname cortexa76 - tune for cortex-a57 - tune flags LDSCHED -- architecture armv8.2-a+fp16+dotprod+simd -+ architecture armv8.2-a+fp16+dotprod - option crypto add FP_ARMv8 CRYPTO - costs cortex_a57 - vendor 41 -@@ -1336,7 +1339,7 @@ begin cpu neoverse-n1 - alias !ares - tune for cortex-a57 - tune flags LDSCHED -- architecture armv8.2-a+fp16+dotprod+simd -+ architecture armv8.2-a+fp16+dotprod - option crypto add FP_ARMv8 CRYPTO - costs cortex_a57 - vendor 41 -@@ -1348,7 +1351,7 @@ begin cpu cortex-a75.cortex-a55 - cname cortexa75cortexa55 - tune for cortex-a53 - tune flags LDSCHED -- architecture armv8.2-a+fp16+dotprod+simd -+ architecture armv8.2-a+fp16+dotprod - option crypto add FP_ARMv8 CRYPTO - costs cortex_a73 - end cpu cortex-a75.cortex-a55 -@@ -1357,7 +1360,7 @@ begin cpu cortex-a76.cortex-a55 - cname cortexa76cortexa55 - tune for cortex-a53 - tune flags LDSCHED -- architecture armv8.2-a+fp16+dotprod+simd -+ architecture armv8.2-a+fp16+dotprod - option crypto add FP_ARMv8 CRYPTO - costs cortex_a57 - end cpu cortex-a76.cortex-a55 -diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c -index 3895007dcdb..19b9cc37324 100644 ---- a/gcc/config/arm/arm.c -+++ b/gcc/config/arm/arm.c -@@ -3114,7 +3114,8 @@ arm_option_override_internal (struct gcc_options *opts, - #endif - } - --static sbitmap isa_all_fpubits; -+static sbitmap isa_all_fpubits_internal; -+static sbitmap isa_all_fpbits; - static sbitmap isa_quirkbits; - - /* Configure a build target TARGET from the user-specified options OPTS and -@@ -3180,7 +3181,12 @@ arm_configure_build_target (struct arm_build_target *target, - /* Ignore any bits that are quirk bits. */ - bitmap_and_compl (isa_delta, isa_delta, isa_quirkbits); - /* Ignore (for now) any bits that might be set by -mfpu. */ -- bitmap_and_compl (isa_delta, isa_delta, isa_all_fpubits); -+ bitmap_and_compl (isa_delta, isa_delta, isa_all_fpubits_internal); -+ -+ /* And if the target ISA lacks floating point, ignore any -+ extensions that depend on that. */ -+ if (!bitmap_bit_p (target->isa, isa_bit_vfpv2)) -+ bitmap_and_compl (isa_delta, isa_delta, isa_all_fpbits); - - if (!bitmap_empty_p (isa_delta)) - { -@@ -3339,7 +3345,7 @@ arm_configure_build_target (struct arm_build_target *target, - auto_sbitmap fpu_bits (isa_num_bits); - - arm_initialize_isa (fpu_bits, arm_selected_fpu->isa_bits); -- bitmap_and_compl (target->isa, target->isa, isa_all_fpubits); -+ bitmap_and_compl (target->isa, target->isa, isa_all_fpubits_internal); - bitmap_ior (target->isa, target->isa, fpu_bits); - } - -@@ -3365,16 +3371,20 @@ arm_configure_build_target (struct arm_build_target *target, - static void - arm_option_override (void) - { -- static const enum isa_feature fpu_bitlist[] -+ static const enum isa_feature fpu_bitlist_internal[] - = { ISA_ALL_FPU_INTERNAL, isa_nobit }; -+ static const enum isa_feature fp_bitlist[] -+ = { ISA_ALL_FP, isa_nobit }; - static const enum isa_feature quirk_bitlist[] = { ISA_ALL_QUIRKS, isa_nobit}; - cl_target_option opts; - - isa_quirkbits = sbitmap_alloc (isa_num_bits); - arm_initialize_isa (isa_quirkbits, quirk_bitlist); - -- isa_all_fpubits = sbitmap_alloc (isa_num_bits); -- arm_initialize_isa (isa_all_fpubits, fpu_bitlist); -+ isa_all_fpubits_internal = sbitmap_alloc (isa_num_bits); -+ isa_all_fpbits = sbitmap_alloc (isa_num_bits); -+ arm_initialize_isa (isa_all_fpubits_internal, fpu_bitlist_internal); -+ arm_initialize_isa (isa_all_fpbits, fp_bitlist); - - arm_active_target.isa = sbitmap_alloc (isa_num_bits); - -@@ -26681,7 +26691,7 @@ arm_print_asm_arch_directives () - don't print anything if all the bits are part of the - FPU specification. */ - if (bitmap_subset_p (opt_bits, arm_active_target.isa) -- && !bitmap_subset_p (opt_bits, isa_all_fpubits)) -+ && !bitmap_subset_p (opt_bits, isa_all_fpubits_internal)) - asm_fprintf (asm_out_file, "\t.arch_extension %s\n", opt->name); - } - } -@@ -31183,7 +31193,7 @@ arm_identify_fpu_from_isa (sbitmap isa) - auto_sbitmap fpubits (isa_num_bits); - auto_sbitmap cand_fpubits (isa_num_bits); - -- bitmap_and (fpubits, isa, isa_all_fpubits); -+ bitmap_and (fpubits, isa, isa_all_fpubits_internal); - - /* If there are no ISA feature bits relating to the FPU, we must be - doing soft-float. */ -@@ -31243,7 +31253,7 @@ arm_declare_function_name (FILE *stream, const char *name, tree decl) - { - arm_initialize_isa (opt_bits, opt->isa_bits); - if (bitmap_subset_p (opt_bits, arm_active_target.isa) -- && !bitmap_subset_p (opt_bits, isa_all_fpubits)) -+ && !bitmap_subset_p (opt_bits, isa_all_fpubits_internal)) - asm_fprintf (asm_out_file, "\t.arch_extension %s\n", - opt->name); - } -@@ -31929,28 +31939,28 @@ arm_test_cpu_arch_data (void) - static void - arm_test_fpu_data (void) - { -- auto_sbitmap isa_all_fpubits (isa_num_bits); -+ auto_sbitmap isa_all_fpubits_internal (isa_num_bits); - auto_sbitmap fpubits (isa_num_bits); - auto_sbitmap tmpset (isa_num_bits); - -- static const enum isa_feature fpu_bitlist[] -+ static const enum isa_feature fpu_bitlist_internal[] - = { ISA_ALL_FPU_INTERNAL, isa_nobit }; -- arm_initialize_isa (isa_all_fpubits, fpu_bitlist); -+ arm_initialize_isa (isa_all_fpubits_internal, fpu_bitlist_internal); - - for (unsigned int i = 0; i < TARGET_FPU_auto; i++) - { - arm_initialize_isa (fpubits, all_fpus[i].isa_bits); -- bitmap_and_compl (tmpset, isa_all_fpubits, fpubits); -- bitmap_clear (isa_all_fpubits); -- bitmap_copy (isa_all_fpubits, tmpset); -+ bitmap_and_compl (tmpset, isa_all_fpubits_internal, fpubits); -+ bitmap_clear (isa_all_fpubits_internal); -+ bitmap_copy (isa_all_fpubits_internal, tmpset); - } - -- if (!bitmap_empty_p (isa_all_fpubits)) -+ if (!bitmap_empty_p (isa_all_fpubits_internal)) - { - fprintf (stderr, "Error: found feature bits in the ALL_FPU_INTERAL" - " group that are not defined by any FPU.\n" - " Check your arm-cpus.in.\n"); -- ASSERT_TRUE (bitmap_empty_p (isa_all_fpubits)); -+ ASSERT_TRUE (bitmap_empty_p (isa_all_fpubits_internal)); - } - } - diff --git a/meta-webos/recipes-devtools/gcc/gcc/0015-arm-reorder-assembler-architecture-directives-PR1017.patch b/meta-webos/recipes-devtools/gcc/gcc/0012-arm-reorder-assembler-architecture-directives-PR1017.patch similarity index 59% rename from meta-webos/recipes-devtools/gcc/gcc/0015-arm-reorder-assembler-architecture-directives-PR1017.patch rename to meta-webos/recipes-devtools/gcc/gcc/0012-arm-reorder-assembler-architecture-directives-PR1017.patch index 96bf4abcc..94dbd4cc0 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0015-arm-reorder-assembler-architecture-directives-PR1017.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0012-arm-reorder-assembler-architecture-directives-PR1017.patch @@ -1,4 +1,4 @@ -From fb5e19b4c2492e50c8a1eeb9055bea46d5ddd680 Mon Sep 17 00:00:00 2001 +From 771887c40a0e51242b9e071467fd603174518a7e Mon Sep 17 00:00:00 2001 From: Richard Earnshaw Date: Thu, 29 Jul 2021 11:00:31 +0100 Subject: [PATCH] arm: reorder assembler architecture directives [PR101723] @@ -36,10 +36,8 @@ necessary. gcc/ChangeLog: PR target/101723 - * config/arm/arm-cpus.in (quirk_no_asmcpu): New feature bit. - (ALL_QUIRKS): Add it. - (generic-armv7-a): Add quirk to suppress writing .cpu directive in - asm output. + * config/arm/arm-cpus.in (generic-armv7-a): Add quirk to suppress + writing .cpu directive in asm output. * config/arm/arm.c (arm_identify_fpu_from_isa): New variable. (arm_last_printed_arch_string): Delete. (arm_last-printed_fpu_string): Delete. @@ -57,8 +55,15 @@ gcc/ChangeLog: gcc/testsuite/ChangeLog: PR target/101723 + * gcc.target/arm/cortex-m55-nofp-flag-hard.c: Update expected output. + * gcc.target/arm/cortex-m55-nofp-flag-softfp.c: Likewise. + * gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c: Likewise. + * gcc.target/arm/mve/intrinsics/mve_fpu1.c: Convert to dg-do assemble. + Add a non-no-op function body. + * gcc.target/arm/mve/intrinsics/mve_fpu2.c: Likewise. * gcc.target/arm/attr-neon.c: Tighten scan-assembler tests. - * gcc.target/arm/attr-neon2.c: Likewise. + * gcc.target/arm/attr-neon2.c: Use -Ofast, convert test to use + check-function-bodies. * gcc.target/arm/attr-neon3.c: Likewise. * gcc.target/arm/pr69245.c: Tighten scan-assembler match, but allow multiple instances. @@ -66,42 +71,28 @@ gcc/testsuite/ChangeLog: * gcc.target/arm/pragma_fpu_attribute_2.c: Likewise. (cherry picked from commit c1cdabe3aab817d95a8db00a8b5e9f6bcdea936f) -Upstream-Status: Backport [releases/gcc-9 (9.5.0) 04c568961e793a1d7ad86248b4ca929fc84acf8d == 12.1 c1cdabe3aab817d95a8db00a8b5e9f6bcdea936f] +Upstream-Status: Backport [releases/gcc-9 (9.5.0) 04c568961e793a1d7ad86248b4ca929fc84acf8d == releases/gcc-10 (10.4.0) 02d5a1988247207da46f25ce8b58515e25c1f250 == 12.1 c1cdabe3aab817d95a8db00a8b5e9f6bcdea936f] --- - gcc/config/arm/arm-cpus.in | 6 +- - gcc/config/arm/arm.c | 173 ++++++++---------- + gcc/config/arm/arm-cpus.in | 1 + + gcc/config/arm/arm.c | 186 ++++++++---------- gcc/testsuite/gcc.target/arm/attr-neon.c | 9 +- - gcc/testsuite/gcc.target/arm/attr-neon2.c | 4 +- - gcc/testsuite/gcc.target/arm/attr-neon3.c | 6 +- + gcc/testsuite/gcc.target/arm/attr-neon2.c | 35 ++-- + gcc/testsuite/gcc.target/arm/attr-neon3.c | 48 +++-- + .../arm/cortex-m55-nofp-flag-hard.c | 4 +- + .../arm/cortex-m55-nofp-flag-softfp.c | 4 +- + .../arm/cortex-m55-nofp-nomve-flag-softfp.c | 4 +- + .../gcc.target/arm/mve/intrinsics/mve_fpu1.c | 5 +- + .../gcc.target/arm/mve/intrinsics/mve_fpu2.c | 5 +- gcc/testsuite/gcc.target/arm/pr69245.c | 6 +- .../gcc.target/arm/pragma_fpu_attribute.c | 7 +- .../gcc.target/arm/pragma_fpu_attribute_2.c | 7 +- - 8 files changed, 111 insertions(+), 107 deletions(-) + 13 files changed, 170 insertions(+), 151 deletions(-) diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in -index 37fcf2a9a8f..de2caec5497 100644 +index db0b93f6bb7..660d2b2f4cd 100644 --- a/gcc/config/arm/arm-cpus.in +++ b/gcc/config/arm/arm-cpus.in -@@ -180,6 +180,9 @@ define feature quirk_armv6kz - # Cortex-M3 LDRD quirk. - define feature quirk_cm3_ldrd - -+# Don't use .cpu assembly directive -+define feature quirk_no_asmcpu -+ - # (Very) slow multiply operations. Should probably be a tuning bit. - define feature smallmul - -@@ -277,7 +280,7 @@ define fgroup DOTPROD NEON dotprod - # architectures. - # xscale isn't really a 'quirk', but it isn't an architecture either and we - # need to ignore it for matching purposes. --define fgroup ALL_QUIRKS quirk_no_volatile_ce quirk_armv6kz quirk_cm3_ldrd xscale -+define fgroup ALL_QUIRKS quirk_no_volatile_ce quirk_armv6kz quirk_cm3_ldrd xscale quirk_no_asmcpu - - # Architecture entries - # format: -@@ -979,6 +982,7 @@ begin cpu generic-armv7-a +@@ -1078,6 +1078,7 @@ begin cpu generic-armv7-a cname genericv7a tune flags LDSCHED architecture armv7-a+fp @@ -110,10 +101,10 @@ index 37fcf2a9a8f..de2caec5497 100644 option sec add sec option vfpv3-d16 add VFPv3 FP_DBL diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c -index f4ed21ebb50..58afc4a2647 100644 +index 6de875331b2..6f5196db2b8 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c -@@ -78,10 +78,6 @@ +@@ -77,10 +77,6 @@ typedef struct minipool_node Mnode; typedef struct minipool_fixup Mfix; @@ -124,15 +115,15 @@ index f4ed21ebb50..58afc4a2647 100644 void (*arm_lang_output_object_attributes_hook)(void); struct four_ints -@@ -325,6 +321,7 @@ static unsigned int arm_hard_regno_nregs (unsigned int, machine_mode); - static bool arm_hard_regno_mode_ok (unsigned int, machine_mode); - static bool arm_modes_tieable_p (machine_mode, machine_mode); - static HOST_WIDE_INT arm_constant_alignment (const_tree, HOST_WIDE_INT); +@@ -332,6 +328,7 @@ static HOST_WIDE_INT arm_constant_alignment (const_tree, HOST_WIDE_INT); + static rtx_insn * thumb1_md_asm_adjust (vec &, vec &, + vec &, vec &, + HARD_REG_SET &); +static const char *arm_identify_fpu_from_isa (sbitmap); /* Table of machine attributes. */ static const struct attribute_spec arm_attribute_table[] = -@@ -3350,6 +3347,11 @@ arm_configure_build_target (struct arm_build_target *target, +@@ -3406,6 +3403,11 @@ arm_configure_build_target (struct arm_build_target *target, bitmap_ior (target->isa, target->isa, fpu_bits); } @@ -141,10 +132,10 @@ index f4ed21ebb50..58afc4a2647 100644 + if (arm_float_abi == ARM_FLOAT_ABI_SOFT) + bitmap_and_compl (target->isa, target->isa, isa_all_fpbits); + - if (!arm_selected_tune) - arm_selected_tune = arm_selected_cpu; - else /* Validate the features passed to -mtune. */ -@@ -26663,20 +26665,65 @@ arm_print_tune_info (void) + /* There may be implied bits which we still need to enable. These are + non-named features which are needed to complete other sets of features, + but cannot be enabled from arm-cpus.in due to being shared between +@@ -27990,20 +27992,65 @@ arm_print_tune_info (void) (int) current_tune->sched_autopref); } @@ -214,9 +205,9 @@ index f4ed21ebb50..58afc4a2647 100644 if (!arch->common.extensions) return; -@@ -26688,13 +26735,12 @@ arm_print_asm_arch_directives () - { - arm_initialize_isa (opt_bits, opt->isa_bits); +@@ -28029,13 +28076,12 @@ arm_print_asm_arch_directives () + && !TARGET_HAVE_MVE_FLOAT)) + continue; - /* If every feature bit of this option is set in the target - ISA specification, print out the option name. However, @@ -233,7 +224,7 @@ index f4ed21ebb50..58afc4a2647 100644 } } } -@@ -26704,42 +26750,23 @@ arm_file_start (void) +@@ -28045,46 +28091,23 @@ arm_file_start (void) { int val; @@ -281,14 +272,15 @@ index f4ed21ebb50..58afc4a2647 100644 { const char* truncated_name = arm_rewrite_selected_cpu (arm_active_target.core_name); -- asm_fprintf (asm_out_file, "\t.cpu %s\n", truncated_name); -+ if (bitmap_bit_p (arm_active_target.isa, isa_bit_quirk_no_asmcpu)) -+ asm_fprintf (asm_out_file, "\t.eabi_attribute 5, \"%s\"\n", -+ truncated_name); + if (bitmap_bit_p (arm_active_target.isa, isa_bit_quirk_no_asmcpu)) + asm_fprintf (asm_out_file, "\t.eabi_attribute 5, \"%s\"\n", + truncated_name); +- else +- asm_fprintf (asm_out_file, "\t.cpu %s\n", truncated_name); } if (print_tune_info) -@@ -26807,6 +26834,13 @@ arm_file_end (void) +@@ -28152,6 +28175,13 @@ arm_file_end (void) { int regno; @@ -302,7 +294,7 @@ index f4ed21ebb50..58afc4a2647 100644 if (NEED_INDICATE_EXEC_STACK) /* Add .note.GNU-stack. */ file_end_indicate_exec_stack (); -@@ -31226,44 +31260,7 @@ arm_declare_function_name (FILE *stream, const char *name, tree decl) +@@ -32628,58 +32658,7 @@ arm_declare_function_name (FILE *stream, const char *name, tree decl) targ_options = TREE_TARGET_OPTION (target_option_current_node); gcc_assert (targ_options); @@ -334,6 +326,20 @@ index f4ed21ebb50..58afc4a2647 100644 - if (!opt->remove) - { - arm_initialize_isa (opt_bits, opt->isa_bits); +- /* For the cases "-march=armv8.1-m.main+mve -mfloat-abi=soft" +- and "-march=armv8.1-m.main+mve.fp -mfloat-abi=soft" MVE and +- MVE with floating point instructions is disabled. So the +- following check restricts the printing of ".arch_extension +- mve" and ".arch_extension fp" (for mve.fp) in the assembly +- file. MVE needs this special behaviour because the +- feature bit "mve" and "mve_float" are not part of +- "fpu bits", so they are not cleared when -mfloat-abi=soft +- (i.e nofp) but the marco TARGET_HAVE_MVE and +- TARGET_HAVE_MVE_FLOAT are disabled. */ +- if ((bitmap_bit_p (opt_bits, isa_bit_mve) && !TARGET_HAVE_MVE) +- || (bitmap_bit_p (opt_bits, isa_bit_mve_float) +- && !TARGET_HAVE_MVE_FLOAT)) +- continue; - if (bitmap_subset_p (opt_bits, arm_active_target.isa) - && !bitmap_subset_p (opt_bits, isa_all_fpubits_internal)) - asm_fprintf (asm_out_file, "\t.arch_extension %s\n", @@ -348,7 +354,7 @@ index f4ed21ebb50..58afc4a2647 100644 fprintf (stream, "\t.syntax unified\n"); -@@ -31281,16 +31278,6 @@ arm_declare_function_name (FILE *stream, const char *name, tree decl) +@@ -32697,17 +32676,6 @@ arm_declare_function_name (FILE *stream, const char *name, tree decl) else fprintf (stream, "\t.arm\n"); @@ -356,7 +362,8 @@ index f4ed21ebb50..58afc4a2647 100644 - = TARGET_SOFT_FLOAT - ? "softvfp" : arm_identify_fpu_from_isa (arm_active_target.isa); - -- if (fpu_to_print != arm_last_printed_arch_string) +- if (!(!strcmp (fpu_to_print.c_str (), "softvfp") && TARGET_VFP_BASE) +- && (fpu_to_print != arm_last_printed_arch_string)) - { - asm_fprintf (asm_out_file, "\t.fpu %s\n", fpu_to_print.c_str ()); - arm_last_printed_fpu_string = fpu_to_print; @@ -391,36 +398,238 @@ index 225fb8dc3db..e8e3086247d 100644 +/* { dg-final { scan-assembler-times "\.fpu\\s+neon\n" 1 } } */ /* { dg-final { scan-assembler-times "vshl" 1 } } */ diff --git a/gcc/testsuite/gcc.target/arm/attr-neon2.c b/gcc/testsuite/gcc.target/arm/attr-neon2.c -index 29668256cf5..91cf4dde8db 100644 +index 29668256cf5..a7a72dac379 100644 --- a/gcc/testsuite/gcc.target/arm/attr-neon2.c +++ b/gcc/testsuite/gcc.target/arm/attr-neon2.c -@@ -27,8 +27,8 @@ my1 (int8x8_t __a, int8x8_t __b) +@@ -1,7 +1,7 @@ + /* { dg-do compile } */ + /* { dg-require-effective-target arm_neon_ok } */ + /* { dg-require-effective-target arm_fp_ok } */ +-/* { dg-options "-O2" } */ ++/* { dg-options "-Ofast" } */ + /* { dg-add-options arm_fp } */ + + /* Reset fpu to a value compatible with the next pragmas. */ +@@ -12,23 +12,36 @@ + #include + + /* Check that pragma target is used. */ +-int8x8_t +-my (int8x8_t __a, int8x8_t __b) ++/* ++**my: ++** ... ++** vadd.f32 d[0-9]+, d[0-9]+, d[0-9]+ ++** ... ++** bx lr ++*/ ++float32x2_t ++my (float32x2_t __a, float32x2_t __b) + { return __a + __b; } --/* { dg-final { scan-assembler-times "\.fpu vfp" 1 } } */ --/* { dg-final { scan-assembler-times "\.fpu neon" 1 } } */ -+/* { dg-final { scan-assembler {\.fpu\s+vfp\n} } } */ -+/* { dg-final { scan-assembler {\.fpu\s+neon\n} } } */ - /* { dg-final { scan-assembler "vadd" } } */ + #pragma GCC pop_options +-/* Check that command line option is restored. */ +-int8x8_t +-my1 (int8x8_t __a, int8x8_t __b) ++/* Check that fpu=vfp is restored. */ ++/* ++**my1: ++** ... ++** vadd.f32 s[0-9]+, s[0-9]+, s[0-9]+ ++** vadd.f32 s[0-9]+, s[0-9]+, s[0-9]+ ++** ... ++** bx lr ++*/ ++float32x2_t ++my1 (float32x2_t __a, float32x2_t __b) + { + return __a + __b; + } +-/* { dg-final { scan-assembler-times "\.fpu vfp" 1 } } */ +-/* { dg-final { scan-assembler-times "\.fpu neon" 1 } } */ +-/* { dg-final { scan-assembler "vadd" } } */ +- +- ++/* { dg-final { scan-assembler "\.fpu\\s+vfp\n" } } */ ++/* { dg-final { scan-assembler "\.fpu\\s+neon\n" } } */ ++/* { dg-final { check-function-bodies "**" "" } } */ diff --git a/gcc/testsuite/gcc.target/arm/attr-neon3.c b/gcc/testsuite/gcc.target/arm/attr-neon3.c -index 17e429ad739..0acb7f98dc6 100644 +index 17e429ad739..0fbce6e4cd4 100644 --- a/gcc/testsuite/gcc.target/arm/attr-neon3.c +++ b/gcc/testsuite/gcc.target/arm/attr-neon3.c -@@ -31,8 +31,8 @@ my1 (int8x8_t __a, int8x8_t __b) +@@ -1,7 +1,7 @@ + /* { dg-do compile } */ + /* { dg-require-effective-target arm_crypto_ok } */ + /* { dg-require-effective-target arm_fp_ok } */ +-/* { dg-options "-O2" } */ ++/* { dg-options "-Ofast" } */ + /* { dg-add-options arm_fp } */ + + /* Reset fpu to a value compatible with the next pragmas. */ +@@ -11,28 +11,54 @@ + #include + + /* Check that neon is used. */ +-int8x8_t __attribute__ ((target("fpu=neon"))) +-my (int8x8_t __a, int8x8_t __b) ++/* ++**my: ++** ... ++** vadd.f32 d[0-9]+, d[0-9]+, d[0-9]+ ++** ... ++** bx lr ++*/ ++float32x2_t __attribute__ ((target("fpu=neon"))) ++my (float32x2_t __a, float32x2_t __b) + { + return __a + __b; + } + + /* Check that crypto builtins are recognized. */ ++/* ++**foo: ++** ... ++** ( ++** vld1.64 {d[0-9]+-d[0-9]+}, \[r[0-9]+:64\] ++** | ++** vld1.64 {d[0-9]+}, \[r[0-9]+:64\]! ++** vld1.64 {d[0-9]+}, \[r[0-9]+:64\] ++** } ++** ... ++** bx lr ++*/ ++ + poly128_t __attribute__ ((target("fpu=crypto-neon-fp-armv8"))) + foo (poly128_t* ptr) + { + return vldrq_p128 (ptr); + } + +-/* Check that default mode is restored. */ +-int8x8_t +-my1 (int8x8_t __a, int8x8_t __b) ++/* Check that fpu=vfp is restored. */ ++/* ++**my1: ++** ... ++** vadd.f32 s[0-9]+, s[0-9]+, s[0-9]+ ++** vadd.f32 s[0-9]+, s[0-9]+, s[0-9]+ ++** ... ++** bx lr ++*/float32x2_t ++my1 (float32x2_t __a, float32x2_t __b) + { return __a + __b; } -/* { dg-final { scan-assembler-times "\.fpu vfp" 1 } } */ -/* { dg-final { scan-assembler-times "\.fpu neon" 1 } } */ -/* { dg-final { scan-assembler-times "\.fpu crypto-neon-fp-armv8" 1 } } */ -+/* { dg-final { scan-assembler {\.fpu\s+vfp\n} } } */ -+/* { dg-final { scan-assembler {\.fpu\s+neon\n} } } */ -+/* { dg-final { scan-assembler {\.fpu\s+crypto-neon-fp-armv8\n} } } */ - /* { dg-final { scan-assembler-times "vld1" 1 } } */ - /* { dg-final { scan-assembler-times "vadd" 1} } */ +-/* { dg-final { scan-assembler-times "vld1" 1 } } */ +-/* { dg-final { scan-assembler-times "vadd" 1} } */ ++/* { dg-final { scan-assembler "\.fpu\\s+vfp\n" } } */ ++/* { dg-final { scan-assembler "\.fpu\\s+neon\n" } } */ ++/* { dg-final { scan-assembler "\.fpu\\s+crypto-neon-fp-armv8\n" } } */ ++/* { dg-final { check-function-bodies "**" "" } } */ +diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-hard.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-hard.c +index da1cc25e83b..e0fb307ac30 100644 +--- a/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-hard.c ++++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-hard.c +@@ -1,12 +1,12 @@ + /* { dg-do assemble } */ + /* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ +-/* { dg-additional-options "-mcpu=cortex-m55+nofp -mfloat-abi=hard -mfpu=auto --save-temps" } */ ++/* { dg-additional-options "-mcpu=cortex-m55+nofp -mthumb -mfloat-abi=hard -mfpu=auto --save-temps" } */ ++/* { dg-final { scan-assembler "\.fpu softvfp" } } */ + /* { dg-final { scan-assembler "\.arch_extension mve" } } */ + /* { dg-final { scan-assembler "\.arch_extension dsp" } } */ + /* { dg-final { scan-assembler-not "\.arch_extension fp" } } */ + /* { dg-final { scan-assembler-not "\.arch_extension fp.dp" } } */ + /* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ +-/* { dg-final { scan-assembler-not "\.fpu" } } */ + + int + f () +diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-softfp.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-softfp.c +index 0a4fb14bd9b..50645e8cd0f 100644 +--- a/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-softfp.c ++++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-softfp.c +@@ -1,12 +1,12 @@ + /* { dg-do assemble } */ + /* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ +-/* { dg-additional-options "-mcpu=cortex-m55+nofp -mfloat-abi=softfp -mfpu=auto --save-temps" } */ ++/* { dg-additional-options "-mcpu=cortex-m55+nofp -mthumb -mfloat-abi=softfp -mfpu=auto --save-temps" } */ ++/* { dg-final { scan-assembler "\.fpu softvfp" } } */ + /* { dg-final { scan-assembler "\.arch_extension mve" } } */ + /* { dg-final { scan-assembler "\.arch_extension dsp" } } */ + /* { dg-final { scan-assembler-not "\.arch_extension fp" } } */ + /* { dg-final { scan-assembler-not "\.arch_extension fp.dp" } } */ + /* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ +-/* { dg-final { scan-assembler-not "\.fpu" } } */ + + int + f () +diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c +index 2ae7f34d456..948f622633c 100644 +--- a/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c ++++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c +@@ -1,12 +1,12 @@ + /* { dg-do assemble } */ + /* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ +-/* { dg-additional-options "-mcpu=cortex-m55+nomve+nofp -mfloat-abi=softfp -mfpu=auto --save-temps" } */ ++/* { dg-additional-options "-mcpu=cortex-m55+nomve+nofp -mthumb -mfloat-abi=softfp -mfpu=auto --save-temps" } */ ++/* { dg-final { scan-assembler "\.fpu softvfp" } } */ + /* { dg-final { scan-assembler-not "\.arch_extension mve" } } */ + /* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ + /* { dg-final { scan-assembler-not "\.arch_extension fp" } } */ + /* { dg-final { scan-assembler-not "\.arch_extension fp.dp" } } */ + /* { dg-final { scan-assembler "\.arch_extension dsp" } } */ +-/* { dg-final { scan-assembler-not "\.fpu" } } */ + + int + f () +diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/mve_fpu1.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/mve_fpu1.c +index 611097ec956..c5acdb5e4e5 100644 +--- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/mve_fpu1.c ++++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/mve_fpu1.c +@@ -1,3 +1,4 @@ ++/* { dg-do assemble } */ + /* { dg-require-effective-target arm_v8_1m_mve_ok } */ + /* { dg-require-effective-target arm_hard_ok } */ + /* { dg-add-options arm_v8_1m_mve } */ +@@ -8,8 +9,6 @@ + int8x16_t + foo1 (int8x16_t value) + { +- int8x16_t b = value; ++ int8x16_t b = -value; + return b; + } +- +-/* { dg-final { scan-assembler-not "\.fpu softvfp" } } */ +diff --git a/gcc/testsuite/gcc.target/arm/mve/intrinsics/mve_fpu2.c b/gcc/testsuite/gcc.target/arm/mve/intrinsics/mve_fpu2.c +index b8e105111de..907db5e1572 100644 +--- a/gcc/testsuite/gcc.target/arm/mve/intrinsics/mve_fpu2.c ++++ b/gcc/testsuite/gcc.target/arm/mve/intrinsics/mve_fpu2.c +@@ -1,3 +1,4 @@ ++/* { dg-do assemble } */ + /* { dg-require-effective-target arm_v8_1m_mve_ok } */ + /* { dg-require-effective-target arm_softfp_ok } */ + /* { dg-add-options arm_v8_1m_mve } */ +@@ -8,8 +9,6 @@ + int8x16_t + foo1 (int8x16_t value) + { +- int8x16_t b = value; ++ int8x16_t b = -value; + return b; + } +- +-/* { dg-final { scan-assembler-not "\.fpu softvfp" } } */ diff --git a/gcc/testsuite/gcc.target/arm/pr69245.c b/gcc/testsuite/gcc.target/arm/pr69245.c index bd505187728..34b97a22e15 100644 --- a/gcc/testsuite/gcc.target/arm/pr69245.c @@ -451,7 +660,7 @@ index 174be85f3f7..7e63cf53013 100644 +/* { dg-final { scan-assembler {\.fpu\s+vfpv4\n} } } */ +/* { dg-final { scan-assembler {\.fpu\s+vfpv3-d16\n} } } */ diff --git a/gcc/testsuite/gcc.target/arm/pragma_fpu_attribute_2.c b/gcc/testsuite/gcc.target/arm/pragma_fpu_attribute_2.c -index add40ddc6b8..398d8fff35c 100644 +index add40ddc6b8..3d33b04b787 100644 --- a/gcc/testsuite/gcc.target/arm/pragma_fpu_attribute_2.c +++ b/gcc/testsuite/gcc.target/arm/pragma_fpu_attribute_2.c @@ -25,5 +25,8 @@ uint32_t restored () @@ -463,5 +672,5 @@ index add40ddc6b8..398d8fff35c 100644 +/* We can't tell exactly how many times the following tests will match because + command-line options may cause additional instances to be generated, but + each must be present at least once. */ -+/* { dg-final { scan-assembler {\.fpu\s+vfpv4\n} } } */ -+/* { dg-final { scan-assembler {\.fpu\s+vfpv3-d16\n} } } */ ++/* { dg-final { scan-assembler-times {\.fpu\s+vfpv4\n} } } */ ++/* { dg-final { scan-assembler-times {\.fpu\s+vfpv3-d16\n} } } */ From 96334ea530882cb64337c3b232a36c844f825729 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 8 Oct 2019 18:08:35 -0700 Subject: [PATCH 0563/2022] {gatesgarth-stop} webos: layer.conf: Update to gatesgarth release name series :Release Notes: :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12996] CCC: Upgrade to Yocto 3.2 Gatesgarth [PLAT-122546] Create GPVB with Yocto 3.2 Gatesgarth Change-Id: I5adfa005b471bc2d432908430c17e88be7326c10 --- meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf | 2 +- meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf | 2 +- meta-webos-backports/meta-webos-backports-4.0/conf/layer.conf | 2 +- meta-webos-iot/conf/layer.conf | 2 +- meta-webos-raspberrypi/conf/layer.conf | 2 +- meta-webos-smack/conf/layer.conf | 2 +- meta-webos-updater/conf/layer.conf | 2 +- meta-webos-virtualization/conf/layer.conf | 2 +- meta-webos/conf/layer.conf | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf b/meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf index 0ce5b3f7f..79e25ebd7 100644 --- a/meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf +++ b/meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf @@ -11,7 +11,7 @@ BBFILE_COLLECTIONS += "meta-webos-backports-3.3" BBFILE_PATTERN_meta-webos-backports-3.3 := "^${LAYERDIR}/" BBFILE_PRIORITY_meta-webos-backports-3.3 = "34" -LAYERSERIES_COMPAT_meta-webos-backports-3.3 = "dunfell" +LAYERSERIES_COMPAT_meta-webos-backports-3.3 = "gatesgarth" LAYERDEPENDS_meta-webos-backports-3.3 = " \ core \ diff --git a/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf b/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf index b3d3a43f4..6d953a3c1 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf +++ b/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf @@ -11,7 +11,7 @@ BBFILE_COLLECTIONS += "meta-webos-backports-3.4" BBFILE_PATTERN_meta-webos-backports-3.4 := "^${LAYERDIR}/" BBFILE_PRIORITY_meta-webos-backports-3.4 = "35" -LAYERSERIES_COMPAT_meta-webos-backports-3.4 = "dunfell" +LAYERSERIES_COMPAT_meta-webos-backports-3.4 = "gatesgarth" LAYERDEPENDS_meta-webos-backports-3.4 = " \ core \ diff --git a/meta-webos-backports/meta-webos-backports-4.0/conf/layer.conf b/meta-webos-backports/meta-webos-backports-4.0/conf/layer.conf index fe1b4d675..af2695102 100644 --- a/meta-webos-backports/meta-webos-backports-4.0/conf/layer.conf +++ b/meta-webos-backports/meta-webos-backports-4.0/conf/layer.conf @@ -11,7 +11,7 @@ BBFILE_COLLECTIONS += "meta-webos-backports-4.0" BBFILE_PATTERN_meta-webos-backports-4.0 := "^${LAYERDIR}/" BBFILE_PRIORITY_meta-webos-backports-4.0 = "36" -LAYERSERIES_COMPAT_meta-webos-backports-4.0 = "dunfell" +LAYERSERIES_COMPAT_meta-webos-backports-4.0 = "gatesgarth" LAYERDEPENDS_meta-webos-backports-4.0 = " \ core \ diff --git a/meta-webos-iot/conf/layer.conf b/meta-webos-iot/conf/layer.conf index 55c673e65..55e8dfdf3 100644 --- a/meta-webos-iot/conf/layer.conf +++ b/meta-webos-iot/conf/layer.conf @@ -10,7 +10,7 @@ BBFILE_COLLECTIONS += "meta-webos-iot" BBFILE_PATTERN_meta-webos-iot := "^${LAYERDIR}/" BBFILE_PRIORITY_meta-webos-iot = "70" -LAYERSERIES_COMPAT_meta-webos-iot = "dunfell" +LAYERSERIES_COMPAT_meta-webos-iot = "gatesgarth" LAYERDEPENDS_meta-webos-iot = " \ meta-webos \ diff --git a/meta-webos-raspberrypi/conf/layer.conf b/meta-webos-raspberrypi/conf/layer.conf index faa1c4f15..f97fc9459 100644 --- a/meta-webos-raspberrypi/conf/layer.conf +++ b/meta-webos-raspberrypi/conf/layer.conf @@ -10,7 +10,7 @@ BBFILE_COLLECTIONS += "meta-webos-raspberrypi" BBFILE_PATTERN_meta-webos-raspberrypi := "^${LAYERDIR}/" BBFILE_PRIORITY_meta-webos-raspberrypi = "51" -LAYERSERIES_COMPAT_meta-webos-raspberrypi = "dunfell" +LAYERSERIES_COMPAT_meta-webos-raspberrypi = "gatesgarth" LAYERDEPENDS_meta-webos-raspberrypi = "\ meta-webos \ diff --git a/meta-webos-smack/conf/layer.conf b/meta-webos-smack/conf/layer.conf index 4e68bc68f..87c57d897 100644 --- a/meta-webos-smack/conf/layer.conf +++ b/meta-webos-smack/conf/layer.conf @@ -17,7 +17,7 @@ BBFILE_COLLECTIONS += "meta-webos-smack" BBFILE_PATTERN_meta-webos-smack := "^${LAYERDIR}/" BBFILE_PRIORITY_meta-webos-smack = "75" -LAYERSERIES_COMPAT_meta-webos-smack = "dunfell" +LAYERSERIES_COMPAT_meta-webos-smack = "gatesgarth" LAYERDEPENDS_meta-webos-smack = "\ meta-webos \ diff --git a/meta-webos-updater/conf/layer.conf b/meta-webos-updater/conf/layer.conf index ff9a1bfed..c1729bc82 100644 --- a/meta-webos-updater/conf/layer.conf +++ b/meta-webos-updater/conf/layer.conf @@ -10,7 +10,7 @@ BBFILE_COLLECTIONS += "meta-webos-updater" BBFILE_PATTERN_meta-webos-updater := "^${LAYERDIR}/" BBFILE_PRIORITY_meta-webos-updater= "52" -LAYERSERIES_COMPAT_meta-webos-updater = "dunfell" +LAYERSERIES_COMPAT_meta-webos-updater = "gatesgarth" LAYERDEPENDS_meta-webos-updater = "\ sota \ diff --git a/meta-webos-virtualization/conf/layer.conf b/meta-webos-virtualization/conf/layer.conf index 576e77655..315e620a9 100644 --- a/meta-webos-virtualization/conf/layer.conf +++ b/meta-webos-virtualization/conf/layer.conf @@ -10,7 +10,7 @@ BBFILE_COLLECTIONS += "meta-webos-virtualization" BBFILE_PATTERN_meta-webos-virtualization := "^${LAYERDIR}/" BBFILE_PRIORITY_meta-webos-virtualization = "53" -LAYERSERIES_COMPAT_meta-webos-virtualization = "dunfell" +LAYERSERIES_COMPAT_meta-webos-virtualization = "gatesgarth" LAYERDEPENDS_meta-webos-virtualization = "\ virtualization-layer \ diff --git a/meta-webos/conf/layer.conf b/meta-webos/conf/layer.conf index 132fa278b..2e2fff1ef 100644 --- a/meta-webos/conf/layer.conf +++ b/meta-webos/conf/layer.conf @@ -10,7 +10,7 @@ BBFILE_COLLECTIONS += "meta-webos" BBFILE_PATTERN_meta-webos := "^${LAYERDIR}/" BBFILE_PRIORITY_meta-webos = "40" -LAYERSERIES_COMPAT_meta-webos = "dunfell" +LAYERSERIES_COMPAT_meta-webos = "gatesgarth" LAYERDEPENDS_meta-webos = " \ core \ From 6dd2b50afc4f09f36cf47caf1ac867f911b9c9c0 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 16 Jul 2021 03:18:07 -0700 Subject: [PATCH 0564/2022] {hardknott-start} meta-webos-backports-3.3: delete :Release Notes: :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: Ia78af805715f29cad45ad5ed08460e750f7958b3 --- .../meta-webos-backports-3.3/conf/layer.conf | 28 - .../licenses/GPL-2.0-only | 132 ---- .../licenses/GPL-2.0-or-later | 319 --------- .../licenses/GPL-3.0-only | 225 ------- .../licenses/GPL-3.0-or-later | 625 ------------------ .../licenses/LGPL-2.0-only | 342 ---------- .../licenses/LGPL-2.0-or-later | 446 ------------- .../licenses/LGPL-2.1-only | 176 ----- .../licenses/LGPL-2.1-or-later | 468 ------------- .../licenses/LGPL-3.0-only | 65 -- .../licenses/LGPL-3.0-or-later | 163 ----- .../python/python3-pyyaml_5.4.1.bb | 18 - .../procps/0001-w.c-correct-musl-builds.patch | 44 -- ...02-proc-escape.c-add-missing-include.patch | 23 - .../procps/procps/sysctl.conf | 67 -- .../recipes-extended/procps/procps_3.3.17.bb | 103 --- ...ct-has-a-different-signature-on-musl.patch | 38 -- .../gstreamer/gst-devtools_1.18.2.bb | 42 -- ...001-Make-player-examples-installable.patch | 37 -- .../gstreamer/gst-examples/gst-player.desktop | 10 - .../gstreamer/gst-examples_1.18.2.bb | 32 - .../gstreamer/gstreamer1.0-libav_1.18.2.bb | 22 - .../gstreamer/gstreamer1.0-meta-base.bb | 68 -- .../gstreamer/gstreamer1.0-omx_1.18.2.bb | 46 -- ...ialized-warnings-when-compiling-with.patch | 28 - ...-avoid-including-sys-poll.h-directly.patch | 30 - ...-sentinals-for-gst_structure_get-etc.patch | 88 --- ...issing-opencv-data-dir-in-yocto-buil.patch | 49 -- .../0005-msdk-fix-includedir-path.patch | 31 - .../gstreamer1.0-plugins-bad_1.18.2.bb | 147 ---- ...et-caps-from-src-pad-when-query-caps.patch | 44 -- ...parse-enhance-SSA-text-lines-parsing.patch | 229 ------- ...iv-fb-Make-sure-config.h-is-included.patch | 32 - ...004-glimagesink-Downrank-to-marginal.patch | 32 - .../gstreamer1.0-plugins-base_1.18.2.bb | 94 --- .../gstreamer/gstreamer1.0-plugins-common.inc | 50 -- ...t-gstqtgl.h-instead-of-gst-gl-gstglf.patch | 56 -- .../gstreamer1.0-plugins-good_1.18.2.bb | 72 -- .../gstreamer1.0-plugins-packaging.inc | 70 -- .../gstreamer1.0-plugins-ugly_1.18.2.bb | 39 -- .../gstreamer/gstreamer1.0-ptest.inc | 23 - .../gstreamer/gstreamer1.0-python_1.18.2.bb | 22 - .../gstreamer1.0-rtsp-server_1.18.2.bb | 31 - .../gstreamer/gstreamer1.0-vaapi_1.18.2.bb | 52 -- ...der.c-when-env-var-is-set-do-not-fal.patch | 66 -- ...002-Remove-unused-valgrind-detection.patch | 112 ---- ...meson-Add-option-for-installed-tests.patch | 257 ------- .../gstreamer/gstreamer1.0_1.18.2.bb | 69 -- .../recipes-support/libsrtp/libsrtp_2.3.0.bb | 21 - meta-webos/conf/layer.conf | 1 - 50 files changed, 5284 deletions(-) delete mode 100644 meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf delete mode 100644 meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-2.0-only delete mode 100644 meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-2.0-or-later delete mode 100644 meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-3.0-only delete mode 100644 meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-3.0-or-later delete mode 100644 meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.0-only delete mode 100644 meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.0-or-later delete mode 100644 meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.1-only delete mode 100644 meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.1-or-later delete mode 100644 meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-3.0-only delete mode 100644 meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-3.0-or-later delete mode 100644 meta-webos-backports/meta-webos-backports-3.3/recipes-devtools/python/python3-pyyaml_5.4.1.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/0001-w.c-correct-musl-builds.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/0002-proc-escape.c-add-missing-include.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/sysctl.conf delete mode 100644 meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps_3.3.17.bb delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools/0001-connect-has-a-different-signature-on-musl.patch delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools_1.18.2.bb delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples/0001-Make-player-examples-installable.patch delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples/gst-player.desktop delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples_1.18.2.bb delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.18.2.bb delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-meta-base.bb delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.18.2.bb delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-fix-maybe-uninitialized-warnings-when-compiling-with.patch delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-avoid-including-sys-poll.h-directly.patch delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-ensure-valid-sentinals-for-gst_structure_get-etc.patch delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-msdk-fix-includedir-path.patch delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.2.bb delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-ENGR00312515-get-caps-from-src-pad-when-query-caps.patch delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-ssaparse-enhance-SSA-text-lines-parsing.patch delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-viv-fb-Make-sure-config.h-is-included.patch delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0004-glimagesink-Downrank-to-marginal.patch delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.2.bb delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-qt-include-ext-qt-gstqtgl.h-instead-of-gst-gl-gstglf.patch delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.2.bb delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.18.2.bb delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-ptest.inc delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-python_1.18.2.bb delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.18.2.bb delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.18.2.bb delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0001-gst-gstpluginloader.c-when-env-var-is-set-do-not-fal.patch delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0002-Remove-unused-valgrind-detection.patch delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0003-meson-Add-option-for-installed-tests.patch delete mode 100755 meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0_1.18.2.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.3/recipes-support/libsrtp/libsrtp_2.3.0.bb diff --git a/meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf b/meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf deleted file mode 100644 index 79e25ebd7..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/conf/layer.conf +++ /dev/null @@ -1,28 +0,0 @@ -# Copyright (c) 2021-2022 LG Electronics, Inc. - -# We have conf and classes directories => add to BBPATH -BBPATH .= ":${LAYERDIR}" - -# We have recipes-* directories => add to BBFILES -BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ - ${LAYERDIR}/recipes-*/*/*.bbappend" - -BBFILE_COLLECTIONS += "meta-webos-backports-3.3" -BBFILE_PATTERN_meta-webos-backports-3.3 := "^${LAYERDIR}/" -BBFILE_PRIORITY_meta-webos-backports-3.3 = "34" - -LAYERSERIES_COMPAT_meta-webos-backports-3.3 = "gatesgarth" - -LAYERDEPENDS_meta-webos-backports-3.3 = " \ -core \ -openembedded-layer \ -" - -LICENSE_PATH += "${LAYERDIR}/licenses" - -# NB: meta-qt6/conf/layer.conf has license mapping back to old license files: -# SPDXLICENSEMAP[GPL-3.0-only] = "GPL-3.0" -# SPDXLICENSEMAP[LGPL-3.0-only] = "LGPL-3.0" -# SPDXLICENSEMAP[GPL-2.0-or-later] = "GPL-2.0" -# which prevent using the new license identifiers and common-licenses added here -# and in oe-core diff --git a/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-2.0-only b/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-2.0-only deleted file mode 100644 index 7f5abbce2..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-2.0-only +++ /dev/null @@ -1,132 +0,0 @@ - -GNU GENERAL PUBLIC LICENSE - -Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. -Preamble - -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation`s software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Lesser General Public License instead.) You can apply it to your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. - -To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. - -For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. - -We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. - -Also, for each author`s protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors` reputations. - -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone`s free use or not licensed at all. - -The precise terms and conditions for copying, distribution and modification follow. - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. - -1. You may copy and distribute verbatim copies of the Program`s source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. - -You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: - -a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. -b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. -c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. - -In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. - -3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: - -a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, -b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, -c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) -The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. - -If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. - -4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. - -5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients` exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. - -This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. - -9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. - -10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - -NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - -one line to give the program`s name and an idea of what it does. -Copyright (C) yyyy name of author - -This program is free software; you can redistribute it and/or -modify it under the terms of the GNU General Public License -as published by the Free Software Foundation; either version 2 -of the License, or (at your option) any later version. - -This program is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -GNU General Public License for more details. - -You should have received a copy of the GNU General Public License -along with this program; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this when it starts in an interactive mode: - -Gnomovision version 69, Copyright (C) year name of author -Gnomovision comes with ABSOLUTELY NO WARRANTY; for details -type `show w`. This is free software, and you are welcome -to redistribute it under certain conditions; type `show c` -for details. -The hypothetical commands `show w` and `show c` should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w` and `show c`; they could even be mouse-clicks or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: - -Yoyodyne, Inc., hereby disclaims all copyright -interest in the program `Gnomovision` -(which makes passes at compilers) written -by James Hacker. - -signature of Ty Coon, 1 April 1989 -Ty Coon, President of Vice -This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. - diff --git a/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-2.0-or-later b/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-2.0-or-later deleted file mode 100644 index 1d80ac365..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-2.0-or-later +++ /dev/null @@ -1,319 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - -Version 2, June 1991 - -Copyright (C) 1989, 1991 Free Software Foundation, Inc. - -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA - -Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -Preamble - -The licenses for most software are designed to take away your freedom to share -and change it. By contrast, the GNU General Public License is intended to -guarantee your freedom to share and change free software--to make sure the -software is free for all its users. This General Public License applies to -most of the Free Software Foundation's software and to any other program whose -authors commit to using it. (Some other Free Software Foundation software -is covered by the GNU Lesser General Public License instead.) You can apply -it to your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom -to distribute copies of free software (and charge for this service if you -wish), that you receive source code or can get it if you want it, that you -can change the software or use pieces of it in new free programs; and that -you know you can do these things. - -To protect your rights, we need to make restrictions that forbid anyone to -deny you these rights or to ask you to surrender the rights. These restrictions -translate to certain responsibilities for you if you distribute copies of -the software, or if you modify it. - -For example, if you distribute copies of such a program, whether gratis or -for a fee, you must give the recipients all the rights that you have. You -must make sure that they, too, receive or can get the source code. And you -must show them these terms so they know their rights. - -We protect your rights with two steps: (1) copyright the software, and (2) -offer you this license which gives you legal permission to copy, distribute -and/or modify the software. - -Also, for each author's protection and ours, we want to make certain that -everyone understands that there is no warranty for this free software. If -the software is modified by someone else and passed on, we want its recipients -to know that what they have is not the original, so that any problems introduced -by others will not reflect on the original authors' reputations. - -Finally, any free program is threatened constantly by software patents. We -wish to avoid the danger that redistributors of a free program will individually -obtain patent licenses, in effect making the program proprietary. To prevent -this, we have made it clear that any patent must be licensed for everyone's -free use or not licensed at all. - -The precise terms and conditions for copying, distribution and modification -follow. - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License applies to any program or other work which contains a notice -placed by the copyright holder saying it may be distributed under the terms -of this General Public License. The "Program", below, refers to any such program -or work, and a "work based on the Program" means either the Program or any -derivative work under copyright law: that is to say, a work containing the -Program or a portion of it, either verbatim or with modifications and/or translated -into another language. (Hereinafter, translation is included without limitation -in the term "modification".) Each licensee is addressed as "you". - -Activities other than copying, distribution and modification are not covered -by this License; they are outside its scope. The act of running the Program -is not restricted, and the output from the Program is covered only if its -contents constitute a work based on the Program (independent of having been -made by running the Program). Whether that is true depends on what the Program -does. - -1. You may copy and distribute verbatim copies of the Program's source code -as you receive it, in any medium, provided that you conspicuously and appropriately -publish on each copy an appropriate copyright notice and disclaimer of warranty; -keep intact all the notices that refer to this License and to the absence -of any warranty; and give any other recipients of the Program a copy of this -License along with the Program. - -You may charge a fee for the physical act of transferring a copy, and you -may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Program or any portion of it, -thus forming a work based on the Program, and copy and distribute such modifications -or work under the terms of Section 1 above, provided that you also meet all -of these conditions: - -a) You must cause the modified files to carry prominent notices stating that -you changed the files and the date of any change. - -b) You must cause any work that you distribute or publish, that in whole or -in part contains or is derived from the Program or any part thereof, to be -licensed as a whole at no charge to all third parties under the terms of this -License. - -c) If the modified program normally reads commands interactively when run, -you must cause it, when started running for such interactive use in the most -ordinary way, to print or display an announcement including an appropriate -copyright notice and a notice that there is no warranty (or else, saying that -you provide a warranty) and that users may redistribute the program under -these conditions, and telling the user how to view a copy of this License. -(Exception: if the Program itself is interactive but does not normally print -such an announcement, your work based on the Program is not required to print -an announcement.) - -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Program, and can be reasonably -considered independent and separate works in themselves, then this License, -and its terms, do not apply to those sections when you distribute them as -separate works. But when you distribute the same sections as part of a whole -which is a work based on the Program, the distribution of the whole must be -on the terms of this License, whose permissions for other licensees extend -to the entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise -the right to control the distribution of derivative or collective works based -on the Program. - -In addition, mere aggregation of another work not based on the Program with -the Program (or with a work based on the Program) on a volume of a storage -or distribution medium does not bring the other work under the scope of this -License. - -3. You may copy and distribute the Program (or a work based on it, under Section -2) in object code or executable form under the terms of Sections 1 and 2 above -provided that you also do one of the following: - -a) Accompany it with the complete corresponding machine-readable source code, -which must be distributed under the terms of Sections 1 and 2 above on a medium -customarily used for software interchange; or, - -b) Accompany it with a written offer, valid for at least three years, to give -any third party, for a charge no more than your cost of physically performing -source distribution, a complete machine-readable copy of the corresponding -source code, to be distributed under the terms of Sections 1 and 2 above on -a medium customarily used for software interchange; or, - -c) Accompany it with the information you received as to the offer to distribute -corresponding source code. (This alternative is allowed only for noncommercial -distribution and only if you received the program in object code or executable -form with such an offer, in accord with Subsection b above.) - -The source code for a work means the preferred form of the work for making -modifications to it. For an executable work, complete source code means all -the source code for all modules it contains, plus any associated interface -definition files, plus the scripts used to control compilation and installation -of the executable. However, as a special exception, the source code distributed -need not include anything that is normally distributed (in either source or -binary form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component itself -accompanies the executable. - -If distribution of executable or object code is made by offering access to -copy from a designated place, then offering equivalent access to copy the -source code from the same place counts as distribution of the source code, -even though third parties are not compelled to copy the source along with -the object code. - -4. You may not copy, modify, sublicense, or distribute the Program except -as expressly provided under this License. Any attempt otherwise to copy, modify, -sublicense or distribute the Program is void, and will automatically terminate -your rights under this License. However, parties who have received copies, -or rights, from you under this License will not have their licenses terminated -so long as such parties remain in full compliance. - -5. You are not required to accept this License, since you have not signed -it. However, nothing else grants you permission to modify or distribute the -Program or its derivative works. These actions are prohibited by law if you -do not accept this License. Therefore, by modifying or distributing the Program -(or any work based on the Program), you indicate your acceptance of this License -to do so, and all its terms and conditions for copying, distributing or modifying -the Program or works based on it. - -6. Each time you redistribute the Program (or any work based on the Program), -the recipient automatically receives a license from the original licensor -to copy, distribute or modify the Program subject to these terms and conditions. -You may not impose any further restrictions on the recipients' exercise of -the rights granted herein. You are not responsible for enforcing compliance -by third parties to this License. - -7. If, as a consequence of a court judgment or allegation of patent infringement -or for any other reason (not limited to patent issues), conditions are imposed -on you (whether by court order, agreement or otherwise) that contradict the -conditions of this License, they do not excuse you from the conditions of -this License. If you cannot distribute so as to satisfy simultaneously your -obligations under this License and any other pertinent obligations, then as -a consequence you may not distribute the Program at all. For example, if a -patent license would not permit royalty-free redistribution of the Program -by all those who receive copies directly or indirectly through you, then the -only way you could satisfy both it and this License would be to refrain entirely -from distribution of the Program. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply and -the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents -or other property right claims or to contest validity of any such claims; -this section has the sole purpose of protecting the integrity of the free -software distribution system, which is implemented by public license practices. -Many people have made generous contributions to the wide range of software -distributed through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing to -distribute software through any other system and a licensee cannot impose -that choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - -8. If the distribution and/or use of the Program is restricted in certain -countries either by patents or by copyrighted interfaces, the original copyright -holder who places the Program under this License may add an explicit geographical -distribution limitation excluding those countries, so that distribution is -permitted only in or among countries not thus excluded. In such case, this -License incorporates the limitation as if written in the body of this License. - -9. The Free Software Foundation may publish revised and/or new versions of -the General Public License from time to time. Such new versions will be similar -in spirit to the present version, but may differ in detail to address new -problems or concerns. - -Each version is given a distinguishing version number. If the Program specifies -a version number of this License which applies to it and "any later version", -you have the option of following the terms and conditions either of that version -or of any later version published by the Free Software Foundation. If the -Program does not specify a version number of this License, you may choose -any version ever published by the Free Software Foundation. - -10. If you wish to incorporate parts of the Program into other free programs -whose distribution conditions are different, write to the author to ask for -permission. For software which is copyrighted by the Free Software Foundation, -write to the Free Software Foundation; we sometimes make exceptions for this. -Our decision will be guided by the two goals of preserving the free status -of all derivatives of our free software and of promoting the sharing and reuse -of software generally. - - NO WARRANTY - -11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE -STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM -"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE -OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE -OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA -OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES -OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH -HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible -use to the public, the best way to achieve this is to make it free software -which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach -them to the start of each source file to most effectively convey the exclusion -of warranty; and each file should have at least the "copyright" line and a -pointer to where the full notice is found. - - - -Copyright (C) - -This program is free software; you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free Software -Foundation; either version 2 of the License, or (at your option) any later -version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along with -this program; if not, write to the Free Software Foundation, Inc., 51 Franklin -Street, Fifth Floor, Boston, MA 02110-1301, USA. - -Also add information on how to contact you by electronic and paper mail. - -If the program is interactive, make it output a short notice like this when -it starts in an interactive mode: - -Gnomovision version 69, Copyright (C) year name of author Gnomovision comes -with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, -and you are welcome to redistribute it under certain conditions; type `show -c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, the commands you use may be -called something other than `show w' and `show c'; they could even be mouse-clicks -or menu items--whatever suits your program. - -You should also get your employer (if you work as a programmer) or your school, -if any, to sign a "copyright disclaimer" for the program, if necessary. Here -is a sample; alter the names: - -Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' -(which makes passes at compilers) written by James Hacker. - -, 1 April 1989 Ty Coon, President of Vice This General -Public License does not permit incorporating your program into proprietary -programs. If your program is a subroutine library, you may consider it more -useful to permit linking proprietary applications with the library. If this -is what you want to do, use the GNU Lesser General Public License instead -of this License. diff --git a/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-3.0-only b/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-3.0-only deleted file mode 100644 index e0665a64a..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-3.0-only +++ /dev/null @@ -1,225 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - -Version 3, 29 June 2007 - -Copyright © 2007 Free Software Foundation, Inc. - -Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. -Preamble - -The GNU General Public License is a free, copyleft license for software and other kinds of works. - -The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. - -To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. - -For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. - -Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. - -For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. - -Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. - -Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. - -The precise terms and conditions for copying, distribution and modification follow. -TERMS AND CONDITIONS -0. Definitions. - -“This License” refers to version 3 of the GNU General Public License. - -“Copyright” also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. - -“The Program” refers to any copyrightable work licensed under this License. Each licensee is addressed as “you”. “Licensees” and “recipients” may be individuals or organizations. - -To “modify” a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a “modified version” of the earlier work or a work “based on” the earlier work. - -A “covered work” means either the unmodified Program or a work based on the Program. - -To “propagate” a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. - -To “convey” a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. - -An interactive user interface displays “Appropriate Legal Notices” to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. -1. Source Code. - -The “source code” for a work means the preferred form of the work for making modifications to it. “Object code” means any non-source form of a work. - -A “Standard Interface” means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. - -The “System Libraries” of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A “Major Component”, in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. - -The “Corresponding Source” for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. - -The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. - -The Corresponding Source for a work in source code form is that same work. -2. Basic Permissions. - -All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. - -You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. - -Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. -3. Protecting Users' Legal Rights From Anti-Circumvention Law. - -No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. - -When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. -4. Conveying Verbatim Copies. - -You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. - -You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. -5. Conveying Modified Source Versions. - -You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: - - * a) The work must carry prominent notices stating that you modified it, and giving a relevant date. - * b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to “keep intact all notices”. - * c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. - * d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. - -A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an “aggregate” if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. -6. Conveying Non-Source Forms. - -You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: - - * a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. - * b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. - * c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. - * d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. - * e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. - -A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. - -A “User Product” is either (1) a “consumer product”, which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, “normally used” refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. - -“Installation Information” for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. - -If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). - -The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. - -Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. -7. Additional Terms. - -“Additional permissions” are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. - -When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. - -Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: - - * a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or - * b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or - * c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or - * d) Limiting the use for publicity purposes of names of licensors or authors of the material; or - * e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or - * f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. - -All other non-permissive additional terms are considered “further restrictions” within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. - -If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. - -Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. -8. Termination. - -You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). - -However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. - -Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. - -Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. -9. Acceptance Not Required for Having Copies. - -You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. -10. Automatic Licensing of Downstream Recipients. - -Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. - -An “entity transaction” is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. - -You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. -11. Patents. - -A “contributor” is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's “contributor version”. - -A contributor's “essential patent claims” are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, “control” includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. - -Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. - -In the following three paragraphs, a “patent license” is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To “grant” such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. - -If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. “Knowingly relying” means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. - -If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. - -A patent license is “discriminatory” if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. - -Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. -12. No Surrender of Others' Freedom. - -If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. -13. Use with the GNU Affero General Public License. - -Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. -14. Revised Versions of this License. - -The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. - -If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. - -Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. -15. Disclaimer of Warranty. - -THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM “AS IS” WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. -16. Limitation of Liability. - -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -17. Interpretation of Sections 15 and 16. - -If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. - -END OF TERMS AND CONDITIONS -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the “copyright” line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - -If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an “about box”. - -You should also get your employer (if you work as a programmer) or school, if any, to sign a “copyright disclaimer” for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see . - -The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . diff --git a/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-3.0-or-later b/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-3.0-or-later deleted file mode 100644 index e142a525b..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/licenses/GPL-3.0-or-later +++ /dev/null @@ -1,625 +0,0 @@ -GNU GENERAL PUBLIC LICENSE - -Version 3, 29 June 2007 - -Copyright © 2007 Free Software Foundation, Inc. - -Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -Preamble - -The GNU General Public License is a free, copyleft license for software and -other kinds of works. - -The licenses for most software and other practical works are designed to take -away your freedom to share and change the works. By contrast, the GNU General -Public License is intended to guarantee your freedom to share and change all -versions of a program--to make sure it remains free software for all its users. -We, the Free Software Foundation, use the GNU General Public License for most -of our software; it applies also to any other work released this way by its -authors. You can apply it to your programs, too. - -When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom -to distribute copies of free software (and charge for them if you wish), that -you receive source code or can get it if you want it, that you can change -the software or use pieces of it in new free programs, and that you know you -can do these things. - -To protect your rights, we need to prevent others from denying you these rights -or asking you to surrender the rights. Therefore, you have certain responsibilities -if you distribute copies of the software, or if you modify it: responsibilities -to respect the freedom of others. - -For example, if you distribute copies of such a program, whether gratis or -for a fee, you must pass on to the recipients the same freedoms that you received. -You must make sure that they, too, receive or can get the source code. And -you must show them these terms so they know their rights. - -Developers that use the GNU GPL protect your rights with two steps: (1) assert -copyright on the software, and (2) offer you this License giving you legal -permission to copy, distribute and/or modify it. - -For the developers' and authors' protection, the GPL clearly explains that -there is no warranty for this free software. For both users' and authors' -sake, the GPL requires that modified versions be marked as changed, so that -their problems will not be attributed erroneously to authors of previous versions. - -Some devices are designed to deny users access to install or run modified -versions of the software inside them, although the manufacturer can do so. -This is fundamentally incompatible with the aim of protecting users' freedom -to change the software. The systematic pattern of such abuse occurs in the -area of products for individuals to use, which is precisely where it is most -unacceptable. Therefore, we have designed this version of the GPL to prohibit -the practice for those products. If such problems arise substantially in other -domains, we stand ready to extend this provision to those domains in future -versions of the GPL, as needed to protect the freedom of users. - -Finally, every program is threatened constantly by software patents. States -should not allow patents to restrict development and use of software on general-purpose -computers, but in those that do, we wish to avoid the special danger that -patents applied to a free program could make it effectively proprietary. To -prevent this, the GPL assures that patents cannot be used to render the program -non-free. - -The precise terms and conditions for copying, distribution and modification -follow. - -TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU General Public License. - -"Copyright" also means copyright-like laws that apply to other kinds of works, -such as semiconductor masks. - -"The Program" refers to any copyrightable work licensed under this License. -Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals -or organizations. - -To "modify" a work means to copy from or adapt all or part of the work in -a fashion requiring copyright permission, other than the making of an exact -copy. The resulting work is called a "modified version" of the earlier work -or a work "based on" the earlier work. - -A "covered work" means either the unmodified Program or a work based on the -Program. - -To "propagate" a work means to do anything with it that, without permission, -would make you directly or secondarily liable for infringement under applicable -copyright law, except executing it on a computer or modifying a private copy. -Propagation includes copying, distribution (with or without modification), -making available to the public, and in some countries other activities as -well. - -To "convey" a work means any kind of propagation that enables other parties -to make or receive copies. Mere interaction with a user through a computer -network, with no transfer of a copy, is not conveying. - -An interactive user interface displays "Appropriate Legal Notices" to the -extent that it includes a convenient and prominently visible feature that -(1) displays an appropriate copyright notice, and (2) tells the user that -there is no warranty for the work (except to the extent that warranties are -provided), that licensees may convey the work under this License, and how -to view a copy of this License. If the interface presents a list of user commands -or options, such as a menu, a prominent item in the list meets this criterion. - - 1. Source Code. - -The "source code" for a work means the preferred form of the work for making -modifications to it. "Object code" means any non-source form of a work. - -A "Standard Interface" means an interface that either is an official standard -defined by a recognized standards body, or, in the case of interfaces specified -for a particular programming language, one that is widely used among developers -working in that language. - -The "System Libraries" of an executable work include anything, other than -the work as a whole, that (a) is included in the normal form of packaging -a Major Component, but which is not part of that Major Component, and (b) -serves only to enable use of the work with that Major Component, or to implement -a Standard Interface for which an implementation is available to the public -in source code form. A "Major Component", in this context, means a major essential -component (kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to produce -the work, or an object code interpreter used to run it. - -The "Corresponding Source" for a work in object code form means all the source -code needed to generate, install, and (for an executable work) run the object -code and to modify the work, including scripts to control those activities. -However, it does not include the work's System Libraries, or general-purpose -tools or generally available free programs which are used unmodified in performing -those activities but which are not part of the work. For example, Corresponding -Source includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically linked -subprograms that the work is specifically designed to require, such as by -intimate data communication or control flow between those subprograms and -other parts of the work. - -The Corresponding Source need not include anything that users can regenerate -automatically from other parts of the Corresponding Source. - - The Corresponding Source for a work in source code form is that same work. - - 2. Basic Permissions. - -All rights granted under this License are granted for the term of copyright -on the Program, and are irrevocable provided the stated conditions are met. -This License explicitly affirms your unlimited permission to run the unmodified -Program. The output from running a covered work is covered by this License -only if the output, given its content, constitutes a covered work. This License -acknowledges your rights of fair use or other equivalent, as provided by copyright -law. - -You may make, run and propagate covered works that you do not convey, without -conditions so long as your license otherwise remains in force. You may convey -covered works to others for the sole purpose of having them make modifications -exclusively for you, or provide you with facilities for running those works, -provided that you comply with the terms of this License in conveying all material -for which you do not control copyright. Those thus making or running the covered -works for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of your copyrighted -material outside their relationship with you. - -Conveying under any other circumstances is permitted solely under the conditions -stated below. Sublicensing is not allowed; section 10 makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - -No covered work shall be deemed part of an effective technological measure -under any applicable law fulfilling obligations under article 11 of the WIPO -copyright treaty adopted on 20 December 1996, or similar laws prohibiting -or restricting circumvention of such measures. - -When you convey a covered work, you waive any legal power to forbid circumvention -of technological measures to the extent such circumvention is effected by -exercising rights under this License with respect to the covered work, and -you disclaim any intention to limit operation or modification of the work -as a means of enforcing, against the work's users, your or third parties' -legal rights to forbid circumvention of technological measures. - - 4. Conveying Verbatim Copies. - -You may convey verbatim copies of the Program's source code as you receive -it, in any medium, provided that you conspicuously and appropriately publish -on each copy an appropriate copyright notice; keep intact all notices stating -that this License and any non-permissive terms added in accord with section -7 apply to the code; keep intact all notices of the absence of any warranty; -and give all recipients a copy of this License along with the Program. - -You may charge any price or no price for each copy that you convey, and you -may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - -You may convey a work based on the Program, or the modifications to produce -it from the Program, in the form of source code under the terms of section -4, provided that you also meet all of these conditions: - -a) The work must carry prominent notices stating that you modified it, and -giving a relevant date. - -b) The work must carry prominent notices stating that it is released under -this License and any conditions added under section 7. This requirement modifies -the requirement in section 4 to "keep intact all notices". - -c) You must license the entire work, as a whole, under this License to anyone -who comes into possession of a copy. This License will therefore apply, along -with any applicable section 7 additional terms, to the whole of the work, -and all its parts, regardless of how they are packaged. This License gives -no permission to license the work in any other way, but it does not invalidate -such permission if you have separately received it. - -d) If the work has interactive user interfaces, each must display Appropriate -Legal Notices; however, if the Program has interactive interfaces that do -not display Appropriate Legal Notices, your work need not make them do so. - -A compilation of a covered work with other separate and independent works, -which are not by their nature extensions of the covered work, and which are -not combined with it such as to form a larger program, in or on a volume of -a storage or distribution medium, is called an "aggregate" if the compilation -and its resulting copyright are not used to limit the access or legal rights -of the compilation's users beyond what the individual works permit. Inclusion -of a covered work in an aggregate does not cause this License to apply to -the other parts of the aggregate. - - 6. Conveying Non-Source Forms. - -You may convey a covered work in object code form under the terms of sections -4 and 5, provided that you also convey the machine-readable Corresponding -Source under the terms of this License, in one of these ways: - -a) Convey the object code in, or embodied in, a physical product (including -a physical distribution medium), accompanied by the Corresponding Source fixed -on a durable physical medium customarily used for software interchange. - -b) Convey the object code in, or embodied in, a physical product (including -a physical distribution medium), accompanied by a written offer, valid for -at least three years and valid for as long as you offer spare parts or customer -support for that product model, to give anyone who possesses the object code -either (1) a copy of the Corresponding Source for all the software in the -product that is covered by this License, on a durable physical medium customarily -used for software interchange, for a price no more than your reasonable cost -of physically performing this conveying of source, or (2) access to copy the -Corresponding Source from a network server at no charge. - -c) Convey individual copies of the object code with a copy of the written -offer to provide the Corresponding Source. This alternative is allowed only -occasionally and noncommercially, and only if you received the object code -with such an offer, in accord with subsection 6b. - -d) Convey the object code by offering access from a designated place (gratis -or for a charge), and offer equivalent access to the Corresponding Source -in the same way through the same place at no further charge. You need not -require recipients to copy the Corresponding Source along with the object -code. If the place to copy the object code is a network server, the Corresponding -Source may be on a different server (operated by you or a third party) that -supports equivalent copying facilities, provided you maintain clear directions -next to the object code saying where to find the Corresponding Source. Regardless -of what server hosts the Corresponding Source, you remain obligated to ensure -that it is available for as long as needed to satisfy these requirements. - -e) Convey the object code using peer-to-peer transmission, provided you inform -other peers where the object code and Corresponding Source of the work are -being offered to the general public at no charge under subsection 6d. - -A separable portion of the object code, whose source code is excluded from -the Corresponding Source as a System Library, need not be included in conveying -the object code work. - -A "User Product" is either (1) a "consumer product", which means any tangible -personal property which is normally used for personal, family, or household -purposes, or (2) anything designed or sold for incorporation into a dwelling. -In determining whether a product is a consumer product, doubtful cases shall -be resolved in favor of coverage. For a particular product received by a particular -user, "normally used" refers to a typical or common use of that class of product, -regardless of the status of the particular user or of the way in which the -particular user actually uses, or expects or is expected to use, the product. -A product is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent the -only significant mode of use of the product. - -"Installation Information" for a User Product means any methods, procedures, -authorization keys, or other information required to install and execute modified -versions of a covered work in that User Product from a modified version of -its Corresponding Source. The information must suffice to ensure that the -continued functioning of the modified object code is in no case prevented -or interfered with solely because modification has been made. - -If you convey an object code work under this section in, or with, or specifically -for use in, a User Product, and the conveying occurs as part of a transaction -in which the right of possession and use of the User Product is transferred -to the recipient in perpetuity or for a fixed term (regardless of how the -transaction is characterized), the Corresponding Source conveyed under this -section must be accompanied by the Installation Information. But this requirement -does not apply if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has been installed -in ROM). - -The requirement to provide Installation Information does not include a requirement -to continue to provide support service, warranty, or updates for a work that -has been modified or installed by the recipient, or for the User Product in -which it has been modified or installed. Access to a network may be denied -when the modification itself materially and adversely affects the operation -of the network or violates the rules and protocols for communication across -the network. - -Corresponding Source conveyed, and Installation Information provided, in accord -with this section must be in a format that is publicly documented (and with -an implementation available to the public in source code form), and must require -no special password or key for unpacking, reading or copying. - - 7. Additional Terms. - -"Additional permissions" are terms that supplement the terms of this License -by making exceptions from one or more of its conditions. Additional permissions -that are applicable to the entire Program shall be treated as though they -were included in this License, to the extent that they are valid under applicable -law. If additional permissions apply only to part of the Program, that part -may be used separately under those permissions, but the entire Program remains -governed by this License without regard to the additional permissions. - -When you convey a copy of a covered work, you may at your option remove any -additional permissions from that copy, or from any part of it. (Additional -permissions may be written to require their own removal in certain cases when -you modify the work.) You may place additional permissions on material, added -by you to a covered work, for which you have or can give appropriate copyright -permission. - -Notwithstanding any other provision of this License, for material you add -to a covered work, you may (if authorized by the copyright holders of that -material) supplement the terms of this License with terms: - -a) Disclaiming warranty or limiting liability differently from the terms of -sections 15 and 16 of this License; or - -b) Requiring preservation of specified reasonable legal notices or author -attributions in that material or in the Appropriate Legal Notices displayed -by works containing it; or - -c) Prohibiting misrepresentation of the origin of that material, or requiring -that modified versions of such material be marked in reasonable ways as different -from the original version; or - -d) Limiting the use for publicity purposes of names of licensors or authors -of the material; or - -e) Declining to grant rights under trademark law for use of some trade names, -trademarks, or service marks; or - -f) Requiring indemnification of licensors and authors of that material by -anyone who conveys the material (or modified versions of it) with contractual -assumptions of liability to the recipient, for any liability that these contractual -assumptions directly impose on those licensors and authors. - -All other non-permissive additional terms are considered "further restrictions" -within the meaning of section 10. If the Program as you received it, or any -part of it, contains a notice stating that it is governed by this License -along with a term that is a further restriction, you may remove that term. -If a license document contains a further restriction but permits relicensing -or conveying under this License, you may add to a covered work material governed -by the terms of that license document, provided that the further restriction -does not survive such relicensing or conveying. - -If you add terms to a covered work in accord with this section, you must place, -in the relevant source files, a statement of the additional terms that apply -to those files, or a notice indicating where to find the applicable terms. - -Additional terms, permissive or non-permissive, may be stated in the form -of a separately written license, or stated as exceptions; the above requirements -apply either way. - - 8. Termination. - -You may not propagate or modify a covered work except as expressly provided -under this License. Any attempt otherwise to propagate or modify it is void, -and will automatically terminate your rights under this License (including -any patent licenses granted under the third paragraph of section 11). - -However, if you cease all violation of this License, then your license from -a particular copyright holder is reinstated (a) provisionally, unless and -until the copyright holder explicitly and finally terminates your license, -and (b) permanently, if the copyright holder fails to notify you of the violation -by some reasonable means prior to 60 days after the cessation. - -Moreover, your license from a particular copyright holder is reinstated permanently -if the copyright holder notifies you of the violation by some reasonable means, -this is the first time you have received notice of violation of this License -(for any work) from that copyright holder, and you cure the violation prior -to 30 days after your receipt of the notice. - -Termination of your rights under this section does not terminate the licenses -of parties who have received copies or rights from you under this License. -If your rights have been terminated and not permanently reinstated, you do -not qualify to receive new licenses for the same material under section 10. - - 9. Acceptance Not Required for Having Copies. - -You are not required to accept this License in order to receive or run a copy -of the Program. Ancillary propagation of a covered work occurring solely as -a consequence of using peer-to-peer transmission to receive a copy likewise -does not require acceptance. However, nothing other than this License grants -you permission to propagate or modify any covered work. These actions infringe -copyright if you do not accept this License. Therefore, by modifying or propagating -a covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - -Each time you convey a covered work, the recipient automatically receives -a license from the original licensors, to run, modify and propagate that work, -subject to this License. You are not responsible for enforcing compliance -by third parties with this License. - -An "entity transaction" is a transaction transferring control of an organization, -or substantially all assets of one, or subdividing an organization, or merging -organizations. If propagation of a covered work results from an entity transaction, -each party to that transaction who receives a copy of the work also receives -whatever licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the Corresponding -Source of the work from the predecessor in interest, if the predecessor has -it or can get it with reasonable efforts. - -You may not impose any further restrictions on the exercise of the rights -granted or affirmed under this License. For example, you may not impose a -license fee, royalty, or other charge for exercise of rights granted under -this License, and you may not initiate litigation (including a cross-claim -or counterclaim in a lawsuit) alleging that any patent claim is infringed -by making, using, selling, offering for sale, or importing the Program or -any portion of it. - - 11. Patents. - -A "contributor" is a copyright holder who authorizes use under this License -of the Program or a work on which the Program is based. The work thus licensed -is called the contributor's "contributor version". - -A contributor's "essential patent claims" are all patent claims owned or controlled -by the contributor, whether already acquired or hereafter acquired, that would -be infringed by some manner, permitted by this License, of making, using, -or selling its contributor version, but do not include claims that would be -infringed only as a consequence of further modification of the contributor -version. For purposes of this definition, "control" includes the right to -grant patent sublicenses in a manner consistent with the requirements of this -License. - -Each contributor grants you a non-exclusive, worldwide, royalty-free patent -license under the contributor's essential patent claims, to make, use, sell, -offer for sale, import and otherwise run, modify and propagate the contents -of its contributor version. - -In the following three paragraphs, a "patent license" is any express agreement -or commitment, however denominated, not to enforce a patent (such as an express -permission to practice a patent or covenant not to sue for patent infringement). -To "grant" such a patent license to a party means to make such an agreement -or commitment not to enforce a patent against the party. - -If you convey a covered work, knowingly relying on a patent license, and the -Corresponding Source of the work is not available for anyone to copy, free -of charge and under the terms of this License, through a publicly available -network server or other readily accessible means, then you must either (1) -cause the Corresponding Source to be so available, or (2) arrange to deprive -yourself of the benefit of the patent license for this particular work, or -(3) arrange, in a manner consistent with the requirements of this License, -to extend the patent license to downstream recipients. "Knowingly relying" -means you have actual knowledge that, but for the patent license, your conveying -the covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that country -that you have reason to believe are valid. - -If, pursuant to or in connection with a single transaction or arrangement, -you convey, or propagate by procuring conveyance of, a covered work, and grant -a patent license to some of the parties receiving the covered work authorizing -them to use, propagate, modify or convey a specific copy of the covered work, -then the patent license you grant is automatically extended to all recipients -of the covered work and works based on it. - -A patent license is "discriminatory" if it does not include within the scope -of its coverage, prohibits the exercise of, or is conditioned on the non-exercise -of one or more of the rights that are specifically granted under this License. -You may not convey a covered work if you are a party to an arrangement with -a third party that is in the business of distributing software, under which -you make payment to the third party based on the extent of your activity of -conveying the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory patent -license (a) in connection with copies of the covered work conveyed by you -(or copies made from those copies), or (b) primarily for and in connection -with specific products or compilations that contain the covered work, unless -you entered into that arrangement, or that patent license was granted, prior -to 28 March 2007. - -Nothing in this License shall be construed as excluding or limiting any implied -license or other defenses to infringement that may otherwise be available -to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - -If conditions are imposed on you (whether by court order, agreement or otherwise) -that contradict the conditions of this License, they do not excuse you from -the conditions of this License. If you cannot convey a covered work so as -to satisfy simultaneously your obligations under this License and any other -pertinent obligations, then as a consequence you may not convey it at all. -For example, if you agree to terms that obligate you to collect a royalty -for further conveying from those to whom you convey the Program, the only -way you could satisfy both those terms and this License would be to refrain -entirely from conveying the Program. - - 13. Use with the GNU Affero General Public License. - -Notwithstanding any other provision of this License, you have permission to -link or combine any covered work with a work licensed under version 3 of the -GNU Affero General Public License into a single combined work, and to convey -the resulting work. The terms of this License will continue to apply to the -part which is the covered work, but the special requirements of the GNU Affero -General Public License, section 13, concerning interaction through a network -will apply to the combination as such. - - 14. Revised Versions of this License. - -The Free Software Foundation may publish revised and/or new versions of the -GNU General Public License from time to time. Such new versions will be similar -in spirit to the present version, but may differ in detail to address new -problems or concerns. - -Each version is given a distinguishing version number. If the Program specifies -that a certain numbered version of the GNU General Public License "or any -later version" applies to it, you have the option of following the terms and -conditions either of that numbered version or of any later version published -by the Free Software Foundation. If the Program does not specify a version -number of the GNU General Public License, you may choose any version ever -published by the Free Software Foundation. - -If the Program specifies that a proxy can decide which future versions of -the GNU General Public License can be used, that proxy's public statement -of acceptance of a version permanently authorizes you to choose that version -for the Program. - -Later license versions may give you additional or different permissions. However, -no additional obligations are imposed on any author or copyright holder as -a result of your choosing to follow a later version. - - 15. Disclaimer of Warranty. - -THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE -LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR -OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER -EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES -OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS -TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM -PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR -CORRECTION. - - 16. Limitation of Liability. - -IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL -ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM -AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, -INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO -USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED -INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE -PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER -PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - -If the disclaimer of warranty and limitation of liability provided above cannot -be given local legal effect according to their terms, reviewing courts shall -apply local law that most closely approximates an absolute waiver of all civil -liability in connection with the Program, unless a warranty or assumption -of liability accompanies a copy of the Program in return for a fee. END OF -TERMS AND CONDITIONS - -How to Apply These Terms to Your New Programs - -If you develop a new program, and you want it to be of the greatest possible -use to the public, the best way to achieve this is to make it free software -which everyone can redistribute and change under these terms. - -To do so, attach the following notices to the program. It is safest to attach -them to the start of each source file to most effectively state the exclusion -of warranty; and each file should have at least the "copyright" line and a -pointer to where the full notice is found. - - - -Copyright (C) - -This program is free software: you can redistribute it and/or modify it under -the terms of the GNU General Public License as published by the Free Software -Foundation, either version 3 of the License, or (at your option) any later -version. - -This program is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. - -You should have received a copy of the GNU General Public License along with -this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - -If the program does terminal interaction, make it output a short notice like -this when it starts in an interactive mode: - - Copyright (C) - -This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - -This is free software, and you are welcome to redistribute it under certain -conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands might -be different; for a GUI interface, you would use an "about box". - -You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. For -more information on this, and how to apply and follow the GNU GPL, see . - -The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you may -consider it more useful to permit linking proprietary applications with the -library. If this is what you want to do, use the GNU Lesser General Public -License instead of this License. But first, please read . diff --git a/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.0-only b/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.0-only deleted file mode 100644 index 5931d439b..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.0-only +++ /dev/null @@ -1,342 +0,0 @@ -GNU LIBRARY GENERAL PUBLIC LICENSE - - - -Version 2, June 1991 - - - -Copyright (C) 1991 Free Software Foundation, Inc. - -51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - -Everyone is permitted to copy and distribute verbatim copies - -of this license document, but changing it is not allowed. - - - -[This is the first released version of the library GPL. It is - - numbered 2 because it goes with version 2 of the ordinary GPL.] - -Preamble - - - -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. - - - -This license, the Library General Public License, applies to some specially designated Free Software Foundation software, and to any other libraries whose authors decide to use it. You can use it for your libraries, too. - - - -When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. - - - -To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library, or if you modify it. - - - -For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link a program with the library, you must provide complete object files to the recipients so that they can relink them with the library, after making changes to the library and recompiling it. And you must show them these terms so they know their rights. - - - -Our method of protecting your rights has two steps: (1) copyright the library, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the library. - - - -Also, for each distributor's protection, we want to make certain that everyone understands that there is no warranty for this free library. If the library is modified by someone else and passed on, we want its recipients to know that what they have is not the original version, so that any problems introduced by others will not reflect on the original authors' reputations. - - - -Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that companies distributing free software will individually obtain patent licenses, thus in effect transforming the program into proprietary software. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. - - - -Most GNU software, including some libraries, is covered by the ordinary GNU General Public License, which was designed for utility programs. This license, the GNU Library General Public License, applies to certain designated libraries. This license is quite different from the ordinary one; be sure to read it in full, and don't assume that anything in it is the same as in the ordinary license. - - - -The reason we have a separate public license for some libraries is that they blur the distinction we usually make between modifying or adding to a program and simply using it. Linking a program with a library, without changing the library, is in some sense simply using the library, and is analogous to running a utility program or application program. However, in a textual and legal sense, the linked executable is a combined work, a derivative of the original library, and the ordinary General Public License treats it as such. - - - -Because of this blurred distinction, using the ordinary General Public License for libraries did not effectively promote software sharing, because most developers did not use the libraries. We concluded that weaker conditions might promote sharing better. - - - -However, unrestricted linking of non-free programs would deprive the users of those programs of all benefit from the free status of the libraries themselves. This Library General Public License is intended to permit developers of non-free programs to use free libraries, while preserving your freedom as a user of such programs to change the free libraries that are incorporated in them. (We have not seen how to achieve this as regards changes in header files, but we have achieved it as regards changes in the actual functions of the Library.) The hope is that this will lead to faster development of free libraries. - - - -The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, while the latter only works together with the library. - - - -Note that it is possible for a library to be covered by the ordinary General Public License rather than by this special one. - - - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - - - -0. This License Agreement applies to any software library which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Library General Public License (also called "this License"). Each licensee is addressed as "you". - - - -A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. - - - -The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) - - - -"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. - - - -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. - - - -1. You may copy and distribute verbatim copies of the Library's complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. - - - -You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. - - - -2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: - - - -a) The modified work must itself be a software library. - -b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. - -c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. - -d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. - -(For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) - - - -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. - - - -Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. - - - -In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. - - - -3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. - - - -Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. - - - -This option is useful when you wish to copy part of the code of the Library into a program that is not a library. - - - -4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. - - - -If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. - - - -5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. - - - -However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. - - - -When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. - - - -If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) - - - -Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. - - - -6. As an exception to the Sections above, you may also compile or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer's own use and reverse engineering for debugging such modifications. - - - -You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: - - - -a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) - -b) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. - -c) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. - -d) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. - -For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. - - - -It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. - - - -7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: - - - -a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. - -b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. - -8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. - - - -9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. - - - -10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. - - - -11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. - - - -If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. - - - -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. - - - -This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - - - -12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. - - - -13. The Free Software Foundation may publish revised and/or new versions of the Library General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - - - -Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. - - - -14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - - - -NO WARRANTY - - - -15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - - -16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - - - -END OF TERMS AND CONDITIONS - - - -How to Apply These Terms to Your New Libraries - - - -If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). - - - -To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - - - -one line to give the library's name and an idea of what it does. - -Copyright (C) year name of author - - - -This library is free software; you can redistribute it and/or - -modify it under the terms of the GNU Library General Public - -License as published by the Free Software Foundation; either - -version 2 of the License, or (at your option) any later version. - - - -This library is distributed in the hope that it will be useful, - -but WITHOUT ANY WARRANTY; without even the implied warranty of - -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - -Library General Public License for more details. - - - -You should have received a copy of the GNU Library General Public - -License along with this library; if not, write to the - -Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, - -Boston, MA 02110-1301, USA. - -Also add information on how to contact you by electronic and paper mail. - - - -You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: - - - -Yoyodyne, Inc., hereby disclaims all copyright interest in - -the library `Frob' (a library for tweaking knobs) written - -by James Random Hacker. - - - -signature of Ty Coon, 1 April 1990 - -Ty Coon, President of Vice - -That's all there is to it! - diff --git a/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.0-or-later b/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.0-or-later deleted file mode 100644 index 5c96471aa..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.0-or-later +++ /dev/null @@ -1,446 +0,0 @@ -GNU LIBRARY GENERAL PUBLIC LICENSE - -Version 2, June 1991 Copyright (C) 1991 Free Software Foundation, Inc. - -51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA - -Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -[This is the first released version of the library GPL. It is numbered 2 because -it goes with version 2 of the ordinary GPL.] - -Preamble - -The licenses for most software are designed to take away your freedom to share -and change it. By contrast, the GNU General Public Licenses are intended to -guarantee your freedom to share and change free software--to make sure the -software is free for all its users. - -This license, the Library General Public License, applies to some specially -designated Free Software Foundation software, and to any other libraries whose -authors decide to use it. You can use it for your libraries, too. - -When we speak of free software, we are referring to freedom, not price. Our -General Public Licenses are designed to make sure that you have the freedom -to distribute copies of free software (and charge for this service if you -wish), that you receive source code or can get it if you want it, that you -can change the software or use pieces of it in new free programs; and that -you know you can do these things. - -To protect your rights, we need to make restrictions that forbid anyone to -deny you these rights or to ask you to surrender the rights. These restrictions -translate to certain responsibilities for you if you distribute copies of -the library, or if you modify it. - -For example, if you distribute copies of the library, whether gratis or for -a fee, you must give the recipients all the rights that we gave you. You must -make sure that they, too, receive or can get the source code. If you link -a program with the library, you must provide complete object files to the -recipients so that they can relink them with the library, after making changes -to the library and recompiling it. And you must show them these terms so they -know their rights. - -Our method of protecting your rights has two steps: (1) copyright the library, -and (2) offer you this license which gives you legal permission to copy, distribute -and/or modify the library. - -Also, for each distributor's protection, we want to make certain that everyone -understands that there is no warranty for this free library. If the library -is modified by someone else and passed on, we want its recipients to know -that what they have is not the original version, so that any problems introduced -by others will not reflect on the original authors' reputations. - -Finally, any free program is threatened constantly by software patents. We -wish to avoid the danger that companies distributing free software will individually -obtain patent licenses, thus in effect transforming the program into proprietary -software. To prevent this, we have made it clear that any patent must be licensed -for everyone's free use or not licensed at all. - -Most GNU software, including some libraries, is covered by the ordinary GNU -General Public License, which was designed for utility programs. This license, -the GNU Library General Public License, applies to certain designated libraries. -This license is quite different from the ordinary one; be sure to read it -in full, and don't assume that anything in it is the same as in the ordinary -license. - -The reason we have a separate public license for some libraries is that they -blur the distinction we usually make between modifying or adding to a program -and simply using it. Linking a program with a library, without changing the -library, is in some sense simply using the library, and is analogous to running -a utility program or application program. However, in a textual and legal -sense, the linked executable is a combined work, a derivative of the original -library, and the ordinary General Public License treats it as such. - -Because of this blurred distinction, using the ordinary General Public License -for libraries did not effectively promote software sharing, because most developers -did not use the libraries. We concluded that weaker conditions might promote -sharing better. - -However, unrestricted linking of non-free programs would deprive the users -of those programs of all benefit from the free status of the libraries themselves. -This Library General Public License is intended to permit developers of non-free -programs to use free libraries, while preserving your freedom as a user of -such programs to change the free libraries that are incorporated in them. -(We have not seen how to achieve this as regards changes in header files, -but we have achieved it as regards changes in the actual functions of the -Library.) The hope is that this will lead to faster development of free libraries. - -The precise terms and conditions for copying, distribution and modification -follow. Pay close attention to the difference between a "work based on the -library" and a "work that uses the library". The former contains code derived -from the library, while the latter only works together with the library. - -Note that it is possible for a library to be covered by the ordinary General -Public License rather than by this special one. - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License Agreement applies to any software library which contains a -notice placed by the copyright holder or other authorized party saying it -may be distributed under the terms of this Library General Public License -(also called "this License"). Each licensee is addressed as "you". - -A "library" means a collection of software functions and/or data prepared -so as to be conveniently linked with application programs (which use some -of those functions and data) to form executables. - -The "Library", below, refers to any such software library or work which has -been distributed under these terms. A "work based on the Library" means either -the Library or any derivative work under copyright law: that is to say, a -work containing the Library or a portion of it, either verbatim or with modifications -and/or translated straightforwardly into another language. (Hereinafter, translation -is included without limitation in the term "modification".) - -"Source code" for a work means the preferred form of the work for making modifications -to it. For a library, complete source code means all the source code for all -modules it contains, plus any associated interface definition files, plus -the scripts used to control compilation and installation of the library. - -Activities other than copying, distribution and modification are not covered -by this License; they are outside its scope. The act of running a program -using the Library is not restricted, and output from such a program is covered -only if its contents constitute a work based on the Library (independent of -the use of the Library in a tool for writing it). Whether that is true depends -on what the Library does and what the program that uses the Library does. - -1. You may copy and distribute verbatim copies of the Library's complete source -code as you receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice and disclaimer -of warranty; keep intact all the notices that refer to this License and to -the absence of any warranty; and distribute a copy of this License along with -the Library. - -You may charge a fee for the physical act of transferring a copy, and you -may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Library or any portion of it, -thus forming a work based on the Library, and copy and distribute such modifications -or work under the terms of Section 1 above, provided that you also meet all -of these conditions: - - a) The modified work must itself be a software library. - -b) You must cause the files modified to carry prominent notices stating that -you changed the files and the date of any change. - -c) You must cause the whole of the work to be licensed at no charge to all -third parties under the terms of this License. - -d) If a facility in the modified Library refers to a function or a table of -data to be supplied by an application program that uses the facility, other -than as an argument passed when the facility is invoked, then you must make -a good faith effort to ensure that, in the event an application does not supply -such function or table, the facility still operates, and performs whatever -part of its purpose remains meaningful. - -(For example, a function in a library to compute square roots has a purpose -that is entirely well-defined independent of the application. Therefore, Subsection -2d requires that any application-supplied function or table used by this function -must be optional: if the application does not supply it, the square root function -must still compute square roots.) - -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Library, and can be reasonably -considered independent and separate works in themselves, then this License, -and its terms, do not apply to those sections when you distribute them as -separate works. But when you distribute the same sections as part of a whole -which is a work based on the Library, the distribution of the whole must be -on the terms of this License, whose permissions for other licensees extend -to the entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise -the right to control the distribution of derivative or collective works based -on the Library. - -In addition, mere aggregation of another work not based on the Library with -the Library (or with a work based on the Library) on a volume of a storage -or distribution medium does not bring the other work under the scope of this -License. - -3. You may opt to apply the terms of the ordinary GNU General Public License -instead of this License to a given copy of the Library. To do this, you must -alter all the notices that refer to this License, so that they refer to the -ordinary GNU General Public License, version 2, instead of to this License. -(If a newer version than version 2 of the ordinary GNU General Public License -has appeared, then you can specify that version instead if you wish.) Do not -make any other change in these notices. - -Once this change is made in a given copy, it is irreversible for that copy, -so the ordinary GNU General Public License applies to all subsequent copies -and derivative works made from that copy. - -This option is useful when you wish to copy part of the code of the Library -into a program that is not a library. - -4. You may copy and distribute the Library (or a portion or derivative of -it, under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you accompany it with the complete corresponding -machine-readable source code, which must be distributed under the terms of -Sections 1 and 2 above on a medium customarily used for software interchange. - -If distribution of object code is made by offering access to copy from a designated -place, then offering equivalent access to copy the source code from the same -place satisfies the requirement to distribute the source code, even though -third parties are not compelled to copy the source along with the object code. - -5. A program that contains no derivative of any portion of the Library, but -is designed to work with the Library by being compiled or linked with it, -is called a "work that uses the Library". Such a work, in isolation, is not -a derivative work of the Library, and therefore falls outside the scope of -this License. - -However, linking a "work that uses the Library" with the Library creates an -executable that is a derivative of the Library (because it contains portions -of the Library), rather than a "work that uses the library". The executable -is therefore covered by this License. Section 6 states terms for distribution -of such executables. - -When a "work that uses the Library" uses material from a header file that -is part of the Library, the object code for the work may be a derivative work -of the Library even though the source code is not. Whether this is true is -especially significant if the work can be linked without the Library, or if -the work is itself a library. The threshold for this to be true is not precisely -defined by law. - -If such an object file uses only numerical parameters, data structure layouts -and accessors, and small macros and small inline functions (ten lines or less -in length), then the use of the object file is unrestricted, regardless of -whether it is legally a derivative work. (Executables containing this object -code plus portions of the Library will still fall under Section 6.) - -Otherwise, if the work is a derivative of the Library, you may distribute -the object code for the work under the terms of Section 6. Any executables -containing that work also fall under Section 6, whether or not they are linked -directly with the Library itself. - -6. As an exception to the Sections above, you may also compile or link a "work -that uses the Library" with the Library to produce a work containing portions -of the Library, and distribute that work under terms of your choice, provided -that the terms permit modification of the work for the customer's own use -and reverse engineering for debugging such modifications. - -You must give prominent notice with each copy of the work that the Library -is used in it and that the Library and its use are covered by this License. -You must supply a copy of this License. If the work during execution displays -copyright notices, you must include the copyright notice for the Library among -them, as well as a reference directing the user to the copy of this License. -Also, you must do one of these things: - -a) Accompany the work with the complete corresponding machine-readable source -code for the Library including whatever changes were used in the work (which -must be distributed under Sections 1 and 2 above); and, if the work is an -executable linked with the Library, with the complete machine-readable "work -that uses the Library", as object code and/or source code, so that the user -can modify the Library and then relink to produce a modified executable containing -the modified Library. (It is understood that the user who changes the contents -of definitions files in the Library will not necessarily be able to recompile -the application to use the modified definitions.) - -b) Accompany the work with a written offer, valid for at least three years, -to give the same user the materials specified in Subsection 6a, above, for -a charge no more than the cost of performing this distribution. - -c) If distribution of the work is made by offering access to copy from a designated -place, offer equivalent access to copy the above specified materials from -the same place. - -d) Verify that the user has already received a copy of these materials or -that you have already sent this user a copy. - -For an executable, the required form of the "work that uses the Library" must -include any data and utility programs needed for reproducing the executable -from it. However, as a special exception, the source code distributed need -not include anything that is normally distributed (in either source or binary -form) with the major components (compiler, kernel, and so on) of the operating -system on which the executable runs, unless that component itself accompanies -the executable. - -It may happen that this requirement contradicts the license restrictions of -other proprietary libraries that do not normally accompany the operating system. -Such a contradiction means you cannot use both them and the Library together -in an executable that you distribute. - -7. You may place library facilities that are a work based on the Library side-by-side -in a single library together with other library facilities not covered by -this License, and distribute such a combined library, provided that the separate -distribution of the work based on the Library and of the other library facilities -is otherwise permitted, and provided that you do these two things: - -a) Accompany the combined library with a copy of the same work based on the -Library, uncombined with any other library facilities. This must be distributed -under the terms of the Sections above. - -b) Give prominent notice with the combined library of the fact that part of -it is a work based on the Library, and explaining where to find the accompanying -uncombined form of the same work. - -8. You may not copy, modify, sublicense, link with, or distribute the Library -except as expressly provided under this License. Any attempt otherwise to -copy, modify, sublicense, link with, or distribute the Library is void, and -will automatically terminate your rights under this License. However, parties -who have received copies, or rights, from you under this License will not -have their licenses terminated so long as such parties remain in full compliance. - -9. You are not required to accept this License, since you have not signed -it. However, nothing else grants you permission to modify or distribute the -Library or its derivative works. These actions are prohibited by law if you -do not accept this License. Therefore, by modifying or distributing the Library -(or any work based on the Library), you indicate your acceptance of this License -to do so, and all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - -10. Each time you redistribute the Library (or any work based on the Library), -the recipient automatically receives a license from the original licensor -to copy, distribute, link with or modify the Library subject to these terms -and conditions. You may not impose any further restrictions on the recipients' -exercise of the rights granted herein. You are not responsible for enforcing -compliance by third parties to this License. - -11. If, as a consequence of a court judgment or allegation of patent infringement -or for any other reason (not limited to patent issues), conditions are imposed -on you (whether by court order, agreement or otherwise) that contradict the -conditions of this License, they do not excuse you from the conditions of -this License. If you cannot distribute so as to satisfy simultaneously your -obligations under this License and any other pertinent obligations, then as -a consequence you may not distribute the Library at all. For example, if a -patent license would not permit royalty-free redistribution of the Library -by all those who receive copies directly or indirectly through you, then the -only way you could satisfy both it and this License would be to refrain entirely -from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents -or other property right claims or to contest validity of any such claims; -this section has the sole purpose of protecting the integrity of the free -software distribution system which is implemented by public license practices. -Many people have made generous contributions to the wide range of software -distributed through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing to -distribute software through any other system and a licensee cannot impose -that choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - -12. If the distribution and/or use of the Library is restricted in certain -countries either by patents or by copyrighted interfaces, the original copyright -holder who places the Library under this License may add an explicit geographical -distribution limitation excluding those countries, so that distribution is -permitted only in or among countries not thus excluded. In such case, this -License incorporates the limitation as if written in the body of this License. - -13. The Free Software Foundation may publish revised and/or new versions of -the Library General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to address -new problems or concerns. - -Each version is given a distinguishing version number. If the Library specifies -a version number of this License which applies to it and "any later version", -you have the option of following the terms and conditions either of that version -or of any later version published by the Free Software Foundation. If the -Library does not specify a license version number, you may choose any version -ever published by the Free Software Foundation. - -14. If you wish to incorporate parts of the Library into other free programs -whose distribution conditions are incompatible with these, write to the author -to ask for permission. For software which is copyrighted by the Free Software -Foundation, write to the Free Software Foundation; we sometimes make exceptions -for this. Our decision will be guided by the two goals of preserving the free -status of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - -15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE -STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY -"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE -OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE -THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE -OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA -OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES -OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH -HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Libraries - -If you develop a new library, and you want it to be of the greatest possible -use to the public, we recommend making it free software that everyone can -redistribute and change. You can do so by permitting redistribution under -these terms (or, alternatively, under the terms of the ordinary General Public -License). - -To apply these terms, attach the following notices to the library. It is safest -to attach them to the start of each source file to most effectively convey -the exclusion of warranty; and each file should have at least the "copyright" -line and a pointer to where the full notice is found. - -one line to give the library's name and an idea of what it does. - -Copyright (C) year name of author - -This library is free software; you can redistribute it and/or modify it under -the terms of the GNU Library General Public License as published by the Free -Software Foundation; either version 2 of the License, or (at your option) -any later version. - -This library is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more -details. - -You should have received a copy of the GNU Library General Public License -along with this library; if not, write to the Free Software Foundation, Inc., -51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your school, -if any, to sign a "copyright disclaimer" for the library, if necessary. Here -is a sample; alter the names: - -Yoyodyne, Inc., hereby disclaims all copyright interest in - -the library `Frob' (a library for tweaking knobs) written - -by James Random Hacker. - -signature of Ty Coon, 1 April 1990 - -Ty Coon, President of Vice - -That's all there is to it! diff --git a/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.1-only b/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.1-only deleted file mode 100644 index a0e735a98..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.1-only +++ /dev/null @@ -1,176 +0,0 @@ - -GNU LESSER GENERAL PUBLIC LICENSE - -Version 2.1, February 1999 - -Copyright (C) 1991, 1999 Free Software Foundation, Inc. -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -Everyone is permitted to copy and distribute verbatim copies -of this license document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts - as the successor of the GNU Library Public License, version 2, hence - the version number 2.1.] -Preamble - -The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public Licenses are intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. - -This license, the Lesser General Public License, applies to some specially designated software packages--typically libraries--of the Free Software Foundation and other authors who decide to use it. You can use it too, but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular case, based on the explanations below. - -When we speak of free software, we are referring to freedom of use, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish); that you receive source code or can get it if you want it; that you can change the software and use pieces of it in new free programs; and that you are informed that you can do these things. - -To protect your rights, we need to make restrictions that forbid distributors to deny you these rights or to ask you to surrender these rights. These restrictions translate to certain responsibilities for you if you distribute copies of the library or if you modify it. - -For example, if you distribute copies of the library, whether gratis or for a fee, you must give the recipients all the rights that we gave you. You must make sure that they, too, receive or can get the source code. If you link other code with the library, you must provide complete object files to the recipients, so that they can relink them with the library after making changes to the library and recompiling it. And you must show them these terms so they know their rights. - -We protect your rights with a two-step method: (1) we copyright the library, and (2) we offer you this license, which gives you legal permission to copy, distribute and/or modify the library. - -To protect each distributor, we want to make it very clear that there is no warranty for the free library. Also, if the library is modified by someone else and passed on, the recipients should know that what they have is not the original version, so that the original author`s reputation will not be affected by problems that might be introduced by others. - -Finally, software patents pose a constant threat to the existence of any free program. We wish to make sure that a company cannot effectively restrict the users of a free program by obtaining a restrictive license from a patent holder. Therefore, we insist that any patent license obtained for a version of the library must be consistent with the full freedom of use specified in this license. - -Most GNU software, including some libraries, is covered by the ordinary GNU General Public License. This license, the GNU Lesser General Public License, applies to certain designated libraries, and is quite different from the ordinary General Public License. We use this license for certain libraries in order to permit linking those libraries into non-free programs. - -When a program is linked with a library, whether statically or using a shared library, the combination of the two is legally speaking a combined work, a derivative of the original library. The ordinary General Public License therefore permits such linking only if the entire combination fits its criteria of freedom. The Lesser General Public License permits more lax criteria for linking other code with the library. - -We call this license the "Lesser" General Public License because it does Less to protect the user`s freedom than the ordinary General Public License. It also provides other free software developers Less of an advantage over competing non-free programs. These disadvantages are the reason we use the ordinary General Public License for many libraries. However, the Lesser license provides advantages in certain special circumstances. - -For example, on rare occasions, there may be a special need to encourage the widest possible use of a certain library, so that it becomes a de-facto standard. To achieve this, non-free programs must be allowed to use the library. A more frequent case is that a free library does the same job as widely used non-free libraries. In this case, there is little to gain by limiting the free library to free software only, so we use the Lesser General Public License. - -In other cases, permission to use a particular library in non-free programs enables a greater number of people to use a large body of free software. For example, permission to use the GNU C Library in non-free programs enables many more people to use the whole GNU operating system, as well as its variant, the GNU/Linux operating system. - -Although the Lesser General Public License is Less protective of the users` freedom, it does ensure that the user of a program that is linked with the Library has the freedom and the wherewithal to run that program using a modified version of the Library. - -The precise terms and conditions for copying, distribution and modification follow. Pay close attention to the difference between a "work based on the library" and a "work that uses the library". The former contains code derived from the library, whereas the latter must be combined with the library in order to run. - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License Agreement applies to any software library or other program which contains a notice placed by the copyright holder or other authorized party saying it may be distributed under the terms of this Lesser General Public License (also called "this License"). Each licensee is addressed as "you". - -A "library" means a collection of software functions and/or data prepared so as to be conveniently linked with application programs (which use some of those functions and data) to form executables. - -The "Library", below, refers to any such software library or work which has been distributed under these terms. A "work based on the Library" means either the Library or any derivative work under copyright law: that is to say, a work containing the Library or a portion of it, either verbatim or with modifications and/or translated straightforwardly into another language. (Hereinafter, translation is included without limitation in the term "modification".) - -"Source code" for a work means the preferred form of the work for making modifications to it. For a library, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the library. - -Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running a program using the Library is not restricted, and output from such a program is covered only if its contents constitute a work based on the Library (independent of the use of the Library in a tool for writing it). Whether that is true depends on what the Library does and what the program that uses the Library does. - -1. You may copy and distribute verbatim copies of the Library`s complete source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and distribute a copy of this License along with the Library. - -You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Library or any portion of it, thus forming a work based on the Library, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: - -a) The modified work must itself be a software library. -b) You must cause the files modified to carry prominent notices stating that you changed the files and the date of any change. -c) You must cause the whole of the work to be licensed at no charge to all third parties under the terms of this License. -d) If a facility in the modified Library refers to a function or a table of data to be supplied by an application program that uses the facility, other than as an argument passed when the facility is invoked, then you must make a good faith effort to ensure that, in the event an application does not supply such function or table, the facility still operates, and performs whatever part of its purpose remains meaningful. -(For example, a function in a library to compute square roots has a purpose that is entirely well-defined independent of the application. Therefore, Subsection 2d requires that any application-supplied function or table used by this function must be optional: if the application does not supply it, the square root function must still compute square roots.) - -These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Library, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Library, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. - -Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Library. - -In addition, mere aggregation of another work not based on the Library with the Library (or with a work based on the Library) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. - -3. You may opt to apply the terms of the ordinary GNU General Public License instead of this License to a given copy of the Library. To do this, you must alter all the notices that refer to this License, so that they refer to the ordinary GNU General Public License, version 2, instead of to this License. (If a newer version than version 2 of the ordinary GNU General Public License has appeared, then you can specify that version instead if you wish.) Do not make any other change in these notices. - -Once this change is made in a given copy, it is irreversible for that copy, so the ordinary GNU General Public License applies to all subsequent copies and derivative works made from that copy. - -This option is useful when you wish to copy part of the code of the Library into a program that is not a library. - -4. You may copy and distribute the Library (or a portion or derivative of it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange. - -If distribution of object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place satisfies the requirement to distribute the source code, even though third parties are not compelled to copy the source along with the object code. - -5. A program that contains no derivative of any portion of the Library, but is designed to work with the Library by being compiled or linked with it, is called a "work that uses the Library". Such a work, in isolation, is not a derivative work of the Library, and therefore falls outside the scope of this License. - -However, linking a "work that uses the Library" with the Library creates an executable that is a derivative of the Library (because it contains portions of the Library), rather than a "work that uses the library". The executable is therefore covered by this License. Section 6 states terms for distribution of such executables. - -When a "work that uses the Library" uses material from a header file that is part of the Library, the object code for the work may be a derivative work of the Library even though the source code is not. Whether this is true is especially significant if the work can be linked without the Library, or if the work is itself a library. The threshold for this to be true is not precisely defined by law. - -If such an object file uses only numerical parameters, data structure layouts and accessors, and small macros and small inline functions (ten lines or less in length), then the use of the object file is unrestricted, regardless of whether it is legally a derivative work. (Executables containing this object code plus portions of the Library will still fall under Section 6.) - -Otherwise, if the work is a derivative of the Library, you may distribute the object code for the work under the terms of Section 6. Any executables containing that work also fall under Section 6, whether or not they are linked directly with the Library itself. - -6. As an exception to the Sections above, you may also combine or link a "work that uses the Library" with the Library to produce a work containing portions of the Library, and distribute that work under terms of your choice, provided that the terms permit modification of the work for the customer`s own use and reverse engineering for debugging such modifications. - -You must give prominent notice with each copy of the work that the Library is used in it and that the Library and its use are covered by this License. You must supply a copy of this License. If the work during execution displays copyright notices, you must include the copyright notice for the Library among them, as well as a reference directing the user to the copy of this License. Also, you must do one of these things: - -a) Accompany the work with the complete corresponding machine-readable source code for the Library including whatever changes were used in the work (which must be distributed under Sections 1 and 2 above); and, if the work is an executable linked with the Library, with the complete machine-readable "work that uses the Library", as object code and/or source code, so that the user can modify the Library and then relink to produce a modified executable containing the modified Library. (It is understood that the user who changes the contents of definitions files in the Library will not necessarily be able to recompile the application to use the modified definitions.) -b) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (1) uses at run time a copy of the library already present on the user`s computer system, rather than copying library functions into the executable, and (2) will operate properly with a modified version of the library, if the user installs one, as long as the modified version is interface-compatible with the version that the work was made with. -c) Accompany the work with a written offer, valid for at least three years, to give the same user the materials specified in Subsection 6a, above, for a charge no more than the cost of performing this distribution. -d) If distribution of the work is made by offering access to copy from a designated place, offer equivalent access to copy the above specified materials from the same place. -e) Verify that the user has already received a copy of these materials or that you have already sent this user a copy. -For an executable, the required form of the "work that uses the Library" must include any data and utility programs needed for reproducing the executable from it. However, as a special exception, the materials to be distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. - -It may happen that this requirement contradicts the license restrictions of other proprietary libraries that do not normally accompany the operating system. Such a contradiction means you cannot use both them and the Library together in an executable that you distribute. - -7. You may place library facilities that are a work based on the Library side-by-side in a single library together with other library facilities not covered by this License, and distribute such a combined library, provided that the separate distribution of the work based on the Library and of the other library facilities is otherwise permitted, and provided that you do these two things: - -a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities. This must be distributed under the terms of the Sections above. -b) Give prominent notice with the combined library of the fact that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. -8. You may not copy, modify, sublicense, link with, or distribute the Library except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, link with, or distribute the Library is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. - -9. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Library or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Library (or any work based on the Library), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Library or works based on it. - -10. Each time you redistribute the Library (or any work based on the Library), the recipient automatically receives a license from the original licensor to copy, distribute, link with or modify the Library subject to these terms and conditions. You may not impose any further restrictions on the recipients` exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties with this License. - -11. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Library at all. For example, if a patent license would not permit royalty-free redistribution of the Library by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply, and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. - -This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. - -12. If the distribution and/or use of the Library is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Library under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. - -13. The Free Software Foundation may publish revised and/or new versions of the Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Library does not specify a license version number, you may choose any version ever published by the Free Software Foundation. - -14. If you wish to incorporate parts of the Library into other free programs whose distribution conditions are incompatible with these, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. - -NO WARRANTY - -15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. - -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Libraries - -If you develop a new library, and you want it to be of the greatest possible use to the public, we recommend making it free software that everyone can redistribute and change. You can do so by permitting redistribution under these terms (or, alternatively, under the terms of the ordinary General Public License). - -To apply these terms, attach the following notices to the library. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. - -one line to give the library`s name and an idea of what it does. -Copyright (C) year name of author - -This library is free software; you can redistribute it and/or -modify it under the terms of the GNU Lesser General Public -License as published by the Free Software Foundation; either -version 2.1 of the License, or (at your option) any later version. - -This library is distributed in the hope that it will be useful, -but WITHOUT ANY WARRANTY; without even the implied warranty of -MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -Lesser General Public License for more details. - -You should have received a copy of the GNU Lesser General Public -License along with this library; if not, write to the Free Software -Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the library, if necessary. Here is a sample; alter the names: - -Yoyodyne, Inc., hereby disclaims all copyright interest in -the library `Frob` (a library for tweaking knobs) written -by James Random Hacker. - -signature of Ty Coon, 1 April 1990 -Ty Coon, President of Vice -That`s all there is to it! - diff --git a/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.1-or-later b/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.1-or-later deleted file mode 100644 index 04bb156e7..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-2.1-or-later +++ /dev/null @@ -1,468 +0,0 @@ -GNU LESSER GENERAL PUBLIC LICENSE - -Version 2.1, February 1999 - -Copyright (C) 1991, 1999 Free Software Foundation, Inc. - -51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -[This is the first released version of the Lesser GPL. It also counts as the -successor of the GNU Library Public License, version 2, hence the version -number 2.1.] - -Preamble - -The licenses for most software are designed to take away your freedom to share -and change it. By contrast, the GNU General Public Licenses are intended to -guarantee your freedom to share and change free software--to make sure the -software is free for all its users. - -This license, the Lesser General Public License, applies to some specially -designated software packages--typically libraries--of the Free Software Foundation -and other authors who decide to use it. You can use it too, but we suggest -you first think carefully about whether this license or the ordinary General -Public License is the better strategy to use in any particular case, based -on the explanations below. - -When we speak of free software, we are referring to freedom of use, not price. -Our General Public Licenses are designed to make sure that you have the freedom -to distribute copies of free software (and charge for this service if you -wish); that you receive source code or can get it if you want it; that you -can change the software and use pieces of it in new free programs; and that -you are informed that you can do these things. - -To protect your rights, we need to make restrictions that forbid distributors -to deny you these rights or to ask you to surrender these rights. These restrictions -translate to certain responsibilities for you if you distribute copies of -the library or if you modify it. - -For example, if you distribute copies of the library, whether gratis or for -a fee, you must give the recipients all the rights that we gave you. You must -make sure that they, too, receive or can get the source code. If you link -other code with the library, you must provide complete object files to the -recipients, so that they can relink them with the library after making changes -to the library and recompiling it. And you must show them these terms so they -know their rights. - -We protect your rights with a two-step method: (1) we copyright the library, -and (2) we offer you this license, which gives you legal permission to copy, -distribute and/or modify the library. - -To protect each distributor, we want to make it very clear that there is no -warranty for the free library. Also, if the library is modified by someone -else and passed on, the recipients should know that what they have is not -the original version, so that the original author's reputation will not be -affected by problems that might be introduced by others. - -Finally, software patents pose a constant threat to the existence of any free -program. We wish to make sure that a company cannot effectively restrict the -users of a free program by obtaining a restrictive license from a patent holder. -Therefore, we insist that any patent license obtained for a version of the -library must be consistent with the full freedom of use specified in this -license. - -Most GNU software, including some libraries, is covered by the ordinary GNU -General Public License. This license, the GNU Lesser General Public License, -applies to certain designated libraries, and is quite different from the ordinary -General Public License. We use this license for certain libraries in order -to permit linking those libraries into non-free programs. - -When a program is linked with a library, whether statically or using a shared -library, the combination of the two is legally speaking a combined work, a -derivative of the original library. The ordinary General Public License therefore -permits such linking only if the entire combination fits its criteria of freedom. -The Lesser General Public License permits more lax criteria for linking other -code with the library. - -We call this license the "Lesser" General Public License because it does Less -to protect the user's freedom than the ordinary General Public License. It -also provides other free software developers Less of an advantage over competing -non-free programs. These disadvantages are the reason we use the ordinary -General Public License for many libraries. However, the Lesser license provides -advantages in certain special circumstances. - -For example, on rare occasions, there may be a special need to encourage the -widest possible use of a certain library, so that it becomes a de-facto standard. -To achieve this, non-free programs must be allowed to use the library. A more -frequent case is that a free library does the same job as widely used non-free -libraries. In this case, there is little to gain by limiting the free library -to free software only, so we use the Lesser General Public License. - -In other cases, permission to use a particular library in non-free programs -enables a greater number of people to use a large body of free software. For -example, permission to use the GNU C Library in non-free programs enables -many more people to use the whole GNU operating system, as well as its variant, -the GNU/Linux operating system. - -Although the Lesser General Public License is Less protective of the users' -freedom, it does ensure that the user of a program that is linked with the -Library has the freedom and the wherewithal to run that program using a modified -version of the Library. - -The precise terms and conditions for copying, distribution and modification -follow. Pay close attention to the difference between a "work based on the -library" and a "work that uses the library". The former contains code derived -from the library, whereas the latter must be combined with the library in -order to run. - -TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION - -0. This License Agreement applies to any software library or other program -which contains a notice placed by the copyright holder or other authorized -party saying it may be distributed under the terms of this Lesser General -Public License (also called "this License"). Each licensee is addressed as -"you". - -A "library" means a collection of software functions and/or data prepared -so as to be conveniently linked with application programs (which use some -of those functions and data) to form executables. - -The "Library", below, refers to any such software library or work which has -been distributed under these terms. A "work based on the Library" means either -the Library or any derivative work under copyright law: that is to say, a -work containing the Library or a portion of it, either verbatim or with modifications -and/or translated straightforwardly into another language. (Hereinafter, translation -is included without limitation in the term "modification".) - -"Source code" for a work means the preferred form of the work for making modifications -to it. For a library, complete source code means all the source code for all -modules it contains, plus any associated interface definition files, plus -the scripts used to control compilation and installation of the library. - -Activities other than copying, distribution and modification are not covered -by this License; they are outside its scope. The act of running a program -using the Library is not restricted, and output from such a program is covered -only if its contents constitute a work based on the Library (independent of -the use of the Library in a tool for writing it). Whether that is true depends -on what the Library does and what the program that uses the Library does. - -1. You may copy and distribute verbatim copies of the Library's complete source -code as you receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice and disclaimer -of warranty; keep intact all the notices that refer to this License and to -the absence of any warranty; and distribute a copy of this License along with -the Library. - -You may charge a fee for the physical act of transferring a copy, and you -may at your option offer warranty protection in exchange for a fee. - -2. You may modify your copy or copies of the Library or any portion of it, -thus forming a work based on the Library, and copy and distribute such modifications -or work under the terms of Section 1 above, provided that you also meet all -of these conditions: - - a) The modified work must itself be a software library. - -b) You must cause the files modified to carry prominent notices stating that -you changed the files and the date of any change. - -c) You must cause the whole of the work to be licensed at no charge to all -third parties under the terms of this License. - -d) If a facility in the modified Library refers to a function or a table of -data to be supplied by an application program that uses the facility, other -than as an argument passed when the facility is invoked, then you must make -a good faith effort to ensure that, in the event an application does not supply -such function or table, the facility still operates, and performs whatever -part of its purpose remains meaningful. - -(For example, a function in a library to compute square roots has a purpose -that is entirely well-defined independent of the application. Therefore, Subsection -2d requires that any application-supplied function or table used by this function -must be optional: if the application does not supply it, the square root function -must still compute square roots.) - -These requirements apply to the modified work as a whole. If identifiable -sections of that work are not derived from the Library, and can be reasonably -considered independent and separate works in themselves, then this License, -and its terms, do not apply to those sections when you distribute them as -separate works. But when you distribute the same sections as part of a whole -which is a work based on the Library, the distribution of the whole must be -on the terms of this License, whose permissions for other licensees extend -to the entire whole, and thus to each and every part regardless of who wrote -it. - -Thus, it is not the intent of this section to claim rights or contest your -rights to work written entirely by you; rather, the intent is to exercise -the right to control the distribution of derivative or collective works based -on the Library. - -In addition, mere aggregation of another work not based on the Library with -the Library (or with a work based on the Library) on a volume of a storage -or distribution medium does not bring the other work under the scope of this -License. - -3. You may opt to apply the terms of the ordinary GNU General Public License -instead of this License to a given copy of the Library. To do this, you must -alter all the notices that refer to this License, so that they refer to the -ordinary GNU General Public License, version 2, instead of to this License. -(If a newer version than version 2 of the ordinary GNU General Public License -has appeared, then you can specify that version instead if you wish.) Do not -make any other change in these notices. - -Once this change is made in a given copy, it is irreversible for that copy, -so the ordinary GNU General Public License applies to all subsequent copies -and derivative works made from that copy. - -This option is useful when you wish to copy part of the code of the Library -into a program that is not a library. - -4. You may copy and distribute the Library (or a portion or derivative of -it, under Section 2) in object code or executable form under the terms of -Sections 1 and 2 above provided that you accompany it with the complete corresponding -machine-readable source code, which must be distributed under the terms of -Sections 1 and 2 above on a medium customarily used for software interchange. - -If distribution of object code is made by offering access to copy from a designated -place, then offering equivalent access to copy the source code from the same -place satisfies the requirement to distribute the source code, even though -third parties are not compelled to copy the source along with the object code. - -5. A program that contains no derivative of any portion of the Library, but -is designed to work with the Library by being compiled or linked with it, -is called a "work that uses the Library". Such a work, in isolation, is not -a derivative work of the Library, and therefore falls outside the scope of -this License. - -However, linking a "work that uses the Library" with the Library creates an -executable that is a derivative of the Library (because it contains portions -of the Library), rather than a "work that uses the library". The executable -is therefore covered by this License. Section 6 states terms for distribution -of such executables. - -When a "work that uses the Library" uses material from a header file that -is part of the Library, the object code for the work may be a derivative work -of the Library even though the source code is not. Whether this is true is -especially significant if the work can be linked without the Library, or if -the work is itself a library. The threshold for this to be true is not precisely -defined by law. - -If such an object file uses only numerical parameters, data structure layouts -and accessors, and small macros and small inline functions (ten lines or less -in length), then the use of the object file is unrestricted, regardless of -whether it is legally a derivative work. (Executables containing this object -code plus portions of the Library will still fall under Section 6.) - -Otherwise, if the work is a derivative of the Library, you may distribute -the object code for the work under the terms of Section 6. Any executables -containing that work also fall under Section 6, whether or not they are linked -directly with the Library itself. - -6. As an exception to the Sections above, you may also combine or link a "work -that uses the Library" with the Library to produce a work containing portions -of the Library, and distribute that work under terms of your choice, provided -that the terms permit modification of the work for the customer's own use -and reverse engineering for debugging such modifications. - -You must give prominent notice with each copy of the work that the Library -is used in it and that the Library and its use are covered by this License. -You must supply a copy of this License. If the work during execution displays -copyright notices, you must include the copyright notice for the Library among -them, as well as a reference directing the user to the copy of this License. -Also, you must do one of these things: - -a) Accompany the work with the complete corresponding machine-readable source -code for the Library including whatever changes were used in the work (which -must be distributed under Sections 1 and 2 above); and, if the work is an -executable linked with the Library, with the complete machine-readable "work -that uses the Library", as object code and/or source code, so that the user -can modify the Library and then relink to produce a modified executable containing -the modified Library. (It is understood that the user who changes the contents -of definitions files in the Library will not necessarily be able to recompile -the application to use the modified definitions.) - -b) Use a suitable shared library mechanism for linking with the Library. A -suitable mechanism is one that (1) uses at run time a copy of the library -already present on the user's computer system, rather than copying library -functions into the executable, and (2) will operate properly with a modified -version of the library, if the user installs one, as long as the modified -version is interface-compatible with the version that the work was made with. - -c) Accompany the work with a written offer, valid for at least three years, -to give the same user the materials specified in Subsection 6a, above, for -a charge no more than the cost of performing this distribution. - -d) If distribution of the work is made by offering access to copy from a designated -place, offer equivalent access to copy the above specified materials from -the same place. - -e) Verify that the user has already received a copy of these materials or -that you have already sent this user a copy. - -For an executable, the required form of the "work that uses the Library" must -include any data and utility programs needed for reproducing the executable -from it. However, as a special exception, the materials to be distributed -need not include anything that is normally distributed (in either source or -binary form) with the major components (compiler, kernel, and so on) of the -operating system on which the executable runs, unless that component itself -accompanies the executable. - -It may happen that this requirement contradicts the license restrictions of -other proprietary libraries that do not normally accompany the operating system. -Such a contradiction means you cannot use both them and the Library together -in an executable that you distribute. - -7. You may place library facilities that are a work based on the Library side-by-side -in a single library together with other library facilities not covered by -this License, and distribute such a combined library, provided that the separate -distribution of the work based on the Library and of the other library facilities -is otherwise permitted, and provided that you do these two things: - -a) Accompany the combined library with a copy of the same work based on the -Library, uncombined with any other library facilities. This must be distributed -under the terms of the Sections above. - -b) Give prominent notice with the combined library of the fact that part of -it is a work based on the Library, and explaining where to find the accompanying -uncombined form of the same work. - -8. You may not copy, modify, sublicense, link with, or distribute the Library -except as expressly provided under this License. Any attempt otherwise to -copy, modify, sublicense, link with, or distribute the Library is void, and -will automatically terminate your rights under this License. However, parties -who have received copies, or rights, from you under this License will not -have their licenses terminated so long as such parties remain in full compliance. - -9. You are not required to accept this License, since you have not signed -it. However, nothing else grants you permission to modify or distribute the -Library or its derivative works. These actions are prohibited by law if you -do not accept this License. Therefore, by modifying or distributing the Library -(or any work based on the Library), you indicate your acceptance of this License -to do so, and all its terms and conditions for copying, distributing or modifying -the Library or works based on it. - -10. Each time you redistribute the Library (or any work based on the Library), -the recipient automatically receives a license from the original licensor -to copy, distribute, link with or modify the Library subject to these terms -and conditions. You may not impose any further restrictions on the recipients' -exercise of the rights granted herein. You are not responsible for enforcing -compliance by third parties with this License. - -11. If, as a consequence of a court judgment or allegation of patent infringement -or for any other reason (not limited to patent issues), conditions are imposed -on you (whether by court order, agreement or otherwise) that contradict the -conditions of this License, they do not excuse you from the conditions of -this License. If you cannot distribute so as to satisfy simultaneously your -obligations under this License and any other pertinent obligations, then as -a consequence you may not distribute the Library at all. For example, if a -patent license would not permit royalty-free redistribution of the Library -by all those who receive copies directly or indirectly through you, then the -only way you could satisfy both it and this License would be to refrain entirely -from distribution of the Library. - -If any portion of this section is held invalid or unenforceable under any -particular circumstance, the balance of the section is intended to apply, -and the section as a whole is intended to apply in other circumstances. - -It is not the purpose of this section to induce you to infringe any patents -or other property right claims or to contest validity of any such claims; -this section has the sole purpose of protecting the integrity of the free -software distribution system which is implemented by public license practices. -Many people have made generous contributions to the wide range of software -distributed through that system in reliance on consistent application of that -system; it is up to the author/donor to decide if he or she is willing to -distribute software through any other system and a licensee cannot impose -that choice. - -This section is intended to make thoroughly clear what is believed to be a -consequence of the rest of this License. - -12. If the distribution and/or use of the Library is restricted in certain -countries either by patents or by copyrighted interfaces, the original copyright -holder who places the Library under this License may add an explicit geographical -distribution limitation excluding those countries, so that distribution is -permitted only in or among countries not thus excluded. In such case, this -License incorporates the limitation as if written in the body of this License. - -13. The Free Software Foundation may publish revised and/or new versions of -the Lesser General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to address -new problems or concerns. - -Each version is given a distinguishing version number. If the Library specifies -a version number of this License which applies to it and "any later version", -you have the option of following the terms and conditions either of that version -or of any later version published by the Free Software Foundation. If the -Library does not specify a license version number, you may choose any version -ever published by the Free Software Foundation. - -14. If you wish to incorporate parts of the Library into other free programs -whose distribution conditions are incompatible with these, write to the author -to ask for permission. For software which is copyrighted by the Free Software -Foundation, write to the Free Software Foundation; we sometimes make exceptions -for this. Our decision will be guided by the two goals of preserving the free -status of all derivatives of our free software and of promoting the sharing -and reuse of software generally. - - NO WARRANTY - -15. BECAUSE THE LIBRARY IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR -THE LIBRARY, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE -STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE LIBRARY -"AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, -BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS -FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE -OF THE LIBRARY IS WITH YOU. SHOULD THE LIBRARY PROVE DEFECTIVE, YOU ASSUME -THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - -16. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE -THE LIBRARY AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE -OR INABILITY TO USE THE LIBRARY (INCLUDING BUT NOT LIMITED TO LOSS OF DATA -OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES -OR A FAILURE OF THE LIBRARY TO OPERATE WITH ANY OTHER SOFTWARE), EVEN IF SUCH -HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. -END OF TERMS AND CONDITIONS - -How to Apply These Terms to Your New Libraries - -If you develop a new library, and you want it to be of the greatest possible -use to the public, we recommend making it free software that everyone can -redistribute and change. You can do so by permitting redistribution under -these terms (or, alternatively, under the terms of the ordinary General Public -License). - -To apply these terms, attach the following notices to the library. It is safest -to attach them to the start of each source file to most effectively convey -the exclusion of warranty; and each file should have at least the "copyright" -line and a pointer to where the full notice is found. - - - -Copyright (C) - -This library is free software; you can redistribute it and/or modify it under -the terms of the GNU Lesser General Public License as published by the Free -Software Foundation; either version 2.1 of the License, or (at your option) -any later version. - -This library is distributed in the hope that it will be useful, but WITHOUT -ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more -details. - -You should have received a copy of the GNU Lesser General Public License along -with this library; if not, write to the Free Software Foundation, Inc., 51 -Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA - -Also add information on how to contact you by electronic and paper mail. - -You should also get your employer (if you work as a programmer) or your school, -if any, to sign a "copyright disclaimer" for the library, if necessary. Here -is a sample; alter the names: - -Yoyodyne, Inc., hereby disclaims all copyright interest in - -the library `Frob' (a library for tweaking knobs) written - -by James Random Hacker. - -< signature of Ty Coon > , 1 April 1990 - -Ty Coon, President of Vice - -That's all there is to it! diff --git a/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-3.0-only b/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-3.0-only deleted file mode 100644 index 6be29bf20..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-3.0-only +++ /dev/null @@ -1,65 +0,0 @@ -GNU LESSER GENERAL PUBLIC LICENSE - -Version 3, 29 June 2007 - -Copyright © 2007 Free Software Foundation, Inc. - -Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. - -This version of the GNU Lesser General Public License incorporates the terms and conditions of version 3 of the GNU General Public License, supplemented by the additional permissions listed below. -0. Additional Definitions. - -As used herein, “this License” refers to version 3 of the GNU Lesser General Public License, and the “GNU GPL” refers to version 3 of the GNU General Public License. - -“The Library” refers to a covered work governed by this License, other than an Application or a Combined Work as defined below. - -An “Application” is any work that makes use of an interface provided by the Library, but which is not otherwise based on the Library. Defining a subclass of a class defined by the Library is deemed a mode of using an interface provided by the Library. - -A “Combined Work” is a work produced by combining or linking an Application with the Library. The particular version of the Library with which the Combined Work was made is also called the “Linked Version”. - -The “Minimal Corresponding Source” for a Combined Work means the Corresponding Source for the Combined Work, excluding any source code for portions of the Combined Work that, considered in isolation, are based on the Application, and not on the Linked Version. - -The “Corresponding Application Code” for a Combined Work means the object code and/or source code for the Application, including any data and utility programs needed for reproducing the Combined Work from the Application, but excluding the System Libraries of the Combined Work. -1. Exception to Section 3 of the GNU GPL. - -You may convey a covered work under sections 3 and 4 of this License without being bound by section 3 of the GNU GPL. -2. Conveying Modified Versions. - -If you modify a copy of the Library, and, in your modifications, a facility refers to a function or data to be supplied by an Application that uses the facility (other than as an argument passed when the facility is invoked), then you may convey a copy of the modified version: - - * a) under this License, provided that you make a good faith effort to ensure that, in the event an Application does not supply the function or data, the facility still operates, and performs whatever part of its purpose remains meaningful, or - * b) under the GNU GPL, with none of the additional permissions of this License applicable to that copy. - -3. Object Code Incorporating Material from Library Header Files. - -The object code form of an Application may incorporate material from a header file that is part of the Library. You may convey such object code under terms of your choice, provided that, if the incorporated material is not limited to numerical parameters, data structure layouts and accessors, or small macros, inline functions and templates (ten or fewer lines in length), you do both of the following: - - * a) Give prominent notice with each copy of the object code that the Library is used in it and that the Library and its use are covered by this License. - * b) Accompany the object code with a copy of the GNU GPL and this license document. - -4. Combined Works. - -You may convey a Combined Work under terms of your choice that, taken together, effectively do not restrict modification of the portions of the Library contained in the Combined Work and reverse engineering for debugging such modifications, if you also do each of the following: - - * a) Give prominent notice with each copy of the Combined Work that the Library is used in it and that the Library and its use are covered by this License. - * b) Accompany the Combined Work with a copy of the GNU GPL and this license document. - * c) For a Combined Work that displays copyright notices during execution, include the copyright notice for the Library among these notices, as well as a reference directing the user to the copies of the GNU GPL and this license document. - * d) Do one of the following: - o 0) Convey the Minimal Corresponding Source under the terms of this License, and the Corresponding Application Code in a form suitable for, and under terms that permit, the user to recombine or relink the Application with a modified version of the Linked Version to produce a modified Combined Work, in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source. - o 1) Use a suitable shared library mechanism for linking with the Library. A suitable mechanism is one that (a) uses at run time a copy of the Library already present on the user's computer system, and (b) will operate properly with a modified version of the Library that is interface-compatible with the Linked Version. - * e) Provide Installation Information, but only if you would otherwise be required to provide such information under section 6 of the GNU GPL, and only to the extent that such information is necessary to install and execute a modified version of the Combined Work produced by recombining or relinking the Application with a modified version of the Linked Version. (If you use option 4d0, the Installation Information must accompany the Minimal Corresponding Source and Corresponding Application Code. If you use option 4d1, you must provide the Installation Information in the manner specified by section 6 of the GNU GPL for conveying Corresponding Source.) - -5. Combined Libraries. - -You may place library facilities that are a work based on the Library side by side in a single library together with other library facilities that are not Applications and are not covered by this License, and convey such a combined library under terms of your choice, if you do both of the following: - - * a) Accompany the combined library with a copy of the same work based on the Library, uncombined with any other library facilities, conveyed under the terms of this License. - * b) Give prominent notice with the combined library that part of it is a work based on the Library, and explaining where to find the accompanying uncombined form of the same work. - -6. Revised Versions of the GNU Lesser General Public License. - -The Free Software Foundation may publish revised and/or new versions of the GNU Lesser General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. - -Each version is given a distinguishing version number. If the Library as you received it specifies that a certain numbered version of the GNU Lesser General Public License “or any later version” applies to it, you have the option of following the terms and conditions either of that published version or of any later version published by the Free Software Foundation. If the Library as you received it does not specify a version number of the GNU Lesser General Public License, you may choose any version of the GNU Lesser General Public License ever published by the Free Software Foundation. - -If the Library as you received it specifies that a proxy can decide whether future versions of the GNU Lesser General Public License shall apply, that proxy's public statement of acceptance of any version is permanent authorization for you to choose that version for the Library. diff --git a/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-3.0-or-later b/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-3.0-or-later deleted file mode 100644 index bd405afbe..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/licenses/LGPL-3.0-or-later +++ /dev/null @@ -1,163 +0,0 @@ -GNU LESSER GENERAL PUBLIC LICENSE - -Version 3, 29 June 2007 - -Copyright (C) 2007 Free Software Foundation, Inc. - -Everyone is permitted to copy and distribute verbatim copies of this license -document, but changing it is not allowed. - -This version of the GNU Lesser General Public License incorporates the terms -and conditions of version 3 of the GNU General Public License, supplemented -by the additional permissions listed below. - - 0. Additional Definitions. - - - -As used herein, "this License" refers to version 3 of the GNU Lesser General -Public License, and the "GNU GPL" refers to version 3 of the GNU General Public -License. - - - -"The Library" refers to a covered work governed by this License, other than -an Application or a Combined Work as defined below. - - - -An "Application" is any work that makes use of an interface provided by the -Library, but which is not otherwise based on the Library. Defining a subclass -of a class defined by the Library is deemed a mode of using an interface provided -by the Library. - - - -A "Combined Work" is a work produced by combining or linking an Application -with the Library. The particular version of the Library with which the Combined -Work was made is also called the "Linked Version". - - - -The "Minimal Corresponding Source" for a Combined Work means the Corresponding -Source for the Combined Work, excluding any source code for portions of the -Combined Work that, considered in isolation, are based on the Application, -and not on the Linked Version. - - - -The "Corresponding Application Code" for a Combined Work means the object -code and/or source code for the Application, including any data and utility -programs needed for reproducing the Combined Work from the Application, but -excluding the System Libraries of the Combined Work. - - 1. Exception to Section 3 of the GNU GPL. - -You may convey a covered work under sections 3 and 4 of this License without -being bound by section 3 of the GNU GPL. - - 2. Conveying Modified Versions. - -If you modify a copy of the Library, and, in your modifications, a facility -refers to a function or data to be supplied by an Application that uses the -facility (other than as an argument passed when the facility is invoked), -then you may convey a copy of the modified version: - -a) under this License, provided that you make a good faith effort to ensure -that, in the event an Application does not supply the function or data, the -facility still operates, and performs whatever part of its purpose remains -meaningful, or - -b) under the GNU GPL, with none of the additional permissions of this License -applicable to that copy. - - 3. Object Code Incorporating Material from Library Header Files. - -The object code form of an Application may incorporate material from a header -file that is part of the Library. You may convey such object code under terms -of your choice, provided that, if the incorporated material is not limited -to numerical parameters, data structure layouts and accessors, or small macros, -inline functions and templates (ten or fewer lines in length), you do both -of the following: - -a) Give prominent notice with each copy of the object code that the Library -is used in it and that the Library and its use are covered by this License. - -b) Accompany the object code with a copy of the GNU GPL and this license document. - - 4. Combined Works. - -You may convey a Combined Work under terms of your choice that, taken together, -effectively do not restrict modification of the portions of the Library contained -in the Combined Work and reverse engineering for debugging such modifications, -if you also do each of the following: - -a) Give prominent notice with each copy of the Combined Work that the Library -is used in it and that the Library and its use are covered by this License. - -b) Accompany the Combined Work with a copy of the GNU GPL and this license -document. - -c) For a Combined Work that displays copyright notices during execution, include -the copyright notice for the Library among these notices, as well as a reference -directing the user to the copies of the GNU GPL and this license document. - - d) Do one of the following: - -0) Convey the Minimal Corresponding Source under the terms of this License, -and the Corresponding Application Code in a form suitable for, and under terms -that permit, the user to recombine or relink the Application with a modified -version of the Linked Version to produce a modified Combined Work, in the -manner specified by section 6 of the GNU GPL for conveying Corresponding Source. - -1) Use a suitable shared library mechanism for linking with the Library. A -suitable mechanism is one that (a) uses at run time a copy of the Library -already present on the user's computer system, and (b) will operate properly -with a modified version of the Library that is interface-compatible with the -Linked Version. - -e) Provide Installation Information, but only if you would otherwise be required -to provide such information under section 6 of the GNU GPL, and only to the -extent that such information is necessary to install and execute a modified -version of the Combined Work produced by recombining or relinking the Application -with a modified version of the Linked Version. (If you use option 4d0, the -Installation Information must accompany the Minimal Corresponding Source and -Corresponding Application Code. If you use option 4d1, you must provide the -Installation Information in the manner specified by section 6 of the GNU GPL -for conveying Corresponding Source.) - - 5. Combined Libraries. - -You may place library facilities that are a work based on the Library side -by side in a single library together with other library facilities that are -not Applications and are not covered by this License, and convey such a combined -library under terms of your choice, if you do both of the following: - -a) Accompany the combined library with a copy of the same work based on the -Library, uncombined with any other library facilities, conveyed under the -terms of this License. - -b) Give prominent notice with the combined library that part of it is a work -based on the Library, and explaining where to find the accompanying uncombined -form of the same work. - - 6. Revised Versions of the GNU Lesser General Public License. - -The Free Software Foundation may publish revised and/or new versions of the -GNU Lesser General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to address -new problems or concerns. - -Each version is given a distinguishing version number. If the Library as you -received it specifies that a certain numbered version of the GNU Lesser General -Public License "or any later version" applies to it, you have the option of -following the terms and conditions either of that published version or of -any later version published by the Free Software Foundation. If the Library -as you received it does not specify a version number of the GNU Lesser General -Public License, you may choose any version of the GNU Lesser General Public -License ever published by the Free Software Foundation. - -If the Library as you received it specifies that a proxy can decide whether -future versions of the GNU Lesser General Public License shall apply, that -proxy's public statement of acceptance of any version is permanent authorization -for you to choose that version for the Library. diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-devtools/python/python3-pyyaml_5.4.1.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-devtools/python/python3-pyyaml_5.4.1.bb deleted file mode 100644 index f00497245..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-devtools/python/python3-pyyaml_5.4.1.bb +++ /dev/null @@ -1,18 +0,0 @@ -SUMMARY = "Python support for YAML" -DEPENDS += "libyaml ${PYTHON_PN}-cython-native" - -LICENSE = "MIT" -LIC_FILES_CHKSUM = "file://LICENSE;md5=6d8242660a8371add5fe547adf083079" - -PYPI_PACKAGE = "PyYAML" - -inherit pypi setuptools3 - -SRC_URI[sha256sum] = "607774cbba28732bfa802b54baa7484215f530991055bb562efbed5b2f20a45e" - -RDEPENDS:${PN} += "\ - ${PYTHON_PN}-datetime \ - ${PYTHON_PN}-netclient \ -" - -BBCLASSEXTEND = "native nativesdk" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/0001-w.c-correct-musl-builds.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/0001-w.c-correct-musl-builds.patch deleted file mode 100644 index 035bec6f0..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/0001-w.c-correct-musl-builds.patch +++ /dev/null @@ -1,44 +0,0 @@ -From 22f8d25567b8d64bdbab0fb0b4915b4362561d9b Mon Sep 17 00:00:00 2001 -From: Alexander Kanavin -Date: Wed, 24 Feb 2021 21:14:31 +0000 -Subject: [PATCH] w.c: correct musl builds - -No need to redefine UT_ stuff to something that does not exist. - -UT_ is already provided in musl but via utmp.h header, so include -it always. - -Upstream-Status: Submitted [https://gitlab.com/procps-ng/procps/-/merge_requests/126] -Signed-off-by: Alexander Kanavin ---- - w.c | 9 +-------- - 1 file changed, 1 insertion(+), 8 deletions(-) - -diff --git a/w.c b/w.c -index 9d07ac9..d10639b 100644 ---- a/w.c -+++ b/w.c -@@ -57,9 +57,8 @@ - #include - #ifdef HAVE_UTMPX_H - # include --#else --# include - #endif -+#include - #include - - static int ignoreuser = 0; /* for '-u' */ -@@ -72,12 +71,6 @@ typedef struct utmpx utmp_t; - typedef struct utmp utmp_t; - #endif - --#if !defined(UT_HOSTSIZE) || defined(__UT_HOSTSIZE) --# define UT_HOSTSIZE __UT_HOSTSIZE --# define UT_LINESIZE __UT_LINESIZE --# define UT_NAMESIZE __UT_NAMESIZE --#endif -- - #ifdef W_SHOWFROM - # define FROM_STRING "on" - #else diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/0002-proc-escape.c-add-missing-include.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/0002-proc-escape.c-add-missing-include.patch deleted file mode 100644 index 5fa1ac9d7..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/0002-proc-escape.c-add-missing-include.patch +++ /dev/null @@ -1,23 +0,0 @@ -From 4f964821398dff7ab21fec63da15e1e00b2e9277 Mon Sep 17 00:00:00 2001 -From: Alexander Kanavin -Date: Wed, 24 Feb 2021 21:16:14 +0000 -Subject: [PATCH] proc/escape.c: add missing include - -Upstream-Status: Submitted [https://gitlab.com/procps-ng/procps/-/merge_requests/126] -Signed-off-by: Alexander Kanavin ---- - proc/escape.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/proc/escape.c b/proc/escape.c -index 2e8fb7d..e1f4612 100644 ---- a/proc/escape.c -+++ b/proc/escape.c -@@ -21,6 +21,7 @@ - #include - #include - #include -+#include - #include "procps.h" - #include "escape.h" - #include "readproc.h" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/sysctl.conf b/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/sysctl.conf deleted file mode 100644 index 253f3701b..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps/sysctl.conf +++ /dev/null @@ -1,67 +0,0 @@ -# This configuration taken from procps v3.3.15 -# Commented out kernel/pid_max=10000 line -# -# /etc/sysctl.conf - Configuration file for setting system variables -# See sysctl.conf (5) for information. - -# you can have the CD-ROM close when you use it, and open -# when you are done. -#dev.cdrom.autoeject = 1 -#dev.cdrom.autoclose = 1 - -# protection from the SYN flood attack -net/ipv4/tcp_syncookies=1 - -# see the evil packets in your log files -net/ipv4/conf/all/log_martians=1 - -# makes you vulnerable or not :-) -net/ipv4/conf/all/accept_redirects=0 -net/ipv4/conf/all/accept_source_route=0 -net/ipv4/icmp_echo_ignore_broadcasts =1 - -# needed for routing, including masquerading or NAT -#net/ipv4/ip_forward=1 - -# sets the port range used for outgoing connections -#net.ipv4.ip_local_port_range = 32768 61000 - -# Broken routers and obsolete firewalls will corrupt the window scaling -# and ECN. Set these values to 0 to disable window scaling and ECN. -# This may, rarely, cause some performance loss when running high-speed -# TCP/IP over huge distances or running TCP/IP over connections with high -# packet loss and modern routers. This sure beats dropped connections. -#net.ipv4.tcp_ecn = 0 - -# Swapping too much or not enough? Disks spinning up when you'd -# rather they didn't? Tweak these. -#vm.vfs_cache_pressure = 100 -#vm.laptop_mode = 0 -#vm.swappiness = 60 - -#kernel.printk_ratelimit_burst = 10 -#kernel.printk_ratelimit = 5 -#kernel.panic_on_oops = 0 - -# Reboot 600 seconds after a panic -#kernel.panic = 600 - -# enable SysRq key (note: console security issues) -#kernel.sysrq = 1 - -# Change name of core file to start with the command name -# so you get things like: emacs.core mozilla-bin.core X.core -#kernel.core_pattern = %e.core - -# NIS/YP domain (not always equal to DNS domain) -#kernel.domainname = example.com -#kernel.hostname = darkstar - -# This limits PID values to 4 digits, which allows tools like ps -# to save screen space. -#kernel/pid_max=10000 - -# Protects against creating or following links under certain conditions -# See https://www.kernel.org/doc/Documentation/sysctl/fs.txt -#fs.protected_hardlinks = 1 -#fs.protected_symlinks = 1 diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps_3.3.17.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps_3.3.17.bb deleted file mode 100644 index 0a5ab7555..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-extended/procps/procps_3.3.17.bb +++ /dev/null @@ -1,103 +0,0 @@ -SUMMARY = "System and process monitoring utilities" -DESCRIPTION = "Procps contains a set of system utilities that provide system information about processes using \ -the /proc filesystem. The package includes the programs ps, top, vmstat, w, kill, and skill." -HOMEPAGE = "https://gitlab.com/procps-ng/procps" -SECTION = "base" -LICENSE = "GPL-2.0-or-later & LGPL-2.0-or-later" -LIC_FILES_CHKSUM = "file://COPYING;md5=b234ee4d69f5fce4486a80fdaf4a4263 \ - file://COPYING.LIB;md5=4cf66a4984120007c9881cc871cf49db \ - " - -DEPENDS = "ncurses" - -inherit autotools gettext pkgconfig update-alternatives - -SRC_URI = "git://gitlab.com/procps-ng/procps.git;protocol=https \ - file://sysctl.conf \ - file://0001-w.c-correct-musl-builds.patch \ - file://0002-proc-escape.c-add-missing-include.patch \ - " -SRCREV = "19a508ea121c0c4ac6d0224575a036de745eaaf8" - -S = "${WORKDIR}/git" - -# Upstream has a custom autogen.sh which invokes po/update-potfiles as they -# don't ship a po/POTFILES.in (which is silly). Without that file gettext -# doesn't believe po/ is a gettext directory and won't generate po/Makefile. -do_configure:prepend() { - ( cd ${S} && po/update-potfiles ) -} - -EXTRA_OECONF = "--enable-skill --disable-modern-top" - -PACKAGECONFIG ??= "${@bb.utils.filter('DISTRO_FEATURES', 'systemd', d)}" -PACKAGECONFIG[systemd] = "--with-systemd,--without-systemd,systemd" - -do_install:append () { - install -d ${D}${base_bindir} - [ "${bindir}" != "${base_bindir}" ] && for i in ${base_bindir_progs}; do mv ${D}${bindir}/$i ${D}${base_bindir}/$i; done - install -d ${D}${base_sbindir} - [ "${sbindir}" != "${base_sbindir}" ] && for i in ${base_sbindir_progs}; do mv ${D}${sbindir}/$i ${D}${base_sbindir}/$i; done - if [ "${base_sbindir}" != "${sbindir}" ]; then - rmdir ${D}${sbindir} - fi - - install -d ${D}${sysconfdir} - install -m 0644 ${WORKDIR}/sysctl.conf ${D}${sysconfdir}/sysctl.conf - if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then - install -d ${D}${sysconfdir}/sysctl.d - ln -sf ../sysctl.conf ${D}${sysconfdir}/sysctl.d/99-sysctl.conf - fi -} - -CONFFILES:${PN} = "${sysconfdir}/sysctl.conf" - -bindir_progs = "free pkill pmap pgrep pwdx skill snice top uptime w" -base_bindir_progs += "kill pidof ps watch" -base_sbindir_progs += "sysctl" - -ALTERNATIVE_PRIORITY = "200" -ALTERNATIVE_PRIORITY[pidof] = "150" - -ALTERNATIVE:${PN} = "${bindir_progs} ${base_bindir_progs} ${base_sbindir_progs}" - -ALTERNATIVE:${PN}-doc = "kill.1 uptime.1" -ALTERNATIVE_LINK_NAME[kill.1] = "${mandir}/man1/kill.1" -ALTERNATIVE_LINK_NAME[uptime.1] = "${mandir}/man1/uptime.1" - -python __anonymous() { - for prog in d.getVar('base_bindir_progs').split(): - d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_bindir'), prog)) - - for prog in d.getVar('base_sbindir_progs').split(): - d.setVarFlag('ALTERNATIVE_LINK_NAME', prog, '%s/%s' % (d.getVar('base_sbindir'), prog)) -} - -# 'ps' isn't suitable for use as a security tool so whitelist this CVE. -# https://bugzilla.redhat.com/show_bug.cgi?id=1575473#c3 -CVE_CHECK_WHITELIST += "CVE-2018-1121" - -PROCPS_PACKAGES = "${PN}-lib \ - ${PN}-ps \ - ${PN}-sysctl" - -PACKAGE_BEFORE_PN = "${PROCPS_PACKAGES}" -RDEPENDS:${PN} += "${PROCPS_PACKAGES}" - -RDEPENDS:${PN}-ps += "${PN}-lib" -RDEPENDS:${PN}-sysctl += "${PN}-lib" - -FILES:${PN}-lib = "${libdir}" -FILES:${PN}-ps = "${base_bindir}/ps.${BPN}" -FILES:${PN}-sysctl = "${base_sbindir}/sysctl.${BPN} ${sysconfdir}/sysctl.conf ${sysconfdir}/sysctl.d" - -ALTERNATIVE:${PN}:remove = "ps" -ALTERNATIVE:${PN}:remove = "sysctl" - -ALTERNATIVE:${PN}-ps = "ps" -ALTERNATIVE_TARGET[ps] = "${base_bindir}/ps" -ALTERNATIVE_LINK_NAME[ps] = "${base_bindir}/ps" - -ALTERNATIVE:${PN}-sysctl = "sysctl" -ALTERNATIVE_TARGET[sysctl] = "${base_sbindir}/sysctl" -ALTERNATIVE_LINK_NAME[sysctl] = "${base_sbindir}/sysctl" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools/0001-connect-has-a-different-signature-on-musl.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools/0001-connect-has-a-different-signature-on-musl.patch deleted file mode 100755 index c0e458135..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools/0001-connect-has-a-different-signature-on-musl.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 73b1002eda17451db1f58431b42c25203f1d3097 Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Sun, 9 Sep 2018 17:38:10 -0700 -Subject: [PATCH] connect has a different signature on musl - -On linux when not using glibc and using musl for C library, connect -API has a different signature, this patch fixes this so it can compile -on musl, the functionality should remain same as it is immediately -typcasted to struct sockaddr_in* type inside the function before use - -Upstream-Status: Pending - -Signed-off-by: Khem Raj ---- - validate/plugins/fault_injection/socket_interposer.c | 7 ++++++- - 1 file changed, 6 insertions(+), 1 deletion(-) - -diff --git a/validate/plugins/fault_injection/socket_interposer.c b/validate/plugins/fault_injection/socket_interposer.c -index 53c1ebb..ad7adf8 100644 ---- a/validate/plugins/fault_injection/socket_interposer.c -+++ b/validate/plugins/fault_injection/socket_interposer.c -@@ -100,10 +100,15 @@ socket_interposer_set_callback (struct sockaddr_in *addrin, - } - - int --connect (int socket, const struct sockaddr_in *addrin, socklen_t address_len) -+#if defined(__linux__) && !defined(__GLIBC__) -+connect (int socket, const struct sockaddr *addr, socklen_t address_len) -+#else -+connect (int socket, const struct sockaddr_in *addr, socklen_t address_len) -+#endif - { - size_t i; - int override_errno = 0; -+ struct sockaddr_in* addrin = (struct sockaddr_in*)addr; - typedef ssize_t (*real_connect_fn) (int, const struct sockaddr_in *, - socklen_t); - static real_connect_fn real_connect = 0; diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools_1.18.2.bb deleted file mode 100755 index 850da83d4..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-devtools_1.18.2.bb +++ /dev/null @@ -1,42 +0,0 @@ -SUMMARY = "Gstreamer validation tool" -DESCRIPTION = "A Tool to test GStreamer components" -HOMEPAGE = "https://gstreamer.freedesktop.org/documentation/gst-devtools/index.html" -SECTION = "multimedia" - -LICENSE = "LGPL-2.1-only" -LIC_FILES_CHKSUM = "file://validate/COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343" - -#S = "${WORKDIR}/gst-devtools-${PV}" - -SRC_URI = "https://gstreamer.freedesktop.org/src/gst-devtools/gst-devtools-${PV}.tar.xz \ - file://0001-connect-has-a-different-signature-on-musl.patch \ - " - -SRC_URI[sha256sum] = "6ea73d718bf1f9692218540ff88479c51d67c0b477fa56d6812fc7b739d30a56" - -DEPENDS = "json-glib glib-2.0 glib-2.0-native gstreamer1.0 gstreamer1.0-plugins-base" -RRECOMMENDS:${PN} = "git" - -FILES:${PN} += "${datadir}/gstreamer-1.0/* ${libdir}/gst-validate-launcher/* ${libdir}/gstreamer-1.0/*" - -inherit meson pkgconfig gettext upstream-version-is-even gobject-introspection - -# TODO: put this in a gettext.bbclass patch -def gettext_oemeson(d): - if d.getVar('USE_NLS') == 'no': - return '-Dnls=disabled' - # Remove the NLS bits if USE_NLS is no or INHIBIT_DEFAULT_DEPS is set - if d.getVar('INHIBIT_DEFAULT_DEPS') and not oe.utils.inherits(d, 'cross-canadian'): - return '-Dnls=disabled' - return '-Dnls=enabled' - -EXTRA_OEMESON += " \ - -Ddoc=disabled \ - -Ddebug_viewer=disabled \ - -Dtests=disabled \ - -Dvalidate=enabled \ - ${@gettext_oemeson(d)} \ -" - -GIR_MESON_ENABLE_FLAG = "enabled" -GIR_MESON_DISABLE_FLAG = "disabled" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples/0001-Make-player-examples-installable.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples/0001-Make-player-examples-installable.patch deleted file mode 100755 index ab93c1324..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples/0001-Make-player-examples-installable.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 7924016fce2d0b435891a335cdae52fc939c7e3b Mon Sep 17 00:00:00 2001 -From: Jussi Kukkonen -Date: Thu, 17 Aug 2017 11:07:02 +0300 -Subject: [PATCH] Make player examples installable - -Signed-off-by: Jussi Kukkonen -Upstream-Status: Denied [Upstream considers these code examples, for now a least] - -https://bugzilla.gnome.org/show_bug.cgi?id=777827 - ---- - playback/player/gst-play/meson.build | 1 + - playback/player/gtk/meson.build | 1 + - 2 files changed, 2 insertions(+) - -diff --git a/playback/player/gst-play/meson.build b/playback/player/gst-play/meson.build -index 8ec021d..977cc5c 100644 ---- a/playback/player/gst-play/meson.build -+++ b/playback/player/gst-play/meson.build -@@ -2,5 +2,6 @@ executable('gst-play', - ['gst-play.c', - 'gst-play-kb.c', - 'gst-play-kb.h'], -+ install: true, - dependencies : [gst_dep, gstplayer_dep, m_dep]) - -diff --git a/playback/player/gtk/meson.build b/playback/player/gtk/meson.build -index f7a7419..6281130 100644 ---- a/playback/player/gtk/meson.build -+++ b/playback/player/gtk/meson.build -@@ -13,5 +13,6 @@ if gtk_dep.found() - gtk_play_resources, - 'gtk-video-renderer.h', - 'gtk-video-renderer.c'], -+ install: true, - dependencies : [glib_dep, gobject_dep, gmodule_dep, gst_dep, gsttag_dep, gstplayer_dep, gtk_dep, x11_dep]) - endif diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples/gst-player.desktop b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples/gst-player.desktop deleted file mode 100755 index 7ddd456a1..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples/gst-player.desktop +++ /dev/null @@ -1,10 +0,0 @@ -[Desktop Entry] -Name=Media Player -Comment=Basic media player -Icon=multimedia-player -TryExec=gtk-play -Exec=gtk-play -StartupNotify=true -Terminal=false -Type=Application -Categories=GTK;AudioVideo; diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples_1.18.2.bb deleted file mode 100755 index d57e1a9a4..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gst-examples_1.18.2.bb +++ /dev/null @@ -1,32 +0,0 @@ -SUMMARY = "GStreamer examples (including gtk-play, gst-play)" -LICENSE = "LGPL-2.0-or-later" -LIC_FILES_CHKSUM = "file://playback/player/gtk/gtk-play.c;beginline=1;endline=20;md5=f8c72dae3d36823ec716a9ebcae593b9" - -DEPENDS = "glib-2.0 gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad gtk+3 libsoup-2.4 json-glib glib-2.0-native" - -SRC_URI = "git://gitlab.freedesktop.org/gstreamer/gst-examples.git;protocol=https;branch=1.18 \ - file://0001-Make-player-examples-installable.patch \ - file://gst-player.desktop \ - " - -SRCREV = "45086d8ef2d75244d9d5c8f69c0f0e1dfd4200b3" - -S = "${WORKDIR}/git" - -inherit meson pkgconfig features_check - -UPSTREAM_CHECK_GITTAGREGEX = "(?P\d+\.(\d*[02468])+(\.\d+)+)" - -ANY_OF_DISTRO_FEATURES = "${GTK3DISTROFEATURES}" - -do_install:append() { - install -m 0644 -D ${WORKDIR}/gst-player.desktop ${D}${datadir}/applications/gst-player.desktop -} - -RDEPENDS:${PN} = "gstreamer1.0-plugins-base-playback" -RRECOMMENDS:${PN} = "gstreamer1.0-plugins-base-meta \ - gstreamer1.0-plugins-good-meta \ - gstreamer1.0-plugins-bad-meta \ - ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "gstreamer1.0-libav", "", d)} \ - ${@bb.utils.contains("LICENSE_FLAGS_WHITELIST", "commercial", "gstreamer1.0-plugins-ugly-meta", "", d)}" -RPROVIDES:${PN} += "gst-player gst-player-bin" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.18.2.bb deleted file mode 100755 index bbd107de8..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.18.2.bb +++ /dev/null @@ -1,22 +0,0 @@ -SUMMARY = "Libav-based GStreamer 1.x plugin" -HOMEPAGE = "http://gstreamer.freedesktop.org/" -SECTION = "multimedia" - -# ffmpeg has comercial license flags so add it as we need ffmpeg as a dependency -LICENSE_FLAGS = "commercial" -LICENSE = "LGPL-2.0-or-later" -LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d \ - file://ext/libav/gstav.h;beginline=1;endline=18;md5=a752c35267d8276fd9ca3db6994fca9c \ - " - -SRC_URI = "https://gstreamer.freedesktop.org/src/gst-libav/gst-libav-${PV}.tar.xz" -SRC_URI[sha256sum] = "36969ad44c5f0756a8a90215410710d6c39713d58f6cee13d663be9774557f49" - -S = "${WORKDIR}/gst-libav-${PV}" - -DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base ffmpeg" - -inherit meson pkgconfig upstream-version-is-even - -FILES:${PN} += "${libdir}/gstreamer-1.0/*.so" -FILES:${PN}-staticdev += "${libdir}/gstreamer-1.0/*.a" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-meta-base.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-meta-base.bb deleted file mode 100755 index 57a9adbae..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-meta-base.bb +++ /dev/null @@ -1,68 +0,0 @@ -SUMMARY = "Gstreamer1.0 package groups" -LICENSE = "MIT" - -# Due to use of COMBINED_FEATURES -PACKAGE_ARCH = "${MACHINE_ARCH}" - -inherit packagegroup - -COMMERCIAL_PLUGINS = "${COMMERCIAL_AUDIO_PLUGINS} ${COMMERCIAL_VIDEO_PLUGINS}" -DEPENDS_UGLY="${@'gstreamer1.0-plugins-ugly' if 'ugly' in COMMERCIAL_PLUGINS.split('-') else ''}" -DEPENDS_BAD="${@'gstreamer1.0-plugins-bad' if 'bad' in COMMERCIAL_PLUGINS.split('-') else ''}" -DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-good ${DEPENDS_UGLY} ${DEPENDS_BAD}" - -PACKAGES = "\ - gstreamer1.0-meta-base \ - gstreamer1.0-meta-x11-base \ - gstreamer1.0-meta-audio \ - gstreamer1.0-meta-debug \ - gstreamer1.0-meta-video" - -ALLOW_EMPTY:gstreamer1.0-meta-base = "1" -ALLOW_EMPTY:gstreamer1.0-meta-x11-base = "1" -ALLOW_EMPTY:gstreamer1.0-meta-audio = "1" -ALLOW_EMPTY:gstreamer1.0-meta-debug = "1" -ALLOW_EMPTY:gstreamer1.0-meta-video = "1" - -RDEPENDS:gstreamer1.0-meta-base = "\ - ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'gstreamer1.0-meta-x11-base', '', d)} \ - gstreamer1.0 \ - gstreamer1.0-plugins-base-playback \ - gstreamer1.0-plugins-base-gio \ - ${@bb.utils.contains('COMBINED_FEATURES', 'alsa', 'gstreamer1.0-plugins-base-alsa', '',d)} \ - gstreamer1.0-plugins-base-volume \ - gstreamer1.0-plugins-base-audioconvert \ - gstreamer1.0-plugins-base-audioresample \ - gstreamer1.0-plugins-base-typefindfunctions \ - gstreamer1.0-plugins-base-videoscale \ - gstreamer1.0-plugins-base-videoconvert \ - gstreamer1.0-plugins-good-autodetect \ - gstreamer1.0-plugins-good-soup" - -RRECOMMENDS:gstreamer1.0-meta-x11-base = "\ - gstreamer1.0-plugins-base-ximagesink \ - gstreamer1.0-plugins-base-xvimagesink" - -RDEPENDS:gstreamer1.0-meta-audio = "\ - gstreamer1.0-meta-base \ - gstreamer1.0-plugins-base-vorbis \ - gstreamer1.0-plugins-base-ogg \ - gstreamer1.0-plugins-good-wavparse \ - gstreamer1.0-plugins-good-flac \ - ${COMMERCIAL_AUDIO_PLUGINS}" - -RDEPENDS:gstreamer1.0-meta-debug = "\ - gstreamer1.0-meta-base \ - gstreamer1.0-plugins-good-debug \ - gstreamer1.0-plugins-base-audiotestsrc \ - gstreamer1.0-plugins-base-videotestsrc" - -RDEPENDS:gstreamer1.0-meta-video = "\ - gstreamer1.0-meta-base \ - gstreamer1.0-plugins-good-avi \ - gstreamer1.0-plugins-good-matroska \ - gstreamer1.0-plugins-base-theora \ - ${COMMERCIAL_VIDEO_PLUGINS}" - -RRECOMMENDS:gstreamer1.0-meta-video = "\ - gstreamer1.0-meta-audio" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.18.2.bb deleted file mode 100755 index 5c060e33e..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.18.2.bb +++ /dev/null @@ -1,46 +0,0 @@ -SUMMARY = "OpenMAX IL plugins for GStreamer" -HOMEPAGE = "http://gstreamer.freedesktop.org/" -SECTION = "multimedia" - -LICENSE = "LGPL-2.1-only" -LICENSE_FLAGS = "commercial" -LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c \ - file://omx/gstomx.h;beginline=1;endline=21;md5=5c8e1fca32704488e76d2ba9ddfa935f" - -SRC_URI = "https://gstreamer.freedesktop.org/src/gst-omx/gst-omx-${PV}.tar.xz" - -SRC_URI[sha256sum] = "4c05d64544eecf4aaf5b337789916c67ed720317dfb2c8c8c335720fcc5c7cf4" - -S = "${WORKDIR}/gst-omx-${PV}" - -DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad virtual/libomxil" - -inherit meson pkgconfig upstream-version-is-even - -GSTREAMER_1_0_OMX_TARGET ?= "bellagio" -GSTREAMER_1_0_OMX_CORE_NAME ?= "${libdir}/libomxil-bellagio.so.0" - -EXTRA_OEMESON += "-Dtarget=${GSTREAMER_1_0_OMX_TARGET}" - -python __anonymous () { - omx_target = d.getVar("GSTREAMER_1_0_OMX_TARGET") - if omx_target in ['generic', 'bellagio']: - # Bellagio headers are incomplete (they are missing the OMX_VERSION_MAJOR,# - # OMX_VERSION_MINOR, OMX_VERSION_REVISION, and OMX_VERSION_STEP macros); - # appending a directory path to gst-omx' internal OpenMAX IL headers fixes this - d.appendVar("CFLAGS", " -I${S}/omx/openmax") - elif omx_target == "rpi": - # Dedicated Raspberry Pi OpenMAX IL support makes this package machine specific - d.setVar("PACKAGE_ARCH", d.getVar("MACHINE_ARCH")) -} - -set_omx_core_name() { - sed -i -e "s;^core-name=.*;core-name=${GSTREAMER_1_0_OMX_CORE_NAME};" "${D}${sysconfdir}/xdg/gstomx.conf" -} -do_install[postfuncs] += " set_omx_core_name " - -FILES:${PN} += "${libdir}/gstreamer-1.0/*.so" -FILES:${PN}-staticdev += "${libdir}/gstreamer-1.0/*.a" - -VIRTUAL-RUNTIME_libomxil ?= "libomxil" -RDEPENDS:${PN} = "${VIRTUAL-RUNTIME_libomxil}" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-fix-maybe-uninitialized-warnings-when-compiling-with.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-fix-maybe-uninitialized-warnings-when-compiling-with.patch deleted file mode 100755 index 13a673cd5..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-fix-maybe-uninitialized-warnings-when-compiling-with.patch +++ /dev/null @@ -1,28 +0,0 @@ -From f08ab3ac2ce43ac91d3bf65b26f26436690f499b Mon Sep 17 00:00:00 2001 -From: Andre McCurdy -Date: Tue, 26 Jan 2016 15:16:01 -0800 -Subject: [PATCH 1/4] fix maybe-uninitialized warnings when compiling with -Os - -Upstream-Status: Pending - -Signed-off-by: Andre McCurdy ---- - gst-libs/gst/codecparsers/gstvc1parser.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/gst-libs/gst/codecparsers/gstvc1parser.c b/gst-libs/gst/codecparsers/gstvc1parser.c -index 2c60ced..e8226d8 100644 ---- a/gst-libs/gst/codecparsers/gstvc1parser.c -+++ b/gst-libs/gst/codecparsers/gstvc1parser.c -@@ -1730,7 +1730,7 @@ gst_vc1_parse_sequence_layer (const guint8 * data, gsize size, - GstVC1SeqLayer * seqlayer) - { - guint32 tmp; -- guint8 tmp8; -+ guint8 tmp8 = 0; - guint8 structA[8] = { 0, }; - guint8 structB[12] = { 0, }; - GstBitReader br; --- -2.28.0 - diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-avoid-including-sys-poll.h-directly.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-avoid-including-sys-poll.h-directly.patch deleted file mode 100755 index ead6897f6..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-avoid-including-sys-poll.h-directly.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 3b05e91720c10fcf6e0e408595b7217f6fa145c2 Mon Sep 17 00:00:00 2001 -From: Andre McCurdy -Date: Wed, 3 Feb 2016 18:05:41 -0800 -Subject: [PATCH 2/4] avoid including directly - -musl libc generates warnings if is included directly. - -Upstream-Status: Pending - -Signed-off-by: Andre McCurdy ---- - sys/dvb/gstdvbsrc.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/sys/dvb/gstdvbsrc.c b/sys/dvb/gstdvbsrc.c -index ca6b92a..b2772db 100644 ---- a/sys/dvb/gstdvbsrc.c -+++ b/sys/dvb/gstdvbsrc.c -@@ -97,7 +97,7 @@ - #include - #include - #include --#include -+#include - #include - #include - #include --- -2.28.0 - diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-ensure-valid-sentinals-for-gst_structure_get-etc.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-ensure-valid-sentinals-for-gst_structure_get-etc.patch deleted file mode 100755 index 88fbc40dc..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-ensure-valid-sentinals-for-gst_structure_get-etc.patch +++ /dev/null @@ -1,88 +0,0 @@ -From 5ed27de9f662fe063b8b3d5d4335aa64cd4718c9 Mon Sep 17 00:00:00 2001 -From: Andre McCurdy -Date: Tue, 9 Feb 2016 14:00:00 -0800 -Subject: [PATCH 3/4] ensure valid sentinals for gst_structure_get() etc - -For GStreamer functions declared with G_GNUC_NULL_TERMINATED, -ie __attribute__((__sentinel__)), gcc will generate a warning if the -last parameter passed to the function is not NULL (where a valid NULL -in this context is defined as zero with any pointer type). - -The C callers to such functions within gst-plugins-bad use the C NULL -definition (ie ((void*)0)), which is a valid sentinel. - -However the C++ NULL definition (ie 0L), is not a valid sentinel -without an explicit cast to a pointer type. - -Upstream-Status: Pending - -Signed-off-by: Andre McCurdy ---- - sys/decklink/gstdecklink.cpp | 10 +++++----- - sys/decklink/gstdecklinkaudiosrc.cpp | 2 +- - sys/decklink/gstdecklinkvideosink.cpp | 2 +- - 3 files changed, 7 insertions(+), 7 deletions(-) - -diff --git a/sys/decklink/gstdecklink.cpp b/sys/decklink/gstdecklink.cpp -index 4dac7e1..43762ce 100644 ---- a/sys/decklink/gstdecklink.cpp -+++ b/sys/decklink/gstdecklink.cpp -@@ -674,7 +674,7 @@ gst_decklink_mode_get_generic_structure (GstDecklinkModeEnum e) - "pixel-aspect-ratio", GST_TYPE_FRACTION, mode->par_n, mode->par_d, - "interlace-mode", G_TYPE_STRING, - mode->interlaced ? "interleaved" : "progressive", -- "framerate", GST_TYPE_FRACTION, mode->fps_n, mode->fps_d, NULL); -+ "framerate", GST_TYPE_FRACTION, mode->fps_n, mode->fps_d, (void*)NULL); - - return s; - } -@@ -699,16 +699,16 @@ gst_decklink_mode_get_structure (GstDecklinkModeEnum e, BMDPixelFormat f, - case bmdFormat8BitYUV: /* '2vuy' */ - gst_structure_set (s, "format", G_TYPE_STRING, "UYVY", - "colorimetry", G_TYPE_STRING, mode->colorimetry, -- "chroma-site", G_TYPE_STRING, "mpeg2", NULL); -+ "chroma-site", G_TYPE_STRING, "mpeg2", (void*)NULL); - break; - case bmdFormat10BitYUV: /* 'v210' */ -- gst_structure_set (s, "format", G_TYPE_STRING, "v210", NULL); -+ gst_structure_set (s, "format", G_TYPE_STRING, "v210", (void*)NULL); - break; - case bmdFormat8BitARGB: /* 'ARGB' */ -- gst_structure_set (s, "format", G_TYPE_STRING, "ARGB", NULL); -+ gst_structure_set (s, "format", G_TYPE_STRING, "ARGB", (void*)NULL); - break; - case bmdFormat8BitBGRA: /* 'BGRA' */ -- gst_structure_set (s, "format", G_TYPE_STRING, "BGRA", NULL); -+ gst_structure_set (s, "format", G_TYPE_STRING, "BGRA", (void*)NULL); - break; - case bmdFormat10BitRGB: /* 'r210' Big-endian RGB 10-bit per component with SMPTE video levels (64-960). Packed as 2:10:10:10 */ - case bmdFormat12BitRGB: /* 'R12B' Big-endian RGB 12-bit per component with full range (0-4095). Packed as 12-bit per component */ -diff --git a/sys/decklink/gstdecklinkaudiosrc.cpp b/sys/decklink/gstdecklinkaudiosrc.cpp -index 2fef934..c47229a 100644 ---- a/sys/decklink/gstdecklinkaudiosrc.cpp -+++ b/sys/decklink/gstdecklinkaudiosrc.cpp -@@ -379,7 +379,7 @@ gst_decklink_audio_src_start (GstDecklinkAudioSrc * self) - g_mutex_unlock (&self->input->lock); - - if (videosrc) { -- g_object_get (videosrc, "connection", &vconn, NULL); -+ g_object_get (videosrc, "connection", &vconn, (void *) NULL); - gst_object_unref (videosrc); - - switch (vconn) { -diff --git a/sys/decklink/gstdecklinkvideosink.cpp b/sys/decklink/gstdecklinkvideosink.cpp -index e3a6775..f1a5aae 100644 ---- a/sys/decklink/gstdecklinkvideosink.cpp -+++ b/sys/decklink/gstdecklinkvideosink.cpp -@@ -286,7 +286,7 @@ reset_framerate (GstCapsFeatures * features, GstStructure * structure, - gpointer user_data) - { - gst_structure_set (structure, "framerate", GST_TYPE_FRACTION_RANGE, 0, 1, -- G_MAXINT, 1, NULL); -+ G_MAXINT, 1, (void *) NULL); - - return TRUE; - } --- -2.28.0 - diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch deleted file mode 100755 index b81670906..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch +++ /dev/null @@ -1,49 +0,0 @@ -From f19ff66640f2f472c4e9d9055253032d34e125c6 Mon Sep 17 00:00:00 2001 -From: Andrey Zhizhikin -Date: Mon, 27 Jan 2020 10:22:35 +0000 -Subject: [PATCH 4/4] opencv: resolve missing opencv data dir in yocto build - -When Yocto build is performed, opencv searches for data dir using simple -'test' command, this fails because pkg-config provides an absolute -path on the target which needs to be prepended by PKG_CONFIG_SYSROOT_DIR -in order for the 'test' utility to pick up the absolute path. - -Upstream-Status: Inappropriate [OE-specific] - -Signed-off-by: Andrey Zhizhikin ---- - ext/opencv/meson.build | 7 ++++--- - 1 file changed, 4 insertions(+), 3 deletions(-) - -diff --git a/ext/opencv/meson.build b/ext/opencv/meson.build -index 0b0b3fc..0ed3344 100644 ---- a/ext/opencv/meson.build -+++ b/ext/opencv/meson.build -@@ -78,20 +78,21 @@ else - endif - - if opencv_found -+ pkgconf_sysroot = run_command(python3, '-c', 'import os; print(os.environ.get("PKG_CONFIG_SYSROOT_DIR"))').stdout().strip() - opencv_prefix = opencv_dep.get_pkgconfig_variable('prefix') - gstopencv_cargs += ['-DOPENCV_PREFIX="' + opencv_prefix + '"'] - - # Check the data dir used by opencv for its xml data files - # Use prefix from pkg-config to be compatible with cross-compilation -- r = run_command('test', '-d', opencv_prefix + '/share/opencv') -+ r = run_command('test', '-d', pkgconf_sysroot + opencv_prefix + '/share/opencv') - if r.returncode() == 0 - gstopencv_cargs += '-DOPENCV_PATH_NAME="opencv"' - else -- r = run_command('test', '-d', opencv_prefix + '/share/OpenCV') -+ r = run_command('test', '-d', pkgconf_sysroot + opencv_prefix + '/share/OpenCV') - if r.returncode() == 0 - gstopencv_cargs += '-DOPENCV_PATH_NAME="OpenCV"' - else -- r = run_command('test', '-d', opencv_prefix + '/share/opencv4') -+ r = run_command('test', '-d', pkgconf_sysroot + opencv_prefix + '/share/opencv4') - if r.returncode() == 0 - gstopencv_cargs += '-DOPENCV_PATH_NAME="opencv4"' - else --- -2.28.0 - diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-msdk-fix-includedir-path.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-msdk-fix-includedir-path.patch deleted file mode 100755 index cb3bb7d36..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0005-msdk-fix-includedir-path.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 1f00d5026118ebd48e4ccf83d32d67155c4e7f60 Mon Sep 17 00:00:00 2001 -From: Naveen Saini -Date: Wed, 30 Dec 2020 16:37:47 +0800 -Subject: [PATCH] msdk: fix includedir path - -In cross compilation, need to prepend PKG_CONFIG_SYSROOT_DIR to the dir path. - -Upstream-Status: Inappropriate [OE-specific] - -Signed-off-by: Naveen Saini ---- - sys/msdk/meson.build | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/sys/msdk/meson.build b/sys/msdk/meson.build -index 6346c9451..068f38548 100644 ---- a/sys/msdk/meson.build -+++ b/sys/msdk/meson.build -@@ -40,7 +40,9 @@ endif - - mfx_dep = dependency('libmfx', required: false) - if mfx_dep.found() -+ pkgconf_sysroot = run_command(python3, '-c', 'import os; print(os.environ.get("PKG_CONFIG_SYSROOT_DIR"))').stdout().strip() - mfx_incdir = mfx_dep.get_pkgconfig_variable('includedir') -+ mfx_incdir = pkgconf_sysroot + mfx_incdir - mfx_inc = [] - else - # Old versions of MediaSDK don't provide a pkg-config file --- -2.17.1 - diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.2.bb deleted file mode 100755 index 5f7ada5a5..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.2.bb +++ /dev/null @@ -1,147 +0,0 @@ -require gstreamer1.0-plugins-common.inc - -SRC_URI = "https://gstreamer.freedesktop.org/src/gst-plugins-bad/gst-plugins-bad-${PV}.tar.xz \ - file://0001-fix-maybe-uninitialized-warnings-when-compiling-with.patch \ - file://0002-avoid-including-sys-poll.h-directly.patch \ - file://0003-ensure-valid-sentinals-for-gst_structure_get-etc.patch \ - file://0004-opencv-resolve-missing-opencv-data-dir-in-yocto-buil.patch \ - file://0005-msdk-fix-includedir-path.patch \ - " -SRC_URI[sha256sum] = "8ad5822f1118fe46a19af54422b74e3a16d79a6800dcb173b49e199a496b341a" - -S = "${WORKDIR}/gst-plugins-bad-${PV}" - -LICENSE = "GPL-2.0-or-later & LGPL-2.0-or-later & LGPL-2.1-or-later" -LIC_FILES_CHKSUM = "file://COPYING;md5=4fbd65380cdd255951079008b364516c" - -DEPENDS += "gstreamer1.0-plugins-base" - -inherit gobject-introspection - -PACKAGECONFIG ??= " \ - ${GSTREAMER_ORC} \ - ${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez', '', d)} \ - ${@bb.utils.filter('DISTRO_FEATURES', 'directfb vulkan', d)} \ - ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland', '', d)} \ - ${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'gl', '', d)} \ - bz2 closedcaption curl dash dtls hls rsvg sbc smoothstreaming sndfile \ - ttml uvch264 webp \ -" - -PACKAGECONFIG[aom] = "-Daom=enabled,-Daom=disabled,aom" -PACKAGECONFIG[assrender] = "-Dassrender=enabled,-Dassrender=disabled,libass" -PACKAGECONFIG[bluez] = "-Dbluez=enabled,-Dbluez=disabled,bluez5" -PACKAGECONFIG[bz2] = "-Dbz2=enabled,-Dbz2=disabled,bzip2" -PACKAGECONFIG[closedcaption] = "-Dclosedcaption=enabled,-Dclosedcaption=disabled,pango cairo" -PACKAGECONFIG[curl] = "-Dcurl=enabled,-Dcurl=disabled,curl" -PACKAGECONFIG[dash] = "-Ddash=enabled,-Ddash=disabled,libxml2" -PACKAGECONFIG[dc1394] = "-Ddc1394=enabled,-Ddc1394=disabled,libdc1394" -PACKAGECONFIG[directfb] = "-Ddirectfb=enabled,-Ddirectfb=disabled,directfb" -PACKAGECONFIG[dtls] = "-Ddtls=enabled,-Ddtls=disabled,openssl" -PACKAGECONFIG[faac] = "-Dfaac=enabled,-Dfaac=disabled,faac" -PACKAGECONFIG[faad] = "-Dfaad=enabled,-Dfaad=disabled,faad2" -PACKAGECONFIG[fluidsynth] = "-Dfluidsynth=enabled,-Dfluidsynth=disabled,fluidsynth" -PACKAGECONFIG[hls] = "-Dhls=enabled -Dhls-crypto=nettle,-Dhls=disabled,nettle" -# the gl packageconfig enables OpenGL elements that haven't been ported -# to -base yet. They depend on the gstgl library in -base, so we do -# not add GL dependencies here, since these are taken care of in -base. -PACKAGECONFIG[gl] = "-Dgl=enabled,-Dgl=disabled," -PACKAGECONFIG[kms] = "-Dkms=enabled,-Dkms=disabled,libdrm" -PACKAGECONFIG[libde265] = "-Dlibde265=enabled,-Dlibde265=disabled,libde265" -PACKAGECONFIG[libmms] = "-Dlibmms=enabled,-Dlibmms=disabled,libmms" -PACKAGECONFIG[libssh2] = "-Dcurl-ssh2=enabled,-Dcurl-ssh2=disabled,libssh2" -PACKAGECONFIG[lcms2] = "-Dcolormanagement=enabled,-Dcolormanagement=disabled,lcms" -PACKAGECONFIG[modplug] = "-Dmodplug=enabled,-Dmodplug=disabled,libmodplug" -PACKAGECONFIG[msdk] = "-Dmsdk=enabled,-Dmsdk=disabled,intel-mediasdk" -PACKAGECONFIG[neon] = "-Dneon=enabled,-Dneon=disabled,neon" -PACKAGECONFIG[openal] = "-Dopenal=enabled,-Dopenal=disabled,openal-soft" -PACKAGECONFIG[opencv] = "-Dopencv=enabled,-Dopencv=disabled,opencv" -PACKAGECONFIG[openh264] = "-Dopenh264=enabled,-Dopenh264=disabled,openh264" -PACKAGECONFIG[openjpeg] = "-Dopenjpeg=enabled,-Dopenjpeg=disabled,openjpeg" -PACKAGECONFIG[openmpt] = "-Dopenmpt=enabled,-Dopenmpt=disabled,libopenmpt" -# the opus encoder/decoder elements are now in the -base package, -# but the opus parser remains in -bad -PACKAGECONFIG[opusparse] = "-Dopus=enabled,-Dopus=disabled,libopus" -PACKAGECONFIG[resindvd] = "-Dresindvd=enabled,-Dresindvd=disabled,libdvdread libdvdnav" -PACKAGECONFIG[rsvg] = "-Drsvg=enabled,-Drsvg=disabled,librsvg" -PACKAGECONFIG[rtmp] = "-Drtmp=enabled,-Drtmp=disabled,rtmpdump" -PACKAGECONFIG[sbc] = "-Dsbc=enabled,-Dsbc=disabled,sbc" -PACKAGECONFIG[sctp] = "-Dsctp=enabled,-Dsctp=disabled" -PACKAGECONFIG[smoothstreaming] = "-Dsmoothstreaming=enabled,-Dsmoothstreaming=disabled,libxml2" -PACKAGECONFIG[sndfile] = "-Dsndfile=enabled,-Dsndfile=disabled,libsndfile1" -PACKAGECONFIG[srt] = "-Dsrt=enabled,-Dsrt=disabled,srt" -PACKAGECONFIG[srtp] = "-Dsrtp=enabled,-Dsrtp=disabled,libsrtp" -PACKAGECONFIG[tinyalsa] = "-Dtinyalsa=enabled,-Dtinyalsa=disabled,tinyalsa" -PACKAGECONFIG[ttml] = "-Dttml=enabled,-Dttml=disabled,libxml2 pango cairo" -PACKAGECONFIG[uvch264] = "-Duvch264=enabled,-Duvch264=disabled,libusb1 libgudev" -PACKAGECONFIG[v4l2codecs] = "-Dv4l2codecs=enabled,-Dv4l2codecs=disabled,libgudev" -PACKAGECONFIG[va] = "-Dva=enabled,-Dva=disabled,libva" -PACKAGECONFIG[voaacenc] = "-Dvoaacenc=enabled,-Dvoaacenc=disabled,vo-aacenc" -PACKAGECONFIG[voamrwbenc] = "-Dvoamrwbenc=enabled,-Dvoamrwbenc=disabled,vo-amrwbenc" -PACKAGECONFIG[vulkan] = "-Dvulkan=enabled,-Dvulkan=disabled,vulkan-loader shaderc-native" -PACKAGECONFIG[wayland] = "-Dwayland=enabled,-Dwayland=disabled,wayland-native wayland wayland-protocols libdrm" -PACKAGECONFIG[webp] = "-Dwebp=enabled,-Dwebp=disabled,libwebp" -PACKAGECONFIG[webrtc] = "-Dwebrtc=enabled,-Dwebrtc=disabled,libnice" -PACKAGECONFIG[webrtcdsp] = "-Dwebrtcdsp=enabled,-Dwebrtcdsp=disabled,webrtc-audio-processing" -PACKAGECONFIG[zbar] = "-Dzbar=enabled,-Dzbar=disabled,zbar" -PACKAGECONFIG[x265] = "-Dx265=enabled,-Dx265=disabled,x265" - -EXTRA_OEMESON += " \ - -Ddoc=disabled \ - -Ddecklink=enabled \ - -Ddvb=enabled \ - -Dfbdev=enabled \ - -Dipcpipeline=enabled \ - -Dshm=enabled \ - -Dtranscode=enabled \ - -Dandroidmedia=disabled \ - -Dapplemedia=disabled \ - -Davtp=disabled \ - -Dbs2b=disabled \ - -Dchromaprint=disabled \ - -Dd3dvideosink=disabled \ - -Dd3d11=disabled \ - -Ddirectsound=disabled \ - -Ddts=disabled \ - -Dfdkaac=disabled \ - -Dflite=disabled \ - -Dgme=disabled \ - -Dgsm=disabled \ - -Diqa=disabled \ - -Dkate=disabled \ - -Dladspa=disabled \ - -Dlv2=disabled \ - -Dmagicleap=disabled \ - -Dmediafoundation=disabled \ - -Dmicrodns=disabled \ - -Dmpeg2enc=disabled \ - -Dmplex=disabled \ - -Dmusepack=disabled \ - -Dnvcodec=disabled \ - -Dofa=disabled \ - -Dopenexr=disabled \ - -Dopenni2=disabled \ - -Dopensles=disabled \ - -Dsoundtouch=disabled \ - -Dspandsp=disabled \ - -Dsvthevcenc=disabled \ - -Dteletext=disabled \ - -Dwasapi=disabled \ - -Dwasapi2=disabled \ - -Dwildmidi=disabled \ - -Dwinks=disabled \ - -Dwinscreencap=disabled \ - -Dwpe=disabled \ - -Dzxing=disabled \ -" - -export OPENCV_PREFIX = "${STAGING_DIR_TARGET}${prefix}" - -ARM_INSTRUCTION_SET:armv4 = "arm" -ARM_INSTRUCTION_SET:armv5 = "arm" - -FILES:${PN}-freeverb += "${datadir}/gstreamer-1.0/presets/GstFreeverb.prs" -FILES:${PN}-opencv += "${datadir}/gst-plugins-bad/1.0/opencv*" -FILES:${PN}-transcode += "${datadir}/gstreamer-1.0/encoding-profiles" -FILES:${PN}-voamrwbenc += "${datadir}/gstreamer-1.0/presets/GstVoAmrwbEnc.prs" - diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-ENGR00312515-get-caps-from-src-pad-when-query-caps.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-ENGR00312515-get-caps-from-src-pad-when-query-caps.patch deleted file mode 100755 index d5d983837..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-ENGR00312515-get-caps-from-src-pad-when-query-caps.patch +++ /dev/null @@ -1,44 +0,0 @@ -From f9d48cd85ee68207733b1b91a00453462c33524a Mon Sep 17 00:00:00 2001 -From: zhouming -Date: Wed, 14 May 2014 10:16:20 +0800 -Subject: [PATCH 1/4] ENGR00312515: get caps from src pad when query caps - -https://bugzilla.gnome.org/show_bug.cgi?id=728312 - -Upstream-Status: Pending - -Signed-off-by: zhouming ---- - gst-libs/gst/tag/gsttagdemux.c | 13 +++++++++++++ - 1 file changed, 13 insertions(+) - mode change 100644 => 100755 gst-libs/gst/tag/gsttagdemux.c - -diff --git a/gst-libs/gst/tag/gsttagdemux.c b/gst-libs/gst/tag/gsttagdemux.c -old mode 100644 -new mode 100755 -index f545857..62d10ef ---- a/gst-libs/gst/tag/gsttagdemux.c -+++ b/gst-libs/gst/tag/gsttagdemux.c -@@ -1777,6 +1777,19 @@ gst_tag_demux_pad_query (GstPad * pad, GstObject * parent, GstQuery * query) - } - break; - } -+ case GST_QUERY_CAPS: -+ { -+ -+ /* We can hijack caps query if we typefind already */ -+ if (demux->priv->src_caps) { -+ gst_query_set_caps_result (query, demux->priv->src_caps); -+ res = TRUE; -+ } else { -+ res = gst_pad_query_default (pad, parent, query); -+ } -+ break; -+ } -+ - default: - res = gst_pad_query_default (pad, parent, query); - break; --- -2.28.0 - diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-ssaparse-enhance-SSA-text-lines-parsing.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-ssaparse-enhance-SSA-text-lines-parsing.patch deleted file mode 100755 index e453a500c..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0002-ssaparse-enhance-SSA-text-lines-parsing.patch +++ /dev/null @@ -1,229 +0,0 @@ -From f587861bbe12ad0b10370f835592746aafedbf56 Mon Sep 17 00:00:00 2001 -From: Mingke Wang -Date: Thu, 19 Mar 2015 14:17:10 +0800 -Subject: [PATCH 2/4] ssaparse: enhance SSA text lines parsing. - -some parser will pass in the original ssa text line which starts with "Dialog:" -and there's are maybe multiple Dialog lines in one input buffer. - -Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=747496] - -Signed-off-by: Mingke Wang ---- - gst/subparse/gstssaparse.c | 150 +++++++++++++++++++++++++++++++++---- - 1 file changed, 134 insertions(+), 16 deletions(-) - mode change 100644 => 100755 gst/subparse/gstssaparse.c - -diff --git a/gst/subparse/gstssaparse.c b/gst/subparse/gstssaparse.c -old mode 100644 -new mode 100755 -index c849c08..4b9636c ---- a/gst/subparse/gstssaparse.c -+++ b/gst/subparse/gstssaparse.c -@@ -262,6 +262,7 @@ gst_ssa_parse_remove_override_codes (GstSsaParse * parse, gchar * txt) - * gst_ssa_parse_push_line: - * @parse: caller element - * @txt: text to push -+ * @size: text size need to be parse - * @start: timestamp for the buffer - * @duration: duration for the buffer - * -@@ -271,27 +272,133 @@ gst_ssa_parse_remove_override_codes (GstSsaParse * parse, gchar * txt) - * Returns: result of the push of the created buffer - */ - static GstFlowReturn --gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt, -+gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt, gint size, - GstClockTime start, GstClockTime duration) - { - GstFlowReturn ret; - GstBuffer *buf; -- gchar *t, *escaped; -+ gchar *t, *text, *p, *escaped, *p_start, *p_end; - gint num, i, len; -+ GstClockTime start_time = G_MAXUINT64, end_time = 0; - -- num = atoi (txt); -- GST_LOG_OBJECT (parse, "Parsing line #%d at %" GST_TIME_FORMAT, -- num, GST_TIME_ARGS (start)); -- -- /* skip all non-text fields before the actual text */ -+ p = text = g_malloc(size + 1); -+ *p = '\0'; - t = txt; -- for (i = 0; i < 8; ++i) { -- t = strchr (t, ','); -+ -+ /* there are may have multiple dialogue lines at a time */ -+ while (*t) { -+ /* ignore leading white space characters */ -+ while (isspace(*t)) -+ t++; -+ -+ /* ignore Format: and Style: lines */ -+ if (strncmp(t, "Format:", 7) == 0 || strncmp(t, "Style:", 6) == 0) { -+ while (*t != '\0' && *t != '\n') { -+ t++; -+ } -+ } -+ -+ if (*t == '\0') -+ break; -+ -+ /* continue with next line */ -+ if (*t == '\n') { -+ t++; -+ continue; -+ } -+ -+ if(strncmp(t, "Dialogue:", 9) != 0) { -+ /* not started with "Dialogue:", it must be a line trimmed by demuxer */ -+ num = atoi (t); -+ GST_LOG_OBJECT (parse, "Parsing line #%d at %" GST_TIME_FORMAT, -+ num, GST_TIME_ARGS (start)); -+ -+ /* skip all non-text fields before the actual text */ -+ for (i = 0; i < 8; ++i) { -+ t = strchr (t, ','); -+ if (t == NULL) -+ break; -+ ++t; -+ } -+ } else { -+ /* started with "Dialogue:", update timestamp and duration */ -+ /* time format are like Dialog:Mark,0:00:01.02,0:00:03.04,xx,xxx,... */ -+ guint hour, min, sec, msec, len; -+ GstClockTime tmp; -+ gchar t_str[12] = {0}; -+ -+ /* find the first ',' */ -+ p_start = strchr (t, ','); -+ if (p_start) -+ p_end = strchr (++p_start, ','); -+ -+ if (p_start && p_end) { -+ /* copy text between first ',' and second ',' */ -+ strncpy(t_str, p_start, p_end - p_start); -+ if (sscanf (t_str, "%u:%u:%u.%u", &hour, &min, &sec, &msec) == 4) { -+ tmp = ((hour*3600) + (min*60) + sec) * GST_SECOND + msec*GST_MSECOND; -+ GST_DEBUG_OBJECT (parse, "Get start time:%02d:%02d:%02d:%03d\n", -+ hour, min, sec, msec); -+ if (start_time > tmp) -+ start_time = tmp; -+ } else { -+ GST_WARNING_OBJECT (parse, -+ "failed to parse ssa start timestamp string :%s", t_str); -+ } -+ -+ p_start = p_end; -+ p_end = strchr (++p_start, ','); -+ if (p_end) { -+ /* copy text between second ',' and third ',' */ -+ strncpy(t_str, p_start, p_end - p_start); -+ if (sscanf (t_str, "%u:%u:%u.%u", &hour, &min, &sec, &msec) == 4) { -+ tmp = ((hour*3600) + (min*60) + sec)*GST_SECOND + msec*GST_MSECOND; -+ GST_DEBUG_OBJECT(parse, "Get end time:%02d:%02d:%02d:%03d\n", -+ hour, min, sec, msec); -+ if (end_time < tmp) -+ end_time = tmp; -+ } else { -+ GST_WARNING_OBJECT (parse, -+ "failed to parse ssa end timestamp string :%s", t_str); -+ } -+ } -+ } -+ -+ /* now skip all non-text fields before the actual text */ -+ for (i = 0; i <= 8; ++i) { -+ t = strchr (t, ','); -+ if (t == NULL) -+ break; -+ ++t; -+ } -+ } -+ -+ /* line end before expected number of ',', not a Dialogue line */ - if (t == NULL) -- return GST_FLOW_ERROR; -- ++t; -+ break; -+ -+ /* if not the first line, and the last character of previous line is '\0', -+ * then replace it with '\N' */ -+ if (p != text && *p == '\0') { -+ *p++ = '\\'; -+ *p++ = 'N'; -+ } -+ -+ /* copy all actual text of this line */ -+ while ((*t != '\0') && (*t != '\n')) -+ *p++ = *t++; -+ -+ /* add a terminator at the end */ -+ *p = '\0'; -+ } -+ -+ /* not valid text found in this buffer return OK to let caller unref buffer */ -+ if (strlen(text) <= 0) { -+ GST_WARNING_OBJECT (parse, "Not valid text found in this buffer\n"); -+ return GST_FLOW_ERROR; - } - -+ t = text; - GST_LOG_OBJECT (parse, "Text : %s", t); - - if (gst_ssa_parse_remove_override_codes (parse, t)) { -@@ -309,13 +416,22 @@ gst_ssa_parse_push_line (GstSsaParse * parse, gchar * txt, - gst_buffer_fill (buf, 0, escaped, len + 1); - gst_buffer_set_size (buf, len); - g_free (escaped); -+ g_free(t); -+ -+ if (start_time != G_MAXUINT64) -+ GST_BUFFER_TIMESTAMP (buf) = start_time; -+ else -+ GST_BUFFER_TIMESTAMP (buf) = start; - -- GST_BUFFER_TIMESTAMP (buf) = start; -- GST_BUFFER_DURATION (buf) = duration; -+ if (end_time > start_time) -+ GST_BUFFER_DURATION (buf) = end_time - start_time; -+ else -+ GST_BUFFER_DURATION (buf) = duration; - - GST_LOG_OBJECT (parse, "Pushing buffer with timestamp %" GST_TIME_FORMAT -- " and duration %" GST_TIME_FORMAT, GST_TIME_ARGS (start), -- GST_TIME_ARGS (duration)); -+ " and duration %" GST_TIME_FORMAT, -+ GST_TIME_ARGS (GST_BUFFER_TIMESTAMP (buf)), -+ GST_TIME_ARGS (GST_BUFFER_DURATION (buf))); - - ret = gst_pad_push (parse->srcpad, buf); - -@@ -335,6 +451,7 @@ gst_ssa_parse_chain (GstPad * sinkpad, GstObject * parent, GstBuffer * buf) - GstClockTime ts; - gchar *txt; - GstMapInfo map; -+ gint size; - - if (G_UNLIKELY (!parse->framed)) - goto not_framed; -@@ -352,13 +469,14 @@ gst_ssa_parse_chain (GstPad * sinkpad, GstObject * parent, GstBuffer * buf) - /* make double-sure it's 0-terminated and all */ - gst_buffer_map (buf, &map, GST_MAP_READ); - txt = g_strndup ((gchar *) map.data, map.size); -+ size = map.size; - gst_buffer_unmap (buf, &map); - - if (txt == NULL) - goto empty_text; - - ts = GST_BUFFER_TIMESTAMP (buf); -- ret = gst_ssa_parse_push_line (parse, txt, ts, GST_BUFFER_DURATION (buf)); -+ ret = gst_ssa_parse_push_line (parse, txt, size, ts, GST_BUFFER_DURATION (buf)); - - if (ret != GST_FLOW_OK && GST_CLOCK_TIME_IS_VALID (ts)) { - GstSegment segment; --- -2.28.0 - diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-viv-fb-Make-sure-config.h-is-included.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-viv-fb-Make-sure-config.h-is-included.patch deleted file mode 100755 index 2af83ff8b..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0003-viv-fb-Make-sure-config.h-is-included.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 153f3b83a3fed77785bd1420bed8bbafa2d791b3 Mon Sep 17 00:00:00 2001 -From: Carlos Rafael Giani -Date: Tue, 21 May 2019 14:01:11 +0200 -Subject: [PATCH 3/4] viv-fb: Make sure config.h is included - -This prevents build errors due to missing GST_API_* symbols - -Upstream-Status: Pending - -Signed-off-by: Carlos Rafael Giani ---- - gst-libs/gst/gl/gl-prelude.h | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/gst-libs/gst/gl/gl-prelude.h b/gst-libs/gst/gl/gl-prelude.h -index 05e1f62..96ce5e6 100644 ---- a/gst-libs/gst/gl/gl-prelude.h -+++ b/gst-libs/gst/gl/gl-prelude.h -@@ -22,6 +22,10 @@ - #ifndef __GST_GL_PRELUDE_H__ - #define __GST_GL_PRELUDE_H__ - -+#ifdef HAVE_CONFIG_H -+#include "config.h" -+#endif -+ - #include - - #ifdef BUILDING_GST_GL --- -2.28.0 - diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0004-glimagesink-Downrank-to-marginal.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0004-glimagesink-Downrank-to-marginal.patch deleted file mode 100755 index f45ea65ef..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0004-glimagesink-Downrank-to-marginal.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 79841a02ee754eba736cb32aaf2ed2b2fc0483d4 Mon Sep 17 00:00:00 2001 -From: Alexander Kanavin -Date: Thu, 24 Sep 2015 19:47:32 +0300 -Subject: [PATCH 4/4] glimagesink: Downrank to marginal - -On desktop, where there is good OpenGL, xvimagesink will come up first, -on other platforms, OpenGL can't be trusted because it's either software (like -in a VM) or broken (like on embedded)., so let ximagesink come above. - -Upstream-Status: Submitted [https://bugzilla.gnome.org/show_bug.cgi?id=751684] - -Signed-off-by: Alexander Kanavin ---- - ext/gl/gstopengl.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/ext/gl/gstopengl.c b/ext/gl/gstopengl.c -index 302e845..463be9c 100644 ---- a/ext/gl/gstopengl.c -+++ b/ext/gl/gstopengl.c -@@ -127,7 +127,7 @@ plugin_init (GstPlugin * plugin) - #endif - - if (!gst_element_register (plugin, "glimagesink", -- GST_RANK_SECONDARY, gst_gl_image_sink_bin_get_type ())) { -+ GST_RANK_MARGINAL, gst_gl_image_sink_bin_get_type ())) { - return FALSE; - } - --- -2.28.0 - diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.2.bb deleted file mode 100755 index 92b8c8ea4..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.2.bb +++ /dev/null @@ -1,94 +0,0 @@ -require gstreamer1.0-plugins-common.inc - -LICENSE = "GPL-2.0-or-later & LGPL-2.0-or-later" -LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d" - -SRC_URI = "https://gstreamer.freedesktop.org/src/gst-plugins-base/gst-plugins-base-${PV}.tar.xz \ - file://0001-ENGR00312515-get-caps-from-src-pad-when-query-caps.patch \ - file://0003-viv-fb-Make-sure-config.h-is-included.patch \ - file://0002-ssaparse-enhance-SSA-text-lines-parsing.patch \ - file://0004-glimagesink-Downrank-to-marginal.patch \ - " -SRC_URI[sha256sum] = "dd04fb1f7826e2f6d9b4d66fc22f19cc6a47c301e13041f0ee3d7f65c89b05ac" - -S = "${WORKDIR}/gst-plugins-base-${PV}" - -DEPENDS += "iso-codes util-linux zlib" - -inherit gobject-introspection - -PACKAGES_DYNAMIC =+ "^libgst.*" - -# opengl packageconfig factored out to make it easy for distros -# and BSP layers to choose OpenGL APIs/platforms/window systems -PACKAGECONFIG_GL ?= "${@bb.utils.contains('DISTRO_FEATURES', 'opengl', 'gles2 egl', '', d)}" - -PACKAGECONFIG ??= " \ - ${GSTREAMER_ORC} \ - ${PACKAGECONFIG_GL} \ - ${@bb.utils.filter('DISTRO_FEATURES', 'alsa x11', d)} \ - jpeg ogg pango png theora vorbis \ - ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland egl', '', d)} \ -" - -OPENGL_APIS = 'opengl gles2' -OPENGL_PLATFORMS = 'egl' - -X11DEPENDS = "virtual/libx11 libsm libxrender libxv" -X11ENABLEOPTS = "-Dx11=enabled -Dxvideo=enabled -Dxshm=enabled" -X11DISABLEOPTS = "-Dx11=disabled -Dxvideo=disabled -Dxshm=disabled" - -PACKAGECONFIG[alsa] = "-Dalsa=enabled,-Dalsa=disabled,alsa-lib" -PACKAGECONFIG[cdparanoia] = "-Dcdparanoia=enabled,-Dcdparanoia=disabled,cdparanoia" -PACKAGECONFIG[jpeg] = "-Dgl-jpeg=enabled,-Dgl-jpeg=disabled,jpeg" -PACKAGECONFIG[ogg] = "-Dogg=enabled,-Dogg=disabled,libogg" -PACKAGECONFIG[opus] = "-Dopus=enabled,-Dopus=disabled,libopus" -PACKAGECONFIG[pango] = "-Dpango=enabled,-Dpango=disabled,pango" -PACKAGECONFIG[png] = "-Dgl-png=enabled,-Dgl-png=disabled,libpng" -PACKAGECONFIG[theora] = "-Dtheora=enabled,-Dtheora=disabled,libtheora" -PACKAGECONFIG[tremor] = "-Dtremor=enabled,-Dtremor=disabled,tremor" -PACKAGECONFIG[visual] = "-Dlibvisual=enabled,-Dlibvisual=disabled,libvisual" -PACKAGECONFIG[vorbis] = "-Dvorbis=enabled,-Dvorbis=disabled,libvorbis" -PACKAGECONFIG[x11] = "${X11ENABLEOPTS},${X11DISABLEOPTS},${X11DEPENDS}" - -# OpenGL API packageconfigs -PACKAGECONFIG[opengl] = ",,virtual/libgl libglu" -PACKAGECONFIG[gles2] = ",,virtual/libgles2" - -# OpenGL platform packageconfigs -PACKAGECONFIG[egl] = ",,virtual/egl" - -# OpenGL window systems (except for X11) -PACKAGECONFIG[gbm] = ",,virtual/libgbm libgudev libdrm" -PACKAGECONFIG[wayland] = ",,wayland-native wayland wayland-protocols libdrm" -PACKAGECONFIG[dispmanx] = ",,virtual/libomxil" - -OPENGL_WINSYS:append = "${@bb.utils.contains('PACKAGECONFIG', 'x11', ' x11', '', d)}" -OPENGL_WINSYS:append = "${@bb.utils.contains('PACKAGECONFIG', 'gbm', ' gbm', '', d)}" -OPENGL_WINSYS:append = "${@bb.utils.contains('PACKAGECONFIG', 'wayland', ' wayland', '', d)}" -OPENGL_WINSYS:append = "${@bb.utils.contains('PACKAGECONFIG', 'dispmanx', ' dispmanx', '', d)}" -OPENGL_WINSYS:append = "${@bb.utils.contains('PACKAGECONFIG', 'egl', ' egl', '', d)}" - -EXTRA_OEMESON += " \ - -Ddoc=disabled \ - -Dgl-graphene=disabled \ - ${@get_opengl_cmdline_list('gl_api', d.getVar('OPENGL_APIS'), d)} \ - ${@get_opengl_cmdline_list('gl_platform', d.getVar('OPENGL_PLATFORMS'), d)} \ - ${@get_opengl_cmdline_list('gl_winsys', d.getVar('OPENGL_WINSYS'), d)} \ -" - -FILES:${PN}-dev += "${libdir}/gstreamer-1.0/include/gst/gl/gstglconfig.h" -FILES:${MLPREFIX}libgsttag-1.0 += "${datadir}/gst-plugins-base/1.0/license-translations.dict" - -def get_opengl_cmdline_list(switch_name, options, d): - selected_options = [] - if bb.utils.contains('DISTRO_FEATURES', 'opengl', True, False, d): - for option in options.split(): - if bb.utils.contains('PACKAGECONFIG', option, True, False, d): - selected_options += [option] - if selected_options: - return '-D' + switch_name + '=' + ','.join(selected_options) - else: - return '' - -CVE_PRODUCT += "gst-plugins-base" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc deleted file mode 100755 index 4f3cc1f8d..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-common.inc +++ /dev/null @@ -1,50 +0,0 @@ -# This .inc file contains the common setup for the gstreamer1.0-plugins-* -# plugin set recipes. - -# SUMMARY is set in the actual .bb recipes -HOMEPAGE = "https://gstreamer.freedesktop.org/" -BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer" -SECTION = "multimedia" - -DEPENDS = "gstreamer1.0 glib-2.0-native" - -inherit gettext meson pkgconfig upstream-version-is-even - -require gstreamer1.0-plugins-packaging.inc - -# Orc enables runtime JIT compilation of data processing routines from Orc -# bytecode to SIMD instructions for various architectures (currently SSE, MMX, -# MIPS, Altivec and NEON are supported). -# This value is used in the PACKAGECONFIG values for each plugin set recipe. -# By modifying it, Orc can be enabled/disabled in all of these recipes at once. -GSTREAMER_ORC ?= "orc" -# workaround to disable orc on mips to fix the build failure -# {standard input}: Assembler messages: -# {standard input}:46587: Error: branch out of range -GSTREAMER_ORC:mips = "" -PACKAGECONFIG[orc] = "-Dorc=enabled,-Dorc=disabled,orc orc-native" - -# TODO: put this in a gettext.bbclass patch (with variables to allow for -# configuring the option name and the enabled/disabled values). -def gettext_oemeson(d): - if d.getVar('USE_NLS') == 'no': - return '-Dnls=disabled' - # Remove the NLS bits if USE_NLS is no or INHIBIT_DEFAULT_DEPS is set - if d.getVar('INHIBIT_DEFAULT_DEPS') and not oe.utils.inherits(d, 'cross-canadian'): - return '-Dnls=disabled' - return '-Dnls=enabled' - -# Not all plugin sets contain examples, so the -Dexamples -# option needs to be added conditionally. -GST_PLUGIN_SET_HAS_EXAMPLES ?= "1" - -EXTRA_OEMESON += " \ - ${@bb.utils.contains('GST_PLUGIN_SET_HAS_EXAMPLES', '1', '-Dexamples=disabled', '', d)} \ - ${@gettext_oemeson(d)} \ -" - -GIR_MESON_ENABLE_FLAG = "enabled" -GIR_MESON_DISABLE_FLAG = "disabled" - -# Dynamically generate packages for all enabled plugins -PACKAGES_DYNAMIC = "^${PN}-.*" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-qt-include-ext-qt-gstqtgl.h-instead-of-gst-gl-gstglf.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-qt-include-ext-qt-gstqtgl.h-instead-of-gst-gl-gstglf.patch deleted file mode 100755 index 788d75205..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-qt-include-ext-qt-gstqtgl.h-instead-of-gst-gl-gstglf.patch +++ /dev/null @@ -1,56 +0,0 @@ -From bf8b2fa0f6870589d036f0f33c140a3f85b530a0 Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Tue, 31 Mar 2020 21:23:28 -0700 -Subject: [PATCH] qt: include ext/qt/gstqtgl.h instead of gst/gl/gstglfuncs.h - -gst/gl/gstglfuncs.h is included via ext/qt/gstqtgl.h which has logic to -prefer qt headers definitions for GLsync - -This helps in fixing build errors like below - -/mnt/b/yoe/build/tmp/work/cortexa7t2hf-neon-vfpv4-yoe-linux-gnueabi/gstreamer1.0-plugins-good/1.16.2-r0/recipe-sysroot/usr/include/QtGui/qopengles2ext.h:24:26: error: conflicting declaration 'typedef struct __GLsync* GLsync' - 24 | typedef struct __GLsync *GLsync; - | ^~~~~~ -In file included from /mnt/b/yoe/build/tmp/work/cortexa7t2hf-neon-vfpv4-yoe-linux-gnueabi/gstreamer1.0-plugins-good/1.16.2-r0/recipe-sysroot/usr/include/gstreamer-1.0/gst/gl/gstglfuncs.h:84, - from ../gst-plugins-good-1.16.2/ext/qt/gstqsgtexture.cc:30: -/mnt/b/yoe/build/tmp/work/cortexa7t2hf-neon-vfpv4-yoe-linux-gnueabi/gstreamer1.0-plugins-good/1.16.2-r0/recipe-sysroot/usr/include/gstreamer-1.0/gst/gl/glprototypes/gstgl_compat.h:40:18: note: previous declaration as 'typedef void* GLsync -' - 40 | typedef gpointer GLsync; - | ^~~~~~ - -Upstream-Status: Pending -Signed-off-by: Khem Raj ---- - ext/qt/gstqsgtexture.cc | 2 +- - ext/qt/qtwindow.cc | 2 +- - 2 files changed, 2 insertions(+), 2 deletions(-) - -diff --git a/ext/qt/gstqsgtexture.cc b/ext/qt/gstqsgtexture.cc -index a05d26e..4cc9fc6 100644 ---- a/ext/qt/gstqsgtexture.cc -+++ b/ext/qt/gstqsgtexture.cc -@@ -27,7 +27,7 @@ - - #include - #include --#include -+#include - #include "gstqsgtexture.h" - - #define GST_CAT_DEFAULT gst_qsg_texture_debug -diff --git a/ext/qt/qtwindow.cc b/ext/qt/qtwindow.cc -index 9360c33..0dfd3f1 100644 ---- a/ext/qt/qtwindow.cc -+++ b/ext/qt/qtwindow.cc -@@ -25,7 +25,7 @@ - #include - - #include --#include -+#include - #include "qtwindow.h" - #include "gstqsgtexture.h" - #include "gstqtglutility.h" --- -2.28.0 - diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.2.bb deleted file mode 100755 index a9e999ef4..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.2.bb +++ /dev/null @@ -1,72 +0,0 @@ -require gstreamer1.0-plugins-common.inc - -SRC_URI = "https://gstreamer.freedesktop.org/src/gst-plugins-good/gst-plugins-good-${PV}.tar.xz \ - file://0001-qt-include-ext-qt-gstqtgl.h-instead-of-gst-gl-gstglf.patch \ - " - -SRC_URI[sha256sum] = "f71752dde434d9ec55fa5e8d2e2a3be3fc6eb5b34f397b065f84aead25b449a4" - -S = "${WORKDIR}/gst-plugins-good-${PV}" - -LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later" -LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \ - file://gst/replaygain/rganalysis.c;beginline=1;endline=23;md5=b60ebefd5b2f5a8e0cab6bfee391a5fe" - -DEPENDS += "gstreamer1.0-plugins-base libcap zlib" -RPROVIDES:${PN}-pulseaudio += "${PN}-pulse" -RPROVIDES:${PN}-soup += "${PN}-souphttpsrc" - -PACKAGECONFIG ??= " \ - ${GSTREAMER_ORC} \ - ${@bb.utils.filter('DISTRO_FEATURES', 'pulseaudio x11', d)} \ - ${@bb.utils.contains('TUNE_FEATURES', 'm64', 'asm', '', d)} \ - bz2 cairo flac gdk-pixbuf gudev jpeg lame libpng mpg123 soup speex taglib v4l2 \ -" - -X11DEPENDS = "virtual/libx11 libsm libxrender libxfixes libxdamage" -X11ENABLEOPTS = "-Dximagesrc=enabled -Dximagesrc-xshm=enabled -Dximagesrc-xfixes=enabled -Dximagesrc-xdamage=enabled" -X11DISABLEOPTS = "-Dximagesrc=disabled -Dximagesrc-xshm=disabled -Dximagesrc-xfixes=disabled -Dximagesrc-xdamage=disabled" - -QT5WAYLANDDEPENDS = "${@bb.utils.contains("DISTRO_FEATURES", "wayland", "qtwayland", "", d)}" - -PACKAGECONFIG[asm] = "-Dasm=enabled,-Dasm=disabled,nasm-native" -PACKAGECONFIG[bz2] = "-Dbz2=enabled,-Dbz2=disabled,bzip2" -PACKAGECONFIG[cairo] = "-Dcairo=enabled,-Dcairo=disabled,cairo" -PACKAGECONFIG[dv1394] = "-Ddv1394=enabled,-Ddv1394=disabled,libiec61883 libavc1394 libraw1394" -PACKAGECONFIG[flac] = "-Dflac=enabled,-Dflac=disabled,flac" -PACKAGECONFIG[gdk-pixbuf] = "-Dgdk-pixbuf=enabled,-Dgdk-pixbuf=disabled,gdk-pixbuf" -PACKAGECONFIG[gtk] = "-Dgtk3=enabled,-Dgtk3=disabled,gtk+3" -PACKAGECONFIG[gudev] = "-Dv4l2-gudev=enabled,-Dv4l2-gudev=disabled,libgudev" -PACKAGECONFIG[jack] = "-Djack=enabled,-Djack=disabled,jack" -PACKAGECONFIG[jpeg] = "-Djpeg=enabled,-Djpeg=disabled,jpeg" -PACKAGECONFIG[lame] = "-Dlame=enabled,-Dlame=disabled,lame" -PACKAGECONFIG[libpng] = "-Dpng=enabled,-Dpng=disabled,libpng" -PACKAGECONFIG[libv4l2] = "-Dv4l2-libv4l2=enabled,-Dv4l2-libv4l2=disabled,v4l-utils" -PACKAGECONFIG[mpg123] = "-Dmpg123=enabled,-Dmpg123=disabled,mpg123" -PACKAGECONFIG[pulseaudio] = "-Dpulse=enabled,-Dpulse=disabled,pulseaudio" -PACKAGECONFIG[qt5] = "-Dqt5=enabled,-Dqt5=disabled,qtbase qtdeclarative qtbase-native ${QT5WAYLANDDEPENDS}" -PACKAGECONFIG[soup] = "-Dsoup=enabled,-Dsoup=disabled,libsoup-2.4" -PACKAGECONFIG[speex] = "-Dspeex=enabled,-Dspeex=disabled,speex" -PACKAGECONFIG[rpi] = "-Drpicamsrc=enabled,-Drpicamsrc=disabled,userland" -PACKAGECONFIG[taglib] = "-Dtaglib=enabled,-Dtaglib=disabled,taglib" -PACKAGECONFIG[v4l2] = "-Dv4l2=enabled -Dv4l2-probe=true,-Dv4l2=disabled -Dv4l2-probe=false" -PACKAGECONFIG[vpx] = "-Dvpx=enabled,-Dvpx=disabled,libvpx" -PACKAGECONFIG[wavpack] = "-Dwavpack=enabled,-Dwavpack=disabled,wavpack" -PACKAGECONFIG[x11] = "${X11ENABLEOPTS},${X11DISABLEOPTS},${X11DEPENDS}" - -EXTRA_OEMESON += " \ - -Ddoc=disabled \ - -Daalib=disabled \ - -Ddirectsound=disabled \ - -Ddv=disabled \ - -Dlibcaca=disabled \ - -Doss=enabled \ - -Doss4=disabled \ - -Dosxaudio=disabled \ - -Dosxvideo=disabled \ - -Dshout2=disabled \ - -Dtwolame=disabled \ - -Dwaveform=disabled \ -" - -FILES:${PN}-equalizer += "${datadir}/gstreamer-1.0/presets/*.prs" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc deleted file mode 100755 index 1e90d84d0..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-packaging.inc +++ /dev/null @@ -1,70 +0,0 @@ -# This .inc file contains functionality for automatically splitting -# built plugins into individual packages for each plugin. A -meta -# package is also set up that has no files of its own, but contains -# the names of all plugin packages in its RDEPENDS list. -# -# This is mainly used by the gstreamer1.0-plugins-* plugin set recipes, -# but can be used in any recipe that produces GStreamer plugins. - -PACKAGESPLITFUNCS:prepend = " split_gstreamer10_packages " -PACKAGESPLITFUNCS:append = " set_gstreamer10_metapkg_rdepends " - -python split_gstreamer10_packages () { - gst_libdir = d.expand('${libdir}/gstreamer-1.0') - postinst = d.getVar('plugin_postinst') - glibdir = d.getVar('libdir') - - # GStreamer libraries - do_split_packages(d, glibdir, r'^lib(.*)\.so\.*', 'lib%s', 'GStreamer 1.0 %s library', extra_depends='', allow_links=True) - # GStreamer plugin shared objects - do_split_packages(d, gst_libdir, r'libgst(.*)\.so$', d.expand('${PN}-%s'), 'GStreamer 1.0 plugin for %s', postinst=postinst, extra_depends='') - # GObject introspection files for GStreamer plugins - do_split_packages(d, glibdir+'/girepository-1.0', r'Gst(.*)-1.0\.typelib$', d.expand('${PN}-%s-typelib'), 'GStreamer 1.0 typelib file for %s', postinst=postinst, extra_depends='') - # Static GStreamer libraries for development - do_split_packages(d, gst_libdir, r'libgst(.*)\.a$', d.expand('${PN}-%s-staticdev'), 'GStreamer 1.0 plugin for %s (static development files)', extra_depends='${PN}-staticdev') -} - -python set_gstreamer10_metapkg_rdepends () { - import os - import oe.utils - - # Go through all generated packages (excluding the main package and - # the -meta package itself) and add them to the -meta package as RDEPENDS. - - pn = d.getVar('PN') - metapkg = pn + '-meta' - d.setVar('ALLOW_EMPTY:' + metapkg, "1") - d.setVar('FILES:' + metapkg, "") - blacklist = [ pn, pn + '-meta' ] - metapkg_rdepends = [] - pkgdest = d.getVar('PKGDEST') - for pkg in oe.utils.packages_filter_out_system(d): - if pkg not in blacklist and pkg not in metapkg_rdepends: - # See if the package is empty by looking at the contents of its PKGDEST subdirectory. - # If this subdirectory is empty, then the package is. - # Empty packages do not get added to the meta package's RDEPENDS - pkgdir = os.path.join(pkgdest, pkg) - if os.path.exists(pkgdir): - dir_contents = os.listdir(pkgdir) or [] - else: - dir_contents = [] - is_empty = len(dir_contents) == 0 - if not is_empty: - metapkg_rdepends.append(pkg) - d.setVar('RDEPENDS:' + metapkg, ' '.join(metapkg_rdepends)) - d.setVar('DESCRIPTION:' + metapkg, pn + ' meta package') -} - -# each plugin-dev depends on PN-dev, plugin-staticdev on PN-staticdev -# so we need them even when empty (like in gst-plugins-good case) -ALLOW_EMPTY:${PN} = "1" -ALLOW_EMPTY:${PN}-dev = "1" -ALLOW_EMPTY:${PN}-staticdev = "1" - -PACKAGES += "${PN}-apps ${PN}-meta ${PN}-glib" - -FILES:${PN} = "" -FILES:${PN}-apps = "${bindir}" -FILES:${PN}-glib = "${datadir}/glib-2.0" - -RRECOMMENDS:${PN} += "${PN}-meta" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.18.2.bb deleted file mode 100755 index 8095510e9..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.18.2.bb +++ /dev/null @@ -1,39 +0,0 @@ -require gstreamer1.0-plugins-common.inc - -LIC_FILES_CHKSUM = "file://COPYING;md5=a6f89e2100d9b6cdffcea4f398e37343 \ - file://tests/check/elements/xingmux.c;beginline=1;endline=21;md5=4c771b8af188724855cb99cadd390068" - -LICENSE = "GPL-2.0-or-later & LGPL-2.1-or-later & LGPL-2.0-or-later" -LICENSE_FLAGS = "commercial" - -SRC_URI = " \ - https://gstreamer.freedesktop.org/src/gst-plugins-ugly/gst-plugins-ugly-${PV}.tar.xz \ - " -SRC_URI[sha256sum] = "a337a022ed472209b38cab5918dc2f4e7a6adc1f4afacd226a6345e5cb668bdb" - -S = "${WORKDIR}/gst-plugins-ugly-${PV}" - -DEPENDS += "gstreamer1.0-plugins-base" - -GST_PLUGIN_SET_HAS_EXAMPLES = "0" - -PACKAGECONFIG ??= " \ - ${GSTREAMER_ORC} \ - a52dec mpeg2dec \ -" - -PACKAGECONFIG[a52dec] = "-Da52dec=enabled,-Da52dec=disabled,liba52" -PACKAGECONFIG[amrnb] = "-Damrnb=enabled,-Damrnb=disabled,opencore-amr" -PACKAGECONFIG[amrwb] = "-Damrwbdec=enabled,-Damrwbdec=disabled,opencore-amr" -PACKAGECONFIG[cdio] = "-Dcdio=enabled,-Dcdio=disabled,libcdio" -PACKAGECONFIG[dvdread] = "-Ddvdread=enabled,-Ddvdread=disabled,libdvdread" -PACKAGECONFIG[mpeg2dec] = "-Dmpeg2dec=enabled,-Dmpeg2dec=disabled,mpeg2dec" -PACKAGECONFIG[x264] = "-Dx264=enabled,-Dx264=disabled,x264" - -EXTRA_OEMESON += " \ - -Ddoc=disabled \ - -Dsidplay=disabled \ -" - -FILES:${PN}-amrnb += "${datadir}/gstreamer-1.0/presets/GstAmrnbEnc.prs" -FILES:${PN}-x264 += "${datadir}/gstreamer-1.0/presets/GstX264Enc.prs" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-ptest.inc b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-ptest.inc deleted file mode 100755 index b69806704..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-ptest.inc +++ /dev/null @@ -1,23 +0,0 @@ -inherit ptest-gnome - -TEST_FILES_PATH = "${datadir}/installed-tests/gstreamer-1.0/test-files" -RUN_PTEST_FILE = "${D}${PTEST_PATH}/run-ptest" - -EXTRA_OEMESON += "-Dtest-files-path=${TEST_FILES_PATH}" - -GST_TEST_SUITE_NAME ?= "gstreamer-1.0" - -# Using do_install_ptest_base instead of do_install_ptest, since -# the default do_install_ptest_base is hardcoded to expect Makefiles. -do_install_ptest_base() { - # Generate run-ptest file - echo "#!/usr/bin/env sh" > "${RUN_PTEST_FILE}" - echo "gnome-desktop-testing-runner ${GST_TEST_SUITE_NAME}" >> "${RUN_PTEST_FILE}" - chmod 0755 "${RUN_PTEST_FILE}" - - # Install additional files required by tests - if [ -d "${S}/tests/files" ] ; then - install -d "${D}/${TEST_FILES_PATH}" - install -m 0644 "${S}/tests/files"/* "${D}/${TEST_FILES_PATH}" - fi -} diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-python_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-python_1.18.2.bb deleted file mode 100755 index 3b9efaafe..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-python_1.18.2.bb +++ /dev/null @@ -1,22 +0,0 @@ -SUMMARY = "Python bindings for GStreamer 1.0" -HOMEPAGE = "http://cgit.freedesktop.org/gstreamer/gst-python/" -SECTION = "multimedia" - -LICENSE = "LGPL-2.1-only" -LIC_FILES_CHKSUM = "file://COPYING;md5=c34deae4e395ca07e725ab0076a5f740" - -SRC_URI = "https://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.xz" -SRC_URI[sha256sum] = "e19d0f760b353e88161b3712193cffbd79bf1314418da792b5fec4d8ecef389c" - -DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base python3-pygobject" -RDEPENDS:${PN} += "gstreamer1.0 gstreamer1.0-plugins-base python3-pygobject" - -PNREAL = "gst-python" - -S = "${WORKDIR}/${PNREAL}-${PV}" - -# gobject-introspection is mandatory and cannot be configured -REQUIRED_DISTRO_FEATURES = "gobject-introspection-data" -UNKNOWN_CONFIGURE_WHITELIST:append = " introspection" - -inherit meson pkgconfig distutils3-base upstream-version-is-even gobject-introspection features_check diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.18.2.bb deleted file mode 100755 index bcb25e19f..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-rtsp-server_1.18.2.bb +++ /dev/null @@ -1,31 +0,0 @@ -SUMMARY = "A library on top of GStreamer for building an RTSP server" -HOMEPAGE = "http://cgit.freedesktop.org/gstreamer/gst-rtsp-server/" -SECTION = "multimedia" -LICENSE = "LGPL-2.0-only" -LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d" - -DEPENDS = "gstreamer1.0 gstreamer1.0-plugins-base" - -PNREAL = "gst-rtsp-server" - -SRC_URI = "https://gstreamer.freedesktop.org/src/${PNREAL}/${PNREAL}-${PV}.tar.xz" - -SRC_URI[sha256sum] = "973922aba65a1672a131527dee965fb09bab4bb996c351f0ee7f42f0d5b954e2" - -S = "${WORKDIR}/${PNREAL}-${PV}" - -inherit meson pkgconfig upstream-version-is-even gobject-introspection - -EXTRA_OEMESON += " \ - -Ddoc=disabled \ - -Dexamples=disabled \ - -Dtests=disabled \ -" - -GIR_MESON_ENABLE_FLAG = "enabled" -GIR_MESON_DISABLE_FLAG = "disabled" - -# Starting with 1.8.0 gst-rtsp-server includes dependency-less plugins as well -require gstreamer1.0-plugins-packaging.inc - -CVE_PRODUCT += "gst-rtsp-server" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.18.2.bb deleted file mode 100755 index 56fa435f8..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0-vaapi_1.18.2.bb +++ /dev/null @@ -1,52 +0,0 @@ -SUMMARY = "VA-API support to GStreamer" -DESCRIPTION = "gstreamer-vaapi consists of a collection of VA-API \ -based plugins for GStreamer and helper libraries: `vaapidecode', \ -`vaapiconvert', and `vaapisink'." - -REALPN = "gstreamer-vaapi" - -LICENSE = "LGPL-2.1-or-later" -LIC_FILES_CHKSUM = "file://COPYING.LIB;md5=4fbd65380cdd255951079008b364516c" - -SRC_URI = "https://gstreamer.freedesktop.org/src/${REALPN}/${REALPN}-${PV}.tar.xz" - -SRC_URI[sha256sum] = "8c7b2c74fda095d83dea67accde6a68ba9f608d97ed969fdcf278930f9b1c7c0" - -S = "${WORKDIR}/${REALPN}-${PV}" -DEPENDS = "libva gstreamer1.0 gstreamer1.0-plugins-base gstreamer1.0-plugins-bad" - -inherit meson pkgconfig features_check upstream-version-is-even - -REQUIRED_DISTRO_FEATURES ?= "opengl" - -EXTRA_OEMESON += " \ - -Ddoc=disabled \ - -Dexamples=disabled \ - -Dtests=enabled \ -" - -PACKAGES =+ "${PN}-tests" - -# OpenGL packageconfig factored out to make it easy for distros -# and BSP layers to pick either glx, egl, or no GL. By default, -# try detecting X11 first, and if found (with OpenGL), use GLX, -# otherwise try to check if EGL can be used. -PACKAGECONFIG_GL ?= "${@bb.utils.contains('DISTRO_FEATURES', 'x11 opengl', 'glx', \ - bb.utils.contains('DISTRO_FEATURES', 'opengl', 'egl', \ - '', d), d)}" - -PACKAGECONFIG ??= "drm encoders \ - ${PACKAGECONFIG_GL} \ - ${@bb.utils.filter('DISTRO_FEATURES', 'wayland x11', d)}" - -PACKAGECONFIG[drm] = "-Dwith_drm=yes,-Dwith_drm=no,udev libdrm" -PACKAGECONFIG[egl] = "-Dwith_egl=yes,-Dwith_egl=no,virtual/egl" -PACKAGECONFIG[encoders] = "-Dwith_encoders=yes,-Dwith_encoders=no" -PACKAGECONFIG[glx] = "-Dwith_glx=yes,-Dwith_glx=no,virtual/libgl" -PACKAGECONFIG[wayland] = "-Dwith_wayland=yes,-Dwith_wayland=no,wayland-native wayland wayland-protocols" -PACKAGECONFIG[x11] = "-Dwith_x11=yes,-Dwith_x11=no,virtual/libx11 libxrandr libxrender" - -FILES:${PN} += "${libdir}/gstreamer-*/*.so" -FILES:${PN}-dbg += "${libdir}/gstreamer-*/.debug" -FILES:${PN}-dev += "${libdir}/gstreamer-*/*.a" -FILES:${PN}-tests = "${bindir}/*" diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0001-gst-gstpluginloader.c-when-env-var-is-set-do-not-fal.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0001-gst-gstpluginloader.c-when-env-var-is-set-do-not-fal.patch deleted file mode 100755 index fe58e718a..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0001-gst-gstpluginloader.c-when-env-var-is-set-do-not-fal.patch +++ /dev/null @@ -1,66 +0,0 @@ -From fd8f49dba8c09d47425da80f5faab3bfa4a7c962 Mon Sep 17 00:00:00 2001 -From: Jose Quaresma -Date: Sat, 10 Oct 2020 19:09:03 +0000 -Subject: [PATCH 1/3] gstpluginloader: when env var is set do not fall through - to system plugin scanner - -If we set a custom GST_PLUGIN_SCANNER env var, then we probably want to use that and only that. - -Falling through to the one installed on the system is problamatic in cross-compilation -environemnts, regardless of whether one pointed to by the env var succeeded or failed. - -taken from: -http://cgit.openembedded.org/openembedded-core/commit/meta/recipes-multimedia/gstreamer/gstreamer1.0/0001-gst-gstpluginloader.c-when-env-var-is-set-do-not-fal.patch?id=0db7ba34ca41b107042306d13a6f0162885c123b - -Upstream-Status: Submitted [https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/669] -Signed-off-by: Jose Quaresma ---- - gst/gstpluginloader.c | 15 +++++++-------- - 1 file changed, 7 insertions(+), 8 deletions(-) - -diff --git a/gst/gstpluginloader.c b/gst/gstpluginloader.c -index d1e404d98..c626bf263 100644 ---- a/gst/gstpluginloader.c -+++ b/gst/gstpluginloader.c -@@ -464,20 +464,19 @@ gst_plugin_loader_spawn (GstPluginLoader * loader) - if (loader->child_running) - return TRUE; - -- /* Find the gst-plugin-scanner: first try the env-var if it is set, -- * otherwise use the installed version */ -+ /* Find the gst-plugin-scanner */ - env = g_getenv ("GST_PLUGIN_SCANNER_1_0"); - if (env == NULL) - env = g_getenv ("GST_PLUGIN_SCANNER"); - - if (env != NULL && *env != '\0') { -+ /* use the env-var if it is set */ - GST_LOG ("Trying GST_PLUGIN_SCANNER env var: %s", env); - helper_bin = g_strdup (env); - res = gst_plugin_loader_try_helper (loader, helper_bin); - g_free (helper_bin); -- } -- -- if (!res) { -+ } else { -+ /* use the installed version */ - GST_LOG ("Trying installed plugin scanner"); - - #ifdef G_OS_WIN32 -@@ -497,10 +496,10 @@ gst_plugin_loader_spawn (GstPluginLoader * loader) - #endif - res = gst_plugin_loader_try_helper (loader, helper_bin); - g_free (helper_bin); -+ } - -- if (!res) { -- GST_INFO ("No gst-plugin-scanner available, or not working"); -- } -+ if (!res) { -+ GST_INFO ("No gst-plugin-scanner available, or not working"); - } - - return loader->child_running; --- -2.29.2 - diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0002-Remove-unused-valgrind-detection.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0002-Remove-unused-valgrind-detection.patch deleted file mode 100755 index 96abef17b..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0002-Remove-unused-valgrind-detection.patch +++ /dev/null @@ -1,112 +0,0 @@ -From 598d108e2c438d8f2ecd3bf948fa3ebbd3681490 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Tim-Philipp=20M=C3=BCller?= -Date: Fri, 14 Aug 2020 16:38:26 +0100 -Subject: [PATCH 2/3] Remove unused valgrind detection - -Having this just to log a debug message in case we're -running inside valgrind doesn't seem very useful, and -the code that used to use this no longer exists it seems. - -Part-of: - -Upstream-Status: Backport [a2cbf75523cdf8a4df1baa7007d86ef455972245] - -Signed-off-by: Jose Quaresma ---- - gst/gst_private.h | 2 -- - gst/gstinfo.c | 39 --------------------------------------- - meson.build | 1 - - 3 files changed, 42 deletions(-) - -diff --git a/gst/gst_private.h b/gst/gst_private.h -index eefd044d9..8252ede51 100644 ---- a/gst/gst_private.h -+++ b/gst/gst_private.h -@@ -116,8 +116,6 @@ G_GNUC_INTERNAL gboolean _priv_plugin_deps_env_vars_changed (GstPlugin * plugin - - G_GNUC_INTERNAL gboolean _priv_plugin_deps_files_changed (GstPlugin * plugin); - --G_GNUC_INTERNAL gboolean _priv_gst_in_valgrind (void); -- - /* init functions called from gst_init(). */ - G_GNUC_INTERNAL void _priv_gst_quarks_initialize (void); - G_GNUC_INTERNAL void _priv_gst_mini_object_initialize (void); -diff --git a/gst/gstinfo.c b/gst/gstinfo.c -index 5d317877b..097f8b20d 100644 ---- a/gst/gstinfo.c -+++ b/gst/gstinfo.c -@@ -305,36 +305,6 @@ static gboolean pretty_tags = PRETTY_TAGS_DEFAULT; - static volatile gint G_GNUC_MAY_ALIAS __default_level = GST_LEVEL_DEFAULT; - static volatile gint G_GNUC_MAY_ALIAS __use_color = GST_DEBUG_COLOR_MODE_ON; - --/* FIXME: export this? */ --gboolean --_priv_gst_in_valgrind (void) --{ -- static enum -- { -- GST_VG_UNCHECKED, -- GST_VG_NO_VALGRIND, -- GST_VG_INSIDE -- } -- in_valgrind = GST_VG_UNCHECKED; -- -- if (in_valgrind == GST_VG_UNCHECKED) { --#ifdef HAVE_VALGRIND_VALGRIND_H -- if (RUNNING_ON_VALGRIND) { -- GST_CAT_INFO (GST_CAT_GST_INIT, "we're running inside valgrind"); -- in_valgrind = GST_VG_INSIDE; -- } else { -- GST_CAT_LOG (GST_CAT_GST_INIT, "not doing extra valgrind stuff"); -- in_valgrind = GST_VG_NO_VALGRIND; -- } --#else -- in_valgrind = GST_VG_NO_VALGRIND; --#endif -- g_assert (in_valgrind == GST_VG_NO_VALGRIND || -- in_valgrind == GST_VG_INSIDE); -- } -- return (in_valgrind == GST_VG_INSIDE); --} -- - static gchar * - _replace_pattern_in_gst_debug_file_name (gchar * name, const char *token, - guint val) -@@ -463,9 +433,6 @@ _priv_gst_debug_init (void) - _priv_GST_CAT_PROTECTION = - _gst_debug_category_new ("GST_PROTECTION", 0, "protection"); - -- /* print out the valgrind message if we're in valgrind */ -- _priv_gst_in_valgrind (); -- - env = g_getenv ("GST_DEBUG_OPTIONS"); - if (env != NULL) { - if (strstr (env, "full_tags") || strstr (env, "full-tags")) -@@ -2503,12 +2470,6 @@ gst_debug_construct_win_color (guint colorinfo) - return 0; - } - --gboolean --_priv_gst_in_valgrind (void) --{ -- return FALSE; --} -- - void - _gst_debug_dump_mem (GstDebugCategory * cat, const gchar * file, - const gchar * func, gint line, GObject * obj, const gchar * msg, -diff --git a/meson.build b/meson.build -index ce1921aa4..7a84d0981 100644 ---- a/meson.build -+++ b/meson.build -@@ -200,7 +200,6 @@ check_headers = [ - 'sys/wait.h', - 'ucontext.h', - 'unistd.h', -- 'valgrind/valgrind.h', - 'sys/resource.h', - 'sys/uio.h', - ] --- -2.29.2 - diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0003-meson-Add-option-for-installed-tests.patch b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0003-meson-Add-option-for-installed-tests.patch deleted file mode 100755 index bf5e57249..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0/0003-meson-Add-option-for-installed-tests.patch +++ /dev/null @@ -1,257 +0,0 @@ -From cf8077a7e3ab0ae236ebde79b7fc0b02eac658de Mon Sep 17 00:00:00 2001 -From: Carlos Rafael Giani -Date: Fri, 25 Oct 2019 00:06:26 +0200 -Subject: [PATCH 3/3] meson: Add option for installed tests - -This adds an option for producing installed versions of the unit tests. -These versions don't need meson to run (only a small shell script). This -makes it easier to run cross compiled tests on a target machine. - -Upstream-Status: Pending - -Signed-off-by: Carlos Rafael Giani ---- - build-aux/gen-installed-test-desc.py | 18 ++++++ - build-aux/gen-installed-test-shscript.py | 25 ++++++++ - meson_options.txt | 2 + - tests/check/meson.build | 46 +++++++++++++- - tests/files/testfile | 80 ++++++++++++++++++++++++ - 5 files changed, 170 insertions(+), 1 deletion(-) - create mode 100644 build-aux/gen-installed-test-desc.py - create mode 100644 build-aux/gen-installed-test-shscript.py - create mode 100644 tests/files/testfile - -diff --git a/build-aux/gen-installed-test-desc.py b/build-aux/gen-installed-test-desc.py -new file mode 100644 -index 000000000..69e8a0faf ---- /dev/null -+++ b/build-aux/gen-installed-test-desc.py -@@ -0,0 +1,18 @@ -+import sys -+import os -+import argparse -+ -+def write_template(filename, data): -+ with open(filename, 'w') as f: -+ f.write(data) -+ -+def build_template(testdir, testname): -+ return "[Test]\nType=session\nExec={}\n".format(os.path.join(testdir, testname)) -+ -+argparser = argparse.ArgumentParser(description='Generate installed-test data.') -+argparser.add_argument('--test-execdir', metavar='dir', required=True, help='Installed test directory') -+argparser.add_argument('--testname', metavar='name', required=True, help='Installed test name') -+argparser.add_argument('--output', metavar='file', required=True, help='Output file') -+args = argparser.parse_args() -+ -+write_template(args.output, build_template(args.test_execdir, args.testname)) -diff --git a/build-aux/gen-installed-test-shscript.py b/build-aux/gen-installed-test-shscript.py -new file mode 100644 -index 000000000..5da86fb37 ---- /dev/null -+++ b/build-aux/gen-installed-test-shscript.py -@@ -0,0 +1,25 @@ -+import sys -+import os -+import argparse -+ -+def write_template(filename, data): -+ with open(filename, 'w') as f: -+ f.write(data) -+ -+def build_template(testdir, testname): -+ return ''.join([ -+ "#!/usr/bin/env sh\n", -+ "export GST_STATE_IGNORE_ELEMENTS=''\n", -+ "export CK_DEFAULT_TIMEOUT=20\n", -+ "export GST_PLUGIN_LOADING_WHITELIST='gstreamer'\n", -+ "{}\n".format(os.path.join(testdir, testname)), -+ ]) -+ -+argparser = argparse.ArgumentParser(description='Generate installed-test data.') -+argparser.add_argument('--test-execdir', metavar='dir', required=True, help='Installed test directory') -+argparser.add_argument('--testname', metavar='name', required=True, help='Installed test name') -+argparser.add_argument('--output', metavar='file', required=True, help='Output file') -+args = argparser.parse_args() -+ -+write_template(args.output, build_template(args.test_execdir, args.testname)) -+os.chmod(args.output, 0o755) -diff --git a/meson_options.txt b/meson_options.txt -index 72c3997e2..346c423d4 100644 ---- a/meson_options.txt -+++ b/meson_options.txt -@@ -15,6 +15,8 @@ option('poisoning', type : 'boolean', value : false, description : 'Enable poiso - option('memory-alignment', type: 'combo', - choices : ['1', '2', '4', '8', '16', '32', '64', '128', '256', '512', '1024', '2048', '4096', '8192', 'malloc', 'pagesize'], - value: 'malloc') -+option('installed-tests', type : 'boolean', value : false, description : 'enable installed tests') -+option('test-files-path', type : 'string', description : 'Path where to find test files') - - # Feature options - option('check', type : 'feature', value : 'auto', description : 'Build unit test libraries') -diff --git a/tests/check/meson.build b/tests/check/meson.build -index a617cf159..e629131c5 100644 ---- a/tests/check/meson.build -+++ b/tests/check/meson.build -@@ -120,11 +120,17 @@ if add_languages('cpp', native: false, required: false) - ] - endif - -+test_files_path = get_option('test-files-path') -+if test_files_path == '' -+ test_files_path = meson.current_source_dir() + '/../files' -+endif -+message('Using path "@0@" as the path to read test files from'.format(test_files_path)) -+ - test_defines = [ - '-UG_DISABLE_ASSERT', - '-UG_DISABLE_CAST_CHECKS', - '-DGST_CHECK_TEST_ENVIRONMENT_BEACON="GST_STATE_IGNORE_ELEMENTS"', -- '-DTESTFILE="' + meson.current_source_dir() + '/meson.build"', -+ '-DTESTFILE="@0@"'.format(test_files_path + '/testfile'), - '-DGST_DISABLE_DEPRECATED', - ] - -@@ -138,6 +144,14 @@ endif - glib_deps = [gio_dep, gobject_dep, gmodule_dep, glib_dep] - gst_deps = [gst_dep, gst_base_dep, gst_check_dep, gst_net_dep, gst_controller_dep] - -+installed_tests_datadir = join_paths(prefix, get_option('datadir'), 'installed-tests', 'gstreamer-1.0') -+installed_tests_execdir = join_paths(prefix, libexecdir, 'installed-tests', 'gstreamer-1.0') -+installed_tests_enabled = get_option('installed-tests') -+ -+python = import('python').find_installation() -+gen_installed_test_desc = files('../../build-aux/gen-installed-test-desc.py') -+gen_installed_test_shscript = files('../../build-aux/gen-installed-test-shscript.py') -+ - foreach t : core_tests - fname = t[0] - test_name = fname.split('.')[0].underscorify() -@@ -151,8 +165,38 @@ foreach t : core_tests - include_directories : [configinc], - link_with : link_with_libs, - dependencies : test_deps + glib_deps + gst_deps, -+ install_dir: installed_tests_execdir, -+ install: installed_tests_enabled - ) - -+ if installed_tests_enabled -+ installed_test_shscript = test_name + '.sh' -+ shscript = custom_target (test_name + '_shscript', -+ output: installed_test_shscript, -+ command: [ -+ python, -+ gen_installed_test_shscript, -+ '--test-execdir=@0@'.format(installed_tests_execdir), -+ '--testname=@0@'.format(test_name), -+ '--output=@0@'.format(join_paths('@OUTDIR@', installed_test_shscript)), -+ ], -+ install: true, -+ install_dir: installed_tests_execdir) -+ -+ installed_test_desc = test_name + '.test' -+ data = custom_target(test_name + '_desc', -+ output: installed_test_desc, -+ command: [ -+ python, -+ gen_installed_test_desc, -+ '--test-execdir=@0@'.format(installed_tests_execdir), -+ '--testname=@0@'.format(installed_test_shscript), -+ '--output=@0@'.format(join_paths('@OUTDIR@', installed_test_desc)), -+ ], -+ install: true, -+ install_dir: installed_tests_datadir) -+ endif -+ - env = environment() - env.set('GST_PLUGIN_PATH_1_0', meson.build_root()) - env.set('GST_PLUGIN_SYSTEM_PATH_1_0', '') -diff --git a/tests/files/testfile b/tests/files/testfile -new file mode 100644 -index 000000000..89954e0e2 ---- /dev/null -+++ b/tests/files/testfile -@@ -0,0 +1,80 @@ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ -+................................................................................ --- -2.29.2 - diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0_1.18.2.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0_1.18.2.bb deleted file mode 100755 index a0da577f1..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-multimedia/gstreamer/gstreamer1.0_1.18.2.bb +++ /dev/null @@ -1,69 +0,0 @@ -SUMMARY = "GStreamer 1.0 multimedia framework" -DESCRIPTION = "GStreamer is a multimedia framework for encoding and decoding video and sound. \ -It supports a wide range of formats including mp3, ogg, avi, mpeg and quicktime." -HOMEPAGE = "http://gstreamer.freedesktop.org/" -BUGTRACKER = "https://bugzilla.gnome.org/enter_bug.cgi?product=Gstreamer" -SECTION = "multimedia" -LICENSE = "LGPL-2.0-or-later" - -DEPENDS = "glib-2.0 glib-2.0-native libxml2 bison-native flex-native" - -inherit meson pkgconfig gettext upstream-version-is-even gobject-introspection - -LIC_FILES_CHKSUM = "file://COPYING;md5=6762ed442b3822387a51c92d928ead0d \ - file://gst/gst.h;beginline=1;endline=21;md5=e059138481205ee2c6fc1c079c016d0d" - -S = "${WORKDIR}/gstreamer-${PV}" - -SRC_URI = "https://gstreamer.freedesktop.org/src/gstreamer/gstreamer-${PV}.tar.xz \ - file://0001-gst-gstpluginloader.c-when-env-var-is-set-do-not-fal.patch \ - file://0002-Remove-unused-valgrind-detection.patch \ - file://0003-meson-Add-option-for-installed-tests.patch \ - " -SRC_URI[sha256sum] = "66cdeb4f970c2e55932a2f427177d438fe2c55c0b6d29e80fda80263f2ae5446" - -PACKAGECONFIG ??= "${@bb.utils.contains('PTEST_ENABLED', '1', 'tests', '', d)} \ - check \ - debug \ - tools" - -PACKAGECONFIG[debug] = "-Dgst_debug=true,-Dgst_debug=false" -PACKAGECONFIG[tracer-hooks] = "-Dtracer_hooks=true,-Dtracer_hooks=false" -PACKAGECONFIG[check] = "-Dcheck=enabled,-Dcheck=disabled" -PACKAGECONFIG[tests] = "-Dtests=enabled -Dinstalled-tests=true,-Dtests=disabled -Dinstalled-tests=false" -PACKAGECONFIG[unwind] = "-Dlibunwind=enabled,-Dlibunwind=disabled,libunwind" -PACKAGECONFIG[dw] = "-Dlibdw=enabled,-Dlibdw=disabled,elfutils" -PACKAGECONFIG[bash-completion] = "-Dbash-completion=enabled,-Dbash-completion=disabled,bash-completion" -PACKAGECONFIG[tools] = "-Dtools=enabled,-Dtools=disabled" -PACKAGECONFIG[setcap] = "-Dptp-helper-permissions=capabilities,,libcap libcap-native" - -# TODO: put this in a gettext.bbclass patch -def gettext_oemeson(d): - if d.getVar('USE_NLS') == 'no': - return '-Dnls=disabled' - # Remove the NLS bits if USE_NLS is no or INHIBIT_DEFAULT_DEPS is set - if d.getVar('INHIBIT_DEFAULT_DEPS') and not oe.utils.inherits(d, 'cross-canadian'): - return '-Dnls=disabled' - return '-Dnls=enabled' - -EXTRA_OEMESON += " \ - -Ddoc=disabled \ - -Dexamples=disabled \ - -Ddbghelp=disabled \ - ${@gettext_oemeson(d)} \ -" - -GIR_MESON_ENABLE_FLAG = "enabled" -GIR_MESON_DISABLE_FLAG = "disabled" - -PACKAGES += "${PN}-bash-completion" - -# Add the core element plugins to the main package -FILES:${PN} += "${libdir}/gstreamer-1.0/*.so" -FILES:${PN}-dev += "${libdir}/gstreamer-1.0/*.a ${libdir}/gstreamer-1.0/include" -FILES:${PN}-bash-completion += "${datadir}/bash-completion/completions/ ${datadir}/bash-completion/helpers/gst*" -FILES:${PN}-dbg += "${datadir}/gdb ${datadir}/gstreamer-1.0/gdb" - -CVE_PRODUCT = "gstreamer" - -require gstreamer1.0-ptest.inc diff --git a/meta-webos-backports/meta-webos-backports-3.3/recipes-support/libsrtp/libsrtp_2.3.0.bb b/meta-webos-backports/meta-webos-backports-3.3/recipes-support/libsrtp/libsrtp_2.3.0.bb deleted file mode 100644 index ccb1a54ba..000000000 --- a/meta-webos-backports/meta-webos-backports-3.3/recipes-support/libsrtp/libsrtp_2.3.0.bb +++ /dev/null @@ -1,21 +0,0 @@ -DESCRIPTION = "library implementing Secure RTP (RFC 3711)" -HOMEPAGE = "https://github.com/cisco/libsrtp" -SECTION = "libs" - -LICENSE = "BSD-3-Clause" -LIC_FILES_CHKSUM = "file://LICENSE;md5=2909fcf6f09ffff8430463d91c08c4e1" - -S = "${WORKDIR}/git" -SRCREV = "d02d21111e379c297e93a9033d7b653135f732ee" -SRC_URI = "git://github.com/cisco/libsrtp.git;branch=main" - -inherit autotools pkgconfig - -EXTRA_OEMAKE += "shared_library" - -do_configure:prepend() { - cp ${STAGING_DATADIR_NATIVE}/automake-*/ar-lib ${S} -} - -ALLOW_EMPTY:${PN} = "1" - diff --git a/meta-webos/conf/layer.conf b/meta-webos/conf/layer.conf index 2e2fff1ef..ad59be6ec 100644 --- a/meta-webos/conf/layer.conf +++ b/meta-webos/conf/layer.conf @@ -20,7 +20,6 @@ LAYERDEPENDS_meta-webos = " \ networking-layer \ multimedia-layer \ meta-python \ - meta-webos-backports-3.3 \ meta-webos-backports-3.4 \ meta-webos-backports-4.0 \ " From b0c42526b7bf095ff7addc8ad85cd16676750ba4 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sat, 31 Oct 2020 08:22:18 -0700 Subject: [PATCH 0565/2022] mesa=webosrpi6 (update patch to apply on 20.3.1 version) :Release Notes: :Detailed Notes: Update patch to apply to fix: ERROR: mesa-2_20.3.1-r0 do_patch: Command Error: 'quilt --quiltrc /jenkins/mjansa/build/webos/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/mesa/2_20.3.1-r0/recipe-sysroot-native/etc/quiltrc push' exited with 0 Output: Applying patch 0001-implement-drm_create_linear_prime_buffer.patch patching file include/GL/internal/dri_interface.h Hunk #1 succeeded at 1585 (offset 6 lines). patching file src/egl/drivers/dri2/egl_dri2.c Hunk #1 succeeded at 3177 (offset -3 lines). Hunk #2 succeeded at 3198 (offset -3 lines). patching file src/egl/drivers/dri2/platform_android.c Hunk #1 FAILED at 611. 1 out of 1 hunk FAILED -- rejects in file src/egl/drivers/dri2/platform_android.c patching file src/egl/wayland/wayland-drm/meson.build patching file src/egl/wayland/wayland-drm/wayland-drm.c patching file src/egl/wayland/wayland-drm/wayland-drm.h patching file src/egl/wayland/wayland-drm/wayland-drm.xml patching file src/gallium/frontends/dri/dri2.c Hunk #1 FAILED at 1357. 1 out of 1 hunk FAILED -- rejects in file src/gallium/frontends/dri/dri2.c patching file src/gbm/backends/dri/gbm_dri.c patching file src/loader/loader_dri3_helper.c Hunk #1 succeeded at 1689 (offset 50 lines). patching file src/mesa/drivers/dri/i915/intel_screen.c patching file src/mesa/drivers/dri/i965/intel_screen.c Hunk #1 succeeded at 1241 (offset 6 lines). Patch 0001-implement-drm_create_linear_prime_buffer.patch does not apply (enforce with -f) ERROR: Logfile of failure stored in: /jenkins/mjansa/build/webos/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/mesa/2_20.3.1-r0/temp/log.do_patch.72336 ERROR: Task (/jenkins/mjansa/build/webos/hardknott/oe-core/meta/recipes-graphics/mesa/mesa_20.3.1.bb:do_patch) failed with exit code '1' :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I612bc20c2e61b5b7693b4b69c5989225e79c6c05 --- ...ement-drm_create_linear_prime_buffer.patch | 57 +++++++------------ .../recipes-graphics/mesa/mesa_%.bbappend | 2 +- 2 files changed, 23 insertions(+), 36 deletions(-) diff --git a/meta-webos-raspberrypi/recipes-graphics/mesa/mesa/0001-implement-drm_create_linear_prime_buffer.patch b/meta-webos-raspberrypi/recipes-graphics/mesa/mesa/0001-implement-drm_create_linear_prime_buffer.patch index c7f84075f..b5e0c0db2 100644 --- a/meta-webos-raspberrypi/recipes-graphics/mesa/mesa/0001-implement-drm_create_linear_prime_buffer.patch +++ b/meta-webos-raspberrypi/recipes-graphics/mesa/mesa/0001-implement-drm_create_linear_prime_buffer.patch @@ -1,4 +1,4 @@ -From 04404c2a1195fa9acd4ace855bcdee0da61c8413 Mon Sep 17 00:00:00 2001 +From c36987db9f67f451b2569eb35337318c1e3eb7ca Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 7 Feb 2020 07:10:42 -0800 Subject: [PATCH] implement drm_create_linear_prime_buffer @@ -7,23 +7,22 @@ Signed-off-by: Martin Jansa --- include/GL/internal/dri_interface.h | 1 + src/egl/drivers/dri2/egl_dri2.c | 3 ++- - src/egl/drivers/dri2/platform_android.c | 1 + src/egl/wayland/wayland-drm/meson.build | 1 + src/egl/wayland/wayland-drm/wayland-drm.c | 28 +++++++++++++++++---- src/egl/wayland/wayland-drm/wayland-drm.h | 2 +- src/egl/wayland/wayland-drm/wayland-drm.xml | 12 +++++++++ - src/gallium/state_trackers/dri/dri2.c | 19 +++++++++++--- + src/gallium/frontends/dri/dri2.c | 19 +++++++++++--- src/gbm/backends/dri/gbm_dri.c | 1 + src/loader/loader_dri3_helper.c | 1 + src/mesa/drivers/dri/i915/intel_screen.c | 2 +- src/mesa/drivers/dri/i965/intel_screen.c | 2 +- - 12 files changed, 61 insertions(+), 12 deletions(-) + 11 files changed, 60 insertions(+), 12 deletions(-) diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h -index e40106575c0..6e0ac60cd18 100644 +index 39d5dd07533..11a6a230905 100644 --- a/include/GL/internal/dri_interface.h +++ b/include/GL/internal/dri_interface.h -@@ -1579,6 +1579,7 @@ struct __DRIimageExtensionRec { +@@ -1585,6 +1585,7 @@ struct __DRIimageExtensionRec { */ __DRIimage *(*createImageFromFds)(__DRIscreen *screen, int width, int height, int fourcc, @@ -32,10 +31,10 @@ index e40106575c0..6e0ac60cd18 100644 int *strides, int *offsets, void *loaderPrivate); diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c -index 00d11b292e4..bf45b9f2f8a 100644 +index df5e3542a00..c869bd4f18b 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c -@@ -3160,7 +3160,7 @@ dri2_destroy_image_khr(_EGLDriver *drv, _EGLDisplay *disp, _EGLImage *image) +@@ -3177,7 +3177,7 @@ dri2_destroy_image_khr(_EGLDisplay *disp, _EGLImage *image) static void dri2_wl_reference_buffer(void *user_data, uint32_t name, int fd, @@ -44,7 +43,7 @@ index 00d11b292e4..bf45b9f2f8a 100644 { _EGLDisplay *disp = user_data; struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); -@@ -3181,6 +3181,7 @@ dri2_wl_reference_buffer(void *user_data, uint32_t name, int fd, +@@ -3198,6 +3198,7 @@ dri2_wl_reference_buffer(void *user_data, uint32_t name, int fd, buffer->width, buffer->height, buffer->format, @@ -52,26 +51,14 @@ index 00d11b292e4..bf45b9f2f8a 100644 &fd, 1, buffer->stride, buffer->offset, -diff --git a/src/egl/drivers/dri2/platform_android.c b/src/egl/drivers/dri2/platform_android.c -index 6f90fd46688..3cd3c845717 100644 ---- a/src/egl/drivers/dri2/platform_android.c -+++ b/src/egl/drivers/dri2/platform_android.c -@@ -631,6 +631,7 @@ get_back_bo(struct dri2_egl_surface *dri2_surf) - dri2_surf->base.Width, - dri2_surf->base.Height, - fourcc, -+ DRM_FORMAT_MOD_INVALID, - fds, - num_fds, - &pitch, diff --git a/src/egl/wayland/wayland-drm/meson.build b/src/egl/wayland/wayland-drm/meson.build -index 983bf55fac8..44efe6662c8 100644 +index b4782a013c9..2b400b8fa49 100644 --- a/src/egl/wayland/wayland-drm/meson.build +++ b/src/egl/wayland/wayland-drm/meson.build @@ -45,6 +45,7 @@ libwayland_drm = static_library( 'wayland_drm', ['wayland-drm.c', wayland_drm_protocol_c, wayland_drm_server_protocol_h], - c_args : c_vis_args, + gnu_symbol_visibility : 'hidden', + include_directories : [inc_wayland_drm, inc_include], dependencies : [dep_wayland_server], build_by_default : false, @@ -197,11 +184,11 @@ index eaf2654ab26..d6913d680ba 100644 -diff --git a/src/gallium/state_trackers/dri/dri2.c b/src/gallium/state_trackers/dri/dri2.c -index d2032dc1e12..26ec2cc9863 100644 ---- a/src/gallium/state_trackers/dri/dri2.c -+++ b/src/gallium/state_trackers/dri/dri2.c -@@ -1356,13 +1356,26 @@ dri2_from_planar(__DRIimage *image, int plane, void *loaderPrivate) +diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c +index 5c935e74438..06e361cac60 100644 +--- a/src/gallium/frontends/dri/dri2.c ++++ b/src/gallium/frontends/dri/dri2.c +@@ -1432,13 +1432,26 @@ dri2_from_planar(__DRIimage *image, int plane, void *loaderPrivate) return img; } @@ -228,11 +215,11 @@ index d2032dc1e12..26ec2cc9863 100644 return dri2_create_image_from_fd(screen, width, height, fourcc, - DRM_FORMAT_MOD_INVALID, fds, num_fds, + modifier, fds, num_fds, - strides, offsets, NULL, loaderPrivate); + strides, offsets, false, NULL, loaderPrivate); } diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c -index bc68f66766e..856167015bd 100644 +index b5634741554..9da1e3f56d2 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c @@ -953,6 +953,7 @@ gbm_dri_bo_import(struct gbm_device *gbm, @@ -244,10 +231,10 @@ index bc68f66766e..856167015bd 100644 &stride, &offset, NULL); diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c -index 2e1603c3fe2..28867c73863 100644 +index ccf8d1795e7..9cd2b1b9daf 100644 --- a/src/loader/loader_dri3_helper.c +++ b/src/loader/loader_dri3_helper.c -@@ -1617,6 +1617,7 @@ loader_dri3_create_image(xcb_connection_t *c, +@@ -1689,6 +1689,7 @@ loader_dri3_create_image(xcb_connection_t *c, bp_reply->width, bp_reply->height, image_format_to_fourcc(format), @@ -256,7 +243,7 @@ index 2e1603c3fe2..28867c73863 100644 &stride, &offset, loaderPrivate); close(fds[0]); diff --git a/src/mesa/drivers/dri/i915/intel_screen.c b/src/mesa/drivers/dri/i915/intel_screen.c -index bdf97522a05..6d42d186365 100644 +index 296f24eadd0..d86213350a0 100644 --- a/src/mesa/drivers/dri/i915/intel_screen.c +++ b/src/mesa/drivers/dri/i915/intel_screen.c @@ -586,7 +586,7 @@ intel_create_image_from_names(__DRIscreen *screen, @@ -269,10 +256,10 @@ index bdf97522a05..6d42d186365 100644 void *loaderPrivate) { diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c -index 9f7e112aee1..7b36d9d83c1 100644 +index 4492d43c040..0d85fd6206a 100644 --- a/src/mesa/drivers/dri/i965/intel_screen.c +++ b/src/mesa/drivers/dri/i965/intel_screen.c -@@ -1235,7 +1235,7 @@ intel_create_image_from_fds_common(__DRIscreen *dri_screen, +@@ -1241,7 +1241,7 @@ intel_create_image_from_fds_common(__DRIscreen *dri_screen, static __DRIimage * intel_create_image_from_fds(__DRIscreen *dri_screen, diff --git a/meta-webos-raspberrypi/recipes-graphics/mesa/mesa_%.bbappend b/meta-webos-raspberrypi/recipes-graphics/mesa/mesa_%.bbappend index b4904f1c1..b747c246c 100644 --- a/meta-webos-raspberrypi/recipes-graphics/mesa/mesa_%.bbappend +++ b/meta-webos-raspberrypi/recipes-graphics/mesa/mesa_%.bbappend @@ -1,6 +1,6 @@ # Copyright (c) 2020-2022 LG Electronics, Inc. -EXTENDPRAUTO:append = "webosrpi4" +EXTENDPRAUTO:append = "webosrpi6" FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" From 9608a50e7502ca0c8f44de134d4a94a3c332e49c Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sat, 31 Oct 2020 04:11:11 -0700 Subject: [PATCH 0566/2022] gstreamer*: rename bbappends to match new 1.18.0 version from oe-core MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit :Release Notes: See https://git.openembedded.org/openembedded-core/commit/?id=4d74baf4f56771215bc6350bfb37d24d327ab91b and following commits. :Detailed Notes: Remove patches which doesn't apply and aren't mandatory for build testing this - leave that to multimedia team to resolve (they don't even have proper git headers making it annoying to work with). Update the other patches to apply to resolve build issues (e.g. gstreamer1.0 patch is needed by g-media-pipeline. 0001-elementfactory-add-GST-ELEMENT-FACTORY-TYPE-HARDWARE.patch was resolved by upstream commit: commit 9707db909d1438d9a1bc85554be8a2a741be4771 Author: Víctor Manuel Jáquez Leal Date: Sat Nov 2 15:06:28 2019 +0100 Subject: elementfactory: add GST_ELEMENT_FACTORY_TYPE_HARDWARE 0001-playbin2-handle-GST-PLAY-FLAG-FORCE-SW-DECODERS.patch was resolved by upstream commit: commit f3182a88b169653aff10b97f730fbf5f7cb655c2 Author: Víctor Manuel Jáquez Leal Date: Sun Nov 3 15:37:44 2019 +0100 Subject: playbin2: handle GST_PLAY_FLAG_FORCE_SW_DECODERS 0004-rtpmanagerbad-add-RTP-streaming-elements.patch was resolved by upstream commit: commit 3ef737605a3df19c4d52736203038037bcaf4ae2 Author: Marc Leeman Date: Mon Jun 3 20:08:23 2019 +0000 Subject: rtpmanagerbad: add RTP streaming elements :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I820449f47a544dcf73c95a96e3ac0df0724afaf7 --- ...end => gstreamer1.0-libav_1.18.%.bbappend} | 0 ...tive-resolution-change-in-seek-issue.patch | 22 +- .../0003-decrease-ranking-of-omxh264dec.patch | 18 +- ...ppend => gstreamer1.0-omx_1.18.%.bbappend} | 1 - .../gstreamer1.0-plugins-bad_1.16.%.bbappend | 16 - .../gstreamer1.0-plugins-bad_1.18.%.bbappend | 9 + ...verer-Add-force-sw-decoders-property.patch | 20 +- ...ndle-GST-PLAY-FLAG-FORCE-SW-DECODERS.patch | 365 --- ...gstreamer1.0-plugins-base_1.18.%.bbappend} | 1 - ...gstreamer1.0-plugins-good_1.18.%.bbappend} | 0 ...gstreamer1.0-plugins-ugly_1.18.%.bbappend} | 0 ...dd-GST-ELEMENT-FACTORY-TYPE-HARDWARE.patch | 49 - ....bbappend => gstreamer1.0_1.18.%.bbappend} | 6 - .../include/webos-preferred-versions.inc | 4 +- ...anagerbad-add-RTP-streaming-elements.patch | 1964 ----------------- ... gstreamer1.0-plugins-bad_1.18.%.bbappend} | 1 - ...gstreamer1.0-plugins-base_1.18.%.bbappend} | 0 ...gstreamer1.0-plugins-good_1.18.%.bbappend} | 0 ...-support-for-seamless-seek-trickplay.patch | 64 +- ....bbappend => gstreamer1.0_1.18.%.bbappend} | 0 20 files changed, 86 insertions(+), 2454 deletions(-) rename meta-webos-raspberrypi/recipes-multimedia/gstreamer/{gstreamer1.0-libav_1.16.%.bbappend => gstreamer1.0-libav_1.18.%.bbappend} (100%) rename meta-webos-raspberrypi/recipes-multimedia/gstreamer/{gstreamer1.0-omx_1.16.%.bbappend => gstreamer1.0-omx_1.18.%.bbappend} (94%) delete mode 100644 meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend create mode 100644 meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.%.bbappend delete mode 100644 meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-playbin2-handle-GST-PLAY-FLAG-FORCE-SW-DECODERS.patch rename meta-webos-raspberrypi/recipes-multimedia/gstreamer/{gstreamer1.0-plugins-base_1.16.%.bbappend => gstreamer1.0-plugins-base_1.18.%.bbappend} (91%) rename meta-webos-raspberrypi/recipes-multimedia/gstreamer/{gstreamer1.0-plugins-good_1.16.%.bbappend => gstreamer1.0-plugins-good_1.18.%.bbappend} (100%) rename meta-webos-raspberrypi/recipes-multimedia/gstreamer/{gstreamer1.0-plugins-ugly_1.16.%.bbappend => gstreamer1.0-plugins-ugly_1.18.%.bbappend} (100%) delete mode 100644 meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0/0001-elementfactory-add-GST-ELEMENT-FACTORY-TYPE-HARDWARE.patch rename meta-webos-raspberrypi/recipes-multimedia/gstreamer/{gstreamer1.0_1.16.%.bbappend => gstreamer1.0_1.18.%.bbappend} (71%) delete mode 100644 meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-rtpmanagerbad-add-RTP-streaming-elements.patch rename meta-webos/recipes-multimedia/gstreamer/{gstreamer1.0-plugins-bad_1.16.%.bbappend => gstreamer1.0-plugins-bad_1.18.%.bbappend} (84%) rename meta-webos/recipes-multimedia/gstreamer/{gstreamer1.0-plugins-base_1.16.%.bbappend => gstreamer1.0-plugins-base_1.18.%.bbappend} (100%) rename meta-webos/recipes-multimedia/gstreamer/{gstreamer1.0-plugins-good_1.16.%.bbappend => gstreamer1.0-plugins-good_1.18.%.bbappend} (100%) rename meta-webos/recipes-multimedia/gstreamer/{gstreamer1.0_1.16.%.bbappend => gstreamer1.0_1.18.%.bbappend} (100%) diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.18.%.bbappend similarity index 100% rename from meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.16.%.bbappend rename to meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-libav_1.18.%.bbappend diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-fix-adaptive-resolution-change-in-seek-issue.patch b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-fix-adaptive-resolution-change-in-seek-issue.patch index 239490415..e449c003a 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-fix-adaptive-resolution-change-in-seek-issue.patch +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-fix-adaptive-resolution-change-in-seek-issue.patch @@ -1,4 +1,4 @@ -From 3381f78b7482f35695a58843b18a9ef48ffd5b40 Mon Sep 17 00:00:00 2001 +From d8e81ff9b9be0c66a68980621c2ceb3b079130bb Mon Sep 17 00:00:00 2001 From: Pankaj Maharana Date: Wed, 8 Aug 2018 12:01:02 +0530 Subject: [PATCH] fix adaptive resolution change in seek issue @@ -29,10 +29,10 @@ Upstream-Status: Inappropriate 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c -index 812eb29..9e347b3 100644 +index dc39c4c..e54e83a 100644 --- a/omx/gstomxvideodec.c +++ b/omx/gstomxvideodec.c -@@ -86,6 +86,7 @@ enum +@@ -88,6 +88,7 @@ enum { PROP_0, PROP_INTERNAL_ENTROPY_BUFFERS, @@ -40,7 +40,7 @@ index 812eb29..9e347b3 100644 }; #define GST_OMX_VIDEO_DEC_INTERNAL_ENTROPY_BUFFERS_DEFAULT (5) -@@ -104,16 +105,16 @@ static void +@@ -106,16 +107,16 @@ static void gst_omx_video_dec_set_property (GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { @@ -60,7 +60,7 @@ index 812eb29..9e347b3 100644 default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; -@@ -124,16 +125,16 @@ static void +@@ -126,16 +127,16 @@ static void gst_omx_video_dec_get_property (GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { @@ -80,7 +80,7 @@ index 812eb29..9e347b3 100644 default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; -@@ -162,6 +163,11 @@ gst_omx_video_dec_class_init (GstOMXVideoDecClass * klass) +@@ -164,6 +165,11 @@ gst_omx_video_dec_class_init (GstOMXVideoDecClass * klass) GST_PARAM_MUTABLE_READY)); #endif @@ -92,7 +92,7 @@ index 812eb29..9e347b3 100644 element_class->change_state = GST_DEBUG_FUNCPTR (gst_omx_video_dec_change_state); -@@ -2538,15 +2544,17 @@ gst_omx_video_dec_set_format (GstVideoDecoder * decoder, +@@ -2786,15 +2792,17 @@ gst_omx_video_dec_set_format (GstVideoDecoder * decoder, } if (needs_disable && is_format_change) { @@ -112,9 +112,9 @@ index 812eb29..9e347b3 100644 +skip_disable: port_def.format.video.nFrameWidth = info->width; - port_def.format.video.nFrameHeight = info->height; + port_def.format.video.nFrameHeight = GST_VIDEO_INFO_FIELD_HEIGHT (info); port_def.format.video.xFramerate = framerate_q16; -@@ -2731,7 +2739,8 @@ gst_omx_video_dec_handle_frame (GstVideoDecoder * decoder, +@@ -2984,7 +2992,8 @@ gst_omx_video_dec_handle_frame (GstVideoDecoder * decoder, return GST_FLOW_OK; } @@ -124,7 +124,7 @@ index 812eb29..9e347b3 100644 if (!gst_omx_video_dec_enable (self, frame->input_buffer)) goto enable_error; } -@@ -3052,9 +3061,16 @@ release_error: +@@ -3297,9 +3306,16 @@ release_error: static GstFlowReturn gst_omx_video_dec_drain (GstVideoDecoder * decoder) { @@ -144,7 +144,7 @@ index 812eb29..9e347b3 100644 } diff --git a/omx/gstomxvideodec.h b/omx/gstomxvideodec.h -index cb70e02..9f69130 100644 +index df441d9..4c188c7 100644 --- a/omx/gstomxvideodec.h +++ b/omx/gstomxvideodec.h @@ -100,6 +100,8 @@ struct _GstOMXVideoDec diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-decrease-ranking-of-omxh264dec.patch b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-decrease-ranking-of-omxh264dec.patch index 978a7cbab..4f130a685 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-decrease-ranking-of-omxh264dec.patch +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-decrease-ranking-of-omxh264dec.patch @@ -1,7 +1,17 @@ -diff -ruN a/config/rpi/gstomx.conf b/config/rpi/gstomx.conf ---- a/config/rpi/gstomx.conf 2020-08-13 15:29:07.501920678 +0000 -+++ b/config/rpi/gstomx.conf 2020-08-13 15:22:35.858037217 +0000 -@@ -29,7 +29,7 @@ +From 06988b1e2c29937fbcc4a85f6693e1b0e8726682 Mon Sep 17 00:00:00 2001 +From: "divvya.rosna" +Date: Thu, 13 Aug 2020 05:42:37 +0000 +Subject: [PATCH] rpi : mesa=webosrpi3 webruntime=webosrpi6 + +--- + config/rpi/gstomx.conf | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/config/rpi/gstomx.conf b/config/rpi/gstomx.conf +index 2508dae..da24611 100644 +--- a/config/rpi/gstomx.conf ++++ b/config/rpi/gstomx.conf +@@ -29,7 +29,7 @@ hacks=no-component-role type-name=GstOMXH264Dec core-name=/usr/lib/libopenmaxil.so component-name=OMX.broadcom.video_decode diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.18.%.bbappend similarity index 94% rename from meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.%.bbappend rename to meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.18.%.bbappend index b751a6465..3f41c580f 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx_1.18.%.bbappend @@ -26,7 +26,6 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI:append:rpi = " \ file://0001-fix-adaptive-resolution-change-in-seek-issue.patch \ - file://0002-fix-brcmegl-dependencies-from-configure.patch \ file://0003-decrease-ranking-of-omxh264dec.patch \ " diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend deleted file mode 100644 index 693438497..000000000 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend +++ /dev/null @@ -1,16 +0,0 @@ -# Copyright (c) 2018-2022 LG Electronics, Inc. - -EXTENDPRAUTO:append:rpi = "webosrpi7" - -FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" - -DEPENDS:append:rpi = " webos-wayland-extensions" - -PACKAGECONFIG:append:rpi = " kms wayland" - -PACKAGECONFIG:remove:rpi = "faad" - -SRC_URI:append:rpi = " \ - file://0001-waylandsink-remove-unsupported-subcompositor.patch \ - file://0001-rtpmanagerbad-add-RTP-streaming-elements.patch \ -" diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.%.bbappend new file mode 100644 index 000000000..578d00b62 --- /dev/null +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.%.bbappend @@ -0,0 +1,9 @@ +# Copyright (c) 2018-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append:rpi = "webosrpi5" + +DEPENDS:append:rpi = " webos-wayland-extensions" + +PACKAGECONFIG:append:rpi = " kms wayland" + +PACKAGECONFIG:remove:rpi = "faad" diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-discoverer-Add-force-sw-decoders-property.patch b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-discoverer-Add-force-sw-decoders-property.patch index 9c8847de8..4371da3b6 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-discoverer-Add-force-sw-decoders-property.patch +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-discoverer-Add-force-sw-decoders-property.patch @@ -1,4 +1,4 @@ -From 33bc6e2bb547168b7ea143c47fa14bbbbb4df2cf Mon Sep 17 00:00:00 2001 +From 3f01fa06fa77a42bcdf7b07b89655d3d99283952 Mon Sep 17 00:00:00 2001 From: Jimmy Ohn Date: Mon, 5 Oct 2020 15:12:24 +0900 Subject: [PATCH] ose: com.webos.service.mediaindexer=2 webos-initscript=54 @@ -9,7 +9,7 @@ Subject: [PATCH] ose: com.webos.service.mediaindexer=2 webos-initscript=54 2 files changed, 38 insertions(+), 2 deletions(-) diff --git a/gst-libs/gst/pbutils/gstdiscoverer.c b/gst-libs/gst/pbutils/gstdiscoverer.c -index ea4b009..1ee2eda 100644 +index 60e54127b..3b51545da 100644 --- a/gst-libs/gst/pbutils/gstdiscoverer.c +++ b/gst-libs/gst/pbutils/gstdiscoverer.c @@ -143,6 +143,7 @@ struct _GstDiscovererPrivate @@ -57,7 +57,7 @@ index ea4b009..1ee2eda 100644 /* signals */ /** * GstDiscoverer::finished: -@@ -348,6 +365,7 @@ gst_discoverer_init (GstDiscoverer * dc) +@@ -347,6 +364,7 @@ gst_discoverer_init (GstDiscoverer * dc) dc->priv->timeout = DEFAULT_PROP_TIMEOUT; dc->priv->use_cache = DEFAULT_PROP_USE_CACHE; @@ -65,7 +65,7 @@ index ea4b009..1ee2eda 100644 dc->priv->async = FALSE; g_mutex_init (&dc->priv->lock); -@@ -490,6 +508,11 @@ gst_discoverer_set_property (GObject * object, guint prop_id, +@@ -489,6 +507,11 @@ gst_discoverer_set_property (GObject * object, guint prop_id, dc->priv->use_cache = g_value_get_boolean (value); DISCO_UNLOCK (dc); break; @@ -77,7 +77,7 @@ index ea4b009..1ee2eda 100644 default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; -@@ -513,6 +536,11 @@ gst_discoverer_get_property (GObject * object, guint prop_id, +@@ -512,6 +535,11 @@ gst_discoverer_get_property (GObject * object, guint prop_id, g_value_set_boolean (value, dc->priv->use_cache); DISCO_UNLOCK (dc); break; @@ -89,7 +89,7 @@ index ea4b009..1ee2eda 100644 default: G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); break; -@@ -1898,6 +1926,11 @@ _setup_locked (GstDiscoverer * dc) +@@ -1900,6 +1928,11 @@ _setup_locked (GstDiscoverer * dc) GST_DEBUG ("Current is now %s", dc->priv->current_info->uri); @@ -102,10 +102,10 @@ index ea4b009..1ee2eda 100644 dc->priv->target_state = GST_STATE_PAUSED; diff --git a/tools/gst-discoverer.c b/tools/gst-discoverer.c -index 21ff363..eb9f16e 100644 +index 5bd27ac9f..2171f10b3 100644 --- a/tools/gst-discoverer.c +++ b/tools/gst-discoverer.c -@@ -582,12 +582,14 @@ main (int argc, char **argv) +@@ -633,12 +633,14 @@ main (int argc, char **argv) GError *err = NULL; GstDiscoverer *dc; gint timeout = 10; @@ -114,14 +114,14 @@ index 21ff363..eb9f16e 100644 GOptionEntry options[] = { {"async", 'a', 0, G_OPTION_ARG_NONE, &async, "Run asynchronously", NULL}, - {"use-cache", 'a', 0, G_OPTION_ARG_NONE, &use_cache, + {"use-cache", 0, 0, G_OPTION_ARG_NONE, &use_cache, "Use GstDiscovererInfo from our cache.", NULL}, + {"force-sw-decoders", 0, 0, G_OPTION_ARG_NONE, &force_sw_decoders, + "Use only software decoders to process streams", NULL}, {"print-cache-dir", 0, 0, G_OPTION_ARG_NONE, &print_cache_dir, "Print the directory of the discoverer cache.", NULL}, {"timeout", 't', 0, G_OPTION_ARG_INT, &timeout, -@@ -641,6 +643,7 @@ main (int argc, char **argv) +@@ -692,6 +694,7 @@ main (int argc, char **argv) } g_object_set (dc, "use-cache", use_cache, NULL); diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-playbin2-handle-GST-PLAY-FLAG-FORCE-SW-DECODERS.patch b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-playbin2-handle-GST-PLAY-FLAG-FORCE-SW-DECODERS.patch deleted file mode 100644 index b6685658c..000000000 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base/0001-playbin2-handle-GST-PLAY-FLAG-FORCE-SW-DECODERS.patch +++ /dev/null @@ -1,365 +0,0 @@ -From f3182a88b169653aff10b97f730fbf5f7cb655c2 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADctor=20Manuel=20J=C3=A1quez=20Leal?= - -Date: Sun, 3 Nov 2019 15:37:44 +0100 -Subject: [PATCH] playbin2: handle GST_PLAY_FLAG_FORCE_SW_DECODERS - -Added `force-sw-decoders` boolean property in decodebin2 and -uridecodebin. By default the property is %FALSE and it bypass the new -code. Otherwise the factory list is filtered removing decoders -within 'Hardware' class. - -uridecodebin sets the `force-sw-decoders` property in its internal -decodebin, and also filters out Hardware class in the -autoplug-factories default signal handler. - -playbin2 adds by default GST_PLAY_FLAG_FORCE_SW_DECODERS it its flags -property, and depending on it playbin2 sets the `force-sw-decoders` -property on its internal uridecodebin, also filters out the Hardware -class decoding decoders at the autoplug-factories signal handler. - -Upstream-Status: Backport [1.17.1] - ---- - gst/playback/gstdecodebin2.c | 44 ++++++++++++++++++++++++++++++- - gst/playback/gstplay-enum.c | 2 ++ - gst/playback/gstplay-enum.h | 3 +++ - gst/playback/gstplaybin2.c | 22 ++++++++++++---- - gst/playback/gsturidecodebin.c | 48 +++++++++++++++++++++++++++++++++- - 5 files changed, 112 insertions(+), 7 deletions(-) - -diff --git a/gst/playback/gstdecodebin2.c b/gst/playback/gstdecodebin2.c -index 38ef398..c0a2e77 100644 ---- a/gst/playback/gstdecodebin2.c -+++ b/gst/playback/gstdecodebin2.c -@@ -149,6 +149,7 @@ struct _GstDecodeBin - GstCaps *caps; /* caps on which to stop decoding */ - gchar *encoding; /* encoding of subtitles */ - gboolean use_buffering; /* configure buffering on multiqueues */ -+ gboolean force_sw_decoders; - gint low_percent; - gint high_percent; - guint max_size_bytes; -@@ -253,6 +254,7 @@ enum - - #define DEFAULT_SUBTITLE_ENCODING NULL - #define DEFAULT_USE_BUFFERING FALSE -+#define DEFAULT_FORCE_SW_DECODERS FALSE - #define DEFAULT_LOW_PERCENT 10 - #define DEFAULT_HIGH_PERCENT 99 - /* by default we use the automatic values above */ -@@ -271,6 +273,7 @@ enum - PROP_SUBTITLE_ENCODING, - PROP_SINK_CAPS, - PROP_USE_BUFFERING, -+ PROP_FORCE_SW_DECODERS, - PROP_LOW_PERCENT, - PROP_HIGH_PERCENT, - PROP_MAX_SIZE_BYTES, -@@ -912,6 +915,20 @@ gst_decode_bin_class_init (GstDecodeBinClass * klass) - "Emit GST_MESSAGE_BUFFERING based on low-/high-percent thresholds", - DEFAULT_USE_BUFFERING, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - -+ /** -+ * GstDecodeBin::force-sw-decoders: -+ * -+ * While auto-plugging, if set to %TRUE, those decoders within -+ * "Hardware" klass will be ignored. Otherwise they will be tried. -+ * -+ * Since: 1.18 -+ */ -+ g_object_class_install_property (gobject_klass, PROP_FORCE_SW_DECODERS, -+ g_param_spec_boolean ("force-sw-decoders", "Software Decoders Only", -+ "Use only sofware decoders to process streams", -+ DEFAULT_FORCE_SW_DECODERS, -+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); -+ - /** - * GstDecodeBin:low-percent - * -@@ -1038,14 +1055,32 @@ static void - gst_decode_bin_update_factories_list (GstDecodeBin * dbin) - { - guint cookie; -+ GList *factories, *tmp; - - cookie = gst_registry_get_feature_list_cookie (gst_registry_get ()); - if (!dbin->factories || dbin->factories_cookie != cookie) { - if (dbin->factories) - gst_plugin_feature_list_free (dbin->factories); -- dbin->factories = -+ factories = - gst_element_factory_list_get_elements - (GST_ELEMENT_FACTORY_TYPE_DECODABLE, GST_RANK_MARGINAL); -+ if (dbin->force_sw_decoders) { -+ /* filter out Hardware class elements */ -+ dbin->factories = NULL; -+ for (tmp = factories; tmp; tmp = g_list_next (tmp)) { -+ GstElementFactory *factory = GST_ELEMENT_FACTORY_CAST (tmp->data); -+ if (!gst_element_factory_list_is_type (factory, -+ GST_ELEMENT_FACTORY_TYPE_HARDWARE)) { -+ dbin->factories = g_list_prepend (dbin->factories, factory); -+ } else { -+ gst_object_unref (factory); -+ } -+ } -+ g_list_free (factories); -+ } else { -+ dbin->factories = factories; -+ } -+ - dbin->factories = - g_list_sort (dbin->factories, - gst_playback_utils_compare_factories_func); -@@ -1107,6 +1142,7 @@ gst_decode_bin_init (GstDecodeBin * decode_bin) - decode_bin->encoding = g_strdup (DEFAULT_SUBTITLE_ENCODING); - decode_bin->caps = gst_static_caps_get (&default_raw_caps); - decode_bin->use_buffering = DEFAULT_USE_BUFFERING; -+ decode_bin->force_sw_decoders = DEFAULT_FORCE_SW_DECODERS; - decode_bin->low_percent = DEFAULT_LOW_PERCENT; - decode_bin->high_percent = DEFAULT_HIGH_PERCENT; - -@@ -1280,6 +1316,9 @@ gst_decode_bin_set_property (GObject * object, guint prop_id, - case PROP_USE_BUFFERING: - dbin->use_buffering = g_value_get_boolean (value); - break; -+ case PROP_FORCE_SW_DECODERS: -+ dbin->force_sw_decoders = g_value_get_boolean (value); -+ break; - case PROP_LOW_PERCENT: - dbin->low_percent = g_value_get_int (value); - break; -@@ -1332,6 +1371,9 @@ gst_decode_bin_get_property (GObject * object, guint prop_id, - case PROP_USE_BUFFERING: - g_value_set_boolean (value, dbin->use_buffering); - break; -+ case PROP_FORCE_SW_DECODERS: -+ g_value_set_boolean (value, dbin->force_sw_decoders); -+ break; - case PROP_LOW_PERCENT: - g_value_set_int (value, dbin->low_percent); - break; -diff --git a/gst/playback/gstplay-enum.c b/gst/playback/gstplay-enum.c -index dd8afd7..fce8f6f 100644 ---- a/gst/playback/gstplay-enum.c -+++ b/gst/playback/gstplay-enum.c -@@ -69,6 +69,8 @@ gst_play_flags_get_type (void) - "soft-colorbalance"}, - {C_FLAGS (GST_PLAY_FLAG_FORCE_FILTERS), - "Force audio/video filter(s) to be applied", "force-filters"}, -+ {C_FLAGS (GST_PLAY_FLAG_FORCE_SW_DECODERS), -+ "Force only software-based decoders", "force-sw-decoders"}, - {0, NULL, NULL} - }; - static volatile GType id = 0; -diff --git a/gst/playback/gstplay-enum.h b/gst/playback/gstplay-enum.h -index 1e0ed37..122b67e 100644 ---- a/gst/playback/gstplay-enum.h -+++ b/gst/playback/gstplay-enum.h -@@ -60,6 +60,8 @@ GType gst_autoplug_select_result_get_type (void); - * @GST_PLAY_FLAG_SOFT_COLORBALANCE: Use a software filter for colour balance - * @GST_PLAY_FLAG_FORCE_FILTERS: force audio/video filters to be applied if - * set. -+ * @GST_PLAY_FLAG_FORCE_SW_DECODERS: force to use only software-based -+ * decoders ignoring those with hardware class. - * - * Extra flags to configure the behaviour of the sinks. - */ -@@ -76,6 +78,7 @@ typedef enum { - GST_PLAY_FLAG_DEINTERLACE = (1 << 9), - GST_PLAY_FLAG_SOFT_COLORBALANCE = (1 << 10), - GST_PLAY_FLAG_FORCE_FILTERS = (1 << 11), -+ GST_PLAY_FLAG_FORCE_SW_DECODERS = (1 << 12), - } GstPlayFlags; - - #define GST_TYPE_PLAY_FLAGS (gst_play_flags_get_type()) -diff --git a/gst/playback/gstplaybin2.c b/gst/playback/gstplaybin2.c -index cec4b36..632538a 100644 ---- a/gst/playback/gstplaybin2.c -+++ b/gst/playback/gstplaybin2.c -@@ -2404,8 +2404,11 @@ gst_play_bin_set_property (GObject * object, guint prop_id, - if (playbin->curr_group) { - GST_SOURCE_GROUP_LOCK (playbin->curr_group); - if (playbin->curr_group->uridecodebin) { -- g_object_set (playbin->curr_group->uridecodebin, "download", -- (g_value_get_flags (value) & GST_PLAY_FLAG_DOWNLOAD) != 0, NULL); -+ guint flags = g_value_get_flags (value); -+ g_object_set (playbin->curr_group->uridecodebin, -+ "download", (flags & GST_PLAY_FLAG_DOWNLOAD) != 0, -+ "force-sw-decoders", -+ (flags & GST_PLAY_FLAG_FORCE_SW_DECODERS) != 0, NULL); - } - GST_SOURCE_GROUP_UNLOCK (playbin->curr_group); - } -@@ -4111,7 +4114,8 @@ avelement_iter_is_equal (GSequenceIter * iter, GstElementFactory * factory) - } - - static GList * --create_decoders_list (GList * factory_list, GSequence * avelements) -+create_decoders_list (GList * factory_list, GSequence * avelements, -+ GstPlayFlags flags) - { - GList *dec_list = NULL, *tmp; - GList *ave_list = NULL; -@@ -4130,7 +4134,9 @@ create_decoders_list (GList * factory_list, GSequence * avelements) - gst_element_factory_list_is_type (factory, - GST_ELEMENT_FACTORY_TYPE_SINK)) { - dec_list = g_list_prepend (dec_list, gst_object_ref (factory)); -- } else { -+ } else if (!(((flags & GST_PLAY_FLAG_FORCE_SW_DECODERS) != 0) -+ && gst_element_factory_list_is_type (factory, -+ GST_ELEMENT_FACTORY_TYPE_HARDWARE))) { - GSequenceIter *seq_iter; - - seq_iter = -@@ -4252,14 +4258,18 @@ autoplug_factories_cb (GstElement * decodebin, GstPad * pad, - - if (isaudiodeclist || isvideodeclist) { - GSequence **ave_list; -+ GstPlayFlags flags; -+ - if (isaudiodeclist) - ave_list = &playbin->aelements; - else - ave_list = &playbin->velements; - -+ flags = gst_play_bin_get_flags (playbin); -+ - g_mutex_lock (&playbin->elements_lock); - /* sort factory_list based on the GstAVElement list priority */ -- factory_list = create_decoders_list (factory_list, *ave_list); -+ factory_list = create_decoders_list (factory_list, *ave_list, flags); - g_mutex_unlock (&playbin->elements_lock); - } - -@@ -5346,6 +5356,8 @@ activate_group (GstPlayBin * playbin, GstSourceGroup * group, GstState target) - "download", ((flags & GST_PLAY_FLAG_DOWNLOAD) != 0), - /* configure buffering of demuxed/parsed data */ - "use-buffering", ((flags & GST_PLAY_FLAG_BUFFERING) != 0), -+ /* enable hardware-based elements */ -+ "force-sw-decoders", ((flags & GST_PLAY_FLAG_FORCE_SW_DECODERS) != 0), - /* configure buffering parameters */ - "buffer-duration", playbin->buffer_duration, - "buffer-size", playbin->buffer_size, -diff --git a/gst/playback/gsturidecodebin.c b/gst/playback/gsturidecodebin.c -index f19f69a..06b48f9 100644 ---- a/gst/playback/gsturidecodebin.c -+++ b/gst/playback/gsturidecodebin.c -@@ -95,6 +95,7 @@ struct _GstURIDecodeBin - guint buffer_size; /* When buffering, buffer size (bytes) */ - gboolean download; - gboolean use_buffering; -+ gboolean force_sw_decoders; - - GstElement *source; - GstElement *queue; -@@ -180,6 +181,7 @@ enum - #define DEFAULT_BUFFER_SIZE -1 - #define DEFAULT_DOWNLOAD FALSE - #define DEFAULT_USE_BUFFERING FALSE -+#define DEFAULT_FORCE_SW_DECODERS FALSE - #define DEFAULT_EXPOSE_ALL_STREAMS TRUE - #define DEFAULT_RING_BUFFER_MAX_SIZE 0 - -@@ -195,6 +197,7 @@ enum - PROP_BUFFER_DURATION, - PROP_DOWNLOAD, - PROP_USE_BUFFERING, -+ PROP_FORCE_SW_DECODERS, - PROP_EXPOSE_ALL_STREAMS, - PROP_RING_BUFFER_MAX_SIZE - }; -@@ -311,14 +314,33 @@ static void - gst_uri_decode_bin_update_factories_list (GstURIDecodeBin * dec) - { - guint32 cookie; -+ GList *factories, *tmp; - - cookie = gst_registry_get_feature_list_cookie (gst_registry_get ()); - if (!dec->factories || dec->factories_cookie != cookie) { - if (dec->factories) - gst_plugin_feature_list_free (dec->factories); -- dec->factories = -+ factories = - gst_element_factory_list_get_elements - (GST_ELEMENT_FACTORY_TYPE_DECODABLE, GST_RANK_MARGINAL); -+ -+ if (dec->force_sw_decoders) { -+ /* filter out Hardware class elements */ -+ dec->factories = NULL; -+ for (tmp = factories; tmp; tmp = g_list_next (tmp)) { -+ GstElementFactory *factory = GST_ELEMENT_FACTORY_CAST (tmp->data); -+ if (!gst_element_factory_list_is_type (factory, -+ GST_ELEMENT_FACTORY_TYPE_HARDWARE)) { -+ dec->factories = g_list_prepend (dec->factories, factory); -+ } else { -+ gst_object_unref (factory); -+ } -+ } -+ g_list_free (factories); -+ } else { -+ dec->factories = factories; -+ } -+ - dec->factories = - g_list_sort (dec->factories, gst_playback_utils_compare_factories_func); - dec->factories_cookie = cookie; -@@ -461,6 +483,20 @@ gst_uri_decode_bin_class_init (GstURIDecodeBinClass * klass) - "Perform buffering on demuxed/parsed media", - DEFAULT_USE_BUFFERING, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); - -+ /** -+ * GstURIDecodeBin::force-sw-decoders: -+ * -+ * While auto-plugging, if set to %TRUE, those decoders within -+ * "Hardware" klass will be ignored. Otherwise they will be tried. -+ * -+ * Since: 1.18 -+ */ -+ g_object_class_install_property (gobject_class, PROP_FORCE_SW_DECODERS, -+ g_param_spec_boolean ("force-sw-decoders", "Software Docoders Only", -+ "Use only sofware decoders to process streams", -+ DEFAULT_FORCE_SW_DECODERS, -+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); -+ - /** - * GstURIDecodeBin::expose-all-streams - * -@@ -719,6 +755,7 @@ gst_uri_decode_bin_init (GstURIDecodeBin * dec) - dec->buffer_size = DEFAULT_BUFFER_SIZE; - dec->download = DEFAULT_DOWNLOAD; - dec->use_buffering = DEFAULT_USE_BUFFERING; -+ dec->force_sw_decoders = DEFAULT_FORCE_SW_DECODERS; - dec->expose_allstreams = DEFAULT_EXPOSE_ALL_STREAMS; - dec->ring_buffer_max_size = DEFAULT_RING_BUFFER_MAX_SIZE; - -@@ -807,6 +844,9 @@ gst_uri_decode_bin_set_property (GObject * object, guint prop_id, - case PROP_USE_BUFFERING: - dec->use_buffering = g_value_get_boolean (value); - break; -+ case PROP_FORCE_SW_DECODERS: -+ dec->force_sw_decoders = g_value_get_boolean (value); -+ break; - case PROP_EXPOSE_ALL_STREAMS: - dec->expose_allstreams = g_value_get_boolean (value); - break; -@@ -867,6 +907,9 @@ gst_uri_decode_bin_get_property (GObject * object, guint prop_id, - case PROP_USE_BUFFERING: - g_value_set_boolean (value, dec->use_buffering); - break; -+ case PROP_FORCE_SW_DECODERS: -+ g_value_set_boolean (value, dec->force_sw_decoders); -+ break; - case PROP_EXPOSE_ALL_STREAMS: - g_value_set_boolean (value, dec->expose_allstreams); - break; -@@ -1819,6 +1862,9 @@ make_decoder (GstURIDecodeBin * decoder) - "unknown-type", G_CALLBACK (unknown_type_cb), decoder); - } - -+ g_object_set (decodebin, "force-sw-decoders", decoder->force_sw_decoders, -+ NULL); -+ - /* configure caps if we have any */ - if (decoder->caps) - g_object_set (decodebin, "caps", decoder->caps, NULL); diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.%.bbappend similarity index 91% rename from meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend rename to meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.%.bbappend index 07dbfc3b9..9911f345f 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.%.bbappend @@ -19,5 +19,4 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI:append:rpi = " \ file://0001-discoverer-Add-force-sw-decoders-property.patch \ - file://0001-playbin2-handle-GST-PLAY-FLAG-FORCE-SW-DECODERS.patch \ " diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.%.bbappend similarity index 100% rename from meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend rename to meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.%.bbappend diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.18.%.bbappend similarity index 100% rename from meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.16.%.bbappend rename to meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-ugly_1.18.%.bbappend diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0/0001-elementfactory-add-GST-ELEMENT-FACTORY-TYPE-HARDWARE.patch b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0/0001-elementfactory-add-GST-ELEMENT-FACTORY-TYPE-HARDWARE.patch deleted file mode 100644 index c612568fe..000000000 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0/0001-elementfactory-add-GST-ELEMENT-FACTORY-TYPE-HARDWARE.patch +++ /dev/null @@ -1,49 +0,0 @@ -From 9707db909d1438d9a1bc85554be8a2a741be4771 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?V=C3=ADctor=20Manuel=20J=C3=A1quez=20Leal?= - -Date: Sat, 2 Nov 2019 15:06:28 +0100 -Subject: [PATCH] elementfactory: add GST_ELEMENT_FACTORY_TYPE_HARDWARE - -This new symbol matches with the elements within "Hardware" class. - -Upstream-Status: Backport [1.17.1] - ---- - gst/gstelementfactory.c | 3 +++ - gst/gstelementfactory.h | 2 ++ - 2 files changed, 5 insertions(+) - -diff --git a/gst/gstelementfactory.c b/gst/gstelementfactory.c -index fc96984..62d34cc 100644 ---- a/gst/gstelementfactory.c -+++ b/gst/gstelementfactory.c -@@ -739,6 +739,9 @@ gst_element_factory_list_is_type (GstElementFactory * factory, - if (!res && (type & GST_ELEMENT_FACTORY_TYPE_ENCRYPTOR)) - res = (strstr (klass, "Encryptor") != NULL); - -+ if (!res && (type & GST_ELEMENT_FACTORY_TYPE_HARDWARE)) -+ res = (strstr (klass, "Hardware") != NULL); -+ - /* Filter by media type now, we only test if it - * matched any of the types above or only checking the media - * type was requested. */ -diff --git a/gst/gstelementfactory.h b/gst/gstelementfactory.h -index 88d4172..2b3a827 100644 ---- a/gst/gstelementfactory.h -+++ b/gst/gstelementfactory.h -@@ -105,6 +105,7 @@ gboolean gst_element_register (GstPlugin *plug - * @GST_ELEMENT_FACTORY_TYPE_DEPAYLOADER: Depayloader elements - * @GST_ELEMENT_FACTORY_TYPE_DECRYPTOR: Elements handling decryption (Since: 1.6) - * @GST_ELEMENT_FACTORY_TYPE_ENCRYPTOR: Elements handling encryption (Since: 1.6) -+ * @GST_ELEMENT_FACTORY_TYPE_HARDWARE: Hardware based elements (Since 1.18) - * @GST_ELEMENT_FACTORY_TYPE_MAX_ELEMENTS: Private, do not use - * @GST_ELEMENT_FACTORY_TYPE_MEDIA_VIDEO: Elements handling video media types - * @GST_ELEMENT_FACTORY_TYPE_MEDIA_AUDIO: Elements handling audio media types -@@ -134,6 +135,7 @@ typedef guint64 GstElementFactoryListType; - #define GST_ELEMENT_FACTORY_TYPE_FORMATTER ((GstElementFactoryListType)(G_GUINT64_CONSTANT (1) << 9)) - #define GST_ELEMENT_FACTORY_TYPE_DECRYPTOR ((GstElementFactoryListType)(G_GUINT64_CONSTANT (1) << 10)) - #define GST_ELEMENT_FACTORY_TYPE_ENCRYPTOR ((GstElementFactoryListType)(G_GUINT64_CONSTANT (1) << 11)) -+#define GST_ELEMENT_FACTORY_TYPE_HARDWARE ((GstElementFactoryListType)(G_GUINT64_CONSTANT (1) << 12)) - - #define GST_ELEMENT_FACTORY_TYPE_MAX_ELEMENTS ((GstElementFactoryListType)(G_GUINT64_CONSTANT (1) << 48)) - diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0_1.18.%.bbappend similarity index 71% rename from meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend rename to meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0_1.18.%.bbappend index ebf25c338..e574e520a 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0_1.18.%.bbappend @@ -6,13 +6,7 @@ EXTENDPRAUTO:append:rpi = "webosrpi4" WEBOS_REPO_NAME:rpi = "gstreamer" -FILESEXTRAPATHS:prepend:rpi := "${THISDIR}/${BPN}:" - # 0001-Add-support-for-seamless-seek-trickplay.patch is from meta-webos layer SRC_URI:append:rpi = " \ file://0001-Add-support-for-seamless-seek-trickplay.patch \ - file://0001-elementfactory-add-GST-ELEMENT-FACTORY-TYPE-HARDWARE.patch \ " - - - diff --git a/meta-webos/conf/distro/include/webos-preferred-versions.inc b/meta-webos/conf/distro/include/webos-preferred-versions.inc index acd85d96f..616f6abae 100644 --- a/meta-webos/conf/distro/include/webos-preferred-versions.inc +++ b/meta-webos/conf/distro/include/webos-preferred-versions.inc @@ -4,8 +4,8 @@ PREFERRED_VERSION_webruntime = "91.%" PREFERRED_VERSION_mksnapshot-cross-${TARGET_ARCH} = "91.%" GOVERSION = "1.16.%" -# Prefer gstreamer version 1.16.% for webos (instead of 1.18 from meta-webos-backports-3.3) -GSTREAMER_VERSION = "1.16.%" +# Prefer gstreamer version 1.18.% from oe-core for webos +GSTREAMER_VERSION = "1.18.%" PREFERRED_VERSION_gstreamer1.0 = "${GSTREAMER_VERSION}" PREFERRED_VERSION_gstreamer1.0-plugins-bad = "${GSTREAMER_VERSION}" diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-rtpmanagerbad-add-RTP-streaming-elements.patch b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-rtpmanagerbad-add-RTP-streaming-elements.patch deleted file mode 100644 index 455a7955e..000000000 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0004-rtpmanagerbad-add-RTP-streaming-elements.patch +++ /dev/null @@ -1,1964 +0,0 @@ -From f03dee860e8224d3370c5d9d08c2e431c6ee078b Mon Sep 17 00:00:00 2001 -From: Marc Leeman -Date: Mon, 3 Jun 2019 20:08:23 +0000 -Subject: [PATCH] rtpmanagerbad: add RTP streaming elements - -This is a re-implementation of the RTP elements that are submitted in -2013 to handle RTP streams. The elements handle a correct connection -for the bi-directional use of the RTCP sockets. - -https://bugzilla.gnome.org/show_bug.cgi?id=703111 - -The rtpsink and rtpsrc elements add an URI interface so that streams -can be decoded with decodebin using the rtp:// interface. - -The code can be used as follows - -``` -gst-launch-1.0 videotestsrc ! x264enc ! rtph264pay config-interval=3 ! rtpsink uri=rtp://239.1.1.1:1234 - -gst-launch-1.0 videotestsrc ! x264enc ! rtph264pay config-interval=1 ! rtpsink uri=rtp://239.1.2.3:5000 -gst-launch-1.0 rtpsrc uri=rtp://239.1.2.3:5000?encoding-name=H264 ! rtph264depay ! avdec_h264 ! videoconvert ! xvimagesink - -gst-launch-1.0 videotestsrc ! avenc_mpeg4 ! rtpmp4vpay config-interval=1 ! rtpsink uri=rtp://239.1.2.3:5000 -gst-launch-1.0 rtpsrc uri=rtp://239.1.2.3:5000?encoding-name=MP4V-ES ! rtpmp4vdepay ! avdec_mpeg4 ! videoconvert ! xvimagesink -``` - -rtpmanagerbad: add pkg-config -rtpmanagerbad: Rtp should be uppercase -rtpmanagerbad: add G_OS_WIN32 for shielding unix headers -rtpmanagerbad: remove Since from documentation -rtpmanagerbad: rename lib name from nrtp to rtpmanagerbad -rtpmanagerbad: sync meson.build with other modules -rtpmanagerbad: add Makefile.am -rtpmanagerbad: use GstElement to count pads -rtpmanagerbad: use gst_bin_set_suppressed_flags -rtpmanagerbad: check element creation -rtpmanagerbad: post message when trying to access missing rtpbin -rtpmanagerbad: return FALSE with g_return tests -rtpmanagerbad: use gsocket multicast check -rtpmanagerbad: use gst_caps_new_empty_simple iso gst_caps_from_string -rtpmanagerbad: sync with gstrtppayloads.h -rtpmanagerbad: correct media type X-GST -rtpmanagerbad: test if a compatible pad was found -rtpmanagerbad: remove evil copy of GstRTPPayloadInfo -rtpmanagerbad: add gio_dep to meson -rtpmanagerbad: revert to old glib boilerplate - -GStreamer 1.16 does not yet support the newer GLib templates, so revert. - -rtpmanagerbad: return GST_STATE_CHANGE_NO_PREROLL for live sources - -for live sources, NO_PREROLL should be returned for PLAYING->PAUSED and -READY->PAUSED transitions. - -rtpmanagerbad: use GstElement pad counting -rtpmanagerbad: just use template name to request pad -rtpmanagerbad: remove commented code -rtpmanagerbad: use funnel to send multiple streams on one socket -rtpmanagerbad: avoid beaches - -beaches should only be used during the summer, so rewrite the code to -return explicitly and avoid beaches during the winter. - -rtpmanagerbad: add copyright to test code -rtpmanagerbad: g_free is NULL safe -rtpmanagerbad: do not trace rtpbin -rtpmanagerbad: return NULL explitly -rtpmanagerbad: warn when data port is not even - -According to RFC 3550, RTP data should be sent on even ports, while RTCP -is sent on the following odd port. - -rtpmanagerbad: document port allocation in rtpsink/src -rtpmanagerbad: improve uri description -rtpmanagerbad: add comment re-use socket -rtpmanagerbad: rename gst_object_set_properties_from_uri_query -rtpmanagerbad: loan prop/val setter from rist -rtpmanagerbad: rtpsrc: fix unitialised pointer -rtpmanagerbad: fix silly typo -rtpmanagerbad: test for empty key/value -rtpmanagerbad: rtpsrc: deprecate ssrc collision to INFO -rtpmanagerbad: sync debug with rist -rtpmanagerbad: small strings allocated on stack -rtpmanagerbad: correct rename -rtpmanagerbad: add locking on prop setters/getters - -Locking is added because the URI allows to access the properties too. - -rtpmanagerbad: allow for RTCP through NAT -rtpmanagerbad: move gio to header file -rtpmanagerbad: free small strings too -rtpmanagerbad: ttl_mc for ttl on dynudpsink -rtpmanagerbad: add comments on the URI registered -rtpmanagerbad: correct macro after file rename -rtpmanagerbad: code style -rtpmanagerbad: handle wrong URIs in setter -rtpmanagerbad: nit URI notation correction - -In an URI, the first key/value pair should not have an ampersand, the -parser did not die though. - -Upstream-Status: Backport [3ef737605a3df19c4d52736203038037bcaf4ae2 from 1.17.1] -Signed-off-by: Martin Jansa ---- - configure.ac | 2 + - gst/meson.build | 2 +- - gst/rtp/Makefile.am | 17 + - gst/rtp/gstrtp-utils.c | 39 ++ - gst/rtp/gstrtp-utils.h | 8 + - gst/rtp/gstrtpsink.c | 581 ++++++++++++++++++++++++++ - gst/rtp/gstrtpsink.h | 72 ++++ - gst/rtp/gstrtpsrc.c | 731 +++++++++++++++++++++++++++++++++ - gst/rtp/gstrtpsrc.h | 76 ++++ - gst/rtp/meson.build | 15 + - gst/rtp/plugin.c | 28 ++ - meson_options.txt | 1 + - tests/check/Makefile.am | 8 + - tests/check/elements/rtpsink.c | 56 +++ - tests/check/elements/rtpsrc.c | 58 +++ - tests/check/meson.build | 2 + - 16 files changed, 1695 insertions(+), 1 deletion(-) - create mode 100644 gst/rtp/Makefile.am - create mode 100644 gst/rtp/gstrtp-utils.c - create mode 100644 gst/rtp/gstrtp-utils.h - create mode 100644 gst/rtp/gstrtpsink.c - create mode 100644 gst/rtp/gstrtpsink.h - create mode 100644 gst/rtp/gstrtpsrc.c - create mode 100644 gst/rtp/gstrtpsrc.h - create mode 100644 gst/rtp/meson.build - create mode 100644 gst/rtp/plugin.c - create mode 100644 tests/check/elements/rtpsink.c - create mode 100644 tests/check/elements/rtpsrc.c - -diff --git a/configure.ac b/configure.ac -index 5712e739c..8f4b741af 100644 ---- a/configure.ac -+++ b/configure.ac -@@ -478,6 +478,7 @@ AG_GST_CHECK_PLUGIN(pnm) - AG_GST_CHECK_PLUGIN(proxy) - AG_GST_CHECK_PLUGIN(rawparse) - AG_GST_CHECK_PLUGIN(removesilence) -+AG_GST_CHECK_PLUGIN(rtp) - AG_GST_CHECK_PLUGIN(sdp) - AG_GST_CHECK_PLUGIN(segmentclip) - AG_GST_CHECK_PLUGIN(siren) -@@ -2561,6 +2562,7 @@ gst/pnm/Makefile - gst/proxy/Makefile - gst/rawparse/Makefile - gst/removesilence/Makefile -+gst/rtp/Makefile - gst/sdp/Makefile - gst/segmentclip/Makefile - gst/siren/Makefile -diff --git a/gst/meson.build b/gst/meson.build -index 8c8349802..4a3c372fc 100644 ---- a/gst/meson.build -+++ b/gst/meson.build -@@ -8,7 +8,7 @@ foreach plugin : ['accurip', 'adpcmdec', 'adpcmenc', 'aiff', 'asfmux', - 'ivfparse', 'ivtc', 'jp2kdecimator', 'jpegformat', 'librfb', - 'midi', 'mpegdemux', 'mpegpsmux', 'mpegtsdemux', 'mpegtsmux', - 'mxf', 'netsim', 'onvif', 'pcapparse', 'pnm', 'proxy', -- 'rawparse', 'removesilence', 'sdp', 'segmentclip', 'siren', -+ 'rawparse', 'removesilence', 'rtp', 'sdp', 'segmentclip', 'siren', - 'smooth', 'speed', 'subenc', 'timecode', - 'videofilters', 'videoframe_audiolevel', 'videoparsers', - 'videosignal', 'vmnc', 'y4m', 'yadif'] -diff --git a/gst/rtp/Makefile.am b/gst/rtp/Makefile.am -new file mode 100644 -index 000000000..2d8dd1bdd ---- /dev/null -+++ b/gst/rtp/Makefile.am -@@ -0,0 +1,17 @@ -+plugin_LTLIBRARIES = libgstrtpmanagerbad.la -+ -+libgstrtpmanagerbad_la_SOURCES = \ -+ gstrtp-utils.c \ -+ gstrtpsink.c \ -+ gstrtpsrc.c \ -+ plugin.c -+ -+libgstrtpmanagerbad_la_CFLAGS = $(GST_BASE_CFLAGS) $(GST_CFLAGS) -+libgstrtpmanagerbad_la_LIBADD = $(GST_BASE_LIBS) $(GST_LIBS) -+libgstrtpmanagerbad_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) -+ -+noinst_HEADERS = \ -+ gstrtp-utils.h \ -+ gstrtpcaps.h \ -+ gstrtpsink.h \ -+ gstrtpsrc.h -diff --git a/gst/rtp/gstrtp-utils.c b/gst/rtp/gstrtp-utils.c -new file mode 100644 -index 000000000..fc06bba79 ---- /dev/null -+++ b/gst/rtp/gstrtp-utils.c -@@ -0,0 +1,39 @@ -+/* -+ * See: https://bugzilla.gnome.org/show_bug.cgi?id=779765 -+ */ -+ -+#include "gstrtp-utils.h" -+ -+static void -+gst_rtp_utils_uri_query_foreach (const gchar * key, const gchar * value, -+ GObject * src) -+{ -+ if (key == NULL) { -+ GST_WARNING_OBJECT (src, "Refusing to use empty key."); -+ return; -+ } -+ -+ if (value == NULL) { -+ GST_WARNING_OBJECT (src, "Refusing to use NULL for key %s.", key); -+ return; -+ } -+ -+ GST_DEBUG_OBJECT (src, "Setting property '%s' to '%s'", key, value); -+ gst_util_set_object_arg (src, key, value); -+} -+ -+void -+gst_rtp_utils_set_properties_from_uri_query (GObject * obj, const GstUri * uri) -+{ -+ GHashTable *hash_table; -+ -+ g_return_if_fail (uri != NULL); -+ hash_table = gst_uri_get_query_table (uri); -+ -+ if (hash_table) { -+ g_hash_table_foreach (hash_table, -+ (GHFunc) gst_rtp_utils_uri_query_foreach, obj); -+ -+ g_hash_table_unref (hash_table); -+ } -+} -diff --git a/gst/rtp/gstrtp-utils.h b/gst/rtp/gstrtp-utils.h -new file mode 100644 -index 000000000..62ec2aafa ---- /dev/null -+++ b/gst/rtp/gstrtp-utils.h -@@ -0,0 +1,8 @@ -+#ifndef __GST_RTP_UTILS_H__ -+#define __GST_RTP_UTILS_H__ -+ -+#include -+ -+void gst_rtp_utils_set_properties_from_uri_query (GObject * obj, const GstUri * uri); -+ -+#endif -diff --git a/gst/rtp/gstrtpsink.c b/gst/rtp/gstrtpsink.c -new file mode 100644 -index 000000000..23b6df959 ---- /dev/null -+++ b/gst/rtp/gstrtpsink.c -@@ -0,0 +1,581 @@ -+/* GStreamer -+ * Copyright (C) <2018> Marc Leeman -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Library General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Library General Public License for more details. -+ * -+ * You should have received a copy of the GNU Library General Public -+ * License along with this library; if not, write to the -+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -+ * Boston, MA 02110-1301, USA. -+ */ -+ -+/** -+ * SECTION: gstrtsinkp -+ * @title: GstRtpSink -+ * @short description: element with Uri interface to stream RTP data to -+ * the network. -+ * -+ * RTP (RFC 3550) is a protocol to stream media over the network while -+ * retaining the timing information and providing enough information to -+ * reconstruct the correct timing domain by the receiver. -+ * -+ * The RTP data port should be even, while the RTCP port should be -+ * odd. The URI that is entered defines the data port, the RTCP port will -+ * be allocated to the next port. -+ * -+ * This element hooks up the correct sockets to support both RTP as the -+ * accompanying RTCP layer. -+ * -+ * This Bin handles streaming RTP payloaded data on the network. -+ * -+ * This element also implements the URI scheme `rtp://` allowing to send -+ * data on the network by bins that allow use the URI to determine the sink. -+ * The RTP URI handler also allows setting properties through the URI query. -+ */ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#include -+ -+#include "gstrtpsink.h" -+#include "gstrtp-utils.h" -+ -+GST_DEBUG_CATEGORY_STATIC (gst_rtp_sink_debug); -+#define GST_CAT_DEFAULT gst_rtp_sink_debug -+ -+#define DEFAULT_PROP_URI "rtp://0.0.0.0:5004" -+#define DEFAULT_PROP_TTL 64 -+#define DEFAULT_PROP_TTL_MC 1 -+ -+enum -+{ -+ PROP_0, -+ -+ PROP_URI, -+ PROP_TTL, -+ PROP_TTL_MC, -+ -+ PROP_LAST -+}; -+ -+static void gst_rtp_sink_uri_handler_init (gpointer g_iface, -+ gpointer iface_data); -+ -+#define gst_rtp_sink_parent_class parent_class -+G_DEFINE_TYPE_WITH_CODE (GstRtpSink, gst_rtp_sink, GST_TYPE_BIN, -+ G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER, gst_rtp_sink_uri_handler_init); -+ GST_DEBUG_CATEGORY_INIT (gst_rtp_sink_debug, "rtpsink", 0, "RTP Sink")); -+ -+#define GST_RTP_SINK_GET_LOCK(obj) (&((GstRtpSink*)(obj))->lock) -+#define GST_RTP_SINK_LOCK(obj) (g_mutex_lock (GST_RTP_SINK_GET_LOCK(obj))) -+#define GST_RTP_SINK_UNLOCK(obj) (g_mutex_unlock (GST_RTP_SINK_GET_LOCK(obj))) -+ -+static GstStaticPadTemplate sink_template = GST_STATIC_PAD_TEMPLATE ("sink_%u", -+ GST_PAD_SINK, -+ GST_PAD_REQUEST, -+ GST_STATIC_CAPS ("application/x-rtp")); -+ -+static GstStateChangeReturn -+gst_rtp_sink_change_state (GstElement * element, GstStateChange transition); -+ -+static void -+gst_rtp_sink_set_property (GObject * object, guint prop_id, -+ const GValue * value, GParamSpec * pspec) -+{ -+ GstRtpSink *self = GST_RTP_SINK (object); -+ -+ switch (prop_id) { -+ case PROP_URI:{ -+ GstUri *uri = NULL; -+ -+ GST_RTP_SINK_LOCK (object); -+ uri = gst_uri_from_string (g_value_get_string (value)); -+ if (uri == NULL) -+ break; -+ -+ if (self->uri) -+ gst_uri_unref (self->uri); -+ self->uri = uri; -+ /* RTP data ports should be even according to RFC 3550, while the -+ * RTCP is sent on odd ports. Just warn if there is a mismatch. */ -+ if (gst_uri_get_port (self->uri) % 2) -+ GST_WARNING_OBJECT (self, -+ "Port %u is not even, this is not standard (see RFC 3550).", -+ gst_uri_get_port (self->uri)); -+ -+ gst_rtp_utils_set_properties_from_uri_query (G_OBJECT (self), self->uri); -+ GST_RTP_SINK_UNLOCK (object); -+ break; -+ } -+ case PROP_TTL: -+ self->ttl = g_value_get_int (value); -+ break; -+ case PROP_TTL_MC: -+ self->ttl_mc = g_value_get_int (value); -+ break; -+ default: -+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -+ break; -+ } -+} -+ -+static void -+gst_rtp_sink_get_property (GObject * object, guint prop_id, -+ GValue * value, GParamSpec * pspec) -+{ -+ GstRtpSink *self = GST_RTP_SINK (object); -+ -+ switch (prop_id) { -+ case PROP_URI: -+ GST_RTP_SINK_LOCK (object); -+ if (self->uri) -+ g_value_take_string (value, gst_uri_to_string (self->uri)); -+ else -+ g_value_set_string (value, NULL); -+ GST_RTP_SINK_UNLOCK (object); -+ break; -+ case PROP_TTL: -+ g_value_set_int (value, self->ttl); -+ break; -+ case PROP_TTL_MC: -+ g_value_set_int (value, self->ttl_mc); -+ break; -+ default: -+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -+ break; -+ } -+} -+ -+static void -+gst_rtp_sink_finalize (GObject * gobject) -+{ -+ GstRtpSink *self = GST_RTP_SINK (gobject); -+ -+ if (self->uri) -+ gst_uri_unref (self->uri); -+ -+ g_mutex_clear (&self->lock); -+ G_OBJECT_CLASS (parent_class)->finalize (gobject); -+} -+ -+static gboolean -+gst_rtp_sink_setup_elements (GstRtpSink * self) -+{ -+ /*GstPad *pad; */ -+ GSocket *socket; -+ GInetAddress *addr; -+ gchar name[48]; -+ GstCaps *caps; -+ -+ /* Should not be NULL */ -+ g_return_val_if_fail (self->uri != NULL, FALSE); -+ -+ /* if not already configured */ -+ if (self->funnel_rtp == NULL) { -+ self->funnel_rtp = gst_element_factory_make ("funnel", NULL); -+ if (self->funnel_rtp == NULL) { -+ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), -+ ("%s", "funnel_rtp element is not available")); -+ return FALSE; -+ } -+ -+ self->funnel_rtcp = gst_element_factory_make ("funnel", NULL); -+ if (self->funnel_rtcp == NULL) { -+ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), -+ ("%s", "funnel_rtcp element is not available")); -+ return FALSE; -+ } -+ -+ self->rtp_sink = gst_element_factory_make ("udpsink", NULL); -+ if (self->rtp_sink == NULL) { -+ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), -+ ("%s", "rtp_sink element is not available")); -+ return FALSE; -+ } -+ -+ self->rtcp_src = gst_element_factory_make ("udpsrc", NULL); -+ if (self->rtcp_src == NULL) { -+ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), -+ ("%s", "rtcp_src element is not available")); -+ return FALSE; -+ } -+ -+ self->rtcp_sink = gst_element_factory_make ("udpsink", NULL); -+ if (self->rtcp_sink == NULL) { -+ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), -+ ("%s", "rtcp_sink element is not available")); -+ return FALSE; -+ } -+ -+ gst_bin_add (GST_BIN (self), self->funnel_rtp); -+ gst_bin_add (GST_BIN (self), self->funnel_rtcp); -+ -+ /* Add elements as needed, since udpsrc/udpsink for RTCP share a socket, -+ * not all at the same moment */ -+ g_object_set (self->rtp_sink, -+ "host", gst_uri_get_host (self->uri), -+ "port", gst_uri_get_port (self->uri), -+ "ttl", self->ttl, "ttl-mc", self->ttl_mc, NULL); -+ -+ gst_bin_add (GST_BIN (self), self->rtp_sink); -+ -+ g_object_set (self->rtcp_sink, -+ "host", gst_uri_get_host (self->uri), -+ "port", gst_uri_get_port (self->uri) + 1, -+ "ttl", self->ttl, "ttl-mc", self->ttl_mc, -+ /* Set false since we're reusing a socket */ -+ "auto-multicast", FALSE, NULL); -+ -+ gst_bin_add (GST_BIN (self), self->rtcp_sink); -+ -+ /* no need to set address if unicast */ -+ caps = gst_caps_new_empty_simple ("application/x-rtcp"); -+ g_object_set (self->rtcp_src, -+ "port", gst_uri_get_port (self->uri) + 1, "caps", caps, NULL); -+ gst_caps_unref (caps); -+ -+ addr = g_inet_address_new_from_string (gst_uri_get_host (self->uri)); -+ if (g_inet_address_get_is_multicast (addr)) { -+ g_object_set (self->rtcp_src, "address", gst_uri_get_host (self->uri), -+ NULL); -+ } -+ g_object_unref (addr); -+ -+ gst_bin_add (GST_BIN (self), self->rtcp_src); -+ -+ gst_element_link (self->funnel_rtp, self->rtp_sink); -+ gst_element_link (self->funnel_rtcp, self->rtcp_sink); -+ -+ gst_element_sync_state_with_parent (self->funnel_rtp); -+ gst_element_sync_state_with_parent (self->funnel_rtcp); -+ gst_element_sync_state_with_parent (self->rtp_sink); -+ gst_element_sync_state_with_parent (self->rtcp_src); -+ -+ g_object_get (G_OBJECT (self->rtcp_src), "used-socket", &socket, NULL); -+ g_object_set (G_OBJECT (self->rtcp_sink), "socket", socket, NULL); -+ -+ gst_element_sync_state_with_parent (self->rtcp_sink); -+ -+ } -+ -+ /* pads are all named */ -+ g_snprintf (name, 48, "send_rtp_src_%u", GST_ELEMENT (self)->numpads); -+ gst_element_link_pads (self->rtpbin, name, self->funnel_rtp, "sink_%u"); -+ -+ g_snprintf (name, 48, "send_rtcp_src_%u", GST_ELEMENT (self)->numpads); -+ gst_element_link_pads (self->rtpbin, name, self->funnel_rtcp, "sink_%u"); -+ -+ g_snprintf (name, 48, "recv_rtcp_sink_%u", GST_ELEMENT (self)->numpads); -+ gst_element_link_pads (self->rtcp_src, "src", self->rtpbin, name); -+ -+ return TRUE; -+} -+ -+static GstPad * -+gst_rtp_sink_request_new_pad (GstElement * element, -+ GstPadTemplate * templ, const gchar * name, const GstCaps * caps) -+{ -+ GstRtpSink *self = GST_RTP_SINK (element); -+ GstPad *pad = NULL; -+ -+ if (self->rtpbin == NULL) { -+ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), -+ ("%s", "rtpbin element is not available")); -+ return NULL; -+ } -+ -+ if (gst_rtp_sink_setup_elements (self) == FALSE) -+ return NULL; -+ -+ GST_RTP_SINK_LOCK (self); -+ -+ pad = gst_element_get_request_pad (self->rtpbin, "send_rtp_sink_%u"); -+ g_return_val_if_fail (pad != NULL, NULL); -+ -+ GST_RTP_SINK_UNLOCK (self); -+ -+ return pad; -+} -+ -+static void -+gst_rtp_sink_release_pad (GstElement * element, GstPad * pad) -+{ -+ GstRtpSink *self = GST_RTP_SINK (element); -+ GstPad *rpad = gst_ghost_pad_get_target (GST_GHOST_PAD (pad)); -+ -+ GST_RTP_SINK_LOCK (self); -+ gst_element_release_request_pad (self->rtpbin, rpad); -+ gst_object_unref (rpad); -+ -+ gst_pad_set_active (pad, FALSE); -+ gst_element_remove_pad (GST_ELEMENT (self), pad); -+ -+ GST_RTP_SINK_UNLOCK (self); -+} -+ -+static void -+gst_rtp_sink_class_init (GstRtpSinkClass * klass) -+{ -+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass); -+ GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass); -+ -+ gobject_class->set_property = gst_rtp_sink_set_property; -+ gobject_class->get_property = gst_rtp_sink_get_property; -+ gobject_class->finalize = gst_rtp_sink_finalize; -+ gstelement_class->change_state = gst_rtp_sink_change_state; -+ -+ gstelement_class->request_new_pad = -+ GST_DEBUG_FUNCPTR (gst_rtp_sink_request_new_pad); -+ gstelement_class->release_pad = GST_DEBUG_FUNCPTR (gst_rtp_sink_release_pad); -+ -+ /** -+ * GstRtpSink:uri: -+ * -+ * uri to stream RTP to. All GStreamer parameters can be -+ * encoded in the URI, this URI format is RFC compliant. -+ */ -+ g_object_class_install_property (gobject_class, PROP_URI, -+ g_param_spec_string ("uri", "URI", -+ "URI in the form of rtp://host:port?query", DEFAULT_PROP_URI, -+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); -+ -+ /** -+ * GstRtpSink:ttl: -+ * -+ * Set the unicast TTL parameter. -+ */ -+ g_object_class_install_property (gobject_class, PROP_TTL, -+ g_param_spec_int ("ttl", "Unicast TTL", -+ "Used for setting the unicast TTL parameter", -+ 0, 255, DEFAULT_PROP_TTL, -+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); -+ -+ /** -+ * GstRtpSink:ttl-mc: -+ * -+ * Set the multicast TTL parameter. -+ */ -+ g_object_class_install_property (gobject_class, PROP_TTL_MC, -+ g_param_spec_int ("ttl-mc", "Multicast TTL", -+ "Used for setting the multicast TTL parameter", 0, 255, -+ DEFAULT_PROP_TTL_MC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); -+ -+ gst_element_class_add_pad_template (gstelement_class, -+ gst_static_pad_template_get (&sink_template)); -+ -+ gst_element_class_set_static_metadata (gstelement_class, -+ "RTP Sink element", -+ "Generic/Bin/Sink", -+ "Simple RTP sink", "Marc Leeman "); -+} -+ -+static void -+gst_rtp_sink_rtpbin_element_added_cb (GstBin * element, -+ GstElement * new_element, gpointer data) -+{ -+ GstRtpSink *self = GST_RTP_SINK (data); -+ GST_INFO_OBJECT (self, -+ "Element %" GST_PTR_FORMAT " added element %" GST_PTR_FORMAT ".", element, -+ new_element); -+} -+ -+static void -+gst_rtp_sink_rtpbin_pad_added_cb (GstElement * element, GstPad * pad, -+ gpointer data) -+{ -+ GstRtpSink *self = GST_RTP_SINK (data); -+ GstCaps *caps = gst_pad_query_caps (pad, NULL); -+ GstPad *upad; -+ -+ /* Expose RTP data pad only */ -+ GST_INFO_OBJECT (self, -+ "Element %" GST_PTR_FORMAT " added pad %" GST_PTR_FORMAT "with caps %" -+ GST_PTR_FORMAT ".", element, pad, caps); -+ -+ /* Sanity checks */ -+ if (GST_PAD_DIRECTION (pad) == GST_PAD_SINK) { -+ /* Src pad, do not expose */ -+ gst_caps_unref (caps); -+ return; -+ } -+ -+ if (G_LIKELY (caps)) { -+ GstCaps *ref_caps = gst_caps_new_empty_simple ("application/x-rtcp"); -+ -+ if (gst_caps_can_intersect (caps, ref_caps)) { -+ /* SRC RTCP caps, do not expose */ -+ gst_caps_unref (ref_caps); -+ gst_caps_unref (caps); -+ -+ return; -+ } -+ gst_caps_unref (ref_caps); -+ } else { -+ GST_ERROR_OBJECT (self, "Pad with no caps detected."); -+ gst_caps_unref (caps); -+ -+ return; -+ } -+ gst_caps_unref (caps); -+ -+ upad = gst_element_get_compatible_pad (self->funnel_rtp, pad, NULL); -+ if (upad == NULL) { -+ GST_ERROR_OBJECT (self, "No compatible pad found to link pad."); -+ gst_caps_unref (caps); -+ -+ return; -+ } -+ GST_INFO_OBJECT (self, "Linking with pad %" GST_PTR_FORMAT ".", upad); -+ gst_pad_link (pad, upad); -+ gst_object_unref (upad); -+} -+ -+static void -+gst_rtp_sink_rtpbin_pad_removed_cb (GstElement * element, GstPad * pad, -+ gpointer data) -+{ -+ GstRtpSink *self = GST_RTP_SINK (data); -+ GST_INFO_OBJECT (self, -+ "Element %" GST_PTR_FORMAT " removed pad %" GST_PTR_FORMAT ".", element, -+ pad); -+} -+ -+static gboolean -+gst_rtp_sink_setup_rtpbin (GstRtpSink * self) -+{ -+ self->rtpbin = gst_element_factory_make ("rtpbin", NULL); -+ if (self->rtpbin == NULL) { -+ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), -+ ("%s", "rtpbin element is not available")); -+ return FALSE; -+ } -+ -+ /* Add rtpbin callbacks to monitor the operation of rtpbin */ -+ g_signal_connect (self->rtpbin, "element-added", -+ G_CALLBACK (gst_rtp_sink_rtpbin_element_added_cb), self); -+ g_signal_connect (self->rtpbin, "pad-added", -+ G_CALLBACK (gst_rtp_sink_rtpbin_pad_added_cb), self); -+ g_signal_connect (self->rtpbin, "pad-removed", -+ G_CALLBACK (gst_rtp_sink_rtpbin_pad_removed_cb), self); -+ -+ gst_bin_add (GST_BIN (self), self->rtpbin); -+ -+ gst_element_sync_state_with_parent (self->rtpbin); -+ -+ return TRUE; -+} -+ -+static GstStateChangeReturn -+gst_rtp_sink_change_state (GstElement * element, GstStateChange transition) -+{ -+ GstRtpSink *self = GST_RTP_SINK (element); -+ GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; -+ -+ GST_DEBUG_OBJECT (self, "changing state: %s => %s", -+ gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)), -+ gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition))); -+ -+ switch (transition) { -+ case GST_STATE_CHANGE_NULL_TO_READY: -+ break; -+ case GST_STATE_CHANGE_READY_TO_PAUSED: -+ break; -+ default: -+ break; -+ } -+ -+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); -+ if (ret == GST_STATE_CHANGE_FAILURE) -+ return ret; -+ -+ switch (transition) { -+ case GST_STATE_CHANGE_READY_TO_PAUSED: -+ break; -+ case GST_STATE_CHANGE_PAUSED_TO_READY: -+ break; -+ default: -+ break; -+ } -+ -+ return ret; -+} -+ -+ -+static void -+gst_rtp_sink_init (GstRtpSink * self) -+{ -+ self->rtpbin = NULL; -+ self->funnel_rtp = NULL; -+ self->funnel_rtcp = NULL; -+ self->rtp_sink = NULL; -+ self->rtcp_src = NULL; -+ self->rtcp_sink = NULL; -+ -+ self->uri = gst_uri_from_string (DEFAULT_PROP_URI); -+ self->ttl = DEFAULT_PROP_TTL; -+ self->ttl_mc = DEFAULT_PROP_TTL_MC; -+ -+ if (gst_rtp_sink_setup_rtpbin (self) == FALSE) -+ return; -+ -+ GST_OBJECT_FLAG_SET (GST_OBJECT (self), GST_ELEMENT_FLAG_SINK); -+ gst_bin_set_suppressed_flags (GST_BIN (self), -+ GST_ELEMENT_FLAG_SOURCE | GST_ELEMENT_FLAG_SINK); -+ -+ g_mutex_init (&self->lock); -+} -+ -+static guint -+gst_rtp_sink_uri_get_type (GType type) -+{ -+ return GST_URI_SINK; -+} -+ -+static const gchar *const * -+gst_rtp_sink_uri_get_protocols (GType type) -+{ -+ static const gchar *protocols[] = { (char *) "rtp", NULL }; -+ -+ return protocols; -+} -+ -+static gchar * -+gst_rtp_sink_uri_get_uri (GstURIHandler * handler) -+{ -+ GstRtpSink *self = (GstRtpSink *) handler; -+ -+ return gst_uri_to_string (self->uri); -+} -+ -+static gboolean -+gst_rtp_sink_uri_set_uri (GstURIHandler * handler, const gchar * uri, -+ GError ** error) -+{ -+ GstRtpSink *self = (GstRtpSink *) handler; -+ -+ g_object_set (G_OBJECT (self), "uri", uri, NULL); -+ -+ return TRUE; -+} -+ -+static void -+gst_rtp_sink_uri_handler_init (gpointer g_iface, gpointer iface_data) -+{ -+ GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface; -+ -+ iface->get_type = gst_rtp_sink_uri_get_type; -+ iface->get_protocols = gst_rtp_sink_uri_get_protocols; -+ iface->get_uri = gst_rtp_sink_uri_get_uri; -+ iface->set_uri = gst_rtp_sink_uri_set_uri; -+} -+ -+/* ex: set tabstop=2 shiftwidth=2 expandtab: */ -diff --git a/gst/rtp/gstrtpsink.h b/gst/rtp/gstrtpsink.h -new file mode 100644 -index 000000000..6f3fec0ac ---- /dev/null -+++ b/gst/rtp/gstrtpsink.h -@@ -0,0 +1,72 @@ -+/* GStreamer -+ * Copyright (C) 2019 Marc Leeman -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Library General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Library General Public License for more details. -+ * -+ * You should have received a copy of the GNU Library General Public -+ * License along with this library; if not, write to the -+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -+ * Boston, MA 02110-1301, USA. -+ */ -+ -+#ifndef __GST_RTP_SINK_H__ -+#define __GST_RTP_SINK_H__ -+ -+#include -+ -+G_BEGIN_DECLS -+#define GST_TYPE_RTP_SINK \ -+ (gst_rtp_sink_get_type()) -+#define GST_RTP_SINK(obj) \ -+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_RTP_SINK, GstRtpSink)) -+#define GST_RTP_SINK_CAST(obj) \ -+ ((GstRtpSink *) obj) -+#define GST_RTP_SINK_CLASS(klass) \ -+ (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_RTP_SINK, GstRtpSinkClass)) -+#define GST_IS_RTP_SINK(obj) \ -+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_RTP_SINK)) -+#define GST_IS_RTP_SINK_CLASS(klass) \ -+ (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_RTP_SINK)) -+ -+typedef struct _GstRtpSink GstRtpSink; -+typedef struct _GstRtpSinkClass GstRtpSinkClass; -+ -+struct _GstRtpSink -+{ -+ GstBin parent; -+ -+ GstBin parent_instance; -+ -+ /* Properties */ -+ GstUri *uri; -+ gint ttl; -+ gint ttl_mc; -+ -+ /* Internal elements */ -+ GstElement *rtpbin; -+ GstElement *funnel_rtp; -+ GstElement *funnel_rtcp; -+ GstElement *rtp_sink; -+ GstElement *rtcp_src; -+ GstElement *rtcp_sink; -+ -+ GMutex lock; -+}; -+ -+struct _GstRtpSinkClass -+{ -+ GstBinClass parent; -+}; -+ -+GType gst_rtp_sink_get_type (void); -+ -+G_END_DECLS -+#endif /* __GST_RTP_SINK_H__ */ -diff --git a/gst/rtp/gstrtpsrc.c b/gst/rtp/gstrtpsrc.c -new file mode 100644 -index 000000000..bf958603b ---- /dev/null -+++ b/gst/rtp/gstrtpsrc.c -@@ -0,0 +1,731 @@ -+/* GStreamer -+ * Copyright (C) <2018> Marc Leeman -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Library General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Library General Public License for more details. -+ * -+ * You should have received a copy of the GNU Library General Public -+ * License along with this library; if not, write to the -+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -+ * Boston, MA 02110-1301, USA. -+ */ -+ -+/** -+ * SECTION: gstrtpsrc -+ * @title: GstRtpSrc -+ * @short description: element with Uri interface to get RTP data from -+ * the network. -+ * -+ * RTP (RFC 3550) is a protocol to stream media over the network while -+ * retaining the timing information and providing enough information to -+ * reconstruct the correct timing domain by the receiver. -+ * -+ * The RTP data port should be even, while the RTCP port should be -+ * odd. The URI that is entered defines the data port, the RTCP port will -+ * be allocated to the next port. -+ * -+ * This element hooks up the correct sockets to support both RTP as the -+ * accompanying RTCP layer. -+ * -+ * This Bin handles taking in of data from the network and provides the -+ * RTP payloaded data. -+ * -+ * This element also implements the URI scheme `rtp://` allowing to render -+ * RTP streams in GStreamer based media players. The RTP URI handler also -+ * allows setting properties through the URI query. -+ */ -+#ifdef HAVE_CONFIG_H -+#include -+#endif -+ -+#include -+#include -+ -+#include "gstrtpsrc.h" -+#include "gstrtp-utils.h" -+ -+GST_DEBUG_CATEGORY_STATIC (gst_rtp_src_debug); -+#define GST_CAT_DEFAULT gst_rtp_src_debug -+ -+#define DEFAULT_PROP_TTL 64 -+#define DEFAULT_PROP_TTL_MC 1 -+#define DEFAULT_PROP_ENCODING_NAME NULL -+#define DEFAULT_PROP_LATENCY 200 -+ -+#define DEFAULT_PROP_URI "rtp://0.0.0.0:5004" -+ -+enum -+{ -+ PROP_0, -+ -+ PROP_URI, -+ PROP_TTL, -+ PROP_TTL_MC, -+ PROP_ENCODING_NAME, -+ PROP_LATENCY, -+ -+ PROP_LAST -+}; -+ -+static void gst_rtp_src_uri_handler_init (gpointer g_iface, -+ gpointer iface_data); -+ -+#define gst_rtp_src_parent_class parent_class -+G_DEFINE_TYPE_WITH_CODE (GstRtpSrc, gst_rtp_src, GST_TYPE_BIN, -+ G_IMPLEMENT_INTERFACE (GST_TYPE_URI_HANDLER, gst_rtp_src_uri_handler_init); -+ GST_DEBUG_CATEGORY_INIT (gst_rtp_src_debug, "rtpsrc", 0, "RTP Source")); -+ -+#define GST_RTP_SRC_GET_LOCK(obj) (&((GstRtpSrc*)(obj))->lock) -+#define GST_RTP_SRC_LOCK(obj) (g_mutex_lock (GST_RTP_SRC_GET_LOCK(obj))) -+#define GST_RTP_SRC_UNLOCK(obj) (g_mutex_unlock (GST_RTP_SRC_GET_LOCK(obj))) -+ -+static GstStaticPadTemplate src_template = GST_STATIC_PAD_TEMPLATE ("src_%u", -+ GST_PAD_SRC, -+ GST_PAD_SOMETIMES, -+ GST_STATIC_CAPS ("application/x-rtp")); -+ -+static GstStateChangeReturn -+gst_rtp_src_change_state (GstElement * element, GstStateChange transition); -+ -+/** -+ * gst_rtp_src_rtpbin_erquest_pt_map_cb: -+ * @self: The current #GstRtpSrc object -+ * -+ * #GstRtpBin callback to map a pt on RTP caps. -+ * -+ * Returns: (transfer none): the guess on the RTP caps based on the PT -+ * and caps. -+ */ -+static GstCaps * -+gst_rtp_src_rtpbin_request_pt_map_cb (GstElement * rtpbin, guint session_id, -+ guint pt, gpointer data) -+{ -+ GstRtpSrc *self = GST_RTP_SRC (data); -+ const GstRTPPayloadInfo *p = NULL; -+ -+ GST_DEBUG_OBJECT (self, -+ "Requesting caps for session-id 0x%x and pt %u.", session_id, pt); -+ -+ /* the encoding-name has more relevant information */ -+ if (self->encoding_name != NULL) { -+ /* Unfortunately, the media needs to be passed in the function. Since -+ * it is not known, try for video if video not found. */ -+ p = gst_rtp_payload_info_for_name ("video", self->encoding_name); -+ if (p == NULL) -+ p = gst_rtp_payload_info_for_name ("audio", self->encoding_name); -+ -+ } -+ -+ /* Static payload types, this is a simple lookup */ -+ if (!GST_RTP_PAYLOAD_IS_DYNAMIC (pt)) { -+ p = gst_rtp_payload_info_for_pt (pt); -+ } -+ -+ if (p != NULL) { -+ GstCaps *ret = gst_caps_new_simple ("application/x-rtp", -+ "encoding-name", G_TYPE_STRING, p->encoding_name, -+ "clock-rate", G_TYPE_INT, p->clock_rate, -+ "media", G_TYPE_STRING, p->media, NULL); -+ -+ GST_DEBUG_OBJECT (self, "Decided on caps %" GST_PTR_FORMAT, ret); -+ -+ return ret; -+ } -+ -+ GST_DEBUG_OBJECT (self, "Could not determine caps based on pt and" -+ " the encoding-name was not set."); -+ return NULL; -+} -+ -+static void -+gst_rtp_src_set_property (GObject * object, guint prop_id, -+ const GValue * value, GParamSpec * pspec) -+{ -+ GstRtpSrc *self = GST_RTP_SRC (object); -+ GstCaps *caps; -+ -+ switch (prop_id) { -+ case PROP_URI:{ -+ GstUri *uri = NULL; -+ -+ GST_RTP_SRC_LOCK (object); -+ uri = gst_uri_from_string (g_value_get_string (value)); -+ if (uri == NULL) -+ break; -+ -+ if (self->uri) -+ gst_uri_unref (self->uri); -+ self->uri = uri; -+ if (gst_uri_get_port (self->uri) % 2) -+ GST_WARNING_OBJECT (self, -+ "Port %u is not even, this is not standard (see RFC 3550).", -+ gst_uri_get_port (self->uri)); -+ gst_rtp_utils_set_properties_from_uri_query (G_OBJECT (self), self->uri); -+ GST_RTP_SRC_UNLOCK (object); -+ break; -+ } -+ case PROP_TTL: -+ self->ttl = g_value_get_int (value); -+ break; -+ case PROP_TTL_MC: -+ self->ttl_mc = g_value_get_int (value); -+ break; -+ case PROP_ENCODING_NAME: -+ g_free (self->encoding_name); -+ self->encoding_name = g_value_dup_string (value); -+ if (self->rtp_src) { -+ caps = gst_rtp_src_rtpbin_request_pt_map_cb (NULL, 0, 96, self); -+ g_object_set (G_OBJECT (self->rtp_src), "caps", caps, NULL); -+ gst_caps_unref (caps); -+ } -+ break; -+ case PROP_LATENCY: -+ self->latency = g_value_get_uint (value); -+ break; -+ default: -+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -+ break; -+ } -+} -+ -+static void -+gst_rtp_src_get_property (GObject * object, guint prop_id, -+ GValue * value, GParamSpec * pspec) -+{ -+ GstRtpSrc *self = GST_RTP_SRC (object); -+ -+ switch (prop_id) { -+ case PROP_URI: -+ GST_RTP_SRC_LOCK (object); -+ if (self->uri) -+ g_value_take_string (value, gst_uri_to_string (self->uri)); -+ else -+ g_value_set_string (value, NULL); -+ GST_RTP_SRC_UNLOCK (object); -+ break; -+ case PROP_TTL: -+ g_value_set_int (value, self->ttl); -+ break; -+ case PROP_TTL_MC: -+ g_value_set_int (value, self->ttl_mc); -+ break; -+ case PROP_ENCODING_NAME: -+ g_value_set_string (value, self->encoding_name); -+ break; -+ case PROP_LATENCY: -+ g_value_set_uint (value, self->latency); -+ break; -+ default: -+ G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec); -+ break; -+ } -+} -+ -+static void -+gst_rtp_src_finalize (GObject * gobject) -+{ -+ GstRtpSrc *self = GST_RTP_SRC (gobject); -+ -+ if (self->uri) -+ gst_uri_unref (self->uri); -+ g_free (self->encoding_name); -+ -+ g_mutex_clear (&self->lock); -+ G_OBJECT_CLASS (parent_class)->finalize (gobject); -+} -+ -+static void -+gst_rtp_src_class_init (GstRtpSrcClass * klass) -+{ -+ GObjectClass *gobject_class = G_OBJECT_CLASS (klass); -+ GstElementClass *gstelement_class = GST_ELEMENT_CLASS (klass); -+ -+ gobject_class->set_property = gst_rtp_src_set_property; -+ gobject_class->get_property = gst_rtp_src_get_property; -+ gobject_class->finalize = gst_rtp_src_finalize; -+ gstelement_class->change_state = gst_rtp_src_change_state; -+ -+ /** -+ * GstRtpSrc:uri: -+ * -+ * uri to an RTP from. All GStreamer parameters can be -+ * encoded in the URI, this URI format is RFC compliant. -+ */ -+ g_object_class_install_property (gobject_class, PROP_URI, -+ g_param_spec_string ("uri", "URI", -+ "URI in the form of rtp://host:port?query", DEFAULT_PROP_URI, -+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); -+ -+ /** -+ * GstRtpSrc:ttl: -+ * -+ * Set the unicast TTL parameter. In RTP this of importance for RTCP. -+ */ -+ g_object_class_install_property (gobject_class, PROP_TTL, -+ g_param_spec_int ("ttl", "Unicast TTL", -+ "Used for setting the unicast TTL parameter", -+ 0, 255, DEFAULT_PROP_TTL, -+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); -+ -+ /** -+ * GstRtpSrc:ttl-mc: -+ * -+ * Set the multicast TTL parameter. In RTP this of importance for RTCP. -+ */ -+ g_object_class_install_property (gobject_class, PROP_TTL_MC, -+ g_param_spec_int ("ttl-mc", "Multicast TTL", -+ "Used for setting the multicast TTL parameter", 0, 255, -+ DEFAULT_PROP_TTL_MC, G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); -+ -+ /** -+ * GstRtpSrc:encoding-name: -+ * -+ * Set the encoding name of the stream to use. This is a short-hand for -+ * the full caps and maps typically to the encoding-name in the RTP caps. -+ */ -+ g_object_class_install_property (gobject_class, PROP_ENCODING_NAME, -+ g_param_spec_string ("encoding-name", "Caps encoding name", -+ "Encoding name use to determine caps parameters", -+ DEFAULT_PROP_ENCODING_NAME, -+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); -+ -+ /** -+ * GstRtpSrc:latency: -+ * -+ * Set the size of the latency buffer in the -+ * GstRtpBin/GstRtpJitterBuffer to compensate for network jitter. -+ */ -+ g_object_class_install_property (gobject_class, PROP_LATENCY, -+ g_param_spec_uint ("latency", "Buffer latency in ms", -+ "Default amount of ms to buffer in the jitterbuffers", 0, -+ G_MAXUINT, DEFAULT_PROP_LATENCY, -+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS)); -+ -+ gst_element_class_add_pad_template (gstelement_class, -+ gst_static_pad_template_get (&src_template)); -+ -+ gst_element_class_set_static_metadata (gstelement_class, -+ "RTP Source element", -+ "Generic/Bin/Src", -+ "Simple RTP src", "Marc Leeman "); -+} -+ -+static void -+gst_rtp_src_rtpbin_pad_added_cb (GstElement * element, GstPad * pad, -+ gpointer data) -+{ -+ GstRtpSrc *self = GST_RTP_SRC (data); -+ GstCaps *caps = gst_pad_query_caps (pad, NULL); -+ GstPad *upad; -+ gchar name[48]; -+ -+ /* Expose RTP data pad only */ -+ GST_INFO_OBJECT (self, -+ "Element %" GST_PTR_FORMAT " added pad %" GST_PTR_FORMAT "with caps %" -+ GST_PTR_FORMAT ".", element, pad, caps); -+ -+ /* Sanity checks */ -+ if (GST_PAD_DIRECTION (pad) == GST_PAD_SINK) { -+ /* Sink pad, do not expose */ -+ gst_caps_unref (caps); -+ return; -+ } -+ -+ if (G_LIKELY (caps)) { -+ GstCaps *ref_caps = gst_caps_new_empty_simple ("application/x-rtcp"); -+ -+ if (gst_caps_can_intersect (caps, ref_caps)) { -+ /* SRC RTCP caps, do not expose */ -+ gst_caps_unref (ref_caps); -+ gst_caps_unref (caps); -+ -+ return; -+ } -+ gst_caps_unref (ref_caps); -+ } else { -+ GST_ERROR_OBJECT (self, "Pad with no caps detected."); -+ gst_caps_unref (caps); -+ -+ return; -+ } -+ gst_caps_unref (caps); -+ -+ GST_RTP_SRC_LOCK (self); -+ g_snprintf (name, 48, "src_%u", GST_ELEMENT (self)->numpads); -+ upad = gst_ghost_pad_new (name, pad); -+ -+ gst_pad_set_active (upad, TRUE); -+ gst_element_add_pad (GST_ELEMENT (self), upad); -+ -+ GST_RTP_SRC_UNLOCK (self); -+} -+ -+static void -+gst_rtp_src_rtpbin_pad_removed_cb (GstElement * element, GstPad * pad, -+ gpointer data) -+{ -+ GstRtpSrc *self = GST_RTP_SRC (data); -+ GST_INFO_OBJECT (self, -+ "Element %" GST_PTR_FORMAT " removed pad %" GST_PTR_FORMAT ".", element, -+ pad); -+} -+ -+static void -+gst_rtp_src_rtpbin_on_ssrc_collision_cb (GstElement * rtpbin, guint session_id, -+ guint ssrc, gpointer data) -+{ -+ GstRtpSrc *self = GST_RTP_SRC (data); -+ -+ GST_INFO_OBJECT (self, -+ "Dectected an SSRC collision: session-id 0x%x, ssrc 0x%x.", session_id, -+ ssrc); -+} -+ -+static void -+gst_rtp_src_rtpbin_on_new_ssrc_cb (GstElement * rtpbin, guint session_id, -+ guint ssrc, gpointer data) -+{ -+ GstRtpSrc *self = GST_RTP_SRC (data); -+ -+ GST_INFO_OBJECT (self, "Dectected a new SSRC: session-id 0x%x, ssrc 0x%x.", -+ session_id, ssrc); -+} -+ -+static GstPadProbeReturn -+gst_rtp_src_on_recv_rtcp (GstPad * pad, GstPadProbeInfo * info, -+ gpointer user_data) -+{ -+ GstRtpSrc *self = GST_RTP_SRC (user_data); -+ GstBuffer *buffer; -+ GstNetAddressMeta *meta; -+ -+ if (info->type == GST_PAD_PROBE_TYPE_BUFFER_LIST) { -+ GstBufferList *buffer_list = info->data; -+ buffer = gst_buffer_list_get (buffer_list, 0); -+ } else { -+ buffer = info->data; -+ } -+ -+ meta = gst_buffer_get_net_address_meta (buffer); -+ -+ GST_OBJECT_LOCK (self); -+ g_clear_object (&self->rtcp_send_addr); -+ self->rtcp_send_addr = g_object_ref (meta->addr); -+ GST_OBJECT_UNLOCK (self); -+ -+ return GST_PAD_PROBE_OK; -+} -+ -+static inline void -+gst_rtp_src_attach_net_address_meta (GstRtpSrc * self, GstBuffer * buffer) -+{ -+ GST_OBJECT_LOCK (self); -+ if (self->rtcp_send_addr) -+ gst_buffer_add_net_address_meta (buffer, self->rtcp_send_addr); -+ GST_OBJECT_UNLOCK (self); -+} -+ -+static GstPadProbeReturn -+gst_rtp_src_on_send_rtcp (GstPad * pad, GstPadProbeInfo * info, -+ gpointer user_data) -+{ -+ GstRtpSrc *self = GST_RTP_SRC (user_data); -+ -+ if (info->type == GST_PAD_PROBE_TYPE_BUFFER_LIST) { -+ GstBufferList *buffer_list = info->data; -+ GstBuffer *buffer; -+ gint i; -+ -+ info->data = buffer_list = gst_buffer_list_make_writable (buffer_list); -+ for (i = 0; i < gst_buffer_list_length (buffer_list); i++) { -+ buffer = gst_buffer_list_get (buffer_list, i); -+ gst_rtp_src_attach_net_address_meta (self, buffer); -+ } -+ } else { -+ GstBuffer *buffer = info->data; -+ info->data = buffer = gst_buffer_make_writable (buffer); -+ gst_rtp_src_attach_net_address_meta (self, buffer); -+ } -+ -+ return GST_PAD_PROBE_OK; -+} -+ -+static gboolean -+gst_rtp_src_setup_elements (GstRtpSrc * self) -+{ -+ GstPad *pad; -+ GSocket *socket; -+ GInetAddress *addr; -+ gchar name[48]; -+ GstCaps *caps; -+ gchar *address; -+ guint rtcp_port; -+ -+ /* Construct the RTP receiver pipeline. -+ * -+ * udpsrc -> [recv_rtp_sink_%u] -------- [recv_rtp_src_%u_%u_%u] -+ * | rtpbin | -+ * udpsrc -> [recv_rtcp_sink_%u] -------- [send_rtcp_src_%u] -> udpsink -+ * -+ * This pipeline is fixed for now, note that optionally an FEC stream could -+ * be added later. -+ */ -+ -+ /* Should not be NULL */ -+ g_return_val_if_fail (self->uri != NULL, FALSE); -+ -+ self->rtpbin = gst_element_factory_make ("rtpbin", NULL); -+ if (self->rtpbin == NULL) { -+ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), -+ ("%s", "rtpbin element is not available")); -+ return FALSE; -+ } -+ -+ self->rtp_src = gst_element_factory_make ("udpsrc", NULL); -+ if (self->rtp_src == NULL) { -+ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), -+ ("%s", "rtp_src element is not available")); -+ return FALSE; -+ } -+ -+ self->rtcp_src = gst_element_factory_make ("udpsrc", NULL); -+ if (self->rtcp_src == NULL) { -+ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), -+ ("%s", "rtcp_src element is not available")); -+ return FALSE; -+ } -+ -+ self->rtcp_sink = gst_element_factory_make ("dynudpsink", NULL); -+ if (self->rtcp_sink == NULL) { -+ GST_ELEMENT_ERROR (self, CORE, MISSING_PLUGIN, (NULL), -+ ("%s", "rtcp_sink element is not available")); -+ return FALSE; -+ } -+ -+ /* Add rtpbin callbacks to monitor the operation of rtpbin */ -+ g_signal_connect (self->rtpbin, "pad-added", -+ G_CALLBACK (gst_rtp_src_rtpbin_pad_added_cb), self); -+ g_signal_connect (self->rtpbin, "pad-removed", -+ G_CALLBACK (gst_rtp_src_rtpbin_pad_removed_cb), self); -+ g_signal_connect (self->rtpbin, "request-pt-map", -+ G_CALLBACK (gst_rtp_src_rtpbin_request_pt_map_cb), self); -+ g_signal_connect (self->rtpbin, "on-new-ssrc", -+ G_CALLBACK (gst_rtp_src_rtpbin_on_new_ssrc_cb), self); -+ g_signal_connect (self->rtpbin, "on-ssrc-collision", -+ G_CALLBACK (gst_rtp_src_rtpbin_on_ssrc_collision_cb), self); -+ -+ g_object_set (self->rtpbin, "latency", self->latency, NULL); -+ -+ /* Add elements as needed, since udpsrc/udpsink for RTCP share a socket, -+ * not all at the same moment */ -+ gst_bin_add (GST_BIN (self), self->rtpbin); -+ gst_bin_add (GST_BIN (self), self->rtp_src); -+ -+ g_object_set (self->rtp_src, -+ "address", gst_uri_get_host (self->uri), -+ "port", gst_uri_get_port (self->uri), NULL); -+ -+ gst_bin_add (GST_BIN (self), self->rtcp_sink); -+ -+ /* no need to set address if unicast */ -+ caps = gst_caps_new_empty_simple ("application/x-rtcp"); -+ g_object_set (self->rtcp_src, -+ "port", gst_uri_get_port (self->uri) + 1, "caps", caps, NULL); -+ gst_caps_unref (caps); -+ -+ addr = g_inet_address_new_from_string (gst_uri_get_host (self->uri)); -+ if (g_inet_address_get_is_multicast (addr)) { -+ g_object_set (self->rtcp_src, "address", gst_uri_get_host (self->uri), -+ NULL); -+ } -+ g_object_unref (addr); -+ -+ g_object_set (self->rtcp_sink, -+ "host", gst_uri_get_host (self->uri), -+ "port", gst_uri_get_port (self->uri) + 1, -+ "ttl", self->ttl, "ttl-mc", self->ttl_mc, -+ /* Set false since we're reusing a socket */ -+ "auto-multicast", FALSE, NULL); -+ -+ gst_bin_add (GST_BIN (self), self->rtcp_src); -+ -+ /* share the socket created by the source */ -+ g_object_get (G_OBJECT (self->rtcp_src), "used-socket", &socket, -+ "address", &address, "port", &rtcp_port, NULL); -+ -+ addr = g_inet_address_new_from_string (address); -+ g_free (address); -+ -+ if (g_inet_address_get_is_multicast (addr)) { -+ /* mc-ttl is not supported by dynudpsink */ -+ g_socket_set_multicast_ttl (socket, self->ttl_mc); -+ /* In multicast, send RTCP to the multicast group */ -+ self->rtcp_send_addr = g_inet_socket_address_new (addr, rtcp_port); -+ } else { -+ /* In unicast, send RTCP to the detected sender address */ -+ pad = gst_element_get_static_pad (self->rtcp_src, "src"); -+ self->rtcp_recv_probe = gst_pad_add_probe (pad, -+ GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_BUFFER_LIST, -+ gst_rtp_src_on_recv_rtcp, self, NULL); -+ gst_object_unref (pad); -+ } -+ g_object_unref (addr); -+ -+ pad = gst_element_get_static_pad (self->rtcp_sink, "sink"); -+ self->rtcp_send_probe = gst_pad_add_probe (pad, -+ GST_PAD_PROBE_TYPE_BUFFER | GST_PAD_PROBE_TYPE_BUFFER_LIST, -+ gst_rtp_src_on_send_rtcp, self, NULL); -+ gst_object_unref (pad); -+ -+ g_object_set (G_OBJECT (self->rtcp_sink), "socket", socket, NULL); -+ -+ /* pads are all named */ -+ g_snprintf (name, 48, "recv_rtp_sink_%u", GST_ELEMENT (self)->numpads); -+ gst_element_link_pads (self->rtp_src, "src", self->rtpbin, name); -+ -+ g_snprintf (name, 48, "recv_rtcp_sink_%u", GST_ELEMENT (self)->numpads); -+ gst_element_link_pads (self->rtcp_src, "src", self->rtpbin, name); -+ -+ gst_element_sync_state_with_parent (self->rtpbin); -+ gst_element_sync_state_with_parent (self->rtp_src); -+ gst_element_sync_state_with_parent (self->rtcp_sink); -+ -+ g_snprintf (name, 48, "send_rtcp_src_%u", GST_ELEMENT (self)->numpads); -+ gst_element_link_pads (self->rtpbin, name, self->rtcp_sink, "sink"); -+ -+ gst_element_sync_state_with_parent (self->rtcp_src); -+ -+ return TRUE; -+} -+ -+static void -+gst_rtp_src_stop (GstRtpSrc * self) -+{ -+ GstPad *pad; -+ -+ if (self->rtcp_recv_probe) { -+ pad = gst_element_get_static_pad (self->rtcp_src, "src"); -+ gst_pad_remove_probe (pad, self->rtcp_recv_probe); -+ self->rtcp_recv_probe = 0; -+ gst_object_unref (pad); -+ } -+ -+ pad = gst_element_get_static_pad (self->rtcp_sink, "sink"); -+ gst_pad_remove_probe (pad, self->rtcp_send_probe); -+ self->rtcp_send_probe = 0; -+ gst_object_unref (pad); -+} -+ -+static GstStateChangeReturn -+gst_rtp_src_change_state (GstElement * element, GstStateChange transition) -+{ -+ GstRtpSrc *self = GST_RTP_SRC (element); -+ GstStateChangeReturn ret = GST_STATE_CHANGE_SUCCESS; -+ -+ GST_DEBUG_OBJECT (self, "Changing state: %s => %s", -+ gst_element_state_get_name (GST_STATE_TRANSITION_CURRENT (transition)), -+ gst_element_state_get_name (GST_STATE_TRANSITION_NEXT (transition))); -+ -+ switch (transition) { -+ case GST_STATE_CHANGE_NULL_TO_READY: -+ if (gst_rtp_src_setup_elements (self) == FALSE) -+ return GST_STATE_CHANGE_FAILURE; -+ break; -+ default: -+ break; -+ } -+ -+ ret = GST_ELEMENT_CLASS (parent_class)->change_state (element, transition); -+ if (ret == GST_STATE_CHANGE_FAILURE) -+ return ret; -+ -+ switch (transition) { -+ case GST_STATE_CHANGE_READY_TO_PAUSED: -+ ret = GST_STATE_CHANGE_NO_PREROLL; -+ break; -+ case GST_STATE_CHANGE_PLAYING_TO_PAUSED: -+ ret = GST_STATE_CHANGE_NO_PREROLL; -+ break; -+ case GST_STATE_CHANGE_READY_TO_NULL: -+ gst_rtp_src_stop (self); -+ break; -+ default: -+ break; -+ } -+ -+ return ret; -+} -+ -+static void -+gst_rtp_src_init (GstRtpSrc * self) -+{ -+ self->rtpbin = NULL; -+ self->rtp_src = NULL; -+ self->rtcp_src = NULL; -+ self->rtcp_sink = NULL; -+ -+ self->uri = gst_uri_from_string (DEFAULT_PROP_URI); -+ self->ttl = DEFAULT_PROP_TTL; -+ self->ttl_mc = DEFAULT_PROP_TTL_MC; -+ self->encoding_name = DEFAULT_PROP_ENCODING_NAME; -+ self->latency = DEFAULT_PROP_LATENCY; -+ -+ GST_OBJECT_FLAG_SET (GST_OBJECT (self), GST_ELEMENT_FLAG_SOURCE); -+ gst_bin_set_suppressed_flags (GST_BIN (self), -+ GST_ELEMENT_FLAG_SOURCE | GST_ELEMENT_FLAG_SINK); -+ -+ g_mutex_init (&self->lock); -+} -+ -+static guint -+gst_rtp_src_uri_get_type (GType type) -+{ -+ return GST_URI_SRC; -+} -+ -+static const gchar *const * -+gst_rtp_src_uri_get_protocols (GType type) -+{ -+ static const gchar *protocols[] = { (char *) "rtp", NULL }; -+ -+ return protocols; -+} -+ -+static gchar * -+gst_rtp_src_uri_get_uri (GstURIHandler * handler) -+{ -+ GstRtpSrc *self = (GstRtpSrc *) handler; -+ -+ return gst_uri_to_string (self->uri); -+} -+ -+static gboolean -+gst_rtp_src_uri_set_uri (GstURIHandler * handler, const gchar * uri, -+ GError ** error) -+{ -+ GstRtpSrc *self = (GstRtpSrc *) handler; -+ -+ g_object_set (G_OBJECT (self), "uri", uri, NULL); -+ -+ return TRUE; -+} -+ -+static void -+gst_rtp_src_uri_handler_init (gpointer g_iface, gpointer iface_data) -+{ -+ GstURIHandlerInterface *iface = (GstURIHandlerInterface *) g_iface; -+ -+ iface->get_type = gst_rtp_src_uri_get_type; -+ iface->get_protocols = gst_rtp_src_uri_get_protocols; -+ iface->get_uri = gst_rtp_src_uri_get_uri; -+ iface->set_uri = gst_rtp_src_uri_set_uri; -+} -+ -+/* ex: set tabstop=2 shiftwidth=2 expandtab: */ -diff --git a/gst/rtp/gstrtpsrc.h b/gst/rtp/gstrtpsrc.h -new file mode 100644 -index 000000000..4bc3535ef ---- /dev/null -+++ b/gst/rtp/gstrtpsrc.h -@@ -0,0 +1,76 @@ -+/* GStreamer -+ * Copyright (C) 2019 Marc Leeman -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Library General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Library General Public License for more details. -+ * -+ * You should have received a copy of the GNU Library General Public -+ * License along with this library; if not, write to the -+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -+ * Boston, MA 02110-1301, USA. -+ */ -+ -+#ifndef __GST_RTP_SRC_H__ -+#define __GST_RTP_SRC_H__ -+ -+#include -+#include -+ -+G_BEGIN_DECLS -+#define GST_TYPE_RTP_SRC \ -+ (gst_rtp_src_get_type()) -+#define GST_RTP_SRC(obj) \ -+ (G_TYPE_CHECK_INSTANCE_CAST ((obj), GST_TYPE_RTP_SRC, GstRtpSrc)) -+#define GST_RTP_SRC_CAST(obj) \ -+ ((GstRtpSrc *) obj) -+#define GST_RTP_SRC_CLASS(klass) \ -+ (G_TYPE_CHECK_CLASS_CAST ((klass), GST_TYPE_RTP_SRC, GstRtpSrcClass)) -+#define GST_IS_RTP_SRC(obj) \ -+ (G_TYPE_CHECK_INSTANCE_TYPE ((obj), GST_TYPE_RTP_SRC)) -+#define GST_IS_RTP_SRC_CLASS(klass) \ -+ (G_TYPE_CHECK_CLASS_TYPE ((klass), GST_TYPE_RTP_SRC)) -+ -+typedef struct _GstRtpSrc GstRtpSrc; -+typedef struct _GstRtpSrcClass GstRtpSrcClass; -+ -+struct _GstRtpSrc -+{ -+ GstBin parent; -+ -+ /* Properties */ -+ GstUri *uri; -+ gint ttl; -+ gint ttl_mc; -+ gint latency; -+ gchar *encoding_name; -+ guint latency_ms; -+ -+ /* Internal elements */ -+ GstElement *rtpbin; -+ GstElement *rtp_src; -+ GstElement *rtcp_src; -+ GstElement *rtcp_sink; -+ -+ gulong rtcp_recv_probe; -+ gulong rtcp_send_probe; -+ GSocketAddress *rtcp_send_addr; -+ -+ GMutex lock; -+}; -+ -+struct _GstRtpSrcClass -+{ -+ GstBinClass parent; -+}; -+ -+GType gst_rtp_src_get_type (void); -+ -+G_END_DECLS -+#endif /* __GST_RTP_SRC_H__ */ -diff --git a/gst/rtp/meson.build b/gst/rtp/meson.build -new file mode 100644 -index 000000000..bb21dae5b ---- /dev/null -+++ b/gst/rtp/meson.build -@@ -0,0 +1,15 @@ -+gst_plugins_rtp_sources = [ -+ 'plugin.c', -+ 'gstrtpsink.c', -+ 'gstrtpsrc.c', -+ 'gstrtp-utils.c', -+] -+ -+gstrtp = library('gstrtpmanagerbad', -+ gst_plugins_rtp_sources, -+ dependencies: [gio_dep, gst_dep, gstbase_dep, gstrtp_dep, gstnet_dep, gstcontroller_dep], -+ include_directories: [configinc], -+ install: true, -+ c_args: gst_plugins_bad_args, -+ install_dir: plugins_install_dir, -+) -diff --git a/gst/rtp/plugin.c b/gst/rtp/plugin.c -new file mode 100644 -index 000000000..8c1d71f8b ---- /dev/null -+++ b/gst/rtp/plugin.c -@@ -0,0 +1,28 @@ -+#ifdef HAVE_CONFIG_H -+#include "config.h" -+#endif -+ -+#include "gstrtpsink.h" -+#include "gstrtpsrc.h" -+ -+ -+static gboolean -+plugin_init (GstPlugin * plugin) -+{ -+ -+ gboolean ret = FALSE; -+ -+ ret |= gst_element_register (plugin, "rtpsrc", -+ GST_RANK_PRIMARY + 1, GST_TYPE_RTP_SRC); -+ -+ ret |= gst_element_register (plugin, "rtpsink", -+ GST_RANK_PRIMARY + 1, GST_TYPE_RTP_SINK); -+ -+ return ret; -+} -+ -+GST_PLUGIN_DEFINE (GST_VERSION_MAJOR, -+ GST_VERSION_MINOR, -+ rtpmanagerbad, -+ "GStreamer RTP Plugins", -+ plugin_init, VERSION, "LGPL", GST_PACKAGE_NAME, GST_PACKAGE_ORIGIN); -diff --git a/meson_options.txt b/meson_options.txt -index 3a9aa93aa..840dd7271 100644 ---- a/meson_options.txt -+++ b/meson_options.txt -@@ -48,6 +48,7 @@ option('pnm', type : 'feature', value : 'auto') - option('proxy', type : 'feature', value : 'auto') - option('rawparse', type : 'feature', value : 'auto') - option('removesilence', type : 'feature', value : 'auto') -+option('rtp', type : 'feature', value : 'auto') - option('sdp', type : 'feature', value : 'auto') - option('segmentclip', type : 'feature', value : 'auto') - option('siren', type : 'feature', value : 'auto') -diff --git a/tests/check/Makefile.am b/tests/check/Makefile.am -index a05bc5792..dbc746fd7 100644 ---- a/tests/check/Makefile.am -+++ b/tests/check/Makefile.am -@@ -290,6 +290,8 @@ check_PROGRAMS = \ - elements/pnm \ - elements/rtponvifparse \ - elements/rtponviftimestamp \ -+ elements/rtpsrc \ -+ elements/rtpsink \ - elements/id3mux \ - pipelines/mxf \ - libs/isoff \ -@@ -578,6 +580,12 @@ elements_rtponvifparse_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_L - elements_rtponviftimestamp_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS) - elements_rtponviftimestamp_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD) - -+elements_rtpsrc_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS) -+elements_rtpsrc_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD) -+ -+elements_rtpsink_CFLAGS = $(GST_PLUGINS_BASE_CFLAGS) $(GST_BASE_CFLAGS) $(AM_CFLAGS) -+elements_rtpsink_LDADD = $(GST_PLUGINS_BASE_LIBS) $(GST_BASE_LIBS) $(GST_LIBS) -lgstrtp-$(GST_API_VERSION) $(LDADD) -+ - EXTRA_DIST = gst-plugins-bad.supp $(uvch264_dist_data) - - orc_bayer_CFLAGS = $(ORC_CFLAGS) -diff --git a/tests/check/elements/rtpsink.c b/tests/check/elements/rtpsink.c -new file mode 100644 -index 000000000..bb6c5b30d ---- /dev/null -+++ b/tests/check/elements/rtpsink.c -@@ -0,0 +1,56 @@ -+/* GStreamer -+ * Copyright (C) <2018> Marc Leeman -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Library General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Library General Public License for more details. -+ * -+ * You should have received a copy of the GNU Library General Public -+ * License along with this library; if not, write to the -+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -+ * Boston, MA 02110-1301, USA. -+ */ -+ -+#include -+ -+GST_START_TEST (test_uri_to_properties) -+{ -+ GstElement *rtpsink; -+ -+ gint ttl, ttl_mc; -+ -+ rtpsink = gst_element_factory_make ("rtpsink", NULL); -+ -+ /* Sets properties to non-default values (make sure this stays in sync) */ -+ g_object_set (rtpsink, "uri", "rtp://1.230.1.2?" "ttl=8" "&ttl-mc=9", NULL); -+ -+ g_object_get (rtpsink, "ttl", &ttl, "ttl_mc", &ttl_mc, NULL); -+ -+ /* Make sure these values are in sync with the one from the URI. */ -+ g_assert_cmpint (ttl, ==, 8); -+ g_assert_cmpint (ttl_mc, ==, 9); -+ -+ gst_object_unref (rtpsink); -+} -+ -+GST_END_TEST; -+ -+static Suite * -+rtpsink_suite (void) -+{ -+ Suite *s = suite_create ("rtpsink"); -+ TCase *tc_chain = tcase_create ("general"); -+ -+ suite_add_tcase (s, tc_chain); -+ tcase_add_test (tc_chain, test_uri_to_properties); -+ -+ return s; -+} -+ -+GST_CHECK_MAIN (rtpsink); -diff --git a/tests/check/elements/rtpsrc.c b/tests/check/elements/rtpsrc.c -new file mode 100644 -index 000000000..6e1f1327c ---- /dev/null -+++ b/tests/check/elements/rtpsrc.c -@@ -0,0 +1,58 @@ -+/* GStreamer -+ * Copyright (C) <2018> Marc Leeman -+ * -+ * This library is free software; you can redistribute it and/or -+ * modify it under the terms of the GNU Library General Public -+ * License as published by the Free Software Foundation; either -+ * version 2 of the License, or (at your option) any later version. -+ * -+ * This library is distributed in the hope that it will be useful, -+ * but WITHOUT ANY WARRANTY; without even the implied warranty of -+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ * Library General Public License for more details. -+ * -+ * You should have received a copy of the GNU Library General Public -+ * License along with this library; if not, write to the -+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, -+ * Boston, MA 02110-1301, USA. -+ */ -+ -+#include -+ -+GST_START_TEST (test_uri_to_properties) -+{ -+ GstElement *rtpsrc; -+ guint latency, ttl, ttl_mc; -+ -+ rtpsrc = gst_element_factory_make ("rtpsrc", NULL); -+ -+ /* Sets properties to non-default values (make sure this stays in sync) */ -+ g_object_set (rtpsrc, "uri", "rtp://1.230.1.2?" -+ "latency=300" "&ttl=8" "&ttl-mc=9", NULL); -+ -+ g_object_get (rtpsrc, -+ "latency", &latency, "ttl-mc", &ttl_mc, "ttl", &ttl, NULL); -+ -+ /* Make sure these values are in sync with the one from the URI. */ -+ g_assert_cmpuint (latency, ==, 300); -+ g_assert_cmpint (ttl, ==, 8); -+ g_assert_cmpint (ttl_mc, ==, 9); -+ -+ gst_object_unref (rtpsrc); -+} -+ -+GST_END_TEST; -+ -+static Suite * -+rtpsrc_suite (void) -+{ -+ Suite *s = suite_create ("rtpsrc"); -+ TCase *tc_chain = tcase_create ("general"); -+ -+ suite_add_tcase (s, tc_chain); -+ tcase_add_test (tc_chain, test_uri_to_properties); -+ -+ return s; -+} -+ -+GST_CHECK_MAIN (rtpsrc); -diff --git a/tests/check/meson.build b/tests/check/meson.build -index 85a733045..5835b2547 100644 ---- a/tests/check/meson.build -+++ b/tests/check/meson.build -@@ -47,6 +47,8 @@ base_tests = [ - [['elements/pnm.c']], - [['elements/rtponvifparse.c']], - [['elements/rtponviftimestamp.c']], -+ [['elements/rtpsrc.c']], -+ [['elements/rtpsink.c']], - [['elements/videoframe-audiolevel.c']], - [['elements/viewfinderbin.c']], - [['libs/h264parser.c'], false, [gstcodecparsers_dep]], diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.%.bbappend similarity index 84% rename from meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend rename to meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.%.bbappend index 92ca772bb..6a4be804b 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.16.%.bbappend +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.%.bbappend @@ -9,5 +9,4 @@ SRC_URI:append:qemux86-64 = " \ file://0001-set-initial-window-size.patch \ file://0002-add-video-info-message.patch \ file://0003-disable-using-subsurface-subcompositor.patch \ - file://0004-rtpmanagerbad-add-RTP-streaming-elements.patch \ " diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.%.bbappend similarity index 100% rename from meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.16.%.bbappend rename to meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-base_1.18.%.bbappend diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.%.bbappend similarity index 100% rename from meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.16.%.bbappend rename to meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.%.bbappend diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0/0001-Add-support-for-seamless-seek-trickplay.patch b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0/0001-Add-support-for-seamless-seek-trickplay.patch index 3b096314e..486be9dc4 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0/0001-Add-support-for-seamless-seek-trickplay.patch +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0/0001-Add-support-for-seamless-seek-trickplay.patch @@ -1,7 +1,20 @@ -diff -ruN a/gst/gstpipeline.c b/gst/gstpipeline.c ---- a/gst/gstpipeline.c 2020-08-06 09:59:25.481041707 +0000 -+++ b/gst/gstpipeline.c 2020-08-06 09:58:51.195687907 +0000 -@@ -308,6 +308,13 @@ +From d4a7d3fba32afb21fe8c96bec64de1a5be78dcc4 Mon Sep 17 00:00:00 2001 +From: "sapna.kumari" +Date: Wed, 19 Aug 2020 06:52:43 +0000 +Subject: [PATCH] rpi : gstreamer1.0=webosrpi2 g-media-pipeline=21.gav.10 + +--- + gst/gstpipeline.c | 153 ++++++++++++++++++++++++++++++++++++ + gst/gstpipeline.h | 9 +++ + libs/gst/base/gstbasesink.c | 150 +++++++++++++++++++++++++++++++++++ + libs/gst/base/gstbasesink.h | 3 + + 4 files changed, 315 insertions(+) + +diff --git a/gst/gstpipeline.c b/gst/gstpipeline.c +index 032fe69..026596f 100644 +--- a/gst/gstpipeline.c ++++ b/gst/gstpipeline.c +@@ -328,6 +328,13 @@ reset_start_time (GstPipeline * pipeline, GstClockTime start_time) GST_OBJECT_UNLOCK (pipeline); } @@ -15,7 +28,7 @@ diff -ruN a/gst/gstpipeline.c b/gst/gstpipeline.c /** * gst_pipeline_new: * @name: (allow-none): name of new pipeline -@@ -368,6 +375,152 @@ +@@ -388,6 +395,152 @@ pipeline_update_start_time (GstElement * element) GST_OBJECT_UNLOCK (element); } @@ -168,10 +181,11 @@ diff -ruN a/gst/gstpipeline.c b/gst/gstpipeline.c /* MT safe */ static GstStateChangeReturn gst_pipeline_change_state (GstElement * element, GstStateChange transition) -diff -ruN a/gst/gstpipeline.h b/gst/gstpipeline.h ---- a/gst/gstpipeline.h 2020-08-06 09:59:25.481041707 +0000 -+++ b/gst/gstpipeline.h 2020-08-06 09:58:51.195687907 +0000 -@@ -130,6 +130,15 @@ +diff --git a/gst/gstpipeline.h b/gst/gstpipeline.h +index 6406fb8..c87da57 100644 +--- a/gst/gstpipeline.h ++++ b/gst/gstpipeline.h +@@ -130,6 +130,15 @@ void gst_pipeline_set_auto_flush_bus (GstPipeline *pipeline, gboolean GST_API gboolean gst_pipeline_get_auto_flush_bus (GstPipeline *pipeline); @@ -184,13 +198,14 @@ diff -ruN a/gst/gstpipeline.h b/gst/gstpipeline.h +GST_API +gboolean gst_pipeline_update_base_time (GstPipeline *pipeline, GstClockTime base_time); + - #ifdef G_DEFINE_AUTOPTR_CLEANUP_FUNC G_DEFINE_AUTOPTR_CLEANUP_FUNC(GstPipeline, gst_object_unref) - #endif -diff -ruN a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c ---- a/libs/gst/base/gstbasesink.c 2020-08-06 10:18:02.181275530 +0000 -+++ b/libs/gst/base/gstbasesink.c 2020-08-06 10:18:27.906295706 +0000 -@@ -259,6 +259,8 @@ + + G_END_DECLS +diff --git a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c +index 8bfc495..48ca987 100644 +--- a/libs/gst/base/gstbasesink.c ++++ b/libs/gst/base/gstbasesink.c +@@ -278,6 +278,8 @@ struct _GstBaseSinkPrivate gsize rc_accumulated; gboolean drop_out_of_segment; @@ -199,7 +214,7 @@ diff -ruN a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c }; #define DO_RUNNING_AVG(avg,val,size) (((val) + ((size)-1) * (avg)) / (size)) -@@ -688,6 +690,8 @@ +@@ -726,6 +728,8 @@ gst_base_sink_init (GstBaseSink * basesink, gpointer g_class) priv->drop_out_of_segment = DEFAULT_DROP_OUT_OF_SEGMENT; @@ -208,7 +223,7 @@ diff -ruN a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c GST_OBJECT_FLAG_SET (basesink, GST_ELEMENT_FLAG_SINK); } -@@ -2267,6 +2271,8 @@ +@@ -2323,6 +2327,8 @@ gst_base_sink_wait_clock (GstBaseSink * sink, GstClockTime time, GstClock *clock; GstClockTime base_time; @@ -217,7 +232,7 @@ diff -ruN a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c if (G_UNLIKELY (!GST_CLOCK_TIME_IS_VALID (time))) goto invalid_time; -@@ -2277,6 +2283,12 @@ +@@ -2333,6 +2339,12 @@ gst_base_sink_wait_clock (GstBaseSink * sink, GstClockTime time, if (G_UNLIKELY ((clock = GST_ELEMENT_CLOCK (sink)) == NULL)) goto no_clock; @@ -230,7 +245,7 @@ diff -ruN a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c base_time = GST_ELEMENT_CAST (sink)->base_time; GST_LOG_OBJECT (sink, "time %" GST_TIME_FORMAT ", base_time %" GST_TIME_FORMAT, -@@ -4037,6 +4049,92 @@ +@@ -4329,6 +4341,92 @@ gst_base_sink_perform_seek (GstBaseSink * sink, GstPad * pad, GstEvent * event) return res; } @@ -323,7 +338,7 @@ diff -ruN a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c static void set_step_info (GstBaseSink * sink, GstStepInfo * current, GstStepInfo * pending, guint seqnum, GstFormat format, guint64 amount, gdouble rate, -@@ -4603,6 +4701,58 @@ +@@ -5015,6 +5113,58 @@ gst_base_sink_send_event (GstElement * element, GstEvent * event) result = gst_base_sink_perform_step (basesink, pad, event); forward = FALSE; break; @@ -382,10 +397,11 @@ diff -ruN a/libs/gst/base/gstbasesink.c b/libs/gst/base/gstbasesink.c default: break; } -diff -ruN a/libs/gst/base/gstbasesink.h b/libs/gst/base/gstbasesink.h ---- a/libs/gst/base/gstbasesink.h 2020-08-06 10:18:02.181275530 +0000 -+++ b/libs/gst/base/gstbasesink.h 2020-08-06 10:18:27.906295706 +0000 -@@ -198,6 +198,9 @@ +diff --git a/libs/gst/base/gstbasesink.h b/libs/gst/base/gstbasesink.h +index 7ce8650..0f05421 100644 +--- a/libs/gst/base/gstbasesink.h ++++ b/libs/gst/base/gstbasesink.h +@@ -203,6 +203,9 @@ struct _GstBaseSinkClass { /* Render a BufferList */ GstFlowReturn (*render_list) (GstBaseSink *sink, GstBufferList *buffer_list); diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0_1.18.%.bbappend similarity index 100% rename from meta-webos/recipes-multimedia/gstreamer/gstreamer1.0_1.16.%.bbappend rename to meta-webos/recipes-multimedia/gstreamer/gstreamer1.0_1.18.%.bbappend From 8a8b6d2c0b2d5d1665895817725e807dae7be61a Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 5 Feb 2021 03:50:48 -0800 Subject: [PATCH 0567/2022] rpi: gstreamer1.0-plugins-good: update patches to apply on 1.18.3 version :Release Notes: :Detailed Notes: 0002-v4l2videodec-Check-stop-in-flush-to-avoid-race-condi.patch is already applied upstream. Fixes: ERROR: gstreamer1.0-plugins-good-1.18.3-r0 do_patch: Command Error: 'quilt --quiltrc raspberrypi4-webos-linux-gnueabi/gstreamer1.0-plugins-good/1.18.3-r0/recipe-sysroot-native/etc/quiltrc push' exited with 0 Output: stdout: Applying patch 0004-Fix-v4l2dec-flush-for-video-loop-playback.patch patching file sys/v4l2/gstv4l2videodec.c Hunk #1 FAILED at 292. 1 out of 1 hunk FAILED -- rejects in file sys/v4l2/gstv4l2videodec.c Patch 0004-Fix-v4l2dec-flush-for-video-loop-playback.patch does not apply (enforce with -f) stderr: ERROR: Logfile of failure stored in: raspberrypi4-webos-linux-gnueabi/gstreamer1.0-plugins-good/1.18.3-r0/temp/log.do_patch.67251 ERROR: Task (oe-core/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.3.bb:do_patch) failed with exit code '1' :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I5faad9abe982c3893cd84aa84ab4982379996da6 --- ...ix-buffer-pool-poll-wait-after-flush.patch | 30 ++++++++-------- ...ix-v4l2h264dec-output-caps-to-RGB16.patch} | 19 +++++++--- ...ck-stop-in-flush-to-avoid-race-condi.patch | 35 ------------------- ...l2dec-flush-for-video-loop-playback.patch} | 6 ++-- .../gstreamer1.0-plugins-good_1.18.%.bbappend | 5 ++- 5 files changed, 35 insertions(+), 60 deletions(-) rename meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/{0003-Fix-v4l2h264dec-output-caps-to-RGB16.patch => 0002-Fix-v4l2h264dec-output-caps-to-RGB16.patch} (66%) delete mode 100644 meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0002-v4l2videodec-Check-stop-in-flush-to-avoid-race-condi.patch rename meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/{0004-Fix-v4l2dec-flush-for-video-loop-playback.patch => 0003-Fix-v4l2dec-flush-for-video-loop-playback.patch} (92%) diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-v4l2-fix-buffer-pool-poll-wait-after-flush.patch b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-v4l2-fix-buffer-pool-poll-wait-after-flush.patch index 86d626888..d4bb60f1d 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-v4l2-fix-buffer-pool-poll-wait-after-flush.patch +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0001-v4l2-fix-buffer-pool-poll-wait-after-flush.patch @@ -1,7 +1,7 @@ -From 7c20a6f9c0e46e53b37181c6efea2d8340f9afe3 Mon Sep 17 00:00:00 2001 +From a55669dd33e4600e7aefd2b1936449c5baab5750 Mon Sep 17 00:00:00 2001 From: Pankaj Maharana Date: Tue, 10 Dec 2019 16:38:26 +0530 -Subject: [PATCH 1/7] v4l2: fix buffer pool poll wait after flush +Subject: [PATCH] v4l2: fix buffer pool poll wait after flush :Release Notes: Fix infinite wait in buffer pool dqbuf after a flush due to seek or @@ -40,7 +40,7 @@ Upstream-Status: Unknown 4 files changed, 33 insertions(+), 20 deletions(-) diff --git a/sys/v4l2/gstv4l2allocator.c b/sys/v4l2/gstv4l2allocator.c -index 05bde3d..33548b3 100644 +index e82a8532d..bac75d286 100644 --- a/sys/v4l2/gstv4l2allocator.c +++ b/sys/v4l2/gstv4l2allocator.c @@ -375,7 +375,7 @@ gst_v4l2_allocator_release (GstV4l2Allocator * allocator, GstV4l2Memory * mem) @@ -53,10 +53,10 @@ index 05bde3d..33548b3 100644 static void diff --git a/sys/v4l2/gstv4l2object.c b/sys/v4l2/gstv4l2object.c -index 01c5abf..3a6c339 100644 +index 1e96cb9d6..9ea214adb 100644 --- a/sys/v4l2/gstv4l2object.c +++ b/sys/v4l2/gstv4l2object.c -@@ -4167,6 +4167,7 @@ gst_v4l2_object_stop (GstV4l2Object * v4l2object) +@@ -4372,6 +4372,7 @@ gst_v4l2_object_stop (GstV4l2Object * v4l2object) GST_V4L2_SET_INACTIVE (v4l2object); done: @@ -65,10 +65,10 @@ index 01c5abf..3a6c339 100644 } diff --git a/sys/v4l2/gstv4l2transform.c b/sys/v4l2/gstv4l2transform.c -index 6bb7fee..df7cc22 100644 +index cc5564d44..a640b5c16 100644 --- a/sys/v4l2/gstv4l2transform.c +++ b/sys/v4l2/gstv4l2transform.c -@@ -914,8 +914,10 @@ gst_v4l2_transform_prepare_output_buffer (GstBaseTransform * trans, +@@ -934,8 +934,10 @@ gst_v4l2_transform_prepare_output_buffer (GstBaseTransform * trans, do { pool = gst_base_transform_get_buffer_pool (trans); @@ -81,7 +81,7 @@ index 6bb7fee..df7cc22 100644 GST_DEBUG_OBJECT (self, "Dequeue output buffer"); ret = gst_buffer_pool_acquire_buffer (pool, outbuf, NULL); -@@ -992,10 +994,15 @@ gst_v4l2_transform_sink_event (GstBaseTransform * trans, GstEvent * event) +@@ -1012,10 +1014,15 @@ gst_v4l2_transform_sink_event (GstBaseTransform * trans, GstEvent * event) GST_DEBUG_OBJECT (self, "flush stop"); gst_v4l2_object_unlock_stop (self->v4l2capture); gst_v4l2_object_unlock_stop (self->v4l2output); @@ -100,10 +100,10 @@ index 6bb7fee..df7cc22 100644 default: break; diff --git a/sys/v4l2/gstv4l2videodec.c b/sys/v4l2/gstv4l2videodec.c -index 6338884..db43063 100644 +index 8c06c9013..735464698 100644 --- a/sys/v4l2/gstv4l2videodec.c +++ b/sys/v4l2/gstv4l2videodec.c -@@ -291,30 +291,34 @@ gst_v4l2_video_dec_flush (GstVideoDecoder * decoder) +@@ -331,33 +331,37 @@ gst_v4l2_video_dec_flush (GstVideoDecoder * decoder) GST_DEBUG_OBJECT (self, "Flushed"); @@ -120,6 +120,9 @@ index 6338884..db43063 100644 - GST_VIDEO_DECODER_STREAM_LOCK (decoder); } + if (G_UNLIKELY (!g_atomic_int_get (&self->active))) + return TRUE; + - self->output_flow = GST_FLOW_OK; - gst_v4l2_object_unlock_stop (self->v4l2output); @@ -148,7 +151,7 @@ index 6338884..db43063 100644 return TRUE; } -@@ -486,14 +490,13 @@ gst_v4l2_video_dec_loop (GstVideoDecoder * decoder) +@@ -529,14 +533,13 @@ gst_v4l2_video_dec_loop (GstVideoDecoder * decoder) } ret = gst_buffer_pool_acquire_buffer (pool, &buffer, NULL); @@ -164,7 +167,7 @@ index 6338884..db43063 100644 } while (ret == GST_V4L2_FLOW_CORRUPTED_BUFFER); if (ret != GST_FLOW_OK) -@@ -691,9 +694,11 @@ gst_v4l2_video_dec_handle_frame (GstVideoDecoder * decoder, +@@ -738,9 +741,11 @@ gst_v4l2_video_dec_handle_frame (GstVideoDecoder * decoder, } /* Ensure our internal pool is activated */ @@ -179,6 +182,3 @@ index 6338884..db43063 100644 } task_state = gst_pad_get_task_state (GST_VIDEO_DECODER_SRC_PAD (self)); --- -2.7.4 - diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0003-Fix-v4l2h264dec-output-caps-to-RGB16.patch b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0002-Fix-v4l2h264dec-output-caps-to-RGB16.patch similarity index 66% rename from meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0003-Fix-v4l2h264dec-output-caps-to-RGB16.patch rename to meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0002-Fix-v4l2h264dec-output-caps-to-RGB16.patch index 693c703d4..88bad47d6 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0003-Fix-v4l2h264dec-output-caps-to-RGB16.patch +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0002-Fix-v4l2h264dec-output-caps-to-RGB16.patch @@ -1,7 +1,18 @@ -diff -ruN a/sys/v4l2/gstv4l2videodec.c b/sys/v4l2/gstv4l2videodec.c ---- a/sys/v4l2/gstv4l2videodec.c 2020-08-27 04:51:28.899239646 +0000 -+++ b/sys/v4l2/gstv4l2videodec.c 2020-08-27 06:30:40.402241041 +0000 -@@ -676,6 +676,31 @@ +From 5265c6c37c21d0d07b5224c937f3996fad5a8a81 Mon Sep 17 00:00:00 2001 +From: "sapna.kumari" +Date: Thu, 27 Aug 2020 06:39:27 +0000 +Subject: [PATCH] Fix v4l2h264dec output caps to RGB16 + +gstreamer1.0-plugins-good=webosrpi3 +--- + sys/v4l2/gstv4l2videodec.c | 25 +++++++++++++++++++++++++ + 1 file changed, 25 insertions(+) + +diff --git a/sys/v4l2/gstv4l2videodec.c b/sys/v4l2/gstv4l2videodec.c +index 735464698..ea1bf6168 100644 +--- a/sys/v4l2/gstv4l2videodec.c ++++ b/sys/v4l2/gstv4l2videodec.c +@@ -719,6 +719,31 @@ gst_v4l2_video_dec_handle_frame (GstVideoDecoder * decoder, GST_DEBUG_OBJECT (self, "Chosen decoded caps: %" GST_PTR_FORMAT, caps); diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0002-v4l2videodec-Check-stop-in-flush-to-avoid-race-condi.patch b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0002-v4l2videodec-Check-stop-in-flush-to-avoid-race-condi.patch deleted file mode 100644 index 46fb3d535..000000000 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0002-v4l2videodec-Check-stop-in-flush-to-avoid-race-condi.patch +++ /dev/null @@ -1,35 +0,0 @@ -From d653ad64595d4ec3856746e389d58db75b2b7bf5 Mon Sep 17 00:00:00 2001 -From: Pankaj Maharana -Date: Thu, 12 Dec 2019 12:58:59 +0530 -Subject: [PATCH 7/7] v4l2videodec: Check stop in flush() to avoid race - condition - -Backward playback will drain and flush every frame. Stop playback -when backward playback have race condition between exit thread and -streaming thread flush. Add one check to avoid it. - -Fixes #639 - -Upstream-Status: Submitted -https://gitlab.freedesktop.org/gstreamer/gst-plugins-good/commit/9d42b2dd5dea81d0b8f46cb363be954aaaa34d4c ---- - sys/v4l2/gstv4l2videodec.c | 3 +++ - 1 file changed, 3 insertions(+) - -diff --git a/sys/v4l2/gstv4l2videodec.c b/sys/v4l2/gstv4l2videodec.c -index 25bc5a0..7657d3b 100644 ---- a/sys/v4l2/gstv4l2videodec.c -+++ b/sys/v4l2/gstv4l2videodec.c -@@ -302,6 +302,9 @@ gst_v4l2_video_dec_flush (GstVideoDecoder * decoder) - gst_pad_stop_task (decoder->srcpad); - } - -+ if (G_UNLIKELY (!g_atomic_int_get (&self->active))) -+ return TRUE; -+ - gst_v4l2_object_unlock_stop (self->v4l2output); - gst_v4l2_object_unlock_stop (self->v4l2capture); - --- -2.7.4 - diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0004-Fix-v4l2dec-flush-for-video-loop-playback.patch b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0003-Fix-v4l2dec-flush-for-video-loop-playback.patch similarity index 92% rename from meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0004-Fix-v4l2dec-flush-for-video-loop-playback.patch rename to meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0003-Fix-v4l2dec-flush-for-video-loop-playback.patch index e3afc6e62..83eacc0d3 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0004-Fix-v4l2dec-flush-for-video-loop-playback.patch +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good/0003-Fix-v4l2dec-flush-for-video-loop-playback.patch @@ -1,4 +1,4 @@ -From 6104aacf88e9e98af2dec10c62dda74b348b378a Mon Sep 17 00:00:00 2001 +From 4e5e8ac16aa4849ec986763ffeae138ad7fe38d8 Mon Sep 17 00:00:00 2001 From: Jaehoon Lee Date: Thu, 28 Jan 2021 15:02:02 +0900 Subject: [PATCH] Fix v4l2dec flush for video loop playback @@ -24,10 +24,10 @@ Tested in raspberrypi4 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/sys/v4l2/gstv4l2videodec.c b/sys/v4l2/gstv4l2videodec.c -index 497d3a1..8a7d1e5 100644 +index ea1bf6168..3a8d31b43 100644 --- a/sys/v4l2/gstv4l2videodec.c +++ b/sys/v4l2/gstv4l2videodec.c -@@ -292,37 +292,29 @@ gst_v4l2_video_dec_flush (GstVideoDecoder * decoder) +@@ -331,37 +331,29 @@ gst_v4l2_video_dec_flush (GstVideoDecoder * decoder) GST_DEBUG_OBJECT (self, "Flushed"); diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.%.bbappend b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.%.bbappend index ef093e276..7ecf8cc94 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.%.bbappend +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-plugins-good_1.18.%.bbappend @@ -6,9 +6,8 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI:append:raspberrypi4 = " \ file://0001-v4l2-fix-buffer-pool-poll-wait-after-flush.patch \ - file://0002-v4l2videodec-Check-stop-in-flush-to-avoid-race-condi.patch \ - file://0003-Fix-v4l2h264dec-output-caps-to-RGB16.patch \ - file://0004-Fix-v4l2dec-flush-for-video-loop-playback.patch \ + file://0002-Fix-v4l2h264dec-output-caps-to-RGB16.patch \ + file://0003-Fix-v4l2dec-flush-for-video-loop-playback.patch \ " PACKAGECONFIG:append:raspberrypi4 = " libv4l2" From 90f906dc3fc8552451d6fab6ba8aca333bbd97ea Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 3 Nov 2020 09:58:47 -0800 Subject: [PATCH 0568/2022] rpi: gstreamer1.0-omx: update patches to apply on 1.18.1 version :Release Notes: :Detailed Notes: Fixes: ERROR: Fuzz detected: checking file omx/gstomxvideodec.c Hunk #5 succeeded at 2801 with fuzz 2 (offset 9 lines). Hunk #6 succeeded at 3007 (offset 15 lines). Hunk #7 succeeded at 3321 (offset 15 lines). checking file omx/gstomxvideodec.h patching file omx/gstomxvideodec.c Hunk #5 succeeded at 2801 with fuzz 2 (offset 9 lines). Hunk #6 succeeded at 3007 (offset 15 lines). Hunk #7 succeeded at 3321 (offset 15 lines). patching file omx/gstomxvideodec.h The context lines in the patches can be updated with devtool: devtool modify gstreamer1.0-omx devtool finish --force-patch-refresh gstreamer1.0-omx Don't forget to review changes done by devtool! ERROR: QA Issue: Patch log indicates that patches do not apply cleanly. [patch-fuzz] :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I83db3a27a7997e68c41272a1a474c4e5bdd48247 --- ...-adaptive-resolution-change-in-seek-issue.patch | 14 +++++++------- .../0003-decrease-ranking-of-omxh264dec.patch | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-fix-adaptive-resolution-change-in-seek-issue.patch b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-fix-adaptive-resolution-change-in-seek-issue.patch index e449c003a..d3c9343dc 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-fix-adaptive-resolution-change-in-seek-issue.patch +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/0001-fix-adaptive-resolution-change-in-seek-issue.patch @@ -1,4 +1,4 @@ -From d8e81ff9b9be0c66a68980621c2ceb3b079130bb Mon Sep 17 00:00:00 2001 +From cb4fb27496bed1ff61d3207fbc51973576c11d12 Mon Sep 17 00:00:00 2001 From: Pankaj Maharana Date: Wed, 8 Aug 2018 12:01:02 +0530 Subject: [PATCH] fix adaptive resolution change in seek issue @@ -29,7 +29,7 @@ Upstream-Status: Inappropriate 2 files changed, 31 insertions(+), 13 deletions(-) diff --git a/omx/gstomxvideodec.c b/omx/gstomxvideodec.c -index dc39c4c..e54e83a 100644 +index ee41fa9..c4c166d 100644 --- a/omx/gstomxvideodec.c +++ b/omx/gstomxvideodec.c @@ -88,6 +88,7 @@ enum @@ -92,7 +92,7 @@ index dc39c4c..e54e83a 100644 element_class->change_state = GST_DEBUG_FUNCPTR (gst_omx_video_dec_change_state); -@@ -2786,15 +2792,17 @@ gst_omx_video_dec_set_format (GstVideoDecoder * decoder, +@@ -2795,15 +2801,17 @@ gst_omx_video_dec_set_format (GstVideoDecoder * decoder, } if (needs_disable && is_format_change) { @@ -112,9 +112,9 @@ index dc39c4c..e54e83a 100644 +skip_disable: port_def.format.video.nFrameWidth = info->width; - port_def.format.video.nFrameHeight = GST_VIDEO_INFO_FIELD_HEIGHT (info); - port_def.format.video.xFramerate = framerate_q16; -@@ -2984,7 +2992,8 @@ gst_omx_video_dec_handle_frame (GstVideoDecoder * decoder, + port_def.format.video.nFrameHeight = GST_VIDEO_INFO_HEIGHT (info); + /*We cannot use GST_VIDEO_INFO_FIELD_HEIGHT() as encoded content may use either +@@ -2999,7 +3007,8 @@ gst_omx_video_dec_handle_frame (GstVideoDecoder * decoder, return GST_FLOW_OK; } @@ -124,7 +124,7 @@ index dc39c4c..e54e83a 100644 if (!gst_omx_video_dec_enable (self, frame->input_buffer)) goto enable_error; } -@@ -3297,9 +3306,16 @@ release_error: +@@ -3312,9 +3321,16 @@ release_error: static GstFlowReturn gst_omx_video_dec_drain (GstVideoDecoder * decoder) { diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-decrease-ranking-of-omxh264dec.patch b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-decrease-ranking-of-omxh264dec.patch index 4f130a685..c5ccf7f54 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-decrease-ranking-of-omxh264dec.patch +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-decrease-ranking-of-omxh264dec.patch @@ -1,4 +1,4 @@ -From 06988b1e2c29937fbcc4a85f6693e1b0e8726682 Mon Sep 17 00:00:00 2001 +From a0f0d71c80cb77c7fca5660f28ad49067405de7d Mon Sep 17 00:00:00 2001 From: "divvya.rosna" Date: Thu, 13 Aug 2020 05:42:37 +0000 Subject: [PATCH] rpi : mesa=webosrpi3 webruntime=webosrpi6 From 0e8440b1a2afe1dfa36343d1925a3ed48e310ec1 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 25 Jan 2021 14:25:45 -0800 Subject: [PATCH 0569/2022] webos: gstreamer1.0-plugins-bad: update qemux86-64 patches to apply on 1.18.3 version :Release Notes: :Detailed Notes: Fixes: ERROR: gstreamer1.0-plugins-bad-1.18.3-r0 do_patch: Command Error: 'quilt --quiltrc /jenkins/mjansa/build/webos/hardknott/BUILD/work/qemux86_64-webos-linux/gstreamer1.0-plugins-bad/1.18.3-r0/recipe-sysroot-native/etc/quiltrc push' exited with 0 Output: Applying patch 0003_disable_using_subsurface_subcompositor.patch patching file ext/wayland/gstwaylandsink.c Hunk #1 succeeded at 1056 (offset 51 lines). Hunk #2 succeeded at 1073 (offset 51 lines). patching file ext/wayland/wldisplay.c Hunk #1 succeeded at 346 (offset 14 lines). patching file ext/wayland/wlwindow.c Hunk #2 succeeded at 171 with fuzz 1. Hunk #3 FAILED at 186. Hunk #4 FAILED at 243. Hunk #5 succeeded at 258 (offset 5 lines). Hunk #6 succeeded at 295 (offset 5 lines). Hunk #7 succeeded at 306 (offset 5 lines). Hunk #8 succeeded at 335 (offset 9 lines). Hunk #9 succeeded at 390 (offset 9 lines). Hunk #10 succeeded at 401 (offset 9 lines). Hunk #11 succeeded at 414 (offset 9 lines). Hunk #12 succeeded at 433 (offset 9 lines). Hunk #13 succeeded at 446 (offset 9 lines). Hunk #14 succeeded at 490 (offset 5 lines). Hunk #15 FAILED at 504. 3 out of 15 hunks FAILED -- rejects in file ext/wayland/wlwindow.c patching file ext/wayland/wlwindow.h Patch 0003_disable_using_subsurface_subcompositor.patch does not apply (enforce with -f) ERROR: Logfile of failure stored in: /jenkins/mjansa/build/webos/hardknott/BUILD/work/qemux86_64-webos-linux/gstreamer1.0-plugins-bad/1.18.3-r0/temp/log.do_patch.60344 ERROR: Task (/jenkins/mjansa/build/webos/hardknott/oe-core/meta/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad_1.18.3.bb:do_patch) failed with exit code '1' :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: Ie2baf3dd67b9941909af8f550d033b03b524464d --- .../0001-set-initial-window-size.patch | 6 +- .../0002-add-video-info-message.patch | 8 +- ...sable-using-subsurface-subcompositor.patch | 76 ++++++++++--------- 3 files changed, 47 insertions(+), 43 deletions(-) diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-set-initial-window-size.patch b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-set-initial-window-size.patch index 5eeade370..c4bb85c58 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-set-initial-window-size.patch +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0001-set-initial-window-size.patch @@ -1,4 +1,4 @@ -From 7e589526f4013e0a2d5039e7f32c120a567c1cac Mon Sep 17 00:00:00 2001 +From b12fabac290e41825454c2d1cf556b2765ad0d77 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 25 Jan 2021 14:17:07 -0800 Subject: [PATCH] set initial window size @@ -8,10 +8,10 @@ Subject: [PATCH] set initial window size 1 file changed, 8 insertions(+) diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c -index 78dd294a0..f10582a46 100644 +index 8c6fdd0e7..ea7c0a65d 100644 --- a/ext/wayland/gstwaylandsink.c +++ b/ext/wayland/gstwaylandsink.c -@@ -700,6 +700,14 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer) +@@ -710,6 +710,14 @@ gst_wayland_sink_show_frame (GstVideoSink * vsink, GstBuffer * buffer) &sink->video_info, sink->fullscreen, &sink->render_lock); g_signal_connect_object (sink->window, "closed", G_CALLBACK (on_window_closed), sink, 0); diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-add-video-info-message.patch b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-add-video-info-message.patch index f6cf0d69f..594138e2c 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-add-video-info-message.patch +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0002-add-video-info-message.patch @@ -1,4 +1,4 @@ -From a12b2fa0d9c7b2a654a3225b146d4eed8b99ae9a Mon Sep 17 00:00:00 2001 +From 12a3e4a476b2485dce84dadf1822d17e1a7fa530 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 25 Jan 2021 14:17:35 -0800 Subject: [PATCH] add video info message @@ -8,10 +8,10 @@ Subject: [PATCH] add video info message 1 file changed, 33 insertions(+) diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c -index f10582a46..4caf0d32c 100644 +index ea7c0a65d..bdc0882ce 100644 --- a/ext/wayland/gstwaylandsink.c +++ b/ext/wayland/gstwaylandsink.c -@@ -540,6 +540,34 @@ gst_wayland_create_pool (GstWaylandSink * sink, GstCaps * caps) +@@ -550,6 +550,34 @@ gst_wayland_create_pool (GstWaylandSink * sink, GstCaps * caps) return pool; } @@ -46,7 +46,7 @@ index f10582a46..4caf0d32c 100644 static gboolean gst_wayland_sink_set_caps (GstBaseSink * bsink, GstCaps * caps) { -@@ -558,6 +586,11 @@ gst_wayland_sink_set_caps (GstBaseSink * bsink, GstCaps * caps) +@@ -568,6 +596,11 @@ gst_wayland_sink_set_caps (GstBaseSink * bsink, GstCaps * caps) format = GST_VIDEO_INFO_FORMAT (&sink->video_info); sink->video_info_changed = TRUE; diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-disable-using-subsurface-subcompositor.patch b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-disable-using-subsurface-subcompositor.patch index 5a65eb9b2..8713d2a08 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-disable-using-subsurface-subcompositor.patch +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-disable-using-subsurface-subcompositor.patch @@ -1,20 +1,20 @@ -From 8ee342dd3c59d2cd2f9b5569211921fd02220fc3 Mon Sep 17 00:00:00 2001 +From c490c3f87522c01374e6e9c38ce422f966e3780d Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 25 Jan 2021 14:18:13 -0800 Subject: [PATCH] disable using subsurface subcompositor --- - ext/wayland/gstwaylandsink.c | 6 +-- - ext/wayland/wldisplay.c | 3 ++ - ext/wayland/wlwindow.c | 97 ++++++++---------------------------- - ext/wayland/wlwindow.h | 5 -- - 4 files changed, 27 insertions(+), 84 deletions(-) + ext/wayland/gstwaylandsink.c | 6 +-- + ext/wayland/wldisplay.c | 3 ++ + ext/wayland/wlwindow.c | 101 ++++++++--------------------------- + ext/wayland/wlwindow.h | 5 -- + 4 files changed, 26 insertions(+), 89 deletions(-) diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c -index 4caf0d32c..38c5f2678 100644 +index bdc0882ce..0837f8e7f 100644 --- a/ext/wayland/gstwaylandsink.c +++ b/ext/wayland/gstwaylandsink.c -@@ -1046,14 +1046,13 @@ gst_wayland_sink_begin_geometry_change (GstWaylandVideo * video) +@@ -1056,14 +1056,13 @@ gst_wayland_sink_begin_geometry_change (GstWaylandVideo * video) g_return_if_fail (sink != NULL); g_mutex_lock (&sink->render_lock); @@ -30,7 +30,7 @@ index 4caf0d32c..38c5f2678 100644 g_mutex_unlock (&sink->render_lock); } -@@ -1064,14 +1063,13 @@ gst_wayland_sink_end_geometry_change (GstWaylandVideo * video) +@@ -1074,14 +1073,13 @@ gst_wayland_sink_end_geometry_change (GstWaylandVideo * video) g_return_if_fail (sink != NULL); g_mutex_lock (&sink->render_lock); @@ -47,10 +47,10 @@ index 4caf0d32c..38c5f2678 100644 } diff --git a/ext/wayland/wldisplay.c b/ext/wayland/wldisplay.c -index 940009556..82e437ab8 100644 +index 0bb9dc729..4dd69adfe 100644 --- a/ext/wayland/wldisplay.c +++ b/ext/wayland/wldisplay.c -@@ -332,7 +332,10 @@ gst_wl_display_new_existing (struct wl_display * display, +@@ -346,7 +346,10 @@ gst_wl_display_new_existing (struct wl_display * display, } VERIFY_INTERFACE_EXISTS (compositor, "wl_compositor"); @@ -62,7 +62,7 @@ index 940009556..82e437ab8 100644 #undef VERIFY_INTERFACE_EXISTS diff --git a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c -index c3dc61d28..29df52e1a 100644 +index 0cf85aa62..6e69ba8a0 100644 --- a/ext/wayland/wlwindow.c +++ b/ext/wayland/wlwindow.c @@ -157,8 +157,11 @@ gst_wl_window_finalize (GObject * gobject) @@ -105,8 +105,8 @@ index c3dc61d28..29df52e1a 100644 +gst_wl_window_new_internal (GstWlDisplay * display, struct wl_surface * surface, GMutex * render_lock) { GstWlWindow *window; - -@@ -196,33 +186,21 @@ gst_wl_window_new_internal (GstWlDisplay * display, GMutex * render_lock) + struct wl_region *region; +@@ -197,36 +187,20 @@ gst_wl_window_new_internal (GstWlDisplay * display, GMutex * render_lock) window->render_lock = render_lock; g_cond_init (&window->configure_cond); @@ -132,22 +132,23 @@ index c3dc61d28..29df52e1a 100644 if (display->viewporter) { - window->area_viewport = wp_viewporter_get_viewport (display->viewporter, - window->area_surface); -+ window->video_viewport = wp_viewporter_get_viewport (display->viewporter, window->video_surface); } /* do not accept input */ -- wl_surface_set_input_region (window->area_surface, NULL); - wl_surface_set_input_region (window->video_surface, NULL); - - return window; -@@ -253,9 +231,11 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info, +- region = wl_compositor_create_region (display->compositor); +- wl_surface_set_input_region (window->area_surface, region); +- wl_region_destroy (region); +- + region = wl_compositor_create_region (display->compositor); + wl_surface_set_input_region (window->video_surface, region); + wl_region_destroy (region); +@@ -259,8 +233,10 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info, gboolean fullscreen, GMutex * render_lock) { GstWlWindow *window; + struct wl_surface *surface; - gint width; - window = gst_wl_window_new_internal (display, render_lock); + surface = wl_compositor_create_surface (display->compositor); @@ -155,7 +156,7 @@ index c3dc61d28..29df52e1a 100644 /* Check which protocol we will use (in order of preference) */ if (display->xdg_wm_base) { -@@ -263,7 +243,7 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info, +@@ -268,7 +244,7 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info, /* First create the XDG surface */ window->xdg_surface = xdg_wm_base_get_xdg_surface (display->xdg_wm_base, @@ -164,7 +165,7 @@ index c3dc61d28..29df52e1a 100644 if (!window->xdg_surface) { GST_ERROR ("Unable to get xdg_surface"); goto error; -@@ -300,7 +280,7 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info, +@@ -305,7 +281,7 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info, } else if (display->wl_shell) { /* go toplevel */ window->wl_shell_surface = wl_shell_get_shell_surface (display->wl_shell, @@ -173,7 +174,7 @@ index c3dc61d28..29df52e1a 100644 if (!window->wl_shell_surface) { GST_ERROR ("Unable to get wl_shell_surface"); goto error; -@@ -311,7 +291,7 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info, +@@ -316,7 +292,7 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info, gst_wl_window_ensure_fullscreen (window, fullscreen); } else if (display->fullscreen_shell) { zwp_fullscreen_shell_v1_present_surface (display->fullscreen_shell, @@ -182,7 +183,7 @@ index c3dc61d28..29df52e1a 100644 NULL); } else { GST_ERROR ("Unable to use either wl_shell, xdg_wm_base or " -@@ -336,13 +316,8 @@ gst_wl_window_new_in_surface (GstWlDisplay * display, +@@ -345,13 +321,8 @@ gst_wl_window_new_in_surface (GstWlDisplay * display, struct wl_surface * parent, GMutex * render_lock) { GstWlWindow *window; @@ -198,7 +199,7 @@ index c3dc61d28..29df52e1a 100644 wl_surface_commit (parent); -@@ -396,8 +371,6 @@ gst_wl_window_resize_video_surface (GstWlWindow * window, gboolean commit) +@@ -405,8 +376,6 @@ gst_wl_window_resize_video_surface (GstWlWindow * window, gboolean commit) gst_video_sink_center_rect (src, dst, &res, FALSE); } @@ -207,7 +208,7 @@ index c3dc61d28..29df52e1a 100644 if (commit) { wl_surface_damage (window->video_surface_wrapper, 0, 0, res.w, res.h); wl_surface_commit (window->video_surface_wrapper); -@@ -409,7 +382,7 @@ gst_wl_window_resize_video_surface (GstWlWindow * window, gboolean commit) +@@ -418,7 +387,7 @@ gst_wl_window_resize_video_surface (GstWlWindow * window, gboolean commit) region = wl_compositor_create_region (window->display->compositor); wl_region_add (region, 0, 0, window->render_rectangle.w, window->render_rectangle.h); @@ -216,7 +217,7 @@ index c3dc61d28..29df52e1a 100644 wl_region_destroy (region); } -@@ -422,13 +395,6 @@ gst_wl_window_set_opaque (GstWlWindow * window, const GstVideoInfo * info) +@@ -431,13 +400,6 @@ gst_wl_window_set_opaque (GstWlWindow * window, const GstVideoInfo * info) { struct wl_region *region; @@ -230,7 +231,7 @@ index c3dc61d28..29df52e1a 100644 if (!GST_VIDEO_INFO_HAS_ALPHA (info)) { /* Set video opaque */ region = wl_compositor_create_region (window->display->compositor); -@@ -448,7 +414,6 @@ gst_wl_window_render (GstWlWindow * window, GstWlBuffer * buffer, +@@ -457,7 +419,6 @@ gst_wl_window_render (GstWlWindow * window, GstWlBuffer * buffer, gst_util_uint64_scale_int_round (info->width, info->par_n, info->par_d); window->video_height = info->height; @@ -238,7 +239,7 @@ index c3dc61d28..29df52e1a 100644 gst_wl_window_resize_video_surface (window, FALSE); gst_wl_window_set_opaque (window, info); } -@@ -462,17 +427,6 @@ gst_wl_window_render (GstWlWindow * window, GstWlBuffer * buffer, +@@ -471,17 +432,6 @@ gst_wl_window_render (GstWlWindow * window, GstWlBuffer * buffer, /* clear both video and parent surfaces */ wl_surface_attach (window->video_surface_wrapper, NULL, 0, 0); wl_surface_commit (window->video_surface_wrapper); @@ -256,7 +257,7 @@ index c3dc61d28..29df52e1a 100644 } wl_display_flush (window->display->display); -@@ -521,7 +475,7 @@ gst_wl_window_update_borders (GstWlWindow * window) +@@ -526,7 +476,7 @@ gst_wl_window_update_borders (GstWlWindow * window) gst_wl_shm_memory_construct_wl_buffer (gst_buffer_peek_memory (buf, 0), window->display, &info); gwlbuf = gst_buffer_add_wl_buffer (buf, wlbuf, window->display); @@ -265,7 +266,7 @@ index c3dc61d28..29df52e1a 100644 /* at this point, the GstWlBuffer keeps the buffer * alive and will free it on wl_buffer::release */ -@@ -540,24 +494,17 @@ gst_wl_window_set_render_rectangle (GstWlWindow * window, gint x, gint y, +@@ -545,27 +495,18 @@ gst_wl_window_set_render_rectangle (GstWlWindow * window, gint x, gint y, window->render_rectangle.w = w; window->render_rectangle.h = h; @@ -276,12 +277,15 @@ index c3dc61d28..29df52e1a 100644 - /* change the size of the area */ - if (window->area_viewport) - wp_viewport_set_destination (window->area_viewport, w, h); +- + /* change the size of the video */ + if (window->video_viewport) + wp_viewport_set_destination (window->video_viewport, w, h); - gst_wl_window_update_borders (window); + if (!window->configured) + return; + if (window->video_width != 0) { - wl_subsurface_set_sync (window->video_subsurface); gst_wl_window_resize_video_surface (window, TRUE); @@ -289,11 +293,11 @@ index c3dc61d28..29df52e1a 100644 - wl_surface_damage (window->area_surface_wrapper, 0, 0, w, h); - wl_surface_commit (window->area_surface_wrapper); -+ wl_surface_damage (window->video_surface_wrapper, 0, 0, w, h); -+ wl_surface_commit (window->video_surface_wrapper); - +- - if (window->video_width != 0) - wl_subsurface_set_desync (window->video_subsurface); ++ wl_surface_damage (window->video_surface_wrapper, 0, 0, w, h); ++ wl_surface_commit (window->video_surface_wrapper); } diff --git a/ext/wayland/wlwindow.h b/ext/wayland/wlwindow.h index c3f017216..fcfa0372a 100644 From ef1ba74a7faa974b6d1698d72e21c957febd4eb1 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 5 Feb 2021 03:50:48 -0800 Subject: [PATCH 0570/2022] qemux86-64: gstreamer1.0-plugins-bad: update patches to work with 1.18.6 version :Release Notes: :Detailed Notes: Fixes: http://gecko.lge.com:8000/Errors/Details/444907 FAILED: ext/wayland/libgstwaylandsink.so.p/wlwindow.c.o x86_64-webos-linux-gcc -m64 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/qemux86_64-webos-linux/gstreamer1.0-plugins-bad/1.18.6-r0/recipe-sysroot -Iext/wayland/libgstwaylandsink.so.p -Iext/wayland -I../gst-plugins-bad-1.18.6/ext/wayland -I. -I../gst-plugins-bad-1.18.6 -Igst-libs -I../gst-plugins-bad-1.18.6/gst-libs -ITOPDIR/BUILD/work/qemux86_64-webos-linux/gstreamer1.0-plugins-bad/1.18.6-r0/recipe-sysroot/usr/include/gstreamer-1.0 -ITOPDIR/BUILD/work/qemux86_64-webos-linux/gstreamer1.0-plugins-bad/1.18.6-r0/recipe-sysroot/usr/include/glib-2.0 -ITOPDIR/BUILD/work/qemux86_64-webos-linux/gstreamer1.0-plugins-bad/1.18.6-r0/recipe-sysroot/usr/lib/glib-2.0/include -ITOPDIR/BUILD/work/qemux86_64-webos-linux/gstreamer1.0-plugins-bad/1.18.6-r0/recipe-sysroot/usr/include/orc-0.4 -ITOPDIR/BUILD/work/qemux86_64-webos-linux/gstreamer1.0-plugins-bad/1.18.6-r0/recipe-sysroot/usr/include/libdrm -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -fvisibility=hidden -fno-strict-aliasing -DG_DISABLE_CAST_CHECKS -Wmissing-prototypes -Wdeclaration-after-statement -Wold-style-definition -Wmissing-declarations -Wredundant-decls -Wwrite-strings -Wformat -Wformat-security -Winit-self -Wmissing-include-dirs -Waddress -Wno-multichar -Wvla -Wpointer-arith -O2 -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/gstreamer1.0-plugins-bad/1.18.6-r0=/usr/src/debug/gstreamer1.0-plugins-bad/1.18.6-r0 -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/gstreamer1.0-plugins-bad/1.18.6-r0=/usr/src/debug/gstreamer1.0-plugins-bad/1.18.6-r0 -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/gstreamer1.0-plugins-bad/1.18.6-r0/recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86_64-webos-linux/gstreamer1.0-plugins-bad/1.18.6-r0/recipe-sysroot-native= -fPIC -pthread -DHAVE_CONFIG_H -DGST_USE_UNSTABLE_API -MD -MQ ext/wayland/libgstwaylandsink.so.p/wlwindow.c.o -MF ext/wayland/libgstwaylandsink.so.p/wlwindow.c.o.d -o ext/wayland/libgstwaylandsink.so.p/wlwindow.c.o -c ../gst-plugins-bad-1.18.6/ext/wayland/wlwindow.c ../gst-plugins-bad-1.18.6/ext/wayland/wlwindow.c: In function 'gst_wl_window_new_toplevel': ../gst-plugins-bad-1.18.6/ext/wayland/wlwindow.c:268:32: error: 'GstWlWindow' {aka 'struct _GstWlWindow'} has no member named 'area_surface'; did you mean 'video_surface'? 268 | wl_surface_commit (window->area_surface); | ^~~~~~~~~~~~ | video_surface after https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/merge_requests/2300 merged upstream in 1.18.5. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I76f4b52c1d47190ea1d5039402e694d566caabb7 --- ...sable-using-subsurface-subcompositor.patch | 22 ++++++++++++++----- 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-disable-using-subsurface-subcompositor.patch b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-disable-using-subsurface-subcompositor.patch index 8713d2a08..fda11a313 100644 --- a/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-disable-using-subsurface-subcompositor.patch +++ b/meta-webos/recipes-multimedia/gstreamer/gstreamer1.0-plugins-bad/0003-disable-using-subsurface-subcompositor.patch @@ -1,14 +1,15 @@ -From c490c3f87522c01374e6e9c38ce422f966e3780d Mon Sep 17 00:00:00 2001 +From d0eed762a38260d16abb1da2acf4174743d51297 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 25 Jan 2021 14:18:13 -0800 Subject: [PATCH] disable using subsurface subcompositor +Signed-off-by: Martin Jansa --- - ext/wayland/gstwaylandsink.c | 6 +-- - ext/wayland/wldisplay.c | 3 ++ - ext/wayland/wlwindow.c | 101 ++++++++--------------------------- + ext/wayland/gstwaylandsink.c | 6 +- + ext/wayland/wldisplay.c | 3 + + ext/wayland/wlwindow.c | 103 ++++++++--------------------------- ext/wayland/wlwindow.h | 5 -- - 4 files changed, 26 insertions(+), 89 deletions(-) + 4 files changed, 27 insertions(+), 90 deletions(-) diff --git a/ext/wayland/gstwaylandsink.c b/ext/wayland/gstwaylandsink.c index bdc0882ce..0837f8e7f 100644 @@ -62,7 +63,7 @@ index 0bb9dc729..4dd69adfe 100644 #undef VERIFY_INTERFACE_EXISTS diff --git a/ext/wayland/wlwindow.c b/ext/wayland/wlwindow.c -index 0cf85aa62..6e69ba8a0 100644 +index 66a05be97..6e69ba8a0 100644 --- a/ext/wayland/wlwindow.c +++ b/ext/wayland/wlwindow.c @@ -157,8 +157,11 @@ gst_wl_window_finalize (GObject * gobject) @@ -165,6 +166,15 @@ index 0cf85aa62..6e69ba8a0 100644 if (!window->xdg_surface) { GST_ERROR ("Unable to get xdg_surface"); goto error; +@@ -289,7 +265,7 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info, + + /* Finally, commit the xdg_surface state as toplevel */ + window->configured = FALSE; +- wl_surface_commit (window->area_surface); ++ wl_surface_commit (window->video_surface); + wl_display_flush (display->display); + + g_mutex_lock (&window->configure_mutex); @@ -305,7 +281,7 @@ gst_wl_window_new_toplevel (GstWlDisplay * display, const GstVideoInfo * info, } else if (display->wl_shell) { /* go toplevel */ From d948e9f02f15d6f78483bd8f68a3e4af1d58187e Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 3 Nov 2020 10:07:04 -0800 Subject: [PATCH 0571/2022] rpi: u-boot: update patches to apply on 2020.10 version :Release Notes: Merge the patches for rpi3 and rpi4 and update to apply on u-boot version currently in oe-core. :Detailed Notes: Fixes: ERROR: u-boot-1_2020.10-r0 do_patch: Command Error: 'quilt --quiltrc /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/u-boot/1_2020.10-r0/recipe-sysroot-native/etc/quiltrc push' exited with 0 Output: Applying patch 0001-Speed-up-boot-by-disable-usb-and-enable-bootcount.patch patching file configs/rpi_3_32b_defconfig Hunk #1 FAILED at 7. Hunk #2 succeeded at 45 (offset 1 line). 1 out of 2 hunks FAILED -- rejects in file configs/rpi_3_32b_defconfig patching file include/configs/rpi.h Hunk #1 succeeded at 106 (offset 20 lines). Patch 0001-Speed-up-boot-by-disable-usb-and-enable-bootcount.patch does not apply (enforce with -f) ERROR: Logfile of failure stored in: /jenkins/mjansa/build/ose-github/hardknott/BUILD/work/raspberrypi4-webos-linux-gnueabi/u-boot/1_2020.10-r0/temp/log.do_patch.5506 ERROR: Task (/jenkins/mjansa/build/ose-github/hardknott/oe-core/meta/recipes-bsp/u-boot/u-boot_2020.10.bb:do_patch) failed with exit code '1' It's not clear why we remove CONFIG_USE_PREBOOT=y only from rpi_3_32b_defconfig but not from rpi_4_32b_defconfig. CONFIG_PREBOOT was removed from both in upstream commit: commit 44758771eefb8e600144e2e0a13cf87b9df64276 Author: Jonas Smedegaard Date: Tue Jul 21 09:32:20 2020 +0200 Subject: arm: move CONFIG_PREBOOT="usb start" to KConfig This commit moves CONFIG_PREBOOT="usb start" to common/KConfig for all boards also declaring USB_KEYBOARD. Besides simplifying defconfig files, this also enables support for board-specific CONFIG_PREBOOT for sunxi boards: commit 37304aaf60bf ("Convert CONFIG_USE_PREBOOT and CONFIG_PREBOOT to Kconfig") intended to support CONFIG_PREBOOT, but include/configs/sunxi-common.h hardcodes preboot as part of internally defined CONSOLE_STDIN_SETTINGS, silently ignoring any board-specific CONFIG_PREBOOT. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I6623f73225692a693b285dc4c9b167baeb0f733c --- ...-by-disable-usb-and-enable-bootcount.patch | 27 +++++++++---- .../0002-Speed-up-boot-for-raspberrypi4.patch | 39 ------------------- .../recipes-bsp/u-boot/u-boot_%.bbappend | 4 -- 3 files changed, 19 insertions(+), 51 deletions(-) delete mode 100644 meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot/0002-Speed-up-boot-for-raspberrypi4.patch diff --git a/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot/0001-Speed-up-boot-by-disable-usb-and-enable-bootcount.patch b/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot/0001-Speed-up-boot-by-disable-usb-and-enable-bootcount.patch index b823bc28f..af459733e 100644 --- a/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot/0001-Speed-up-boot-by-disable-usb-and-enable-bootcount.patch +++ b/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot/0001-Speed-up-boot-by-disable-usb-and-enable-bootcount.patch @@ -1,4 +1,4 @@ -From 6a579f41e16d00921f8dc3bfda913395a595e6c8 Mon Sep 17 00:00:00 2001 +From 25db8f8eef31c970cf45c490790179581f43ebdf Mon Sep 17 00:00:00 2001 From: JeongBong Seo Date: Wed, 9 Feb 2022 12:00:57 +0900 Subject: [PATCH 1/2] Speed up boot by disable usb and enable bootcount @@ -11,11 +11,12 @@ Date: Sat Jul 20 20:51:14 2019 -0600 Convert CONFIG_USE_PREBOOT and CONFIG_PREBOOT to Kconfig --- configs/rpi_3_32b_defconfig | 6 +++++- + configs/rpi_4_32b_defconfig | 5 +++++ include/configs/rpi.h | 6 +++--- - 2 files changed, 8 insertions(+), 4 deletions(-) + 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/configs/rpi_3_32b_defconfig b/configs/rpi_3_32b_defconfig -index f4fdb455f4..2c2506c3e1 100644 +index b8a3d17f43..d4f832ff8e 100644 --- a/configs/rpi_3_32b_defconfig +++ b/configs/rpi_3_32b_defconfig @@ -9,7 +9,6 @@ CONFIG_ENV_SIZE=0x4000 @@ -23,10 +24,10 @@ index f4fdb455f4..2c2506c3e1 100644 CONFIG_DISTRO_DEFAULTS=y CONFIG_OF_BOARD_SETUP=y -CONFIG_USE_PREBOOT=y + CONFIG_MISC_INIT_R=y # CONFIG_DISPLAY_CPUINFO is not set # CONFIG_DISPLAY_BOARDINFO is not set - CONFIG_MISC_INIT_R=y -@@ -43,3 +42,8 @@ CONFIG_SYS_WHITE_ON_BLACK=y +@@ -45,3 +44,8 @@ CONFIG_SYS_WHITE_ON_BLACK=y CONFIG_CONSOLE_SCROLL_LINES=10 CONFIG_PHYS_TO_BUS=y CONFIG_OF_LIBFDT_OVERLAY=y @@ -35,6 +36,19 @@ index f4fdb455f4..2c2506c3e1 100644 +CONFIG_BOOTCOUNT_ENV=y + +CONFIG_BOOTDELAY=0 +diff --git a/configs/rpi_4_32b_defconfig b/configs/rpi_4_32b_defconfig +index 4a88448e9d..ec6a6454bd 100644 +--- a/configs/rpi_4_32b_defconfig ++++ b/configs/rpi_4_32b_defconfig +@@ -58,3 +58,8 @@ CONFIG_PHYS_TO_BUS=y + CONFIG_ADDR_MAP=y + CONFIG_SYS_NUM_ADDR_MAP=2 + CONFIG_OF_LIBFDT_OVERLAY=y ++ ++CONFIG_BOOTCOUNT_LIMIT=y ++CONFIG_BOOTCOUNT_ENV=y ++ ++CONFIG_BOOTDELAY=0 diff --git a/include/configs/rpi.h b/include/configs/rpi.h index 834f1cd236..19498e879f 100644 --- a/include/configs/rpi.h @@ -52,6 +66,3 @@ index 834f1cd236..19498e879f 100644 #ifdef CONFIG_ARM64 #define FDT_HIGH "ffffffffffffffff" --- -2.25.1 - diff --git a/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot/0002-Speed-up-boot-for-raspberrypi4.patch b/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot/0002-Speed-up-boot-for-raspberrypi4.patch deleted file mode 100644 index 195810ee1..000000000 --- a/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot/0002-Speed-up-boot-for-raspberrypi4.patch +++ /dev/null @@ -1,39 +0,0 @@ -From b5dc7328c736df776c6945f063d32d11a1e46bda Mon Sep 17 00:00:00 2001 -From: JeongBong Seo -Date: Wed, 9 Feb 2022 12:05:35 +0900 -Subject: [PATCH 2/2] Speed up boot for raspberrypi4 - ---- - configs/rpi_4_32b_defconfig | 5 +++++ - configs/rpi_4_defconfig | 5 +++++ - 2 files changed, 10 insertions(+) - -diff --git a/configs/rpi_4_32b_defconfig b/configs/rpi_4_32b_defconfig -index 47ea466454..908275bd01 100644 ---- a/configs/rpi_4_32b_defconfig -+++ b/configs/rpi_4_32b_defconfig -@@ -59,3 +59,8 @@ CONFIG_PHYS_TO_BUS=y - CONFIG_ADDR_MAP=y - CONFIG_SYS_NUM_ADDR_MAP=2 - CONFIG_OF_LIBFDT_OVERLAY=y -+ -+CONFIG_BOOTCOUNT_LIMIT=y -+CONFIG_BOOTCOUNT_ENV=y -+ -+CONFIG_BOOTDELAY=0 -diff --git a/configs/rpi_4_defconfig b/configs/rpi_4_defconfig -index 9cd1477107..431b300b8d 100644 ---- a/configs/rpi_4_defconfig -+++ b/configs/rpi_4_defconfig -@@ -57,3 +57,8 @@ CONFIG_SYS_WHITE_ON_BLACK=y - CONFIG_CONSOLE_SCROLL_LINES=10 - CONFIG_PHYS_TO_BUS=y - CONFIG_OF_LIBFDT_OVERLAY=y -+ -+CONFIG_BOOTCOUNT_LIMIT=y -+CONFIG_BOOTCOUNT_ENV=y -+ -+CONFIG_BOOTDELAY=0 --- -2.25.1 - diff --git a/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot_%.bbappend b/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot_%.bbappend index 6daea0cf2..f189daa39 100644 --- a/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot_%.bbappend +++ b/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot_%.bbappend @@ -7,7 +7,3 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI:append:sota = " \ file://0001-Speed-up-boot-by-disable-usb-and-enable-bootcount.patch \ " - -SRC_URI:append:sota:raspberrypi4 = " \ - file://0002-Speed-up-boot-for-raspberrypi4.patch \ -" From fd0321fb01a50b463992ebe050fd0ca611e75caa Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sat, 14 Nov 2020 00:48:40 -0800 Subject: [PATCH 0572/2022] ntopng, linuxconsole, influxdb, libpam, spirv-tools, rpm, android-tools: fix build-deps QA issue with bash :Release Notes: :Detailed Notes: rpm: bash dependency moved from PN to PN-build in: https://git.openembedded.org/openembedded-core/commit/?id=0dea6cccc1c638078846e6eb8e48e8ef69c87618 android-tools runtime dependency on bash was moved from PN to BPN in: commit d36e527a406b241dbfaae2ce9e84fa4cfb27a81e Author: lumag Date: Mon Dec 21 02:27:00 2020 +0300 android-tools: fix package split causing: ERROR: android-tools-5.1.1.r37-r0 do_package_qa: QA Issue: android-tools-fstools rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: Iebd488550b3f3a178bdd72026751ddd19cfacba1 --- meta-webos/recipes-dbs/influxdb/influxdb_%.bbappend | 11 +++++++++++ .../android-tools/android-tools_%.bbappend | 4 ++-- meta-webos/recipes-devtools/rpm/rpm_%.bbappend | 4 ++-- .../linuxconsole/linuxconsole_%.bbappend | 8 ++++++++ meta-webos/recipes-extended/pam/libpam_%.bbappend | 8 ++++++++ .../recipes-graphics/spir/spirv-tools_%.bbappend | 8 ++++++++ meta-webos/recipes-support/ntopng/ntopng_%.bbappend | 8 ++++++++ 7 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 meta-webos/recipes-dbs/influxdb/influxdb_%.bbappend create mode 100644 meta-webos/recipes-extended/linuxconsole/linuxconsole_%.bbappend create mode 100644 meta-webos/recipes-extended/pam/libpam_%.bbappend create mode 100644 meta-webos/recipes-graphics/spir/spirv-tools_%.bbappend create mode 100644 meta-webos/recipes-support/ntopng/ntopng_%.bbappend diff --git a/meta-webos/recipes-dbs/influxdb/influxdb_%.bbappend b/meta-webos/recipes-dbs/influxdb/influxdb_%.bbappend new file mode 100644 index 000000000..bdb4e48a1 --- /dev/null +++ b/meta-webos/recipes-dbs/influxdb/influxdb_%.bbappend @@ -0,0 +1,11 @@ +# Copyright (c) 2021-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +# ERROR: influxdb-1.7.10-r0 do_package_qa: QA Issue: influxdb rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] +# ERROR: influxdb-1.7.10-r0 do_package_qa: QA Issue: influxdb-dev rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] +VIRTUAL-RUNTIME_bash ?= "bash" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-dev:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-dev:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/android-tools/android-tools_%.bbappend b/meta-webos/recipes-devtools/android-tools/android-tools_%.bbappend index 28f322d0a..be997c999 100644 --- a/meta-webos/recipes-devtools/android-tools/android-tools_%.bbappend +++ b/meta-webos/recipes-devtools/android-tools/android-tools_%.bbappend @@ -3,5 +3,5 @@ EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS:${BPN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS:${BPN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-fstools:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-fstools:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/rpm/rpm_%.bbappend b/meta-webos/recipes-devtools/rpm/rpm_%.bbappend index 002a8fa04..8b6a3ff85 100644 --- a/meta-webos/recipes-devtools/rpm/rpm_%.bbappend +++ b/meta-webos/recipes-devtools/rpm/rpm_%.bbappend @@ -3,5 +3,5 @@ EXTENDPRAUTO:append = "webos4" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}-build:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-build:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-extended/linuxconsole/linuxconsole_%.bbappend b/meta-webos/recipes-extended/linuxconsole/linuxconsole_%.bbappend new file mode 100644 index 000000000..55bd5b487 --- /dev/null +++ b/meta-webos/recipes-extended/linuxconsole/linuxconsole_%.bbappend @@ -0,0 +1,8 @@ +# Copyright (c) 2020-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +# linuxconsole-1.7.0-r0 do_package_qa: QA Issue: joystick-jscal rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] +VIRTUAL-RUNTIME_bash ?= "bash" +RDEPENDS:joystick-jscal:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:joystick-jscal:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-extended/pam/libpam_%.bbappend b/meta-webos/recipes-extended/pam/libpam_%.bbappend new file mode 100644 index 000000000..5a367bb8a --- /dev/null +++ b/meta-webos/recipes-extended/pam/libpam_%.bbappend @@ -0,0 +1,8 @@ +# Copyright (c) 2021-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +# ERROR: lib32-libpam-1.5.1-r0 do_package_qa: QA Issue: /usr/share/Linux-PAM/xtests/tst-pam_motd4.sh contained in package lib32-libpam-xtests requires /bin/bash, but no providers found in RDEPENDS:lib32-libpam-xtests? [file-rdeps] +VIRTUAL-RUNTIME_bash ?= "bash" +RDEPENDS:${PN}-xtests:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-xtests:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-graphics/spir/spirv-tools_%.bbappend b/meta-webos/recipes-graphics/spir/spirv-tools_%.bbappend new file mode 100644 index 000000000..30fb4d52f --- /dev/null +++ b/meta-webos/recipes-graphics/spir/spirv-tools_%.bbappend @@ -0,0 +1,8 @@ +# Copyright (c) 2021-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +# ERROR: spirv-tools-2020.6-r0 do_package_qa: QA Issue: spirv-tools-lesspipe rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] +VIRTUAL-RUNTIME_bash ?= "bash" +RDEPENDS:${PN}-lesspipe:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-lesspipe:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-support/ntopng/ntopng_%.bbappend b/meta-webos/recipes-support/ntopng/ntopng_%.bbappend new file mode 100644 index 000000000..b23a779e8 --- /dev/null +++ b/meta-webos/recipes-support/ntopng/ntopng_%.bbappend @@ -0,0 +1,8 @@ +# Copyright (c) 2020-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +# ERROR: ntopng-4.2-r0 do_package_qa: QA Issue: ntopng rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] +VIRTUAL-RUNTIME_bash ?= "bash" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" From 7588d1fddb88a36c9dbec9d67ddc126c69b1bed4 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 19 Apr 2021 09:14:31 -0700 Subject: [PATCH 0573/2022] bats: update file-rdeps QA issue fix about /bin/bash :Release Notes: :Detailed Notes: bats: RDEPENDS updated in: https://git.openembedded.org/meta-openembedded/commit/?id=df625750c681365b8ed1fbd746cbe054437395cb fixes: WARNING: meta-oe/recipes-test/bats/bats_1.3.0.bb: Variable key RDEPENDS_${PN} (bash) replaces original key RDEPENDS_bats ( ${VIRTUAL-RUNTIME_bash}). :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: If7a30c5ea9ef7562598e757a37d974e7b98ca9d4 --- meta-webos/recipes-test/bats/bats_%.bbappend | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-test/bats/bats_%.bbappend b/meta-webos/recipes-test/bats/bats_%.bbappend index 0ddb156f3..dc2198ab7 100644 --- a/meta-webos/recipes-test/bats/bats_%.bbappend +++ b/meta-webos/recipes-test/bats/bats_%.bbappend @@ -3,5 +3,5 @@ EXTENDPRAUTO:append = "webos1" VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS:bats:append:class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS:bats:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" From 70f0e46b8d7bb8e5ea98ec9fbe3af739e47ca8e7 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 1 Jan 2021 23:52:33 -0800 Subject: [PATCH 0574/2022] strace=webos1 gawk=webos1 (remove locale-base-en-us.iso-8859-1 runtime dependency) :Release Notes: Undo RDEPENDS_${PN}-ptest changes from: https://git.openembedded.org/openembedded-core/commit/?id=ea6f27e35b6cac4db9e1ab0d9a888d15daba6c09 https://git.openembedded.org/openembedded-core/commit/?id=69ce1914484a86e9f440aeaab887cae671d679b9 because they aren't compatible with our locale settings. :Detailed Notes: Fixes: ERROR: gawk-5.1.0-r0 do_package_qa: QA Issue: gawk-ptest rdepends on locale-base-en-us.iso-8859-1, but it isn't a build dependency? [build-deps] ERROR: strace-5.10-r0 do_package_qa: QA Issue: strace-ptest rdepends on locale-base-en-us.iso-8859-1, but it isn't a build dependency? [build-deps] :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I02c0c6ccd02a65f8bebec0bf9ad09b9ca70a245f --- .../recipes-devtools/strace/strace_%.bbappend | 16 ++++++++++++++++ meta-webos/recipes-extended/gawk/gawk_%.bbappend | 16 ++++++++++++++++ 2 files changed, 32 insertions(+) create mode 100644 meta-webos/recipes-devtools/strace/strace_%.bbappend create mode 100644 meta-webos/recipes-extended/gawk/gawk_%.bbappend diff --git a/meta-webos/recipes-devtools/strace/strace_%.bbappend b/meta-webos/recipes-devtools/strace/strace_%.bbappend new file mode 100644 index 000000000..6eda3dc9d --- /dev/null +++ b/meta-webos/recipes-devtools/strace/strace_%.bbappend @@ -0,0 +1,16 @@ +# Copyright (c) 2020-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +# We need to revert RDEPENDS changes from +# https://git.openembedded.org/openembedded-core/commit/?id=ea6f27e35b6cac4db9e1ab0d9a888d15daba6c09 +# +# because as described in: +# http://lists.openembedded.org/pipermail/openembedded-commits/2017-November/215520.html +# http://lists.openembedded.org/pipermail/openembedded-core/2018-October/156694.html +# it doesn't work when GLIBC_GENERATE_LOCALES are restricted like they are in our builds: +# meta-webos/conf/distro/include/webos-toolchain.inc:GLIBC_GENERATE_LOCALES = "en_US.UTF-8" + +RDEPENDS:${PN}-ptest:remove:libc-glibc = "\ + locale-base-en-us.iso-8859-1 \ +" diff --git a/meta-webos/recipes-extended/gawk/gawk_%.bbappend b/meta-webos/recipes-extended/gawk/gawk_%.bbappend new file mode 100644 index 000000000..7e8db1e48 --- /dev/null +++ b/meta-webos/recipes-extended/gawk/gawk_%.bbappend @@ -0,0 +1,16 @@ +# Copyright (c) 2020-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +# We need to revert RDEPENDS changes from +# https://git.openembedded.org/openembedded-core/commit/?id=69ce1914484a86e9f440aeaab887cae671d679b9 +# +# because as described in: +# http://lists.openembedded.org/pipermail/openembedded-commits/2017-November/215520.html +# http://lists.openembedded.org/pipermail/openembedded-core/2018-October/156694.html +# it doesn't work when GLIBC_GENERATE_LOCALES are restricted like they are in our builds: +# meta-webos/conf/distro/include/webos-toolchain.inc:GLIBC_GENERATE_LOCALES = "en_US.UTF-8" + +RDEPENDS:${PN}-ptest:remove:libc-glibc = "\ + locale-base-en-us.iso-8859-1 \ +" From e77ce14ebba37a66dfac74c0991f0ecdc9a52394 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 17 Nov 2020 00:56:14 -0800 Subject: [PATCH 0575/2022] dbus: use PN in RDEPENDS :Release Notes: :Detailed Notes: Now there is RDEPENDS_${PN} in the main recipe after https://git.openembedded.org/openembedded-core/commit/?id=cdabc65298f58b3d0ae0de187a7114dd0c445846 so we need to update this to fix: WARNING: Variable key RDEPENDS_${PN} ( ${PN}-common ${PN}-tools) replaces original key RDEPENDS_dbus ( ${PN}-gpl). :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I6e0c8ade6dce96e7a03b9b21f15e466fd71351b2 --- meta-webos/recipes-core/dbus/dbus_%.bbappend | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/meta-webos/recipes-core/dbus/dbus_%.bbappend b/meta-webos/recipes-core/dbus/dbus_%.bbappend index aeceb4b31..e26dcc558 100644 --- a/meta-webos/recipes-core/dbus/dbus_%.bbappend +++ b/meta-webos/recipes-core/dbus/dbus_%.bbappend @@ -6,10 +6,7 @@ PACKAGES =+ "${PN}-gpl" LICENSE += "& GPL-2.0-only" LICENSE:${PN}-gpl = "GPL-2.0-only" -# using "dbus" instead of "${PN}" due to: -# WARNING: Variable key RDEPENDS:${PN} ( ${PN}-gpl) replaces original key RDEPENDS:dbus -# (${@bb.utils.contains('DISTRO_FEATURES', 'ptest', 'dbus-ptest-ptest', '', d)}). -RDEPENDS:dbus += "${PN}-gpl" +RDEPENDS:${PN} += "${PN}-gpl" FILES:${PN}-gpl = " \ ${bindir}/dbus-cleanup-sockets \ From 697c51ae10bf403daae1b2131e8073865317c3ad Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 1 Apr 2021 04:09:30 -0700 Subject: [PATCH 0576/2022] webos: PNBLACKLIST: update for Yocto 3.3 Hardknott :Release Notes: :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I5b063f4c87c03fb4f392845ce727bd1399b4c947 --- meta-webos-smack/conf/layer.conf | 1 + .../distro/include/webos-recipe-blacklist.inc | 45 ++----------------- 2 files changed, 4 insertions(+), 42 deletions(-) diff --git a/meta-webos-smack/conf/layer.conf b/meta-webos-smack/conf/layer.conf index 87c57d897..1e4f26437 100644 --- a/meta-webos-smack/conf/layer.conf +++ b/meta-webos-smack/conf/layer.conf @@ -12,6 +12,7 @@ BBMASK:append = " meta-security\/(?!.*\/smack\/).*" PNBLACKLIST[crun] ?= "Depends on libseccomp which is provided by meta-security, but meta-webos-smack/conf/layer.conf BBMASKs everything from meta-security except smack itself" PNBLACKLIST[slirp4netns] ?= "Depends on libseccomp which is provided by meta-security, but meta-webos-smack/conf/layer.conf BBMASKs everything from meta-security except smack itself" PNBLACKLIST[podman] ?= "Depends on libseccomp which is provided by meta-security, but meta-webos-smack/conf/layer.conf BBMASKs everything from meta-security except smack itself" +PNBLACKLIST[packagegroup-container] ?= "Depends on podman which depends on libseccomp which is provided by meta-security, but meta-webos-smack/conf/layer.conf BBMASKs everything from meta-security except smack itself" BBFILE_COLLECTIONS += "meta-webos-smack" BBFILE_PATTERN_meta-webos-smack := "^${LAYERDIR}/" diff --git a/meta-webos/conf/distro/include/webos-recipe-blacklist.inc b/meta-webos/conf/distro/include/webos-recipe-blacklist.inc index f1ce29592..311f68868 100644 --- a/meta-webos/conf/distro/include/webos-recipe-blacklist.inc +++ b/meta-webos/conf/distro/include/webos-recipe-blacklist.inc @@ -51,7 +51,7 @@ PNBLACKLIST[sysstat] ?= "BROKEN: install: invalid group ‘man’ http://caprica PNBLACKLIST[man-db] ?= "BROKEN: without --disable-cache-owner: chown: invalid user: ?man:man? our passwd doesn't have man user and since http://git.openembedded.org/openembedded-core/commit/?id=7080df4b6bc50440eed600e81f2c6fa76a80623d it's needed http://caprica.lgsvl.com:8080/Errors/Details/1509154" # meta-oe/recipes-core/packagegroups/packagegroup-meta-oe.bb -PNBLACKLIST[packagegroup-meta-oe] ?= "depends on blacklisted libsmi, phonet-utils, gradm, scsirastools, tomoyo-tools, s-suite, .." +PNBLACKLIST[packagegroup-meta-oe] ?= "depends on blacklisted gradm, scsirastools, tomoyo-tools, s-suite, .." # meta-oe/recipes-support/libssh2/libssh2_1.9.0.bb PNBLACKLIST[libssh2] ?= "Depends on blacklisted man-db since https://git.openembedded.org/meta-openembedded/commit/?id=b3e9b51c9ba58b01e55c5b0a9a9bec3f7f06d07a" # meta-oe/recipes-support/libgit2/libgit2_1.0.1.bb @@ -59,25 +59,6 @@ PNBLACKLIST[libgit2] ?= "Depends on blacklisted libssh2 which depends on blackli # meta-oe/recipes-benchmark/s-suite/s-suite_git.bb PNBLACKLIST[s-suite] ?= "rdepends on blacklisted sysstat" -# nagios-* PNBLACKLIST upstreamed in: -# https://lists.yoctoproject.org/g/meta-virtualization/message/6301 -# will probably get merged in hardknott -# meta-virtualization/recipes-extended/nagios/nagios-core_4.4.6.bb -PNBLACKLIST[nagios-core] ?= "${@bb.utils.contains('BBFILE_COLLECTIONS', 'webserver', '', 'Depends on apache2 from meta-webserver which is not included', d)}" -# meta-virtualization/recipes-extended/nagios/nagios-plugins_2.2.1.bb -PNBLACKLIST[nagios-plugins] ?= "${@bb.utils.contains('BBFILE_COLLECTIONS', 'webserver', '', 'Depends on nagios-core which depends on apache2 from meta-webserver which is not included', d)}" -# meta-virtualization/recipes-extended/nagios/nagios-nrpe_4.0.2.bb -PNBLACKLIST[nagios-nrpe] ?= "${@bb.utils.contains('BBFILE_COLLECTIONS', 'webserver', '', 'Depends on nagios-core which depends on apache2 from meta-webserver which is not included', d)}" -# meta-virtualization/recipes-extended/nagios/nagios-nsca_2.9.2.bb -PNBLACKLIST[nagios-nsca] ?= "${@bb.utils.contains('BBFILE_COLLECTIONS', 'webserver', '', 'Rdepends on nagios-base provided by nagios-core which depends on apache2 from meta-webserver which is not included', d)}" -# ipxe fixes sent upstream in: -# https://lists.yoctoproject.org/g/meta-virtualization/message/6302 -# https://lists.yoctoproject.org/g/meta-virtualization/message/6304 -# https://lists.yoctoproject.org/g/meta-virtualization/message/6305 -# will probably get merged in hardknott -# meta-virtualization/recipes-extended/ipxe/ipxe_git.bb:do_compile -PNBLACKLIST[ipxe] ?= "Doesn't match the COMPATIBLE_HOST restriction from syslinux: syslinux was skipped: incompatible with host arm-webos-linux-gnueabi (not in COMPATIBLE_HOST) and also fails with gold: ipxe-gitrAUTOINC+64b4452bca-r0 do_compile: Function failed: do_compile: Makefile.housekeeping:111: GNU gold is unsuitable for building iPXE" - # meta-virtualization/recipes-containers/cri-o/cri-o_git.bb:do_compile PNBLACKLIST[cri-o] ?= "ERROR: cri-o-1.12.0+git774a29ecf6855f2dff266dc2aa2fe81d7d964465-r0 do_compile: Function failed: do_compile: | Makefile:112: recipe for target conmon/config.h failed" # meta-virtualization/recipes-core/kata-containers/kata-agent_git.bb:do_package_qa @@ -90,15 +71,6 @@ PNBLACKLIST[kata-runtime] ?= "ERROR: kata-runtime-git-r0 do_compile: oe_runmake PNBLACKLIST[kata-shim] ?= "ERROR: kata-shim-git-r0 do_package_qa: QA Issue: ELF binary kata-shim/git-r0/packages-split/kata-shim/usr/libexec/kata-containers/kata-shim has relocations in .text [textrel]" # meta-virtualization/recipes-core/runv/runv_git.bb:do_compile PNBLACKLIST[runv] ?= "ERROR: runv-0.4.0+gitb360a686abc6c6e896382990ef1b93ef07c7a677-r0 do_compile: Function failed: do_compile: src/import/vendor/src/github.com/hyperhq/runv/hypervisor/qemu/qemu.go:45:28: undefined: QEMU_SYSTEM_EXE" -# dev86 fixes sent upstream in: -# https://lists.yoctoproject.org/g/meta-virtualization/message/6306 -# https://lists.yoctoproject.org/g/meta-virtualization/message/6307 -# will probably get merged in hardknott -# meta-virtualization/recipes-extended/dev86/dev86_0.16.20.bb:do_install -PNBLACKLIST[dev86] ?= "ERROR: dev86-0.16.21-r0 do_package_qa: QA Issue: File * in package dev86 doesn't have GNU_HASH (didn't pass LDFLAGS?)" -# kvmtool can be dropped in hardknott -# meta-virtualization/recipes-extended/kvmtool/kvmtool.bb:do_compile -PNBLACKLIST[kvmtool] ?= "ERROR: kvmtool-4.14.0+gitAUTOINC+0e1882a49f-r0 do_patch: Fuzz detected: Applying patch 0003-kvmtool-Werror-disabled.patch" # meta-virtualization/recipes-extended/seabios/seabios_1.11.2.bb:do_compile PNBLACKLIST[seabios] ?= "ERROR: seabios-1.11.2-r0 do_compile: Function failed: do_compile: i586-webos-linux-ld: error: out/rom16.strip.o: unsupported ELF file type 2" # meta-virtualization/recipes-extended/vgabios/biossums_0.7a.bb:do_package_qa @@ -119,11 +91,6 @@ PNBLACKLIST[cifs-utils] ?= "ERROR: cifs-utils-6.7-r0 do_package: QA Issue: cifs- PNBLACKLIST[linux-atm] ?= "ERROR: linux-atm-2.5.2-r0 do_package_qa: QA Issue: linux-atm package is not obeying usrmerge distro feature. /lib should be relocated to /usr. [usrmerge]" # meta-openembedded/meta-oe/recipes-connectivity/lirc/lirc_0.9.4d.bb:do_package PNBLACKLIST[lirc] ?= "ERROR: lirc-0.9.4d-r0 do_package: SYSTEMD_SERVICE:lirc value lircmd.service does not exist" -# phonet-utils removal sent in: -# https://lists.openembedded.org/g/openembedded-devel/message/90533 -# will probably get merged in hardknott -# meta-openembedded/meta-oe/recipes-connectivity/phonet-utils/phonet-utils_git.bb:do_package_qa -PNBLACKLIST[phonet-utils] ?= "ERROR: phonet-utils-0.0.0+gitrAUTOINC+4acfa720fd-r2 do_package_qa: QA Issue: phonet-utils package is not obeying usrmerge distro feature. /lib should be relocated to /usr. [usrmerge]" # meta-openembedded/meta-oe/recipes-extended/boinc/boinc-client_7.12.bb:do_package PNBLACKLIST[boinc-client] ?= "ERROR: boinc-client-7.12-r0 do_package: SYSTEMD_SERVICE:boinc-client value boinc-client.service does not exist" # meta-openembedded/meta-oe/recipes-extended/scsirastools/scsirastools_1.6.6.bb:do_package @@ -136,11 +103,6 @@ PNBLACKLIST[tomoyo-tools] ?= "ERROR: tomoyo-tools-2.5.0-r0 do_package: QA Issue: PNBLACKLIST[tcsh] ?= "ERROR: tcsh-6.20.00-r0 do_install: Function failed: do_install: ln: failed to create symbolic link tmp-glibc/work/raspberrypi4-webos-linux-gnueabi/tcsh/6.20.00-r0/image/usr/bin/tcsh: File exists" # meta-openembedded/meta-oe/recipes-support/gradm/gradm_3.1.bb:do_package PNBLACKLIST[gradm] ?= "ERROR: gradm-3.1-r0 do_package: QA Issue: gradm: Files/directories were installed but not shipped in any package" -# Fix sent upstream in: -# https://lists.openembedded.org/g/openembedded-devel/message/90578 -# will probably get merged in hardknott -# meta-openembedded/meta-oe/recipes-support/libsmi/libsmi_0.5.0.bb:do_package_qa -PNBLACKLIST[libsmi] ?= "ERROR: libsmi-0.5.0-r0 do_package_qa: QA Issue: /usr/bin/smistrip contained in package libsmi requires /usr/bin/sh, but no providers found in RDEPENDS:libsmi? [file-rdeps]" # meta-raspberrypi/recipes-multimedia/omxplayer/omxplayer_git.bb:do_compile PNBLACKLIST[omxplayer] ?= "ERROR: omxplayer-git-r4 do_compile: Function failed: do_compile: DllAvFormat.h:117:51: error: ::avio_feof has not been declared" # meta-virtualization/recipes-containers/lxcfs/lxcfs_3.0.1.bb:do_package @@ -165,9 +127,8 @@ PNBLACKLIST[sysdig] ?= "Doesn't build with jsoncpp with exceptions disabled, met PNBLACKLIST[xen-python2] ?= "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', 'Depends on blacklisted xen-tools', '', d)}" # meta-virtualization/recipes-extended/xen/xen_git.bb PNBLACKLIST[xen] ?= "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', 'Depends on blacklisted xen-tools', '', d)}" +# meta-virtualization/recipes-extended/xen/xtf_git.bb +PNBLACKLIST[xtf] ?= "${@bb.utils.contains('DISTRO_FEATURES', 'ld-is-gold', 'Rdepends on xen-tools-xl package provided by blacklisted xen-tools', '', d)}" # meta-oe/meta-multimedia/recipes-multimedia/packagegroups/packagegroup-meta-multimedia.bb PNBLACKLIST[packagegroup-meta-multimedia] ?= "ERROR: depends on x265 without respecting LICENSE_FLAGS, fixed in kirkstone https://lists.openembedded.org/g/openembedded-devel/message/94141" - -# meta-openembedded/meta-oe/recipes-multimedia/pipewire/pipewire_git.bb -PNBLACKLIST[pipewire] ?= "Doesn't like our old pulseaudio from meta-webos: meson.build:234:2: ERROR: Invalid version of dependency, need 'libpulse' ['>= 11.1'] found '9.0-14-gdf81'." From 79227a8afc250ec09f5d16850bbf35ef9673cead Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 22 Dec 2020 05:30:17 -0800 Subject: [PATCH 0577/2022] pulseaudio: import older pulseaudio.inc which is still using autotools from oe-core :Release Notes: meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb is still using autotools and there isn't much we can reuse from upstream pulseaudio.inc after it's migrated to Meson there in: https://git.openembedded.org/openembedded-core/commit/?id=80bbea06e706fde3600950ea9ddfc38a1a76b8bb :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/95205 meson: error: unrecognized arguments: bluez5 sbc --enable-palm-resampler which shows how messed-up the pulseaudio recipes were when using "bluez5 sbc" as a "disable" option for bluez5 PACKAGECONFIG :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I1269d4908bad7cce6245428364484cf722aa1c7d --- .../pulseaudio/pulseaudio.inc | 300 ++++++++++++++++++ 1 file changed, 300 insertions(+) create mode 100644 meta-webos/recipes-multimedia/pulseaudio/pulseaudio.inc diff --git a/meta-webos/recipes-multimedia/pulseaudio/pulseaudio.inc b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio.inc new file mode 100644 index 000000000..8b79bd9d3 --- /dev/null +++ b/meta-webos/recipes-multimedia/pulseaudio/pulseaudio.inc @@ -0,0 +1,300 @@ +# Imported without any modification from: +# https://git.openembedded.org/openembedded-core/tree/meta/recipes-multimedia/pulseaudio/pulseaudio.inc?id=73d538f20743017a44cea4c20dbe09a0327cfc71 +# before the pulseaudio 14 in oe-core was migrated to use Meson instead of Autotools in: +# https://git.openembedded.org/openembedded-core/commit/?id=80bbea06e706fde3600950ea9ddfc38a1a76b8bb +# but the old pulseaudio in: +# meta-webos/recipes-multimedia/pulseaudio/pulseaudio_9.0.bb +# still needs autotools, this file should be removed once OSE upgrades to some +# recent pulseaudio. + +SUMMARY = "Sound server for Linux and Unix-like operating systems" +HOMEPAGE = "http://www.pulseaudio.org" +AUTHOR = "Lennart Poettering" +SECTION = "libs/multimedia" + +# Most of PulseAudio code is under LGPLv2.1+. There are a few exceptions: +# +# The "adrian" echo canceller variant has code under a non-standard permissive +# license. See src/modules/echo-cancel/adrian-license.txt for details. This +# recipe disables the adrian echo canceller to avoid hassle with the unusual +# license. +# +# The src/modules/reserve* and src/pulsecore/rtkit* files are under the MIT +# license. +# +# The src/pulsecore/filter/ directory contains code under the 3-clause BSD +# license. +# +# People who distribute PulseAudio binaries need to also consider that there +# are some dependencies to GPL libraries. LGPL code that depends on GPL +# libraries probably becomes effectively GPL-licensed (at compile-time? or at +# at link-time?). I'm not a lawyer, though, so I'm not sure of the exact +# implications. The GPL dependencies only affect the server, not the client +# library, with the exception of libdbus that affects both. These are the GPL +# library dependencies: +# +# One of the resampler implementations uses libsamplerate. This recipe doesn't +# enable that resampler, however. +# +# One of the database implementations uses gdbm. This recipe doesn't enable +# that database implementation, however. +# +# module-lirc (enabled by PACKAGECONFIG[lirc]) uses LIRC. +# +# module-equalizer-sink uses FFTW. This recipe disables that, however. +# +# The dependency with the most complicated licensing considerations is libdbus. +# When PACKAGECONFIG[dbus] is enabled (like it is by default), libdbus will be +# used by both the server and the client library (libpulse). Does this affect +# applications that use libpulse? It should be also noted that libdbus is +# dual-licensed: either GPLv2+ or AFL-2 terms apply. Whose decision is it which +# of the licenses apply? What a mess. Some people hold the view that libdbus is +# a system library that is covered by the "special exception" in GPLv2's +# section 3, and therefore libdbus's GPL license doesn't affect PulseAudio. +LICENSE = "LGPL-2.1-or-later & MIT & BSD-3-Clause" + +LIC_FILES_CHKSUM = "file://LICENSE;md5=0e5cd938de1a7a53ea5adac38cc10c39 \ + file://GPL;md5=4325afd396febcb659c36b49533135d4 \ + file://LGPL;md5=2d5025d4aa3495befef8f17206a5b0a1 \ + file://src/modules/echo-cancel/adrian-license.txt;md5=abbab006a561fbffccedf1c3531f34ab \ + file://src/pulsecore/filter/LICENSE.WEBKIT;md5=49defbaffddf8c51faf606ff7fc3b1f7 \ + file://src/pulsecore/resampler.h;beginline=4;endline=21;md5=09794012ae16912c0270f3280cc8ff84 \ + file://src/modules/reserve.h;beginline=6;endline=28;md5=0e23094760367d51b6609750e9b31fbb \ + file://src/pulsecore/rtkit.h;beginline=6;endline=29;md5=3f00ff966716ae0817c31576d1473528 \ + file://src/modules/echo-cancel/adrian-aec.h;beginline=3;endline=12;md5=d3ed4fad1c073f8b06f37495dc5d1026 \ + file://src/pulsecore/filter/biquad.h;beginline=1;endline=4;md5=6d46d1365206528a20137355924233c1 \ +" + +DEPENDS = "libatomic-ops libsndfile1 libtool" +# optional +DEPENDS += "udev alsa-lib glib-2.0" +DEPENDS += "speexdsp libxml-parser-perl-native libcap" + +inherit autotools bash-completion pkgconfig useradd gettext perlnative systemd manpages gsettings + +# *.desktop rules wont be generated during configure and build will fail +# if using --disable-nls +USE_NLS = "yes" + +EXTRA_OECONF = "\ + --disable-hal-compat \ + --disable-orc \ + --enable-tcpwrap=no \ + --with-access-group=audio \ + --disable-openssl \ + --with-database=simple \ + --without-zsh-completion-dir \ + --with-udev-rules-dir=`pkg-config --variable=udevdir udev`/rules.d \ + ac_cv_header_valgrind_memcheck_h=no \ + --disable-tests \ + --disable-running-from-build-tree \ +" + +# soxr (the SoX Resampler library) doesn't seem to be currently packaged in +# oe-core nor meta-oe, so let's not add a PACKAGECONFIG entry for it for now. +EXTRA_OECONF += "--without-soxr" + +# The FFTW dependency (for module-equalizer-sink) was removed in commit +# ddbd713293 without explaining why it was not made a PACKAGECONFIG item +# instead. Oh well, let's keep it disabled until someone expresses some +# interest in having it enabled. +EXTRA_OECONF += "--without-fftw" + +# The "adrian" echo canceller implementation has a non-standard license +# (src/modules/echo-cancel/adrian-license.txt). It's a permissive license, so +# the licensing terms are probably not problematic, but it would be an extra +# hassle to add the license to OE-Core's set of licenses. The canceller isn't +# very good anyway, better alternatives exist (such as the webrtc canceller). +EXTRA_OECONF += "--disable-adrian-aec" + +PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'bluetooth', 'bluez5', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', 'zeroconf', 'avahi', '', d)} \ + ${@bb.utils.contains('DISTRO_FEATURES', '3g', 'ofono', '', d)} \ + ${@bb.utils.filter('DISTRO_FEATURES', 'ipv6 systemd x11', d)} \ + dbus gsettings \ + " + +PACKAGECONFIG[dbus] = "--enable-dbus,--disable-dbus,dbus" +PACKAGECONFIG[bluez5] = "--enable-bluez5,--disable-bluez5,bluez5 sbc" +PACKAGECONFIG[gconf] = "--enable-gconf,--disable-gconf,gconf" +PACKAGECONFIG[gsettings] = "--enable-gsettings,--disable-gsettings,glib-2.0-native glib-2.0" +PACKAGECONFIG[ofono] = "--enable-bluez5-ofono-headset,--disable-bluez5-ofono-headset,ofono" +PACKAGECONFIG[gtk] = "--enable-gtk3,--disable-gtk3,gtk+3" +PACKAGECONFIG[systemd] = "--enable-systemd-daemon --enable-systemd-login --enable-systemd-journal --with-systemduserunitdir=${systemd_user_unitdir},--disable-systemd-daemon --disable-systemd-login --disable-systemd-journal,systemd" +PACKAGECONFIG[x11] = "--enable-x11,--disable-x11,virtual/libx11 libxtst libice libsm libxcb" +PACKAGECONFIG[avahi] = "--enable-avahi,--disable-avahi,avahi" +PACKAGECONFIG[jack] = "--enable-jack,--disable-jack,jack" +# Since many embedded systems don't have non-root users, it's useful to be +# able to use pulseaudio autospawn for root as well. +PACKAGECONFIG[autospawn-for-root] = ",,," +PACKAGECONFIG[lirc] = "--enable-lirc,--disable-lirc,lirc" +PACKAGECONFIG[webrtc] = "--enable-webrtc-aec,--disable-webrtc-aec,webrtc-audio-processing" +PACKAGECONFIG[ipv6] = "--enable-ipv6,--disable-ipv6," +PACKAGECONFIG[manpages] = "--enable-manpages, --disable-manpages, " + +EXTRA_OECONF:append:arm = "${@bb.utils.contains("TUNE_FEATURES", "neon", "", " --enable-neon-opt=no", d)}" +EXTRA_OECONF:append:armeb = "${@bb.utils.contains("TUNE_FEATURES", "neon", "", " --enable-neon-opt=no", d)}" + + +export TARGET_PFPU = "${TARGET_FPU}" + +# TODO: Use more fine granular version +#OE_LT_RPATH_ALLOW=":${libdir}/pulse-0.9:" +OE_LT_RPATH_ALLOW = "any" +OE_LT_RPATH_ALLOW[export]="1" + +set_cfg_value () { + sed -i -e "s/\(; *\)\?$2 =.*/$2 = $3/" "$1" + if ! grep -q "^$2 = $3\$" "$1"; then + die "Use of sed to set '$2' to '$3' in '$1' failed" + fi +} + +do_compile:append () { + if ${@bb.utils.contains('PACKAGECONFIG', 'autospawn-for-root', 'true', 'false', d)}; then + set_cfg_value src/client.conf allow-autospawn-for-root yes + fi +} + +do_install:append() { + install -d ${D}${sysconfdir}/default/volatiles + install -m 0644 ${WORKDIR}/volatiles.04_pulse ${D}${sysconfdir}/default/volatiles/04_pulse +} + +USERADD_PACKAGES = "pulseaudio-server" +GROUPADD_PARAM:pulseaudio-server = "--system pulse" +USERADD_PARAM:pulseaudio-server = "--system --home /var/run/pulse \ + --no-create-home --shell /bin/false \ + --groups audio,pulse --gid pulse pulse" + +PACKAGES =+ "\ + libpulse \ + libpulse-mainloop-glib \ + libpulse-simple \ + libpulsecommon \ + libpulsecore \ + ${PN}-pa-info \ + ${PN}-server \ + ${PN}-misc \ + " + +# The console-kit module is included here explicitly so bitbake can map to the +# RDEPENDS we define for it in this recipe, and thereby ensure that when +# adding the console-kit module to an image, we also get the necessary +# consolekit package produced. +PACKAGES =+ "${@bb.utils.contains('PACKAGECONFIG', 'dbus', 'pulseaudio-module-console-kit', '', d)}" + +#upgrade path: +RREPLACES:pulseaudio-server = "libpulse-bin libpulse-conf" + +PACKAGES_DYNAMIC += "^pulseaudio-lib-.* ^pulseaudio-module-.*" + +FILES:libpulsecore = "${libdir}/pulseaudio/libpulsecore*.so" +FILES:libpulsecommon = "${libdir}/pulseaudio/libpulsecommon*.so" + +# client.conf configures the behaviour of libpulse, so it belongs in the same +# package. +FILES:libpulse = "${libdir}/libpulse.so.* ${sysconfdir}/pulse/client.conf" + +FILES:libpulse-simple = "${libdir}/libpulse-simple.so.*" +FILES:libpulse-mainloop-glib = "${libdir}/libpulse-mainloop-glib.so.*" + +FILES:${PN}-dev += "${libdir}/pulse-${PV}/modules/*.la ${datadir}/vala ${libdir}/cmake" +FILES:${PN}-conf = "${sysconfdir}" +FILES:${PN}-bin += "${sysconfdir}/default/volatiles/04_pulse" +FILES:${PN}-pa-info = "${bindir}/pa-info" +FILES:${PN}-server = "${bindir}/pulseaudio ${bindir}/start-* ${sysconfdir} ${bindir}/pactl */udev/rules.d/*.rules */*/udev/rules.d/*.rules ${systemd_user_unitdir}/*" + +#SYSTEMD_PACKAGES = "${PN}-server" +SYSTEMD_SERVICE:${PN}-server = "pulseaudio.service" + +FILES:${PN}-misc = "${bindir}/* ${libdir}/pulseaudio/libpulsedsp.so" + +# Allow the pulseaudio package to be created empty as a placeholder (-dbg and -dev depend on it) +FILES:${PN} = "" +ALLOW_EMPTY:${PN} = "1" + +CONFFILES:libpulse = "${sysconfdir}/pulse/client.conf" + +CONFFILES:pulseaudio-server = "\ + ${sysconfdir}/pulse/default.pa \ + ${sysconfdir}/pulse/daemon.conf \ + ${sysconfdir}/pulse/system.pa \ + " + +pkg_postinst:${PN}-server() { + if [ -z "$D" ] && [ -e ${sysconfdir}/init.d/populate-volatile.sh ] ; then + ${sysconfdir}/init.d/populate-volatile.sh update + fi +} + +python populate_packages:prepend() { + plugindir = d.expand('${libdir}/pulse-${PV}/modules/') + do_split_packages(d, plugindir, r'^module-(.*)\.so$', '${PN}-module-%s', 'PulseAudio module for %s', extra_depends='', prepend=True) + do_split_packages(d, plugindir, r'^lib(.*)\.so$', '${PN}-lib-%s', 'PulseAudio library for %s', extra_depends='', prepend=True) +} + +# pa-info is a bash script that collects information about the audio setup. +# It's primarily useful for attaching an information dump when reporting bugs. +RDEPENDS:${PN}-pa-info = "\ + alsa-utils-amixer \ + alsa-utils-aplay \ + alsa-utils-scripts \ + bash \ + ${PN}-server \ + " + +RDEPENDS:pulseaudio-server = " \ + pulseaudio-module-filter-apply \ + pulseaudio-module-filter-heuristics \ + pulseaudio-module-udev-detect \ + pulseaudio-module-null-sink \ + pulseaudio-module-device-restore \ + pulseaudio-module-stream-restore \ + pulseaudio-module-card-restore \ + pulseaudio-module-augment-properties \ + pulseaudio-module-detect \ + pulseaudio-module-alsa-sink \ + pulseaudio-module-alsa-source \ + pulseaudio-module-alsa-card \ + pulseaudio-module-native-protocol-unix \ + pulseaudio-module-default-device-restore \ + pulseaudio-module-intended-roles \ + pulseaudio-module-rescue-streams \ + pulseaudio-module-always-sink \ + pulseaudio-module-suspend-on-idle \ + pulseaudio-module-position-event-sounds \ + pulseaudio-module-role-cork \ + pulseaudio-module-switch-on-port-available" + +# If the server is installed, it's usually desirable to make ALSA applications +# use PulseAudio. alsa-plugins-pulseaudio-conf will install the configuration +# that makes the PulseAudio plugin the default ALSA device. +RDEPENDS:pulseaudio-server += "alsa-plugins-pulseaudio-conf" + +# pulseaudio-module-console-kit is built whenever dbus is enabled by PACKAGECONFIG +# but consolekit depends on libx11 and is available only for DISTRO with x11 in DISTRO_FEATURES +RDEPENDS:pulseaudio-module-console-kit =+ "${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'consolekit', '', d)}" +RDEPENDS:pulseaudio-misc += "pulseaudio-module-cli-protocol-unix" + +FILES:${PN}-module-alsa-card += "${datadir}/pulseaudio/alsa-mixer" +FILES:${PN}-module-gconf += "${libexecdir}/pulse/gconf-helper" + +GSETTINGS_PACKAGE = "${@bb.utils.contains('PACKAGECONFIG', 'gsettings', '${PN}-module-gsettings', '', d)}" +FILES:${PN}-module-gsettings += "${libexecdir}/pulse/gsettings-helper ${datadir}/GConf/gsettings ${datadir}/glib-2.0/schemas" + +# The console-kit module is good to have on X11 systems (it keeps PulseAudio +# running for the duration of the user login session). The device-manager and +# x11-* modules are referenced from the start-pulseaudio-x11 script, so those +# modules must be installed when X11 is enabled. +RDEPENDS:pulseaudio-server += "\ + ${@bb.utils.contains('DISTRO_FEATURES', 'x11', '\ + pulseaudio-module-device-manager \ + pulseaudio-module-x11-cork-request \ + pulseaudio-module-x11-publish \ + pulseaudio-module-x11-xsmp \ + ', '', d)}" + +RDEPENDS:pulseaudio-server += "${@bb.utils.contains('DISTRO_FEATURES', 'x11', \ + bb.utils.contains('DISTRO_FEATURES', 'systemd', 'pulseaudio-module-systemd-login', 'pulseaudio-module-console-kit', d), \ + '', d)}" From daedb563d39e794173915a3c15fc2894f7d3f12e Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 22 Dec 2020 09:33:19 -0800 Subject: [PATCH 0578/2022] opkg: update patches to apply on 0.4.4 version :Release Notes: :Detailed Notes: ERROR: opkg-1_0.4.4-r0 do_patch: Fuzz detected: Applying patch 0005-Add-symlink-path-validity.patch patching file libopkg/opkg_archive.c Hunk #1 succeeded at 883 (offset -23 lines). patching file libopkg/opkg_conf.c patching file libopkg/opkg_conf.h Hunk #1 succeeded at 107 (offset 2 lines). patching file src/opkg.c Hunk #1 succeeded at 60 (offset 3 lines). Hunk #2 succeeded at 108 with fuzz 2 (offset 2 lines). Hunk #3 succeeded at 258 (offset 3 lines). The context lines in the patches can be updated with devtool: devtool modify opkg devtool finish --force-patch-refresh opkg Don't forget to review changes done by devtool! ERROR: opkg-1_0.4.4-r0 do_patch: QA Issue: Patch log indicates that patches do not apply cleanly. [patch-fuzz] :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I74c5e0a615618b9dac08fecacecab51a2a15fca0 --- ...d-files-before-update-file-ownership.patch | 10 ++++----- ...ile-content-to-speed-package-removal.patch | 6 ++--- ...h => 0003-Add-symlink-path-validity.patch} | 22 +++++++++---------- ...-S_ISUID-and-S_ISGID-permission-bits.patch | 16 +++++++------- .../recipes-devtools/opkg/opkg_%.bbappend | 2 +- 5 files changed, 28 insertions(+), 28 deletions(-) rename meta-webos/recipes-devtools/opkg/opkg/{0005-Add-symlink-path-validity.patch => 0003-Add-symlink-path-validity.patch} (85%) diff --git a/meta-webos/recipes-devtools/opkg/opkg/0001-Load-installed-files-before-update-file-ownership.patch b/meta-webos/recipes-devtools/opkg/opkg/0001-Load-installed-files-before-update-file-ownership.patch index 4645ade22..6c112aba8 100644 --- a/meta-webos/recipes-devtools/opkg/opkg/0001-Load-installed-files-before-update-file-ownership.patch +++ b/meta-webos/recipes-devtools/opkg/opkg/0001-Load-installed-files-before-update-file-ownership.patch @@ -1,4 +1,4 @@ -From df9c4383b498f0ad6bbe1d272046662c3e9e9e29 Mon Sep 17 00:00:00 2001 +From d25c176c69656bcc849c42307b6dca89c567368a Mon Sep 17 00:00:00 2001 From: Rohit Anand Date: Mon, 30 May 2016 16:54:15 +0530 Subject: [PATCH] Load installed files before update file ownership @@ -9,10 +9,10 @@ Subject: [PATCH] Load installed files before update file ownership 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/libopkg/opkg_install.c b/libopkg/opkg_install.c -index 585e7d8..23a5a50 100644 +index f05d778..4eb2658 100644 --- a/libopkg/opkg_install.c +++ b/libopkg/opkg_install.c -@@ -921,10 +921,19 @@ int opkg_install_pkg(pkg_t * pkg) +@@ -947,10 +947,19 @@ int opkg_install_pkg(pkg_t * pkg, pkg_t * old_pkg) } } @@ -33,10 +33,10 @@ index 585e7d8..23a5a50 100644 * between opkg database and filesystem */ diff --git a/libopkg/pkg_hash.c b/libopkg/pkg_hash.c -index 83155c3..afb8552 100644 +index 6c6c269..61628f6 100644 --- a/libopkg/pkg_hash.c +++ b/libopkg/pkg_hash.c -@@ -900,11 +900,12 @@ pkg_t *file_hash_get_file_owner(const char *file_name) +@@ -906,11 +906,12 @@ pkg_t *file_hash_get_file_owner(const char *file_name) void file_hash_set_file_owner(const char *file_name, pkg_t * owning_pkg) { pkg_t *old_owning_pkg; diff --git a/meta-webos/recipes-devtools/opkg/opkg/0002-Sort-opkg-list-file-content-to-speed-package-removal.patch b/meta-webos/recipes-devtools/opkg/opkg/0002-Sort-opkg-list-file-content-to-speed-package-removal.patch index b80c7f6ab..01867dccf 100644 --- a/meta-webos/recipes-devtools/opkg/opkg/0002-Sort-opkg-list-file-content-to-speed-package-removal.patch +++ b/meta-webos/recipes-devtools/opkg/opkg/0002-Sort-opkg-list-file-content-to-speed-package-removal.patch @@ -1,4 +1,4 @@ -From 90f34e2e1eefadf0f8c34b4a8dfee9682920f62a Mon Sep 17 00:00:00 2001 +From cb4fedc12a3077e7dc24a7678b7a5094ed89874d Mon Sep 17 00:00:00 2001 From: Rohit Anand Date: Mon, 30 May 2016 16:43:49 +0530 Subject: [PATCH] Sort opkg list file content to speed package removal @@ -8,10 +8,10 @@ Subject: [PATCH] Sort opkg list file content to speed package removal 1 file changed, 12 insertions(+) diff --git a/libopkg/pkg.c b/libopkg/pkg.c -index ca5ff08..81732f1 100644 +index 31abdd1..fdaad1f 100644 --- a/libopkg/pkg.c +++ b/libopkg/pkg.c -@@ -1468,6 +1468,18 @@ int pkg_write_filelist(pkg_t * pkg) +@@ -1486,6 +1486,18 @@ int pkg_write_filelist(pkg_t * pkg) hash_table_foreach(&opkg_config->file_hash, pkg_write_filelist_helper, &data); fclose(data.stream); diff --git a/meta-webos/recipes-devtools/opkg/opkg/0005-Add-symlink-path-validity.patch b/meta-webos/recipes-devtools/opkg/opkg/0003-Add-symlink-path-validity.patch similarity index 85% rename from meta-webos/recipes-devtools/opkg/opkg/0005-Add-symlink-path-validity.patch rename to meta-webos/recipes-devtools/opkg/opkg/0003-Add-symlink-path-validity.patch index 5a760ff47..010195899 100644 --- a/meta-webos/recipes-devtools/opkg/opkg/0005-Add-symlink-path-validity.patch +++ b/meta-webos/recipes-devtools/opkg/opkg/0003-Add-symlink-path-validity.patch @@ -1,4 +1,4 @@ -From 699f146acaf40e83450a295b8c866e8426b2113d Mon Sep 17 00:00:00 2001 +From b8fbeb83238303d7472d9d6e9201cd89de1bbefa Mon Sep 17 00:00:00 2001 From: Soonwon Hong Date: Fri, 19 May 2017 09:47:01 +0900 Subject: [PATCH] Add symlink path validity @@ -11,10 +11,10 @@ Subject: [PATCH] Add symlink path validity 4 files changed, 10 insertions(+) diff --git a/libopkg/opkg_archive.c b/libopkg/opkg_archive.c -index e2a63a6..26f256c 100644 +index f19cece..c149f5c 100644 --- a/libopkg/opkg_archive.c +++ b/libopkg/opkg_archive.c -@@ -906,6 +906,9 @@ struct opkg_ar *ar_open_pkg_data_archive(const char *filename) +@@ -883,6 +883,9 @@ struct opkg_ar *ar_open_pkg_data_archive(const char *filename) ar->extract_flags = ARCHIVE_EXTRACT_OWNER | ARCHIVE_EXTRACT_PERM | ARCHIVE_EXTRACT_TIME | ARCHIVE_EXTRACT_UNLINK | ARCHIVE_EXTRACT_NO_OVERWRITE; @@ -25,7 +25,7 @@ index e2a63a6..26f256c 100644 ar->extract_flags &= ~ARCHIVE_EXTRACT_OWNER; diff --git a/libopkg/opkg_conf.c b/libopkg/opkg_conf.c -index 06880a1..2511f71 100644 +index b49f5fb..5dcdc3d 100644 --- a/libopkg/opkg_conf.c +++ b/libopkg/opkg_conf.c @@ -75,6 +75,7 @@ static opkg_option_t options[] = { @@ -37,10 +37,10 @@ index 06880a1..2511f71 100644 {"offline_root", OPKG_OPT_TYPE_STRING, &_conf.offline_root}, {"overlay_root", OPKG_OPT_TYPE_STRING, &_conf.overlay_root}, diff --git a/libopkg/opkg_conf.h b/libopkg/opkg_conf.h -index 31a8cb9..56fbef7 100644 +index 28e0624..4936cc4 100644 --- a/libopkg/opkg_conf.h +++ b/libopkg/opkg_conf.h -@@ -105,6 +105,7 @@ typedef struct opkg_conf { +@@ -107,6 +107,7 @@ typedef struct opkg_conf { char *gpg_trust_level; char *signature_type; int nodeps; /* do not follow dependencies */ @@ -49,10 +49,10 @@ index 31a8cb9..56fbef7 100644 char *offline_root; char *overlay_root; diff --git a/src/opkg.c b/src/opkg.c -index 267b2f5..f018f3d 100644 +index 7510fe8..80a52f1 100644 --- a/src/opkg.c +++ b/src/opkg.c -@@ -57,6 +57,7 @@ enum { +@@ -60,6 +60,7 @@ enum { ARGS_OPT_AUTOREMOVE, ARGS_OPT_VOLATILE_CACHE, ARGS_OPT_COMBINE, @@ -60,15 +60,15 @@ index 267b2f5..f018f3d 100644 ARGS_OPT_NO_INSTALL_RECOMMENDS, ARGS_OPT_CACHE_DIR, ARGS_OPT_HOST_CACHE_DIR, -@@ -105,6 +106,7 @@ static struct option long_options[] = { +@@ -107,6 +108,7 @@ static struct option long_options[] = { {"noaction", 0, 0, ARGS_OPT_NOACTION}, {"download-only", 0, 0, ARGS_OPT_DOWNLOAD_ONLY}, {"nodeps", 0, 0, ARGS_OPT_NODEPS}, + {"no-install-insecure-symlink", 0, 0, ARGS_OPT_NO_INSTALL_INSECURE_SYMLINK}, {"no-install-recommends", 0, 0, ARGS_OPT_NO_INSTALL_RECOMMENDS}, - {"offline", 1, 0, 'o'}, {"offline-root", 1, 0, 'o'}, -@@ -253,6 +255,9 @@ static int args_parse(int argc, char *argv[]) + {"add-arch", 1, 0, ARGS_OPT_ADD_ARCH}, +@@ -256,6 +258,9 @@ static int args_parse(int argc, char *argv[]) case ARGS_OPT_VOLATILE_CACHE: opkg_config->volatile_cache = 1; break; diff --git a/meta-webos/recipes-devtools/opkg/opkg/0004-Mask-S_ISUID-and-S_ISGID-permission-bits.patch b/meta-webos/recipes-devtools/opkg/opkg/0004-Mask-S_ISUID-and-S_ISGID-permission-bits.patch index ae325b5ff..e1fdccf47 100644 --- a/meta-webos/recipes-devtools/opkg/opkg/0004-Mask-S_ISUID-and-S_ISGID-permission-bits.patch +++ b/meta-webos/recipes-devtools/opkg/opkg/0004-Mask-S_ISUID-and-S_ISGID-permission-bits.patch @@ -1,4 +1,4 @@ -From 8f86794097052cfb17ab256825b8d21a7070df23 Mon Sep 17 00:00:00 2001 +From 4e4458d33ffb3c052791bfbf421bb0162d5fdff9 Mon Sep 17 00:00:00 2001 From: Rohit Anand Date: Mon, 30 May 2016 17:23:37 +0530 Subject: [PATCH] Mask S_ISUID and S_ISGID permission bits @@ -10,10 +10,10 @@ Subject: [PATCH] Mask S_ISUID and S_ISGID permission bits 3 files changed, 11 insertions(+) diff --git a/libopkg/opkg_archive.c b/libopkg/opkg_archive.c -index 9921f80..e2a63a6 100644 +index c149f5c..4d41260 100644 --- a/libopkg/opkg_archive.c +++ b/libopkg/opkg_archive.c -@@ -25,6 +25,7 @@ +@@ -27,6 +27,7 @@ #include "opkg_conf.h" #include "opkg_message.h" #include "opkg_archive.h" @@ -21,7 +21,7 @@ index 9921f80..e2a63a6 100644 #include "file_util.h" #include "sprintf_alloc.h" #include "xfuncs.h" -@@ -668,6 +669,14 @@ static int find_inner(struct archive *outer, const char *arname) +@@ -654,6 +655,14 @@ static int find_inner(struct archive *outer, const char *arname) if (!entry) return -1; @@ -37,10 +37,10 @@ index 9921f80..e2a63a6 100644 * other prefixes. * diff --git a/libopkg/opkg_conf.h b/libopkg/opkg_conf.h -index 0734067..31a8cb9 100644 +index 4936cc4..f04518f 100644 --- a/libopkg/opkg_conf.h +++ b/libopkg/opkg_conf.h -@@ -122,6 +122,7 @@ typedef struct opkg_conf { +@@ -125,6 +125,7 @@ typedef struct opkg_conf { int verbose_status_file; int compress_list_files; int short_description; @@ -49,10 +49,10 @@ index 0734067..31a8cb9 100644 /* ssl options: used only when opkg is configured with '--enable-curl', * otherwise always NULL or 0. diff --git a/src/opkg.c b/src/opkg.c -index 650e278..267b2f5 100644 +index 80a52f1..3839932 100644 --- a/src/opkg.c +++ b/src/opkg.c -@@ -153,6 +153,7 @@ static int args_parse(int argc, char *argv[]) +@@ -156,6 +156,7 @@ static int args_parse(int argc, char *argv[]) break; case 'o': opkg_config->offline_root = xstrdup(optarg); diff --git a/meta-webos/recipes-devtools/opkg/opkg_%.bbappend b/meta-webos/recipes-devtools/opkg/opkg_%.bbappend index d227fe400..d547e0de6 100644 --- a/meta-webos/recipes-devtools/opkg/opkg_%.bbappend +++ b/meta-webos/recipes-devtools/opkg/opkg_%.bbappend @@ -7,7 +7,7 @@ FILESEXTRAPATHS:prepend := "${THISDIR}/${PN}:" SRC_URI:append = " \ file://0001-Load-installed-files-before-update-file-ownership.patch \ file://0002-Sort-opkg-list-file-content-to-speed-package-removal.patch \ - file://0005-Add-symlink-path-validity.patch \ + file://0003-Add-symlink-path-validity.patch \ " SRC_URI:append:class-target = " \ file://0004-Mask-S_ISUID-and-S_ISGID-permission-bits.patch \ From 83ba74295e9788bd5a62d9e52d26ee45e49eb83d Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 2 Feb 2021 13:58:26 -0800 Subject: [PATCH 0579/2022] webos.inc: webkitgtk, mpich: don't use -Werror=return-type :Release Notes: :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: Iccf4ddcc61f191b19b710a985e31f1bed7c06c6d --- meta-webos/conf/distro/include/webos.inc | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/meta-webos/conf/distro/include/webos.inc b/meta-webos/conf/distro/include/webos.inc index 1b793b58f..490a63308 100644 --- a/meta-webos/conf/distro/include/webos.inc +++ b/meta-webos/conf/distro/include/webos.inc @@ -78,6 +78,12 @@ EXTRA_WEBOS_WERROR:pn-libev = "" EXTRA_WEBOS_WERROR:pn-zchunk = "" # ERROR: python3-yarl-1.6.2-r0 do_compile: 'python3 setup.py build ' execution failed.; yarl/_quoting_c.c:10703:1: error: control reaches end of non-void function [-Werror=return-type] EXTRA_WEBOS_WERROR:pn-python3-yarl = "" +# webkitgtk/2.30.4-r0/webkitgtk-2.30.4/Source/JavaScriptCore/assembler/AbstractMacroAssembler.h:930:5: error: control reaches end of non-void function [-Werror=return-type] +# http://gecko.lge.com/Errors/Details/112515 +EXTRA_WEBOS_WERROR:pn-webkitgtk = "" +# mpich-3.4.1/src/mpl/src/sock/mpl_sockaddr.c:144:1: error: control reaches end of non-void function [-Werror=return-type] +# http://gecko.lge.com/Errors/Details/126261 +EXTRA_WEBOS_WERROR:pn-mpich = "" TARGET_CC_ARCH:append = " ${EXTRA_WEBOS_WERROR}" From 514ca9552a579f6bd8e34d5da4721b08f1f3487b Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 5 Feb 2021 04:21:12 -0800 Subject: [PATCH 0580/2022] rpi: u-boot: drop bbappend :Release Notes: :Detailed Notes: Otherwise it fails to boot with: U-Boot 2020.10 (Jan 01 1970 - 00:00:00 +0000) DRAM: 3.6 GiB RPI 4 Model B (0xc03111) MMC: mmcnr@7e300000: 1, emmc2@7e340000: 0 Loading Environment from FAT... *** Warning - bad CRC, using default environment In: serial Out: serial Err: serial Net: eth0: ethernet@7d580000 PCIe BRCM: link up, 5.0 Gbps x1 (SSC) starting USB... Bus xhci_pci: Host not halted after 16000 microseconds. probe failed, error -16 No working controllers found Hit any key to stop autoboot: 0 syntax error :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I02d5dc860c99445f8d777a1548fb323d43d53933 --- ...-by-disable-usb-and-enable-bootcount.patch | 68 ------------------- .../recipes-bsp/u-boot/u-boot_%.bbappend | 9 --- 2 files changed, 77 deletions(-) delete mode 100644 meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot/0001-Speed-up-boot-by-disable-usb-and-enable-bootcount.patch delete mode 100644 meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot_%.bbappend diff --git a/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot/0001-Speed-up-boot-by-disable-usb-and-enable-bootcount.patch b/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot/0001-Speed-up-boot-by-disable-usb-and-enable-bootcount.patch deleted file mode 100644 index af459733e..000000000 --- a/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot/0001-Speed-up-boot-by-disable-usb-and-enable-bootcount.patch +++ /dev/null @@ -1,68 +0,0 @@ -From 25db8f8eef31c970cf45c490790179581f43ebdf Mon Sep 17 00:00:00 2001 -From: JeongBong Seo -Date: Wed, 9 Feb 2022 12:00:57 +0900 -Subject: [PATCH 1/2] Speed up boot by disable usb and enable bootcount - -PREBOOT was moved from rpi.h to Kconfig in v2019.10-rc2: -commit 37304aaf60bf92a5dc3ef222ba520698bd862a44 -Author: Simon Glass -Date: Sat Jul 20 20:51:14 2019 -0600 - - Convert CONFIG_USE_PREBOOT and CONFIG_PREBOOT to Kconfig ---- - configs/rpi_3_32b_defconfig | 6 +++++- - configs/rpi_4_32b_defconfig | 5 +++++ - include/configs/rpi.h | 6 +++--- - 3 files changed, 13 insertions(+), 4 deletions(-) - -diff --git a/configs/rpi_3_32b_defconfig b/configs/rpi_3_32b_defconfig -index b8a3d17f43..d4f832ff8e 100644 ---- a/configs/rpi_3_32b_defconfig -+++ b/configs/rpi_3_32b_defconfig -@@ -9,7 +9,6 @@ CONFIG_ENV_SIZE=0x4000 - CONFIG_DEFAULT_DEVICE_TREE="bcm2837-rpi-3-b" - CONFIG_DISTRO_DEFAULTS=y - CONFIG_OF_BOARD_SETUP=y --CONFIG_USE_PREBOOT=y - CONFIG_MISC_INIT_R=y - # CONFIG_DISPLAY_CPUINFO is not set - # CONFIG_DISPLAY_BOARDINFO is not set -@@ -45,3 +44,8 @@ CONFIG_SYS_WHITE_ON_BLACK=y - CONFIG_CONSOLE_SCROLL_LINES=10 - CONFIG_PHYS_TO_BUS=y - CONFIG_OF_LIBFDT_OVERLAY=y -+ -+CONFIG_BOOTCOUNT_LIMIT=y -+CONFIG_BOOTCOUNT_ENV=y -+ -+CONFIG_BOOTDELAY=0 -diff --git a/configs/rpi_4_32b_defconfig b/configs/rpi_4_32b_defconfig -index 4a88448e9d..ec6a6454bd 100644 ---- a/configs/rpi_4_32b_defconfig -+++ b/configs/rpi_4_32b_defconfig -@@ -58,3 +58,8 @@ CONFIG_PHYS_TO_BUS=y - CONFIG_ADDR_MAP=y - CONFIG_SYS_NUM_ADDR_MAP=2 - CONFIG_OF_LIBFDT_OVERLAY=y -+ -+CONFIG_BOOTCOUNT_LIMIT=y -+CONFIG_BOOTCOUNT_ENV=y -+ -+CONFIG_BOOTDELAY=0 -diff --git a/include/configs/rpi.h b/include/configs/rpi.h -index 834f1cd236..19498e879f 100644 ---- a/include/configs/rpi.h -+++ b/include/configs/rpi.h -@@ -106,9 +106,9 @@ - - /* Environment */ - #define ENV_DEVICE_SETTINGS \ -- "stdin=serial,usbkbd\0" \ -- "stdout=serial,vidconsole\0" \ -- "stderr=serial,vidconsole\0" -+ "stdin=serial\0" \ -+ "stdout=serial\0" \ -+ "stderr=serial\0" - - #ifdef CONFIG_ARM64 - #define FDT_HIGH "ffffffffffffffff" diff --git a/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot_%.bbappend b/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot_%.bbappend deleted file mode 100644 index f189daa39..000000000 --- a/meta-webos-raspberrypi/recipes-bsp/u-boot/u-boot_%.bbappend +++ /dev/null @@ -1,9 +0,0 @@ -# Copyright (c) 2017-2022 LG Electronics, Inc. - -EXTENDPRAUTO:append = "webosrpi3" - -FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" - -SRC_URI:append:sota = " \ - file://0001-Speed-up-boot-by-disable-usb-and-enable-bootcount.patch \ -" From 7522fdc910b72fda774fa8898c607c03c7c93f60 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sat, 6 Feb 2021 07:34:31 -0800 Subject: [PATCH 0581/2022] containerd-docker: remove bbappend :Release Notes: Recipe was removed from meta-virtualization in: https://git.yoctoproject.org/cgit/cgit.cgi/meta-virtualization/commit/?id=e0cd8599f17280321d9aaf346fca0717bdde6ce6 :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I363247ce7713771c353fe74242b469f42d1973af --- .../containerd/containerd-docker_git.bbappend | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 meta-webos-virtualization/recipes-containers/containerd/containerd-docker_git.bbappend diff --git a/meta-webos-virtualization/recipes-containers/containerd/containerd-docker_git.bbappend b/meta-webos-virtualization/recipes-containers/containerd/containerd-docker_git.bbappend deleted file mode 100644 index ade5f2b21..000000000 --- a/meta-webos-virtualization/recipes-containers/containerd/containerd-docker_git.bbappend +++ /dev/null @@ -1,5 +0,0 @@ -# Copyright (c) 2019-2022 LG Electronics, Inc. - -EXTENDPRAUTO:append = "webosvirt1" - -RRECOMMENDS:${PN}:remove = "lxc" From ce5e7d591b49237a871c32e01dd4624b1407aacf Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sat, 27 Feb 2021 01:00:43 -0800 Subject: [PATCH 0582/2022] bluez5: update the patches to apply on 5.56 version from oe-core :Release Notes: Resolve conflicts mostly from these 2 upstream changes: commit c4ef8f8d048a30304ba4cb1b83bfe39b55c13ba7 Author: Luiz Augusto von Dentz Date: Wed Oct 28 14:53:36 2020 -0700 core: Rename hcid.h to btd.h Since we use btd term for daemon APIs it makes sense to use it also for the header name instead of hcid. commit 01d035d33886b13cd6dc361f994ce22ad47daf61 Author: Luiz Augusto von Dentz Date: Wed Oct 28 14:50:00 2020 -0700 core: Rename main_opts to btd_opts Use btd_ prefix since this is a daemon API. :Detailed Notes: Fixes: NOTE: --- Patch fuzz start --- Applying patch 0011-Fix-volume-level-notification-not-appearing-after-12.patch patching file profiles/audio/media.c Hunk #1 succeeded at 1235 (offset 1 line). patching file profiles/audio/transport.c Hunk #1 succeeded at 656 (offset -13 lines). Hunk #2 succeeded at 932 with fuzz 1 (offset -10 lines). Now at patch 0011-Fix-volume-level-notification-not-appearing-after-12.patch NOTE: Applying patch '0012-Support-enabling-avdtp-delayReport.patch' (meta-webosose/meta-webos/recipes-connectivity/bluez5/bluez5/0012-Support-enabling-avdtp-delayReport.patch) ERROR: Command Error: 'quilt --quiltrc TOPDIR/BUILD/work/raspberrypi3-webos-linux-gnueabi/bluez5/5.56-r0/recipe-sysroot-native/etc/quiltrc push' exited with 0 Output: stdout: Applying patch 0012-Support-enabling-avdtp-delayReport.patch patching file profiles/audio/a2dp.c Hunk #1 succeeded at 2194 (offset 34 lines). patching file profiles/audio/a2dp.h Hunk #1 succeeded at 77 (offset -13 lines). patching file profiles/audio/avdtp.c Hunk #1 succeeded at 469 (offset -9 lines). patching file profiles/audio/avdtp.h Hunk #1 succeeded at 306 (offset -8 lines). patching file profiles/audio/media.c Hunk #1 succeeded at 120 (offset -12 lines). Hunk #2 succeeded at 813 (offset 1 line). Hunk #3 succeeded at 2430 (offset 1 line). patching file profiles/audio/media.h Hunk #1 succeeded at 10 (offset -13 lines). Hunk #2 succeeded at 23 (offset -13 lines). patching file src/adapter.c Hunk #1 FAILED at 78. Hunk #2 succeeded at 224 (offset -19 lines). Hunk #3 succeeded at 291 (offset -15 lines). Hunk #4 succeeded at 497 with fuzz 2 (offset -15 lines). Hunk #5 succeeded at 3194 with fuzz 2 (offset -17 lines). Hunk #6 succeeded at 3539 (offset 22 lines). Hunk #7 succeeded at 4867 (offset -6 lines). Hunk #8 succeeded at 6319 (offset -6 lines). Hunk #9 FAILED at 6366. Hunk #10 succeeded at 6367 (offset -6 lines). 2 out of 10 hunks FAILED -- rejects in file src/adapter.c patching file src/adapter.h Hunk #1 succeeded at 25 (offset -8 lines). Hunk #2 succeeded at 69 (offset -8 lines). can't find file to patch at input line 302 Perhaps you used the wrong -p or --strip option? The text leading up to this was: -------------------------- |diff --git a/src/hcid.h b/src/hcid.h |index 3624ba6ea..8f77184ed 100644 |--- a/src/hcid.h |+++ b/src/hcid.h -------------------------- No file to patch. Skipping patch. 1 out of 1 hunk ignored patching file src/main.c Hunk #1 succeeded at 76 (offset -12 lines). Hunk #2 succeeded at 709 with fuzz 2 (offset 74 lines). patching file src/main.conf Patch 0012-Support-enabling-avdtp-delayReport.patch does not apply (enforce with -f) meta-webos/recipes-connectivity/bluez5/bluez5/0029-Fix-provision-failed-issue.patch this patch isn't webos specific, it's backport of 2 commits from upstream: https://github.com/bluez/bluez/commit/faa1f74a91e95d04b66a9350a3daf9b35ec63070 https://github.com/bluez/bluez/commit/1f4ec8fb9d36fb7678385fd631459d80b57fc662 :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I7c7d06574aac0c4595a76dc4d81d2c8e4d6df18d --- ...time-out-when-default-is-set-to-zero.patch | 6 +- ...t-signal-on-remote-device-disconnect.patch | 8 +- ...evice-type-like-BLE-BREDR-from-bluez.patch | 10 +- ...-when-device-address-type-is-BDADDR_.patch | 8 +- ...tem-bus-instead-of-session-for-obexd.patch | 42 +++---- ...tion-to-get-connected-profiles-uuids.patch | 16 +-- ...gh-commad-support-required-for-webos.patch | 30 ++--- ...ded-dbus-signal-for-MediaPlayRequest.patch | 24 ++-- ...-getting-remote-device-features-list.patch | 28 ++--- ...-Fix-volume-property-not-able-to-set.patch | 6 +- ...-notification-not-appearing-after-12.patch | 14 +-- ...2-Support-enabling-avdtp-delayReport.patch | 110 +++++++++--------- ...o-get-connectedUuid-s-in-case-of-inc.patch | 6 +- ...-connected-uuids-when-profile-is-dis.patch | 6 +- ...-getStatus-not-updated-when-unpaired.patch | 6 +- ...airing-capability-as-NoInputNoOutput.patch | 6 +- ...etting-supported-notification-events.patch | 16 +-- ...anceName-MapInstanceProperties-parsi.patch | 30 ++--- ...pport-based-on-MAPInstance-Name-Modi.patch | 68 +++++------ .../0020-Disabling-DB-Hash-for-Gatt.patch | 13 ++- ...on-property-in-org.bluez.obex.Messag.patch | 22 ++-- ...dle-property-in-org.bluez.obex.Trans.patch | 34 +++--- ...nterface-for-sent-message-related-no.patch | 10 +- ...aying-return-error-when-player-not-s.patch | 18 +-- ...0025-AVRCP-MediaItem-object-path-fix.patch | 12 +- ...26-Revert-a2dp-Add-reverse-discovery.patch | 8 +- .../0029-Fix-provision-failed-issue.patch | 54 --------- .../bluez5/bluez5_%.bbappend | 1 - 28 files changed, 279 insertions(+), 333 deletions(-) delete mode 100644 meta-webos/recipes-connectivity/bluez5/bluez5/0029-Fix-provision-failed-issue.patch diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0001-Fix-advertise-time-out-when-default-is-set-to-zero.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0001-Fix-advertise-time-out-when-default-is-set-to-zero.patch index 68b8116c6..9fba1e990 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0001-Fix-advertise-time-out-when-default-is-set-to-zero.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0001-Fix-advertise-time-out-when-default-is-set-to-zero.patch @@ -1,4 +1,4 @@ -From dc7618c9f5753c17d3e299e1298665e02ade8c8c Mon Sep 17 00:00:00 2001 +From 85c5b7e82355f00499447d9ed5fa71ae1b1e0e6b Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Wed, 11 Apr 2018 11:03:20 +0530 Subject: [PATCH] Fix advertise time out when default is set to zero @@ -25,10 +25,10 @@ Change-Id: I60cb0c22991efa61a800b1483e232e42beff2da2 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/advertising.c b/src/advertising.c -index e5f25948d..992bb7533 100644 +index 15a343e52..92ab25ed2 100644 --- a/src/advertising.c +++ b/src/advertising.c -@@ -521,13 +521,18 @@ static bool parse_local_name(DBusMessageIter *iter, +@@ -524,13 +524,18 @@ static bool parse_local_name(DBusMessageIter *iter, if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_STRING) return false; diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0002-Send-disconnect-signal-on-remote-device-disconnect.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0002-Send-disconnect-signal-on-remote-device-disconnect.patch index ef3f859ff..310644933 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0002-Send-disconnect-signal-on-remote-device-disconnect.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0002-Send-disconnect-signal-on-remote-device-disconnect.patch @@ -1,4 +1,4 @@ -From 0156a926e31ed22dfcca6482bcde0be2d93a2627 Mon Sep 17 00:00:00 2001 +From 13029ffccb33fc57ce7777f1d6223ed26fe70f40 Mon Sep 17 00:00:00 2001 From: Vibhanshu Dhote Date: Thu, 17 May 2018 18:15:48 +0530 Subject: [PATCH] Send disconnect signal on remote device disconnect @@ -26,10 +26,10 @@ Upstream-Status : Pending 1 file changed, 4 insertions(+) diff --git a/src/profile.c b/src/profile.c -index 6961a107b..0a6ee1beb 100644 +index 5e460b639..a287eee66 100644 --- a/src/profile.c +++ b/src/profile.c -@@ -740,6 +740,8 @@ static GSList *custom_props = NULL; +@@ -727,6 +727,8 @@ static GSList *custom_props = NULL; static GSList *profiles = NULL; static GSList *ext_profiles = NULL; @@ -38,7 +38,7 @@ index 6961a107b..0a6ee1beb 100644 void btd_profile_foreach(void (*func)(struct btd_profile *p, void *data), void *data) { -@@ -856,6 +858,8 @@ drop: +@@ -843,6 +845,8 @@ drop: btd_service_disconnecting_complete(conn->service, 0); } diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0003-Fetching-device-type-like-BLE-BREDR-from-bluez.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0003-Fetching-device-type-like-BLE-BREDR-from-bluez.patch index d1986b808..baa912492 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0003-Fetching-device-type-like-BLE-BREDR-from-bluez.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0003-Fetching-device-type-like-BLE-BREDR-from-bluez.patch @@ -1,4 +1,4 @@ -From e7d89cb337d04b4fdabe781772d67d6226d0f158 Mon Sep 17 00:00:00 2001 +From 01a35d286d28e50e2c456dbbe9ce1f8cb9dc5000 Mon Sep 17 00:00:00 2001 From: "vijaya.sundaram" Date: Fri, 1 Jun 2018 11:43:15 +0530 Subject: [PATCH] Fetching device type like BLE, BREDR from bluez @@ -24,10 +24,10 @@ Upstream-Status : Pending 1 file changed, 17 insertions(+) diff --git a/src/device.c b/src/device.c -index df440ce09..b3b88daef 100644 +index af13badfc..b20906f3c 100644 --- a/src/device.c +++ b/src/device.c -@@ -218,6 +218,7 @@ struct btd_device { +@@ -205,6 +205,7 @@ struct btd_device { char name[MAX_NAME_LENGTH + 1]; char *alias; uint32_t class; @@ -35,7 +35,7 @@ index df440ce09..b3b88daef 100644 uint16_t vendor_src; uint16_t vendor; uint16_t product; -@@ -881,6 +882,21 @@ static gboolean dev_property_get_class(const GDBusPropertyTable *property, +@@ -877,6 +878,21 @@ static gboolean dev_property_get_class(const GDBusPropertyTable *property, return TRUE; } @@ -57,7 +57,7 @@ index df440ce09..b3b88daef 100644 static gboolean get_appearance(const GDBusPropertyTable *property, void *data, uint16_t *appearance) { -@@ -2919,6 +2935,7 @@ static const GDBusMethodTable device_methods[] = { +@@ -2915,6 +2931,7 @@ static const GDBusMethodTable device_methods[] = { static const GDBusPropertyTable device_properties[] = { { "Address", "s", dev_property_get_address }, { "AddressType", "s", property_get_address_type }, diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0004-Fix-Gatt-connect-when-device-address-type-is-BDADDR_.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0004-Fix-Gatt-connect-when-device-address-type-is-BDADDR_.patch index 911d04659..263ada41b 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0004-Fix-Gatt-connect-when-device-address-type-is-BDADDR_.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0004-Fix-Gatt-connect-when-device-address-type-is-BDADDR_.patch @@ -1,4 +1,4 @@ -From 672a9acc1de2a04fa51bd8c0fb2eedc7f44108a7 Mon Sep 17 00:00:00 2001 +From 1d59242d83ee719042e5fb29db074c3320f7c379 Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Sun, 22 Jul 2018 18:59:45 +0530 Subject: [PATCH] Fix Gatt connect when device address type is BDADDR_LE_PUBLIC @@ -29,10 +29,10 @@ Upstream-Status: Pending 1 file changed, 28 insertions(+) diff --git a/src/device.c b/src/device.c -index b3b88daef..d320d16b0 100644 +index b20906f3c..91dc363e2 100644 --- a/src/device.c +++ b/src/device.c -@@ -2164,6 +2164,33 @@ static DBusMessage *dev_connect(DBusConnection *conn, DBusMessage *msg, +@@ -2160,6 +2160,33 @@ static DBusMessage *dev_connect(DBusConnection *conn, DBusMessage *msg, return connect_profiles(dev, bdaddr_type, msg, NULL); } @@ -66,7 +66,7 @@ index b3b88daef..d320d16b0 100644 static DBusMessage *connect_profile(DBusConnection *conn, DBusMessage *msg, void *user_data) { -@@ -2923,6 +2950,7 @@ static DBusMessage *cancel_pairing(DBusConnection *conn, DBusMessage *msg, +@@ -2919,6 +2946,7 @@ static DBusMessage *cancel_pairing(DBusConnection *conn, DBusMessage *msg, static const GDBusMethodTable device_methods[] = { { GDBUS_ASYNC_METHOD("Disconnect", NULL, NULL, dev_disconnect) }, { GDBUS_ASYNC_METHOD("Connect", NULL, NULL, dev_connect) }, diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0005-Use-system-bus-instead-of-session-for-obexd.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0005-Use-system-bus-instead-of-session-for-obexd.patch index b8e6a654a..02f9addfd 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0005-Use-system-bus-instead-of-session-for-obexd.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0005-Use-system-bus-instead-of-session-for-obexd.patch @@ -1,4 +1,4 @@ -From 9aea505c51974098acd70f011c6088c45b7a6d5f Mon Sep 17 00:00:00 2001 +From 7a4e82c413acf7e510c20e665a92faceb7421c2f Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Thu, 15 Nov 2018 11:08:44 +0530 Subject: [PATCH] Use system bus instead of session for obexd @@ -34,10 +34,10 @@ Upstream-Status: Inappropriate[webos specific] 10 files changed, 22 insertions(+), 9 deletions(-) diff --git a/obexd/client/ftp.c b/obexd/client/ftp.c -index 5e30654af..eb7213760 100644 +index 160e0636a..f492965b2 100644 --- a/obexd/client/ftp.c +++ b/obexd/client/ftp.c -@@ -476,7 +476,8 @@ int ftp_init(void) +@@ -463,7 +463,8 @@ int ftp_init(void) DBG(""); @@ -48,10 +48,10 @@ index 5e30654af..eb7213760 100644 return -EIO; diff --git a/obexd/client/map.c b/obexd/client/map.c -index 23be2d6b2..28e60fe4c 100644 +index 74828cddb..ea3d25629 100644 --- a/obexd/client/map.c +++ b/obexd/client/map.c -@@ -2076,7 +2076,7 @@ int map_init(void) +@@ -2063,7 +2063,7 @@ int map_init(void) DBG(""); @@ -61,10 +61,10 @@ index 23be2d6b2..28e60fe4c 100644 return -EIO; diff --git a/obexd/client/opp.c b/obexd/client/opp.c -index 92785f66e..36fd4db16 100644 +index 90d0c0c8e..369e9e91c 100644 --- a/obexd/client/opp.c +++ b/obexd/client/opp.c -@@ -191,7 +191,7 @@ int opp_init(void) +@@ -178,7 +178,7 @@ int opp_init(void) DBG(""); @@ -74,10 +74,10 @@ index 92785f66e..36fd4db16 100644 return -EIO; diff --git a/obexd/client/pbap.c b/obexd/client/pbap.c -index 3f5665fcd..e4b7d5959 100644 +index 1a2bacc9f..7e730240f 100644 --- a/obexd/client/pbap.c +++ b/obexd/client/pbap.c -@@ -1314,7 +1314,7 @@ int pbap_init(void) +@@ -1301,7 +1301,7 @@ int pbap_init(void) DBG(""); @@ -87,10 +87,10 @@ index 3f5665fcd..e4b7d5959 100644 return -EIO; diff --git a/obexd/client/session.c b/obexd/client/session.c -index 5bd2d2670..cf4cb2c5f 100644 +index 6955a8089..9b456f69c 100644 --- a/obexd/client/session.c +++ b/obexd/client/session.c -@@ -596,7 +596,7 @@ struct obc_session *obc_session_create(const char *source, +@@ -583,7 +583,7 @@ struct obc_session *obc_session_create(const char *source, if (driver == NULL) return NULL; @@ -100,10 +100,10 @@ index 5bd2d2670..cf4cb2c5f 100644 return NULL; diff --git a/obexd/client/sync.c b/obexd/client/sync.c -index 548c318c3..8c3090879 100644 +index 92faf4434..c1147897c 100644 --- a/obexd/client/sync.c +++ b/obexd/client/sync.c -@@ -237,7 +237,7 @@ int sync_init(void) +@@ -224,7 +224,7 @@ int sync_init(void) DBG(""); @@ -113,10 +113,10 @@ index 548c318c3..8c3090879 100644 return -EIO; diff --git a/obexd/plugins/pcsuite.c b/obexd/plugins/pcsuite.c -index 43ab409e9..3ea5963c3 100644 +index b2232ea09..b5a76c415 100644 --- a/obexd/plugins/pcsuite.c +++ b/obexd/plugins/pcsuite.c -@@ -333,7 +333,7 @@ static gboolean send_backup_dbus_message(const char *oper, +@@ -320,7 +320,7 @@ static gboolean send_backup_dbus_message(const char *oper, file_size = size ? *size : 0; @@ -126,10 +126,10 @@ index 43ab409e9..3ea5963c3 100644 if (conn == NULL) return FALSE; diff --git a/obexd/src/manager.c b/obexd/src/manager.c -index a4af627cb..61f341711 100644 +index 01741fe62..f1fa9fa43 100644 --- a/obexd/src/manager.c +++ b/obexd/src/manager.c -@@ -499,7 +499,7 @@ gboolean manager_init(void) +@@ -486,7 +486,7 @@ gboolean manager_init(void) dbus_error_init(&err); @@ -139,10 +139,10 @@ index a4af627cb..61f341711 100644 if (dbus_error_is_set(&err) == TRUE) { fprintf(stderr, "%s\n", err.message); diff --git a/src/bluetooth.conf b/src/bluetooth.conf -index 8a1e25801..582f492ce 100644 +index b6c614908..f8879c8bb 100644 --- a/src/bluetooth.conf +++ b/src/bluetooth.conf -@@ -20,10 +20,22 @@ +@@ -21,10 +21,22 @@ @@ -166,10 +166,10 @@ index 8a1e25801..582f492ce 100644 diff --git a/tools/obexctl.c b/tools/obexctl.c -index 0709f692c..9ed336aa5 100644 +index e671d253b..056701306 100644 --- a/tools/obexctl.c +++ b/tools/obexctl.c -@@ -2152,7 +2152,7 @@ int main(int argc, char *argv[]) +@@ -2139,7 +2139,7 @@ int main(int argc, char *argv[]) bt_shell_set_menu(&main_menu); bt_shell_set_prompt(PROMPT_OFF); diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0006-Implementation-to-get-connected-profiles-uuids.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0006-Implementation-to-get-connected-profiles-uuids.patch index e17cfb2ec..134df9a55 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0006-Implementation-to-get-connected-profiles-uuids.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0006-Implementation-to-get-connected-profiles-uuids.patch @@ -1,4 +1,4 @@ -From 2c599604ea046598159e4e9414945ac91d0ab76e Mon Sep 17 00:00:00 2001 +From 6b33f38e65c9248a5eb8fdab0ce3162b52ea7277 Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Tue, 22 Jan 2019 23:25:18 +0530 Subject: [PATCH] Implementation to get connected profiles uuids @@ -25,10 +25,10 @@ Change-Id: I72834cc9b4bdd8f086565dc9a2a41006f758ad39 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/src/device.c b/src/device.c -index d320d16b0..2dca3da12 100644 +index 91dc363e2..2e2ae32f7 100644 --- a/src/device.c +++ b/src/device.c -@@ -227,6 +227,7 @@ struct btd_device { +@@ -214,6 +214,7 @@ struct btd_device { char *modalias; struct btd_adapter *adapter; GSList *uuids; @@ -36,7 +36,7 @@ index d320d16b0..2dca3da12 100644 GSList *primaries; /* List of primary services */ GSList *services; /* List of btd_service */ GSList *pending; /* Pending services */ -@@ -913,6 +914,28 @@ static gboolean get_appearance(const GDBusPropertyTable *property, void *data, +@@ -909,6 +910,28 @@ static gboolean get_appearance(const GDBusPropertyTable *property, void *data, return FALSE; } @@ -65,7 +65,7 @@ index d320d16b0..2dca3da12 100644 static gboolean dev_property_exists_appearance( const GDBusPropertyTable *property, void *data) { -@@ -1759,8 +1782,14 @@ static void device_profile_connected(struct btd_device *dev, +@@ -1755,8 +1778,14 @@ static void device_profile_connected(struct btd_device *dev, DBG("%s %s (%d)", profile->name, strerror(-err), -err); @@ -81,7 +81,7 @@ index d320d16b0..2dca3da12 100644 if (dev->pending == NULL) goto done; -@@ -2213,6 +2242,14 @@ static DBusMessage *connect_profile(DBusConnection *conn, DBusMessage *msg, +@@ -2209,6 +2238,14 @@ static DBusMessage *connect_profile(DBusConnection *conn, DBusMessage *msg, static void device_profile_disconnected(struct btd_device *dev, struct btd_profile *profile, int err) { @@ -96,7 +96,7 @@ index d320d16b0..2dca3da12 100644 if (!dev->disconnect) return; -@@ -2979,6 +3016,7 @@ static const GDBusPropertyTable device_properties[] = { +@@ -2975,6 +3012,7 @@ static const GDBusPropertyTable device_properties[] = { { "RSSI", "n", dev_property_get_rssi, NULL, dev_property_exists_rssi }, { "Connected", "b", dev_property_get_connected }, { "UUIDs", "as", dev_property_get_uuids }, @@ -104,7 +104,7 @@ index d320d16b0..2dca3da12 100644 { "Modalias", "s", dev_property_get_modalias, NULL, dev_property_exists_modalias }, { "Adapter", "o", dev_property_get_adapter }, -@@ -3056,7 +3094,17 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type) +@@ -3053,7 +3091,17 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type) if (!state->connected) return; diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0007-recievePassThrough-commad-support-required-for-webos.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0007-recievePassThrough-commad-support-required-for-webos.patch index 1eb956ae8..e487e9eab 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0007-recievePassThrough-commad-support-required-for-webos.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0007-recievePassThrough-commad-support-required-for-webos.patch @@ -1,4 +1,4 @@ -From 19dbabe1276d9566975bacb38c4bf38220fd2f11 Mon Sep 17 00:00:00 2001 +From 13e06fa6638811a45892d4188aa6f7220ef323d9 Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Sun, 13 Jan 2019 13:35:55 +0530 Subject: [PATCH] recievePassThrough commad support required for webos @@ -30,10 +30,10 @@ Change-Id: I9c07aa27f242247b5c3df85e0b3605d2ba055cad 3 files changed, 62 insertions(+), 1 deletion(-) diff --git a/profiles/audio/avctp.c b/profiles/audio/avctp.c -index f096d22b0..b04ddb943 100644 +index c959b4f49..aae6e7d62 100644 --- a/profiles/audio/avctp.c +++ b/profiles/audio/avctp.c -@@ -416,6 +416,7 @@ static size_t handle_panel_passthrough(struct avctp *session, +@@ -403,6 +403,7 @@ static size_t handle_panel_passthrough(struct avctp *session, DBG("AV/C: %s %s", key_map[i].name, status); @@ -41,7 +41,7 @@ index f096d22b0..b04ddb943 100644 key_quirks = session->key_quirks[key_map[i].avc]; if (key_quirks & QUIRK_NO_RELEASE) { -@@ -431,9 +432,13 @@ static size_t handle_panel_passthrough(struct avctp *session, +@@ -418,9 +419,13 @@ static size_t handle_panel_passthrough(struct avctp *session, } if (pressed) @@ -56,10 +56,10 @@ index f096d22b0..b04ddb943 100644 break; } diff --git a/src/device.c b/src/device.c -index 2dca3da12..237500478 100644 +index 2e2ae32f7..5c52dd616 100644 --- a/src/device.c +++ b/src/device.c -@@ -183,6 +183,11 @@ enum { +@@ -170,6 +170,11 @@ enum { WAKE_FLAG_DISABLED, }; @@ -71,7 +71,7 @@ index 2dca3da12..237500478 100644 struct btd_device { int ref_count; -@@ -286,6 +291,7 @@ struct btd_device { +@@ -273,6 +278,7 @@ struct btd_device { GIOChannel *att_io; guint store_id; @@ -79,7 +79,7 @@ index 2dca3da12..237500478 100644 }; static const uint16_t uuid_list[] = { -@@ -1308,6 +1314,18 @@ dev_property_manufacturer_data_exist(const GDBusPropertyTable *property, +@@ -1304,6 +1310,18 @@ dev_property_manufacturer_data_exist(const GDBusPropertyTable *property, return bt_ad_has_manufacturer_data(device->ad, NULL); } @@ -98,7 +98,7 @@ index 2dca3da12..237500478 100644 static void append_service_data(void *data, void *user_data) { struct bt_ad_service_data *sd = data; -@@ -1326,13 +1344,13 @@ dev_property_get_service_data(const GDBusPropertyTable *property, +@@ -1322,13 +1340,13 @@ dev_property_get_service_data(const GDBusPropertyTable *property, struct btd_device *device = data; DBusMessageIter dict; @@ -113,7 +113,7 @@ index 2dca3da12..237500478 100644 bt_ad_foreach_service_data(device->ad, append_service_data, &dict); dbus_message_iter_close_container(iter, &dict); -@@ -1340,6 +1358,28 @@ dev_property_get_service_data(const GDBusPropertyTable *property, +@@ -1336,6 +1354,28 @@ dev_property_get_service_data(const GDBusPropertyTable *property, return TRUE; } @@ -142,7 +142,7 @@ index 2dca3da12..237500478 100644 static gboolean dev_property_service_data_exist(const GDBusPropertyTable *property, void *data) -@@ -1902,6 +1942,15 @@ void device_set_manufacturer_data(struct btd_device *dev, GSList *list, +@@ -1898,6 +1938,15 @@ void device_set_manufacturer_data(struct btd_device *dev, GSList *list, g_slist_foreach(list, add_manufacturer_data, dev); } @@ -158,7 +158,7 @@ index 2dca3da12..237500478 100644 static void add_service_data(void *data, void *user_data) { struct eir_sd *sd = data; -@@ -3022,6 +3071,8 @@ static const GDBusPropertyTable device_properties[] = { +@@ -3018,6 +3067,8 @@ static const GDBusPropertyTable device_properties[] = { { "Adapter", "o", dev_property_get_adapter }, { "ManufacturerData", "a{qv}", dev_property_get_manufacturer_data, NULL, dev_property_manufacturer_data_exist }, @@ -167,7 +167,7 @@ index 2dca3da12..237500478 100644 { "ServiceData", "a{sv}", dev_property_get_service_data, NULL, dev_property_service_data_exist }, { "TxPower", "n", dev_property_get_tx_power, NULL, -@@ -4179,6 +4230,9 @@ static struct btd_device *device_new(struct btd_adapter *adapter, +@@ -4183,6 +4234,9 @@ static struct btd_device *device_new(struct btd_adapter *adapter, device->adapter = adapter; device->temporary = true; @@ -178,10 +178,10 @@ index 2dca3da12..237500478 100644 gatt_service_removed, device, NULL); diff --git a/src/device.h b/src/device.h -index 3cd090786..7a22c34ca 100644 +index 4ae9abe0d..7cefee6db 100644 --- a/src/device.h +++ b/src/device.h -@@ -190,3 +190,5 @@ void btd_device_flags_changed(struct btd_device *dev, uint32_t supported_flags, +@@ -177,3 +177,5 @@ void btd_device_flags_changed(struct btd_device *dev, uint32_t supported_flags, void btd_device_init(void); void btd_device_cleanup(void); diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0008-Added-dbus-signal-for-MediaPlayRequest.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0008-Added-dbus-signal-for-MediaPlayRequest.patch index f23d87a0c..15c17ed75 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0008-Added-dbus-signal-for-MediaPlayRequest.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0008-Added-dbus-signal-for-MediaPlayRequest.patch @@ -1,4 +1,4 @@ -From 9bdcff0ea70fd4f8d640599fa3502d6e77fb1cd2 Mon Sep 17 00:00:00 2001 +From cf6f77f3ee075f3954dd4e986d22f65621920603 Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Wed, 30 Jan 2019 15:17:11 +0530 Subject: [PATCH] Added dbus signal for MediaPlayRequest @@ -29,10 +29,10 @@ Change-Id: Ib225395809a3b53f1c494ac4e21beabc47f7f906 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c -index d9471c083..308a27061 100644 +index c093deac8..fadce3c63 100644 --- a/profiles/audio/avrcp.c +++ b/profiles/audio/avrcp.c -@@ -1238,6 +1238,7 @@ static uint8_t avrcp_handle_get_element_attributes(struct avrcp *session, +@@ -1235,6 +1235,7 @@ static uint8_t avrcp_handle_get_element_attributes(struct avrcp *session, */ attr_ids = player_list_metadata(player); len = g_list_length(attr_ids); @@ -40,7 +40,7 @@ index d9471c083..308a27061 100644 } else { unsigned int i; for (i = 0, len = 0, attr_ids = NULL; i < nattr; i++) { -@@ -1504,6 +1505,7 @@ static uint8_t avrcp_handle_get_play_status(struct avrcp *session, +@@ -1501,6 +1502,7 @@ static uint8_t avrcp_handle_get_play_status(struct avrcp *session, pdu->params_len = htons(9); @@ -49,10 +49,10 @@ index d9471c083..308a27061 100644 } diff --git a/profiles/audio/media.c b/profiles/audio/media.c -index 02bf82a49..137bc5d2d 100644 +index c84bbe22d..f36f703be 100644 --- a/profiles/audio/media.c +++ b/profiles/audio/media.c -@@ -1220,7 +1220,7 @@ static uint32_t get_position(void *user_data) +@@ -1221,7 +1221,7 @@ static uint32_t get_position(void *user_data) sec = (uint32_t) timedelta; msec = (uint32_t) ((timedelta - sec) * 1000); @@ -62,10 +62,10 @@ index 02bf82a49..137bc5d2d 100644 static uint32_t get_duration(void *user_data) diff --git a/src/device.c b/src/device.c -index 237500478..3c619936d 100644 +index 5c52dd616..3775d5029 100644 --- a/src/device.c +++ b/src/device.c -@@ -1951,6 +1951,22 @@ void recieve_passThrough_commands(struct btd_device *dev, const char* code, cons +@@ -1947,6 +1947,22 @@ void recieve_passThrough_commands(struct btd_device *dev, const char* code, cons DEVICE_INTERFACE, "KeyCode"); } @@ -88,7 +88,7 @@ index 237500478..3c619936d 100644 static void add_service_data(void *data, void *user_data) { struct eir_sd *sd = data; -@@ -3033,6 +3049,12 @@ static DBusMessage *cancel_pairing(DBusConnection *conn, DBusMessage *msg, +@@ -3029,6 +3045,12 @@ static DBusMessage *cancel_pairing(DBusConnection *conn, DBusMessage *msg, return dbus_message_new_method_return(msg); } @@ -101,7 +101,7 @@ index 237500478..3c619936d 100644 static const GDBusMethodTable device_methods[] = { { GDBUS_ASYNC_METHOD("Disconnect", NULL, NULL, dev_disconnect) }, { GDBUS_ASYNC_METHOD("Connect", NULL, NULL, dev_connect) }, -@@ -4219,7 +4241,7 @@ static struct btd_device *device_new(struct btd_adapter *adapter, +@@ -4223,7 +4245,7 @@ static struct btd_device *device_new(struct btd_adapter *adapter, if (g_dbus_register_interface(dbus_conn, device->path, DEVICE_INTERFACE, @@ -111,10 +111,10 @@ index 237500478..3c619936d 100644 device_free) == FALSE) { error("Unable to register device interface for %s", address); diff --git a/src/device.h b/src/device.h -index 7a22c34ca..2069ba9e6 100644 +index 7cefee6db..610767b1c 100644 --- a/src/device.h +++ b/src/device.h -@@ -192,3 +192,6 @@ void btd_device_init(void); +@@ -179,3 +179,6 @@ void btd_device_init(void); void btd_device_cleanup(void); void recieve_passThrough_commands(struct btd_device *dev, const char* code, const char* state); diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0009-avrcp-getting-remote-device-features-list.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0009-avrcp-getting-remote-device-features-list.patch index a22010231..cdaba0597 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0009-avrcp-getting-remote-device-features-list.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0009-avrcp-getting-remote-device-features-list.patch @@ -1,4 +1,4 @@ -From 4ee4e86d9de4b77d3d1ae8e9ebd78157804d380a Mon Sep 17 00:00:00 2001 +From 2a6eceecf65a2d6475544303b78cb58166c9d98b Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Tue, 5 Feb 2019 18:10:55 +0530 Subject: [PATCH] avrcp getting remote device features list @@ -29,10 +29,10 @@ Change-Id: I93393e5955c745c4df3eaddf6661177410ad3a7d 3 files changed, 88 insertions(+) diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c -index 308a27061..c81a1825d 100644 +index fadce3c63..d6a7fbb54 100644 --- a/profiles/audio/avrcp.c +++ b/profiles/audio/avrcp.c -@@ -4092,9 +4092,16 @@ static void target_init(struct avrcp *session) +@@ -4137,9 +4137,16 @@ static void target_init(struct avrcp *session) (1 << AVRCP_EVENT_TRACK_REACHED_END) | (1 << AVRCP_EVENT_SETTINGS_CHANGED); @@ -49,7 +49,7 @@ index 308a27061..c81a1825d 100644 session->supported_events |= (1 << AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED) | (1 << AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED) | -@@ -4107,6 +4114,8 @@ static void target_init(struct avrcp *session) +@@ -4152,6 +4159,8 @@ static void target_init(struct avrcp *session) if (!(target->features & AVRCP_FEATURE_BROWSING)) return; @@ -58,7 +58,7 @@ index 308a27061..c81a1825d 100644 avrcp_connect_browsing(session); } -@@ -4137,14 +4146,20 @@ static void controller_init(struct avrcp *session) +@@ -4182,14 +4191,20 @@ static void controller_init(struct avrcp *session) if (controller->version < 0x0103) return; @@ -80,10 +80,10 @@ index 308a27061..c81a1825d 100644 } diff --git a/src/device.c b/src/device.c -index 3c619936d..46ae3c288 100644 +index 3775d5029..523a5ee9c 100644 --- a/src/device.c +++ b/src/device.c -@@ -292,6 +292,8 @@ struct btd_device { +@@ -279,6 +279,8 @@ struct btd_device { GIOChannel *att_io; guint store_id; struct key_code passththough_key; @@ -92,7 +92,7 @@ index 3c619936d..46ae3c288 100644 }; static const uint16_t uuid_list[] = { -@@ -1380,6 +1382,46 @@ static gboolean dev_property_get_key_code(const GDBusPropertyTable *property, +@@ -1376,6 +1378,46 @@ static gboolean dev_property_get_key_code(const GDBusPropertyTable *property, return TRUE; } @@ -139,7 +139,7 @@ index 3c619936d..46ae3c288 100644 static gboolean dev_property_service_data_exist(const GDBusPropertyTable *property, void *data) -@@ -1967,6 +2009,25 @@ void media_metadata_request(struct btd_device *dev) +@@ -1963,6 +2005,25 @@ void media_metadata_request(struct btd_device *dev) DBUS_TYPE_INVALID); } @@ -165,7 +165,7 @@ index 3c619936d..46ae3c288 100644 static void add_service_data(void *data, void *user_data) { struct eir_sd *sd = data; -@@ -3095,6 +3156,10 @@ static const GDBusPropertyTable device_properties[] = { +@@ -3091,6 +3152,10 @@ static const GDBusPropertyTable device_properties[] = { NULL, dev_property_manufacturer_data_exist }, { "KeyCode", "a{sv}", dev_property_get_key_code, NULL, dev_property_key_code_exist}, @@ -176,7 +176,7 @@ index 3c619936d..46ae3c288 100644 { "ServiceData", "a{sv}", dev_property_get_service_data, NULL, dev_property_service_data_exist }, { "TxPower", "n", dev_property_get_tx_power, NULL, -@@ -4255,6 +4320,9 @@ static struct btd_device *device_new(struct btd_adapter *adapter, +@@ -4259,6 +4324,9 @@ static struct btd_device *device_new(struct btd_adapter *adapter, device->passththough_key.state = NULL; device->passththough_key.key = NULL; @@ -187,10 +187,10 @@ index 3c619936d..46ae3c288 100644 gatt_service_removed, device, NULL); diff --git a/src/device.h b/src/device.h -index 2069ba9e6..abb5baef1 100644 +index 610767b1c..ea28e8bd4 100644 --- a/src/device.h +++ b/src/device.h -@@ -23,6 +23,10 @@ +@@ -10,6 +10,10 @@ */ #define DEVICE_INTERFACE "org.bluez.Device1" @@ -201,7 +201,7 @@ index 2069ba9e6..abb5baef1 100644 struct btd_device; -@@ -195,3 +199,4 @@ void recieve_passThrough_commands(struct btd_device *dev, const char* code, cons +@@ -182,3 +186,4 @@ void recieve_passThrough_commands(struct btd_device *dev, const char* code, cons void media_play_request(struct btd_device *dev); void media_metadata_request(struct btd_device *dev); diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0010-Fix-volume-property-not-able-to-set.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0010-Fix-volume-property-not-able-to-set.patch index 215cc3e90..df416d969 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0010-Fix-volume-property-not-able-to-set.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0010-Fix-volume-property-not-able-to-set.patch @@ -1,4 +1,4 @@ -From d69a4b0bc7f7e05c69689dee29d548e742d98d0d Mon Sep 17 00:00:00 2001 +From 27ea00f69ea3ab90c8a2a90ed6c9649ec1b8558d Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Mon, 21 Jan 2019 12:44:19 +0530 Subject: [PATCH] Fix volume property not able to set @@ -26,10 +26,10 @@ Change-Id: I183357a5de4b95a6e02d39d9d51c4af715bf0a54 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c -index a2c4f7dfb..7e9f953eb 100644 +index 8248014ae..c6c17d039 100644 --- a/profiles/audio/transport.c +++ b/profiles/audio/transport.c -@@ -823,7 +823,7 @@ static int media_transport_init_source(struct media_transport *transport) +@@ -810,7 +810,7 @@ static int media_transport_init_source(struct media_transport *transport) transport->data = a2dp; transport->destroy = destroy_a2dp; diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0011-Fix-volume-level-notification-not-appearing-after-12.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0011-Fix-volume-level-notification-not-appearing-after-12.patch index d297582b7..e58757d64 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0011-Fix-volume-level-notification-not-appearing-after-12.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0011-Fix-volume-level-notification-not-appearing-after-12.patch @@ -1,4 +1,4 @@ -From 9dddfc13565c7c44eb9ede75813b4ed7dc014109 Mon Sep 17 00:00:00 2001 +From 5fb19344d378a9dc729826705ff958ed7549d9ae Mon Sep 17 00:00:00 2001 From: Sameer Mulla Date: Tue, 10 Dec 2019 16:15:43 +0530 Subject: [PATCH] Fix volume level notification not appearing after 127 @@ -28,10 +28,10 @@ Upstream-Status: Inappropriate[webos specific] 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/profiles/audio/media.c b/profiles/audio/media.c -index 137bc5d2d..ef9e40b41 100644 +index f36f703be..3727484a2 100644 --- a/profiles/audio/media.c +++ b/profiles/audio/media.c -@@ -1234,8 +1234,8 @@ static void set_volume(int8_t volume, struct btd_device *dev, void *user_data) +@@ -1235,8 +1235,8 @@ static void set_volume(int8_t volume, struct btd_device *dev, void *user_data) { struct media_player *mp = user_data; @@ -43,10 +43,10 @@ index 137bc5d2d..ef9e40b41 100644 mp->volume = volume; } diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c -index 7e9f953eb..4a763afea 100644 +index c6c17d039..f2f6301ca 100644 --- a/profiles/audio/transport.c +++ b/profiles/audio/transport.c -@@ -669,8 +669,8 @@ static void set_volume(const GDBusPropertyTable *property, +@@ -656,8 +656,8 @@ static void set_volume(const GDBusPropertyTable *property, g_dbus_pending_property_success(id); volume = (int8_t)arg; @@ -57,8 +57,8 @@ index 7e9f953eb..4a763afea 100644 a2dp->volume = volume; -@@ -942,8 +942,8 @@ void media_transport_update_volume(struct media_transport *transport, - struct a2dp_transport *a2dp = transport->data; +@@ -932,8 +932,8 @@ void media_transport_update_volume(struct media_transport *transport, + return; /* Check if volume really changed */ - if (a2dp->volume == volume) diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0012-Support-enabling-avdtp-delayReport.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0012-Support-enabling-avdtp-delayReport.patch index 4c7f77fe8..4c670f6f0 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0012-Support-enabling-avdtp-delayReport.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0012-Support-enabling-avdtp-delayReport.patch @@ -1,4 +1,4 @@ -From eb9a9bb500dba51c30037e96592f5d652209ea1f Mon Sep 17 00:00:00 2001 +From 7c3448d4ddaa37763aaac1a1eebf226fcc3dc02b Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Thu, 4 Jun 2020 04:49:48 +0000 Subject: [PATCH] Support enabling avdtp delayReport @@ -28,16 +28,16 @@ Upstream Status: Pending profiles/audio/media.h | 2 ++ src/adapter.c | 52 ++++++++++++++++++++++++++++++++++++++++++ src/adapter.h | 3 +++ - src/hcid.h | 1 + + src/btd.h | 1 + src/main.c | 11 +++++++++ src/main.conf | 3 +++ 11 files changed, 104 insertions(+) diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c -index 2feea66c0..19ea2b4f7 100644 +index 98cae97b9..7f4833171 100644 --- a/profiles/audio/a2dp.c +++ b/profiles/audio/a2dp.c -@@ -2160,6 +2160,14 @@ found: +@@ -2194,6 +2194,14 @@ found: return avdtp_ref(chan->session); } @@ -53,10 +53,10 @@ index 2feea66c0..19ea2b4f7 100644 { struct a2dp_channel *chan = user_data; diff --git a/profiles/audio/a2dp.h b/profiles/audio/a2dp.h -index 19466a428..7729884bd 100644 +index 615b641c9..af67ee6ee 100644 --- a/profiles/audio/a2dp.h +++ b/profiles/audio/a2dp.h -@@ -90,6 +90,7 @@ gboolean a2dp_cancel(unsigned int id); +@@ -77,6 +77,7 @@ gboolean a2dp_cancel(unsigned int id); gboolean a2dp_sep_lock(struct a2dp_sep *sep, struct avdtp *session); gboolean a2dp_sep_unlock(struct a2dp_sep *sep, struct avdtp *session); struct avdtp_stream *a2dp_sep_get_stream(struct a2dp_sep *sep); @@ -65,10 +65,10 @@ index 19466a428..7729884bd 100644 const char *a2dp_setup_remote_path(struct a2dp_setup *setup); struct avdtp *a2dp_avdtp_get(struct btd_device *device); diff --git a/profiles/audio/avdtp.c b/profiles/audio/avdtp.c -index 782268c08..f13c8ca6b 100644 +index 088ca58b3..e94216533 100644 --- a/profiles/audio/avdtp.c +++ b/profiles/audio/avdtp.c -@@ -478,6 +478,11 @@ static gboolean try_send(int sk, void *data, size_t len) +@@ -469,6 +469,11 @@ static gboolean try_send(int sk, void *data, size_t len) return TRUE; } @@ -81,19 +81,19 @@ index 782268c08..f13c8ca6b 100644 uint8_t message_type, uint8_t signal_id, void *data, size_t len) diff --git a/profiles/audio/avdtp.h b/profiles/audio/avdtp.h -index 011fea89e..621a611f3 100644 +index b29d0621a..fc35346eb 100644 --- a/profiles/audio/avdtp.h +++ b/profiles/audio/avdtp.h -@@ -314,3 +314,4 @@ struct avdtp_server *avdtp_get_server(struct avdtp_local_sep *lsep); +@@ -306,3 +306,4 @@ struct avdtp_server *avdtp_get_server(struct avdtp_local_sep *lsep); struct avdtp *avdtp_new(GIOChannel *chan, struct btd_device *device, struct queue *lseps); uint16_t avdtp_get_version(struct avdtp *session); +void avdtp_local_sep_set_delay_report(struct avdtp_local_sep *lsep, bool delay_reporting); diff --git a/profiles/audio/media.c b/profiles/audio/media.c -index ef9e40b41..4ad67ba9a 100644 +index 3727484a2..ffcd0398c 100644 --- a/profiles/audio/media.c +++ b/profiles/audio/media.c -@@ -132,6 +132,19 @@ struct media_player { +@@ -120,6 +120,19 @@ struct media_player { static GSList *adapters = NULL; @@ -113,7 +113,7 @@ index ef9e40b41..4ad67ba9a 100644 static void endpoint_request_free(struct endpoint_request *request) { if (request->call) -@@ -799,6 +812,9 @@ static struct media_endpoint *media_endpoint_create(struct media_adapter *adapte +@@ -800,6 +813,9 @@ static struct media_endpoint *media_endpoint_create(struct media_adapter *adapte } endpoint->adapter = adapter; @@ -123,7 +123,7 @@ index ef9e40b41..4ad67ba9a 100644 if (strcasecmp(uuid, A2DP_SOURCE_UUID) == 0) succeeded = endpoint_init_a2dp_source(endpoint, -@@ -2413,6 +2429,7 @@ int media_register(struct btd_adapter *btd_adapter) +@@ -2414,6 +2430,7 @@ int media_register(struct btd_adapter *btd_adapter) return -1; } @@ -132,10 +132,10 @@ index ef9e40b41..4ad67ba9a 100644 return 0; diff --git a/profiles/audio/media.h b/profiles/audio/media.h -index 53694f4c6..966162f8c 100644 +index 96bea9db4..e9d10fd3c 100644 --- a/profiles/audio/media.h +++ b/profiles/audio/media.h -@@ -23,6 +23,7 @@ +@@ -10,6 +10,7 @@ */ struct media_endpoint; @@ -143,24 +143,24 @@ index 53694f4c6..966162f8c 100644 typedef void (*media_endpoint_cb_t) (struct media_endpoint *endpoint, void *ret, int size, void *user_data); -@@ -35,3 +36,4 @@ const char *media_endpoint_get_uuid(struct media_endpoint *endpoint); +@@ -22,3 +23,4 @@ const char *media_endpoint_get_uuid(struct media_endpoint *endpoint); uint8_t media_endpoint_get_codec(struct media_endpoint *endpoint); int8_t media_player_get_device_volume(struct btd_device *device); +void media_set_delay_reporting(struct media_adapter* adapter, bool delay_reporting); diff --git a/src/adapter.c b/src/adapter.c -index 1435e2bd7..2adffc63f 100644 +index 0b6321dd5..adfe96013 100644 --- a/src/adapter.c +++ b/src/adapter.c -@@ -78,6 +78,7 @@ - #include "gatt-database.h" - #include "advertising.h" +@@ -67,6 +67,7 @@ + #include "adv_monitor.h" #include "eir.h" + #include "battery.h" +#include "profiles/audio/media.h" - #define ADAPTER_INTERFACE "org.bluez.Adapter1" - -@@ -243,6 +244,9 @@ struct btd_adapter { + #define MODE_OFF 0x00 + #define MODE_CONNECTABLE 0x01 +@@ -224,6 +225,9 @@ struct btd_adapter { bool filtered_discovery; /* we are doing filtered discovery */ bool no_scan_restart_delay; /* when this flag is set, restart scan * without delay */ @@ -170,7 +170,7 @@ index 1435e2bd7..2adffc63f 100644 uint8_t discovery_type; /* current active discovery type */ uint8_t discovery_enable; /* discovery enabled/disabled */ bool discovery_suspended; /* discovery has been suspended */ -@@ -303,6 +307,11 @@ typedef enum { +@@ -288,6 +292,11 @@ typedef enum { ADAPTER_AUTHORIZE_CHECK_CONNECTED } adapter_authorize_type; @@ -182,16 +182,16 @@ index 1435e2bd7..2adffc63f 100644 static struct btd_adapter *btd_adapter_lookup(uint16_t index) { GList *list; -@@ -504,6 +513,8 @@ static void store_adapter_info(struct btd_adapter *adapter) +@@ -489,6 +498,8 @@ static void store_adapter_info(struct btd_adapter *adapter) g_key_file_set_boolean(key_file, "General", "Discoverable", discoverable); + g_key_file_set_boolean(key_file, "General", "DelayReport", + adapter->delay_report); - if (adapter->discoverable_timeout != main_opts.discovto) + if (adapter->discoverable_timeout != btd_opts.discovto) g_key_file_set_integer(key_file, "General", -@@ -3201,6 +3212,30 @@ static gboolean property_get_roles(const GDBusPropertyTable *property, +@@ -3232,6 +3243,30 @@ static gboolean property_get_roles(const GDBusPropertyTable *property, return TRUE; } @@ -220,9 +220,9 @@ index 1435e2bd7..2adffc63f 100644 + return; +} - static int device_path_cmp(gconstpointer a, gconstpointer b) - { -@@ -3483,6 +3518,7 @@ static const GDBusPropertyTable adapter_properties[] = { + static DBusMessage *remove_device(DBusConnection *conn, + DBusMessage *msg, void *user_data) +@@ -3505,6 +3540,7 @@ static const GDBusPropertyTable adapter_properties[] = { { "Modalias", "s", property_get_modalias, NULL, property_exists_modalias }, { "Roles", "as", property_get_roles }, @@ -230,7 +230,7 @@ index 1435e2bd7..2adffc63f 100644 { } }; -@@ -4838,6 +4874,11 @@ bool btd_adapter_get_bredr(struct btd_adapter *adapter) +@@ -4832,6 +4868,11 @@ bool btd_adapter_get_bredr(struct btd_adapter *adapter) return false; } @@ -242,7 +242,7 @@ index 1435e2bd7..2adffc63f 100644 struct btd_gatt_database *btd_adapter_get_database(struct btd_adapter *adapter) { if (!adapter) -@@ -6285,6 +6326,15 @@ static void load_config(struct btd_adapter *adapter) +@@ -6279,6 +6320,15 @@ static void load_config(struct btd_adapter *adapter) gerr = NULL; } @@ -250,7 +250,7 @@ index 1435e2bd7..2adffc63f 100644 + adapter->delay_report = g_key_file_get_boolean(key_file, + "General", "DelayReport", &gerr); + if (gerr) { -+ adapter->delay_report = main_opts.delay_report; ++ adapter->delay_report = btd_opts.delay_report; + g_error_free(gerr); + gerr = NULL; + } @@ -258,15 +258,15 @@ index 1435e2bd7..2adffc63f 100644 g_key_file_free(key_file); } -@@ -6317,6 +6367,7 @@ static struct btd_adapter *btd_adapter_new(uint16_t index) - main_opts.did_version); - adapter->discoverable_timeout = main_opts.discovto; - adapter->pairable_timeout = main_opts.pairto; -+ adapter->delay_report = main_opts.delay_report; +@@ -6311,6 +6361,7 @@ static struct btd_adapter *btd_adapter_new(uint16_t index) + btd_opts.did_version); + adapter->discoverable_timeout = btd_opts.discovto; + adapter->pairable_timeout = btd_opts.pairto; ++ adapter->delay_report = btd_opts.delay_report; DBG("System name: %s", adapter->system_name); DBG("Major class: %u", adapter->major_class); -@@ -6324,6 +6375,7 @@ static struct btd_adapter *btd_adapter_new(uint16_t index) +@@ -6318,6 +6369,7 @@ static struct btd_adapter *btd_adapter_new(uint16_t index) DBG("Modalias: %s", adapter->modalias); DBG("Discoverable timeout: %u seconds", adapter->discoverable_timeout); DBG("Pairable timeout: %u seconds", adapter->pairable_timeout); @@ -275,10 +275,10 @@ index 1435e2bd7..2adffc63f 100644 adapter->auths = g_queue_new(); diff --git a/src/adapter.h b/src/adapter.h -index f8ac20261..4fc9b2eef 100644 +index 60b5e3bcc..09f2d0806 100644 --- a/src/adapter.h +++ b/src/adapter.h -@@ -33,6 +33,7 @@ +@@ -25,6 +25,7 @@ struct btd_adapter; struct btd_device; @@ -286,7 +286,7 @@ index f8ac20261..4fc9b2eef 100644 struct btd_adapter *btd_adapter_get_default(void); bool btd_adapter_is_default(struct btd_adapter *adapter); -@@ -76,6 +77,8 @@ bool btd_adapter_get_powered(struct btd_adapter *adapter); +@@ -68,6 +69,8 @@ bool btd_adapter_get_powered(struct btd_adapter *adapter); bool btd_adapter_get_connectable(struct btd_adapter *adapter); bool btd_adapter_get_discoverable(struct btd_adapter *adapter); bool btd_adapter_get_bredr(struct btd_adapter *adapter); @@ -295,23 +295,23 @@ index f8ac20261..4fc9b2eef 100644 struct btd_gatt_database *btd_adapter_get_database(struct btd_adapter *adapter); -diff --git a/src/hcid.h b/src/hcid.h -index 3624ba6ea..8f77184ed 100644 ---- a/src/hcid.h -+++ b/src/hcid.h -@@ -101,6 +101,7 @@ struct main_opts { +diff --git a/src/btd.h b/src/btd.h +index a3247e4fd..27f201eee 100644 +--- a/src/btd.h ++++ b/src/btd.h +@@ -105,6 +105,7 @@ struct btd_opts { gboolean debug_keys; gboolean fast_conn; gboolean refresh_discovery; -+ gboolean delay_report; ++ gboolean delay_report; uint16_t did_source; uint16_t did_vendor; diff --git a/src/main.c b/src/main.c -index b37c32948..468251511 100644 +index b66e2b8cb..3b1acace2 100644 --- a/src/main.c +++ b/src/main.c -@@ -88,6 +88,7 @@ static const char *supported_options[] = { +@@ -76,6 +76,7 @@ static const char *supported_options[] = { "ControllerMode", "MultiProfile", "FastConnectable", @@ -319,9 +319,9 @@ index b37c32948..468251511 100644 "Privacy", "JustWorksRepairing", "TemporaryTimeout", -@@ -634,6 +635,16 @@ static void parse_config(GKeyFile *config) +@@ -708,6 +709,16 @@ static void parse_config(GKeyFile *config) else - main_opts.refresh_discovery = boolean; + btd_opts.refresh_discovery = boolean; + boolean = g_key_file_get_boolean(config, "General", + "DelayReport", &err); @@ -330,14 +330,14 @@ index b37c32948..468251511 100644 + else + { + DBG("DelayReport=%d", boolean); -+ main_opts.delay_report = boolean; ++ btd_opts.delay_report = boolean; + } + str = g_key_file_get_string(config, "GATT", "Cache", &err); if (err) { DBG("%s", err->message); diff --git a/src/main.conf b/src/main.conf -index 42f7e41c5..70f9bd85b 100644 +index ad36638b7..ec5c69808 100644 --- a/src/main.conf +++ b/src/main.conf @@ -65,6 +65,9 @@ diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0013-Implementation-to-get-connectedUuid-s-in-case-of-inc.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0013-Implementation-to-get-connectedUuid-s-in-case-of-inc.patch index de146801c..2939d2680 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0013-Implementation-to-get-connectedUuid-s-in-case-of-inc.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0013-Implementation-to-get-connectedUuid-s-in-case-of-inc.patch @@ -1,4 +1,4 @@ -From 3cb015f191e8328f5d73f099e8b5981c79ddbb7a Mon Sep 17 00:00:00 2001 +From 20129fce464344ff7a25886bc4153193de01f610 Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Mon, 6 Apr 2020 12:14:43 +0530 Subject: [PATCH] Implementation to get connectedUuid's in case of incoming @@ -24,10 +24,10 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/device.c b/src/device.c -index 46ae3c288..2df41b1ab 100644 +index 523a5ee9c..88d423041 100644 --- a/src/device.c +++ b/src/device.c -@@ -7096,9 +7096,11 @@ static void service_state_changed(struct btd_service *service, +@@ -7109,9 +7109,11 @@ static void service_state_changed(struct btd_service *service, new_state == BTD_SERVICE_STATE_DISCONNECTING) return; diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0014-Fix-for-updating-connected-uuids-when-profile-is-dis.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0014-Fix-for-updating-connected-uuids-when-profile-is-dis.patch index e44026598..3026d6bb1 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0014-Fix-for-updating-connected-uuids-when-profile-is-dis.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0014-Fix-for-updating-connected-uuids-when-profile-is-dis.patch @@ -1,4 +1,4 @@ -From 962ee15076cd26c84c134b5b38e35ecf79f78951 Mon Sep 17 00:00:00 2001 +From bedf226950c8888be11e64a97dd79d9226e3aa38 Mon Sep 17 00:00:00 2001 From: "ramya.hegde" Date: Tue, 14 Apr 2020 15:28:07 +0530 Subject: [PATCH] Fix for updating connected uuids when profile is disconnected @@ -23,10 +23,10 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/device.c b/src/device.c -index 2df41b1ab..dc714d54b 100644 +index 88d423041..a1303448b 100644 --- a/src/device.c +++ b/src/device.c -@@ -2371,7 +2371,10 @@ static void device_profile_disconnected(struct btd_device *dev, +@@ -2367,7 +2367,10 @@ static void device_profile_disconnected(struct btd_device *dev, DBG("%s %s (%d)", profile->name, strerror(-err), -err); if (!err) { if (dev->connected_uuids) diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0015-Fix-device-getStatus-not-updated-when-unpaired.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0015-Fix-device-getStatus-not-updated-when-unpaired.patch index 0aa5d5810..68a273c24 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0015-Fix-device-getStatus-not-updated-when-unpaired.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0015-Fix-device-getStatus-not-updated-when-unpaired.patch @@ -1,4 +1,4 @@ -From 8b2050b6a72e4c5b80bf4cbd0d3833e9a1af14e1 Mon Sep 17 00:00:00 2001 +From 1a31ccf75e7c905bb1d750acd61a87c04c28acbb Mon Sep 17 00:00:00 2001 From: Sameer Mulla Date: Mon, 27 Apr 2020 11:56:21 +0530 Subject: [PATCH] Fix device/getStatus not updated when unpaired @@ -28,10 +28,10 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/device.c b/src/device.c -index dc714d54b..f728657a3 100644 +index a1303448b..5eec1bbe8 100644 --- a/src/device.c +++ b/src/device.c -@@ -1864,13 +1864,13 @@ static void device_profile_connected(struct btd_device *dev, +@@ -1860,13 +1860,13 @@ static void device_profile_connected(struct btd_device *dev, DBG("%s %s (%d)", profile->name, strerror(-err), -err); diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0016-Set-default-pairing-capability-as-NoInputNoOutput.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0016-Set-default-pairing-capability-as-NoInputNoOutput.patch index 6cbd6e8b5..3ac6cd9e7 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0016-Set-default-pairing-capability-as-NoInputNoOutput.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0016-Set-default-pairing-capability-as-NoInputNoOutput.patch @@ -1,4 +1,4 @@ -From 69f93ab0e6c280d9457077a17417f8ed27651038 Mon Sep 17 00:00:00 2001 +From 7d2f7242fbce18e3639196e979d843382e1ba4a6 Mon Sep 17 00:00:00 2001 From: "sungmok.shin" Date: Mon, 20 Apr 2020 19:24:45 +0900 Subject: [PATCH] Set default pairing capability as "NoInputNoOutput" @@ -8,10 +8,10 @@ Subject: [PATCH] Set default pairing capability as "NoInputNoOutput" 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/agent.c b/src/agent.c -index e0ffcd22f..17a6482ab 100644 +index 7d66cf50d..849a527c8 100644 --- a/src/agent.c +++ b/src/agent.c -@@ -992,7 +992,7 @@ static DBusMessage *register_agent(DBusConnection *conn, +@@ -979,7 +979,7 @@ static DBusMessage *register_agent(DBusConnection *conn, DBUS_TYPE_INVALID) == FALSE) return btd_error_invalid_args(msg); diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0017-AVRCP-getting-supported-notification-events.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0017-AVRCP-getting-supported-notification-events.patch index dc7f239ff..f7bc0459d 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0017-AVRCP-getting-supported-notification-events.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0017-AVRCP-getting-supported-notification-events.patch @@ -1,4 +1,4 @@ -From 07a141ab36999d125a59c8c4129fd7bcd1be2571 Mon Sep 17 00:00:00 2001 +From 0592744a8af8269bcdade7248a3762caaf071b3d Mon Sep 17 00:00:00 2001 From: "ramya.hegde" Date: Mon, 11 May 2020 15:54:12 +0530 Subject: [PATCH] AVRCP getting supported notification events @@ -26,10 +26,10 @@ Upstream-Status: Inappropriate[webos specific] 2 files changed, 22 insertions(+) diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c -index c81a1825d..333b96a4f 100644 +index d6a7fbb54..7c8f962da 100644 --- a/profiles/audio/avrcp.c +++ b/profiles/audio/avrcp.c -@@ -3929,6 +3929,7 @@ static gboolean avrcp_get_capabilities_resp(struct avctp *conn, uint8_t code, +@@ -3974,6 +3974,7 @@ static gboolean avrcp_get_capabilities_resp(struct avctp *conn, uint8_t code, break; } } @@ -38,10 +38,10 @@ index c81a1825d..333b96a4f 100644 if (!session->controller || !session->controller->player) return FALSE; diff --git a/src/device.c b/src/device.c -index f728657a3..a8de13509 100644 +index 5eec1bbe8..daaf0989e 100644 --- a/src/device.c +++ b/src/device.c -@@ -294,6 +294,7 @@ struct btd_device { +@@ -281,6 +281,7 @@ struct btd_device { struct key_code passththough_key; uint8_t avrcp_ct_features; uint8_t avrcp_tg_features; @@ -49,7 +49,7 @@ index f728657a3..a8de13509 100644 }; static const uint16_t uuid_list[] = { -@@ -1382,6 +1383,17 @@ static gboolean dev_property_get_key_code(const GDBusPropertyTable *property, +@@ -1378,6 +1379,17 @@ static gboolean dev_property_get_key_code(const GDBusPropertyTable *property, return TRUE; } @@ -67,7 +67,7 @@ index f728657a3..a8de13509 100644 static gboolean dev_property_get_avrcp_ct_feature(const GDBusPropertyTable *property, DBusMessageIter *iter, void *data) { -@@ -2028,6 +2040,14 @@ void set_avrcp_feature(struct btd_device *dev, uint8_t feature, bool is_controll +@@ -2024,6 +2036,14 @@ void set_avrcp_feature(struct btd_device *dev, uint8_t feature, bool is_controll } } @@ -82,7 +82,7 @@ index f728657a3..a8de13509 100644 static void add_service_data(void *data, void *user_data) { struct eir_sd *sd = data; -@@ -3163,6 +3183,7 @@ static const GDBusPropertyTable device_properties[] = { +@@ -3159,6 +3179,7 @@ static const GDBusPropertyTable device_properties[] = { NULL, dev_property_avrcp_ct_feature_exist}, { "AvrcpTGFeatures", "y", dev_property_get_avrcp_tg_feature, NULL, dev_property_avrcp_tg_feature_exist}, diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0018-Modified-MapInstanceName-MapInstanceProperties-parsi.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0018-Modified-MapInstanceName-MapInstanceProperties-parsi.patch index 08c213548..77181957c 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0018-Modified-MapInstanceName-MapInstanceProperties-parsi.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0018-Modified-MapInstanceName-MapInstanceProperties-parsi.patch @@ -1,4 +1,4 @@ -From 34d405bef465e5af309d93c2b0597b015cb32dca Mon Sep 17 00:00:00 2001 +From 77e37bb76a549dd7d9f9993a76e1603c8a699abc Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Tue, 14 Jul 2020 10:37:18 +0900 Subject: [PATCH] Modified MapInstanceName & MapInstanceProperties parsing and @@ -24,10 +24,10 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 167 insertions(+), 1 deletion(-) diff --git a/src/device.c b/src/device.c -index a8de13509..7ef5d1ca2 100644 +index daaf0989e..fc8a5fd25 100644 --- a/src/device.c +++ b/src/device.c -@@ -232,6 +232,8 @@ struct btd_device { +@@ -219,6 +219,8 @@ struct btd_device { char *modalias; struct btd_adapter *adapter; GSList *uuids; @@ -36,7 +36,7 @@ index a8de13509..7ef5d1ca2 100644 GSList *connected_uuids; GSList *primaries; /* List of primary services */ GSList *services; /* List of btd_service */ -@@ -407,6 +409,7 @@ static gboolean store_device_info_cb(gpointer user_data) +@@ -394,6 +396,7 @@ static gboolean store_device_info_cb(gpointer user_data) char *str; char class[9]; char **uuids = NULL; @@ -44,7 +44,7 @@ index a8de13509..7ef5d1ca2 100644 gsize length = 0; device->store_id = 0; -@@ -468,6 +471,35 @@ static gboolean store_device_info_cb(gpointer user_data) +@@ -455,6 +458,35 @@ static gboolean store_device_info_cb(gpointer user_data) g_key_file_remove_key(key_file, "General", "Services", NULL); } @@ -80,7 +80,7 @@ index a8de13509..7ef5d1ca2 100644 if (device->vendor_src) { g_key_file_set_integer(key_file, "DeviceID", "Source", device->vendor_src); -@@ -495,6 +527,7 @@ static gboolean store_device_info_cb(gpointer user_data) +@@ -482,6 +514,7 @@ static gboolean store_device_info_cb(gpointer user_data) g_key_file_free(key_file); g_free(uuids); @@ -88,7 +88,7 @@ index a8de13509..7ef5d1ca2 100644 return FALSE; } -@@ -691,6 +724,10 @@ static void device_free(gpointer user_data) +@@ -687,6 +720,10 @@ static void device_free(gpointer user_data) g_slist_free_full(device->uuids, g_free); g_slist_free_full(device->primaries, g_free); g_slist_free_full(device->svc_callbacks, svc_dev_remove); @@ -99,7 +99,7 @@ index a8de13509..7ef5d1ca2 100644 /* Reset callbacks since the device is going to be freed */ gatt_db_unregister(device->db, device->db_id); -@@ -1243,6 +1280,46 @@ static gboolean dev_property_get_uuids(const GDBusPropertyTable *property, +@@ -1239,6 +1276,46 @@ static gboolean dev_property_get_uuids(const GDBusPropertyTable *property, return TRUE; } @@ -146,7 +146,7 @@ index a8de13509..7ef5d1ca2 100644 static gboolean dev_property_get_modalias(const GDBusPropertyTable *property, DBusMessageIter *iter, void *data) { -@@ -3198,6 +3275,8 @@ static const GDBusPropertyTable device_properties[] = { +@@ -3194,6 +3271,8 @@ static const GDBusPropertyTable device_properties[] = { { "WakeAllowed", "b", dev_property_get_wake_allowed, dev_property_set_wake_allowed, dev_property_wake_allowed_exist }, @@ -155,7 +155,7 @@ index a8de13509..7ef5d1ca2 100644 { } }; -@@ -3435,6 +3514,32 @@ static void load_services(struct btd_device *device, char **uuids) +@@ -3439,6 +3518,32 @@ static void load_services(struct btd_device *device, char **uuids) g_strfreev(uuids); } @@ -188,7 +188,7 @@ index a8de13509..7ef5d1ca2 100644 static void convert_info(struct btd_device *device, GKeyFile *key_file) { char filename[PATH_MAX]; -@@ -3482,7 +3587,7 @@ static void load_info(struct btd_device *device, const char *local, +@@ -3486,7 +3591,7 @@ static void load_info(struct btd_device *device, const char *local, gboolean store_needed = FALSE; gboolean blocked; gboolean wake_allowed; @@ -197,7 +197,7 @@ index a8de13509..7ef5d1ca2 100644 int source, vendor, product, version; char **techno, **t; -@@ -3578,6 +3683,23 @@ next: +@@ -3582,6 +3687,23 @@ next: device->bredr_state.svc_resolved = true; } @@ -221,7 +221,7 @@ index a8de13509..7ef5d1ca2 100644 /* Load device id */ source = g_key_file_get_integer(key_file, "DeviceID", "Source", NULL); if (source) { -@@ -5057,6 +5179,29 @@ static int update_record(struct browse_req *req, const char *uuid, +@@ -5071,6 +5193,29 @@ static int update_record(struct browse_req *req, const char *uuid, return 0; } @@ -251,7 +251,7 @@ index a8de13509..7ef5d1ca2 100644 static void update_bredr_services(struct browse_req *req, sdp_list_t *recs) { struct btd_device *device = req->device; -@@ -5099,6 +5244,23 @@ static void update_bredr_services(struct browse_req *req, sdp_list_t *recs) +@@ -5113,6 +5258,23 @@ static void update_bredr_services(struct browse_req *req, sdp_list_t *recs) if (!profile_uuid) continue; @@ -275,7 +275,7 @@ index a8de13509..7ef5d1ca2 100644 if (bt_uuid_strcmp(profile_uuid, PNP_UUID) == 0) { uint16_t source, vendor, product, version; sdp_data_t *pdlist; -@@ -5268,6 +5430,10 @@ static void search_cb(sdp_list_t *recs, int err, gpointer user_data) +@@ -5282,6 +5444,10 @@ static void search_cb(sdp_list_t *recs, int err, gpointer user_data) /* Propagate services changes */ g_dbus_emit_property_changed(dbus_conn, req->device->path, DEVICE_INTERFACE, "UUIDs"); diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0019-Enabled-EMAIL-support-based-on-MAPInstance-Name-Modi.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0019-Enabled-EMAIL-support-based-on-MAPInstance-Name-Modi.patch index 373614535..4714d3c57 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0019-Enabled-EMAIL-support-based-on-MAPInstance-Name-Modi.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0019-Enabled-EMAIL-support-based-on-MAPInstance-Name-Modi.patch @@ -1,4 +1,4 @@ -From 86a9d1ec559a98873b2ac7c293233d9b13a0a089 Mon Sep 17 00:00:00 2001 +From c29950285e87ef985fa9497c82dcbd2e164da949 Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Wed, 3 Jun 2020 18:08:39 +0530 Subject: [PATCH] Enabled EMAIL support based on MAPInstance Name Modified @@ -29,10 +29,10 @@ Upstream-Status: Inappropriate[webos specific] 7 files changed, 62 insertions(+), 11 deletions(-) diff --git a/obexd/client/bluetooth.c b/obexd/client/bluetooth.c -index 0c043e0ac..d718e1ad8 100644 +index ca2c023fb..c197fe8aa 100644 --- a/obexd/client/bluetooth.c +++ b/obexd/client/bluetooth.c -@@ -57,6 +57,7 @@ struct bluetooth_session { +@@ -44,6 +44,7 @@ struct bluetooth_session { sdp_record_t *sdp_record; GIOChannel *io; char *service; @@ -40,7 +40,7 @@ index 0c043e0ac..d718e1ad8 100644 obc_transport_func func; void *user_data; }; -@@ -191,6 +192,17 @@ static void search_callback(uint8_t type, uint16_t status, +@@ -178,6 +179,17 @@ static void search_callback(uint8_t type, uint16_t status, if (data != NULL && (data->val.uint16 & 0x0101) == 0x0001) ch = data->val.uint16; @@ -58,7 +58,7 @@ index 0c043e0ac..d718e1ad8 100644 /* Cache the sdp record associated with the service that we * attempt to connect. This allows reading its application * specific service attributes. */ -@@ -375,12 +387,14 @@ static int session_connect(struct bluetooth_session *session) +@@ -362,12 +374,14 @@ static int session_connect(struct bluetooth_session *session) DBG("session %p", session); if (session->port > 0) { @@ -73,7 +73,7 @@ index 0c043e0ac..d718e1ad8 100644 session->sdp = service_connect(&session->src, &session->dst, service_callback, session); err = (session->sdp == NULL) ? -ENOMEM : 0; -@@ -390,14 +404,14 @@ static int session_connect(struct bluetooth_session *session) +@@ -377,14 +391,14 @@ static int session_connect(struct bluetooth_session *session) } static guint bluetooth_connect(const char *source, const char *destination, @@ -91,7 +91,7 @@ index 0c043e0ac..d718e1ad8 100644 if (destination == NULL) return 0; -@@ -410,6 +424,7 @@ static guint bluetooth_connect(const char *source, const char *destination, +@@ -397,6 +411,7 @@ static guint bluetooth_connect(const char *source, const char *destination, session->func = func; session->port = port; session->user_data = user_data; @@ -100,10 +100,10 @@ index 0c043e0ac..d718e1ad8 100644 str2ba(destination, &session->dst); str2ba(source, &session->src); diff --git a/obexd/client/manager.c b/obexd/client/manager.c -index fbcad6da4..c24f0090b 100644 +index 75f1bfb04..dde5b3e82 100644 --- a/obexd/client/manager.c +++ b/obexd/client/manager.c -@@ -120,7 +120,7 @@ done: +@@ -107,7 +107,7 @@ done: } static int parse_device_dict(DBusMessageIter *iter, @@ -112,7 +112,7 @@ index fbcad6da4..c24f0090b 100644 { while (dbus_message_iter_get_arg_type(iter) == DBUS_TYPE_DICT_ENTRY) { DBusMessageIter entry, value; -@@ -138,6 +138,8 @@ static int parse_device_dict(DBusMessageIter *iter, +@@ -125,6 +125,8 @@ static int parse_device_dict(DBusMessageIter *iter, dbus_message_iter_get_basic(&value, source); else if (g_str_equal(key, "Target") == TRUE) dbus_message_iter_get_basic(&value, target); @@ -121,7 +121,7 @@ index fbcad6da4..c24f0090b 100644 break; case DBUS_TYPE_BYTE: if (g_str_equal(key, "Channel") == TRUE) -@@ -171,7 +173,7 @@ static DBusMessage *create_session(DBusConnection *connection, +@@ -158,7 +160,7 @@ static DBusMessage *create_session(DBusConnection *connection, DBusMessageIter iter, dict; struct obc_session *session; struct send_data *data; @@ -130,7 +130,7 @@ index fbcad6da4..c24f0090b 100644 uint8_t channel = 0; dbus_message_iter_init(message, &iter); -@@ -188,7 +190,7 @@ static DBusMessage *create_session(DBusConnection *connection, +@@ -175,7 +177,7 @@ static DBusMessage *create_session(DBusConnection *connection, dbus_message_iter_recurse(&iter, &dict); @@ -139,7 +139,7 @@ index fbcad6da4..c24f0090b 100644 if (dest == NULL || target == NULL) return g_dbus_create_error(message, ERROR_INTERFACE ".InvalidArguments", NULL); -@@ -201,7 +203,7 @@ static DBusMessage *create_session(DBusConnection *connection, +@@ -188,7 +190,7 @@ static DBusMessage *create_session(DBusConnection *connection, data->connection = dbus_connection_ref(connection); data->message = dbus_message_ref(message); @@ -149,10 +149,10 @@ index fbcad6da4..c24f0090b 100644 create_callback, data); if (session != NULL) { diff --git a/obexd/client/map.c b/obexd/client/map.c -index 28e60fe4c..94e9d6467 100644 +index ea3d25629..2eb2c17a6 100644 --- a/obexd/client/map.c +++ b/obexd/client/map.c -@@ -1595,6 +1595,19 @@ static DBusMessage *map_list_filter_fields(DBusConnection *connection, +@@ -1582,6 +1582,19 @@ static DBusMessage *map_list_filter_fields(DBusConnection *connection, return reply; } @@ -172,7 +172,7 @@ index 28e60fe4c..94e9d6467 100644 static void update_inbox_cb(struct obc_session *session, struct obc_transfer *transfer, GError *err, void *user_data) -@@ -1831,6 +1844,10 @@ static const GDBusMethodTable map_methods[] = { +@@ -1818,6 +1831,10 @@ static const GDBusMethodTable map_methods[] = { GDBUS_ARGS({ "transfer", "o" }, { "properties", "a{sv}" }), map_push_message) }, @@ -184,10 +184,10 @@ index 28e60fe4c..94e9d6467 100644 }; diff --git a/obexd/client/session.c b/obexd/client/session.c -index cf4cb2c5f..8b6660bff 100644 +index 9b456f69c..d5262f680 100644 --- a/obexd/client/session.c +++ b/obexd/client/session.c -@@ -100,6 +100,7 @@ struct obc_session { +@@ -87,6 +87,7 @@ struct obc_session { int refcount; char *source; char *destination; @@ -195,7 +195,7 @@ index cf4cb2c5f..8b6660bff 100644 uint8_t channel; struct obc_transport *transport; struct obc_driver *driver; -@@ -554,7 +555,7 @@ static int session_connect(struct obc_session *session, +@@ -541,7 +542,7 @@ static int session_connect(struct obc_session *session, } session->id = transport->connect(session->source, session->destination, @@ -204,7 +204,7 @@ index cf4cb2c5f..8b6660bff 100644 transport_func, callback); if (session->id == 0) { obc_session_unref(callback->session); -@@ -570,6 +571,7 @@ static int session_connect(struct obc_session *session, +@@ -557,6 +558,7 @@ static int session_connect(struct obc_session *session, struct obc_session *obc_session_create(const char *source, const char *destination, const char *service, @@ -212,7 +212,7 @@ index cf4cb2c5f..8b6660bff 100644 uint8_t channel, const char *owner, session_callback_t function, -@@ -610,6 +612,7 @@ struct obc_session *obc_session_create(const char *source, +@@ -597,6 +599,7 @@ struct obc_session *obc_session_create(const char *source, session->conn = conn; session->source = g_strdup(source); session->destination = g_strdup(destination); @@ -220,7 +220,7 @@ index cf4cb2c5f..8b6660bff 100644 session->channel = channel; session->queue = g_queue_new(); session->folder = g_strdup("/"); -@@ -618,6 +621,7 @@ struct obc_session *obc_session_create(const char *source, +@@ -605,6 +608,7 @@ struct obc_session *obc_session_create(const char *source, obc_session_set_owner(session, owner, owner_disconnected); proceed: @@ -228,7 +228,7 @@ index cf4cb2c5f..8b6660bff 100644 if (session_connect(session, function, user_data) < 0) { obc_session_unref(session); return NULL; -@@ -626,6 +630,9 @@ proceed: +@@ -613,6 +617,9 @@ proceed: DBG("session %p transport %s driver %s", session, session->transport->name, session->driver->service); @@ -239,10 +239,10 @@ index cf4cb2c5f..8b6660bff 100644 } diff --git a/obexd/client/session.h b/obexd/client/session.h -index b561b7e58..5972b9d73 100644 +index 2c646df1a..5e200e40d 100644 --- a/obexd/client/session.h +++ b/obexd/client/session.h -@@ -34,6 +34,7 @@ typedef void (*session_callback_t) (struct obc_session *session, +@@ -21,6 +21,7 @@ typedef void (*session_callback_t) (struct obc_session *session, struct obc_session *obc_session_create(const char *source, const char *destination, const char *service, @@ -251,10 +251,10 @@ index b561b7e58..5972b9d73 100644 const char *owner, session_callback_t function, diff --git a/obexd/client/transport.h b/obexd/client/transport.h -index b035cfc45..ff17edfcb 100644 +index e1f1a5c53..43164c522 100644 --- a/obexd/client/transport.h +++ b/obexd/client/transport.h -@@ -27,7 +27,7 @@ typedef void (*obc_transport_func)(GIOChannel *io, GError *err, +@@ -14,7 +14,7 @@ typedef void (*obc_transport_func)(GIOChannel *io, GError *err, struct obc_transport { const char *name; guint (*connect) (const char *source, const char *destination, @@ -264,10 +264,10 @@ index b035cfc45..ff17edfcb 100644 int (*getpacketopt) (GIOChannel *io, int *tx_mtu, int *rx_mtu); void (*disconnect) (guint id); diff --git a/tools/obexctl.c b/tools/obexctl.c -index 9ed336aa5..275950aae 100644 +index 056701306..81777a719 100644 --- a/tools/obexctl.c +++ b/tools/obexctl.c -@@ -127,6 +127,7 @@ static void connect_reply(DBusMessage *message, void *user_data) +@@ -114,6 +114,7 @@ static void connect_reply(DBusMessage *message, void *user_data) struct connect_args { char *dev; char *target; @@ -275,7 +275,7 @@ index 9ed336aa5..275950aae 100644 }; static void connect_args_free(void *data) -@@ -157,6 +158,8 @@ static void connect_setup(DBusMessageIter *iter, void *user_data) +@@ -144,6 +145,8 @@ static void connect_setup(DBusMessageIter *iter, void *user_data) g_dbus_dict_append_entry(&dict, "Target", DBUS_TYPE_STRING, &args->target); @@ -284,7 +284,7 @@ index 9ed336aa5..275950aae 100644 done: dbus_message_iter_close_container(iter, &dict); -@@ -166,6 +169,7 @@ static void cmd_connect(int argc, char *argv[]) +@@ -153,6 +156,7 @@ static void cmd_connect(int argc, char *argv[]) { struct connect_args *args; const char *target = "opp"; @@ -292,7 +292,7 @@ index 9ed336aa5..275950aae 100644 if (!client) { bt_shell_printf("Client proxy not available\n"); -@@ -175,9 +179,13 @@ static void cmd_connect(int argc, char *argv[]) +@@ -162,9 +166,13 @@ static void cmd_connect(int argc, char *argv[]) if (argc > 2) target = argv[2]; @@ -306,7 +306,7 @@ index 9ed336aa5..275950aae 100644 if (g_dbus_proxy_method_call(client, "CreateSession", connect_setup, connect_reply, args, connect_args_free) == FALSE) { -@@ -1845,7 +1853,7 @@ static void cmd_mkdir(int argc, char *argv[]) +@@ -1832,7 +1840,7 @@ static void cmd_mkdir(int argc, char *argv[]) static const struct bt_shell_menu main_menu = { .name = "main", .entries = { @@ -315,7 +315,7 @@ index 9ed336aa5..275950aae 100644 { "disconnect", "[session]", cmd_disconnect, "Disconnect session", session_generator }, { "list", NULL, cmd_list, "List available sessions" }, -@@ -1865,7 +1873,8 @@ static const struct bt_shell_menu main_menu = { +@@ -1852,7 +1860,8 @@ static const struct bt_shell_menu main_menu = { { "pull", "", cmd_pull, "Pull Vobject & stores in file" }, { "cd", "", cmd_cd, "Change current folder" }, diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0020-Disabling-DB-Hash-for-Gatt.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0020-Disabling-DB-Hash-for-Gatt.patch index 95c4fc334..a91594b5d 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0020-Disabling-DB-Hash-for-Gatt.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0020-Disabling-DB-Hash-for-Gatt.patch @@ -1,4 +1,4 @@ -From 85e2581b5677fb94ba4030304d1b67910beb9cf8 Mon Sep 17 00:00:00 2001 +From 4f3ad7f898652fe6642ac3cdad5c5afbdd5976ac Mon Sep 17 00:00:00 2001 From: Vibhanshu Dhote Date: Tue, 28 Jul 2020 16:04:27 +0530 Subject: [PATCH] Disabling DB Hash for Gatt @@ -22,10 +22,10 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/gatt-database.c b/src/gatt-database.c -index e7e4a36a6..13ee3d59a 100644 +index bd5864bcd..e42704ea2 100644 --- a/src/gatt-database.c +++ b/src/gatt-database.c -@@ -1155,11 +1155,13 @@ static void db_hash_read_cb(struct gatt_db_attribute *attrib, +@@ -1141,11 +1141,13 @@ static void db_hash_read_cb(struct gatt_db_attribute *attrib, hash = gatt_db_get_hash(database->db); @@ -40,16 +40,17 @@ index e7e4a36a6..13ee3d59a 100644 state = find_device_state(database, &bdaddr, bdaddr_type); if (state) state->change_aware = true; -@@ -1214,12 +1216,14 @@ static void populate_gatt_service(struct btd_gatt_database *database) - +@@ -1201,6 +1203,7 @@ static void populate_gatt_service(struct btd_gatt_database *database) + gatt_db_attribute_set_fixed_length(database->cli_feat, CLI_FEAT_SIZE); /* Only expose database hash chrc if supported */ +/* if (gatt_db_hash_support(database->db)) { bt_uuid16_create(&uuid, GATT_CHARAC_DB_HASH); database->db_hash = gatt_db_service_add_characteristic(service, - &uuid, BT_ATT_PERM_READ, BT_GATT_CHRC_PROP_READ, +@@ -1208,6 +1211,7 @@ static void populate_gatt_service(struct btd_gatt_database *database) db_hash_read_cb, NULL, database); + gatt_db_attribute_set_fixed_length(database->db_hash, 16); } +*/ diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0021-Added-Notification-property-in-org.bluez.obex.Messag.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0021-Added-Notification-property-in-org.bluez.obex.Messag.patch index bc55d3715..e489e8352 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0021-Added-Notification-property-in-org.bluez.obex.Messag.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0021-Added-Notification-property-in-org.bluez.obex.Messag.patch @@ -1,4 +1,4 @@ -From 991daedc62b0bd86893e1e6fa6c3fe7fa94f92b4 Mon Sep 17 00:00:00 2001 +From b850670232de560ce9ead26e870b85b86333b8fb Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Fri, 7 Aug 2020 18:32:03 +0530 Subject: [PATCH] Added Notification property in org.bluez.obex.MessageAccess1 @@ -81,10 +81,10 @@ index f39355af0..85301dcda 100644 ================= diff --git a/obexd/client/map.c b/obexd/client/map.c -index 94e9d6467..6340f906b 100644 +index 2eb2c17a6..ada9377b8 100644 --- a/obexd/client/map.c +++ b/obexd/client/map.c -@@ -98,12 +98,25 @@ static const char * const filter_list[] = { +@@ -85,12 +85,25 @@ static const char * const filter_list[] = { #define STATUS_DELETE 1 #define FILLER_BYTE 0x30 @@ -110,7 +110,7 @@ index 94e9d6467..6340f906b 100644 }; struct pending_request { -@@ -433,6 +446,20 @@ static void map_msg_free(void *data) +@@ -420,6 +433,20 @@ static void map_msg_free(void *data) g_free(msg); } @@ -131,7 +131,7 @@ index 94e9d6467..6340f906b 100644 static DBusMessage *map_msg_get(DBusConnection *connection, DBusMessage *message, void *user_data) { -@@ -1862,6 +1889,62 @@ static void map_msg_remove(void *data) +@@ -1849,6 +1876,62 @@ static void map_msg_remove(void *data) g_free(path); } @@ -194,7 +194,7 @@ index 94e9d6467..6340f906b 100644 static void map_handle_new_message(struct map_data *map, struct map_event *event) { -@@ -1872,7 +1955,15 @@ static void map_handle_new_message(struct map_data *map, +@@ -1859,7 +1942,15 @@ static void map_handle_new_message(struct map_data *map, if (msg) g_hash_table_remove(map->messages, &event->handle); @@ -211,7 +211,7 @@ index 94e9d6467..6340f906b 100644 } static void map_handle_status_changed(struct map_data *map, -@@ -1893,6 +1984,8 @@ static void map_handle_status_changed(struct map_data *map, +@@ -1880,6 +1971,8 @@ static void map_handle_status_changed(struct map_data *map, g_dbus_emit_property_changed(conn, msg->path, MAP_MSG_INTERFACE, "Status"); @@ -220,7 +220,7 @@ index 94e9d6467..6340f906b 100644 } static void map_handle_folder_changed(struct map_data *map, -@@ -1916,6 +2009,8 @@ static void map_handle_folder_changed(struct map_data *map, +@@ -1903,6 +1996,8 @@ static void map_handle_folder_changed(struct map_data *map, g_dbus_emit_property_changed(conn, msg->path, MAP_MSG_INTERFACE, "Folder"); @@ -229,7 +229,7 @@ index 94e9d6467..6340f906b 100644 } static void map_handle_notification(struct map_event *event, void *user_data) -@@ -1958,6 +2053,49 @@ static void map_handle_notification(struct map_event *event, void *user_data) +@@ -1945,6 +2040,49 @@ static void map_handle_notification(struct map_event *event, void *user_data) } } @@ -279,7 +279,7 @@ index 94e9d6467..6340f906b 100644 static bool set_notification_registration(struct map_data *map, bool status) { struct obc_transfer *transfer; -@@ -2005,6 +2143,8 @@ static void map_free(void *data) +@@ -1992,6 +2130,8 @@ static void map_free(void *data) obc_session_unref(map->session); g_hash_table_unref(map->messages); @@ -288,7 +288,7 @@ index 94e9d6467..6340f906b 100644 g_free(map); } -@@ -2057,10 +2197,17 @@ static int map_probe(struct obc_session *session) +@@ -2044,10 +2184,17 @@ static int map_probe(struct obc_session *session) DBG("%s, instance id %d", path, map->mas_instance_id); diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0022-Added-MessageHandle-property-in-org.bluez.obex.Trans.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0022-Added-MessageHandle-property-in-org.bluez.obex.Trans.patch index 8c59ffa7b..c528011d5 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0022-Added-MessageHandle-property-in-org.bluez.obex.Trans.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0022-Added-MessageHandle-property-in-org.bluez.obex.Trans.patch @@ -1,4 +1,4 @@ -From d4f3113e90bb474b80cb4c0e6e404105a72bf52f Mon Sep 17 00:00:00 2001 +From ad939769feef3ab64ae5a59bb5c0a90f88b37be5 Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Mon, 10 Aug 2020 13:27:14 +0530 Subject: [PATCH] Added MessageHandle property in org.bluez.obex.Transfer1 @@ -24,10 +24,10 @@ Upstream-Status: Inappropriate[webos specific] 3 files changed, 58 insertions(+), 7 deletions(-) diff --git a/gobex/gobex-transfer.c b/gobex/gobex-transfer.c -index e96e61fbc..c77b4f81c 100644 +index c94d018b2..e93cf79d6 100644 --- a/gobex/gobex-transfer.c +++ b/gobex/gobex-transfer.c -@@ -51,6 +51,7 @@ struct transfer { +@@ -38,6 +38,7 @@ struct transfer { GObexDataProducer data_producer; GObexDataConsumer data_consumer; @@ -35,7 +35,7 @@ index e96e61fbc..c77b4f81c 100644 GObexFunc complete_func; gpointer user_data; -@@ -228,6 +229,8 @@ static void transfer_response(GObex *obex, GError *err, GObexPacket *rsp, +@@ -215,6 +216,8 @@ static void transfer_response(GObex *obex, GError *err, GObexPacket *rsp, } if (transfer->opcode == G_OBEX_OP_PUT) { @@ -44,7 +44,7 @@ index e96e61fbc..c77b4f81c 100644 req = g_obex_packet_new(transfer->opcode, FALSE, G_OBEX_HDR_INVALID); g_obex_packet_add_body(req, put_get_data, transfer); -@@ -272,8 +275,8 @@ static struct transfer *transfer_new(GObex *obex, guint8 opcode, +@@ -259,8 +262,8 @@ static struct transfer *transfer_new(GObex *obex, guint8 opcode, } guint g_obex_put_req_pkt(GObex *obex, GObexPacket *req, @@ -55,7 +55,7 @@ index e96e61fbc..c77b4f81c 100644 { struct transfer *transfer; -@@ -284,6 +287,7 @@ guint g_obex_put_req_pkt(GObex *obex, GObexPacket *req, +@@ -271,6 +274,7 @@ guint g_obex_put_req_pkt(GObex *obex, GObexPacket *req, transfer = transfer_new(obex, G_OBEX_OP_PUT, complete_func, user_data); transfer->data_producer = data_func; @@ -63,7 +63,7 @@ index e96e61fbc..c77b4f81c 100644 g_obex_packet_add_body(req, put_get_data, transfer); -@@ -313,7 +317,7 @@ guint g_obex_put_req(GObex *obex, GObexDataProducer data_func, +@@ -300,7 +304,7 @@ guint g_obex_put_req(GObex *obex, GObexDataProducer data_func, first_hdr_id, args); va_end(args); @@ -73,10 +73,10 @@ index e96e61fbc..c77b4f81c 100644 } diff --git a/gobex/gobex.h b/gobex/gobex.h -index a94d9246e..2e3cbf542 100644 +index f16e4426c..434beecf8 100644 --- a/gobex/gobex.h +++ b/gobex/gobex.h -@@ -41,6 +41,9 @@ typedef void (*GObexRequestFunc) (GObex *obex, GObexPacket *req, +@@ -28,6 +28,9 @@ typedef void (*GObexRequestFunc) (GObex *obex, GObexPacket *req, gpointer user_data); typedef void (*GObexResponseFunc) (GObex *obex, GError *err, GObexPacket *rsp, gpointer user_data); @@ -86,7 +86,7 @@ index a94d9246e..2e3cbf542 100644 gboolean g_obex_send(GObex *obex, GObexPacket *pkt, GError **err); -@@ -106,8 +109,8 @@ guint g_obex_put_req(GObex *obex, GObexDataProducer data_func, +@@ -93,8 +96,8 @@ guint g_obex_put_req(GObex *obex, GObexDataProducer data_func, GError **err, guint first_hdr_id, ...); guint g_obex_put_req_pkt(GObex *obex, GObexPacket *req, @@ -98,10 +98,10 @@ index a94d9246e..2e3cbf542 100644 guint g_obex_get_req(GObex *obex, GObexDataConsumer data_func, GObexFunc complete_func, gpointer user_data, diff --git a/obexd/client/transfer.c b/obexd/client/transfer.c -index b53dffa21..b251fbbce 100644 +index 744d8f106..ab06dbac7 100644 --- a/obexd/client/transfer.c +++ b/obexd/client/transfer.c -@@ -80,6 +80,7 @@ struct obc_transfer { +@@ -67,6 +67,7 @@ struct obc_transfer { char *filename; /* Transfer file location */ char *name; /* Transfer object name */ char *type; /* Transfer object type */ @@ -109,7 +109,7 @@ index b53dffa21..b251fbbce 100644 int fd; guint req; guint xfer; -@@ -391,6 +392,25 @@ static gboolean get_session(const GDBusPropertyTable *property, +@@ -378,6 +379,25 @@ static gboolean get_session(const GDBusPropertyTable *property, dbus_message_iter_append_basic(iter, DBUS_TYPE_OBJECT_PATH, &transfer->session); @@ -135,7 +135,7 @@ index b53dffa21..b251fbbce 100644 return TRUE; } -@@ -410,6 +430,7 @@ static const GDBusPropertyTable obc_transfer_properties[] = { +@@ -397,6 +417,7 @@ static const GDBusPropertyTable obc_transfer_properties[] = { { "Filename", "s", get_filename, NULL, filename_exists }, { "Transferred", "t", get_transferred, NULL, transferred_exists }, { "Session", "o", get_session }, @@ -143,7 +143,7 @@ index b53dffa21..b251fbbce 100644 { } }; -@@ -458,6 +479,7 @@ static void obc_transfer_free(struct obc_transfer *transfer) +@@ -445,6 +466,7 @@ static void obc_transfer_free(struct obc_transfer *transfer) g_free(transfer->type); g_free(transfer->session); g_free(transfer->path); @@ -151,7 +151,7 @@ index b53dffa21..b251fbbce 100644 g_free(transfer); } -@@ -677,6 +699,28 @@ static void xfer_complete(GObex *obex, GError *err, gpointer user_data) +@@ -664,6 +686,28 @@ static void xfer_complete(GObex *obex, GError *err, gpointer user_data) callback->func(transfer, err, callback->data); } @@ -180,7 +180,7 @@ index b53dffa21..b251fbbce 100644 static void get_xfer_progress_first(GObex *obex, GError *err, GObexPacket *rsp, gpointer user_data) { -@@ -875,8 +919,8 @@ static gboolean transfer_start_put(struct obc_transfer *transfer, GError **err) +@@ -862,8 +906,8 @@ static gboolean transfer_start_put(struct obc_transfer *transfer, GError **err) } transfer->xfer = g_obex_put_req_pkt(transfer->obex, req, diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0023-Create-Message-interface-for-sent-message-related-no.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0023-Create-Message-interface-for-sent-message-related-no.patch index b9ed06c55..d71b3ce69 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0023-Create-Message-interface-for-sent-message-related-no.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0023-Create-Message-interface-for-sent-message-related-no.patch @@ -1,4 +1,4 @@ -From b2f89270c1823a261e29d3ecc9fdd8ad951939fb Mon Sep 17 00:00:00 2001 +From 2bb192090af19adeefcb6b06fead6ec5b2f2aeff Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Mon, 10 Aug 2020 16:21:17 +0530 Subject: [PATCH] Create Message interface for sent message related @@ -23,10 +23,10 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 16 insertions(+) diff --git a/obexd/client/map.c b/obexd/client/map.c -index 6340f906b..8a2fa99e7 100644 +index ada9377b8..713de34c2 100644 --- a/obexd/client/map.c +++ b/obexd/client/map.c -@@ -1951,6 +1951,7 @@ static void map_handle_new_message(struct map_data *map, +@@ -1938,6 +1938,7 @@ static void map_handle_new_message(struct map_data *map, struct map_msg *msg; msg = g_hash_table_lookup(map->messages, &event->handle); @@ -34,7 +34,7 @@ index 6340f906b..8a2fa99e7 100644 /* New message event can be used if a new message replaces an old one */ if (msg) g_hash_table_remove(map->messages, &event->handle); -@@ -1966,6 +1967,17 @@ static void map_handle_new_message(struct map_data *map, +@@ -1953,6 +1954,17 @@ static void map_handle_new_message(struct map_data *map, } } @@ -52,7 +52,7 @@ index 6340f906b..8a2fa99e7 100644 static void map_handle_status_changed(struct map_data *map, struct map_event *event, const char *status) -@@ -2029,15 +2041,19 @@ static void map_handle_notification(struct map_event *event, void *user_data) +@@ -2016,15 +2028,19 @@ static void map_handle_notification(struct map_event *event, void *user_data) map_handle_status_changed(map, event, "notification"); break; case MAP_ET_DELIVERY_SUCCESS: diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0024-AVRCP-addToNowPlaying-return-error-when-player-not-s.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0024-AVRCP-addToNowPlaying-return-error-when-player-not-s.patch index ebf6d4e81..8c0174a16 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0024-AVRCP-addToNowPlaying-return-error-when-player-not-s.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0024-AVRCP-addToNowPlaying-return-error-when-player-not-s.patch @@ -1,4 +1,4 @@ -From 341983b542a7df714d21c0b032b202c03f871bd0 Mon Sep 17 00:00:00 2001 +From 04219c108d54999fc869a3b9c0e190a8d0d2ce01 Mon Sep 17 00:00:00 2001 From: "ramya.hegde" Date: Tue, 11 Aug 2020 15:18:43 +0530 Subject: [PATCH] AVRCP addToNowPlaying return error when player not supports @@ -26,10 +26,10 @@ Upstream-Status: Inappropriate[webos specific] 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c -index 333b96a4f..3cd73f5ef 100644 +index 7c8f962da..702b47f03 100644 --- a/profiles/audio/avrcp.c +++ b/profiles/audio/avrcp.c -@@ -2840,6 +2840,9 @@ static void avrcp_player_parse_features(struct avrcp_player *player, +@@ -2885,6 +2885,9 @@ static void avrcp_player_parse_features(struct avrcp_player *player, if (features[7] & 0x10) media_player_set_searchable(mp, true); @@ -40,10 +40,10 @@ index 333b96a4f..3cd73f5ef 100644 media_player_create_folder(mp, "/NowPlaying", PLAYER_FOLDER_TYPE_MIXED, 0); diff --git a/profiles/audio/player.c b/profiles/audio/player.c -index 27a7efb7e..3f6e60ed8 100644 +index d34b39168..c74039f95 100644 --- a/profiles/audio/player.c +++ b/profiles/audio/player.c -@@ -88,6 +88,7 @@ struct media_player { +@@ -75,6 +75,7 @@ struct media_player { char *subtype; /* Player subtype */ bool browsable; /* Player browsing feature */ bool searchable; /* Player searching feature */ @@ -51,7 +51,7 @@ index 27a7efb7e..3f6e60ed8 100644 struct media_folder *scope; /* Player current scope */ struct media_folder *folder; /* Player current folder */ struct media_folder *search; /* Player search folder */ -@@ -1515,6 +1516,16 @@ bool media_player_get_browsable(struct media_player *mp) +@@ -1502,6 +1503,16 @@ bool media_player_get_browsable(struct media_player *mp) return mp->browsable; } @@ -68,7 +68,7 @@ index 27a7efb7e..3f6e60ed8 100644 void media_player_set_searchable(struct media_player *mp, bool enabled) { if (mp->searchable == enabled) -@@ -1618,7 +1629,7 @@ static DBusMessage *media_item_add_to_nowplaying(DBusConnection *conn, +@@ -1605,7 +1616,7 @@ static DBusMessage *media_item_add_to_nowplaying(DBusConnection *conn, struct player_callback *cb = mp->cb; int err; @@ -78,10 +78,10 @@ index 27a7efb7e..3f6e60ed8 100644 err = cb->cbs->add_to_nowplaying(mp, item->path, item->uid, diff --git a/profiles/audio/player.h b/profiles/audio/player.h -index e98550064..01ddcd9de 100644 +index 69f08735b..2de9e55f7 100644 --- a/profiles/audio/player.h +++ b/profiles/audio/player.h -@@ -91,6 +91,7 @@ void media_player_set_subtype(struct media_player *mp, const char *subtype); +@@ -78,6 +78,7 @@ void media_player_set_subtype(struct media_player *mp, const char *subtype); void media_player_set_name(struct media_player *mp, const char *name); void media_player_set_browsable(struct media_player *mp, bool enabled); bool media_player_get_browsable(struct media_player *mp); diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0025-AVRCP-MediaItem-object-path-fix.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0025-AVRCP-MediaItem-object-path-fix.patch index 6ed50c3e1..90a4fc435 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0025-AVRCP-MediaItem-object-path-fix.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0025-AVRCP-MediaItem-object-path-fix.patch @@ -1,4 +1,4 @@ -From 16daf4b283cd348df051b7a3b0d130d501d9eb07 Mon Sep 17 00:00:00 2001 +From 4c77d30d70aa614561dfea0aea0c1cc3813a1639 Mon Sep 17 00:00:00 2001 From: "ramya.hegde" Date: Tue, 3 Nov 2020 11:32:38 +0530 Subject: [PATCH] AVRCP MediaItem object path fix @@ -26,10 +26,10 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 33 insertions(+), 5 deletions(-) diff --git a/profiles/audio/player.c b/profiles/audio/player.c -index 3f6e60ed8..6286c2ff0 100644 +index c74039f95..8eeb26c61 100644 --- a/profiles/audio/player.c +++ b/profiles/audio/player.c -@@ -725,6 +725,12 @@ void media_player_search_complete(struct media_player *mp, int ret) +@@ -712,6 +712,12 @@ void media_player_search_complete(struct media_player *mp, int ret) if (search == NULL) { search = g_new0(struct media_folder, 1); search->item = media_player_create_subfolder(mp, "search", 0); @@ -42,7 +42,7 @@ index 3f6e60ed8..6286c2ff0 100644 mp->search = search; mp->folders = g_slist_prepend(mp->folders, search); } -@@ -1855,6 +1861,17 @@ void media_item_set_playable(struct media_item *item, bool value) +@@ -1842,6 +1848,17 @@ void media_item_set_playable(struct media_item *item, bool value) MEDIA_ITEM_INTERFACE, "Playable"); } @@ -60,7 +60,7 @@ index 3f6e60ed8..6286c2ff0 100644 static struct media_item *media_folder_create_item(struct media_player *mp, struct media_folder *folder, const char *name, -@@ -1863,6 +1880,7 @@ static struct media_item *media_folder_create_item(struct media_player *mp, +@@ -1850,6 +1867,7 @@ static struct media_item *media_folder_create_item(struct media_player *mp, { struct media_item *item; const char *strtype; @@ -68,7 +68,7 @@ index 3f6e60ed8..6286c2ff0 100644 item = media_folder_find_item(folder, uid); if (item != NULL) -@@ -1877,14 +1895,24 @@ static struct media_item *media_folder_create_item(struct media_player *mp, +@@ -1864,14 +1882,24 @@ static struct media_item *media_folder_create_item(struct media_player *mp, item = g_new0(struct media_item, 1); item->player = mp; item->uid = uid; diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0026-Revert-a2dp-Add-reverse-discovery.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0026-Revert-a2dp-Add-reverse-discovery.patch index 98ff689c1..70882e70c 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0026-Revert-a2dp-Add-reverse-discovery.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0026-Revert-a2dp-Add-reverse-discovery.patch @@ -1,4 +1,4 @@ -From 7dc9a627cb6e80f9cd202a0e175b7f82e39e52fa Mon Sep 17 00:00:00 2001 +From 17e4d32d9d160f35114d8f80ca2c48491da2f86a Mon Sep 17 00:00:00 2001 From: Sameer Mulla Date: Thu, 12 Nov 2020 15:04:36 +0530 Subject: [PATCH] Revert "a2dp: Add reverse discovery" @@ -28,10 +28,10 @@ Upstream Status: Pending 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c -index 19ea2b4f7..69ad93ad8 100644 +index 7f4833171..41665b4e6 100644 --- a/profiles/audio/a2dp.c +++ b/profiles/audio/a2dp.c -@@ -593,12 +593,6 @@ static gboolean endpoint_match_codec_ind(struct avdtp *session, +@@ -585,12 +585,6 @@ static gboolean endpoint_match_codec_ind(struct avdtp *session, return TRUE; } @@ -44,7 +44,7 @@ index 19ea2b4f7..69ad93ad8 100644 static gboolean endpoint_setconf_ind(struct avdtp *session, struct avdtp_local_sep *sep, struct avdtp_stream *stream, -@@ -654,14 +648,8 @@ static gboolean endpoint_setconf_ind(struct avdtp *session, +@@ -646,14 +640,8 @@ static gboolean endpoint_setconf_ind(struct avdtp *session, setup_ref(setup), endpoint_setconf_cb, a2dp_sep->user_data); diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0029-Fix-provision-failed-issue.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0029-Fix-provision-failed-issue.patch deleted file mode 100644 index f834ad061..000000000 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0029-Fix-provision-failed-issue.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 18480fd20b967d2be566c1d0d4b0622da842e18e Mon Sep 17 00:00:00 2001 -From: "shoyeb.khan" -Date: Thu, 2 Dec 2021 11:55:45 +0530 -Subject: [PATCH] Fix provision failed issue - -:Release Notes: -Fix provision failed issue - -:Detailed Notes: -When a node is created/provisioned/imported, -the new node's agent is removed. -The corresponding pointer in the node structure needs -to be set to NULL to avoid pointing to freed memory. - -:Testing Performed: -Built and tested - -:QA Notes: -NA - -:Issues Addressed: -[WRN-11804] [webOS OSE]: BLE Mesh Provision - is not happening. - -Upstream-Status: Inappropriate[webos specific] ---- - mesh/node.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/mesh/node.c b/mesh/node.c -index f7ac5ff..079ad9a 100644 ---- a/mesh/node.c -+++ b/mesh/node.c -@@ -1121,6 +1121,8 @@ static void convert_node_to_storage(struct mesh_node *node, - { - const struct l_queue_entry *entry; - -+ memset(db_node, 0, sizeof(struct mesh_config_node)); -+ - db_node->cid = node->comp.cid; - db_node->pid = node->comp.pid; - db_node->vid = node->comp.vid; -@@ -2325,7 +2327,7 @@ void node_finalize_new_node(struct mesh_node *node, struct mesh_io *io) - - free_node_dbus_resources(node); - mesh_agent_remove(node->agent); -- -+ node->agent = NULL; - node->busy = false; - - /* Register callback for the node's io */ --- -2.17.1 - diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend b/meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend index ba618eaa9..2fdb996ee 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend +++ b/meta-webos/recipes-connectivity/bluez5/bluez5_%.bbappend @@ -38,7 +38,6 @@ SRC_URI += " \ file://0026-Revert-a2dp-Add-reverse-discovery.patch \ file://0027-Add-support-for-meshd-to-use-RAW-channel.patch \ file://0028-Enable-mesh-fixed-ell-undefined-symbol-error.patch \ - file://0029-Fix-provision-failed-issue.patch \ file://main.conf \ file://brcm43438.service \ file://obex.service \ From 1367af8460e1656ecbb7952cfc19d860e07b626d Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sat, 27 Feb 2021 01:36:11 -0800 Subject: [PATCH 0583/2022] busybox: update the patches to apply on 1.33.0 version from oe-core :Release Notes: :Detailed Notes: Fixes: stdout: Applying patch 0002-date-add-support-for-options-U-and-S.patch patching file coreutils/date.c Hunk #1 FAILED at 99. Hunk #2 succeeded at 126 (offset -12 lines). Hunk #3 FAILED at 146. Hunk #4 succeeded at 172 (offset -18 lines). Hunk #5 succeeded at 250 (offset -17 lines). Hunk #6 succeeded at 281 with fuzz 1 (offset -17 lines). Hunk #7 FAILED at 342. 3 out of 7 hunks FAILED -- rejects in file coreutils/date.c Patch 0002-date-add-support-for-options-U-and-S.patch does not apply (enforce with -f) :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I1a23ff4c77baaf80ad2a07288cb12a889286144f --- .../busybox/0001-Add-tzset-applet.patch | 5 +- ...date-add-support-for-options-U-and-S.patch | 60 +++++++++---------- ...r-null-before-passing-cmdedit_prompt.patch | 7 +-- 3 files changed, 32 insertions(+), 40 deletions(-) diff --git a/meta-webos/recipes-core/busybox/busybox/0001-Add-tzset-applet.patch b/meta-webos/recipes-core/busybox/busybox/0001-Add-tzset-applet.patch index 8ab58bfc5..60cf2a4c2 100644 --- a/meta-webos/recipes-core/busybox/busybox/0001-Add-tzset-applet.patch +++ b/meta-webos/recipes-core/busybox/busybox/0001-Add-tzset-applet.patch @@ -1,10 +1,9 @@ -From 18db0c47c704ba17668a61da475ad4323f918214 Mon Sep 17 00:00:00 2001 +From 0b7ccc8f4c62c1c11593de542200e5974d5551e5 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 6 Nov 2017 17:22:45 +0000 Subject: [PATCH] Add tzset applet Signed-off-by: Martin Jansa - --- coreutils/tzset.c | 57 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) @@ -12,7 +11,7 @@ Signed-off-by: Martin Jansa diff --git a/coreutils/tzset.c b/coreutils/tzset.c new file mode 100644 -index 0000000..100ba8c +index 000000000..100ba8cc9 --- /dev/null +++ b/coreutils/tzset.c @@ -0,0 +1,57 @@ diff --git a/meta-webos/recipes-core/busybox/busybox/0002-date-add-support-for-options-U-and-S.patch b/meta-webos/recipes-core/busybox/busybox/0002-date-add-support-for-options-U-and-S.patch index 84d31799b..7ece38a48 100644 --- a/meta-webos/recipes-core/busybox/busybox/0002-date-add-support-for-options-U-and-S.patch +++ b/meta-webos/recipes-core/busybox/busybox/0002-date-add-support-for-options-U-and-S.patch @@ -1,33 +1,27 @@ -From 710118cc132143faabb5155ceae6ef1a38363285 Mon Sep 17 00:00:00 2001 +From b6d8a3f0ac77267a40a010e854adfb573f82d9b4 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 6 Nov 2017 17:24:12 +0000 Subject: [PATCH] date: add support for options -U and -S Signed-off-by: Martin Jansa - --- - coreutils/date.c | 28 ++++++++++++++++++++++------ - 1 file changed, 22 insertions(+), 6 deletions(-) + coreutils/date.c | 27 +++++++++++++++++++++------ + 1 file changed, 21 insertions(+), 6 deletions(-) diff --git a/coreutils/date.c b/coreutils/date.c -index 77a7d13..ffb46ce 100644 +index 7061f1719..a1f0550d0 100644 --- a/coreutils/date.c +++ b/coreutils/date.c -@@ -99,10 +99,13 @@ - //usage: "Display time (using +FMT), or set time\n" - //usage: IF_NOT_LONG_OPTS( +@@ -99,6 +99,8 @@ + //usage: "\n -u Work in UTC (don't convert to local time)" //usage: "\n [-s] TIME Set time to TIME" + //usage: "\n -d TIME Display TIME, not 'now'" +//usage: "\n -S Get/set time as seconds since Epoc" - //usage: "\n -u Work in UTC (don't convert to local time)" - //usage: "\n -R Output RFC-2822 compliant date string" +//usage: "\n -U Only output uptime, seconds since system start" - //usage: ) IF_LONG_OPTS( - //usage: "\n [-s,--set] TIME Set time to TIME" -+//usage: "\n -S,--seconds Get/set time as seconds since Epoc" - //usage: "\n -u,--utc Work in UTC (don't convert to local time)" - //usage: "\n -R,--rfc-2822 Output RFC-2822 compliant date string" - //usage: ) -@@ -138,9 +141,7 @@ + //usage: IF_FEATURE_DATE_ISOFMT( + //usage: "\n -D FMT FMT (strptime format) for -s/-d TIME conversion" + ////////^^^^^^^^^^^^^^^^^^^^^^ busybox invention, not compat +@@ -126,9 +128,7 @@ #include "libbb.h" #include "common_bufsiz.h" @@ -38,20 +32,20 @@ index 77a7d13..ffb46ce 100644 enum { OPT_RFC2822 = (1 << 0), /* R */ -@@ -148,8 +149,10 @@ enum { +@@ -136,8 +136,10 @@ enum { OPT_UTC = (1 << 2), /* u */ OPT_DATE = (1 << 3), /* d */ OPT_REFERENCE = (1 << 4), /* r */ -- OPT_TIMESPEC = (1 << 5) * ENABLE_FEATURE_DATE_ISOFMT, /* I */ -- OPT_HINT = (1 << 6) * ENABLE_FEATURE_DATE_ISOFMT, /* D */ +- OPT_ISO8601 = (1 << 5) * ENABLE_FEATURE_DATE_ISOFMT, /* I */ +- OPT_STR2DT = (1 << 6) * ENABLE_FEATURE_DATE_ISOFMT, /* D */ + OPT_SECONDS = (1 << 5), /* S */ -+ OPT_UPTIME = (1 << 6), /* U */ -+ OPT_TIMESPEC = (1 << 7) * ENABLE_FEATURE_DATE_ISOFMT, /* I */ -+ OPT_HINT = (1 << 8) * ENABLE_FEATURE_DATE_ISOFMT, /* D */ ++ OPT_UPTIME = (1 << 6), /* U */ ++ OPT_ISO8601 = (1 << 7) * ENABLE_FEATURE_DATE_ISOFMT, /* I */ ++ OPT_STR2DT = (1 << 8) * ENABLE_FEATURE_DATE_ISOFMT, /* D */ }; #if ENABLE_LONG_OPTS -@@ -192,7 +195,7 @@ int date_main(int argc UNUSED_PARAM, char **argv) +@@ -174,7 +176,7 @@ int date_main(int argc UNUSED_PARAM, char **argv) char *isofmt_arg = NULL; opt = getopt32long(argv, "^" @@ -60,7 +54,7 @@ index 77a7d13..ffb46ce 100644 IF_FEATURE_DATE_ISOFMT("I::D:") "\0" "d--s:s--d" -@@ -269,6 +272,14 @@ int date_main(int argc UNUSED_PARAM, char **argv) +@@ -252,6 +254,14 @@ int date_main(int argc UNUSED_PARAM, char **argv) * drop a mail to project mailing list please */ #endif @@ -75,8 +69,8 @@ index 77a7d13..ffb46ce 100644 } else { #if ENABLE_FEATURE_DATE_NANO clock_gettime(CLOCK_REALTIME, &ts); -@@ -292,6 +303,9 @@ int date_main(int argc UNUSED_PARAM, char **argv) - if (ENABLE_FEATURE_DATE_ISOFMT && (opt & OPT_HINT)) { +@@ -275,6 +285,9 @@ int date_main(int argc UNUSED_PARAM, char **argv) + if (ENABLE_FEATURE_DATE_ISOFMT && (opt & OPT_STR2DT)) { if (strptime(date_str, fmt_str2dt, &tm_time) == NULL) bb_error_msg_and_die(bb_msg_invalid_date, date_str); + } else if ( opt & OPT_SECONDS ) { @@ -85,12 +79,12 @@ index 77a7d13..ffb46ce 100644 } else { parse_datestr(date_str, &tm_time); } -@@ -333,6 +347,8 @@ int date_main(int argc UNUSED_PARAM, char **argv) - strcpy(fmt_dt2str, "%a, %d %b %Y %H:%M:%S "); - i = sizeof("%a, %d %b %Y %H:%M:%S ")-1; - goto format_utc; -+ } else if ( opt & OPT_SECONDS ) { -+ fmt_dt2str = (char*)"%s"; +@@ -326,6 +339,8 @@ int date_main(int argc UNUSED_PARAM, char **argv) + if (ENABLE_LOCALE_SUPPORT) + setlocale(LC_TIME, "C"); + fmt_dt2str = (char*)"%a, %d %b %Y %H:%M:%S %z"; ++ } else if ( opt & OPT_SECONDS ) { ++ fmt_dt2str = (char*)"%s"; } else { /* default case */ fmt_dt2str = (char*)"%a %b %e %H:%M:%S %Z %Y"; } diff --git a/meta-webos/recipes-core/busybox/busybox/0003-libedit-check-for-null-before-passing-cmdedit_prompt.patch b/meta-webos/recipes-core/busybox/busybox/0003-libedit-check-for-null-before-passing-cmdedit_prompt.patch index 95b86b0ce..d44641c3c 100644 --- a/meta-webos/recipes-core/busybox/busybox/0003-libedit-check-for-null-before-passing-cmdedit_prompt.patch +++ b/meta-webos/recipes-core/busybox/busybox/0003-libedit-check-for-null-before-passing-cmdedit_prompt.patch @@ -1,20 +1,19 @@ -From 781fc27dfd515b4233322bad3669dde5a1409f4d Mon Sep 17 00:00:00 2001 +From 5a8682957534e7abd9f1bcfbe37c255cc9b73477 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 6 Nov 2017 17:24:53 +0000 Subject: [PATCH] libedit: check for null before passing cmdedit_prompt to fputs Signed-off-by: Martin Jansa - --- libbb/lineedit.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libbb/lineedit.c b/libbb/lineedit.c -index fbabc6c..c47bddc 100644 +index 75de88e77..d5fe5120a 100644 --- a/libbb/lineedit.c +++ b/libbb/lineedit.c -@@ -452,7 +452,9 @@ static void beep(void) +@@ -460,7 +460,9 @@ static void beep(void) */ static void put_prompt_custom(bool is_full) { From 4e00908bcec1591c548ef00026a70a0a4e0a3ff3 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sat, 27 Feb 2021 09:01:32 -0800 Subject: [PATCH 0584/2022] rpi: gstreamer1.0-omx: update 0003-decrease-ranking-of-omxh264dec.patch to apply cleanly :Release Notes: Adjust after 0001-config-files-path.patch was dropped in meta-raspberrypi: https://github.com/agherzan/meta-raspberrypi/commit/0a89fb8dac35d12fa94a6598e04847e06645fe76 :Detailed Notes: Fixes: ERROR: gstreamer1.0-omx-1.18.3-r0 do_patch: Fuzz detected: Applying patch 0003-decrease-ranking-of-omxh264dec.patch patching file config/rpi/gstomx.conf Hunk #1 succeeded at 29 with fuzz 2. The context lines in the patches can be updated with devtool: devtool modify gstreamer1.0-omx devtool finish --force-patch-refresh gstreamer1.0-omx Don't forget to review changes done by devtool! ERROR: gstreamer1.0-omx-1.18.3-r0 do_patch: QA Issue: Patch log indicates that patches do not apply cleanly. [patch-fuzz] :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: Ie45d8fb00f6072e467b5ae0c258cee32640270df --- .../0003-decrease-ranking-of-omxh264dec.patch | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-decrease-ranking-of-omxh264dec.patch b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-decrease-ranking-of-omxh264dec.patch index c5ccf7f54..2332ea9c2 100644 --- a/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-decrease-ranking-of-omxh264dec.patch +++ b/meta-webos-raspberrypi/recipes-multimedia/gstreamer/gstreamer1.0-omx/0003-decrease-ranking-of-omxh264dec.patch @@ -1,4 +1,4 @@ -From a0f0d71c80cb77c7fca5660f28ad49067405de7d Mon Sep 17 00:00:00 2001 +From 9be0402b1aaac99c781ba83ddb6760535aee217a Mon Sep 17 00:00:00 2001 From: "divvya.rosna" Date: Thu, 13 Aug 2020 05:42:37 +0000 Subject: [PATCH] rpi : mesa=webosrpi3 webruntime=webosrpi6 @@ -8,12 +8,12 @@ Subject: [PATCH] rpi : mesa=webosrpi3 webruntime=webosrpi6 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/config/rpi/gstomx.conf b/config/rpi/gstomx.conf -index 2508dae..da24611 100644 +index d3ea56a..e3c35ad 100644 --- a/config/rpi/gstomx.conf +++ b/config/rpi/gstomx.conf @@ -29,7 +29,7 @@ hacks=no-component-role type-name=GstOMXH264Dec - core-name=/usr/lib/libopenmaxil.so + core-name=/opt/vc/lib/libopenmaxil.so component-name=OMX.broadcom.video_decode -rank=257 +rank=256 From a7c558703197b041e9dc609aab20060731a05bd4 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 15 Mar 2021 09:30:21 -0700 Subject: [PATCH 0585/2022] go-dep: remove unnecessary bbappend :Release Notes: go-dep was removed in: https://git.openembedded.org/openembedded-core/commit/?id=1e7ed44d87034446f1d07692c9378c3b0a8a9dd3 :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I70ca7ba63bd215be0dcbdd4959a09b0759966008 --- meta-webos/recipes-devtools/go/go-dep_%.bbappend | 7 ------- 1 file changed, 7 deletions(-) delete mode 100644 meta-webos/recipes-devtools/go/go-dep_%.bbappend diff --git a/meta-webos/recipes-devtools/go/go-dep_%.bbappend b/meta-webos/recipes-devtools/go/go-dep_%.bbappend deleted file mode 100644 index 08bcea862..000000000 --- a/meta-webos/recipes-devtools/go/go-dep_%.bbappend +++ /dev/null @@ -1,7 +0,0 @@ -# Copyright (c) 2017-2022 LG Electronics, Inc. - -EXTENDPRAUTO:append = "webos1" - -VIRTUAL-RUNTIME_bash ?= "bash" -RDEPENDS:${PN}-dev:append:class-target = " ${VIRTUAL-RUNTIME_bash}" -RDEPENDS:${PN}-dev:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" From ea66a25adb36a8445f83298fe73d84c45212ab14 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 1 Apr 2021 03:26:40 -0700 Subject: [PATCH 0586/2022] webos.inc: update DEFAULT_WARN_QA to include native-last :Release Notes: :Detailed Notes: Add native-last to ERROR_QA. Default ERROR_QA now contains more entries from WARN_QA since: https://git.openembedded.org/openembedded-core/commit/?id=55a0197fe62577fd51d41d87822e6d64d85c7680 :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I7a95699f08b714dbc151b4ce838a762f2651584b --- meta-webos/conf/distro/include/webos.inc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/conf/distro/include/webos.inc b/meta-webos/conf/distro/include/webos.inc index 490a63308..f83ba3e79 100644 --- a/meta-webos/conf/distro/include/webos.inc +++ b/meta-webos/conf/distro/include/webos.inc @@ -301,7 +301,7 @@ DEFAULT_WARN_QA = "\ infodir build-deps src-uri-bad symlink-to-sysroot multilib \ invalid-packageconfig host-user-contaminated uppercase-pn patch-fuzz \ mime mime-xdg unlisted-pkg-lics unhandled-features-check \ - missing-update-alternatives \ + missing-update-alternatives native-last \ " ERROR_QA:append = " ${DEFAULT_WARN_QA}" WARN_QA:remove = "${DEFAULT_WARN_QA}" From 2509f73194076ca7d6ac654b5911277cc56650a0 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 21 Jul 2021 08:19:53 -0700 Subject: [PATCH 0587/2022] systemd-serialgetty: fix LIC_FILES_CHKSUM as it is in oe-core hardknott branch :Release Notes: :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I3f410b20b705eb8253515ced3a38b22e6c62292f --- .../recipes-core/systemd/systemd-serialgetty.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-serialgetty.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-serialgetty.bb index ad413e022..fd888bb83 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-serialgetty.bb +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-serialgetty.bb @@ -1,7 +1,7 @@ SUMMARY = "Serial terminal support for systemd" HOMEPAGE = "https://www.freedesktop.org/wiki/Software/systemd/" LICENSE = "GPL-2.0-or-later" -LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0;md5=801f80980d171dd6425610833a22dbe6" +LIC_FILES_CHKSUM = "file://${COREBASE}/meta/files/common-licenses/GPL-2.0-only;md5=801f80980d171dd6425610833a22dbe6" PR = "r5" From 9b329b060f9068129da41aacd5a7c621e49ebf25 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 3 Jun 2022 07:50:25 +0000 Subject: [PATCH 0588/2022] flatbuffers: remove unnecessary bbappend :Release Notes: It was backported from this meta-oe commit in hardknott: https://git.openembedded.org/meta-openembedded/commit/?id=9df2c2daa854fb0cd3884d6f65196116394da588 :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I508c11863b4b87bc1dbe1884214f500790cb1426 --- .../flatbuffers/flatbuffers_1.12.0.bbappend | 21 ------------------- 1 file changed, 21 deletions(-) delete mode 100644 meta-webos/recipes-devtools/flatbuffers/flatbuffers_1.12.0.bbappend diff --git a/meta-webos/recipes-devtools/flatbuffers/flatbuffers_1.12.0.bbappend b/meta-webos/recipes-devtools/flatbuffers/flatbuffers_1.12.0.bbappend deleted file mode 100644 index 3b880247c..000000000 --- a/meta-webos/recipes-devtools/flatbuffers/flatbuffers_1.12.0.bbappend +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2022 LG Electronics, Inc. - -inherit python3-dir - -PACKAGE_BEFORE_PN += "${PN}-${PYTHON_PN}" - -RDEPENDS:${PN}-${PYTHON_PN} = "${PN}" - -do_install:append() { - install -d ${D}${PYTHON_SITEPACKAGES_DIR} - cp -rf ${S}/python/flatbuffers ${D}${PYTHON_SITEPACKAGES_DIR} -} - -FILES:${PN}-dev = "" - -INSANE_SKIP:${PN} = "dev-so" -INSANE_SKIP:${PN}-dev += "dev-elf" -FILES:${PN} += "${libdir}/* ${includedir}/*" -FILES:${PN}-${PYTHON_PN} = "${PYTHON_SITEPACKAGES_DIR}" - - From 1b30105eec3b7f71eba57b3f5034fb82d6a91726 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 3 Jun 2022 12:38:02 +0000 Subject: [PATCH 0589/2022] gcc-source: update patches to apply on 10.3 version :Release Notes: Some patches are already included in 10.3 version used in Hardknott :Detailed Notes: 0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch: 8f6b7c97960 arm: Clear canary value after stack_protect_test [PR96191] 0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch: 10a33235cce testsuite: Fix gcc.target/arm/stack-protector-1.c for Cortex-M 0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch: f8bc014aa47 arm: Fix -mpure-code support/-mslow-flash-data for armv8-m.base [PR94538] 0004-arm-Add-support-for-Neoverse-V1-CPU.patch: 384274fb7bf arm: Add support for Neoverse V1 CPU 0005-arm-Add-support-for-Neoverse-N2-CPU.patch: d7e8411f6a3 arm: Add support for Neoverse N2 CPU 0006-arm-Add-missing-part-number-for-Neoverse-V1.patch: 1fce1d3eb3a arm: Add missing part number for Neoverse V1 0007-arm-Fix-up-neon_vector_mem_operand-PR97528.patch: 05a3ab76e03 arm: Fix up neon_vector_mem_operand [PR97528] 0011-arm-Add-nomve-and-nomve.fp-options-to-mcpu-cortex-m5.patch b3bfb38f89c arm: Add +nomve and +nomve.fp options to -mcpu=cortex-m55 :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I4a14797f643eacb9f93fc90ce0be966afaf3c233 --- .../gcc/gcc-source_%.bbappend | 16 +- ...-value-after-stack_protect_test-PR96.patch | 162 ------ ...-opts_set-in-arm_configure_build_ta.patch} | 14 +- ...ch_name-is-always-set-for-the-build.patch} | 6 +- ...c.target-arm-stack-protector-1.c-for.patch | 51 -- ...gure-globals-in-arm_configure_build.patch} | 6 +- ...de-support-mslow-flash-data-for-armv.patch | 161 ------ ...-arm-Add-support-for-Neoverse-V1-CPU.patch | 88 ---- ...bler-architecture-directives-PR1017.patch} | 16 +- ...-arm-Add-support-for-Neoverse-N2-CPU.patch | 91 ---- ...-missing-part-number-for-Neoverse-V1.patch | 31 -- ...x-up-neon_vector_mem_operand-PR97528.patch | 86 ---- ...d-nomve.fp-options-to-mcpu-cortex-m5.patch | 481 ------------------ 13 files changed, 25 insertions(+), 1184 deletions(-) delete mode 100644 meta-webos/recipes-devtools/gcc/gcc/0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch rename meta-webos/recipes-devtools/gcc/gcc/{0008-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch => 0001-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch} (94%) rename meta-webos/recipes-devtools/gcc/gcc/{0009-arm-ensure-the-arch_name-is-always-set-for-the-build.patch => 0002-arm-ensure-the-arch_name-is-always-set-for-the-build.patch} (90%) delete mode 100644 meta-webos/recipes-devtools/gcc/gcc/0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch rename meta-webos/recipes-devtools/gcc/gcc/{0010-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch => 0003-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch} (94%) delete mode 100644 meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch delete mode 100644 meta-webos/recipes-devtools/gcc/gcc/0004-arm-Add-support-for-Neoverse-V1-CPU.patch rename meta-webos/recipes-devtools/gcc/gcc/{0012-arm-reorder-assembler-architecture-directives-PR1017.patch => 0004-arm-reorder-assembler-architecture-directives-PR1017.patch} (98%) delete mode 100644 meta-webos/recipes-devtools/gcc/gcc/0005-arm-Add-support-for-Neoverse-N2-CPU.patch delete mode 100644 meta-webos/recipes-devtools/gcc/gcc/0006-arm-Add-missing-part-number-for-Neoverse-V1.patch delete mode 100644 meta-webos/recipes-devtools/gcc/gcc/0007-arm-Fix-up-neon_vector_mem_operand-PR97528.patch delete mode 100644 meta-webos/recipes-devtools/gcc/gcc/0011-arm-Add-nomve-and-nomve.fp-options-to-mcpu-cortex-m5.patch diff --git a/meta-webos/recipes-devtools/gcc/gcc-source_%.bbappend b/meta-webos/recipes-devtools/gcc/gcc-source_%.bbappend index caec25182..f732bec63 100644 --- a/meta-webos/recipes-devtools/gcc/gcc-source_%.bbappend +++ b/meta-webos/recipes-devtools/gcc/gcc-source_%.bbappend @@ -5,16 +5,8 @@ EXTENDPRAUTO:append = "webos2" FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI:append = " \ - file://0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch \ - file://0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch \ - file://0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch \ - file://0004-arm-Add-support-for-Neoverse-V1-CPU.patch \ - file://0005-arm-Add-support-for-Neoverse-N2-CPU.patch \ - file://0006-arm-Add-missing-part-number-for-Neoverse-V1.patch \ - file://0007-arm-Fix-up-neon_vector_mem_operand-PR97528.patch \ - file://0008-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch \ - file://0009-arm-ensure-the-arch_name-is-always-set-for-the-build.patch \ - file://0010-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch \ - file://0011-arm-Add-nomve-and-nomve.fp-options-to-mcpu-cortex-m5.patch \ - file://0012-arm-reorder-assembler-architecture-directives-PR1017.patch \ + file://0001-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch \ + file://0002-arm-ensure-the-arch_name-is-always-set-for-the-build.patch \ + file://0003-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch \ + file://0004-arm-reorder-assembler-architecture-directives-PR1017.patch \ " diff --git a/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch b/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch deleted file mode 100644 index b4b5f36a4..000000000 --- a/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Clear-canary-value-after-stack_protect_test-PR96.patch +++ /dev/null @@ -1,162 +0,0 @@ -From f31142ed4a1a9b6d77d15d6e8284e6577c6c5a73 Mon Sep 17 00:00:00 2001 -From: Richard Sandiford -Date: Fri, 7 Aug 2020 12:17:37 +0100 -Subject: [PATCH] arm: Clear canary value after stack_protect_test [PR96191] - -The stack_protect_test patterns were leaving the canary value in the -temporary register, meaning that it was often still in registers on -return from the function. An attacker might therefore have been -able to use it to defeat stack-smash protection for a later function. - -gcc/ - PR target/96191 - * config/arm/arm.md (arm_stack_protect_test_insn): Zero out - operand 2 after use. - * config/arm/thumb1.md (thumb1_stack_protect_test_insn): Likewise. - -gcc/testsuite/ - * gcc.target/arm/stack-protector-1.c: New test. - * gcc.target/arm/stack-protector-2.c: Likewise. - -(cherry picked from commit 6a3f3e08723063ea2dadb7ddf503f02972a724e2) -Upstream-Status: Backport [9.4.0 3e40be9cc92d3fa117be7f4fab07cedeed8361a2 == 11.1.0 6a3f3e08723063ea2dadb7ddf503f02972a724e2] ---- - gcc/config/arm/arm.md | 6 +- - gcc/config/arm/thumb1.md | 8 ++- - .../gcc.target/arm/stack-protector-1.c | 63 +++++++++++++++++++ - .../gcc.target/arm/stack-protector-2.c | 6 ++ - 4 files changed, 78 insertions(+), 5 deletions(-) - create mode 100644 gcc/testsuite/gcc.target/arm/stack-protector-1.c - create mode 100644 gcc/testsuite/gcc.target/arm/stack-protector-2.c - -diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md -index a6a31f8f4ef..dd13c77e889 100644 ---- a/gcc/config/arm/arm.md -+++ b/gcc/config/arm/arm.md -@@ -9320,6 +9320,8 @@ - [(set_attr "arch" "t1,32")] - ) - -+;; DO NOT SPLIT THIS PATTERN. It is important for security reasons that the -+;; canary value does not live beyond the end of this sequence. - (define_insn "arm_stack_protect_test_insn" - [(set (reg:CC_Z CC_REGNUM) - (compare:CC_Z (unspec:SI [(match_operand:SI 1 "memory_operand" "m,m") -@@ -9329,8 +9331,8 @@ - (clobber (match_operand:SI 0 "register_operand" "=&l,&r")) - (clobber (match_dup 2))] - "TARGET_32BIT" -- "ldr\t%0, [%2]\;ldr\t%2, %1\;eors\t%0, %2, %0" -- [(set_attr "length" "8,12") -+ "ldr\t%0, [%2]\;ldr\t%2, %1\;eors\t%0, %2, %0\;mov\t%2, #0" -+ [(set_attr "length" "12,16") - (set_attr "conds" "set") - (set_attr "type" "multiple") - (set_attr "arch" "t,32")] -diff --git a/gcc/config/arm/thumb1.md b/gcc/config/arm/thumb1.md -index 24861635fa5..0ff819090d9 100644 ---- a/gcc/config/arm/thumb1.md -+++ b/gcc/config/arm/thumb1.md -@@ -2020,6 +2020,8 @@ - [(set_attr "type" "mov_reg")] - ) - -+;; DO NOT SPLIT THIS PATTERN. It is important for security reasons that the -+;; canary value does not live beyond the end of this sequence. - (define_insn "thumb1_stack_protect_test_insn" - [(set (match_operand:SI 0 "register_operand" "=&l") - (unspec:SI [(match_operand:SI 1 "memory_operand" "m") -@@ -2027,9 +2029,9 @@ - UNSPEC_SP_TEST)) - (clobber (match_dup 2))] - "TARGET_THUMB1" -- "ldr\t%0, [%2]\;ldr\t%2, %1\;eors\t%0, %2, %0" -- [(set_attr "length" "8") -- (set_attr "conds" "set") -+ "ldr\t%0, [%2]\;ldr\t%2, %1\;eors\t%0, %2, %0\;movs\t%2, #0" -+ [(set_attr "length" "10") -+ (set_attr "conds" "clob") - (set_attr "type" "multiple")] - ) - -diff --git a/gcc/testsuite/gcc.target/arm/stack-protector-1.c b/gcc/testsuite/gcc.target/arm/stack-protector-1.c -new file mode 100644 -index 00000000000..b03ea14c4e2 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/arm/stack-protector-1.c -@@ -0,0 +1,63 @@ -+/* { dg-do run } */ -+/* { dg-require-effective-target fstack_protector } */ -+/* { dg-options "-fstack-protector-all -O2" } */ -+ -+extern volatile long *stack_chk_guard_ptr; -+ -+volatile long * -+get_ptr (void) -+{ -+ return stack_chk_guard_ptr; -+} -+ -+void __attribute__ ((noipa)) -+f (void) -+{ -+ volatile int x; -+ x = 1; -+ x += 1; -+} -+ -+#define CHECK(REG) "\tcmp\tr0, " #REG "\n\tbeq\t1f\n" -+ -+asm ( -+" .data\n" -+" .align 3\n" -+" .globl stack_chk_guard_ptr\n" -+"stack_chk_guard_ptr:\n" -+" .word __stack_chk_guard\n" -+" .weak __stack_chk_guard\n" -+"__stack_chk_guard:\n" -+" .word 0xdead4321\n" -+" .text\n" -+" .globl main\n" -+" .type main, %function\n" -+"main:\n" -+" bl get_ptr\n" -+" str r0, [sp, #-8]!\n" -+" bl f\n" -+" str r0, [sp, #4]\n" -+" ldr r0, [sp]\n" -+" ldr r0, [r0]\n" -+ CHECK (r1) -+ CHECK (r2) -+ CHECK (r3) -+ CHECK (r4) -+ CHECK (r5) -+ CHECK (r6) -+ CHECK (r7) -+ CHECK (r8) -+ CHECK (r9) -+ CHECK (r10) -+ CHECK (r11) -+ CHECK (r12) -+ CHECK (r13) -+ CHECK (r14) -+" ldr r1, [sp, #4]\n" -+ CHECK (r1) -+" mov r0, #0\n" -+" b exit\n" -+"1:\n" -+" b abort\n" -+" .size main, .-main" -+); -diff --git a/gcc/testsuite/gcc.target/arm/stack-protector-2.c b/gcc/testsuite/gcc.target/arm/stack-protector-2.c -new file mode 100644 -index 00000000000..266c36fdbc6 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/arm/stack-protector-2.c -@@ -0,0 +1,6 @@ -+/* { dg-do run } */ -+/* { dg-require-effective-target fstack_protector } */ -+/* { dg-require-effective-target fpic } */ -+/* { dg-options "-fstack-protector-all -O2 -fpic" } */ -+ -+#include "stack-protector-1.c" diff --git a/meta-webos/recipes-devtools/gcc/gcc/0008-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch b/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch similarity index 94% rename from meta-webos/recipes-devtools/gcc/gcc/0008-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch rename to meta-webos/recipes-devtools/gcc/gcc/0001-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch index c9e44ffa4..8983a04a4 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0008-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch @@ -1,4 +1,4 @@ -From 18b0fb540b3d275ba31012fe5501b842f04b524b Mon Sep 17 00:00:00 2001 +From 866a0c9c2b4ffaa7b216f2927660927448a649b0 Mon Sep 17 00:00:00 2001 From: Richard Earnshaw Date: Thu, 27 May 2021 10:25:37 +0100 Subject: [PATCH] arm: Remove use of opts_set in arm_configure_build_target @@ -55,10 +55,10 @@ index 7468a20bd98..17b05567101 100644 /* Update macros if target_node changes. The global state will be restored diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h -index 33d162c3e00..e55e4d35c4d 100644 +index bbbf67180f6..fac68cee8da 100644 --- a/gcc/config/arm/arm-protos.h +++ b/gcc/config/arm/arm-protos.h -@@ -239,8 +239,7 @@ extern bool arm_change_mode_p (tree); +@@ -241,8 +241,7 @@ extern bool arm_change_mode_p (tree); extern tree arm_valid_target_attribute_tree (tree, struct gcc_options *, struct gcc_options *); extern void arm_configure_build_target (struct arm_build_target *, @@ -69,7 +69,7 @@ index 33d162c3e00..e55e4d35c4d 100644 extern void arm_options_perform_arch_sanity_checks (void); extern void arm_pr_long_calls (struct cpp_reader *); diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c -index e7d060ae21b..f91001e8433 100644 +index db37e2b8e71..083b9d4a342 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -3036,7 +3036,7 @@ arm_override_options_after_change (void) @@ -126,7 +126,7 @@ index e7d060ae21b..f91001e8433 100644 { arm_selected_tune = arm_parse_cpu_option_name (all_cores, "-mtune", opts->x_arm_tune_string); -@@ -3458,8 +3456,7 @@ arm_option_override (void) +@@ -3473,8 +3471,7 @@ arm_option_override (void) } cl_target_option_save (&opts, &global_options); @@ -136,7 +136,7 @@ index e7d060ae21b..f91001e8433 100644 #ifdef SUBTARGET_OVERRIDE_OPTIONS SUBTARGET_OVERRIDE_OPTIONS; -@@ -32334,10 +32331,8 @@ arm_can_inline_p (tree caller, tree callee) +@@ -32397,10 +32394,8 @@ arm_can_inline_p (tree caller, tree callee) caller_target.isa = sbitmap_alloc (isa_num_bits); callee_target.isa = sbitmap_alloc (isa_num_bits); @@ -149,7 +149,7 @@ index e7d060ae21b..f91001e8433 100644 if (!bitmap_subset_p (callee_target.isa, caller_target.isa)) can_inline = false; -@@ -32473,7 +32468,7 @@ arm_valid_target_attribute_tree (tree args, struct gcc_options *opts, +@@ -32536,7 +32531,7 @@ arm_valid_target_attribute_tree (tree args, struct gcc_options *opts, return NULL_TREE; cl_target_option_save (&cl_opts, opts); diff --git a/meta-webos/recipes-devtools/gcc/gcc/0009-arm-ensure-the-arch_name-is-always-set-for-the-build.patch b/meta-webos/recipes-devtools/gcc/gcc/0002-arm-ensure-the-arch_name-is-always-set-for-the-build.patch similarity index 90% rename from meta-webos/recipes-devtools/gcc/gcc/0009-arm-ensure-the-arch_name-is-always-set-for-the-build.patch rename to meta-webos/recipes-devtools/gcc/gcc/0002-arm-ensure-the-arch_name-is-always-set-for-the-build.patch index 0122a49fd..dd15a2500 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0009-arm-ensure-the-arch_name-is-always-set-for-the-build.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0002-arm-ensure-the-arch_name-is-always-set-for-the-build.patch @@ -1,4 +1,4 @@ -From 59648e90113bef49ac6bf2b0b1891958c6cad382 Mon Sep 17 00:00:00 2001 +From e42fadb20699cfe81f6853c5638269bcd1acb836 Mon Sep 17 00:00:00 2001 From: Richard Earnshaw Date: Mon, 26 Jul 2021 17:07:14 +0100 Subject: [PATCH] arm: ensure the arch_name is always set for the build target @@ -24,10 +24,10 @@ Upstream-Status: Backport [releases/gcc-9 (9.5.0) 140a8089000ffa340b2f188be8abec 1 file changed, 2 insertions(+) diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c -index f91001e8433..70bc258f9ce 100644 +index 083b9d4a342..95ffb966cad 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c -@@ -3413,6 +3413,8 @@ arm_configure_build_target (struct arm_build_target *target, +@@ -3427,6 +3427,8 @@ arm_configure_build_target (struct arm_build_target *target, const cpu_tune *tune_data = &all_tunes[arm_selected_tune - all_cores]; /* Finish initializing the target structure. */ diff --git a/meta-webos/recipes-devtools/gcc/gcc/0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch b/meta-webos/recipes-devtools/gcc/gcc/0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch deleted file mode 100644 index 0db302961..000000000 --- a/meta-webos/recipes-devtools/gcc/gcc/0002-testsuite-Fix-gcc.target-arm-stack-protector-1.c-for.patch +++ /dev/null @@ -1,51 +0,0 @@ -From d037e48dff782bdc98cc74c3d952e354ea32588d Mon Sep 17 00:00:00 2001 -From: Christophe Lyon -Date: Wed, 12 Aug 2020 09:22:38 +0000 -Subject: [PATCH] testsuite: Fix gcc.target/arm/stack-protector-1.c for - Cortex-M - -The stack-protector-1.c test fails when compiled for Cortex-M: -- for Cortex-M0/M1, str r0, [sp #-8]! is not supported -- for Cortex-M3/M4..., the assembler complains that "use of r13 is - deprecated" - -This patch replaces the str instruction with - sub sp, sp, #8 - str r0, [sp] -and removes the check for r13, which is unlikely to leak the canary -value. - -2020-08-11 Christophe Lyon - - gcc/testsuite/ - * gcc.target/arm/stack-protector-1.c: Adapt code to Cortex-M - restrictions. - -(cherry picked from commit 6606fdc0aad85cbca1bb58e1b2ffe05611aabd7a) -Upstream-Status: Backport [9.4.0 071cfcbc065569dd2384f03634f991afefa9fbea == 11.1.0 6606fdc0aad85cbca1bb58e1b2ffe05611aabd7a] ---- - gcc/testsuite/gcc.target/arm/stack-protector-1.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/gcc/testsuite/gcc.target/arm/stack-protector-1.c b/gcc/testsuite/gcc.target/arm/stack-protector-1.c -index b03ea14c4e2..8d28b0a847c 100644 ---- a/gcc/testsuite/gcc.target/arm/stack-protector-1.c -+++ b/gcc/testsuite/gcc.target/arm/stack-protector-1.c -@@ -34,7 +34,8 @@ asm ( - " .type main, %function\n" - "main:\n" - " bl get_ptr\n" --" str r0, [sp, #-8]!\n" -+" sub sp, sp, #8\n" -+" str r0, [sp]\n" - " bl f\n" - " str r0, [sp, #4]\n" - " ldr r0, [sp]\n" -@@ -51,7 +52,6 @@ asm ( - CHECK (r10) - CHECK (r11) - CHECK (r12) -- CHECK (r13) - CHECK (r14) - " ldr r1, [sp, #4]\n" - CHECK (r1) diff --git a/meta-webos/recipes-devtools/gcc/gcc/0010-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch b/meta-webos/recipes-devtools/gcc/gcc/0003-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch similarity index 94% rename from meta-webos/recipes-devtools/gcc/gcc/0010-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch rename to meta-webos/recipes-devtools/gcc/gcc/0003-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch index 92ef9aa49..f14fb4928 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0010-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0003-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch @@ -1,4 +1,4 @@ -From 638d471b646189a7138c3ad76e9078fc67c98bb3 Mon Sep 17 00:00:00 2001 +From 02511e81cf73cf05ffafade72d25d0fd32970311 Mon Sep 17 00:00:00 2001 From: Richard Earnshaw Date: Tue, 27 Jul 2021 15:44:57 +0100 Subject: [PATCH] arm: Don't reconfigure globals in arm_configure_build_target @@ -47,7 +47,7 @@ index 17b05567101..36b12215243 100644 /* Update macros if target_node changes. The global state will be restored diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c -index 70bc258f9ce..689a6bb82a6 100644 +index 95ffb966cad..c151fdc84e4 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -3058,6 +3058,7 @@ arm_option_restore (struct gcc_options *opts, struct cl_target_option *ptr) @@ -58,7 +58,7 @@ index 70bc258f9ce..689a6bb82a6 100644 } /* Reset options between modes that the user has specified. */ -@@ -3422,7 +3423,6 @@ arm_configure_build_target (struct arm_build_target *target, +@@ -3436,7 +3437,6 @@ arm_configure_build_target (struct arm_build_target *target, target->tune_flags = tune_data->tune_flags; target->tune = tune_data->tune; target->tune_core = tune_data->scheduler; diff --git a/meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch b/meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch deleted file mode 100644 index 885c569ed..000000000 --- a/meta-webos/recipes-devtools/gcc/gcc/0003-arm-Fix-mpure-code-support-mslow-flash-data-for-armv.patch +++ /dev/null @@ -1,161 +0,0 @@ -From 52be19875d4b8828655b89999e04d5de5874698e Mon Sep 17 00:00:00 2001 -From: Christophe Lyon -Date: Wed, 19 Aug 2020 09:02:21 +0000 -Subject: [PATCH] arm: Fix -mpure-code support/-mslow-flash-data for - armv8-m.base [PR94538] - -armv8-m.base (cortex-m23) has the movt instruction, so we need to -disable the define_split to generate a constant in this case, -otherwise we get incorrect insn constraints as described in PR94538. - -We also need to fix the pure-code alternative for thumb1_movsi_insn -because the assembler complains with instructions like -movs r0, #:upper8_15:1234 -(Internal error in md_apply_fix) -We now generate movs r0, 4 instead. - -2020-08-24 Christophe Lyon - - PR target/94538 - gcc/ - * config/arm/thumb1.md: Disable set-constant splitter when - TARGET_HAVE_MOVT. - (thumb1_movsi_insn): Fix -mpure-code - alternative. - - PR target/94538 - gcc/testsuite/ - * gcc.target/arm/pure-code/pr94538-1.c: New test. - * gcc.target/arm/pure-code/pr94538-2.c: New test. - -(cherry picked from commit 259d072067997ab8f55afcf735c91b6740fd0425) -Upstream-Status: Backport [9.4.0 967a5f8e585a5d499870903849c0fa06c326547a == 11.1.0 259d072067997ab8f55afcf735c91b6740fd0425] ---- - gcc/config/arm/thumb1.md | 66 +++++++++++++++---- - .../gcc.target/arm/pure-code/pr94538-1.c | 13 ++++ - .../gcc.target/arm/pure-code/pr94538-2.c | 12 ++++ - 3 files changed, 79 insertions(+), 12 deletions(-) - create mode 100644 gcc/testsuite/gcc.target/arm/pure-code/pr94538-1.c - create mode 100644 gcc/testsuite/gcc.target/arm/pure-code/pr94538-2.c - -diff --git a/gcc/config/arm/thumb1.md b/gcc/config/arm/thumb1.md -index 0ff819090d9..f0129db2c3e 100644 ---- a/gcc/config/arm/thumb1.md -+++ b/gcc/config/arm/thumb1.md -@@ -70,6 +70,7 @@ - "TARGET_THUMB1 - && arm_disable_literal_pool - && GET_CODE (operands[1]) == CONST_INT -+ && !TARGET_HAVE_MOVT - && !satisfies_constraint_I (operands[1])" - [(clobber (const_int 0))] - " -@@ -696,18 +697,59 @@ - "TARGET_THUMB1 - && ( register_operand (operands[0], SImode) - || register_operand (operands[1], SImode))" -- "@ -- movs %0, %1 -- movs %0, %1 -- movw %0, %1 -- # -- # -- ldmia\\t%1, {%0} -- stmia\\t%0, {%1} -- movs\\t%0, #:upper8_15:%1; lsls\\t%0, #8; adds\\t%0, #:upper0_7:%1; lsls\\t%0, #8; adds\\t%0, #:lower8_15:%1; lsls\\t%0, #8; adds\\t%0, #:lower0_7:%1 -- ldr\\t%0, %1 -- str\\t%1, %0 -- mov\\t%0, %1" -+{ -+ switch (which_alternative) -+ { -+ default: -+ case 0: return "movs\t%0, %1"; -+ case 1: return "movs\t%0, %1"; -+ case 2: return "movw\t%0, %1"; -+ case 3: return "#"; -+ case 4: return "#"; -+ case 5: return "ldmia\t%1, {%0}"; -+ case 6: return "stmia\t%0, {%1}"; -+ case 7: -+ /* pure-code alternative: build the constant byte by byte, -+ instead of loading it from a constant pool. */ -+ { -+ int i; -+ HOST_WIDE_INT op1 = INTVAL (operands[1]); -+ bool mov_done_p = false; -+ rtx ops[2]; -+ ops[0] = operands[0]; -+ -+ /* Emit upper 3 bytes if needed. */ -+ for (i = 0; i < 3; i++) -+ { -+ int byte = (op1 >> (8 * (3 - i))) & 0xff; -+ -+ if (byte) -+ { -+ ops[1] = GEN_INT (byte); -+ if (mov_done_p) -+ output_asm_insn ("adds\t%0, %1", ops); -+ else -+ output_asm_insn ("movs\t%0, %1", ops); -+ mov_done_p = true; -+ } -+ -+ if (mov_done_p) -+ output_asm_insn ("lsls\t%0, #8", ops); -+ } -+ -+ /* Emit lower byte if needed. */ -+ ops[1] = GEN_INT (op1 & 0xff); -+ if (!mov_done_p) -+ output_asm_insn ("movs\t%0, %1", ops); -+ else if (op1 & 0xff) -+ output_asm_insn ("adds\t%0, %1", ops); -+ return ""; -+ } -+ case 8: return "ldr\t%0, %1"; -+ case 9: return "str\t%1, %0"; -+ case 10: return "mov\t%0, %1"; -+ } -+} - [(set_attr "length" "2,2,4,4,4,2,2,14,2,2,2") - (set_attr "type" "mov_reg,mov_imm,mov_imm,multiple,multiple,load_4,store_4,alu_sreg,load_4,store_4,mov_reg") - (set_attr "pool_range" "*,*,*,*,*,*,*, *,1018,*,*") -diff --git a/gcc/testsuite/gcc.target/arm/pure-code/pr94538-1.c b/gcc/testsuite/gcc.target/arm/pure-code/pr94538-1.c -new file mode 100644 -index 00000000000..31061d5d445 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/arm/pure-code/pr94538-1.c -@@ -0,0 +1,13 @@ -+/* { dg-do compile } */ -+/* { dg-skip-if "skip override" { *-*-* } { "-mfloat-abi=hard" } { "" } } */ -+/* { dg-options "-mpure-code -mcpu=cortex-m23 -march=armv8-m.base -mthumb -mfloat-abi=soft" } */ -+ -+typedef int __attribute__ ((__vector_size__ (16))) V; -+ -+V v; -+ -+void -+foo (void) -+{ -+ v += (V){4095}; -+} -diff --git a/gcc/testsuite/gcc.target/arm/pure-code/pr94538-2.c b/gcc/testsuite/gcc.target/arm/pure-code/pr94538-2.c -new file mode 100644 -index 00000000000..c1789da6780 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/arm/pure-code/pr94538-2.c -@@ -0,0 +1,12 @@ -+/* { dg-do compile } */ -+/* { dg-options "-mpure-code" } */ -+ -+typedef int __attribute__ ((__vector_size__ (16))) V; -+ -+V v; -+ -+void -+foo (void) -+{ -+ v += (V){4095}; -+} diff --git a/meta-webos/recipes-devtools/gcc/gcc/0004-arm-Add-support-for-Neoverse-V1-CPU.patch b/meta-webos/recipes-devtools/gcc/gcc/0004-arm-Add-support-for-Neoverse-V1-CPU.patch deleted file mode 100644 index e68717220..000000000 --- a/meta-webos/recipes-devtools/gcc/gcc/0004-arm-Add-support-for-Neoverse-V1-CPU.patch +++ /dev/null @@ -1,88 +0,0 @@ -From 925f3b09a79c904c1435d50e8165633c867f76c9 Mon Sep 17 00:00:00 2001 -From: Alex Coplan -Date: Tue, 29 Sep 2020 10:06:42 +0100 -Subject: [PATCH] arm: Add support for Neoverse V1 CPU - -This patch backports the AArch32 support for Arm's Neoverse V1 CPU to -GCC 10. - -gcc/ChangeLog: - - * config/arm/arm-cpus.in (neoverse-v1): New. - * config/arm/arm-tables.opt: Regenerate. - * config/arm/arm-tune.md: Regenerate. - * doc/invoke.texi: Document AArch32 support for Neoverse V1. - -Upstream-Status: Backport [9.4.0 f6d4b96180adec4fc5ea34de6d268350b98bb4ab == 10.3.0 384274fb7bf81ee9ed1982ffef90eb725de93398 == 11.1.0 da13b7737662da11f8fefb28eaf4ed7c50c51767] ---- - gcc/config/arm/arm-cpus.in | 10 ++++++++++ - gcc/config/arm/arm-tables.opt | 3 +++ - gcc/config/arm/arm-tune.md | 4 ++-- - gcc/doc/invoke.texi | 6 +++--- - 4 files changed, 18 insertions(+), 5 deletions(-) - -diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in -index 728be500b80..b1fe48eb087 100644 ---- a/gcc/config/arm/arm-cpus.in -+++ b/gcc/config/arm/arm-cpus.in -@@ -1478,6 +1478,16 @@ begin cpu cortex-a76.cortex-a55 - costs cortex_a57 - end cpu cortex-a76.cortex-a55 - -+# Armv8.4 A-profile Architecture Processors -+begin cpu neoverse-v1 -+ cname neoversev1 -+ tune for cortex-a57 -+ tune flags LDSCHED -+ architecture armv8.4-a+fp16+bf16+i8mm -+ option crypto add FP_ARMv8 CRYPTO -+ costs cortex_a57 -+end cpu neoverse-v1 -+ - # V8 M-profile implementations. - begin cpu cortex-m23 - cname cortexm23 -diff --git a/gcc/config/arm/arm-tables.opt b/gcc/config/arm/arm-tables.opt -index ce356611861..1a7c3191784 100644 ---- a/gcc/config/arm/arm-tables.opt -+++ b/gcc/config/arm/arm-tables.opt -@@ -249,6 +249,9 @@ Enum(processor_type) String(cortex-a75.cortex-a55) Value( TARGET_CPU_cortexa75co - EnumValue - Enum(processor_type) String(cortex-a76.cortex-a55) Value( TARGET_CPU_cortexa76cortexa55) - -+EnumValue -+Enum(processor_type) String(neoverse-v1) Value( TARGET_CPU_neoversev1) -+ - EnumValue - Enum(processor_type) String(cortex-m23) Value( TARGET_CPU_cortexm23) - -diff --git a/gcc/config/arm/arm-tune.md b/gcc/config/arm/arm-tune.md -index 8ea9435c0c9..3874f42a26b 100644 ---- a/gcc/config/arm/arm-tune.md -+++ b/gcc/config/arm/arm-tune.md -@@ -46,6 +46,6 @@ - cortexa73cortexa53,cortexa55,cortexa75, - cortexa76,cortexa76ae,cortexa77, - neoversen1,cortexa75cortexa55,cortexa76cortexa55, -- cortexm23,cortexm33,cortexm35p, -- cortexm55,cortexr52" -+ neoversev1,cortexm23,cortexm33, -+ cortexm35p,cortexm55,cortexr52" - (const (symbol_ref "((enum attr_tune) arm_tune)"))) -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 772679444c9..3b082dc219a 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -18835,9 +18835,9 @@ Permissible names are: @samp{arm7tdmi}, @samp{arm7tdmi-s}, @samp{arm710t}, - @samp{cortex-m35p}, @samp{cortex-m55}, - @samp{cortex-m1.small-multiply}, @samp{cortex-m0.small-multiply}, - @samp{cortex-m0plus.small-multiply}, @samp{exynos-m1}, @samp{marvell-pj4}, --@samp{neoverse-n1}, @samp{xscale}, @samp{iwmmxt}, @samp{iwmmxt2}, --@samp{ep9312}, @samp{fa526}, @samp{fa626}, @samp{fa606te}, @samp{fa626te}, --@samp{fmp626}, @samp{fa726te}, @samp{xgene1}. -+@samp{neoverse-n1} @samp{neoverse-v1}, @samp{xscale}, @samp{iwmmxt}, -+@samp{iwmmxt2}, @samp{ep9312}, @samp{fa526}, @samp{fa626}, @samp{fa606te}, -+@samp{fa626te}, @samp{fmp626}, @samp{fa726te}, @samp{xgene1}. - - Additionally, this option can specify that GCC should tune the performance - of the code for a big.LITTLE system. Permissible names are: diff --git a/meta-webos/recipes-devtools/gcc/gcc/0012-arm-reorder-assembler-architecture-directives-PR1017.patch b/meta-webos/recipes-devtools/gcc/gcc/0004-arm-reorder-assembler-architecture-directives-PR1017.patch similarity index 98% rename from meta-webos/recipes-devtools/gcc/gcc/0012-arm-reorder-assembler-architecture-directives-PR1017.patch rename to meta-webos/recipes-devtools/gcc/gcc/0004-arm-reorder-assembler-architecture-directives-PR1017.patch index 94dbd4cc0..ace7ea836 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0012-arm-reorder-assembler-architecture-directives-PR1017.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0004-arm-reorder-assembler-architecture-directives-PR1017.patch @@ -1,4 +1,4 @@ -From 771887c40a0e51242b9e071467fd603174518a7e Mon Sep 17 00:00:00 2001 +From 4eb72551f63ecc71c753e4e30915315f846915a2 Mon Sep 17 00:00:00 2001 From: Richard Earnshaw Date: Thu, 29 Jul 2021 11:00:31 +0100 Subject: [PATCH] arm: reorder assembler architecture directives [PR101723] @@ -101,7 +101,7 @@ index db0b93f6bb7..660d2b2f4cd 100644 option sec add sec option vfpv3-d16 add VFPv3 FP_DBL diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c -index 6de875331b2..6f5196db2b8 100644 +index c151fdc84e4..60e29b233af 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -77,10 +77,6 @@ @@ -135,7 +135,7 @@ index 6de875331b2..6f5196db2b8 100644 /* There may be implied bits which we still need to enable. These are non-named features which are needed to complete other sets of features, but cannot be enabled from arm-cpus.in due to being shared between -@@ -27990,20 +27992,65 @@ arm_print_tune_info (void) +@@ -28039,20 +28041,65 @@ arm_print_tune_info (void) (int) current_tune->sched_autopref); } @@ -205,7 +205,7 @@ index 6de875331b2..6f5196db2b8 100644 if (!arch->common.extensions) return; -@@ -28029,13 +28076,12 @@ arm_print_asm_arch_directives () +@@ -28078,13 +28125,12 @@ arm_print_asm_arch_directives () && !TARGET_HAVE_MVE_FLOAT)) continue; @@ -224,7 +224,7 @@ index 6de875331b2..6f5196db2b8 100644 } } } -@@ -28045,46 +28091,23 @@ arm_file_start (void) +@@ -28094,46 +28140,23 @@ arm_file_start (void) { int val; @@ -280,7 +280,7 @@ index 6de875331b2..6f5196db2b8 100644 } if (print_tune_info) -@@ -28152,6 +28175,13 @@ arm_file_end (void) +@@ -28201,6 +28224,13 @@ arm_file_end (void) { int regno; @@ -294,7 +294,7 @@ index 6de875331b2..6f5196db2b8 100644 if (NEED_INDICATE_EXEC_STACK) /* Add .note.GNU-stack. */ file_end_indicate_exec_stack (); -@@ -32628,58 +32658,7 @@ arm_declare_function_name (FILE *stream, const char *name, tree decl) +@@ -32677,58 +32707,7 @@ arm_declare_function_name (FILE *stream, const char *name, tree decl) targ_options = TREE_TARGET_OPTION (target_option_current_node); gcc_assert (targ_options); @@ -354,7 +354,7 @@ index 6de875331b2..6f5196db2b8 100644 fprintf (stream, "\t.syntax unified\n"); -@@ -32697,17 +32676,6 @@ arm_declare_function_name (FILE *stream, const char *name, tree decl) +@@ -32746,17 +32725,6 @@ arm_declare_function_name (FILE *stream, const char *name, tree decl) else fprintf (stream, "\t.arm\n"); diff --git a/meta-webos/recipes-devtools/gcc/gcc/0005-arm-Add-support-for-Neoverse-N2-CPU.patch b/meta-webos/recipes-devtools/gcc/gcc/0005-arm-Add-support-for-Neoverse-N2-CPU.patch deleted file mode 100644 index 7b09caf8b..000000000 --- a/meta-webos/recipes-devtools/gcc/gcc/0005-arm-Add-support-for-Neoverse-N2-CPU.patch +++ /dev/null @@ -1,91 +0,0 @@ -From c5e9ec756e7bc6735a5228654fe54ce76ffd3140 Mon Sep 17 00:00:00 2001 -From: Alex Coplan -Date: Fri, 2 Oct 2020 16:06:15 +0100 -Subject: [PATCH] arm: Add support for Neoverse N2 CPU - -This patch backports the AArch32 support for Arm's Neoverse N2 CPU to -GCC 10. - -gcc/ChangeLog: - - * config/arm/arm-cpus.in (neoverse-n2): New. - * config/arm/arm-tables.opt: Regenerate. - * config/arm/arm-tune.md: Regenerate. - * doc/invoke.texi: Document support for Neoverse N2. - -Upstream-Status: Backport [9.4.0 54e50dc2d7633d1d5930f472aaeb4e52ba403ade == 10.3.0 d7e8411f6a333d4054894ad3b23f23415a525230 == 11.1.0 637ad78cdf4026234308973bb87839f10f3d39cf] ---- - gcc/config/arm/arm-cpus.in | 12 ++++++++++++ - gcc/config/arm/arm-tables.opt | 3 +++ - gcc/config/arm/arm-tune.md | 5 +++-- - gcc/doc/invoke.texi | 6 +++--- - 4 files changed, 21 insertions(+), 5 deletions(-) - -diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in -index b1fe48eb087..ca772bdcf6d 100644 ---- a/gcc/config/arm/arm-cpus.in -+++ b/gcc/config/arm/arm-cpus.in -@@ -1488,6 +1488,18 @@ begin cpu neoverse-v1 - costs cortex_a57 - end cpu neoverse-v1 - -+# Armv8.5 A-profile Architecture Processors -+begin cpu neoverse-n2 -+ cname neoversen2 -+ tune for cortex-a57 -+ tune flags LDSCHED -+ architecture armv8.5-a+fp16+bf16+i8mm -+ option crypto add FP_ARMv8 CRYPTO -+ costs cortex_a57 -+ vendor 41 -+ part 0xd49 -+end cpu neoverse-n2 -+ - # V8 M-profile implementations. - begin cpu cortex-m23 - cname cortexm23 -diff --git a/gcc/config/arm/arm-tables.opt b/gcc/config/arm/arm-tables.opt -index 1a7c3191784..c8f83b03b6f 100644 ---- a/gcc/config/arm/arm-tables.opt -+++ b/gcc/config/arm/arm-tables.opt -@@ -252,6 +252,9 @@ Enum(processor_type) String(cortex-a76.cortex-a55) Value( TARGET_CPU_cortexa76co - EnumValue - Enum(processor_type) String(neoverse-v1) Value( TARGET_CPU_neoversev1) - -+EnumValue -+Enum(processor_type) String(neoverse-n2) Value( TARGET_CPU_neoversen2) -+ - EnumValue - Enum(processor_type) String(cortex-m23) Value( TARGET_CPU_cortexm23) - -diff --git a/gcc/config/arm/arm-tune.md b/gcc/config/arm/arm-tune.md -index 3874f42a26b..f98f7ca9ae5 100644 ---- a/gcc/config/arm/arm-tune.md -+++ b/gcc/config/arm/arm-tune.md -@@ -46,6 +46,7 @@ - cortexa73cortexa53,cortexa55,cortexa75, - cortexa76,cortexa76ae,cortexa77, - neoversen1,cortexa75cortexa55,cortexa76cortexa55, -- neoversev1,cortexm23,cortexm33, -- cortexm35p,cortexm55,cortexr52" -+ neoversev1,neoversen2,cortexm23, -+ cortexm33,cortexm35p,cortexm55, -+ cortexr52" - (const (symbol_ref "((enum attr_tune) arm_tune)"))) -diff --git a/gcc/doc/invoke.texi b/gcc/doc/invoke.texi -index 3b082dc219a..1e53c965bdd 100644 ---- a/gcc/doc/invoke.texi -+++ b/gcc/doc/invoke.texi -@@ -18835,9 +18835,9 @@ Permissible names are: @samp{arm7tdmi}, @samp{arm7tdmi-s}, @samp{arm710t}, - @samp{cortex-m35p}, @samp{cortex-m55}, - @samp{cortex-m1.small-multiply}, @samp{cortex-m0.small-multiply}, - @samp{cortex-m0plus.small-multiply}, @samp{exynos-m1}, @samp{marvell-pj4}, --@samp{neoverse-n1} @samp{neoverse-v1}, @samp{xscale}, @samp{iwmmxt}, --@samp{iwmmxt2}, @samp{ep9312}, @samp{fa526}, @samp{fa626}, @samp{fa606te}, --@samp{fa626te}, @samp{fmp626}, @samp{fa726te}, @samp{xgene1}. -+@samp{neoverse-n1}, @samp{neoverse-n2}, @samp{neoverse-v1}, @samp{xscale}, -+@samp{iwmmxt}, @samp{iwmmxt2}, @samp{ep9312}, @samp{fa526}, @samp{fa626}, -+@samp{fa606te}, @samp{fa626te}, @samp{fmp626}, @samp{fa726te}, @samp{xgene1}. - - Additionally, this option can specify that GCC should tune the performance - of the code for a big.LITTLE system. Permissible names are: diff --git a/meta-webos/recipes-devtools/gcc/gcc/0006-arm-Add-missing-part-number-for-Neoverse-V1.patch b/meta-webos/recipes-devtools/gcc/gcc/0006-arm-Add-missing-part-number-for-Neoverse-V1.patch deleted file mode 100644 index 61a91e57e..000000000 --- a/meta-webos/recipes-devtools/gcc/gcc/0006-arm-Add-missing-part-number-for-Neoverse-V1.patch +++ /dev/null @@ -1,31 +0,0 @@ -From 958df3f3d694d38d66295878cd7d5902c5986531 Mon Sep 17 00:00:00 2001 -From: Alex Coplan -Date: Mon, 5 Oct 2020 13:47:51 +0100 -Subject: [PATCH] arm: Add missing part number for Neoverse V1 - -This patch adds vendor and part numbers which were missing from the -initial entry for Neoverse V1 in AArch32 GCC. - -gcc/ChangeLog: - - * config/arm/arm-cpus.in (neoverse-v1): Add missing vendor and - part numbers. - -Upstream-Status: Backport [9.4.0 6725de4e8376afefa7ee501ba7b31d74cbf4303d == 10.3.0 1fce1d3eb3a234e5386bc62cce1980d68018c753] ---- - gcc/config/arm/arm-cpus.in | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in -index ca772bdcf6d..d609113e969 100644 ---- a/gcc/config/arm/arm-cpus.in -+++ b/gcc/config/arm/arm-cpus.in -@@ -1486,6 +1486,8 @@ begin cpu neoverse-v1 - architecture armv8.4-a+fp16+bf16+i8mm - option crypto add FP_ARMv8 CRYPTO - costs cortex_a57 -+ vendor 41 -+ part 0xd40 - end cpu neoverse-v1 - - # Armv8.5 A-profile Architecture Processors diff --git a/meta-webos/recipes-devtools/gcc/gcc/0007-arm-Fix-up-neon_vector_mem_operand-PR97528.patch b/meta-webos/recipes-devtools/gcc/gcc/0007-arm-Fix-up-neon_vector_mem_operand-PR97528.patch deleted file mode 100644 index 07786229e..000000000 --- a/meta-webos/recipes-devtools/gcc/gcc/0007-arm-Fix-up-neon_vector_mem_operand-PR97528.patch +++ /dev/null @@ -1,86 +0,0 @@ -From 2a428274abb13124e6dc28b5e241044e80f4833f Mon Sep 17 00:00:00 2001 -From: Jakub Jelinek -Date: Fri, 20 Nov 2020 12:26:58 +0100 -Subject: [PATCH] arm: Fix up neon_vector_mem_operand [PR97528] - -The documentation for POST_MODIFY says: - Currently, the compiler can only handle second operands of the - form (plus (reg) (reg)) and (plus (reg) (const_int)), where - the first operand of the PLUS has to be the same register as - the first operand of the *_MODIFY. -The following testcase ICEs, because combine just attempts to simplify -things and ends up with -(post_modify (reg1) (plus (mult (reg2) (const_int 4)) (reg1)) -but the target predicates accept it, because they only verify -that POST_MODIFY's second operand is PLUS and the second operand -of the PLUS is a REG. - -The following patch fixes this by performing further verification that -the POST_MODIFY is in the form it should be. - -2020-11-20 Jakub Jelinek - - PR target/97528 - * config/arm/arm.c (neon_vector_mem_operand): For POST_MODIFY, require - first POST_MODIFY operand is a REG and is equal to the first operand - of PLUS. - - * gcc.target/arm/pr97528.c: New test. - -(cherry picked from commit 410b8f6f41920dad200cd709f9f3de8b840a995c) -Upstream-Status: Backport [9.4.0 320d8676c770124a4baffab2d9e82224c74964ed == 11.1.0 410b8f6f41920dad200cd709f9f3de8b840a995c] ---- - gcc/config/arm/arm.c | 4 +++- - gcc/testsuite/gcc.target/arm/pr97528.c | 28 ++++++++++++++++++++++++++ - 2 files changed, 31 insertions(+), 1 deletion(-) - create mode 100644 gcc/testsuite/gcc.target/arm/pr97528.c - -diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c -index a8825ee3ee4..e7d060ae21b 100644 ---- a/gcc/config/arm/arm.c -+++ b/gcc/config/arm/arm.c -@@ -13388,7 +13388,9 @@ neon_vector_mem_operand (rtx op, int type, bool strict) - /* Allow post-increment by register for VLDn */ - if (type == 2 && GET_CODE (ind) == POST_MODIFY - && GET_CODE (XEXP (ind, 1)) == PLUS -- && REG_P (XEXP (XEXP (ind, 1), 1))) -+ && REG_P (XEXP (XEXP (ind, 1), 1)) -+ && REG_P (XEXP (ind, 0)) -+ && rtx_equal_p (XEXP (ind, 0), XEXP (XEXP (ind, 1), 0))) - return true; - - /* Match: -diff --git a/gcc/testsuite/gcc.target/arm/pr97528.c b/gcc/testsuite/gcc.target/arm/pr97528.c -new file mode 100644 -index 00000000000..6cc59f2158c ---- /dev/null -+++ b/gcc/testsuite/gcc.target/arm/pr97528.c -@@ -0,0 +1,28 @@ -+/* PR target/97528 */ -+/* { dg-do compile } */ -+/* { dg-require-effective-target arm_neon_ok } */ -+/* { dg-options "-O1" } */ -+/* { dg-add-options arm_neon } */ -+ -+#include -+ -+typedef __simd64_int16_t T; -+typedef __simd64_uint16_t U; -+unsigned short c; -+int d; -+U e; -+ -+void -+foo (void) -+{ -+ unsigned short *dst = &c; -+ int g = d, b = 4; -+ U dc = e; -+ for (int h = 0; h < b; h++) -+ { -+ unsigned short *i = dst; -+ U j = dc; -+ vst1_s16 ((int16_t *) i, (T) j); -+ dst += g; -+ } -+} diff --git a/meta-webos/recipes-devtools/gcc/gcc/0011-arm-Add-nomve-and-nomve.fp-options-to-mcpu-cortex-m5.patch b/meta-webos/recipes-devtools/gcc/gcc/0011-arm-Add-nomve-and-nomve.fp-options-to-mcpu-cortex-m5.patch deleted file mode 100644 index 6eba2790d..000000000 --- a/meta-webos/recipes-devtools/gcc/gcc/0011-arm-Add-nomve-and-nomve.fp-options-to-mcpu-cortex-m5.patch +++ /dev/null @@ -1,481 +0,0 @@ -From fb21f578b5a419b899d3664df2052516973b2d10 Mon Sep 17 00:00:00 2001 -From: Joe Ramsay -Date: Tue, 6 Oct 2020 07:33:52 +0100 -Subject: [PATCH] arm: Add +nomve and +nomve.fp options to -mcpu=cortex-m55 - -This patch rearranges feature bits for MVE and FP to implement the -following flags for -mcpu=cortex-m55. - - - +nomve: equivalent to armv8.1-m.main+fp.dp+dsp. - - +nomve.fp: equivalent to armv8.1-m.main+mve+fp.dp (+dsp is implied by +mve). - - +nofp: equivalent to armv8.1-m.main+mve (+dsp is implied by +mve). - - +nodsp: equivalent to armv8.1-m.main+fp.dp. - -Combinations of the above: - - - +nomve+nofp: equivalent to armv8.1-m.main+dsp. - - +nodsp+nofp: equivalent to armv8.1-m.main. - -Due to MVE and FP sharing vfp_base, some new syntax was required in the CPU -description to implement the concept of 'implied bits'. These are non-named -features added to the ISA late, depending on whether one or more features which -depend on them are present. This means vfp_base can be present when only one of -MVE and FP is removed, but absent when both are removed. - -gcc/ChangeLog: - -2020-07-31 Joe Ramsay - - * config/arm/arm-cpus.in: - (ALL_FPU_INTERNAL): Remove vfp_base. - (VFPv2): Remove vfp_base. - (MVE): Remove vfp_base. - (vfp_base): Redefine as implied bit dependent on MVE or FP - (cortex-m55): Add flags to disable MVE, MVE FP, FP and DSP extensions. - * config/arm/arm.c (arm_configure_build_target): Add implied bits to ISA. - * config/arm/parsecpu.awk: - (gen_isa): Print implied bits and their dependencies to ISA header. - (gen_data): Add parsing for implied feature bits. - -gcc/testsuite/ChangeLog: - - * gcc.target/arm/cortex-m55-nodsp-flag-hard.c: New test. - * gcc.target/arm/cortex-m55-nodsp-flag-softfp.c: New test. - * gcc.target/arm/cortex-m55-nodsp-nofp-flag-softfp.c: New test. - * gcc.target/arm/cortex-m55-nofp-flag-hard.c: New test. - * gcc.target/arm/cortex-m55-nofp-flag-softfp.c: New test. - * gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c: New test. - * gcc.target/arm/cortex-m55-nomve-flag-hard.c: New test. - * gcc.target/arm/cortex-m55-nomve-flag-softfp.c: New test. - * gcc.target/arm/cortex-m55-nomve.fp-flag-hard.c: New test. - * gcc.target/arm/cortex-m55-nomve.fp-flag-softfp.c: New test. - * gcc.target/arm/multilib.exp: Add tests for -mcpu=cortex-m55. - -(cherry picked from commit 3e8fb15a8cfd0e62dd474af9f536863392ed7572) -Upstream-Status: Backport [releases/gcc-10 (10.4.0) 8f560c4d58255f0ffe9fa7458159724b13386700 == 11.1.0 3e8fb15a8cfd0e62dd474af9f536863392ed7572] ---- - gcc/config/arm/arm-cpus.in | 26 +++++++--- - gcc/config/arm/arm.c | 14 +++++ - gcc/config/arm/parsecpu.awk | 51 +++++++++++++++++++ - .../arm/cortex-m55-nodsp-flag-hard.c | 15 ++++++ - .../arm/cortex-m55-nodsp-flag-softfp.c | 15 ++++++ - .../arm/cortex-m55-nodsp-nofp-flag-softfp.c | 15 ++++++ - .../arm/cortex-m55-nofp-flag-hard.c | 15 ++++++ - .../arm/cortex-m55-nofp-flag-softfp.c | 15 ++++++ - .../arm/cortex-m55-nofp-nomve-flag-softfp.c | 15 ++++++ - .../arm/cortex-m55-nomve-flag-hard.c | 15 ++++++ - .../arm/cortex-m55-nomve-flag-softfp.c | 15 ++++++ - .../arm/cortex-m55-nomve.fp-flag-hard.c | 15 ++++++ - .../arm/cortex-m55-nomve.fp-flag-softfp.c | 15 ++++++ - gcc/testsuite/gcc.target/arm/multilib.exp | 16 ++++++ - 14 files changed, 250 insertions(+), 7 deletions(-) - create mode 100644 gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-flag-hard.c - create mode 100644 gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-flag-softfp.c - create mode 100644 gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-nofp-flag-softfp.c - create mode 100644 gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-hard.c - create mode 100644 gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-softfp.c - create mode 100644 gcc/testsuite/gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c - create mode 100644 gcc/testsuite/gcc.target/arm/cortex-m55-nomve-flag-hard.c - create mode 100644 gcc/testsuite/gcc.target/arm/cortex-m55-nomve-flag-softfp.c - create mode 100644 gcc/testsuite/gcc.target/arm/cortex-m55-nomve.fp-flag-hard.c - create mode 100644 gcc/testsuite/gcc.target/arm/cortex-m55-nomve.fp-flag-softfp.c - -diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in -index d609113e969..db0b93f6bb7 100644 ---- a/gcc/config/arm/arm-cpus.in -+++ b/gcc/config/arm/arm-cpus.in -@@ -135,10 +135,6 @@ define feature armv8_1m_main - # Floating point and Neon extensions. - # VFPv1 is not supported in GCC. - --# This feature bit is enabled for all VFP, MVE and --# MVE with floating point extensions. --define feature vfp_base -- - # Vector floating point v2. - define feature vfpv2 - -@@ -251,7 +247,7 @@ define fgroup ALL_SIMD ALL_SIMD_INTERNAL ALL_SIMD_EXTERNAL - - # List of all FPU bits to strip out if -mfpu is used to override the - # default. fp16 is deliberately missing from this list. --define fgroup ALL_FPU_INTERNAL vfp_base vfpv2 vfpv3 vfpv4 fpv5 fp16conv fp_dbl ALL_SIMD_INTERNAL -+define fgroup ALL_FPU_INTERNAL vfpv2 vfpv3 vfpv4 fpv5 fp16conv fp_dbl ALL_SIMD_INTERNAL - # Similarly, but including fp16 and other extensions that aren't part of - # -mfpu support. - define fgroup ALL_FPU_EXTERNAL fp16 bf16 -@@ -296,11 +292,11 @@ define fgroup ARMv8r ARMv8a - define fgroup ARMv8_1m_main ARMv8m_main armv8_1m_main - - # Useful combinations. --define fgroup VFPv2 vfp_base vfpv2 -+define fgroup VFPv2 vfpv2 - define fgroup VFPv3 VFPv2 vfpv3 - define fgroup VFPv4 VFPv3 vfpv4 fp16conv - define fgroup FPv5 VFPv4 fpv5 --define fgroup MVE mve vfp_base armv7em -+define fgroup MVE mve armv7em - define fgroup MVE_FP MVE FPv5 fp16 mve_float - - define fgroup FP_DBL fp_dbl -@@ -310,6 +306,18 @@ define fgroup NEON FP_D32 neon - define fgroup CRYPTO NEON crypto - define fgroup DOTPROD NEON dotprod - -+# Implied feature bits. These are for non-named features shared between fgroups. -+# Shared feature f belonging to fgroups A and B will be erroneously removed if: -+# A and B are enabled by default AND A is disabled by a removal flag. -+# To ensure that f is retained, we must add such bits to the ISA after -+# processing the removal flags. This is implemented by 'implied bits': -+# define implied []+ -+# This indicates that, if any of the listed features are enabled, or if any -+# member of a listed fgroup is enabled, then will be implicitly enabled. -+ -+# Enabled for all VFP, MVE and MVE with floating point extensions. -+define implied vfp_base MVE MVE_FP ALL_FP -+ - # List of all quirk bits to strip out when comparing CPU features with - # architectures. - # xscale isn't really a 'quirk', but it isn't an architecture either and we -@@ -1532,6 +1540,10 @@ begin cpu cortex-m55 - cname cortexm55 - tune flags LDSCHED - architecture armv8.1-m.main+mve.fp+fp.dp -+ option nomve.fp remove mve_float -+ option nomve remove mve mve_float -+ option nofp remove ALL_FP mve_float -+ option nodsp remove MVE mve_float - isa quirk_no_asmcpu - costs v7m - vendor 41 -diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c -index 689a6bb82a6..6de875331b2 100644 ---- a/gcc/config/arm/arm.c -+++ b/gcc/config/arm/arm.c -@@ -3406,6 +3406,20 @@ arm_configure_build_target (struct arm_build_target *target, - bitmap_ior (target->isa, target->isa, fpu_bits); - } - -+ /* There may be implied bits which we still need to enable. These are -+ non-named features which are needed to complete other sets of features, -+ but cannot be enabled from arm-cpus.in due to being shared between -+ multiple fgroups. Each entry in all_implied_fbits is of the form -+ ante -> cons, meaning that if the feature "ante" is enabled, we should -+ implicitly enable "cons". */ -+ const struct fbit_implication *impl = all_implied_fbits; -+ while (impl->ante) -+ { -+ if (bitmap_bit_p (target->isa, impl->ante)) -+ bitmap_set_bit (target->isa, impl->cons); -+ impl++; -+ } -+ - if (!arm_selected_tune) - arm_selected_tune = arm_selected_cpu; - else /* Validate the features passed to -mtune. */ -diff --git a/gcc/config/arm/parsecpu.awk b/gcc/config/arm/parsecpu.awk -index 7fc37541c76..9423e8a9d5c 100644 ---- a/gcc/config/arm/parsecpu.awk -+++ b/gcc/config/arm/parsecpu.awk -@@ -190,6 +190,23 @@ function gen_isa () { - ORS = z - print "\n" - } -+ -+ print "struct fbit_implication {" -+ print " /* Represents a feature implication, where:" -+ print " ante IMPLIES cons" -+ print " meaning that if ante is enabled then we should" -+ print " also implicitly enable cons. */" -+ print " enum isa_feature ante;" -+ print " enum isa_feature cons;" -+ print "};\n" -+ print "static const struct fbit_implication all_implied_fbits[] =" -+ print "{" -+ for (impl in implied_bits) { -+ split (impl, impl_parts, SUBSEP) -+ print " { isa_bit_" impl_parts[2] ", isa_bit_" impl_parts[1] " }," -+ } -+ print " { isa_nobit, isa_nobit }" -+ print "};\n" - } - - function gen_data () { -@@ -600,6 +617,40 @@ BEGIN { - parse_ok = 1 - } - -+/^define implied / { -+ if (NF < 4) fatal("syntax: define implied []+\n" \ -+ "Implied bits must be defined with at least one antecedent.") -+ toplevel() -+ fbit = $3 -+ if (fbit in features) fatal("implied feature " fbit " aliases a real feature") -+ if (fbit in fgroup) fatal("implied feature " fbit " aliases a feature group") -+ fcount = NF -+ features[fbit] = 1 -+ for (n = 4; n <= fcount; n++) { -+ ante = $n -+ if (fbit == ante) fatal("feature cannot imply itself") -+ else if (ante in features) { -+ for (impl in implied_bits) { -+ split(impl, impl_sep, SUBSEP) -+ if (ante == impl_sep[1]) -+ fatal(ante " implies implied bit " fbit \ -+ ". Chained implications not currently supported") -+ } -+ implied_bits[fbit, ante] = 1 -+ } else if (ante in fgroup) { -+ for (bitcomb in fgrp_bits) { -+ split(bitcomb, bitsep, SUBSEP) -+ if (bitsep[1] == ante) { -+ implied_bits[fbit, bitsep[2]] = 1 -+ } -+ } -+ } else { -+ fatal("implied bit antecedent " ante " unrecognized") -+ } -+ } -+ parse_ok = 1 -+} -+ - /^begin fpu / { - if (NF != 3) fatal("syntax: begin fpu ") - toplevel() -diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-flag-hard.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-flag-hard.c -new file mode 100644 -index 00000000000..b3c7fd06a1a ---- /dev/null -+++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-flag-hard.c -@@ -0,0 +1,15 @@ -+/* { dg-do assemble } */ -+/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ -+/* { dg-additional-options "-mcpu=cortex-m55+nodsp -mfloat-abi=hard -mfpu=auto --save-temps" } */ -+/* { dg-final { scan-assembler "\.arch_extension fp" } } */ -+/* { dg-final { scan-assembler "\.arch_extension fp.dp" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension dsp" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension mve" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ -+/* { dg-final { scan-assembler "\.fpu fpv5-d16" } } */ -+ -+int -+f () -+{ -+ return 1; -+} -diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-flag-softfp.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-flag-softfp.c -new file mode 100644 -index 00000000000..3806554761f ---- /dev/null -+++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-flag-softfp.c -@@ -0,0 +1,15 @@ -+/* { dg-do assemble } */ -+/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ -+/* { dg-additional-options "-mcpu=cortex-m55+nodsp -mfloat-abi=softfp -mfpu=auto --save-temps" } */ -+/* { dg-final { scan-assembler "\.arch_extension fp" } } */ -+/* { dg-final { scan-assembler "\.arch_extension fp.dp" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension dsp" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension mve" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ -+/* { dg-final { scan-assembler "\.fpu fpv5-d16" } } */ -+ -+int -+f () -+{ -+ return 1; -+} -diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-nofp-flag-softfp.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-nofp-flag-softfp.c -new file mode 100644 -index 00000000000..d22eb4e0630 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nodsp-nofp-flag-softfp.c -@@ -0,0 +1,15 @@ -+/* { dg-do assemble } */ -+/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ -+/* { dg-additional-options "-mcpu=cortex-m55+nodsp+nofp -mfloat-abi=softfp -mfpu=auto --save-temps" } */ -+/* { dg-final { scan-assembler-not "\.arch_extension fp" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension fp.dp" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension dsp" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension mve" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ -+/* { dg-final { scan-assembler "\.fpu softvfp" } } */ -+ -+int -+f () -+{ -+ return 1; -+} -diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-hard.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-hard.c -new file mode 100644 -index 00000000000..da1cc25e83b ---- /dev/null -+++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-hard.c -@@ -0,0 +1,15 @@ -+/* { dg-do assemble } */ -+/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ -+/* { dg-additional-options "-mcpu=cortex-m55+nofp -mfloat-abi=hard -mfpu=auto --save-temps" } */ -+/* { dg-final { scan-assembler "\.arch_extension mve" } } */ -+/* { dg-final { scan-assembler "\.arch_extension dsp" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension fp" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension fp.dp" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ -+/* { dg-final { scan-assembler-not "\.fpu" } } */ -+ -+int -+f () -+{ -+ return 1; -+} -diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-softfp.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-softfp.c -new file mode 100644 -index 00000000000..0a4fb14bd9b ---- /dev/null -+++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-softfp.c -@@ -0,0 +1,15 @@ -+/* { dg-do assemble } */ -+/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ -+/* { dg-additional-options "-mcpu=cortex-m55+nofp -mfloat-abi=softfp -mfpu=auto --save-temps" } */ -+/* { dg-final { scan-assembler "\.arch_extension mve" } } */ -+/* { dg-final { scan-assembler "\.arch_extension dsp" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension fp" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension fp.dp" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ -+/* { dg-final { scan-assembler-not "\.fpu" } } */ -+ -+int -+f () -+{ -+ return 1; -+} -diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c -new file mode 100644 -index 00000000000..2ae7f34d456 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c -@@ -0,0 +1,15 @@ -+/* { dg-do assemble } */ -+/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ -+/* { dg-additional-options "-mcpu=cortex-m55+nomve+nofp -mfloat-abi=softfp -mfpu=auto --save-temps" } */ -+/* { dg-final { scan-assembler-not "\.arch_extension mve" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension fp" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension fp.dp" } } */ -+/* { dg-final { scan-assembler "\.arch_extension dsp" } } */ -+/* { dg-final { scan-assembler-not "\.fpu" } } */ -+ -+int -+f () -+{ -+ return 1; -+} -diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nomve-flag-hard.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nomve-flag-hard.c -new file mode 100644 -index 00000000000..a6ccd7b6ed4 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nomve-flag-hard.c -@@ -0,0 +1,15 @@ -+/* { dg-do assemble } */ -+/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ -+/* { dg-additional-options "-mcpu=cortex-m55+nomve -mfloat-abi=hard -mfpu=auto --save-temps" } */ -+/* { dg-final { scan-assembler-not "\.arch_extension mve" } } */ -+/* { dg-final { scan-assembler "\.arch_extension dsp" } } */ -+/* { dg-final { scan-assembler "\.arch_extension fp" } } */ -+/* { dg-final { scan-assembler "\.arch_extension fp.dp" } } */ -+/* { dg-final { scan-assembler "\.fpu fpv5-d16" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ -+ -+int -+f () -+{ -+ return 1; -+} -diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nomve-flag-softfp.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nomve-flag-softfp.c -new file mode 100644 -index 00000000000..2ad976a7960 ---- /dev/null -+++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nomve-flag-softfp.c -@@ -0,0 +1,15 @@ -+/* { dg-do assemble } */ -+/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ -+/* { dg-additional-options "-mcpu=cortex-m55+nomve -mfloat-abi=softfp -mfpu=auto --save-temps" } */ -+/* { dg-final { scan-assembler-not "\.arch_extension mve" } } */ -+/* { dg-final { scan-assembler "\.arch_extension dsp" } } */ -+/* { dg-final { scan-assembler "\.arch_extension fp" } } */ -+/* { dg-final { scan-assembler "\.arch_extension fp.dp" } } */ -+/* { dg-final { scan-assembler "\.fpu fpv5-d16" } } */ -+/* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ -+ -+int -+f () -+{ -+ return 1; -+} -diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nomve.fp-flag-hard.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nomve.fp-flag-hard.c -new file mode 100644 -index 00000000000..40d54b89bef ---- /dev/null -+++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nomve.fp-flag-hard.c -@@ -0,0 +1,15 @@ -+/* { dg-do assemble } */ -+/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ -+/* { dg-additional-options "-mcpu=cortex-m55+nomve.fp -mfloat-abi=hard -mfpu=auto --save-temps" } */ -+/* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ -+/* { dg-final { scan-assembler "\.arch_extension mve" } } */ -+/* { dg-final { scan-assembler "\.arch_extension dsp" } } */ -+/* { dg-final { scan-assembler "\.arch_extension fp" } } */ -+/* { dg-final { scan-assembler "\.arch_extension fp.dp" } } */ -+/* { dg-final { scan-assembler "\.fpu fpv5-d16" } } */ -+ -+int -+f () -+{ -+ return 1; -+} -diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nomve.fp-flag-softfp.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nomve.fp-flag-softfp.c -new file mode 100644 -index 00000000000..c72680314cf ---- /dev/null -+++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nomve.fp-flag-softfp.c -@@ -0,0 +1,15 @@ -+/* { dg-do assemble } */ -+/* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ -+/* { dg-additional-options "-mcpu=cortex-m55+nomve.fp -mfloat-abi=softfp -mfpu=auto --save-temps" } */ -+/* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ -+/* { dg-final { scan-assembler "\.arch_extension mve" } } */ -+/* { dg-final { scan-assembler "\.arch_extension dsp" } } */ -+/* { dg-final { scan-assembler "\.arch_extension fp" } } */ -+/* { dg-final { scan-assembler "\.arch_extension fp.dp" } } */ -+/* { dg-final { scan-assembler "\.fpu fpv5-d16" } } */ -+ -+int -+f () -+{ -+ return 1; -+} -diff --git a/gcc/testsuite/gcc.target/arm/multilib.exp b/gcc/testsuite/gcc.target/arm/multilib.exp -index f67a92a9201..123420a048f 100644 ---- a/gcc/testsuite/gcc.target/arm/multilib.exp -+++ b/gcc/testsuite/gcc.target/arm/multilib.exp -@@ -824,6 +824,22 @@ if {[multilib_config "rmprofile"] } { - {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp" - {-march=armv8.1-m.main+mve+fp.dp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard" - {-march=armv8.1-m.main+mve.fp+fp.dp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard" -+ {-mcpu=cortex-m55+nomve -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp" -+ {-mcpu=cortex-m55+nomve -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp" -+ {-mcpu=cortex-m55+nomve -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard" -+ {-mcpu=cortex-m55+nomve.fp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp" -+ {-mcpu=cortex-m55+nomve.fp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp" -+ {-mcpu=cortex-m55+nomve.fp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard" -+ {-mcpu=cortex-m55+nofp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp" -+ {-mcpu=cortex-m55+nofp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp" -+ {-mcpu=cortex-m55+nofp -mfpu=auto -mfloat-abi=hard} "thumb/v8.1-m.main+mve/hard" -+ {-mcpu=cortex-m55+nodsp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp" -+ {-mcpu=cortex-m55+nodsp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main+dp/softfp" -+ {-mcpu=cortex-m55+nodsp -mfpu=auto -mfloat-abi=hard} "thumb/v8-m.main+dp/hard" -+ {-mcpu=cortex-m55+nomve+nofp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp" -+ {-mcpu=cortex-m55+nomve+nofp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp" -+ {-mcpu=cortex-m55+nodsp+nofp -mfpu=auto -mfloat-abi=soft} "thumb/v8-m.main/nofp" -+ {-mcpu=cortex-m55+nodsp+nofp -mfpu=auto -mfloat-abi=softfp} "thumb/v8-m.main/nofp" - } { - check_multi_dir $opts $dir - } From b8f1e21933d9962d77c433eba6033eab0edd879a Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 7 Jun 2022 22:00:59 +0000 Subject: [PATCH 0590/2022] abseil=v20210324.2+git :Release Notes: Backport newer version which correctly packages the libraries to avoid conflict between libabsl*.so from abseil-cpp recipe and the libabsl*.so included in tensorflow-lite package. :Detailed Notes: Fixes: * check_data_file_clashes: Package tensorflow-lite wants to install file BUILD/work/qemux86_64-webos-linux/webos-image-devel/1.0-r2/rootfs/usr/lib/libabsl_bad_variant_access.so But that file is already provided by package * abseil-cpp It's still bad that tensorflow-lite doesn't use system abseil-cpp, but for now at least avoid the conflict (abseil-cpp has these as symlinks in abseil-cpp-dev which isn't installed by default) and with older Yocto releases we weren't installing abseil-cpp into the image, but now it's in grpc runtime dependencies. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I86fb196fd9b6c2bfbce659e0f842b57b8c19d08f --- ...01-Export-of-internal-Abseil-changes.patch | 87 +++++++++++++++++++ .../0001-absl-always-use-asm-sgidefs.h.patch | 38 ++++++++ ...e-maes-option-from-cross-compilation.patch | 37 ++++++++ .../abseil-cpp/abseil-ppc-fixes.patch | 78 +++++++++++++++++ .../abseil-cpp/abseil-cpp_git.bb | 34 ++++++++ 5 files changed, 274 insertions(+) create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0001-Export-of-internal-Abseil-changes.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0001-absl-always-use-asm-sgidefs.h.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0002-Remove-maes-option-from-cross-compilation.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/abseil-ppc-fixes.patch create mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp_git.bb diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0001-Export-of-internal-Abseil-changes.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0001-Export-of-internal-Abseil-changes.patch new file mode 100644 index 000000000..126b79261 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0001-Export-of-internal-Abseil-changes.patch @@ -0,0 +1,87 @@ +From c9250af98f48e4aa734cab0e2f5ae1f780c05ad0 Mon Sep 17 00:00:00 2001 +From: Zang Ruochen +Date: Fri, 11 Jun 2021 10:53:37 +0900 +Subject: [PATCH] Export of internal Abseil changes + +-- +cf88f9cf40eab54c06bca7f20795352ec23bb583 by Derek Mauro : + +Fixes build with latest glibc +Fixes #952 + +PiperOrigin-RevId: 371693908 + +-- +99bcd0f4a747ce7a401e23c745adf34d0ec5131b by Samuel Benzaquen : + +Add support for std::string_view in StrFormat even when +absl::string_view != std::string_view. + +PiperOrigin-RevId: 371693633 + +-- +e35463572149a6c2d4a0d439b9300ce03fd6b96d by Abseil Team : + +Cmake builds should only install pkg-config when explicitly requested. + +PiperOrigin-RevId: 371403419 +GitOrigin-RevId: cf88f9cf40eab54c06bca7f20795352ec23bb583 +Change-Id: I4360a18c638a4d901ff44ab1e0a9d8f321c302ea + +Signed-off-by: Zang Ruochen +--- + CMake/AbseilHelpers.cmake | 3 ++- + absl/strings/internal/str_format/arg.h | 8 ++++++++ + absl/strings/internal/str_format/convert_test.cc | 3 +++ + 3 files changed, 13 insertions(+), 1 deletion(-) + +diff --git a/CMake/AbseilHelpers.cmake b/CMake/AbseilHelpers.cmake +index 54fb8df3..a32b94d5 100644 +--- a/CMake/AbseilHelpers.cmake ++++ b/CMake/AbseilHelpers.cmake +@@ -141,7 +141,8 @@ function(absl_cc_library) + endif() + + # Generate a pkg-config file for every library: +- if(_build_type STREQUAL "static" OR _build_type STREQUAL "shared") ++ if((_build_type STREQUAL "static" OR _build_type STREQUAL "shared") ++ AND ABSL_ENABLE_INSTALL) + if(NOT ABSL_CC_LIB_TESTONLY) + if(absl_VERSION) + set(PC_VERSION "${absl_VERSION}") +diff --git a/absl/strings/internal/str_format/arg.h b/absl/strings/internal/str_format/arg.h +index 7040c866..3c91be70 100644 +--- a/absl/strings/internal/str_format/arg.h ++++ b/absl/strings/internal/str_format/arg.h +@@ -122,6 +122,14 @@ StringConvertResult FormatConvertImpl(const std::string& v, + StringConvertResult FormatConvertImpl(string_view v, + FormatConversionSpecImpl conv, + FormatSinkImpl* sink); ++#if defined(ABSL_HAVE_STD_STRING_VIEW) && !defined(ABSL_USES_STD_STRING_VIEW) ++inline StringConvertResult FormatConvertImpl(std::string_view v, ++ FormatConversionSpecImpl conv, ++ FormatSinkImpl* sink) { ++ return FormatConvertImpl(absl::string_view(v.data(), v.size()), conv, sink); ++} ++#endif // ABSL_HAVE_STD_STRING_VIEW && !ABSL_USES_STD_STRING_VIEW ++ + ArgConvertResult + FormatConvertImpl(const char* v, const FormatConversionSpecImpl conv, +diff --git a/absl/strings/internal/str_format/convert_test.cc b/absl/strings/internal/str_format/convert_test.cc +index 926283cf..91e03609 100644 +--- a/absl/strings/internal/str_format/convert_test.cc ++++ b/absl/strings/internal/str_format/convert_test.cc +@@ -229,6 +229,9 @@ TEST_F(FormatConvertTest, BasicString) { + TestStringConvert(static_cast("hello")); + TestStringConvert(std::string("hello")); + TestStringConvert(string_view("hello")); ++#if defined(ABSL_HAVE_STD_STRING_VIEW) ++ TestStringConvert(std::string_view("hello")); ++#endif // ABSL_HAVE_STD_STRING_VIEW + } + + TEST_F(FormatConvertTest, NullString) { +-- +2.25.1 + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0001-absl-always-use-asm-sgidefs.h.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0001-absl-always-use-asm-sgidefs.h.patch new file mode 100644 index 000000000..2bafcc6b1 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0001-absl-always-use-asm-sgidefs.h.patch @@ -0,0 +1,38 @@ +From 8f21fdfb83b0fa844a9f1f03a86a9ca46642d85e Mon Sep 17 00:00:00 2001 +From: Khem Raj +Date: Thu, 9 Apr 2020 13:06:27 -0700 +Subject: [PATCH 1/2] absl: always use + +Fixes mips/musl build, since sgidefs.h is not present on all C libraries +but on linux asm/sgidefs.h is there and contains same definitions, using +that makes it portable. + +Upstream-Status: Pending + +Signed-off-by: Khem Raj +--- + absl/base/internal/direct_mmap.h | 6 +----- + 1 file changed, 1 insertion(+), 5 deletions(-) + +diff --git a/absl/base/internal/direct_mmap.h b/absl/base/internal/direct_mmap.h +index 16accf096604..ba7936cc934e 100644 +--- a/absl/base/internal/direct_mmap.h ++++ b/absl/base/internal/direct_mmap.h +@@ -41,13 +41,9 @@ + + #ifdef __mips__ + // Include definitions of the ABI currently in use. +-#ifdef __BIONIC__ +-// Android doesn't have sgidefs.h, but does have asm/sgidefs.h, which has the ++// bionic/musl C libs don't have sgidefs.h, but do have asm/sgidefs.h, which has the + // definitions we need. + #include +-#else +-#include +-#endif // __BIONIC__ + #endif // __mips__ + + // SYS_mmap and SYS_munmap are not defined in Android. +-- +2.25.1 + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0002-Remove-maes-option-from-cross-compilation.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0002-Remove-maes-option-from-cross-compilation.patch new file mode 100644 index 000000000..da9dbd936 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0002-Remove-maes-option-from-cross-compilation.patch @@ -0,0 +1,37 @@ +From a9e15a4855c82eb948dedeecd83d5e17c3c8f767 Mon Sep 17 00:00:00 2001 +From: Sinan Kaya +Date: Mon, 3 Feb 2020 03:25:57 +0000 +Subject: [PATCH 2/2] Remove maes option from cross-compilation + +--- + absl/copts/GENERATED_AbseilCopts.cmake | 4 ---- + absl/copts/GENERATED_copts.bzl | 4 ---- + 2 files changed, 8 deletions(-) + +diff --git a/absl/copts/GENERATED_AbseilCopts.cmake b/absl/copts/GENERATED_AbseilCopts.cmake +index 97bd283eb739..ce29ac031b9c 100644 +--- a/absl/copts/GENERATED_AbseilCopts.cmake ++++ b/absl/copts/GENERATED_AbseilCopts.cmake +@@ -210,7 +210,3 @@ list(APPEND ABSL_RANDOM_HWAES_ARM64_FLAGS + list(APPEND ABSL_RANDOM_HWAES_MSVC_X64_FLAGS + ) + +-list(APPEND ABSL_RANDOM_HWAES_X64_FLAGS +- "-maes" +- "-msse4.1" +-) +diff --git a/absl/copts/GENERATED_copts.bzl b/absl/copts/GENERATED_copts.bzl +index bcdd61ef8211..3e8eddd4bb08 100644 +--- a/absl/copts/GENERATED_copts.bzl ++++ b/absl/copts/GENERATED_copts.bzl +@@ -211,7 +211,3 @@ ABSL_RANDOM_HWAES_ARM64_FLAGS = [ + ABSL_RANDOM_HWAES_MSVC_X64_FLAGS = [ + ] + +-ABSL_RANDOM_HWAES_X64_FLAGS = [ +- "-maes", +- "-msse4.1", +-] +-- +2.25.1 + diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/abseil-ppc-fixes.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/abseil-ppc-fixes.patch new file mode 100644 index 000000000..a4937e1b3 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/abseil-ppc-fixes.patch @@ -0,0 +1,78 @@ +An all-in-one patch that fixes several issues: + +1) UnscaledCycleClock not fully implemented for ppc*-musl (disabled on musl) +2) powerpc stacktrace implementation only works on glibc (disabled on musl) +3) powerpc stacktrace implementation has ppc64 assumptions (fixed) +4) examine_stack.cpp makes glibc assumptions on powerpc (fixed) + +Sourced from void linux + +Signed-off-by: Khem Raj + +--- a/absl/base/internal/unscaledcycleclock.cc ++++ b/absl/base/internal/unscaledcycleclock.cc +@@ -20,7 +20,7 @@ + #include + #endif + +-#if defined(__powerpc__) || defined(__ppc__) ++#if (defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__) + #ifdef __GLIBC__ + #include + #elif defined(__FreeBSD__) +@@ -59,7 +59,7 @@ double UnscaledCycleClock::Frequency() { + return base_internal::NominalCPUFrequency(); + } + +-#elif defined(__powerpc__) || defined(__ppc__) ++#elif (defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__) + + int64_t UnscaledCycleClock::Now() { + #ifdef __GLIBC__ +--- a/absl/base/internal/unscaledcycleclock.h ++++ b/absl/base/internal/unscaledcycleclock.h +@@ -46,7 +46,7 @@ + + // The following platforms have an implementation of a hardware counter. + #if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) || \ +- defined(__powerpc__) || defined(__ppc__) || \ ++ ((defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)) || \ + defined(_M_IX86) || defined(_M_X64) + #define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 1 + #else +--- a/absl/debugging/internal/examine_stack.cc ++++ b/absl/debugging/internal/examine_stack.cc +@@ -27,6 +27,10 @@ + #include + #include + ++#if defined(__powerpc__) ++#include ++#endif ++ + #include "absl/base/attributes.h" + #include "absl/base/internal/raw_logging.h" + #include "absl/base/macros.h" +@@ -63,8 +67,10 @@ void* GetProgramCounter(void* vuc) { + return reinterpret_cast(context->uc_mcontext.pc); + #elif defined(__powerpc64__) + return reinterpret_cast(context->uc_mcontext.gp_regs[32]); +-#elif defined(__powerpc__) ++#elif defined(__powerpc__) && defined(__GLIBC__) + return reinterpret_cast(context->uc_mcontext.uc_regs->gregs[32]); ++#elif defined(__powerpc__) ++ return reinterpret_cast(((struct pt_regs *)context->uc_regs)->gregs[32]); + #elif defined(__riscv) + return reinterpret_cast(context->uc_mcontext.__gregs[REG_PC]); + #elif defined(__s390__) && !defined(__s390x__) +--- a/absl/debugging/internal/stacktrace_config.h ++++ b/absl/debugging/internal/stacktrace_config.h +@@ -55,7 +55,7 @@ + #elif defined(__i386__) || defined(__x86_64__) + #define ABSL_STACKTRACE_INL_HEADER \ + "absl/debugging/internal/stacktrace_x86-inl.inc" +-#elif defined(__ppc__) || defined(__PPC__) ++#elif (defined(__ppc__) || defined(__PPC__)) && defined(__GLIBC__) + #define ABSL_STACKTRACE_INL_HEADER \ + "absl/debugging/internal/stacktrace_powerpc-inl.inc" + #elif defined(__aarch64__) diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp_git.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp_git.bb new file mode 100644 index 000000000..37d5d8123 --- /dev/null +++ b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp_git.bb @@ -0,0 +1,34 @@ +SUMMARY = "Abseil is a cpp library like STL" +DESCRIPTION = "Abseil provides pieces missing from the C++ standard. Contains \ +additional useful libraries like algorithm, container, debugging, hash, memory, \ +meta, numeric, strings, synchronization, time, types and utility" +HOMEPAGE = "https://abseil.io/" +SECTION = "libs" +LICENSE = "Apache-2.0" +LIC_FILES_CHKSUM = "file://LICENSE;md5=df52c6edb7adc22e533b2bacc3bd3915" + +PV = "20210324.2+git${SRCPV}" +SRCREV = "278e0a071885a22dcd2fd1b5576cc44757299343" +BRANCH = "lts_2021_03_24" +SRC_URI = "git://github.com/abseil/abseil-cpp;branch=${BRANCH};protocol=https \ + file://0001-absl-always-use-asm-sgidefs.h.patch \ + file://0002-Remove-maes-option-from-cross-compilation.patch \ + file://abseil-ppc-fixes.patch \ + file://0001-Export-of-internal-Abseil-changes.patch \ + " + +S = "${WORKDIR}/git" + +ASNEEDED:class-native = "" +ASNEEDED:class-nativesdk = "" + +inherit cmake + +EXTRA_OECMAKE = "-DBUILD_SHARED_LIBS=ON \ + -DBUILD_TESTING=OFF \ + -DCMAKE_CXX_STANDARD=14 \ + " + +BBCLASSEXTEND = "native nativesdk" + +FILES:${PN}-dev += "${includedir} ${libdir}/cmake ${libdir}/pkgconfig" From 00a6c9dbc7239eadea1d21d5d5d449c794aecf1e Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 26 Sep 2022 14:23:23 +0000 Subject: [PATCH 0591/2022] tensorflow-lite: use system abseil-cpp and don't install libabsl*.so libraries :Release Notes: Prevent installing another copy of libabsl*.so* libraries it causes conflict with abseil-cpp for e.g. com.webos.service.ai. :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/464636 DEBUG: Executing python function extend_recipe_sysroot NOTE: Direct dependencies are ['TOPDIR/meta-lg-webos/meta-webos/recipes-webos/cmake-modules-webos/cmake-modules-webos-native.bb:do_populate_sysroot', 'TOPDIR/meta-lg-webos/meta-webos/recipes-webos/libgoogleassistant/libgoogleassistant.bb:do_populate_sysroot', 'TOPDIR/meta-lg-webos/meta-webos/recipes-webos/luna-service2/luna-service2.bb:do_populate_sysroot', 'TOPDIR/meta-lg-webos/meta-webos/recipes-webos/pmloglib/pmloglib.bb:do_populate_sysroot', 'TOPDIR/oe-core/meta/recipes-core/glib-2.0/glib-2.0_2.72.3.bb:do_populate_sysroot', 'TOPDIR/oe-core/meta/recipes-core/glibc/glibc_2.35.bb:do_populate_sysroot', 'TOPDIR/oe-core/meta/recipes-core/systemd/systemd-systemctl-native.bb:do_populate_sysroot', 'TOPDIR/oe-core/meta/recipes-devtools/cmake/cmake-native_3.22.3.bb:do_populate_sysroot', 'TOPDIR/oe-core/meta/recipes-devtools/gcc/gcc-cross_11.3.bb:do_populate_sysroot', 'TOPDIR/oe-core/meta/recipes-devtools/gcc/gcc-runtime_11.3.bb:do_populate_sysroot', 'TOPDIR/oe-core/meta/recipes-devtools/json-c/json-c_0.15.bb:do_populate_sysroot', 'virtual:native:TOPDIR/oe-core/meta/recipes-devtools/icecc-create-env/icecc-create-env_0.1.bb:do_populate_sysroot', 'virtual:native:TOPDIR/oe-core/meta/recipes-devtools/ninja/ninja_1.10.2.bb:do_populate_sysroot', 'virtual:native:TOPDIR/oe-core/meta/recipes-devtools/pkgconfig/pkgconfig_git.bb:do_populate_sysroot', 'virtual:native:TOPDIR/oe-core/meta/recipes-devtools/pseudo/pseudo_git.bb:do_populate_sysroot'] ERROR: The file /usr/lib/libabsl_strings.so is installed by both tensorflow-lite and abseil-cpp, aborting DEBUG: Python function extend_recipe_sysroot finished This was introduced by [WRO-12665] CCC: pulseaudio=39 audiod=45 which added tensorflow-lite into dependency tree of com.webos.service.ai which was already depending on abseil-cpp as: libgoogleassistant -> grpc -> abseil-cpp For runtime I was able to work around this by backporting abseil-cpp-20210324.2 which uses SOVERSION 0, so abseil-cpp was installing libabsl_*.so.0 and tensorflow-lite libabsl_*.so, but now with build time dependency on both they will conflict on /usr/lib/libabsl_strings.so in sysroot (unversioned library from tensorflow-lite and devel symlink from abseil-cpp). I've also tried to set ABSL_ENABLE_INSTALL in the bundled version in tensorflow-lite, but it cannot be set explicitly, because: if(NOT DEFINED CMAKE_INSTALL_PREFIX OR CMAKE_INSTALL_PREFIX IN_LIST SYSTEM_INSTALL_DIRS) message(WARNING "\ The default and system-level install directories are unsupported except in LTS \ releases of Abseil. Please set CMAKE_INSTALL_PREFIX to install Abseil in your \ source or build tree directly.\ ") endif() And just dropping libabsl_*.so installation and adding dependency on abseil-cpp fails as well with: ERROR: tensorflow-lite-2.6.2-r4 do_package_qa: QA Issue: /usr/share/aif/benchmark_model contained in package tensorflow-lite requires libabsl_strings.so()(64bit), but no providers found in RDEPENDS:tensorflow-lite? [file-rdeps] because abseil-cpp package will provide libabsl_strings.so.0 libabsl_strings.so symlink is in abseil-cpp-dev. The only way to enforce using system abseil-cpp seems to be removal of Findabsl.cmake (to let CMake find abslConfig.cmake from system abseil-cpp). To make things worse tflite has another bundled abseil-cpp with different version. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I22732ce8a0346b102d5f38ffad65dae393247286 --- .../tensorflow-lite/tensorflow-lite_2.6.2.bb | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb index 0cd418071..43b3b4d7a 100644 --- a/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb +++ b/meta-webos/recipes-upstreamable/tensorflow-lite/tensorflow-lite_2.6.2.bb @@ -10,7 +10,6 @@ BRANCH = "r${@oe.utils.trim_version('${PV}', 2)}" SRCREV_FORMAT = "tensorflow" # Matches v${PV} tag SRCREV_tensorflow = "c2363d6d025981c661f8cbecf4c73ca7fbf38caf" -SRCREV_abseil-cpp = "997aaf3a28308eba1b9156aa35ab7bca9688e9f6" # v1.12.0 SRCREV_flatbuffers = "6df40a2471737b27271bdd9b900ab5f3aec746c7" SRCREV_eigen = "7b35638ddb99a0298c5d3450de506a8e8e0203d3" @@ -51,7 +50,6 @@ SRCREV_psimd = "072586a71b55b7f8c584153d223e95687148a900" SRC_URI = " \ git://github.com/tensorflow/tensorflow.git;branch=${BRANCH};protocol=https;name=tensorflow \ - git://github.com/abseil/abseil-cpp.git;branch=lts_2021_03_24;protocol=https;destsuffix=git/abseil-cpp;name=abseil-cpp \ git://github.com/google/flatbuffers;branch=master;protocol=https;destsuffix=git/flatbuffers;name=flatbuffers \ git://gitlab.com/libeigen/eigen;branch=master;protocol=https;destsuffix=git/eigen;name=eigen \ git://github.com/google/XNNPACK;branch=master;protocol=https;destsuffix=git/xnnpack;name=xnnpack \ @@ -94,6 +92,7 @@ DEPENDS += " \ unzip-native \ python3-native \ python3-numpy-native \ + abseil-cpp \ " ARM_INSTRUCTION_SET = "arm" @@ -129,7 +128,6 @@ PACKAGECONFIG[gpu] = "-DTFLITE_ENABLE_GPU=ON,-DTFLITE_ENABLE_GPU=OFF,opencl-head # tensorflow/lite/tools/cmake/modules/Findgoogletest.cmake:OverridableFetchContent_GetProperties(googletest) # tensorflow/lite/tools/cmake/modules/Findnsync.cmake:OverridableFetchContent_GetProperties(nsync) # tensorflow/lite/tools/cmake/modules/Findre2.cmake:OverridableFetchContent_GetProperties(re2) -# tensorflow/lite/tools/cmake/modules/abseil-cpp.cmake:OverridableFetchContent_GetProperties(abseil-cpp) # tensorflow/lite/tools/cmake/modules/egl_headers.cmake:OverridableFetchContent_GetProperties(egl_headers) # tensorflow/lite/tools/cmake/modules/eigen.cmake:OverridableFetchContent_GetProperties(eigen) # tensorflow/lite/tools/cmake/modules/farmhash.cmake:OverridableFetchContent_GetProperties(farmhash) @@ -144,9 +142,11 @@ PACKAGECONFIG[gpu] = "-DTFLITE_ENABLE_GPU=ON,-DTFLITE_ENABLE_GPU=OFF,opencl-head # tensorflow/lite/tools/cmake/modules/vulkan_headers.cmake:OverridableFetchContent_GetProperties(vulkan_headers) # tensorflow/lite/tools/cmake/modules/xnnpack.cmake:OverridableFetchContent_GetProperties(xnnpack) do_configure:prepend() { - for i in abseil-cpp flatbuffers eigen xnnpack neon2sse fft2d farmhash ruy gemmlowp vulkan_headers egl_headers opengl_headers; do + for i in flatbuffers eigen xnnpack neon2sse fft2d farmhash ruy gemmlowp vulkan_headers egl_headers opengl_headers; do cp -ra ${S}/$i ${B}/$i done + # this prevents abslConfig.cmake to be found from system absl + rm -f ${OECMAKE_SOURCEPATH}/tools/cmake/modules/Findabsl.cmake } # For these we can set *_SOURCE_DIR to avoid copy in do_configure:prepend: From 22ecd26e30f2bdcf39a87de0658a4e9ddeb76ac3 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 3 Nov 2020 10:12:47 -0800 Subject: [PATCH 0592/2022] {hardknott-stop} webos: layer.conf: Update to hardknott release name series :Release Notes: :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12997] CCC: Upgrade to Yocto 3.3 Hardknott [PLAT-124341] Create GPVB with Yocto 3.3 Hardknott Change-Id: I80ce24c39e530171091ceb5c05771d3896258bd0 --- meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf | 2 +- meta-webos-backports/meta-webos-backports-4.0/conf/layer.conf | 2 +- meta-webos-iot/conf/layer.conf | 2 +- meta-webos-raspberrypi/conf/layer.conf | 2 +- meta-webos-smack/conf/layer.conf | 2 +- meta-webos-updater/conf/layer.conf | 2 +- meta-webos-virtualization/conf/layer.conf | 2 +- meta-webos/conf/layer.conf | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf b/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf index 6d953a3c1..4227b4576 100644 --- a/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf +++ b/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf @@ -11,7 +11,7 @@ BBFILE_COLLECTIONS += "meta-webos-backports-3.4" BBFILE_PATTERN_meta-webos-backports-3.4 := "^${LAYERDIR}/" BBFILE_PRIORITY_meta-webos-backports-3.4 = "35" -LAYERSERIES_COMPAT_meta-webos-backports-3.4 = "gatesgarth" +LAYERSERIES_COMPAT_meta-webos-backports-3.4 = "hardknott" LAYERDEPENDS_meta-webos-backports-3.4 = " \ core \ diff --git a/meta-webos-backports/meta-webos-backports-4.0/conf/layer.conf b/meta-webos-backports/meta-webos-backports-4.0/conf/layer.conf index af2695102..206caf3fb 100644 --- a/meta-webos-backports/meta-webos-backports-4.0/conf/layer.conf +++ b/meta-webos-backports/meta-webos-backports-4.0/conf/layer.conf @@ -11,7 +11,7 @@ BBFILE_COLLECTIONS += "meta-webos-backports-4.0" BBFILE_PATTERN_meta-webos-backports-4.0 := "^${LAYERDIR}/" BBFILE_PRIORITY_meta-webos-backports-4.0 = "36" -LAYERSERIES_COMPAT_meta-webos-backports-4.0 = "gatesgarth" +LAYERSERIES_COMPAT_meta-webos-backports-4.0 = "hardknott" LAYERDEPENDS_meta-webos-backports-4.0 = " \ core \ diff --git a/meta-webos-iot/conf/layer.conf b/meta-webos-iot/conf/layer.conf index 55e8dfdf3..0b0270223 100644 --- a/meta-webos-iot/conf/layer.conf +++ b/meta-webos-iot/conf/layer.conf @@ -10,7 +10,7 @@ BBFILE_COLLECTIONS += "meta-webos-iot" BBFILE_PATTERN_meta-webos-iot := "^${LAYERDIR}/" BBFILE_PRIORITY_meta-webos-iot = "70" -LAYERSERIES_COMPAT_meta-webos-iot = "gatesgarth" +LAYERSERIES_COMPAT_meta-webos-iot = "hardknott" LAYERDEPENDS_meta-webos-iot = " \ meta-webos \ diff --git a/meta-webos-raspberrypi/conf/layer.conf b/meta-webos-raspberrypi/conf/layer.conf index f97fc9459..d3a37bdd4 100644 --- a/meta-webos-raspberrypi/conf/layer.conf +++ b/meta-webos-raspberrypi/conf/layer.conf @@ -10,7 +10,7 @@ BBFILE_COLLECTIONS += "meta-webos-raspberrypi" BBFILE_PATTERN_meta-webos-raspberrypi := "^${LAYERDIR}/" BBFILE_PRIORITY_meta-webos-raspberrypi = "51" -LAYERSERIES_COMPAT_meta-webos-raspberrypi = "gatesgarth" +LAYERSERIES_COMPAT_meta-webos-raspberrypi = "hardknott" LAYERDEPENDS_meta-webos-raspberrypi = "\ meta-webos \ diff --git a/meta-webos-smack/conf/layer.conf b/meta-webos-smack/conf/layer.conf index 1e4f26437..cd6ffab67 100644 --- a/meta-webos-smack/conf/layer.conf +++ b/meta-webos-smack/conf/layer.conf @@ -18,7 +18,7 @@ BBFILE_COLLECTIONS += "meta-webos-smack" BBFILE_PATTERN_meta-webos-smack := "^${LAYERDIR}/" BBFILE_PRIORITY_meta-webos-smack = "75" -LAYERSERIES_COMPAT_meta-webos-smack = "gatesgarth" +LAYERSERIES_COMPAT_meta-webos-smack = "hardknott" LAYERDEPENDS_meta-webos-smack = "\ meta-webos \ diff --git a/meta-webos-updater/conf/layer.conf b/meta-webos-updater/conf/layer.conf index c1729bc82..9862341e7 100644 --- a/meta-webos-updater/conf/layer.conf +++ b/meta-webos-updater/conf/layer.conf @@ -10,7 +10,7 @@ BBFILE_COLLECTIONS += "meta-webos-updater" BBFILE_PATTERN_meta-webos-updater := "^${LAYERDIR}/" BBFILE_PRIORITY_meta-webos-updater= "52" -LAYERSERIES_COMPAT_meta-webos-updater = "gatesgarth" +LAYERSERIES_COMPAT_meta-webos-updater = "hardknott" LAYERDEPENDS_meta-webos-updater = "\ sota \ diff --git a/meta-webos-virtualization/conf/layer.conf b/meta-webos-virtualization/conf/layer.conf index 315e620a9..d47c7c475 100644 --- a/meta-webos-virtualization/conf/layer.conf +++ b/meta-webos-virtualization/conf/layer.conf @@ -10,7 +10,7 @@ BBFILE_COLLECTIONS += "meta-webos-virtualization" BBFILE_PATTERN_meta-webos-virtualization := "^${LAYERDIR}/" BBFILE_PRIORITY_meta-webos-virtualization = "53" -LAYERSERIES_COMPAT_meta-webos-virtualization = "gatesgarth" +LAYERSERIES_COMPAT_meta-webos-virtualization = "hardknott" LAYERDEPENDS_meta-webos-virtualization = "\ virtualization-layer \ diff --git a/meta-webos/conf/layer.conf b/meta-webos/conf/layer.conf index ad59be6ec..20fefc7a2 100644 --- a/meta-webos/conf/layer.conf +++ b/meta-webos/conf/layer.conf @@ -10,7 +10,7 @@ BBFILE_COLLECTIONS += "meta-webos" BBFILE_PATTERN_meta-webos := "^${LAYERDIR}/" BBFILE_PRIORITY_meta-webos = "40" -LAYERSERIES_COMPAT_meta-webos = "gatesgarth" +LAYERSERIES_COMPAT_meta-webos = "hardknott" LAYERDEPENDS_meta-webos = " \ core \ From 74617ca87718c8954965baf43ce8b4a8482dff97 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 16 Jul 2021 03:18:07 -0700 Subject: [PATCH 0593/2022] {honister-start} meta-webos-backports-3.4: delete :Release Notes: :Detailed Notes: Remove GO_VERSION as well as it's already set in oe-core/honister as well and avoids WARNING: preferred version 1.16.% of go-runtime not available (for item virtual/x86_64-webos-linux-go-runtime) WARNING: versions of go-runtime available: 1.18.2 WARNING: preferred version 1.16.% of go-cross-core2-64 not available (for item virtual/core2-64-go) WARNING: versions of go-cross-core2-64 available: 1.18.2 WARNING: preferred version 1.16.% of go-runtime not available (for item go-runtime-dev) WARNING: versions of go-runtime available: 1.18.2 WARNING: preferred version 1.16.% of go-runtime not available (for item go-runtime) WARNING: versions of go-runtime available: 1.18.2 WARNING: preferred version 1.16.% of go-native not available (for item go-native) WARNING: versions of go-native available: 1.18.2 WARNING: preferred version 1.16.% of go-native not available (for item go-native-dev) WARNING: versions of go-native available: 1.18.2 WARNING: preferred version 1.16.% of go-native not available (for item go-native) WARNING: versions of go-native available: 1.18.2 in future. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: I1968af080bde4757e3e00a0b3f50748816f55555 --- .../classes/systemd-boot-cfg.bbclass | 71 -- .../classes/systemd-boot.bbclass | 35 - .../classes/systemd.bbclass | 233 ------ .../classes/uboot-config.bbclass | 127 --- .../classes/uboot-extlinux-config.bbclass | 158 ---- .../classes/uboot-sign.bbclass | 494 ----------- .../conf/image-uefi.conf | 21 - .../meta-webos-backports-3.4/conf/layer.conf | 21 - .../meta-webos-backports-3.4/licenses/IJG | 38 - .../meta-webos-backports-3.4/licenses/NPL-1.1 | 186 ----- .../meta-webos-backports-3.4/licenses/curl | 10 - ...iscv32-Use-double-float-ABI-for-rv32.patch | 42 - ...ls-image-host-fix-wrong-return-value.patch | 41 - .../recipes-bsp/u-boot/libubootenv_0.3.2.bb | 26 - .../recipes-bsp/u-boot/u-boot-common.inc | 22 - .../recipes-bsp/u-boot/u-boot-tools.inc | 81 -- .../u-boot/u-boot-tools_2021.07.bb | 4 - .../recipes-bsp/u-boot/u-boot.inc | 359 -------- .../recipes-bsp/u-boot/u-boot_2021.07.bb | 6 - .../recipes-containers/containerd/README.md | 30 - .../0001-Add-build-option-GODEBUG-1.patch | 32 - ...O_BUILD_FLAGS-to-be-externally-speci.patch | 38 - .../containerd-opencontainers_git.bb | 127 --- ...1-build-use-oe-provided-GO-and-flags.patch | 64 -- .../docker/docker-moby_git.bb | 60 -- .../recipes-containers/docker/docker.inc | 179 ---- ...ernal-GO111MODULE-and-cross-compiler.patch | 27 - ...0001-dynbinary-use-go-cross-compiler.patch | 23 - ...0001-libnetwork-use-GO-instead-of-go.patch | 59 -- .../docker/files/docker.init | 131 --- ...-GOBUILDFLAGS-for-runc-and-remove-re.patch | 37 - ...001-runc-Add-console-socket-dev-null.patch | 30 - .../0001-runc-docker-SIGUSR1-daemonize.patch | 131 --- .../runc/runc-docker_git.bb | 14 - .../runc/runc-opencontainers_git.bb | 10 - .../recipes-containers/runc/runc.inc | 83 -- .../systemd/systemd-boot_249.3.bb | 74 -- .../systemd/systemd-bootconf_1.00.bb | 32 - .../systemd/systemd-compat-units.bb | 49 -- .../systemd/systemd-conf/journald.conf | 3 - .../systemd/systemd-conf/logind.conf | 2 - .../systemd/systemd-conf/system.conf | 2 - .../systemd/systemd-conf/system.conf-qemuall | 3 - .../systemd/systemd-conf/wired.network | 13 - .../recipes-core/systemd/systemd-conf_1.0.bb | 43 - .../systemd/systemd-machine-units_1.0.bb | 13 - .../systemd/systemd-serialgetty.bb | 52 -- .../systemd-serialgetty/serial-getty@.service | 45 - .../systemd/systemd-systemctl-native.bb | 17 - .../systemd/systemd-systemctl/systemctl | 340 -------- .../recipes-core/systemd/systemd.inc | 22 - .../systemd/systemd/00-create-volatile.conf | 7 - .../systemd/00-hostnamed-network-user.conf | 6 - ...tall-dependency-links-at-install-tim.patch | 81 -- ...se-ROOTPREFIX-without-suffixed-slash.patch | 42 - ...test-parse-argument-Include-signal.h.patch | 29 - ...002-don-t-use-glibc-specific-qsort_r.patch | 163 ---- ...implment-systemd-sysv-install-for-OE.patch | 41 - ...dd-__compare_fn_t-and-comparison_fn_.patch | 76 -- ...k-parse_printf_format-implementation.patch | 433 ---------- ...missing.h-check-for-missing-strndupa.patch | 694 ---------------- .../0006-Include-netinet-if_ether.h.patch | 381 --------- ...OB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch | 153 ---- ...008-add-missing-FTW_-macros-for-musl.patch | 57 -- ..._register_atfork-for-non-glibc-build.patch | 43 - ...10-Use-uintmax_t-for-handling-rlim_t.patch | 104 --- ...sable-tests-for-missing-typedefs-in-.patch | 39 - ...T_SYMLINK_NOFOLLOW-flag-to-faccessat.patch | 98 --- ...patible-basename-for-non-glibc-syste.patch | 32 - ...uffering-when-writing-to-oom_score_a.patch | 39 - ...compliant-strerror_r-from-GNU-specif.patch | 60 -- ...S_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch | 33 - ...ype.h-add-__compar_d_fn_t-definition.patch | 28 - ...definition-of-prctl_mm_map-structure.patch | 30 - .../systemd/0019-Handle-missing-LOCK_EX.patch | 24 - ...ible-pointer-type-struct-sockaddr_un.patch | 38 - .../0021-test-json.c-define-M_PIl.patch | 31 - ...-not-disable-buffer-in-writing-files.patch | 392 --------- .../0025-Handle-__cpu_mask-usage.patch | 58 -- .../systemd/0026-Handle-missing-gshadow.patch | 171 ---- ...l.h-Define-MIPS-ABI-defines-for-musl.patch | 34 - .../systemd/systemd/99-default.preset | 1 - .../recipes-core/systemd/systemd/init | 104 --- .../org.freedesktop.hostname1_no_polkit.conf | 11 - .../systemd/systemd/systemd-pager.sh | 7 - .../systemd/systemd/touchscreen.rules | 18 - .../recipes-core/systemd/systemd_249.3.bb | 785 ------------------ ...01-Export-of-internal-Abseil-changes.patch | 87 -- .../0001-absl-always-use-asm-sgidefs.h.patch | 38 - ...e-maes-option-from-cross-compilation.patch | 37 - .../abseil-cpp/abseil-ppc-fixes.patch | 78 -- .../abseil-cpp/abseil-cpp_git.bb | 34 - .../recipes-devtools/go/go-1.16.15.inc | 25 - ...ow-CC-and-CXX-to-have-multiple-words.patch | 33 - ...ent-based-hash-generation-less-pedan.patch | 219 ----- ...-to-be-overridden-in-the-environment.patch | 47 -- ...4-ld-add-soname-to-shareable-objects.patch | 45 - ...de-CC-when-building-dist-and-go_boot.patch | 39 - ...dist-separate-host-and-target-builds.patch | 274 ------ ...d-go-make-GOROOT-precious-by-default.patch | 104 --- ...008-use-GOBUILDMODE-to-set-buildmode.patch | 42 - ...go-make-sure-CC-and-CXX-are-absolute.patch | 95 --- .../go/go-binary-native_1.16.15.bb | 46 - .../recipes-devtools/go/go-common.inc | 42 - .../recipes-devtools/go/go-cross-canadian.inc | 62 -- .../go/go-cross-canadian_1.16.15.bb | 2 - .../recipes-devtools/go/go-cross.inc | 53 -- .../recipes-devtools/go/go-cross_1.16.15.bb | 2 - .../recipes-devtools/go/go-crosssdk.inc | 43 - .../go/go-crosssdk_1.16.15.bb | 2 - .../recipes-devtools/go/go-native_1.16.15.bb | 59 -- .../recipes-devtools/go/go-runtime.inc | 87 -- .../recipes-devtools/go/go-runtime_1.16.15.bb | 3 - .../recipes-devtools/go/go-target.inc | 45 - .../recipes-devtools/go/go_1.16.15.bb | 17 - .../include/webos-preferred-versions.inc | 1 - meta-webos/conf/layer.conf | 1 - 117 files changed, 9765 deletions(-) delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/classes/systemd-boot-cfg.bbclass delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/classes/systemd-boot.bbclass delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/classes/systemd.bbclass delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/classes/uboot-config.bbclass delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/classes/uboot-extlinux-config.bbclass delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/classes/uboot-sign.bbclass delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/conf/image-uefi.conf delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/licenses/IJG delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/licenses/NPL-1.1 delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/licenses/curl delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/files/0001-riscv32-Use-double-float-ABI-for-rv32.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/files/0001-tools-image-host-fix-wrong-return-value.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/libubootenv_0.3.2.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-common.inc delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-tools.inc delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-tools_2021.07.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot.inc delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot_2021.07.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/README.md delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers/0001-Add-build-option-GODEBUG-1.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers/0001-Makefile-allow-GO_BUILD_FLAGS-to-be-externally-speci.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers_git.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/files/0001-build-use-oe-provided-GO-and-flags.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/docker-moby_git.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/docker.inc delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-cli-use-external-GO111MODULE-and-cross-compiler.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-dynbinary-use-go-cross-compiler.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-libnetwork-use-GO-instead-of-go.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/docker.init delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/files/0001-Makefile-respect-GOBUILDFLAGS-for-runc-and-remove-re.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker/0001-runc-Add-console-socket-dev-null.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker/0001-runc-docker-SIGUSR1-daemonize.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker_git.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-opencontainers_git.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc.inc delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-boot_249.3.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-bootconf_1.00.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-compat-units.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-conf/journald.conf delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-conf/logind.conf delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-conf/system.conf delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-conf/system.conf-qemuall delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-conf/wired.network delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-conf_1.0.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-machine-units_1.0.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-serialgetty.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-serialgetty/serial-getty@.service delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-systemctl-native.bb delete mode 100755 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-systemctl/systemctl delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd.inc delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/00-create-volatile.conf delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/00-hostnamed-network-user.conf delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-systemd.pc.in-use-ROOTPREFIX-without-suffixed-slash.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-test-parse-argument-Include-signal.h.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0003-implment-systemd-sysv-install-for-OE.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0003-missing_type.h-add-__compare_fn_t-and-comparison_fn_.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0006-Include-netinet-if_ether.h.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0007-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0008-add-missing-FTW_-macros-for-musl.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0009-fix-missing-of-__register_atfork-for-non-glibc-build.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0010-Use-uintmax_t-for-handling-rlim_t.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0011-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0012-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0013-Define-glibc-compatible-basename-for-non-glibc-syste.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0014-Do-not-disable-buffering-when-writing-to-oom_score_a.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0015-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0016-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0017-missing_type.h-add-__compar_d_fn_t-definition.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0018-avoid-redefinition-of-prctl_mm_map-structure.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0019-Handle-missing-LOCK_EX.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0020-Fix-incompatible-pointer-type-struct-sockaddr_un.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0021-test-json.c-define-M_PIl.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0022-do-not-disable-buffer-in-writing-files.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0025-Handle-__cpu_mask-usage.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0026-Handle-missing-gshadow.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0028-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/99-default.preset delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/init delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/org.freedesktop.hostname1_no_polkit.conf delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/systemd-pager.sh delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/touchscreen.rules delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd_249.3.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0001-Export-of-internal-Abseil-changes.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0001-absl-always-use-asm-sgidefs.h.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0002-Remove-maes-option-from-cross-compilation.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/abseil-ppc-fixes.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp_git.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16.15.inc delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0001-allow-CC-and-CXX-to-have-multiple-words.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0002-cmd-go-make-content-based-hash-generation-less-pedan.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0003-allow-GOTOOLDIR-to-be-overridden-in-the-environment.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0004-ld-add-soname-to-shareable-objects.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0005-make.bash-override-CC-when-building-dist-and-go_boot.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0006-cmd-dist-separate-host-and-target-builds.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0007-cmd-go-make-GOROOT-precious-by-default.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0008-use-GOBUILDMODE-to-set-buildmode.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0009-Revert-cmd-go-make-sure-CC-and-CXX-are-absolute.patch delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-binary-native_1.16.15.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-common.inc delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross-canadian.inc delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross-canadian_1.16.15.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross.inc delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross_1.16.15.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-crosssdk.inc delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-crosssdk_1.16.15.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-native_1.16.15.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-runtime.inc delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-runtime_1.16.15.bb delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-target.inc delete mode 100644 meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go_1.16.15.bb diff --git a/meta-webos-backports/meta-webos-backports-3.4/classes/systemd-boot-cfg.bbclass b/meta-webos-backports/meta-webos-backports-3.4/classes/systemd-boot-cfg.bbclass deleted file mode 100644 index b3e0e6ad4..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/classes/systemd-boot-cfg.bbclass +++ /dev/null @@ -1,71 +0,0 @@ -SYSTEMD_BOOT_CFG ?= "${S}/loader.conf" -SYSTEMD_BOOT_ENTRIES ?= "" -SYSTEMD_BOOT_TIMEOUT ?= "10" - -# Uses MACHINE specific KERNEL_IMAGETYPE -PACKAGE_ARCH = "${MACHINE_ARCH}" - -# Need UUID utility code. -inherit fs-uuid - -python build_efi_cfg() { - s = d.getVar("S") - labels = d.getVar('LABELS') - if not labels: - bb.debug(1, "LABELS not defined, nothing to do") - return - - if labels == []: - bb.debug(1, "No labels, nothing to do") - return - - cfile = d.getVar('SYSTEMD_BOOT_CFG') - cdir = os.path.dirname(cfile) - if not os.path.exists(cdir): - os.makedirs(cdir) - try: - cfgfile = open(cfile, 'w') - except OSError: - bb.fatal('Unable to open %s' % cfile) - - cfgfile.write('# Automatically created by OE\n') - cfgfile.write('default %s\n' % (labels.split()[0])) - timeout = d.getVar('SYSTEMD_BOOT_TIMEOUT') - if timeout: - cfgfile.write('timeout %s\n' % timeout) - else: - cfgfile.write('timeout 10\n') - cfgfile.close() - - for label in labels.split(): - localdata = d.createCopy() - - entryfile = "%s/%s.conf" % (s, label) - if not os.path.exists(s): - os.makedirs(s) - d.appendVar("SYSTEMD_BOOT_ENTRIES", " " + entryfile) - try: - entrycfg = open(entryfile, "w") - except OSError: - bb.fatal('Unable to open %s' % entryfile) - - entrycfg.write('title %s\n' % label) - - kernel = localdata.getVar("KERNEL_IMAGETYPE") - entrycfg.write('linux /%s\n' % kernel) - - append = localdata.getVar('APPEND') - initrd = localdata.getVar('INITRD') - - if initrd: - entrycfg.write('initrd /initrd\n') - lb = label - if label == "install": - lb = "install-efi" - entrycfg.write('options LABEL=%s ' % lb) - if append: - append = replace_rootfs_uuid(d, append) - entrycfg.write('%s' % append) - entrycfg.write('\n') - entrycfg.close() -} diff --git a/meta-webos-backports/meta-webos-backports-3.4/classes/systemd-boot.bbclass b/meta-webos-backports/meta-webos-backports-3.4/classes/systemd-boot.bbclass deleted file mode 100644 index 57ec0acbc..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/classes/systemd-boot.bbclass +++ /dev/null @@ -1,35 +0,0 @@ -# Copyright (C) 2016 Intel Corporation -# -# Released under the MIT license (see COPYING.MIT) - -# systemd-boot.bbclass - The "systemd-boot" is essentially the gummiboot merged into systemd. -# The original standalone gummiboot project is dead without any more -# maintenance. -# -# Set EFI_PROVIDER = "systemd-boot" to use systemd-boot on your live images instead of grub-efi -# (images built by image-live.bbclass) - -do_bootimg[depends] += "${MLPREFIX}systemd-boot:do_deploy" - -require conf/image-uefi.conf -# Need UUID utility code. -inherit fs-uuid - -efi_populate() { - efi_populate_common "$1" systemd - - # systemd-boot requires these paths for configuration files - # they are not customizable so no point in new vars - install -d ${DEST}/loader - install -d ${DEST}/loader/entries - install -m 0644 ${SYSTEMD_BOOT_CFG} ${DEST}/loader/loader.conf - for i in ${SYSTEMD_BOOT_ENTRIES}; do - install -m 0644 ${i} ${DEST}/loader/entries - done -} - -efi_iso_populate:append() { - cp -r $iso_dir/loader ${EFIIMGDIR} -} - -inherit systemd-boot-cfg diff --git a/meta-webos-backports/meta-webos-backports-3.4/classes/systemd.bbclass b/meta-webos-backports/meta-webos-backports-3.4/classes/systemd.bbclass deleted file mode 100644 index 09ec52792..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/classes/systemd.bbclass +++ /dev/null @@ -1,233 +0,0 @@ -# The list of packages that should have systemd packaging scripts added. For -# each entry, optionally have a SYSTEMD_SERVICE:[package] that lists the service -# files in this package. If this variable isn't set, [package].service is used. -SYSTEMD_PACKAGES ?= "${PN}" -SYSTEMD_PACKAGES:class-native ?= "" -SYSTEMD_PACKAGES:class-nativesdk ?= "" - -# Whether to enable or disable the services on installation. -SYSTEMD_AUTO_ENABLE ??= "enable" - -# This class will be included in any recipe that supports systemd init scripts, -# even if systemd is not in DISTRO_FEATURES. As such don't make any changes -# directly but check the DISTRO_FEATURES first. -python __anonymous() { - # If the distro features have systemd but not sysvinit, inhibit update-rcd - # from doing any work so that pure-systemd images don't have redundant init - # files. - if bb.utils.contains('DISTRO_FEATURES', 'systemd', True, False, d): - d.appendVar("DEPENDS", " systemd-systemctl-native") - d.appendVar("PACKAGE_WRITE_DEPS", " systemd-systemctl-native") - if not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d): - d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1") -} - -systemd_postinst() { -if systemctl >/dev/null 2>/dev/null; then - OPTS="" - - if [ -n "$D" ]; then - OPTS="--root=$D" - fi - - if [ "${SYSTEMD_AUTO_ENABLE}" = "enable" ]; then - for service in ${SYSTEMD_SERVICE_ESCAPED}; do - systemctl ${OPTS} enable "$service" - done - fi - - if [ -z "$D" ]; then - systemctl daemon-reload - systemctl preset ${SYSTEMD_SERVICE_ESCAPED} - - if [ "${SYSTEMD_AUTO_ENABLE}" = "enable" ]; then - systemctl --no-block restart ${SYSTEMD_SERVICE_ESCAPED} - fi - fi -fi -} - -systemd_prerm() { -if systemctl >/dev/null 2>/dev/null; then - if [ -z "$D" ]; then - systemctl stop ${SYSTEMD_SERVICE_ESCAPED} - - systemctl disable ${SYSTEMD_SERVICE_ESCAPED} - fi -fi -} - - -systemd_populate_packages[vardeps] += "systemd_prerm systemd_postinst" -systemd_populate_packages[vardepsexclude] += "OVERRIDES" - - -python systemd_populate_packages() { - import re - import shlex - - if not bb.utils.contains('DISTRO_FEATURES', 'systemd', True, False, d): - return - - def get_package_var(d, var, pkg): - val = (d.getVar('%s:%s' % (var, pkg)) or "").strip() - if val == "": - val = (d.getVar(var) or "").strip() - return val - - # Check if systemd-packages already included in PACKAGES - def systemd_check_package(pkg_systemd): - packages = d.getVar('PACKAGES') - if not pkg_systemd in packages.split(): - bb.error('%s does not appear in package list, please add it' % pkg_systemd) - - - def systemd_generate_package_scripts(pkg): - bb.debug(1, 'adding systemd calls to postinst/postrm for %s' % pkg) - - paths_escaped = ' '.join(shlex.quote(s) for s in d.getVar('SYSTEMD_SERVICE:' + pkg).split()) - d.setVar('SYSTEMD_SERVICE_ESCAPED:' + pkg, paths_escaped) - - # Add pkg to the overrides so that it finds the SYSTEMD_SERVICE:pkg - # variable. - localdata = d.createCopy() - localdata.prependVar("OVERRIDES", pkg + ":") - - postinst = d.getVar('pkg_postinst:%s' % pkg) - if not postinst: - postinst = '#!/bin/sh\n' - postinst += localdata.getVar('systemd_postinst') - d.setVar('pkg_postinst:%s' % pkg, postinst) - - prerm = d.getVar('pkg_prerm:%s' % pkg) - if not prerm: - prerm = '#!/bin/sh\n' - prerm += localdata.getVar('systemd_prerm') - d.setVar('pkg_prerm:%s' % pkg, prerm) - - - # Add files to FILES:*-systemd if existent and not already done - def systemd_append_file(pkg_systemd, file_append): - appended = False - if os.path.exists(oe.path.join(d.getVar("D"), file_append)): - var_name = "FILES:" + pkg_systemd - files = d.getVar(var_name, False) or "" - if file_append not in files.split(): - d.appendVar(var_name, " " + file_append) - appended = True - return appended - - # Add systemd files to FILES:*-systemd, parse for Also= and follow recursive - def systemd_add_files_and_parse(pkg_systemd, path, service, keys): - # avoid infinite recursion - if systemd_append_file(pkg_systemd, oe.path.join(path, service)): - fullpath = oe.path.join(d.getVar("D"), path, service) - if service.find('.service') != -1: - # for *.service add *@.service - service_base = service.replace('.service', '') - systemd_add_files_and_parse(pkg_systemd, path, service_base + '@.service', keys) - if service.find('.socket') != -1: - # for *.socket add *.service and *@.service - service_base = service.replace('.socket', '') - systemd_add_files_and_parse(pkg_systemd, path, service_base + '.service', keys) - systemd_add_files_and_parse(pkg_systemd, path, service_base + '@.service', keys) - for key in keys.split(): - # recurse all dependencies found in keys ('Also';'Conflicts';..) and add to files - cmd = "grep %s %s | sed 's,%s=,,g' | tr ',' '\\n'" % (key, shlex.quote(fullpath), key) - pipe = os.popen(cmd, 'r') - line = pipe.readline() - while line: - line = line.replace('\n', '') - systemd_add_files_and_parse(pkg_systemd, path, line, keys) - line = pipe.readline() - pipe.close() - - # Check service-files and call systemd_add_files_and_parse for each entry - def systemd_check_services(): - searchpaths = [oe.path.join(d.getVar("sysconfdir"), "systemd", "system"),] - searchpaths.append(d.getVar("systemd_system_unitdir")) - systemd_packages = d.getVar('SYSTEMD_PACKAGES') - - keys = 'Also' - # scan for all in SYSTEMD_SERVICE[] - for pkg_systemd in systemd_packages.split(): - for service in get_package_var(d, 'SYSTEMD_SERVICE', pkg_systemd).split(): - path_found = '' - - # Deal with adding, for example, 'ifplugd@eth0.service' from - # 'ifplugd@.service' - base = None - at = service.find('@') - if at != -1: - ext = service.rfind('.') - base = service[:at] + '@' + service[ext:] - - for path in searchpaths: - if os.path.exists(oe.path.join(d.getVar("D"), path, service)): - path_found = path - break - elif base is not None: - if os.path.exists(oe.path.join(d.getVar("D"), path, base)): - path_found = path - break - - if path_found != '': - systemd_add_files_and_parse(pkg_systemd, path_found, service, keys) - else: - bb.fatal("Didn't find service unit '{0}', specified in SYSTEMD_SERVICE:{1}. {2}".format( - service, pkg_systemd, "Also looked for service unit '{0}'.".format(base) if base is not None else "")) - - def systemd_create_presets(pkg, action): - presetf = oe.path.join(d.getVar("PKGD"), d.getVar("systemd_unitdir"), "system-preset/98-%s.preset" % pkg) - bb.utils.mkdirhier(os.path.dirname(presetf)) - with open(presetf, 'a') as fd: - for service in d.getVar('SYSTEMD_SERVICE:%s' % pkg).split(): - fd.write("%s %s\n" % (action,service)) - d.appendVar("FILES:%s" % pkg, ' ' + oe.path.join(d.getVar("systemd_unitdir"), "system-preset/98-%s.preset" % pkg)) - - # Run all modifications once when creating package - if os.path.exists(d.getVar("D")): - for pkg in d.getVar('SYSTEMD_PACKAGES').split(): - systemd_check_package(pkg) - if d.getVar('SYSTEMD_SERVICE:' + pkg): - systemd_generate_package_scripts(pkg) - action = get_package_var(d, 'SYSTEMD_AUTO_ENABLE', pkg) - if action in ("enable", "disable"): - systemd_create_presets(pkg, action) - elif action not in ("mask", "preset"): - bb.fatal("SYSTEMD_AUTO_ENABLE:%s '%s' is not 'enable', 'disable', 'mask' or 'preset'" % (pkg, action)) - systemd_check_services() -} - -PACKAGESPLITFUNCS:prepend = "systemd_populate_packages " - -python rm_systemd_unitdir (){ - import shutil - if not bb.utils.contains('DISTRO_FEATURES', 'systemd', True, False, d): - systemd_unitdir = oe.path.join(d.getVar("D"), d.getVar('systemd_unitdir')) - if os.path.exists(systemd_unitdir): - shutil.rmtree(systemd_unitdir) - systemd_libdir = os.path.dirname(systemd_unitdir) - if (os.path.exists(systemd_libdir) and not os.listdir(systemd_libdir)): - os.rmdir(systemd_libdir) -} - -python rm_sysvinit_initddir (){ - import shutil - sysv_initddir = oe.path.join(d.getVar("D"), (d.getVar('INIT_D_DIR') or "/etc/init.d")) - - if bb.utils.contains('DISTRO_FEATURES', 'systemd', True, False, d) and \ - not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d) and \ - os.path.exists(sysv_initddir): - systemd_system_unitdir = oe.path.join(d.getVar("D"), d.getVar('systemd_system_unitdir')) - - # If systemd_system_unitdir contains anything, delete sysv_initddir - if (os.path.exists(systemd_system_unitdir) and os.listdir(systemd_system_unitdir)): - shutil.rmtree(sysv_initddir) -} - -do_install[postfuncs] += "${RMINITDIR} " -RMINITDIR:class-target = " rm_sysvinit_initddir rm_systemd_unitdir " -RMINITDIR:class-nativesdk = " rm_sysvinit_initddir rm_systemd_unitdir " -RMINITDIR = "" - diff --git a/meta-webos-backports/meta-webos-backports-3.4/classes/uboot-config.bbclass b/meta-webos-backports/meta-webos-backports-3.4/classes/uboot-config.bbclass deleted file mode 100644 index 07a303d0a..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/classes/uboot-config.bbclass +++ /dev/null @@ -1,127 +0,0 @@ -# Handle U-Boot config for a machine -# -# The format to specify it, in the machine, is: -# -# UBOOT_CONFIG ??= -# UBOOT_CONFIG[foo] = "config,images,binary" -# -# or -# -# UBOOT_MACHINE = "config" -# -# Copyright 2013, 2014 (C) O.S. Systems Software LTDA. - -def removesuffix(s, suffix): - if suffix and s.endswith(suffix): - return s[:-len(suffix)] - return s - -# Some versions of u-boot use .bin and others use .img. By default use .bin -# but enable individual recipes to change this value. -UBOOT_SUFFIX ??= "bin" -UBOOT_BINARY ?= "u-boot.${UBOOT_SUFFIX}" -UBOOT_BINARYNAME ?= "${@os.path.splitext(d.getVar("UBOOT_BINARY"))[0]}" -UBOOT_IMAGE ?= "${UBOOT_BINARYNAME}-${MACHINE}-${PV}-${PR}.${UBOOT_SUFFIX}" -UBOOT_SYMLINK ?= "${UBOOT_BINARYNAME}-${MACHINE}.${UBOOT_SUFFIX}" -UBOOT_MAKE_TARGET ?= "all" - -# Output the ELF generated. Some platforms can use the ELF file and directly -# load it (JTAG booting, QEMU) additionally the ELF can be used for debugging -# purposes. -UBOOT_ELF ?= "" -UBOOT_ELF_SUFFIX ?= "elf" -UBOOT_ELF_IMAGE ?= "u-boot-${MACHINE}-${PV}-${PR}.${UBOOT_ELF_SUFFIX}" -UBOOT_ELF_BINARY ?= "u-boot.${UBOOT_ELF_SUFFIX}" -UBOOT_ELF_SYMLINK ?= "u-boot-${MACHINE}.${UBOOT_ELF_SUFFIX}" - -# Some versions of u-boot build an SPL (Second Program Loader) image that -# should be packaged along with the u-boot binary as well as placed in the -# deploy directory. For those versions they can set the following variables -# to allow packaging the SPL. -SPL_SUFFIX ?= "" -SPL_BINARY ?= "" -SPL_DELIMITER ?= "${@'.' if d.getVar("SPL_SUFFIX") else ''}" -SPL_BINARYFILE ?= "${@os.path.basename(d.getVar("SPL_BINARY"))}" -SPL_BINARYNAME ?= "${@removesuffix(d.getVar("SPL_BINARYFILE"), "." + d.getVar("SPL_SUFFIX"))}" -SPL_IMAGE ?= "${SPL_BINARYNAME}-${MACHINE}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX}" -SPL_SYMLINK ?= "${SPL_BINARYNAME}-${MACHINE}${SPL_DELIMITER}${SPL_SUFFIX}" - -# Additional environment variables or a script can be installed alongside -# u-boot to be used automatically on boot. This file, typically 'uEnv.txt' -# or 'boot.scr', should be packaged along with u-boot as well as placed in the -# deploy directory. Machine configurations needing one of these files should -# include it in the SRC_URI and set the UBOOT_ENV parameter. -UBOOT_ENV_SUFFIX ?= "txt" -UBOOT_ENV ?= "" -UBOOT_ENV_BINARY ?= "${UBOOT_ENV}.${UBOOT_ENV_SUFFIX}" -UBOOT_ENV_IMAGE ?= "${UBOOT_ENV}-${MACHINE}-${PV}-${PR}.${UBOOT_ENV_SUFFIX}" -UBOOT_ENV_SYMLINK ?= "${UBOOT_ENV}-${MACHINE}.${UBOOT_ENV_SUFFIX}" - -# Default name of u-boot initial env, but enable individual recipes to change -# this value. -UBOOT_INITIAL_ENV ?= "${PN}-initial-env" - -# U-Boot EXTLINUX variables. U-Boot searches for /boot/extlinux/extlinux.conf -# to find EXTLINUX conf file. -UBOOT_EXTLINUX_INSTALL_DIR ?= "/boot/extlinux" -UBOOT_EXTLINUX_CONF_NAME ?= "extlinux.conf" -UBOOT_EXTLINUX_SYMLINK ?= "${UBOOT_EXTLINUX_CONF_NAME}-${MACHINE}-${PR}" - -# Options for the device tree compiler passed to mkimage '-D' feature: -UBOOT_MKIMAGE_DTCOPTS ??= "" -SPL_MKIMAGE_DTCOPTS ??= "" - -# mkimage command -UBOOT_MKIMAGE ?= "uboot-mkimage" -UBOOT_MKIMAGE_SIGN ?= "${UBOOT_MKIMAGE}" - -# Arguments passed to mkimage for signing -UBOOT_MKIMAGE_SIGN_ARGS ?= "" -SPL_MKIMAGE_SIGN_ARGS ?= "" - -# Options to deploy the u-boot device tree -UBOOT_DTB ?= "" -UBOOT_DTB_BINARY ??= "" - -python () { - ubootmachine = d.getVar("UBOOT_MACHINE") - ubootconfigflags = d.getVarFlags('UBOOT_CONFIG') - ubootbinary = d.getVar('UBOOT_BINARY') - ubootbinaries = d.getVar('UBOOT_BINARIES') - # The "doc" varflag is special, we don't want to see it here - ubootconfigflags.pop('doc', None) - ubootconfig = (d.getVar('UBOOT_CONFIG') or "").split() - - if not ubootmachine and not ubootconfig: - PN = d.getVar("PN") - FILE = os.path.basename(d.getVar("FILE")) - bb.debug(1, "To build %s, see %s for instructions on \ - setting up your machine config" % (PN, FILE)) - raise bb.parse.SkipRecipe("Either UBOOT_MACHINE or UBOOT_CONFIG must be set in the %s machine configuration." % d.getVar("MACHINE")) - - if ubootmachine and ubootconfig: - raise bb.parse.SkipRecipe("You cannot use UBOOT_MACHINE and UBOOT_CONFIG at the same time.") - - if ubootconfigflags and ubootbinaries: - raise bb.parse.SkipRecipe("You cannot use UBOOT_BINARIES as it is internal to uboot_config.bbclass.") - - if len(ubootconfig) > 0: - for config in ubootconfig: - for f, v in ubootconfigflags.items(): - if config == f: - items = v.split(',') - if items[0] and len(items) > 3: - raise bb.parse.SkipRecipe('Only config,images,binary can be specified!') - d.appendVar('UBOOT_MACHINE', ' ' + items[0]) - # IMAGE_FSTYPES appending - if len(items) > 1 and items[1]: - bb.debug(1, "Appending '%s' to IMAGE_FSTYPES." % items[1]) - d.appendVar('IMAGE_FSTYPES', ' ' + items[1]) - if len(items) > 2 and items[2]: - bb.debug(1, "Appending '%s' to UBOOT_BINARIES." % items[2]) - d.appendVar('UBOOT_BINARIES', ' ' + items[2]) - else: - bb.debug(1, "Appending '%s' to UBOOT_BINARIES." % ubootbinary) - d.appendVar('UBOOT_BINARIES', ' ' + ubootbinary) - break -} diff --git a/meta-webos-backports/meta-webos-backports-3.4/classes/uboot-extlinux-config.bbclass b/meta-webos-backports/meta-webos-backports-3.4/classes/uboot-extlinux-config.bbclass deleted file mode 100644 index dcebe7ff3..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/classes/uboot-extlinux-config.bbclass +++ /dev/null @@ -1,158 +0,0 @@ -# uboot-extlinux-config.bbclass -# -# This class allow the extlinux.conf generation for U-Boot use. The -# U-Boot support for it is given to allow the Generic Distribution -# Configuration specification use by OpenEmbedded-based products. -# -# External variables: -# -# UBOOT_EXTLINUX_CONSOLE - Set to "console=ttyX" to change kernel boot -# default console. -# UBOOT_EXTLINUX_LABELS - A list of targets for the automatic config. -# UBOOT_EXTLINUX_KERNEL_ARGS - Add additional kernel arguments. -# UBOOT_EXTLINUX_KERNEL_IMAGE - Kernel image name. -# UBOOT_EXTLINUX_FDTDIR - Device tree directory. -# UBOOT_EXTLINUX_FDT - Device tree file. -# UBOOT_EXTLINUX_INITRD - Indicates a list of filesystem images to -# concatenate and use as an initrd (optional). -# UBOOT_EXTLINUX_MENU_DESCRIPTION - Name to use as description. -# UBOOT_EXTLINUX_ROOT - Root kernel cmdline. -# UBOOT_EXTLINUX_TIMEOUT - Timeout before DEFAULT selection is made. -# Measured in 1/10 of a second. -# UBOOT_EXTLINUX_DEFAULT_LABEL - Target to be selected by default after -# the timeout period -# -# If there's only one label system will boot automatically and menu won't be -# created. If you want to use more than one labels, e.g linux and alternate, -# use overrides to set menu description, console and others variables. -# -# Ex: -# -# UBOOT_EXTLINUX_LABELS ??= "default fallback" -# -# UBOOT_EXTLINUX_DEFAULT_LABEL ??= "Linux Default" -# UBOOT_EXTLINUX_TIMEOUT ??= "30" -# -# UBOOT_EXTLINUX_KERNEL_IMAGE_default ??= "../zImage" -# UBOOT_EXTLINUX_MENU_DESCRIPTION_default ??= "Linux Default" -# -# UBOOT_EXTLINUX_KERNEL_IMAGE_fallback ??= "../zImage-fallback" -# UBOOT_EXTLINUX_MENU_DESCRIPTION_fallback ??= "Linux Fallback" -# -# Results: -# -# menu title Select the boot mode -# TIMEOUT 30 -# DEFAULT Linux Default -# LABEL Linux Default -# KERNEL ../zImage -# FDTDIR ../ -# APPEND root=/dev/mmcblk2p2 rootwait rw console=${console} -# LABEL Linux Fallback -# KERNEL ../zImage-fallback -# FDTDIR ../ -# APPEND root=/dev/mmcblk2p2 rootwait rw console=${console} -# -# Copyright (C) 2016, O.S. Systems Software LTDA. All Rights Reserved -# Released under the MIT license (see packages/COPYING) -# -# The kernel has an internal default console, which you can override with -# a console=...some_tty... -UBOOT_EXTLINUX_CONSOLE ??= "console=${console},${baudrate}" -UBOOT_EXTLINUX_LABELS ??= "linux" -UBOOT_EXTLINUX_FDT ??= "" -UBOOT_EXTLINUX_FDTDIR ??= "../" -UBOOT_EXTLINUX_KERNEL_IMAGE ??= "../${KERNEL_IMAGETYPE}" -UBOOT_EXTLINUX_KERNEL_ARGS ??= "rootwait rw" -UBOOT_EXTLINUX_MENU_DESCRIPTION:linux ??= "${DISTRO_NAME}" - -UBOOT_EXTLINUX_CONFIG = "${B}/extlinux.conf" - -python do_create_extlinux_config() { - if d.getVar("UBOOT_EXTLINUX") != "1": - return - - if not d.getVar('WORKDIR'): - bb.error("WORKDIR not defined, unable to package") - - labels = d.getVar('UBOOT_EXTLINUX_LABELS') - if not labels: - bb.fatal("UBOOT_EXTLINUX_LABELS not defined, nothing to do") - - if not labels.strip(): - bb.fatal("No labels, nothing to do") - - cfile = d.getVar('UBOOT_EXTLINUX_CONFIG') - if not cfile: - bb.fatal('Unable to read UBOOT_EXTLINUX_CONFIG') - - localdata = bb.data.createCopy(d) - - try: - with open(cfile, 'w') as cfgfile: - cfgfile.write('# Generic Distro Configuration file generated by OpenEmbedded\n') - - if len(labels.split()) > 1: - cfgfile.write('menu title Select the boot mode\n') - - timeout = localdata.getVar('UBOOT_EXTLINUX_TIMEOUT') - if timeout: - cfgfile.write('TIMEOUT %s\n' % (timeout)) - - if len(labels.split()) > 1: - default = localdata.getVar('UBOOT_EXTLINUX_DEFAULT_LABEL') - if default: - cfgfile.write('DEFAULT %s\n' % (default)) - - # Need to deconflict the labels with existing overrides - label_overrides = labels.split() - default_overrides = localdata.getVar('OVERRIDES').split(':') - # We're keeping all the existing overrides that aren't used as a label - # an override for that label will be added back in while we're processing that label - keep_overrides = list(filter(lambda x: x not in label_overrides, default_overrides)) - - for label in labels.split(): - - localdata.setVar('OVERRIDES', ':'.join(keep_overrides + [label])) - - extlinux_console = localdata.getVar('UBOOT_EXTLINUX_CONSOLE') - - menu_description = localdata.getVar('UBOOT_EXTLINUX_MENU_DESCRIPTION') - if not menu_description: - menu_description = label - - root = localdata.getVar('UBOOT_EXTLINUX_ROOT') - if not root: - bb.fatal('UBOOT_EXTLINUX_ROOT not defined') - - kernel_image = localdata.getVar('UBOOT_EXTLINUX_KERNEL_IMAGE') - fdtdir = localdata.getVar('UBOOT_EXTLINUX_FDTDIR') - - fdt = localdata.getVar('UBOOT_EXTLINUX_FDT') - - if fdt: - cfgfile.write('LABEL %s\n\tKERNEL %s\n\tFDT %s\n' % - (menu_description, kernel_image, fdt)) - elif fdtdir: - cfgfile.write('LABEL %s\n\tKERNEL %s\n\tFDTDIR %s\n' % - (menu_description, kernel_image, fdtdir)) - else: - cfgfile.write('LABEL %s\n\tKERNEL %s\n' % (menu_description, kernel_image)) - - kernel_args = localdata.getVar('UBOOT_EXTLINUX_KERNEL_ARGS') - - initrd = localdata.getVar('UBOOT_EXTLINUX_INITRD') - if initrd: - cfgfile.write('\tINITRD %s\n'% initrd) - - kernel_args = root + " " + kernel_args - cfgfile.write('\tAPPEND %s %s\n' % (kernel_args, extlinux_console)) - - except OSError: - bb.fatal('Unable to open %s' % (cfile)) -} -UBOOT_EXTLINUX_VARS = "CONSOLE MENU_DESCRIPTION ROOT KERNEL_IMAGE FDTDIR FDT KERNEL_ARGS INITRD" -do_create_extlinux_config[vardeps] += "${@' '.join(['UBOOT_EXTLINUX_%s_%s' % (v, l) for v in d.getVar('UBOOT_EXTLINUX_VARS').split() for l in d.getVar('UBOOT_EXTLINUX_LABELS').split()])}" -do_create_extlinux_config[vardepsexclude] += "OVERRIDES" - -addtask create_extlinux_config before do_install do_deploy after do_compile diff --git a/meta-webos-backports/meta-webos-backports-3.4/classes/uboot-sign.bbclass b/meta-webos-backports/meta-webos-backports-3.4/classes/uboot-sign.bbclass deleted file mode 100644 index c39b30f43..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/classes/uboot-sign.bbclass +++ /dev/null @@ -1,494 +0,0 @@ -# This file is part of U-Boot verified boot support and is intended to be -# inherited from u-boot recipe and from kernel-fitimage.bbclass. -# -# The signature procedure requires the user to generate an RSA key and -# certificate in a directory and to define the following variable: -# -# UBOOT_SIGN_KEYDIR = "/keys/directory" -# UBOOT_SIGN_KEYNAME = "dev" # keys name in keydir (eg. "dev.crt", "dev.key") -# UBOOT_MKIMAGE_DTCOPTS = "-I dts -O dtb -p 2000" -# UBOOT_SIGN_ENABLE = "1" -# -# As verified boot depends on fitImage generation, following is also required: -# -# KERNEL_CLASSES ?= " kernel-fitimage " -# KERNEL_IMAGETYPE ?= "fitImage" -# -# The signature support is limited to the use of CONFIG_OF_SEPARATE in U-Boot. -# -# The tasks sequence is set as below, using DEPLOY_IMAGE_DIR as common place to -# treat the device tree blob: -# -# * u-boot:do_install:append -# Install UBOOT_DTB_BINARY to datadir, so that kernel can use it for -# signing, and kernel will deploy UBOOT_DTB_BINARY after signs it. -# -# * virtual/kernel:do_assemble_fitimage -# Sign the image -# -# * u-boot:do_deploy[postfuncs] -# Deploy files like UBOOT_DTB_IMAGE, UBOOT_DTB_SYMLINK and others. -# -# For more details on signature process, please refer to U-Boot documentation. - -# We need some variables from u-boot-config -inherit uboot-config - -# Enable use of a U-Boot fitImage -UBOOT_FITIMAGE_ENABLE ?= "0" - -# Signature activation - these require their respective fitImages -UBOOT_SIGN_ENABLE ?= "0" -SPL_SIGN_ENABLE ?= "0" - -# Default value for deployment filenames. -UBOOT_DTB_IMAGE ?= "u-boot-${MACHINE}-${PV}-${PR}.dtb" -UBOOT_DTB_BINARY ?= "u-boot.dtb" -UBOOT_DTB_SYMLINK ?= "u-boot-${MACHINE}.dtb" -UBOOT_NODTB_IMAGE ?= "u-boot-nodtb-${MACHINE}-${PV}-${PR}.bin" -UBOOT_NODTB_BINARY ?= "u-boot-nodtb.bin" -UBOOT_NODTB_SYMLINK ?= "u-boot-nodtb-${MACHINE}.bin" -UBOOT_ITS_IMAGE ?= "u-boot-its-${MACHINE}-${PV}-${PR}" -UBOOT_ITS ?= "u-boot.its" -UBOOT_ITS_SYMLINK ?= "u-boot-its-${MACHINE}" -UBOOT_FITIMAGE_IMAGE ?= "u-boot-fitImage-${MACHINE}-${PV}-${PR}" -UBOOT_FITIMAGE_BINARY ?= "u-boot-fitImage" -UBOOT_FITIMAGE_SYMLINK ?= "u-boot-fitImage-${MACHINE}" -SPL_DIR ?= "spl" -SPL_DTB_IMAGE ?= "u-boot-spl-${MACHINE}-${PV}-${PR}.dtb" -SPL_DTB_BINARY ?= "u-boot-spl.dtb" -SPL_DTB_SYMLINK ?= "u-boot-spl-${MACHINE}.dtb" -SPL_NODTB_IMAGE ?= "u-boot-spl-nodtb-${MACHINE}-${PV}-${PR}.bin" -SPL_NODTB_BINARY ?= "u-boot-spl-nodtb.bin" -SPL_NODTB_SYMLINK ?= "u-boot-spl-nodtb-${MACHINE}.bin" - -# U-Boot fitImage description -UBOOT_FIT_DESC ?= "U-Boot fitImage for ${DISTRO_NAME}/${PV}/${MACHINE}" - -# Kernel / U-Boot fitImage Hash Algo -FIT_HASH_ALG ?= "sha256" -UBOOT_FIT_HASH_ALG ?= "sha256" - -# Kernel / U-Boot fitImage Signature Algo -FIT_SIGN_ALG ?= "rsa2048" -UBOOT_FIT_SIGN_ALG ?= "rsa2048" - -# Generate keys for signing Kernel / U-Boot fitImage -FIT_GENERATE_KEYS ?= "0" -UBOOT_FIT_GENERATE_KEYS ?= "0" - -# Size of private keys in number of bits -FIT_SIGN_NUMBITS ?= "2048" -UBOOT_FIT_SIGN_NUMBITS ?= "2048" - -# args to openssl genrsa (Default is just the public exponent) -FIT_KEY_GENRSA_ARGS ?= "-F4" -UBOOT_FIT_KEY_GENRSA_ARGS ?= "-F4" - -# args to openssl req (Default is -batch for non interactive mode and -# -new for new certificate) -FIT_KEY_REQ_ARGS ?= "-batch -new" -UBOOT_FIT_KEY_REQ_ARGS ?= "-batch -new" - -# Standard format for public key certificate -FIT_KEY_SIGN_PKCS ?= "-x509" -UBOOT_FIT_KEY_SIGN_PKCS ?= "-x509" - -# Functions on this bbclass can apply to either U-boot or Kernel, -# depending on the scenario -UBOOT_PN = "${@d.getVar('PREFERRED_PROVIDER_u-boot') or 'u-boot'}" -KERNEL_PN = "${@d.getVar('PREFERRED_PROVIDER_virtual/kernel')}" - -# We need u-boot-tools-native if we're creating a U-Boot fitImage -python() { - if d.getVar('UBOOT_FITIMAGE_ENABLE') == '1': - depends = d.getVar("DEPENDS") - depends = "%s u-boot-tools-native dtc-native" % depends - d.setVar("DEPENDS", depends) -} - -concat_dtb_helper() { - if [ -e "${UBOOT_DTB_BINARY}" ]; then - ln -sf ${UBOOT_DTB_IMAGE} ${DEPLOYDIR}/${UBOOT_DTB_BINARY} - ln -sf ${UBOOT_DTB_IMAGE} ${DEPLOYDIR}/${UBOOT_DTB_SYMLINK} - fi - - if [ -f "${UBOOT_NODTB_BINARY}" ]; then - install ${UBOOT_NODTB_BINARY} ${DEPLOYDIR}/${UBOOT_NODTB_IMAGE} - ln -sf ${UBOOT_NODTB_IMAGE} ${DEPLOYDIR}/${UBOOT_NODTB_SYMLINK} - ln -sf ${UBOOT_NODTB_IMAGE} ${DEPLOYDIR}/${UBOOT_NODTB_BINARY} - fi - - # If we're not using a signed u-boot fit, concatenate SPL w/o DTB & U-Boot DTB - # with public key (otherwise it will be deployed by the equivalent - # concat_spl_dtb_helper function - cf. kernel-fitimage.bbclass for more details) - if [ "${SPL_SIGN_ENABLE}" != "1" ] ; then - deployed_uboot_dtb_binary='${DEPLOY_DIR_IMAGE}/${UBOOT_DTB_IMAGE}' - if [ "x${UBOOT_SUFFIX}" = "ximg" -o "x${UBOOT_SUFFIX}" = "xrom" ] && \ - [ -e "$deployed_uboot_dtb_binary" ]; then - oe_runmake EXT_DTB=$deployed_uboot_dtb_binary - install ${UBOOT_BINARY} ${DEPLOYDIR}/${UBOOT_IMAGE} - elif [ -e "${DEPLOYDIR}/${UBOOT_NODTB_IMAGE}" -a -e "$deployed_uboot_dtb_binary" ]; then - cd ${DEPLOYDIR} - cat ${UBOOT_NODTB_IMAGE} $deployed_uboot_dtb_binary | tee ${B}/${CONFIG_B_PATH}/${UBOOT_BINARY} > ${UBOOT_IMAGE} - - if [ -n "${UBOOT_CONFIG}" ] - then - for config in ${UBOOT_MACHINE}; do - i=$(expr $i + 1); - for type in ${UBOOT_CONFIG}; do - j=$(expr $j + 1); - if [ $j -eq $i ] - then - cp ${UBOOT_IMAGE} ${B}/${CONFIG_B_PATH}/u-boot-$type.${UBOOT_SUFFIX} - fi - done - done - fi - else - bbwarn "Failure while adding public key to u-boot binary. Verified boot won't be available." - fi - fi -} - -concat_spl_dtb_helper() { - - # We only deploy symlinks to the u-boot-spl.dtb,as the KERNEL_PN will - # be responsible for deploying the real file - if [ -e "${SPL_DIR}/${SPL_DTB_BINARY}" ] ; then - ln -sf ${SPL_DTB_IMAGE} ${DEPLOYDIR}/${SPL_DTB_SYMLINK} - ln -sf ${SPL_DTB_IMAGE} ${DEPLOYDIR}/${SPL_DTB_BINARY} - fi - - # Concatenate the SPL nodtb binary and u-boot.dtb - deployed_spl_dtb_binary='${DEPLOY_DIR_IMAGE}/${SPL_DTB_IMAGE}' - if [ -e "${DEPLOYDIR}/${SPL_NODTB_IMAGE}" -a -e "$deployed_spl_dtb_binary" ] ; then - cd ${DEPLOYDIR} - cat ${SPL_NODTB_IMAGE} $deployed_spl_dtb_binary | tee ${B}/${CONFIG_B_PATH}/${SPL_BINARY} > ${SPL_IMAGE} - else - bbwarn "Failure while adding public key to spl binary. Verified U-Boot boot won't be available." - fi -} - - -concat_dtb() { - if [ "${UBOOT_SIGN_ENABLE}" = "1" -a "${PN}" = "${UBOOT_PN}" -a -n "${UBOOT_DTB_BINARY}" ]; then - mkdir -p ${DEPLOYDIR} - if [ -n "${UBOOT_CONFIG}" ]; then - for config in ${UBOOT_MACHINE}; do - CONFIG_B_PATH="${config}" - cd ${B}/${config} - concat_dtb_helper - done - else - CONFIG_B_PATH="" - cd ${B} - concat_dtb_helper - fi - fi -} - -concat_spl_dtb() { - if [ "${SPL_SIGN_ENABLE}" = "1" -a "${PN}" = "${UBOOT_PN}" -a -n "${SPL_DTB_BINARY}" ]; then - mkdir -p ${DEPLOYDIR} - if [ -n "${UBOOT_CONFIG}" ]; then - for config in ${UBOOT_MACHINE}; do - CONFIG_B_PATH="${config}" - cd ${B}/${config} - concat_spl_dtb_helper - done - else - CONFIG_B_PATH="" - cd ${B} - concat_spl_dtb_helper - fi - fi -} - - -# Install UBOOT_DTB_BINARY to datadir, so that kernel can use it for -# signing, and kernel will deploy UBOOT_DTB_BINARY after signs it. -install_helper() { - if [ -f "${UBOOT_DTB_BINARY}" ]; then - # UBOOT_DTB_BINARY is a symlink to UBOOT_DTB_IMAGE, so we - # need both of them. - install -Dm 0644 ${UBOOT_DTB_BINARY} ${D}${datadir}/${UBOOT_DTB_IMAGE} - ln -sf ${UBOOT_DTB_IMAGE} ${D}${datadir}/${UBOOT_DTB_BINARY} - else - bbwarn "${UBOOT_DTB_BINARY} not found" - fi -} - -# Install SPL dtb and u-boot nodtb to datadir, -install_spl_helper() { - if [ -f "${SPL_DIR}/${SPL_DTB_BINARY}" ]; then - install -Dm 0644 ${SPL_DIR}/${SPL_DTB_BINARY} ${D}${datadir}/${SPL_DTB_IMAGE} - ln -sf ${SPL_DTB_IMAGE} ${D}${datadir}/${SPL_DTB_BINARY} - else - bbwarn "${SPL_DTB_BINARY} not found" - fi - if [ -f "${UBOOT_NODTB_BINARY}" ] ; then - install -Dm 0644 ${UBOOT_NODTB_BINARY} ${D}${datadir}/${UBOOT_NODTB_IMAGE} - ln -sf ${UBOOT_NODTB_IMAGE} ${D}${datadir}/${UBOOT_NODTB_BINARY} - else - bbwarn "${UBOOT_NODTB_BINARY} not found" - fi - - # We need to install a 'stub' u-boot-fitimage + its to datadir, - # so that the KERNEL_PN can use the correct filename when - # assembling and deploying them - touch ${D}/${datadir}/${UBOOT_FITIMAGE_IMAGE} - touch ${D}/${datadir}/${UBOOT_ITS_IMAGE} -} - -do_install:append() { - if [ "${PN}" = "${UBOOT_PN}" ]; then - if [ -n "${UBOOT_CONFIG}" ]; then - for config in ${UBOOT_MACHINE}; do - cd ${B}/${config} - if [ "${UBOOT_SIGN_ENABLE}" = "1" -o "${UBOOT_FITIMAGE_ENABLE}" = "1" ] && \ - [ -n "${UBOOT_DTB_BINARY}" ]; then - install_helper - fi - if [ "${SPL_SIGN_ENABLE}" = "1" -a -n "${SPL_DTB_BINARY}" ]; then - install_spl_helper - fi - done - else - cd ${B} - if [ "${UBOOT_SIGN_ENABLE}" = "1" -o "${UBOOT_FITIMAGE_ENABLE}" = "1" ] && \ - [ -n "${UBOOT_DTB_BINARY}" ]; then - install_helper - fi - if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" -a -n "${SPL_DTB_BINARY}" ]; then - install_spl_helper - fi - fi - fi -} - -do_uboot_generate_rsa_keys() { - if [ "${SPL_SIGN_ENABLE}" = "0" ] && [ "${UBOOT_FIT_GENERATE_KEYS}" = "1" ]; then - bbwarn "UBOOT_FIT_GENERATE_KEYS is set to 1 eventhough SPL_SIGN_ENABLE is set to 0. The keys will not be generated as they won't be used." - fi - - if [ "${SPL_SIGN_ENABLE}" = "1" ] && [ "${UBOOT_FIT_GENERATE_KEYS}" = "1" ]; then - - # Generate keys only if they don't already exist - if [ ! -f "${SPL_SIGN_KEYDIR}/${SPL_SIGN_KEYNAME}".key ] || \ - [ ! -f "${SPL_SIGN_KEYDIR}/${SPL_SIGN_KEYNAME}".crt ]; then - - # make directory if it does not already exist - mkdir -p "${SPL_SIGN_KEYDIR}" - - echo "Generating RSA private key for signing U-Boot fitImage" - openssl genrsa ${UBOOT_FIT_KEY_GENRSA_ARGS} -out \ - "${SPL_SIGN_KEYDIR}/${SPL_SIGN_KEYNAME}".key \ - "${UBOOT_FIT_SIGN_NUMBITS}" - - echo "Generating certificate for signing U-Boot fitImage" - openssl req ${FIT_KEY_REQ_ARGS} "${UBOOT_FIT_KEY_SIGN_PKCS}" \ - -key "${SPL_SIGN_KEYDIR}/${SPL_SIGN_KEYNAME}".key \ - -out "${SPL_SIGN_KEYDIR}/${SPL_SIGN_KEYNAME}".crt - fi - fi - -} - -addtask uboot_generate_rsa_keys before do_uboot_assemble_fitimage after do_compile - -# Create a ITS file for the U-boot FIT, for use when -# we want to sign it so that the SPL can verify it -uboot_fitimage_assemble() { - uboot_its="${1}" - uboot_nodtb_bin="${2}" - uboot_dtb="${3}" - uboot_bin="${4}" - spl_dtb="${5}" - uboot_csum="${UBOOT_FIT_HASH_ALG}" - uboot_sign_algo="${UBOOT_FIT_SIGN_ALG}" - uboot_sign_keyname="${SPL_SIGN_KEYNAME}" - - rm -f ${uboot_its} ${uboot_bin} - - # First we create the ITS script - cat << EOF >> ${uboot_its} -/dts-v1/; - -/ { - description = "${UBOOT_FIT_DESC}"; - #address-cells = <1>; - - images { - uboot { - description = "U-Boot image"; - data = /incbin/("${uboot_nodtb_bin}"); - type = "standalone"; - os = "u-boot"; - arch = "${UBOOT_ARCH}"; - compression = "none"; - load = <${UBOOT_LOADADDRESS}>; - entry = <${UBOOT_ENTRYPOINT}>; -EOF - - if [ "${SPL_SIGN_ENABLE}" = "1" ] ; then - cat << EOF >> ${uboot_its} - signature { - algo = "${uboot_csum},${uboot_sign_algo}"; - key-name-hint = "${uboot_sign_keyname}"; - }; -EOF - fi - - cat << EOF >> ${uboot_its} - }; - fdt { - description = "U-Boot FDT"; - data = /incbin/("${uboot_dtb}"); - type = "flat_dt"; - arch = "${UBOOT_ARCH}"; - compression = "none"; -EOF - - if [ "${SPL_SIGN_ENABLE}" = "1" ] ; then - cat << EOF >> ${uboot_its} - signature { - algo = "${uboot_csum},${uboot_sign_algo}"; - key-name-hint = "${uboot_sign_keyname}"; - }; -EOF - fi - - cat << EOF >> ${uboot_its} - }; - }; - - configurations { - default = "conf"; - conf { - description = "Boot with signed U-Boot FIT"; - loadables = "uboot"; - fdt = "fdt"; - }; - }; -}; -EOF - - # - # Assemble the U-boot FIT image - # - ${UBOOT_MKIMAGE} \ - ${@'-D "${SPL_MKIMAGE_DTCOPTS}"' if len('${SPL_MKIMAGE_DTCOPTS}') else ''} \ - -f ${uboot_its} \ - ${uboot_bin} - - if [ "${SPL_SIGN_ENABLE}" = "1" ] ; then - # - # Sign the U-boot FIT image and add public key to SPL dtb - # - ${UBOOT_MKIMAGE_SIGN} \ - ${@'-D "${SPL_MKIMAGE_DTCOPTS}"' if len('${SPL_MKIMAGE_DTCOPTS}') else ''} \ - -F -k "${SPL_SIGN_KEYDIR}" \ - -K "${spl_dtb}" \ - -r ${uboot_bin} \ - ${SPL_MKIMAGE_SIGN_ARGS} - fi - -} - -do_uboot_assemble_fitimage() { - # This function runs in KERNEL_PN context. The reason for that is that we need to - # support the scenario where UBOOT_SIGN_ENABLE is placing the Kernel fitImage's - # pubkey in the u-boot.dtb file, so that we can use it when building the U-Boot - # fitImage itself. - if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" ] && \ - [ -n "${SPL_DTB_BINARY}" -a "${PN}" = "${KERNEL_PN}" ] ; then - if [ "${UBOOT_SIGN_ENABLE}" != "1" ]; then - # If we're not signing the Kernel fitImage, that means - # we need to copy the u-boot.dtb from staging ourselves - cp -P ${STAGING_DATADIR}/u-boot*.dtb ${B} - fi - # As we are in the kernel context, we need to copy u-boot-spl.dtb from staging first. - # Unfortunately, need to glob on top of ${SPL_DTB_BINARY} since _IMAGE and _SYMLINK - # will contain U-boot's PV - # Similarly, we need to get the filename for the 'stub' u-boot-fitimage + its in - # staging so that we can use it for creating the image with the correct filename - # in the KERNEL_PN context. - # As for the u-boot.dtb (with fitimage's pubkey), it should come from the dependent - # do_assemble_fitimage task - cp -P ${STAGING_DATADIR}/u-boot-spl*.dtb ${B} - cp -P ${STAGING_DATADIR}/u-boot-nodtb*.bin ${B} - rm -rf ${B}/u-boot-fitImage-* ${B}/u-boot-its-* - kernel_uboot_fitimage_name=`basename ${STAGING_DATADIR}/u-boot-fitImage-*` - kernel_uboot_its_name=`basename ${STAGING_DATADIR}/u-boot-its-*` - cd ${B} - uboot_fitimage_assemble ${kernel_uboot_its_name} ${UBOOT_NODTB_BINARY} \ - ${UBOOT_DTB_BINARY} ${kernel_uboot_fitimage_name} \ - ${SPL_DTB_BINARY} - fi -} - -addtask uboot_assemble_fitimage before do_deploy after do_compile - -do_deploy:prepend:pn-${UBOOT_PN}() { - if [ "${UBOOT_SIGN_ENABLE}" = "1" -a -n "${UBOOT_DTB_BINARY}" ] ; then - concat_dtb - fi - - if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" ] ; then - # Deploy the u-boot-nodtb binary and symlinks... - if [ -f "${SPL_DIR}/${SPL_NODTB_BINARY}" ] ; then - echo "Copying u-boot-nodtb binary..." - install -m 0644 ${SPL_DIR}/${SPL_NODTB_BINARY} ${DEPLOYDIR}/${SPL_NODTB_IMAGE} - ln -sf ${SPL_NODTB_IMAGE} ${DEPLOYDIR}/${SPL_NODTB_SYMLINK} - ln -sf ${SPL_NODTB_IMAGE} ${DEPLOYDIR}/${SPL_NODTB_BINARY} - fi - - - # We only deploy the symlinks to the uboot-fitImage and uboot-its - # images, as the KERNEL_PN will take care of deploying the real file - ln -sf ${UBOOT_FITIMAGE_IMAGE} ${DEPLOYDIR}/${UBOOT_FITIMAGE_BINARY} - ln -sf ${UBOOT_FITIMAGE_IMAGE} ${DEPLOYDIR}/${UBOOT_FITIMAGE_SYMLINK} - ln -sf ${UBOOT_ITS_IMAGE} ${DEPLOYDIR}/${UBOOT_ITS} - ln -sf ${UBOOT_ITS_IMAGE} ${DEPLOYDIR}/${UBOOT_ITS_SYMLINK} - fi - - if [ "${SPL_SIGN_ENABLE}" = "1" -a -n "${SPL_DTB_BINARY}" ] ; then - concat_spl_dtb - fi - - -} - -do_deploy:append:pn-${UBOOT_PN}() { - # If we're creating a u-boot fitImage, point u-boot.bin - # symlink since it might get used by image recipes - if [ "${UBOOT_FITIMAGE_ENABLE}" = "1" ] ; then - ln -sf ${UBOOT_FITIMAGE_IMAGE} ${DEPLOYDIR}/${UBOOT_BINARY} - ln -sf ${UBOOT_FITIMAGE_IMAGE} ${DEPLOYDIR}/${UBOOT_SYMLINK} - fi -} - -python () { - if ( (d.getVar('UBOOT_SIGN_ENABLE') == '1' - or d.getVar('UBOOT_FITIMAGE_ENABLE') == '1') - and d.getVar('PN') == d.getVar('UBOOT_PN') - and d.getVar('UBOOT_DTB_BINARY')): - - # Make "bitbake u-boot -cdeploy" deploys the signed u-boot.dtb - # and/or the U-Boot fitImage - d.appendVarFlag('do_deploy', 'depends', ' %s:do_deploy' % d.getVar('KERNEL_PN')) - - if d.getVar('UBOOT_FITIMAGE_ENABLE') == '1' and d.getVar('PN') == d.getVar('KERNEL_PN'): - # As the U-Boot fitImage is created by the KERNEL_PN, we need - # to make sure that the u-boot-spl.dtb and u-boot-spl-nodtb.bin - # files are in the staging dir for it's use - d.appendVarFlag('do_uboot_assemble_fitimage', 'depends', ' %s:do_populate_sysroot' % d.getVar('UBOOT_PN')) - - # If the Kernel fitImage is being signed, we need to - # create the U-Boot fitImage after it - if d.getVar('UBOOT_SIGN_ENABLE') == '1': - d.appendVarFlag('do_uboot_assemble_fitimage', 'depends', ' %s:do_assemble_fitimage' % d.getVar('KERNEL_PN')) - d.appendVarFlag('do_uboot_assemble_fitimage', 'depends', ' %s:do_assemble_fitimage_initramfs' % d.getVar('KERNEL_PN')) - -} diff --git a/meta-webos-backports/meta-webos-backports-3.4/conf/image-uefi.conf b/meta-webos-backports/meta-webos-backports-3.4/conf/image-uefi.conf deleted file mode 100644 index 04a151f3a..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/conf/image-uefi.conf +++ /dev/null @@ -1,21 +0,0 @@ -# Location of EFI files inside EFI System Partition -EFIDIR ?= "/EFI/BOOT" - -# Prefix where ESP is mounted inside rootfs. Set to empty if package is going -# to be installed to ESP directly -EFI_PREFIX ?= "/boot" - -# Location inside rootfs. -EFI_FILES_PATH = "${EFI_PREFIX}${EFIDIR}" - -# The EFI name for the architecture -EFI_ARCH ?= "INVALID" -EFI_ARCH:x86 = "ia32" -EFI_ARCH:x86-64 = "x64" -EFI_ARCH:aarch64 = "aa64" -EFI_ARCH:arm = "arm" -EFI_ARCH:riscv32 = "riscv32" -EFI_ARCH:riscv64 = "riscv64" - -# Determine name of bootloader image -EFI_BOOT_IMAGE ?= "boot${EFI_ARCH}.efi" diff --git a/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf b/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf deleted file mode 100644 index 4227b4576..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/conf/layer.conf +++ /dev/null @@ -1,21 +0,0 @@ -# Copyright (c) 2021-2022 LG Electronics, Inc. - -# We have conf and classes directories => add to BBPATH -BBPATH .= ":${LAYERDIR}" - -# We have recipes-* directories => add to BBFILES -BBFILES += "${LAYERDIR}/recipes-*/*/*.bb \ - ${LAYERDIR}/recipes-*/*/*.bbappend" - -BBFILE_COLLECTIONS += "meta-webos-backports-3.4" -BBFILE_PATTERN_meta-webos-backports-3.4 := "^${LAYERDIR}/" -BBFILE_PRIORITY_meta-webos-backports-3.4 = "35" - -LAYERSERIES_COMPAT_meta-webos-backports-3.4 = "hardknott" - -LAYERDEPENDS_meta-webos-backports-3.4 = " \ - core \ - openembedded-layer \ -" - -LICENSE_PATH += "${LAYERDIR}/licenses" diff --git a/meta-webos-backports/meta-webos-backports-3.4/licenses/IJG b/meta-webos-backports/meta-webos-backports-3.4/licenses/IJG deleted file mode 100644 index 761071caa..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/licenses/IJG +++ /dev/null @@ -1,38 +0,0 @@ -Independent JPEG Group License - -LEGAL ISSUES - -In plain English: - -1. We don't promise that this software works. (But if you find any bugs, please let us know!) -2. You can use this software for whatever you want. You don't have to pay us. -3. You may not pretend that you wrote this software. If you use it in a program, you must acknowledge somewhere in your documentation that you've used the IJG code. - -In legalese: - -The authors make NO WARRANTY or representation, either express or implied, with respect to this software, its quality, accuracy, merchantability, or fitness for a particular purpose. This software is provided "AS IS", and you, its user, assume the entire risk as to its quality and accuracy. - -This software is copyright (C) 1991-1998, Thomas G. Lane. All Rights Reserved except as specified below. - -Permission is hereby granted to use, copy, modify, and distribute this software (or portions thereof) for any purpose, without fee, subject to these conditions: - - (1) If any part of the source code for this software is distributed, then this README file must be included, with this copyright and no-warranty notice unaltered; and any additions, deletions, or changes to the original files must be clearly indicated in accompanying documentation. - (2) If only executable code is distributed, then the accompanying documentation must state that "this software is based in part on the work of the Independent JPEG Group". - (3) Permission for use of this software is granted only if the user accepts full responsibility for any undesirable consequences; the authors accept NO LIABILITY for damages of any kind. - -These conditions apply to any software derived from or based on the IJG code, not just to the unmodified library. If you use our work, you ought to acknowledge us. - -Permission is NOT granted for the use of any IJG author's name or company name in advertising or publicity relating to this software or products derived from it. This software may be referred to only as "the Independent JPEG Group's software". - -We specifically permit and encourage the use of this software as the basis of commercial products, provided that all warranty or liability claims are assumed by the product vendor. - -ansi2knr.c is included in this distribution by permission of L. Peter Deutsch, sole proprietor of its copyright holder, Aladdin Enterprises of Menlo Park, CA. ansi2knr.c is NOT covered by the above copyright and conditions, but instead by the usual distribution terms of the Free Software Foundation; principally, that you must include source code if you redistribute it. (See the file ansi2knr.c for full details.) However, since ansi2knr.c is not needed as part of any program generated from the IJG code, this does not limit you more than the foregoing paragraphs do. - -The Unix configuration script "configure" was produced with GNU Autoconf. It is copyright by the Free Software Foundation but is freely distributable. The same holds for its supporting scripts (config.guess, config.sub, ltconfig, ltmain.sh). Another support script, install-sh, is copyright by M.I.T. but is also freely distributable. - -It appears that the arithmetic coding option of the JPEG spec is covered by patents owned by IBM, AT&T, and Mitsubishi. Hence arithmetic coding cannot legally be used without obtaining one or more licenses. For this reason, support for arithmetic coding has been removed from the free JPEG software. (Since arithmetic coding provides only a marginal gain over the unpatented Huffman mode, it is unlikely that very many implementations will support it.) So far as we are aware, there are no patent restrictions on the remaining code. - -The IJG distribution formerly included code to read and write GIF files. To avoid entanglement with the Unisys LZW patent, GIF reading support has been removed altogether, and the GIF writer has been simplified to produce "uncompressed GIFs". This technique does not use the LZW algorithm; the resulting GIF files are larger than usual, but are readable by all standard GIF decoders. - -We are required to state that - "The Graphics Interchange Format(c) is the Copyright property of CompuServe Incorporated. GIF(sm) is a Service Mark property of CompuServe Incorporated." diff --git a/meta-webos-backports/meta-webos-backports-3.4/licenses/NPL-1.1 b/meta-webos-backports/meta-webos-backports-3.4/licenses/NPL-1.1 deleted file mode 100644 index 62c529640..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/licenses/NPL-1.1 +++ /dev/null @@ -1,186 +0,0 @@ -Netscape Public LIcense version 1.1 - -AMENDMENTS - -The Netscape Public License Version 1.1 ("NPL") consists of the Mozilla Public License Version 1.1 with the following Amendments, including Exhibit A-Netscape Public License.  Files identified with "Exhibit A-Netscape Public License" are governed by the Netscape Public License Version 1.1. - -Additional Terms applicable to the Netscape Public License. - - I. Effect. - These additional terms described in this Netscape Public License -- Amendments shall apply to the Mozilla Communicator client code and to all Covered Code under this License. - - II. "Netscape's Branded Code" means Covered Code that Netscape distributes and/or permits others to distribute under one or more trademark(s) which are controlled by Netscape but which are not licensed for use under this License. - III. Netscape and logo. - This License does not grant any rights to use the trademarks "Netscape", the "Netscape N and horizon" logo or the "Netscape lighthouse" logo, "Netcenter", "Gecko", "Java" or "JavaScript", "Smart Browsing" even if such marks are included in the Original Code or Modifications. - IV. Inability to Comply Due to Contractual Obligation. - Prior to licensing the Original Code under this License, Netscape has licensed third party code for use in Netscape's Branded Code. To the extent that Netscape is limited contractually from making such third party code available under this License, Netscape may choose to reintegrate such code into Covered Code without being required to distribute such code in Source Code form, even if such code would otherwise be considered "Modifications" under this License. - V. Use of Modifications and Covered Code by Initial Developer. - V.1. In General. - The obligations of Section 3 apply to Netscape, except to the extent specified in this Amendment, Section V.2 and V.3. - - V.2. Other Products. - Netscape may include Covered Code in products other than the Netscape's Branded Code which are released by Netscape during the two (2) years following the release date of the Original Code, without such additional products becoming subject to the terms of this License, and may license such additional products on different terms from those contained in this License. - - V.3. Alternative Licensing. - Netscape may license the Source Code of Netscape's Branded Code, including Modifications incorporated therein, without such Netscape Branded Code becoming subject to the terms of this License, and may license such Netscape Branded Code on different terms from those contained in this License. - - VI. Litigation. - Notwithstanding the limitations of Section 11 above, the provisions regarding litigation in Section 11(a), (b) and (c) of the License shall apply to all disputes relating to this License. - - EXHIBIT A-Netscape Public License. -   -"The contents of this file are subject to the Netscape Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/NPL/ - -Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. - -The Original Code is Mozilla Communicator client code, released March 31, 1998. - -The Initial Developer of the Original Code is Netscape Communications Corporation. Portions created by Netscape are Copyright (C) 1998-1999 Netscape Communications Corporation. All Rights Reserved. -Contributor(s): ______________________________________. -   -Alternatively, the contents of this file may be used under the terms of the _____ license (the  "[___] License"), in which case the provisions of [______] License are applicable  instead of those above.  If you wish to allow use of your version of this file only under the terms of the [____] License and not to allow others to use your version of this file under the NPL, indicate your decision by deleting  the provisions above and replace  them with the notice and other provisions required by the [___] License.  If you do not delete the provisions above, a recipient may use your version of this file under either the NPL or the [___] License." - - -Mozilla Public License Version 1.1 - -1. Definitions. - - 1.0.1. "Commercial Use" means distribution or otherwise making the Covered Code available to a third party. - - 1.1. "Contributor" means each entity that creates or contributes to the creation of Modifications. - - 1.2. "Contributor Version" means the combination of the Original Code, prior Modifications used by a Contributor, and the Modifications made by that particular Contributor. - - 1.3. "Covered Code" means the Original Code or Modifications or the combination of the Original Code and Modifications, in each case including portions thereof. - - 1.4. "Electronic Distribution Mechanism" means a mechanism generally accepted in the software development community for the electronic transfer of data. - - 1.5. "Executable" means Covered Code in any form other than Source Code. - - 1.6. "Initial Developer" means the individual or entity identified as the Initial Developer in the Source Code notice required by Exhibit A. - - 1.7. "Larger Work" means a work which combines Covered Code or portions thereof with code not governed by the terms of this License. - - 1.8. "License" means this document. - - 1.8.1. "Licensable" means having the right to grant, to the maximum extent possible, whether at the time of the initial grant or subsequently acquired, any and all of the rights conveyed herein. - - 1.9. "Modifications" means any addition to or deletion from the substance or structure of either the Original Code or any previous Modifications. When Covered Code is released as a series of files, a Modification is: -Any addition to or deletion from the contents of a file containing Original Code or previous Modifications. -Any new file that contains any part of the Original Code or previous Modifications. - - 1.10. "Original Code" means Source Code of computer software code which is described in the Source Code notice required by Exhibit A as Original Code, and which, at the time of its release under this License is not already Covered Code governed by this License. - - 1.10.1. "Patent Claims" means any patent claim(s), now owned or hereafter acquired, including without limitation, method, process, and apparatus claims, in any patent Licensable by grantor. - - 1.11. "Source Code" means the preferred form of the Covered Code for making modifications to it, including all modules it contains, plus any associated interface definition files, scripts used to control compilation and installation of an Executable, or source code differential comparisons against either the Original Code or another well known, available Covered Code of the Contributor's choice. The Source Code can be in a compressed or archival form, provided the appropriate decompression or de-archiving software is widely available for no charge. - - 1.12. "You" (or "Your") means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License or a future version of this License issued under Section 6.1. For legal entities, "You" includes any entity which controls, is controlled by, or is under common control with You. For purposes of this definition, "control" means (a) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (b) ownership of more than fifty percent (50%) of the outstanding shares or beneficial ownership of such entity. - -2. Source Code License. - - 2.1. The Initial Developer Grant. The Initial Developer hereby grants You a world-wide, royalty-free, non-exclusive license, subject to third party intellectual property claims: - - a. under intellectual property rights (other than patent or trademark) Licensable by Initial Developer to use, reproduce, modify, display, perform, sublicense and distribute the Original Code (or portions thereof) with or without Modifications, and/or as part of a Larger Work; and - b. under Patents Claims infringed by the making, using or selling of Original Code, to make, have made, use, practice, sell, and offer for sale, and/or otherwise dispose of the Original Code (or portions thereof). - c. the licenses granted in this Section 2.1 (a) and (b) are effective on the date Initial Developer first distributes Original Code under the terms of this License. - d. Notwithstanding Section 2.1 (b) above, no patent license is granted: 1) for code that You delete from the Original Code; 2) separate from the Original Code; or 3) for infringements caused by: i) the modification of the Original Code or ii) the combination of the Original Code with other software or devices. - - 2.2. Contributor Grant. Subject to third party intellectual property claims, each Contributor hereby grants You a world-wide, royalty-free, non-exclusive license - - a. under intellectual property rights (other than patent or trademark) Licensable by Contributor, to use, reproduce, modify, display, perform, sublicense and distribute the Modifications created by such Contributor (or portions thereof) either on an unmodified basis, with other Modifications, as Covered Code and/or as part of a Larger Work; and - b. under Patent Claims infringed by the making, using, or selling of Modifications made by that Contributor either alone and/or in combination with its Contributor Version (or portions of such combination), to make, use, sell, offer for sale, have made, and/or otherwise dispose of: 1) Modifications made by that Contributor (or portions thereof); and 2) the combination of Modifications made by that Contributor with its Contributor Version (or portions of such combination). - c. the licenses granted in Sections 2.2 (a) and 2.2 (b) are effective on the date Contributor first makes Commercial Use of the Covered Code. - d. Notwithstanding Section 2.2 (b) above, no patent license is granted: 1) for any code that Contributor has deleted from the Contributor Version; 2) separate from the Contributor Version; 3) for infringements caused by: i) third party modifications of Contributor Version or ii) the combination of Modifications made by that Contributor with other software (except as part of the Contributor Version) or other devices; or 4) under Patent Claims infringed by Covered Code in the absence of Modifications made by that Contributor. - -3. Distribution Obligations. - - 3.1. Application of License. The Modifications which You create or to which You contribute are governed by the terms of this License, including without limitation Section 2.2. The Source Code version of Covered Code may be distributed only under the terms of this License or a future version of this License released under Section 6.1, and You must include a copy of this License with every copy of the Source Code You distribute. You may not offer or impose any terms on any Source Code version that alters or restricts the applicable version of this License or the recipients' rights hereunder. However, You may include an additional document offering the additional rights described in Section 3.5. - - 3.2. Availability of Source Code. Any Modification which You create or to which You contribute must be made available in Source Code form under the terms of this License either on the same media as an Executable version or via an accepted Electronic Distribution Mechanism to anyone to whom you made an Executable version available; and if made available via Electronic Distribution Mechanism, must remain available for at least twelve (12) months after the date it initially became available, or at least six (6) months after a subsequent version of that particular Modification has been made available to such recipients. You are responsible for ensuring that the Source Code version remains available even if the Electronic Distribution Mechanism is maintained by a third party. - - 3.3. Description of Modifications. You must cause all Covered Code to which You contribute to contain a file documenting the changes You made to create that Covered Code and the date of any change. You must include a prominent statement that the Modification is derived, directly or indirectly, from Original Code provided by the Initial Developer and including the name of the Initial Developer in (a) the Source Code, and (b) in any notice in an Executable version or related documentation in which You describe the origin or ownership of the Covered Code. - - 3.4. Intellectual Property Matters - - (a) Third Party Claims - If Contributor has knowledge that a license under a third party's intellectual property rights is required to exercise the rights granted by such Contributor under Sections 2.1 or 2.2, Contributor must include a text file with the Source Code distribution titled "LEGAL" which describes the claim and the party making the claim in sufficient detail that a recipient will know whom to contact. If Contributor obtains such knowledge after the Modification is made available as described in Section 3.2, Contributor shall promptly modify the LEGAL file in all copies Contributor makes available thereafter and shall take other steps (such as notifying appropriate mailing lists or newsgroups) reasonably calculated to inform those who received the Covered Code that new knowledge has been obtained. - - (b) Contributor APIs - If Contributor's Modifications include an application programming interface and Contributor has knowledge of patent licenses which are reasonably necessary to implement that API, Contributor must also include this information in the LEGAL file. - - (c) Representations. - Contributor represents that, except as disclosed pursuant to Section 3.4 (a) above, Contributor believes that Contributor's Modifications are Contributor's original creation(s) and/or Contributor has sufficient rights to grant the rights conveyed by this License. - - 3.5. Required Notices. You must duplicate the notice in Exhibit A in each file of the Source Code. If it is not possible to put such notice in a particular Source Code file due to its structure, then You must include such notice in a location (such as a relevant directory) where a user would be likely to look for such a notice. If You created one or more Modification(s) You may add your name as a Contributor to the notice described in Exhibit A. You must also duplicate this License in any documentation for the Source Code where You describe recipients' rights or ownership rights relating to Covered Code. You may choose to offer, and to charge a fee for, warranty, support, indemnity or liability obligations to one or more recipients of Covered Code. However, You may do so only on Your own behalf, and not on behalf of the Initial Developer or any Contributor. You must make it absolutely clear than any such warranty, support, indemnity or liability obligation is offered by You alone, and You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of warranty, support, indemnity or liability terms You offer. - - 3.6. Distribution of Executable Versions. You may distribute Covered Code in Executable form only if the requirements of Sections 3.1, 3.2, 3.3, 3.4 and 3.5 have been met for that Covered Code, and if You include a notice stating that the Source Code version of the Covered Code is available under the terms of this License, including a description of how and where You have fulfilled the obligations of Section 3.2. The notice must be conspicuously included in any notice in an Executable version, related documentation or collateral in which You describe recipients' rights relating to the Covered Code. You may distribute the Executable version of Covered Code or ownership rights under a license of Your choice, which may contain terms different from this License, provided that You are in compliance with the terms of this License and that the license for the Executable version does not attempt to limit or alter the recipient's rights in the Source Code version from the rights set forth in this License. If You distribute the Executable version under a different license You must make it absolutely clear that any terms which differ from this License are offered by You alone, not by the Initial Developer or any Contributor. You hereby agree to indemnify the Initial Developer and every Contributor for any liability incurred by the Initial Developer or such Contributor as a result of any such terms You offer. - - 3.7. Larger Works. You may create a Larger Work by combining Covered Code with other code not governed by the terms of this License and distribute the Larger Work as a single product. In such a case, You must make sure the requirements of this License are fulfilled for the Covered Code. - -4. Inability to Comply Due to Statute or Regulation. - -If it is impossible for You to comply with any of the terms of this License with respect to some or all of the Covered Code due to statute, judicial order, or regulation then You must: (a) comply with the terms of this License to the maximum extent possible; and (b) describe the limitations and the code they affect. Such description must be included in the LEGAL file described in Section 3.4 and must be included with all distributions of the Source Code. Except to the extent prohibited by statute or regulation, such description must be sufficiently detailed for a recipient of ordinary skill to be able to understand it. - -5. Application of this License. -This License applies to code to which the Initial Developer has attached the notice in Exhibit A and to related Covered Code. - -6. Versions of the License. - - 6.1. New Versions - Netscape Communications Corporation ("Netscape") may publish revised and/or new versions of the License from time to time. Each version will be given a distinguishing version number. - - 6.2. Effect of New Versions - Once Covered Code has been published under a particular version of the License, You may always continue to use it under the terms of that version. You may also choose to use such Covered Code under the terms of any subsequent version of the License published by Netscape. No one other than Netscape has the right to modify the terms applicable to Covered Code created under this License. - - 6.3. Derivative Works - If You create or use a modified version of this License (which you may only do in order to apply it to code which is not already Covered Code governed by this License), You must (a) rename Your license so that the phrases "Mozilla", "MOZILLAPL", "MOZPL", "Netscape", "MPL", "NPL" or any confusingly similar phrase do not appear in your license (except to note that your license differs from this License) and (b) otherwise make it clear that Your version of the license contains terms which differ from the Mozilla Public License and Netscape Public License. (Filling in the name of the Initial Developer, Original Code or Contributor in the notice described in Exhibit A shall not of themselves be deemed to be modifications of this License.) - -7. DISCLAIMER OF WARRANTY -COVERED CODE IS PROVIDED UNDER THIS LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES THAT THE COVERED CODE IS FREE OF DEFECTS, MERCHANTABLE, FIT FOR A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE COVERED CODE IS WITH YOU. SHOULD ANY COVERED CODE PROVE DEFECTIVE IN ANY RESPECT, YOU (NOT THE INITIAL DEVELOPER OR ANY OTHER CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS LICENSE. NO USE OF ANY COVERED CODE IS AUTHORIZED HEREUNDER EXCEPT UNDER THIS DISCLAIMER. - -8. Termination - - 8.1. This License and the rights granted hereunder will terminate automatically if You fail to comply with terms herein and fail to cure such breach within 30 days of becoming aware of the breach. All sublicenses to the Covered Code which are properly granted shall survive any termination of this License. Provisions which, by their nature, must remain in effect beyond the termination of this License shall survive. - - 8.2. If You initiate litigation by asserting a patent infringement claim (excluding declatory judgment actions) against Initial Developer or a Contributor (the Initial Developer or Contributor against whom You file such action is referred to as "Participant") alleging that: - - a. such Participant's Contributor Version directly or indirectly infringes any patent, then any and all rights granted by such Participant to You under Sections 2.1 and/or 2.2 of this License shall, upon 60 days notice from Participant terminate prospectively, unless if within 60 days after receipt of notice You either: (i) agree in writing to pay Participant a mutually agreeable reasonable royalty for Your past and future use of Modifications made by such Participant, or (ii) withdraw Your litigation claim with respect to the Contributor Version against such Participant. If within 60 days of notice, a reasonable royalty and payment arrangement are not mutually agreed upon in writing by the parties or the litigation claim is not withdrawn, the rights granted by Participant to You under Sections 2.1 and/or 2.2 automatically terminate at the expiration of the 60 day notice period specified above. - b. any software, hardware, or device, other than such Participant's Contributor Version, directly or indirectly infringes any patent, then any rights granted to You by such Participant under Sections 2.1(b) and 2.2(b) are revoked effective as of the date You first made, used, sold, distributed, or had made, Modifications made by that Participant. - - 8.3. If You assert a patent infringement claim against Participant alleging that such Participant's Contributor Version directly or indirectly infringes any patent where such claim is resolved (such as by license or settlement) prior to the initiation of patent infringement litigation, then the reasonable value of the licenses granted by such Participant under Sections 2.1 or 2.2 shall be taken into account in determining the amount or value of any payment or license. - - 8.4. In the event of termination under Sections 8.1 or 8.2 above, all end user license agreements (excluding distributors and resellers) which have been validly granted by You or any distributor hereunder prior to termination shall survive termination. - -9. LIMITATION OF LIABILITY -UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL THEORY, WHETHER TORT (INCLUDING NEGLIGENCE), CONTRACT, OR OTHERWISE, SHALL YOU, THE INITIAL DEVELOPER, ANY OTHER CONTRIBUTOR, OR ANY DISTRIBUTOR OF COVERED CODE, OR ANY SUPPLIER OF ANY OF SUCH PARTIES, BE LIABLE TO ANY PERSON FOR ANY INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES OF ANY CHARACTER INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR MALFUNCTION, OR ANY AND ALL OTHER COMMERCIAL DAMAGES OR LOSSES, EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF THE POSSIBILITY OF SUCH DAMAGES. THIS LIMITATION OF LIABILITY SHALL NOT APPLY TO LIABILITY FOR DEATH OR PERSONAL INJURY RESULTING FROM SUCH PARTY'S NEGLIGENCE TO THE EXTENT APPLICABLE LAW PROHIBITS SUCH LIMITATION. SOME JURISDICTIONS DO NOT ALLOW THE EXCLUSION OR LIMITATION OF INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS EXCLUSION AND LIMITATION MAY NOT APPLY TO YOU. - -10. U.S. government end users -The Covered Code is a "commercial item," as that term is defined in 48 C.F.R. 2.101 (Oct. 1995), consisting of "commercial computer software" and "commercial computer software documentation," as such terms are used in 48 C.F.R. 12.212 (Sept. 1995). Consistent with 48 C.F.R. 12.212 and 48 C.F.R. 227.7202-1 through 227.7202-4 (June 1995), all U.S. Government End Users acquire Covered Code with only those rights set forth herein. - -11. Miscellaneous -This License represents the complete agreement concerning subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. This License shall be governed by California law provisions (except to the extent applicable law, if any, provides otherwise), excluding its conflict-of-law provisions. With respect to disputes in which at least one party is a citizen of, or an entity chartered or registered to do business in the United States of America, any litigation relating to this License shall be subject to the jurisdiction of the Federal Courts of the Northern District of California, with venue lying in Santa Clara County, California, with the losing party responsible for costs, including without limitation, court costs and reasonable attorneys' fees and expenses. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any law or regulation which provides that the language of a contract shall be construed against the drafter shall not apply to this License. - -12. Responsibility for claims -As between Initial Developer and the Contributors, each party is responsible for claims and damages arising, directly or indirectly, out of its utilization of rights under this License and You agree to work with Initial Developer and Contributors to distribute such responsibility on an equitable basis. Nothing herein is intended or shall be deemed to constitute any admission of liability. - -13. Multiple-licensed code -Initial Developer may designate portions of the Covered Code as "Multiple-Licensed". "Multiple-Licensed" means that the Initial Developer permits you to utilize portions of the Covered Code under Your choice of the MPL or the alternative licenses, if any, specified by the Initial Developer in the file described in Exhibit A. - -Exhibit A - Mozilla Public License. - -"The contents of this file are subject to the Mozilla Public License Version 1.1 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.mozilla.org/MPL/ - -Software distributed under the License is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the specific language governing rights and limitations under the License. - -The Original Code is ______________________________________. - -The Initial Developer of the Original Code is ________________________. -Portions created by ______________________ are Copyright (C) ______ -_______________________. All Rights Reserved. - -Contributor(s): ______________________________________. - -Alternatively, the contents of this file may be used under the terms of the _____ license (the "[___] License"), in which case the provisions of [______] License are applicable instead of those above. If you wish to allow use of your version of this file only under the terms of the [____] License and not to allow others to use your version of this file under the MPL, indicate your decision by deleting the provisions above and replace them with the notice and other provisions required by the [___] License. If you do not delete the provisions above, a recipient may use your version of this file under either the MPL or the [___] License." - -NOTE: The text of this Exhibit A may differ slightly from the text of the notices in the Source Code files of the Original Code. You should use the text of this Exhibit A rather than the text found in the Original Code Source Code for Your Modifications. diff --git a/meta-webos-backports/meta-webos-backports-3.4/licenses/curl b/meta-webos-backports/meta-webos-backports-3.4/licenses/curl deleted file mode 100644 index dd333ab2e..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/licenses/curl +++ /dev/null @@ -1,10 +0,0 @@ -COPYRIGHT AND PERMISSION NOTICE - -Copyright (c) 1996 - 2015, Daniel Stenberg, . -All rights reserved. - -Permission to use, copy, modify, and 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. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - -Except as contained in this notice, the name of a copyright holder shall not be used in advertising or otherwise to promote the sale, use or other dealings in this Software without prior written authorization of the copyright holder. diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/files/0001-riscv32-Use-double-float-ABI-for-rv32.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/files/0001-riscv32-Use-double-float-ABI-for-rv32.patch deleted file mode 100644 index 0ed3de491..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/files/0001-riscv32-Use-double-float-ABI-for-rv32.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 66dfe0fa886f6289add06d1af8642ce2b5302852 Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Tue, 9 Feb 2021 16:40:12 -0800 -Subject: [PATCH] riscv32: Use double-float ABI for rv32 - -So it can use libgcc built with OE toolchain -Fixes -error: "can't link hard-float modules with soft-float modules" - -Signed-off-by: Khem Raj -Upstream-Status: Inappropriate [embedded specific] ---- - arch/riscv/Makefile | 6 ++++-- - 1 file changed, 4 insertions(+), 2 deletions(-) - -diff --git a/arch/riscv/Makefile b/arch/riscv/Makefile -index 0b80eb8d86..7324946f48 100644 ---- a/arch/riscv/Makefile -+++ b/arch/riscv/Makefile -@@ -9,7 +9,9 @@ ifeq ($(CONFIG_ARCH_RV64I),y) - endif - ifeq ($(CONFIG_ARCH_RV32I),y) - ARCH_BASE = rv32im -- ABI = ilp32 -+ ABI = ilp32d -+ ARCH_D = d -+ ARCH_F = f - endif - ifeq ($(CONFIG_RISCV_ISA_A),y) - ARCH_A = a -@@ -24,7 +26,7 @@ ifeq ($(CONFIG_CMODEL_MEDANY),y) - CMODEL = medany - endif - --ARCH_FLAGS = -march=$(ARCH_BASE)$(ARCH_A)$(ARCH_C) -mabi=$(ABI) \ -+ARCH_FLAGS = -march=$(ARCH_BASE)$(ARCH_A)$(ARCH_F)$(ARCH_D)$(ARCH_C) -mabi=$(ABI) \ - -mcmodel=$(CMODEL) - - PLATFORM_CPPFLAGS += $(ARCH_FLAGS) --- -2.30.0 - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/files/0001-tools-image-host-fix-wrong-return-value.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/files/0001-tools-image-host-fix-wrong-return-value.patch deleted file mode 100644 index 81687203e..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/files/0001-tools-image-host-fix-wrong-return-value.patch +++ /dev/null @@ -1,41 +0,0 @@ -From 77fe3ad2ab2953ccdf6e9417cbecc060b45d3e55 Mon Sep 17 00:00:00 2001 -From: Ming Liu -Date: Sun, 30 May 2021 10:32:08 +0200 -Subject: [PATCH] tools: image-host: fix wrong return value - -The return value '-ENOSPC' of fit_set_timestamp function does not match -the caller fit_image_write_sig's expection which is '-FDT_ERR_NOSPACE'. - -Fix it by not calling fit_set_timestamp, but call fdt_setprop instead. - -This fixes a following mkimage error: -| Can't write signature for 'signature@1' signature node in -| 'conf@imx6ull-colibri-wifi-eval-v3.dtb' conf node: -| mkimage Can't add hashes to FIT blob: -1 - -Upstream-Status: Submitted [ https://patchwork.ozlabs.org/project/uboot/patch/20210531070451.6561-1-liu.ming50@gmail.com ] - -Signed-off-by: Ming Liu ---- - tools/image-host.c | 4 +++- - 1 file changed, 3 insertions(+), 1 deletion(-) - -diff --git a/tools/image-host.c b/tools/image-host.c -index 270d36fe45..73095461a7 100644 ---- a/tools/image-host.c -+++ b/tools/image-host.c -@@ -132,8 +132,10 @@ static int fit_image_write_sig(void *fit, int noffset, uint8_t *value, - if (!ret) { - time_t timestamp = imagetool_get_source_date(cmdname, - time(NULL)); -+ uint32_t t = cpu_to_uimage(timestamp); - -- ret = fit_set_timestamp(fit, noffset, timestamp); -+ ret = fdt_setprop(fit, noffset, FIT_TIMESTAMP_PROP, &t, -+ sizeof(uint32_t)); - } - if (region_prop && !ret) { - uint32_t strdata[2]; --- -2.29.0 - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/libubootenv_0.3.2.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/libubootenv_0.3.2.bb deleted file mode 100644 index e8f58941c..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/libubootenv_0.3.2.bb +++ /dev/null @@ -1,26 +0,0 @@ -SUMMARY = "U-Boot libraries and tools to access environment" - -DESCRIPTION = "This package contains tools and libraries to read \ -and modify U-Boot environment. \ -It provides a hardware-independent replacement for fw_printenv/setenv utilities \ -provided by U-Boot" - -HOMEPAGE = "https://github.com/sbabic/libubootenv" -LICENSE = "LGPL-2.1-only" -LIC_FILES_CHKSUM = "file://Licenses/lgpl-2.1.txt;md5=4fbd65380cdd255951079008b364516c" -SECTION = "libs" - -SRC_URI = "git://github.com/sbabic/libubootenv;protocol=https;branch=master" -SRCREV = "ba7564f5006d09bec51058cf4f5ac90d4dc18b3c" - -S = "${WORKDIR}/git" - -inherit cmake lib_package - -EXTRA_OECMAKE = "-DCMAKE_BUILD_TYPE=Release" - -DEPENDS = "zlib" -PROVIDES += "u-boot-fw-utils" -RPROVIDES:${PN}-bin += "u-boot-fw-utils" - -BBCLASSEXTEND = "native" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-common.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-common.inc deleted file mode 100644 index 4a256da11..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-common.inc +++ /dev/null @@ -1,22 +0,0 @@ -HOMEPAGE = "http://www.denx.de/wiki/U-Boot/WebHome" -DESCRIPTION = "U-Boot, a boot loader for Embedded boards based on PowerPC, \ -ARM, MIPS and several other processors, which can be installed in a boot \ -ROM and used to initialize and test the hardware or to download and run \ -application code." -SECTION = "bootloaders" -DEPENDS += "flex-native bison-native" - -LICENSE = "GPL-2.0-or-later" -LIC_FILES_CHKSUM = "file://Licenses/README;md5=5a7450c57ffe5ae63fd732446b988025" -PE = "1" - -# We use the revision in order to avoid having to fetch it from the -# repo during parse -SRCREV = "840658b093976390e9537724f802281c9c8439f5" - -SRC_URI = "git://git.denx.de/u-boot.git;branch=master \ - " - -S = "${WORKDIR}/git" -B = "${WORKDIR}/build" -do_configure[cleandirs] = "${B}" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-tools.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-tools.inc deleted file mode 100644 index 7eda6a089..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-tools.inc +++ /dev/null @@ -1,81 +0,0 @@ -SUMMARY = "U-Boot bootloader tools" -DEPENDS += "openssl" - -PROVIDES = "${MLPREFIX}u-boot-mkimage ${MLPREFIX}u-boot-mkenvimage" -PROVIDES:class-native = "u-boot-mkimage-native u-boot-mkenvimage-native" - -PACKAGES += "${PN}-mkimage ${PN}-mkenvimage" - -# Required for backward compatibility with "u-boot-mkimage-xxx.bb" -RPROVIDES:${PN}-mkimage = "u-boot-mkimage" -RREPLACES:${PN}-mkimage = "u-boot-mkimage" -RCONFLICTS:${PN}-mkimage = "u-boot-mkimage" - -EXTRA_OEMAKE:class-target = 'CROSS_COMPILE="${TARGET_PREFIX}" CC="${CC} ${CFLAGS} ${LDFLAGS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" STRIP=true V=1' -EXTRA_OEMAKE:class-native = 'CC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" STRIP=true V=1' -EXTRA_OEMAKE:class-nativesdk = 'CROSS_COMPILE="${HOST_PREFIX}" CC="${CC} ${CFLAGS} ${LDFLAGS}" HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}" STRIP=true V=1' - -SED_CONFIG_EFI = '-e "s/CONFIG_EFI_LOADER=.*/# CONFIG_EFI_LOADER is not set/"' -SED_CONFIG_EFI:x86 = '' -SED_CONFIG_EFI:x86-64 = '' -SED_CONFIG_EFI:arm = '' -SED_CONFIG_EFI:armeb = '' -SED_CONFIG_EFI:aarch64 = '' - -do_compile () { - # Yes, this is crazy. If you build on a system with git < 2.14 from scratch, the tree will - # be marked as "dirty" and the version will include "-dirty", leading to a reproducibility problem. - # The issue is the inode count for Licnses/README changing due to do_populate_lic hardlinking a - # copy of the file. We avoid this by ensuring the index is updated with a "git diff" before the - # u-boot machinery tries to determine the version. - # - # build$ ../git/scripts/setlocalversion ../git - # "" - # build$ ln ../git/ - # build$ ln ../git/README ../foo - # build$ ../git/scripts/setlocalversion ../git - # ""-dirty - # (i.e. creating a hardlink dirties the index) - cd ${S}; git diff; cd ${B} - - oe_runmake -C ${S} sandbox_defconfig O=${B} - - # Disable CONFIG_CMD_LICENSE, license.h is not used by tools and - # generating it requires bin2header tool, which for target build - # is built with target tools and thus cannot be executed on host. - sed -i -e "s/CONFIG_CMD_LICENSE=.*/# CONFIG_CMD_LICENSE is not set/" ${SED_CONFIG_EFI} ${B}/.config - - oe_runmake -C ${S} cross_tools NO_SDL=1 O=${B} -} - -do_install () { - install -d ${D}${bindir} - - # mkimage - install -m 0755 tools/mkimage ${D}${bindir}/uboot-mkimage - ln -sf uboot-mkimage ${D}${bindir}/mkimage - - # mkenvimage - install -m 0755 tools/mkenvimage ${D}${bindir}/uboot-mkenvimage - ln -sf uboot-mkenvimage ${D}${bindir}/mkenvimage - - # dumpimage - install -m 0755 tools/dumpimage ${D}${bindir}/uboot-dumpimage - ln -sf uboot-dumpimage ${D}${bindir}/dumpimage - - # fit_check_sign - install -m 0755 tools/fit_check_sign ${D}${bindir}/uboot-fit_check_sign - ln -sf uboot-fit_check_sign ${D}${bindir}/fit_check_sign -} - -ALLOW_EMPTY:${PN} = "1" -FILES:${PN} = "" -FILES:${PN}-mkimage = "${bindir}/uboot-mkimage ${bindir}/mkimage ${bindir}/uboot-dumpimage ${bindir}/dumpimage ${bindir}/uboot-fit_check_sign ${bindir}/fit_check_sign" -FILES:${PN}-mkenvimage = "${bindir}/uboot-mkenvimage ${bindir}/mkenvimage" - -RDEPENDS:${PN}-mkimage += "dtc" -RDEPENDS:${PN} += "${PN}-mkimage ${PN}-mkenvimage" -RDEPENDS:${PN}:class-native = "" - -BBCLASSEXTEND = "native nativesdk" - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-tools_2021.07.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-tools_2021.07.bb deleted file mode 100644 index d0c0f30a9..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot-tools_2021.07.bb +++ /dev/null @@ -1,4 +0,0 @@ -require u-boot-common.inc -require u-boot-tools.inc - -SRC_URI:append = " file://0001-tools-image-host-fix-wrong-return-value.patch" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot.inc deleted file mode 100644 index f27fdd599..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot.inc +++ /dev/null @@ -1,359 +0,0 @@ -SUMMARY = "Universal Boot Loader for embedded devices" -PROVIDES = "virtual/bootloader" - -PACKAGE_ARCH = "${MACHINE_ARCH}" - -DEPENDS += "kern-tools-native" - -inherit uboot-config uboot-extlinux-config uboot-sign deploy cml1 python3native kernel-arch - -DEPENDS += "swig-native" - -EXTRA_OEMAKE = 'CROSS_COMPILE=${TARGET_PREFIX} CC="${TARGET_PREFIX}gcc ${TOOLCHAIN_OPTIONS}" V=1' -EXTRA_OEMAKE += 'HOSTCC="${BUILD_CC} ${BUILD_CFLAGS} ${BUILD_LDFLAGS}"' -EXTRA_OEMAKE += 'STAGING_INCDIR=${STAGING_INCDIR_NATIVE} STAGING_LIBDIR=${STAGING_LIBDIR_NATIVE}' - -PACKAGECONFIG ??= "openssl" -# u-boot will compile its own tools during the build, with specific -# configurations (aka when CONFIG_FIT_SIGNATURE is enabled) openssl is needed as -# a host build dependency. -PACKAGECONFIG[openssl] = ",,openssl-native" - -# Allow setting an additional version string that will be picked up by the -# u-boot build system and appended to the u-boot version. If the .scmversion -# file already exists it will not be overwritten. -UBOOT_LOCALVERSION ?= "" - -do_configure () { - if [ -n "${UBOOT_CONFIG}" ]; then - unset i j - for config in ${UBOOT_MACHINE}; do - i=$(expr $i + 1); - for type in ${UBOOT_CONFIG}; do - j=$(expr $j + 1); - if [ $j -eq $i ]; then - oe_runmake -C ${S} O=${B}/${config} ${config} - if [ -n "${@' '.join(find_cfgs(d))}" ]; then - merge_config.sh -m -O ${B}/${config} ${B}/${config}/.config ${@" ".join(find_cfgs(d))} - oe_runmake -C ${S} O=${B}/${config} oldconfig - fi - fi - done - unset j - done - unset i - DEVTOOL_DISABLE_MENUCONFIG=true - else - if [ -n "${UBOOT_MACHINE}" ]; then - oe_runmake -C ${S} O=${B} ${UBOOT_MACHINE} - else - oe_runmake -C ${S} O=${B} oldconfig - fi - merge_config.sh -m .config ${@" ".join(find_cfgs(d))} - cml1_do_configure - fi -} - -do_compile () { - if [ "${@bb.utils.filter('DISTRO_FEATURES', 'ld-is-gold', d)}" ]; then - sed -i 's/$(CROSS_COMPILE)ld$/$(CROSS_COMPILE)ld.bfd/g' ${S}/config.mk - fi - - unset LDFLAGS - unset CFLAGS - unset CPPFLAGS - - if [ ! -e ${B}/.scmversion -a ! -e ${S}/.scmversion ] - then - echo ${UBOOT_LOCALVERSION} > ${B}/.scmversion - echo ${UBOOT_LOCALVERSION} > ${S}/.scmversion - fi - - if [ -n "${UBOOT_CONFIG}" -o -n "${UBOOT_DELTA_CONFIG}" ] - then - unset i j k - for config in ${UBOOT_MACHINE}; do - i=$(expr $i + 1); - for type in ${UBOOT_CONFIG}; do - j=$(expr $j + 1); - if [ $j -eq $i ] - then - oe_runmake -C ${S} O=${B}/${config} ${UBOOT_MAKE_TARGET} - for binary in ${UBOOT_BINARIES}; do - k=$(expr $k + 1); - if [ $k -eq $i ]; then - cp ${B}/${config}/${binary} ${B}/${config}/${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX} - fi - done - - # Generate the uboot-initial-env - if [ -n "${UBOOT_INITIAL_ENV}" ]; then - oe_runmake -C ${S} O=${B}/${config} u-boot-initial-env - cp ${B}/${config}/u-boot-initial-env ${B}/${config}/u-boot-initial-env-${type} - fi - - unset k - fi - done - unset j - done - unset i - else - oe_runmake -C ${S} O=${B} ${UBOOT_MAKE_TARGET} - - # Generate the uboot-initial-env - if [ -n "${UBOOT_INITIAL_ENV}" ]; then - oe_runmake -C ${S} O=${B} u-boot-initial-env - fi - fi -} - -do_install () { - if [ -n "${UBOOT_CONFIG}" ] - then - for config in ${UBOOT_MACHINE}; do - i=$(expr $i + 1); - for type in ${UBOOT_CONFIG}; do - j=$(expr $j + 1); - if [ $j -eq $i ] - then - install -D -m 644 ${B}/${config}/${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} - ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARY}-${type} - ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${D}/boot/${UBOOT_BINARY} - - # Install the uboot-initial-env - if [ -n "${UBOOT_INITIAL_ENV}" ]; then - install -D -m 644 ${B}/${config}/u-boot-initial-env-${type} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} - ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}-${MACHINE}-${type} - ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}-${type} - ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV} - fi - fi - done - unset j - done - unset i - else - install -D -m 644 ${B}/${UBOOT_BINARY} ${D}/boot/${UBOOT_IMAGE} - ln -sf ${UBOOT_IMAGE} ${D}/boot/${UBOOT_BINARY} - - # Install the uboot-initial-env - if [ -n "${UBOOT_INITIAL_ENV}" ]; then - install -D -m 644 ${B}/u-boot-initial-env ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} - ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV}-${MACHINE} - ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} ${D}/${sysconfdir}/${UBOOT_INITIAL_ENV} - fi - fi - - if [ -n "${UBOOT_ELF}" ] - then - if [ -n "${UBOOT_CONFIG}" ] - then - for config in ${UBOOT_MACHINE}; do - i=$(expr $i + 1); - for type in ${UBOOT_CONFIG}; do - j=$(expr $j + 1); - if [ $j -eq $i ] - then - install -m 644 ${B}/${config}/${UBOOT_ELF} ${D}/boot/u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} - ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${D}/boot/${UBOOT_BINARY}-${type} - ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${D}/boot/${UBOOT_BINARY} - fi - done - unset j - done - unset i - else - install -m 644 ${B}/${UBOOT_ELF} ${D}/boot/${UBOOT_ELF_IMAGE} - ln -sf ${UBOOT_ELF_IMAGE} ${D}/boot/${UBOOT_ELF_BINARY} - fi - fi - - if [ -e ${WORKDIR}/fw_env.config ] ; then - install -d ${D}${sysconfdir} - install -m 644 ${WORKDIR}/fw_env.config ${D}${sysconfdir}/fw_env.config - fi - - if [ -n "${SPL_BINARY}" ] - then - if [ -n "${UBOOT_CONFIG}" ] - then - for config in ${UBOOT_MACHINE}; do - i=$(expr $i + 1); - for type in ${UBOOT_CONFIG}; do - j=$(expr $j + 1); - if [ $j -eq $i ] - then - install -m 644 ${B}/${config}/${SPL_BINARY} ${D}/boot/${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} - ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${D}/boot/${SPL_BINARYFILE}-${type} - ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${D}/boot/${SPL_BINARYFILE} - fi - done - unset j - done - unset i - else - install -m 644 ${B}/${SPL_BINARY} ${D}/boot/${SPL_IMAGE} - ln -sf ${SPL_IMAGE} ${D}/boot/${SPL_BINARYFILE} - fi - fi - - if [ -n "${UBOOT_ENV}" ] - then - install -m 644 ${WORKDIR}/${UBOOT_ENV_BINARY} ${D}/boot/${UBOOT_ENV_IMAGE} - ln -sf ${UBOOT_ENV_IMAGE} ${D}/boot/${UBOOT_ENV_BINARY} - fi - - if [ "${UBOOT_EXTLINUX}" = "1" ] - then - install -Dm 0644 ${UBOOT_EXTLINUX_CONFIG} ${D}/${UBOOT_EXTLINUX_INSTALL_DIR}/${UBOOT_EXTLINUX_CONF_NAME} - fi -} - -PACKAGE_BEFORE_PN += "${PN}-env ${PN}-extlinux" - -RPROVIDES:${PN}-env += "u-boot-default-env" -ALLOW_EMPTY:${PN}-env = "1" -FILES:${PN}-env = " \ - ${@ '${sysconfdir}/${UBOOT_INITIAL_ENV}*' if d.getVar('UBOOT_INITIAL_ENV') else ''} \ - ${sysconfdir}/fw_env.config \ -" - -FILES:${PN}-extlinux = "${UBOOT_EXTLINUX_INSTALL_DIR}/${UBOOT_EXTLINUX_CONF_NAME}" -RDEPENDS:${PN} += "${@bb.utils.contains('UBOOT_EXTLINUX', '1', '${PN}-extlinux', '', d)}" - -FILES:${PN} = "/boot ${datadir}" -RDEPENDS:${PN} += "${PN}-env" - -do_deploy () { - if [ -n "${UBOOT_CONFIG}" ] - then - for config in ${UBOOT_MACHINE}; do - i=$(expr $i + 1); - for type in ${UBOOT_CONFIG}; do - j=$(expr $j + 1); - if [ $j -eq $i ] - then - install -D -m 644 ${B}/${config}/${UBOOT_BINARYNAME}-${type}.${UBOOT_SUFFIX} ${DEPLOYDIR}/${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} - cd ${DEPLOYDIR} - ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_SYMLINK}-${type} - ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_SYMLINK} - ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_BINARY}-${type} - ln -sf ${UBOOT_BINARYNAME}-${type}-${PV}-${PR}.${UBOOT_SUFFIX} ${UBOOT_BINARY} - - # Deploy the uboot-initial-env - if [ -n "${UBOOT_INITIAL_ENV}" ]; then - install -D -m 644 ${B}/${config}/u-boot-initial-env-${type} ${DEPLOYDIR}/${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} - cd ${DEPLOYDIR} - ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} ${UBOOT_INITIAL_ENV}-${MACHINE}-${type} - ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${type}-${PV}-${PR} ${UBOOT_INITIAL_ENV}-${type} - fi - fi - done - unset j - done - unset i - else - install -D -m 644 ${B}/${UBOOT_BINARY} ${DEPLOYDIR}/${UBOOT_IMAGE} - - cd ${DEPLOYDIR} - rm -f ${UBOOT_BINARY} ${UBOOT_SYMLINK} - ln -sf ${UBOOT_IMAGE} ${UBOOT_SYMLINK} - ln -sf ${UBOOT_IMAGE} ${UBOOT_BINARY} - - # Deploy the uboot-initial-env - if [ -n "${UBOOT_INITIAL_ENV}" ]; then - install -D -m 644 ${B}/u-boot-initial-env ${DEPLOYDIR}/${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} - cd ${DEPLOYDIR} - ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} ${UBOOT_INITIAL_ENV}-${MACHINE} - ln -sf ${UBOOT_INITIAL_ENV}-${MACHINE}-${PV}-${PR} ${UBOOT_INITIAL_ENV} - fi - fi - - if [ -e ${WORKDIR}/fw_env.config ] ; then - install -D -m 644 ${WORKDIR}/fw_env.config ${DEPLOYDIR}/fw_env.config-${MACHINE}-${PV}-${PR} - cd ${DEPLOYDIR} - ln -sf fw_env.config-${MACHINE}-${PV}-${PR} fw_env.config-${MACHINE} - ln -sf fw_env.config-${MACHINE}-${PV}-${PR} fw_env.config - fi - - if [ -n "${UBOOT_ELF}" ] - then - if [ -n "${UBOOT_CONFIG}" ] - then - for config in ${UBOOT_MACHINE}; do - i=$(expr $i + 1); - for type in ${UBOOT_CONFIG}; do - j=$(expr $j + 1); - if [ $j -eq $i ] - then - install -m 644 ${B}/${config}/${UBOOT_ELF} ${DEPLOYDIR}/u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} - ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_BINARY}-${type} - ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_BINARY} - ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_SYMLINK}-${type} - ln -sf u-boot-${type}-${PV}-${PR}.${UBOOT_ELF_SUFFIX} ${DEPLOYDIR}/${UBOOT_ELF_SYMLINK} - fi - done - unset j - done - unset i - else - install -m 644 ${B}/${UBOOT_ELF} ${DEPLOYDIR}/${UBOOT_ELF_IMAGE} - ln -sf ${UBOOT_ELF_IMAGE} ${DEPLOYDIR}/${UBOOT_ELF_BINARY} - ln -sf ${UBOOT_ELF_IMAGE} ${DEPLOYDIR}/${UBOOT_ELF_SYMLINK} - fi - fi - - - if [ -n "${SPL_BINARY}" ] - then - if [ -n "${UBOOT_CONFIG}" ] - then - for config in ${UBOOT_MACHINE}; do - i=$(expr $i + 1); - for type in ${UBOOT_CONFIG}; do - j=$(expr $j + 1); - if [ $j -eq $i ] - then - install -m 644 ${B}/${config}/${SPL_BINARY} ${DEPLOYDIR}/${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} - rm -f ${DEPLOYDIR}/${SPL_BINARYFILE} ${DEPLOYDIR}/${SPL_SYMLINK} - ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${DEPLOYDIR}/${SPL_BINARYFILE}-${type} - ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${DEPLOYDIR}/${SPL_BINARYFILE} - ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${DEPLOYDIR}/${SPL_SYMLINK}-${type} - ln -sf ${SPL_BINARYNAME}-${type}-${PV}-${PR}${SPL_DELIMITER}${SPL_SUFFIX} ${DEPLOYDIR}/${SPL_SYMLINK} - fi - done - unset j - done - unset i - else - install -m 644 ${B}/${SPL_BINARY} ${DEPLOYDIR}/${SPL_IMAGE} - rm -f ${DEPLOYDIR}/${SPL_BINARYNAME} ${DEPLOYDIR}/${SPL_SYMLINK} - ln -sf ${SPL_IMAGE} ${DEPLOYDIR}/${SPL_BINARYNAME} - ln -sf ${SPL_IMAGE} ${DEPLOYDIR}/${SPL_SYMLINK} - fi - fi - - - if [ -n "${UBOOT_ENV}" ] - then - install -m 644 ${WORKDIR}/${UBOOT_ENV_BINARY} ${DEPLOYDIR}/${UBOOT_ENV_IMAGE} - rm -f ${DEPLOYDIR}/${UBOOT_ENV_BINARY} ${DEPLOYDIR}/${UBOOT_ENV_SYMLINK} - ln -sf ${UBOOT_ENV_IMAGE} ${DEPLOYDIR}/${UBOOT_ENV_BINARY} - ln -sf ${UBOOT_ENV_IMAGE} ${DEPLOYDIR}/${UBOOT_ENV_SYMLINK} - fi - - if [ "${UBOOT_EXTLINUX}" = "1" ] - then - install -m 644 ${UBOOT_EXTLINUX_CONFIG} ${DEPLOYDIR}/${UBOOT_EXTLINUX_SYMLINK} - ln -sf ${UBOOT_EXTLINUX_SYMLINK} ${DEPLOYDIR}/${UBOOT_EXTLINUX_CONF_NAME}-${MACHINE} - ln -sf ${UBOOT_EXTLINUX_SYMLINK} ${DEPLOYDIR}/${UBOOT_EXTLINUX_CONF_NAME} - fi - - if [ -n "${UBOOT_DTB}" ] - then - install -m 644 ${B}/arch/${UBOOT_ARCH}/dts/${UBOOT_DTB_BINARY} ${DEPLOYDIR}/ - fi -} - -addtask deploy before do_build after do_compile diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot_2021.07.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot_2021.07.bb deleted file mode 100644 index c8dbe477e..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-bsp/u-boot/u-boot_2021.07.bb +++ /dev/null @@ -1,6 +0,0 @@ -require u-boot-common.inc -require u-boot.inc - -SRC_URI:append = " file://0001-riscv32-Use-double-float-ABI-for-rv32.patch" - -DEPENDS += "bc-native dtc-native python3-setuptools-native" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/README.md b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/README.md deleted file mode 100644 index f7730793e..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/README.md +++ /dev/null @@ -1,30 +0,0 @@ -# containerd: sample image fetch and exec commands - -```shell -root@qemux86-64:~# ctr images list -REF TYPE DIGEST SIZE PLATFORMS -docker.io/calico/node:v3.11.2 application/vnd.docker.distribution.manifest.list.v2+json sha256:887bcd551668cccae1fbfd6d2eb0f635ec37bb4cf599e1169989aa49dfac5b57 84.8 MiB linux/amd64,linux/arm64,linux/ppc64le -docker.io/library/alpine:latest application/vnd.docker.distribution.manifest.list.v2+json sha256:c0e9560cda118f9ec63ddefb4a173a2b2a0347082d7dff7dc14272e7841a5b5a 2.7 MiB linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64/v8,l - -root@qemux86-64:~# ctr image pull docker.io/library/alpine:latest -docker.io/library/alpine:latest: resolved |++++++++++++++++++++++++++++++++++++++| -index-sha256:c0e9560cda118f9ec63ddefb4a173a2b2a0347082d7dff7dc14272e7841a5b5a: exists |++++++++++++++++++++++++++++++++++++++| -manifest-sha256:d7342993700f8cd7aba8496c2d0e57be0666e80b4c441925fc6f9361fa81d10e: exists |++++++++++++++++++++++++++++++++++++++| -layer-sha256:188c0c94c7c576fff0792aca7ec73d67a2f7f4cb3a6e53a84559337260b36964: exists |++++++++++++++++++++++++++++++++++++++| -config-sha256:d6e46aa2470df1d32034c6707c8041158b652f38d2a9ae3d7ad7e7532d22ebe0: exists |++++++++++++++++++++++++++++++++++++++| -elapsed: 6.5 s total: 0.0 B (0.0 B/s) -unpacking linux/amd64 sha256:c0e9560cda118f9ec63ddefb4a173a2b2a0347082d7dff7dc14272e7841a5b5a... - - -root@qemux86-64:~# ctr run -t docker.io/library/alpine:latest dtest /bin/sh -/ # uname -a -Linux qemux86-64 5.8.13-yocto-standard #1 SMP PREEMPT Tue Oct 6 12:23:29 UTC 2020 x86_64 Linux -/ # - - - # root@qemux86-64:~# ctr c list -CONTAINER IMAGE RUNTIME -dtest docker.io/library/alpine:latest io.containerd.runc.v2 - -root@qemux86-64:~# ctr c delete dtest -``` \ No newline at end of file diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers/0001-Add-build-option-GODEBUG-1.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers/0001-Add-build-option-GODEBUG-1.patch deleted file mode 100644 index 8b43c8a0d..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers/0001-Add-build-option-GODEBUG-1.patch +++ /dev/null @@ -1,32 +0,0 @@ -From 84874e47aa2025b8e73df0286c44f3b8a1d9fdb2 Mon Sep 17 00:00:00 2001 -From: Hongxu Jia -Date: Mon, 2 Sep 2019 16:20:07 +0800 -Subject: [PATCH] Add build option "GODEBUG=1" - -Make will generate GDB friendly binary with this build option. - -Signed-off-by: Hui Zhu - -Upstream-Status: Backport [c5a0c7f491b435e4eb45972903b00e2d8ed46495] - -Partly backport and refresh to v1.2.7 -Signed-off-by: Hongxu Jia ---- - src/import/Makefile | 8 ++++++-- - 1 file changed, 6 insertions(+), 2 deletions(-) - -Index: git/src/import/Makefile -=================================================================== ---- git.orig/src/import/Makefile 2020-10-12 08:09:41.638977052 -0700 -+++ git/src/import/Makefile 2020-10-12 08:10:49.783074373 -0700 -@@ -72,6 +72,10 @@ - COMMANDS=ctr containerd containerd-stress - MANPAGES=ctr.8 containerd.8 containerd-config.8 containerd-config.toml.5 - -+ifndef GODEBUG -+ EXTRA_LDFLAGS += -s -w -+endif -+ - ifdef BUILDTAGS - GO_BUILDTAGS = ${BUILDTAGS} - endif diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers/0001-Makefile-allow-GO_BUILD_FLAGS-to-be-externally-speci.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers/0001-Makefile-allow-GO_BUILD_FLAGS-to-be-externally-speci.patch deleted file mode 100644 index 7f4d75182..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers/0001-Makefile-allow-GO_BUILD_FLAGS-to-be-externally-speci.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 474b93f8f643651144304a6971ef476add7f06f8 Mon Sep 17 00:00:00 2001 -From: Bruce Ashfield -Date: Tue, 25 May 2021 12:49:41 -0400 -Subject: [PATCH] Makefile: allow GO_BUILD_FLAGS to be externally specified - -Since our oe-core go infrastructure insists on both -pie and static -builds (for the most part), and that is not recommended by many -packages, we end up with errors like: - - cannot find package runtime/cgo (using -importcfg) - ... - recipe-sysroot-native/usr/lib/aarch64-poky-linux/go/pkg/tool/linux_amd64/link: - cannot open file : open : no such file or directory - -Upstream-Status: Inappropriate: specific to OE go configuration and build - -Signed-off-by: Bruce Ashfield ---- - Makefile | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git git.orig/src/import/Makefile git.orig/src/import/Makefile -index c61418e60..54a10eb42 100644 ---- git.orig/src/import/Makefile -+++ git.orig/src/import/Makefile -@@ -112,7 +112,8 @@ endif - GOPATHS=$(shell echo ${GOPATH} | tr ":" "\n" | tr ";" "\n") - - TESTFLAGS_RACE= --GO_BUILD_FLAGS= -+# allow flags to be exported and picked up. -+# GO_BUILD_FLAGS= - # See Golang issue re: '-trimpath': https://github.com/golang/go/issues/13809 - GO_GCFLAGS=$(shell \ - set -- ${GOPATHS}; \ --- -2.19.1 - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers_git.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers_git.bb deleted file mode 100644 index fbf0c64c7..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/containerd-opencontainers_git.bb +++ /dev/null @@ -1,127 +0,0 @@ -HOMEPAGE = "https://github.com/docker/containerd" -SUMMARY = "containerd is a daemon to control runC" -DESCRIPTION = "containerd is a daemon to control runC, built for performance and density. \ - containerd leverages runC's advanced features such as seccomp and user namespace \ - support as well as checkpoint and restore for cloning and live migration of containers." - - -SRCREV = "69e5db821af6458b4078d654ad3dcb3f31faa522" -SRC_URI = "git://github.com/containerd/containerd;branch=release/1.5;protocol=https \ - file://0001-Add-build-option-GODEBUG-1.patch \ - file://0001-Makefile-allow-GO_BUILD_FLAGS-to-be-externally-speci.patch \ - " - -# Apache-2.0 for containerd -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://src/import/LICENSE;md5=1269f40c0d099c21a871163984590d89" - -CONTAINERD_VERSION = "v1.5.5" - -EXTRA_OEMAKE += "GODEBUG=1" - -PROVIDES += "virtual/containerd" -RPROVIDES:${PN} = "virtual-containerd" - -S = "${WORKDIR}/git" - -PV = "${CONTAINERD_VERSION}+git${SRCPV}" - -inherit go -inherit goarch - -GO_IMPORT = "import" - -CONTAINERD_PKG="github.com/containerd/containerd" - -INSANE_SKIP:${PN} += "ldflags" - -do_configure[noexec] = "1" - -do_compile() { - export GOARCH="${TARGET_GOARCH}" - - # link fixups for compilation - rm -f ${S}/src/import/vendor/src - ln -sf ./ ${S}/src/import/vendor/src - - mkdir -p ${S}/src/import/vendor/src/github.com/containerd/containerd/ - mkdir -p ${S}/src/import/vendor/src/github.com/containerd/containerd/pkg/ - mkdir -p ${S}/src/import/vendor/src/github.com/containerd/containerd/contrib/ - # without this, the stress test parts of the build fail - cp ${S}/src/import/*.go ${S}/src/import/vendor/src/github.com/containerd/containerd - - for c in content timeout ttrpcutil oom stdio process errdefs fs images mount snapshots linux api runtimes defaults progress \ - protobuf reference diff platforms runtime remotes version archive dialer gc metadata \ - metrics filters identifiers labels leases plugin server services \ - cmd cio containers namespaces oci events log reaper sys rootfs nvidia seed apparmor seccomp \ - cap cri userns atomic ioutil os registrar seutil runtimeoptions netns; do - if [ -d ${S}/src/import/${c} ]; then - ln -sfn ${S}/src/import/${c} ${S}/src/import/vendor/github.com/containerd/containerd/${c} - fi - if [ -d ${S}/src/import/pkg/${c} ]; then - ln -sfn ${S}/src/import/pkg/${c} ${S}/src/import/vendor/github.com/containerd/containerd/pkg/${c} - fi - if [ -d ${S}/src/import/contrib/${c} ]; then - ln -sfn ${S}/src/import/contrib/${c} ${S}/src/import/vendor/github.com/containerd/containerd/contrib/${c} - fi - done - - export GOPATH="${S}/src/import/.gopath:${S}/src/import/vendor:${STAGING_DIR_TARGET}/${prefix}/local/go" - export GOROOT="${STAGING_DIR_NATIVE}/${nonarch_libdir}/${HOST_SYS}/go" - - # Pass the needed cflags/ldflags so that cgo - # can find the needed headers files and libraries - export CGO_ENABLED="1" - export CGO_CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_TARGET}" - export CGO_LDFLAGS="${LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" - export BUILDTAGS="no_btrfs static_build netgo" - export CFLAGS="${CFLAGS}" - export LDFLAGS="${LDFLAGS}" - export SHIM_CGO_ENABLED="${CGO_ENABLED}" - # fixes: - # cannot find package runtime/cgo (using -importcfg) - # ... recipe-sysroot-native/usr/lib/aarch64-poky-linux/go/pkg/tool/linux_amd64/link: - # cannot open file : open : no such file or directory - export GO_BUILD_FLAGS="-a -pkgdir dontusecurrentpkgs" - export GO111MODULE=off - - cd ${S}/src/import - oe_runmake binaries -} - -inherit systemd -SYSTEMD_PACKAGES = "${@bb.utils.contains('DISTRO_FEATURES','systemd','${PN}','',d)}" -SYSTEMD_SERVICE:${PN} = "${@bb.utils.contains('DISTRO_FEATURES','systemd','containerd.service','',d)}" - -do_install() { - mkdir -p ${D}/${bindir} - - cp ${S}/src/import/bin/containerd ${D}/${bindir}/containerd - cp ${S}/src/import/bin/containerd-shim ${D}/${bindir}/containerd-shim - cp ${S}/src/import/bin/containerd-shim-runc-v1 ${D}/${bindir}/containerd-shim-runc-v1 - cp ${S}/src/import/bin/containerd-shim-runc-v2 ${D}/${bindir}/containerd-shim-runc-v2 - cp ${S}/src/import/bin/ctr ${D}/${bindir}/containerd-ctr - - ln -sf containerd ${D}/${bindir}/docker-containerd - ln -sf containerd-shim ${D}/${bindir}/docker-containerd-shim - ln -sf containerd-ctr ${D}/${bindir}/docker-containerd-ctr - - ln -sf containerd-ctr ${D}/${bindir}/ctr - - if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then - install -d ${D}${systemd_unitdir}/system - install -m 644 ${S}/src/import/containerd.service ${D}/${systemd_unitdir}/system - # adjust from /usr/local/bin to /usr/bin/ - sed -e "s:/usr/local/bin/containerd:${bindir}/containerd:g" -i ${D}/${systemd_unitdir}/system/containerd.service - fi -} - -FILES:${PN} += "${systemd_system_unitdir}/*" - -INSANE_SKIP:${PN} += "ldflags already-stripped" - -COMPATIBLE_HOST = "^(?!(qemu)?mips).*" - -RDEPENDS:${BPN} += " virtual-runc" - -CVE_PRODUCT = "containerd" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/files/0001-build-use-oe-provided-GO-and-flags.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/files/0001-build-use-oe-provided-GO-and-flags.patch deleted file mode 100644 index 544881ef7..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/containerd/files/0001-build-use-oe-provided-GO-and-flags.patch +++ /dev/null @@ -1,64 +0,0 @@ -From 408e8b526d490af817a64b7220e8e2c3789de58f Mon Sep 17 00:00:00 2001 -From: Bruce Ashfield -Date: Sun, 10 Feb 2019 23:46:06 +0000 -Subject: [PATCH] build: use oe provided GO and flags - -We want to use the go compiler as defined in the oe-enviroment, not the -generic call to 'go'. Without changing this, we'll get things like cgo -errors and invalid flag combos. - -Signed-off-by: Bruce Ashfield ---- - Makefile | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -Index: git/src/import/Makefile -=================================================================== ---- git.orig/src/import/Makefile -+++ git/src/import/Makefile -@@ -121,7 +121,7 @@ - TESTFLAGS_PARALLEL ?= 8 - - # Use this to replace `go test` with, for instance, `gotestsum` --GOTEST ?= go test -+GOTEST ?= $(GO) test - - OUTPUTDIR = $(join $(ROOTDIR), _output) - CRIDIR=$(OUTPUTDIR)/cri -@@ -169,7 +169,7 @@ - - build: ## build the go packages - @echo "$(WHALE) $@" -- @go build ${DEBUG_GO_GCFLAGS} ${GO_GCFLAGS} ${GO_BUILD_FLAGS} ${EXTRA_FLAGS} ${GO_LDFLAGS} ${PACKAGES} -+ @$(GO) build ${DEBUG_GO_GCFLAGS} ${GO_GCFLAGS} ${GO_BUILD_FLAGS} ${EXTRA_FLAGS} ${GO_LDFLAGS} ${PACKAGES} - - test: ## run tests, except integration tests and tests that require root - @echo "$(WHALE) $@" -@@ -201,7 +201,7 @@ - - define BUILD_BINARY - @echo "$(WHALE) $@" --@go build ${DEBUG_GO_GCFLAGS} ${GO_GCFLAGS} ${GO_BUILD_FLAGS} -o $@ ${GO_LDFLAGS} ${GO_TAGS} ./$< -+@$(GO) build ${DEBUG_GO_GCFLAGS} ${GO_GCFLAGS} ${GO_BUILD_FLAGS} -o $@ ${GO_LDFLAGS} ${GO_TAGS} ./$< - endef - - # Build a binary from a cmd. -@@ -210,15 +210,15 @@ - - bin/containerd-shim: cmd/containerd-shim FORCE # set !cgo and omit pie for a static shim build: https://github.com/golang/go/issues/17789#issuecomment-258542220 - @echo "$(WHALE) bin/containerd-shim" -- @CGO_ENABLED=${SHIM_CGO_ENABLED} go build ${GO_BUILD_FLAGS} -o bin/containerd-shim ${SHIM_GO_LDFLAGS} ${GO_TAGS} ./cmd/containerd-shim -+ @CGO_ENABLED=${SHIM_CGO_ENABLED} $(GO) build -a -pkgdir dontusecurrentpkgs ${GO_BUILD_FLAGS} -o bin/containerd-shim ${SHIM_GO_LDFLAGS} ${GO_TAGS} ./cmd/containerd-shim - - bin/containerd-shim-runc-v1: cmd/containerd-shim-runc-v1 FORCE # set !cgo and omit pie for a static shim build: https://github.com/golang/go/issues/17789#issuecomment-258542220 - @echo "$(WHALE) bin/containerd-shim-runc-v1" -- @CGO_ENABLED=${SHIM_CGO_ENABLED} go build ${GO_BUILD_FLAGS} -o bin/containerd-shim-runc-v1 ${SHIM_GO_LDFLAGS} ${GO_TAGS} ./cmd/containerd-shim-runc-v1 -+ @CGO_ENABLED=${SHIM_CGO_ENABLED} $(GO) build -a -pkgdir dontusecurrentpkgs ${GO_BUILD_FLAGS} -o bin/containerd-shim-runc-v1 ${SHIM_GO_LDFLAGS} ${GO_TAGS} ./cmd/containerd-shim-runc-v1 - - bin/containerd-shim-runc-v2: cmd/containerd-shim-runc-v2 FORCE # set !cgo and omit pie for a static shim build: https://github.com/golang/go/issues/17789#issuecomment-258542220 - @echo "$(WHALE) bin/containerd-shim-runc-v2" -- @CGO_ENABLED=${SHIM_CGO_ENABLED} go build ${GO_BUILD_FLAGS} -o bin/containerd-shim-runc-v2 ${SHIM_GO_LDFLAGS} ${GO_TAGS} ./cmd/containerd-shim-runc-v2 -+ @CGO_ENABLED=${SHIM_CGO_ENABLED} $(GO) build -a -pkgdir dontusecurrentpkgs ${GO_BUILD_FLAGS} -o bin/containerd-shim-runc-v2 ${SHIM_GO_LDFLAGS} ${GO_TAGS} ./cmd/containerd-shim-runc-v2 - - binaries: $(BINARIES) ## build binaries - @echo "$(WHALE) $@" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/docker-moby_git.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/docker-moby_git.bb deleted file mode 100644 index 138d9d22e..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/docker-moby_git.bb +++ /dev/null @@ -1,60 +0,0 @@ -HOMEPAGE = "http://www.docker.com" -SUMMARY = "Linux container runtime" -DESCRIPTION = "Linux container runtime \ - Docker complements kernel namespacing with a high-level API which \ - operates at the process level. It runs unix processes with strong \ - guarantees of isolation and repeatability across servers. \ - . \ - Docker is a great building block for automating distributed systems: \ - large-scale web deployments, database clusters, continuous deployment \ - systems, private PaaS, service-oriented architectures, etc. \ - . \ - This package contains the daemon and client, which are \ - officially supported on x86_64 and arm hosts. \ - Other architectures are considered experimental. \ - . \ - Also, note that kernel version 3.10 or above is required for proper \ - operation of the daemon process, and that any lower versions may have \ - subtle and/or glaring issues. \ - " - -# Notes: -# - This docker variant uses moby and the other individually maintained -# upstream variants for SRCREVs -# - It is a true community / upstream tracking build, and is not a -# docker curated set of commits or additions -# - The version number on this package tracks the versions assigned to -# the curated docker-ce repository. This allows compatibility and -# functional equivalence, while allowing new features to be more -# easily added. -# - This could be called "docker-moby" or just "moby" in the future, but -# that would require the creation of a virtual/docker dependency, which -# is possible, but overkill at the moment (while we wait for the upstream -# to stop changing). -# - The common components of this recipe and docker-ce do need to be moved -# to a docker.inc recipe - -SRCREV_moby = "d24c6dc5cf5e68dfb30027b2db454099566a9b9e" -SRCREV_libnetwork = "64b7a4574d1426139437d20e81c0b6d391130ec8" -SRCREV_cli = "62eae52c2a76f4c1dcf79dfc7b5ea3bf5eebab8b" -SRCREV_FORMAT = "moby_libnetwork" -SRC_URI = "\ - git://github.com/moby/moby.git;branch=20.10;name=moby;protocol=https \ - git://github.com/docker/libnetwork.git;branch=master;name=libnetwork;destsuffix=git/libnetwork;protocol=https \ - git://github.com/docker/cli;branch=20.10;name=cli;destsuffix=git/cli;protocol=https \ - file://docker.init \ - file://0001-libnetwork-use-GO-instead-of-go.patch \ - file://0001-cli-use-external-GO111MODULE-and-cross-compiler.patch \ - file://0001-dynbinary-use-go-cross-compiler.patch \ - " - -require docker.inc - -# Apache-2.0 for docker -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://src/import/LICENSE;md5=4859e97a9c7780e77972d989f0823f28" - -DOCKER_VERSION = "20.10.8" -PV = "${DOCKER_VERSION}+git${SRCREV_moby}" - -CVE_PRODUCT = "docker" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/docker.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/docker.inc deleted file mode 100644 index 40a3642c8..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/docker.inc +++ /dev/null @@ -1,179 +0,0 @@ -DEPENDS = " \ - go-cli \ - go-pty \ - go-context \ - go-mux \ - go-patricia \ - go-logrus \ - go-fsnotify \ - go-dbus \ - go-capability \ - go-systemd \ - btrfs-tools \ - sqlite3 \ - go-distribution \ - compose-file \ - go-connections \ - notary \ - grpc-go \ - libtool-native \ - libtool \ - " - -DEPENDS:append:class-target = " lvm2" -RDEPENDS:${PN} = "util-linux util-linux-unshare iptables \ - ${@bb.utils.contains('DISTRO_FEATURES', 'aufs', 'aufs-util', '', d)} \ - ${@bb.utils.contains('DISTRO_FEATURES', 'systemd', '', 'cgroup-lite', d)} \ - bridge-utils \ - ca-certificates \ - " -RDEPENDS:${PN} += "virtual-containerd virtual-runc" - -RRECOMMENDS:${PN} = "kernel-module-dm-thin-pool kernel-module-nf-nat kernel-module-nf-conntrack-netlink kernel-module-xt-addrtype kernel-module-xt-masquerade" - -PROVIDES += "virtual/docker" - -# we want all the docker variant recpes to be installable via "docker" -PACKAGE_NAME = "docker" -RPROVIDES:${PN} += "docker" -RPROVIDES:${PN}-dbg += "docker-dbg" -RPROVIDES:${PN}-dev += "docker-dev" -RPROVIDES:${PN}-contrip += "docker-dev" - -inherit pkgconfig -PACKAGECONFIG ??= "docker-init" -PACKAGECONFIG[seccomp] = "seccomp,,libseccomp" -PACKAGECONFIG[docker-init] = ",,,docker-init" -PACKAGECONFIG[transient-config] = "transient-config" - - -GO_IMPORT = "import" -S = "${WORKDIR}/git" - - -inherit systemd update-rc.d -inherit go -inherit goarch -inherit pkgconfig - -do_configure[noexec] = "1" - -DOCKER_PKG="github.com/docker/docker" -# in order to exclude devicemapper and btrfs - https://github.com/docker/docker/issues/14056 -BUILD_TAGS ?= "exclude_graphdriver_btrfs exclude_graphdriver_devicemapper" - -do_compile() { - # Set GOPATH. See 'PACKAGERS.md'. Don't rely on - # docker to download its dependencies but rather - # use dependencies packaged independently. - cd ${S}/src/import - rm -rf .gopath - mkdir -p .gopath/src/"$(dirname "${DOCKER_PKG}")" - ln -sf ../../../.. .gopath/src/"${DOCKER_PKG}" - - mkdir -p .gopath/src/github.com/docker - ln -sf ${WORKDIR}/git/libnetwork .gopath/src/github.com/docker/libnetwork - ln -sf ${WORKDIR}/git/cli .gopath/src/github.com/docker/cli - - export GOPATH="${S}/src/import/.gopath:${S}/src/import/vendor:${STAGING_DIR_TARGET}/${prefix}/local/go" - export GOROOT="${STAGING_DIR_NATIVE}/${nonarch_libdir}/${HOST_SYS}/go" - - # Pass the needed cflags/ldflags so that cgo - # can find the needed headers files and libraries - export GOARCH=${TARGET_GOARCH} - export CGO_ENABLED="1" - export CGO_CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_TARGET}" - export CGO_LDFLAGS="${LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" - export DOCKER_BUILDTAGS='${BUILD_TAGS} ${PACKAGECONFIG_CONFARGS}' - export GO111MODULE=off - - export DISABLE_WARN_OUTSIDE_CONTAINER=1 - - cd ${S}/src/import/ - - # this is the unsupported built structure - # that doesn't rely on an existing docker - # to build this: - VERSION="${DOCKER_VERSION}" DOCKER_GITCOMMIT="${SRCREV_moby}" ./hack/make.sh dynbinary - - # build the cli - cd ${S}/src/import/.gopath/src/github.com/docker/cli - export CFLAGS="" - export LDFLAGS="" - export DOCKER_VERSION=${DOCKER_VERSION} - VERSION="${DOCKER_VERSION}" DOCKER_GITCOMMIT="${SRCREV_moby}" make dynbinary - - # build the proxy - cd ${S}/src/import/.gopath/src/github.com/docker/libnetwork - oe_runmake cross-local -} - -do_install() { - mkdir -p ${D}/${bindir} - cp ${WORKDIR}/git/cli/build/docker ${D}/${bindir}/docker - cp ${S}/src/import/bundles/dynbinary-daemon/dockerd ${D}/${bindir}/dockerd - cp ${WORKDIR}/git/libnetwork/bin/docker-proxy* ${D}/${bindir}/docker-proxy - - if ${@bb.utils.contains('DISTRO_FEATURES','systemd','true','false',d)}; then - install -d ${D}${systemd_unitdir}/system - install -m 644 ${S}/src/import/contrib/init/systemd/docker.* ${D}/${systemd_unitdir}/system - # replaces one copied from above with one that uses the local registry for a mirror - install -m 644 ${S}/src/import/contrib/init/systemd/docker.service ${D}/${systemd_unitdir}/system - rm -f ${D}/${systemd_unitdir}/system/docker.service.rpm - fi - if ${@bb.utils.contains('DISTRO_FEATURES','sysvinit','true','false',d)}; then - install -d ${D}${sysconfdir}/init.d - install -m 0755 ${WORKDIR}/docker.init ${D}${sysconfdir}/init.d/docker.init - fi - # TLS key that docker creates at run-time if not found is what resides here - if ${@bb.utils.contains('PACKAGECONFIG','transient-config','true','false',d)}; then - install -d ${D}${sysconfdir} - ln -s ..${localstatedir}/run/docker ${D}${sysconfdir}/docker - else - install -d ${D}${sysconfdir}/docker - fi - - mkdir -p ${D}${datadir}/docker/ - install -m 0755 ${S}/src/import/contrib/check-config.sh ${D}${datadir}/docker/ -} - - -SYSTEMD_PACKAGES = "${@bb.utils.contains('DISTRO_FEATURES','systemd','${PN}','',d)}" -SYSTEMD_SERVICE:${PN} = "${@bb.utils.contains('DISTRO_FEATURES','systemd','docker.socket','',d)}" -SYSTEMD_AUTO_ENABLE:${PN} = "enable" - -INITSCRIPT_PACKAGES += "${@bb.utils.contains('DISTRO_FEATURES','sysvinit','${PN}','',d)}" -INITSCRIPT_NAME:${PN} = "${@bb.utils.contains('DISTRO_FEATURES','sysvinit','docker.init','',d)}" -INITSCRIPT_PARAMS:${PN} = "defaults" - -inherit useradd -USERADD_PACKAGES = "${PN}" -GROUPADD_PARAM:${PN} = "-r docker" - -COMPATIBLE_HOST = "^(?!(qemu)?mips).*" - -INSANE_SKIP:${PN} += "ldflags textrel" - -FILES:${PN} += "${systemd_unitdir}/system/* ${sysconfdir}/docker" - -PACKAGES =+ "${PN}-contrib" -FILES:${PN}-contrib += "${datadir}/docker/check-config.sh" -RDEPENDS:${PN}-contrib += "bash" - -# By the docker-packaging repository and https://docs.docker.com/engine/install/centos/#installation-methods -# docker is packaged by most distros with a split between the engine and the CLI. -# -# We do the same here, by introducing the -cli package -# -# But to keep existing use cases working, we also create a RDEPENDS between the main -# docker package (the engine) and the cli, so existing "docker" package installs will -# continue to work the same way. To have separate and non-redepending packages created -# set the DOCKER_UNIFIED_PACKAGE variable to False -# -PACKAGES =+ "${PN}-cli" -FILES:${PN}-cli += "${bindir}/docker" - -# set to "False" if packages should be generated for the cli and engine, and -# NOT rdepend to get a classic one-package install -DOCKER_UNIFIED_PACKAGE ?= "True" -RDEPENDS:${PN} += "${@bb.utils.contains("DOCKER_UNIFIED_PACKAGE", "True", "${PN}-cli", "", d)}" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-cli-use-external-GO111MODULE-and-cross-compiler.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-cli-use-external-GO111MODULE-and-cross-compiler.patch deleted file mode 100644 index dc322612a..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-cli-use-external-GO111MODULE-and-cross-compiler.patch +++ /dev/null @@ -1,27 +0,0 @@ -From 650c882d3c53db118b01dd5e15fa1bc0ddaa36f1 Mon Sep 17 00:00:00 2001 -From: Bruce Ashfield -Date: Thu, 15 Apr 2021 11:28:05 -0400 -Subject: [PATCH] cli: use external GO111MODULE and cross compiler - -Signed-off-by: Bruce Ashfield ---- - git/cli/scripts/build/binary | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git git/cli/scripts/build/binary git/cli/scripts/build/binary -index e4c5e12a6b..7c47b75c2f 100755 ---- git/cli/scripts/build/binary -+++ git/cli/scripts/build/binary -@@ -73,8 +73,7 @@ fi - - echo "Building $GO_LINKMODE $(basename "${TARGET}")" - --export GO111MODULE=auto - --go build -o "${TARGET}" -tags "${GO_BUILDTAGS}" --ldflags "${LDFLAGS}" ${GO_BUILDMODE} "${SOURCE}" -+${GO} build -o "${TARGET}" -tags "${GO_BUILDTAGS}" --ldflags "${LDFLAGS}" ${GO_BUILDMODE} "${SOURCE}" - - ln -sf "$(basename "${TARGET}")" "$(dirname "${TARGET}")/docker" --- -2.19.1 - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-dynbinary-use-go-cross-compiler.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-dynbinary-use-go-cross-compiler.patch deleted file mode 100644 index 971c60d78..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-dynbinary-use-go-cross-compiler.patch +++ /dev/null @@ -1,23 +0,0 @@ -From bbf600cc4d46c3f7ec0c1b486790a2402d41f550 Mon Sep 17 00:00:00 2001 -From: Bruce Ashfield -Date: Tue, 30 Jun 2020 22:23:33 -0400 -Subject: [PATCH] dynbinary: use go cross compiler - -Signed-off-by: Bruce Ashfield ---- - hack/make/.binary | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -Index: git/src/import/hack/make/.binary -=================================================================== ---- git.orig/src/import/hack/make/.binary -+++ git/src/import/hack/make/.binary -@@ -81,7 +81,7 @@ - - echo "Building: $DEST/$BINARY_FULLNAME" - echo "GOOS=\"${GOOS}\" GOARCH=\"${GOARCH}\" GOARM=\"${GOARM}\"" -- go build \ -+ ${GO} build \ - -o "$DEST/$BINARY_FULLNAME" \ - "${BUILDFLAGS[@]}" \ - -ldflags " diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-libnetwork-use-GO-instead-of-go.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-libnetwork-use-GO-instead-of-go.patch deleted file mode 100644 index c623b260a..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/0001-libnetwork-use-GO-instead-of-go.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 04c07804930faad708218a3134c81de06a9c742a Mon Sep 17 00:00:00 2001 -From: Bruce Ashfield -Date: Fri, 6 Apr 2018 23:58:22 -0400 -Subject: [PATCH] libnetwork: use $(GO) instead of go - -Ensure that the libnetwork makefile uses the go cross flags and -utilities. - -Signed-off-by: Bruce Ashfield ---- - Makefile | 14 +++++++------- - 1 file changed, 7 insertions(+), 7 deletions(-) - -Index: git/libnetwork/Makefile -=================================================================== ---- git.orig/libnetwork/Makefile -+++ git/libnetwork/Makefile -@@ -45,9 +45,9 @@ - build-local: - @echo "🐳 $@" - @mkdir -p "bin" -- go build -tags experimental -o "bin/dnet" ./cmd/dnet -- go build -o "bin/docker-proxy" ./cmd/proxy -- CGO_ENABLED=0 go build -o "bin/diagnosticClient" ./cmd/diagnostic -+ $(GO) build -tags experimental -o "bin/dnet" ./cmd/dnet -+ $(GO) build -o "bin/proxy" ./cmd/proxy -+ CGO_ENABLED=0 $(GO) build -o "bin/diagnosticClient" ./cmd/diagnostic - CGO_ENABLED=0 go build -o "bin/testMain" ./cmd/networkdb-test/testMain.go - - build-images: -@@ -82,8 +82,8 @@ - - cross-local: - @echo "🐳 $@" -- go build -o "bin/dnet-$$GOOS-$$GOARCH" ./cmd/dnet -- go build -o "bin/docker-proxy-$$GOOS-$$GOARCH" ./cmd/proxy -+ @$(GO) build -linkshared $(GOBUILDFLAGS) -o "bin/docker-proxy-$$GOOS-$$GOARCH" ./cmd/proxy -+ @$(GO) build -linkshared $(GOBUILDFLAGS) -o "bin/dnet-$$GOOS-$$GOARCH" ./cmd/dnet - - # Rebuild protocol buffers. - # These may need to be rebuilt after vendoring updates, so .proto files are declared .PHONY so they are always rebuilt. -@@ -130,7 +130,7 @@ - if ls $$dir/*.go &> /dev/null; then \ - pushd . &> /dev/null ; \ - cd $$dir ; \ -- go test ${INSIDECONTAINER} -test.parallel 5 -test.v -covermode=count -coverprofile=./profile.tmp ; \ -+ $(GO) test ${INSIDECONTAINER} -test.parallel 5 -test.v -covermode=count -coverprofile=./profile.tmp ; \ - ret=$$? ;\ - if [ $$ret -ne 0 ]; then exit $$ret; fi ;\ - popd &> /dev/null; \ -@@ -145,7 +145,7 @@ - # Depends on binaries because vet will silently fail if it can not load compiled imports - vet: ## run go vet - @echo "🐳 $@" -- @test -z "$$(go vet ${PACKAGES} 2>&1 | grep -v 'constant [0-9]* not a string in call to Errorf' | egrep -v '(timestamp_test.go|duration_test.go|exit status 1)' | tee /dev/stderr)" -+ @test -z "$$($(GO) vet ${PACKAGES} 2>&1 | grep -v 'constant [0-9]* not a string in call to Errorf' | egrep -v '(timestamp_test.go|duration_test.go|exit status 1)' | tee /dev/stderr)" - - misspell: - @echo "🐳 $@" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/docker.init b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/docker.init deleted file mode 100644 index 24f8fea67..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/docker/files/docker.init +++ /dev/null @@ -1,131 +0,0 @@ -#!/bin/sh -# -# /etc/rc.d/init.d/docker -# -# Daemon for docker.com -# -# chkconfig: 2345 95 95 -# description: Daemon for docker.com - -### BEGIN INIT INFO -# Provides: docker -# Required-Start: $network cgconfig -# Required-Stop: -# Should-Start: -# Should-Stop: -# Default-Start: 2 3 4 5 -# Default-Stop: 0 1 6 -# Short-Description: start and stop docker -# Description: Daemon for docker.com -### END INIT INFO - -# Source function library. -. /etc/init.d/functions - -prog="dockerd" -unshare=/usr/bin/unshare -exec="/usr/bin/$prog" -pidfile="/var/run/$prog.pid" -lockfile="/var/lock/subsys/$prog" -logfile="/var/log/$prog" -other_args="--pidfile $pidfile --registry-mirror=http://localhost:5000 --insecure-registry=http://localhost:5000 --raw-logs" - -[ -e /etc/sysconfig/$prog ] && . /etc/sysconfig/$prog - -start() { - [ -x $exec ] || exit 5 - - check_for_cleanup - - if ! [ -f $pidfile ]; then - printf "Starting $prog:\t" - echo -e "\n$(date)\n" >> $logfile - "$unshare" -m -- $exec $other_args >> $logfile 2>&1 & - pid=$! - touch $lockfile - # wait up to 10 seconds for the pidfile to exist. see - # https://github.com/docker/docker/issues/5359 - tries=0 - while [ ! -f $pidfile -a $tries -lt 10 ]; do - sleep 1 - tries=$((tries + 1)) - done - success - echo - else - failure - echo - printf "$pidfile still exists...\n" - exit 7 - fi -} - -stop() { - echo -n $"Stopping $prog: " - killproc $prog - retval=$? - echo - [ $retval -eq 0 ] && rm -f $lockfile - return $retval -} - -restart() { - stop - start -} - -reload() { - restart -} - -force_reload() { - restart -} - -rh_status() { - status $prog -} - -rh_status_q() { - rh_status >/dev/null 2>&1 -} - - -check_for_cleanup() { - if [ -f ${pidfile} ]; then - /bin/ps -fp $(cat ${pidfile}) > /dev/null || rm ${pidfile} - fi -} - -case "$1" in - start) - rh_status_q && exit 0 - $1 - ;; - stop) - rh_status_q || exit 0 - $1 - ;; - restart) - $1 - ;; - reload) - rh_status_q || exit 7 - $1 - ;; - force-reload) - force_reload - ;; - status) - rh_status - ;; - condrestart|try-restart) - rh_status_q || exit 0 - restart - ;; - *) - echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload}" - exit 2 -esac - -exit $? diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/files/0001-Makefile-respect-GOBUILDFLAGS-for-runc-and-remove-re.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/files/0001-Makefile-respect-GOBUILDFLAGS-for-runc-and-remove-re.patch deleted file mode 100644 index c855d7b57..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/files/0001-Makefile-respect-GOBUILDFLAGS-for-runc-and-remove-re.patch +++ /dev/null @@ -1,37 +0,0 @@ -From 0fe50d2ca4517f5e3070585040f35ace413acd44 Mon Sep 17 00:00:00 2001 -From: Bruce Ashfield -Date: Tue, 24 Aug 2021 11:38:23 -0400 -Subject: [PATCH] Makefile: respect GOBUILDFLAGS for runc and remove recvtty - from static - -Signed-off-by: Chen Qi -[bva: refreshed for release 1.0.2] -Signed-off-by: Bruce Ashfield ---- - Makefile | 3 +-- - 1 file changed, 1 insertion(+), 2 deletions(-) - -diff --git a/src/import/Makefile b/src/import/Makefile -index efbddf0d..4b174c80 100644 ---- a/src/import/Makefile -+++ b/src/import/Makefile -@@ -24,7 +24,7 @@ ifeq ($(shell $(GO) env GOOS),linux) - endif - endif - endif --GO_BUILD := $(GO) build -trimpath $(MOD_VENDOR) $(GO_BUILDMODE) $(EXTRA_FLAGS) -tags "$(BUILDTAGS)" \ -+GO_BUILD := $(GO) build $(GOBUILDFLAGS) -trimpath $(MOD_VENDOR) $(GO_BUILDMODE) $(EXTRA_FLAGS) -tags "$(BUILDTAGS)" \ - -ldflags "-X main.gitCommit=$(COMMIT) -X main.version=$(VERSION) $(EXTRA_LDFLAGS)" - GO_BUILD_STATIC := CGO_ENABLED=1 $(GO) build -trimpath $(MOD_VENDOR) $(EXTRA_FLAGS) -tags "$(BUILDTAGS) netgo osusergo" \ - -ldflags "-extldflags -static -X main.gitCommit=$(COMMIT) -X main.version=$(VERSION) $(EXTRA_LDFLAGS)" -@@ -41,7 +41,6 @@ recvtty: - - static: - $(GO_BUILD_STATIC) -o runc . -- $(GO_BUILD_STATIC) -o contrib/cmd/recvtty/recvtty ./contrib/cmd/recvtty - - release: - script/release.sh -r release/$(VERSION) -v $(VERSION) --- -2.19.1 - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker/0001-runc-Add-console-socket-dev-null.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker/0001-runc-Add-console-socket-dev-null.patch deleted file mode 100644 index bcf4c1037..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker/0001-runc-Add-console-socket-dev-null.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 3fff2a3505fba1d1ff0074edff15708a77f6cfa9 Mon Sep 17 00:00:00 2001 -From: Jason Wessel -Date: Wed, 12 Jul 2017 13:35:03 -0700 -Subject: [PATCH] runc: Add --console-socket=/dev/null - -This allows for setting up a detached session where you do not want to -set the terminal to false in the config.json. More or less this is a -runtime override. - -Signed-off-by: Jason Wessel ---- - utils_linux.go | 5 +++++ - 1 file changed, 5 insertions(+) - -Index: git/src/import/utils_linux.go -=================================================================== ---- git.orig/src/import/utils_linux.go -+++ git/src/import/utils_linux.go -@@ -267,6 +267,11 @@ - } - - func (r *runner) run(config *specs.Process) (int, error) { -+ if (r.consoleSocket == "/dev/null") { -+ r.detach = false -+ r.consoleSocket = "" -+ config.Terminal = false -+ } - var err error - defer func() { - if err != nil { diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker/0001-runc-docker-SIGUSR1-daemonize.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker/0001-runc-docker-SIGUSR1-daemonize.patch deleted file mode 100644 index 4350c40fb..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker/0001-runc-docker-SIGUSR1-daemonize.patch +++ /dev/null @@ -1,131 +0,0 @@ -From cd7d76a6d1ecb1856f6ed666fb5c30dc105aa94e Mon Sep 17 00:00:00 2001 -From: Jason Wessel -Date: Tue, 5 Dec 2017 18:28:28 -0800 -Subject: [PATCH] runc-docker: Allow "run start ..." to daemonize with $SIGUSR1_PARENT_PID - -The runc-docker has all the code in it to properly run a stop hook if -you use it in the foreground. It doesn't work in the back ground -because there is no way for a golang application to fork a child exit -out of the parent process because all the golang threads stay with the -parent. - -This patch has three parts that happen ONLY when $SIGUSR1_PARENT_PID -is set. - -1) The code was copied which performs the normal the signal handling - block which is used for the foreground operation of runc. - -2) At the point where runc start would normally exit, it closes - stdin/stdout/stderr so it would be possible to daemonize "runc start ...". - -3) The code to send a SIGUSR1 to the parent process was added. The - idea being that a parent process would simply exit at that point - because it was blocking until runc performed everything it was - required to perform. - -Signed-off-by: Jason Wessel ---- - signals.go | 54 ++++++++++++++++++++++++++++++++++++++++++++++++++---- - utils_linux.go | 2 +- - 2 files changed, 51 insertions(+), 5 deletions(-) - -Index: git/src/import/signals.go -=================================================================== ---- git.orig/src/import/signals.go -+++ git/src/import/signals.go -@@ -5,7 +5,9 @@ - import ( - "os" - "os/signal" -+ "syscall" // only for Signal - -+ "strconv" - "github.com/opencontainers/runc/libcontainer" - "github.com/opencontainers/runc/libcontainer/system" - "github.com/opencontainers/runc/libcontainer/utils" -@@ -55,9 +57,6 @@ - func (h *signalHandler) forward(process *libcontainer.Process, tty *tty, detach bool) (int, error) { - // make sure we know the pid of our main process so that we can return - // after it dies. -- if detach && h.notifySocket == nil { -- return 0, nil -- } - - pid1, err := process.Pid() - if err != nil { -@@ -67,12 +66,61 @@ - if h.notifySocket != nil { - if detach { - _ = h.notifySocket.run(pid1) -- return 0, nil - } - _ = h.notifySocket.run(os.Getpid()) - go func() { _ = h.notifySocket.run(0) }() - } - -+ if (detach) { -+ // This allows the parent process to daemonize this process -+ // so long as stdin/stderr/stdout are closed -+ if envVal := os.Getenv("SIGUSR1_PARENT_PID"); envVal != "" { -+ // Close stdin/stdout/stderr -+ os.Stdin.Close() -+ os.Stdout.Close() -+ os.Stderr.Close() -+ // Notify parent to detach -+ i, err := strconv.Atoi(envVal) -+ if (err != nil) { -+ return 0, nil -+ } -+ unix.Kill(i, unix.SIGUSR1) -+ // Loop waiting on the child to signal or exit, -+ // after which all stop hooks will be run -+ for s := range h.signals { -+ switch s { -+ case unix.SIGCHLD: -+ exits, err := h.reap() -+ if err != nil { -+ logrus.Error(err) -+ } -+ for _, e := range exits { -+ logrus.WithFields(logrus.Fields{ -+ "pid": e.pid, -+ "status": e.status, -+ }).Debug("process exited") -+ if e.pid == pid1 { -+ // call Wait() on the process even though we already have the exit -+ // status because we must ensure that any of the go specific process -+ // fun such as flushing pipes are complete before we return. -+ process.Wait() -+ if h.notifySocket != nil { -+ h.notifySocket.Close() -+ } -+ return e.status, nil -+ } -+ } -+ default: -+ logrus.Debugf("sending signal to process %s", s) -+ if err := unix.Kill(pid1, s.(syscall.Signal)); err != nil { -+ logrus.Error(err) -+ } -+ } -+ } -+ } -+ return 0, nil -+ } -+ - // Perform the initial tty resize. Always ignore errors resizing because - // stdout might have disappeared (due to races with when SIGHUP is sent). - _ = tty.resize() -Index: git/src/import/utils_linux.go -=================================================================== ---- git.orig/src/import/utils_linux.go -+++ git/src/import/utils_linux.go -@@ -345,7 +345,7 @@ - if err != nil { - r.terminate(process) - } -- if detach { -+ if (detach && os.Getenv("SIGUSR1_PARENT_PID") == "") { - return 0, nil - } - if err == nil { diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker_git.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker_git.bb deleted file mode 100644 index 4a46fd2f3..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-docker_git.bb +++ /dev/null @@ -1,14 +0,0 @@ -include runc.inc - -# Note: this rev is before the required protocol field, update when all components -# have been updated to match. -SRCREV_runc-docker = "04bcb7c71550a0212bfb876db7bac723ae13296a" -SRC_URI = "git://github.com/opencontainers/runc;branch=release-1.0;name=runc-docker;protocol=https \ - file://0001-runc-Add-console-socket-dev-null.patch \ - file://0001-Makefile-respect-GOBUILDFLAGS-for-runc-and-remove-re.patch \ - file://0001-runc-docker-SIGUSR1-daemonize.patch \ - " - -RUNC_VERSION = "1.0.2" - -CVE_PRODUCT = "runc" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-opencontainers_git.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-opencontainers_git.bb deleted file mode 100644 index 16ef5098f..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc-opencontainers_git.bb +++ /dev/null @@ -1,10 +0,0 @@ -include runc.inc - -SRCREV = "86d83333d765f4535e4898d6778388dab715eb7c" -SRC_URI = " \ - git://github.com/opencontainers/runc;branch=release-1.0;protocol=https \ - file://0001-Makefile-respect-GOBUILDFLAGS-for-runc-and-remove-re.patch \ - " -RUNC_VERSION = "1.0.2" - -CVE_PRODUCT = "runc" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc.inc deleted file mode 100644 index c8e742731..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-containers/runc/runc.inc +++ /dev/null @@ -1,83 +0,0 @@ -HOMEPAGE = "https://github.com/opencontainers/runc" -SUMMARY = "runc container cli tools" -DESCRIPTION = "runc is a CLI tool for spawning and running containers according to the OCI specification." - -# Apache-2.0 for containerd -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://src/import/LICENSE;md5=435b266b3899aa8a959f17d41c56def8" - -S = "${WORKDIR}/git" - -PV = "${RUNC_VERSION}+git${SRCPV}" - -inherit go -inherit goarch -inherit pkgconfig - -PACKAGECONFIG[seccomp] = "seccomp,,libseccomp" -PACKAGECONFIG[selinux] = "selinux,,libselinux" -# This PACKAGECONFIG serves the purpose of whether building runc as static or not -PACKAGECONFIG[static] = "" - -PACKAGECONFIG ??= "static \ - ${@bb.utils.contains('DISTRO_FEATURES', 'seccomp', 'seccomp', '', d)} \ - ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'selinux', '', d)} \ - " - - -PROVIDES += "virtual/runc" -RPROVIDES:${PN} = "virtual-runc" - -GO_IMPORT = "import" - -LIBCONTAINER_PACKAGE="github.com/opencontainers/runc/libcontainer" - -do_configure[noexec] = "1" - - -DISTRO_BUILDTAGS ?= "${@bb.utils.contains('DISTRO_FEATURES', 'seccomp', 'seccomp', '', d)} \ - ${@bb.utils.contains('DISTRO_FEATURES', 'selinux', 'selinux', '', d)}" - -EXTRA_OEMAKE="BUILDTAGS='${PACKAGECONFIG_CONFARGS} ${DISTRO_BUILDTAGS}' GO=${GO}" - -do_compile() { - # Set GOPATH. See 'PACKAGERS.md'. Don't rely on - # docker to download its dependencies but rather - # use dependencies packaged independently. - cd ${S}/src/import - rm -rf .gopath - dname=`dirname "${LIBCONTAINER_PACKAGE}"` - bname=`basename "${LIBCONTAINER_PACKAGE}"` - mkdir -p .gopath/src/${dname} - - (cd .gopath/src/${dname}; ln -sf ../../../../../${bname} ${bname}) - export GOPATH="${S}/src/import/.gopath:${S}/src/import/vendor:${STAGING_DIR_TARGET}/${prefix}/local/go" - - # Fix up symlink for go-cross compiler - rm -f ${S}/src/import/vendor/src - ln -sf ./ ${S}/src/import/vendor/src - - # Pass the needed cflags/ldflags so that cgo - # can find the needed headers files and libraries - export CGO_ENABLED="1" - export CGO_CFLAGS="${CFLAGS} --sysroot=${STAGING_DIR_TARGET}" - export CGO_LDFLAGS="${LDFLAGS} --sysroot=${STAGING_DIR_TARGET}" - export GO=${GO} - - export CFLAGS="" - export LDFLAGS="" - - if ${@bb.utils.contains('PACKAGECONFIG', 'static', 'true', 'false', d)}; then - oe_runmake static - else - oe_runmake runc - fi -} - -do_install() { - mkdir -p ${D}/${bindir} - - cp ${S}/src/import/runc ${D}/${bindir}/runc - ln -sf runc ${D}/${bindir}/docker-runc -} - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-boot_249.3.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-boot_249.3.bb deleted file mode 100644 index b3d4e31e0..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd-boot_249.3.bb +++ /dev/null @@ -1,74 +0,0 @@ -require systemd.inc -FILESEXTRAPATHS =. "${FILE_DIRNAME}/systemd:" - -require conf/image-uefi.conf - -DEPENDS = "intltool-native libcap util-linux gnu-efi gperf-native python3-jinja2-native" - -inherit meson pkgconfig gettext -inherit deploy - -LDFLAGS:prepend = "${@ " ".join(d.getVar('LD').split()[1:])} " - -do_write_config[vardeps] += "CC OBJCOPY" -do_write_config:append() { - cat >${WORKDIR}/meson-${PN}.cross <.*)\]") - kv_re = re.compile(r"^\s*(?P[^\s]+)\s*=\s*(?P.*)") - section = None - - if path.is_symlink(): - try: - path.resolve() - except FileNotFoundError: - # broken symlink, try relative to root - path = root / Path(os.readlink(str(path))).relative_to(ROOT) - - with path.open() as f: - for line in f: - if skip_re.match(line): - continue - - line = line.strip() - m = section_re.match(line) - if m: - if m.group('section') not in self.sections: - section = dict() - self.sections[m.group('section')] = section - else: - section = self.sections[m.group('section')] - continue - - while line.endswith("\\"): - line += f.readline().rstrip("\n") - - m = kv_re.match(line) - k = m.group('key') - v = m.group('value') - if k not in section: - section[k] = list() - section[k].extend(v.split()) - - def get(self, section, prop): - """Get a property from section - - Args: - section: Section to retrieve property from - prop: Property to retrieve - - Returns: - List representing all properties of type prop in section. - - Raises: - KeyError: if ``section`` or ``prop`` not found - """ - return self.sections[section][prop] - - -class Presets(): - """Class representing all systemd presets""" - def __init__(self, scope, root): - self.directives = list() - self._collect_presets(scope, root) - - def _parse_presets(self, presets): - """Parse presets out of a set of preset files""" - skip_re = re.compile(r"^\s*([#;]|$)") - directive_re = re.compile(r"^\s*(?Penable|disable)\s+(?P(.+))") - - Directive = namedtuple("Directive", "action unit_name") - for preset in presets: - with preset.open() as f: - for line in f: - m = directive_re.match(line) - if m: - directive = Directive(action=m.group('action'), - unit_name=m.group('unit_name')) - self.directives.append(directive) - elif skip_re.match(line): - pass - else: - sys.exit("Unparsed preset line in {}".format(preset)) - - def _collect_presets(self, scope, root): - """Collect list of preset files""" - presets = dict() - for location in locations: - paths = (root / location / scope).glob("*.preset") - for path in paths: - # earlier names override later ones - if path.name not in presets: - presets[path.name] = path - - self._parse_presets([v for k, v in sorted(presets.items())]) - - def state(self, unit_name): - """Return state of preset for unit_name - - Args: - presets: set of presets - unit_name: name of the unit - - Returns: - None: no matching preset - `enable`: unit_name is enabled - `disable`: unit_name is disabled - """ - for directive in self.directives: - if fnmatch.fnmatch(unit_name, directive.unit_name): - return directive.action - - return None - - -def add_link(path, target): - try: - path.parent.mkdir(parents=True) - except FileExistsError: - pass - if not path.is_symlink(): - print("ln -s {} {}".format(target, path)) - path.symlink_to(target) - - -class SystemdUnitNotFoundError(Exception): - def __init__(self, path, unit): - self.path = path - self.unit = unit - - -class SystemdUnit(): - def __init__(self, root, unit): - self.root = root - self.unit = unit - self.config = None - - def _path_for_unit(self, unit): - for location in locations: - path = self.root / location / "system" / unit - if path.exists() or path.is_symlink(): - return path - - raise SystemdUnitNotFoundError(self.root, unit) - - def _process_deps(self, config, service, location, prop, dirstem): - systemdir = self.root / SYSCONFDIR / "systemd" / "system" - - target = ROOT / location.relative_to(self.root) - try: - for dependent in config.get('Install', prop): - wants = systemdir / "{}.{}".format(dependent, dirstem) / service - add_link(wants, target) - - except KeyError: - pass - - def enable(self, caller_unit=None): - # if we're enabling an instance, first extract the actual instance - # then figure out what the template unit is - template = re.match(r"[^@]+@(?P[^\.]*)\.", self.unit) - if template: - instance = template.group('instance') - unit = re.sub(r"@[^\.]*\.", "@.", self.unit, 1) - else: - instance = None - unit = self.unit - - path = self._path_for_unit(unit) - - if path.is_symlink(): - # ignore aliases - return - - config = SystemdFile(self.root, path) - if instance == "": - try: - default_instance = config.get('Install', 'DefaultInstance')[0] - except KeyError: - # no default instance, so nothing to enable - return - - service = self.unit.replace("@.", - "@{}.".format(default_instance)) - else: - service = self.unit - - self._process_deps(config, service, path, 'WantedBy', 'wants') - self._process_deps(config, service, path, 'RequiredBy', 'requires') - - try: - for also in config.get('Install', 'Also'): - try: - if caller_unit != also: - SystemdUnit(self.root, also).enable(unit) - except SystemdUnitNotFoundError as e: - sys.exit("Error: Systemctl also enable issue with %s (%s)" % (service, e.unit)) - - except KeyError: - pass - - systemdir = self.root / SYSCONFDIR / "systemd" / "system" - target = ROOT / path.relative_to(self.root) - try: - for dest in config.get('Install', 'Alias'): - alias = systemdir / dest - add_link(alias, target) - - except KeyError: - pass - - def mask(self): - systemdir = self.root / SYSCONFDIR / "systemd" / "system" - add_link(systemdir / self.unit, "/dev/null") - - -def collect_services(root): - """Collect list of service files""" - services = set() - for location in locations: - paths = (root / location / "system").glob("*") - for path in paths: - if path.is_dir(): - continue - services.add(path.name) - - return services - - -def preset_all(root): - presets = Presets('system-preset', root) - services = collect_services(root) - - for service in services: - state = presets.state(service) - - if state == "enable" or state is None: - try: - SystemdUnit(root, service).enable() - except SystemdUnitNotFoundError: - sys.exit("Error: Systemctl preset_all issue in %s" % service) - - # If we populate the systemd links we also create /etc/machine-id, which - # allows systemd to boot with the filesystem read-only before generating - # a real value and then committing it back. - # - # For the stateless configuration, where /etc is generated at runtime - # (for example on a tmpfs), this script shouldn't run at all and we - # allow systemd to completely populate /etc. - (root / SYSCONFDIR / "machine-id").touch() - - -def main(): - if sys.version_info < (3, 4, 0): - sys.exit("Python 3.4 or greater is required") - - parser = argparse.ArgumentParser() - parser.add_argument('command', nargs='?', choices=['enable', 'mask', - 'preset-all']) - parser.add_argument('service', nargs=argparse.REMAINDER) - parser.add_argument('--root') - parser.add_argument('--preset-mode', - choices=['full', 'enable-only', 'disable-only'], - default='full') - - args = parser.parse_args() - - root = Path(args.root) if args.root else ROOT - - locations.append(SYSCONFDIR / "systemd") - # Handle the usrmerge case by ignoring /lib when it's a symlink - if not (root / BASE_LIBDIR).is_symlink(): - locations.append(BASE_LIBDIR / "systemd") - locations.append(LIBDIR / "systemd") - - command = args.command - if not command: - parser.print_help() - return 0 - - if command == "mask": - for service in args.service: - try: - SystemdUnit(root, service).mask() - except SystemdUnitNotFoundError as e: - sys.exit("Error: Systemctl main mask issue in %s (%s)" % (service, e.unit)) - elif command == "enable": - for service in args.service: - try: - SystemdUnit(root, service).enable() - except SystemdUnitNotFoundError as e: - sys.exit("Error: Systemctl main enable issue in %s (%s)" % (service, e.unit)) - elif command == "preset-all": - if len(args.service) != 0: - sys.exit("Too many arguments.") - if args.preset_mode != "enable-only": - sys.exit("Only enable-only is supported as preset-mode.") - preset_all(root) - else: - raise RuntimeError() - - -if __name__ == '__main__': - main() diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd.inc deleted file mode 100644 index 36530649f..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd.inc +++ /dev/null @@ -1,22 +0,0 @@ -SUMMARY = "A System and service manager" -HOMEPAGE = "http://www.freedesktop.org/wiki/Software/systemd" - -DESCRIPTION = "systemd is a system and service manager for Linux, compatible with \ -SysV and LSB init scripts. systemd provides aggressive parallelization \ -capabilities, uses socket and D-Bus activation for starting services, \ -offers on-demand starting of daemons, keeps track of processes using \ -Linux cgroups, supports snapshotting and restoring of the system \ -state, maintains mount and automount points and implements an \ -elaborate transactional dependency-based service control logic. It can \ -work as a drop-in replacement for sysvinit." - -LICENSE = "GPL-2.0-only & LGPL-2.1-only" -LIC_FILES_CHKSUM = "file://LICENSE.GPL2;md5=751419260aa954499f7abaabaa882bbe \ - file://LICENSE.LGPL2.1;md5=4fbd65380cdd255951079008b364516c" - -SRCREV = "090378dcb1de5ca66900503210e85d63075fa70a" -SRCBRANCH = "v249-stable" -SRC_URI = "git://github.com/systemd/systemd-stable.git;protocol=https;branch=${SRCBRANCH} \ -" - -S = "${WORKDIR}/git" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/00-create-volatile.conf b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/00-create-volatile.conf deleted file mode 100644 index 87cbe1e7d..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/00-create-volatile.conf +++ /dev/null @@ -1,7 +0,0 @@ -#This goes hand-in-hand with the base-files of OE-Core. The file must -# be sorted before 'systemd.conf' becuase this attempts to create a file -# inside /var/log. - - -d /var/volatile/log - - - - -d /var/volatile/tmp 1777 - - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/00-hostnamed-network-user.conf b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/00-hostnamed-network-user.conf deleted file mode 100644 index 6b224ba9b..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/00-hostnamed-network-user.conf +++ /dev/null @@ -1,6 +0,0 @@ -[Service] -# By running with these options instead of root, networkd is allowed to request -# a hostname change via DBUS when policykit is not present -User=systemd-network -Group=systemd-hostname -AmbientCapabilities=CAP_SYS_ADMIN diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch deleted file mode 100644 index d3af734e0..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch +++ /dev/null @@ -1,81 +0,0 @@ -From 08cd165f5db0e68a499b80c4b1744a4206948259 Mon Sep 17 00:00:00 2001 -From: Chen Qi -Date: Thu, 21 Feb 2019 16:23:24 +0800 -Subject: [PATCH] binfmt: Don't install dependency links at install time for - the binfmt services - -use [Install] blocks so that they get created when the service is enabled -like a traditional service. - -The [Install] blocks were rejected upstream as they don't have a way to -"enable" it on install without static symlinks which can't be disabled, -only masked. We however can do that in a postinst. - -Upstream-Status: Denied - -Signed-off-by: Ross Burton -Signed-off-by: Khem Raj -Signed-off-by: Chen Qi -[rebased for systemd 243] -Signed-off-by: Scott Murray - ---- - units/meson.build | 6 ++---- - units/proc-sys-fs-binfmt_misc.automount | 3 +++ - units/systemd-binfmt.service.in | 4 ++++ - 3 files changed, 9 insertions(+), 4 deletions(-) - -diff --git a/units/meson.build b/units/meson.build -index 17e9ead9c1..e5502be620 100644 ---- a/units/meson.build -+++ b/units/meson.build -@@ -59,8 +59,7 @@ units = [ - ['poweroff.target', '', - (with_runlevels ? 'runlevel0.target' : '')], - ['printer.target', ''], -- ['proc-sys-fs-binfmt_misc.automount', 'ENABLE_BINFMT', -- 'sysinit.target.wants/'], -+ ['proc-sys-fs-binfmt_misc.automount', 'ENABLE_BINFMT'], - ['proc-sys-fs-binfmt_misc.mount', 'ENABLE_BINFMT'], - ['reboot.target', '', - 'ctrl-alt-del.target' + (with_runlevels ? ' runlevel6.target' : '')], -@@ -178,8 +177,7 @@ in_units = [ - ['rescue.service', ''], - ['serial-getty@.service', ''], - ['systemd-backlight@.service', 'ENABLE_BACKLIGHT'], -- ['systemd-binfmt.service', 'ENABLE_BINFMT', -- 'sysinit.target.wants/'], -+ ['systemd-binfmt.service', 'ENABLE_BINFMT'], - ['systemd-bless-boot.service', 'ENABLE_EFI HAVE_BLKID'], - ['systemd-boot-check-no-failures.service', ''], - ['systemd-coredump@.service', 'ENABLE_COREDUMP'], -diff --git a/units/proc-sys-fs-binfmt_misc.automount b/units/proc-sys-fs-binfmt_misc.automount -index 172c8757ab..f65d8930c6 100644 ---- a/units/proc-sys-fs-binfmt_misc.automount -+++ b/units/proc-sys-fs-binfmt_misc.automount -@@ -19,3 +19,6 @@ ConditionPathIsReadWrite=/proc/sys/ - - [Automount] - Where=/proc/sys/fs/binfmt_misc -+ -+[Install] -+WantedBy=sysinit.target -diff --git a/units/systemd-binfmt.service.in b/units/systemd-binfmt.service.in -index fdafce7ff7..4efc05e495 100644 ---- a/units/systemd-binfmt.service.in -+++ b/units/systemd-binfmt.service.in -@@ -14,6 +14,7 @@ Documentation=https://www.kernel.org/doc/html/latest/admin-guide/binfmt-misc.htm - Documentation=https://www.freedesktop.org/wiki/Software/systemd/APIFileSystems - DefaultDependencies=no - Conflicts=shutdown.target -+Wants=proc-sys-fs-binfmt_misc.automount - After=proc-sys-fs-binfmt_misc.automount - After=proc-sys-fs-binfmt_misc.mount - Before=sysinit.target shutdown.target -@@ -30,3 +31,6 @@ RemainAfterExit=yes - ExecStart={{ROOTLIBEXECDIR}}/systemd-binfmt - ExecStop={{ROOTLIBEXECDIR}}/systemd-binfmt --unregister - TimeoutSec=90s -+ -+[Install] -+WantedBy=sysinit.target diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-systemd.pc.in-use-ROOTPREFIX-without-suffixed-slash.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-systemd.pc.in-use-ROOTPREFIX-without-suffixed-slash.patch deleted file mode 100644 index 752824688..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-systemd.pc.in-use-ROOTPREFIX-without-suffixed-slash.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 58860e0f248576a80ff2af256ba42713c186ae93 Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Tue, 29 Sep 2020 18:01:41 -0700 -Subject: [PATCH] systemd.pc.in: use ROOTPREFIX without suffixed slash - -This complements the commit -https://github.com/poettering/systemd/commit/b612c26ceb9f56af0271fc9f07c1724d2d260a8a - -Upstream-Status: Pending -Signed-off-by: Khem Raj ---- - src/core/systemd.pc.in | 8 ++++---- - 1 file changed, 4 insertions(+), 4 deletions(-) - -diff --git a/src/core/systemd.pc.in b/src/core/systemd.pc.in -index b5cc8f9..21dbf30 100644 ---- a/src/core/systemd.pc.in -+++ b/src/core/systemd.pc.in -@@ -65,16 +65,16 @@ systemdshutdowndir=${systemd_shutdown_dir} - tmpfiles_dir=${prefix}/lib/tmpfiles.d - tmpfilesdir=${tmpfiles_dir} - --sysusers_dir=${rootprefix}/lib/sysusers.d -+sysusers_dir=${prefix}/lib/sysusers.d - sysusersdir=${sysusers_dir} - --sysctl_dir=${rootprefix}/lib/sysctl.d -+sysctl_dir=${prefix}/lib/sysctl.d - sysctldir=${sysctl_dir} - --binfmt_dir=${rootprefix}/lib/binfmt.d -+binfmt_dir=${prefix}/lib/binfmt.d - binfmtdir=${binfmt_dir} - --modules_load_dir=${rootprefix}/lib/modules-load.d -+modules_load_dir=${prefix}/lib/modules-load.d - modulesloaddir=${modules_load_dir} - - catalog_dir=${prefix}/lib/systemd/catalog --- -2.25.1 - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-test-parse-argument-Include-signal.h.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-test-parse-argument-Include-signal.h.patch deleted file mode 100644 index 3af1daac9..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0001-test-parse-argument-Include-signal.h.patch +++ /dev/null @@ -1,29 +0,0 @@ -From 1adde6721ead386ccee6efe48038d6944b96319a Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Mon, 24 May 2021 18:26:27 -0700 -Subject: [PATCH] test-parse-argument: Include signal.h - -Fixes -src/test/test-parse-argument.c:49:29: error: use of undeclared identifier 'SIGABRT' - -Upstream-Status: Submitted [https://github.com/systemd/systemd/pull/19718] -Signed-off-by: Khem Raj ---- - src/test/test-parse-argument.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/test/test-parse-argument.c b/src/test/test-parse-argument.c -index 4081a9f25a..820d69f092 100644 ---- a/src/test/test-parse-argument.c -+++ b/src/test/test-parse-argument.c -@@ -3,6 +3,7 @@ - #include "parse-argument.h" - #include "stdio-util.h" - #include "tests.h" -+#include - - static void test_parse_json_argument(void) { - log_info("/* %s */", __func__); --- -2.31.1 - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch deleted file mode 100644 index 15fa0c454..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0002-don-t-use-glibc-specific-qsort_r.patch +++ /dev/null @@ -1,163 +0,0 @@ -From 40acdb90031cfeb7140cee5205bce24f8c91d857 Mon Sep 17 00:00:00 2001 -From: Chen Qi -Date: Mon, 25 Feb 2019 13:41:41 +0800 -Subject: [PATCH] don't use glibc-specific qsort_r - -Upstream-Status: Inappropriate [musl specific] - -Signed-off-by: Khem Raj -[Rebased for v241] -Signed-off-by: Chen Qi -[Rebased for v242] -Signed-off-by: Andrej Valek -[Rebased for v247] -Signed-off-by: Luca Boccassi - ---- - src/basic/sort-util.h | 14 -------------- - src/shared/format-table.c | 36 ++++++++++++++++++++++++------------ - src/shared/hwdb-util.c | 19 ++++++++++++++----- - 3 files changed, 38 insertions(+), 31 deletions(-) - -diff --git a/src/basic/sort-util.h b/src/basic/sort-util.h -index 49586a4a24..d92a5ab0ed 100644 ---- a/src/basic/sort-util.h -+++ b/src/basic/sort-util.h -@@ -55,18 +55,4 @@ static inline void _qsort_safe(void *base, size_t nmemb, size_t size, __compar_f - _qsort_safe((p), (n), sizeof((p)[0]), (__compar_fn_t) _func_); \ - }) - --static inline void qsort_r_safe(void *base, size_t nmemb, size_t size, __compar_d_fn_t compar, void *userdata) { -- if (nmemb <= 1) -- return; -- -- assert(base); -- qsort_r(base, nmemb, size, compar, userdata); --} -- --#define typesafe_qsort_r(p, n, func, userdata) \ -- ({ \ -- int (*_func_)(const typeof(p[0])*, const typeof(p[0])*, typeof(userdata)) = func; \ -- qsort_r_safe((p), (n), sizeof((p)[0]), (__compar_d_fn_t) _func_, userdata); \ -- }) -- - int cmp_int(const int *a, const int *b); -diff --git a/src/shared/format-table.c b/src/shared/format-table.c -index 4c4e4593d8..17b329f315 100644 ---- a/src/shared/format-table.c -+++ b/src/shared/format-table.c -@@ -1282,30 +1282,32 @@ static int cell_data_compare(TableData *a, size_t index_a, TableData *b, size_t - return CMP(index_a, index_b); - } - --static int table_data_compare(const size_t *a, const size_t *b, Table *t) { -+static Table *user_table; -+static int table_data_compare(const void *x, const void *y) { -+ const size_t *a = x, *b=y; - int r; - -- assert(t); -- assert(t->sort_map); -+ assert(user_table); -+ assert(user_table->sort_map); - - /* Make sure the header stays at the beginning */ -- if (*a < t->n_columns && *b < t->n_columns) -+ if (*a < user_table->n_columns && *b < user_table->n_columns) - return 0; -- if (*a < t->n_columns) -+ if (*a < user_table->n_columns) - return -1; -- if (*b < t->n_columns) -+ if (*b < user_table->n_columns) - return 1; - - /* Order other lines by the sorting map */ -- for (size_t i = 0; i < t->n_sort_map; i++) { -+ for (size_t i = 0; i < user_table->n_sort_map; i++) { - TableData *d, *dd; - -- d = t->data[*a + t->sort_map[i]]; -- dd = t->data[*b + t->sort_map[i]]; -+ d = user_table->data[*a + user_table->sort_map[i]]; -+ dd = user_table->data[*b + user_table->sort_map[i]]; - - r = cell_data_compare(d, *a, dd, *b); - if (r != 0) -- return t->reverse_map && t->reverse_map[t->sort_map[i]] ? -r : r; -+ return user_table->reverse_map && user_table->reverse_map[user_table->sort_map[i]] ? -r : r; - } - - /* Order identical lines by the order there were originally added in */ -@@ -1944,7 +1946,12 @@ int table_print(Table *t, FILE *f) { - for (size_t i = 0; i < n_rows; i++) - sorted[i] = i * t->n_columns; - -- typesafe_qsort_r(sorted, n_rows, table_data_compare, t); -+ if (n_rows <= 1) -+ return 0; -+ assert(sorted); -+ user_table = t; -+ qsort(sorted, n_rows, sizeof(size_t), table_data_compare); -+ user_table = NULL; - } - - if (t->display_map) -@@ -2572,7 +2579,12 @@ int table_to_json(Table *t, JsonVariant **ret) { - for (size_t i = 0; i < n_rows; i++) - sorted[i] = i * t->n_columns; - -- typesafe_qsort_r(sorted, n_rows, table_data_compare, t); -+ if (n_rows <= 1) -+ return 0; -+ assert(sorted); -+ user_table = t; -+ qsort(sorted, n_rows, sizeof(size_t), table_data_compare); -+ user_table = NULL; - } - - if (t->display_map) -diff --git a/src/shared/hwdb-util.c b/src/shared/hwdb-util.c -index d7626aed95..2003fac7c3 100644 ---- a/src/shared/hwdb-util.c -+++ b/src/shared/hwdb-util.c -@@ -127,9 +127,13 @@ static struct trie* trie_free(struct trie *trie) { - - DEFINE_TRIVIAL_CLEANUP_FUNC(struct trie*, trie_free); - --static int trie_values_cmp(const struct trie_value_entry *a, const struct trie_value_entry *b, struct trie *trie) { -- return strcmp(trie->strings->buf + a->key_off, -- trie->strings->buf + b->key_off); -+static struct trie *trie_node_add_value_trie; -+static int trie_values_cmp(const void *v1, const void *v2) { -+ const struct trie_value_entry *a = v1; -+ const struct trie_value_entry *b = v2; -+ -+ return strcmp(trie_node_add_value_trie->strings->buf + a->key_off, -+ trie_node_add_value_trie->strings->buf + b->key_off); - } - - static int trie_node_add_value(struct trie *trie, struct trie_node *node, -@@ -157,7 +161,10 @@ static int trie_node_add_value(struct trie *trie, struct trie_node *node, - .value_off = v, - }; - -- val = typesafe_bsearch_r(&search, node->values, node->values_count, trie_values_cmp, trie); -+ trie_node_add_value_trie = trie; -+ val = bsearch(&search, node->values, node->values_count, sizeof(struct trie_value_entry), trie_values_cmp); -+ trie_node_add_value_trie = NULL; -+ - if (val) { - /* At this point we have 2 identical properties on the same match-string. - * Since we process files in order, we just replace the previous value. */ -@@ -183,7 +190,9 @@ static int trie_node_add_value(struct trie *trie, struct trie_node *node, - .line_number = line_number, - }; - node->values_count++; -- typesafe_qsort_r(node->values, node->values_count, trie_values_cmp, trie); -+ trie_node_add_value_trie = trie; -+ qsort(node->values, node->values_count, sizeof(struct trie_value_entry), trie_values_cmp); -+ trie_node_add_value_trie = NULL; - return 0; - } - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0003-implment-systemd-sysv-install-for-OE.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0003-implment-systemd-sysv-install-for-OE.patch deleted file mode 100644 index c6204786b..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0003-implment-systemd-sysv-install-for-OE.patch +++ /dev/null @@ -1,41 +0,0 @@ -From f9078501a1495c9991431d1435d081cd2e830328 Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Sat, 5 Sep 2015 06:31:47 +0000 -Subject: [PATCH] implment systemd-sysv-install for OE - -Use update-rc.d for enabling/disabling and status command -to check the status of the sysv service - -Upstream-Status: Inappropriate [OE-Specific] - -Signed-off-by: Khem Raj - ---- - src/systemctl/systemd-sysv-install.SKELETON | 6 +++--- - 1 file changed, 3 insertions(+), 3 deletions(-) - -diff --git a/src/systemctl/systemd-sysv-install.SKELETON b/src/systemctl/systemd-sysv-install.SKELETON -index 8c16cf99913f..9f078a121469 100755 ---- a/src/systemctl/systemd-sysv-install.SKELETON -+++ b/src/systemctl/systemd-sysv-install.SKELETON -@@ -32,17 +32,17 @@ case "$1" in - enable) - # call the command to enable SysV init script $NAME here - # (consider optional $ROOT) -- echo "IMPLEMENT ME: enabling SysV init.d script $NAME" -+ update-rc.d -f $NAME defaults - ;; - disable) - # call the command to disable SysV init script $NAME here - # (consider optional $ROOT) -- echo "IMPLEMENT ME: disabling SysV init.d script $NAME" -+ update-rc.d -f $NAME remove - ;; - is-enabled) - # exit with 0 if $NAME is enabled, non-zero if it is disabled - # (consider optional $ROOT) -- echo "IMPLEMENT ME: checking SysV init.d script $NAME" -+ /etc/init.d/$NAME status - ;; - *) - usage ;; diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0003-missing_type.h-add-__compare_fn_t-and-comparison_fn_.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0003-missing_type.h-add-__compare_fn_t-and-comparison_fn_.patch deleted file mode 100644 index d0110a238..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0003-missing_type.h-add-__compare_fn_t-and-comparison_fn_.patch +++ /dev/null @@ -1,76 +0,0 @@ -From 2a2f95b6dc16d2ea7a8e9349c6b19cc50c34777b Mon Sep 17 00:00:00 2001 -From: Chen Qi -Date: Mon, 25 Feb 2019 13:55:12 +0800 -Subject: [PATCH] missing_type.h: add __compare_fn_t and comparison_fn_t - -Make it work with musl where comparison_fn_t and __compare_fn_t -is not provided. - -Upstream-Status: Inappropriate [musl specific] - -Signed-off-by: Alex Kiernan -[Rebased for v244] -Signed-off-by: Chen Qi -[Rebased for v242] -Signed-off-by: Andrej Valek - ---- - src/basic/missing_type.h | 9 +++++++++ - src/basic/sort-util.h | 1 + - src/core/kmod-setup.c | 1 + - src/libsystemd/sd-journal/catalog.c | 1 + - 4 files changed, 12 insertions(+) - -diff --git a/src/basic/missing_type.h b/src/basic/missing_type.h -index f6233090a9..aeaf6ad5ec 100644 ---- a/src/basic/missing_type.h -+++ b/src/basic/missing_type.h -@@ -10,3 +10,12 @@ - #if !HAVE_CHAR16_T - #define char16_t uint16_t - #endif -+ -+#ifndef __GLIBC__ -+typedef int (*comparison_fn_t)(const void *, const void *); -+#endif -+ -+#ifndef __COMPAR_FN_T -+#define __COMPAR_FN_T -+typedef int (*__compar_fn_t)(const void *, const void *); -+#endif -diff --git a/src/basic/sort-util.h b/src/basic/sort-util.h -index d92a5ab0ed..a63867c716 100644 ---- a/src/basic/sort-util.h -+++ b/src/basic/sort-util.h -@@ -4,6 +4,7 @@ - #include - - #include "macro.h" -+#include "missing_type.h" - - void *xbsearch_r(const void *key, const void *base, size_t nmemb, size_t size, - __compar_d_fn_t compar, void *arg); -diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c -index 8a7f82812a..a56f12f47f 100644 ---- a/src/core/kmod-setup.c -+++ b/src/core/kmod-setup.c -@@ -10,6 +10,7 @@ - #include "kmod-setup.h" - #include "macro.h" - #include "string-util.h" -+#include "missing_type.h" - - #if HAVE_KMOD - #include "module-util.h" -diff --git a/src/libsystemd/sd-journal/catalog.c b/src/libsystemd/sd-journal/catalog.c -index ce8d47ccc3..00845f9776 100644 ---- a/src/libsystemd/sd-journal/catalog.c -+++ b/src/libsystemd/sd-journal/catalog.c -@@ -28,6 +28,7 @@ - #include "string-util.h" - #include "strv.h" - #include "tmpfile-util.h" -+#include "missing_type.h" - - const char * const catalog_file_dirs[] = { - "/usr/local/lib/systemd/catalog/", diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch deleted file mode 100644 index 1d61367da..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0004-add-fallback-parse_printf_format-implementation.patch +++ /dev/null @@ -1,433 +0,0 @@ -From b19f800e178516d4f4d344457647e4a018bd6855 Mon Sep 17 00:00:00 2001 -From: Alexander Kanavin -Date: Sat, 22 May 2021 20:26:24 +0200 -Subject: [PATCH] add fallback parse_printf_format implementation - -Upstream-Status: Inappropriate [musl specific] - -Signed-off-by: Emil Renner Berthing -Signed-off-by: Khem Raj -Signed-off-by: Chen Qi -[rebased for systemd 243] -Signed-off-by: Scott Murray - ---- - meson.build | 1 + - src/basic/meson.build | 5 + - src/basic/parse-printf-format.c | 273 +++++++++++++++++++++++ - src/basic/parse-printf-format.h | 57 +++++ - src/basic/stdio-util.h | 2 +- - src/libsystemd/sd-journal/journal-send.c | 2 +- - 6 files changed, 338 insertions(+), 2 deletions(-) - create mode 100644 src/basic/parse-printf-format.c - create mode 100644 src/basic/parse-printf-format.h - -diff --git a/meson.build b/meson.build -index 738879eb21..1aa20b8246 100644 ---- a/meson.build -+++ b/meson.build -@@ -656,6 +656,7 @@ endif - foreach header : ['crypt.h', - 'linux/memfd.h', - 'linux/vm_sockets.h', -+ 'printf.h', - 'sys/auxv.h', - 'valgrind/memcheck.h', - 'valgrind/valgrind.h', -diff --git a/src/basic/meson.build b/src/basic/meson.build -index 9b016ce5e8..a9ce21b02e 100644 ---- a/src/basic/meson.build -+++ b/src/basic/meson.build -@@ -322,6 +322,11 @@ endforeach - - basic_sources += generated_gperf_headers - -+if conf.get('HAVE_PRINTF_H') != 1 -+ basic_sources += [files('parse-printf-format.c')] -+endif -+ -+ - ############################################################ - - arch_list = [ -diff --git a/src/basic/parse-printf-format.c b/src/basic/parse-printf-format.c -new file mode 100644 -index 0000000000..49437e5445 ---- /dev/null -+++ b/src/basic/parse-printf-format.c -@@ -0,0 +1,273 @@ -+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ -+ -+/*** -+ This file is part of systemd. -+ -+ Copyright 2014 Emil Renner Berthing -+ -+ With parts from the musl C library -+ Copyright 2005-2014 Rich Felker, et al. -+ -+ systemd is free software; you can redistribute it and/or modify it -+ under the terms of the GNU Lesser General Public License as published by -+ the Free Software Foundation; either version 2.1 of the License, or -+ (at your option) any later version. -+ -+ systemd is distributed in the hope that it will be useful, but -+ WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public License -+ along with systemd; If not, see . -+***/ -+ -+#include -+#include -+ -+#include "parse-printf-format.h" -+ -+static const char *consume_nonarg(const char *fmt) -+{ -+ do { -+ if (*fmt == '\0') -+ return fmt; -+ } while (*fmt++ != '%'); -+ return fmt; -+} -+ -+static const char *consume_num(const char *fmt) -+{ -+ for (;*fmt >= '0' && *fmt <= '9'; fmt++) -+ /* do nothing */; -+ return fmt; -+} -+ -+static const char *consume_argn(const char *fmt, size_t *arg) -+{ -+ const char *p = fmt; -+ size_t val = 0; -+ -+ if (*p < '1' || *p > '9') -+ return fmt; -+ do { -+ val = 10*val + (*p++ - '0'); -+ } while (*p >= '0' && *p <= '9'); -+ -+ if (*p != '$') -+ return fmt; -+ *arg = val; -+ return p+1; -+} -+ -+static const char *consume_flags(const char *fmt) -+{ -+ while (1) { -+ switch (*fmt) { -+ case '#': -+ case '0': -+ case '-': -+ case ' ': -+ case '+': -+ case '\'': -+ case 'I': -+ fmt++; -+ continue; -+ } -+ return fmt; -+ } -+} -+ -+enum state { -+ BARE, -+ LPRE, -+ LLPRE, -+ HPRE, -+ HHPRE, -+ BIGLPRE, -+ ZTPRE, -+ JPRE, -+ STOP -+}; -+ -+enum type { -+ NONE, -+ PTR, -+ INT, -+ UINT, -+ ULLONG, -+ LONG, -+ ULONG, -+ SHORT, -+ USHORT, -+ CHAR, -+ UCHAR, -+ LLONG, -+ SIZET, -+ IMAX, -+ UMAX, -+ PDIFF, -+ UIPTR, -+ DBL, -+ LDBL, -+ MAXTYPE -+}; -+ -+static const short pa_types[MAXTYPE] = { -+ [NONE] = PA_INT, -+ [PTR] = PA_POINTER, -+ [INT] = PA_INT, -+ [UINT] = PA_INT, -+ [ULLONG] = PA_INT | PA_FLAG_LONG_LONG, -+ [LONG] = PA_INT | PA_FLAG_LONG, -+ [ULONG] = PA_INT | PA_FLAG_LONG, -+ [SHORT] = PA_INT | PA_FLAG_SHORT, -+ [USHORT] = PA_INT | PA_FLAG_SHORT, -+ [CHAR] = PA_CHAR, -+ [UCHAR] = PA_CHAR, -+ [LLONG] = PA_INT | PA_FLAG_LONG_LONG, -+ [SIZET] = PA_INT | PA_FLAG_LONG, -+ [IMAX] = PA_INT | PA_FLAG_LONG_LONG, -+ [UMAX] = PA_INT | PA_FLAG_LONG_LONG, -+ [PDIFF] = PA_INT | PA_FLAG_LONG_LONG, -+ [UIPTR] = PA_INT | PA_FLAG_LONG, -+ [DBL] = PA_DOUBLE, -+ [LDBL] = PA_DOUBLE | PA_FLAG_LONG_DOUBLE -+}; -+ -+#define S(x) [(x)-'A'] -+#define E(x) (STOP + (x)) -+ -+static const unsigned char states[]['z'-'A'+1] = { -+ { /* 0: bare types */ -+ S('d') = E(INT), S('i') = E(INT), -+ S('o') = E(UINT),S('u') = E(UINT),S('x') = E(UINT), S('X') = E(UINT), -+ S('e') = E(DBL), S('f') = E(DBL), S('g') = E(DBL), S('a') = E(DBL), -+ S('E') = E(DBL), S('F') = E(DBL), S('G') = E(DBL), S('A') = E(DBL), -+ S('c') = E(CHAR),S('C') = E(INT), -+ S('s') = E(PTR), S('S') = E(PTR), S('p') = E(UIPTR),S('n') = E(PTR), -+ S('m') = E(NONE), -+ S('l') = LPRE, S('h') = HPRE, S('L') = BIGLPRE, -+ S('z') = ZTPRE, S('j') = JPRE, S('t') = ZTPRE -+ }, { /* 1: l-prefixed */ -+ S('d') = E(LONG), S('i') = E(LONG), -+ S('o') = E(ULONG),S('u') = E(ULONG),S('x') = E(ULONG),S('X') = E(ULONG), -+ S('e') = E(DBL), S('f') = E(DBL), S('g') = E(DBL), S('a') = E(DBL), -+ S('E') = E(DBL), S('F') = E(DBL), S('G') = E(DBL), S('A') = E(DBL), -+ S('c') = E(INT), S('s') = E(PTR), S('n') = E(PTR), -+ S('l') = LLPRE -+ }, { /* 2: ll-prefixed */ -+ S('d') = E(LLONG), S('i') = E(LLONG), -+ S('o') = E(ULLONG),S('u') = E(ULLONG), -+ S('x') = E(ULLONG),S('X') = E(ULLONG), -+ S('n') = E(PTR) -+ }, { /* 3: h-prefixed */ -+ S('d') = E(SHORT), S('i') = E(SHORT), -+ S('o') = E(USHORT),S('u') = E(USHORT), -+ S('x') = E(USHORT),S('X') = E(USHORT), -+ S('n') = E(PTR), -+ S('h') = HHPRE -+ }, { /* 4: hh-prefixed */ -+ S('d') = E(CHAR), S('i') = E(CHAR), -+ S('o') = E(UCHAR),S('u') = E(UCHAR), -+ S('x') = E(UCHAR),S('X') = E(UCHAR), -+ S('n') = E(PTR) -+ }, { /* 5: L-prefixed */ -+ S('e') = E(LDBL),S('f') = E(LDBL),S('g') = E(LDBL), S('a') = E(LDBL), -+ S('E') = E(LDBL),S('F') = E(LDBL),S('G') = E(LDBL), S('A') = E(LDBL), -+ S('n') = E(PTR) -+ }, { /* 6: z- or t-prefixed (assumed to be same size) */ -+ S('d') = E(PDIFF),S('i') = E(PDIFF), -+ S('o') = E(SIZET),S('u') = E(SIZET), -+ S('x') = E(SIZET),S('X') = E(SIZET), -+ S('n') = E(PTR) -+ }, { /* 7: j-prefixed */ -+ S('d') = E(IMAX), S('i') = E(IMAX), -+ S('o') = E(UMAX), S('u') = E(UMAX), -+ S('x') = E(UMAX), S('X') = E(UMAX), -+ S('n') = E(PTR) -+ } -+}; -+ -+size_t parse_printf_format(const char *fmt, size_t n, int *types) -+{ -+ size_t i = 0; -+ size_t last = 0; -+ -+ memset(types, 0, n); -+ -+ while (1) { -+ size_t arg; -+ unsigned int state; -+ -+ fmt = consume_nonarg(fmt); -+ if (*fmt == '\0') -+ break; -+ if (*fmt == '%') { -+ fmt++; -+ continue; -+ } -+ arg = 0; -+ fmt = consume_argn(fmt, &arg); -+ /* flags */ -+ fmt = consume_flags(fmt); -+ /* width */ -+ if (*fmt == '*') { -+ size_t warg = 0; -+ fmt = consume_argn(fmt+1, &warg); -+ if (warg == 0) -+ warg = ++i; -+ if (warg > last) -+ last = warg; -+ if (warg <= n && types[warg-1] == NONE) -+ types[warg-1] = INT; -+ } else -+ fmt = consume_num(fmt); -+ /* precision */ -+ if (*fmt == '.') { -+ fmt++; -+ if (*fmt == '*') { -+ size_t parg = 0; -+ fmt = consume_argn(fmt+1, &parg); -+ if (parg == 0) -+ parg = ++i; -+ if (parg > last) -+ last = parg; -+ if (parg <= n && types[parg-1] == NONE) -+ types[parg-1] = INT; -+ } else { -+ if (*fmt == '-') -+ fmt++; -+ fmt = consume_num(fmt); -+ } -+ } -+ /* length modifier and conversion specifier */ -+ state = BARE; -+ do { -+ unsigned char c = *fmt++; -+ -+ if (c < 'A' || c > 'z') -+ continue; -+ state = states[state]S(c); -+ if (state == 0) -+ continue; -+ } while (state < STOP); -+ -+ if (state == E(NONE)) -+ continue; -+ -+ if (arg == 0) -+ arg = ++i; -+ if (arg > last) -+ last = arg; -+ if (arg <= n) -+ types[arg-1] = state - STOP; -+ } -+ -+ if (last > n) -+ last = n; -+ for (i = 0; i < last; i++) -+ types[i] = pa_types[types[i]]; -+ -+ return last; -+} -diff --git a/src/basic/parse-printf-format.h b/src/basic/parse-printf-format.h -new file mode 100644 -index 0000000000..47be7522d7 ---- /dev/null -+++ b/src/basic/parse-printf-format.h -@@ -0,0 +1,57 @@ -+/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/ -+ -+/*** -+ This file is part of systemd. -+ -+ Copyright 2014 Emil Renner Berthing -+ -+ With parts from the GNU C Library -+ Copyright 1991-2014 Free Software Foundation, Inc. -+ -+ systemd is free software; you can redistribute it and/or modify it -+ under the terms of the GNU Lesser General Public License as published by -+ the Free Software Foundation; either version 2.1 of the License, or -+ (at your option) any later version. -+ -+ systemd is distributed in the hope that it will be useful, but -+ WITHOUT ANY WARRANTY; without even the implied warranty of -+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -+ Lesser General Public License for more details. -+ -+ You should have received a copy of the GNU Lesser General Public License -+ along with systemd; If not, see . -+***/ -+ -+#pragma once -+ -+#include "config.h" -+ -+#if HAVE_PRINTF_H -+#include -+#else -+ -+#include -+ -+enum { /* C type: */ -+ PA_INT, /* int */ -+ PA_CHAR, /* int, cast to char */ -+ PA_WCHAR, /* wide char */ -+ PA_STRING, /* const char *, a '\0'-terminated string */ -+ PA_WSTRING, /* const wchar_t *, wide character string */ -+ PA_POINTER, /* void * */ -+ PA_FLOAT, /* float */ -+ PA_DOUBLE, /* double */ -+ PA_LAST -+}; -+ -+/* Flag bits that can be set in a type returned by `parse_printf_format'. */ -+#define PA_FLAG_MASK 0xff00 -+#define PA_FLAG_LONG_LONG (1 << 8) -+#define PA_FLAG_LONG_DOUBLE PA_FLAG_LONG_LONG -+#define PA_FLAG_LONG (1 << 9) -+#define PA_FLAG_SHORT (1 << 10) -+#define PA_FLAG_PTR (1 << 11) -+ -+size_t parse_printf_format(const char *fmt, size_t n, int *types); -+ -+#endif /* HAVE_PRINTF_H */ -diff --git a/src/basic/stdio-util.h b/src/basic/stdio-util.h -index 6dc1e72312..cea76b36cf 100644 ---- a/src/basic/stdio-util.h -+++ b/src/basic/stdio-util.h -@@ -1,13 +1,13 @@ - /* SPDX-License-Identifier: LGPL-2.1-or-later */ - #pragma once - --#include - #include - #include - #include - - #include "macro.h" - #include "memory-util.h" -+#include "parse-printf-format.h" - - #define snprintf_ok(buf, len, fmt, ...) \ - ((size_t) snprintf(buf, len, fmt, __VA_ARGS__) < (len)) -diff --git a/src/libsystemd/sd-journal/journal-send.c b/src/libsystemd/sd-journal/journal-send.c -index fd3fd7ef9c..e8e6ad555b 100644 ---- a/src/libsystemd/sd-journal/journal-send.c -+++ b/src/libsystemd/sd-journal/journal-send.c -@@ -2,7 +2,6 @@ - - #include - #include --#include - #include - #include - #include -@@ -21,6 +20,7 @@ - #include "stdio-util.h" - #include "string-util.h" - #include "tmpfile-util.h" -+#include "parse-printf-format.h" - - #define SNDBUF_SIZE (8*1024*1024) - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch deleted file mode 100644 index 0462d52d5..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0005-src-basic-missing.h-check-for-missing-strndupa.patch +++ /dev/null @@ -1,694 +0,0 @@ -From db6551741a3654d8e75aff93ea00fbff579f7b02 Mon Sep 17 00:00:00 2001 -From: Chen Qi -Date: Mon, 25 Feb 2019 14:18:21 +0800 -Subject: [PATCH] src/basic/missing.h: check for missing strndupa - -include missing.h for definition of strndupa - -Upstream-Status: Inappropriate [musl specific] - -Signed-off-by: Khem Raj -Signed-off-by: Chen Qi -[Rebased for v242] -Signed-off-by: Andrej Valek -[rebased for systemd 243] -Signed-off-by: Scott Murray -Signed-off-by: Alex Kiernan -[rebased for systemd 244] -[Rebased for v247] -Signed-off-by: Luca Boccassi - ---- - meson.build | 1 + - src/backlight/backlight.c | 1 + - src/basic/cgroup-util.c | 1 + - src/basic/env-util.c | 1 + - src/basic/log.c | 1 + - src/basic/missing_stdlib.h | 12 ++++++++++++ - src/basic/mkdir.c | 1 + - src/basic/mountpoint-util.c | 1 + - src/basic/parse-util.c | 1 + - src/basic/path-lookup.c | 1 + - src/basic/percent-util.c | 1 + - src/basic/proc-cmdline.c | 1 + - src/basic/procfs-util.c | 1 + - src/basic/time-util.c | 1 + - src/boot/bless-boot.c | 1 + - src/core/dbus-cgroup.c | 1 + - src/core/dbus-execute.c | 1 + - src/core/dbus-util.c | 1 + - src/core/execute.c | 1 + - src/core/kmod-setup.c | 1 + - src/core/service.c | 1 + - src/coredump/coredump-vacuum.c | 1 + - src/journal-remote/journal-remote-main.c | 1 + - src/journal/journalctl.c | 1 + - src/libsystemd/sd-bus/bus-message.c | 1 + - src/libsystemd/sd-bus/bus-objects.c | 1 + - src/libsystemd/sd-bus/bus-socket.c | 1 + - src/libsystemd/sd-bus/sd-bus.c | 1 + - src/libsystemd/sd-bus/test-bus-benchmark.c | 1 + - src/libsystemd/sd-journal/sd-journal.c | 1 + - src/locale/keymap-util.c | 1 + - src/login/pam_systemd.c | 1 + - src/network/generator/network-generator.c | 1 + - src/nspawn/nspawn-settings.c | 1 + - src/nss-mymachines/nss-mymachines.c | 1 + - src/portable/portable.c | 1 + - src/resolve/resolvectl.c | 1 + - src/shared/bus-get-properties.c | 1 + - src/shared/bus-unit-procs.c | 1 + - src/shared/bus-unit-util.c | 1 + - src/shared/bus-util.c | 1 + - src/shared/dns-domain.c | 1 + - src/shared/journal-importer.c | 1 + - src/shared/logs-show.c | 1 + - src/shared/pager.c | 1 + - src/shared/uid-range.c | 1 + - src/socket-proxy/socket-proxyd.c | 1 + - src/test/test-hexdecoct.c | 1 + - src/udev/udev-builtin-path_id.c | 1 + - src/udev/udev-event.c | 1 + - src/udev/udev-rules.c | 1 + - 51 files changed, 62 insertions(+) - -diff --git a/meson.build b/meson.build -index 1aa20b8246..aafee71eb4 100644 ---- a/meson.build -+++ b/meson.build -@@ -480,6 +480,7 @@ foreach ident : ['secure_getenv', '__secure_getenv'] - endforeach - - foreach ident : [ -+ ['strndupa' , '''#include '''], - ['memfd_create', '''#include '''], - ['gettid', '''#include - #include '''], -diff --git a/src/backlight/backlight.c b/src/backlight/backlight.c -index 7c0970a60c..c129ff0f4f 100644 ---- a/src/backlight/backlight.c -+++ b/src/backlight/backlight.c -@@ -19,6 +19,7 @@ - #include "string-util.h" - #include "strv.h" - #include "util.h" -+#include "missing_stdlib.h" - - static int help(void) { - _cleanup_free_ char *link = NULL; -diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c -index 1ff6160dc8..c9efd862a2 100644 ---- a/src/basic/cgroup-util.c -+++ b/src/basic/cgroup-util.c -@@ -38,6 +38,7 @@ - #include "unit-name.h" - #include "user-util.h" - #include "xattr-util.h" -+#include "missing_stdlib.h" - - static int cg_enumerate_items(const char *controller, const char *path, FILE **_f, const char *item) { - _cleanup_free_ char *fs = NULL; -diff --git a/src/basic/env-util.c b/src/basic/env-util.c -index 81b1e3f10e..8fedcfd1cd 100644 ---- a/src/basic/env-util.c -+++ b/src/basic/env-util.c -@@ -18,6 +18,7 @@ - #include "string-util.h" - #include "strv.h" - #include "utf8.h" -+#include "missing_stdlib.h" - - /* We follow bash for the character set. Different shells have different rules. */ - #define VALID_BASH_ENV_NAME_CHARS \ -diff --git a/src/basic/log.c b/src/basic/log.c -index fb183ea9e7..82e7bdff60 100644 ---- a/src/basic/log.c -+++ b/src/basic/log.c -@@ -36,6 +36,7 @@ - #include "terminal-util.h" - #include "time-util.h" - #include "utf8.h" -+#include "missing_stdlib.h" - - #define SNDBUF_SIZE (8*1024*1024) - -diff --git a/src/basic/missing_stdlib.h b/src/basic/missing_stdlib.h -index 8c76f93eb2..9068bfb4f0 100644 ---- a/src/basic/missing_stdlib.h -+++ b/src/basic/missing_stdlib.h -@@ -11,3 +11,15 @@ - # error "neither secure_getenv nor __secure_getenv are available" - # endif - #endif -+ -+/* string.h */ -+#if ! HAVE_STRNDUPA -+#define strndupa(s, n) \ -+ ({ \ -+ const char *__old = (s); \ -+ size_t __len = strnlen(__old, (n)); \ -+ char *__new = (char *)alloca(__len + 1); \ -+ __new[__len] = '\0'; \ -+ (char *)memcpy(__new, __old, __len); \ -+ }) -+#endif -diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c -index f91f8f7a08..fb31596216 100644 ---- a/src/basic/mkdir.c -+++ b/src/basic/mkdir.c -@@ -14,6 +14,7 @@ - #include "stat-util.h" - #include "stdio-util.h" - #include "user-util.h" -+#include "missing_stdlib.h" - - int mkdir_safe_internal( - const char *path, -diff --git a/src/basic/mountpoint-util.c b/src/basic/mountpoint-util.c -index 8c836a1b74..2eb7e5a634 100644 ---- a/src/basic/mountpoint-util.c -+++ b/src/basic/mountpoint-util.c -@@ -11,6 +11,7 @@ - #include "missing_stat.h" - #include "missing_syscall.h" - #include "mkdir.h" -+#include "missing_stdlib.h" - #include "mountpoint-util.h" - #include "parse-util.h" - #include "path-util.h" -diff --git a/src/basic/parse-util.c b/src/basic/parse-util.c -index b79c885dfd..6dabda5691 100644 ---- a/src/basic/parse-util.c -+++ b/src/basic/parse-util.c -@@ -19,6 +19,7 @@ - #include "stat-util.h" - #include "string-util.h" - #include "strv.h" -+#include "missing_stdlib.h" - - int parse_boolean(const char *v) { - if (!v) -diff --git a/src/basic/path-lookup.c b/src/basic/path-lookup.c -index 05eb17d66c..b6026aab28 100644 ---- a/src/basic/path-lookup.c -+++ b/src/basic/path-lookup.c -@@ -15,6 +15,7 @@ - #include "strv.h" - #include "tmpfile-util.h" - #include "user-util.h" -+#include "missing_stdlib.h" - - int xdg_user_runtime_dir(char **ret, const char *suffix) { - const char *e; -diff --git a/src/basic/percent-util.c b/src/basic/percent-util.c -index 06f20fd61e..8159d721bb 100644 ---- a/src/basic/percent-util.c -+++ b/src/basic/percent-util.c -@@ -3,6 +3,7 @@ - #include "percent-util.h" - #include "string-util.h" - #include "parse-util.h" -+#include "missing_stdlib.h" - - static int parse_parts_value_whole(const char *p, const char *symbol) { - const char *pc, *n; -diff --git a/src/basic/proc-cmdline.c b/src/basic/proc-cmdline.c -index 410b8a3eb5..f2c4355609 100644 ---- a/src/basic/proc-cmdline.c -+++ b/src/basic/proc-cmdline.c -@@ -15,6 +15,7 @@ - #include "string-util.h" - #include "util.h" - #include "virt.h" -+#include "missing_stdlib.h" - - int proc_cmdline(char **ret) { - const char *e; -diff --git a/src/basic/procfs-util.c b/src/basic/procfs-util.c -index 9234ccaf85..8c57094225 100644 ---- a/src/basic/procfs-util.c -+++ b/src/basic/procfs-util.c -@@ -11,6 +11,7 @@ - #include "procfs-util.h" - #include "stdio-util.h" - #include "string-util.h" -+#include "missing_stdlib.h" - - int procfs_tasks_get_limit(uint64_t *ret) { - _cleanup_free_ char *value = NULL; -diff --git a/src/basic/time-util.c b/src/basic/time-util.c -index 5d162e8ffe..1cde8e4262 100644 ---- a/src/basic/time-util.c -+++ b/src/basic/time-util.c -@@ -26,6 +26,7 @@ - #include "string-util.h" - #include "strv.h" - #include "time-util.h" -+#include "missing_stdlib.h" - - static clockid_t map_clock_id(clockid_t c) { - -diff --git a/src/boot/bless-boot.c b/src/boot/bless-boot.c -index 3fc319ca27..90064c90f3 100644 ---- a/src/boot/bless-boot.c -+++ b/src/boot/bless-boot.c -@@ -18,6 +18,7 @@ - #include "util.h" - #include "verbs.h" - #include "virt.h" -+#include "missing_stdlib.h" - - static char **arg_path = NULL; - -diff --git a/src/core/dbus-cgroup.c b/src/core/dbus-cgroup.c -index 84c3caf3a5..0fa84eaa38 100644 ---- a/src/core/dbus-cgroup.c -+++ b/src/core/dbus-cgroup.c -@@ -20,6 +20,7 @@ - #include "parse-util.h" - #include "path-util.h" - #include "percent-util.h" -+#include "missing_stdlib.h" - - BUS_DEFINE_PROPERTY_GET(bus_property_get_tasks_max, "t", TasksMax, tasks_max_resolve); - -diff --git a/src/core/dbus-execute.c b/src/core/dbus-execute.c -index 50daef6702..1cc6d91e64 100644 ---- a/src/core/dbus-execute.c -+++ b/src/core/dbus-execute.c -@@ -42,6 +42,7 @@ - #include "unit-printf.h" - #include "user-util.h" - #include "utf8.h" -+#include "missing_stdlib.h" - - BUS_DEFINE_PROPERTY_GET_ENUM(bus_property_get_exec_output, exec_output, ExecOutput); - static BUS_DEFINE_PROPERTY_GET_ENUM(property_get_exec_input, exec_input, ExecInput); -diff --git a/src/core/dbus-util.c b/src/core/dbus-util.c -index ca9b399d8c..b864480a8c 100644 ---- a/src/core/dbus-util.c -+++ b/src/core/dbus-util.c -@@ -9,6 +9,7 @@ - #include "unit-printf.h" - #include "user-util.h" - #include "unit.h" -+#include "missing_stdlib.h" - - int bus_property_get_triggered_unit( - sd_bus *bus, -diff --git a/src/core/execute.c b/src/core/execute.c -index 2a337b55a2..2a64675c5f 100644 ---- a/src/core/execute.c -+++ b/src/core/execute.c -@@ -98,6 +98,7 @@ - #include "unit-serialize.h" - #include "user-util.h" - #include "utmp-wtmp.h" -+#include "missing_stdlib.h" - - #define IDLE_TIMEOUT_USEC (5*USEC_PER_SEC) - #define IDLE_TIMEOUT2_USEC (1*USEC_PER_SEC) -diff --git a/src/core/kmod-setup.c b/src/core/kmod-setup.c -index a56f12f47f..6b8729ef67 100644 ---- a/src/core/kmod-setup.c -+++ b/src/core/kmod-setup.c -@@ -11,6 +11,7 @@ - #include "macro.h" - #include "string-util.h" - #include "missing_type.h" -+#include "missing_stdlib.h" - - #if HAVE_KMOD - #include "module-util.h" -diff --git a/src/core/service.c b/src/core/service.c -index cb0a528f0d..740d305710 100644 ---- a/src/core/service.c -+++ b/src/core/service.c -@@ -41,6 +41,7 @@ - #include "unit.h" - #include "utf8.h" - #include "util.h" -+#include "missing_stdlib.h" - - static const UnitActiveState state_translation_table[_SERVICE_STATE_MAX] = { - [SERVICE_DEAD] = UNIT_INACTIVE, -diff --git a/src/coredump/coredump-vacuum.c b/src/coredump/coredump-vacuum.c -index 95c3fca661..d4a9f27b08 100644 ---- a/src/coredump/coredump-vacuum.c -+++ b/src/coredump/coredump-vacuum.c -@@ -16,6 +16,7 @@ - #include "string-util.h" - #include "time-util.h" - #include "user-util.h" -+#include "missing_stdlib.h" - - #define DEFAULT_MAX_USE_LOWER (uint64_t) (1ULL*1024ULL*1024ULL) /* 1 MiB */ - #define DEFAULT_MAX_USE_UPPER (uint64_t) (4ULL*1024ULL*1024ULL*1024ULL) /* 4 GiB */ -diff --git a/src/journal-remote/journal-remote-main.c b/src/journal-remote/journal-remote-main.c -index ae1d43756a..24de98c9f3 100644 ---- a/src/journal-remote/journal-remote-main.c -+++ b/src/journal-remote/journal-remote-main.c -@@ -24,6 +24,7 @@ - #include "stat-util.h" - #include "string-table.h" - #include "strv.h" -+#include "missing_stdlib.h" - - #define PRIV_KEY_FILE CERTIFICATE_ROOT "/private/journal-remote.pem" - #define CERT_FILE CERTIFICATE_ROOT "/certs/journal-remote.pem" -diff --git a/src/journal/journalctl.c b/src/journal/journalctl.c -index c8fb726d42..858a425d12 100644 ---- a/src/journal/journalctl.c -+++ b/src/journal/journalctl.c -@@ -72,6 +72,7 @@ - #include "unit-name.h" - #include "user-util.h" - #include "varlink.h" -+#include "missing_stdlib.h" - - #define DEFAULT_FSS_INTERVAL_USEC (15*USEC_PER_MINUTE) - #define PROCESS_INOTIFY_INTERVAL 1024 /* Every 1,024 messages processed */ -diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c -index 20f7396c74..3471311ef5 100644 ---- a/src/libsystemd/sd-bus/bus-message.c -+++ b/src/libsystemd/sd-bus/bus-message.c -@@ -20,6 +20,7 @@ - #include "strv.h" - #include "time-util.h" - #include "utf8.h" -+#include "missing_stdlib.h" - - static int message_append_basic(sd_bus_message *m, char type, const void *p, const void **stored); - -diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c -index bfd42aea7d..daefc56e3e 100644 ---- a/src/libsystemd/sd-bus/bus-objects.c -+++ b/src/libsystemd/sd-bus/bus-objects.c -@@ -12,6 +12,7 @@ - #include "set.h" - #include "string-util.h" - #include "strv.h" -+#include "missing_stdlib.h" - - static int node_vtable_get_userdata( - sd_bus *bus, -diff --git a/src/libsystemd/sd-bus/bus-socket.c b/src/libsystemd/sd-bus/bus-socket.c -index 378774fe8b..2694c177d5 100644 ---- a/src/libsystemd/sd-bus/bus-socket.c -+++ b/src/libsystemd/sd-bus/bus-socket.c -@@ -27,6 +27,7 @@ - #include "string-util.h" - #include "user-util.h" - #include "utf8.h" -+#include "missing_stdlib.h" - - #define SNDBUF_SIZE (8*1024*1024) - -diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c -index a32e2f5e20..97fd3aec82 100644 ---- a/src/libsystemd/sd-bus/sd-bus.c -+++ b/src/libsystemd/sd-bus/sd-bus.c -@@ -42,6 +42,7 @@ - #include "string-util.h" - #include "strv.h" - #include "user-util.h" -+#include "missing_stdlib.h" - - #define log_debug_bus_message(m) \ - do { \ -diff --git a/src/libsystemd/sd-bus/test-bus-benchmark.c b/src/libsystemd/sd-bus/test-bus-benchmark.c -index 13c08fe295..9aae83486e 100644 ---- a/src/libsystemd/sd-bus/test-bus-benchmark.c -+++ b/src/libsystemd/sd-bus/test-bus-benchmark.c -@@ -14,6 +14,7 @@ - #include "string-util.h" - #include "time-util.h" - #include "util.h" -+#include "missing_stdlib.h" - - #define MAX_SIZE (2*1024*1024) - -diff --git a/src/libsystemd/sd-journal/sd-journal.c b/src/libsystemd/sd-journal/sd-journal.c -index 5728c537bc..94885b0bf6 100644 ---- a/src/libsystemd/sd-journal/sd-journal.c -+++ b/src/libsystemd/sd-journal/sd-journal.c -@@ -40,6 +40,7 @@ - #include "string-util.h" - #include "strv.h" - #include "syslog-util.h" -+#include "missing_stdlib.h" - - #define JOURNAL_FILES_MAX 7168 - -diff --git a/src/locale/keymap-util.c b/src/locale/keymap-util.c -index d2f0566dbc..3b7746557e 100644 ---- a/src/locale/keymap-util.c -+++ b/src/locale/keymap-util.c -@@ -24,6 +24,7 @@ - #include "string-util.h" - #include "strv.h" - #include "tmpfile-util.h" -+#include "missing_stdlib.h" - - static bool startswith_comma(const char *s, const char *prefix) { - s = startswith(s, prefix); -diff --git a/src/login/pam_systemd.c b/src/login/pam_systemd.c -index f8bd17eefe..9633fbc152 100644 ---- a/src/login/pam_systemd.c -+++ b/src/login/pam_systemd.c -@@ -31,6 +31,7 @@ - #include "locale-util.h" - #include "login-util.h" - #include "macro.h" -+#include "missing_stdlib.h" - #include "pam-util.h" - #include "parse-util.h" - #include "path-util.h" -diff --git a/src/network/generator/network-generator.c b/src/network/generator/network-generator.c -index 60e074e99b..a728e3b7a1 100644 ---- a/src/network/generator/network-generator.c -+++ b/src/network/generator/network-generator.c -@@ -13,6 +13,7 @@ - #include "string-table.h" - #include "string-util.h" - #include "strv.h" -+#include "missing_stdlib.h" - - /* - # .network -diff --git a/src/nspawn/nspawn-settings.c b/src/nspawn/nspawn-settings.c -index 3847fe4ec4..3696b57baa 100644 ---- a/src/nspawn/nspawn-settings.c -+++ b/src/nspawn/nspawn-settings.c -@@ -17,6 +17,7 @@ - #include "strv.h" - #include "user-util.h" - #include "util.h" -+#include "missing_stdlib.h" - - Settings *settings_new(void) { - Settings *s; -diff --git a/src/nss-mymachines/nss-mymachines.c b/src/nss-mymachines/nss-mymachines.c -index 44715bb3e5..bc1e688b5e 100644 ---- a/src/nss-mymachines/nss-mymachines.c -+++ b/src/nss-mymachines/nss-mymachines.c -@@ -21,6 +21,7 @@ - #include "nss-util.h" - #include "signal-util.h" - #include "string-util.h" -+#include "missing_stdlib.h" - - static void setup_logging(void) { - /* We need a dummy function because log_parse_environment is a macro. */ -diff --git a/src/portable/portable.c b/src/portable/portable.c -index 4cf5fb4f0a..577dc5c8d7 100644 ---- a/src/portable/portable.c -+++ b/src/portable/portable.c -@@ -34,6 +34,7 @@ - #include "strv.h" - #include "tmpfile-util.h" - #include "user-util.h" -+#include "missing_stdlib.h" - - static const char profile_dirs[] = CONF_PATHS_NULSTR("systemd/portable/profile"); - -diff --git a/src/resolve/resolvectl.c b/src/resolve/resolvectl.c -index 7d13ed3905..ddc37115b8 100644 ---- a/src/resolve/resolvectl.c -+++ b/src/resolve/resolvectl.c -@@ -41,6 +41,7 @@ - #include "terminal-util.h" - #include "utf8.h" - #include "verbs.h" -+#include "missing_stdlib.h" - - static int arg_family = AF_UNSPEC; - static int arg_ifindex = 0; -diff --git a/src/shared/bus-get-properties.c b/src/shared/bus-get-properties.c -index feb6d3807f..eb11d29e50 100644 ---- a/src/shared/bus-get-properties.c -+++ b/src/shared/bus-get-properties.c -@@ -4,6 +4,7 @@ - #include "rlimit-util.h" - #include "stdio-util.h" - #include "string-util.h" -+#include "missing_stdlib.h" - - int bus_property_get_bool( - sd_bus *bus, -diff --git a/src/shared/bus-unit-procs.c b/src/shared/bus-unit-procs.c -index 6f4a71138c..4a46de2c1b 100644 ---- a/src/shared/bus-unit-procs.c -+++ b/src/shared/bus-unit-procs.c -@@ -10,6 +10,7 @@ - #include "sort-util.h" - #include "string-util.h" - #include "terminal-util.h" -+#include "missing_stdlib.h" - - struct CGroupInfo { - char *cgroup_path; -diff --git a/src/shared/bus-unit-util.c b/src/shared/bus-unit-util.c -index d3a5b25d18..003594e2d7 100644 ---- a/src/shared/bus-unit-util.c -+++ b/src/shared/bus-unit-util.c -@@ -47,6 +47,7 @@ - #include "unit-def.h" - #include "user-util.h" - #include "utf8.h" -+#include "missing_stdlib.h" - - int bus_parse_unit_info(sd_bus_message *message, UnitInfo *u) { - assert(message); -diff --git a/src/shared/bus-util.c b/src/shared/bus-util.c -index 64ca67993c..31e3d148ea 100644 ---- a/src/shared/bus-util.c -+++ b/src/shared/bus-util.c -@@ -21,6 +21,7 @@ - #include "path-util.h" - #include "socket-util.h" - #include "stdio-util.h" -+#include "missing_stdlib.h" - - static int name_owner_change_callback(sd_bus_message *m, void *userdata, sd_bus_error *ret_error) { - sd_event *e = userdata; -diff --git a/src/shared/dns-domain.c b/src/shared/dns-domain.c -index 787bb8fec9..009589a16f 100644 ---- a/src/shared/dns-domain.c -+++ b/src/shared/dns-domain.c -@@ -17,6 +17,7 @@ - #include "string-util.h" - #include "strv.h" - #include "utf8.h" -+#include "missing_stdlib.h" - - int dns_label_unescape(const char **name, char *dest, size_t sz, DNSLabelFlags flags) { - const char *n; -diff --git a/src/shared/journal-importer.c b/src/shared/journal-importer.c -index 9e11dc09c1..f9954c1520 100644 ---- a/src/shared/journal-importer.c -+++ b/src/shared/journal-importer.c -@@ -15,6 +15,7 @@ - #include "parse-util.h" - #include "string-util.h" - #include "unaligned.h" -+#include "missing_stdlib.h" - - enum { - IMPORTER_STATE_LINE = 0, /* waiting to read, or reading line */ -diff --git a/src/shared/logs-show.c b/src/shared/logs-show.c -index e63c59bd94..dd9773c009 100644 ---- a/src/shared/logs-show.c -+++ b/src/shared/logs-show.c -@@ -41,6 +41,7 @@ - #include "utf8.h" - #include "util.h" - #include "web-util.h" -+#include "missing_stdlib.h" - - /* up to three lines (each up to 100 characters) or 300 characters, whichever is less */ - #define PRINT_LINE_THRESHOLD 3 -diff --git a/src/shared/pager.c b/src/shared/pager.c -index 4bbad7e37b..eefcdd068c 100644 ---- a/src/shared/pager.c -+++ b/src/shared/pager.c -@@ -26,6 +26,7 @@ - #include "strv.h" - #include "terminal-util.h" - #include "util.h" -+#include "missing_stdlib.h" - - static pid_t pager_pid = 0; - -diff --git a/src/shared/uid-range.c b/src/shared/uid-range.c -index 5d5bf7f21d..f1002ffa6c 100644 ---- a/src/shared/uid-range.c -+++ b/src/shared/uid-range.c -@@ -9,6 +9,7 @@ - #include "sort-util.h" - #include "uid-range.h" - #include "user-util.h" -+#include "missing_stdlib.h" - - static bool uid_range_intersect(UidRange *range, uid_t start, uid_t nr) { - assert(range); -diff --git a/src/socket-proxy/socket-proxyd.c b/src/socket-proxy/socket-proxyd.c -index 6e3ee0d76b..7727e33d95 100644 ---- a/src/socket-proxy/socket-proxyd.c -+++ b/src/socket-proxy/socket-proxyd.c -@@ -26,6 +26,7 @@ - #include "socket-util.h" - #include "string-util.h" - #include "util.h" -+#include "missing_stdlib.h" - - #define BUFFER_SIZE (256 * 1024) - -diff --git a/src/test/test-hexdecoct.c b/src/test/test-hexdecoct.c -index c9d318b8d1..fcb8d40805 100644 ---- a/src/test/test-hexdecoct.c -+++ b/src/test/test-hexdecoct.c -@@ -6,6 +6,7 @@ - #include "hexdecoct.h" - #include "macro.h" - #include "string-util.h" -+#include "missing_stdlib.h" - - static void test_hexchar(void) { - assert_se(hexchar(0xa) == 'a'); -diff --git a/src/udev/udev-builtin-path_id.c b/src/udev/udev-builtin-path_id.c -index 65c40de4c8..4ef9a0c6c8 100644 ---- a/src/udev/udev-builtin-path_id.c -+++ b/src/udev/udev-builtin-path_id.c -@@ -22,6 +22,7 @@ - #include "sysexits.h" - #include "udev-builtin.h" - #include "udev-util.h" -+#include "missing_stdlib.h" - - _printf_(2,3) - static void path_prepend(char **path, const char *fmt, ...) { -diff --git a/src/udev/udev-event.c b/src/udev/udev-event.c -index b28089be71..a7e2232299 100644 ---- a/src/udev/udev-event.c -+++ b/src/udev/udev-event.c -@@ -34,6 +34,7 @@ - #include "udev-util.h" - #include "udev-watch.h" - #include "user-util.h" -+#include "missing_stdlib.h" - - typedef struct Spawn { - sd_device *device; -diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c -index bf997fc0ed..e3f5f1f2e2 100644 ---- a/src/udev/udev-rules.c -+++ b/src/udev/udev-rules.c -@@ -33,6 +33,7 @@ - #include "udev-util.h" - #include "user-util.h" - #include "virt.h" -+#include "missing_stdlib.h" - - #define RULES_DIRS (const char* const*) CONF_PATHS_STRV("udev/rules.d") - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0006-Include-netinet-if_ether.h.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0006-Include-netinet-if_ether.h.patch deleted file mode 100644 index 855607e6a..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0006-Include-netinet-if_ether.h.patch +++ /dev/null @@ -1,381 +0,0 @@ -From d7ae3aadc70555932e03349907f8be04d03a50ee Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Thu, 26 Oct 2017 22:10:42 -0700 -Subject: [PATCH] Include netinet/if_ether.h - -Fixes -/path/to/systemd/recipe-sysroot/usr/include/netinet/if_ether.h:101:8: error: redefinition of 'struct ethhdr' - struct ethhdr { - ^~~~~~ - -and related arphdr, arpreq, and arpreq_old errors -/path/to/systemd/recipe-sysroot/usr/include/net/if_arp.h:22:8: error: redefinition of 'struct arphdr' - struct arphdr { - ^~~~~~ - -The latter requires removing some includes of net/if_arp.h to avoid -conflicting with netinet/if_ether.h. - -Upstream-Status: Inappropriate [musl specific] - -Signed-off-by: Khem Raj -Signed-off-by: Chen Qi -[rebased for systemd 243] -Signed-off-by: Scott Murray - -Upstream-Status: Inappropriate [musl specific] - -Signed-off-by: Khem Raj -Signed-off-by: Chen Qi -[rebased for systemd 243] -Signed-off-by: Scott Murray -[rebased for systemd 247] -Signed-off-by: Luca Boccassi - ---- - src/basic/linux/in6.h | 14 +++++++------- - src/libsystemd-network/sd-dhcp6-client.c | 1 - - src/libsystemd/sd-netlink/netlink-types.c | 1 + - src/machine/machine-dbus.c | 1 + - src/network/netdev/bond.c | 1 + - src/network/netdev/bridge.c | 1 + - src/network/netdev/macsec.c | 1 + - src/network/netdev/netdev-gperf.gperf | 1 + - src/network/netdev/netdev.c | 1 + - src/network/networkd-bridge-vlan.c | 1 + - src/network/networkd-dhcp-common.c | 4 +++- - src/network/networkd-dhcp-server.c | 4 ++-- - src/network/networkd-dhcp4.c | 2 +- - src/network/networkd-dhcp6.c | 2 +- - src/network/networkd-link.c | 2 +- - src/network/networkd-network.c | 1 + - src/network/networkd-route.c | 1 + - src/network/networkd-setlink.c | 2 +- - src/network/test-network-tables.c | 1 + - src/shared/ethtool-util.c | 1 + - src/shared/ethtool-util.h | 1 + - src/udev/net/link-config.c | 1 + - src/udev/udev-builtin-net_setup_link.c | 1 + - 23 files changed, 31 insertions(+), 15 deletions(-) - -diff --git a/src/basic/linux/in6.h b/src/basic/linux/in6.h -index 5ad396a57e..1dc007fe13 100644 ---- a/src/basic/linux/in6.h -+++ b/src/basic/linux/in6.h -@@ -1,10 +1,10 @@ - /* SPDX-License-Identifier: GPL-2.0+ WITH Linux-syscall-note */ - /* -- * Types and definitions for AF_INET6 -- * Linux INET6 implementation -+ * Types and definitions for AF_INET6 -+ * Linux INET6 implementation - * - * Authors: -- * Pedro Roque -+ * Pedro Roque - * - * Sources: - * IPv6 Program Interfaces for BSD Systems -@@ -19,8 +19,8 @@ - * 2 of the License, or (at your option) any later version. - */ - --#ifndef _UAPI_LINUX_IN6_H --#define _UAPI_LINUX_IN6_H -+#ifndef _LINUX_IN6_H -+#define _LINUX_IN6_H - - #include - #include -@@ -97,7 +97,7 @@ struct in6_flowlabel_req { - - - /* -- * Bitmask constant declarations to help applications select out the -+ * Bitmask constant declarations to help applications select out the - * flow label and priority fields. - * - * Note that this are in host byte order while the flowinfo field of -@@ -298,4 +298,4 @@ struct in6_flowlabel_req { - * ... - * MRT6_MAX - */ --#endif /* _UAPI_LINUX_IN6_H */ -+#endif /* _LINUX_IN6_H */ -diff --git a/src/libsystemd-network/sd-dhcp6-client.c b/src/libsystemd-network/sd-dhcp6-client.c -index e8c47f429a..359922c1b3 100644 ---- a/src/libsystemd-network/sd-dhcp6-client.c -+++ b/src/libsystemd-network/sd-dhcp6-client.c -@@ -5,7 +5,6 @@ - - #include - #include --#include - #include - - #include "sd-dhcp6-client.h" -diff --git a/src/libsystemd/sd-netlink/netlink-types.c b/src/libsystemd/sd-netlink/netlink-types.c -index beb926d40b..41de212242 100644 ---- a/src/libsystemd/sd-netlink/netlink-types.c -+++ b/src/libsystemd/sd-netlink/netlink-types.c -@@ -3,6 +3,7 @@ - #include - #include - #include -+#include - #include - #include - #include -diff --git a/src/machine/machine-dbus.c b/src/machine/machine-dbus.c -index 0022a980c5..fc22e51409 100644 ---- a/src/machine/machine-dbus.c -+++ b/src/machine/machine-dbus.c -@@ -3,6 +3,7 @@ - #include - #include - #include -+#include - - /* When we include libgen.h because we need dirname() we immediately - * undefine basename() since libgen.h defines it as a macro to the POSIX -diff --git a/src/network/netdev/bond.c b/src/network/netdev/bond.c -index a7a4adce45..eb111a6c48 100644 ---- a/src/network/netdev/bond.c -+++ b/src/network/netdev/bond.c -@@ -1,5 +1,6 @@ - /* SPDX-License-Identifier: LGPL-2.1-or-later */ - -+#include - #include "alloc-util.h" - #include "bond.h" - #include "bond-util.h" -diff --git a/src/network/netdev/bridge.c b/src/network/netdev/bridge.c -index 99fb9e1c3c..ecc6ca91bf 100644 ---- a/src/network/netdev/bridge.c -+++ b/src/network/netdev/bridge.c -@@ -1,5 +1,6 @@ - /* SPDX-License-Identifier: LGPL-2.1-or-later */ - -+#include - #include - - #include "bridge.h" -diff --git a/src/network/netdev/macsec.c b/src/network/netdev/macsec.c -index 77c5f8c4e7..04be1b4ab2 100644 ---- a/src/network/netdev/macsec.c -+++ b/src/network/netdev/macsec.c -@@ -1,5 +1,6 @@ - /* SPDX-License-Identifier: LGPL-2.1-or-later */ - -+#include - #include - #include - #include -diff --git a/src/network/netdev/netdev-gperf.gperf b/src/network/netdev/netdev-gperf.gperf -index 9dd081425e..130e5b3d3c 100644 ---- a/src/network/netdev/netdev-gperf.gperf -+++ b/src/network/netdev/netdev-gperf.gperf -@@ -3,6 +3,7 @@ - #if __GNUC__ >= 7 - _Pragma("GCC diagnostic ignored \"-Wimplicit-fallthrough\"") - #endif -+#include - #include - #include "bareudp.h" - #include "batadv.h" -diff --git a/src/network/netdev/netdev.c b/src/network/netdev/netdev.c -index 53534d4873..1cfda9469f 100644 ---- a/src/network/netdev/netdev.c -+++ b/src/network/netdev/netdev.c -@@ -1,5 +1,6 @@ - /* SPDX-License-Identifier: LGPL-2.1-or-later */ - -+#include - #include - #include - #include -diff --git a/src/network/networkd-bridge-vlan.c b/src/network/networkd-bridge-vlan.c -index 3153bf6984..687a26b057 100644 ---- a/src/network/networkd-bridge-vlan.c -+++ b/src/network/networkd-bridge-vlan.c -@@ -4,6 +4,7 @@ - ***/ - - #include -+#include - #include - #include - -diff --git a/src/network/networkd-dhcp-common.c b/src/network/networkd-dhcp-common.c -index 249d780887..edd2e9adf8 100644 ---- a/src/network/networkd-dhcp-common.c -+++ b/src/network/networkd-dhcp-common.c -@@ -1,7 +1,8 @@ - /* SPDX-License-Identifier: LGPL-2.1-or-later */ - - #include --#include -+#include -+#include - - #include "bus-error.h" - #include "dhcp-identifier.h" -@@ -13,6 +14,7 @@ - #include "networkd-dhcp-common.h" - #include "networkd-link.h" - #include "networkd-manager.h" -+#include - #include "networkd-network.h" - #include "parse-util.h" - #include "socket-util.h" -diff --git a/src/network/networkd-dhcp-server.c b/src/network/networkd-dhcp-server.c -index 9e2faa5675..fd8d817569 100644 ---- a/src/network/networkd-dhcp-server.c -+++ b/src/network/networkd-dhcp-server.c -@@ -1,8 +1,8 @@ - /* SPDX-License-Identifier: LGPL-2.1-or-later */ - - #include --#include --#include -+#include -+#include - - #include "sd-dhcp-server.h" - -diff --git a/src/network/networkd-dhcp4.c b/src/network/networkd-dhcp4.c -index f80adcdbcf..3311e2a718 100644 ---- a/src/network/networkd-dhcp4.c -+++ b/src/network/networkd-dhcp4.c -@@ -1,9 +1,9 @@ - /* SPDX-License-Identifier: LGPL-2.1-or-later */ - -+#include - #include - #include - #include --#include - - #include "escape.h" - #include "alloc-util.h" -diff --git a/src/network/networkd-dhcp6.c b/src/network/networkd-dhcp6.c -index 2b72b618fc..d0d4cfb384 100644 ---- a/src/network/networkd-dhcp6.c -+++ b/src/network/networkd-dhcp6.c -@@ -3,9 +3,9 @@ - Copyright © 2014 Intel Corporation. All rights reserved. - ***/ - -+#include - #include - #include --#include - - #include "sd-dhcp6-client.h" - -diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c -index 9421ce1aa6..3e37cbcc39 100644 ---- a/src/network/networkd-link.c -+++ b/src/network/networkd-link.c -@@ -1,8 +1,8 @@ - /* SPDX-License-Identifier: LGPL-2.1-or-later */ - -+#include - #include - #include --#include - #include - #include - #include -diff --git a/src/network/networkd-network.c b/src/network/networkd-network.c -index 850b4f449e..6f85d41328 100644 ---- a/src/network/networkd-network.c -+++ b/src/network/networkd-network.c -@@ -1,5 +1,6 @@ - /* SPDX-License-Identifier: LGPL-2.1-or-later */ - -+#include - #include - #include - #include -diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c -index 77a93beca9..3bf9ae8837 100644 ---- a/src/network/networkd-route.c -+++ b/src/network/networkd-route.c -@@ -1,5 +1,6 @@ - /* SPDX-License-Identifier: LGPL-2.1-or-later */ - -+#include - #include - #include - #include -diff --git a/src/network/networkd-setlink.c b/src/network/networkd-setlink.c -index 10c312c480..e44fbb5c35 100644 ---- a/src/network/networkd-setlink.c -+++ b/src/network/networkd-setlink.c -@@ -1,8 +1,8 @@ - /* SPDX-License-Identifier: LGPL-2.1-or-later */ - - #include -+#include - #include --#include - - #include "missing_network.h" - #include "netlink-util.h" -diff --git a/src/network/test-network-tables.c b/src/network/test-network-tables.c -index f55e524ae9..83d5c7cef3 100644 ---- a/src/network/test-network-tables.c -+++ b/src/network/test-network-tables.c -@@ -1,5 +1,6 @@ - /* SPDX-License-Identifier: LGPL-2.1-or-later */ - -+#include - #include "bond.h" - #include "dhcp6-internal.h" - #include "dhcp6-protocol.h" -diff --git a/src/shared/ethtool-util.c b/src/shared/ethtool-util.c -index f77f6943ca..0e1506e04b 100644 ---- a/src/shared/ethtool-util.c -+++ b/src/shared/ethtool-util.c -@@ -1,5 +1,6 @@ - /* SPDX-License-Identifier: LGPL-2.1-or-later */ - -+#include - #include - #include - #include -diff --git a/src/shared/ethtool-util.h b/src/shared/ethtool-util.h -index 7d28766624..e98a25418b 100644 ---- a/src/shared/ethtool-util.h -+++ b/src/shared/ethtool-util.h -@@ -3,6 +3,7 @@ - - #include - #include -+#include - #include - - #include "conf-parser.h" -diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c -index 8dfe23691b..e269856337 100644 ---- a/src/udev/net/link-config.c -+++ b/src/udev/net/link-config.c -@@ -1,5 +1,6 @@ - /* SPDX-License-Identifier: LGPL-2.1-or-later */ - -+#include - #include - #include - #include -diff --git a/src/udev/udev-builtin-net_setup_link.c b/src/udev/udev-builtin-net_setup_link.c -index d40251331c..89566c05f5 100644 ---- a/src/udev/udev-builtin-net_setup_link.c -+++ b/src/udev/udev-builtin-net_setup_link.c -@@ -1,5 +1,6 @@ - /* SPDX-License-Identifier: LGPL-2.1-or-later */ - -+#include - #include "alloc-util.h" - #include "device-util.h" - #include "errno-util.h" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0007-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0007-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch deleted file mode 100644 index 28846935e..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0007-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch +++ /dev/null @@ -1,153 +0,0 @@ -From e2d70a1735fc6b9d3c079814831ab0b1b2a9d1e0 Mon Sep 17 00:00:00 2001 -From: Chen Qi -Date: Mon, 25 Feb 2019 14:56:21 +0800 -Subject: [PATCH] don't fail if GLOB_BRACE and GLOB_ALTDIRFUNC is not defined - -If the standard library doesn't provide brace -expansion users just won't get it. - -Dont use GNU GLOB extentions on non-glibc systems - -Conditionalize use of GLOB_ALTDIRFUNC - -Upstream-Status: Inappropriate [musl specific] - -Signed-off-by: Khem Raj -Signed-off-by: Chen Qi -[rebased for systemd 243] -Signed-off-by: Scott Murray - ---- - src/basic/glob-util.c | 12 ++++++++++++ - src/test/test-glob-util.c | 16 ++++++++++++++++ - src/tmpfiles/tmpfiles.c | 10 ++++++++++ - 3 files changed, 38 insertions(+) - -diff --git a/src/basic/glob-util.c b/src/basic/glob-util.c -index e026b29478..815e56ef68 100644 ---- a/src/basic/glob-util.c -+++ b/src/basic/glob-util.c -@@ -12,6 +12,12 @@ - #include "path-util.h" - #include "strv.h" - -+/* Don't fail if the standard library -+ * doesn't provide brace expansion */ -+#ifndef GLOB_BRACE -+#define GLOB_BRACE 0 -+#endif -+ - static void closedir_wrapper(void* v) { - (void) closedir(v); - } -@@ -19,6 +25,7 @@ static void closedir_wrapper(void* v) { - int safe_glob(const char *path, int flags, glob_t *pglob) { - int k; - -+#ifdef GLOB_ALTDIRFUNC - /* We want to set GLOB_ALTDIRFUNC ourselves, don't allow it to be set. */ - assert(!(flags & GLOB_ALTDIRFUNC)); - -@@ -32,9 +39,14 @@ int safe_glob(const char *path, int flags, glob_t *pglob) { - pglob->gl_lstat = lstat; - if (!pglob->gl_stat) - pglob->gl_stat = stat; -+#endif - - errno = 0; -+#ifdef GLOB_ALTDIRFUNC - k = glob(path, flags | GLOB_ALTDIRFUNC, NULL, pglob); -+#else -+ k = glob(path, flags, NULL, pglob); -+#endif - if (k == GLOB_NOMATCH) - return -ENOENT; - if (k == GLOB_NOSPACE) -diff --git a/src/test/test-glob-util.c b/src/test/test-glob-util.c -index 50b4924679..09c0a20aee 100644 ---- a/src/test/test-glob-util.c -+++ b/src/test/test-glob-util.c -@@ -12,6 +12,12 @@ - #include "rm-rf.h" - #include "tmpfile-util.h" - -+/* Don't fail if the standard library -+ * doesn't provide brace expansion */ -+#ifndef GLOB_BRACE -+#define GLOB_BRACE 0 -+#endif -+ - static void test_glob_exists(void) { - log_info("/* %s */", __func__); - -@@ -41,11 +47,13 @@ static void test_glob_no_dot(void) { - const char *fn; - - _cleanup_globfree_ glob_t g = { -+#ifdef GLOB_ALTDIRFUNC - .gl_closedir = closedir_wrapper, - .gl_readdir = (struct dirent *(*)(void *)) readdir_no_dot, - .gl_opendir = (void *(*)(const char *)) opendir, - .gl_lstat = lstat, - .gl_stat = stat, -+#endif - }; - - int r; -@@ -55,11 +63,19 @@ static void test_glob_no_dot(void) { - assert_se(mkdtemp(template)); - - fn = strjoina(template, "/*"); -+#ifdef GLOB_ALTDIRFUNC - r = glob(fn, GLOB_NOSORT|GLOB_BRACE|GLOB_ALTDIRFUNC, NULL, &g); -+#else -+ r = glob(fn, GLOB_NOSORT|GLOB_BRACE, NULL, &g); -+#endif - assert_se(r == GLOB_NOMATCH); - - fn = strjoina(template, "/.*"); -+#ifdef GLOB_ALTDIRFUNC - r = glob(fn, GLOB_NOSORT|GLOB_BRACE|GLOB_ALTDIRFUNC, NULL, &g); -+#else -+ r = glob(fn, GLOB_NOSORT|GLOB_BRACE, NULL, &g); -+#endif - assert_se(r == GLOB_NOMATCH); - - (void) rm_rf(template, REMOVE_ROOT|REMOVE_PHYSICAL); -diff --git a/src/tmpfiles/tmpfiles.c b/src/tmpfiles/tmpfiles.c -index 7e85c50634..145c48a685 100644 ---- a/src/tmpfiles/tmpfiles.c -+++ b/src/tmpfiles/tmpfiles.c -@@ -66,6 +66,12 @@ - #include "umask-util.h" - #include "user-util.h" - -+/* Don't fail if the standard library -+ * doesn't provide brace expansion */ -+#ifndef GLOB_BRACE -+#define GLOB_BRACE 0 -+#endif -+ - /* This reads all files listed in /etc/tmpfiles.d/?*.conf and creates - * them in the file system. This is intended to be used to create - * properly owned directories beneath /tmp, /var/tmp, /run, which are -@@ -1990,7 +1996,9 @@ finish: - - static int glob_item(Item *i, action_t action) { - _cleanup_globfree_ glob_t g = { -+#ifdef GLOB_ALTDIRFUNC - .gl_opendir = (void *(*)(const char *)) opendir_nomod, -+#endif - }; - int r = 0, k; - char **fn; -@@ -2010,7 +2018,9 @@ static int glob_item(Item *i, action_t action) { - - static int glob_item_recursively(Item *i, fdaction_t action) { - _cleanup_globfree_ glob_t g = { -+#ifdef GLOB_ALTDIRFUNC - .gl_opendir = (void *(*)(const char *)) opendir_nomod, -+#endif - }; - int r = 0, k; - char **fn; diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0008-add-missing-FTW_-macros-for-musl.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0008-add-missing-FTW_-macros-for-musl.patch deleted file mode 100644 index 444e12385..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0008-add-missing-FTW_-macros-for-musl.patch +++ /dev/null @@ -1,57 +0,0 @@ -From 3410d82c9d07aee3e951fc6ae0b41fc1a594e00d Mon Sep 17 00:00:00 2001 -From: Chen Qi -Date: Mon, 25 Feb 2019 15:00:06 +0800 -Subject: [PATCH] add missing FTW_ macros for musl - -This is to avoid build failures like below for musl. - - locale-util.c:296:24: error: 'FTW_STOP' undeclared - -Upstream-Status: Inappropriate [musl specific] - -Signed-off-by: Chen Qi ---- - src/basic/missing_type.h | 20 ++++++++++++++++++++ - src/shared/mount-setup.c | 1 + - 2 files changed, 21 insertions(+) - -diff --git a/src/basic/missing_type.h b/src/basic/missing_type.h -index aeaf6ad5ec..3df1084ef2 100644 ---- a/src/basic/missing_type.h -+++ b/src/basic/missing_type.h -@@ -19,3 +19,23 @@ typedef int (*comparison_fn_t)(const void *, const void *); - #define __COMPAR_FN_T - typedef int (*__compar_fn_t)(const void *, const void *); - #endif -+ -+#ifndef FTW_ACTIONRETVAL -+#define FTW_ACTIONRETVAL 16 -+#endif -+ -+#ifndef FTW_CONTINUE -+#define FTW_CONTINUE 0 -+#endif -+ -+#ifndef FTW_STOP -+#define FTW_STOP 1 -+#endif -+ -+#ifndef FTW_SKIP_SUBTREE -+#define FTW_SKIP_SUBTREE 2 -+#endif -+ -+#ifndef FTW_SKIP_SIBLINGS -+#define FTW_SKIP_SIBLINGS 3 -+#endif -diff --git a/src/shared/mount-setup.c b/src/shared/mount-setup.c -index ef3527e9a7..c1cab40eb8 100644 ---- a/src/shared/mount-setup.c -+++ b/src/shared/mount-setup.c -@@ -32,6 +32,7 @@ - #include "strv.h" - #include "user-util.h" - #include "virt.h" -+#include "missing_type.h" - - typedef enum MountMode { - MNT_NONE = 0, diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0009-fix-missing-of-__register_atfork-for-non-glibc-build.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0009-fix-missing-of-__register_atfork-for-non-glibc-build.patch deleted file mode 100644 index 4670c232a..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0009-fix-missing-of-__register_atfork-for-non-glibc-build.patch +++ /dev/null @@ -1,43 +0,0 @@ -From 1e3bc870ded807cff0d3771dd89a850d020df032 Mon Sep 17 00:00:00 2001 -From: Chen Qi -Date: Mon, 25 Feb 2019 15:03:47 +0800 -Subject: [PATCH] fix missing of __register_atfork for non-glibc builds - -Upstream-Status: Inappropriate [musl specific] - -Signed-off-by: Chen Qi - ---- - src/basic/process-util.c | 7 +++++++ - 1 file changed, 7 insertions(+) - -diff --git a/src/basic/process-util.c b/src/basic/process-util.c -index 14259ea8df..18681838ef 100644 ---- a/src/basic/process-util.c -+++ b/src/basic/process-util.c -@@ -18,6 +18,9 @@ - #if HAVE_VALGRIND_VALGRIND_H - #include - #endif -+#ifndef __GLIBC__ -+#include -+#endif - - #include "alloc-util.h" - #include "architecture.h" -@@ -1202,11 +1205,15 @@ void reset_cached_pid(void) { - cached_pid = CACHED_PID_UNSET; - } - -+#ifdef __GLIBC__ - /* We use glibc __register_atfork() + __dso_handle directly here, as they are not included in the glibc - * headers. __register_atfork() is mostly equivalent to pthread_atfork(), but doesn't require us to link against - * libpthread, as it is part of glibc anyway. */ - extern int __register_atfork(void (*prepare) (void), void (*parent) (void), void (*child) (void), void *dso_handle); - extern void* __dso_handle _weak_; -+#else -+#define __register_atfork(prepare,parent,child,dso) pthread_atfork(prepare,parent,child) -+#endif - - pid_t getpid_cached(void) { - static bool installed = false; diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0010-Use-uintmax_t-for-handling-rlim_t.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0010-Use-uintmax_t-for-handling-rlim_t.patch deleted file mode 100644 index e6bb37a65..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0010-Use-uintmax_t-for-handling-rlim_t.patch +++ /dev/null @@ -1,104 +0,0 @@ -From eeacb75025d8f537d54c35256c5730c9aab15cde Mon Sep 17 00:00:00 2001 -From: Chen Qi -Date: Mon, 25 Feb 2019 15:12:41 +0800 -Subject: [PATCH] Use uintmax_t for handling rlim_t - -PRIu{32,64} is not right format to represent rlim_t type -therefore use %ju and typecast the rlim_t variables to -uintmax_t. - -Fixes portablility errors like - -execute.c:3446:36: error: format '%lu' expects argument of type 'long unsigned int', but argument 5 has type 'rlim_t {aka long long unsigned int}' [-Werror=format=] -| fprintf(f, "%s%s: " RLIM_FMT "\n", -| ^~~~~~~~ -| prefix, rlimit_to_string(i), c->rlimit[i]->rlim_max); -| ~~~~~~~~~~~~~~~~~~~~~~ - -Upstream-Status: Denied [https://github.com/systemd/systemd/pull/7199] - -Signed-off-by: Khem Raj -[Rebased for v241] -Signed-off-by: Chen Qi - ---- - src/basic/format-util.h | 8 +------- - src/basic/rlimit-util.c | 12 ++++++------ - src/core/execute.c | 4 ++-- - 3 files changed, 9 insertions(+), 15 deletions(-) - -diff --git a/src/basic/format-util.h b/src/basic/format-util.h -index b7e18768e3..3195ab205d 100644 ---- a/src/basic/format-util.h -+++ b/src/basic/format-util.h -@@ -32,13 +32,7 @@ assert_cc(sizeof(gid_t) == sizeof(uint32_t)); - # define PRI_TIMEX "li" - #endif - --#if SIZEOF_RLIM_T == 8 --# define RLIM_FMT "%" PRIu64 --#elif SIZEOF_RLIM_T == 4 --# define RLIM_FMT "%" PRIu32 --#else --# error Unknown rlim_t size --#endif -+#define RLIM_FMT "%ju" - - #if SIZEOF_DEV_T == 8 - # define DEV_FMT "%" PRIu64 -diff --git a/src/basic/rlimit-util.c b/src/basic/rlimit-util.c -index 23d108d5df..3e6fb438d7 100644 ---- a/src/basic/rlimit-util.c -+++ b/src/basic/rlimit-util.c -@@ -43,7 +43,7 @@ int setrlimit_closest(int resource, const struct rlimit *rlim) { - fixed.rlim_max == highest.rlim_max) - return 0; - -- log_debug("Failed at setting rlimit " RLIM_FMT " for resource RLIMIT_%s. Will attempt setting value " RLIM_FMT " instead.", rlim->rlim_max, rlimit_to_string(resource), fixed.rlim_max); -+ log_debug("Failed at setting rlimit " RLIM_FMT " for resource RLIMIT_%s. Will attempt setting value " RLIM_FMT " instead.", (uintmax_t)rlim->rlim_max, rlimit_to_string(resource), (uintmax_t)fixed.rlim_max); - - if (setrlimit(resource, &fixed) < 0) - return -errno; -@@ -308,13 +308,13 @@ int rlimit_format(const struct rlimit *rl, char **ret) { - if (rl->rlim_cur >= RLIM_INFINITY && rl->rlim_max >= RLIM_INFINITY) - s = strdup("infinity"); - else if (rl->rlim_cur >= RLIM_INFINITY) -- (void) asprintf(&s, "infinity:" RLIM_FMT, rl->rlim_max); -+ (void) asprintf(&s, "infinity:" RLIM_FMT, (uintmax_t)rl->rlim_max); - else if (rl->rlim_max >= RLIM_INFINITY) -- (void) asprintf(&s, RLIM_FMT ":infinity", rl->rlim_cur); -+ (void) asprintf(&s, RLIM_FMT ":infinity", (uintmax_t)rl->rlim_cur); - else if (rl->rlim_cur == rl->rlim_max) -- (void) asprintf(&s, RLIM_FMT, rl->rlim_cur); -+ (void) asprintf(&s, RLIM_FMT, (uintmax_t)rl->rlim_cur); - else -- (void) asprintf(&s, RLIM_FMT ":" RLIM_FMT, rl->rlim_cur, rl->rlim_max); -+ (void) asprintf(&s, RLIM_FMT ":" RLIM_FMT, (uintmax_t)rl->rlim_cur, (uintmax_t)rl->rlim_max); - - if (!s) - return -ENOMEM; -@@ -405,7 +405,7 @@ int rlimit_nofile_safe(void) { - - rl.rlim_cur = FD_SETSIZE; - if (setrlimit(RLIMIT_NOFILE, &rl) < 0) -- return log_debug_errno(errno, "Failed to lower RLIMIT_NOFILE's soft limit to " RLIM_FMT ": %m", rl.rlim_cur); -+ return log_debug_errno(errno, "Failed to lower RLIMIT_NOFILE's soft limit to " RLIM_FMT ": %m", (uintmax_t)rl.rlim_cur); - - return 1; - } -diff --git a/src/core/execute.c b/src/core/execute.c -index 2a64675c5f..dca1e0e3b6 100644 ---- a/src/core/execute.c -+++ b/src/core/execute.c -@@ -5391,9 +5391,9 @@ void exec_context_dump(const ExecContext *c, FILE* f, const char *prefix) { - for (unsigned i = 0; i < RLIM_NLIMITS; i++) - if (c->rlimit[i]) { - fprintf(f, "%sLimit%s: " RLIM_FMT "\n", -- prefix, rlimit_to_string(i), c->rlimit[i]->rlim_max); -+ prefix, rlimit_to_string(i), (uintmax_t)c->rlimit[i]->rlim_max); - fprintf(f, "%sLimit%sSoft: " RLIM_FMT "\n", -- prefix, rlimit_to_string(i), c->rlimit[i]->rlim_cur); -+ prefix, rlimit_to_string(i), (uintmax_t)c->rlimit[i]->rlim_cur); - } - - if (c->ioprio_set) { diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0011-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0011-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch deleted file mode 100644 index 897e332f3..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0011-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch +++ /dev/null @@ -1,39 +0,0 @@ -From fa29a572faaeb6fb9ed0bc6802d17139773e1908 Mon Sep 17 00:00:00 2001 -From: Chen Qi -Date: Wed, 28 Feb 2018 21:25:22 -0800 -Subject: [PATCH] test-sizeof.c: Disable tests for missing typedefs in musl - -Upstream-Status: Inappropriate [musl specific] - -Signed-off-by: Khem Raj -Signed-off-by: Chen Qi - ---- - src/test/test-sizeof.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/test/test-sizeof.c b/src/test/test-sizeof.c -index 3c9dc180fa..e1a59d408c 100644 ---- a/src/test/test-sizeof.c -+++ b/src/test/test-sizeof.c -@@ -55,8 +55,10 @@ int main(void) { - info(unsigned); - info(long unsigned); - info(long long unsigned); -+#ifdef __GLIBC__ - info(__syscall_ulong_t); - info(__syscall_slong_t); -+#endif - - info(float); - info(double); -@@ -74,7 +76,9 @@ int main(void) { - info(ssize_t); - info(time_t); - info(usec_t); -+#ifdef __GLIBC__ - info(__time_t); -+#endif - info(pid_t); - info(uid_t); - info(gid_t); diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0012-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0012-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch deleted file mode 100644 index 3bf706fc5..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0012-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch +++ /dev/null @@ -1,98 +0,0 @@ -From 88c8922f9e4d221402d9cb2e04b9c82e89125827 Mon Sep 17 00:00:00 2001 -From: Andre McCurdy -Date: Tue, 10 Oct 2017 14:33:30 -0700 -Subject: [PATCH] don't pass AT_SYMLINK_NOFOLLOW flag to faccessat() - -Avoid using AT_SYMLINK_NOFOLLOW flag. It doesn't seem like the right -thing to do and it's not portable (not supported by musl). See: - - http://lists.landley.net/pipermail/toybox-landley.net/2014-September/003610.html - http://www.openwall.com/lists/musl/2015/02/05/2 - -Note that laccess() is never passing AT_EACCESS so a lot of the -discussion in the links above doesn't apply. Note also that -(currently) all systemd callers of laccess() pass mode as F_OK, so -only check for existence of a file, not access permissions. -Therefore, in this case, the only distiction between faccessat() -with (flag == 0) and (flag == AT_SYMLINK_NOFOLLOW) is the behaviour -for broken symlinks; laccess() on a broken symlink will succeed with -(flag == AT_SYMLINK_NOFOLLOW) and fail (flag == 0). - -The laccess() macros was added to systemd some time ago and it's not -clear if or why it needs to return success for broken symlinks. Maybe -just historical and not actually necessary or desired behaviour? - -Upstream-Status: Inappropriate [musl specific] - -Signed-off-by: Andre McCurdy - ---- - src/basic/fs-util.h | 23 +++++++++++++++++++++-- - src/shared/base-filesystem.c | 6 +++--- - 2 files changed, 24 insertions(+), 5 deletions(-) - -diff --git a/src/basic/fs-util.h b/src/basic/fs-util.h -index 7f15b558ca..4263298cad 100644 ---- a/src/basic/fs-util.h -+++ b/src/basic/fs-util.h -@@ -47,8 +47,27 @@ int futimens_opath(int fd, const struct timespec ts[2]); - int fd_warn_permissions(const char *path, int fd); - int stat_warn_permissions(const char *path, const struct stat *st); - --#define laccess(path, mode) \ -- (faccessat(AT_FDCWD, (path), (mode), AT_SYMLINK_NOFOLLOW) < 0 ? -errno : 0) -+/* -+ Avoid using AT_SYMLINK_NOFOLLOW flag. It doesn't seem like the right thing to -+ do and it's not portable (not supported by musl). See: -+ -+ http://lists.landley.net/pipermail/toybox-landley.net/2014-September/003610.html -+ http://www.openwall.com/lists/musl/2015/02/05/2 -+ -+ Note that laccess() is never passing AT_EACCESS so a lot of the discussion in -+ the links above doesn't apply. Note also that (currently) all systemd callers -+ of laccess() pass mode as F_OK, so only check for existence of a file, not -+ access permissions. Therefore, in this case, the only distiction between -+ faccessat() with (flag == 0) and (flag == AT_SYMLINK_NOFOLLOW) is the -+ behaviour for broken symlinks; laccess() on a broken symlink will succeed -+ with (flag == AT_SYMLINK_NOFOLLOW) and fail (flag == 0). -+ -+ The laccess() macros was added to systemd some time ago and it's not clear if -+ or why it needs to return success for broken symlinks. Maybe just historical -+ and not actually necessary or desired behaviour? -+*/ -+ -+#define laccess(path, mode) faccessat(AT_FDCWD, (path), (mode), 0) - - int touch_file(const char *path, bool parents, usec_t stamp, uid_t uid, gid_t gid, mode_t mode); - int touch(const char *path); -diff --git a/src/shared/base-filesystem.c b/src/shared/base-filesystem.c -index 016eb7b82a..b1967f9f2f 100644 ---- a/src/shared/base-filesystem.c -+++ b/src/shared/base-filesystem.c -@@ -53,7 +53,7 @@ int base_filesystem_create(const char *root, uid_t uid, gid_t gid) { - return log_error_errno(errno, "Failed to open root file system: %m"); - - for (size_t i = 0; i < ELEMENTSOF(table); i++) { -- if (faccessat(fd, table[i].dir, F_OK, AT_SYMLINK_NOFOLLOW) >= 0) -+ if (faccessat(fd, table[i].dir, F_OK, 0) >= 0) - continue; - - if (table[i].target) { -@@ -61,7 +61,7 @@ int base_filesystem_create(const char *root, uid_t uid, gid_t gid) { - - /* check if one of the targets exists */ - NULSTR_FOREACH(s, table[i].target) { -- if (faccessat(fd, s, F_OK, AT_SYMLINK_NOFOLLOW) < 0) -+ if (faccessat(fd, s, F_OK, 0) < 0) - continue; - - /* check if a specific file exists at the target path */ -@@ -72,7 +72,7 @@ int base_filesystem_create(const char *root, uid_t uid, gid_t gid) { - if (!p) - return log_oom(); - -- if (faccessat(fd, p, F_OK, AT_SYMLINK_NOFOLLOW) < 0) -+ if (faccessat(fd, p, F_OK, 0) < 0) - continue; - } - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0013-Define-glibc-compatible-basename-for-non-glibc-syste.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0013-Define-glibc-compatible-basename-for-non-glibc-syste.patch deleted file mode 100644 index 74008714c..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0013-Define-glibc-compatible-basename-for-non-glibc-syste.patch +++ /dev/null @@ -1,32 +0,0 @@ -From e07e9b998ad61b09555bc809aa15de9d2516787a Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Sun, 27 May 2018 08:36:44 -0700 -Subject: [PATCH] Define glibc compatible basename() for non-glibc systems - -Fixes builds with musl, even though systemd is adamant about -using non-posix basename implementation, we have a way out - -Upstream-Status: Inappropriate [musl specific] - -Signed-off-by: Khem Raj - ---- - src/machine/machine-dbus.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/src/machine/machine-dbus.c b/src/machine/machine-dbus.c -index fc22e51409..1fed07b941 100644 ---- a/src/machine/machine-dbus.c -+++ b/src/machine/machine-dbus.c -@@ -11,6 +11,11 @@ - #include - #undef basename - -+#if !defined(__GLIBC__) -+#include -+#define basename(src) (strrchr(src,'/') ? strrchr(src,'/')+1 : src) -+#endif -+ - #include "alloc-util.h" - #include "bus-common-errors.h" - #include "bus-get-properties.h" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0014-Do-not-disable-buffering-when-writing-to-oom_score_a.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0014-Do-not-disable-buffering-when-writing-to-oom_score_a.patch deleted file mode 100644 index c5e20cbb8..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0014-Do-not-disable-buffering-when-writing-to-oom_score_a.patch +++ /dev/null @@ -1,39 +0,0 @@ -From 2f048d13e100158320bda248635b3c533ac9717b Mon Sep 17 00:00:00 2001 -From: Chen Qi -Date: Wed, 4 Jul 2018 15:00:44 +0800 -Subject: [PATCH] Do not disable buffering when writing to oom_score_adj - -On musl, disabling buffering when writing to oom_score_adj will -cause the following error. - - Failed to adjust OOM setting: Invalid argument - -This error appears for systemd-udevd.service and dbus.service. -This is because kernel receives '-' instead of the whole '-900' -if buffering is disabled. - -This is libc implementation specific, as glibc does not have this issue. - -Upstream-Status: Inappropriate [musl specific] - -Signed-off-by: Chen Qi -[rebased for systemd 243] -Signed-off-by: Scott Murray - ---- - src/basic/process-util.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/basic/process-util.c b/src/basic/process-util.c -index 18681838ef..0fa71ccce0 100644 ---- a/src/basic/process-util.c -+++ b/src/basic/process-util.c -@@ -1606,7 +1606,7 @@ int set_oom_score_adjust(int value) { - sprintf(t, "%i", value); - - return write_string_file("/proc/self/oom_score_adj", t, -- WRITE_STRING_FILE_VERIFY_ON_FAILURE|WRITE_STRING_FILE_DISABLE_BUFFER); -+ WRITE_STRING_FILE_VERIFY_ON_FAILURE); - } - - int pidfd_get_pid(int fd, pid_t *ret) { diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0015-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0015-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch deleted file mode 100644 index 39804bd36..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0015-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 45148529792c0cda32fdd61610c8d5a700d541fa Mon Sep 17 00:00:00 2001 -From: Chen Qi -Date: Tue, 10 Jul 2018 15:40:17 +0800 -Subject: [PATCH] distinguish XSI-compliant strerror_r from GNU-specifi - strerror_r - -XSI-compliant strerror_r and GNU-specifi strerror_r are different. - - int strerror_r(int errnum, char *buf, size_t buflen); - /* XSI-compliant */ - - char *strerror_r(int errnum, char *buf, size_t buflen); - /* GNU-specific */ - -We need to distinguish between them. Otherwise, we'll get an int value -assigned to (char *) variable, resulting in segment fault. - -Upstream-Status: Inappropriate [musl specific] - -Signed-off-by: Chen Qi - ---- - src/libsystemd/sd-bus/bus-error.c | 5 +++++ - src/libsystemd/sd-journal/journal-send.c | 5 +++++ - 2 files changed, 10 insertions(+) - -diff --git a/src/libsystemd/sd-bus/bus-error.c b/src/libsystemd/sd-bus/bus-error.c -index 7483b46a11..c49be29e46 100644 ---- a/src/libsystemd/sd-bus/bus-error.c -+++ b/src/libsystemd/sd-bus/bus-error.c -@@ -404,7 +404,12 @@ static void bus_error_strerror(sd_bus_error *e, int error) { - return; - - errno = 0; -+#ifndef __GLIBC__ -+ strerror_r(error, m, k); -+ x = m; -+#else - x = strerror_r(error, m, k); -+#endif - if (errno == ERANGE || strlen(x) >= k - 1) { - free(m); - k *= 2; -diff --git a/src/libsystemd/sd-journal/journal-send.c b/src/libsystemd/sd-journal/journal-send.c -index e8e6ad555b..8ca5271d02 100644 ---- a/src/libsystemd/sd-journal/journal-send.c -+++ b/src/libsystemd/sd-journal/journal-send.c -@@ -348,7 +348,12 @@ static int fill_iovec_perror_and_send(const char *message, int skip, struct iove - char* j; - - errno = 0; -+#ifndef __GLIBC__ -+ strerror_r(_saved_errno_, buffer + 8 + k, n - 8 - k); -+ j = buffer + 8 + k; -+#else - j = strerror_r(_saved_errno_, buffer + 8 + k, n - 8 - k); -+#endif - if (errno == 0) { - char error[STRLEN("ERRNO=") + DECIMAL_STR_MAX(int) + 1]; - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0016-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0016-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch deleted file mode 100644 index 365e2a36f..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0016-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 02a2772889d6cb08c9ca0561b52e7a9a80e50497 Mon Sep 17 00:00:00 2001 -From: Chen Qi -Date: Mon, 25 Feb 2019 15:18:00 +0800 -Subject: [PATCH] Hide __start_BUS_ERROR_MAP and __stop_BUS_ERROR_MAP - -for currently unknown reasons they get exported to the shared libries -even without being listed in the sym file - -Upstream-Status: Pending - -Signed-off-by: Khem Raj -[Rebased for v241] -Signed-off-by: Chen Qi - ---- - src/libsystemd/sd-bus/bus-error.c | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - -diff --git a/src/libsystemd/sd-bus/bus-error.c b/src/libsystemd/sd-bus/bus-error.c -index c49be29e46..90731bd7e7 100644 ---- a/src/libsystemd/sd-bus/bus-error.c -+++ b/src/libsystemd/sd-bus/bus-error.c -@@ -55,8 +55,8 @@ BUS_ERROR_MAP_ELF_REGISTER const sd_bus_error_map bus_standard_errors[] = { - }; - - /* GCC maps this magically to the beginning and end of the BUS_ERROR_MAP section */ --extern const sd_bus_error_map __start_SYSTEMD_BUS_ERROR_MAP[]; --extern const sd_bus_error_map __stop_SYSTEMD_BUS_ERROR_MAP[]; -+extern const sd_bus_error_map __start_SYSTEMD_BUS_ERROR_MAP[] _hidden_; -+extern const sd_bus_error_map __stop_SYSTEMD_BUS_ERROR_MAP[] _hidden_; - - /* Additional maps registered with sd_bus_error_add_map() are in this - * NULL terminated array */ diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0017-missing_type.h-add-__compar_d_fn_t-definition.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0017-missing_type.h-add-__compar_d_fn_t-definition.patch deleted file mode 100644 index 8a6c03f31..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0017-missing_type.h-add-__compar_d_fn_t-definition.patch +++ /dev/null @@ -1,28 +0,0 @@ -From 47c4ac80689077b1eb86cf05b4326b1ac345aedf Mon Sep 17 00:00:00 2001 -From: Chen Qi -Date: Mon, 25 Feb 2019 15:27:54 +0800 -Subject: [PATCH] missing_type.h: add __compar_d_fn_t definition - -Fix the following compile failure: -src/basic/util.h:71:18: error: unknown type name '__compar_d_fn_t'; did you mean '__compar_fn_t'? - -Upstream-Status: Inappropriate [musl specific] - -Signed-off-by: Chen Qi - ---- - src/basic/missing_type.h | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/basic/missing_type.h b/src/basic/missing_type.h -index 3df1084ef2..697aa7f58a 100644 ---- a/src/basic/missing_type.h -+++ b/src/basic/missing_type.h -@@ -13,6 +13,7 @@ - - #ifndef __GLIBC__ - typedef int (*comparison_fn_t)(const void *, const void *); -+typedef int (*__compar_d_fn_t) (const void *, const void *, void *); - #endif - - #ifndef __COMPAR_FN_T diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0018-avoid-redefinition-of-prctl_mm_map-structure.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0018-avoid-redefinition-of-prctl_mm_map-structure.patch deleted file mode 100644 index e75935a28..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0018-avoid-redefinition-of-prctl_mm_map-structure.patch +++ /dev/null @@ -1,30 +0,0 @@ -From 2cb33d8896a4ad2d3b489fed51f17d5e45dfb4fc Mon Sep 17 00:00:00 2001 -From: Chen Qi -Date: Mon, 25 Feb 2019 15:44:54 +0800 -Subject: [PATCH] avoid redefinition of prctl_mm_map structure - -Fix the following compile failure: -error: redefinition of 'struct prctl_mm_map' - -Upstream-Status: Inappropriate [musl specific] - -Signed-off-by: Chen Qi - ---- - src/basic/missing_prctl.h | 2 ++ - 1 file changed, 2 insertions(+) - -diff --git a/src/basic/missing_prctl.h b/src/basic/missing_prctl.h -index ab851306ba..5547cad875 100644 ---- a/src/basic/missing_prctl.h -+++ b/src/basic/missing_prctl.h -@@ -1,7 +1,9 @@ - /* SPDX-License-Identifier: LGPL-2.1-or-later */ - #pragma once - -+#ifdef __GLIBC__ - #include -+#endif - - /* 58319057b7847667f0c9585b9de0e8932b0fdb08 (4.3) */ - #ifndef PR_CAP_AMBIENT diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0019-Handle-missing-LOCK_EX.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0019-Handle-missing-LOCK_EX.patch deleted file mode 100644 index 629c10362..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0019-Handle-missing-LOCK_EX.patch +++ /dev/null @@ -1,24 +0,0 @@ -From 200a2a2e4f04a7b7078dd455fafbd6774240e30b Mon Sep 17 00:00:00 2001 -From: Alex Kiernan -Date: Fri, 7 Aug 2020 15:19:27 +0000 -Subject: [PATCH] Handle missing LOCK_EX - -Upstream-Status: Inappropriate [musl specific] -Signed-off-by: Alex Kiernan - ---- - src/partition/makefs.c | 1 + - 1 file changed, 1 insertion(+) - -diff --git a/src/partition/makefs.c b/src/partition/makefs.c -index 7c94fbfedb..42f966722d 100644 ---- a/src/partition/makefs.c -+++ b/src/partition/makefs.c -@@ -6,6 +6,7 @@ - #include - #include - #include -+#include - - #include "alloc-util.h" - #include "blockdev-util.h" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0020-Fix-incompatible-pointer-type-struct-sockaddr_un.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0020-Fix-incompatible-pointer-type-struct-sockaddr_un.patch deleted file mode 100644 index ea6e82f46..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0020-Fix-incompatible-pointer-type-struct-sockaddr_un.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 6445b7737a89256f35adc56701a5c47b48618ced Mon Sep 17 00:00:00 2001 -From: Alex Kiernan -Date: Fri, 7 Aug 2020 15:20:17 +0000 -Subject: [PATCH] Fix incompatible pointer type struct sockaddr_un * - -| ../../../../../../workspace/sources/systemd/src/nspawn/nspawn.c: In function 'cant_be_in_netns': -| ../../../../../../workspace/sources/systemd/src/nspawn/nspawn.c:4893:25: error: passing argument 2 of 'connect' from incompatible pointer type [-Werror=incompatible-pointer-types] -| 4893 | if (connect(fd, &sa.un, SOCKADDR_UN_LEN(sa.un)) < 0) { -| | ^~~~~~ -| | | -| | struct sockaddr_un * -| In file included from ../../../../../../workspace/sources/systemd/src/systemd/sd-daemon.h:22, -| from ../../../../../../workspace/sources/systemd/src/nspawn/nspawn.c:21: -| /home/ubuntu/poky/build/tmp/work/core2-64-poky-linux-musl/systemd/1_246-r0/recipe-sysroot/usr/include/sys/socket.h:384:19: note: expected 'const struct sockaddr *' but argument is of type 'struct sockaddr_un *' -| 384 | int connect (int, const struct sockaddr *, socklen_t); -| | ^~~~~~~~~~~~~~~~~~~~~~~ -| cc1: some warnings being treated as errors - -Upstream-Status: Inappropriate [musl specific] -Signed-off-by: Alex Kiernan - ---- - src/nspawn/nspawn.c | 2 +- - 1 file changed, 1 insertion(+), 1 deletion(-) - -diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c -index 04685fecba..90b12bb5bd 100644 ---- a/src/nspawn/nspawn.c -+++ b/src/nspawn/nspawn.c -@@ -5354,7 +5354,7 @@ static int cant_be_in_netns(void) { - if (fd < 0) - return log_error_errno(errno, "Failed to allocate udev control socket: %m"); - -- if (connect(fd, &sa.un, SOCKADDR_UN_LEN(sa.un)) < 0) { -+ if (connect(fd, (struct sockaddr *)&sa.un, SOCKADDR_UN_LEN(sa.un)) < 0) { - - if (errno == ENOENT || ERRNO_IS_DISCONNECT(errno)) - return log_error_errno(SYNTHETIC_ERRNO(EOPNOTSUPP), diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0021-test-json.c-define-M_PIl.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0021-test-json.c-define-M_PIl.patch deleted file mode 100644 index 60c12b074..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0021-test-json.c-define-M_PIl.patch +++ /dev/null @@ -1,31 +0,0 @@ -From ae71bf2b97dc9d4760defd83463c1d305f332f22 Mon Sep 17 00:00:00 2001 -From: Chen Qi -Date: Mon, 25 Feb 2019 16:53:06 +0800 -Subject: [PATCH] test-json.c: define M_PIl - -Fix the following compile failure: -src/test/test-json.c:305:50: error: 'M_PIl' undeclared (first use in this function); did you mean 'M_PI'? - -Upstream-Status: Inappropriate [musl specific] - -Signed-off-by: Chen Qi - ---- - src/test/test-json.c | 4 ++++ - 1 file changed, 4 insertions(+) - -diff --git a/src/test/test-json.c b/src/test/test-json.c -index 1d4b11945e..572c8cf9d0 100644 ---- a/src/test/test-json.c -+++ b/src/test/test-json.c -@@ -13,6 +13,10 @@ - #include "tests.h" - #include "util.h" - -+#ifndef M_PIl -+#define M_PIl 3.141592653589793238462643383279502884L -+#endif -+ - static void test_tokenizer(const char *data, ...) { - unsigned line = 0, column = 0; - void *state = NULL; diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0022-do-not-disable-buffer-in-writing-files.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0022-do-not-disable-buffer-in-writing-files.patch deleted file mode 100644 index 6998bf0dd..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0022-do-not-disable-buffer-in-writing-files.patch +++ /dev/null @@ -1,392 +0,0 @@ -From 3198690c2dbb4b457a04ef21914dc4d531540273 Mon Sep 17 00:00:00 2001 -From: Chen Qi -Date: Fri, 1 Mar 2019 15:22:15 +0800 -Subject: [PATCH] do not disable buffer in writing files - -Do not disable buffer in writing files, otherwise we get -failure at boot for musl like below. - - [!!!!!!] Failed to allocate manager object. - -And there will be other failures, critical or not critical. -This is specific to musl. - -Upstream-Status: Inappropriate [musl] - -Signed-off-by: Chen Qi -[Rebased for v242] -Signed-off-by: Andrej Valek -[rebased for systemd 243] -Signed-off-by: Scott Murray - ---- - src/basic/cgroup-util.c | 10 +++++----- - src/basic/procfs-util.c | 4 ++-- - src/basic/sysctl-util.c | 2 +- - src/basic/util.c | 2 +- - src/binfmt/binfmt.c | 6 +++--- - src/core/main.c | 4 ++-- - src/core/smack-setup.c | 8 ++++---- - src/hibernate-resume/hibernate-resume.c | 2 +- - src/libsystemd/sd-device/sd-device.c | 2 +- - src/nspawn/nspawn-cgroup.c | 2 +- - src/nspawn/nspawn.c | 6 +++--- - src/shared/cgroup-setup.c | 4 ++-- - src/shared/mount-util.c | 4 ++-- - src/shared/smack-util.c | 2 +- - src/sleep/sleep.c | 8 ++++---- - src/vconsole/vconsole-setup.c | 2 +- - 16 files changed, 34 insertions(+), 34 deletions(-) - -diff --git a/src/basic/cgroup-util.c b/src/basic/cgroup-util.c -index c9efd862a2..b3708ea925 100644 ---- a/src/basic/cgroup-util.c -+++ b/src/basic/cgroup-util.c -@@ -766,7 +766,7 @@ int cg_install_release_agent(const char *controller, const char *agent) { - - sc = strstrip(contents); - if (isempty(sc)) { -- r = write_string_file(fs, agent, WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file(fs, agent, 0); - if (r < 0) - return r; - } else if (!path_equal(sc, agent)) -@@ -784,7 +784,7 @@ int cg_install_release_agent(const char *controller, const char *agent) { - - sc = strstrip(contents); - if (streq(sc, "0")) { -- r = write_string_file(fs, "1", WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file(fs, "1", 0); - if (r < 0) - return r; - -@@ -811,7 +811,7 @@ int cg_uninstall_release_agent(const char *controller) { - if (r < 0) - return r; - -- r = write_string_file(fs, "0", WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file(fs, "0", 0); - if (r < 0) - return r; - -@@ -821,7 +821,7 @@ int cg_uninstall_release_agent(const char *controller) { - if (r < 0) - return r; - -- r = write_string_file(fs, "", WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file(fs, "", 0); - if (r < 0) - return r; - -@@ -1651,7 +1651,7 @@ int cg_set_attribute(const char *controller, const char *path, const char *attri - if (r < 0) - return r; - -- return write_string_file(p, value, WRITE_STRING_FILE_DISABLE_BUFFER); -+ return write_string_file(p, value, 0); - } - - int cg_get_attribute(const char *controller, const char *path, const char *attribute, char **ret) { -diff --git a/src/basic/procfs-util.c b/src/basic/procfs-util.c -index 8c57094225..0cf6ec752b 100644 ---- a/src/basic/procfs-util.c -+++ b/src/basic/procfs-util.c -@@ -86,13 +86,13 @@ int procfs_tasks_set_limit(uint64_t limit) { - * decrease it, as threads-max is the much more relevant sysctl. */ - if (limit > pid_max-1) { - sprintf(buffer, "%" PRIu64, limit+1); /* Add one, since PID 0 is not a valid PID */ -- r = write_string_file("/proc/sys/kernel/pid_max", buffer, WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file("/proc/sys/kernel/pid_max", buffer, 0); - if (r < 0) - return r; - } - - sprintf(buffer, "%" PRIu64, limit); -- r = write_string_file("/proc/sys/kernel/threads-max", buffer, WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file("/proc/sys/kernel/threads-max", buffer, 0); - if (r < 0) { - uint64_t threads_max; - -diff --git a/src/basic/sysctl-util.c b/src/basic/sysctl-util.c -index 8913e6ff85..29e6ec0755 100644 ---- a/src/basic/sysctl-util.c -+++ b/src/basic/sysctl-util.c -@@ -93,7 +93,7 @@ int sysctl_write_ip_property(int af, const char *ifname, const char *property, c - - log_debug("Setting '%s' to '%s'", p, value); - -- return write_string_file(p, value, WRITE_STRING_FILE_VERIFY_ON_FAILURE | WRITE_STRING_FILE_DISABLE_BUFFER); -+ return write_string_file(p, value, WRITE_STRING_FILE_VERIFY_ON_FAILURE | 0); - } - - int sysctl_read(const char *property, char **ret) { -diff --git a/src/basic/util.c b/src/basic/util.c -index 955b18bd2a..6d89c90176 100644 ---- a/src/basic/util.c -+++ b/src/basic/util.c -@@ -234,7 +234,7 @@ void disable_coredumps(void) { - if (detect_container() > 0) - return; - -- r = write_string_file("/proc/sys/kernel/core_pattern", "|/bin/false", WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file("/proc/sys/kernel/core_pattern", "|/bin/false", 0); - if (r < 0) - log_debug_errno(r, "Failed to turn off coredumps, ignoring: %m"); - } -diff --git a/src/binfmt/binfmt.c b/src/binfmt/binfmt.c -index 29530bb691..3ecf6a45a2 100644 ---- a/src/binfmt/binfmt.c -+++ b/src/binfmt/binfmt.c -@@ -48,7 +48,7 @@ static int delete_rule(const char *rule) { - if (!fn) - return log_oom(); - -- return write_string_file(fn, "-1", WRITE_STRING_FILE_DISABLE_BUFFER); -+ return write_string_file(fn, "-1", 0); - } - - static int apply_rule(const char *rule) { -@@ -56,7 +56,7 @@ static int apply_rule(const char *rule) { - - (void) delete_rule(rule); - -- r = write_string_file("/proc/sys/fs/binfmt_misc/register", rule, WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file("/proc/sys/fs/binfmt_misc/register", rule, 0); - if (r < 0) - return log_error_errno(r, "Failed to add binary format: %m"); - -@@ -223,7 +223,7 @@ static int run(int argc, char *argv[]) { - } - - /* Flush out all rules */ -- (void) write_string_file("/proc/sys/fs/binfmt_misc/status", "-1", WRITE_STRING_FILE_DISABLE_BUFFER); -+ (void) write_string_file("/proc/sys/fs/binfmt_misc/status", "-1", 0); - - STRV_FOREACH(f, files) { - k = apply_file(*f, true); -diff --git a/src/core/main.c b/src/core/main.c -index b32a19a1d8..4e1238853e 100644 ---- a/src/core/main.c -+++ b/src/core/main.c -@@ -1402,7 +1402,7 @@ static int bump_unix_max_dgram_qlen(void) { - if (v >= DEFAULT_UNIX_MAX_DGRAM_QLEN) - return 0; - -- r = write_string_filef("/proc/sys/net/unix/max_dgram_qlen", WRITE_STRING_FILE_DISABLE_BUFFER, "%lu", DEFAULT_UNIX_MAX_DGRAM_QLEN); -+ r = write_string_filef("/proc/sys/net/unix/max_dgram_qlen", 0, "%lu", DEFAULT_UNIX_MAX_DGRAM_QLEN); - if (r < 0) - return log_full_errno(IN_SET(r, -EROFS, -EPERM, -EACCES) ? LOG_DEBUG : LOG_WARNING, r, - "Failed to bump AF_UNIX datagram queue length, ignoring: %m"); -@@ -1679,7 +1679,7 @@ static void initialize_core_pattern(bool skip_setup) { - if (getpid_cached() != 1) - return; - -- r = write_string_file("/proc/sys/kernel/core_pattern", arg_early_core_pattern, WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file("/proc/sys/kernel/core_pattern", arg_early_core_pattern, 0); - if (r < 0) - log_warning_errno(r, "Failed to write '%s' to /proc/sys/kernel/core_pattern, ignoring: %m", arg_early_core_pattern); - } -diff --git a/src/core/smack-setup.c b/src/core/smack-setup.c -index 79c4808473..b111ce0a11 100644 ---- a/src/core/smack-setup.c -+++ b/src/core/smack-setup.c -@@ -323,17 +323,17 @@ int mac_smack_setup(bool *loaded_policy) { - } - - #ifdef SMACK_RUN_LABEL -- r = write_string_file("/proc/self/attr/current", SMACK_RUN_LABEL, WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file("/proc/self/attr/current", SMACK_RUN_LABEL, 0); - if (r < 0) - log_warning_errno(r, "Failed to set SMACK label \"" SMACK_RUN_LABEL "\" on self: %m"); -- r = write_string_file("/sys/fs/smackfs/ambient", SMACK_RUN_LABEL, WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file("/sys/fs/smackfs/ambient", SMACK_RUN_LABEL, 0); - if (r < 0) - log_warning_errno(r, "Failed to set SMACK ambient label \"" SMACK_RUN_LABEL "\": %m"); - r = write_string_file("/sys/fs/smackfs/netlabel", -- "0.0.0.0/0 " SMACK_RUN_LABEL, WRITE_STRING_FILE_DISABLE_BUFFER); -+ "0.0.0.0/0 " SMACK_RUN_LABEL, 0); - if (r < 0) - log_warning_errno(r, "Failed to set SMACK netlabel rule \"0.0.0.0/0 " SMACK_RUN_LABEL "\": %m"); -- r = write_string_file("/sys/fs/smackfs/netlabel", "127.0.0.1 -CIPSO", WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file("/sys/fs/smackfs/netlabel", "127.0.0.1 -CIPSO", 0); - if (r < 0) - log_warning_errno(r, "Failed to set SMACK netlabel rule \"127.0.0.1 -CIPSO\": %m"); - #endif -diff --git a/src/hibernate-resume/hibernate-resume.c b/src/hibernate-resume/hibernate-resume.c -index 58e35e403e..1d0beb4008 100644 ---- a/src/hibernate-resume/hibernate-resume.c -+++ b/src/hibernate-resume/hibernate-resume.c -@@ -45,7 +45,7 @@ int main(int argc, char *argv[]) { - return EXIT_FAILURE; - } - -- r = write_string_file("/sys/power/resume", major_minor, WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file("/sys/power/resume", major_minor, 0); - if (r < 0) { - log_error_errno(r, "Failed to write '%s' to /sys/power/resume: %m", major_minor); - return EXIT_FAILURE; -diff --git a/src/libsystemd/sd-device/sd-device.c b/src/libsystemd/sd-device/sd-device.c -index 388128bf33..695f535ff4 100644 ---- a/src/libsystemd/sd-device/sd-device.c -+++ b/src/libsystemd/sd-device/sd-device.c -@@ -2096,7 +2096,7 @@ _public_ int sd_device_set_sysattr_value(sd_device *device, const char *sysattr, - if (!value) - return -ENOMEM; - -- r = write_string_file(path, value, WRITE_STRING_FILE_DISABLE_BUFFER | WRITE_STRING_FILE_NOFOLLOW); -+ r = write_string_file(path, value, 0 | WRITE_STRING_FILE_NOFOLLOW); - if (r < 0) { - /* On failure, clear cache entry, as we do not know how it fails. */ - device_remove_cached_sysattr_value(device, sysattr); -diff --git a/src/nspawn/nspawn-cgroup.c b/src/nspawn/nspawn-cgroup.c -index cb01b25bc6..e92051268b 100644 ---- a/src/nspawn/nspawn-cgroup.c -+++ b/src/nspawn/nspawn-cgroup.c -@@ -124,7 +124,7 @@ int sync_cgroup(pid_t pid, CGroupUnified unified_requested, uid_t uid_shift) { - fn = strjoina(tree, cgroup, "/cgroup.procs"); - - sprintf(pid_string, PID_FMT, pid); -- r = write_string_file(fn, pid_string, WRITE_STRING_FILE_DISABLE_BUFFER|WRITE_STRING_FILE_MKDIR_0755); -+ r = write_string_file(fn, pid_string, WRITE_STRING_FILE_MKDIR_0755); - if (r < 0) { - log_error_errno(r, "Failed to move process: %m"); - goto finish; -diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c -index 90b12bb5bd..6a1dafa094 100644 ---- a/src/nspawn/nspawn.c -+++ b/src/nspawn/nspawn.c -@@ -2751,7 +2751,7 @@ static int reset_audit_loginuid(void) { - if (streq(p, "4294967295")) - return 0; - -- r = write_string_file("/proc/self/loginuid", "4294967295", WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file("/proc/self/loginuid", "4294967295", 0); - if (r < 0) { - log_error_errno(r, - "Failed to reset audit login UID. This probably means that your kernel is too\n" -@@ -4148,7 +4148,7 @@ static int setup_uid_map( - return log_oom(); - - xsprintf(uid_map, "/proc/" PID_FMT "/uid_map", pid); -- r = write_string_file(uid_map, s, WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file(uid_map, s, 0); - if (r < 0) - return log_error_errno(r, "Failed to write UID map: %m"); - -@@ -4158,7 +4158,7 @@ static int setup_uid_map( - return log_oom(); - - xsprintf(uid_map, "/proc/" PID_FMT "/gid_map", pid); -- r = write_string_file(uid_map, s, WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file(uid_map, s, 0); - if (r < 0) - return log_error_errno(r, "Failed to write GID map: %m"); - -diff --git a/src/shared/cgroup-setup.c b/src/shared/cgroup-setup.c -index f197f715c7..077f893177 100644 ---- a/src/shared/cgroup-setup.c -+++ b/src/shared/cgroup-setup.c -@@ -267,7 +267,7 @@ int cg_attach(const char *controller, const char *path, pid_t pid) { - - xsprintf(c, PID_FMT "\n", pid); - -- r = write_string_file(fs, c, WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file(fs, c, 0); - if (r < 0) - return r; - -@@ -799,7 +799,7 @@ int cg_enable_everywhere( - return log_debug_errno(errno, "Failed to open cgroup.subtree_control file of %s: %m", p); - } - -- r = write_string_stream(f, s, WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_stream(f, s, 0); - if (r < 0) { - log_debug_errno(r, "Failed to %s controller %s for %s (%s): %m", - FLAGS_SET(mask, bit) ? "enable" : "disable", n, p, fs); -diff --git a/src/shared/mount-util.c b/src/shared/mount-util.c -index 594efea989..d243b45bc4 100644 ---- a/src/shared/mount-util.c -+++ b/src/shared/mount-util.c -@@ -1019,13 +1019,13 @@ static int make_userns(uid_t uid_shift, uid_t uid_range) { - xsprintf(line, UID_FMT " " UID_FMT " " UID_FMT "\n", 0, uid_shift, uid_range); - - xsprintf(uid_map, "/proc/" PID_FMT "/uid_map", pid); -- r = write_string_file(uid_map, line, WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file(uid_map, line, 0); - if (r < 0) - return log_error_errno(r, "Failed to write UID map: %m"); - - /* We always assign the same UID and GID ranges */ - xsprintf(uid_map, "/proc/" PID_FMT "/gid_map", pid); -- r = write_string_file(uid_map, line, WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file(uid_map, line, 0); - if (r < 0) - return log_error_errno(r, "Failed to write GID map: %m"); - -diff --git a/src/shared/smack-util.c b/src/shared/smack-util.c -index 3362ee3924..80c0f2a52e 100644 ---- a/src/shared/smack-util.c -+++ b/src/shared/smack-util.c -@@ -114,7 +114,7 @@ int mac_smack_apply_pid(pid_t pid, const char *label) { - return 0; - - p = procfs_file_alloca(pid, "attr/current"); -- r = write_string_file(p, label, WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file(p, label, 0); - if (r < 0) - return r; - -diff --git a/src/sleep/sleep.c b/src/sleep/sleep.c -index a3aeb24633..d3e68e1b94 100644 ---- a/src/sleep/sleep.c -+++ b/src/sleep/sleep.c -@@ -46,7 +46,7 @@ static int write_hibernate_location_info(const HibernateLocation *hibernate_loca - assert(hibernate_location->swap); - - xsprintf(resume_str, "%u:%u", major(hibernate_location->devno), minor(hibernate_location->devno)); -- r = write_string_file("/sys/power/resume", resume_str, WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file("/sys/power/resume", resume_str, 0); - if (r < 0) - return log_debug_errno(r, "Failed to write partition device to /sys/power/resume for '%s': '%s': %m", - hibernate_location->swap->device, resume_str); -@@ -73,7 +73,7 @@ static int write_hibernate_location_info(const HibernateLocation *hibernate_loca - } - - xsprintf(offset_str, "%" PRIu64, hibernate_location->offset); -- r = write_string_file("/sys/power/resume_offset", offset_str, WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file("/sys/power/resume_offset", offset_str, 0); - if (r < 0) - return log_debug_errno(r, "Failed to write swap file offset to /sys/power/resume_offset for '%s': '%s': %m", - hibernate_location->swap->device, offset_str); -@@ -90,7 +90,7 @@ static int write_mode(char **modes) { - STRV_FOREACH(mode, modes) { - int k; - -- k = write_string_file("/sys/power/disk", *mode, WRITE_STRING_FILE_DISABLE_BUFFER); -+ k = write_string_file("/sys/power/disk", *mode, 0); - if (k >= 0) - return 0; - -@@ -112,7 +112,7 @@ static int write_state(FILE **f, char **states) { - STRV_FOREACH(state, states) { - int k; - -- k = write_string_stream(*f, *state, WRITE_STRING_FILE_DISABLE_BUFFER); -+ k = write_string_stream(*f, *state, 0); - if (k >= 0) - return 0; - log_debug_errno(k, "Failed to write '%s' to /sys/power/state: %m", *state); -diff --git a/src/vconsole/vconsole-setup.c b/src/vconsole/vconsole-setup.c -index d1c3febdd5..1cc68694d1 100644 ---- a/src/vconsole/vconsole-setup.c -+++ b/src/vconsole/vconsole-setup.c -@@ -116,7 +116,7 @@ static int toggle_utf8_vc(const char *name, int fd, bool utf8) { - static int toggle_utf8_sysfs(bool utf8) { - int r; - -- r = write_string_file("/sys/module/vt/parameters/default_utf8", one_zero(utf8), WRITE_STRING_FILE_DISABLE_BUFFER); -+ r = write_string_file("/sys/module/vt/parameters/default_utf8", one_zero(utf8), 0); - if (r < 0) - return log_warning_errno(r, "Failed to %s sysfs UTF-8 flag: %m", enable_disable(utf8)); - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0025-Handle-__cpu_mask-usage.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0025-Handle-__cpu_mask-usage.patch deleted file mode 100644 index 06702765e..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0025-Handle-__cpu_mask-usage.patch +++ /dev/null @@ -1,58 +0,0 @@ -From b04518c464b526f8b9adc9ce3c08b1881db47989 Mon Sep 17 00:00:00 2001 -From: Scott Murray -Date: Fri, 13 Sep 2019 19:26:27 -0400 -Subject: [PATCH] Handle __cpu_mask usage - -Fixes errors: - -src/test/test-cpu-set-util.c:18:54: error: '__cpu_mask' undeclared (first use in this function) -src/test/test-sizeof.c:73:14: error: '__cpu_mask' undeclared (first use in this function) - -__cpu_mask is an internal type of glibc's cpu_set implementation, not -part of the POSIX definition, which is problematic when building with -musl, which does not define a matching type. From inspection of musl's -sched.h, however, it is clear that the corresponding type would be -unsigned long, which does match glibc's actual __CPU_MASK_TYPE. So, -add a typedef to cpu-set-util.h defining __cpu_mask appropriately. - -Upstream-Status: Inappropriate [musl specific] - -Signed-off-by: Scott Murray - ---- - src/shared/cpu-set-util.h | 2 ++ - src/test/test-sizeof.c | 2 +- - 2 files changed, 3 insertions(+), 1 deletion(-) - -diff --git a/src/shared/cpu-set-util.h b/src/shared/cpu-set-util.h -index 3c63a58826..4c2d4347fc 100644 ---- a/src/shared/cpu-set-util.h -+++ b/src/shared/cpu-set-util.h -@@ -6,6 +6,8 @@ - #include "macro.h" - #include "missing_syscall.h" - -+typedef unsigned long __cpu_mask; -+ - /* This wraps the libc interface with a variable to keep the allocated size. */ - typedef struct CPUSet { - cpu_set_t *set; -diff --git a/src/test/test-sizeof.c b/src/test/test-sizeof.c -index e1a59d408c..c269ea6e8c 100644 ---- a/src/test/test-sizeof.c -+++ b/src/test/test-sizeof.c -@@ -1,6 +1,5 @@ - /* SPDX-License-Identifier: LGPL-2.1-or-later */ - --#include - #include - #include - #include -@@ -10,6 +9,7 @@ - #include - - #include "time-util.h" -+#include "cpu-set-util.h" - - /* Print information about various types. Useful when diagnosing - * gcc diagnostics on an unfamiliar architecture. */ diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0026-Handle-missing-gshadow.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0026-Handle-missing-gshadow.patch deleted file mode 100644 index dc6330582..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0026-Handle-missing-gshadow.patch +++ /dev/null @@ -1,171 +0,0 @@ -From 0c8935128b39864b07dfee39cfa9d35d48f056aa Mon Sep 17 00:00:00 2001 -From: Alex Kiernan -Date: Tue, 10 Mar 2020 11:05:20 +0000 -Subject: [PATCH] Handle missing gshadow - -gshadow usage is now present in the userdb code. Mask all uses of it to -allow compilation on musl - -Upstream-Status: Inappropriate [musl specific] -Signed-off-by: Alex Kiernan -[Rebased for v247] -Signed-off-by: Luca Boccassi - ---- - src/shared/user-record-nss.c | 20 ++++++++++++++++++++ - src/shared/user-record-nss.h | 4 ++++ - src/shared/userdb.c | 7 ++++++- - 3 files changed, 30 insertions(+), 1 deletion(-) - -diff --git a/src/shared/user-record-nss.c b/src/shared/user-record-nss.c -index 88b8fc2f8f..a819d41bac 100644 ---- a/src/shared/user-record-nss.c -+++ b/src/shared/user-record-nss.c -@@ -331,8 +331,10 @@ int nss_group_to_group_record( - if (isempty(grp->gr_name)) - return -EINVAL; - -+#if ENABLE_GSHADOW - if (sgrp && !streq_ptr(sgrp->sg_namp, grp->gr_name)) - return -EINVAL; -+#endif - - g = group_record_new(); - if (!g) -@@ -348,6 +350,7 @@ int nss_group_to_group_record( - - g->gid = grp->gr_gid; - -+#if ENABLE_GSHADOW - if (sgrp) { - if (looks_like_hashed_password(utf8_only(sgrp->sg_passwd))) { - g->hashed_password = strv_new(sgrp->sg_passwd); -@@ -363,6 +366,7 @@ int nss_group_to_group_record( - if (r < 0) - return r; - } -+#endif - - r = json_build(&g->json, JSON_BUILD_OBJECT( - JSON_BUILD_PAIR("groupName", JSON_BUILD_STRING(g->group_name)), -@@ -388,6 +392,7 @@ int nss_sgrp_for_group(const struct group *grp, struct sgrp *ret_sgrp, char **re - assert(ret_sgrp); - assert(ret_buffer); - -+#if ENABLE_GSHADOW - for (;;) { - _cleanup_free_ char *buf = NULL; - struct sgrp sgrp, *result; -@@ -416,6 +421,9 @@ int nss_sgrp_for_group(const struct group *grp, struct sgrp *ret_sgrp, char **re - buflen *= 2; - buf = mfree(buf); - } -+#else -+ return -ESRCH; -+#endif - } - - int nss_group_record_by_name( -@@ -427,7 +435,9 @@ int nss_group_record_by_name( - struct group grp, *result; - bool incomplete = false; - size_t buflen = 4096; -+#if ENABLE_GSHADOW - struct sgrp sgrp, *sresult = NULL; -+#endif - int r; - - assert(name); -@@ -457,6 +467,7 @@ int nss_group_record_by_name( - buf = mfree(buf); - } - -+#if ENABLE_GSHADOW - if (with_shadow) { - r = nss_sgrp_for_group(result, &sgrp, &sbuf); - if (r < 0) { -@@ -468,6 +479,9 @@ int nss_group_record_by_name( - incomplete = true; - - r = nss_group_to_group_record(result, sresult, ret); -+#else -+ r = nss_group_to_group_record(result, NULL, ret); -+#endif - if (r < 0) - return r; - -@@ -484,7 +498,9 @@ int nss_group_record_by_gid( - struct group grp, *result; - bool incomplete = false; - size_t buflen = 4096; -+#if ENABLE_GSHADOW - struct sgrp sgrp, *sresult = NULL; -+#endif - int r; - - assert(ret); -@@ -512,6 +528,7 @@ int nss_group_record_by_gid( - buf = mfree(buf); - } - -+#if ENABLE_GSHADOW - if (with_shadow) { - r = nss_sgrp_for_group(result, &sgrp, &sbuf); - if (r < 0) { -@@ -523,6 +540,9 @@ int nss_group_record_by_gid( - incomplete = true; - - r = nss_group_to_group_record(result, sresult, ret); -+#else -+ r = nss_group_to_group_record(result, NULL, ret); -+#endif - if (r < 0) - return r; - -diff --git a/src/shared/user-record-nss.h b/src/shared/user-record-nss.h -index 22ab04d6ee..4e52e7a911 100644 ---- a/src/shared/user-record-nss.h -+++ b/src/shared/user-record-nss.h -@@ -2,7 +2,11 @@ - #pragma once - - #include -+#if ENABLE_GSHADOW - #include -+#else -+struct sgrp; -+#endif - #include - #include - -diff --git a/src/shared/userdb.c b/src/shared/userdb.c -index 91ac7c3832..20881ece84 100644 ---- a/src/shared/userdb.c -+++ b/src/shared/userdb.c -@@ -1047,13 +1047,15 @@ int groupdb_iterator_get(UserDBIterator *iterator, GroupRecord **ret) { - if (gr) { - _cleanup_free_ char *buffer = NULL; - bool incomplete = false; -+#if ENABLE_GSHADOW - struct sgrp sgrp; -- -+#endif - if (streq_ptr(gr->gr_name, "root")) - iterator->synthesize_root = false; - if (gr->gr_gid == GID_NOBODY) - iterator->synthesize_nobody = false; - -+#if ENABLE_GSHADOW - if (!FLAGS_SET(iterator->flags, USERDB_SUPPRESS_SHADOW)) { - r = nss_sgrp_for_group(gr, &sgrp, &buffer); - if (r < 0) { -@@ -1066,6 +1068,9 @@ int groupdb_iterator_get(UserDBIterator *iterator, GroupRecord **ret) { - } - - r = nss_group_to_group_record(gr, r >= 0 ? &sgrp : NULL, ret); -+#else -+ r = nss_group_to_group_record(gr, NULL, ret); -+#endif - if (r < 0) - return r; - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0028-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0028-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch deleted file mode 100644 index ff96a720c..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/0028-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch +++ /dev/null @@ -1,34 +0,0 @@ -From f5d7fee9620cbcf52be8f8ba477890d28cadfbc8 Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Mon, 12 Apr 2021 23:44:53 -0700 -Subject: [PATCH] missing_syscall.h: Define MIPS ABI defines for musl - -musl does not define _MIPS_SIM_ABI32, _MIPS_SIM_NABI32, _MIPS_SIM_ABI64 -unlike glibc where these are provided by libc headers, therefore define -them here in case they are undefined - -Upstream-Status: Pending - -Signed-off-by: Khem Raj - ---- - src/basic/missing_syscall.h | 6 ++++++ - 1 file changed, 6 insertions(+) - -diff --git a/src/basic/missing_syscall.h b/src/basic/missing_syscall.h -index 9e3a165857..4d59b3e7b0 100644 ---- a/src/basic/missing_syscall.h -+++ b/src/basic/missing_syscall.h -@@ -20,6 +20,12 @@ - #include - #endif - -+#ifndef _MIPS_SIM_ABI32 -+#define _MIPS_SIM_ABI32 1 -+#define _MIPS_SIM_NABI32 2 -+#define _MIPS_SIM_ABI64 3 -+#endif -+ - #include "missing_keyctl.h" - #include "missing_stat.h" - #include "missing_syscall_def.h" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/99-default.preset b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/99-default.preset deleted file mode 100644 index 1f29b5059..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/99-default.preset +++ /dev/null @@ -1 +0,0 @@ -disable * diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/init b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/init deleted file mode 100644 index ea52be482..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/init +++ /dev/null @@ -1,104 +0,0 @@ -#!/bin/sh - -### BEGIN INIT INFO -# Provides: udev -# Required-Start: mountvirtfs -# Required-Stop: -# Default-Start: S -# Default-Stop: -# Short-Description: Start udevd, populate /dev and load drivers. -### END INIT INFO - -. /etc/init.d/functions - -export TZ=/etc/localtime - -[ -d /sys/class ] || exit 1 -[ -r /proc/mounts ] || exit 1 -[ -x @UDEVD@ ] || exit 1 -[ -f /etc/default/udev-cache ] && . /etc/default/udev-cache -[ -f /etc/udev/udev.conf ] && . /etc/udev/udev.conf - -readfile () { - filename=$1 - READDATA="" - if [ -r $filename ]; then - while read line; do - READDATA="$READDATA$line" - done < $filename - fi -} - -case "$1" in - start) - export ACTION=add - # propagate /dev from /sys - echo "Starting udev" - - # mount the devtmpfs on /dev, if not already done - LANG=C awk '$2 == "/dev" && ($3 == "devtmpfs") { exit 1 }' /proc/mounts && { - mount -n -o mode=0755 -t devtmpfs none "/dev" - } - [ -e /dev/pts ] || mkdir -m 0755 /dev/pts - [ -e /dev/shm ] || mkdir -m 1777 /dev/shm - mount -a -t tmpfs 2>/dev/null - - # cache handling - if [ "$DEVCACHE" != "" ]; then - readfile /proc/version - VERSION="$READDATA" - readfile /proc/cmdline - CMDLINE="$READDATA" - readfile /proc/devices - DEVICES="$READDATA" - readfile /proc/atags - ATAGS="$READDATA" - - if [ -e $DEVCACHE ]; then - readfile /etc/udev/cache.data - if [ "$READDATA" = "$VERSION$CMDLINE$DEVICES$ATAGS" ]; then - (cd /; tar xf $DEVCACHE > /dev/null 2>&1) - not_first_boot=1 - [ "$VERBOSE" != "no" ] && echo "udev: using cache file $DEVCACHE" - [ -e /dev/shm/udev.cache ] && rm -f /dev/shm/udev.cache - else - echo "$VERSION$CMDLINE$DEVICES$ATAGS" > /dev/shm/udev.cache - fi - else - echo "$VERSION$CMDLINE$DEVICES$ATAGS" > /dev/shm/udev.cache - fi - fi - - # make_extra_nodes - killproc systemd-udevd > "/dev/null" 2>&1 - - # trigger the sorted events - echo -e '\000\000\000\000' > /proc/sys/kernel/hotplug - @UDEVD@ -d - - udevadm control --env=STARTUP=1 - if [ "$not_first_boot" != "" ];then - udevadm trigger --action=add --subsystem-nomatch=tty --subsystem-nomatch=mem --subsystem-nomatch=vc --subsystem-nomatch=vtconsole --subsystem-nomatch=misc --subsystem-nomatch=dcon --subsystem-nomatch=pci_bus --subsystem-nomatch=graphics --subsystem-nomatch=backlight --subsystem-nomatch=video4linux --subsystem-nomatch=platform - (udevadm settle --timeout=3; udevadm control --env=STARTUP=)& - else - udevadm trigger --action=add - udevadm settle - fi - ;; - stop) - echo "Stopping udevd" - start-stop-daemon --stop --name systemd-udevd --quiet - ;; - restart) - $0 stop - sleep 1 - $0 start - ;; - status) - status systemd-udevd - ;; - *) - echo "Usage: $0 {start|stop|status|restart}" - exit 1 -esac -exit 0 diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/org.freedesktop.hostname1_no_polkit.conf b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/org.freedesktop.hostname1_no_polkit.conf deleted file mode 100644 index f4d0271cd..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/org.freedesktop.hostname1_no_polkit.conf +++ /dev/null @@ -1,11 +0,0 @@ - - - - - - - - - - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/systemd-pager.sh b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/systemd-pager.sh deleted file mode 100644 index 86e3e0ab7..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/systemd-pager.sh +++ /dev/null @@ -1,7 +0,0 @@ -# Systemd expect a color capable pager, however the less provided -# by busybox is not. This make many interaction with systemd pretty -# annoying. As a workaround we disable the systemd pager if less -# is not the GNU version. -if ! less -V > /dev/null 2>&1 ; then - export SYSTEMD_PAGER= -fi diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/touchscreen.rules b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/touchscreen.rules deleted file mode 100644 index d83fd1673..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd/touchscreen.rules +++ /dev/null @@ -1,18 +0,0 @@ -# There are a number of modifiers that are allowed to be used in some -# of the different fields. They provide the following subsitutions: -# -# %n the "kernel number" of the device. -# For example, 'sda3' has a "kernel number" of '3' -# %e the smallest number for that name which does not matches an existing node -# %k the kernel name for the device -# %M the kernel major number for the device -# %m the kernel minor number for the device -# %b the bus id for the device -# %c the string returned by the PROGRAM -# %s{filename} the content of a sysfs attribute -# %% the '%' char itself -# - -# Create a symlink to any touchscreen input device -SUBSYSTEM=="input", KERNEL=="event[0-9]*", ATTRS{modalias}=="input:*-e0*,3,*a0,1,*18,*", SYMLINK+="input/touchscreen0" -SUBSYSTEM=="input", KERNEL=="event[0-9]*", ATTRS{modalias}=="ads7846", SYMLINK+="input/touchscreen0" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd_249.3.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd_249.3.bb deleted file mode 100644 index f8c85dabf..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-core/systemd/systemd_249.3.bb +++ /dev/null @@ -1,785 +0,0 @@ -require systemd.inc - -PROVIDES = "udev" - -PE = "1" - -DEPENDS = "intltool-native gperf-native libcap util-linux python3-jinja2-native" - -SECTION = "base/shell" - -inherit useradd pkgconfig meson perlnative update-rc.d update-alternatives qemu systemd gettext bash-completion manpages features_check - -# As this recipe builds udev, respect systemd being in DISTRO_FEATURES so -# that we don't build both udev and systemd in world builds. -REQUIRED_DISTRO_FEATURES = "systemd" - -SRC_URI += "file://touchscreen.rules \ - file://00-create-volatile.conf \ - ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', 'file://org.freedesktop.hostname1_no_polkit.conf', '', d)} \ - ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', 'file://00-hostnamed-network-user.conf', '', d)} \ - file://init \ - file://99-default.preset \ - file://systemd-pager.sh \ - file://0001-binfmt-Don-t-install-dependency-links-at-install-tim.patch \ - file://0003-implment-systemd-sysv-install-for-OE.patch \ - file://0001-systemd.pc.in-use-ROOTPREFIX-without-suffixed-slash.patch \ - file://0001-test-parse-argument-Include-signal.h.patch \ - " - -# patches needed by musl -SRC_URI:append:libc-musl = " ${SRC_URI_MUSL}" -SRC_URI_MUSL = "\ - file://0002-don-t-use-glibc-specific-qsort_r.patch \ - file://0003-missing_type.h-add-__compare_fn_t-and-comparison_fn_.patch \ - file://0004-add-fallback-parse_printf_format-implementation.patch \ - file://0005-src-basic-missing.h-check-for-missing-strndupa.patch \ - file://0006-Include-netinet-if_ether.h.patch \ - file://0007-don-t-fail-if-GLOB_BRACE-and-GLOB_ALTDIRFUNC-is-not-.patch \ - file://0008-add-missing-FTW_-macros-for-musl.patch \ - file://0009-fix-missing-of-__register_atfork-for-non-glibc-build.patch \ - file://0010-Use-uintmax_t-for-handling-rlim_t.patch \ - file://0011-test-sizeof.c-Disable-tests-for-missing-typedefs-in-.patch \ - file://0012-don-t-pass-AT_SYMLINK_NOFOLLOW-flag-to-faccessat.patch \ - file://0013-Define-glibc-compatible-basename-for-non-glibc-syste.patch \ - file://0014-Do-not-disable-buffering-when-writing-to-oom_score_a.patch \ - file://0015-distinguish-XSI-compliant-strerror_r-from-GNU-specif.patch \ - file://0016-Hide-__start_BUS_ERROR_MAP-and-__stop_BUS_ERROR_MAP.patch \ - file://0017-missing_type.h-add-__compar_d_fn_t-definition.patch \ - file://0018-avoid-redefinition-of-prctl_mm_map-structure.patch \ - file://0019-Handle-missing-LOCK_EX.patch \ - file://0020-Fix-incompatible-pointer-type-struct-sockaddr_un.patch \ - file://0021-test-json.c-define-M_PIl.patch \ - file://0022-do-not-disable-buffer-in-writing-files.patch \ - file://0025-Handle-__cpu_mask-usage.patch \ - file://0026-Handle-missing-gshadow.patch \ - file://0028-missing_syscall.h-Define-MIPS-ABI-defines-for-musl.patch \ - " - -PAM_PLUGINS = " \ - pam-plugin-unix \ - pam-plugin-loginuid \ - pam-plugin-keyinit \ -" - -PACKAGECONFIG ??= " \ - ${@bb.utils.filter('DISTRO_FEATURES', 'acl audit efi ldconfig pam selinux smack usrmerge polkit seccomp', d)} \ - ${@bb.utils.contains('DISTRO_FEATURES', 'wifi', 'rfkill', '', d)} \ - ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'xkbcommon', '', d)} \ - backlight \ - binfmt \ - gshadow \ - hibernate \ - hostnamed \ - idn \ - ima \ - kmod \ - localed \ - logind \ - machined \ - myhostname \ - networkd \ - nss \ - nss-mymachines \ - nss-resolve \ - quotacheck \ - randomseed \ - resolved \ - set-time-epoch \ - sysusers \ - sysvinit \ - timedated \ - timesyncd \ - userdb \ - utmp \ - vconsole \ - wheel-group \ - zstd \ -" - -PACKAGECONFIG:remove:libc-musl = " \ - gshadow \ - idn \ - localed \ - myhostname \ - nss \ - nss-mymachines \ - nss-resolve \ - sysusers \ - userdb \ - utmp \ -" - -CFLAGS:append:libc-musl = " -D__UAPI_DEF_ETHHDR=0 " - -# Some of the dependencies are weak-style recommends - if not available at runtime, -# systemd won't fail but the library-related feature will be skipped with a warning. - -# Use the upstream systemd serial-getty@.service and rely on -# systemd-getty-generator instead of using the OE-core specific -# systemd-serialgetty.bb - not enabled by default. -PACKAGECONFIG[serial-getty-generator] = "" - -PACKAGECONFIG[acl] = "-Dacl=true,-Dacl=false,acl" -PACKAGECONFIG[audit] = "-Daudit=true,-Daudit=false,audit" -PACKAGECONFIG[backlight] = "-Dbacklight=true,-Dbacklight=false" -PACKAGECONFIG[binfmt] = "-Dbinfmt=true,-Dbinfmt=false" -PACKAGECONFIG[bzip2] = "-Dbzip2=true,-Dbzip2=false,bzip2" -PACKAGECONFIG[cgroupv2] = "-Ddefault-hierarchy=unified,-Ddefault-hierarchy=hybrid" -PACKAGECONFIG[coredump] = "-Dcoredump=true,-Dcoredump=false" -PACKAGECONFIG[cryptsetup] = "-Dlibcryptsetup=true,-Dlibcryptsetup=false,cryptsetup,,cryptsetup" -PACKAGECONFIG[tpm2] = "-Dtpm2=true,-Dtpm2=false,tpm2-tss,tpm2-tss libtss2 libtss2-tcti-device" -PACKAGECONFIG[dbus] = "-Ddbus=true,-Ddbus=false,dbus" -PACKAGECONFIG[efi] = "-Defi=true,-Defi=false" -PACKAGECONFIG[gnu-efi] = "-Dgnu-efi=true -Defi-libdir=${STAGING_LIBDIR} -Defi-includedir=${STAGING_INCDIR}/efi,-Dgnu-efi=false,gnu-efi" -PACKAGECONFIG[elfutils] = "-Delfutils=true,-Delfutils=false,elfutils" -PACKAGECONFIG[firstboot] = "-Dfirstboot=true,-Dfirstboot=false" -PACKAGECONFIG[repart] = "-Drepart=true,-Drepart=false" -PACKAGECONFIG[homed] = "-Dhomed=true,-Dhomed=false" -# Sign the journal for anti-tampering -PACKAGECONFIG[gcrypt] = "-Dgcrypt=true,-Dgcrypt=false,libgcrypt" -PACKAGECONFIG[gnutls] = "-Dgnutls=true,-Dgnutls=false,gnutls" -PACKAGECONFIG[gshadow] = "-Dgshadow=true,-Dgshadow=false" -PACKAGECONFIG[hibernate] = "-Dhibernate=true,-Dhibernate=false" -PACKAGECONFIG[hostnamed] = "-Dhostnamed=true,-Dhostnamed=false" -PACKAGECONFIG[idn] = "-Didn=true,-Didn=false" -PACKAGECONFIG[ima] = "-Dima=true,-Dima=false" -# importd requires journal-upload/xz/zlib/bzip2/gcrypt -PACKAGECONFIG[importd] = "-Dimportd=true,-Dimportd=false" -# Update NAT firewall rules -PACKAGECONFIG[iptc] = "-Dlibiptc=true,-Dlibiptc=false,iptables" -PACKAGECONFIG[journal-upload] = "-Dlibcurl=true,-Dlibcurl=false,curl" -PACKAGECONFIG[kmod] = "-Dkmod=true,-Dkmod=false,kmod" -PACKAGECONFIG[ldconfig] = "-Dldconfig=true,-Dldconfig=false,,ldconfig" -PACKAGECONFIG[libidn] = "-Dlibidn=true,-Dlibidn=false,libidn,,libidn" -PACKAGECONFIG[libidn2] = "-Dlibidn2=true,-Dlibidn2=false,libidn2,,libidn2" -PACKAGECONFIG[localed] = "-Dlocaled=true,-Dlocaled=false" -PACKAGECONFIG[logind] = "-Dlogind=true,-Dlogind=false" -PACKAGECONFIG[lz4] = "-Dlz4=true,-Dlz4=false,lz4" -PACKAGECONFIG[machined] = "-Dmachined=true,-Dmachined=false" -PACKAGECONFIG[manpages] = "-Dman=true,-Dman=false,libxslt-native xmlto-native docbook-xml-dtd4-native docbook-xsl-stylesheets-native" -PACKAGECONFIG[microhttpd] = "-Dmicrohttpd=true,-Dmicrohttpd=false,libmicrohttpd" -PACKAGECONFIG[myhostname] = "-Dnss-myhostname=true,-Dnss-myhostname=false,,libnss-myhostname" -PACKAGECONFIG[networkd] = "-Dnetworkd=true,-Dnetworkd=false" -PACKAGECONFIG[nss] = "-Dnss-systemd=true,-Dnss-systemd=false" -PACKAGECONFIG[nss-mymachines] = "-Dnss-mymachines=true,-Dnss-mymachines=false" -PACKAGECONFIG[nss-resolve] = "-Dnss-resolve=true,-Dnss-resolve=false" -PACKAGECONFIG[oomd] = "-Doomd=true,-Doomd=false" -PACKAGECONFIG[openssl] = "-Dopenssl=true,-Dopenssl=false,openssl" -PACKAGECONFIG[pam] = "-Dpam=true,-Dpam=false,libpam,${PAM_PLUGINS}" -PACKAGECONFIG[pcre2] = "-Dpcre2=true,-Dpcre2=false,libpcre2" -PACKAGECONFIG[polkit] = "-Dpolkit=true,-Dpolkit=false" -# If polkit is disabled and networkd+hostnamed are in use, enabling this option and -# using dbus-broker will allow networkd to be authorized to change the -# hostname without acquiring additional privileges -PACKAGECONFIG[polkit_hostnamed_fallback] = ",,,,dbus-broker,polkit" -PACKAGECONFIG[portabled] = "-Dportabled=true,-Dportabled=false" -PACKAGECONFIG[qrencode] = "-Dqrencode=true,-Dqrencode=false,qrencode,,qrencode" -PACKAGECONFIG[quotacheck] = "-Dquotacheck=true,-Dquotacheck=false" -PACKAGECONFIG[randomseed] = "-Drandomseed=true,-Drandomseed=false" -PACKAGECONFIG[resolved] = "-Dresolve=true,-Dresolve=false" -PACKAGECONFIG[rfkill] = "-Drfkill=true,-Drfkill=false" -PACKAGECONFIG[seccomp] = "-Dseccomp=true,-Dseccomp=false,libseccomp" -PACKAGECONFIG[selinux] = "-Dselinux=true,-Dselinux=false,libselinux,initscripts-sushell" -PACKAGECONFIG[smack] = "-Dsmack=true,-Dsmack=false" -PACKAGECONFIG[sysusers] = "-Dsysusers=true,-Dsysusers=false" -PACKAGECONFIG[sysvinit] = "-Dsysvinit-path=${sysconfdir}/init.d -Dsysvrcnd-path=${sysconfdir},-Dsysvinit-path= -Dsysvrcnd-path=,,systemd-compat-units update-rc.d" -# When enabled use reproducble build timestamp if set as time epoch, -# or build time if not. When disabled, time epoch is unset. -def build_epoch(d): - epoch = d.getVar('SOURCE_DATE_EPOCH') or "-1" - return '-Dtime-epoch=%d' % int(epoch) -PACKAGECONFIG[set-time-epoch] = "${@build_epoch(d)},-Dtime-epoch=0" -PACKAGECONFIG[timedated] = "-Dtimedated=true,-Dtimedated=false" -PACKAGECONFIG[timesyncd] = "-Dtimesyncd=true,-Dtimesyncd=false" -PACKAGECONFIG[usrmerge] = "-Dsplit-usr=false,-Dsplit-usr=true" -PACKAGECONFIG[sbinmerge] = "-Dsplit-bin=false,-Dsplit-bin=true" -PACKAGECONFIG[userdb] = "-Duserdb=true,-Duserdb=false" -PACKAGECONFIG[utmp] = "-Dutmp=true,-Dutmp=false" -PACKAGECONFIG[valgrind] = "-DVALGRIND=1,,valgrind" -PACKAGECONFIG[vconsole] = "-Dvconsole=true,-Dvconsole=false,,${PN}-vconsole-setup" -PACKAGECONFIG[wheel-group] = "-Dwheel-group=true, -Dwheel-group=false" -PACKAGECONFIG[xdg-autostart] = "-Dxdg-autostart=true,-Dxdg-autostart=false" -# Verify keymaps on locale change -PACKAGECONFIG[xkbcommon] = "-Dxkbcommon=true,-Dxkbcommon=false,libxkbcommon" -PACKAGECONFIG[xz] = "-Dxz=true,-Dxz=false,xz" -PACKAGECONFIG[zlib] = "-Dzlib=true,-Dzlib=false,zlib" -PACKAGECONFIG[zstd] = "-Dzstd=true,-Dzstd=false,zstd" - -# Helper variables to clarify locations. This mirrors the logic in systemd's -# build system. -rootprefix ?= "${root_prefix}" -rootlibdir ?= "${base_libdir}" -rootlibexecdir = "${rootprefix}/lib" - -# This links udev statically with systemd helper library. -# Otherwise udev package would depend on systemd package (which has the needed shared library), -# and always pull it into images. -EXTRA_OEMESON += "-Dlink-udev-shared=false" - -EXTRA_OEMESON += "-Dnobody-user=nobody \ - -Dnobody-group=nobody \ - -Drootlibdir=${rootlibdir} \ - -Drootprefix=${rootprefix} \ - -Ddefault-locale=C \ - -Dmode=release \ - -Dsystem-alloc-uid-min=101 \ - -Dsystem-uid-max=999 \ - -Dsystem-alloc-gid-min=101 \ - -Dsystem-gid-max=999 \ - " - -# Hardcode target binary paths to avoid using paths from sysroot -EXTRA_OEMESON += "-Dkexec-path=${sbindir}/kexec \ - -Dkmod-path=${base_bindir}/kmod \ - -Dmount-path=${base_bindir}/mount \ - -Dquotacheck-path=${sbindir}/quotacheck \ - -Dquotaon-path=${sbindir}/quotaon \ - -Dsulogin-path=${base_sbindir}/sulogin \ - -Dnologin-path=${base_sbindir}/nologin \ - -Dumount-path=${base_bindir}/umount" - -do_install() { - meson_do_install - install -d ${D}/${base_sbindir} - if ${@bb.utils.contains('PACKAGECONFIG', 'serial-getty-generator', 'false', 'true', d)}; then - # Provided by a separate recipe - rm ${D}${systemd_system_unitdir}/serial-getty* -f - fi - - # Provide support for initramfs - [ ! -e ${D}/init ] && ln -s ${rootlibexecdir}/systemd/systemd ${D}/init - [ ! -e ${D}/${base_sbindir}/udevd ] && ln -s ${rootlibexecdir}/systemd/systemd-udevd ${D}/${base_sbindir}/udevd - - install -d ${D}${sysconfdir}/udev/rules.d/ - install -d ${D}${sysconfdir}/tmpfiles.d - for rule in $(find ${WORKDIR} -maxdepth 1 -type f -name "*.rules"); do - install -m 0644 $rule ${D}${sysconfdir}/udev/rules.d/ - done - - install -m 0644 ${WORKDIR}/00-create-volatile.conf ${D}${sysconfdir}/tmpfiles.d/ - - if ${@bb.utils.contains('DISTRO_FEATURES','sysvinit','true','false',d)}; then - install -d ${D}${sysconfdir}/init.d - install -m 0755 ${WORKDIR}/init ${D}${sysconfdir}/init.d/systemd-udevd - sed -i s%@UDEVD@%${rootlibexecdir}/systemd/systemd-udevd% ${D}${sysconfdir}/init.d/systemd-udevd - install -Dm 0755 ${S}/src/systemctl/systemd-sysv-install.SKELETON ${D}${systemd_system_unitdir}d-sysv-install - fi - - chown root:systemd-journal ${D}/${localstatedir}/log/journal - - # Delete journal README, as log can be symlinked inside volatile. - rm -f ${D}/${localstatedir}/log/README - - # journal-remote creates this at start - rm -rf ${D}/${localstatedir}/log/journal/remote - - install -d ${D}${systemd_system_unitdir}/graphical.target.wants - install -d ${D}${systemd_system_unitdir}/multi-user.target.wants - install -d ${D}${systemd_system_unitdir}/poweroff.target.wants - install -d ${D}${systemd_system_unitdir}/reboot.target.wants - install -d ${D}${systemd_system_unitdir}/rescue.target.wants - - # Create symlinks for systemd-update-utmp-runlevel.service - if ${@bb.utils.contains('PACKAGECONFIG', 'utmp', 'true', 'false', d)}; then - ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/graphical.target.wants/systemd-update-utmp-runlevel.service - ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/multi-user.target.wants/systemd-update-utmp-runlevel.service - ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/poweroff.target.wants/systemd-update-utmp-runlevel.service - ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/reboot.target.wants/systemd-update-utmp-runlevel.service - ln -sf ../systemd-update-utmp-runlevel.service ${D}${systemd_system_unitdir}/rescue.target.wants/systemd-update-utmp-runlevel.service - fi - - # this file is needed to exist if networkd is disabled but timesyncd is still in use since timesyncd checks it - # for existence else it fails - if [ -s ${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf ]; then - ${@bb.utils.contains('PACKAGECONFIG', 'networkd', ':', 'sed -i -e "\$ad /run/systemd/netif/links 0755 root root -" ${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf', d)} - fi - if ! ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'true', 'false', d)}; then - echo 'L! ${sysconfdir}/resolv.conf - - - - ../run/systemd/resolve/resolv.conf' >>${D}${exec_prefix}/lib/tmpfiles.d/etc.conf - echo 'd /run/systemd/resolve 0755 root root -' >>${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf - echo 'f /run/systemd/resolve/resolv.conf 0644 root root' >>${D}${exec_prefix}/lib/tmpfiles.d/systemd.conf - ln -s ../run/systemd/resolve/resolv.conf ${D}${sysconfdir}/resolv-conf.systemd - else - sed -i -e "s%^L! /etc/resolv.conf.*$%L! /etc/resolv.conf - - - - ../run/systemd/resolve/resolv.conf%g" ${D}${exec_prefix}/lib/tmpfiles.d/etc.conf - ln -s ../run/systemd/resolve/resolv.conf ${D}${sysconfdir}/resolv-conf.systemd - fi - if ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'false', 'true', d)}; then - rm ${D}${exec_prefix}/lib/tmpfiles.d/x11.conf - rm -r ${D}${sysconfdir}/X11 - fi - - # If polkit is setup fixup permissions and ownership - if ${@bb.utils.contains('PACKAGECONFIG', 'polkit', 'true', 'false', d)}; then - if [ -d ${D}${datadir}/polkit-1/rules.d ]; then - chmod 700 ${D}${datadir}/polkit-1/rules.d - chown polkitd:root ${D}${datadir}/polkit-1/rules.d - fi - fi - - # If polkit is not available and a fallback was requested, install a drop-in that allows networkd to - # request hostname changes via DBUS without elevating its privileges - if ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', 'true', 'false', d)}; then - install -d ${D}${systemd_system_unitdir}/systemd-hostnamed.service.d/ - install -m 0644 ${WORKDIR}/00-hostnamed-network-user.conf ${D}${systemd_system_unitdir}/systemd-hostnamed.service.d/ - install -d ${D}${datadir}/dbus-1/system.d/ - install -m 0644 ${WORKDIR}/org.freedesktop.hostname1_no_polkit.conf ${D}${datadir}/dbus-1/system.d/ - fi - - # create link for existing udev rules - ln -s ${base_bindir}/udevadm ${D}${base_sbindir}/udevadm - - # duplicate udevadm for postinst script - install -d ${D}${libexecdir} - ln ${D}${base_bindir}/udevadm ${D}${libexecdir}/${MLPREFIX}udevadm - - # install default policy for presets - # https://www.freedesktop.org/wiki/Software/systemd/Preset/#howto - install -Dm 0644 ${WORKDIR}/99-default.preset ${D}${systemd_system_unitdir}-preset/99-default.preset - - # add a profile fragment to disable systemd pager with busybox less - install -Dm 0644 ${WORKDIR}/systemd-pager.sh ${D}${sysconfdir}/profile.d/systemd-pager.sh -} - -python populate_packages:prepend (){ - systemdlibdir = d.getVar("rootlibdir") - do_split_packages(d, systemdlibdir, '^lib(.*)\.so\.*', 'lib%s', 'Systemd %s library', extra_depends='', allow_links=True) -} -PACKAGES_DYNAMIC += "^lib(udev|systemd|nss).*" - -PACKAGE_BEFORE_PN = "\ - ${PN}-gui \ - ${PN}-vconsole-setup \ - ${PN}-initramfs \ - ${PN}-analyze \ - ${PN}-kernel-install \ - ${PN}-rpm-macros \ - ${PN}-binfmt \ - ${PN}-zsh-completion \ - ${PN}-container \ - ${PN}-journal-gatewayd \ - ${PN}-journal-upload \ - ${PN}-journal-remote \ - ${PN}-extra-utils \ - ${PN}-udev-rules \ - udev \ - udev-hwdb \ -" - -SUMMARY:${PN}-container = "Tools for containers and VMs" -DESCRIPTION:${PN}-container = "Systemd tools to spawn and manage containers and virtual machines." - -SUMMARY:${PN}-journal-gatewayd = "HTTP server for journal events" -DESCRIPTION:${PN}-journal-gatewayd = "systemd-journal-gatewayd serves journal events over the network. Clients must connect using HTTP. The server listens on port 19531 by default." - -SUMMARY:${PN}-journal-upload = "Send journal messages over the network" -DESCRIPTION:${PN}-journal-upload = "systemd-journal-upload uploads journal entries to a specified URL." - -SUMMARY:${PN}-journal-remote = "Receive journal messages over the network" -DESCRIPTION:${PN}-journal-remote = "systemd-journal-remote is a command to receive serialized journal events and store them to journal files." - -SYSTEMD_PACKAGES = "${@bb.utils.contains('PACKAGECONFIG', 'binfmt', '${PN}-binfmt', '', d)} \ - ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-gatewayd', '', d)} \ - ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-remote', '', d)} \ - ${@bb.utils.contains('PACKAGECONFIG', 'journal-upload', '${PN}-journal-upload', '', d)} \ -" -SYSTEMD_SERVICE:${PN}-binfmt = "systemd-binfmt.service" - -USERADD_PACKAGES = "${PN} ${PN}-extra-utils \ - ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-gateway', '', d)} \ - ${@bb.utils.contains('PACKAGECONFIG', 'microhttpd', '${PN}-journal-remote', '', d)} \ - ${@bb.utils.contains('PACKAGECONFIG', 'journal-upload', '${PN}-journal-upload', '', d)} \ -" -GROUPADD_PARAM:${PN} = "-r systemd-journal;" -GROUPADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', '-r systemd-hostname;', '', d)}" -USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'coredump', '--system -d / -M --shell /sbin/nologin systemd-coredump;', '', d)}" -USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'networkd', '--system -d / -M --shell /sbin/nologin systemd-network;', '', d)}" -USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'polkit', '--system --no-create-home --user-group --home-dir ${sysconfdir}/polkit-1 polkitd;', '', d)}" -USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'resolved', '--system -d / -M --shell /sbin/nologin systemd-resolve;', '', d)}" -USERADD_PARAM:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'timesyncd', '--system -d / -M --shell /sbin/nologin systemd-timesync;', '', d)}" -USERADD_PARAM:${PN}-extra-utils = "--system -d / -M --shell /sbin/nologin systemd-bus-proxy" -USERADD_PARAM:${PN}-journal-gateway = "--system -d / -M --shell /sbin/nologin systemd-journal-gateway" -USERADD_PARAM:${PN}-journal-remote = "--system -d / -M --shell /sbin/nologin systemd-journal-remote" -USERADD_PARAM:${PN}-journal-upload = "--system -d / -M --shell /sbin/nologin systemd-journal-upload" - -FILES:${PN}-analyze = "${bindir}/systemd-analyze" - -FILES:${PN}-initramfs = "/init" -RDEPENDS:${PN}-initramfs = "${PN}" - -FILES:${PN}-gui = "${bindir}/systemadm" - -FILES:${PN}-vconsole-setup = "${rootlibexecdir}/systemd/systemd-vconsole-setup \ - ${systemd_system_unitdir}/systemd-vconsole-setup.service \ - ${systemd_system_unitdir}/sysinit.target.wants/systemd-vconsole-setup.service" - -RDEPENDS:${PN}-kernel-install += "bash" -FILES:${PN}-kernel-install = "${bindir}/kernel-install \ - ${sysconfdir}/kernel/ \ - ${exec_prefix}/lib/kernel \ - " -FILES:${PN}-rpm-macros = "${exec_prefix}/lib/rpm \ - " - -FILES:${PN}-zsh-completion = "${datadir}/zsh/site-functions" - -FILES:${PN}-binfmt = "${sysconfdir}/binfmt.d/ \ - ${exec_prefix}/lib/binfmt.d \ - ${rootlibexecdir}/systemd/systemd-binfmt \ - ${systemd_system_unitdir}/proc-sys-fs-binfmt_misc.* \ - ${systemd_system_unitdir}/systemd-binfmt.service" -RRECOMMENDS:${PN}-binfmt = "kernel-module-binfmt-misc" - -RRECOMMENDS:${PN}-vconsole-setup = "kbd kbd-consolefonts kbd-keymaps" - - -FILES:${PN}-journal-gatewayd = "${rootlibexecdir}/systemd/systemd-journal-gatewayd \ - ${systemd_system_unitdir}/systemd-journal-gatewayd.service \ - ${systemd_system_unitdir}/systemd-journal-gatewayd.socket \ - ${systemd_system_unitdir}/sockets.target.wants/systemd-journal-gatewayd.socket \ - ${datadir}/systemd/gatewayd/browse.html \ - " -SYSTEMD_SERVICE:${PN}-journal-gatewayd = "systemd-journal-gatewayd.socket" - -FILES:${PN}-journal-upload = "${rootlibexecdir}/systemd/systemd-journal-upload \ - ${systemd_system_unitdir}/systemd-journal-upload.service \ - ${sysconfdir}/systemd/journal-upload.conf \ - " -SYSTEMD_SERVICE:${PN}-journal-upload = "systemd-journal-upload.service" - -FILES:${PN}-journal-remote = "${rootlibexecdir}/systemd/systemd-journal-remote \ - ${sysconfdir}/systemd/journal-remote.conf \ - ${systemd_system_unitdir}/systemd-journal-remote.service \ - ${systemd_system_unitdir}/systemd-journal-remote.socket \ - " -SYSTEMD_SERVICE:${PN}-journal-remote = "systemd-journal-remote.socket" - - -FILES:${PN}-container = "${sysconfdir}/dbus-1/system.d/org.freedesktop.import1.conf \ - ${sysconfdir}/dbus-1/system.d/org.freedesktop.machine1.conf \ - ${sysconfdir}/systemd/system/multi-user.target.wants/machines.target \ - ${base_bindir}/machinectl \ - ${bindir}/systemd-nspawn \ - ${nonarch_libdir}/systemd/import-pubring.gpg \ - ${systemd_system_unitdir}/busnames.target.wants/org.freedesktop.import1.busname \ - ${systemd_system_unitdir}/busnames.target.wants/org.freedesktop.machine1.busname \ - ${systemd_system_unitdir}/local-fs.target.wants/var-lib-machines.mount \ - ${systemd_system_unitdir}/machines.target.wants/var-lib-machines.mount \ - ${systemd_system_unitdir}/remote-fs.target.wants/var-lib-machines.mount \ - ${systemd_system_unitdir}/machine.slice \ - ${systemd_system_unitdir}/machines.target \ - ${systemd_system_unitdir}/org.freedesktop.import1.busname \ - ${systemd_system_unitdir}/org.freedesktop.machine1.busname \ - ${systemd_system_unitdir}/systemd-importd.service \ - ${systemd_system_unitdir}/systemd-machined.service \ - ${systemd_system_unitdir}/dbus-org.freedesktop.machine1.service \ - ${systemd_system_unitdir}/var-lib-machines.mount \ - ${rootlibexecdir}/systemd/systemd-import \ - ${rootlibexecdir}/systemd/systemd-importd \ - ${rootlibexecdir}/systemd/systemd-machined \ - ${rootlibexecdir}/systemd/systemd-pull \ - ${exec_prefix}/lib/tmpfiles.d/systemd-nspawn.conf \ - ${exec_prefix}/lib/tmpfiles.d/README \ - ${systemd_system_unitdir}/systemd-nspawn@.service \ - ${libdir}/libnss_mymachines.so.2 \ - ${datadir}/dbus-1/system-services/org.freedesktop.import1.service \ - ${datadir}/dbus-1/system-services/org.freedesktop.machine1.service \ - ${datadir}/dbus-1/system.d/org.freedesktop.import1.conf \ - ${datadir}/dbus-1/system.d/org.freedesktop.machine1.conf \ - ${datadir}/polkit-1/actions/org.freedesktop.import1.policy \ - ${datadir}/polkit-1/actions/org.freedesktop.machine1.policy \ - " - -# "machinectl import-tar" uses "tar --numeric-owner", not supported by busybox. -RRECOMMENDS:${PN}-container += "\ - ${PN}-journal-gatewayd \ - ${PN}-journal-remote \ - ${PN}-journal-upload \ - kernel-module-dm-mod \ - kernel-module-loop \ - kernel-module-tun \ - tar \ - " - -FILES:${PN}-extra-utils = "\ - ${base_bindir}/systemd-escape \ - ${base_bindir}/systemd-inhibit \ - ${bindir}/systemd-detect-virt \ - ${bindir}/systemd-dissect \ - ${bindir}/systemd-path \ - ${bindir}/systemd-run \ - ${bindir}/systemd-cat \ - ${bindir}/systemd-delta \ - ${bindir}/systemd-cgls \ - ${bindir}/systemd-cgtop \ - ${bindir}/systemd-stdio-bridge \ - ${bindir}/systemd-sysext \ - ${base_bindir}/systemd-ask-password \ - ${base_bindir}/systemd-tty-ask-password-agent \ - ${systemd_system_unitdir}/systemd-ask-password-console.path \ - ${systemd_system_unitdir}/systemd-ask-password-console.service \ - ${systemd_system_unitdir}/systemd-ask-password-wall.path \ - ${systemd_system_unitdir}/systemd-ask-password-wall.service \ - ${systemd_system_unitdir}/sysinit.target.wants/systemd-ask-password-console.path \ - ${systemd_system_unitdir}/sysinit.target.wants/systemd-ask-password-wall.path \ - ${systemd_system_unitdir}/multi-user.target.wants/systemd-ask-password-wall.path \ - ${rootlibexecdir}/systemd/systemd-resolve-host \ - ${rootlibexecdir}/systemd/systemd-ac-power \ - ${rootlibexecdir}/systemd/systemd-activate \ - ${rootlibexecdir}/systemd/systemd-bus-proxyd \ - ${systemd_system_unitdir}/systemd-bus-proxyd.service \ - ${systemd_system_unitdir}/systemd-bus-proxyd.socket \ - ${rootlibexecdir}/systemd/systemd-socket-proxyd \ - ${rootlibexecdir}/systemd/systemd-reply-password \ - ${rootlibexecdir}/systemd/systemd-sleep \ - ${rootlibexecdir}/systemd/system-sleep \ - ${systemd_system_unitdir}/systemd-hibernate.service \ - ${systemd_system_unitdir}/systemd-hybrid-sleep.service \ - ${systemd_system_unitdir}/systemd-suspend.service \ - ${systemd_system_unitdir}/sleep.target \ - ${rootlibexecdir}/systemd/systemd-initctl \ - ${systemd_system_unitdir}/systemd-initctl.service \ - ${systemd_system_unitdir}/systemd-initctl.socket \ - ${systemd_system_unitdir}/sockets.target.wants/systemd-initctl.socket \ - ${rootlibexecdir}/systemd/system-generators/systemd-gpt-auto-generator \ - ${rootlibexecdir}/systemd/systemd-cgroups-agent \ -" - -FILES:${PN}-udev-rules = "\ - ${rootlibexecdir}/udev/rules.d/70-uaccess.rules \ - ${rootlibexecdir}/udev/rules.d/71-seat.rules \ - ${rootlibexecdir}/udev/rules.d/73-seat-late.rules \ - ${rootlibexecdir}/udev/rules.d/99-systemd.rules \ -" - -CONFFILES:${PN} = "${sysconfdir}/systemd/coredump.conf \ - ${sysconfdir}/systemd/journald.conf \ - ${sysconfdir}/systemd/logind.conf \ - ${sysconfdir}/systemd/networkd.conf \ - ${sysconfdir}/systemd/pstore.conf \ - ${sysconfdir}/systemd/resolved.conf \ - ${sysconfdir}/systemd/sleep.conf \ - ${sysconfdir}/systemd/system.conf \ - ${sysconfdir}/systemd/timesyncd.conf \ - ${sysconfdir}/systemd/user.conf \ -" - -FILES:${PN} = " ${base_bindir}/* \ - ${base_sbindir}/shutdown \ - ${base_sbindir}/halt \ - ${base_sbindir}/poweroff \ - ${base_sbindir}/runlevel \ - ${base_sbindir}/telinit \ - ${base_sbindir}/resolvconf \ - ${base_sbindir}/reboot \ - ${base_sbindir}/init \ - ${datadir}/dbus-1/services \ - ${datadir}/dbus-1/system-services \ - ${datadir}/polkit-1 \ - ${datadir}/${BPN} \ - ${datadir}/factory \ - ${sysconfdir}/dbus-1/ \ - ${sysconfdir}/modules-load.d/ \ - ${sysconfdir}/pam.d/ \ - ${sysconfdir}/profile.d/ \ - ${sysconfdir}/sysctl.d/ \ - ${sysconfdir}/systemd/ \ - ${sysconfdir}/tmpfiles.d/ \ - ${sysconfdir}/xdg/ \ - ${sysconfdir}/init.d/README \ - ${sysconfdir}/resolv-conf.systemd \ - ${sysconfdir}/X11/xinit/xinitrc.d/* \ - ${rootlibexecdir}/systemd/* \ - ${libdir}/pam.d \ - ${nonarch_libdir}/pam.d \ - ${systemd_unitdir}/* \ - ${base_libdir}/security/*.so \ - /cgroup \ - ${bindir}/systemd* \ - ${bindir}/busctl \ - ${bindir}/coredumpctl \ - ${bindir}/localectl \ - ${bindir}/hostnamectl \ - ${bindir}/resolvectl \ - ${bindir}/timedatectl \ - ${bindir}/bootctl \ - ${bindir}/oomctl \ - ${exec_prefix}/lib/tmpfiles.d/*.conf \ - ${exec_prefix}/lib/systemd \ - ${exec_prefix}/lib/modules-load.d \ - ${exec_prefix}/lib/sysctl.d \ - ${exec_prefix}/lib/sysusers.d \ - ${exec_prefix}/lib/environment.d \ - ${localstatedir} \ - ${rootlibexecdir}/modprobe.d/systemd.conf \ - ${rootlibexecdir}/modprobe.d/README \ - ${datadir}/dbus-1/system.d/org.freedesktop.timedate1.conf \ - ${datadir}/dbus-1/system.d/org.freedesktop.locale1.conf \ - ${datadir}/dbus-1/system.d/org.freedesktop.network1.conf \ - ${datadir}/dbus-1/system.d/org.freedesktop.resolve1.conf \ - ${datadir}/dbus-1/system.d/org.freedesktop.systemd1.conf \ - ${@bb.utils.contains('PACKAGECONFIG', 'polkit_hostnamed_fallback', '${datadir}/dbus-1/system.d/org.freedesktop.hostname1_no_polkit.conf', '', d)} \ - ${datadir}/dbus-1/system.d/org.freedesktop.hostname1.conf \ - ${datadir}/dbus-1/system.d/org.freedesktop.login1.conf \ - ${datadir}/dbus-1/system.d/org.freedesktop.timesync1.conf \ - ${datadir}/dbus-1/system.d/org.freedesktop.portable1.conf \ - ${datadir}/dbus-1/system.d/org.freedesktop.oom1.conf \ - ${datadir}/dbus-1/system.d/org.freedesktop.home1.conf \ - " - -FILES:${PN}-dev += "${base_libdir}/security/*.la ${datadir}/dbus-1/interfaces/ ${sysconfdir}/rpm/macros.systemd" - -RDEPENDS:${PN} += "kmod dbus util-linux-mount util-linux-umount udev (= ${EXTENDPKGV}) systemd-udev-rules util-linux-agetty util-linux-fsck" -RDEPENDS:${PN} += "${@bb.utils.contains('PACKAGECONFIG', 'serial-getty-generator', '', 'systemd-serialgetty', d)}" -RDEPENDS:${PN} += "volatile-binds" - -RRECOMMENDS:${PN} += "systemd-extra-utils \ - udev-hwdb \ - e2fsprogs-e2fsck \ - kernel-module-autofs4 kernel-module-unix kernel-module-ipv6 kernel-module-sch-fq-codel \ - os-release \ - systemd-conf \ -" - -INSANE_SKIP:${PN} += "dev-so libdir" -INSANE_SKIP:${PN}-dbg += "libdir" -INSANE_SKIP:${PN}-doc += " libdir" - -RPROVIDES:udev = "hotplug" - -RDEPENDS:udev-hwdb += "udev" - -FILES:udev += "${base_sbindir}/udevd \ - ${rootlibexecdir}/systemd/network/99-default.link \ - ${rootlibexecdir}/systemd/systemd-udevd \ - ${rootlibexecdir}/udev/accelerometer \ - ${rootlibexecdir}/udev/ata_id \ - ${rootlibexecdir}/udev/cdrom_id \ - ${rootlibexecdir}/udev/collect \ - ${rootlibexecdir}/udev/dmi_memory_id \ - ${rootlibexecdir}/udev/fido_id \ - ${rootlibexecdir}/udev/findkeyboards \ - ${rootlibexecdir}/udev/keyboard-force-release.sh \ - ${rootlibexecdir}/udev/keymap \ - ${rootlibexecdir}/udev/mtd_probe \ - ${rootlibexecdir}/udev/scsi_id \ - ${rootlibexecdir}/udev/v4l_id \ - ${rootlibexecdir}/udev/keymaps \ - ${rootlibexecdir}/udev/rules.d/50-udev-default.rules \ - ${rootlibexecdir}/udev/rules.d/60-autosuspend.rules \ - ${rootlibexecdir}/udev/rules.d/60-autosuspend-chromiumos.rules \ - ${rootlibexecdir}/udev/rules.d/60-block.rules \ - ${rootlibexecdir}/udev/rules.d/60-cdrom_id.rules \ - ${rootlibexecdir}/udev/rules.d/60-drm.rules \ - ${rootlibexecdir}/udev/rules.d/60-evdev.rules \ - ${rootlibexecdir}/udev/rules.d/60-fido-id.rules \ - ${rootlibexecdir}/udev/rules.d/60-input-id.rules \ - ${rootlibexecdir}/udev/rules.d/60-persistent-alsa.rules \ - ${rootlibexecdir}/udev/rules.d/60-persistent-input.rules \ - ${rootlibexecdir}/udev/rules.d/60-persistent-storage.rules \ - ${rootlibexecdir}/udev/rules.d/60-persistent-storage-tape.rules \ - ${rootlibexecdir}/udev/rules.d/60-persistent-v4l.rules \ - ${rootlibexecdir}/udev/rules.d/60-sensor.rules \ - ${rootlibexecdir}/udev/rules.d/60-serial.rules \ - ${rootlibexecdir}/udev/rules.d/61-autosuspend-manual.rules \ - ${rootlibexecdir}/udev/rules.d/64-btrfs.rules \ - ${rootlibexecdir}/udev/rules.d/70-joystick.rules \ - ${rootlibexecdir}/udev/rules.d/70-memory.rules \ - ${rootlibexecdir}/udev/rules.d/70-mouse.rules \ - ${rootlibexecdir}/udev/rules.d/70-power-switch.rules \ - ${rootlibexecdir}/udev/rules.d/70-touchpad.rules \ - ${rootlibexecdir}/udev/rules.d/75-net-description.rules \ - ${rootlibexecdir}/udev/rules.d/75-probe_mtd.rules \ - ${rootlibexecdir}/udev/rules.d/78-sound-card.rules \ - ${rootlibexecdir}/udev/rules.d/80-drivers.rules \ - ${rootlibexecdir}/udev/rules.d/80-net-setup-link.rules \ - ${rootlibexecdir}/udev/rules.d/81-net-dhcp.rules \ - ${rootlibexecdir}/udev/rules.d/90-vconsole.rules \ - ${rootlibexecdir}/udev/rules.d/README \ - ${sysconfdir}/udev \ - ${sysconfdir}/init.d/systemd-udevd \ - ${systemd_system_unitdir}/*udev* \ - ${systemd_system_unitdir}/*.wants/*udev* \ - ${base_bindir}/systemd-hwdb \ - ${base_bindir}/udevadm \ - ${base_sbindir}/udevadm \ - ${libexecdir}/${MLPREFIX}udevadm \ - ${datadir}/bash-completion/completions/udevadm \ - ${systemd_system_unitdir}/systemd-hwdb-update.service \ - " - -FILES:udev-hwdb = "${rootlibexecdir}/udev/hwdb.d \ - " - -RCONFLICTS:${PN} = "tiny-init ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'resolvconf', '', d)}" - -INITSCRIPT_PACKAGES = "udev" -INITSCRIPT_NAME:udev = "systemd-udevd" -INITSCRIPT_PARAMS:udev = "start 03 S ." - -python __anonymous() { - if not bb.utils.contains('DISTRO_FEATURES', 'sysvinit', True, False, d): - d.setVar("INHIBIT_UPDATERCD_BBCLASS", "1") - - if bb.utils.contains('PACKAGECONFIG', 'repart', True, False, d) and not bb.utils.contains('PACKAGECONFIG', 'openssl', True, False, d): - bb.error("PACKAGECONFIG[repart] requires PACKAGECONFIG[openssl]") - - if bb.utils.contains('PACKAGECONFIG', 'homed', True, False, d) and not bb.utils.contains('PACKAGECONFIG', 'userdb openssl cryptsetup', True, False, d): - bb.error("PACKAGECONFIG[homed] requires PACKAGECONFIG[userdb], PACKAGECONFIG[openssl] and PACKAGECONFIG[cryptsetup]") -} - -python do_warn_musl() { - if d.getVar('TCLIBC') == "musl": - bb.warn("Using systemd with musl is not recommended since it is not supported upstream and some patches are known to be problematic.") -} -addtask warn_musl before do_configure - -ALTERNATIVE:${PN} = "halt reboot shutdown poweroff runlevel ${@bb.utils.contains('PACKAGECONFIG', 'resolved', 'resolv-conf', '', d)}" - -ALTERNATIVE_TARGET[resolv-conf] = "${sysconfdir}/resolv-conf.systemd" -ALTERNATIVE_LINK_NAME[resolv-conf] = "${sysconfdir}/resolv.conf" -ALTERNATIVE_PRIORITY[resolv-conf] ?= "50" - -ALTERNATIVE_TARGET[halt] = "${base_bindir}/systemctl" -ALTERNATIVE_LINK_NAME[halt] = "${base_sbindir}/halt" -ALTERNATIVE_PRIORITY[halt] ?= "300" - -ALTERNATIVE_TARGET[reboot] = "${base_bindir}/systemctl" -ALTERNATIVE_LINK_NAME[reboot] = "${base_sbindir}/reboot" -ALTERNATIVE_PRIORITY[reboot] ?= "300" - -ALTERNATIVE_TARGET[shutdown] = "${base_bindir}/systemctl" -ALTERNATIVE_LINK_NAME[shutdown] = "${base_sbindir}/shutdown" -ALTERNATIVE_PRIORITY[shutdown] ?= "300" - -ALTERNATIVE_TARGET[poweroff] = "${base_bindir}/systemctl" -ALTERNATIVE_LINK_NAME[poweroff] = "${base_sbindir}/poweroff" -ALTERNATIVE_PRIORITY[poweroff] ?= "300" - -ALTERNATIVE_TARGET[runlevel] = "${base_bindir}/systemctl" -ALTERNATIVE_LINK_NAME[runlevel] = "${base_sbindir}/runlevel" -ALTERNATIVE_PRIORITY[runlevel] ?= "300" - -pkg_postinst:${PN}:libc-glibc () { - sed -e '/^hosts:/s/\s*\//' \ - -e 's/\(^hosts:.*\)\(\\)\(.*\)\(\\)\(.*\)/\1\2 myhostname \3\4\5/' \ - -i $D${sysconfdir}/nsswitch.conf -} - -pkg_prerm:${PN}:libc-glibc () { - sed -e '/^hosts:/s/\s*\//' \ - -e '/^hosts:/s/\s*myhostname//' \ - -i $D${sysconfdir}/nsswitch.conf -} - -PACKAGE_WRITE_DEPS += "qemu-native" -pkg_postinst:udev-hwdb () { - if test -n "$D"; then - $INTERCEPT_DIR/postinst_intercept update_udev_hwdb ${PKG} mlprefix=${MLPREFIX} binprefix=${MLPREFIX} rootlibexecdir="${rootlibexecdir}" PREFERRED_PROVIDER_udev="${PREFERRED_PROVIDER_udev}" - else - udevadm hwdb --update - fi -} - -pkg_prerm:udev-hwdb () { - rm -f $D${sysconfdir}/udev/hwdb.bin -} diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0001-Export-of-internal-Abseil-changes.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0001-Export-of-internal-Abseil-changes.patch deleted file mode 100644 index 126b79261..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0001-Export-of-internal-Abseil-changes.patch +++ /dev/null @@ -1,87 +0,0 @@ -From c9250af98f48e4aa734cab0e2f5ae1f780c05ad0 Mon Sep 17 00:00:00 2001 -From: Zang Ruochen -Date: Fri, 11 Jun 2021 10:53:37 +0900 -Subject: [PATCH] Export of internal Abseil changes - --- -cf88f9cf40eab54c06bca7f20795352ec23bb583 by Derek Mauro : - -Fixes build with latest glibc -Fixes #952 - -PiperOrigin-RevId: 371693908 - --- -99bcd0f4a747ce7a401e23c745adf34d0ec5131b by Samuel Benzaquen : - -Add support for std::string_view in StrFormat even when -absl::string_view != std::string_view. - -PiperOrigin-RevId: 371693633 - --- -e35463572149a6c2d4a0d439b9300ce03fd6b96d by Abseil Team : - -Cmake builds should only install pkg-config when explicitly requested. - -PiperOrigin-RevId: 371403419 -GitOrigin-RevId: cf88f9cf40eab54c06bca7f20795352ec23bb583 -Change-Id: I4360a18c638a4d901ff44ab1e0a9d8f321c302ea - -Signed-off-by: Zang Ruochen ---- - CMake/AbseilHelpers.cmake | 3 ++- - absl/strings/internal/str_format/arg.h | 8 ++++++++ - absl/strings/internal/str_format/convert_test.cc | 3 +++ - 3 files changed, 13 insertions(+), 1 deletion(-) - -diff --git a/CMake/AbseilHelpers.cmake b/CMake/AbseilHelpers.cmake -index 54fb8df3..a32b94d5 100644 ---- a/CMake/AbseilHelpers.cmake -+++ b/CMake/AbseilHelpers.cmake -@@ -141,7 +141,8 @@ function(absl_cc_library) - endif() - - # Generate a pkg-config file for every library: -- if(_build_type STREQUAL "static" OR _build_type STREQUAL "shared") -+ if((_build_type STREQUAL "static" OR _build_type STREQUAL "shared") -+ AND ABSL_ENABLE_INSTALL) - if(NOT ABSL_CC_LIB_TESTONLY) - if(absl_VERSION) - set(PC_VERSION "${absl_VERSION}") -diff --git a/absl/strings/internal/str_format/arg.h b/absl/strings/internal/str_format/arg.h -index 7040c866..3c91be70 100644 ---- a/absl/strings/internal/str_format/arg.h -+++ b/absl/strings/internal/str_format/arg.h -@@ -122,6 +122,14 @@ StringConvertResult FormatConvertImpl(const std::string& v, - StringConvertResult FormatConvertImpl(string_view v, - FormatConversionSpecImpl conv, - FormatSinkImpl* sink); -+#if defined(ABSL_HAVE_STD_STRING_VIEW) && !defined(ABSL_USES_STD_STRING_VIEW) -+inline StringConvertResult FormatConvertImpl(std::string_view v, -+ FormatConversionSpecImpl conv, -+ FormatSinkImpl* sink) { -+ return FormatConvertImpl(absl::string_view(v.data(), v.size()), conv, sink); -+} -+#endif // ABSL_HAVE_STD_STRING_VIEW && !ABSL_USES_STD_STRING_VIEW -+ - ArgConvertResult - FormatConvertImpl(const char* v, const FormatConversionSpecImpl conv, -diff --git a/absl/strings/internal/str_format/convert_test.cc b/absl/strings/internal/str_format/convert_test.cc -index 926283cf..91e03609 100644 ---- a/absl/strings/internal/str_format/convert_test.cc -+++ b/absl/strings/internal/str_format/convert_test.cc -@@ -229,6 +229,9 @@ TEST_F(FormatConvertTest, BasicString) { - TestStringConvert(static_cast("hello")); - TestStringConvert(std::string("hello")); - TestStringConvert(string_view("hello")); -+#if defined(ABSL_HAVE_STD_STRING_VIEW) -+ TestStringConvert(std::string_view("hello")); -+#endif // ABSL_HAVE_STD_STRING_VIEW - } - - TEST_F(FormatConvertTest, NullString) { --- -2.25.1 - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0001-absl-always-use-asm-sgidefs.h.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0001-absl-always-use-asm-sgidefs.h.patch deleted file mode 100644 index 2bafcc6b1..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0001-absl-always-use-asm-sgidefs.h.patch +++ /dev/null @@ -1,38 +0,0 @@ -From 8f21fdfb83b0fa844a9f1f03a86a9ca46642d85e Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Thu, 9 Apr 2020 13:06:27 -0700 -Subject: [PATCH 1/2] absl: always use - -Fixes mips/musl build, since sgidefs.h is not present on all C libraries -but on linux asm/sgidefs.h is there and contains same definitions, using -that makes it portable. - -Upstream-Status: Pending - -Signed-off-by: Khem Raj ---- - absl/base/internal/direct_mmap.h | 6 +----- - 1 file changed, 1 insertion(+), 5 deletions(-) - -diff --git a/absl/base/internal/direct_mmap.h b/absl/base/internal/direct_mmap.h -index 16accf096604..ba7936cc934e 100644 ---- a/absl/base/internal/direct_mmap.h -+++ b/absl/base/internal/direct_mmap.h -@@ -41,13 +41,9 @@ - - #ifdef __mips__ - // Include definitions of the ABI currently in use. --#ifdef __BIONIC__ --// Android doesn't have sgidefs.h, but does have asm/sgidefs.h, which has the -+// bionic/musl C libs don't have sgidefs.h, but do have asm/sgidefs.h, which has the - // definitions we need. - #include --#else --#include --#endif // __BIONIC__ - #endif // __mips__ - - // SYS_mmap and SYS_munmap are not defined in Android. --- -2.25.1 - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0002-Remove-maes-option-from-cross-compilation.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0002-Remove-maes-option-from-cross-compilation.patch deleted file mode 100644 index da9dbd936..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/0002-Remove-maes-option-from-cross-compilation.patch +++ /dev/null @@ -1,37 +0,0 @@ -From a9e15a4855c82eb948dedeecd83d5e17c3c8f767 Mon Sep 17 00:00:00 2001 -From: Sinan Kaya -Date: Mon, 3 Feb 2020 03:25:57 +0000 -Subject: [PATCH 2/2] Remove maes option from cross-compilation - ---- - absl/copts/GENERATED_AbseilCopts.cmake | 4 ---- - absl/copts/GENERATED_copts.bzl | 4 ---- - 2 files changed, 8 deletions(-) - -diff --git a/absl/copts/GENERATED_AbseilCopts.cmake b/absl/copts/GENERATED_AbseilCopts.cmake -index 97bd283eb739..ce29ac031b9c 100644 ---- a/absl/copts/GENERATED_AbseilCopts.cmake -+++ b/absl/copts/GENERATED_AbseilCopts.cmake -@@ -210,7 +210,3 @@ list(APPEND ABSL_RANDOM_HWAES_ARM64_FLAGS - list(APPEND ABSL_RANDOM_HWAES_MSVC_X64_FLAGS - ) - --list(APPEND ABSL_RANDOM_HWAES_X64_FLAGS -- "-maes" -- "-msse4.1" --) -diff --git a/absl/copts/GENERATED_copts.bzl b/absl/copts/GENERATED_copts.bzl -index bcdd61ef8211..3e8eddd4bb08 100644 ---- a/absl/copts/GENERATED_copts.bzl -+++ b/absl/copts/GENERATED_copts.bzl -@@ -211,7 +211,3 @@ ABSL_RANDOM_HWAES_ARM64_FLAGS = [ - ABSL_RANDOM_HWAES_MSVC_X64_FLAGS = [ - ] - --ABSL_RANDOM_HWAES_X64_FLAGS = [ -- "-maes", -- "-msse4.1", --] --- -2.25.1 - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/abseil-ppc-fixes.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/abseil-ppc-fixes.patch deleted file mode 100644 index a4937e1b3..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp/abseil-ppc-fixes.patch +++ /dev/null @@ -1,78 +0,0 @@ -An all-in-one patch that fixes several issues: - -1) UnscaledCycleClock not fully implemented for ppc*-musl (disabled on musl) -2) powerpc stacktrace implementation only works on glibc (disabled on musl) -3) powerpc stacktrace implementation has ppc64 assumptions (fixed) -4) examine_stack.cpp makes glibc assumptions on powerpc (fixed) - -Sourced from void linux - -Signed-off-by: Khem Raj - ---- a/absl/base/internal/unscaledcycleclock.cc -+++ b/absl/base/internal/unscaledcycleclock.cc -@@ -20,7 +20,7 @@ - #include - #endif - --#if defined(__powerpc__) || defined(__ppc__) -+#if (defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__) - #ifdef __GLIBC__ - #include - #elif defined(__FreeBSD__) -@@ -59,7 +59,7 @@ double UnscaledCycleClock::Frequency() { - return base_internal::NominalCPUFrequency(); - } - --#elif defined(__powerpc__) || defined(__ppc__) -+#elif (defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__) - - int64_t UnscaledCycleClock::Now() { - #ifdef __GLIBC__ ---- a/absl/base/internal/unscaledcycleclock.h -+++ b/absl/base/internal/unscaledcycleclock.h -@@ -46,7 +46,7 @@ - - // The following platforms have an implementation of a hardware counter. - #if defined(__i386__) || defined(__x86_64__) || defined(__aarch64__) || \ -- defined(__powerpc__) || defined(__ppc__) || \ -+ ((defined(__powerpc__) || defined(__ppc__)) && defined(__GLIBC__)) || \ - defined(_M_IX86) || defined(_M_X64) - #define ABSL_HAVE_UNSCALED_CYCLECLOCK_IMPLEMENTATION 1 - #else ---- a/absl/debugging/internal/examine_stack.cc -+++ b/absl/debugging/internal/examine_stack.cc -@@ -27,6 +27,10 @@ - #include - #include - -+#if defined(__powerpc__) -+#include -+#endif -+ - #include "absl/base/attributes.h" - #include "absl/base/internal/raw_logging.h" - #include "absl/base/macros.h" -@@ -63,8 +67,10 @@ void* GetProgramCounter(void* vuc) { - return reinterpret_cast(context->uc_mcontext.pc); - #elif defined(__powerpc64__) - return reinterpret_cast(context->uc_mcontext.gp_regs[32]); --#elif defined(__powerpc__) -+#elif defined(__powerpc__) && defined(__GLIBC__) - return reinterpret_cast(context->uc_mcontext.uc_regs->gregs[32]); -+#elif defined(__powerpc__) -+ return reinterpret_cast(((struct pt_regs *)context->uc_regs)->gregs[32]); - #elif defined(__riscv) - return reinterpret_cast(context->uc_mcontext.__gregs[REG_PC]); - #elif defined(__s390__) && !defined(__s390x__) ---- a/absl/debugging/internal/stacktrace_config.h -+++ b/absl/debugging/internal/stacktrace_config.h -@@ -55,7 +55,7 @@ - #elif defined(__i386__) || defined(__x86_64__) - #define ABSL_STACKTRACE_INL_HEADER \ - "absl/debugging/internal/stacktrace_x86-inl.inc" --#elif defined(__ppc__) || defined(__PPC__) -+#elif (defined(__ppc__) || defined(__PPC__)) && defined(__GLIBC__) - #define ABSL_STACKTRACE_INL_HEADER \ - "absl/debugging/internal/stacktrace_powerpc-inl.inc" - #elif defined(__aarch64__) diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp_git.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp_git.bb deleted file mode 100644 index 37d5d8123..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/abseil-cpp/abseil-cpp_git.bb +++ /dev/null @@ -1,34 +0,0 @@ -SUMMARY = "Abseil is a cpp library like STL" -DESCRIPTION = "Abseil provides pieces missing from the C++ standard. Contains \ -additional useful libraries like algorithm, container, debugging, hash, memory, \ -meta, numeric, strings, synchronization, time, types and utility" -HOMEPAGE = "https://abseil.io/" -SECTION = "libs" -LICENSE = "Apache-2.0" -LIC_FILES_CHKSUM = "file://LICENSE;md5=df52c6edb7adc22e533b2bacc3bd3915" - -PV = "20210324.2+git${SRCPV}" -SRCREV = "278e0a071885a22dcd2fd1b5576cc44757299343" -BRANCH = "lts_2021_03_24" -SRC_URI = "git://github.com/abseil/abseil-cpp;branch=${BRANCH};protocol=https \ - file://0001-absl-always-use-asm-sgidefs.h.patch \ - file://0002-Remove-maes-option-from-cross-compilation.patch \ - file://abseil-ppc-fixes.patch \ - file://0001-Export-of-internal-Abseil-changes.patch \ - " - -S = "${WORKDIR}/git" - -ASNEEDED:class-native = "" -ASNEEDED:class-nativesdk = "" - -inherit cmake - -EXTRA_OECMAKE = "-DBUILD_SHARED_LIBS=ON \ - -DBUILD_TESTING=OFF \ - -DCMAKE_CXX_STANDARD=14 \ - " - -BBCLASSEXTEND = "native nativesdk" - -FILES:${PN}-dev += "${includedir} ${libdir}/cmake ${libdir}/pkgconfig" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16.15.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16.15.inc deleted file mode 100644 index 50772346d..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16.15.inc +++ /dev/null @@ -1,25 +0,0 @@ -require go-common.inc - -GO_BASEVERSION = "1.16" -PV = "1.16.15" -FILESEXTRAPATHS:prepend := "${FILE_DIRNAME}/go-${GO_BASEVERSION}:" - -LIC_FILES_CHKSUM = "file://LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707" - -SRC_URI += "\ - file://0001-allow-CC-and-CXX-to-have-multiple-words.patch \ - file://0002-cmd-go-make-content-based-hash-generation-less-pedan.patch \ - file://0003-allow-GOTOOLDIR-to-be-overridden-in-the-environment.patch \ - file://0004-ld-add-soname-to-shareable-objects.patch \ - file://0005-make.bash-override-CC-when-building-dist-and-go_boot.patch \ - file://0006-cmd-dist-separate-host-and-target-builds.patch \ - file://0007-cmd-go-make-GOROOT-precious-by-default.patch \ - file://0008-use-GOBUILDMODE-to-set-buildmode.patch \ - file://0009-Revert-cmd-go-make-sure-CC-and-CXX-are-absolute.patch \ -" -SRC_URI[main.sha256sum] = "90a08c689279e35f3865ba510998c33a63255c36089b3ec206c912fc0568c3d3" - -# Upstream don't believe it is a signifiant real world issue and will only -# fix in 1.17 onwards where we can drop this. -# https://github.com/golang/go/issues/30999#issuecomment-910470358 -CVE_CHECK_WHITELIST += "CVE-2021-29923" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0001-allow-CC-and-CXX-to-have-multiple-words.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0001-allow-CC-and-CXX-to-have-multiple-words.patch deleted file mode 100644 index 5f4823be2..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0001-allow-CC-and-CXX-to-have-multiple-words.patch +++ /dev/null @@ -1,33 +0,0 @@ -From 9e3dc44cdfa58d96504d0a789dc82617dd5bef55 Mon Sep 17 00:00:00 2001 -From: Alex Kube -Date: Wed, 23 Oct 2019 21:01:13 +0430 -Subject: [PATCH 1/9] cmd/go: Allow CC and CXX to have multiple words - -Upstream-Status: Inappropriate [OE specific] - -Adapted to Go 1.13 from patches originally submitted to -the meta/recipes-devtools/go tree by -Matt Madison . - -Signed-off-by: Alexander J Kube - ---- - src/cmd/go/internal/envcmd/env.go | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - ---- a/src/cmd/go/internal/envcmd/env.go -+++ b/src/cmd/go/internal/envcmd/env.go -@@ -103,11 +103,11 @@ func MkEnv() []cfg.EnvVar { - - cc := cfg.DefaultCC(cfg.Goos, cfg.Goarch) - if env := strings.Fields(cfg.Getenv("CC")); len(env) > 0 { -- cc = env[0] -+ cc = strings.Join(env, " ") - } - cxx := cfg.DefaultCXX(cfg.Goos, cfg.Goarch) - if env := strings.Fields(cfg.Getenv("CXX")); len(env) > 0 { -- cxx = env[0] -+ cxx = strings.Join(env, " ") - } - env = append(env, cfg.EnvVar{Name: "AR", Value: envOr("AR", "ar")}) - env = append(env, cfg.EnvVar{Name: "CC", Value: cc}) diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0002-cmd-go-make-content-based-hash-generation-less-pedan.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0002-cmd-go-make-content-based-hash-generation-less-pedan.patch deleted file mode 100644 index 04d0e496c..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0002-cmd-go-make-content-based-hash-generation-less-pedan.patch +++ /dev/null @@ -1,219 +0,0 @@ -From a13ae484e41139094505d2834437e9262a5315f7 Mon Sep 17 00:00:00 2001 -From: Alex Kube -Date: Wed, 23 Oct 2019 21:14:22 +0430 -Subject: [PATCH 2/9] cmd/go: make content-based hash generation less pedantic - -Upstream-Status: Inappropriate [OE specific] - -Go 1.10's build tool now uses content-based hashes to -determine when something should be built or re-built. -This same mechanism is used to maintain a built-artifact -cache for speeding up builds. - -However, the hashes it generates include information that -doesn't work well with OE, nor with using a shared runtime -library. - -First, it embeds path names to source files, unless -building within GOROOT. This prevents the building -of a package in GOPATH for later staging into GOROOT. - -This patch adds support for the environment variable -GOPATH_OMIT_IN_ACTIONID. If present, path name -embedding is disabled. - -Second, if cgo is enabled, the build ID for cgo-related -packages will include the current value of the environment -variables for invoking the compiler (CC, CXX, FC) and -any CGO_xxFLAGS variables. Only if the settings used -during a compilation exactly match, character for character, -the values used for compiling runtime/cgo or any other -cgo-enabled package being imported, will the tool -decide that the imported package is up-to-date. - -This is done to help ensure correctness, but is overly -simplistic and effectively prevents the reuse of built -artifacts that use cgo (or shared runtime, which includes -runtime/cgo). - -This patch filters out all compiler flags except those -beginning with '-m'. The default behavior can be restored -by setting the CGO_PEDANTIC environment variable. - -Adapted to Go 1.13 from patches originally submitted to -the meta/recipes-devtools/go tree by -Matt Madison . - -Signed-off-by: Alexander J Kube ---- - src/cmd/go/internal/envcmd/env.go | 2 +- - src/cmd/go/internal/work/exec.go | 66 ++++++++++++++++++++++--------- - 2 files changed, 49 insertions(+), 19 deletions(-) - ---- a/src/cmd/go/internal/envcmd/env.go -+++ b/src/cmd/go/internal/envcmd/env.go -@@ -157,7 +157,7 @@ func ExtraEnvVars() []cfg.EnvVar { - func ExtraEnvVarsCostly() []cfg.EnvVar { - var b work.Builder - b.Init() -- cppflags, cflags, cxxflags, fflags, ldflags, err := b.CFlags(&load.Package{}) -+ cppflags, cflags, cxxflags, fflags, ldflags, err := b.CFlags(&load.Package{}, false) - if err != nil { - // Should not happen - b.CFlags was given an empty package. - fmt.Fprintf(os.Stderr, "go: invalid cflags: %v\n", err) ---- a/src/cmd/go/internal/work/exec.go -+++ b/src/cmd/go/internal/work/exec.go -@@ -37,6 +37,8 @@ import ( - "cmd/go/internal/trace" - ) - -+var omitGopath = os.Getenv("GOPATH_OMIT_IN_ACTIONID") != "" -+ - // actionList returns the list of actions in the dag rooted at root - // as visited in a depth-first post-order traversal. - func actionList(root *Action) []*Action { -@@ -228,7 +230,7 @@ func (b *Builder) buildActionID(a *Actio - // Assume b.WorkDir is being trimmed properly. - // When -trimpath is used with a package built from the module cache, - // use the module path and version instead of the directory. -- if !p.Goroot && !cfg.BuildTrimpath && !strings.HasPrefix(p.Dir, b.WorkDir) { -+ if !p.Goroot && !omitGopath && !cfg.BuildTrimpath && !strings.HasPrefix(p.Dir, b.WorkDir) { - fmt.Fprintf(h, "dir %s\n", p.Dir) - } else if cfg.BuildTrimpath && p.Module != nil { - fmt.Fprintf(h, "module %s@%s\n", p.Module.Path, p.Module.Version) -@@ -247,13 +249,13 @@ func (b *Builder) buildActionID(a *Actio - } - if len(p.CgoFiles)+len(p.SwigFiles) > 0 { - fmt.Fprintf(h, "cgo %q\n", b.toolID("cgo")) -- cppflags, cflags, cxxflags, fflags, ldflags, _ := b.CFlags(p) -- fmt.Fprintf(h, "CC=%q %q %q %q\n", b.ccExe(), cppflags, cflags, ldflags) -+ cppflags, cflags, cxxflags, fflags, ldflags, _ := b.CFlags(p, true) -+ fmt.Fprintf(h, "CC=%q %q %q %q\n", b.ccExe(true), cppflags, cflags, ldflags) - if len(p.CXXFiles)+len(p.SwigFiles) > 0 { -- fmt.Fprintf(h, "CXX=%q %q\n", b.cxxExe(), cxxflags) -+ fmt.Fprintf(h, "CXX=%q %q\n", b.cxxExe(true), cxxflags) - } - if len(p.FFiles) > 0 { -- fmt.Fprintf(h, "FC=%q %q\n", b.fcExe(), fflags) -+ fmt.Fprintf(h, "FC=%q %q\n", b.fcExe(true), fflags) - } - // TODO(rsc): Should we include the SWIG version or Fortran/GCC/G++/Objective-C compiler versions? - } -@@ -2401,33 +2403,48 @@ var ( - // gccCmd returns a gcc command line prefix - // defaultCC is defined in zdefaultcc.go, written by cmd/dist. - func (b *Builder) GccCmd(incdir, workdir string) []string { -- return b.compilerCmd(b.ccExe(), incdir, workdir) -+ return b.compilerCmd(b.ccExe(false), incdir, workdir) - } - - // gxxCmd returns a g++ command line prefix - // defaultCXX is defined in zdefaultcc.go, written by cmd/dist. - func (b *Builder) GxxCmd(incdir, workdir string) []string { -- return b.compilerCmd(b.cxxExe(), incdir, workdir) -+ return b.compilerCmd(b.cxxExe(false), incdir, workdir) - } - - // gfortranCmd returns a gfortran command line prefix. - func (b *Builder) gfortranCmd(incdir, workdir string) []string { -- return b.compilerCmd(b.fcExe(), incdir, workdir) -+ return b.compilerCmd(b.fcExe(false), incdir, workdir) - } - - // ccExe returns the CC compiler setting without all the extra flags we add implicitly. --func (b *Builder) ccExe() []string { -- return b.compilerExe(origCC, cfg.DefaultCC(cfg.Goos, cfg.Goarch)) -+func (b *Builder) ccExe(filtered bool) []string { -+ return b.compilerExe(origCC, cfg.DefaultCC(cfg.Goos, cfg.Goarch), filtered) - } - - // cxxExe returns the CXX compiler setting without all the extra flags we add implicitly. --func (b *Builder) cxxExe() []string { -- return b.compilerExe(origCXX, cfg.DefaultCXX(cfg.Goos, cfg.Goarch)) -+func (b *Builder) cxxExe(filtered bool) []string { -+ return b.compilerExe(origCXX, cfg.DefaultCXX(cfg.Goos, cfg.Goarch), filtered) - } - - // fcExe returns the FC compiler setting without all the extra flags we add implicitly. --func (b *Builder) fcExe() []string { -- return b.compilerExe(cfg.Getenv("FC"), "gfortran") -+func (b *Builder) fcExe(filtered bool) []string { -+ return b.compilerExe(os.Getenv("FC"), "gfortran", filtered) -+} -+ -+var filterFlags = os.Getenv("CGO_PEDANTIC") == "" -+ -+func filterCompilerFlags(flags []string) []string { -+ var newflags []string -+ if !filterFlags { -+ return flags -+ } -+ for _, flag := range flags { -+ if strings.HasPrefix(flag, "-m") { -+ newflags = append(newflags, flag) -+ } -+ } -+ return newflags - } - - // compilerExe returns the compiler to use given an -@@ -2436,11 +2453,16 @@ func (b *Builder) fcExe() []string { - // of the compiler but can have additional arguments if they - // were present in the environment value. - // For example if CC="gcc -DGOPHER" then the result is ["gcc", "-DGOPHER"]. --func (b *Builder) compilerExe(envValue string, def string) []string { -+func (b *Builder) compilerExe(envValue string, def string, filtered bool) []string { - compiler := strings.Fields(envValue) - if len(compiler) == 0 { - compiler = strings.Fields(def) - } -+ -+ if filtered { -+ return append(compiler[0:1], filterCompilerFlags(compiler[1:])...) -+ } -+ - return compiler - } - -@@ -2620,7 +2642,7 @@ func envList(key, def string) []string { - } - - // CFlags returns the flags to use when invoking the C, C++ or Fortran compilers, or cgo. --func (b *Builder) CFlags(p *load.Package) (cppflags, cflags, cxxflags, fflags, ldflags []string, err error) { -+func (b *Builder) CFlags(p *load.Package, filtered bool) (cppflags, cflags, cxxflags, fflags, ldflags []string, err error) { - defaults := "-g -O2" - - if cppflags, err = buildFlags("CPPFLAGS", "", p.CgoCPPFLAGS, checkCompilerFlags); err != nil { -@@ -2639,6 +2661,14 @@ func (b *Builder) CFlags(p *load.Package - return - } - -+ if filtered { -+ cppflags = filterCompilerFlags(cppflags) -+ cflags = filterCompilerFlags(cflags) -+ cxxflags = filterCompilerFlags(cxxflags) -+ fflags = filterCompilerFlags(fflags) -+ ldflags = filterCompilerFlags(ldflags) -+ } -+ - return - } - -@@ -2653,7 +2683,7 @@ var cgoRe = lazyregexp.New(`[/\\:]`) - - func (b *Builder) cgo(a *Action, cgoExe, objdir string, pcCFLAGS, pcLDFLAGS, cgofiles, gccfiles, gxxfiles, mfiles, ffiles []string) (outGo, outObj []string, err error) { - p := a.Package -- cgoCPPFLAGS, cgoCFLAGS, cgoCXXFLAGS, cgoFFLAGS, cgoLDFLAGS, err := b.CFlags(p) -+ cgoCPPFLAGS, cgoCFLAGS, cgoCXXFLAGS, cgoFFLAGS, cgoLDFLAGS, err := b.CFlags(p, false) - if err != nil { - return nil, nil, err - } -@@ -3104,7 +3134,7 @@ func (b *Builder) swigIntSize(objdir str - - // Run SWIG on one SWIG input file. - func (b *Builder) swigOne(a *Action, p *load.Package, file, objdir string, pcCFLAGS []string, cxx bool, intgosize string) (outGo, outC string, err error) { -- cgoCPPFLAGS, cgoCFLAGS, cgoCXXFLAGS, _, _, err := b.CFlags(p) -+ cgoCPPFLAGS, cgoCFLAGS, cgoCXXFLAGS, _, _, err := b.CFlags(p, false) - if err != nil { - return "", "", err - } diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0003-allow-GOTOOLDIR-to-be-overridden-in-the-environment.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0003-allow-GOTOOLDIR-to-be-overridden-in-the-environment.patch deleted file mode 100644 index 662c70547..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0003-allow-GOTOOLDIR-to-be-overridden-in-the-environment.patch +++ /dev/null @@ -1,47 +0,0 @@ -From 28ada8896b76d620240bafc22aa395071d601482 Mon Sep 17 00:00:00 2001 -From: Alex Kube -Date: Wed, 23 Oct 2019 21:15:37 +0430 -Subject: [PATCH 3/9] cmd/go: Allow GOTOOLDIR to be overridden in the environment - -to allow for split host/target build roots - -Adapted to Go 1.13 from patches originally submitted to -the meta/recipes-devtools/go tree by -Matt Madison . - -Upstream-Status: Inappropriate [OE specific] - -Signed-off-by: Alexander J Kube ---- - src/cmd/dist/build.go | 4 +++- - src/cmd/go/internal/cfg/cfg.go | 6 +++++- - 2 files changed, 8 insertions(+), 2 deletions(-) - ---- a/src/cmd/dist/build.go -+++ b/src/cmd/dist/build.go -@@ -246,7 +246,9 @@ func xinit() { - workdir = xworkdir() - xatexit(rmworkdir) - -- tooldir = pathf("%s/pkg/tool/%s_%s", goroot, gohostos, gohostarch) -+ if tooldir = os.Getenv("GOTOOLDIR"); tooldir == "" { -+ tooldir = pathf("%s/pkg/tool/%s_%s", goroot, gohostos, gohostarch) -+ } - } - - // compilerEnv returns a map from "goos/goarch" to the ---- a/src/cmd/go/internal/cfg/cfg.go -+++ b/src/cmd/go/internal/cfg/cfg.go -@@ -64,7 +64,11 @@ func defaultContext() build.Context { - // variables. This matches the initialization of ToolDir in - // go/build, except for using ctxt.GOROOT rather than - // runtime.GOROOT. -- build.ToolDir = filepath.Join(ctxt.GOROOT, "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH) -+ if s := os.Getenv("GOTOOLDIR"); s != "" { -+ build.ToolDir = filepath.Clean(s) -+ } else { -+ build.ToolDir = filepath.Join(ctxt.GOROOT, "pkg/tool/"+runtime.GOOS+"_"+runtime.GOARCH) -+ } - } - - ctxt.GOPATH = envOr("GOPATH", ctxt.GOPATH) diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0004-ld-add-soname-to-shareable-objects.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0004-ld-add-soname-to-shareable-objects.patch deleted file mode 100644 index cd875f116..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0004-ld-add-soname-to-shareable-objects.patch +++ /dev/null @@ -1,45 +0,0 @@ -From bf5cf5301ae5914498454c87293d1df2e1d8489f Mon Sep 17 00:00:00 2001 -From: Alex Kube -Date: Wed, 23 Oct 2019 21:16:32 +0430 -Subject: [PATCH 4/9] ld: add soname to shareable objects - -so that OE's shared library dependency handling -can find them. - -Adapted to Go 1.13 from patches originally submitted to -the meta/recipes-devtools/go tree by -Matt Madison . - -Upstream-Status: Inappropriate [OE specific] - -Signed-off-by: Alexander J Kube ---- - src/cmd/link/internal/ld/lib.go | 3 +++ - 1 file changed, 3 insertions(+) - ---- a/src/cmd/link/internal/ld/lib.go -+++ b/src/cmd/link/internal/ld/lib.go -@@ -1343,6 +1343,7 @@ func (ctxt *Link) hostlink() { - argv = append(argv, "-Wl,-z,relro") - } - argv = append(argv, "-shared") -+ argv = append(argv, fmt.Sprintf("-Wl,-soname,%s", filepath.Base(*flagOutfile))) - if ctxt.HeadType == objabi.Hwindows { - if *flagAslr { - argv = addASLRargs(argv) -@@ -1358,6 +1359,7 @@ func (ctxt *Link) hostlink() { - argv = append(argv, "-Wl,-z,relro") - } - argv = append(argv, "-shared") -+ argv = append(argv, fmt.Sprintf("-Wl,-soname,%s", filepath.Base(*flagOutfile))) - case BuildModePlugin: - if ctxt.HeadType == objabi.Hdarwin { - argv = append(argv, "-dynamiclib") -@@ -1366,6 +1368,7 @@ func (ctxt *Link) hostlink() { - argv = append(argv, "-Wl,-z,relro") - } - argv = append(argv, "-shared") -+ argv = append(argv, fmt.Sprintf("-Wl,-soname,%s", filepath.Base(*flagOutfile))) - } - } - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0005-make.bash-override-CC-when-building-dist-and-go_boot.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0005-make.bash-override-CC-when-building-dist-and-go_boot.patch deleted file mode 100644 index 59c12d954..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0005-make.bash-override-CC-when-building-dist-and-go_boot.patch +++ /dev/null @@ -1,39 +0,0 @@ -From f05ef3ded52b98537c10efd0b15cd9612471524d Mon Sep 17 00:00:00 2001 -From: Alex Kube -Date: Wed, 23 Oct 2019 21:17:16 +0430 -Subject: [PATCH 5/9] make.bash: override CC when building dist and - go_bootstrap - -for handling OE cross-canadian builds. - -Adapted to Go 1.13 from patches originally submitted to -the meta/recipes-devtools/go tree by -Matt Madison . - -Upstream-Status: Inappropriate [OE specific] - -Signed-off-by: Alexander J Kube ---- - src/make.bash | 4 ++-- - 1 file changed, 2 insertions(+), 2 deletions(-) - ---- a/src/make.bash -+++ b/src/make.bash -@@ -178,7 +178,7 @@ if [ "$GOROOT_BOOTSTRAP" = "$GOROOT" ]; - exit 1 - fi - rm -f cmd/dist/dist --GOROOT="$GOROOT_BOOTSTRAP" GOOS="" GOARCH="" GO111MODULE=off "$GOROOT_BOOTSTRAP/bin/go" build -o cmd/dist/dist ./cmd/dist -+CC="${BUILD_CC:-${CC}}" GOROOT="$GOROOT_BOOTSTRAP" GOOS="" GOARCH="" GO111MODULE=off "$GOROOT_BOOTSTRAP/bin/go" build -o cmd/dist/dist ./cmd/dist - - # -e doesn't propagate out of eval, so check success by hand. - eval $(./cmd/dist/dist env -p || echo FAIL=true) -@@ -209,7 +209,7 @@ fi - # Run dist bootstrap to complete make.bash. - # Bootstrap installs a proper cmd/dist, built with the new toolchain. - # Throw ours, built with Go 1.4, away after bootstrap. --./cmd/dist/dist bootstrap $buildall $vflag $GO_DISTFLAGS "$@" -+CC="${BUILD_CC:-${CC}}" ./cmd/dist/dist bootstrap $buildall $vflag $GO_DISTFLAGS "$@" - rm -f ./cmd/dist/dist - - # DO NOT ADD ANY NEW CODE HERE. diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0006-cmd-dist-separate-host-and-target-builds.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0006-cmd-dist-separate-host-and-target-builds.patch deleted file mode 100644 index 7aee0bac4..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0006-cmd-dist-separate-host-and-target-builds.patch +++ /dev/null @@ -1,274 +0,0 @@ -From 10735bb84df17ba657f76835f483cd8543a879c1 Mon Sep 17 00:00:00 2001 -From: Alex Kube -Date: Wed, 23 Oct 2019 21:18:12 +0430 -Subject: [PATCH 6/9] cmd/dist: separate host and target builds - -Upstream-Status: Inappropriate [OE specific] - -Change the dist tool to allow for OE-style cross- -and cross-canadian builds: - - - command flags --host-only and --target only are added; - if one is present, the other changes mentioned below - take effect, and arguments may also be specified on - the command line to enumerate the package(s) to be - built. - - - for OE cross builds, go_bootstrap is always built for - the current build host, and is moved, along with the supporting - toolchain (asm, compile, etc.) to a separate 'native_native' - directory under GOROOT/pkg/tool. - - - go_bootstrap is not automatically removed after the build, - so it can be reused later (e.g., building both static and - shared runtime). - -Note that for --host-only builds, it would be nice to specify -just the "cmd" package to build only the go commands/tools, -the staleness checks in the dist tool will fail if the "std" -library has not also been built. So host-only builds have to -build everything anyway. - -Adapted to Go 1.13 from patches originally submitted to -the meta/recipes-devtools/go tree by -Matt Madison . - -Signed-off-by: Alexander J Kube ---- - src/cmd/dist/build.go | 155 ++++++++++++++++++++++++++++++------------ - 1 file changed, 112 insertions(+), 43 deletions(-) - ---- a/src/cmd/dist/build.go -+++ b/src/cmd/dist/build.go -@@ -41,6 +41,7 @@ var ( - goldflags string - workdir string - tooldir string -+ build_tooldir string - oldgoos string - oldgoarch string - exe string -@@ -53,6 +54,7 @@ var ( - - rebuildall bool - defaultclang bool -+ crossBuild bool - - vflag int // verbosity - ) -@@ -249,6 +251,8 @@ func xinit() { - if tooldir = os.Getenv("GOTOOLDIR"); tooldir == "" { - tooldir = pathf("%s/pkg/tool/%s_%s", goroot, gohostos, gohostarch) - } -+ -+ build_tooldir = pathf("%s/pkg/tool/native_native", goroot) - } - - // compilerEnv returns a map from "goos/goarch" to the -@@ -480,8 +484,10 @@ func setup() { - p := pathf("%s/pkg/%s_%s", goroot, gohostos, gohostarch) - if rebuildall { - xremoveall(p) -+ xremoveall(build_tooldir) - } - xmkdirall(p) -+ xmkdirall(build_tooldir) - - if goos != gohostos || goarch != gohostarch { - p := pathf("%s/pkg/%s_%s", goroot, goos, goarch) -@@ -1244,12 +1250,29 @@ func cmdbootstrap() { - - var noBanner bool - var debug bool -+ var hostOnly bool -+ var targetOnly bool -+ var toBuild = []string{"std", "cmd"} -+ - flag.BoolVar(&rebuildall, "a", rebuildall, "rebuild all") - flag.BoolVar(&debug, "d", debug, "enable debugging of bootstrap process") - flag.BoolVar(&noBanner, "no-banner", noBanner, "do not print banner") -+ flag.BoolVar(&hostOnly, "host-only", hostOnly, "build only host binaries, not target") -+ flag.BoolVar(&targetOnly, "target-only", targetOnly, "build only target binaries, not host") - -- xflagparse(0) -+ xflagparse(-1) - -+ if hostOnly && targetOnly { -+ fatalf("specify only one of --host-only or --target-only\n") -+ } -+ crossBuild = hostOnly || targetOnly -+ if flag.NArg() > 0 { -+ if crossBuild { -+ toBuild = flag.Args() -+ } else { -+ fatalf("package names not permitted without --host-only or --target-only\n") -+ } -+ } - // Set GOPATH to an internal directory. We shouldn't actually - // need to store files here, since the toolchain won't - // depend on modules outside of vendor directories, but if -@@ -1303,8 +1326,13 @@ func cmdbootstrap() { - xprintf("\n") - } - -- gogcflags = os.Getenv("GO_GCFLAGS") // we were using $BOOT_GO_GCFLAGS until now -- goldflags = os.Getenv("GO_LDFLAGS") // we were using $BOOT_GO_LDFLAGS until now -+ // For split host/target cross/cross-canadian builds, we don't -+ // want to be setting these flags until after we have compiled -+ // the toolchain that runs on the build host. -+ if !crossBuild { -+ gogcflags = os.Getenv("GO_GCFLAGS") // we were using $BOOT_GO_GCFLAGS until now -+ goldflags = os.Getenv("GO_LDFLAGS") // we were using $BOOT_GO_LDFLAGS until now -+ } - goBootstrap := pathf("%s/go_bootstrap", tooldir) - cmdGo := pathf("%s/go", gobin) - if debug { -@@ -1333,7 +1361,11 @@ func cmdbootstrap() { - xprintf("\n") - } - xprintf("Building Go toolchain2 using go_bootstrap and Go toolchain1.\n") -- os.Setenv("CC", compilerEnvLookup(defaultcc, goos, goarch)) -+ if crossBuild { -+ os.Setenv("CC", defaultcc[""]) -+ } else { -+ os.Setenv("CC", compilerEnvLookup(defaultcc, goos, goarch)) -+ } - goInstall(goBootstrap, append([]string{"-i"}, toolchain...)...) - if debug { - run("", ShowOutput|CheckExit, pathf("%s/compile", tooldir), "-V=full") -@@ -1370,50 +1402,84 @@ func cmdbootstrap() { - } - checkNotStale(goBootstrap, append(toolchain, "runtime/internal/sys")...) - -- if goos == oldgoos && goarch == oldgoarch { -- // Common case - not setting up for cross-compilation. -- timelog("build", "toolchain") -- if vflag > 0 { -- xprintf("\n") -+ if crossBuild { -+ gogcflags = os.Getenv("GO_GCFLAGS") -+ goldflags = os.Getenv("GO_LDFLAGS") -+ tool_files, _ := filepath.Glob(pathf("%s/*", tooldir)) -+ for _, f := range tool_files { -+ copyfile(pathf("%s/%s", build_tooldir, filepath.Base(f)), f, writeExec) -+ xremove(f) -+ } -+ os.Setenv("GOTOOLDIR", build_tooldir) -+ goBootstrap = pathf("%s/go_bootstrap", build_tooldir) -+ if hostOnly { -+ timelog("build", "host toolchain") -+ if vflag > 0 { -+ xprintf("\n") -+ } -+ xprintf("Building %s for host, %s/%s.\n", strings.Join(toBuild, ","), goos, goarch) -+ goInstall(goBootstrap, toBuild...) -+ checkNotStale(goBootstrap, toBuild...) -+ // Skip cmdGo staleness checks here, since we can't necessarily run the cmdGo binary -+ -+ timelog("build", "target toolchain") -+ if vflag > 0 { -+ xprintf("\n") -+ } -+ } else if targetOnly { -+ goos = oldgoos -+ goarch = oldgoarch -+ os.Setenv("GOOS", goos) -+ os.Setenv("GOARCH", goarch) -+ os.Setenv("CC", compilerEnvLookup(defaultcc, goos, goarch)) -+ xprintf("Building %s for target, %s/%s.\n", strings.Join(toBuild, ","), goos, goarch) -+ goInstall(goBootstrap, toBuild...) -+ checkNotStale(goBootstrap, toBuild...) -+ // Skip cmdGo staleness checks here, since we can't run the target's cmdGo binary - } -- xprintf("Building packages and commands for %s/%s.\n", goos, goarch) - } else { -- // GOOS/GOARCH does not match GOHOSTOS/GOHOSTARCH. -- // Finish GOHOSTOS/GOHOSTARCH installation and then -- // run GOOS/GOARCH installation. -- timelog("build", "host toolchain") -- if vflag > 0 { -- xprintf("\n") -+ -+ if goos == oldgoos && goarch == oldgoarch { -+ // Common case - not setting up for cross-compilation. -+ timelog("build", "toolchain") -+ if vflag > 0 { -+ xprintf("\n") -+ } -+ xprintf("Building packages and commands for %s/%s.\n", goos, goarch) -+ } else { -+ // GOOS/GOARCH does not match GOHOSTOS/GOHOSTARCH. -+ // Finish GOHOSTOS/GOHOSTARCH installation and then -+ // run GOOS/GOARCH installation. -+ timelog("build", "host toolchain") -+ if vflag > 0 { -+ xprintf("\n") -+ } -+ xprintf("Building packages and commands for host, %s/%s.\n", goos, goarch) -+ goInstall(goBootstrap, "std", "cmd") -+ checkNotStale(goBootstrap, "std", "cmd") -+ checkNotStale(cmdGo, "std", "cmd") -+ -+ timelog("build", "target toolchain") -+ if vflag > 0 { -+ xprintf("\n") -+ } -+ goos = oldgoos -+ goarch = oldgoarch -+ os.Setenv("GOOS", goos) -+ os.Setenv("GOARCH", goarch) -+ os.Setenv("CC", compilerEnvLookup(defaultcc, goos, goarch)) -+ xprintf("Building packages and commands for target, %s/%s.\n", goos, goarch) - } -- xprintf("Building packages and commands for host, %s/%s.\n", goos, goarch) - goInstall(goBootstrap, "std", "cmd") - checkNotStale(goBootstrap, "std", "cmd") - checkNotStale(cmdGo, "std", "cmd") - -- timelog("build", "target toolchain") -- if vflag > 0 { -- xprintf("\n") -- } -- goos = oldgoos -- goarch = oldgoarch -- os.Setenv("GOOS", goos) -- os.Setenv("GOARCH", goarch) -- os.Setenv("CC", compilerEnvLookup(defaultcc, goos, goarch)) -- xprintf("Building packages and commands for target, %s/%s.\n", goos, goarch) -- } -- targets := []string{"std", "cmd"} -- if goos == "js" && goarch == "wasm" { -- // Skip the cmd tools for js/wasm. They're not usable. -- targets = targets[:1] -- } -- goInstall(goBootstrap, targets...) -- checkNotStale(goBootstrap, targets...) -- checkNotStale(cmdGo, targets...) -- if debug { -- run("", ShowOutput|CheckExit, pathf("%s/compile", tooldir), "-V=full") -- run("", ShowOutput|CheckExit, pathf("%s/buildid", tooldir), pathf("%s/pkg/%s_%s/runtime/internal/sys.a", goroot, goos, goarch)) -- checkNotStale(goBootstrap, append(toolchain, "runtime/internal/sys")...) -- copyfile(pathf("%s/compile4", tooldir), pathf("%s/compile", tooldir), writeExec) -+ if debug { -+ run("", ShowOutput|CheckExit, pathf("%s/compile", tooldir), "-V=full") -+ run("", ShowOutput|CheckExit, pathf("%s/buildid", tooldir), pathf("%s/pkg/%s_%s/runtime/internal/sys.a", goroot, goos, goarch)) -+ checkNotStale(goBootstrap, append(toolchain, "runtime/internal/sys")...) -+ copyfile(pathf("%s/compile4", tooldir), pathf("%s/compile", tooldir), writeExec) -+ } - } - - // Check that there are no new files in $GOROOT/bin other than -@@ -1430,8 +1496,11 @@ func cmdbootstrap() { - } - } - -- // Remove go_bootstrap now that we're done. -- xremove(pathf("%s/go_bootstrap", tooldir)) -+ // Except that for split host/target cross-builds, we need to -+ // keep it. -+ if !crossBuild { -+ xremove(pathf("%s/go_bootstrap", tooldir)) -+ } - - if goos == "android" { - // Make sure the exec wrapper will sync a fresh $GOROOT to the device. diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0007-cmd-go-make-GOROOT-precious-by-default.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0007-cmd-go-make-GOROOT-precious-by-default.patch deleted file mode 100644 index 4b4d0d4f3..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0007-cmd-go-make-GOROOT-precious-by-default.patch +++ /dev/null @@ -1,104 +0,0 @@ -From 9ba507e076c744f4d394418e4a849e68cd426a4a Mon Sep 17 00:00:00 2001 -From: Alex Kube -Date: Wed, 23 Oct 2019 21:18:56 +0430 -Subject: [PATCH 7/9] cmd/go: make GOROOT precious by default - -Upstream-Status: Inappropriate [OE specific] - -The go build tool normally rebuilds whatever it detects is -stale. This can be a problem when GOROOT is intended to -be read-only and the go runtime has been built as a shared -library, since we don't want every application to be rebuilding -the shared runtime - particularly in cross-build/packaging -setups, since that would lead to 'abi mismatch' runtime errors. - -This patch prevents the install and linkshared actions from -installing to GOROOT unless overridden with the GOROOT_OVERRIDE -environment variable. - -Adapted to Go 1.13 from patches originally submitted to -the meta/recipes-devtools/go tree by -Matt Madison . - -Signed-off-by: Alexander J Kube ---- - src/cmd/go/internal/work/action.go | 3 +++ - src/cmd/go/internal/work/build.go | 6 ++++++ - src/cmd/go/internal/work/exec.go | 25 +++++++++++++++++++++++++ - 3 files changed, 34 insertions(+) - ---- a/src/cmd/go/internal/work/action.go -+++ b/src/cmd/go/internal/work/action.go -@@ -670,6 +670,9 @@ func (b *Builder) addTransitiveLinkDeps( - if p1 == nil || p1.Shlib == "" || haveShlib[filepath.Base(p1.Shlib)] { - continue - } -+ if goRootPrecious && (p1.Standard || p1.Goroot) { -+ continue -+ } - haveShlib[filepath.Base(p1.Shlib)] = true - // TODO(rsc): The use of ModeInstall here is suspect, but if we only do ModeBuild, - // we'll end up building an overall library or executable that depends at runtime ---- a/src/cmd/go/internal/work/build.go -+++ b/src/cmd/go/internal/work/build.go -@@ -167,6 +167,8 @@ See also: go install, go get, go clean. - - const concurrentGCBackendCompilationEnabledByDefault = true - -+var goRootPrecious bool = true -+ - func init() { - // break init cycle - CmdBuild.Run = runBuild -@@ -179,6 +181,10 @@ func init() { - - AddBuildFlags(CmdBuild, DefaultBuildFlags) - AddBuildFlags(CmdInstall, DefaultBuildFlags) -+ -+ if x := os.Getenv("GOROOT_OVERRIDE"); x != "" { -+ goRootPrecious = false -+ } - } - - // Note that flags consulted by other parts of the code ---- a/src/cmd/go/internal/work/exec.go -+++ b/src/cmd/go/internal/work/exec.go -@@ -468,6 +468,23 @@ func (b *Builder) build(a *Action) (err - return errors.New("binary-only packages are no longer supported") - } - -+ if goRootPrecious && (a.Package.Standard || a.Package.Goroot) { -+ _, err := os.Stat(a.Package.Target) -+ if err == nil { -+ a.built = a.Package.Target -+ a.Target = a.Package.Target -+ a.buildID = b.fileHash(a.Package.Target) -+ a.Package.Stale = false -+ a.Package.StaleReason = "GOROOT-resident package" -+ return nil -+ } -+ a.Package.Stale = true -+ a.Package.StaleReason = "missing or invalid GOROOT-resident package" -+ if b.IsCmdList { -+ return nil -+ } -+ } -+ - if err := b.Mkdir(a.Objdir); err != nil { - return err - } -@@ -1520,6 +1537,14 @@ func BuildInstallFunc(b *Builder, a *Act - return err - } - -+ if goRootPrecious && a.Package != nil { -+ p := a.Package -+ if p.Standard || p.Goroot { -+ err := fmt.Errorf("attempting to install package %s into read-only GOROOT", p.ImportPath) -+ return err -+ } -+ } -+ - if err := b.Mkdir(a.Objdir); err != nil { - return err - } diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0008-use-GOBUILDMODE-to-set-buildmode.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0008-use-GOBUILDMODE-to-set-buildmode.patch deleted file mode 100644 index 4e5d5021d..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0008-use-GOBUILDMODE-to-set-buildmode.patch +++ /dev/null @@ -1,42 +0,0 @@ -From 971b5626339ce0c4d57f9721c9a81af566c5a044 Mon Sep 17 00:00:00 2001 -From: Alex Kube -Date: Wed, 23 Oct 2019 21:19:26 +0430 -Subject: [PATCH 8/9] cmd/go: Use GOBUILDMODE to set buildmode - -Upstream-Status: Denied [upstream choose antoher solution: `17a256b -cmd/go: -buildmode=pie for android/arm'] - -While building go itself, the go build system does not support -to set `-buildmode=pie' from environment. - -Add GOBUILDMODE to support it which make PIE executables the default -build mode, as PIE executables are required as of Yocto - -Refers: https://groups.google.com/forum/#!topic/golang-dev/gRCe5URKewI - -Adapted to Go 1.13 from patches originally submitted to -the meta/recipes-devtools/go tree by -Hongxu Jia - -Signed-off-by: Alexander J Kube ---- - src/cmd/go/internal/work/build.go | 8 +++++++- - 1 file changed, 7 insertions(+), 1 deletion(-) - ---- a/src/cmd/go/internal/work/build.go -+++ b/src/cmd/go/internal/work/build.go -@@ -254,7 +254,13 @@ func AddBuildFlags(cmd *base.Command, ma - - cmd.Flag.Var(&load.BuildAsmflags, "asmflags", "") - cmd.Flag.Var(buildCompiler{}, "compiler", "") -- cmd.Flag.StringVar(&cfg.BuildBuildmode, "buildmode", "default", "") -+ -+ if bm := os.Getenv("GOBUILDMODE"); bm != "" { -+ cmd.Flag.StringVar(&cfg.BuildBuildmode, "buildmode", bm, "") -+ } else { -+ cmd.Flag.StringVar(&cfg.BuildBuildmode, "buildmode", "default", "") -+ } -+ - cmd.Flag.Var(&load.BuildGcflags, "gcflags", "") - cmd.Flag.Var(&load.BuildGccgoflags, "gccgoflags", "") - if mask&OmitModFlag == 0 { diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0009-Revert-cmd-go-make-sure-CC-and-CXX-are-absolute.patch b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0009-Revert-cmd-go-make-sure-CC-and-CXX-are-absolute.patch deleted file mode 100644 index dcbdf5875..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-1.16/0009-Revert-cmd-go-make-sure-CC-and-CXX-are-absolute.patch +++ /dev/null @@ -1,95 +0,0 @@ -From a983bc6cd48fb0da939e3329cac18d7a3b29ecf8 Mon Sep 17 00:00:00 2001 -From: Khem Raj -Date: Mon, 22 Feb 2021 17:54:01 -0800 -Subject: [PATCH] Revert "cmd/go: make sure CC and CXX are absolute" - -OE uses CC/CXX values which consists of cmpiler and options together, -secondly, the environment is canned so this check add little value to OE -based builds - -Fixes go-runtime build issues - -go install: CXX environment variable is relative; must be absolute path: powerpc64le-yoe-linux-musl-g++ -mlittle-endian -mhard-float -m64 -mabi=elfv2 -mcpu=power9 -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security --sysroot=/mnt/b/yoe/master/build/tmp/work/ppc64p9le-yoe-linux-musl/go/1.16-r0/recipe-sysroot - -This reverts commit aa161e799df7e1eba99d2be10271e76b6f758142. - -Upstream-Status: Inappropriate [OE-Specific] -Signed-off-by: Khem Raj ---- - src/cmd/go/internal/envcmd/env.go | 5 ----- - src/cmd/go/internal/work/init.go | 7 ------- - src/cmd/go/testdata/script/env_write.txt | 24 ------------------------ - 3 files changed, 36 deletions(-) - -diff --git a/src/cmd/go/internal/envcmd/env.go b/src/cmd/go/internal/envcmd/env.go -index 6937187522..29f9057c3f 100644 ---- a/src/cmd/go/internal/envcmd/env.go -+++ b/src/cmd/go/internal/envcmd/env.go -@@ -427,11 +427,6 @@ func checkEnvWrite(key, val string) error { - if !filepath.IsAbs(val) && val != "" { - return fmt.Errorf("GOPATH entry is relative; must be absolute path: %q", val) - } -- // Make sure CC and CXX are absolute paths -- case "CC", "CXX": -- if !filepath.IsAbs(val) && val != "" && val != filepath.Base(val) { -- return fmt.Errorf("%s entry is relative; must be absolute path: %q", key, val) -- } - } - - if !utf8.ValidString(val) { -diff --git a/src/cmd/go/internal/work/init.go b/src/cmd/go/internal/work/init.go -index ba7c7c2fbb..3a6df5f758 100644 ---- a/src/cmd/go/internal/work/init.go -+++ b/src/cmd/go/internal/work/init.go -@@ -41,13 +41,6 @@ func BuildInit() { - cfg.BuildPkgdir = p - } - -- // Make sure CC and CXX are absolute paths -- for _, key := range []string{"CC", "CXX"} { -- if path := cfg.Getenv(key); !filepath.IsAbs(path) && path != "" && path != filepath.Base(path) { -- base.Fatalf("go %s: %s environment variable is relative; must be absolute path: %s\n", flag.Args()[0], key, path) -- } -- } -- - // For each experiment that has been enabled in the toolchain, define a - // build tag with the same name but prefixed by "goexperiment." which can be - // used for compiling alternative files for the experiment. This allows -diff --git a/src/cmd/go/testdata/script/env_write.txt b/src/cmd/go/testdata/script/env_write.txt -index bda1e57826..c99aadb7f2 100644 ---- a/src/cmd/go/testdata/script/env_write.txt -+++ b/src/cmd/go/testdata/script/env_write.txt -@@ -129,30 +129,6 @@ go env -w GOTMPDIR= - go env GOTMPDIR - stdout ^$ - --# go env -w rejects relative CC values --[!windows] go env -w CC=/usr/bin/clang --go env -w CC=clang --[!windows] ! go env -w CC=./clang --[!windows] ! go env -w CC=bin/clang --[!windows] stderr 'go env -w: CC entry is relative; must be absolute path' -- --[windows] go env -w CC=$WORK\bin\clang --[windows] ! go env -w CC=.\clang --[windows] ! go env -w CC=bin\clang --[windows] stderr 'go env -w: CC entry is relative; must be absolute path' -- --# go env -w rejects relative CXX values --[!windows] go env -w CC=/usr/bin/cpp --go env -w CXX=cpp --[!windows] ! go env -w CXX=./cpp --[!windows] ! go env -w CXX=bin/cpp --[!windows] stderr 'go env -w: CXX entry is relative; must be absolute path' -- --[windows] go env -w CXX=$WORK\bin\cpp --[windows] ! go env -w CXX=.\cpp --[windows] ! go env -w CXX=bin\cpp --[windows] stderr 'go env -w: CXX entry is relative; must be absolute path' -- - # go env -w/-u checks validity of GOOS/ARCH combinations - env GOOS= - env GOARCH= --- -2.30.1 - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-binary-native_1.16.15.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-binary-native_1.16.15.bb deleted file mode 100644 index ba11ee569..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-binary-native_1.16.15.bb +++ /dev/null @@ -1,46 +0,0 @@ -# This recipe is for bootstrapping our go-cross from a prebuilt binary of Go from golang.org. - -SUMMARY = "Go programming language compiler (upstream binary for bootstrap)" -HOMEPAGE = " http://golang.org/" -LICENSE = "BSD-3-Clause" -LIC_FILES_CHKSUM = "file://LICENSE;md5=5d4950ecb7b26d2c5e4e7b4e0dd74707" - -PROVIDES = "go-native" - -SRC_URI = "https://dl.google.com/go/go${PV}.${BUILD_GOOS}-${BUILD_GOARCH}.tar.gz;name=go_${BUILD_GOTUPLE}" -SRC_URI[go_linux_amd64.sha256sum] = "77c782a633186d78c384f972fb113a43c24be0234c42fef22c2d8c4c4c8e7475" -SRC_URI[go_linux_arm64.sha256sum] = "c2f27f0ce5620a9bc2ff3446165d1974ef94e9b885ec12dbfa3c07e0e198b7ce" - -UPSTREAM_CHECK_URI = "https://golang.org/dl/" -UPSTREAM_CHECK_REGEX = "go(?P\d+(\.\d+)+)\.linux" - -S = "${WORKDIR}/go" - -inherit goarch native - -do_compile() { - : -} - -make_wrapper() { - rm -f ${D}${bindir}/$1 - cat <${D}${bindir}/$1 -#!/bin/bash -here=\`dirname \$0\` -export GOROOT="${GOROOT:-\`readlink -f \$here/../lib/go\`}" -\$here/../lib/go/bin/$1 "\$@" -END - chmod +x ${D}${bindir}/$1 -} - -do_install() { - find ${S} -depth -type d -name testdata -exec rm -rf {} + - - install -d ${D}${bindir} ${D}${libdir}/go - cp --preserve=mode,timestamps -R ${S}/ ${D}${libdir}/ - - for f in ${S}/bin/* - do - make_wrapper `basename $f` - done -} diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-common.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-common.inc deleted file mode 100644 index dfccebdb8..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-common.inc +++ /dev/null @@ -1,42 +0,0 @@ -SUMMARY = "Go programming language compiler" -DESCRIPTION = " The Go programming language is an open source project to make \ - programmers more productive. Go is expressive, concise, clean, and\ - efficient. Its concurrency mechanisms make it easy to write programs\ - that get the most out of multicore and networked machines, while its\ - novel type system enables flexible and modular program construction.\ - Go compiles quickly to machine code yet has the convenience of\ - garbage collection and the power of run-time reflection. It's a\ - fast, statically typed, compiled language that feels like a\ - dynamically typed, interpreted language." - -HOMEPAGE = " http://golang.org/" -LICENSE = "BSD-3-Clause" - -inherit goarch - -SRC_URI = "https://golang.org/dl/go${PV}.src.tar.gz;name=main" -S = "${WORKDIR}/go" -B = "${S}" -UPSTREAM_CHECK_REGEX = "(?P\d+(\.\d+)+)\.src\.tar" - -INHIBIT_PACKAGE_DEBUG_SPLIT = "1" -SSTATE_SCAN_CMD = "true" - -export GOROOT_OVERRIDE = "1" -export GOTMPDIR ?= "${WORKDIR}/go-tmp" -GOTMPDIR[vardepvalue] = "" -export CGO_ENABLED = "1" - -export GOHOSTOS ?= "${BUILD_GOOS}" -export GOHOSTARCH ?= "${BUILD_GOARCH}" -export GOROOT_BOOTSTRAP ?= "${STAGING_LIBDIR_NATIVE}/go" -export GOOS ?= "${TARGET_GOOS}" -export GOARCH ?= "${TARGET_GOARCH}" -export GOARM ?= "${TARGET_GOARM}" -export GO386 ?= "${TARGET_GO386}" -export GOMIPS ?= "${TARGET_GOMIPS}" -export GOROOT_FINAL ?= "${libdir}/go" - -do_compile:prepend() { - BUILD_CC=${BUILD_CC} -} diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross-canadian.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross-canadian.inc deleted file mode 100644 index d49250a8e..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross-canadian.inc +++ /dev/null @@ -1,62 +0,0 @@ -inherit cross-canadian - -DEPENDS = "go-native virtual/${HOST_PREFIX}go-crosssdk virtual/nativesdk-${HOST_PREFIX}go-runtime \ - virtual/${HOST_PREFIX}gcc-crosssdk virtual/nativesdk-libc \ - virtual/nativesdk-${HOST_PREFIX}compilerlibs" -PN = "go-cross-canadian-${TRANSLATED_TARGET_ARCH}" - -# it uses gcc on build machine during go-cross-canadian bootstrap, but -# the gcc version may be old and not support option '-fmacro-prefix-map' -# which is one of default values of DEBUG_PREFIX_MAP -DEBUG_PREFIX_MAP = "-fdebug-prefix-map=${WORKDIR}=/usr/src/debug/${PN}/${EXTENDPE}${PV}-${PR} \ - -fdebug-prefix-map=${STAGING_DIR_HOST}= \ - -fdebug-prefix-map=${STAGING_DIR_NATIVE}= \ - " - -export GOTOOLDIR_BOOTSTRAP = "${STAGING_LIBDIR_NATIVE}/${HOST_SYS}/go/pkg/tool/${BUILD_GOTUPLE}" -export CGO_CFLAGS = "${CFLAGS}" -export CGO_LDFLAGS = "${LDFLAGS}" -export GO_LDFLAGS = '-linkmode external -extld ${HOST_PREFIX}gcc -extldflags "--sysroot=${STAGING_DIR_HOST} ${SECURITY_NOPIE_CFLAGS} ${HOST_CC_ARCH} ${LDFLAGS}"' - -do_configure[noexec] = "1" - -do_compile() { - export CC_FOR_${HOST_GOTUPLE}="${HOST_PREFIX}gcc --sysroot=${STAGING_DIR_HOST}${SDKPATHNATIVE} ${SECURITY_NOPIE_CFLAGS}" - export CXX_FOR_${HOST_GOTUPLE}="${HOST_PREFIX}gxx --sysroot=${STAGING_DIR_HOST}${SDKPATHNATIVE} ${SECURITY_NOPIE_CFLAGS}" - cd src - ./make.bash --host-only --no-banner - cd ${B} -} -do_compile[dirs] =+ "${GOTMPDIR} ${B}/bin ${B}/pkg" -do_compile[cleandirs] += "${GOTMPDIR} ${B}/bin ${B}/pkg" - - -make_wrapper() { - rm -f ${D}${bindir}/$2 - cat <${D}${bindir}/$2 -#!/bin/sh -here=\`dirname \$0\` -native_goroot=\`readlink -f \$here/../../lib/${TARGET_SYS}/go\` -export GOARCH="${TARGET_GOARCH}" -export GOOS="${TARGET_GOOS}" -test -n "\$GOARM" || export GOARM="${TARGET_GOARM}" -test -n "\$GO386" || export GO386="${TARGET_GO386}" -test -n "\$GOMIPS" || export GOMIPS="${TARGET_GOMIPS}" -export GOTOOLDIR="\$native_goroot/pkg/tool/${HOST_GOTUPLE}" -test -n "\$GOROOT" || export GOROOT="\$OECORE_TARGET_SYSROOT/${target_libdir}/go" -\$here/../../lib/${TARGET_SYS}/go/bin/$1 "\$@" -END - chmod +x ${D}${bindir}/$2 -} - -do_install() { - install -d ${D}${libdir}/go/pkg/tool - cp --preserve=mode,timestamps -R ${B}/pkg/tool/${HOST_GOTUPLE} ${D}${libdir}/go/pkg/tool/ - install -d ${D}${bindir} ${D}${libdir}/go/bin - for f in ${B}/${GO_BUILD_BINDIR}/* - do - base=`basename $f` - install -m755 $f ${D}${libdir}/go/bin - make_wrapper $base ${TARGET_PREFIX}$base - done -} diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross-canadian_1.16.15.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross-canadian_1.16.15.bb deleted file mode 100644 index 7ac9449e4..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross-canadian_1.16.15.bb +++ /dev/null @@ -1,2 +0,0 @@ -require go-cross-canadian.inc -require go-${PV}.inc diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross.inc deleted file mode 100644 index 3d5803bf0..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross.inc +++ /dev/null @@ -1,53 +0,0 @@ -inherit cross - -PROVIDES = "virtual/${TUNE_PKGARCH}-go" -DEPENDS = "go-native" - -PN = "go-cross-${TUNE_PKGARCH}" - -export GOCACHE = "${B}/.cache" -CC = "${@d.getVar('BUILD_CC').strip()}" - -do_configure[noexec] = "1" - -do_compile() { - export CC_FOR_${TARGET_GOTUPLE}="${TARGET_PREFIX}gcc ${TARGET_CC_ARCH} --sysroot=${STAGING_DIR_TARGET}" - export CXX_FOR_${TARGET_GOTUPLE}="${TARGET_PREFIX}g++ ${TARGET_CC_ARCH} --sysroot=${STAGING_DIR_TARGET}" - cd src - ./make.bash --host-only --no-banner - cd ${B} -} -do_compile[dirs] =+ "${GOTMPDIR} ${B}/bin ${B}/pkg" -do_compile[cleandirs] += "${GOTMPDIR} ${B}/bin ${B}/pkg" - -make_wrapper() { - rm -f ${D}${bindir}/$2 - cat <${D}${bindir}/$2 -#!/bin/bash -here=\`dirname \$0\` -export GOARCH="${TARGET_GOARCH}" -export GOOS="${TARGET_GOOS}" -export GOARM="\${GOARM:-${TARGET_GOARM}}" -export GO386="\${GO386:-${TARGET_GO386}}" -export GOMIPS="\${GOMIPS:-${TARGET_GOMIPS}}" -\$here/../../lib/${CROSS_TARGET_SYS_DIR}/go/bin/$1 "\$@" -END - chmod +x ${D}${bindir}/$2 -} - -do_install() { - install -d ${D}${libdir}/go - cp --preserve=mode,timestamps -R ${B}/pkg ${D}${libdir}/go/ - install -d ${D}${libdir}/go/src - (cd ${S}/src; for d in *; do \ - [ ! -d $d ] || cp --preserve=mode,timestamps -R ${S}/src/$d ${D}${libdir}/go/src/; \ - done) - find ${D}${libdir}/go/src -depth -type d -name testdata -exec rm -rf {} \; - install -d ${D}${bindir} ${D}${libdir}/go/bin - for f in ${B}/bin/* - do - base=`basename $f` - install -m755 $f ${D}${libdir}/go/bin - make_wrapper $base ${TARGET_PREFIX}$base - done -} diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross_1.16.15.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross_1.16.15.bb deleted file mode 100644 index 80b5a03f6..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-cross_1.16.15.bb +++ /dev/null @@ -1,2 +0,0 @@ -require go-cross.inc -require go-${PV}.inc diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-crosssdk.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-crosssdk.inc deleted file mode 100644 index f0bec7971..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-crosssdk.inc +++ /dev/null @@ -1,43 +0,0 @@ -inherit crosssdk - -DEPENDS = "go-native virtual/${TARGET_PREFIX}gcc-crosssdk virtual/nativesdk-${TARGET_PREFIX}compilerlibs virtual/${TARGET_PREFIX}binutils-crosssdk" -PN = "go-crosssdk-${SDK_SYS}" -PROVIDES = "virtual/${TARGET_PREFIX}go-crosssdk" - -do_configure[noexec] = "1" - -do_compile() { - export CC_FOR_${TARGET_GOTUPLE}="${TARGET_PREFIX}gcc ${TARGET_CC_ARCH} --sysroot=${STAGING_DIR_TARGET}${SDKPATHNATIVE}" - export CXX_FOR_${TARGET_GOTUPLE}="${TARGET_PREFIX}g++ ${TARGET_CC_ARCH} --sysroot=${STAGING_DIR_TARGET}${SDKPATHNATIVE}" - cd src - ./make.bash --host-only --no-banner - cd ${B} -} -do_compile[dirs] =+ "${GOTMPDIR} ${B}/bin ${B}/pkg" -do_compile[cleandirs] += "${GOTMPDIR} ${B}/bin ${B}/pkg" - -make_wrapper() { - rm -f ${D}${bindir}/$2 - cat <${D}${bindir}/$2 -#!/bin/bash -here=\`dirname \$0\` -export GOARCH="${TARGET_GOARCH}" -export GOOS="${TARGET_GOOS}" -\$here/../../lib/${CROSS_TARGET_SYS_DIR}/go/bin/$1 "\$@" -END - chmod +x ${D}${bindir}/$2 -} - -do_install() { - install -d ${D}${libdir}/go - install -d ${D}${libdir}/go/bin - install -d ${D}${libdir}/go/pkg/tool - install -d ${D}${bindir} - cp --preserve=mode,timestamps -R ${S}/pkg/tool/${BUILD_GOTUPLE} ${D}${libdir}/go/pkg/tool/ - for f in ${B}/bin/* - do - base=`basename $f` - install -m755 $f ${D}${libdir}/go/bin - make_wrapper $base ${TARGET_PREFIX}$base - done -} diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-crosssdk_1.16.15.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-crosssdk_1.16.15.bb deleted file mode 100644 index 1857c8a57..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-crosssdk_1.16.15.bb +++ /dev/null @@ -1,2 +0,0 @@ -require go-crosssdk.inc -require go-${PV}.inc diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-native_1.16.15.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-native_1.16.15.bb deleted file mode 100644 index ffe4ef352..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-native_1.16.15.bb +++ /dev/null @@ -1,59 +0,0 @@ -# This recipe builds a native Go (written in Go) by first building an old Go 1.4 -# (written in C). However this old Go does not support all hosts platforms. - -require go-${PV}.inc - -inherit native - -SRC_URI:append = " https://dl.google.com/go/go1.4-bootstrap-20171003.tar.gz;name=bootstrap;subdir=go1.4" -SRC_URI[bootstrap.sha256sum] = "f4ff5b5eb3a3cae1c993723f3eab519c5bae18866b5e5f96fe1102f0cb5c3e52" - -export GOOS = "${BUILD_GOOS}" -export GOARCH = "${BUILD_GOARCH}" -CC = "${@d.getVar('BUILD_CC').strip()}" - -GOMAKEARGS ?= "--no-banner" - -do_configure() { - cd ${WORKDIR}/go1.4/go/src - CGO_ENABLED=0 GOROOT=${WORKDIR}/go1.4/go ./make.bash -} - -do_compile() { - export GOROOT_FINAL="${libdir_native}/go" - export GOROOT_BOOTSTRAP="${WORKDIR}/go1.4/go" - - cd src - ./make.bash ${GOMAKEARGS} - cd ${B} -} -do_compile[dirs] =+ "${GOTMPDIR} ${B}/bin" -do_compile[cleandirs] += "${GOTMPDIR} ${B}/bin" - -make_wrapper() { - rm -f ${D}${bindir}/$2$3 - cat <${D}${bindir}/$2$3 -#!/bin/bash -here=\`dirname \$0\` -export GOROOT="${GOROOT:-\`readlink -f \$here/../lib/go\`}" -\$here/../lib/go/bin/$1 "\$@" -END - chmod +x ${D}${bindir}/$2 -} - -do_install() { - install -d ${D}${libdir}/go - cp --preserve=mode,timestamps -R ${B}/pkg ${D}${libdir}/go/ - install -d ${D}${libdir}/go/src - (cd ${S}/src; for d in *; do \ - [ -d $d ] && cp -a ${S}/src/$d ${D}${libdir}/go/src/; \ - done) - find ${D}${libdir}/go/src -depth -type d -name testdata -exec rm -rf {} \; - install -d ${D}${bindir} ${D}${libdir}/go/bin - for f in ${B}/bin/* - do - base=`basename $f` - install -m755 $f ${D}${libdir}/go/bin - make_wrapper $base $base - done -} diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-runtime.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-runtime.inc deleted file mode 100644 index 617e6b541..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-runtime.inc +++ /dev/null @@ -1,87 +0,0 @@ -DEPENDS = "virtual/${TUNE_PKGARCH}-go go-native" -DEPENDS:class-nativesdk = "virtual/${TARGET_PREFIX}go-crosssdk" -PROVIDES = "virtual/${TARGET_PREFIX}go-runtime" - -export CGO_CFLAGS = "${CFLAGS}" -export CGO_CPPFLAGS = "${CPPFLAGS}" -export CGO_CXXFLAGS = "${CXXFLAGS}" -export CGO_LDFLAGS = "${LDFLAGS}" -export GOCACHE = "${B}/.cache" - -GO_EXTLDFLAGS ?= "${HOST_CC_ARCH}${TOOLCHAIN_OPTIONS} ${LDFLAGS}" -GO_SHLIB_LDFLAGS ?= '-ldflags="--linkmode=external -extldflags '${GO_EXTLDFLAGS}'"' - -do_configure() { - : -} - -do_configure:libc-musl() { - rm -f ${S}/src/runtime/race/*.syso -} - -do_compile() { - export CC_FOR_${TARGET_GOTUPLE}="${CC}" - export CXX_FOR_${TARGET_GOTUPLE}="${CXX}" - - cd src - ./make.bash --target-only --no-banner std - if [ -n "${GO_DYNLINK}" ]; then - export GOTOOLDIR="${B}/pkg/tool/native_native" - CC="$CC_FOR_${TARGET_GOTUPLE}" GOARCH="${TARGET_GOARCH}" GOOS="${TARGET_GOOS}" GOROOT=${B} \ - $GOTOOLDIR/go_bootstrap install -linkshared -buildmode=shared ${GO_SHLIB_LDFLAGS} std - fi - cd ${B} -} -do_compile[dirs] =+ "${GOTMPDIR} ${B}/bin ${B}/pkg" -do_compile[cleandirs] += "${GOTMPDIR} ${B}/bin ${B}/pkg" - -do_install() { - install -d ${D}${libdir}/go/src - cp --preserve=mode,timestamps -R ${B}/pkg ${D}${libdir}/go/ - if [ "${BUILD_GOTUPLE}" != "${TARGET_GOTUPLE}" ]; then - rm -rf ${D}${libdir}/go/pkg/${BUILD_GOTUPLE} - rm -rf ${D}${libdir}/go/pkg/obj/${BUILD_GOTUPLE} - fi - rm -rf ${D}${libdir}/go/pkg/tool - rm -rf ${D}${libdir}/go/pkg/obj - rm -rf ${D}${libdir}/go/pkg/bootstrap - find src -mindepth 1 -maxdepth 1 -type d | while read srcdir; do - cp --preserve=mode,timestamps -R $srcdir ${D}${libdir}/go/src/ - done - find ${D}${libdir}/go/src -depth -type d -name testdata -exec rm -rf {} \; - rm -f ${D}${libdir}/go/src/cmd/dist/dist - rm -f ${D}${libdir}/go/src/cmd/cgo/zdefaultcc.go - rm -f ${D}${libdir}/go/src/cmd/go/internal/cfg/zdefaultcc.go - -} - -ALLOW_EMPTY:${PN} = "1" -FILES:${PN} = "${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*${SOLIBSDEV}" -FILES:${PN}-dev = "${libdir}/go/src ${libdir}/go/pkg/include \ - ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*.shlibname \ - ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*.shlibname \ - ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*.shlibname \ - ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*.shlibname \ - ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*/*.shlibname \ - ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*/*/*.shlibname \ - ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*/*/*/*.shlibname \ - ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*.a \ - ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*.a \ - ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*.a \ - ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*.a \ - ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*/*.a \ - ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*/*/*.a \ - ${libdir}/go/pkg/${TARGET_GOTUPLE}_dynlink/*/*/*/*/*/*/*.a \ -" -FILES:${PN}-staticdev = "${libdir}/go/pkg/${TARGET_GOTUPLE}" - -# Go sources include some scripts and pre-built binaries for -# multiple architectures. The static .a files for dynamically-linked -# runtime are also required in -dev. -INSANE_SKIP:${PN}-dev = "staticdev file-rdeps arch" - -INHIBIT_PACKAGE_STRIP = "1" -INHIBIT_PACKAGE_DEBUG_SPLIT = "1" -INHIBIT_SYSROOT_STRIP = "1" - -BBCLASSEXTEND = "nativesdk" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-runtime_1.16.15.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-runtime_1.16.15.bb deleted file mode 100644 index 63464a150..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-runtime_1.16.15.bb +++ /dev/null @@ -1,3 +0,0 @@ -require go-${PV}.inc -require go-runtime.inc - diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-target.inc b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-target.inc deleted file mode 100644 index 47b4411d5..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go-target.inc +++ /dev/null @@ -1,45 +0,0 @@ -DEPENDS = "virtual/${TUNE_PKGARCH}-go go-native" -DEPENDS:class-nativesdk = "virtual/${TARGET_PREFIX}go-crosssdk go-native" - -export GOCACHE = "${B}/.cache" -GO_LDFLAGS = "" -GO_LDFLAGS:class-nativesdk = "-linkmode external" -export GO_LDFLAGS - -CC:append:class-nativesdk = " ${SECURITY_NOPIE_CFLAGS}" - -do_configure[noexec] = "1" - -do_compile() { - export CC_FOR_${TARGET_GOOS}_${TARGET_GOARCH}="${CC}" - export CXX_FOR_${TARGET_GOOS}_${TARGET_GOARCH}="${CXX}" - - cd src - ./make.bash --target-only --no-banner - cd ${B} -} -do_compile[dirs] =+ "${GOTMPDIR} ${B}/bin ${B}/pkg" -do_compile[cleandirs] += "${GOTMPDIR} ${B}/bin ${B}/pkg" - -do_install() { - install -d ${D}${libdir}/go/pkg/tool - cp --preserve=mode,timestamps -R ${B}/pkg/tool/${TARGET_GOTUPLE} ${D}${libdir}/go/pkg/tool/ - install -d ${D}${libdir}/go/src - cp --preserve=mode,timestamps -R ${S}/src/cmd ${D}${libdir}/go/src/ - find ${D}${libdir}/go/src -depth -type d -name testdata -exec rm -rf {} \; - install -d ${D}${libdir}/go/bin - install -d ${D}${bindir} - for f in ${B}/${GO_BUILD_BINDIR}/*; do - name=`basename $f` - install -m 0755 $f ${D}${libdir}/go/bin/ - ln -sf ../${baselib}/go/bin/$name ${D}${bindir}/ - done - rm -rf ${D}${libdir}/go/src -} - -PACKAGES = "${PN} ${PN}-dev" -FILES:${PN} = "${libdir}/go/bin ${libdir}/go/pkg/tool/${TARGET_GOTUPLE} ${bindir}" -RDEPENDS:${PN} = "go-runtime" -INSANE_SKIP:${PN} = "ldflags" - -BBCLASSEXTEND = "nativesdk" diff --git a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go_1.16.15.bb b/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go_1.16.15.bb deleted file mode 100644 index 34dc89bb0..000000000 --- a/meta-webos-backports/meta-webos-backports-3.4/recipes-devtools/go/go_1.16.15.bb +++ /dev/null @@ -1,17 +0,0 @@ -require go-${PV}.inc -require go-target.inc - -inherit linuxloader - -export GOBUILDMODE="" -export GO_LDSO = "${@get_linuxloader(d)}" -export CC_FOR_TARGET = "gcc" -export CXX_FOR_TARGET = "g++" - -# mips/rv64 doesn't support -buildmode=pie, so skip the QA checking for mips/riscv32 and its -# variants. -python() { - if 'mips' in d.getVar('TARGET_ARCH',True) or 'riscv32' in d.getVar('TARGET_ARCH',True): - d.appendVar('INSANE_SKIP:%s' % d.getVar('PN',True), " textrel") -} - diff --git a/meta-webos/conf/distro/include/webos-preferred-versions.inc b/meta-webos/conf/distro/include/webos-preferred-versions.inc index 616f6abae..c9b5e080f 100644 --- a/meta-webos/conf/distro/include/webos-preferred-versions.inc +++ b/meta-webos/conf/distro/include/webos-preferred-versions.inc @@ -2,7 +2,6 @@ PREFERRED_VERSION_webruntime = "91.%" PREFERRED_VERSION_mksnapshot-cross-${TARGET_ARCH} = "91.%" -GOVERSION = "1.16.%" # Prefer gstreamer version 1.18.% from oe-core for webos GSTREAMER_VERSION = "1.18.%" diff --git a/meta-webos/conf/layer.conf b/meta-webos/conf/layer.conf index 20fefc7a2..fb3fb45eb 100644 --- a/meta-webos/conf/layer.conf +++ b/meta-webos/conf/layer.conf @@ -20,7 +20,6 @@ LAYERDEPENDS_meta-webos = " \ networking-layer \ multimedia-layer \ meta-python \ - meta-webos-backports-3.4 \ meta-webos-backports-4.0 \ " From 611b725ebe6726769434ee3c247112d7cf7d55f3 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sat, 15 May 2021 13:46:21 -0700 Subject: [PATCH 0594/2022] webos.inc: audit, mtools, rocksdb: don't use -Werror=return-type :Release Notes: :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: Ia054c18831085354662c18f81a1f8e2da7c77c90 --- meta-webos/conf/distro/include/webos.inc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/meta-webos/conf/distro/include/webos.inc b/meta-webos/conf/distro/include/webos.inc index f83ba3e79..ad142c976 100644 --- a/meta-webos/conf/distro/include/webos.inc +++ b/meta-webos/conf/distro/include/webos.inc @@ -84,6 +84,19 @@ EXTRA_WEBOS_WERROR:pn-webkitgtk = "" # mpich-3.4.1/src/mpl/src/sock/mpl_sockaddr.c:144:1: error: control reaches end of non-void function [-Werror=return-type] # http://gecko.lge.com/Errors/Details/126261 EXTRA_WEBOS_WERROR:pn-mpich = "" +# audit/3.0.1-r0/git/src/libev/ev_iouring.c:300:1: error: no return statement in function returning non-void [-Werror=return-type] +# http://gecko.lge.com/Errors/Details/175789 +EXTRA_WEBOS_WERROR:pn-audit = "" +# mtools-4.0.29/mk_direntry.c:308:1: error: control reaches end of non-void function [-Werror=return-type] +# introduced in: +# https://git.openembedded.org/openembedded-core/commit/?id=4d117a12bf0d25848c18ccda17e047b60af8bb67 +# http://gecko.lge.com/Errors/Details/186495 +EXTRA_WEBOS_WERROR:pn-mtools = "" +# rocksdb/6.20.3-r0/git/utilities/transactions/lock/range/range_tree/lib/locktree/../portability/toku_time.h:181:1: error: control reaches end of non-void function [-Werror=return-type] +# introduced in: +# https://git.openembedded.org/meta-openembedded/commit/?id=912be5179c9e65fa33e9ca98c7f82d32ba31e827 +# http://gecko.lge.com/Errors/Details/192773 +EXTRA_WEBOS_WERROR:pn-rocksdb = "" TARGET_CC_ARCH:append = " ${EXTRA_WEBOS_WERROR}" From 67ffb528267d2bf576447ab03c64262f3693e9fb Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 3 May 2021 06:31:58 -0700 Subject: [PATCH 0595/2022] pahole, mycroft, audit, glib-networking=webos1 (fix file-rdeps QA issue fix about /bin/bash) :Release Notes: :Detailed Notes: glib-networking: added in: https://git.openembedded.org/openembedded-core/commit/?id=12a9bb0feed96a0f3e0795106c6d95755ccb42b0 fixes: ERROR: glib-networking-2.68.1-r0 do_package_qa: QA Issue: /usr/libexec/installed-tests/glib-networking/files/create-files.sh contained in package glib-networking-ptest requires /bin/bash, but no providers found in RDEPENDS_glib-networking-ptest? [file-rdeps] mycroft: added in: https://git.openembedded.org/meta-openembedded/commit/?id=4f0d10e870e265b7d014d80ac75cd6a83c5da836 pahole: added in: https://git.openembedded.org/meta-openembedded/commit/?id=27be00c9280410afeed68993c9419b812023c82c :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: I82f1dccefd1d1393b00e81f1975a62f0eea1be9e --- .../glib-networking/glib-networking_%.bbappend | 8 ++++++++ meta-webos/recipes-devtools/pahole/pahole_%.bbappend | 8 ++++++++ meta-webos/recipes-multimedia/mycroft/mycroft_%.bbappend | 8 ++++++++ meta-webos/recipes-security/audit/audit_%.bbappend | 8 ++++++++ 4 files changed, 32 insertions(+) create mode 100644 meta-webos/recipes-core/glib-networking/glib-networking_%.bbappend create mode 100644 meta-webos/recipes-devtools/pahole/pahole_%.bbappend create mode 100644 meta-webos/recipes-multimedia/mycroft/mycroft_%.bbappend create mode 100644 meta-webos/recipes-security/audit/audit_%.bbappend diff --git a/meta-webos/recipes-core/glib-networking/glib-networking_%.bbappend b/meta-webos/recipes-core/glib-networking/glib-networking_%.bbappend new file mode 100644 index 000000000..3a9fa56e3 --- /dev/null +++ b/meta-webos/recipes-core/glib-networking/glib-networking_%.bbappend @@ -0,0 +1,8 @@ +# Copyright (c) 2021-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +# ERROR: glib-networking-2.68.1-r0 do_package_qa: QA Issue: /usr/libexec/installed-tests/glib-networking/files/create-files.sh contained in package glib-networking-ptest requires /bin/bash, but no providers found in RDEPENDS:glib-networking-ptest? [file-rdeps] +VIRTUAL-RUNTIME_bash ?= "bash" +RDEPENDS:${PN}-ptest:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-ptest:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-devtools/pahole/pahole_%.bbappend b/meta-webos/recipes-devtools/pahole/pahole_%.bbappend new file mode 100644 index 000000000..212d25186 --- /dev/null +++ b/meta-webos/recipes-devtools/pahole/pahole_%.bbappend @@ -0,0 +1,8 @@ +# Copyright (c) 2021-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +# ERROR: QA Issue: pahole-extra rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] +VIRTUAL-RUNTIME_bash ?= "bash" +RDEPENDS:${PN}-extra:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}-extra:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-multimedia/mycroft/mycroft_%.bbappend b/meta-webos/recipes-multimedia/mycroft/mycroft_%.bbappend new file mode 100644 index 000000000..c31a3206d --- /dev/null +++ b/meta-webos/recipes-multimedia/mycroft/mycroft_%.bbappend @@ -0,0 +1,8 @@ +# Copyright (c) 2021-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +# ERROR: mycroft-19.8.1-r0 do_package_qa: QA Issue: mycroft rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] +VIRTUAL-RUNTIME_bash ?= "bash" +RDEPENDS:${PN}:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:${PN}:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" diff --git a/meta-webos/recipes-security/audit/audit_%.bbappend b/meta-webos/recipes-security/audit/audit_%.bbappend new file mode 100644 index 000000000..424d7861c --- /dev/null +++ b/meta-webos/recipes-security/audit/audit_%.bbappend @@ -0,0 +1,8 @@ +# Copyright (c) 2021-2022 LG Electronics, Inc. + +EXTENDPRAUTO:append = "webos1" + +# ERROR: audit-3.0.1-r0 do_package_qa: QA Issue: auditd rdepends on bash, but it isn't a build dependency, missing bash in DEPENDS or PACKAGECONFIG? [build-deps] +VIRTUAL-RUNTIME_bash ?= "bash" +RDEPENDS:auditd:append:class-target = " ${VIRTUAL-RUNTIME_bash}" +RDEPENDS:auditd:remove:class-target = "${@oe.utils.conditional('WEBOS_PREFERRED_PROVIDER_FOR_BASH', 'busybox', 'bash', '', d)}" From a99b6f92abd601eb2627d5e6aca38c3d6a7a1f16 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 27 May 2021 06:15:20 -0700 Subject: [PATCH 0596/2022] rpi: mesa: update 0001-implement-drm_create_linear_prime_buffer.patch to apply on 21.1.1 version :Release Notes: :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/181612 stdout: Applying patch 0001-implement-drm_create_linear_prime_buffer.patch patching file include/GL/internal/dri_interface.h Hunk #1 succeeded at 1594 (offset 9 lines). patching file src/egl/drivers/dri2/egl_dri2.c Hunk #1 succeeded at 3180 (offset 3 lines). Hunk #2 succeeded at 3201 (offset 3 lines). patching file src/egl/wayland/wayland-drm/meson.build patching file src/egl/wayland/wayland-drm/wayland-drm.c Hunk #7 succeeded at 209 (offset 1 line). patching file src/egl/wayland/wayland-drm/wayland-drm.h patching file src/egl/wayland/wayland-drm/wayland-drm.xml patching file src/gallium/frontends/dri/dri2.c Hunk #1 succeeded at 1423 (offset -9 lines). patching file src/gbm/backends/dri/gbm_dri.c Hunk #1 succeeded at 995 (offset 42 lines). patching file src/loader/loader_dri3_helper.c patching file src/mesa/drivers/dri/i915/intel_screen.c can't find file to patch at input line 262 Perhaps you used the wrong -p or --strip option? The text leading up to this was: -------------------------- |diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c |index 4492d43c040..0d85fd6206a 100644 |--- a/src/mesa/drivers/dri/i965/intel_screen.c |+++ b/src/mesa/drivers/dri/i965/intel_screen.c -------------------------- No file to patch. Skipping patch. 1 out of 1 hunk ignored Patch 0001-implement-drm_create_linear_prime_buffer.patch does not apply (enforce with -f) :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: Ica12c9dbe56b2bb42fbc5b4f3e937df508d47748 --- ...ement-drm_create_linear_prime_buffer.patch | 50 +++++++++---------- 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/meta-webos-raspberrypi/recipes-graphics/mesa/mesa/0001-implement-drm_create_linear_prime_buffer.patch b/meta-webos-raspberrypi/recipes-graphics/mesa/mesa/0001-implement-drm_create_linear_prime_buffer.patch index b5e0c0db2..c92912bb2 100644 --- a/meta-webos-raspberrypi/recipes-graphics/mesa/mesa/0001-implement-drm_create_linear_prime_buffer.patch +++ b/meta-webos-raspberrypi/recipes-graphics/mesa/mesa/0001-implement-drm_create_linear_prime_buffer.patch @@ -1,4 +1,4 @@ -From c36987db9f67f451b2569eb35337318c1e3eb7ca Mon Sep 17 00:00:00 2001 +From d3de903d6829bf5466249b6e9e6adbe70fa32d9c Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 7 Feb 2020 07:10:42 -0800 Subject: [PATCH] implement drm_create_linear_prime_buffer @@ -15,14 +15,14 @@ Signed-off-by: Martin Jansa src/gbm/backends/dri/gbm_dri.c | 1 + src/loader/loader_dri3_helper.c | 1 + src/mesa/drivers/dri/i915/intel_screen.c | 2 +- - src/mesa/drivers/dri/i965/intel_screen.c | 2 +- + src/mesa/drivers/dri/i965/brw_screen.c | 2 +- 11 files changed, 60 insertions(+), 12 deletions(-) diff --git a/include/GL/internal/dri_interface.h b/include/GL/internal/dri_interface.h -index 39d5dd07533..11a6a230905 100644 +index 9b85e67ce49..2c6654e9010 100644 --- a/include/GL/internal/dri_interface.h +++ b/include/GL/internal/dri_interface.h -@@ -1585,6 +1585,7 @@ struct __DRIimageExtensionRec { +@@ -1594,6 +1594,7 @@ struct __DRIimageExtensionRec { */ __DRIimage *(*createImageFromFds)(__DRIscreen *screen, int width, int height, int fourcc, @@ -31,10 +31,10 @@ index 39d5dd07533..11a6a230905 100644 int *strides, int *offsets, void *loaderPrivate); diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c -index df5e3542a00..c869bd4f18b 100644 +index 0e48b965656..4072fd86ae8 100644 --- a/src/egl/drivers/dri2/egl_dri2.c +++ b/src/egl/drivers/dri2/egl_dri2.c -@@ -3177,7 +3177,7 @@ dri2_destroy_image_khr(_EGLDisplay *disp, _EGLImage *image) +@@ -3180,7 +3180,7 @@ dri2_destroy_image_khr(_EGLDisplay *disp, _EGLImage *image) static void dri2_wl_reference_buffer(void *user_data, uint32_t name, int fd, @@ -43,7 +43,7 @@ index df5e3542a00..c869bd4f18b 100644 { _EGLDisplay *disp = user_data; struct dri2_egl_display *dri2_dpy = dri2_egl_display(disp); -@@ -3198,6 +3198,7 @@ dri2_wl_reference_buffer(void *user_data, uint32_t name, int fd, +@@ -3201,6 +3201,7 @@ dri2_wl_reference_buffer(void *user_data, uint32_t name, int fd, buffer->width, buffer->height, buffer->format, @@ -64,7 +64,7 @@ index b4782a013c9..2b400b8fa49 100644 build_by_default : false, ) diff --git a/src/egl/wayland/wayland-drm/wayland-drm.c b/src/egl/wayland/wayland-drm/wayland-drm.c -index 51cdd2cb845..f35d47bd20b 100644 +index 29558ea910e..d330f647d04 100644 --- a/src/egl/wayland/wayland-drm/wayland-drm.c +++ b/src/egl/wayland/wayland-drm/wayland-drm.c @@ -37,6 +37,8 @@ @@ -136,7 +136,7 @@ index 51cdd2cb845..f35d47bd20b 100644 static void drm_authenticate(struct wl_client *client, struct wl_resource *resource, uint32_t id) -@@ -191,8 +208,9 @@ drm_authenticate(struct wl_client *client, +@@ -192,8 +209,9 @@ drm_authenticate(struct wl_client *client, static const struct wl_drm_interface drm_interface = { drm_authenticate, drm_create_buffer, @@ -185,10 +185,10 @@ index eaf2654ab26..d6913d680ba 100644 diff --git a/src/gallium/frontends/dri/dri2.c b/src/gallium/frontends/dri/dri2.c -index 5c935e74438..06e361cac60 100644 +index 59698719978..a7c360fb5e0 100644 --- a/src/gallium/frontends/dri/dri2.c +++ b/src/gallium/frontends/dri/dri2.c -@@ -1432,13 +1432,26 @@ dri2_from_planar(__DRIimage *image, int plane, void *loaderPrivate) +@@ -1423,13 +1423,26 @@ dri2_from_planar(__DRIimage *image, int plane, void *loaderPrivate) return img; } @@ -219,10 +219,10 @@ index 5c935e74438..06e361cac60 100644 } diff --git a/src/gbm/backends/dri/gbm_dri.c b/src/gbm/backends/dri/gbm_dri.c -index b5634741554..9da1e3f56d2 100644 +index 751b2e56497..09051b1f035 100644 --- a/src/gbm/backends/dri/gbm_dri.c +++ b/src/gbm/backends/dri/gbm_dri.c -@@ -953,6 +953,7 @@ gbm_dri_bo_import(struct gbm_device *gbm, +@@ -995,6 +995,7 @@ gbm_dri_bo_import(struct gbm_device *gbm, fd_data->width, fd_data->height, fourcc, @@ -231,7 +231,7 @@ index b5634741554..9da1e3f56d2 100644 &stride, &offset, NULL); diff --git a/src/loader/loader_dri3_helper.c b/src/loader/loader_dri3_helper.c -index ccf8d1795e7..9cd2b1b9daf 100644 +index 6c4b704ae5b..5c36a5d19e1 100644 --- a/src/loader/loader_dri3_helper.c +++ b/src/loader/loader_dri3_helper.c @@ -1689,6 +1689,7 @@ loader_dri3_create_image(xcb_connection_t *c, @@ -243,7 +243,7 @@ index ccf8d1795e7..9cd2b1b9daf 100644 &stride, &offset, loaderPrivate); close(fds[0]); diff --git a/src/mesa/drivers/dri/i915/intel_screen.c b/src/mesa/drivers/dri/i915/intel_screen.c -index 296f24eadd0..d86213350a0 100644 +index 33ca0321722..8e87723608d 100644 --- a/src/mesa/drivers/dri/i915/intel_screen.c +++ b/src/mesa/drivers/dri/i915/intel_screen.c @@ -586,7 +586,7 @@ intel_create_image_from_names(__DRIscreen *screen, @@ -255,16 +255,16 @@ index 296f24eadd0..d86213350a0 100644 int *fds, int num_fds, int *strides, int *offsets, void *loaderPrivate) { -diff --git a/src/mesa/drivers/dri/i965/intel_screen.c b/src/mesa/drivers/dri/i965/intel_screen.c -index 4492d43c040..0d85fd6206a 100644 ---- a/src/mesa/drivers/dri/i965/intel_screen.c -+++ b/src/mesa/drivers/dri/i965/intel_screen.c -@@ -1241,7 +1241,7 @@ intel_create_image_from_fds_common(__DRIscreen *dri_screen, +diff --git a/src/mesa/drivers/dri/i965/brw_screen.c b/src/mesa/drivers/dri/i965/brw_screen.c +index 23eb5f57fce..9a9d87a1cec 100644 +--- a/src/mesa/drivers/dri/i965/brw_screen.c ++++ b/src/mesa/drivers/dri/i965/brw_screen.c +@@ -1258,7 +1258,7 @@ brw_create_image_from_fds_common(__DRIscreen *dri_screen, static __DRIimage * - intel_create_image_from_fds(__DRIscreen *dri_screen, -- int width, int height, int fourcc, -+ int width, int height, int fourcc, uint64_t modifier, - int *fds, int num_fds, int *strides, int *offsets, - void *loaderPrivate) + brw_create_image_from_fds(__DRIscreen *dri_screen, +- int width, int height, int fourcc, ++ int width, int height, int fourcc, uint64_t modifier, + int *fds, int num_fds, int *strides, int *offsets, + void *loaderPrivate) { From 5b7c0831f87b807ac05969d915c3507345a11956 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sun, 20 Jun 2021 00:11:24 -0700 Subject: [PATCH 0597/2022] iotivity: UnpackAll.py: fix compatibility with SCons-4 :Release Notes: As https://pyup.io/changelogs/scons/#4.0.0 shows: - Rename internal Warning base class to SConsWarning to avoid any possible confusion with Python's own Warning class. :Detailed Notes: Upgraded in: https://git.openembedded.org/openembedded-core/commit/?id=6fd0e96fca004ea7ec3441326ef0a601f36703c6 :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: I8979e3532792760243eb29b3bfe40d959b861ed7 --- ...ll.py-fix-compatibility-with-SCons-4.patch | 27 +++++++++++++++++++ .../recipes-core/iotivity/iotivity_git.bb | 1 + 2 files changed, 28 insertions(+) create mode 100644 meta-webos/recipes-core/iotivity/iotivity/0001-UnpackAll.py-fix-compatibility-with-SCons-4.patch diff --git a/meta-webos/recipes-core/iotivity/iotivity/0001-UnpackAll.py-fix-compatibility-with-SCons-4.patch b/meta-webos/recipes-core/iotivity/iotivity/0001-UnpackAll.py-fix-compatibility-with-SCons-4.patch new file mode 100644 index 000000000..d63bf3155 --- /dev/null +++ b/meta-webos/recipes-core/iotivity/iotivity/0001-UnpackAll.py-fix-compatibility-with-SCons-4.patch @@ -0,0 +1,27 @@ +From 388d0713f3e3294550f998ae0fd17f2cb3fb9168 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Sun, 20 Jun 2021 00:10:01 -0700 +Subject: [PATCH] UnpackAll.py: fix compatibility with SCons-4 + +* as https://pyup.io/changelogs/scons/#4.0.0 shows: + - Rename internal Warning base class to SConsWarning to avoid any + possible confusion with Python's own Warning class. + +Signed-off-by: Martin Jansa +--- + build_common/tools/UnpackAll.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/build_common/tools/UnpackAll.py b/build_common/tools/UnpackAll.py +index 19d460bf0..c38134940 100644 +--- a/build_common/tools/UnpackAll.py ++++ b/build_common/tools/UnpackAll.py +@@ -101,7 +101,7 @@ import SCons.Util + + + # enables Scons warning for this builder +-class UnpackWarning(SCons.Warnings.Warning) : ++class UnpackWarning(SCons.Warnings.SConsWarning) : + pass + + SCons.Warnings.enableWarningClass(UnpackWarning) diff --git a/meta-webos/recipes-core/iotivity/iotivity_git.bb b/meta-webos/recipes-core/iotivity/iotivity_git.bb index 103bc3934..5ed3358d3 100644 --- a/meta-webos/recipes-core/iotivity/iotivity_git.bb +++ b/meta-webos/recipes-core/iotivity/iotivity_git.bb @@ -36,6 +36,7 @@ SRC_URI = " \ file://0002-Fix-segmentation-fault.patch \ file://0002-Add-os_arch-x86_64.patch \ file://0001-mbedtls-tinycbor-add-DONT_CHECK_GIT_TAGS-env-variabl.patch \ + file://0001-UnpackAll.py-fix-compatibility-with-SCons-4.patch \ " SRCREV_main = "255060695e4de0e8f357aeab6e3e2c46e3c68bac" SRCREV_tinycbor = "ae64a3d9da39f3bf310b9a7b38427c096d8bcd43" From 74f6feffcba7c13a8a5f872935146cc12e76ef2f Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sun, 20 Jun 2021 04:12:27 -0700 Subject: [PATCH 0598/2022] org.ocf.webossample.oc{client,server}basicops: UnpackAll.py: fix compatibility with SCons-4 :Release Notes: As https://pyup.io/changelogs/scons/#4.0.0 shows: - Rename internal Warning base class to SConsWarning to avoid any possible confusion with Python's own Warning class. :Detailed Notes: Upgraded in: https://git.openembedded.org/openembedded-core/commit/?id=6fd0e96fca004ea7ec3441326ef0a601f36703c6 :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: I4f5cb62f92dd6b5edd7be884c2042dfefd7ef748 --- .../org.ocf.webossample.occlientbasicops.bb | 1 + ...ll.py-fix-compatibility-with-SCons-4.patch | 27 +++++++++++++++++++ .../org.ocf.webossample.ocserverbasicops.bb | 1 + ...ll.py-fix-compatibility-with-SCons-4.patch | 27 +++++++++++++++++++ 4 files changed, 56 insertions(+) create mode 100644 meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops/0001-UnpackAll.py-fix-compatibility-with-SCons-4.patch create mode 100644 meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops/0001-UnpackAll.py-fix-compatibility-with-SCons-4.patch diff --git a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb index 9a625ab96..16fccaf73 100644 --- a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb +++ b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops.bb @@ -36,6 +36,7 @@ SRC_URI += " \ file://0001-webOS-Apply-new-ACG-policy-in-test-applications.patch \ file://0001-webOS-Apply-proper-ACG-group-name-in-test-appl.patch \ file://0002-Add-os_arch-x86_64.patch \ + file://0001-UnpackAll.py-fix-compatibility-with-SCons-4.patch \ " EXTRA_OESCONS += " \ diff --git a/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops/0001-UnpackAll.py-fix-compatibility-with-SCons-4.patch b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops/0001-UnpackAll.py-fix-compatibility-with-SCons-4.patch new file mode 100644 index 000000000..d63bf3155 --- /dev/null +++ b/meta-webos/recipes-webos/org.ocf.webossample.occlientbasicops/org.ocf.webossample.occlientbasicops/0001-UnpackAll.py-fix-compatibility-with-SCons-4.patch @@ -0,0 +1,27 @@ +From 388d0713f3e3294550f998ae0fd17f2cb3fb9168 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Sun, 20 Jun 2021 00:10:01 -0700 +Subject: [PATCH] UnpackAll.py: fix compatibility with SCons-4 + +* as https://pyup.io/changelogs/scons/#4.0.0 shows: + - Rename internal Warning base class to SConsWarning to avoid any + possible confusion with Python's own Warning class. + +Signed-off-by: Martin Jansa +--- + build_common/tools/UnpackAll.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/build_common/tools/UnpackAll.py b/build_common/tools/UnpackAll.py +index 19d460bf0..c38134940 100644 +--- a/build_common/tools/UnpackAll.py ++++ b/build_common/tools/UnpackAll.py +@@ -101,7 +101,7 @@ import SCons.Util + + + # enables Scons warning for this builder +-class UnpackWarning(SCons.Warnings.Warning) : ++class UnpackWarning(SCons.Warnings.SConsWarning) : + pass + + SCons.Warnings.enableWarningClass(UnpackWarning) diff --git a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb index 300dc4116..49e8de365 100644 --- a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb +++ b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops.bb @@ -34,6 +34,7 @@ IOTIVITY_TARGET_ARCH = "${TARGET_ARCH}" SRC_URI += " \ file://0001-Do-independent-build-of-csdk-samples.patch \ file://0002-webOS-Fix-build-error-detected-by-gcc8.patch \ + file://0001-UnpackAll.py-fix-compatibility-with-SCons-4.patch \ " EXTRA_OESCONS += " \ diff --git a/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops/0001-UnpackAll.py-fix-compatibility-with-SCons-4.patch b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops/0001-UnpackAll.py-fix-compatibility-with-SCons-4.patch new file mode 100644 index 000000000..d63bf3155 --- /dev/null +++ b/meta-webos/recipes-webos/org.ocf.webossample.ocserverbasicops/org.ocf.webossample.ocserverbasicops/0001-UnpackAll.py-fix-compatibility-with-SCons-4.patch @@ -0,0 +1,27 @@ +From 388d0713f3e3294550f998ae0fd17f2cb3fb9168 Mon Sep 17 00:00:00 2001 +From: Martin Jansa +Date: Sun, 20 Jun 2021 00:10:01 -0700 +Subject: [PATCH] UnpackAll.py: fix compatibility with SCons-4 + +* as https://pyup.io/changelogs/scons/#4.0.0 shows: + - Rename internal Warning base class to SConsWarning to avoid any + possible confusion with Python's own Warning class. + +Signed-off-by: Martin Jansa +--- + build_common/tools/UnpackAll.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/build_common/tools/UnpackAll.py b/build_common/tools/UnpackAll.py +index 19d460bf0..c38134940 100644 +--- a/build_common/tools/UnpackAll.py ++++ b/build_common/tools/UnpackAll.py +@@ -101,7 +101,7 @@ import SCons.Util + + + # enables Scons warning for this builder +-class UnpackWarning(SCons.Warnings.Warning) : ++class UnpackWarning(SCons.Warnings.SConsWarning) : + pass + + SCons.Warnings.enableWarningClass(UnpackWarning) From d15367feff378de37f23a7e744cb52ae56a362e8 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sun, 20 Jun 2021 04:29:24 -0700 Subject: [PATCH 0599/2022] iotivity: Remove @DEFINES@ and @LIBS@ from iotivity.pc :Release Notes: :Detailed Notes: Fixes org.ocf.webossample.oc{client,server}basicops failing with: scons: Building targets ... scons: building associated VariantDir targets: out/webos/arm/release scons: *** [out/webos/arm/release/resource/csdk/stack/samples/webos/secure/occlientbasicops/occlientbasicops] Implicit dependency `@DEFINES@' not found, needed by target `out/webos/arm/release/resource/csdk/stack/samples/webos/secure/occlientbasicops/occlientbasicops'. scons: building terminated because of errors. ERROR: scons build execution failed. scons: Building targets ... scons: building associated VariantDir targets: out/webos/arm/release scons: *** [out/webos/arm/release/resource/csdk/stack/samples/webos/secure/occlientbasicops/occlientbasicops] Implicit dependency `@LIBS@' not found, needed by target `out/webos/arm/release/resource/csdk/stack/samples/webos/secure/occlientbasicops/occlientbasicops'. scons: building terminated because of errors. ERROR: scons build execution failed. With scons upgraded in: https://git.openembedded.org/openembedded-core/commit/?id=6fd0e96fca004ea7ec3441326ef0a601f36703c6 :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: Iff77a2817506726369bfdaa324c8de6e87f60d98 --- meta-webos/recipes-core/iotivity/iotivity_git.bb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/meta-webos/recipes-core/iotivity/iotivity_git.bb b/meta-webos/recipes-core/iotivity/iotivity_git.bb index 5ed3358d3..6c2e5a510 100644 --- a/meta-webos/recipes-core/iotivity/iotivity_git.bb +++ b/meta-webos/recipes-core/iotivity/iotivity_git.bb @@ -174,6 +174,8 @@ do_install:append() { #Adapt unaligned pkconfig (transitionnal) sed -e 's|^prefix=.*|prefix=/usr|g' -i ${S}/iotivity.pc + #Remove unexpanded @DEFINES@ and @LIBS@ to fix iotivity use in org.ocf.webossample.oc{client,server}basicops + sed -e 's|@DEFINES@||g; s|@LIBS@||g' -i ${S}/iotivity.pc make_dir ${D}${libdir}/pkgconfig/ copy_file ${S}/iotivity.pc ${D}${libdir}/pkgconfig/ From 2bd56cb57aaaa94da6e6e1106d41fd1ea7801040 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Sun, 20 Jun 2021 03:03:33 -0700 Subject: [PATCH 0600/2022] connman (refresh patches to apply on 1.40 version) :Release Notes: :Detailed Notes: Fixes: ERROR: connman-1.40-r0 do_patch: Command Error: 'quilt --quiltrc /jenkins/mjansa/build/ose-github/honister/BUILD/work/raspberrypi4-webos-linux-gnueabi/connman/1.40-r0/recipe-sysroot-native/etc/quiltrc push' exited with 0 Output: stdout: Applying patch 0011-Read-WpaSupplicantConfigFile-from-main-configuration.patch patching file include/setting.h Hunk #1 FAILED at 29. 1 out of 1 hunk FAILED -- rejects in file include/setting.h patching file plugins/wifi.c Hunk #1 succeeded at 1628 (offset 10 lines). Hunk #2 succeeded at 1646 (offset 10 lines). patching file src/main.c Hunk #1 succeeded at 91 (offset 8 lines). Hunk #2 succeeded at 117 (offset 11 lines). Hunk #3 succeeded at 144 (offset 14 lines). Hunk #4 succeeded at 171 (offset 17 lines). Hunk #5 succeeded at 304 with fuzz 2 (offset 20 lines). Hunk #6 succeeded at 443 (offset 20 lines). Hunk #7 succeeded at 779 with fuzz 1 (offset 68 lines). Patch 0011-Read-WpaSupplicantConfigFile-from-main-configuration.patch does not apply (enforce with -f) :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: I9a484682dfbe45c439d8bc7fca975e0cb586a407 --- ...support-for-the-WPS-PBS-and-PIN-mode.patch | 58 +- ...Pv6-state-same-as-IPV4-on-disconnect.patch | 6 +- ...work-switching-and-unable-to-connect.patch | 6 +- ...i-networks-are-connected-via-WPS-PIN.patch | 2 +- ...ort-additional-feature-for-tethering.patch | 10 +- ...port-channel-frequency-of-scanned-AP.patch | 34 +- ...ide-station-information-when-AP-mode.patch | 12 +- ...r-regarding-connman_tethering_get_st.patch | 2 +- ...0009-Fix-the-wifi-connection-failure.patch | 6 +- ...-configuration-options-related-to-P2.patch | 10 +- ...ntConfigFile-from-main-configuration.patch | 69 +- ...changed-signal-in-case-of-interface-.patch | 8 +- ...-SetDefault-for-Interface-net.connma.patch | 10 +- ...m-gateway_hash-if-it-is-not-updated-.patch | 18 +- ...-CIDR-prefix-length-as-ipv4-property.patch | 6 +- .../connman/0016-Add-p2p-changes.patch | 2884 +++++++++-------- ...emove-unused-__connman_storage_open_.patch | 6 +- ...-p2p-addservice-and-p2p-settethering.patch | 22 +- .../connman/0019-Fix-connman-crash.patch | 9 +- ...connman-crash-when-interface-removed.patch | 7 +- 20 files changed, 1592 insertions(+), 1593 deletions(-) diff --git a/meta-webos/recipes-connectivity/connman/connman/0001-Add-support-for-the-WPS-PBS-and-PIN-mode.patch b/meta-webos/recipes-connectivity/connman/connman/0001-Add-support-for-the-WPS-PBS-and-PIN-mode.patch index 9850fe7b1..13479d84f 100644 --- a/meta-webos/recipes-connectivity/connman/connman/0001-Add-support-for-the-WPS-PBS-and-PIN-mode.patch +++ b/meta-webos/recipes-connectivity/connman/connman/0001-Add-support-for-the-WPS-PBS-and-PIN-mode.patch @@ -1,4 +1,4 @@ -From 3547fa9899169b35e7e0aa9778f18f34f57637d1 Mon Sep 17 00:00:00 2001 +From 856a41d332e2ac1014db8dead3d74b46e3bc84fc Mon Sep 17 00:00:00 2001 From: Vibhanshu Dhote Date: Wed, 21 Feb 2018 16:36:23 +0530 Subject: [PATCH] Add support for the WPS PBS and PIN mode @@ -169,10 +169,10 @@ index 7508a9a1..a3095fb7 100644 const char *name; enum connman_service_type type; diff --git a/plugins/wifi.c b/plugins/wifi.c -index 6233fe11..0917eaf5 100644 +index e7014510..dd1cdcaf 100644 --- a/plugins/wifi.c +++ b/plugins/wifi.c -@@ -64,6 +64,7 @@ +@@ -63,6 +63,7 @@ #define CLEANUP_TIMEOUT 8 /* in seconds */ #define INACTIVE_TIMEOUT 12 /* in seconds */ #define FAVORITE_MAXIMUM_RETRIES 2 @@ -180,7 +180,7 @@ index 6233fe11..0917eaf5 100644 #define BGSCAN_DEFAULT "simple:30:-65:300" #define AUTOSCAN_EXPONENTIAL "exponential:3:300" -@@ -82,6 +83,8 @@ +@@ -81,6 +82,8 @@ static struct connman_technology *wifi_technology = NULL; static struct connman_technology *p2p_technology = NULL; @@ -189,7 +189,7 @@ index 6233fe11..0917eaf5 100644 enum wifi_ap_capability{ WIFI_AP_UNKNOWN = 0, WIFI_AP_SUPPORTED = 1, -@@ -165,6 +168,11 @@ struct wifi_data { +@@ -164,6 +167,11 @@ struct wifi_data { int servicing; int disconnect_code; int assoc_code; @@ -201,7 +201,7 @@ index 6233fe11..0917eaf5 100644 }; struct disconnect_data { -@@ -216,6 +224,17 @@ static bool is_p2p_connecting(void) +@@ -215,6 +223,17 @@ static bool is_p2p_connecting(void) return false; } @@ -219,7 +219,7 @@ index 6233fe11..0917eaf5 100644 static void add_pending_wifi_device(struct wifi_data *wifi) { if (g_list_find(pending_wifi_device, wifi)) -@@ -793,6 +812,9 @@ static int wifi_probe(struct connman_device *device) +@@ -800,6 +819,9 @@ static int wifi_probe(struct connman_device *device) wifi->watch = connman_rtnl_add_newlink_watch(wifi->index, wifi_newlink, device); @@ -229,7 +229,7 @@ index 6233fe11..0917eaf5 100644 if (is_p2p_connecting()) add_pending_wifi_device(wifi); else -@@ -2058,6 +2080,217 @@ static int wifi_set_regdom(struct connman_device *device, const char *alpha2) +@@ -2068,6 +2090,217 @@ static int wifi_set_regdom(struct connman_device *device, const char *alpha2) return ret; } @@ -447,7 +447,7 @@ index 6233fe11..0917eaf5 100644 static struct connman_device_driver wifi_ng_driver = { .name = "wifi", .type = CONNMAN_DEVICE_TYPE_WIFI, -@@ -2069,6 +2302,8 @@ static struct connman_device_driver wifi_ng_driver = { +@@ -2079,6 +2312,8 @@ static struct connman_device_driver wifi_ng_driver = { .scan = wifi_scan, .stop_scan = wifi_stop_scan, .set_regdom = wifi_set_regdom, @@ -456,7 +456,7 @@ index 6233fe11..0917eaf5 100644 }; static void system_ready(void) -@@ -2093,6 +2328,23 @@ static int network_probe(struct connman_network *network) +@@ -2103,6 +2338,23 @@ static int network_probe(struct connman_network *network) return 0; } @@ -480,7 +480,7 @@ index 6233fe11..0917eaf5 100644 static void network_remove(struct connman_network *network) { struct connman_device *device = connman_network_get_device(network); -@@ -2106,6 +2358,10 @@ static void network_remove(struct connman_network *network) +@@ -2116,6 +2368,10 @@ static void network_remove(struct connman_network *network) if (wifi->network != network) return; @@ -491,7 +491,7 @@ index 6233fe11..0917eaf5 100644 wifi->network = NULL; } -@@ -2223,6 +2479,9 @@ static int network_connect(struct connman_network *network) +@@ -2233,6 +2489,9 @@ static int network_connect(struct connman_network *network) if (!wifi) return -ENODEV; @@ -501,8 +501,8 @@ index 6233fe11..0917eaf5 100644 ssid = g_try_malloc0(sizeof(GSupplicantSSID)); if (!ssid) return -ENOMEM; -@@ -2277,12 +2536,10 @@ static void disconnect_callback(int result, GSupplicantInterface *interface, - wifi->disconnecting = false; +@@ -2289,12 +2548,10 @@ static void disconnect_callback(int result, GSupplicantInterface *interface, + wifi->connected = false; - if (wifi->pending_network) { @@ -517,7 +517,7 @@ index 6233fe11..0917eaf5 100644 } static int network_disconnect(struct connman_network *network) -@@ -2425,24 +2682,26 @@ static bool handle_wps_completion(GSupplicantInterface *interface, +@@ -2437,24 +2694,26 @@ static bool handle_wps_completion(GSupplicantInterface *interface, struct disconnect_data *dd; const char *wps_key; @@ -562,7 +562,7 @@ index 6233fe11..0917eaf5 100644 } wps_key = g_supplicant_interface_get_wps_key(interface); -@@ -2499,6 +2758,65 @@ static bool handle_4way_handshake_failure(GSupplicantInterface *interface, +@@ -2511,6 +2770,65 @@ static bool handle_4way_handshake_failure(GSupplicantInterface *interface, return false; } @@ -628,7 +628,7 @@ index 6233fe11..0917eaf5 100644 static void interface_state(GSupplicantInterface *interface) { struct connman_network *network; -@@ -2506,7 +2824,10 @@ static void interface_state(GSupplicantInterface *interface) +@@ -2518,7 +2836,10 @@ static void interface_state(GSupplicantInterface *interface) struct wifi_data *wifi; GSupplicantState state = g_supplicant_interface_get_state(interface); bool wps; @@ -639,7 +639,7 @@ index 6233fe11..0917eaf5 100644 wifi = g_supplicant_interface_get_data(interface); -@@ -2540,6 +2861,23 @@ static void interface_state(GSupplicantInterface *interface) +@@ -2552,6 +2873,23 @@ static void interface_state(GSupplicantInterface *interface) if (!network) return; @@ -663,7 +663,7 @@ index 6233fe11..0917eaf5 100644 switch (state) { case G_SUPPLICANT_STATE_SCANNING: if (wifi->connected) -@@ -2551,6 +2889,7 @@ static void interface_state(GSupplicantInterface *interface) +@@ -2563,6 +2901,7 @@ static void interface_state(GSupplicantInterface *interface) case G_SUPPLICANT_STATE_ASSOCIATING: stop_autoscan(device); @@ -671,7 +671,7 @@ index 6233fe11..0917eaf5 100644 if (!wifi->connected) connman_network_set_associating(network, true); -@@ -2560,6 +2899,7 @@ static void interface_state(GSupplicantInterface *interface) +@@ -2572,6 +2911,7 @@ static void interface_state(GSupplicantInterface *interface) /* though it should be already stopped: */ stop_autoscan(device); @@ -679,7 +679,7 @@ index 6233fe11..0917eaf5 100644 if (!handle_wps_completion(interface, network, device, wifi)) break; -@@ -2568,6 +2908,7 @@ static void interface_state(GSupplicantInterface *interface) +@@ -2580,6 +2920,7 @@ static void interface_state(GSupplicantInterface *interface) wifi->disconnect_code = 0; wifi->assoc_code = 0; wifi->load_shaping_retries = 0; @@ -687,7 +687,7 @@ index 6233fe11..0917eaf5 100644 break; case G_SUPPLICANT_STATE_DISCONNECTED: -@@ -2613,7 +2954,12 @@ static void interface_state(GSupplicantInterface *interface) +@@ -2625,7 +2966,12 @@ static void interface_state(GSupplicantInterface *interface) } wifi->disconnecting = false; @@ -701,7 +701,7 @@ index 6233fe11..0917eaf5 100644 break; -@@ -3289,6 +3635,7 @@ static const GSupplicantCallbacks callbacks = { +@@ -3301,6 +3647,7 @@ static const GSupplicantCallbacks callbacks = { .peer_lost = peer_lost, .peer_changed = peer_changed, .peer_request = peer_request, @@ -710,10 +710,10 @@ index 6233fe11..0917eaf5 100644 .disconnect_reasoncode = disconnect_reasoncode, .assoc_status_code = assoc_status_code, diff --git a/src/connman.h b/src/connman.h -index a43a6b8b..b8de7bd1 100644 +index 68176086..a37d574b 100644 --- a/src/connman.h +++ b/src/connman.h -@@ -573,6 +573,8 @@ enum connman_service_type __connman_device_get_service_type(struct connman_devic +@@ -571,6 +571,8 @@ enum connman_service_type __connman_device_get_service_type(struct connman_devic struct connman_device *__connman_device_find_device(enum connman_service_type type); int __connman_device_request_scan(enum connman_service_type type); int __connman_device_request_scan_full(enum connman_service_type type); @@ -850,12 +850,12 @@ index 264c5e2d..d3048379 100644 { struct ifreq ifr; diff --git a/src/service.c b/src/service.c -index 69f0a511..06f7893d 100644 +index 20917a89..64b117e8 100644 --- a/src/service.c +++ b/src/service.c -@@ -55,6 +55,8 @@ static unsigned int vpn_autoconnect_id = 0; - static struct connman_service *current_default = NULL; - static bool services_dirty = false; +@@ -58,6 +58,8 @@ static bool enable_online_to_ready_transition = false; + static unsigned int online_check_initial_interval = 0; + static unsigned int online_check_max_interval = 0; +bool block_auto_connect = FALSE; + diff --git a/meta-webos/recipes-connectivity/connman/connman/0002-Set-IPv6-state-same-as-IPV4-on-disconnect.patch b/meta-webos/recipes-connectivity/connman/connman/0002-Set-IPv6-state-same-as-IPV4-on-disconnect.patch index c58cc3b70..8ffe33bcb 100644 --- a/meta-webos/recipes-connectivity/connman/connman/0002-Set-IPv6-state-same-as-IPV4-on-disconnect.patch +++ b/meta-webos/recipes-connectivity/connman/connman/0002-Set-IPv6-state-same-as-IPV4-on-disconnect.patch @@ -1,4 +1,4 @@ -From 0d5667f16ac658dd703829eb8ed29c05495dbd4d Mon Sep 17 00:00:00 2001 +From 97326e558f5aca5c2fd45bc967a7720847c105f1 Mon Sep 17 00:00:00 2001 From: "krishna.konwar" Date: Fri, 3 Aug 2018 16:17:00 +0530 Subject: [PATCH] Set IPv6 state same as IPV4 on disconnect @@ -17,10 +17,10 @@ Upstream-Status : Inappropriate [webOS specific] 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/service.c b/src/service.c -index 06f7893d..0e1bc59d 100644 +index 64b117e8..3b35c188 100644 --- a/src/service.c +++ b/src/service.c -@@ -6368,8 +6368,10 @@ int __connman_service_ipconfig_indicate_state(struct connman_service *service, +@@ -6454,8 +6454,10 @@ int __connman_service_ipconfig_indicate_state(struct connman_service *service, if (service->state == CONNMAN_SERVICE_STATE_IDLE) return -EINVAL; diff --git a/meta-webos/recipes-connectivity/connman/connman/0003-Fix-for-wifi-network-switching-and-unable-to-connect.patch b/meta-webos/recipes-connectivity/connman/connman/0003-Fix-for-wifi-network-switching-and-unable-to-connect.patch index d6c12d0fc..e30d662fd 100644 --- a/meta-webos/recipes-connectivity/connman/connman/0003-Fix-for-wifi-network-switching-and-unable-to-connect.patch +++ b/meta-webos/recipes-connectivity/connman/connman/0003-Fix-for-wifi-network-switching-and-unable-to-connect.patch @@ -1,4 +1,4 @@ -From bf962500a95cc23399678eda17a5c5d92efc882b Mon Sep 17 00:00:00 2001 +From c59ddb4b9d463b5db8f2e1ca0eb436947771383f Mon Sep 17 00:00:00 2001 From: Vasu Kantubukta Date: Wed, 19 Dec 2018 21:02:59 +0530 Subject: [PATCH] Fix for wifi network switching and unable to connect to open @@ -32,10 +32,10 @@ Upstream-Status: Inappropriate [webOS specific] 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/wifi.c b/plugins/wifi.c -index 0917eaf5..a9dd35c4 100644 +index dd1cdcaf..13e6861a 100644 --- a/plugins/wifi.c +++ b/plugins/wifi.c -@@ -2954,7 +2954,7 @@ static void interface_state(GSupplicantInterface *interface) +@@ -2966,7 +2966,7 @@ static void interface_state(GSupplicantInterface *interface) } wifi->disconnecting = false; diff --git a/meta-webos/recipes-connectivity/connman/connman/0004-Multiple-wi-fi-networks-are-connected-via-WPS-PIN.patch b/meta-webos/recipes-connectivity/connman/connman/0004-Multiple-wi-fi-networks-are-connected-via-WPS-PIN.patch index 72f38aea6..8a2af81ea 100644 --- a/meta-webos/recipes-connectivity/connman/connman/0004-Multiple-wi-fi-networks-are-connected-via-WPS-PIN.patch +++ b/meta-webos/recipes-connectivity/connman/connman/0004-Multiple-wi-fi-networks-are-connected-via-WPS-PIN.patch @@ -1,4 +1,4 @@ -From 37f53d5931b0827e1ec645853f1342f1baa1ff80 Mon Sep 17 00:00:00 2001 +From 43e4681dc94b8eb6d14f2854ac870919d889fcf1 Mon Sep 17 00:00:00 2001 From: "sachin.shetty" Date: Mon, 24 Jun 2019 16:55:43 +0530 Subject: [PATCH] Multiple wi-fi networks are connected via WPS PIN. diff --git a/meta-webos/recipes-connectivity/connman/connman/0005-Support-additional-feature-for-tethering.patch b/meta-webos/recipes-connectivity/connman/connman/0005-Support-additional-feature-for-tethering.patch index 8c01402b6..eef29910f 100644 --- a/meta-webos/recipes-connectivity/connman/connman/0005-Support-additional-feature-for-tethering.patch +++ b/meta-webos/recipes-connectivity/connman/connman/0005-Support-additional-feature-for-tethering.patch @@ -1,4 +1,4 @@ -From 8720cc006772f7c32e249a6268f500db43dc886d Mon Sep 17 00:00:00 2001 +From 810b8ba3ab15d3a20b80d9d1b87f3c5b54ff9bfd Mon Sep 17 00:00:00 2001 From: "sungmok.shin" Date: Tue, 25 Jun 2019 13:11:11 +0900 Subject: [PATCH] Support additional feature for tethering @@ -40,10 +40,10 @@ index a3095fb7..1d78649c 100644 void connman_technology_wps_failed_notify(struct connman_technology *technology); diff --git a/plugins/wifi.c b/plugins/wifi.c -index a9dd35c4..314d3126 100644 +index 13e6861a..23782ff8 100644 --- a/plugins/wifi.c +++ b/plugins/wifi.c -@@ -3657,16 +3657,25 @@ static void tech_remove(struct connman_technology *technology) +@@ -3669,16 +3669,25 @@ static void tech_remove(struct connman_technology *technology) static GSupplicantSSID *ssid_ap_init(const char *ssid, const char *passphrase) { GSupplicantSSID *ap; @@ -71,10 +71,10 @@ index a9dd35c4..314d3126 100644 if (!passphrase || strlen(passphrase) == 0) { ap->security = G_SUPPLICANT_SECURITY_NONE; diff --git a/src/connman.h b/src/connman.h -index b8de7bd1..8c2aebce 100644 +index a37d574b..741ce028 100644 --- a/src/connman.h +++ b/src/connman.h -@@ -648,6 +648,7 @@ const char *__connman_tethering_get_bridge(void); +@@ -647,6 +647,7 @@ const char *__connman_tethering_get_bridge(void); int __connman_tethering_set_enabled(void); void __connman_tethering_set_disabled(void); void __connman_tethering_list_clients(DBusMessageIter *array); diff --git a/meta-webos/recipes-connectivity/connman/connman/0006-Support-channel-frequency-of-scanned-AP.patch b/meta-webos/recipes-connectivity/connman/connman/0006-Support-channel-frequency-of-scanned-AP.patch index a1a8bf3de..15e7ab11f 100644 --- a/meta-webos/recipes-connectivity/connman/connman/0006-Support-channel-frequency-of-scanned-AP.patch +++ b/meta-webos/recipes-connectivity/connman/connman/0006-Support-channel-frequency-of-scanned-AP.patch @@ -1,4 +1,4 @@ -From 3ea46b51c77c6f15dc9c5666311ac6434721cd64 Mon Sep 17 00:00:00 2001 +From 70a331cc07d59d1036700853b79de1721a8e8c38 Mon Sep 17 00:00:00 2001 From: "sungmok.shin" Date: Wed, 28 Aug 2019 15:35:45 +0900 Subject: [PATCH] Support channel frequency of scanned AP @@ -336,10 +336,10 @@ index 8f9dd94a..1a8f57ad 100644 const char *name); int connman_network_set_strength(struct connman_network *network, diff --git a/plugins/wifi.c b/plugins/wifi.c -index 314d3126..6a61fab2 100644 +index 23782ff8..feff1f66 100644 --- a/plugins/wifi.c +++ b/plugins/wifi.c -@@ -180,6 +180,12 @@ struct disconnect_data { +@@ -179,6 +179,12 @@ struct disconnect_data { struct connman_network *network; }; @@ -352,7 +352,7 @@ index 314d3126..6a61fab2 100644 static GList *iface_list = NULL; static GList *pending_wifi_device = NULL; -@@ -191,6 +197,27 @@ static int tech_set_tethering(struct connman_technology *technology, +@@ -190,6 +196,27 @@ static int tech_set_tethering(struct connman_technology *technology, const char *identifier, const char *passphrase, const char *bridge, bool enabled); @@ -380,7 +380,7 @@ index 314d3126..6a61fab2 100644 static int p2p_tech_probe(struct connman_technology *technology) { p2p_technology = technology; -@@ -2291,6 +2318,52 @@ static int wifi_cancel_wps(struct connman_device *device) +@@ -2301,6 +2328,52 @@ static int wifi_cancel_wps(struct connman_device *device) return cancel_wps(wifi); } @@ -433,7 +433,7 @@ index 314d3126..6a61fab2 100644 static struct connman_device_driver wifi_ng_driver = { .name = "wifi", .type = CONNMAN_DEVICE_TYPE_WIFI, -@@ -2303,7 +2376,8 @@ static struct connman_device_driver wifi_ng_driver = { +@@ -2313,7 +2386,8 @@ static struct connman_device_driver wifi_ng_driver = { .stop_scan = wifi_stop_scan, .set_regdom = wifi_set_regdom, .start_wps = wifi_start_wps, @@ -443,7 +443,7 @@ index 314d3126..6a61fab2 100644 }; static void system_ready(void) -@@ -3154,6 +3228,7 @@ static void network_added(GSupplicantNetwork *supplicant_network) +@@ -3166,6 +3240,7 @@ static void network_added(GSupplicantNetwork *supplicant_network) bool wps_pbc; bool wps_ready; bool wps_advertizing; @@ -451,7 +451,7 @@ index 314d3126..6a61fab2 100644 mode = g_supplicant_network_get_mode(supplicant_network); identifier = g_supplicant_network_get_identifier(supplicant_network); -@@ -3173,6 +3248,7 @@ static void network_added(GSupplicantNetwork *supplicant_network) +@@ -3185,6 +3260,7 @@ static void network_added(GSupplicantNetwork *supplicant_network) wps_ready = g_supplicant_network_is_wps_active(supplicant_network); wps_advertizing = g_supplicant_network_is_wps_advertizing( supplicant_network); @@ -459,7 +459,7 @@ index 314d3126..6a61fab2 100644 if (!wifi) return; -@@ -3239,6 +3315,11 @@ static void network_added(GSupplicantNetwork *supplicant_network) +@@ -3251,6 +3327,11 @@ static void network_added(GSupplicantNetwork *supplicant_network) wifi->hidden = NULL; } } @@ -471,7 +471,7 @@ index 314d3126..6a61fab2 100644 } static void network_removed(GSupplicantNetwork *network) -@@ -3275,11 +3356,13 @@ static void network_changed(GSupplicantNetwork *network, const char *property) +@@ -3287,11 +3368,13 @@ static void network_changed(GSupplicantNetwork *network, const char *property) const char *name, *identifier; struct connman_network *connman_network; bool update_needed; @@ -485,7 +485,7 @@ index 314d3126..6a61fab2 100644 DBG("name %s", name); -@@ -3290,6 +3373,11 @@ static void network_changed(GSupplicantNetwork *network, const char *property) +@@ -3302,6 +3385,11 @@ static void network_changed(GSupplicantNetwork *network, const char *property) if (!connman_network) return; @@ -598,7 +598,7 @@ index d3048379..ce70da90 100644 { struct ifreq ifr; diff --git a/src/network.c b/src/network.c -index 256e3b5f..aa8802ff 100644 +index b12bbc09..be2efc54 100644 --- a/src/network.c +++ b/src/network.c @@ -55,6 +55,12 @@ @@ -750,10 +750,10 @@ index 256e3b5f..aa8802ff 100644 * connman_network_set_name: * @network: network structure diff --git a/src/service.c b/src/service.c -index 0e1bc59d..ce51034e 100644 +index 3b35c188..90839f88 100644 --- a/src/service.c +++ b/src/service.c -@@ -153,6 +153,7 @@ static struct connman_ipconfig *create_ip6config(struct connman_service *service +@@ -156,6 +156,7 @@ static struct connman_ipconfig *create_ip6config(struct connman_service *service int index); static void dns_changed(struct connman_service *service); static void vpn_auto_connect(void); @@ -761,7 +761,7 @@ index 0e1bc59d..ce51034e 100644 struct find_data { const char *path; -@@ -1662,6 +1663,13 @@ static void strength_changed(struct connman_service *service) +@@ -1673,6 +1674,13 @@ static void strength_changed(struct connman_service *service) connman_dbus_property_changed_basic(service->path, CONNMAN_SERVICE_INTERFACE, "Strength", DBUS_TYPE_BYTE, &service->strength); @@ -775,7 +775,7 @@ index 0e1bc59d..ce51034e 100644 } static void favorite_changed(struct connman_service *service) -@@ -2518,6 +2526,57 @@ int connman_service_iterate_services(connman_service_iterate_cb cb, +@@ -2529,6 +2537,57 @@ int connman_service_iterate_services(connman_service_iterate_cb cb, return ret; } @@ -833,7 +833,7 @@ index 0e1bc59d..ce51034e 100644 static void append_properties(DBusMessageIter *dict, dbus_bool_t limited, struct connman_service *service) { -@@ -2583,9 +2642,21 @@ static void append_properties(DBusMessageIter *dict, dbus_bool_t limited, +@@ -2594,9 +2653,21 @@ static void append_properties(DBusMessageIter *dict, dbus_bool_t limited, append_ethernet, service); break; case CONNMAN_SERVICE_TYPE_WIFI: diff --git a/meta-webos/recipes-connectivity/connman/connman/0007-Provide-station-information-when-AP-mode.patch b/meta-webos/recipes-connectivity/connman/connman/0007-Provide-station-information-when-AP-mode.patch index b1031479d..274e2a6a8 100644 --- a/meta-webos/recipes-connectivity/connman/connman/0007-Provide-station-information-when-AP-mode.patch +++ b/meta-webos/recipes-connectivity/connman/connman/0007-Provide-station-information-when-AP-mode.patch @@ -1,4 +1,4 @@ -From bc23bfdfe3c834d8263761b60bfb6a43cfe6ff13 Mon Sep 17 00:00:00 2001 +From fcfd2db1e98f34b6188ac16d59d6a966bf0eccde Mon Sep 17 00:00:00 2001 From: "sungmok.shin" Date: Sat, 31 Aug 2019 14:41:49 +0900 Subject: [PATCH] Provide station information when AP mode @@ -113,10 +113,10 @@ index 1d78649c..60686900 100644 void connman_technology_regdom_notify(struct connman_technology *technology, const char *alpha2); diff --git a/plugins/wifi.c b/plugins/wifi.c -index 6a61fab2..7e5e33ee 100644 +index feff1f66..41b4813e 100644 --- a/plugins/wifi.c +++ b/plugins/wifi.c -@@ -3497,6 +3497,25 @@ static void sta_deauthorized(GSupplicantInterface *interface, +@@ -3509,6 +3509,25 @@ static void sta_deauthorized(GSupplicantInterface *interface, __connman_tethering_client_unregister(addr); } @@ -142,7 +142,7 @@ index 6a61fab2..7e5e33ee 100644 static void apply_peer_services(GSupplicantPeer *peer, struct connman_peer *connman_peer) { -@@ -3717,6 +3736,8 @@ static const GSupplicantCallbacks callbacks = { +@@ -3729,6 +3748,8 @@ static const GSupplicantCallbacks callbacks = { .network_removed = network_removed, .network_changed = network_changed, .network_associated = network_associated, @@ -152,10 +152,10 @@ index 6a61fab2..7e5e33ee 100644 .sta_deauthorized = sta_deauthorized, .peer_found = peer_found, diff --git a/src/connman.h b/src/connman.h -index 8c2aebce..33d097c5 100644 +index 741ce028..63fe06d3 100644 --- a/src/connman.h +++ b/src/connman.h -@@ -641,10 +641,21 @@ bool __connman_config_address_provisioned(const char *address, +@@ -640,10 +640,21 @@ bool __connman_config_address_provisioned(const char *address, #include diff --git a/meta-webos/recipes-connectivity/connman/connman/0008-Fix-compile-error-regarding-connman_tethering_get_st.patch b/meta-webos/recipes-connectivity/connman/connman/0008-Fix-compile-error-regarding-connman_tethering_get_st.patch index 707a67c3e..d678d4c31 100644 --- a/meta-webos/recipes-connectivity/connman/connman/0008-Fix-compile-error-regarding-connman_tethering_get_st.patch +++ b/meta-webos/recipes-connectivity/connman/connman/0008-Fix-compile-error-regarding-connman_tethering_get_st.patch @@ -1,4 +1,4 @@ -From b31e240fcff5098a2f1153e02ced6e82cae2dbec Mon Sep 17 00:00:00 2001 +From 9405a3c0edefa2930f69df6be80cd57bf07a7974 Mon Sep 17 00:00:00 2001 From: "sungmok.shin" Date: Mon, 23 Sep 2019 23:08:32 +0900 Subject: [PATCH] Fix compile error regarding connman_tethering_get_sta_hash diff --git a/meta-webos/recipes-connectivity/connman/connman/0009-Fix-the-wifi-connection-failure.patch b/meta-webos/recipes-connectivity/connman/connman/0009-Fix-the-wifi-connection-failure.patch index f79f3d47c..a2d23fccd 100644 --- a/meta-webos/recipes-connectivity/connman/connman/0009-Fix-the-wifi-connection-failure.patch +++ b/meta-webos/recipes-connectivity/connman/connman/0009-Fix-the-wifi-connection-failure.patch @@ -1,4 +1,4 @@ -From 28304b2c78286a4d04faf588e900a75c48effe19 Mon Sep 17 00:00:00 2001 +From 05bb51aed23ea8c0a42a0e873f400f387bc99d55 Mon Sep 17 00:00:00 2001 From: Seungwoo Yang Date: Wed, 22 Jun 2016 12:35:12 +0900 Subject: [PATCH] Fix the wifi connection failure @@ -32,10 +32,10 @@ Tested-by: Rajesh Kanna 1 file changed, 5 insertions(+) diff --git a/src/service.c b/src/service.c -index ce51034e..1de32aee 100644 +index 90839f88..2f354c3b 100644 --- a/src/service.c +++ b/src/service.c -@@ -6802,6 +6802,11 @@ int __connman_service_disconnect(struct connman_service *service) +@@ -6894,6 +6894,11 @@ int __connman_service_disconnect(struct connman_service *service) __connman_ipconfig_set_proxy_autoconfig(service->ipconfig_ipv6, NULL); diff --git a/meta-webos/recipes-connectivity/connman/connman/0010-Implementing-the-configuration-options-related-to-P2.patch b/meta-webos/recipes-connectivity/connman/connman/0010-Implementing-the-configuration-options-related-to-P2.patch index 4539715db..8f48f731d 100644 --- a/meta-webos/recipes-connectivity/connman/connman/0010-Implementing-the-configuration-options-related-to-P2.patch +++ b/meta-webos/recipes-connectivity/connman/connman/0010-Implementing-the-configuration-options-related-to-P2.patch @@ -1,4 +1,4 @@ -From 41f3ede31e4a9225b03c5099cfb42406d8d88edc Mon Sep 17 00:00:00 2001 +From 84ddfe469be5dd0aeea2674cd0f6c1141c55cf59 Mon Sep 17 00:00:00 2001 From: "sungmok.shin" Date: Tue, 21 Apr 2020 09:27:33 +0900 Subject: [PATCH] Implementing the configuration options related to P2P @@ -64,10 +64,10 @@ index c95ca62b..8c008319 100644 data->user_data = user_data; diff --git a/plugins/wifi.c b/plugins/wifi.c -index 7e5e33ee..9efc7842 100644 +index 41b4813e..6b38df9e 100644 --- a/plugins/wifi.c +++ b/plugins/wifi.c -@@ -1618,6 +1618,27 @@ static void interface_create_callback(int result, +@@ -1628,6 +1628,27 @@ static void interface_create_callback(int result, } } @@ -95,7 +95,7 @@ index 7e5e33ee..9efc7842 100644 static int wifi_enable(struct connman_device *device) { struct wifi_data *wifi = connman_device_get_data(device); -@@ -1636,7 +1657,8 @@ static int wifi_enable(struct connman_device *device) +@@ -1646,7 +1667,8 @@ static int wifi_enable(struct connman_device *device) return -EINPROGRESS; interface = connman_inet_ifname(index); @@ -105,7 +105,7 @@ index 7e5e33ee..9efc7842 100644 interface_create_callback, wifi); g_free(interface); -@@ -3888,7 +3910,7 @@ static void sta_remove_callback(int result, +@@ -3900,7 +3922,7 @@ static void sta_remove_callback(int result, info->wifi->interface = NULL; diff --git a/meta-webos/recipes-connectivity/connman/connman/0011-Read-WpaSupplicantConfigFile-from-main-configuration.patch b/meta-webos/recipes-connectivity/connman/connman/0011-Read-WpaSupplicantConfigFile-from-main-configuration.patch index dbe1cdb90..7b72339c3 100644 --- a/meta-webos/recipes-connectivity/connman/connman/0011-Read-WpaSupplicantConfigFile-from-main-configuration.patch +++ b/meta-webos/recipes-connectivity/connman/connman/0011-Read-WpaSupplicantConfigFile-from-main-configuration.patch @@ -1,31 +1,29 @@ -From 6f8a7556bf35f5c5758292e5add2bb54504f62fc Mon Sep 17 00:00:00 2001 +From 3eb7e531625c7cbca6cc21d1d080eb7bc90b82eb Mon Sep 17 00:00:00 2001 From: "sungmok.shin" Date: Tue, 4 Aug 2020 09:42:25 +0900 Subject: [PATCH] Read WpaSupplicantConfigFile from main configuration +connman_setting_get_string API was added in upstream 1.40 with: + + commit 1b86c9e256d103c8f483085878149ba6b168ead6 + Author: VAUTRIN Emmanuel (Canal Plus Prestataire) + Date: Thu May 6 09:45:01 2021 +0000 + + main: Cleanup of vendor class id and wifi config options + + Ensure homogeneity of config options management by replacing + connman_option_get_string() by connman_setting_get_string(), and + removing irrelevant option.h header file. --- - include/setting.h | 1 + - plugins/wifi.c | 23 +---------------------- - src/main.c | 20 ++++++++++++++++++++ - 3 files changed, 22 insertions(+), 22 deletions(-) + plugins/wifi.c | 23 +---------------------- + src/main.c | 12 ++++++++++++ + 2 files changed, 13 insertions(+), 22 deletions(-) -diff --git a/include/setting.h b/include/setting.h -index a8820217..3c87e77d 100644 ---- a/include/setting.h -+++ b/include/setting.h -@@ -29,6 +29,7 @@ extern "C" { - #endif - - bool connman_setting_get_bool(const char *key); -+char *connman_setting_get_string(const char *key); - char **connman_setting_get_string_list(const char *key); - unsigned int *connman_setting_get_uint_list(const char *key); - diff --git a/plugins/wifi.c b/plugins/wifi.c -index 9efc7842..cc48ceb1 100644 +index 6b38df9e..6c1cd2d6 100644 --- a/plugins/wifi.c +++ b/plugins/wifi.c -@@ -1618,27 +1618,6 @@ static void interface_create_callback(int result, +@@ -1628,27 +1628,6 @@ static void interface_create_callback(int result, } } @@ -53,7 +51,7 @@ index 9efc7842..cc48ceb1 100644 static int wifi_enable(struct connman_device *device) { struct wifi_data *wifi = connman_device_get_data(device); -@@ -1657,7 +1636,7 @@ static int wifi_enable(struct connman_device *device) +@@ -1667,7 +1646,7 @@ static int wifi_enable(struct connman_device *device) return -EINPROGRESS; interface = connman_inet_ifname(index); @@ -63,10 +61,10 @@ index 9efc7842..cc48ceb1 100644 interface_create_callback, wifi); diff --git a/src/main.c b/src/main.c -index 94afc1d9..5affe0e7 100644 +index 6480caa6..88f5fe24 100644 --- a/src/main.c +++ b/src/main.c -@@ -83,6 +83,7 @@ static struct { +@@ -91,6 +91,7 @@ static struct { bool allow_hostname_updates; bool allow_domainname_updates; bool single_tech; @@ -74,7 +72,7 @@ index 94afc1d9..5affe0e7 100644 char **tethering_technologies; bool persistent_tethering_mode; bool enable_6to4; -@@ -105,6 +106,7 @@ static struct { +@@ -116,6 +117,7 @@ static struct { .allow_hostname_updates = true, .allow_domainname_updates = true, .single_tech = false, @@ -82,7 +80,7 @@ index 94afc1d9..5affe0e7 100644 .tethering_technologies = NULL, .persistent_tethering_mode = false, .enable_6to4 = false, -@@ -128,6 +130,7 @@ static struct { +@@ -142,6 +144,7 @@ static struct { #define CONF_ALLOW_HOSTNAME_UPDATES "AllowHostnameUpdates" #define CONF_ALLOW_DOMAINNAME_UPDATES "AllowDomainnameUpdates" #define CONF_SINGLE_TECH "SingleConnectedTechnology" @@ -90,7 +88,7 @@ index 94afc1d9..5affe0e7 100644 #define CONF_TETHERING_TECHNOLOGIES "TetheringTechnologies" #define CONF_PERSISTENT_TETHERING_MODE "PersistentTetheringMode" #define CONF_ENABLE_6TO4 "Enable6to4" -@@ -151,6 +154,7 @@ static const char *supported_options[] = { +@@ -168,6 +171,7 @@ static const char *supported_options[] = { CONF_ALLOW_HOSTNAME_UPDATES, CONF_ALLOW_DOMAINNAME_UPDATES, CONF_SINGLE_TECH, @@ -98,15 +96,15 @@ index 94afc1d9..5affe0e7 100644 CONF_TETHERING_TECHNOLOGIES, CONF_PERSISTENT_TETHERING_MODE, CONF_ENABLE_6TO4, -@@ -280,6 +284,7 @@ static void parse_config(GKeyFile *config) +@@ -300,6 +304,7 @@ static void parse_config(GKeyFile *config) char **timeservers; char **interfaces; char **str_list; + char *wpas_config_file; char **tethering; - char *vendor_class_id; + char *string; gsize len; -@@ -418,6 +423,13 @@ static void parse_config(GKeyFile *config) +@@ -438,6 +443,13 @@ static void parse_config(GKeyFile *config) g_clear_error(&error); @@ -120,18 +118,3 @@ index 94afc1d9..5affe0e7 100644 tethering = __connman_config_get_string_list(config, "General", CONF_TETHERING_TECHNOLOGIES, &len, &error); -@@ -699,6 +711,14 @@ bool connman_setting_get_bool(const char *key) - return false; - } - -+char *connman_setting_get_string(const char *key) -+{ -+ if (g_str_equal(key, CONF_WPA_SUPPLICANT_CONF_FILE) == TRUE) -+ return connman_settings.wpas_config_file; -+ -+ return NULL; -+} -+ - char **connman_setting_get_string_list(const char *key) - { - if (g_str_equal(key, CONF_PREF_TIMESERVERS)) diff --git a/meta-webos/recipes-connectivity/connman/connman/0012-Send-properties-changed-signal-in-case-of-interface-.patch b/meta-webos/recipes-connectivity/connman/connman/0012-Send-properties-changed-signal-in-case-of-interface-.patch index ff9e57256..583ca298c 100644 --- a/meta-webos/recipes-connectivity/connman/connman/0012-Send-properties-changed-signal-in-case-of-interface-.patch +++ b/meta-webos/recipes-connectivity/connman/connman/0012-Send-properties-changed-signal-in-case-of-interface-.patch @@ -1,4 +1,4 @@ -From 3f94033062d820a722be30a6afbe41e2e39f84f4 Mon Sep 17 00:00:00 2001 +From 5e28fa42429e6b760213e178550979fc491dc7ed Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Fri, 4 Dec 2020 14:31:45 +0530 Subject: [PATCH] Send properties changed signal in case of interface change @@ -40,10 +40,10 @@ index 60686900..8b4f159c 100644 int connman_technology_remove_station(char *mac); int connman_technology_set_regdom(const char *alpha2); diff --git a/plugins/ethernet.c b/plugins/ethernet.c -index ed4208ad..fc8cd433 100644 +index 6146b1c0..23ea29b4 100644 --- a/plugins/ethernet.c +++ b/plugins/ethernet.c -@@ -345,6 +345,8 @@ static void eth_tech_add_interface(struct connman_technology *technology, +@@ -347,6 +347,8 @@ static void eth_tech_add_interface(struct connman_technology *technology, eth_interface_list = g_list_prepend(eth_interface_list, (GINT_TO_POINTER((int) index))); @@ -52,7 +52,7 @@ index ed4208ad..fc8cd433 100644 } static void eth_tech_remove_interface(struct connman_technology *technology, -@@ -354,6 +356,7 @@ static void eth_tech_remove_interface(struct connman_technology *technology, +@@ -356,6 +358,7 @@ static void eth_tech_remove_interface(struct connman_technology *technology, eth_interface_list = g_list_remove(eth_interface_list, GINT_TO_POINTER((int) index)); diff --git a/meta-webos/recipes-connectivity/connman/connman/0013-Added-new-method-SetDefault-for-Interface-net.connma.patch b/meta-webos/recipes-connectivity/connman/connman/0013-Added-new-method-SetDefault-for-Interface-net.connma.patch index 2526bfd2c..e4b842418 100644 --- a/meta-webos/recipes-connectivity/connman/connman/0013-Added-new-method-SetDefault-for-Interface-net.connma.patch +++ b/meta-webos/recipes-connectivity/connman/connman/0013-Added-new-method-SetDefault-for-Interface-net.connma.patch @@ -1,4 +1,4 @@ -From fdf31f0cf943a76d2222ea313412e8142228a47f Mon Sep 17 00:00:00 2001 +From 7a20a99ee8e55cbbaf9619615b52aaa77814d615 Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Tue, 5 Jan 2021 13:55:12 +0530 Subject: [PATCH] Added new method SetDefault for Interface net.connman.Service @@ -32,10 +32,10 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 111 insertions(+) diff --git a/src/service.c b/src/service.c -index 1de32aee..f90416a3 100644 +index 2f354c3b..c63c1edc 100644 --- a/src/service.c +++ b/src/service.c -@@ -5016,6 +5016,108 @@ static DBusMessage *move_service(DBusConnection *conn, +@@ -5038,6 +5038,108 @@ static DBusMessage *move_service(DBusConnection *conn, return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); } @@ -144,7 +144,7 @@ index 1de32aee..f90416a3 100644 static DBusMessage *move_before(DBusConnection *conn, DBusMessage *msg, void *user_data) { -@@ -5038,6 +5140,13 @@ static DBusMessage *reset_counters(DBusConnection *conn, +@@ -5060,6 +5162,13 @@ static DBusMessage *reset_counters(DBusConnection *conn, return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); } @@ -158,7 +158,7 @@ index 1de32aee..f90416a3 100644 static void service_schedule_added(struct connman_service *service) { DBG("service %p", service); -@@ -5095,6 +5204,8 @@ static const GDBusMethodTable service_methods[] = { +@@ -5117,6 +5226,8 @@ static const GDBusMethodTable service_methods[] = { GDBUS_ARGS({ "service", "o" }), NULL, move_after) }, { GDBUS_METHOD("ResetCounters", NULL, NULL, reset_counters) }, diff --git a/meta-webos/recipes-connectivity/connman/connman/0014-Pick-gateway-from-gateway_hash-if-it-is-not-updated-.patch b/meta-webos/recipes-connectivity/connman/connman/0014-Pick-gateway-from-gateway_hash-if-it-is-not-updated-.patch index 19f257965..8c3ee916e 100644 --- a/meta-webos/recipes-connectivity/connman/connman/0014-Pick-gateway-from-gateway_hash-if-it-is-not-updated-.patch +++ b/meta-webos/recipes-connectivity/connman/connman/0014-Pick-gateway-from-gateway_hash-if-it-is-not-updated-.patch @@ -1,4 +1,4 @@ -From 914980806cbedd26e8363d2a9b72f7b6b5f739e5 Mon Sep 17 00:00:00 2001 +From 982bd4cb8c883b4b65e8b6c89342a876bc9c07ba Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Tue, 19 Jan 2021 17:53:14 +0530 Subject: [PATCH] Pick gateway from gateway_hash if it is not updated in ipv4 @@ -54,10 +54,10 @@ index 9d2c6961..571024a4 100644 struct gateway_data *candidate) { diff --git a/src/connman.h b/src/connman.h -index 33d097c5..558e06db 100644 +index 63fe06d3..67886e5d 100644 --- a/src/connman.h +++ b/src/connman.h -@@ -392,7 +392,7 @@ const char *__connman_ipconfig_type2string(enum connman_ipconfig_type type); +@@ -390,7 +390,7 @@ const char *__connman_ipconfig_type2string(enum connman_ipconfig_type type); enum connman_ipconfig_method __connman_ipconfig_string2method(const char *method); void __connman_ipconfig_append_ipv4(struct connman_ipconfig *ipconfig, @@ -66,7 +66,7 @@ index 33d097c5..558e06db 100644 void __connman_ipconfig_append_ipv4config(struct connman_ipconfig *ipconfig, DBusMessageIter *iter); void __connman_ipconfig_append_ipv6(struct connman_ipconfig *ipconfig, -@@ -507,6 +507,8 @@ int __connman_connection_gateway_add(struct connman_service *service, +@@ -505,6 +505,8 @@ int __connman_connection_gateway_add(struct connman_service *service, const char *peer); void __connman_connection_gateway_remove(struct connman_service *service, enum connman_ipconfig_type type); @@ -76,10 +76,10 @@ index 33d097c5..558e06db 100644 int __connman_connection_get_vpn_phy_index(int vpn_index); diff --git a/src/ipconfig.c b/src/ipconfig.c -index 2bfeefd4..08576820 100644 +index 1551826b..484dd720 100644 --- a/src/ipconfig.c +++ b/src/ipconfig.c -@@ -1878,7 +1878,7 @@ int __connman_ipconfig_ipv6_set_privacy(struct connman_ipconfig *ipconfig, +@@ -1890,7 +1890,7 @@ int __connman_ipconfig_ipv6_set_privacy(struct connman_ipconfig *ipconfig, } void __connman_ipconfig_append_ipv4(struct connman_ipconfig *ipconfig, @@ -88,7 +88,7 @@ index 2bfeefd4..08576820 100644 { struct connman_ipaddress *append_addr = NULL; const char *str; -@@ -1929,6 +1929,13 @@ void __connman_ipconfig_append_ipv4(struct connman_ipconfig *ipconfig, +@@ -1941,6 +1941,13 @@ void __connman_ipconfig_append_ipv4(struct connman_ipconfig *ipconfig, if (append_addr->gateway) connman_dbus_dict_append_basic(iter, "Gateway", DBUS_TYPE_STRING, &append_addr->gateway); @@ -103,7 +103,7 @@ index 2bfeefd4..08576820 100644 void __connman_ipconfig_append_ipv6(struct connman_ipconfig *ipconfig, diff --git a/src/service.c b/src/service.c -index f90416a3..8926a5b6 100644 +index c63c1edc..068679d5 100644 --- a/src/service.c +++ b/src/service.c @@ -37,6 +37,7 @@ @@ -114,7 +114,7 @@ index f90416a3..8926a5b6 100644 #include "connman.h" #define CONNECT_TIMEOUT 120 -@@ -1822,7 +1823,7 @@ static void append_ipv4(DBusMessageIter *iter, void *user_data) +@@ -1833,7 +1834,7 @@ static void append_ipv4(DBusMessageIter *iter, void *user_data) return; if (service->ipconfig_ipv4) diff --git a/meta-webos/recipes-connectivity/connman/connman/0015-Add-CIDR-prefix-length-as-ipv4-property.patch b/meta-webos/recipes-connectivity/connman/connman/0015-Add-CIDR-prefix-length-as-ipv4-property.patch index b3385d5d2..6503fed30 100644 --- a/meta-webos/recipes-connectivity/connman/connman/0015-Add-CIDR-prefix-length-as-ipv4-property.patch +++ b/meta-webos/recipes-connectivity/connman/connman/0015-Add-CIDR-prefix-length-as-ipv4-property.patch @@ -1,4 +1,4 @@ -From e549f55bb90c2da0e2a4d7e9ae82151548a7d941 Mon Sep 17 00:00:00 2001 +From 48fe0a47f247636717b0536c546075bb1f188704 Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Fri, 22 Jan 2021 09:50:37 +0530 Subject: [PATCH] Add CIDR prefix length as ipv4 property @@ -25,10 +25,10 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 4 insertions(+) diff --git a/src/ipconfig.c b/src/ipconfig.c -index 08576820..fa9def70 100644 +index 484dd720..d12962f1 100644 --- a/src/ipconfig.c +++ b/src/ipconfig.c -@@ -1919,6 +1919,10 @@ void __connman_ipconfig_append_ipv4(struct connman_ipconfig *ipconfig, +@@ -1931,6 +1931,10 @@ void __connman_ipconfig_append_ipv4(struct connman_ipconfig *ipconfig, connman_dbus_dict_append_basic(iter, "Address", DBUS_TYPE_STRING, &append_addr->local); diff --git a/meta-webos/recipes-connectivity/connman/connman/0016-Add-p2p-changes.patch b/meta-webos/recipes-connectivity/connman/connman/0016-Add-p2p-changes.patch index 1dbc6c1df..5bcbfa4ec 100644 --- a/meta-webos/recipes-connectivity/connman/connman/0016-Add-p2p-changes.patch +++ b/meta-webos/recipes-connectivity/connman/connman/0016-Add-p2p-changes.patch @@ -1,4 +1,4 @@ -From 89b7d4fbc1f47e066d332d1ed3d46aa0d120b87a Mon Sep 17 00:00:00 2001 +From 8e068f58ea097e5e9d8afcf56a1e3b094d6c5189 Mon Sep 17 00:00:00 2001 From: "penikelapati.kumar" Date: Wed, 27 Jan 2021 17:23:22 +0530 Subject: [PATCH] Add p2p changes @@ -36,7 +36,7 @@ Upstream-Status: Inappropriate[webos specific] include/sd.h | 25 + include/technology.h | 38 + include/types.h | 45 + - plugins/wifi.c | 7268 ++++++++++++++++++++++++------------- + plugins/wifi.c | 7320 ++++++++++++++++++++++++------------- src/connman.h | 27 +- src/dbus.c | 5 + src/device.c | 76 + @@ -51,9 +51,9 @@ Upstream-Status: Inappropriate[webos specific] src/sd.c | 382 ++ src/service.c | 5 + src/storage.c | 139 +- - src/technology.c | 812 ++++- + src/technology.c | 812 +++- src/util.c | 105 + - 30 files changed, 14346 insertions(+), 4115 deletions(-) + 30 files changed, 14372 insertions(+), 4141 deletions(-) create mode 100644 include/group.h create mode 100644 include/sd.h create mode 100644 include/types.h @@ -62,7 +62,7 @@ Upstream-Status: Inappropriate[webos specific] create mode 100644 src/sd.c diff --git a/Makefile.am b/Makefile.am -index 8b4b4996..51e502b2 100644 +index e5718b19..5c9f61e1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -11,8 +11,8 @@ include_HEADERS = include/log.h include/plugin.h \ @@ -9451,7 +9451,7 @@ index 00000000..0f671ec3 + +#endif /* __CONNMAN_TYPES_H */ diff --git a/plugins/wifi.c b/plugins/wifi.c -index cc48ceb1..287c5789 100644 +index 6c1cd2d6..14e9bfc4 100644 --- a/plugins/wifi.c +++ b/plugins/wifi.c @@ -33,6 +33,8 @@ @@ -9463,7 +9463,7 @@ index cc48ceb1..287c5789 100644 #ifndef IFF_LOWER_UP #define IFF_LOWER_UP 0x10000 #endif -@@ -59,6 +61,10 @@ +@@ -58,6 +60,10 @@ #include @@ -9474,7 +9474,7 @@ index cc48ceb1..287c5789 100644 #include "src/shared/util.h" #define CLEANUP_TIMEOUT 8 /* in seconds */ -@@ -70,16 +76,30 @@ +@@ -69,16 +75,30 @@ #define AUTOSCAN_EXPONENTIAL "exponential:3:300" #define AUTOSCAN_SINGLE "single:3" #define SCAN_MAX_DURATION 10 @@ -9508,7 +9508,7 @@ index cc48ceb1..287c5789 100644 static struct connman_technology *wifi_technology = NULL; static struct connman_technology *p2p_technology = NULL; -@@ -159,12 +179,14 @@ struct wifi_data { +@@ -158,12 +178,14 @@ struct wifi_data { struct autoscan_params *autoscan; enum wifi_scanning_type scanning_type; GSupplicantScanParams *scan_params; @@ -9523,7 +9523,7 @@ index cc48ceb1..287c5789 100644 int servicing; int disconnect_code; int assoc_code; -@@ -173,11 +195,12 @@ struct wifi_data { +@@ -172,11 +194,12 @@ struct wifi_data { GSupplicantSSID *wps_ssid; guint wps_timeout; bool wps_start_deferred; @@ -9540,7 +9540,7 @@ index cc48ceb1..287c5789 100644 }; struct wifi_cb_data { -@@ -186,16 +209,34 @@ struct wifi_cb_data { +@@ -185,16 +208,34 @@ struct wifi_cb_data { void *user_data; }; @@ -9575,7 +9575,7 @@ index cc48ceb1..287c5789 100644 static void bss_foreach(gpointer key, gpointer value, gpointer user_data) { -@@ -230,1515 +271,1759 @@ static void p2p_tech_remove(struct connman_technology *technology) +@@ -229,1523 +270,1764 @@ static void p2p_tech_remove(struct connman_technology *technology) p2p_technology = NULL; } @@ -10118,18 +10118,26 @@ index cc48ceb1..287c5789 100644 - if (version > 0) { - params->version = version; -- params->service = g_memdup(spec, spec_length); +- if (spec_length > 0) { +- params->service = g_malloc(spec_length); +- memcpy(params->service, spec, spec_length); +- } - } else if (query_length > 0 && spec_length > 0) { -- params->query = g_memdup(query, query_length); +- params->query = g_malloc(query_length); +- memcpy(params->query, query, query_length); - params->query_length = query_length; + if (!wifi->interface || + !g_supplicant_interface_has_p2p(wifi->interface)) + continue; -- params->response = g_memdup(spec, spec_length); +- params->response = g_malloc(spec_length); +- memcpy(params->response, spec, spec_length); - params->response_length = spec_length; - } else { -- params->wfd_ies = g_memdup(spec, spec_length); +- if (spec_length > 0) { +- params->wfd_ies = g_malloc(spec_length); +- memcpy(params->wfd_ies, spec, spec_length); +- } - params->wfd_ies_length = spec_length; + // Decrement the count if listen is already set + if (wifi->servicing && params_changed) @@ -10432,8 +10440,7 @@ index cc48ceb1..287c5789 100644 + strncat(persistent_info_name, peer_ident, strlen(peer_ident)); + + p2p_persistent_info_load(interface, persistent_info_name, removing_pg); - -- if (!g_supplicant_interface_has_p2p(wifi->interface)) ++ + if(removing_pg->ssid == NULL) { + g_free(removing_pg); + return -EOPNOTSUPP; @@ -10442,7 +10449,8 @@ index cc48ceb1..287c5789 100644 + item = wifi->persistent_groups; + while(item != NULL) { + persistent_group = item->data; -+ + +- if (!g_supplicant_interface_has_p2p(wifi->interface)) + if(persistent_group->ssid == NULL || persistent_group->bssid == NULL) continue; @@ -10538,10 +10546,8 @@ index cc48ceb1..287c5789 100644 } - return 0; +-} + g_free(addr_no_colon); -+ -+ return err; - } -static struct connman_peer_driver peer_driver = { - .connect = peer_connect, @@ -10549,12 +10555,20 @@ index cc48ceb1..287c5789 100644 - .register_service = peer_register_service, - .unregister_service = peer_unregister_service, -}; -- ++ return err; ++} + -static void handle_tethering(struct wifi_data *wifi) +static int tech_remove_persistent_info_all(struct connman_technology *technology) { - if (!wifi->tethering) - return; +- +- if (!wifi->bridge) +- return; +- +- if (wifi->bridged) +- return; + GList *list; + struct wifi_data *wifi = NULL; + GSupplicantInterface *interface; @@ -10563,50 +10577,65 @@ index cc48ceb1..287c5789 100644 + struct connman_network *network; + int i; -- if (!wifi->bridge) -- return; +- DBG("index %d bridge %s", wifi->index, wifi->bridge); + if (!is_technology_enabled(p2p_technology)) + return -EOPNOTSUPP; -- if (wifi->bridged) +- if (connman_inet_add_to_bridge(wifi->index, wifi->bridge) < 0) - return; + for (list = iface_list; list; list = list->next) { + wifi = list->data; + interface = wifi->interface; -- DBG("index %d bridge %s", wifi->index, wifi->bridge); +- wifi->bridged = true; +-} + if (interface == NULL || !g_supplicant_interface_has_p2p(interface)) + continue; -- if (connman_inet_add_to_bridge(wifi->index, wifi->bridge) < 0) -- return; +-static void wifi_newlink(unsigned flags, unsigned change, void *user_data) +-{ +- struct connman_device *device = user_data; +- struct wifi_data *wifi = connman_device_get_data(device); + g_supplicant_interface_p2p_remove_all_persistent_groups(interface); + } -- wifi->bridged = true; +- if (!wifi) +- return; + persistents = __connman_storage_get_p2p_persistents(); + for (i = 0; persistents && persistents[i]; i++) { + DBG("loop : %s\n", persistents[i]); -+ + +- DBG("index %d flags %d change %d", wifi->index, flags, change); + if (strncmp(persistents[i], "p2p_persistent_", 15) != 0) + continue; -+ + +- if ((wifi->flags & IFF_UP) != (flags & IFF_UP)) { +- if (flags & IFF_UP) +- DBG("interface up"); +- else +- DBG("interface down"); +- } + __connman_storage_remove_service(persistents[i]); -+ -+ } -+ + +- if ((wifi->flags & IFF_LOWER_UP) != (flags & IFF_LOWER_UP)) { +- if (flags & IFF_LOWER_UP) +- DBG("carrier on"); +- else +- DBG("carrier off"); + } + +- if (flags & IFF_LOWER_UP) +- handle_tethering(wifi); + if (wifi) + g_hash_table_remove_all(wifi->persistent_peer_ssid); -+ + +- wifi->flags = flags; + if (persistents) + g_strfreev(persistents); + return 1; } --static void wifi_newlink(unsigned flags, unsigned change, void *user_data) --{ -- struct connman_device *device = user_data; -- struct wifi_data *wifi = connman_device_get_data(device); +-static int wifi_probe(struct connman_device *device) +static struct connman_technology_driver p2p_tech_driver = { + .name = "p2p", + .type = CONNMAN_SERVICE_TYPE_P2P, @@ -10623,34 +10652,31 @@ index cc48ceb1..287c5789 100644 + .remove_persistent_info = tech_remove_persistent_info, + .remove_persistent_info_all = tech_remove_persistent_info_all, +}; - -- if (!wifi) -- return; ++ +static bool is_p2p_connecting(void) -+{ + { +- struct wifi_data *wifi; + GList *list; -- DBG("index %d flags %d change %d", wifi->index, flags, change); +- DBG("device %p", device); + for (list = iface_list; list; list = list->next) { + struct wifi_data *wifi = list->data; -- if ((wifi->flags & IFF_UP) != (flags & IFF_UP)) { -- if (flags & IFF_UP) -- DBG("interface up"); -- else -- DBG("interface down"); +- wifi = g_try_new0(struct wifi_data, 1); +- if (!wifi) +- return -ENOMEM; + if (wifi->p2p_connecting) + return true; - } ++ } -- if ((wifi->flags & IFF_LOWER_UP) != (flags & IFF_LOWER_UP)) { -- if (flags & IFF_LOWER_UP) -- DBG("carrier on"); -- else -- DBG("carrier off"); +- wifi->state = G_SUPPLICANT_STATE_INACTIVE; +- wifi->ap_supported = WIFI_AP_UNKNOWN; +- wifi->tethering_param = NULL; + return false; +} -+ + +- connman_device_set_data(device, wifi); +- wifi->device = connman_device_ref(device); +static void enable_auto_connect_block(bool block) +{ + DBG("block %d", block); @@ -10659,44 +10685,39 @@ index cc48ceb1..287c5789 100644 + else { + block_auto_connect = false; + __connman_service_auto_connect(CONNMAN_SERVICE_CONNECT_REASON_AUTO); - } ++ } +} -- if (flags & IFF_LOWER_UP) -- handle_tethering(wifi); +- wifi->index = connman_device_get_index(device); +- wifi->flags = 0; +static void add_pending_wifi_device(struct wifi_data *wifi) +{ + if (g_list_find(pending_wifi_device, wifi)) + return; -- wifi->flags = flags; +- wifi->watch = connman_rtnl_add_newlink_watch(wifi->index, +- wifi_newlink, device); + pending_wifi_device = g_list_append(pending_wifi_device, wifi); - } ++} --static int wifi_probe(struct connman_device *device) +- wifi->wps_active = FALSE; +static struct wifi_data *get_pending_wifi_data(const char *ifname) - { -- struct wifi_data *wifi; -- -- DBG("device %p", device); ++{ + GList *list; -- wifi = g_try_new0(struct wifi_data, 1); -- if (!wifi) -- return -ENOMEM; +- if (is_p2p_connecting()) +- add_pending_wifi_device(wifi); +- else +- iface_list = g_list_append(iface_list, wifi); + for (list = pending_wifi_device; list; list = list->next) { + struct wifi_data *wifi; + const char *dev_name; -- wifi->state = G_SUPPLICANT_STATE_INACTIVE; -- wifi->ap_supported = WIFI_AP_UNKNOWN; -- wifi->tethering_param = NULL; +- return 0; + wifi = list->data; + if (!wifi || !wifi->device) + continue; - -- connman_device_set_data(device, wifi); -- wifi->device = connman_device_ref(device); ++ + dev_name = connman_device_get_string(wifi->device, "Interface"); + if (!g_strcmp0(ifname, dev_name)) { + pending_wifi_device = g_list_delete_link( @@ -10704,129 +10725,143 @@ index cc48ceb1..287c5789 100644 + return wifi; + } + } - -- wifi->index = connman_device_get_index(device); -- wifi->flags = 0; ++ + return NULL; -+} + } -- wifi->watch = connman_rtnl_add_newlink_watch(wifi->index, -- wifi_newlink, device); +-static void remove_networks(struct connman_device *device, +- struct wifi_data *wifi) +static void remove_pending_wifi_device(struct wifi_data *wifi) -+{ + { +- GSList *list; + GList *link; -- wifi->wps_active = FALSE; +- for (list = wifi->networks; list; list = list->next) { +- struct connman_network *network = list->data; + link = g_list_find(pending_wifi_device, wifi); -- if (is_p2p_connecting()) -- add_pending_wifi_device(wifi); -- else -- iface_list = g_list_append(iface_list, wifi); +- connman_device_remove_network(device, network); +- connman_network_unref(network); +- } + if (!link) + return; -- return 0; +- g_slist_free(wifi->networks); +- wifi->networks = NULL; + pending_wifi_device = g_list_delete_link(pending_wifi_device, link); } --static void remove_networks(struct connman_device *device, -- struct wifi_data *wifi) +-static void remove_peers(struct wifi_data *wifi) +static void peer_cancel_timeout(struct wifi_data *wifi) { - GSList *list; + if (wifi->p2p_connection_timeout > 0) + g_source_remove(wifi->p2p_connection_timeout); -- for (list = wifi->networks; list; list = list->next) { -- struct connman_network *network = list->data; +- for (list = wifi->peers; list; list = list->next) { +- struct connman_peer *peer = list->data; + wifi->p2p_connection_timeout = 0; + wifi->p2p_connecting = false; -- connman_device_remove_network(device, network); -- connman_network_unref(network); +- connman_peer_unregister(peer); +- connman_peer_unref(peer); + if (wifi->pending_peer) { + connman_peer_unref(wifi->pending_peer); + wifi->pending_peer = NULL; } - -- g_slist_free(wifi->networks); -- wifi->networks = NULL; +- g_slist_free(wifi->peers); +- wifi->peers = NULL; } --static void remove_peers(struct wifi_data *wifi) +-static void reset_autoscan(struct connman_device *device) +static gboolean peer_connect_timeout(gpointer data) { -- GSList *list; +- struct wifi_data *wifi = connman_device_get_data(device); +- struct autoscan_params *autoscan; + struct wifi_data *wifi = data; -- for (list = wifi->peers; list; list = list->next) { -- struct connman_peer *peer = list->data; -+ DBG(""); + DBG(""); -- connman_peer_unregister(peer); -- connman_peer_unref(peer); +- if (!wifi || !wifi->autoscan) +- return; +- +- autoscan = wifi->autoscan; + if (wifi->p2p_connecting) { + enum connman_peer_state state = CONNMAN_PEER_STATE_FAILURE; + GSupplicantPeer *gs_peer = + g_supplicant_interface_peer_lookup(wifi->interface, + connman_peer_get_identifier(wifi->pending_peer)); -+ + +- autoscan->interval = 0; + if (g_supplicant_peer_has_requested_connection(gs_peer)) + state = CONNMAN_PEER_STATE_IDLE; -+ + +- if (autoscan->timeout == 0) +- return; + connman_peer_set_state(wifi->pending_peer, state); - } ++ } -- g_slist_free(wifi->peers); -- wifi->peers = NULL; +- g_source_remove(autoscan->timeout); +- autoscan->timeout = 0; + peer_cancel_timeout(wifi); -+ + +- connman_device_unref(device); + return FALSE; } --static void reset_autoscan(struct connman_device *device) +-static void stop_autoscan(struct connman_device *device) +static void peer_connect_callback(int result, GSupplicantInterface *interface, + void *user_data) { -- struct wifi_data *wifi = connman_device_get_data(device); -- struct autoscan_params *autoscan; +- const struct wifi_data *wifi = connman_device_get_data(device); +- +- if (!wifi || !wifi->autoscan) +- return; +- +- reset_autoscan(device); +- +- connman_device_set_scanning(device, CONNMAN_SERVICE_TYPE_WIFI, false); +-} + struct wifi_data *wifi = user_data; + struct connman_peer *peer = wifi->pending_peer; -- DBG(""); +-static void check_p2p_technology(void) +-{ +- bool p2p_exists = false; +- GList *list; + DBG("peer %p - %d", peer, result); -- if (!wifi || !wifi->autoscan) +- for (list = iface_list; list; list = list->next) { +- struct wifi_data *w = list->data; + if (!peer) - return; ++ return; -- autoscan = wifi->autoscan; -- -- autoscan->interval = 0; -- -- if (autoscan->timeout == 0) +- if (w->interface && +- g_supplicant_interface_has_p2p(w->interface)) +- p2p_exists = true; + if (result < 0) { + peer_connect_timeout(wifi); - return; -+ } ++ return; + } -- g_source_remove(autoscan->timeout); -- autoscan->timeout = 0; +- if (!p2p_exists) { +- connman_technology_driver_unregister(&p2p_tech_driver); +- connman_peer_driver_unregister(&peer_driver); +- } + connman_peer_set_state(peer, CONNMAN_PEER_STATE_ASSOCIATION); - -- connman_device_unref(device); ++ + wifi->p2p_connection_timeout = g_timeout_add_seconds( + P2P_CONNECTION_TIMEOUT, + peer_connect_timeout, wifi); } --static void stop_autoscan(struct connman_device *device) +-static void wifi_remove(struct connman_device *device) +static int peer_connect(struct connman_peer *peer, + enum connman_peer_wps_method wps_method, + const char *wps_pin) { -- const struct wifi_data *wifi = connman_device_get_data(device); +- struct wifi_data *wifi = connman_device_get_data(device); + struct connman_device *device = connman_peer_get_device(peer); + GSupplicantPeerParams *peer_params; + GSupplicantPeer *gs_peer; @@ -10834,40 +10869,39 @@ index cc48ceb1..287c5789 100644 + bool pbc, pin; + int ret; -- if (!wifi || !wifi->autoscan) -- return; +- DBG("device %p wifi %p", device, wifi); + DBG("peer %p", peer); -- reset_autoscan(device); +- if (!wifi) +- return; + if (!device) + return -ENODEV; -- connman_device_set_scanning(device, CONNMAN_SERVICE_TYPE_WIFI, false); --} +- stop_autoscan(device); + wifi = connman_device_get_data(device); + if (!wifi || !wifi->interface) + return -ENODEV; --static void check_p2p_technology(void) --{ -- bool p2p_exists = false; -- GList *list; +- if (wifi->p2p_device) +- p2p_iface_list = g_list_remove(p2p_iface_list, wifi); +- else +- iface_list = g_list_remove(iface_list, wifi); + if (wifi->p2p_connecting) + return -EBUSY; -- for (list = iface_list; list; list = list->next) { -- struct wifi_data *w = list->data; +- check_p2p_technology(); + gs_peer = g_supplicant_interface_peer_lookup(wifi->interface, + connman_peer_get_identifier(peer)); + if (!gs_peer) + return -EINVAL; -- if (w->interface && -- g_supplicant_interface_has_p2p(w->interface)) -- p2p_exists = true; +- remove_pending_wifi_device(wifi); + pbc = g_supplicant_peer_is_wps_pbc(gs_peer); + pin = g_supplicant_peer_is_wps_pin(gs_peer); -+ + +- if (connman_device_get_scanning(device, CONNMAN_SERVICE_TYPE_P2P)) { +- g_source_remove(wifi->p2p_find_timeout); +- connman_device_unref(wifi->device); + switch (wps_method) { + case CONNMAN_PEER_WPS_UNKNOWN: + if ((pbc && pin) || pin) @@ -10884,47 +10918,67 @@ index cc48ceb1..287c5789 100644 + break; } -- if (!p2p_exists) { -- connman_technology_driver_unregister(&p2p_tech_driver); -- connman_peer_driver_unregister(&peer_driver); +- if (wifi->p2p_connection_timeout) +- g_source_remove(wifi->p2p_connection_timeout); +- +- remove_networks(device, wifi); +- remove_peers(wifi); +- +- connman_device_set_powered(device, false); +- connman_device_set_data(device, NULL); +- connman_device_unref(wifi->device); +- connman_rtnl_remove_watch(wifi->watch); +- +- g_supplicant_interface_set_data(wifi->interface, NULL); +- +- g_supplicant_interface_cancel(wifi->interface); + if (connman_technology_get_p2p_listen(p2p_technology)) { + leave_p2p_listen_on_iface(wifi); + connman_technology_set_p2p_listen(p2p_technology, false); - } --} ++ } --static void wifi_remove(struct connman_device *device) --{ -- struct wifi_data *wifi = connman_device_get_data(device); +- if (wifi->scan_params) +- g_supplicant_free_scan_params(wifi->scan_params); + if(p2p_go_identifier != NULL) { + struct connman_network *network; + const char *wp_pin = NULL; -- DBG("device %p wifi %p", device, wifi); +- g_free(wifi->autoscan); +- g_free(wifi->identifier); +- g_free(wifi); +-} + struct connman_group * group = __connman_group_lookup_from_ident(p2p_go_identifier); + const char *identifier = connman_peer_get_identifier(peer); -- if (!wifi) -- return; +-static bool is_duplicate(GSList *list, gchar *ssid, int ssid_len) +-{ +- GSList *iter; + network = connman_device_get_network(wifi->device, identifier); -- stop_autoscan(device); +- for (iter = list; iter; iter = g_slist_next(iter)) { +- struct scan_ssid *scan_ssid = iter->data; + if(group != NULL) { + GSupplicantP2PWPSParams *wps_params = NULL; -- if (wifi->p2p_device) -- p2p_iface_list = g_list_remove(p2p_iface_list, wifi); -- else -- iface_list = g_list_remove(iface_list, wifi); +- if (ssid_len == scan_ssid->ssid_len && +- memcmp(ssid, scan_ssid->ssid, ssid_len) == 0) +- return true; +- } + wps_params = g_try_malloc0(sizeof(GSupplicantP2PWPSParams)); + if(wps_params == NULL) + return -ENOMEM; -- check_p2p_technology(); +- return false; +-} + if (network != NULL) + wp_pin = connman_network_get_string(network, "WiFi.PinWPS"); -- remove_pending_wifi_device(wifi); +-static int add_scan_param(gchar *hex_ssid, char *raw_ssid, int ssid_len, +- int freq, GSupplicantScanParams *scan_data, +- int driver_max_scan_ssids, char *ssid_name) +-{ +- unsigned int i; +- struct scan_ssid *scan_ssid; + wps_params->role = "enrollee"; + if(wp_pin == NULL) { + wps_params->type = "pbc"; @@ -10934,42 +10988,70 @@ index cc48ceb1..287c5789 100644 + wps_params->pin = wp_pin; + } -- if (connman_device_get_scanning(device, CONNMAN_SERVICE_TYPE_P2P)) { -- g_source_remove(wifi->p2p_find_timeout); -- connman_device_unref(wifi->device); +- if ((driver_max_scan_ssids == 0 || +- driver_max_scan_ssids > scan_data->num_ssids) && +- (hex_ssid || raw_ssid)) { +- gchar *ssid; +- unsigned int j = 0, hex; + ret = __connman_group_accept_connection(group, wps_params); -+ + +- if (hex_ssid) { +- size_t hex_ssid_len = strlen(hex_ssid); + if(ret == -EINPROGRESS) { + wifi->pending_peer = connman_peer_ref(peer); + wifi->p2p_connecting = true; + } -+ + +- ssid = g_try_malloc0(hex_ssid_len / 2); +- if (!ssid) + return ret; + } else -+ return -ENOMEM; - } + return -ENOMEM; ++ } -- if (wifi->p2p_connection_timeout) -- g_source_remove(wifi->p2p_connection_timeout); +- for (i = 0; i < hex_ssid_len; i += 2) { +- sscanf(hex_ssid + i, "%02x", &hex); +- ssid[j++] = hex; +- } +- } else { +- ssid = raw_ssid; +- j = ssid_len; +- } +- +- /* +- * If we have already added hidden AP to the list, +- * then do not do it again. This might happen if you have +- * used or are using multiple wifi cards, so in that case +- * you might have multiple service files for same AP. +- */ +- if (is_duplicate(scan_data->ssids, ssid, j)) { +- if (hex_ssid) +- g_free(ssid); +- return 0; +- } + peer_params = g_try_malloc0(sizeof(GSupplicantPeerParams)); + if (!peer_params) + return -ENOMEM; -- remove_networks(device, wifi); -- remove_peers(wifi); +- scan_ssid = g_try_new(struct scan_ssid, 1); +- if (!scan_ssid) { +- if (hex_ssid) +- g_free(ssid); +- return -ENOMEM; +- } + peer_params->path = g_strdup(g_supplicant_peer_get_path(gs_peer)); + if (wps_pin) + peer_params->wps_pin = g_strdup(wps_pin); -- connman_device_set_powered(device, false); -- connman_device_set_data(device, NULL); -- connman_device_unref(wifi->device); -- connman_rtnl_remove_watch(wifi->watch); +- memcpy(scan_ssid->ssid, ssid, j); +- scan_ssid->ssid_len = j; +- scan_data->ssids = g_slist_prepend(scan_data->ssids, +- scan_ssid); + peer_params->master = connman_peer_service_is_master(); + peer_params->authorize_only= FALSE; + peer_params->join = FALSE; -- g_supplicant_interface_set_data(wifi->interface, NULL); +- scan_data->num_ssids++; + peer_params->go_intent = wifi->p2p_device_config.go_intent; + if(connman_technology_get_p2p_persistent(p2p_technology)) + peer_params->persistent = TRUE; @@ -10988,11 +11070,14 @@ index cc48ceb1..287c5789 100644 + wifi->invited_path = NULL; + } -- g_supplicant_interface_cancel(wifi->interface); +- DBG("SSID %s added to scanned list of %d entries", ssid_name, +- scan_data->num_ssids); + peer_params->wps_method= g_strdup(connman_peer_wps_method2string(wps_method)); -- if (wifi->scan_params) -- g_supplicant_free_scan_params(wifi->scan_params); +- if (hex_ssid) +- g_free(ssid); +- } else +- return -EINVAL; + ret = g_supplicant_interface_p2p_connect(wifi->interface, peer_params, + peer_connect_callback, wifi); + if (ret == -EINPROGRESS) { @@ -11005,29 +11090,47 @@ index cc48ceb1..287c5789 100644 + g_free(peer_params); + } -- g_free(wifi->autoscan); -- g_free(wifi->identifier); -- g_free(wifi); +- scan_data->ssids = g_slist_reverse(scan_data->ssids); + return ret; - } ++} --static bool is_duplicate(GSList *list, gchar *ssid, int ssid_len) +- if (!scan_data->freqs) { +- scan_data->freqs = g_try_malloc0(sizeof(uint16_t)); +- if (!scan_data->freqs) { +- g_slist_free_full(scan_data->ssids, g_free); +- return -ENOMEM; +- } +static void p2p_peers_refresh(struct wifi_data *wifi) - { -- GSList *iter; ++{ + GSupplicantInterface *interface = wifi->interface; + int err; -- for (iter = list; iter; iter = g_slist_next(iter)) { -- struct scan_ssid *scan_ssid = iter->data; +- scan_data->num_freqs = 1; +- scan_data->freqs[0] = freq; +- } else { +- bool duplicate = false; + err = g_supplicant_interface_p2p_flush(interface, NULL, NULL); -- if (ssid_len == scan_ssid->ssid_len && -- memcmp(ssid, scan_ssid->ssid, ssid_len) == 0) -- return true; +- /* Don't add duplicate entries */ +- for (i = 0; i < scan_data->num_freqs; i++) { +- if (scan_data->freqs[i] == freq) { +- duplicate = true; +- break; +- } +- } + if (!connman_technology_get_enable_p2p_listen(p2p_technology)) + return; -+ + +- if (!duplicate) { +- scan_data->num_freqs++; +- scan_data->freqs = g_try_realloc(scan_data->freqs, +- sizeof(uint16_t) * scan_data->num_freqs); +- if (!scan_data->freqs) { +- g_slist_free_full(scan_data->ssids, g_free); +- return -ENOMEM; +- } +- scan_data->freqs[scan_data->num_freqs - 1] = freq; +- } + //Do not p2p find from webOS 4.5 platform, since there is no WiFi Direct menu + // in settings, so no need to list the peers + // if(err == -EINPROGRESS) @@ -11036,60 +11139,45 @@ index cc48ceb1..287c5789 100644 + leave_p2p_listen_on_iface(wifi); } -- return false; +- return 1; + err = apply_p2p_listen_on_iface(wifi, ¶ms); + if (err == 0) + connman_technology_set_p2p_listen(p2p_technology, true); } --static int add_scan_param(gchar *hex_ssid, char *raw_ssid, int ssid_len, -- int freq, GSupplicantScanParams *scan_data, -- int driver_max_scan_ssids, char *ssid_name) +-static int get_hidden_connections(GSupplicantScanParams *scan_data) +static int peer_disconnect(struct connman_peer *peer) { -- unsigned int i; -- struct scan_ssid *scan_ssid; -- -- if ((driver_max_scan_ssids == 0 || -- driver_max_scan_ssids > scan_data->num_ssids) && -- (hex_ssid || raw_ssid)) { -- gchar *ssid; -- unsigned int j = 0, hex; -- -- if (hex_ssid) { -- size_t hex_ssid_len = strlen(hex_ssid); +- struct connman_config_entry **entries; +- GKeyFile *keyfile; +- gchar **services; +- char *ssid, *name; +- int i, ret; +- bool value; +- int num_ssids = 0, add_param_failed = 0; + struct connman_device *device = connman_peer_get_device(peer); + GSupplicantPeer *gs_peer; + struct wifi_data *wifi; + char* peer_path = NULL; + int ret; -- ssid = g_try_malloc0(hex_ssid_len / 2); -- if (!ssid) -- return -ENOMEM; +- services = connman_storage_get_services(); +- for (i = 0; services && services[i]; i++) { +- if (strncmp(services[i], "wifi_", 5) != 0) +- continue; + DBG("peer %p", peer); -- for (i = 0; i < hex_ssid_len; i += 2) { -- sscanf(hex_ssid + i, "%02x", &hex); -- ssid[j++] = hex; -- } -- } else { -- ssid = raw_ssid; -- j = ssid_len; -- } +- keyfile = connman_storage_load_service(services[i]); +- if (!keyfile) +- continue; + if (!device) + return -ENODEV; -- /* -- * If we have already added hidden AP to the list, -- * then do not do it again. This might happen if you have -- * used or are using multiple wifi cards, so in that case -- * you might have multiple service files for same AP. -- */ -- if (is_duplicate(scan_data->ssids, ssid, j)) { -- if (hex_ssid) -- g_free(ssid); -- return 0; +- value = g_key_file_get_boolean(keyfile, +- services[i], "Hidden", NULL); +- if (!value) { +- g_key_file_free(keyfile); +- continue; + if (p2p_go_identifier) { + struct connman_group *connman_group; + bool autonomous; @@ -11101,124 +11189,123 @@ index cc48ceb1..287c5789 100644 } + } -- scan_ssid = g_try_new(struct scan_ssid, 1); -- if (!scan_ssid) { -- if (hex_ssid) -- g_free(ssid); -- return -ENOMEM; +- value = g_key_file_get_boolean(keyfile, +- services[i], "Favorite", NULL); +- if (!value) { +- g_key_file_free(keyfile); +- continue; - } + wifi = connman_device_get_data(device); + if (!wifi) + return -ENODEV; -- memcpy(scan_ssid->ssid, ssid, j); -- scan_ssid->ssid_len = j; -- scan_data->ssids = g_slist_prepend(scan_data->ssids, -- scan_ssid); +- ssid = g_key_file_get_string(keyfile, +- services[i], "SSID", NULL); + gs_peer = g_supplicant_interface_peer_lookup(wifi->interface, + connman_peer_get_identifier(peer)); + if (!gs_peer) + return -EINVAL; -- scan_data->num_ssids++; +- name = g_key_file_get_string(keyfile, services[i], "Name", +- NULL); + peer_path = g_strdup(g_supplicant_peer_get_path(gs_peer)); -- DBG("SSID %s added to scanned list of %d entries", ssid_name, -- scan_data->num_ssids); +- ret = add_scan_param(ssid, NULL, 0, 0, scan_data, 0, name); +- if (ret < 0) +- add_param_failed++; +- else if (ret > 0) +- num_ssids++; + ret = g_supplicant_interface_p2p_client_remove(wifi->interface, NULL, peer_path); + g_free(peer_path); -- if (hex_ssid) -- g_free(ssid); -- } else -- return -EINVAL; +- g_free(ssid); +- g_free(name); +- g_key_file_free(keyfile); + if (ret == -EINPROGRESS) { + peer_cancel_timeout(wifi); + wifi->p2p_device = false; + __connman_peer_set_static_ip(peer, NULL); -+ } + } -- scan_data->ssids = g_slist_reverse(scan_data->ssids); +- /* +- * Check if there are any hidden AP that needs to be provisioned. +- */ +- entries = connman_config_get_entries("wifi"); +- for (i = 0; entries && entries[i]; i++) { +- int len; +- +- if (!entries[i]->hidden) +- continue; +- +- if (!entries[i]->ssid) { +- ssid = entries[i]->name; +- len = strlen(ssid); +- } else { +- ssid = entries[i]->ssid; +- len = entries[i]->ssid_len; +- } +- +- if (!ssid) +- continue; + if (!__connman_get_connected_peer()) + p2p_peers_refresh(wifi); -- if (!scan_data->freqs) { -- scan_data->freqs = g_try_malloc0(sizeof(uint16_t)); -- if (!scan_data->freqs) { -- g_slist_free_full(scan_data->ssids, g_free); -- return -ENOMEM; -- } +- ret = add_scan_param(NULL, ssid, len, 0, scan_data, 0, ssid); +- if (ret < 0) +- add_param_failed++; +- else if (ret > 0) +- num_ssids++; +- } + return ret; +} -- scan_data->num_freqs = 1; -- scan_data->freqs[0] = freq; -- } else { -- bool duplicate = false; +- connman_config_free_entries(entries); +static gboolean timeout_p2p_listen_state(gpointer user_data) +{ + GSupplicantInterface *interface = user_data; -- /* Don't add duplicate entries */ -- for (i = 0; i < scan_data->num_freqs; i++) { -- if (scan_data->freqs[i] == freq) { -- duplicate = true; -- break; -- } -- } +- if (add_param_failed > 0) +- DBG("Unable to scan %d out of %d SSIDs", +- add_param_failed, num_ssids); + p2p_listen_ref = -1; -- if (!duplicate) { -- scan_data->num_freqs++; -- scan_data->freqs = g_try_realloc(scan_data->freqs, -- sizeof(uint16_t) * scan_data->num_freqs); -- if (!scan_data->freqs) { -- g_slist_free_full(scan_data->ssids, g_free); -- return -ENOMEM; -- } -- scan_data->freqs[scan_data->num_freqs - 1] = freq; -- } -- } +- g_strfreev(services); + if (connman_technology_get_p2p_listen(p2p_technology) == false && + !__connman_peer_get_connected_exists()) + tech_set_p2p_listen(p2p_technology, true); -- return 1; +- return num_ssids; + return FALSE; } --static int get_hidden_connections(GSupplicantScanParams *scan_data) +-static int get_hidden_connections_params(struct wifi_data *wifi, +- GSupplicantScanParams *scan_params) +static void reject_peer_callback(int result, GSupplicantInterface *interface, + void *user_data) { -- struct connman_config_entry **entries; -- GKeyFile *keyfile; -- gchar **services; -- char *ssid, *name; -- int i, ret; -- bool value; -- int num_ssids = 0, add_param_failed = 0; +- int driver_max_ssids, i; +- GSupplicantScanParams *orig_params; + struct connman_peer *peer= user_data; -- services = connman_storage_get_services(); -- for (i = 0; services && services[i]; i++) { -- if (strncmp(services[i], "wifi_", 5) != 0) -- continue; +- /* +- * Scan hidden networks so that we can autoconnect to them. +- * We will assume 1 as a default number of ssid to scan. +- */ +- driver_max_ssids = g_supplicant_interface_get_max_scan_ssids( +- wifi->interface); +- if (driver_max_ssids == 0) +- driver_max_ssids = 1; + DBG("result %d supplicant interface %p peer %p", + result, interface, peer); -- keyfile = connman_storage_load_service(services[i]); -- if (!keyfile) -- continue; +- DBG("max ssids %d", driver_max_ssids); + if (result < 0) + return; -- value = g_key_file_get_boolean(keyfile, -- services[i], "Hidden", NULL); -- if (!value) { -- g_key_file_free(keyfile); -- continue; -- } +- if (!wifi->scan_params) { +- wifi->scan_params = g_try_malloc0(sizeof(GSupplicantScanParams)); +- if (!wifi->scan_params) +- return 0; + /* + * Current wpa_supplicant does not supports to emit the signal which is + * P2P negotiation failure when calling RejectPeer(). @@ -11226,22 +11313,19 @@ index cc48ceb1..287c5789 100644 + */ + peer_connect(peer, CONNMAN_PEER_WPS_PBC, ""); -- value = g_key_file_get_boolean(keyfile, -- services[i], "Favorite", NULL); -- if (!value) { -- g_key_file_free(keyfile); -- continue; -- } +- if (get_hidden_connections(wifi->scan_params) == 0) { +- g_supplicant_free_scan_params(wifi->scan_params); +- wifi->scan_params = NULL; + if (p2p_listen_ref != -1) + g_source_remove(p2p_listen_ref); -- ssid = g_key_file_get_string(keyfile, -- services[i], "SSID", NULL); +- return 0; +- } +- } + p2p_listen_ref = g_timeout_add(3000, timeout_p2p_listen_state, interface); +} -- name = g_key_file_get_string(keyfile, services[i], "Name", -- NULL); +- orig_params = wifi->scan_params; +static int peer_reject(struct connman_peer *peer) +{ + struct connman_device *device = connman_peer_get_device(peer); @@ -11250,190 +11334,202 @@ index cc48ceb1..287c5789 100644 + struct wifi_data *wifi; + int ret; -- ret = add_scan_param(ssid, NULL, 0, 0, scan_data, 0, name); -- if (ret < 0) -- add_param_failed++; -- else if (ret > 0) -- num_ssids++; +- /* Let's transfer driver_max_ssids params */ +- for (i = 0; i < driver_max_ssids; i++) { +- struct scan_ssid *ssid; + DBG("peer %p", peer); -- g_free(ssid); -- g_free(name); -- g_key_file_free(keyfile); -- } +- if (!wifi->scan_params->ssids) +- break; + if (!device) + return -ENODEV; -- /* -- * Check if there are any hidden AP that needs to be provisioned. -- */ -- entries = connman_config_get_entries("wifi"); -- for (i = 0; entries && entries[i]; i++) { -- int len; +- ssid = orig_params->ssids->data; +- orig_params->ssids = g_slist_remove(orig_params->ssids, ssid); +- scan_params->ssids = g_slist_prepend(scan_params->ssids, ssid); +- } + wifi = connman_device_get_data(device); + if (!wifi) + return -ENODEV; -- if (!entries[i]->hidden) -- continue; +- if (i > 0) { +- scan_params->num_ssids = i; +- scan_params->ssids = g_slist_reverse(scan_params->ssids); + gs_peer = g_supplicant_interface_peer_lookup(wifi->interface, + connman_peer_get_identifier(peer)); + if (!gs_peer) + return -EINVAL; -- if (!entries[i]->ssid) { -- ssid = entries[i]->name; -- len = strlen(ssid); -- } else { -- ssid = entries[i]->ssid; -- len = entries[i]->ssid_len; -- } +- if (orig_params->num_freqs <= 0) +- goto err; + peer_params.path = g_strdup(g_supplicant_peer_get_path(gs_peer)); -- if (!ssid) -- continue; +- scan_params->freqs = +- g_malloc(sizeof(uint16_t) * orig_params->num_freqs); +- memcpy(scan_params->freqs, orig_params->freqs, +- sizeof(uint16_t) *orig_params->num_freqs); + ret = g_supplicant_interface_p2p_reject(wifi->interface, + &peer_params, reject_peer_callback, peer); + g_free(peer_params.path); -- ret = add_scan_param(NULL, ssid, len, 0, scan_data, 0, ssid); -- if (ret < 0) -- add_param_failed++; -- else if (ret > 0) -- num_ssids++; +- scan_params->num_freqs = orig_params->num_freqs; + if (ret == -EINPROGRESS) { + wifi->p2p_device = false; - } ++ } -- connman_config_free_entries(entries); -- -- if (add_param_failed > 0) -- DBG("Unable to scan %d out of %d SSIDs", -- add_param_failed, num_ssids); +- } else +- goto err; + return ret; +} -- g_strfreev(services); +- orig_params->num_ssids -= scan_params->num_ssids; +struct peer_service_registration { + peer_service_registration_cb_t callback; + void *user_data; +}; -- return num_ssids; +- return scan_params->num_ssids; +static bool is_service_wfd(const unsigned char *specs, int length) +{ + if (length < 9 || specs[0] != 0 || specs[1] != 0 || specs[2] != 6) + return false; -+ + +-err: +- g_slist_free_full(scan_params->ssids, g_free); +- g_supplicant_free_scan_params(wifi->scan_params); +- wifi->scan_params = NULL; + return true; - } ++} --static int get_hidden_connections_params(struct wifi_data *wifi, -- GSupplicantScanParams *scan_params) +- return 0; +static void apply_p2p_listen_callback(int result, GSupplicantInterface *interface, void *user_data) - { -- int driver_max_ssids, i; -- GSupplicantScanParams *orig_params; ++{ + struct wifi_data *wifi = user_data; - -- /* -- * Scan hidden networks so that we can autoconnect to them. -- * We will assume 1 as a default number of ssid to scan. -- */ -- driver_max_ssids = g_supplicant_interface_get_max_scan_ssids( -- wifi->interface); -- if (driver_max_ssids == 0) -- driver_max_ssids = 1; ++ + if (result < 0) { + connman_info("p2p extended listen set failed(%d)", result); + wifi->servicing--; + } -+} + } -- DBG("max ssids %d", driver_max_ssids); +-static int throw_wifi_scan(struct connman_device *device, +- GSupplicantInterfaceCallback callback) +static int apply_p2p_listen_on_iface(gpointer data, gpointer user_data) -+{ + { +- struct wifi_data *wifi = connman_device_get_data(device); +- int ret; + int err = 0; + struct wifi_data *wifi = data; + struct p2p_listen_data* listenParams = user_data; -- if (!wifi->scan_params) { -- wifi->scan_params = g_try_malloc0(sizeof(GSupplicantScanParams)); -- if (!wifi->scan_params) -- return 0; +- if (!wifi) +- return -ENODEV; + if (!listenParams) + return -EINVAL; -- if (get_hidden_connections(wifi->scan_params) == 0) { -- g_supplicant_free_scan_params(wifi->scan_params); -- wifi->scan_params = NULL; +- DBG("device %p %p", device, wifi->interface); + if (!wifi->interface || + !g_supplicant_interface_has_p2p(wifi->interface)) + return -ENODEV; -- return 0; -- } +- if (wifi->tethering) +- return -EBUSY; + if (connman_setting_get_bool("SupportP2P0Interface") && + g_strcmp0(connman_device_get_string(wifi->device, "Interface"), -+ connman_option_get_string("P2PDevice")) != 0) ++ connman_setting_get_string("P2PDevice")) != 0) + return -EOPNOTSUPP; -+ + +- if (connman_device_get_scanning(device, CONNMAN_SERVICE_TYPE_WIFI)) + if (__connman_group_exist()) -+ return -EALREADY; -+ + return -EALREADY; + +- connman_device_ref(device); +- +- ret = g_supplicant_interface_scan(wifi->interface, NULL, +- callback, device); +- if (ret == 0) { +- connman_device_set_scanning(device, +- CONNMAN_SERVICE_TYPE_WIFI, true); +- } else +- connman_device_unref(device); + if (!wifi->servicing) { + err = g_supplicant_interface_p2p_listen(wifi->interface, + listenParams->period, listenParams->interval, apply_p2p_listen_callback, wifi); -+ + +- return ret; + wifi->servicing++; - } ++ } + return err; -+} + } -- orig_params = wifi->scan_params; +-static void hidden_free(struct hidden_params *hidden) +static void leave_p2p_listen_on_iface(gpointer data) -+{ + { +- if (!hidden) + struct wifi_data *wifi = data; + if (!wifi->interface || + !g_supplicant_interface_has_p2p(wifi->interface)) -+ return; + return; -- /* Let's transfer driver_max_ssids params */ -- for (i = 0; i < driver_max_ssids; i++) { -- struct scan_ssid *ssid; +- if (hidden->scan_params) +- g_supplicant_free_scan_params(hidden->scan_params); +- g_free(hidden->identity); +- g_free(hidden->passphrase); +- g_free(hidden->security); +- g_free(hidden); + if (connman_setting_get_bool("SupportP2P0Interface") && + g_strcmp0(connman_device_get_string(wifi->device, "Interface"), -+ connman_option_get_string("P2PDevice")) != 0) ++ connman_setting_get_string("P2PDevice")) != 0) + return; - -- if (!wifi->scan_params->ssids) -- break; ++ + wifi->servicing--; + if (!wifi->servicing || wifi->servicing < 0) { + g_supplicant_interface_p2p_listen(wifi->interface, 0, 0, NULL, wifi); + wifi->servicing = 0; + } -+} + } -- ssid = orig_params->ssids->data; -- orig_params->ssids = g_slist_remove(orig_params->ssids, ssid); -- scan_params->ssids = g_slist_prepend(scan_params->ssids, ssid); +-static void scan_callback(int result, GSupplicantInterface *interface, +- void *user_data) +static void register_wfd_service_cb(int result, + GSupplicantInterface *iface, void *user_data) -+{ + { +- struct connman_device *device = user_data; +- struct wifi_data *wifi = connman_device_get_data(device); +- bool scanning; +- +- DBG("result %d wifi %p", result, wifi); + struct peer_service_registration *reg_data = user_data; -+ + +- if (wifi) { +- if (wifi->hidden && !wifi->postpone_hidden) { +- connman_network_clear_hidden(wifi->hidden->user_data); +- hidden_free(wifi->hidden); +- wifi->hidden = NULL; +- } + DBG(""); -+ + +- if (wifi->scan_params) { +- g_supplicant_free_scan_params(wifi->scan_params); +- wifi->scan_params = NULL; +- } + if (reg_data && reg_data->callback) { + reg_data->callback(result, reg_data->user_data); + g_free(reg_data); } +} -- if (i > 0) { -- scan_params->num_ssids = i; -- scan_params->ssids = g_slist_reverse(scan_params->ssids); +- if (result < 0) +- connman_device_reset_scanning(device); +- +- /* User is connecting to a hidden AP, let's wait for finished event */ +- if (wifi && wifi->hidden && wifi->postpone_hidden) { +- GSupplicantScanParams *scan_params; +- int ret; +- +- wifi->postpone_hidden = false; +- scan_params = wifi->hidden->scan_params; +- wifi->hidden->scan_params = NULL; +static GSupplicantP2PServiceParams *fill_in_peer_service_params( + const unsigned char *spec, + int spec_length, const unsigned char *query, @@ -11441,100 +11537,124 @@ index cc48ceb1..287c5789 100644 +{ + GSupplicantP2PServiceParams *params; -- scan_params->freqs = g_memdup(orig_params->freqs, -- sizeof(uint16_t) * orig_params->num_freqs); -- if (!scan_params->freqs) -- goto err; +- reset_autoscan(device); + params = g_try_malloc0(sizeof(GSupplicantP2PServiceParams)); + if (!params) + return NULL; -- scan_params->num_freqs = orig_params->num_freqs; +- ret = g_supplicant_interface_scan(wifi->interface, scan_params, +- scan_callback, device); +- if (ret == 0) +- return; + if (version > 0) { + params->version = version; -+ params->service = g_memdup(spec, spec_length); ++ if (spec_length > 0) { ++ params->service = g_malloc(spec_length); ++ memcpy(params->service, spec, spec_length); ++ } + } else if (query_length > 0 && spec_length > 0) { -+ params->query = g_memdup(query, query_length); ++ params->query = g_malloc(query_length); ++ memcpy(params->query, query, query_length); + params->query_length = query_length; -- } else -- goto err; -+ params->response = g_memdup(spec, spec_length); +- /* On error, let's recall scan_callback, which will cleanup */ +- return scan_callback(ret, interface, user_data); ++ params->response = g_malloc(spec_length); ++ memcpy(params->response, spec, spec_length); + params->response_length = spec_length; + } else { -+ params->wfd_ies = g_memdup(spec, spec_length); ++ if (spec_length > 0) { ++ params->wfd_ies = g_malloc(spec_length); ++ memcpy(params->wfd_ies, spec, spec_length); ++ } + params->wfd_ies_length = spec_length; -+ } + } -- orig_params->num_ssids -= scan_params->num_ssids; +- scanning = connman_device_get_scanning(device, CONNMAN_SERVICE_TYPE_WIFI); +- +- if (scanning) { +- connman_device_set_scanning(device, +- CONNMAN_SERVICE_TYPE_WIFI, false); +- } + return params; +} -- return scan_params->num_ssids; +- if (result != -ENOLINK) +- start_autoscan(device); +static void free_peer_service_params(GSupplicantP2PServiceParams *params) +{ + if (!params) + return; --err: -- g_slist_free_full(scan_params->ssids, g_free); -- g_supplicant_free_scan_params(wifi->scan_params); -- wifi->scan_params = NULL; +- /* +- * If we are here then we were scanning; however, if we are +- * also mid-flight disabling the interface, then wifi_disable +- * has already cleared the device scanning state and +- * unreferenced the device, obviating the need to do it here. +- */ + g_free(params->service); + g_free(params->query); + g_free(params->response); + g_free(params->wfd_ies); -- return 0; +- if (scanning) +- connman_device_unref(device); + g_free(params); } --static int throw_wifi_scan(struct connman_device *device, -- GSupplicantInterfaceCallback callback) +-static void scan_callback_hidden(int result, +- GSupplicantInterface *interface, void *user_data) +static int peer_register_wfd_service(const unsigned char *specification, + int specification_length, + peer_service_registration_cb_t callback, + void *user_data) { +- struct connman_device *device = user_data; - struct wifi_data *wifi = connman_device_get_data(device); +- GSupplicantScanParams *scan_params; + struct peer_service_registration *reg_data = NULL; + static GSupplicantP2PServiceParams *params; int ret; -- if (!wifi) -- return -ENODEV; -- -- DBG("device %p %p", device, wifi->interface); +- DBG("result %d wifi %p", result, wifi); + DBG(""); -- if (wifi->tethering) +- if (!wifi) +- goto out; + if (wfd_service_registered) - return -EBUSY; ++ return -EBUSY; -- if (connman_device_get_scanning(device, CONNMAN_SERVICE_TYPE_WIFI)) -- return -EALREADY; +- /* User is trying to connect to a hidden AP */ +- if (wifi->hidden && wifi->postpone_hidden) +- goto out; + params = fill_in_peer_service_params(specification, + specification_length, NULL, 0, 0); + if (!params) + return -ENOMEM; -- connman_device_ref(device); +- scan_params = g_try_malloc0(sizeof(GSupplicantScanParams)); +- if (!scan_params) +- goto out; +- +- if (get_hidden_connections_params(wifi, scan_params) > 0) { +- ret = g_supplicant_interface_scan(wifi->interface, +- scan_params, +- scan_callback_hidden, +- device); +- if (ret == 0) +- return; + reg_data = g_try_malloc0(sizeof(*reg_data)); + if (!reg_data) { + ret = -ENOMEM; + goto error; -+ } + } -- ret = g_supplicant_interface_scan(wifi->interface, NULL, -- callback, device); -- if (ret == 0) { -- connman_device_set_scanning(device, -- CONNMAN_SERVICE_TYPE_WIFI, true); -- } else -- connman_device_unref(device); +- g_supplicant_free_scan_params(scan_params); + reg_data->callback = callback; + reg_data->user_data = user_data; -+ + +-out: +- scan_callback(result, interface, user_data); + ret = g_supplicant_set_widi_ies(params, + register_wfd_service_cb, reg_data); + if (ret < 0 && ret != -EINPROGRESS) @@ -11546,107 +11666,97 @@ index cc48ceb1..287c5789 100644 +error: + free_peer_service_params(params); + g_free(reg_data); - - return ret; ++ ++ return ret; } --static void hidden_free(struct hidden_params *hidden) +-static gboolean autoscan_timeout(gpointer data) +static void register_peer_service_cb(int result, + GSupplicantInterface *iface, void *user_data) { -- if (!hidden) -- return; +- struct connman_device *device = data; +- struct wifi_data *wifi = connman_device_get_data(device); +- struct autoscan_params *autoscan; +- int interval; + struct wifi_data *wifi = g_supplicant_interface_get_data(iface); + struct peer_service_registration *reg_data = user_data; + int ret = 0; -- if (hidden->scan_params) -- g_supplicant_free_scan_params(hidden->scan_params); -- g_free(hidden->identity); -- g_free(hidden->passphrase); -- g_free(hidden->security); -- g_free(hidden); +- if (!wifi) +- return FALSE; + DBG(""); -+ -+ if (reg_data->callback) + +- autoscan = wifi->autoscan; ++ if (reg_data && reg_data->callback) + reg_data->callback(result, reg_data->user_data); -+ + +- if (autoscan->interval <= 0) { +- interval = autoscan->base; +- goto set_interval; +- } else +- interval = autoscan->interval * autoscan->base; + g_free(reg_data); - } ++} --static void scan_callback(int result, GSupplicantInterface *interface, -- void *user_data) +- if (interval > autoscan->limit) +- interval = autoscan->limit; +static int peer_register_service(const unsigned char *specification, + int specification_length, + const unsigned char *query, + int query_length, int version, + peer_service_registration_cb_t callback, + void *user_data) - { -- struct connman_device *device = user_data; -- struct wifi_data *wifi = connman_device_get_data(device); -- bool scanning; -- -- DBG("result %d wifi %p", result, wifi); ++{ + struct peer_service_registration *reg_data = NULL; + GSupplicantP2PServiceParams *params; + bool found = false; + int ret, ret_f; + GList *list; -- if (wifi) { -- if (wifi->hidden && !wifi->postpone_hidden) { -- connman_network_clear_hidden(wifi->hidden->user_data); -- hidden_free(wifi->hidden); -- wifi->hidden = NULL; -- } +- throw_wifi_scan(wifi->device, scan_callback_hidden); + DBG(""); -- if (wifi->scan_params) { -- g_supplicant_free_scan_params(wifi->scan_params); -- wifi->scan_params = NULL; -- } +- /* +- * In case BackgroundScanning is disabled, interval will reach the +- * limit exactly after the very first passive scanning. It allows +- * to ensure at most one passive scan is performed in such cases. +- */ +- if (!connman_setting_get_bool("BackgroundScanning") && +- interval == autoscan->limit) { +- g_source_remove(autoscan->timeout); +- autoscan->timeout = 0; + if (specification && !version && !query && + is_service_wfd(specification, specification_length)) { + return peer_register_wfd_service(specification, + specification_length, callback, user_data); - } ++ } -- if (result < 0) -- connman_device_reset_scanning(device); +- connman_device_unref(device); + reg_data = g_try_malloc0(sizeof(*reg_data)); + if (!reg_data) + return -ENOMEM; -- /* User is connecting to a hidden AP, let's wait for finished event */ -- if (wifi && wifi->hidden && wifi->postpone_hidden) { -- GSupplicantScanParams *scan_params; -- int ret; +- return FALSE; +- } + reg_data->callback = callback; + reg_data->user_data = user_data; -- wifi->postpone_hidden = false; -- scan_params = wifi->hidden->scan_params; -- wifi->hidden->scan_params = NULL; +-set_interval: +- DBG("interval %d", interval); + ret_f = -EOPNOTSUPP; -- reset_autoscan(device); +- autoscan->interval = interval; + for (list = iface_list; list; list = list->next) { + struct wifi_data *wifi = list->data; + GSupplicantInterface *iface = wifi->interface; -- ret = g_supplicant_interface_scan(wifi->interface, scan_params, -- scan_callback, device); -- if (ret == 0) -- return; -- -- /* On error, let's recall scan_callback, which will cleanup */ -- return scan_callback(ret, interface, user_data); -- } +- autoscan->timeout = g_timeout_add_seconds(interval, +- autoscan_timeout, device); + if (!g_supplicant_interface_has_p2p(iface)) + continue; -- scanning = connman_device_get_scanning(device, CONNMAN_SERVICE_TYPE_WIFI); +- return FALSE; +-} + params = fill_in_peer_service_params(specification, + specification_length, query, + query_length, version); @@ -11655,9 +11765,10 @@ index cc48ceb1..287c5789 100644 + continue; + } -- if (scanning) { -- connman_device_set_scanning(device, -- CONNMAN_SERVICE_TYPE_WIFI, false); +-static void start_autoscan(struct connman_device *device) +-{ +- struct wifi_data *wifi = connman_device_get_data(device); +- struct autoscan_params *autoscan; + if (!found) { + ret_f = g_supplicant_interface_p2p_add_service(iface, + register_peer_service_cb, params, reg_data); @@ -11669,89 +11780,63 @@ index cc48ceb1..287c5789 100644 + register_peer_service_cb, params, NULL); + if (ret != 0 && ret != -EINPROGRESS) + free_peer_service_params(params); - } ++ } -- if (result != -ENOLINK) -- start_autoscan(device); -- -- /* -- * If we are here then we were scanning; however, if we are -- * also mid-flight disabling the interface, then wifi_disable -- * has already cleared the device scanning state and -- * unreferenced the device, obviating the need to do it here. -- */ +- DBG(""); + if(ret_f != -EINPROGRESS && reg_data) + g_free(reg_data); -- if (scanning) -- connman_device_unref(device); +- if (!wifi) +- return; + return ret_f; - } ++} --static void scan_callback_hidden(int result, -- GSupplicantInterface *interface, void *user_data) +- if (wifi->p2p_device) +- return; +static int peer_unregister_wfd_service(void) - { -- struct connman_device *device = user_data; -- struct wifi_data *wifi = connman_device_get_data(device); -- GSupplicantScanParams *scan_params; -- int ret; -- -- DBG("result %d wifi %p", result, wifi); -- -- if (!wifi) -- goto out; ++{ + GSupplicantP2PServiceParams *params; + GList *list; -- /* User is trying to connect to a hidden AP */ -- if (wifi->hidden && wifi->postpone_hidden) -- goto out; +- if (wifi->connected) +- return; + if (!wfd_service_registered) + return -EALREADY; -- scan_params = g_try_malloc0(sizeof(GSupplicantScanParams)); -- if (!scan_params) -- goto out; +- autoscan = wifi->autoscan; +- if (!autoscan) +- return; + params = fill_in_peer_service_params(NULL, 0, NULL, 0, 0); + if (!params) + return -ENOMEM; -- if (get_hidden_connections_params(wifi, scan_params) > 0) { -- ret = g_supplicant_interface_scan(wifi->interface, -- scan_params, -- scan_callback_hidden, -- device); -- if (ret == 0) -- return; -- } +- if (autoscan->timeout > 0 || autoscan->interval > 0) +- return; + wfd_service_registered = false; -- g_supplicant_free_scan_params(scan_params); +- connman_device_ref(device); + g_supplicant_set_widi_ies(params, NULL, NULL); --out: -- scan_callback(result, interface, user_data); +- autoscan_timeout(device); + return 0; } --static gboolean autoscan_timeout(gpointer data) +-static struct autoscan_params *parse_autoscan_params(const char *params) +static int peer_unregister_service(const unsigned char *specification, + int specification_length, + const unsigned char *query, + int query_length, int version) { -- struct connman_device *device = data; -- struct wifi_data *wifi = connman_device_get_data(device); - struct autoscan_params *autoscan; -- int interval; +- char **list_params; +- int limit; +- int base; + GSupplicantP2PServiceParams *params; + bool wfd = false; + GList *list; + int ret; -- if (!wifi) -- return FALSE; +- DBG(""); + if (specification && !version && !query && + is_service_wfd(specification, specification_length)) { + ret = peer_unregister_wfd_service(); @@ -11760,25 +11845,32 @@ index cc48ceb1..287c5789 100644 + wfd = true; + } -- autoscan = wifi->autoscan; +- list_params = g_strsplit(params, ":", 0); +- if (list_params == 0) +- return NULL; + for (list = iface_list; list; list = list->next) { + struct wifi_data *wifi = list->data; + GSupplicantInterface *iface = wifi->interface; -- if (autoscan->interval <= 0) { -- interval = autoscan->base; -- goto set_interval; -- } else -- interval = autoscan->interval * autoscan->base; +- if (!g_strcmp0(list_params[0], "exponential") && +- g_strv_length(list_params) == 3) { +- base = atoi(list_params[1]); +- limit = atoi(list_params[2]); +- } else if (!g_strcmp0(list_params[0], "single") && +- g_strv_length(list_params) == 2) +- base = limit = atoi(list_params[1]); +- else { +- g_strfreev(list_params); +- return NULL; +- } + if (wfd) + continue; -- if (interval > autoscan->limit) -- interval = autoscan->limit; +- DBG("Setup %s autoscanning", list_params[0]); + if (!g_supplicant_interface_has_p2p(iface)) + continue; -- throw_wifi_scan(wifi->device, scan_callback_hidden); +- g_strfreev(list_params); + params = fill_in_peer_service_params(specification, + specification_length, query, + query_length, version); @@ -11786,26 +11878,24 @@ index cc48ceb1..287c5789 100644 + continue; + } -- /* -- * In case BackgroundScanning is disabled, interval will reach the -- * limit exactly after the very first passive scanning. It allows -- * to ensure at most one passive scan is performed in such cases. -- */ -- if (!connman_setting_get_bool("BackgroundScanning") && -- interval == autoscan->limit) { -- g_source_remove(autoscan->timeout); -- autoscan->timeout = 0; +- autoscan = g_try_malloc0(sizeof(struct autoscan_params)); +- if (!autoscan) { +- DBG("Could not allocate memory for autoscan"); +- return NULL; + ret = g_supplicant_interface_p2p_del_service(iface, params); + if (ret != 0 && ret != -EINPROGRESS) + free_peer_service_params(params); -+ } + } -- connman_device_unref(device); +- DBG("base %d - limit %d", base, limit); +- autoscan->base = base; +- autoscan->limit = limit; +- +- return autoscan; + return 0; -+} + } -- return FALSE; -- } +-static void setup_autoscan(struct wifi_data *wifi) +static struct connman_peer_driver peer_driver = { + .connect = peer_connect, + .disconnect = peer_disconnect, @@ -11813,24 +11903,46 @@ index cc48ceb1..287c5789 100644 + .unregister_service = peer_unregister_service, + .reject = peer_reject, +}; - --set_interval: -- DBG("interval %d", interval); ++ +static void handle_tethering(struct wifi_data *wifi) -+{ + { +- /* +- * If BackgroundScanning is enabled, setup exponential +- * autoscanning if it has not been previously done. +- */ +- if (connman_setting_get_bool("BackgroundScanning")) { +- wifi->autoscan = parse_autoscan_params(AUTOSCAN_EXPONENTIAL); + if (!wifi->tethering) -+ return; + return; +- } -- autoscan->interval = interval; +- /* +- * On the contrary, if BackgroundScanning is disabled, update autoscan +- * parameters based on the type of scanning that is being performed. +- */ +- if (wifi->autoscan) { +- g_free(wifi->autoscan); +- wifi->autoscan = NULL; +- } + if (!wifi->bridge) + return; -- autoscan->timeout = g_timeout_add_seconds(interval, -- autoscan_timeout, device); +- switch (wifi->scanning_type) { +- case WIFI_SCANNING_PASSIVE: +- /* Do not setup autoscan. */ +- break; +- case WIFI_SCANNING_ACTIVE: +- /* Setup one single passive scan after active. */ +- wifi->autoscan = parse_autoscan_params(AUTOSCAN_SINGLE); +- break; +- case WIFI_SCANNING_UNKNOWN: +- /* Setup autoscan in this case but we should never fall here. */ +- wifi->autoscan = parse_autoscan_params(AUTOSCAN_SINGLE); +- break; +- } + if (wifi->bridged) + return; - -- return FALSE; ++ + DBG("index %d bridge %s", wifi->index, wifi->bridge); + + if (connman_inet_add_to_bridge(wifi->index, wifi->bridge) < 0) @@ -11839,37 +11951,28 @@ index cc48ceb1..287c5789 100644 + wifi->bridged = true; } --static void start_autoscan(struct connman_device *device) +-static void finalize_interface_creation(struct wifi_data *wifi) +static void wifi_newlink(unsigned flags, unsigned change, void *user_data) { +- DBG("interface is ready wifi %p tethering %d", wifi, wifi->tethering); + struct connman_device *device = user_data; - struct wifi_data *wifi = connman_device_get_data(device); -- struct autoscan_params *autoscan; -- -- DBG(""); ++ struct wifi_data *wifi = connman_device_get_data(device); - if (!wifi) +- if (!wifi->device) { +- connman_error("WiFi device not set"); ++ if (!wifi) return; - -- if (wifi->p2p_device) -- return; -- -- if (wifi->connected) -- return; ++ + DBG("index %d flags %d change %d", wifi->index, flags, change); - -- autoscan = wifi->autoscan; -- if (!autoscan) -- return; ++ + if ((wifi->flags & IFF_UP) != (flags & IFF_UP)) { + if (flags & IFF_UP) + DBG("interface up"); + else + DBG("interface down"); -+ } + } -- if (autoscan->timeout > 0 || autoscan->interval > 0) -- return; +- connman_device_set_powered(wifi->device, true); + if ((wifi->flags & IFF_LOWER_UP) != (flags & IFF_LOWER_UP)) { + if (flags & IFF_LOWER_UP) + DBG("carrier on"); @@ -11877,71 +11980,43 @@ index cc48ceb1..287c5789 100644 + DBG("carrier off"); + } -- connman_device_ref(device); +- if (wifi->p2p_device) +- return; + if (flags & IFF_LOWER_UP) + handle_tethering(wifi); -- autoscan_timeout(device); +- if (!wifi->autoscan) +- setup_autoscan(wifi); + wifi->flags = flags; - } ++} --static struct autoscan_params *parse_autoscan_params(const char *params) +- start_autoscan(wifi->device); +static int wifi_probe(struct connman_device *device) - { -- struct autoscan_params *autoscan; -- char **list_params; -- int limit; -- int base; ++{ + struct wifi_data *wifi; - -- DBG(""); ++ + DBG("device %p", device); - -- list_params = g_strsplit(params, ":", 0); -- if (list_params == 0) -- return NULL; ++ + wifi = g_try_new0(struct wifi_data, 1); + if (!wifi) + return -ENOMEM; - -- if (!g_strcmp0(list_params[0], "exponential") && -- g_strv_length(list_params) == 3) { -- base = atoi(list_params[1]); -- limit = atoi(list_params[2]); -- } else if (!g_strcmp0(list_params[0], "single") && -- g_strv_length(list_params) == 2) -- base = limit = atoi(list_params[1]); -- else { -- g_strfreev(list_params); -- return NULL; -- } ++ + wifi->state = G_SUPPLICANT_STATE_INACTIVE; + wifi->ap_supported = WIFI_AP_UNKNOWN; + wifi->tethering_param = NULL; - -- DBG("Setup %s autoscanning", list_params[0]); ++ + connman_device_set_data(device, wifi); + wifi->device = connman_device_ref(device); - -- g_strfreev(list_params); ++ + wifi->index = connman_device_get_index(device); + wifi->flags = 0; - -- autoscan = g_try_malloc0(sizeof(struct autoscan_params)); -- if (!autoscan) { -- DBG("Could not allocate memory for autoscan"); -- return NULL; -- } ++ + wifi->watch = connman_rtnl_add_newlink_watch(wifi->index, + wifi_newlink, device); - -- DBG("base %d - limit %d", base, limit); -- autoscan->base = base; -- autoscan->limit = limit; ++ + wifi->p2p_listen_suppressed = false; + wifi->wps_active = FALSE; - -- return autoscan; ++ + if (is_p2p_connecting()) + add_pending_wifi_device(wifi); + else @@ -11950,132 +12025,87 @@ index cc48ceb1..287c5789 100644 + return 0; } --static void setup_autoscan(struct wifi_data *wifi) --{ -- /* -- * If BackgroundScanning is enabled, setup exponential -- * autoscanning if it has not been previously done. -- */ -- if (connman_setting_get_bool("BackgroundScanning")) { -- wifi->autoscan = parse_autoscan_params(AUTOSCAN_EXPONENTIAL); -- return; -- } +-static void interface_create_callback(int result, +- GSupplicantInterface *interface, +- void *user_data) +static void remove_networks(struct connman_device *device, + struct wifi_data *wifi) -+{ + { +- struct wifi_data *wifi = user_data; +- char *bgscan_range_max; +- long value; + GSList *list; -- /* -- * On the contrary, if BackgroundScanning is disabled, update autoscan -- * parameters based on the type of scanning that is being performed. -- */ -- if (wifi->autoscan) { -- g_free(wifi->autoscan); -- wifi->autoscan = NULL; -- } +- DBG("result %d ifname %s, wifi %p", result, +- g_supplicant_interface_get_ifname(interface), +- wifi); + for (list = wifi->networks; list; list = list->next) { + struct connman_network *network = list->data; -- switch (wifi->scanning_type) { -- case WIFI_SCANNING_PASSIVE: -- /* Do not setup autoscan. */ -- break; -- case WIFI_SCANNING_ACTIVE: -- /* Setup one single passive scan after active. */ -- wifi->autoscan = parse_autoscan_params(AUTOSCAN_SINGLE); -- break; -- case WIFI_SCANNING_UNKNOWN: -- /* Setup autoscan in this case but we should never fall here. */ -- wifi->autoscan = parse_autoscan_params(AUTOSCAN_SINGLE); -- break; +- if (result < 0 || !wifi) +- return; + connman_device_remove_network(device, network); + connman_network_unref(network); - } -+ ++ } + +- wifi->interface = interface; +- g_supplicant_interface_set_data(interface, wifi); + g_slist_free(wifi->networks); + wifi->networks = NULL; - } ++} --static void finalize_interface_creation(struct wifi_data *wifi) +- if (g_supplicant_interface_get_ready(interface)) { +- wifi->interface_ready = true; +- finalize_interface_creation(wifi); +static void remove_peers(struct wifi_data *wifi) - { -- DBG("interface is ready wifi %p tethering %d", wifi, wifi->tethering); -- -- if (!wifi->device) { -- connman_error("WiFi device not set"); -- return; -- } -- -- connman_device_set_powered(wifi->device, true); ++{ + GSList *list; + DBG(""); - -- if (wifi->p2p_device) -- return; ++ + for (list = wifi->peers; list; list = list->next) { + struct connman_peer *peer = list->data; - -- if (!wifi->autoscan) -- setup_autoscan(wifi); ++ + connman_peer_unregister(peer); + connman_peer_unref(peer); -+ } + } -- start_autoscan(wifi->device); +- /* +- * Set the BSS expiration age to match the long scanning +- * interval to avoid the loss of unconnected networks between +- * two scans. +- */ +- bgscan_range_max = strrchr(BGSCAN_DEFAULT, ':'); +- if (!bgscan_range_max || strlen(bgscan_range_max) < 1) + g_slist_free(wifi->peers); + wifi->peers = NULL; - } - --static void interface_create_callback(int result, -- GSupplicantInterface *interface, -- void *user_data) ++} ++ +static void reset_autoscan(struct connman_device *device) - { -- struct wifi_data *wifi = user_data; -- char *bgscan_range_max; -- long value; ++{ + struct wifi_data *wifi = connman_device_get_data(device); + struct autoscan_params *autoscan; - -- DBG("result %d ifname %s, wifi %p", result, -- g_supplicant_interface_get_ifname(interface), -- wifi); ++ + DBG(""); - -- if (result < 0 || !wifi) ++ + if (!wifi || !wifi->autoscan) return; -- wifi->interface = interface; -- g_supplicant_interface_set_data(interface, wifi); +- value = strtol(bgscan_range_max + 1, NULL, 10); +- if (value <= 0 || errno == ERANGE) + autoscan = wifi->autoscan; - -- if (g_supplicant_interface_get_ready(interface)) { -- wifi->interface_ready = true; -- finalize_interface_creation(wifi); -- } ++ + autoscan->interval = 0; - -- /* -- * Set the BSS expiration age to match the long scanning -- * interval to avoid the loss of unconnected networks between -- * two scans. -- */ -- bgscan_range_max = strrchr(BGSCAN_DEFAULT, ':'); -- if (!bgscan_range_max || strlen(bgscan_range_max) < 1) ++ + if (autoscan->timeout == 0) return; -- value = strtol(bgscan_range_max + 1, NULL, 10); -- if (value <= 0 || errno == ERANGE) -- return; -+ g_source_remove(autoscan->timeout); -+ autoscan->timeout = 0; - - if (g_supplicant_interface_set_bss_expiration_age(interface, - value + SCAN_MAX_DURATION) < 0) { - connman_warn("Failed to set bss expiration age"); - } ++ g_source_remove(autoscan->timeout); ++ autoscan->timeout = 0; ++ + connman_device_unref(device); } @@ -12085,7 +12115,7 @@ index cc48ceb1..287c5789 100644 - struct wifi_data *wifi = connman_device_get_data(device); - int index; - char *interface; -- const char *driver = connman_option_get_string("wifi"); +- const char *driver = connman_setting_get_string("wifi"); - int ret; + const struct wifi_data *wifi = connman_device_get_data(device); @@ -12271,27 +12301,15 @@ index cc48ceb1..287c5789 100644 - GSequenceIter *iter; - GSequence *latest_list; - struct last_connected *entry; -- GKeyFile *keyfile; -- struct timeval modified; -- gchar **services; -- gchar *str; -- char *ssid; -- int i, freq; -- int num_ssids = 0; + unsigned int i; + struct scan_ssid *scan_ssid; - -- latest_list = g_sequence_new(free_entry); -- if (!latest_list) -- return -ENOMEM; ++ + if ((driver_max_scan_ssids == 0 || + driver_max_scan_ssids > scan_data->num_ssids) && + (hex_ssid || raw_ssid)) { + gchar *ssid; + unsigned int j = 0, hex; - -- services = connman_storage_get_services(); -- for (i = 0; services && services[i]; i++) { ++ + if (hex_ssid) { + size_t hex_ssid_len = strlen(hex_ssid); + @@ -12382,19 +12400,25 @@ index cc48ceb1..287c5789 100644 +static int get_hidden_connections(GSupplicantScanParams *scan_data) +{ + struct connman_config_entry **entries; -+ GKeyFile *keyfile; -+ gchar **services; + GKeyFile *keyfile; +- struct timeval modified; + gchar **services; +- gchar *str; +- char *ssid; +- int i, freq; +- int num_ssids = 0; +- +- latest_list = g_sequence_new(free_entry); +- if (!latest_list) +- return -ENOMEM; + char *ssid, *name; + int i, ret; + bool value; + int num_ssids = 0, add_param_failed = 0; -+ -+ services = connman_storage_get_services(); -+ for (i = 0; services && services[i]; i++) { - if (strncmp(services[i], "wifi_", 5) != 0) - continue; -@@ -1746,1981 +2031,3905 @@ static int get_latest_connections(int max_ssids, + services = connman_storage_get_services(); + for (i = 0; services && services[i]; i++) { +@@ -1756,1983 +2038,3910 @@ static int get_latest_connections(int max_ssids, if (!keyfile) continue; @@ -12523,16 +12547,11 @@ index cc48ceb1..287c5789 100644 + GSupplicantScanParams *scan_params) { - DBG(""); -- -- if (!wifi || wifi->scanning_type == new_type) -- return; -- -- wifi->scanning_type = new_type; + int driver_max_ssids, i; + GSupplicantScanParams *orig_params; -- setup_autoscan(wifi); --} +- if (!wifi || wifi->scanning_type == new_type) +- return; + /* + * Scan hidden networks so that we can autoconnect to them. + * We will assume 1 as a default number of ssid to scan. @@ -12542,24 +12561,29 @@ index cc48ceb1..287c5789 100644 + if (driver_max_ssids == 0) + driver_max_ssids = 1; --static int wifi_scan_simple(struct connman_device *device) --{ -- struct wifi_data *wifi = connman_device_get_data(device); +- wifi->scanning_type = new_type; + DBG("max ssids %d", driver_max_ssids); -- reset_autoscan(device); +- setup_autoscan(wifi); +-} + if (!wifi->scan_params) { + wifi->scan_params = g_try_malloc0(sizeof(GSupplicantScanParams)); + if (!wifi->scan_params) + return 0; -- /* Distinguish between devices performing passive and active scanning */ -- if (wifi) -- wifi_update_scanner_type(wifi, WIFI_SCANNING_PASSIVE); +-static int wifi_scan_simple(struct connman_device *device) +-{ +- struct wifi_data *wifi = connman_device_get_data(device); + if (get_hidden_connections(wifi->scan_params) == 0) { + g_supplicant_free_scan_params(wifi->scan_params); + wifi->scan_params = NULL; +- reset_autoscan(device); +- +- /* Distinguish between devices performing passive and active scanning */ +- if (wifi) +- wifi_update_scanner_type(wifi, WIFI_SCANNING_PASSIVE); +- - return throw_wifi_scan(device, scan_callback_hidden); -} + return 0; @@ -12589,25 +12613,27 @@ index cc48ceb1..287c5789 100644 } - connman_device_set_scanning(device, CONNMAN_SERVICE_TYPE_P2P, false); +- +- connman_device_unref(device); +- start_autoscan(device); + if (i > 0) { + scan_params->num_ssids = i; + scan_params->ssids = g_slist_reverse(scan_params->ssids); -- connman_device_unref(device); -- start_autoscan(device); -- - return FALSE; -} -- ++ if (orig_params->num_freqs <= 0) ++ goto err; + -static void p2p_find_callback(int result, GSupplicantInterface *interface, - void *user_data) -{ - struct connman_device *device = user_data; - struct wifi_data *wifi = connman_device_get_data(device); -+ scan_params->freqs = g_memdup(orig_params->freqs, -+ sizeof(uint16_t) * orig_params->num_freqs); -+ if (!scan_params->freqs) -+ goto err; ++ scan_params->freqs = ++ g_malloc(sizeof(uint16_t) * orig_params->num_freqs); ++ memcpy(scan_params->freqs, orig_params->freqs, ++ sizeof(uint16_t) *orig_params->num_freqs); - DBG("result %d wifi %p", result, wifi); + scan_params->num_freqs = orig_params->num_freqs; @@ -12675,7 +12701,7 @@ index cc48ceb1..287c5789 100644 - CONNMAN_SERVICE_TYPE_P2P, true); + if (connman_setting_get_bool("SupportP2P0Interface") == TRUE && + g_strcmp0(connman_device_get_string(wifi->device, "Interface"), -+ connman_option_get_string("P2PDevice")) == 0) { ++ connman_setting_get_string("P2PDevice")) == 0) { + connman_device_set_scanning(wifi->device, CONNMAN_SERVICE_TYPE_P2P, false); + } + return; @@ -12716,76 +12742,41 @@ index cc48ceb1..287c5789 100644 - if (params->type == CONNMAN_SERVICE_TYPE_P2P) - return p2p_find(device); -+ if (connman_device_get_scanning(device, CONNMAN_SERVICE_TYPE_WIFI)) -+ return -EALREADY; - +- - DBG("device %p wifi %p hidden ssid %s", device, wifi->interface, - params->ssid); -+ connman_device_ref(device); - +- - scanning = connman_device_get_scanning(device, CONNMAN_SERVICE_TYPE_WIFI); -+ ret = g_supplicant_interface_scan(wifi->interface, NULL, -+ callback, device); -+ if (ret == 0) { -+ connman_device_set_scanning(device, -+ CONNMAN_SERVICE_TYPE_WIFI, true); -+ } else -+ connman_device_unref(device); - +- - if (!params->ssid || params->ssid_len == 0 || params->ssid_len > 32) { - if (scanning) - return -EALREADY; -+ return ret; -+} - +- - driver_max_ssids = g_supplicant_interface_get_max_scan_ssids( - wifi->interface); - DBG("max ssids %d", driver_max_ssids); - if (driver_max_ssids == 0) - return wifi_scan_simple(device); -+static void hidden_free(struct hidden_params *hidden) -+{ -+ if (!hidden) -+ return; - +- - do_hidden = false; - } else { - if (scanning && wifi->hidden && wifi->postpone_hidden) - return -EALREADY; -+ if (hidden->scan_params) -+ g_supplicant_free_scan_params(hidden->scan_params); -+ g_free(hidden->identity); -+ g_free(hidden->passphrase); -+ g_free(hidden->security); -+ g_free(hidden); -+} - +- - do_hidden = true; - } -+static void scan_callback(int result, GSupplicantInterface *interface, -+ void *user_data) -+{ -+ struct connman_device *device = user_data; -+ struct wifi_data *wifi = connman_device_get_data(device); -+ bool scanning; - +- - scan_params = g_try_malloc0(sizeof(GSupplicantScanParams)); - if (!scan_params) - return -ENOMEM; -+ DBG("result %d wifi %p", result, wifi); - +- - if (do_hidden) { - scan_ssid = g_try_new(struct scan_ssid, 1); - if (!scan_ssid) { - g_free(scan_params); - return -ENOMEM; -+ if (wifi) { -+ if (wifi->hidden && !wifi->postpone_hidden) { -+ connman_network_clear_hidden(wifi->hidden->user_data); -+ hidden_free(wifi->hidden); -+ wifi->hidden = NULL; - } - +- } +- - memcpy(scan_ssid->ssid, params->ssid, params->ssid_len); - scan_ssid->ssid_len = params->ssid_len; - scan_params->ssids = g_slist_prepend(scan_params->ssids, @@ -12796,19 +12787,13 @@ index cc48ceb1..287c5789 100644 - if (!hidden) { - g_supplicant_free_scan_params(scan_params); - return -ENOMEM; -+ if (wifi->scan_params) { -+ g_supplicant_free_scan_params(wifi->scan_params); -+ wifi->scan_params = NULL; - } -+ } - +- } +- - if (wifi->hidden) { - hidden_free(wifi->hidden); - wifi->hidden = NULL; - } -+ if (result < 0) -+ connman_device_reset_scanning(device); - +- - memcpy(hidden->ssid, params->ssid, params->ssid_len); - hidden->ssid_len = params->ssid_len; - hidden->identity = g_strdup(params->identity); @@ -12816,20 +12801,13 @@ index cc48ceb1..287c5789 100644 - hidden->security = g_strdup(params->security); - hidden->user_data = params->user_data; - wifi->hidden = hidden; -+ /* User is connecting to a hidden AP, let's wait for finished event */ -+ if (wifi && wifi->hidden && wifi->postpone_hidden) { -+ GSupplicantScanParams *scan_params; -+ int ret; - +- - if (scanning) { - /* Let's keep this active scan for later, - * when current scan will be over. */ - wifi->postpone_hidden = TRUE; - hidden->scan_params = scan_params; -+ wifi->postpone_hidden = false; -+ scan_params = wifi->hidden->scan_params; -+ wifi->hidden->scan_params = NULL; - +- - return 0; - } - } else if (wifi->connected) { @@ -12842,71 +12820,48 @@ index cc48ceb1..287c5789 100644 - return wifi_scan_simple(device); - } - } -+ reset_autoscan(device); - +- - /* Distinguish between devices performing passive and active scanning */ - wifi_update_scanner_type(wifi, WIFI_SCANNING_ACTIVE); -+ ret = g_supplicant_interface_scan(wifi->interface, scan_params, -+ scan_callback, device); -+ if (ret == 0) -+ return; ++ if (connman_device_get_scanning(device, CONNMAN_SERVICE_TYPE_WIFI)) ++ return -EALREADY; -- connman_device_ref(device); -+ /* On error, let's recall scan_callback, which will cleanup */ -+ return scan_callback(ret, interface, user_data); -+ } + connman_device_ref(device); - reset_autoscan(device); -+ scanning = connman_device_get_scanning(device, CONNMAN_SERVICE_TYPE_WIFI); - +- - ret = g_supplicant_interface_scan(wifi->interface, scan_params, - scan_callback, device); -- if (ret == 0) { -+ if (scanning) { ++ ret = g_supplicant_interface_scan(wifi->interface, NULL, ++ callback, device); + if (ret == 0) { connman_device_set_scanning(device, -- CONNMAN_SERVICE_TYPE_WIFI, true); + CONNMAN_SERVICE_TYPE_WIFI, true); - } else { - g_supplicant_free_scan_params(scan_params); -- connman_device_unref(device); -- ++ } else + connman_device_unref(device); + - if (do_hidden) { - hidden_free(wifi->hidden); - wifi->hidden = NULL; - } -+ CONNMAN_SERVICE_TYPE_WIFI, false); - } - -- return ret; -+ if (result != -ENOLINK) -+ start_autoscan(device); -+ -+ /* -+ * If we are here then we were scanning; however, if we are -+ * also mid-flight disabling the interface, then wifi_disable -+ * has already cleared the device scanning state and -+ * unreferenced the device, obviating the need to do it here. -+ */ -+ -+ if (scanning) -+ connman_device_unref(device); +- } +- + return ret; } -static void wifi_stop_scan(enum connman_service_type type, - struct connman_device *device) -+static void scan_callback_hidden(int result, -+ GSupplicantInterface *interface, void *user_data) ++static void hidden_free(struct hidden_params *hidden) { -+ struct connman_device *device = user_data; - struct wifi_data *wifi = connman_device_get_data(device); -+ GSupplicantScanParams *scan_params; -+ int ret; - +- struct wifi_data *wifi = connman_device_get_data(device); +- - DBG("device %p wifi %p", device, wifi); -+ DBG("result %d wifi %p", result, wifi); - - if (!wifi) -- return; -+ goto out; +- +- if (!wifi) ++ if (!hidden) + return; - if (type == CONNMAN_SERVICE_TYPE_P2P) { - if (connman_device_get_scanning(device, CONNMAN_SERVICE_TYPE_P2P)) { @@ -12914,159 +12869,144 @@ index cc48ceb1..287c5789 100644 - p2p_find_stop(device); - } - } --} -+ /* User is trying to connect to a hidden AP */ -+ if (wifi->hidden && wifi->postpone_hidden) -+ goto out; ++ if (hidden->scan_params) ++ g_supplicant_free_scan_params(hidden->scan_params); ++ g_free(hidden->identity); ++ g_free(hidden->passphrase); ++ g_free(hidden->security); ++ g_free(hidden); + } -static void wifi_regdom_callback(int result, - const char *alpha2, -- void *user_data) --{ -- struct connman_device *device = user_data; -+ scan_params = g_try_malloc0(sizeof(GSupplicantScanParams)); -+ if (!scan_params) -+ goto out; - ++static void scan_callback(int result, GSupplicantInterface *interface, + void *user_data) + { + struct connman_device *device = user_data; +- - connman_device_regdom_notify(device, result, alpha2); -+ if (get_hidden_connections_params(wifi, scan_params) > 0) { -+ ret = g_supplicant_interface_scan(wifi->interface, -+ scan_params, -+ scan_callback_hidden, -+ device); -+ if (ret == 0) -+ return; -+ } - +- - connman_device_unref(device); -+ g_supplicant_free_scan_params(scan_params); -+ -+out: -+ scan_callback(result, interface, user_data); - } - +-} +- -static int wifi_set_regdom(struct connman_device *device, const char *alpha2) -+static gboolean autoscan_timeout(gpointer data) - { -+ struct connman_device *device = data; +-{ struct wifi_data *wifi = connman_device_get_data(device); - int ret; -+ struct autoscan_params *autoscan; -+ int interval; - - if (!wifi) +- +- if (!wifi) - return -EINVAL; -+ return FALSE; ++ bool scanning; - connman_device_ref(device); -+ autoscan = wifi->autoscan; ++ DBG("result %d wifi %p", result, wifi); - ret = g_supplicant_interface_set_country(wifi->interface, - wifi_regdom_callback, - alpha2, device); - if (ret != 0) - connman_device_unref(device); -+ if (autoscan->interval <= 0) { -+ interval = autoscan->base; -+ goto set_interval; -+ } else -+ interval = autoscan->interval * autoscan->base; - +- - return ret; -} -+ if (interval > autoscan->limit) -+ interval = autoscan->limit; - +- -static gboolean start_wps_timeout(gpointer user_data) -{ - struct wifi_data *wifi = user_data; -+ throw_wifi_scan(wifi->device, scan_callback_hidden); ++ if (wifi) { ++ if (wifi->hidden && !wifi->postpone_hidden) { ++ connman_network_clear_hidden(wifi->hidden->user_data); ++ hidden_free(wifi->hidden); ++ wifi->hidden = NULL; ++ } - DBG(""); -+ /* -+ * In case BackgroundScanning is disabled, interval will reach the -+ * limit exactly after the very first passive scanning. It allows -+ * to ensure at most one passive scan is performed in such cases. -+ */ -+ if (!connman_setting_get_bool("BackgroundScanning") && -+ interval == autoscan->limit) { -+ g_source_remove(autoscan->timeout); -+ autoscan->timeout = 0; ++ if (wifi->scan_params) { ++ g_supplicant_free_scan_params(wifi->scan_params); ++ wifi->scan_params = NULL; ++ } ++ } - wifi->wps_timeout = 0; - wifi->wps_active = FALSE; -+ connman_device_unref(device); ++ if (result < 0) ++ connman_device_reset_scanning(device); - /* if we already assigned a network we have to remove it too */ - wifi->network = NULL; -+ return FALSE; -+ } ++ /* User is connecting to a hidden AP, let's wait for finished event */ ++ if (wifi && wifi->hidden && wifi->postpone_hidden) { ++ GSupplicantScanParams *scan_params; ++ int ret; - connman_technology_wps_failed_notify(wifi_technology); -+set_interval: -+ DBG("interval %d", interval); -+ -+ autoscan->interval = interval; -+ -+ autoscan->timeout = g_timeout_add_seconds(interval, -+ autoscan_timeout, device); ++ wifi->postpone_hidden = false; ++ scan_params = wifi->hidden->scan_params; ++ wifi->hidden->scan_params = NULL; - return FALSE; - } +- return FALSE; +-} ++ reset_autoscan(device); -static bool is_wifi_valid (struct wifi_data *wifi) -+static void start_autoscan(struct connman_device *device) - { +-{ - GList *list; -+ struct wifi_data *wifi = connman_device_get_data(device); -+ struct autoscan_params *autoscan; ++ ret = g_supplicant_interface_scan(wifi->interface, scan_params, ++ scan_callback, device); ++ if (ret == 0) ++ return; - DBG(""); +- DBG(""); ++ /* On error, let's recall scan_callback, which will cleanup */ ++ return scan_callback(ret, interface, user_data); ++ } - if (wifi == NULL) - return FALSE; -+ if (!wifi) -+ return; ++ scanning = connman_device_get_scanning(device, CONNMAN_SERVICE_TYPE_WIFI); - for (list = iface_list; list; list = list->next) { - if (list->data == wifi) - return TRUE; -- } -+ if (wifi->p2p_device) -+ return; ++ if (scanning) { ++ connman_device_set_scanning(device, ++ CONNMAN_SERVICE_TYPE_WIFI, false); + } - DBG("wifi %p not found", wifi); -+ if (wifi->connected) -+ return; ++ if (result != -ENOLINK) ++ start_autoscan(device); - return FALSE; -+ autoscan = wifi->autoscan; -+ if (!autoscan) -+ return; -+ -+ if (autoscan->timeout > 0 || autoscan->interval > 0) -+ return; -+ -+ connman_device_ref(device); ++ /* ++ * If we are here then we were scanning; however, if we are ++ * also mid-flight disabling the interface, then wifi_disable ++ * has already cleared the device scanning state and ++ * unreferenced the device, obviating the need to do it here. ++ */ + -+ autoscan_timeout(device); ++ if (scanning) ++ connman_device_unref(device); } -static void cancel_wps_callback(int result, GSupplicantInterface *interface, - void *user_data) -+static struct autoscan_params *parse_autoscan_params(const char *params) ++static void scan_callback_hidden(int result, ++ GSupplicantInterface *interface, void *user_data) { - struct wifi_data *wifi = user_data; -- -- DBG("result %d", result); -+ struct autoscan_params *autoscan; -+ char **list_params; -+ int limit; -+ int base; ++ struct connman_device *device = user_data; ++ struct wifi_data *wifi = connman_device_get_data(device); ++ GSupplicantScanParams *scan_params; ++ int ret; + +- DBG("result %d", result); ++ DBG("result %d wifi %p", result, wifi); - if (!is_wifi_valid(wifi)) - return; -+ DBG(""); ++ if (!wifi) ++ goto out; - /* if we already assigned a network we have to remove it too */ - if (wifi->network) { @@ -13074,120 +13014,116 @@ index cc48ceb1..287c5789 100644 - connman_network_set_connected(wifi->network, FALSE); - wifi->network = NULL; - } -+ list_params = g_strsplit(params, ":", 0); -+ if (list_params == 0) -+ return NULL; ++ /* User is trying to connect to a hidden AP */ ++ if (wifi->hidden && wifi->postpone_hidden) ++ goto out; - if (wifi->wps_timeout > 0) { - g_source_remove(wifi->wps_timeout); - wifi->wps_timeout = 0; -+ if (!g_strcmp0(list_params[0], "exponential") && -+ g_strv_length(list_params) == 3) { -+ base = atoi(list_params[1]); -+ limit = atoi(list_params[2]); -+ } else if (!g_strcmp0(list_params[0], "single") && -+ g_strv_length(list_params) == 2) -+ base = limit = atoi(list_params[1]); -+ else { -+ g_strfreev(list_params); -+ return NULL; ++ scan_params = g_try_malloc0(sizeof(GSupplicantScanParams)); ++ if (!scan_params) ++ goto out; ++ ++ if (get_hidden_connections_params(wifi, scan_params) > 0) { ++ ret = g_supplicant_interface_scan(wifi->interface, ++ scan_params, ++ scan_callback_hidden, ++ device); ++ if (ret == 0) ++ return; } - wifi->wps_active = FALSE; - /* already freed within gsupplicant layer */ - wifi->wps_ssid = NULL; -- ++ g_supplicant_free_scan_params(scan_params); + - enable_auto_connect_block(FALSE); --} -+ DBG("Setup %s autoscanning", list_params[0]); ++out: ++ scan_callback(result, interface, user_data); + } -static int cancel_wps(struct wifi_data *wifi) --{ ++static gboolean autoscan_timeout(gpointer data) + { - int ret; -+ g_strfreev(list_params); ++ struct connman_device *device = data; ++ struct wifi_data *wifi = connman_device_get_data(device); ++ struct autoscan_params *autoscan; ++ int interval; - DBG("wifi %p", wifi); -+ autoscan = g_try_malloc0(sizeof(struct autoscan_params)); -+ if (!autoscan) { -+ DBG("Could not allocate memory for autoscan"); -+ return NULL; -+ } ++ if (!wifi) ++ return FALSE; - ret = g_supplicant_interface_wps_cancel(wifi->interface, cancel_wps_callback, wifi); - if (ret == -EALREADY || ret == -EINPROGRESS) - ret = 0; -+ DBG("base %d - limit %d", base, limit); -+ autoscan->base = base; -+ autoscan->limit = limit; ++ autoscan = wifi->autoscan; - return ret; -+ return autoscan; - } +-} ++ if (autoscan->interval <= 0) { ++ interval = autoscan->base; ++ goto set_interval; ++ } else ++ interval = autoscan->interval * autoscan->base; -static gboolean wps_timeout_cb(gpointer user_data) -+static void setup_autoscan(struct wifi_data *wifi) - { +-{ - struct wifi_data *wifi = user_data; -- ++ if (interval > autoscan->limit) ++ interval = autoscan->limit; + - DBG(""); -- -- if (!is_wifi_valid(wifi)) -- return FALSE; -- -- cancel_wps(wifi); ++ throw_wifi_scan(wifi->device, scan_callback_hidden); ++ + /* -+ * If BackgroundScanning is enabled, setup exponential -+ * autoscanning if it has not been previously done. ++ * In case BackgroundScanning is disabled, interval will reach the ++ * limit exactly after the very first passive scanning. It allows ++ * to ensure at most one passive scan is performed in such cases. + */ -+ if (connman_setting_get_bool("BackgroundScanning")) { -+ wifi->autoscan = parse_autoscan_params(AUTOSCAN_EXPONENTIAL); -+ return; ++ if (!connman_setting_get_bool("BackgroundScanning") && ++ interval == autoscan->limit) { ++ g_source_remove(autoscan->timeout); ++ autoscan->timeout = 0; ++ ++ connman_device_unref(device); + +- if (!is_wifi_valid(wifi)) + return FALSE; + } +- cancel_wps(wifi); ++set_interval: ++ DBG("interval %d", interval); + - connman_technology_wps_failed_notify(wifi_technology); -+ /* -+ * On the contrary, if BackgroundScanning is disabled, update autoscan -+ * parameters based on the type of scanning that is being performed. -+ */ -+ if (wifi->autoscan) { -+ g_free(wifi->autoscan); -+ wifi->autoscan = NULL; -+ } ++ autoscan->interval = interval; ++ ++ autoscan->timeout = g_timeout_add_seconds(interval, ++ autoscan_timeout, device); -- return FALSE; -+ switch (wifi->scanning_type) { -+ case WIFI_SCANNING_PASSIVE: -+ /* Do not setup autoscan. */ -+ break; -+ case WIFI_SCANNING_ACTIVE: -+ /* Setup one single passive scan after active. */ -+ wifi->autoscan = parse_autoscan_params(AUTOSCAN_SINGLE); -+ break; -+ case WIFI_SCANNING_UNKNOWN: -+ /* Setup autoscan in this case but we should never fall here. */ -+ wifi->autoscan = parse_autoscan_params(AUTOSCAN_SINGLE); -+ break; -+ } + return FALSE; } -static void wps_start_callback(int result, GSupplicantInterface *interface, - void *user_data) -+static void finalize_interface_creation(struct wifi_data *wifi) ++static void start_autoscan(struct connman_device *device) { - struct wifi_data *wifi = user_data; -- ++ struct wifi_data *wifi = connman_device_get_data(device); ++ struct autoscan_params *autoscan; + - DBG("result %d", result); -+ DBG("interface is ready wifi %p tethering %d", wifi, wifi->tethering); ++ DBG(""); - if (result == 0) -+ if (!wifi->device) { -+ connman_error("WiFi device not set"); ++ if (!wifi) return; -+ } - if (!is_wifi_valid(wifi)) -+ connman_device_set_powered(wifi->device, true); -+ + if (wifi->p2p_device) return; @@ -13195,117 +13131,154 @@ index cc48ceb1..287c5789 100644 - if (wifi->wps_timeout > 0) { - g_source_remove(wifi->wps_timeout); - wifi->wps_timeout = 0; -+ if (is_technology_enabled(wifi_technology)) { -+ DBG("WiFi is enable, so enable p2p also"); -+ if (p2p_technology) -+ connman_technology_set_p2p(p2p_technology, true); - } -+// if (connman_setting_get_bool("SupportP2P0Interface") == TRUE && -+// g_strcmp0(g_supplicant_interface_get_ifname(wifi->interface), -+// connman_option_get_string("P2PDevice")) == 0) { -+ int ret; +- } ++ if (wifi->connected) ++ return; - wifi->wps_active = FALSE; -- ++ autoscan = wifi->autoscan; ++ if (!autoscan) ++ return; + - connman_technology_wps_failed_notify(wifi_technology); --} -+ DBG("interface type is p2p interface"); -+ ret = g_supplicant_interface_get_p2p_device_config(wifi->interface, &wifi->p2p_device_config); -+ if (ret == 0) { -+ DBG("interface type is p2p device config"); ++ if (autoscan->timeout > 0 || autoscan->interval > 0) ++ return; ++ ++ connman_device_ref(device); ++ ++ autoscan_timeout(device); + } -static int start_wps(struct wifi_data *wifi) --{ ++static struct autoscan_params *parse_autoscan_params(const char *params) + { - int ret; -+ wifi->persistent_peer_ssid = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL); -+ add_persistent_group_info(wifi); -+ } - +- - connman_info("start wps connection"); -+ __connman_group_init(); ++ struct autoscan_params *autoscan; ++ char **list_params; ++ int limit; ++ int base; - wifi->wps_timeout = g_timeout_add_seconds(WPS_CONNECT_TIMEOUT, - wps_timeout_cb, wifi); -+ __connman_sd_init(wifi->interface, connman_device_get_ident(wifi->device)); -+// } ++ DBG(""); - ret = g_supplicant_interface_connect(wifi->interface, wifi->wps_ssid, - wps_start_callback, wifi); - if (ret == -EALREADY || ret == -EINPROGRESS) - ret = 0; -+ if (!wifi->autoscan) -+ setup_autoscan(wifi); ++ list_params = g_strsplit(params, ":", 0); ++ if (list_params == 0) ++ return NULL; - return ret; -+ start_autoscan(wifi->device); - } +-} ++ if (!g_strcmp0(list_params[0], "exponential") && ++ g_strv_length(list_params) == 3) { ++ base = atoi(list_params[1]); ++ limit = atoi(list_params[2]); ++ } else if (!g_strcmp0(list_params[0], "single") && ++ g_strv_length(list_params) == 2) ++ base = limit = atoi(list_params[1]); ++ else { ++ g_strfreev(list_params); ++ return NULL; ++ } -static gboolean deferred_wps_start(struct wifi_data *wifi) -+static void interface_create_callback(int result, -+ GSupplicantInterface *interface, -+ void *user_data) - { +-{ - DBG("WPS active %d", wifi->wps_active); -+ struct wifi_data *wifi = user_data; -+ char *bgscan_range_max; -+ long value; ++ DBG("Setup %s autoscanning", list_params[0]); - if(wifi->wps_active == FALSE) - return FALSE; -+ DBG("result %d ifname %s, wifi %p", result, -+ g_supplicant_interface_get_ifname(interface), -+ wifi); ++ g_strfreev(list_params); - if(wifi->wps_start_deferred) { - wifi->network = NULL; - start_wps(wifi); - wifi->wps_start_deferred = FALSE; - return TRUE; -- } -- ++ autoscan = g_try_malloc0(sizeof(struct autoscan_params)); ++ if (!autoscan) { ++ DBG("Could not allocate memory for autoscan"); ++ return NULL; + } + - return FALSE; --} -- ++ DBG("base %d - limit %d", base, limit); ++ autoscan->base = base; ++ autoscan->limit = limit; ++ ++ return autoscan; + } + -static int wifi_start_wps(struct connman_device *device, const char *pin) --{ ++static void setup_autoscan(struct wifi_data *wifi) + { - struct wifi_data *wifi = connman_device_get_data(device); - GSupplicantSSID *ssid; - int ret=0; -- ++ /* ++ * If BackgroundScanning is enabled, setup exponential ++ * autoscanning if it has not been previously done. ++ */ ++ if (connman_setting_get_bool("BackgroundScanning")) { ++ wifi->autoscan = parse_autoscan_params(AUTOSCAN_EXPONENTIAL); ++ return; ++ } + - if (wifi->wps_active == TRUE) - return -EINPROGRESS; -- ++ /* ++ * On the contrary, if BackgroundScanning is disabled, update autoscan ++ * parameters based on the type of scanning that is being performed. ++ */ ++ if (wifi->autoscan) { ++ g_free(wifi->autoscan); ++ wifi->autoscan = NULL; ++ } + - DBG(""); -- ++ switch (wifi->scanning_type) { ++ case WIFI_SCANNING_PASSIVE: ++ /* Do not setup autoscan. */ ++ break; ++ case WIFI_SCANNING_ACTIVE: ++ /* Setup one single passive scan after active. */ ++ wifi->autoscan = parse_autoscan_params(AUTOSCAN_SINGLE); ++ break; ++ case WIFI_SCANNING_UNKNOWN: ++ /* Setup autoscan in this case but we should never fall here. */ ++ wifi->autoscan = parse_autoscan_params(AUTOSCAN_SINGLE); ++ break; ++ } ++} + - ssid = g_try_malloc0(sizeof(GSupplicantSSID)); - if (ssid == NULL) - return -ENOMEM; -+ if (result < 0 || !wifi) -+ return; ++static void finalize_interface_creation(struct wifi_data *wifi) ++{ ++ DBG("interface is ready wifi %p tethering %d", wifi, wifi->tethering); - ssid->use_wps = TRUE; - if(strlen(pin) == 0) - ssid->pin_wps = NULL; - else - ssid->pin_wps = g_strdup(pin); -+ wifi->interface = interface; -+ g_supplicant_interface_set_data(interface, wifi); ++ if (!wifi->device) { ++ connman_error("WiFi device not set"); ++ return; ++ } - wifi->wps_active = TRUE; - wifi->wps_ssid = ssid; -+ if (g_supplicant_interface_get_ready(interface)) { -+ wifi->interface_ready = true; -+ finalize_interface_creation(wifi); -+ } ++ connman_device_set_powered(wifi->device, true); - enable_auto_connect_block(TRUE); -+ /* -+ * Set the BSS expiration age to match the long scanning -+ * interval to avoid the loss of unconnected networks between -+ * two scans. -+ */ -+ bgscan_range_max = strrchr(BGSCAN_DEFAULT, ':'); -+ if (!bgscan_range_max || strlen(bgscan_range_max) < 1) ++ if (wifi->p2p_device) + return; - /* if we're still disconnecting wait until we're completely disconnected */ @@ -13313,10 +13286,15 @@ index cc48ceb1..287c5789 100644 - DBG("Defering WPS until disconnect is done"); - wifi->wps_start_deferred = TRUE; - return 0; -- } -+ value = strtol(bgscan_range_max + 1, NULL, 10); -+ if (value <= 0 || errno == ERANGE) -+ return; ++ if (is_technology_enabled(wifi_technology)) { ++ DBG("WiFi is enable, so enable p2p also"); ++ if (p2p_technology) ++ connman_technology_set_p2p(p2p_technology, true); + } ++// if (connman_setting_get_bool("SupportP2P0Interface") == TRUE && ++// g_strcmp0(g_supplicant_interface_get_ifname(wifi->interface), ++// connman_setting_get_string("P2PDevice")) == 0) { ++ int ret; - /* This is ahead of what will happen if we have an associating network - * at this point. Once we issue the StartWPS command to wpa-supplicant @@ -13327,101 +13305,124 @@ index cc48ceb1..287c5789 100644 - connman_network_set_connected(wifi->network, FALSE); - connman_network_set_associating(wifi->network, FALSE); - wifi->network = NULL; -+ if (g_supplicant_interface_set_bss_expiration_age(interface, -+ value + SCAN_MAX_DURATION) < 0) { -+ connman_warn("Failed to set bss expiration age"); - } -- +- } ++ DBG("interface type is p2p interface"); ++ ret = g_supplicant_interface_get_p2p_device_config(wifi->interface, &wifi->p2p_device_config); ++ if (ret == 0) { ++ DBG("interface type is p2p device config"); + - return start_wps(wifi); - } +-} ++ wifi->persistent_peer_ssid = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, NULL); ++ add_persistent_group_info(wifi); ++ } -static int wifi_cancel_wps(struct connman_device *device) -+static int wifi_enable(struct connman_device *device) - { - struct wifi_data *wifi = connman_device_get_data(device); -+ int index; -+ char *interface; -+ const char *driver = connman_option_get_string("wifi"); -+ int ret; +-{ +- struct wifi_data *wifi = connman_device_get_data(device); ++ __connman_group_init(); - DBG(""); -- ++ __connman_sd_init(wifi->interface, connman_device_get_ident(wifi->device)); ++// } + - if (wifi->wps_active == FALSE) - return 0; -- ++ if (!wifi->autoscan) ++ setup_autoscan(wifi); + - return cancel_wps(wifi); --} -- ++ start_autoscan(wifi->device); + } + -static void signal_info_cb(int result, GSupplicantInterface *interface, void *user_data) --{ ++static void interface_create_callback(int result, ++ GSupplicantInterface *interface, ++ void *user_data) + { - struct wifi_cb_data *data = user_data; - connman_device_request_signal_info_cb cb = data->callback; - unsigned int value; -- ++ struct wifi_data *wifi = user_data; ++ char *bgscan_range_max; ++ long value; + - if (result < 0) - goto done; -- ++ DBG("result %d ifname %s, wifi %p", result, ++ g_supplicant_interface_get_ifname(interface), ++ wifi); + - value = g_supplicant_interface_get_rssi(interface); - connman_device_set_integer(data->wifi->device, "WiFi.RSSI", value); -+ DBG("device %p %p", device, wifi); ++ if (result < 0 || !wifi) ++ return; - value = g_supplicant_interface_get_link_speed(interface); - connman_device_set_integer(data->wifi->device, "WiFi.LinkSpeed", value); -+ index = connman_device_get_index(device); -+ if (!wifi || index < 0) -+ return -ENODEV; ++ wifi->interface = interface; ++ g_supplicant_interface_set_data(interface, wifi); - value = g_supplicant_interface_get_frequency(interface); - connman_device_set_integer(data->wifi->device, "WiFi.Frequency", value); -+ if (is_p2p_connecting()) -+ return -EINPROGRESS; ++ if (g_supplicant_interface_get_ready(interface)) { ++ wifi->interface_ready = true; ++ finalize_interface_creation(wifi); ++ } - value = g_supplicant_interface_get_noise(interface); - connman_device_set_integer(data->wifi->device, "WiFi.Noise", value); -+ interface = connman_inet_ifname(index); -+ const char *wpas_config_file = connman_setting_get_string("WpaSupplicantConfigFile"); -+ ret = g_supplicant_interface_create(interface, driver, NULL, wpas_config_file, -+ interface_create_callback, -+ wifi); -+ g_free(interface); ++ /* ++ * Set the BSS expiration age to match the long scanning ++ * interval to avoid the loss of unconnected networks between ++ * two scans. ++ */ ++ bgscan_range_max = strrchr(BGSCAN_DEFAULT, ':'); ++ if (!bgscan_range_max || strlen(bgscan_range_max) < 1) ++ return; -done: - cb(data->wifi->device, data->user_data); -+ if (ret < 0) -+ return ret; ++ value = strtol(bgscan_range_max + 1, NULL, 10); ++ if (value <= 0 || errno == ERANGE) ++ return; - g_free(data); -+ return -EINPROGRESS; ++ if (g_supplicant_interface_set_bss_expiration_age(interface, ++ value + SCAN_MAX_DURATION) < 0) { ++ connman_warn("Failed to set bss expiration age"); ++ } } -static int wifi_get_signal_info(struct connman_device *device, connman_device_request_signal_info_cb cb, void *user_data) -+static int wifi_disable(struct connman_device *device) ++static int wifi_enable(struct connman_device *device) { struct wifi_data *wifi = connman_device_get_data(device); -- struct wifi_cb_data *data; -+ int ret; -+ -+ DBG("device %p wifi %p", device, wifi); - - if (!wifi) +- struct wifi_cb_data *data; +- +- if (!wifi) - return -EINVAL; -+ return -ENODEV; ++ int index; ++ char *interface; ++ const char *driver = connman_setting_get_string("wifi"); ++ int ret; - data = g_new0(struct wifi_cb_data, 1); - if (!data) - return -ENOMEM; -+ wifi->connected = false; -+ wifi->disconnecting = false; ++ DBG("device %p %p", device, wifi); - data->callback = cb; - data->user_data = user_data; - data->wifi = wifi; -+ if (wifi->pending_network) -+ wifi->pending_network = NULL; ++ index = connman_device_get_index(device); ++ if (!wifi || index < 0) ++ return -ENODEV; - return g_supplicant_interface_update_signal_info(wifi->interface, signal_info_cb, data); -} -+ stop_autoscan(device); ++ if (is_p2p_connecting()) ++ return -EINPROGRESS; -static struct connman_device_driver wifi_ng_driver = { - .name = "wifi", @@ -13438,41 +13439,86 @@ index cc48ceb1..287c5789 100644 - .cancel_wps = wifi_cancel_wps, - .get_signal_info = wifi_get_signal_info, -}; ++ interface = connman_inet_ifname(index); ++ const char *wpas_config_file = connman_setting_get_string("WpaSupplicantConfigFile"); ++ ret = g_supplicant_interface_create(interface, driver, NULL, wpas_config_file, ++ interface_create_callback, ++ wifi); ++ g_free(interface); + +-static void system_ready(void) +-{ +- DBG(""); ++ if (ret < 0) ++ return ret; + +- if (connman_device_driver_register(&wifi_ng_driver) < 0) +- connman_error("Failed to register WiFi driver"); ++ return -EINPROGRESS; + } + +-static void system_killed(void) ++static int wifi_disable(struct connman_device *device) + { +- DBG(""); +- +- connman_device_driver_unregister(&wifi_ng_driver); +-} ++ struct wifi_data *wifi = connman_device_get_data(device); ++ int ret; + +-static int network_probe(struct connman_network *network) +-{ +- DBG("network %p", network); ++ DBG("device %p wifi %p", device, wifi); + +- return 0; +-} ++ if (!wifi) ++ return -ENODEV; + +-static int network_connect(struct connman_network *network); ++ wifi->connected = false; ++ wifi->disconnecting = false; + +-static gboolean perform_deferred_connect_after_disconnect(struct wifi_data *wifi) +-{ +- if (wifi->pending_network != NULL) { +- network_connect(wifi->pending_network); ++ if (wifi->pending_network) + wifi->pending_network = NULL; +- return TRUE; ++ ++ stop_autoscan(device); ++ + if (connman_device_get_scanning(device, CONNMAN_SERVICE_TYPE_P2P)) { + g_source_remove(wifi->p2p_find_timeout); + wifi->p2p_find_timeout = 0; + connman_device_set_scanning(device, CONNMAN_SERVICE_TYPE_P2P, false); + connman_device_unref(wifi->device); -+ } + } --static void system_ready(void) --{ -- DBG(""); +- if (deferred_wps_start(wifi)) { +- return TRUE; + /* In case of a user scan, device is still referenced */ + if (connman_device_get_scanning(device, CONNMAN_SERVICE_TYPE_WIFI)) { + connman_device_set_scanning(device, + CONNMAN_SERVICE_TYPE_WIFI, false); + connman_device_unref(wifi->device); -+ } + } -- if (connman_device_driver_register(&wifi_ng_driver) < 0) -- connman_error("Failed to register WiFi driver"); --} +- return FALSE; + remove_networks(device, wifi); + remove_peers(wifi); - --static void system_killed(void) --{ -- DBG(""); ++ + ret = g_supplicant_interface_remove(wifi->interface, NULL, NULL); + if (ret < 0) + return ret; - -- connman_device_driver_unregister(&wifi_ng_driver); ++ + return -EINPROGRESS; } --static int network_probe(struct connman_network *network) +-static void network_remove(struct connman_network *network) +struct last_connected { + struct timeval modified; + gchar *ssid; @@ -13481,49 +13527,46 @@ index cc48ceb1..287c5789 100644 + +static gint sort_entry(gconstpointer a, gconstpointer b, gpointer user_data) { -- DBG("network %p", network); +- struct connman_device *device = connman_network_get_device(network); +- struct wifi_data *wifi; + struct timeval *aval = (struct timeval *)a; + struct timeval *bval = (struct timeval *)b; -+ + +- DBG("network %p", network); + /* Note that the sort order is descending */ + if (aval->tv_sec < bval->tv_sec) + return 1; -+ + +- wifi = connman_device_get_data(device); +- if (!wifi) +- return; + if (aval->tv_sec > bval->tv_sec) + return -1; - return 0; - } +- if (wifi->network != network) +- return; +- else { +- wifi->disconnecting = FALSE; +- perform_deferred_connect_after_disconnect(wifi); +- } ++ return 0; ++} --static int network_connect(struct connman_network *network); -- --static gboolean perform_deferred_connect_after_disconnect(struct wifi_data *wifi) +- wifi->network = NULL; +static void free_entry(gpointer data) - { -- if (wifi->pending_network != NULL) { -- network_connect(wifi->pending_network); -- wifi->pending_network = NULL; -- return TRUE; -- } -- -- if (deferred_wps_start(wifi)) { -- return TRUE; -- } ++{ + struct last_connected *entry = data; - -- return FALSE; ++ + g_free(entry->ssid); + g_free(entry); } --static void network_remove(struct connman_network *network) +-static void connect_callback(int result, GSupplicantInterface *interface, +- void *user_data) +static int get_latest_connections(int max_ssids, + GSupplicantScanParams *scan_data) { -- struct connman_device *device = connman_network_get_device(network); -- struct wifi_data *wifi; -- -- DBG("network %p", network); +- struct connman_network *network = user_data; + GSequenceIter *iter; + GSequence *latest_list; + struct last_connected *entry; @@ -13535,122 +13578,31 @@ index cc48ceb1..287c5789 100644 + int i, freq; + int num_ssids = 0; -- wifi = connman_device_get_data(device); -- if (!wifi) -- return; +- DBG("network %p result %d", network, result); + latest_list = g_sequence_new(free_entry); + if (!latest_list) + return -ENOMEM; -- if (wifi->network != network) -- return; -- else { -- wifi->disconnecting = FALSE; -- perform_deferred_connect_after_disconnect(wifi); +- if (result == -ENOKEY) { +- connman_network_set_error(network, +- CONNMAN_NETWORK_ERROR_INVALID_KEY); +- } else if (result < 0) { +- connman_network_set_error(network, +- CONNMAN_NETWORK_ERROR_CONFIGURE_FAIL); - } + services = connman_storage_get_services(); + for (i = 0; services && services[i]; i++) { + if (strncmp(services[i], "wifi_", 5) != 0) + continue; -- wifi->network = NULL; +- connman_network_unref(network); -} + keyfile = connman_storage_load_service(services[i]); + if (!keyfile) + continue; --static void connect_callback(int result, GSupplicantInterface *interface, -- void *user_data) --{ -- struct connman_network *network = user_data; -+ str = g_key_file_get_string(keyfile, -+ services[i], "Favorite", NULL); -+ if (!str || g_strcmp0(str, "true")) { -+ g_free(str); -+ g_key_file_free(keyfile); -+ continue; -+ } -+ g_free(str); - -- DBG("network %p result %d", network, result); -+ str = g_key_file_get_string(keyfile, -+ services[i], "AutoConnect", NULL); -+ if (!str || g_strcmp0(str, "true")) { -+ g_free(str); -+ g_key_file_free(keyfile); -+ continue; -+ } -+ g_free(str); - -- if (result == -ENOKEY) { -- connman_network_set_error(network, -- CONNMAN_NETWORK_ERROR_INVALID_KEY); -- } else if (result < 0) { -- connman_network_set_error(network, -- CONNMAN_NETWORK_ERROR_CONFIGURE_FAIL); -+ str = g_key_file_get_string(keyfile, -+ services[i], "Modified", NULL); -+ if (!str) { -+ g_key_file_free(keyfile); -+ continue; -+ } -+ util_iso8601_to_timeval(str, &modified); -+ g_free(str); -+ -+ ssid = g_key_file_get_string(keyfile, -+ services[i], "SSID", NULL); -+ -+ freq = g_key_file_get_integer(keyfile, services[i], -+ "Frequency", NULL); -+ if (freq) { -+ entry = g_try_new(struct last_connected, 1); -+ if (!entry) { -+ g_sequence_free(latest_list); -+ g_key_file_free(keyfile); -+ g_free(ssid); -+ return -ENOMEM; -+ } -+ -+ entry->ssid = ssid; -+ entry->modified = modified; -+ entry->freq = freq; -+ -+ g_sequence_insert_sorted(latest_list, entry, -+ sort_entry, NULL); -+ num_ssids++; -+ } else -+ g_free(ssid); -+ -+ g_key_file_free(keyfile); - } - -- connman_network_unref(network); -+ g_strfreev(services); -+ -+ num_ssids = num_ssids > max_ssids ? max_ssids : num_ssids; -+ -+ iter = g_sequence_get_begin_iter(latest_list); -+ -+ for (i = 0; i < num_ssids; i++) { -+ entry = g_sequence_get(iter); -+ -+ DBG("ssid %s freq %d modified %lu", entry->ssid, entry->freq, -+ entry->modified.tv_sec); -+ -+ add_scan_param(entry->ssid, NULL, 0, entry->freq, scan_data, -+ max_ssids, entry->ssid); -+ -+ iter = g_sequence_iter_next(iter); -+ } -+ -+ g_sequence_free(latest_list); -+ return num_ssids; - } - -static GSupplicantSecurity network_security(const char *security) -+static void wifi_update_scanner_type(struct wifi_data *wifi, -+ enum wifi_scanning_type new_type) - { +-{ - if (g_str_equal(security, "none")) - return G_SUPPLICANT_SECURITY_NONE; - else if (g_str_equal(security, "wep")) @@ -13663,22 +13615,37 @@ index cc48ceb1..287c5789 100644 - return G_SUPPLICANT_SECURITY_PSK; - else if (g_str_equal(security, "ieee8021x")) - return G_SUPPLICANT_SECURITY_IEEE8021X; -+ DBG(""); ++ str = g_key_file_get_string(keyfile, ++ services[i], "Favorite", NULL); ++ if (!str || g_strcmp0(str, "true")) { ++ g_free(str); ++ g_key_file_free(keyfile); ++ continue; ++ } ++ g_free(str); - return G_SUPPLICANT_SECURITY_UNKNOWN; -+ if (!wifi || wifi->scanning_type == new_type) -+ return; -+ -+ wifi->scanning_type = new_type; -+ -+ setup_autoscan(wifi); - } +-} ++ str = g_key_file_get_string(keyfile, ++ services[i], "AutoConnect", NULL); ++ if (!str || g_strcmp0(str, "true")) { ++ g_free(str); ++ g_key_file_free(keyfile); ++ continue; ++ } ++ g_free(str); -static void ssid_init(GSupplicantSSID *ssid, struct connman_network *network) -+static int wifi_scan_simple(struct connman_device *device) - { +-{ - const char *security; -+ struct wifi_data *wifi = connman_device_get_data(device); ++ str = g_key_file_get_string(keyfile, ++ services[i], "Modified", NULL); ++ if (!str) { ++ g_key_file_free(keyfile); ++ continue; ++ } ++ util_iso8601_to_timeval(str, &modified); ++ g_free(str); - memset(ssid, 0, sizeof(*ssid)); - ssid->mode = G_SUPPLICANT_MODE_INFRA; @@ -13689,12 +13656,20 @@ index cc48ceb1..287c5789 100644 - ssid->security = network_security(security); - ssid->passphrase = connman_network_get_string(network, - "WiFi.Passphrase"); -+ reset_autoscan(device); ++ ssid = g_key_file_get_string(keyfile, ++ services[i], "SSID", NULL); - ssid->eap = connman_network_get_string(network, "WiFi.EAP"); -+ /* Distinguish between devices performing passive and active scanning */ -+ if (wifi) -+ wifi_update_scanner_type(wifi, WIFI_SCANNING_PASSIVE); ++ freq = g_key_file_get_integer(keyfile, services[i], ++ "Frequency", NULL); ++ if (freq) { ++ entry = g_try_new(struct last_connected, 1); ++ if (!entry) { ++ g_sequence_free(latest_list); ++ g_key_file_free(keyfile); ++ g_free(ssid); ++ return -ENOMEM; ++ } - /* - * If our private key password is unset, @@ -13708,17 +13683,19 @@ index cc48ceb1..287c5789 100644 - ssid->passphrase); - /* We must have an identity for both PEAP and TLS */ - ssid->identity = connman_network_get_string(network, "WiFi.Identity"); -+ return throw_wifi_scan(device, scan_callback_hidden); -+} ++ entry->ssid = ssid; ++ entry->modified = modified; ++ entry->freq = freq; - /* Use agent provided identity as a fallback */ - if (!ssid->identity || strlen(ssid->identity) == 0) - ssid->identity = connman_network_get_string(network, - "WiFi.AgentIdentity"); -+static gboolean p2p_find_stop(gpointer data) -+{ -+ struct connman_device *device = data; -+ struct wifi_data *wifi = connman_device_get_data(device); ++ g_sequence_insert_sorted(latest_list, entry, ++ sort_entry, NULL); ++ num_ssids++; ++ } else ++ g_free(ssid); - ssid->anonymous_identity = connman_network_get_string(network, - "WiFi.AnonymousIdentity"); @@ -13739,76 +13716,78 @@ index cc48ceb1..287c5789 100644 - ssid->private_key_passphrase = connman_network_get_string(network, - "WiFi.PrivateKeyPassphrase"); - ssid->phase2_auth = connman_network_get_string(network, "WiFi.Phase2"); -+ DBG(""); ++ g_key_file_free(keyfile); ++ } - ssid->use_wps = connman_network_get_bool(network, "WiFi.UseWPS"); - ssid->pin_wps = connman_network_get_string(network, "WiFi.PinWPS"); -+ if (wifi) { -+ wifi->p2p_find_timeout = 0; ++ g_strfreev(services); - if (connman_setting_get_bool("BackgroundScanning")) - ssid->bgscan = BGSCAN_DEFAULT; -+ g_supplicant_interface_p2p_stop_find(wifi->interface); -+ if (p2p_technology && -+ (wifi->p2p_listen_suppressed == true || -+ connman_technology_get_p2p_listen(p2p_technology))) { -+ set_p2p_listen_without_state_change(p2p_technology, true); -+ if (wifi->p2p_listen_suppressed) -+ wifi->p2p_listen_suppressed = false; -+ } -+ } ++ num_ssids = num_ssids > max_ssids ? max_ssids : num_ssids; + -+ connman_device_set_scanning(device, CONNMAN_SERVICE_TYPE_P2P, false); ++ iter = g_sequence_get_begin_iter(latest_list); + -+ connman_device_unref(device); -+ start_autoscan(device); ++ for (i = 0; i < num_ssids; i++) { ++ entry = g_sequence_get(iter); + -+ return FALSE; ++ DBG("ssid %s freq %d modified %lu", entry->ssid, entry->freq, ++ entry->modified.tv_sec); ++ ++ add_scan_param(entry->ssid, NULL, 0, entry->freq, scan_data, ++ max_ssids, entry->ssid); ++ ++ iter = g_sequence_iter_next(iter); ++ } ++ ++ g_sequence_free(latest_list); ++ return num_ssids; } -static int network_connect(struct connman_network *network) -+static void p2p_find_callback(int result, GSupplicantInterface *interface, -+ void *user_data) ++static void wifi_update_scanner_type(struct wifi_data *wifi, ++ enum wifi_scanning_type new_type) { - struct connman_device *device = connman_network_get_device(network); - struct wifi_data *wifi; - GSupplicantInterface *interface; - GSupplicantSSID *ssid; -- ++ DBG(""); + - DBG("network %p", network); -+ struct connman_device *device = user_data; -+ struct wifi_data *wifi = connman_device_get_data(device); ++ if (!wifi || wifi->scanning_type == new_type) ++ return; - if (!device) - return -ENODEV; -+ DBG("result %d wifi %p", result, wifi); ++ wifi->scanning_type = new_type; - wifi = connman_device_get_data(device); - if (!wifi) +- if (!wifi) - return -ENODEV; -+ goto error; ++ setup_autoscan(wifi); ++} - if (wifi->wps_active) - return -EINPROGRESS; -+ if (wifi->p2p_find_timeout) { -+ g_source_remove(wifi->p2p_find_timeout); -+ wifi->p2p_find_timeout = 0; -+ } ++static int wifi_scan_simple(struct connman_device *device) ++{ ++ struct wifi_data *wifi = connman_device_get_data(device); - ssid = g_try_malloc0(sizeof(GSupplicantSSID)); - if (!ssid) - return -ENOMEM; -+ if (result) -+ goto error; ++ reset_autoscan(device); - interface = wifi->interface; -+ wifi->p2p_find_timeout = g_timeout_add_seconds(P2P_FIND_TIMEOUT, -+ p2p_find_stop, device); -+ if (!wifi->p2p_find_timeout) -+ goto error; ++ /* Distinguish between devices performing passive and active scanning */ ++ if (wifi) ++ wifi_update_scanner_type(wifi, WIFI_SCANNING_PASSIVE); - ssid_init(ssid, network); -+ p2p_find_ref = -1; ++ return throw_wifi_scan(device, scan_callback_hidden); ++} - if (wifi->disconnecting) { - wifi->pending_network = network; @@ -13816,14 +13795,78 @@ index cc48ceb1..287c5789 100644 - } else { - wifi->network = connman_network_ref(network); - wifi->retries = 0; ++static gboolean p2p_find_stop(gpointer data) ++{ ++ struct connman_device *device = data; ++ struct wifi_data *wifi = connman_device_get_data(device); + +- return g_supplicant_interface_connect(interface, ssid, +- connect_callback, network); ++ DBG(""); ++ ++ if (wifi) { ++ wifi->p2p_find_timeout = 0; ++ ++ g_supplicant_interface_p2p_stop_find(wifi->interface); ++ if (p2p_technology && ++ (wifi->p2p_listen_suppressed == true || ++ connman_technology_get_p2p_listen(p2p_technology))) { ++ set_p2p_listen_without_state_change(p2p_technology, true); ++ if (wifi->p2p_listen_suppressed) ++ wifi->p2p_listen_suppressed = false; ++ } + } + +- return -EINPROGRESS; ++ connman_device_set_scanning(device, CONNMAN_SERVICE_TYPE_P2P, false); ++ ++ connman_device_unref(device); ++ start_autoscan(device); ++ ++ return FALSE; + } + +-static void disconnect_callback(int result, GSupplicantInterface *interface, +- void *user_data) ++static void p2p_find_callback(int result, GSupplicantInterface *interface, ++ void *user_data) + { +- struct disconnect_data *dd = user_data; +- struct connman_network *network = dd->network; +- struct wifi_data *wifi = dd->wifi; ++ struct connman_device *device = user_data; ++ struct wifi_data *wifi = connman_device_get_data(device); + +- g_free(dd); ++ DBG("result %d wifi %p", result, wifi); + +- DBG("result %d supplicant interface %p wifi %p networks: current %p " +- "pending %p disconnected %p", result, interface, wifi, +- wifi->network, wifi->pending_network, network); ++ if (!wifi) ++ goto error; ++ ++ if (wifi->p2p_find_timeout) { ++ g_source_remove(wifi->p2p_find_timeout); ++ wifi->p2p_find_timeout = 0; ++ } ++ ++ if (result) ++ goto error; ++ ++ wifi->p2p_find_timeout = g_timeout_add_seconds(P2P_FIND_TIMEOUT, ++ p2p_find_stop, device); ++ if (!wifi->p2p_find_timeout) ++ goto error; ++ ++ p2p_find_ref = -1; ++ + return; +error: + p2p_find_ref = -1; + p2p_find_stop(device); +} - -- return g_supplicant_interface_connect(interface, ssid, -- connect_callback, network); ++ +static gboolean p2p_find_complete(gpointer argv) +{ + struct connman_device *device = argv; @@ -13833,9 +13876,8 @@ index cc48ceb1..287c5789 100644 + if(!wifi) { + p2p_find_ref = -1; + return FALSE; - } - -- return -EINPROGRESS; ++ } ++ + if (p2p_technology && + (wifi->p2p_listen_suppressed == true || + connman_technology_get_p2p_listen(p2p_technology))) { @@ -13847,29 +13889,18 @@ index cc48ceb1..287c5789 100644 + p2p_find_ref = -1; + + return FALSE; - } - --static void disconnect_callback(int result, GSupplicantInterface *interface, -- void *user_data) ++} ++ +static int p2p_find(struct connman_device *device) - { -- struct disconnect_data *dd = user_data; -- struct connman_network *network = dd->network; -- struct wifi_data *wifi = dd->wifi; ++{ + struct wifi_data *wifi; + int ret; - -- g_free(dd); ++ + DBG(""); - -- DBG("result %d supplicant interface %p wifi %p networks: current %p " -- "pending %p disconnected %p", result, interface, wifi, -- wifi->network, wifi->pending_network, network); ++ + if (!p2p_technology) + return -ENOTSUP; - -- if (result == -ECONNABORTED) { -- DBG("wifi interface no longer available"); ++ + wifi = connman_device_get_data(device); + + if (!wifi || !wifi->interface) @@ -13930,7 +13961,7 @@ index cc48ceb1..287c5789 100644 + if (params->type == CONNMAN_SERVICE_TYPE_P2P) { + if (connman_setting_get_bool("SupportP2P0Interface") == TRUE && + g_strcmp0(connman_device_get_string(device, "Interface"), -+ connman_option_get_string("P2PDevice")) != 0) ++ connman_setting_get_string("P2PDevice")) != 0) + return -ENOTSUP; + + if(p2p_find_ref != -1) @@ -13943,7 +13974,7 @@ index cc48ceb1..287c5789 100644 + + if (connman_setting_get_bool("SupportP2P0Interface") == TRUE && + g_strcmp0(connman_device_get_string(device, "Interface"), -+ connman_option_get_string("WiFiDevice")) != 0) ++ connman_setting_get_string("WiFiDevice")) != 0) + return -ENOTSUP; + + scanning = connman_device_get_scanning(device, CONNMAN_SERVICE_TYPE_WIFI); @@ -14649,7 +14680,10 @@ index cc48ceb1..287c5789 100644 + return; + } + -+ connman_network_set_connected(network, false); ++ if (g_slist_find(wifi->networks, network)) ++ connman_network_set_connected(network, false); ++ ++ wifi->disconnecting = false; + + if (network != wifi->network) { + if (network == wifi->pending_network) @@ -14660,7 +14694,6 @@ index cc48ceb1..287c5789 100644 + + wifi->network = NULL; + -+ wifi->disconnecting = false; + wifi->connected = false; + + if (perform_deferred_connect_after_disconnect(wifi) == FALSE) @@ -15160,7 +15193,7 @@ index cc48ceb1..287c5789 100644 + + if (connman_setting_get_bool("SupportP2P0Interface") == TRUE && + g_strcmp0(g_supplicant_interface_get_ifname(p2p_interface), -+ connman_option_get_string("P2PDevice")) != 0) ++ connman_setting_get_string("P2PDevice")) != 0) + continue; + + if (connman_technology_get_p2p_listen(p2p_technology) == false && @@ -15427,7 +15460,9 @@ index cc48ceb1..287c5789 100644 + + if (!g_supplicant_interface_has_p2p(interface)) + return; -+ + +- if (result == -ECONNABORTED) { +- DBG("wifi interface no longer available"); + wifi = g_supplicant_interface_get_data(interface); + + if (!wifi) @@ -15722,41 +15757,42 @@ index cc48ceb1..287c5789 100644 return; - } -- connman_network_set_connected(network, false); +- if (g_slist_find(wifi->networks, network)) +- connman_network_set_connected(network, false); + connman_network_set_address(connman_network, g_supplicant_network_get_bssid(network), 6); +- wifi->disconnecting = false; ++ if (bss_table) ++ g_hash_table_foreach(bss_table, bss_foreach, connman_network); + - if (network != wifi->network) { - if (network == wifi->pending_network) - wifi->pending_network = NULL; - DBG("current wifi network has changed since disconnection"); - return; - } -+ if (bss_table) -+ g_hash_table_foreach(bss_table, bss_foreach, connman_network); - -- wifi->network = NULL; + if (g_str_equal(property, "WPSCapabilities")) { + bool wps; + bool wps_pbc; + bool wps_ready; + bool wps_advertizing; -- wifi->disconnecting = false; -- wifi->connected = false; +- wifi->network = NULL; + wps = g_supplicant_network_get_wps(network); + wps_pbc = g_supplicant_network_is_wps_pbc(network); + wps_ready = g_supplicant_network_is_wps_active(network); + wps_advertizing = + g_supplicant_network_is_wps_advertizing(network); +- wifi->connected = false; ++ connman_network_set_bool(connman_network, "WiFi.WPS", wps); ++ connman_network_set_bool(connman_network, ++ "WiFi.WPSAdvertising", wps_advertizing); + - if (perform_deferred_connect_after_disconnect(wifi) == FALSE) - { - start_autoscan(wifi->device); - } -+ connman_network_set_bool(connman_network, "WiFi.WPS", wps); -+ connman_network_set_bool(connman_network, -+ "WiFi.WPSAdvertising", wps_advertizing); -+ + if (wps) { + /* + * Is AP advertizing for WPS association? @@ -17712,7 +17748,7 @@ index cc48ceb1..287c5789 100644 } static const GSupplicantCallbacks callbacks = { -@@ -3730,6 +5939,7 @@ static const GSupplicantCallbacks callbacks = { +@@ -3742,6 +5951,7 @@ static const GSupplicantCallbacks callbacks = { .interface_state = interface_state, .interface_removed = interface_removed, .p2p_support = p2p_support, @@ -17720,7 +17756,7 @@ index cc48ceb1..287c5789 100644 .scan_started = scan_started, .scan_finished = scan_finished, .ap_create_fail = ap_create_fail, -@@ -3745,13 +5955,29 @@ static const GSupplicantCallbacks callbacks = { +@@ -3757,13 +5967,29 @@ static const GSupplicantCallbacks callbacks = { .peer_lost = peer_lost, .peer_changed = peer_changed, .peer_request = peer_request, @@ -17751,7 +17787,7 @@ index cc48ceb1..287c5789 100644 static int tech_probe(struct connman_technology *technology) { wifi_technology = technology; -@@ -4056,6 +6282,21 @@ static int tech_set_regdom(struct connman_technology *technology, const char *al +@@ -4068,6 +6294,21 @@ static int tech_set_regdom(struct connman_technology *technology, const char *al return g_supplicant_set_country(alpha2, regdom_callback, NULL); } @@ -17773,7 +17809,7 @@ index cc48ceb1..287c5789 100644 static struct connman_technology_driver tech_driver = { .name = "wifi", .type = CONNMAN_SERVICE_TYPE_WIFI, -@@ -4063,12 +6304,15 @@ static struct connman_technology_driver tech_driver = { +@@ -4075,12 +6316,15 @@ static struct connman_technology_driver tech_driver = { .remove = tech_remove, .set_tethering = tech_set_tethering, .set_regdom = tech_set_regdom, @@ -17789,7 +17825,7 @@ index cc48ceb1..287c5789 100644 err = connman_network_driver_register(&network_driver); if (err < 0) return err; -@@ -4089,6 +6333,72 @@ static int wifi_init(void) +@@ -4101,6 +6345,72 @@ static int wifi_init(void) return 0; } @@ -17863,10 +17899,10 @@ index cc48ceb1..287c5789 100644 { DBG(); diff --git a/src/connman.h b/src/connman.h -index 558e06db..0f750694 100644 +index 67886e5d..dac252d9 100644 --- a/src/connman.h +++ b/src/connman.h -@@ -280,6 +280,7 @@ void __connman_storage_save_provider(GKeyFile *keyfile, const char *identifier); +@@ -278,6 +278,7 @@ void __connman_storage_save_provider(GKeyFile *keyfile, const char *identifier); bool __connman_storage_remove_provider(const char *identifier); char **__connman_storage_get_providers(void); bool __connman_storage_remove_service(const char *service_id); @@ -17874,7 +17910,7 @@ index 558e06db..0f750694 100644 int __connman_detect_init(void); void __connman_detect_cleanup(void); -@@ -469,6 +470,7 @@ typedef void (* dhcpv6_cb) (struct connman_network *network, +@@ -467,6 +468,7 @@ typedef void (* dhcpv6_cb) (struct connman_network *network, typedef void (* dhcp_cb) (struct connman_ipconfig *ipconfig, struct connman_network *opt_network, bool success, gpointer data); @@ -17882,7 +17918,7 @@ index 558e06db..0f750694 100644 char *__connman_dhcp_get_server_address(struct connman_ipconfig *ipconfig); int __connman_dhcp_start(struct connman_ipconfig *ipconfig, struct connman_network *network, dhcp_cb callback, -@@ -563,6 +565,8 @@ void __connman_technology_remove_interface(enum connman_service_type type, +@@ -561,6 +563,8 @@ void __connman_technology_remove_interface(enum connman_service_type type, int index, const char *ident); void __connman_technology_notify_regdom_by_device(struct connman_device *device, int result, const char *alpha2); @@ -17891,7 +17927,7 @@ index 558e06db..0f750694 100644 #include -@@ -577,6 +581,7 @@ int __connman_device_request_scan(enum connman_service_type type); +@@ -575,6 +579,7 @@ int __connman_device_request_scan(enum connman_service_type type); int __connman_device_request_scan_full(enum connman_service_type type); int __connman_device_request_start_wps(enum connman_service_type type, const char *pin); int __connman_device_request_cancel_wps(enum connman_service_type type); @@ -17899,7 +17935,7 @@ index 558e06db..0f750694 100644 int __connman_device_request_hidden_scan(struct connman_device *device, const char *ssid, unsigned int ssid_len, const char *identity, const char *passphrase, -@@ -703,6 +708,7 @@ int __connman_service_compare(const struct connman_service *a, +@@ -704,6 +709,7 @@ int __connman_service_compare(const struct connman_service *a, const struct connman_service *b); struct connman_service *__connman_service_lookup_from_index(int index); @@ -17907,7 +17943,7 @@ index 558e06db..0f750694 100644 struct connman_service *__connman_service_create_from_network(struct connman_network *network); struct connman_service *__connman_service_create_from_provider(struct connman_provider *provider); bool __connman_service_index_is_default(int index); -@@ -857,7 +863,9 @@ void __connman_peer_cleanup(void); +@@ -858,7 +864,9 @@ void __connman_peer_cleanup(void); void __connman_peer_list_struct(DBusMessageIter *array); const char *__connman_peer_get_path(struct connman_peer *peer); @@ -17918,7 +17954,7 @@ index 558e06db..0f750694 100644 int __connman_peer_service_init(void); void __connman_peer_service_cleanup(void); -@@ -1011,6 +1019,15 @@ typedef void (*ippool_collision_cb_t) (struct connman_ippool *pool, +@@ -1012,6 +1020,15 @@ typedef void (*ippool_collision_cb_t) (struct connman_ippool *pool, int __connman_ippool_init(void); void __connman_ippool_cleanup(void); @@ -17934,7 +17970,7 @@ index 558e06db..0f750694 100644 void __connman_ippool_free(struct connman_ippool *pool); struct connman_ippool *__connman_ippool_create(int index, -@@ -1019,6 +1036,13 @@ struct connman_ippool *__connman_ippool_create(int index, +@@ -1020,6 +1037,13 @@ struct connman_ippool *__connman_ippool_create(int index, ippool_collision_cb_t collision_cb, void *user_data); @@ -17948,7 +17984,7 @@ index 558e06db..0f750694 100644 const char *__connman_ippool_get_gateway(struct connman_ippool *pool); const char *__connman_ippool_get_broadcast(struct connman_ippool *pool); const char *__connman_ippool_get_subnet_mask(struct connman_ippool *pool); -@@ -1105,3 +1129,4 @@ int __connman_util_get_random(uint64_t *val); +@@ -1106,3 +1130,4 @@ int __connman_util_get_random(uint64_t *val); unsigned int __connman_util_random_delay_ms(unsigned int secs); int __connman_util_init(void); void __connman_util_cleanup(void); @@ -17970,7 +18006,7 @@ index c454a581..a1e35c85 100644 variant_sig = DBUS_TYPE_ARRAY_AS_STRING DBUS_TYPE_STRING_AS_STRING; diff --git a/src/device.c b/src/device.c -index ce70da90..5c6d3637 100644 +index ce70da90..d898aa08 100644 --- a/src/device.c +++ b/src/device.c @@ -1060,6 +1060,9 @@ void connman_device_unregister(struct connman_device *device) @@ -18045,7 +18081,7 @@ index ce70da90..5c6d3637 100644 + + if (connman_setting_get_bool("SupportP2P0Interface") == TRUE && + g_strcmp0(connman_device_get_string(device, "Interface"), -+ connman_option_get_string("P2PDevice")) != 0) ++ connman_setting_get_string("P2PDevice")) != 0) + continue; + + err = device_cancel_p2p(device); @@ -18064,7 +18100,7 @@ index ce70da90..5c6d3637 100644 connman_device_request_signal_info_cb cb, void *user_data) { diff --git a/src/dhcp.c b/src/dhcp.c -index 42e9f417..a1df8289 100644 +index 2d96c439..e128ca97 100644 --- a/src/dhcp.c +++ b/src/dhcp.c @@ -659,6 +659,16 @@ static int dhcp_release(struct connman_dhcp *dhcp) @@ -19134,7 +19170,7 @@ index 2aacee37..0c424598 100644 }; diff --git a/src/network.c b/src/network.c -index aa8802ff..f412fa4d 100644 +index be2efc54..e6e8076e 100644 --- a/src/network.c +++ b/src/network.c @@ -87,6 +87,7 @@ struct connman_network { @@ -19461,7 +19497,7 @@ index 00000000..e9d5f2d0 + DBG(""); +} diff --git a/src/peer.c b/src/peer.c -index c66b3a71..fcac4698 100644 +index bad5c841..ca1e46ac 100644 --- a/src/peer.c +++ b/src/peer.c @@ -33,12 +33,16 @@ @@ -20139,7 +20175,7 @@ index c66b3a71..fcac4698 100644 } static void peer_service_free(gpointer data) -@@ -1072,6 +1411,7 @@ static const GDBusMethodTable peer_methods[] = { +@@ -1075,6 +1414,7 @@ static const GDBusMethodTable peer_methods[] = { get_peer_properties) }, { GDBUS_ASYNC_METHOD("Connect", NULL, NULL, connect_peer) }, { GDBUS_METHOD("Disconnect", NULL, NULL, disconnect_peer) }, @@ -20147,7 +20183,7 @@ index c66b3a71..fcac4698 100644 { }, }; -@@ -1127,6 +1467,8 @@ void connman_peer_unregister(struct connman_peer *peer) +@@ -1130,6 +1470,8 @@ void connman_peer_unregister(struct connman_peer *peer) connman_agent_cancel(peer); reply_pending(peer, EIO); @@ -20156,7 +20192,7 @@ index c66b3a71..fcac4698 100644 g_dbus_unregister_interface(connection, peer->path, CONNMAN_PEER_INTERFACE); peer->registered = false; -@@ -1145,6 +1487,35 @@ struct connman_peer *connman_peer_get(struct connman_device *device, +@@ -1148,6 +1490,35 @@ struct connman_peer *connman_peer_get(struct connman_device *device, return peer; } @@ -20192,7 +20228,7 @@ index c66b3a71..fcac4698 100644 int connman_peer_driver_register(struct connman_peer_driver *driver) { if (peer_driver && peer_driver != driver) -@@ -1180,16 +1551,63 @@ const char *__connman_peer_get_path(struct connman_peer *peer) +@@ -1183,16 +1554,63 @@ const char *__connman_peer_get_path(struct connman_peer *peer) return peer->path; } @@ -20693,10 +20729,10 @@ index 00000000..9be1bde8 + } +} diff --git a/src/service.c b/src/service.c -index 8926a5b6..8bb51926 100644 +index 068679d5..cd3e5104 100644 --- a/src/service.c +++ b/src/service.c -@@ -7354,6 +7354,11 @@ struct connman_service *__connman_service_lookup_from_index(int index) +@@ -7416,6 +7416,11 @@ struct connman_service *__connman_service_lookup_from_index(int index) return NULL; } @@ -20870,7 +20906,7 @@ index 90f03ebc..7e6d6590 100644 + closedir(dir); +} diff --git a/src/technology.c b/src/technology.c -index 252701e9..1a437d9e 100644 +index 252701e9..9aa335b7 100644 --- a/src/technology.c +++ b/src/technology.c @@ -69,6 +69,16 @@ struct connman_technology { @@ -21837,7 +21873,7 @@ index 252701e9..1a437d9e 100644 - technology->device_list = g_slist_prepend(technology->device_list, + if (connman_setting_get_bool("SupportP2P0Interface") == TRUE && + g_strcmp0(connman_device_get_string(device, "Interface"), -+ connman_option_get_string("WiFiDevice")) == 0) ++ connman_setting_get_string("WiFiDevice")) == 0) + technology->device_list = g_slist_append(technology->device_list, + device); + else diff --git a/meta-webos/recipes-connectivity/connman/connman/0017-Revert-storage-Remove-unused-__connman_storage_open_.patch b/meta-webos/recipes-connectivity/connman/connman/0017-Revert-storage-Remove-unused-__connman_storage_open_.patch index 5eb68c606..9f4c6a45b 100644 --- a/meta-webos/recipes-connectivity/connman/connman/0017-Revert-storage-Remove-unused-__connman_storage_open_.patch +++ b/meta-webos/recipes-connectivity/connman/connman/0017-Revert-storage-Remove-unused-__connman_storage_open_.patch @@ -1,4 +1,4 @@ -From ffc2535dfd57bb7b9eff5082204ae834300ace3c Mon Sep 17 00:00:00 2001 +From 7eb3acb20d20417b40976dc50bd178050fe7ed32 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 10 Mar 2021 06:48:18 -0800 Subject: [PATCH] Revert "storage: Remove unused @@ -13,10 +13,10 @@ This reverts commit 6ca9222beb5445de9fc8a94d92e0a7b9ebce3724. 2 files changed, 23 insertions(+) diff --git a/src/connman.h b/src/connman.h -index 0f750694..3badeb78 100644 +index dac252d9..e23dbc13 100644 --- a/src/connman.h +++ b/src/connman.h -@@ -274,6 +274,7 @@ void __connman_storage_delete_global(void); +@@ -272,6 +272,7 @@ void __connman_storage_delete_global(void); GKeyFile *__connman_storage_load_config(const char *ident); GKeyFile *__connman_storage_load_provider_config(const char *ident); diff --git a/meta-webos/recipes-connectivity/connman/connman/0018-Fix-crash-in-p2p-addservice-and-p2p-settethering.patch b/meta-webos/recipes-connectivity/connman/connman/0018-Fix-crash-in-p2p-addservice-and-p2p-settethering.patch index f46ca1490..8cb948b47 100644 --- a/meta-webos/recipes-connectivity/connman/connman/0018-Fix-crash-in-p2p-addservice-and-p2p-settethering.patch +++ b/meta-webos/recipes-connectivity/connman/connman/0018-Fix-crash-in-p2p-addservice-and-p2p-settethering.patch @@ -1,4 +1,4 @@ -From a60120b77c093a23c7d31ec64ee814d334e284e8 Mon Sep 17 00:00:00 2001 +From 4b29d8ba64e6049561929900ca79b4688e0d057c Mon Sep 17 00:00:00 2001 From: "penikelapati.kumar" Date: Wed, 17 Feb 2021 14:12:35 +0530 Subject: [PATCH] Fix crash in p2p/addservice and p2p/settethering @@ -18,24 +18,10 @@ N/A :Issues Addressed: [PLAT-137131] [webOS OSE]: Failed to enable tethering mode --- - plugins/wifi.c | 2 +- - src/group.c | 5 ++--- - src/p2pgo.c | 2 ++ - 3 files changed, 5 insertions(+), 4 deletions(-) + src/group.c | 5 ++--- + src/p2pgo.c | 2 ++ + 2 files changed, 4 insertions(+), 3 deletions(-) -diff --git a/plugins/wifi.c b/plugins/wifi.c -index 287c5789..7107fab3 100644 ---- a/plugins/wifi.c -+++ b/plugins/wifi.c -@@ -1513,7 +1513,7 @@ static void register_peer_service_cb(int result, - - DBG(""); - -- if (reg_data->callback) -+ if (reg_data && reg_data->callback) - reg_data->callback(result, reg_data->user_data); - - g_free(reg_data); diff --git a/src/group.c b/src/group.c index 83661cf1..e55358b3 100644 --- a/src/group.c diff --git a/meta-webos/recipes-connectivity/connman/connman/0019-Fix-connman-crash.patch b/meta-webos/recipes-connectivity/connman/connman/0019-Fix-connman-crash.patch index 47a47cb99..52ba5b516 100644 --- a/meta-webos/recipes-connectivity/connman/connman/0019-Fix-connman-crash.patch +++ b/meta-webos/recipes-connectivity/connman/connman/0019-Fix-connman-crash.patch @@ -1,4 +1,4 @@ -From 1d9a421be1d0c3c97ee2d2e6a3e787f9bdbff542 Mon Sep 17 00:00:00 2001 +From f1428532fed35565d4cf592104c12c24c5205ae8 Mon Sep 17 00:00:00 2001 From: "penikelapati.kumar" Date: Wed, 26 May 2021 17:24:34 +0530 Subject: [PATCH] Fix connman crash @@ -26,7 +26,7 @@ Upstream-Status: Inappropriate [webOS specific] 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/gsupplicant/dbus.c b/gsupplicant/dbus.c -index c034737..c28b835 100644 +index c0347374..c28b835c 100644 --- a/gsupplicant/dbus.c +++ b/gsupplicant/dbus.c @@ -499,7 +499,7 @@ int supplicant_dbus_method_call(const char *path, @@ -39,7 +39,7 @@ index c034737..c28b835 100644 method_call = g_try_new0(struct method_call_data, 1); diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c -index 6546ca9..59b02c2 100644 +index 6546ca93..59b02c23 100644 --- a/gsupplicant/supplicant.c +++ b/gsupplicant/supplicant.c @@ -6876,7 +6876,7 @@ static void interface_get_result(const char *error, @@ -51,6 +51,3 @@ index 6546ca9..59b02c2 100644 err = -EINVAL; goto done; } --- -2.26.0 - diff --git a/meta-webos/recipes-connectivity/connman/connman/0020-Fix-connman-crash-when-interface-removed.patch b/meta-webos/recipes-connectivity/connman/connman/0020-Fix-connman-crash-when-interface-removed.patch index 9d8b6b18f..464b8cad5 100644 --- a/meta-webos/recipes-connectivity/connman/connman/0020-Fix-connman-crash-when-interface-removed.patch +++ b/meta-webos/recipes-connectivity/connman/connman/0020-Fix-connman-crash-when-interface-removed.patch @@ -1,4 +1,4 @@ -From 81b0f2e30dc65b496966933e74156ee83491e4e8 Mon Sep 17 00:00:00 2001 +From 6e67e52695585b9bc91b3f7e9bb811d28487ea4f Mon Sep 17 00:00:00 2001 From: "penikelapati.kumar" Date: Tue, 1 Jun 2021 16:00:56 +0530 Subject: [PATCH] Fix connman crash when interface removed @@ -25,7 +25,7 @@ Upstream-Status: Inappropriate [webOS specific] 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gsupplicant/supplicant.c b/gsupplicant/supplicant.c -index 59b02c2..27e9e55 100644 +index 59b02c23..27e9e559 100644 --- a/gsupplicant/supplicant.c +++ b/gsupplicant/supplicant.c @@ -7028,7 +7028,7 @@ int g_supplicant_interface_remove(GSupplicantInterface *interface, @@ -37,6 +37,3 @@ index 59b02c2..27e9e55 100644 return -EINVAL; if (!system_available) --- -2.26.0 - From 076002ef7f421d4e83ccbc176cd8ad2f14d2ab91 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 2 Jul 2021 03:11:00 -0700 Subject: [PATCH 0601/2022] bluez5 (refresh patches to apply on 5.59 version) :Release Notes: :Detailed Notes: Fixes: ERROR: bluez5-5.59-r0 do_patch: Command Error: 'quilt --quiltrc /jenkins/mjansa/build/ros/webos-noetic-honister/tmp-glibc/work/raspberrypi4-webos-linux-gnueabi/bluez5/5.59-r0/recipe-sysroot-native/etc/quiltrc push' exited with 0 Output: stdout: Applying patch 0012-Support-enabling-avdtp-delayReport.patch patching file profiles/audio/a2dp.c Hunk #1 succeeded at 2195 (offset 1 line). patching file profiles/audio/a2dp.h patching file profiles/audio/avdtp.c Hunk #1 succeeded at 470 (offset 1 line). patching file profiles/audio/avdtp.h patching file profiles/audio/media.c patching file profiles/audio/media.h patching file src/adapter.c Hunk #1 succeeded at 68 (offset 1 line). Hunk #2 succeeded at 226 (offset 1 line). Hunk #3 succeeded at 295 (offset 3 lines). Hunk #4 succeeded at 501 (offset 3 lines). Hunk #5 succeeded at 3254 (offset 11 lines). Hunk #6 succeeded at 3551 (offset 11 lines). Hunk #7 succeeded at 4880 (offset 12 lines). Hunk #8 succeeded at 6332 (offset 12 lines). Hunk #9 succeeded at 6373 (offset 12 lines). Hunk #10 succeeded at 6381 (offset 12 lines). patching file src/adapter.h patching file src/btd.h Hunk #1 FAILED at 105. 1 out of 1 hunk FAILED -- rejects in file src/btd.h patching file src/main.c Hunk #1 succeeded at 77 (offset 1 line). Hunk #2 succeeded at 729 with fuzz 2 (offset 20 lines). patching file src/main.conf Patch 0012-Support-enabling-avdtp-delayReport.patch does not apply (enforce with -f) :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: I92051ac5eb84b9c0e203f3446db5cc9ac8ed21b3 --- ...time-out-when-default-is-set-to-zero.patch | 6 +-- ...t-signal-on-remote-device-disconnect.patch | 2 +- ...evice-type-like-BLE-BREDR-from-bluez.patch | 10 ++-- ...-when-device-address-type-is-BDADDR_.patch | 8 +-- ...tem-bus-instead-of-session-for-obexd.patch | 2 +- ...tion-to-get-connected-profiles-uuids.patch | 16 +++--- ...gh-commad-support-required-for-webos.patch | 26 +++++----- ...ded-dbus-signal-for-MediaPlayRequest.patch | 16 +++--- ...-getting-remote-device-features-list.patch | 22 ++++---- ...-Fix-volume-property-not-able-to-set.patch | 2 +- ...-notification-not-appearing-after-12.patch | 2 +- ...2-Support-enabling-avdtp-delayReport.patch | 48 ++++++++--------- ...o-get-connectedUuid-s-in-case-of-inc.patch | 6 +-- ...-connected-uuids-when-profile-is-dis.patch | 6 +-- ...-getStatus-not-updated-when-unpaired.patch | 6 +-- ...airing-capability-as-NoInputNoOutput.patch | 2 +- ...etting-supported-notification-events.patch | 16 +++--- ...anceName-MapInstanceProperties-parsi.patch | 32 ++++++------ ...pport-based-on-MAPInstance-Name-Modi.patch | 2 +- .../0020-Disabling-DB-Hash-for-Gatt.patch | 4 +- ...on-property-in-org.bluez.obex.Messag.patch | 2 +- ...dle-property-in-org.bluez.obex.Trans.patch | 2 +- ...nterface-for-sent-message-related-no.patch | 2 +- ...aying-return-error-when-player-not-s.patch | 6 +-- ...0025-AVRCP-MediaItem-object-path-fix.patch | 2 +- ...26-Revert-a2dp-Add-reverse-discovery.patch | 8 +-- ...support-for-meshd-to-use-RAW-channel.patch | 51 +++++++++---------- ...esh-fixed-ell-undefined-symbol-error.patch | 9 ++-- 28 files changed, 155 insertions(+), 161 deletions(-) diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0001-Fix-advertise-time-out-when-default-is-set-to-zero.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0001-Fix-advertise-time-out-when-default-is-set-to-zero.patch index 9fba1e990..38971fb47 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0001-Fix-advertise-time-out-when-default-is-set-to-zero.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0001-Fix-advertise-time-out-when-default-is-set-to-zero.patch @@ -1,4 +1,4 @@ -From 85c5b7e82355f00499447d9ed5fa71ae1b1e0e6b Mon Sep 17 00:00:00 2001 +From 1dd0433600126f7dea30b7423a88accdbe73312f Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Wed, 11 Apr 2018 11:03:20 +0530 Subject: [PATCH] Fix advertise time out when default is set to zero @@ -25,10 +25,10 @@ Change-Id: I60cb0c22991efa61a800b1483e232e42beff2da2 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/advertising.c b/src/advertising.c -index 15a343e52..92ab25ed2 100644 +index 70e60601d..e0fd2cb57 100644 --- a/src/advertising.c +++ b/src/advertising.c -@@ -524,13 +524,18 @@ static bool parse_local_name(DBusMessageIter *iter, +@@ -525,13 +525,18 @@ static bool parse_local_name(DBusMessageIter *iter, if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_STRING) return false; diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0002-Send-disconnect-signal-on-remote-device-disconnect.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0002-Send-disconnect-signal-on-remote-device-disconnect.patch index 310644933..83f111b47 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0002-Send-disconnect-signal-on-remote-device-disconnect.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0002-Send-disconnect-signal-on-remote-device-disconnect.patch @@ -1,4 +1,4 @@ -From 13029ffccb33fc57ce7777f1d6223ed26fe70f40 Mon Sep 17 00:00:00 2001 +From a893234f2aa6f5376bf71cfe85221b6dbb526e1e Mon Sep 17 00:00:00 2001 From: Vibhanshu Dhote Date: Thu, 17 May 2018 18:15:48 +0530 Subject: [PATCH] Send disconnect signal on remote device disconnect diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0003-Fetching-device-type-like-BLE-BREDR-from-bluez.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0003-Fetching-device-type-like-BLE-BREDR-from-bluez.patch index baa912492..2b6784f0f 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0003-Fetching-device-type-like-BLE-BREDR-from-bluez.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0003-Fetching-device-type-like-BLE-BREDR-from-bluez.patch @@ -1,4 +1,4 @@ -From 01a35d286d28e50e2c456dbbe9ce1f8cb9dc5000 Mon Sep 17 00:00:00 2001 +From 84ea8ffa177381b070518089d41b92ba8bd7b651 Mon Sep 17 00:00:00 2001 From: "vijaya.sundaram" Date: Fri, 1 Jun 2018 11:43:15 +0530 Subject: [PATCH] Fetching device type like BLE, BREDR from bluez @@ -24,10 +24,10 @@ Upstream-Status : Pending 1 file changed, 17 insertions(+) diff --git a/src/device.c b/src/device.c -index af13badfc..b20906f3c 100644 +index 65838f59f..229e239fb 100644 --- a/src/device.c +++ b/src/device.c -@@ -205,6 +205,7 @@ struct btd_device { +@@ -206,6 +206,7 @@ struct btd_device { char name[MAX_NAME_LENGTH + 1]; char *alias; uint32_t class; @@ -35,7 +35,7 @@ index af13badfc..b20906f3c 100644 uint16_t vendor_src; uint16_t vendor; uint16_t product; -@@ -877,6 +878,21 @@ static gboolean dev_property_get_class(const GDBusPropertyTable *property, +@@ -878,6 +879,21 @@ static gboolean dev_property_get_class(const GDBusPropertyTable *property, return TRUE; } @@ -57,7 +57,7 @@ index af13badfc..b20906f3c 100644 static gboolean get_appearance(const GDBusPropertyTable *property, void *data, uint16_t *appearance) { -@@ -2915,6 +2931,7 @@ static const GDBusMethodTable device_methods[] = { +@@ -2916,6 +2932,7 @@ static const GDBusMethodTable device_methods[] = { static const GDBusPropertyTable device_properties[] = { { "Address", "s", dev_property_get_address }, { "AddressType", "s", property_get_address_type }, diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0004-Fix-Gatt-connect-when-device-address-type-is-BDADDR_.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0004-Fix-Gatt-connect-when-device-address-type-is-BDADDR_.patch index 263ada41b..386932a6e 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0004-Fix-Gatt-connect-when-device-address-type-is-BDADDR_.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0004-Fix-Gatt-connect-when-device-address-type-is-BDADDR_.patch @@ -1,4 +1,4 @@ -From 1d59242d83ee719042e5fb29db074c3320f7c379 Mon Sep 17 00:00:00 2001 +From 43dadeab48001c678498398ca6e50065ef3f911c Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Sun, 22 Jul 2018 18:59:45 +0530 Subject: [PATCH] Fix Gatt connect when device address type is BDADDR_LE_PUBLIC @@ -29,10 +29,10 @@ Upstream-Status: Pending 1 file changed, 28 insertions(+) diff --git a/src/device.c b/src/device.c -index b20906f3c..91dc363e2 100644 +index 229e239fb..0c2614fc8 100644 --- a/src/device.c +++ b/src/device.c -@@ -2160,6 +2160,33 @@ static DBusMessage *dev_connect(DBusConnection *conn, DBusMessage *msg, +@@ -2161,6 +2161,33 @@ static DBusMessage *dev_connect(DBusConnection *conn, DBusMessage *msg, return connect_profiles(dev, bdaddr_type, msg, NULL); } @@ -66,7 +66,7 @@ index b20906f3c..91dc363e2 100644 static DBusMessage *connect_profile(DBusConnection *conn, DBusMessage *msg, void *user_data) { -@@ -2919,6 +2946,7 @@ static DBusMessage *cancel_pairing(DBusConnection *conn, DBusMessage *msg, +@@ -2920,6 +2947,7 @@ static DBusMessage *cancel_pairing(DBusConnection *conn, DBusMessage *msg, static const GDBusMethodTable device_methods[] = { { GDBUS_ASYNC_METHOD("Disconnect", NULL, NULL, dev_disconnect) }, { GDBUS_ASYNC_METHOD("Connect", NULL, NULL, dev_connect) }, diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0005-Use-system-bus-instead-of-session-for-obexd.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0005-Use-system-bus-instead-of-session-for-obexd.patch index 02f9addfd..14b38f90f 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0005-Use-system-bus-instead-of-session-for-obexd.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0005-Use-system-bus-instead-of-session-for-obexd.patch @@ -1,4 +1,4 @@ -From 7a4e82c413acf7e510c20e665a92faceb7421c2f Mon Sep 17 00:00:00 2001 +From 7eff0e52a3013cf5b72a3664a718d9ebca8cffff Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Thu, 15 Nov 2018 11:08:44 +0530 Subject: [PATCH] Use system bus instead of session for obexd diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0006-Implementation-to-get-connected-profiles-uuids.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0006-Implementation-to-get-connected-profiles-uuids.patch index 134df9a55..8b80be36f 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0006-Implementation-to-get-connected-profiles-uuids.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0006-Implementation-to-get-connected-profiles-uuids.patch @@ -1,4 +1,4 @@ -From 6b33f38e65c9248a5eb8fdab0ce3162b52ea7277 Mon Sep 17 00:00:00 2001 +From 8bdb0ebedc3d99016bf3d24423924701ae871293 Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Tue, 22 Jan 2019 23:25:18 +0530 Subject: [PATCH] Implementation to get connected profiles uuids @@ -25,10 +25,10 @@ Change-Id: I72834cc9b4bdd8f086565dc9a2a41006f758ad39 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/src/device.c b/src/device.c -index 91dc363e2..2e2ae32f7 100644 +index 0c2614fc8..1a668335e 100644 --- a/src/device.c +++ b/src/device.c -@@ -214,6 +214,7 @@ struct btd_device { +@@ -215,6 +215,7 @@ struct btd_device { char *modalias; struct btd_adapter *adapter; GSList *uuids; @@ -36,7 +36,7 @@ index 91dc363e2..2e2ae32f7 100644 GSList *primaries; /* List of primary services */ GSList *services; /* List of btd_service */ GSList *pending; /* Pending services */ -@@ -909,6 +910,28 @@ static gboolean get_appearance(const GDBusPropertyTable *property, void *data, +@@ -910,6 +911,28 @@ static gboolean get_appearance(const GDBusPropertyTable *property, void *data, return FALSE; } @@ -65,7 +65,7 @@ index 91dc363e2..2e2ae32f7 100644 static gboolean dev_property_exists_appearance( const GDBusPropertyTable *property, void *data) { -@@ -1755,8 +1778,14 @@ static void device_profile_connected(struct btd_device *dev, +@@ -1756,8 +1779,14 @@ static void device_profile_connected(struct btd_device *dev, DBG("%s %s (%d)", profile->name, strerror(-err), -err); @@ -81,7 +81,7 @@ index 91dc363e2..2e2ae32f7 100644 if (dev->pending == NULL) goto done; -@@ -2209,6 +2238,14 @@ static DBusMessage *connect_profile(DBusConnection *conn, DBusMessage *msg, +@@ -2210,6 +2239,14 @@ static DBusMessage *connect_profile(DBusConnection *conn, DBusMessage *msg, static void device_profile_disconnected(struct btd_device *dev, struct btd_profile *profile, int err) { @@ -96,7 +96,7 @@ index 91dc363e2..2e2ae32f7 100644 if (!dev->disconnect) return; -@@ -2975,6 +3012,7 @@ static const GDBusPropertyTable device_properties[] = { +@@ -2976,6 +3013,7 @@ static const GDBusPropertyTable device_properties[] = { { "RSSI", "n", dev_property_get_rssi, NULL, dev_property_exists_rssi }, { "Connected", "b", dev_property_get_connected }, { "UUIDs", "as", dev_property_get_uuids }, @@ -104,7 +104,7 @@ index 91dc363e2..2e2ae32f7 100644 { "Modalias", "s", dev_property_get_modalias, NULL, dev_property_exists_modalias }, { "Adapter", "o", dev_property_get_adapter }, -@@ -3053,7 +3091,17 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type) +@@ -3054,7 +3092,17 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type) if (!state->connected) return; diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0007-recievePassThrough-commad-support-required-for-webos.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0007-recievePassThrough-commad-support-required-for-webos.patch index e487e9eab..823ac6494 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0007-recievePassThrough-commad-support-required-for-webos.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0007-recievePassThrough-commad-support-required-for-webos.patch @@ -1,4 +1,4 @@ -From 13e06fa6638811a45892d4188aa6f7220ef323d9 Mon Sep 17 00:00:00 2001 +From 5d0bf8b0af49adab265e9ac8d830c17692501159 Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Sun, 13 Jan 2019 13:35:55 +0530 Subject: [PATCH] recievePassThrough commad support required for webos @@ -30,10 +30,10 @@ Change-Id: I9c07aa27f242247b5c3df85e0b3605d2ba055cad 3 files changed, 62 insertions(+), 1 deletion(-) diff --git a/profiles/audio/avctp.c b/profiles/audio/avctp.c -index c959b4f49..aae6e7d62 100644 +index 50de33618..abbee205f 100644 --- a/profiles/audio/avctp.c +++ b/profiles/audio/avctp.c -@@ -403,6 +403,7 @@ static size_t handle_panel_passthrough(struct avctp *session, +@@ -405,6 +405,7 @@ static size_t handle_panel_passthrough(struct avctp *session, DBG("AV/C: %s %s", key_map[i].name, status); @@ -41,7 +41,7 @@ index c959b4f49..aae6e7d62 100644 key_quirks = session->key_quirks[key_map[i].avc]; if (key_quirks & QUIRK_NO_RELEASE) { -@@ -418,9 +419,13 @@ static size_t handle_panel_passthrough(struct avctp *session, +@@ -420,9 +421,13 @@ static size_t handle_panel_passthrough(struct avctp *session, } if (pressed) @@ -56,10 +56,10 @@ index c959b4f49..aae6e7d62 100644 break; } diff --git a/src/device.c b/src/device.c -index 2e2ae32f7..5c52dd616 100644 +index 1a668335e..12053a306 100644 --- a/src/device.c +++ b/src/device.c -@@ -170,6 +170,11 @@ enum { +@@ -171,6 +171,11 @@ enum { WAKE_FLAG_DISABLED, }; @@ -71,7 +71,7 @@ index 2e2ae32f7..5c52dd616 100644 struct btd_device { int ref_count; -@@ -273,6 +278,7 @@ struct btd_device { +@@ -274,6 +279,7 @@ struct btd_device { GIOChannel *att_io; guint store_id; @@ -79,7 +79,7 @@ index 2e2ae32f7..5c52dd616 100644 }; static const uint16_t uuid_list[] = { -@@ -1304,6 +1310,18 @@ dev_property_manufacturer_data_exist(const GDBusPropertyTable *property, +@@ -1305,6 +1311,18 @@ dev_property_manufacturer_data_exist(const GDBusPropertyTable *property, return bt_ad_has_manufacturer_data(device->ad, NULL); } @@ -98,7 +98,7 @@ index 2e2ae32f7..5c52dd616 100644 static void append_service_data(void *data, void *user_data) { struct bt_ad_service_data *sd = data; -@@ -1322,13 +1340,13 @@ dev_property_get_service_data(const GDBusPropertyTable *property, +@@ -1323,13 +1341,13 @@ dev_property_get_service_data(const GDBusPropertyTable *property, struct btd_device *device = data; DBusMessageIter dict; @@ -113,7 +113,7 @@ index 2e2ae32f7..5c52dd616 100644 bt_ad_foreach_service_data(device->ad, append_service_data, &dict); dbus_message_iter_close_container(iter, &dict); -@@ -1336,6 +1354,28 @@ dev_property_get_service_data(const GDBusPropertyTable *property, +@@ -1337,6 +1355,28 @@ dev_property_get_service_data(const GDBusPropertyTable *property, return TRUE; } @@ -142,7 +142,7 @@ index 2e2ae32f7..5c52dd616 100644 static gboolean dev_property_service_data_exist(const GDBusPropertyTable *property, void *data) -@@ -1898,6 +1938,15 @@ void device_set_manufacturer_data(struct btd_device *dev, GSList *list, +@@ -1899,6 +1939,15 @@ void device_set_manufacturer_data(struct btd_device *dev, GSList *list, g_slist_foreach(list, add_manufacturer_data, dev); } @@ -158,7 +158,7 @@ index 2e2ae32f7..5c52dd616 100644 static void add_service_data(void *data, void *user_data) { struct eir_sd *sd = data; -@@ -3018,6 +3067,8 @@ static const GDBusPropertyTable device_properties[] = { +@@ -3019,6 +3068,8 @@ static const GDBusPropertyTable device_properties[] = { { "Adapter", "o", dev_property_get_adapter }, { "ManufacturerData", "a{qv}", dev_property_get_manufacturer_data, NULL, dev_property_manufacturer_data_exist }, @@ -167,7 +167,7 @@ index 2e2ae32f7..5c52dd616 100644 { "ServiceData", "a{sv}", dev_property_get_service_data, NULL, dev_property_service_data_exist }, { "TxPower", "n", dev_property_get_tx_power, NULL, -@@ -4183,6 +4234,9 @@ static struct btd_device *device_new(struct btd_adapter *adapter, +@@ -4184,6 +4235,9 @@ static struct btd_device *device_new(struct btd_adapter *adapter, device->adapter = adapter; device->temporary = true; diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0008-Added-dbus-signal-for-MediaPlayRequest.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0008-Added-dbus-signal-for-MediaPlayRequest.patch index 15c17ed75..ec233b22e 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0008-Added-dbus-signal-for-MediaPlayRequest.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0008-Added-dbus-signal-for-MediaPlayRequest.patch @@ -1,4 +1,4 @@ -From cf6f77f3ee075f3954dd4e986d22f65621920603 Mon Sep 17 00:00:00 2001 +From ac7c56c3acb80d0998b65de38fb9e75a28ebffe1 Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Wed, 30 Jan 2019 15:17:11 +0530 Subject: [PATCH] Added dbus signal for MediaPlayRequest @@ -29,10 +29,10 @@ Change-Id: Ib225395809a3b53f1c494ac4e21beabc47f7f906 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c -index c093deac8..fadce3c63 100644 +index ccf34b220..4b77536c5 100644 --- a/profiles/audio/avrcp.c +++ b/profiles/audio/avrcp.c -@@ -1235,6 +1235,7 @@ static uint8_t avrcp_handle_get_element_attributes(struct avrcp *session, +@@ -1236,6 +1236,7 @@ static uint8_t avrcp_handle_get_element_attributes(struct avrcp *session, */ attr_ids = player_list_metadata(player); len = g_list_length(attr_ids); @@ -40,7 +40,7 @@ index c093deac8..fadce3c63 100644 } else { unsigned int i; for (i = 0, len = 0, attr_ids = NULL; i < nattr; i++) { -@@ -1501,6 +1502,7 @@ static uint8_t avrcp_handle_get_play_status(struct avrcp *session, +@@ -1502,6 +1503,7 @@ static uint8_t avrcp_handle_get_play_status(struct avrcp *session, pdu->params_len = htons(9); @@ -62,10 +62,10 @@ index c84bbe22d..f36f703be 100644 static uint32_t get_duration(void *user_data) diff --git a/src/device.c b/src/device.c -index 5c52dd616..3775d5029 100644 +index 12053a306..ef8cdb988 100644 --- a/src/device.c +++ b/src/device.c -@@ -1947,6 +1947,22 @@ void recieve_passThrough_commands(struct btd_device *dev, const char* code, cons +@@ -1948,6 +1948,22 @@ void recieve_passThrough_commands(struct btd_device *dev, const char* code, cons DEVICE_INTERFACE, "KeyCode"); } @@ -88,7 +88,7 @@ index 5c52dd616..3775d5029 100644 static void add_service_data(void *data, void *user_data) { struct eir_sd *sd = data; -@@ -3029,6 +3045,12 @@ static DBusMessage *cancel_pairing(DBusConnection *conn, DBusMessage *msg, +@@ -3030,6 +3046,12 @@ static DBusMessage *cancel_pairing(DBusConnection *conn, DBusMessage *msg, return dbus_message_new_method_return(msg); } @@ -101,7 +101,7 @@ index 5c52dd616..3775d5029 100644 static const GDBusMethodTable device_methods[] = { { GDBUS_ASYNC_METHOD("Disconnect", NULL, NULL, dev_disconnect) }, { GDBUS_ASYNC_METHOD("Connect", NULL, NULL, dev_connect) }, -@@ -4223,7 +4245,7 @@ static struct btd_device *device_new(struct btd_adapter *adapter, +@@ -4224,7 +4246,7 @@ static struct btd_device *device_new(struct btd_adapter *adapter, if (g_dbus_register_interface(dbus_conn, device->path, DEVICE_INTERFACE, diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0009-avrcp-getting-remote-device-features-list.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0009-avrcp-getting-remote-device-features-list.patch index cdaba0597..20b35fd83 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0009-avrcp-getting-remote-device-features-list.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0009-avrcp-getting-remote-device-features-list.patch @@ -1,4 +1,4 @@ -From 2a6eceecf65a2d6475544303b78cb58166c9d98b Mon Sep 17 00:00:00 2001 +From 2c6f9c649fbc3253c7895006937b4f622a79d4b5 Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Tue, 5 Feb 2019 18:10:55 +0530 Subject: [PATCH] avrcp getting remote device features list @@ -29,10 +29,10 @@ Change-Id: I93393e5955c745c4df3eaddf6661177410ad3a7d 3 files changed, 88 insertions(+) diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c -index fadce3c63..d6a7fbb54 100644 +index 4b77536c5..5585e53f3 100644 --- a/profiles/audio/avrcp.c +++ b/profiles/audio/avrcp.c -@@ -4137,9 +4137,16 @@ static void target_init(struct avrcp *session) +@@ -4154,9 +4154,16 @@ static void target_init(struct avrcp *session) (1 << AVRCP_EVENT_TRACK_REACHED_END) | (1 << AVRCP_EVENT_SETTINGS_CHANGED); @@ -49,7 +49,7 @@ index fadce3c63..d6a7fbb54 100644 session->supported_events |= (1 << AVRCP_EVENT_ADDRESSED_PLAYER_CHANGED) | (1 << AVRCP_EVENT_AVAILABLE_PLAYERS_CHANGED) | -@@ -4152,6 +4159,8 @@ static void target_init(struct avrcp *session) +@@ -4169,6 +4176,8 @@ static void target_init(struct avrcp *session) if (!(target->features & AVRCP_FEATURE_BROWSING)) return; @@ -58,7 +58,7 @@ index fadce3c63..d6a7fbb54 100644 avrcp_connect_browsing(session); } -@@ -4182,14 +4191,20 @@ static void controller_init(struct avrcp *session) +@@ -4199,14 +4208,20 @@ static void controller_init(struct avrcp *session) if (controller->version < 0x0103) return; @@ -80,10 +80,10 @@ index fadce3c63..d6a7fbb54 100644 } diff --git a/src/device.c b/src/device.c -index 3775d5029..523a5ee9c 100644 +index ef8cdb988..f085e5222 100644 --- a/src/device.c +++ b/src/device.c -@@ -279,6 +279,8 @@ struct btd_device { +@@ -280,6 +280,8 @@ struct btd_device { GIOChannel *att_io; guint store_id; struct key_code passththough_key; @@ -92,7 +92,7 @@ index 3775d5029..523a5ee9c 100644 }; static const uint16_t uuid_list[] = { -@@ -1376,6 +1378,46 @@ static gboolean dev_property_get_key_code(const GDBusPropertyTable *property, +@@ -1377,6 +1379,46 @@ static gboolean dev_property_get_key_code(const GDBusPropertyTable *property, return TRUE; } @@ -139,7 +139,7 @@ index 3775d5029..523a5ee9c 100644 static gboolean dev_property_service_data_exist(const GDBusPropertyTable *property, void *data) -@@ -1963,6 +2005,25 @@ void media_metadata_request(struct btd_device *dev) +@@ -1964,6 +2006,25 @@ void media_metadata_request(struct btd_device *dev) DBUS_TYPE_INVALID); } @@ -165,7 +165,7 @@ index 3775d5029..523a5ee9c 100644 static void add_service_data(void *data, void *user_data) { struct eir_sd *sd = data; -@@ -3091,6 +3152,10 @@ static const GDBusPropertyTable device_properties[] = { +@@ -3092,6 +3153,10 @@ static const GDBusPropertyTable device_properties[] = { NULL, dev_property_manufacturer_data_exist }, { "KeyCode", "a{sv}", dev_property_get_key_code, NULL, dev_property_key_code_exist}, @@ -176,7 +176,7 @@ index 3775d5029..523a5ee9c 100644 { "ServiceData", "a{sv}", dev_property_get_service_data, NULL, dev_property_service_data_exist }, { "TxPower", "n", dev_property_get_tx_power, NULL, -@@ -4259,6 +4324,9 @@ static struct btd_device *device_new(struct btd_adapter *adapter, +@@ -4260,6 +4325,9 @@ static struct btd_device *device_new(struct btd_adapter *adapter, device->passththough_key.state = NULL; device->passththough_key.key = NULL; diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0010-Fix-volume-property-not-able-to-set.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0010-Fix-volume-property-not-able-to-set.patch index df416d969..24ac125ef 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0010-Fix-volume-property-not-able-to-set.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0010-Fix-volume-property-not-able-to-set.patch @@ -1,4 +1,4 @@ -From 27ea00f69ea3ab90c8a2a90ed6c9649ec1b8558d Mon Sep 17 00:00:00 2001 +From 98fcab5b34563119e7b408049015f4a25c78bfba Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Mon, 21 Jan 2019 12:44:19 +0530 Subject: [PATCH] Fix volume property not able to set diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0011-Fix-volume-level-notification-not-appearing-after-12.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0011-Fix-volume-level-notification-not-appearing-after-12.patch index e58757d64..f46f7c956 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0011-Fix-volume-level-notification-not-appearing-after-12.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0011-Fix-volume-level-notification-not-appearing-after-12.patch @@ -1,4 +1,4 @@ -From 5fb19344d378a9dc729826705ff958ed7549d9ae Mon Sep 17 00:00:00 2001 +From 5050f49dc510bd9522abb3cb05a08d67bc93ddec Mon Sep 17 00:00:00 2001 From: Sameer Mulla Date: Tue, 10 Dec 2019 16:15:43 +0530 Subject: [PATCH] Fix volume level notification not appearing after 127 diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0012-Support-enabling-avdtp-delayReport.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0012-Support-enabling-avdtp-delayReport.patch index 4c670f6f0..6107fcc01 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0012-Support-enabling-avdtp-delayReport.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0012-Support-enabling-avdtp-delayReport.patch @@ -1,4 +1,4 @@ -From 7c3448d4ddaa37763aaac1a1eebf226fcc3dc02b Mon Sep 17 00:00:00 2001 +From c23629ff72b5ccaa916163f3037385c2ec7f3e40 Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Thu, 4 Jun 2020 04:49:48 +0000 Subject: [PATCH] Support enabling avdtp delayReport @@ -34,10 +34,10 @@ Upstream Status: Pending 11 files changed, 104 insertions(+) diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c -index 98cae97b9..7f4833171 100644 +index d31ed845c..dc9858f91 100644 --- a/profiles/audio/a2dp.c +++ b/profiles/audio/a2dp.c -@@ -2194,6 +2194,14 @@ found: +@@ -2195,6 +2195,14 @@ found: return avdtp_ref(chan->session); } @@ -65,10 +65,10 @@ index 615b641c9..af67ee6ee 100644 const char *a2dp_setup_remote_path(struct a2dp_setup *setup); struct avdtp *a2dp_avdtp_get(struct btd_device *device); diff --git a/profiles/audio/avdtp.c b/profiles/audio/avdtp.c -index 088ca58b3..e94216533 100644 +index c7bf99f42..9d9e4510c 100644 --- a/profiles/audio/avdtp.c +++ b/profiles/audio/avdtp.c -@@ -469,6 +469,11 @@ static gboolean try_send(int sk, void *data, size_t len) +@@ -470,6 +470,11 @@ static gboolean try_send(int sk, void *data, size_t len) return TRUE; } @@ -149,10 +149,10 @@ index 96bea9db4..e9d10fd3c 100644 int8_t media_player_get_device_volume(struct btd_device *device); +void media_set_delay_reporting(struct media_adapter* adapter, bool delay_reporting); diff --git a/src/adapter.c b/src/adapter.c -index 0b6321dd5..adfe96013 100644 +index 98fc78f1e..bc028bf1b 100644 --- a/src/adapter.c +++ b/src/adapter.c -@@ -67,6 +67,7 @@ +@@ -68,6 +68,7 @@ #include "adv_monitor.h" #include "eir.h" #include "battery.h" @@ -160,7 +160,7 @@ index 0b6321dd5..adfe96013 100644 #define MODE_OFF 0x00 #define MODE_CONNECTABLE 0x01 -@@ -224,6 +225,9 @@ struct btd_adapter { +@@ -225,6 +226,9 @@ struct btd_adapter { bool filtered_discovery; /* we are doing filtered discovery */ bool no_scan_restart_delay; /* when this flag is set, restart scan * without delay */ @@ -170,7 +170,7 @@ index 0b6321dd5..adfe96013 100644 uint8_t discovery_type; /* current active discovery type */ uint8_t discovery_enable; /* discovery enabled/disabled */ bool discovery_suspended; /* discovery has been suspended */ -@@ -288,6 +292,11 @@ typedef enum { +@@ -291,6 +295,11 @@ typedef enum { ADAPTER_AUTHORIZE_CHECK_CONNECTED } adapter_authorize_type; @@ -182,7 +182,7 @@ index 0b6321dd5..adfe96013 100644 static struct btd_adapter *btd_adapter_lookup(uint16_t index) { GList *list; -@@ -489,6 +498,8 @@ static void store_adapter_info(struct btd_adapter *adapter) +@@ -492,6 +501,8 @@ static void store_adapter_info(struct btd_adapter *adapter) g_key_file_set_boolean(key_file, "General", "Discoverable", discoverable); @@ -191,7 +191,7 @@ index 0b6321dd5..adfe96013 100644 if (adapter->discoverable_timeout != btd_opts.discovto) g_key_file_set_integer(key_file, "General", -@@ -3232,6 +3243,30 @@ static gboolean property_get_roles(const GDBusPropertyTable *property, +@@ -3243,6 +3254,30 @@ static gboolean property_get_roles(const GDBusPropertyTable *property, return TRUE; } @@ -222,7 +222,7 @@ index 0b6321dd5..adfe96013 100644 static DBusMessage *remove_device(DBusConnection *conn, DBusMessage *msg, void *user_data) -@@ -3505,6 +3540,7 @@ static const GDBusPropertyTable adapter_properties[] = { +@@ -3516,6 +3551,7 @@ static const GDBusPropertyTable adapter_properties[] = { { "Modalias", "s", property_get_modalias, NULL, property_exists_modalias }, { "Roles", "as", property_get_roles }, @@ -230,7 +230,7 @@ index 0b6321dd5..adfe96013 100644 { } }; -@@ -4832,6 +4868,11 @@ bool btd_adapter_get_bredr(struct btd_adapter *adapter) +@@ -4844,6 +4880,11 @@ bool btd_adapter_get_bredr(struct btd_adapter *adapter) return false; } @@ -242,7 +242,7 @@ index 0b6321dd5..adfe96013 100644 struct btd_gatt_database *btd_adapter_get_database(struct btd_adapter *adapter) { if (!adapter) -@@ -6279,6 +6320,15 @@ static void load_config(struct btd_adapter *adapter) +@@ -6291,6 +6332,15 @@ static void load_config(struct btd_adapter *adapter) gerr = NULL; } @@ -258,7 +258,7 @@ index 0b6321dd5..adfe96013 100644 g_key_file_free(key_file); } -@@ -6311,6 +6361,7 @@ static struct btd_adapter *btd_adapter_new(uint16_t index) +@@ -6323,6 +6373,7 @@ static struct btd_adapter *btd_adapter_new(uint16_t index) btd_opts.did_version); adapter->discoverable_timeout = btd_opts.discovto; adapter->pairable_timeout = btd_opts.pairto; @@ -266,7 +266,7 @@ index 0b6321dd5..adfe96013 100644 DBG("System name: %s", adapter->system_name); DBG("Major class: %u", adapter->major_class); -@@ -6318,6 +6369,7 @@ static struct btd_adapter *btd_adapter_new(uint16_t index) +@@ -6330,6 +6381,7 @@ static struct btd_adapter *btd_adapter_new(uint16_t index) DBG("Modalias: %s", adapter->modalias); DBG("Discoverable timeout: %u seconds", adapter->discoverable_timeout); DBG("Pairable timeout: %u seconds", adapter->pairable_timeout); @@ -296,22 +296,22 @@ index 60b5e3bcc..09f2d0806 100644 struct btd_gatt_database *btd_adapter_get_database(struct btd_adapter *adapter); diff --git a/src/btd.h b/src/btd.h -index a3247e4fd..27f201eee 100644 +index d72883546..3ebd873c9 100644 --- a/src/btd.h +++ b/src/btd.h -@@ -105,6 +105,7 @@ struct btd_opts { - gboolean debug_keys; +@@ -110,6 +110,7 @@ struct btd_opts { gboolean fast_conn; gboolean refresh_discovery; + gboolean experimental; + gboolean delay_report; uint16_t did_source; uint16_t did_vendor; diff --git a/src/main.c b/src/main.c -index b66e2b8cb..3b1acace2 100644 +index 516509e3f..22f258b47 100644 --- a/src/main.c +++ b/src/main.c -@@ -76,6 +76,7 @@ static const char *supported_options[] = { +@@ -77,6 +77,7 @@ static const char *supported_options[] = { "ControllerMode", "MultiProfile", "FastConnectable", @@ -319,9 +319,9 @@ index b66e2b8cb..3b1acace2 100644 "Privacy", "JustWorksRepairing", "TemporaryTimeout", -@@ -708,6 +709,16 @@ static void parse_config(GKeyFile *config) +@@ -728,6 +729,16 @@ static void parse_config(GKeyFile *config) else - btd_opts.refresh_discovery = boolean; + btd_opts.experimental = boolean; + boolean = g_key_file_get_boolean(config, "General", + "DelayReport", &err); @@ -337,7 +337,7 @@ index b66e2b8cb..3b1acace2 100644 if (err) { DBG("%s", err->message); diff --git a/src/main.conf b/src/main.conf -index ad36638b7..ec5c69808 100644 +index 198899541..121844048 100644 --- a/src/main.conf +++ b/src/main.conf @@ -65,6 +65,9 @@ diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0013-Implementation-to-get-connectedUuid-s-in-case-of-inc.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0013-Implementation-to-get-connectedUuid-s-in-case-of-inc.patch index 2939d2680..3c1fadf8b 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0013-Implementation-to-get-connectedUuid-s-in-case-of-inc.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0013-Implementation-to-get-connectedUuid-s-in-case-of-inc.patch @@ -1,4 +1,4 @@ -From 20129fce464344ff7a25886bc4153193de01f610 Mon Sep 17 00:00:00 2001 +From 66f2ee3bab9593047d6f3daa43b3b762ebcbbfcc Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Mon, 6 Apr 2020 12:14:43 +0530 Subject: [PATCH] Implementation to get connectedUuid's in case of incoming @@ -24,10 +24,10 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/device.c b/src/device.c -index 523a5ee9c..88d423041 100644 +index f085e5222..ac6f779d6 100644 --- a/src/device.c +++ b/src/device.c -@@ -7109,9 +7109,11 @@ static void service_state_changed(struct btd_service *service, +@@ -7125,9 +7125,11 @@ static void service_state_changed(struct btd_service *service, new_state == BTD_SERVICE_STATE_DISCONNECTING) return; diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0014-Fix-for-updating-connected-uuids-when-profile-is-dis.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0014-Fix-for-updating-connected-uuids-when-profile-is-dis.patch index 3026d6bb1..a3e93ec47 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0014-Fix-for-updating-connected-uuids-when-profile-is-dis.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0014-Fix-for-updating-connected-uuids-when-profile-is-dis.patch @@ -1,4 +1,4 @@ -From bedf226950c8888be11e64a97dd79d9226e3aa38 Mon Sep 17 00:00:00 2001 +From a534d41fa45cbc263ee5b043af47aa3b01255ed8 Mon Sep 17 00:00:00 2001 From: "ramya.hegde" Date: Tue, 14 Apr 2020 15:28:07 +0530 Subject: [PATCH] Fix for updating connected uuids when profile is disconnected @@ -23,10 +23,10 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/device.c b/src/device.c -index 88d423041..a1303448b 100644 +index ac6f779d6..20e86e3eb 100644 --- a/src/device.c +++ b/src/device.c -@@ -2367,7 +2367,10 @@ static void device_profile_disconnected(struct btd_device *dev, +@@ -2368,7 +2368,10 @@ static void device_profile_disconnected(struct btd_device *dev, DBG("%s %s (%d)", profile->name, strerror(-err), -err); if (!err) { if (dev->connected_uuids) diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0015-Fix-device-getStatus-not-updated-when-unpaired.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0015-Fix-device-getStatus-not-updated-when-unpaired.patch index 68a273c24..87834b387 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0015-Fix-device-getStatus-not-updated-when-unpaired.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0015-Fix-device-getStatus-not-updated-when-unpaired.patch @@ -1,4 +1,4 @@ -From 1a31ccf75e7c905bb1d750acd61a87c04c28acbb Mon Sep 17 00:00:00 2001 +From 4fef670216ec019ce347e310a38b9d1c0a6aff73 Mon Sep 17 00:00:00 2001 From: Sameer Mulla Date: Mon, 27 Apr 2020 11:56:21 +0530 Subject: [PATCH] Fix device/getStatus not updated when unpaired @@ -28,10 +28,10 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/device.c b/src/device.c -index a1303448b..5eec1bbe8 100644 +index 20e86e3eb..567b3e504 100644 --- a/src/device.c +++ b/src/device.c -@@ -1860,13 +1860,13 @@ static void device_profile_connected(struct btd_device *dev, +@@ -1861,13 +1861,13 @@ static void device_profile_connected(struct btd_device *dev, DBG("%s %s (%d)", profile->name, strerror(-err), -err); diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0016-Set-default-pairing-capability-as-NoInputNoOutput.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0016-Set-default-pairing-capability-as-NoInputNoOutput.patch index 3ac6cd9e7..ac213e63f 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0016-Set-default-pairing-capability-as-NoInputNoOutput.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0016-Set-default-pairing-capability-as-NoInputNoOutput.patch @@ -1,4 +1,4 @@ -From 7d2f7242fbce18e3639196e979d843382e1ba4a6 Mon Sep 17 00:00:00 2001 +From d0e222205317404684c21a577368854b31b7db33 Mon Sep 17 00:00:00 2001 From: "sungmok.shin" Date: Mon, 20 Apr 2020 19:24:45 +0900 Subject: [PATCH] Set default pairing capability as "NoInputNoOutput" diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0017-AVRCP-getting-supported-notification-events.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0017-AVRCP-getting-supported-notification-events.patch index f7bc0459d..f470a9659 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0017-AVRCP-getting-supported-notification-events.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0017-AVRCP-getting-supported-notification-events.patch @@ -1,4 +1,4 @@ -From 0592744a8af8269bcdade7248a3762caaf071b3d Mon Sep 17 00:00:00 2001 +From 7497dded069e70cff6c6d5b54e5d51b51d7c9e9a Mon Sep 17 00:00:00 2001 From: "ramya.hegde" Date: Mon, 11 May 2020 15:54:12 +0530 Subject: [PATCH] AVRCP getting supported notification events @@ -26,10 +26,10 @@ Upstream-Status: Inappropriate[webos specific] 2 files changed, 22 insertions(+) diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c -index d6a7fbb54..7c8f962da 100644 +index 5585e53f3..dbac46e24 100644 --- a/profiles/audio/avrcp.c +++ b/profiles/audio/avrcp.c -@@ -3974,6 +3974,7 @@ static gboolean avrcp_get_capabilities_resp(struct avctp *conn, uint8_t code, +@@ -3991,6 +3991,7 @@ static gboolean avrcp_get_capabilities_resp(struct avctp *conn, uint8_t code, break; } } @@ -38,10 +38,10 @@ index d6a7fbb54..7c8f962da 100644 if (!session->controller || !session->controller->player) return FALSE; diff --git a/src/device.c b/src/device.c -index 5eec1bbe8..daaf0989e 100644 +index 567b3e504..064983f32 100644 --- a/src/device.c +++ b/src/device.c -@@ -281,6 +281,7 @@ struct btd_device { +@@ -282,6 +282,7 @@ struct btd_device { struct key_code passththough_key; uint8_t avrcp_ct_features; uint8_t avrcp_tg_features; @@ -49,7 +49,7 @@ index 5eec1bbe8..daaf0989e 100644 }; static const uint16_t uuid_list[] = { -@@ -1378,6 +1379,17 @@ static gboolean dev_property_get_key_code(const GDBusPropertyTable *property, +@@ -1379,6 +1380,17 @@ static gboolean dev_property_get_key_code(const GDBusPropertyTable *property, return TRUE; } @@ -67,7 +67,7 @@ index 5eec1bbe8..daaf0989e 100644 static gboolean dev_property_get_avrcp_ct_feature(const GDBusPropertyTable *property, DBusMessageIter *iter, void *data) { -@@ -2024,6 +2036,14 @@ void set_avrcp_feature(struct btd_device *dev, uint8_t feature, bool is_controll +@@ -2025,6 +2037,14 @@ void set_avrcp_feature(struct btd_device *dev, uint8_t feature, bool is_controll } } @@ -82,7 +82,7 @@ index 5eec1bbe8..daaf0989e 100644 static void add_service_data(void *data, void *user_data) { struct eir_sd *sd = data; -@@ -3159,6 +3179,7 @@ static const GDBusPropertyTable device_properties[] = { +@@ -3160,6 +3180,7 @@ static const GDBusPropertyTable device_properties[] = { NULL, dev_property_avrcp_ct_feature_exist}, { "AvrcpTGFeatures", "y", dev_property_get_avrcp_tg_feature, NULL, dev_property_avrcp_tg_feature_exist}, diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0018-Modified-MapInstanceName-MapInstanceProperties-parsi.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0018-Modified-MapInstanceName-MapInstanceProperties-parsi.patch index 77181957c..f56b8c00c 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0018-Modified-MapInstanceName-MapInstanceProperties-parsi.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0018-Modified-MapInstanceName-MapInstanceProperties-parsi.patch @@ -1,4 +1,4 @@ -From 77e37bb76a549dd7d9f9993a76e1603c8a699abc Mon Sep 17 00:00:00 2001 +From aebe942d6fac0ec898e82b88d6d7d27c5e63f593 Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Tue, 14 Jul 2020 10:37:18 +0900 Subject: [PATCH] Modified MapInstanceName & MapInstanceProperties parsing and @@ -24,10 +24,10 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 167 insertions(+), 1 deletion(-) diff --git a/src/device.c b/src/device.c -index daaf0989e..fc8a5fd25 100644 +index 064983f32..854d81df7 100644 --- a/src/device.c +++ b/src/device.c -@@ -219,6 +219,8 @@ struct btd_device { +@@ -220,6 +220,8 @@ struct btd_device { char *modalias; struct btd_adapter *adapter; GSList *uuids; @@ -36,7 +36,7 @@ index daaf0989e..fc8a5fd25 100644 GSList *connected_uuids; GSList *primaries; /* List of primary services */ GSList *services; /* List of btd_service */ -@@ -394,6 +396,7 @@ static gboolean store_device_info_cb(gpointer user_data) +@@ -395,6 +397,7 @@ static gboolean store_device_info_cb(gpointer user_data) char *str; char class[9]; char **uuids = NULL; @@ -44,7 +44,7 @@ index daaf0989e..fc8a5fd25 100644 gsize length = 0; device->store_id = 0; -@@ -455,6 +458,35 @@ static gboolean store_device_info_cb(gpointer user_data) +@@ -456,6 +459,35 @@ static gboolean store_device_info_cb(gpointer user_data) g_key_file_remove_key(key_file, "General", "Services", NULL); } @@ -80,7 +80,7 @@ index daaf0989e..fc8a5fd25 100644 if (device->vendor_src) { g_key_file_set_integer(key_file, "DeviceID", "Source", device->vendor_src); -@@ -482,6 +514,7 @@ static gboolean store_device_info_cb(gpointer user_data) +@@ -483,6 +515,7 @@ static gboolean store_device_info_cb(gpointer user_data) g_key_file_free(key_file); g_free(uuids); @@ -88,7 +88,7 @@ index daaf0989e..fc8a5fd25 100644 return FALSE; } -@@ -687,6 +720,10 @@ static void device_free(gpointer user_data) +@@ -688,6 +721,10 @@ static void device_free(gpointer user_data) g_slist_free_full(device->uuids, g_free); g_slist_free_full(device->primaries, g_free); g_slist_free_full(device->svc_callbacks, svc_dev_remove); @@ -99,7 +99,7 @@ index daaf0989e..fc8a5fd25 100644 /* Reset callbacks since the device is going to be freed */ gatt_db_unregister(device->db, device->db_id); -@@ -1239,6 +1276,46 @@ static gboolean dev_property_get_uuids(const GDBusPropertyTable *property, +@@ -1240,6 +1277,46 @@ static gboolean dev_property_get_uuids(const GDBusPropertyTable *property, return TRUE; } @@ -146,7 +146,7 @@ index daaf0989e..fc8a5fd25 100644 static gboolean dev_property_get_modalias(const GDBusPropertyTable *property, DBusMessageIter *iter, void *data) { -@@ -3194,6 +3271,8 @@ static const GDBusPropertyTable device_properties[] = { +@@ -3195,6 +3272,8 @@ static const GDBusPropertyTable device_properties[] = { { "WakeAllowed", "b", dev_property_get_wake_allowed, dev_property_set_wake_allowed, dev_property_wake_allowed_exist }, @@ -155,7 +155,7 @@ index daaf0989e..fc8a5fd25 100644 { } }; -@@ -3439,6 +3518,32 @@ static void load_services(struct btd_device *device, char **uuids) +@@ -3440,6 +3519,32 @@ static void load_services(struct btd_device *device, char **uuids) g_strfreev(uuids); } @@ -188,7 +188,7 @@ index daaf0989e..fc8a5fd25 100644 static void convert_info(struct btd_device *device, GKeyFile *key_file) { char filename[PATH_MAX]; -@@ -3486,7 +3591,7 @@ static void load_info(struct btd_device *device, const char *local, +@@ -3487,7 +3592,7 @@ static void load_info(struct btd_device *device, const char *local, gboolean store_needed = FALSE; gboolean blocked; gboolean wake_allowed; @@ -197,7 +197,7 @@ index daaf0989e..fc8a5fd25 100644 int source, vendor, product, version; char **techno, **t; -@@ -3582,6 +3687,23 @@ next: +@@ -3583,6 +3688,23 @@ next: device->bredr_state.svc_resolved = true; } @@ -221,7 +221,7 @@ index daaf0989e..fc8a5fd25 100644 /* Load device id */ source = g_key_file_get_integer(key_file, "DeviceID", "Source", NULL); if (source) { -@@ -5071,6 +5193,29 @@ static int update_record(struct browse_req *req, const char *uuid, +@@ -5072,6 +5194,29 @@ static int update_record(struct browse_req *req, const char *uuid, return 0; } @@ -251,7 +251,7 @@ index daaf0989e..fc8a5fd25 100644 static void update_bredr_services(struct browse_req *req, sdp_list_t *recs) { struct btd_device *device = req->device; -@@ -5113,6 +5258,23 @@ static void update_bredr_services(struct browse_req *req, sdp_list_t *recs) +@@ -5114,6 +5259,23 @@ static void update_bredr_services(struct browse_req *req, sdp_list_t *recs) if (!profile_uuid) continue; @@ -275,7 +275,7 @@ index daaf0989e..fc8a5fd25 100644 if (bt_uuid_strcmp(profile_uuid, PNP_UUID) == 0) { uint16_t source, vendor, product, version; sdp_data_t *pdlist; -@@ -5282,6 +5444,10 @@ static void search_cb(sdp_list_t *recs, int err, gpointer user_data) +@@ -5284,6 +5446,10 @@ static void search_cb(sdp_list_t *recs, int err, gpointer user_data) /* Propagate services changes */ g_dbus_emit_property_changed(dbus_conn, req->device->path, DEVICE_INTERFACE, "UUIDs"); @@ -285,4 +285,4 @@ index daaf0989e..fc8a5fd25 100644 + DEVICE_INTERFACE, "MapInstanceProperties"); send_reply: - device_svc_resolved(device, BROWSE_SDP, BDADDR_BREDR, err); + /* If SDP search failed during an ongoing connection request, we should diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0019-Enabled-EMAIL-support-based-on-MAPInstance-Name-Modi.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0019-Enabled-EMAIL-support-based-on-MAPInstance-Name-Modi.patch index 4714d3c57..8e384b701 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0019-Enabled-EMAIL-support-based-on-MAPInstance-Name-Modi.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0019-Enabled-EMAIL-support-based-on-MAPInstance-Name-Modi.patch @@ -1,4 +1,4 @@ -From c29950285e87ef985fa9497c82dcbd2e164da949 Mon Sep 17 00:00:00 2001 +From ce141de2319a0649dce22a9243f98625ec90b747 Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Wed, 3 Jun 2020 18:08:39 +0530 Subject: [PATCH] Enabled EMAIL support based on MAPInstance Name Modified diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0020-Disabling-DB-Hash-for-Gatt.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0020-Disabling-DB-Hash-for-Gatt.patch index a91594b5d..2f88ad720 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0020-Disabling-DB-Hash-for-Gatt.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0020-Disabling-DB-Hash-for-Gatt.patch @@ -1,4 +1,4 @@ -From 4f3ad7f898652fe6642ac3cdad5c5afbdd5976ac Mon Sep 17 00:00:00 2001 +From 8dd6692f49afc280f2e8e7f999cc3dffed653d01 Mon Sep 17 00:00:00 2001 From: Vibhanshu Dhote Date: Tue, 28 Jul 2020 16:04:27 +0530 Subject: [PATCH] Disabling DB Hash for Gatt @@ -22,7 +22,7 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/gatt-database.c b/src/gatt-database.c -index bd5864bcd..e42704ea2 100644 +index be6dfb265..43589e856 100644 --- a/src/gatt-database.c +++ b/src/gatt-database.c @@ -1141,11 +1141,13 @@ static void db_hash_read_cb(struct gatt_db_attribute *attrib, diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0021-Added-Notification-property-in-org.bluez.obex.Messag.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0021-Added-Notification-property-in-org.bluez.obex.Messag.patch index e489e8352..90154fd44 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0021-Added-Notification-property-in-org.bluez.obex.Messag.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0021-Added-Notification-property-in-org.bluez.obex.Messag.patch @@ -1,4 +1,4 @@ -From b850670232de560ce9ead26e870b85b86333b8fb Mon Sep 17 00:00:00 2001 +From 77c01a73a7cb138fd1abec4a2e41383d43211b53 Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Fri, 7 Aug 2020 18:32:03 +0530 Subject: [PATCH] Added Notification property in org.bluez.obex.MessageAccess1 diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0022-Added-MessageHandle-property-in-org.bluez.obex.Trans.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0022-Added-MessageHandle-property-in-org.bluez.obex.Trans.patch index c528011d5..a2bc5423d 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0022-Added-MessageHandle-property-in-org.bluez.obex.Trans.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0022-Added-MessageHandle-property-in-org.bluez.obex.Trans.patch @@ -1,4 +1,4 @@ -From ad939769feef3ab64ae5a59bb5c0a90f88b37be5 Mon Sep 17 00:00:00 2001 +From b940ef74df1282dd31bcd31c2f7c855023d13d78 Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Mon, 10 Aug 2020 13:27:14 +0530 Subject: [PATCH] Added MessageHandle property in org.bluez.obex.Transfer1 diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0023-Create-Message-interface-for-sent-message-related-no.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0023-Create-Message-interface-for-sent-message-related-no.patch index d71b3ce69..7ff220163 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0023-Create-Message-interface-for-sent-message-related-no.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0023-Create-Message-interface-for-sent-message-related-no.patch @@ -1,4 +1,4 @@ -From 2bb192090af19adeefcb6b06fead6ec5b2f2aeff Mon Sep 17 00:00:00 2001 +From 1b4888273e17cf5262c808204dbee675bbc12f86 Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Mon, 10 Aug 2020 16:21:17 +0530 Subject: [PATCH] Create Message interface for sent message related diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0024-AVRCP-addToNowPlaying-return-error-when-player-not-s.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0024-AVRCP-addToNowPlaying-return-error-when-player-not-s.patch index 8c0174a16..9db0045b0 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0024-AVRCP-addToNowPlaying-return-error-when-player-not-s.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0024-AVRCP-addToNowPlaying-return-error-when-player-not-s.patch @@ -1,4 +1,4 @@ -From 04219c108d54999fc869a3b9c0e190a8d0d2ce01 Mon Sep 17 00:00:00 2001 +From c443899c6717b7c456ac387b26bfde6174d267c5 Mon Sep 17 00:00:00 2001 From: "ramya.hegde" Date: Tue, 11 Aug 2020 15:18:43 +0530 Subject: [PATCH] AVRCP addToNowPlaying return error when player not supports @@ -26,10 +26,10 @@ Upstream-Status: Inappropriate[webos specific] 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c -index 7c8f962da..702b47f03 100644 +index dbac46e24..24fdc2185 100644 --- a/profiles/audio/avrcp.c +++ b/profiles/audio/avrcp.c -@@ -2885,6 +2885,9 @@ static void avrcp_player_parse_features(struct avrcp_player *player, +@@ -2900,6 +2900,9 @@ static void avrcp_player_parse_features(struct avrcp_player *player, if (features[7] & 0x10) media_player_set_searchable(mp, true); diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0025-AVRCP-MediaItem-object-path-fix.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0025-AVRCP-MediaItem-object-path-fix.patch index 90a4fc435..6d654ffe0 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0025-AVRCP-MediaItem-object-path-fix.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0025-AVRCP-MediaItem-object-path-fix.patch @@ -1,4 +1,4 @@ -From 4c77d30d70aa614561dfea0aea0c1cc3813a1639 Mon Sep 17 00:00:00 2001 +From feead0cea1521ded048092b09e26857c5e3ccb00 Mon Sep 17 00:00:00 2001 From: "ramya.hegde" Date: Tue, 3 Nov 2020 11:32:38 +0530 Subject: [PATCH] AVRCP MediaItem object path fix diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0026-Revert-a2dp-Add-reverse-discovery.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0026-Revert-a2dp-Add-reverse-discovery.patch index 70882e70c..0ac68d37d 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0026-Revert-a2dp-Add-reverse-discovery.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0026-Revert-a2dp-Add-reverse-discovery.patch @@ -1,4 +1,4 @@ -From 17e4d32d9d160f35114d8f80ca2c48491da2f86a Mon Sep 17 00:00:00 2001 +From 2e21e494a1c040269ea244a9c6fff6b358d36d32 Mon Sep 17 00:00:00 2001 From: Sameer Mulla Date: Thu, 12 Nov 2020 15:04:36 +0530 Subject: [PATCH] Revert "a2dp: Add reverse discovery" @@ -28,10 +28,10 @@ Upstream Status: Pending 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c -index 7f4833171..41665b4e6 100644 +index dc9858f91..61110d8c4 100644 --- a/profiles/audio/a2dp.c +++ b/profiles/audio/a2dp.c -@@ -585,12 +585,6 @@ static gboolean endpoint_match_codec_ind(struct avdtp *session, +@@ -586,12 +586,6 @@ static gboolean endpoint_match_codec_ind(struct avdtp *session, return TRUE; } @@ -44,7 +44,7 @@ index 7f4833171..41665b4e6 100644 static gboolean endpoint_setconf_ind(struct avdtp *session, struct avdtp_local_sep *sep, struct avdtp_stream *stream, -@@ -646,14 +640,8 @@ static gboolean endpoint_setconf_ind(struct avdtp *session, +@@ -647,14 +641,8 @@ static gboolean endpoint_setconf_ind(struct avdtp *session, setup_ref(setup), endpoint_setconf_cb, a2dp_sep->user_data); diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0027-Add-support-for-meshd-to-use-RAW-channel.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0027-Add-support-for-meshd-to-use-RAW-channel.patch index 1d654560b..1534c16ed 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0027-Add-support-for-meshd-to-use-RAW-channel.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0027-Add-support-for-meshd-to-use-RAW-channel.patch @@ -1,4 +1,4 @@ -From 2ba833e4ead73f4b3432bf9dc577973db3179f48 Mon Sep 17 00:00:00 2001 +From 95d5bc2cdc3e2c7938e252f4b8058122640bbfc6 Mon Sep 17 00:00:00 2001 From: "ramya.hegde" Date: Mon, 25 Jan 2021 16:27:58 +0530 Subject: [PATCH] Add support for meshd to use RAW channel @@ -31,7 +31,7 @@ Upstream-Status: Inappropriate[webos specific] 6 files changed, 88 insertions(+), 13 deletions(-) diff --git a/mesh/bluetooth-mesh.service.in b/mesh/bluetooth-mesh.service.in -index c8afbf5..2154b87 100644 +index c8afbf53e..ee65ce485 100644 --- a/mesh/bluetooth-mesh.service.in +++ b/mesh/bluetooth-mesh.service.in @@ -5,7 +5,8 @@ ConditionPathIsDirectory=/sys/class/bluetooth @@ -45,10 +45,10 @@ index c8afbf5..2154b87 100644 LimitNPROC=1 ProtectHome=true diff --git a/mesh/main.c b/mesh/main.c -index 5a3cbf2..63bf749 100644 +index dd99c3085..c68530faf 100644 --- a/mesh/main.c +++ b/mesh/main.c -@@ -43,6 +43,7 @@ static const char *storage_dir; +@@ -36,6 +36,7 @@ static const char *storage_dir; static const char *mesh_conf_fname; static enum mesh_io_type io_type; static void *io_opts; @@ -56,7 +56,7 @@ index 5a3cbf2..63bf749 100644 static const struct option main_options[] = { { "io", required_argument, NULL, 'i' }, -@@ -51,6 +52,7 @@ static const struct option main_options[] = { +@@ -44,6 +45,7 @@ static const struct option main_options[] = { { "nodetach", no_argument, NULL, 'n' }, { "debug", no_argument, NULL, 'd' }, { "dbus-debug", no_argument, NULL, 'b' }, @@ -64,7 +64,7 @@ index 5a3cbf2..63bf749 100644 { "help", no_argument, NULL, 'h' }, { } }; -@@ -145,10 +147,11 @@ static void signal_handler(uint32_t signo, void *user_data) +@@ -138,10 +140,11 @@ static void signal_handler(uint32_t signo, void *user_data) static bool parse_io(const char *optarg, enum mesh_io_type *type, void **opts) { if (strstr(optarg, "generic") == optarg) { @@ -79,16 +79,16 @@ index 5a3cbf2..63bf749 100644 optarg += strlen("generic"); if (!*optarg) { -@@ -196,7 +199,7 @@ int main(int argc, char *argv[]) +@@ -204,7 +207,7 @@ int main(int argc, char *argv[]) for (;;) { int opt; -- opt = getopt_long(argc, argv, "i:s:c:ndbh", main_options, NULL); -+ opt = getopt_long(argc, argv, "i:c:f:ndbhr", main_options, NULL); +- opt = getopt_long(argc, argv, "u:i:s:c:ndbh", main_options, ++ opt = getopt_long(argc, argv, "u:i:s:c:ndbhr", main_options, + NULL); if (opt < 0) break; - -@@ -223,6 +226,9 @@ int main(int argc, char *argv[]) +@@ -239,6 +242,9 @@ int main(int argc, char *argv[]) case 'b': dbus_debug = true; break; @@ -99,10 +99,10 @@ index 5a3cbf2..63bf749 100644 usage(); status = EXIT_SUCCESS; diff --git a/mesh/mesh-io-generic.c b/mesh/mesh-io-generic.c -index 67304d2..95b1886 100644 +index 6c0b8f0fd..946a6177d 100644 --- a/mesh/mesh-io-generic.c +++ b/mesh/mesh-io-generic.c -@@ -49,6 +49,7 @@ struct mesh_io_private { +@@ -40,6 +40,7 @@ struct mesh_io_private { uint16_t interval; bool sending; bool active; @@ -110,7 +110,7 @@ index 67304d2..95b1886 100644 }; struct pvt_rx_reg { -@@ -268,8 +269,11 @@ static void configure_hci(struct mesh_io_private *io) +@@ -259,8 +260,11 @@ static void configure_hci(struct mesh_io_private *io) /* TODO: Move to suitable place. Set suitable masks */ /* Reset Command */ @@ -124,7 +124,7 @@ index 67304d2..95b1886 100644 /* Read local supported commands */ bt_hci_send(io->hci, BT_HCI_CMD_READ_LOCAL_COMMANDS, NULL, 0, -@@ -401,10 +405,26 @@ static void hci_init(void *user_data) +@@ -392,10 +396,26 @@ static void hci_init(void *user_data) bt_hci_unref(io->pvt->hci); } @@ -154,7 +154,7 @@ index 67304d2..95b1886 100644 result = false; } -@@ -445,7 +465,10 @@ static bool dev_init(struct mesh_io *io, void *opts, +@@ -436,7 +456,10 @@ static bool dev_init(struct mesh_io *io, void *opts, return false; io->pvt = l_new(struct mesh_io_private, 1); @@ -166,7 +166,7 @@ index 67304d2..95b1886 100644 io->pvt->rx_regs = l_queue_new(); io->pvt->tx_pkts = l_queue_new(); -@@ -853,7 +876,8 @@ static bool recv_register(struct mesh_io *io, const uint8_t *filter, +@@ -846,7 +869,8 @@ static bool recv_register(struct mesh_io *io, const uint8_t *filter, if (l_queue_find(pvt->rx_regs, find_active, NULL)) active = true; @@ -177,10 +177,10 @@ index 67304d2..95b1886 100644 cmd.enable = 0x00; /* Disable scanning */ cmd.filter_dup = 0x00; /* Report duplicates */ diff --git a/mesh/mesh-io.h b/mesh/mesh-io.h -index fc04220..4952360 100644 +index 80ef3fa3e..fdf5eb6b1 100644 --- a/mesh/mesh-io.h +++ b/mesh/mesh-io.h -@@ -38,6 +38,10 @@ struct mesh_io_recv_info { +@@ -30,6 +30,10 @@ struct mesh_io_recv_info { uint8_t chan; int8_t rssi; }; @@ -192,10 +192,10 @@ index fc04220..4952360 100644 struct mesh_io_send_info { enum mesh_io_timing_type type; diff --git a/mesh/mesh-mgmt.c b/mesh/mesh-mgmt.c -index 2cf2eba..dc59844 100644 +index 754093dbc..7e039498c 100644 --- a/mesh/mesh-mgmt.c +++ b/mesh/mesh-mgmt.c -@@ -52,6 +52,45 @@ static void process_read_info_req(void *data, void *user_data) +@@ -43,6 +43,45 @@ static void process_read_info_req(void *data, void *user_data) reg->cb(index, reg->user_data); } @@ -241,7 +241,7 @@ index 2cf2eba..dc59844 100644 static void read_info_cb(uint8_t status, uint16_t length, const void *param, void *user_data) { -@@ -80,7 +119,7 @@ static void read_info_cb(uint8_t status, uint16_t length, +@@ -71,7 +110,7 @@ static void read_info_cb(uint8_t status, uint16_t length, if (current_settings & MGMT_SETTING_POWERED) { l_info("Controller hci %u is in use", index); @@ -251,14 +251,11 @@ index 2cf2eba..dc59844 100644 if (!(supported_settings & MGMT_SETTING_LE)) { diff --git a/mesh/mesh-mgmt.h b/mesh/mesh-mgmt.h -index 93ad799..86d1786 100644 +index 90ac14e73..1fdb25646 100644 --- a/mesh/mesh-mgmt.h +++ b/mesh/mesh-mgmt.h -@@ -21,3 +21,4 @@ +@@ -12,3 +12,4 @@ typedef void (*mesh_mgmt_read_info_func_t)(int index, void *user_data); bool mesh_mgmt_list(mesh_mgmt_read_info_func_t cb, void *user_data); +bool set_powered(uint16_t mode, int index); --- -2.26.0 - diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0028-Enable-mesh-fixed-ell-undefined-symbol-error.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0028-Enable-mesh-fixed-ell-undefined-symbol-error.patch index 363ddeb1e..8ffd0de5b 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0028-Enable-mesh-fixed-ell-undefined-symbol-error.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0028-Enable-mesh-fixed-ell-undefined-symbol-error.patch @@ -1,4 +1,4 @@ -From fa464150bd1612747638e07536a859d070107320 Mon Sep 17 00:00:00 2001 +From b66c8b97636d7c47bf5c4142e4ddd8de0807dddf Mon Sep 17 00:00:00 2001 From: "shoyeb.khan" Date: Wed, 27 Jan 2021 03:34:27 +0530 Subject: [PATCH] Enable mesh & fixed ell undefined symbol error @@ -25,10 +25,10 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.am b/Makefile.am -index 041af00..4840e92 100644 +index 497f05f06..6009ca398 100644 --- a/Makefile.am +++ b/Makefile.am -@@ -625,7 +625,7 @@ ell/internal: Makefile +@@ -666,7 +666,7 @@ ell/internal: Makefile fi \ done > $@ @@ -37,6 +37,3 @@ index 041af00..4840e92 100644 $(AM_V_at)echo -n > $@ $(AM_V_GEN)for f in $(ell_headers) ; do \ echo "#include <$$f>" >> $@ ; \ --- -2.26.0 - From 8c0c77eeb592a88af02944137c20f9a897dfc34e Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Wed, 4 Aug 2021 03:12:14 -0700 Subject: [PATCH 0602/2022] meta-webos-smack: layer.conf: Disable meta-security sanity check :Release Notes: We're using only smack recipe from meta-security layer and don't care about other features of this layer. :Detailed Notes: Prevents following warning shown in every build: WARNING: You have included the meta-security layer, but 'security' has not been enabled in your DISTRO_FEATURES. Some bbappend files and preferred version setting may not take effect. See the meta-security README for details on enabling security support. Also depends on this fix: https://lists.openembedded.org/g/openembedded-devel/message/92437 :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: Ife456116c7104a1b807f4754cd5179ebab997917 --- meta-webos-smack/conf/layer.conf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/meta-webos-smack/conf/layer.conf b/meta-webos-smack/conf/layer.conf index cd6ffab67..207f5e97c 100644 --- a/meta-webos-smack/conf/layer.conf +++ b/meta-webos-smack/conf/layer.conf @@ -8,6 +8,8 @@ BBFILES += "${LAYERDIR}/recipes-*/*/*.bb ${LAYERDIR}/recipes-*/*/*.bbappend" # Exclude unused recipies from meta-security, use only smack BBMASK:append = " meta-security\/(?!.*\/smack\/).*" +# Disable the check added in: https://git.yoctoproject.org/cgit/cgit.cgi/meta-security/commit/?id=c1235f6affb5c38e64b3a04533b8388969b194b2 +SKIP_META_SECURITY_SANITY_CHECK = "1" PNBLACKLIST[crun] ?= "Depends on libseccomp which is provided by meta-security, but meta-webos-smack/conf/layer.conf BBMASKs everything from meta-security except smack itself" PNBLACKLIST[slirp4netns] ?= "Depends on libseccomp which is provided by meta-security, but meta-webos-smack/conf/layer.conf BBMASKs everything from meta-security except smack itself" From d3438a69b73ca5eed0d619983f20727bc81056ff Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 19 Aug 2021 05:14:05 -0700 Subject: [PATCH 0603/2022] meta-webos-raspberrypi: update MACHINE.conf files from upstream meta-raspberrypi :Release Notes: The most important part is tune file location change from: https://github.com/agherzan/meta-raspberrypi/pull/902/commits to parse after: https://git.openembedded.org/openembedded-core/commit/?id=b6f15209bcfff953cce69da97a93f9ddff141ced :Detailed Notes: vc4graphics no longer needs to be added to MACHINE_FEATURES here as it's enabled by default (unless explicitly disabled with DISABLE_VC4GRAPHICS) https://github.com/agherzan/meta-raspberrypi/commit/03488c61599ddb8efdecd1a48c211d083ce4ea78 https://github.com/agherzan/meta-raspberrypi/commit/7c1d1e1eeb98dd78a8be432b3ae17ad710210a43 Other note-worthy changes are: https://github.com/agherzan/meta-raspberrypi/commit/2a9c3bb5510e4ae46f53bc38b2e9e6c260a4ebc8 https://github.com/agherzan/meta-raspberrypi/commit/a4a8ce9af45b8d5aec184cf7bcc57ac856552090 https://github.com/agherzan/meta-raspberrypi/commit/a4c8118676ba8002edab29fc81b4e4edd9fad1f1 now the only difference from upstream is: "require conf/machine/include/webos-rpi.inc" at the end and Copyright at the top. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: Ic99bc7c89185e4533fd8b2043aa4be97245cfe5a --- .../conf/machine/raspberrypi3-64.conf | 8 ++++---- meta-webos-raspberrypi/conf/machine/raspberrypi3.conf | 4 ++-- .../conf/machine/raspberrypi4-64.conf | 10 +++++----- meta-webos-raspberrypi/conf/machine/raspberrypi4.conf | 7 ++----- 4 files changed, 13 insertions(+), 16 deletions(-) diff --git a/meta-webos-raspberrypi/conf/machine/raspberrypi3-64.conf b/meta-webos-raspberrypi/conf/machine/raspberrypi3-64.conf index 3d63569f4..0d93a5667 100644 --- a/meta-webos-raspberrypi/conf/machine/raspberrypi3-64.conf +++ b/meta-webos-raspberrypi/conf/machine/raspberrypi3-64.conf @@ -13,19 +13,19 @@ MACHINE_EXTRA_RRECOMMENDS += "\ bluez-firmware-rpidistro-bcm4345c0-hcd \ " -require conf/machine/include/tune-cortexa53.inc +require conf/machine/include/arm/armv8a/tune-cortexa53.inc include conf/machine/include/rpi-base.inc RPI_KERNEL_DEVICETREE = " \ broadcom/bcm2710-rpi-3-b.dtb \ broadcom/bcm2710-rpi-3-b-plus.dtb \ broadcom/bcm2837-rpi-3-b.dtb \ + broadcom/bcm2710-rpi-cm3.dtb \ " SERIAL_CONSOLES ?= "115200;ttyS0" -UBOOT_MACHINE = "rpi_3_config" -MACHINE_FEATURES:append = " vc4graphics" +UBOOT_MACHINE = "rpi_arm64_config" # When u-boot is enabled we need to use the "Image" format and the "booti" # command to load the kernel @@ -34,7 +34,7 @@ KERNEL_IMAGETYPE_UBOOT ?= "Image" KERNEL_IMAGETYPE_DIRECT ?= "Image" KERNEL_BOOTCMD ?= "booti" +VC4DTBO ?= "vc4-fkms-v3d" ARMSTUB ?= "armstub8.bin" require conf/machine/include/webos-rpi.inc -VC4DTBO = "vc4-fkms-v3d" diff --git a/meta-webos-raspberrypi/conf/machine/raspberrypi3.conf b/meta-webos-raspberrypi/conf/machine/raspberrypi3.conf index 2208ee9f5..b7bda8a0c 100644 --- a/meta-webos-raspberrypi/conf/machine/raspberrypi3.conf +++ b/meta-webos-raspberrypi/conf/machine/raspberrypi3.conf @@ -5,7 +5,7 @@ #@DESCRIPTION: Machine configuration for the RaspberryPi 3 in 32 bits mode DEFAULTTUNE ?= "cortexa7thf-neon-vfpv4" -require conf/machine/include/tune-cortexa7.inc +require conf/machine/include/arm/armv7a/tune-cortexa7.inc include conf/machine/include/rpi-base.inc MACHINE_EXTRA_RRECOMMENDS += "\ @@ -19,7 +19,7 @@ SDIMG_KERNELIMAGE ?= "kernel7.img" UBOOT_MACHINE = "rpi_3_32b_config" SERIAL_CONSOLES ?= "115200;ttyS0" +VC4DTBO ?= "vc4-fkms-v3d" ARMSTUB ?= "armstub7.bin" require conf/machine/include/webos-rpi.inc -VC4DTBO = "vc4-fkms-v3d" diff --git a/meta-webos-raspberrypi/conf/machine/raspberrypi4-64.conf b/meta-webos-raspberrypi/conf/machine/raspberrypi4-64.conf index a01f858fb..9ba37e2bb 100644 --- a/meta-webos-raspberrypi/conf/machine/raspberrypi4-64.conf +++ b/meta-webos-raspberrypi/conf/machine/raspberrypi4-64.conf @@ -6,6 +6,7 @@ MACHINEOVERRIDES = "raspberrypi4:${MACHINE}" +MACHINE_FEATURES += "pci" MACHINE_EXTRA_RRECOMMENDS += "\ linux-firmware-rpidistro-bcm43455 \ bluez-firmware-rpidistro-bcm4345c0-hcd \ @@ -14,18 +15,19 @@ MACHINE_EXTRA_RRECOMMENDS += "\ kernel-module-spi-bcm2835 \ " -require conf/machine/include/tune-cortexa72.inc +require conf/machine/include/arm/armv8a/tune-cortexa72.inc include conf/machine/include/rpi-base.inc RPI_KERNEL_DEVICETREE = " \ broadcom/bcm2711-rpi-4-b.dtb \ + broadcom/bcm2711-rpi-400.dtb \ + broadcom/bcm2711-rpi-cm4.dtb \ " SDIMG_KERNELIMAGE ?= "kernel8.img" SERIAL_CONSOLES ?= "115200;ttyS0" -UBOOT_MACHINE = "rpi_4_config" -MACHINE_FEATURES:append = " vc4graphics" +UBOOT_MACHINE = "rpi_arm64_config" VC4DTBO ?= "vc4-fkms-v3d" @@ -36,8 +38,6 @@ KERNEL_IMAGETYPE_UBOOT ?= "Image" KERNEL_IMAGETYPE_DIRECT ?= "Image" KERNEL_BOOTCMD ?= "booti" -RPI_EXTRA_CONFIG ?= "\n# Force arm in 64bit mode. See: https://github.com/raspberrypi/firmware/issues/1193.\narm_64bit=1" - ARMSTUB ?= "armstub8-gic.bin" require conf/machine/include/webos-rpi.inc diff --git a/meta-webos-raspberrypi/conf/machine/raspberrypi4.conf b/meta-webos-raspberrypi/conf/machine/raspberrypi4.conf index 66733a748..8cda2f0fe 100644 --- a/meta-webos-raspberrypi/conf/machine/raspberrypi4.conf +++ b/meta-webos-raspberrypi/conf/machine/raspberrypi4.conf @@ -5,15 +5,13 @@ #@DESCRIPTION: Machine configuration for the RaspberryPi 4 in 32 bit mode DEFAULTTUNE ?= "cortexa7thf-neon-vfpv4" -require conf/machine/include/tune-cortexa7.inc +require conf/machine/include/arm/armv7a/tune-cortexa7.inc include conf/machine/include/rpi-base.inc +MACHINE_FEATURES += "pci" MACHINE_EXTRA_RRECOMMENDS += "\ linux-firmware-rpidistro-bcm43455 \ bluez-firmware-rpidistro-bcm4345c0-hcd \ - kernel-module-i2c-dev \ - kernel-module-spidev \ - kernel-module-spi-bcm2835 \ " # 'l' stands for LPAE @@ -21,7 +19,6 @@ SDIMG_KERNELIMAGE ?= "kernel7l.img" UBOOT_MACHINE = "rpi_4_32b_config" SERIAL_CONSOLES ?= "115200;ttyS0" -MACHINE_FEATURES:append = " vc4graphics" VC4DTBO ?= "vc4-fkms-v3d" ARMSTUB ?= "armstub7.bin" From 28a83c9952f689ee8b6b06a1475c00955809c4c2 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 5 Nov 2021 06:34:02 -0700 Subject: [PATCH 0604/2022] linux-raspberrypi: drop bbappend for 5.4 :Release Notes: The 5.10 version is used by default since gatesgarth: https://github.com/agherzan/meta-raspberrypi/commit/12ff6a2ea60183877b3659b3d46ae4af986800e4 and 5.4 recipes were removed in honister/master: https://github.com/agherzan/meta-raspberrypi/commit/316b017c53f45da4fb76fab717f3e0a47b239f75 :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: I7c418b27e22d7548becef8902281309bf6621fee --- ...35-v4l2-codec-fix-vchiq-mmal-renable.patch | 55 ------------------- .../linux/linux-raspberrypi_5.4.bbappend | 10 ---- 2 files changed, 65 deletions(-) delete mode 100644 meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi-5.4/0001-bcm2835-v4l2-codec-fix-vchiq-mmal-renable.patch delete mode 100644 meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.4.bbappend diff --git a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi-5.4/0001-bcm2835-v4l2-codec-fix-vchiq-mmal-renable.patch b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi-5.4/0001-bcm2835-v4l2-codec-fix-vchiq-mmal-renable.patch deleted file mode 100644 index 3be080a7b..000000000 --- a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi-5.4/0001-bcm2835-v4l2-codec-fix-vchiq-mmal-renable.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 88463f033dacf0a605c7cdb671a359f5d6caac9f Mon Sep 17 00:00:00 2001 -From: Pankaj Maharana -Date: Sun, 1 Dec 2019 20:41:59 +0530 -Subject: [PATCH] bcm2835-v4l2-codec: fix vchiq mmal renable - -:Release Notes: -Enable vchiq mmal component on stream start after stream stop - -:Detailed Notes: -Enable vchiq mmal component on stream start after stream stop -When we stop streaming for flush from gst vrl2 decoder element -then vchiq mmal component is disabled. -But it does not start back when we start the stream back from -gst v4l2 decoder element because the ctx->component_enabled flag -is not set to false while disabling the component. So setting -the flag to false while disabling vchiq mmal component -Also fixes an error in vidioc_s_selection that is using height -instead of crop_height. Might be a typo it is effecting in -dynamic resolution change of the stream. - -:Testing Performed: -Tested the 1080p video plays with 22fps in raspberrypi4 - -:QA Notes: - -:Issues Addressed: -[PLAT-94493] Streaming issues in bcm2835-v4l2-codec driver ---- - drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) - -diff --git a/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c b/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c -index 66edec1..1986118 100644 ---- a/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c -+++ b/drivers/staging/vc04_services/bcm2835-codec/bcm2835-v4l2-codec.c -@@ -1342,7 +1342,7 @@ static int vidioc_s_selection(struct file *file, void *priv, - s->r.left = 0; - s->r.top = 0; - s->r.width = min(s->r.width, q_data->crop_width); -- s->r.height = min(s->r.height, q_data->height); -+ s->r.height = min(s->r.height, q_data->crop_height); - q_data->crop_width = s->r.width; - q_data->crop_height = s->r.height; - q_data->selection_set = true; -@@ -2201,6 +2201,7 @@ static void bcm2835_codec_stop_streaming(struct vb2_queue *q) - if (ret) - v4l2_err(&ctx->dev->v4l2_dev, "%s: Failed enabling component, ret %d\n", - __func__, ret); -+ ctx->component_enabled = false; - } - - if (V4L2_TYPE_IS_OUTPUT(q->type)) --- -2.7.4 - diff --git a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.4.bbappend b/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.4.bbappend deleted file mode 100644 index b19742817..000000000 --- a/meta-webos-raspberrypi/recipes-kernel/linux/linux-raspberrypi_5.4.bbappend +++ /dev/null @@ -1,10 +0,0 @@ -# Copyright (c) 2020-2022 LG Electronics, Inc. - -# security.cfg - enable security features. Should be applied to default configuration. -SRC_URI:append = " \ - file://0001-bcm2835-v4l2-codec-fix-vchiq-mmal-renable.patch \ - file://governor.cfg \ - file://ntfs.cfg \ - file://zram.cfg \ - file://security.cfg \ -" From 6ed554447c8d1d32c5dfe71b536a99364c616bae Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 26 Aug 2021 04:47:11 -0700 Subject: [PATCH 0605/2022] bluez5 (refresh patches to apply on 5.61 version) :Release Notes: :Detailed Notes: Fixes: ERROR: bluez5-5.61-r0 do_patch: Command Error: 'quilt --quiltrc /jenkins/home/anaconda/build-webos-auto-honister/build/BUILD/work/sa8155-webos-linux/bluez5/5.61-r0/recipe-sysroot-native/etc/quiltrc push' exited with 0 Output: stdout: Applying patch 0012-Support-enabling-avdtp-delayReport.patch patching file profiles/audio/a2dp.c Hunk #1 succeeded at 2333 (offset 138 lines). patching file profiles/audio/a2dp.h patching file profiles/audio/avdtp.c patching file profiles/audio/avdtp.h Hunk #1 succeeded at 308 (offset 2 lines). patching file profiles/audio/media.c Hunk #3 succeeded at 2433 (offset 3 lines). patching file profiles/audio/media.h patching file src/adapter.c Hunk #3 succeeded at 298 (offset 3 lines). Hunk #4 succeeded at 504 (offset 3 lines). Hunk #5 succeeded at 3270 (offset 16 lines). Hunk #6 succeeded at 3654 (offset 103 lines). Hunk #7 succeeded at 5040 (offset 160 lines). Hunk #8 succeeded at 6496 (offset 164 lines). Hunk #9 succeeded at 6537 (offset 164 lines). Hunk #10 succeeded at 6545 (offset 164 lines). patching file src/adapter.h Hunk #1 FAILED at 25. Hunk #2 succeeded at 69 (offset 1 line). 1 out of 2 hunks FAILED -- rejects in file src/adapter.h patching file src/btd.h patching file src/main.c Hunk #2 succeeded at 730 (offset 1 line). patching file src/main.conf Patch 0012-Support-enabling-avdtp-delayReport.patch does not apply (enforce with -f) :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: Iad34978c85d0bf4b8dab12a06489c678523ddad3 --- ...time-out-when-default-is-set-to-zero.patch | 4 +- ...t-signal-on-remote-device-disconnect.patch | 6 +-- ...evice-type-like-BLE-BREDR-from-bluez.patch | 6 +-- ...-when-device-address-type-is-BDADDR_.patch | 8 ++-- ...tem-bus-instead-of-session-for-obexd.patch | 2 +- ...tion-to-get-connected-profiles-uuids.patch | 10 ++-- ...gh-commad-support-required-for-webos.patch | 14 +++--- ...ded-dbus-signal-for-MediaPlayRequest.patch | 16 +++---- ...-getting-remote-device-features-list.patch | 14 +++--- ...-Fix-volume-property-not-able-to-set.patch | 4 +- ...-notification-not-appearing-after-12.patch | 10 ++-- ...2-Support-enabling-avdtp-delayReport.patch | 48 +++++++++---------- ...o-get-connectedUuid-s-in-case-of-inc.patch | 6 +-- ...-connected-uuids-when-profile-is-dis.patch | 6 +-- ...-getStatus-not-updated-when-unpaired.patch | 4 +- ...airing-capability-as-NoInputNoOutput.patch | 2 +- ...etting-supported-notification-events.patch | 8 ++-- ...anceName-MapInstanceProperties-parsi.patch | 18 +++---- ...pport-based-on-MAPInstance-Name-Modi.patch | 2 +- .../0020-Disabling-DB-Hash-for-Gatt.patch | 10 ++-- ...on-property-in-org.bluez.obex.Messag.patch | 2 +- ...dle-property-in-org.bluez.obex.Trans.patch | 2 +- ...nterface-for-sent-message-related-no.patch | 2 +- ...aying-return-error-when-player-not-s.patch | 4 +- ...0025-AVRCP-MediaItem-object-path-fix.patch | 2 +- ...26-Revert-a2dp-Add-reverse-discovery.patch | 8 ++-- ...support-for-meshd-to-use-RAW-channel.patch | 2 +- ...esh-fixed-ell-undefined-symbol-error.patch | 4 +- 28 files changed, 112 insertions(+), 112 deletions(-) diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0001-Fix-advertise-time-out-when-default-is-set-to-zero.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0001-Fix-advertise-time-out-when-default-is-set-to-zero.patch index 38971fb47..e016cedd3 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0001-Fix-advertise-time-out-when-default-is-set-to-zero.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0001-Fix-advertise-time-out-when-default-is-set-to-zero.patch @@ -1,4 +1,4 @@ -From 1dd0433600126f7dea30b7423a88accdbe73312f Mon Sep 17 00:00:00 2001 +From 03dd4e8508c4593749b5d9b5717c1a6a49ed3aee Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Wed, 11 Apr 2018 11:03:20 +0530 Subject: [PATCH] Fix advertise time out when default is set to zero @@ -25,7 +25,7 @@ Change-Id: I60cb0c22991efa61a800b1483e232e42beff2da2 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/src/advertising.c b/src/advertising.c -index 70e60601d..e0fd2cb57 100644 +index bd79454d5..f91c8256d 100644 --- a/src/advertising.c +++ b/src/advertising.c @@ -525,13 +525,18 @@ static bool parse_local_name(DBusMessageIter *iter, diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0002-Send-disconnect-signal-on-remote-device-disconnect.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0002-Send-disconnect-signal-on-remote-device-disconnect.patch index 83f111b47..664ac489a 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0002-Send-disconnect-signal-on-remote-device-disconnect.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0002-Send-disconnect-signal-on-remote-device-disconnect.patch @@ -1,4 +1,4 @@ -From a893234f2aa6f5376bf71cfe85221b6dbb526e1e Mon Sep 17 00:00:00 2001 +From 9421e5aab591217a8c9b3cc030e5a0657a88c98c Mon Sep 17 00:00:00 2001 From: Vibhanshu Dhote Date: Thu, 17 May 2018 18:15:48 +0530 Subject: [PATCH] Send disconnect signal on remote device disconnect @@ -26,7 +26,7 @@ Upstream-Status : Pending 1 file changed, 4 insertions(+) diff --git a/src/profile.c b/src/profile.c -index 5e460b639..a287eee66 100644 +index e1bebf1ee..36a999c7a 100644 --- a/src/profile.c +++ b/src/profile.c @@ -727,6 +727,8 @@ static GSList *custom_props = NULL; @@ -38,7 +38,7 @@ index 5e460b639..a287eee66 100644 void btd_profile_foreach(void (*func)(struct btd_profile *p, void *data), void *data) { -@@ -843,6 +845,8 @@ drop: +@@ -867,6 +869,8 @@ drop: btd_service_disconnecting_complete(conn->service, 0); } diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0003-Fetching-device-type-like-BLE-BREDR-from-bluez.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0003-Fetching-device-type-like-BLE-BREDR-from-bluez.patch index 2b6784f0f..3e0f3c8ec 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0003-Fetching-device-type-like-BLE-BREDR-from-bluez.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0003-Fetching-device-type-like-BLE-BREDR-from-bluez.patch @@ -1,4 +1,4 @@ -From 84ea8ffa177381b070518089d41b92ba8bd7b651 Mon Sep 17 00:00:00 2001 +From e18dacaa6956528dc1e0812bf6d075cf047a58bb Mon Sep 17 00:00:00 2001 From: "vijaya.sundaram" Date: Fri, 1 Jun 2018 11:43:15 +0530 Subject: [PATCH] Fetching device type like BLE, BREDR from bluez @@ -24,7 +24,7 @@ Upstream-Status : Pending 1 file changed, 17 insertions(+) diff --git a/src/device.c b/src/device.c -index 65838f59f..229e239fb 100644 +index 807106812..4253a9bae 100644 --- a/src/device.c +++ b/src/device.c @@ -206,6 +206,7 @@ struct btd_device { @@ -57,7 +57,7 @@ index 65838f59f..229e239fb 100644 static gboolean get_appearance(const GDBusPropertyTable *property, void *data, uint16_t *appearance) { -@@ -2916,6 +2932,7 @@ static const GDBusMethodTable device_methods[] = { +@@ -2979,6 +2995,7 @@ static const GDBusMethodTable device_methods[] = { static const GDBusPropertyTable device_properties[] = { { "Address", "s", dev_property_get_address }, { "AddressType", "s", property_get_address_type }, diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0004-Fix-Gatt-connect-when-device-address-type-is-BDADDR_.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0004-Fix-Gatt-connect-when-device-address-type-is-BDADDR_.patch index 386932a6e..0f4c478eb 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0004-Fix-Gatt-connect-when-device-address-type-is-BDADDR_.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0004-Fix-Gatt-connect-when-device-address-type-is-BDADDR_.patch @@ -1,4 +1,4 @@ -From 43dadeab48001c678498398ca6e50065ef3f911c Mon Sep 17 00:00:00 2001 +From f9dacdf2ec14aa02db20c73b5c2ef1d967406217 Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Sun, 22 Jul 2018 18:59:45 +0530 Subject: [PATCH] Fix Gatt connect when device address type is BDADDR_LE_PUBLIC @@ -29,10 +29,10 @@ Upstream-Status: Pending 1 file changed, 28 insertions(+) diff --git a/src/device.c b/src/device.c -index 229e239fb..0c2614fc8 100644 +index 4253a9bae..df998b815 100644 --- a/src/device.c +++ b/src/device.c -@@ -2161,6 +2161,33 @@ static DBusMessage *dev_connect(DBusConnection *conn, DBusMessage *msg, +@@ -2221,6 +2221,33 @@ static DBusMessage *dev_connect(DBusConnection *conn, DBusMessage *msg, return connect_profiles(dev, bdaddr_type, msg, NULL); } @@ -66,7 +66,7 @@ index 229e239fb..0c2614fc8 100644 static DBusMessage *connect_profile(DBusConnection *conn, DBusMessage *msg, void *user_data) { -@@ -2920,6 +2947,7 @@ static DBusMessage *cancel_pairing(DBusConnection *conn, DBusMessage *msg, +@@ -2983,6 +3010,7 @@ static DBusMessage *cancel_pairing(DBusConnection *conn, DBusMessage *msg, static const GDBusMethodTable device_methods[] = { { GDBUS_ASYNC_METHOD("Disconnect", NULL, NULL, dev_disconnect) }, { GDBUS_ASYNC_METHOD("Connect", NULL, NULL, dev_connect) }, diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0005-Use-system-bus-instead-of-session-for-obexd.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0005-Use-system-bus-instead-of-session-for-obexd.patch index 14b38f90f..6dfd0a02d 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0005-Use-system-bus-instead-of-session-for-obexd.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0005-Use-system-bus-instead-of-session-for-obexd.patch @@ -1,4 +1,4 @@ -From 7eff0e52a3013cf5b72a3664a718d9ebca8cffff Mon Sep 17 00:00:00 2001 +From 3b3f22e8b8aae2fb3596d0290c2e003651cf9112 Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Thu, 15 Nov 2018 11:08:44 +0530 Subject: [PATCH] Use system bus instead of session for obexd diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0006-Implementation-to-get-connected-profiles-uuids.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0006-Implementation-to-get-connected-profiles-uuids.patch index 8b80be36f..038df99d6 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0006-Implementation-to-get-connected-profiles-uuids.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0006-Implementation-to-get-connected-profiles-uuids.patch @@ -1,4 +1,4 @@ -From 8bdb0ebedc3d99016bf3d24423924701ae871293 Mon Sep 17 00:00:00 2001 +From 4f374f58d9e9187745f422269ee10e76d68cc47b Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Tue, 22 Jan 2019 23:25:18 +0530 Subject: [PATCH] Implementation to get connected profiles uuids @@ -25,7 +25,7 @@ Change-Id: I72834cc9b4bdd8f086565dc9a2a41006f758ad39 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/src/device.c b/src/device.c -index 0c2614fc8..1a668335e 100644 +index df998b815..03ea5cb3f 100644 --- a/src/device.c +++ b/src/device.c @@ -215,6 +215,7 @@ struct btd_device { @@ -81,7 +81,7 @@ index 0c2614fc8..1a668335e 100644 if (dev->pending == NULL) goto done; -@@ -2210,6 +2239,14 @@ static DBusMessage *connect_profile(DBusConnection *conn, DBusMessage *msg, +@@ -2270,6 +2299,14 @@ static DBusMessage *connect_profile(DBusConnection *conn, DBusMessage *msg, static void device_profile_disconnected(struct btd_device *dev, struct btd_profile *profile, int err) { @@ -96,7 +96,7 @@ index 0c2614fc8..1a668335e 100644 if (!dev->disconnect) return; -@@ -2976,6 +3013,7 @@ static const GDBusPropertyTable device_properties[] = { +@@ -3039,6 +3076,7 @@ static const GDBusPropertyTable device_properties[] = { { "RSSI", "n", dev_property_get_rssi, NULL, dev_property_exists_rssi }, { "Connected", "b", dev_property_get_connected }, { "UUIDs", "as", dev_property_get_uuids }, @@ -104,7 +104,7 @@ index 0c2614fc8..1a668335e 100644 { "Modalias", "s", dev_property_get_modalias, NULL, dev_property_exists_modalias }, { "Adapter", "o", dev_property_get_adapter }, -@@ -3054,7 +3092,17 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type) +@@ -3122,7 +3160,17 @@ void device_remove_connection(struct btd_device *device, uint8_t bdaddr_type) if (!state->connected) return; diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0007-recievePassThrough-commad-support-required-for-webos.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0007-recievePassThrough-commad-support-required-for-webos.patch index 823ac6494..28a79d538 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0007-recievePassThrough-commad-support-required-for-webos.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0007-recievePassThrough-commad-support-required-for-webos.patch @@ -1,4 +1,4 @@ -From 5d0bf8b0af49adab265e9ac8d830c17692501159 Mon Sep 17 00:00:00 2001 +From 676204a6ddf505f4fdaeeed7dc6ba373d022ab59 Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Sun, 13 Jan 2019 13:35:55 +0530 Subject: [PATCH] recievePassThrough commad support required for webos @@ -56,7 +56,7 @@ index 50de33618..abbee205f 100644 break; } diff --git a/src/device.c b/src/device.c -index 1a668335e..12053a306 100644 +index 03ea5cb3f..6d9eff031 100644 --- a/src/device.c +++ b/src/device.c @@ -171,6 +171,11 @@ enum { @@ -158,7 +158,7 @@ index 1a668335e..12053a306 100644 static void add_service_data(void *data, void *user_data) { struct eir_sd *sd = data; -@@ -3019,6 +3068,8 @@ static const GDBusPropertyTable device_properties[] = { +@@ -3082,6 +3131,8 @@ static const GDBusPropertyTable device_properties[] = { { "Adapter", "o", dev_property_get_adapter }, { "ManufacturerData", "a{qv}", dev_property_get_manufacturer_data, NULL, dev_property_manufacturer_data_exist }, @@ -167,7 +167,7 @@ index 1a668335e..12053a306 100644 { "ServiceData", "a{sv}", dev_property_get_service_data, NULL, dev_property_service_data_exist }, { "TxPower", "n", dev_property_get_tx_power, NULL, -@@ -4184,6 +4235,9 @@ static struct btd_device *device_new(struct btd_adapter *adapter, +@@ -4252,6 +4303,9 @@ static struct btd_device *device_new(struct btd_adapter *adapter, device->adapter = adapter; device->temporary = true; @@ -178,11 +178,11 @@ index 1a668335e..12053a306 100644 gatt_service_removed, device, NULL); diff --git a/src/device.h b/src/device.h -index 4ae9abe0d..7cefee6db 100644 +index 5f615cb4b..394470060 100644 --- a/src/device.h +++ b/src/device.h -@@ -177,3 +177,5 @@ void btd_device_flags_changed(struct btd_device *dev, uint32_t supported_flags, - +@@ -179,3 +179,5 @@ bool btd_device_all_services_allowed(struct btd_device *dev); + void btd_device_update_allowed_services(struct btd_device *dev); void btd_device_init(void); void btd_device_cleanup(void); + diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0008-Added-dbus-signal-for-MediaPlayRequest.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0008-Added-dbus-signal-for-MediaPlayRequest.patch index ec233b22e..8ae982546 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0008-Added-dbus-signal-for-MediaPlayRequest.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0008-Added-dbus-signal-for-MediaPlayRequest.patch @@ -1,4 +1,4 @@ -From ac7c56c3acb80d0998b65de38fb9e75a28ebffe1 Mon Sep 17 00:00:00 2001 +From bfccfdc589709c599d0db023fde9fa2bfd40de9f Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Wed, 30 Jan 2019 15:17:11 +0530 Subject: [PATCH] Added dbus signal for MediaPlayRequest @@ -29,7 +29,7 @@ Change-Id: Ib225395809a3b53f1c494ac4e21beabc47f7f906 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c -index ccf34b220..4b77536c5 100644 +index 22bd5df20..b661898ac 100644 --- a/profiles/audio/avrcp.c +++ b/profiles/audio/avrcp.c @@ -1236,6 +1236,7 @@ static uint8_t avrcp_handle_get_element_attributes(struct avrcp *session, @@ -49,7 +49,7 @@ index ccf34b220..4b77536c5 100644 } diff --git a/profiles/audio/media.c b/profiles/audio/media.c -index c84bbe22d..f36f703be 100644 +index 267722542..253029fa7 100644 --- a/profiles/audio/media.c +++ b/profiles/audio/media.c @@ -1221,7 +1221,7 @@ static uint32_t get_position(void *user_data) @@ -62,7 +62,7 @@ index c84bbe22d..f36f703be 100644 static uint32_t get_duration(void *user_data) diff --git a/src/device.c b/src/device.c -index 12053a306..ef8cdb988 100644 +index 6d9eff031..4c45b92ff 100644 --- a/src/device.c +++ b/src/device.c @@ -1948,6 +1948,22 @@ void recieve_passThrough_commands(struct btd_device *dev, const char* code, cons @@ -88,7 +88,7 @@ index 12053a306..ef8cdb988 100644 static void add_service_data(void *data, void *user_data) { struct eir_sd *sd = data; -@@ -3030,6 +3046,12 @@ static DBusMessage *cancel_pairing(DBusConnection *conn, DBusMessage *msg, +@@ -3093,6 +3109,12 @@ static DBusMessage *cancel_pairing(DBusConnection *conn, DBusMessage *msg, return dbus_message_new_method_return(msg); } @@ -101,7 +101,7 @@ index 12053a306..ef8cdb988 100644 static const GDBusMethodTable device_methods[] = { { GDBUS_ASYNC_METHOD("Disconnect", NULL, NULL, dev_disconnect) }, { GDBUS_ASYNC_METHOD("Connect", NULL, NULL, dev_connect) }, -@@ -4224,7 +4246,7 @@ static struct btd_device *device_new(struct btd_adapter *adapter, +@@ -4292,7 +4314,7 @@ static struct btd_device *device_new(struct btd_adapter *adapter, if (g_dbus_register_interface(dbus_conn, device->path, DEVICE_INTERFACE, @@ -111,10 +111,10 @@ index 12053a306..ef8cdb988 100644 device_free) == FALSE) { error("Unable to register device interface for %s", address); diff --git a/src/device.h b/src/device.h -index 7cefee6db..610767b1c 100644 +index 394470060..7fd36c6f0 100644 --- a/src/device.h +++ b/src/device.h -@@ -179,3 +179,6 @@ void btd_device_init(void); +@@ -181,3 +181,6 @@ void btd_device_init(void); void btd_device_cleanup(void); void recieve_passThrough_commands(struct btd_device *dev, const char* code, const char* state); diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0009-avrcp-getting-remote-device-features-list.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0009-avrcp-getting-remote-device-features-list.patch index 20b35fd83..982ba7e95 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0009-avrcp-getting-remote-device-features-list.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0009-avrcp-getting-remote-device-features-list.patch @@ -1,4 +1,4 @@ -From 2c6f9c649fbc3253c7895006937b4f622a79d4b5 Mon Sep 17 00:00:00 2001 +From b0d6f27988174e9e2f6f7721fcacf32a6a6d8871 Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Tue, 5 Feb 2019 18:10:55 +0530 Subject: [PATCH] avrcp getting remote device features list @@ -29,7 +29,7 @@ Change-Id: I93393e5955c745c4df3eaddf6661177410ad3a7d 3 files changed, 88 insertions(+) diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c -index 4b77536c5..5585e53f3 100644 +index b661898ac..8a1f315e8 100644 --- a/profiles/audio/avrcp.c +++ b/profiles/audio/avrcp.c @@ -4154,9 +4154,16 @@ static void target_init(struct avrcp *session) @@ -80,7 +80,7 @@ index 4b77536c5..5585e53f3 100644 } diff --git a/src/device.c b/src/device.c -index ef8cdb988..f085e5222 100644 +index 4c45b92ff..47e3d32a5 100644 --- a/src/device.c +++ b/src/device.c @@ -280,6 +280,8 @@ struct btd_device { @@ -165,7 +165,7 @@ index ef8cdb988..f085e5222 100644 static void add_service_data(void *data, void *user_data) { struct eir_sd *sd = data; -@@ -3092,6 +3153,10 @@ static const GDBusPropertyTable device_properties[] = { +@@ -3155,6 +3216,10 @@ static const GDBusPropertyTable device_properties[] = { NULL, dev_property_manufacturer_data_exist }, { "KeyCode", "a{sv}", dev_property_get_key_code, NULL, dev_property_key_code_exist}, @@ -176,7 +176,7 @@ index ef8cdb988..f085e5222 100644 { "ServiceData", "a{sv}", dev_property_get_service_data, NULL, dev_property_service_data_exist }, { "TxPower", "n", dev_property_get_tx_power, NULL, -@@ -4260,6 +4325,9 @@ static struct btd_device *device_new(struct btd_adapter *adapter, +@@ -4328,6 +4393,9 @@ static struct btd_device *device_new(struct btd_adapter *adapter, device->passththough_key.state = NULL; device->passththough_key.key = NULL; @@ -187,7 +187,7 @@ index ef8cdb988..f085e5222 100644 gatt_service_removed, device, NULL); diff --git a/src/device.h b/src/device.h -index 610767b1c..ea28e8bd4 100644 +index 7fd36c6f0..713601a20 100644 --- a/src/device.h +++ b/src/device.h @@ -10,6 +10,10 @@ @@ -201,7 +201,7 @@ index 610767b1c..ea28e8bd4 100644 struct btd_device; -@@ -182,3 +186,4 @@ void recieve_passThrough_commands(struct btd_device *dev, const char* code, cons +@@ -184,3 +188,4 @@ void recieve_passThrough_commands(struct btd_device *dev, const char* code, cons void media_play_request(struct btd_device *dev); void media_metadata_request(struct btd_device *dev); diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0010-Fix-volume-property-not-able-to-set.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0010-Fix-volume-property-not-able-to-set.patch index 24ac125ef..ee625dcd0 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0010-Fix-volume-property-not-able-to-set.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0010-Fix-volume-property-not-able-to-set.patch @@ -1,4 +1,4 @@ -From 98fcab5b34563119e7b408049015f4a25c78bfba Mon Sep 17 00:00:00 2001 +From 1c9aa46305ff947d0e1f9d9de5ec0c531618ec35 Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Mon, 21 Jan 2019 12:44:19 +0530 Subject: [PATCH] Fix volume property not able to set @@ -26,7 +26,7 @@ Change-Id: I183357a5de4b95a6e02d39d9d51c4af715bf0a54 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c -index 8248014ae..c6c17d039 100644 +index d158fc97a..9bb98a0d4 100644 --- a/profiles/audio/transport.c +++ b/profiles/audio/transport.c @@ -810,7 +810,7 @@ static int media_transport_init_source(struct media_transport *transport) diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0011-Fix-volume-level-notification-not-appearing-after-12.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0011-Fix-volume-level-notification-not-appearing-after-12.patch index f46f7c956..cca9b7a8b 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0011-Fix-volume-level-notification-not-appearing-after-12.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0011-Fix-volume-level-notification-not-appearing-after-12.patch @@ -1,4 +1,4 @@ -From 5050f49dc510bd9522abb3cb05a08d67bc93ddec Mon Sep 17 00:00:00 2001 +From 2bb17d9ea3ec4b0a08c6c1a24458ec5cd19e4c77 Mon Sep 17 00:00:00 2001 From: Sameer Mulla Date: Tue, 10 Dec 2019 16:15:43 +0530 Subject: [PATCH] Fix volume level notification not appearing after 127 @@ -28,7 +28,7 @@ Upstream-Status: Inappropriate[webos specific] 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/profiles/audio/media.c b/profiles/audio/media.c -index f36f703be..3727484a2 100644 +index 253029fa7..d790a6c95 100644 --- a/profiles/audio/media.c +++ b/profiles/audio/media.c @@ -1235,8 +1235,8 @@ static void set_volume(int8_t volume, struct btd_device *dev, void *user_data) @@ -43,7 +43,7 @@ index f36f703be..3727484a2 100644 mp->volume = volume; } diff --git a/profiles/audio/transport.c b/profiles/audio/transport.c -index c6c17d039..f2f6301ca 100644 +index 9bb98a0d4..aa4863cea 100644 --- a/profiles/audio/transport.c +++ b/profiles/audio/transport.c @@ -656,8 +656,8 @@ static void set_volume(const GDBusPropertyTable *property, @@ -55,8 +55,8 @@ index c6c17d039..f2f6301ca 100644 + /*if (a2dp->volume == volume) + return;*/ - a2dp->volume = volume; - + notify = transport->source_watch ? true : false; + if (notify) { @@ -932,8 +932,8 @@ void media_transport_update_volume(struct media_transport *transport, return; diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0012-Support-enabling-avdtp-delayReport.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0012-Support-enabling-avdtp-delayReport.patch index 6107fcc01..3602861f0 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0012-Support-enabling-avdtp-delayReport.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0012-Support-enabling-avdtp-delayReport.patch @@ -1,4 +1,4 @@ -From c23629ff72b5ccaa916163f3037385c2ec7f3e40 Mon Sep 17 00:00:00 2001 +From ebeea279617a5456568baac5febd68beb9bc8361 Mon Sep 17 00:00:00 2001 From: "sameer.mulla" Date: Thu, 4 Jun 2020 04:49:48 +0000 Subject: [PATCH] Support enabling avdtp delayReport @@ -34,10 +34,10 @@ Upstream Status: Pending 11 files changed, 104 insertions(+) diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c -index d31ed845c..dc9858f91 100644 +index 02caa83e1..30638ae2f 100644 --- a/profiles/audio/a2dp.c +++ b/profiles/audio/a2dp.c -@@ -2195,6 +2195,14 @@ found: +@@ -2333,6 +2333,14 @@ found: return avdtp_ref(chan->session); } @@ -65,7 +65,7 @@ index 615b641c9..af67ee6ee 100644 const char *a2dp_setup_remote_path(struct a2dp_setup *setup); struct avdtp *a2dp_avdtp_get(struct btd_device *device); diff --git a/profiles/audio/avdtp.c b/profiles/audio/avdtp.c -index c7bf99f42..9d9e4510c 100644 +index 946231b71..e7d5b46f8 100644 --- a/profiles/audio/avdtp.c +++ b/profiles/audio/avdtp.c @@ -470,6 +470,11 @@ static gboolean try_send(int sk, void *data, size_t len) @@ -81,16 +81,16 @@ index c7bf99f42..9d9e4510c 100644 uint8_t message_type, uint8_t signal_id, void *data, size_t len) diff --git a/profiles/audio/avdtp.h b/profiles/audio/avdtp.h -index b29d0621a..fc35346eb 100644 +index b02534cd5..db45fdb92 100644 --- a/profiles/audio/avdtp.h +++ b/profiles/audio/avdtp.h -@@ -306,3 +306,4 @@ struct avdtp_server *avdtp_get_server(struct avdtp_local_sep *lsep); +@@ -308,3 +308,4 @@ struct avdtp_server *avdtp_get_server(struct avdtp_local_sep *lsep); struct avdtp *avdtp_new(GIOChannel *chan, struct btd_device *device, struct queue *lseps); uint16_t avdtp_get_version(struct avdtp *session); +void avdtp_local_sep_set_delay_report(struct avdtp_local_sep *lsep, bool delay_reporting); diff --git a/profiles/audio/media.c b/profiles/audio/media.c -index 3727484a2..ffcd0398c 100644 +index d790a6c95..477239697 100644 --- a/profiles/audio/media.c +++ b/profiles/audio/media.c @@ -120,6 +120,19 @@ struct media_player { @@ -123,7 +123,7 @@ index 3727484a2..ffcd0398c 100644 if (strcasecmp(uuid, A2DP_SOURCE_UUID) == 0) succeeded = endpoint_init_a2dp_source(endpoint, -@@ -2414,6 +2430,7 @@ int media_register(struct btd_adapter *btd_adapter) +@@ -2417,6 +2433,7 @@ int media_register(struct btd_adapter *btd_adapter) return -1; } @@ -149,7 +149,7 @@ index 96bea9db4..e9d10fd3c 100644 int8_t media_player_get_device_volume(struct btd_device *device); +void media_set_delay_reporting(struct media_adapter* adapter, bool delay_reporting); diff --git a/src/adapter.c b/src/adapter.c -index 98fc78f1e..bc028bf1b 100644 +index ddd896751..f6d3788bd 100644 --- a/src/adapter.c +++ b/src/adapter.c @@ -68,6 +68,7 @@ @@ -170,7 +170,7 @@ index 98fc78f1e..bc028bf1b 100644 uint8_t discovery_type; /* current active discovery type */ uint8_t discovery_enable; /* discovery enabled/disabled */ bool discovery_suspended; /* discovery has been suspended */ -@@ -291,6 +295,11 @@ typedef enum { +@@ -294,6 +298,11 @@ typedef enum { ADAPTER_AUTHORIZE_CHECK_CONNECTED } adapter_authorize_type; @@ -182,7 +182,7 @@ index 98fc78f1e..bc028bf1b 100644 static struct btd_adapter *btd_adapter_lookup(uint16_t index) { GList *list; -@@ -492,6 +501,8 @@ static void store_adapter_info(struct btd_adapter *adapter) +@@ -495,6 +504,8 @@ static void store_adapter_info(struct btd_adapter *adapter) g_key_file_set_boolean(key_file, "General", "Discoverable", discoverable); @@ -191,7 +191,7 @@ index 98fc78f1e..bc028bf1b 100644 if (adapter->discoverable_timeout != btd_opts.discovto) g_key_file_set_integer(key_file, "General", -@@ -3243,6 +3254,30 @@ static gboolean property_get_roles(const GDBusPropertyTable *property, +@@ -3259,6 +3270,30 @@ static gboolean property_get_roles(const GDBusPropertyTable *property, return TRUE; } @@ -222,7 +222,7 @@ index 98fc78f1e..bc028bf1b 100644 static DBusMessage *remove_device(DBusConnection *conn, DBusMessage *msg, void *user_data) -@@ -3516,6 +3551,7 @@ static const GDBusPropertyTable adapter_properties[] = { +@@ -3619,6 +3654,7 @@ static const GDBusPropertyTable adapter_properties[] = { { "Modalias", "s", property_get_modalias, NULL, property_exists_modalias }, { "Roles", "as", property_get_roles }, @@ -230,7 +230,7 @@ index 98fc78f1e..bc028bf1b 100644 { } }; -@@ -4844,6 +4880,11 @@ bool btd_adapter_get_bredr(struct btd_adapter *adapter) +@@ -5004,6 +5040,11 @@ bool btd_adapter_get_bredr(struct btd_adapter *adapter) return false; } @@ -242,7 +242,7 @@ index 98fc78f1e..bc028bf1b 100644 struct btd_gatt_database *btd_adapter_get_database(struct btd_adapter *adapter) { if (!adapter) -@@ -6291,6 +6332,15 @@ static void load_config(struct btd_adapter *adapter) +@@ -6455,6 +6496,15 @@ static void load_config(struct btd_adapter *adapter) gerr = NULL; } @@ -258,7 +258,7 @@ index 98fc78f1e..bc028bf1b 100644 g_key_file_free(key_file); } -@@ -6323,6 +6373,7 @@ static struct btd_adapter *btd_adapter_new(uint16_t index) +@@ -6487,6 +6537,7 @@ static struct btd_adapter *btd_adapter_new(uint16_t index) btd_opts.did_version); adapter->discoverable_timeout = btd_opts.discovto; adapter->pairable_timeout = btd_opts.pairto; @@ -266,7 +266,7 @@ index 98fc78f1e..bc028bf1b 100644 DBG("System name: %s", adapter->system_name); DBG("Major class: %u", adapter->major_class); -@@ -6330,6 +6381,7 @@ static struct btd_adapter *btd_adapter_new(uint16_t index) +@@ -6494,6 +6545,7 @@ static struct btd_adapter *btd_adapter_new(uint16_t index) DBG("Modalias: %s", adapter->modalias); DBG("Discoverable timeout: %u seconds", adapter->discoverable_timeout); DBG("Pairable timeout: %u seconds", adapter->pairable_timeout); @@ -275,18 +275,18 @@ index 98fc78f1e..bc028bf1b 100644 adapter->auths = g_queue_new(); diff --git a/src/adapter.h b/src/adapter.h -index 60b5e3bcc..09f2d0806 100644 +index 35fa9fc5f..3829e61c4 100644 --- a/src/adapter.h +++ b/src/adapter.h -@@ -25,6 +25,7 @@ - +@@ -26,6 +26,7 @@ struct btd_adapter; struct btd_device; + struct queue; +struct media_adapter; struct btd_adapter *btd_adapter_get_default(void); bool btd_adapter_is_default(struct btd_adapter *adapter); -@@ -68,6 +69,8 @@ bool btd_adapter_get_powered(struct btd_adapter *adapter); +@@ -69,6 +70,8 @@ bool btd_adapter_get_powered(struct btd_adapter *adapter); bool btd_adapter_get_connectable(struct btd_adapter *adapter); bool btd_adapter_get_discoverable(struct btd_adapter *adapter); bool btd_adapter_get_bredr(struct btd_adapter *adapter); @@ -308,7 +308,7 @@ index d72883546..3ebd873c9 100644 uint16_t did_source; uint16_t did_vendor; diff --git a/src/main.c b/src/main.c -index 516509e3f..22f258b47 100644 +index bf8b8dca7..55bc82464 100644 --- a/src/main.c +++ b/src/main.c @@ -77,6 +77,7 @@ static const char *supported_options[] = { @@ -319,7 +319,7 @@ index 516509e3f..22f258b47 100644 "Privacy", "JustWorksRepairing", "TemporaryTimeout", -@@ -728,6 +729,16 @@ static void parse_config(GKeyFile *config) +@@ -729,6 +730,16 @@ static void parse_config(GKeyFile *config) else btd_opts.experimental = boolean; @@ -337,7 +337,7 @@ index 516509e3f..22f258b47 100644 if (err) { DBG("%s", err->message); diff --git a/src/main.conf b/src/main.conf -index 198899541..121844048 100644 +index 71924cb17..648a97364 100644 --- a/src/main.conf +++ b/src/main.conf @@ -65,6 +65,9 @@ diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0013-Implementation-to-get-connectedUuid-s-in-case-of-inc.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0013-Implementation-to-get-connectedUuid-s-in-case-of-inc.patch index 3c1fadf8b..c0126b8cf 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0013-Implementation-to-get-connectedUuid-s-in-case-of-inc.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0013-Implementation-to-get-connectedUuid-s-in-case-of-inc.patch @@ -1,4 +1,4 @@ -From 66f2ee3bab9593047d6f3daa43b3b762ebcbbfcc Mon Sep 17 00:00:00 2001 +From 77239e9a5b0ac163b9e74c83b2de896923038431 Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Mon, 6 Apr 2020 12:14:43 +0530 Subject: [PATCH] Implementation to get connectedUuid's in case of incoming @@ -24,10 +24,10 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/device.c b/src/device.c -index f085e5222..ac6f779d6 100644 +index 47e3d32a5..b2adca49b 100644 --- a/src/device.c +++ b/src/device.c -@@ -7125,9 +7125,11 @@ static void service_state_changed(struct btd_service *service, +@@ -7193,9 +7193,11 @@ static void service_state_changed(struct btd_service *service, new_state == BTD_SERVICE_STATE_DISCONNECTING) return; diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0014-Fix-for-updating-connected-uuids-when-profile-is-dis.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0014-Fix-for-updating-connected-uuids-when-profile-is-dis.patch index a3e93ec47..ed75b15a8 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0014-Fix-for-updating-connected-uuids-when-profile-is-dis.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0014-Fix-for-updating-connected-uuids-when-profile-is-dis.patch @@ -1,4 +1,4 @@ -From a534d41fa45cbc263ee5b043af47aa3b01255ed8 Mon Sep 17 00:00:00 2001 +From f3ed5f4a74883a5b8f84073f79366a7c09f33969 Mon Sep 17 00:00:00 2001 From: "ramya.hegde" Date: Tue, 14 Apr 2020 15:28:07 +0530 Subject: [PATCH] Fix for updating connected uuids when profile is disconnected @@ -23,10 +23,10 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/device.c b/src/device.c -index ac6f779d6..20e86e3eb 100644 +index b2adca49b..2079b6c86 100644 --- a/src/device.c +++ b/src/device.c -@@ -2368,7 +2368,10 @@ static void device_profile_disconnected(struct btd_device *dev, +@@ -2428,7 +2428,10 @@ static void device_profile_disconnected(struct btd_device *dev, DBG("%s %s (%d)", profile->name, strerror(-err), -err); if (!err) { if (dev->connected_uuids) diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0015-Fix-device-getStatus-not-updated-when-unpaired.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0015-Fix-device-getStatus-not-updated-when-unpaired.patch index 87834b387..0cfa287bf 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0015-Fix-device-getStatus-not-updated-when-unpaired.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0015-Fix-device-getStatus-not-updated-when-unpaired.patch @@ -1,4 +1,4 @@ -From 4fef670216ec019ce347e310a38b9d1c0a6aff73 Mon Sep 17 00:00:00 2001 +From c88d704fdf7d2ab162f16f81f97dd87ced6c8566 Mon Sep 17 00:00:00 2001 From: Sameer Mulla Date: Mon, 27 Apr 2020 11:56:21 +0530 Subject: [PATCH] Fix device/getStatus not updated when unpaired @@ -28,7 +28,7 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/device.c b/src/device.c -index 20e86e3eb..567b3e504 100644 +index 2079b6c86..87ef87aed 100644 --- a/src/device.c +++ b/src/device.c @@ -1861,13 +1861,13 @@ static void device_profile_connected(struct btd_device *dev, diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0016-Set-default-pairing-capability-as-NoInputNoOutput.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0016-Set-default-pairing-capability-as-NoInputNoOutput.patch index ac213e63f..c713c65e3 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0016-Set-default-pairing-capability-as-NoInputNoOutput.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0016-Set-default-pairing-capability-as-NoInputNoOutput.patch @@ -1,4 +1,4 @@ -From d0e222205317404684c21a577368854b31b7db33 Mon Sep 17 00:00:00 2001 +From c40d4b4ffc71557a1fc69cf078936efa9224c298 Mon Sep 17 00:00:00 2001 From: "sungmok.shin" Date: Mon, 20 Apr 2020 19:24:45 +0900 Subject: [PATCH] Set default pairing capability as "NoInputNoOutput" diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0017-AVRCP-getting-supported-notification-events.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0017-AVRCP-getting-supported-notification-events.patch index f470a9659..b2a73b762 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0017-AVRCP-getting-supported-notification-events.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0017-AVRCP-getting-supported-notification-events.patch @@ -1,4 +1,4 @@ -From 7497dded069e70cff6c6d5b54e5d51b51d7c9e9a Mon Sep 17 00:00:00 2001 +From b632ec0b8e4a5584e6e7b6ab378d2c3b7330ed53 Mon Sep 17 00:00:00 2001 From: "ramya.hegde" Date: Mon, 11 May 2020 15:54:12 +0530 Subject: [PATCH] AVRCP getting supported notification events @@ -26,7 +26,7 @@ Upstream-Status: Inappropriate[webos specific] 2 files changed, 22 insertions(+) diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c -index 5585e53f3..dbac46e24 100644 +index 8a1f315e8..fc588205d 100644 --- a/profiles/audio/avrcp.c +++ b/profiles/audio/avrcp.c @@ -3991,6 +3991,7 @@ static gboolean avrcp_get_capabilities_resp(struct avctp *conn, uint8_t code, @@ -38,7 +38,7 @@ index 5585e53f3..dbac46e24 100644 if (!session->controller || !session->controller->player) return FALSE; diff --git a/src/device.c b/src/device.c -index 567b3e504..064983f32 100644 +index 87ef87aed..7383781ff 100644 --- a/src/device.c +++ b/src/device.c @@ -282,6 +282,7 @@ struct btd_device { @@ -82,7 +82,7 @@ index 567b3e504..064983f32 100644 static void add_service_data(void *data, void *user_data) { struct eir_sd *sd = data; -@@ -3160,6 +3180,7 @@ static const GDBusPropertyTable device_properties[] = { +@@ -3223,6 +3243,7 @@ static const GDBusPropertyTable device_properties[] = { NULL, dev_property_avrcp_ct_feature_exist}, { "AvrcpTGFeatures", "y", dev_property_get_avrcp_tg_feature, NULL, dev_property_avrcp_tg_feature_exist}, diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0018-Modified-MapInstanceName-MapInstanceProperties-parsi.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0018-Modified-MapInstanceName-MapInstanceProperties-parsi.patch index f56b8c00c..6e0bf1e66 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0018-Modified-MapInstanceName-MapInstanceProperties-parsi.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0018-Modified-MapInstanceName-MapInstanceProperties-parsi.patch @@ -1,4 +1,4 @@ -From aebe942d6fac0ec898e82b88d6d7d27c5e63f593 Mon Sep 17 00:00:00 2001 +From 0f0f4ef9a7339121fffd053be24f0bb12f1fe74a Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Tue, 14 Jul 2020 10:37:18 +0900 Subject: [PATCH] Modified MapInstanceName & MapInstanceProperties parsing and @@ -24,7 +24,7 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 167 insertions(+), 1 deletion(-) diff --git a/src/device.c b/src/device.c -index 064983f32..854d81df7 100644 +index 7383781ff..178a7f895 100644 --- a/src/device.c +++ b/src/device.c @@ -220,6 +220,8 @@ struct btd_device { @@ -146,7 +146,7 @@ index 064983f32..854d81df7 100644 static gboolean dev_property_get_modalias(const GDBusPropertyTable *property, DBusMessageIter *iter, void *data) { -@@ -3195,6 +3272,8 @@ static const GDBusPropertyTable device_properties[] = { +@@ -3258,6 +3335,8 @@ static const GDBusPropertyTable device_properties[] = { { "WakeAllowed", "b", dev_property_get_wake_allowed, dev_property_set_wake_allowed, dev_property_wake_allowed_exist }, @@ -155,7 +155,7 @@ index 064983f32..854d81df7 100644 { } }; -@@ -3440,6 +3519,32 @@ static void load_services(struct btd_device *device, char **uuids) +@@ -3508,6 +3587,32 @@ static void load_services(struct btd_device *device, char **uuids) g_strfreev(uuids); } @@ -188,7 +188,7 @@ index 064983f32..854d81df7 100644 static void convert_info(struct btd_device *device, GKeyFile *key_file) { char filename[PATH_MAX]; -@@ -3487,7 +3592,7 @@ static void load_info(struct btd_device *device, const char *local, +@@ -3555,7 +3660,7 @@ static void load_info(struct btd_device *device, const char *local, gboolean store_needed = FALSE; gboolean blocked; gboolean wake_allowed; @@ -197,7 +197,7 @@ index 064983f32..854d81df7 100644 int source, vendor, product, version; char **techno, **t; -@@ -3583,6 +3688,23 @@ next: +@@ -3651,6 +3756,23 @@ next: device->bredr_state.svc_resolved = true; } @@ -221,7 +221,7 @@ index 064983f32..854d81df7 100644 /* Load device id */ source = g_key_file_get_integer(key_file, "DeviceID", "Source", NULL); if (source) { -@@ -5072,6 +5194,29 @@ static int update_record(struct browse_req *req, const char *uuid, +@@ -5146,6 +5268,29 @@ static int update_record(struct browse_req *req, const char *uuid, return 0; } @@ -251,7 +251,7 @@ index 064983f32..854d81df7 100644 static void update_bredr_services(struct browse_req *req, sdp_list_t *recs) { struct btd_device *device = req->device; -@@ -5114,6 +5259,23 @@ static void update_bredr_services(struct browse_req *req, sdp_list_t *recs) +@@ -5188,6 +5333,23 @@ static void update_bredr_services(struct browse_req *req, sdp_list_t *recs) if (!profile_uuid) continue; @@ -275,7 +275,7 @@ index 064983f32..854d81df7 100644 if (bt_uuid_strcmp(profile_uuid, PNP_UUID) == 0) { uint16_t source, vendor, product, version; sdp_data_t *pdlist; -@@ -5284,6 +5446,10 @@ static void search_cb(sdp_list_t *recs, int err, gpointer user_data) +@@ -5358,6 +5520,10 @@ static void search_cb(sdp_list_t *recs, int err, gpointer user_data) /* Propagate services changes */ g_dbus_emit_property_changed(dbus_conn, req->device->path, DEVICE_INTERFACE, "UUIDs"); diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0019-Enabled-EMAIL-support-based-on-MAPInstance-Name-Modi.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0019-Enabled-EMAIL-support-based-on-MAPInstance-Name-Modi.patch index 8e384b701..237252867 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0019-Enabled-EMAIL-support-based-on-MAPInstance-Name-Modi.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0019-Enabled-EMAIL-support-based-on-MAPInstance-Name-Modi.patch @@ -1,4 +1,4 @@ -From ce141de2319a0649dce22a9243f98625ec90b747 Mon Sep 17 00:00:00 2001 +From b09fd4cebf24f20e1ff7523af24cb24479b5a4ef Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Wed, 3 Jun 2020 18:08:39 +0530 Subject: [PATCH] Enabled EMAIL support based on MAPInstance Name Modified diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0020-Disabling-DB-Hash-for-Gatt.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0020-Disabling-DB-Hash-for-Gatt.patch index 2f88ad720..aa438f8c3 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0020-Disabling-DB-Hash-for-Gatt.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0020-Disabling-DB-Hash-for-Gatt.patch @@ -1,4 +1,4 @@ -From 8dd6692f49afc280f2e8e7f999cc3dffed653d01 Mon Sep 17 00:00:00 2001 +From 25657e8566fb0dbe45665b9f8ff20da52b3529e0 Mon Sep 17 00:00:00 2001 From: Vibhanshu Dhote Date: Tue, 28 Jul 2020 16:04:27 +0530 Subject: [PATCH] Disabling DB Hash for Gatt @@ -22,10 +22,10 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/gatt-database.c b/src/gatt-database.c -index be6dfb265..43589e856 100644 +index 99c95f2d6..6680465b0 100644 --- a/src/gatt-database.c +++ b/src/gatt-database.c -@@ -1141,11 +1141,13 @@ static void db_hash_read_cb(struct gatt_db_attribute *attrib, +@@ -1164,11 +1164,13 @@ static void db_hash_read_cb(struct gatt_db_attribute *attrib, hash = gatt_db_get_hash(database->db); @@ -40,7 +40,7 @@ index be6dfb265..43589e856 100644 state = find_device_state(database, &bdaddr, bdaddr_type); if (state) state->change_aware = true; -@@ -1201,6 +1203,7 @@ static void populate_gatt_service(struct btd_gatt_database *database) +@@ -1224,6 +1226,7 @@ static void populate_gatt_service(struct btd_gatt_database *database) gatt_db_attribute_set_fixed_length(database->cli_feat, CLI_FEAT_SIZE); /* Only expose database hash chrc if supported */ @@ -48,7 +48,7 @@ index be6dfb265..43589e856 100644 if (gatt_db_hash_support(database->db)) { bt_uuid16_create(&uuid, GATT_CHARAC_DB_HASH); database->db_hash = gatt_db_service_add_characteristic(service, -@@ -1208,6 +1211,7 @@ static void populate_gatt_service(struct btd_gatt_database *database) +@@ -1231,6 +1234,7 @@ static void populate_gatt_service(struct btd_gatt_database *database) db_hash_read_cb, NULL, database); gatt_db_attribute_set_fixed_length(database->db_hash, 16); } diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0021-Added-Notification-property-in-org.bluez.obex.Messag.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0021-Added-Notification-property-in-org.bluez.obex.Messag.patch index 90154fd44..070083b07 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0021-Added-Notification-property-in-org.bluez.obex.Messag.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0021-Added-Notification-property-in-org.bluez.obex.Messag.patch @@ -1,4 +1,4 @@ -From 77c01a73a7cb138fd1abec4a2e41383d43211b53 Mon Sep 17 00:00:00 2001 +From 0a4d5b6f91891046a8935b89663fc4865445d271 Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Fri, 7 Aug 2020 18:32:03 +0530 Subject: [PATCH] Added Notification property in org.bluez.obex.MessageAccess1 diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0022-Added-MessageHandle-property-in-org.bluez.obex.Trans.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0022-Added-MessageHandle-property-in-org.bluez.obex.Trans.patch index a2bc5423d..e861c01dc 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0022-Added-MessageHandle-property-in-org.bluez.obex.Trans.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0022-Added-MessageHandle-property-in-org.bluez.obex.Trans.patch @@ -1,4 +1,4 @@ -From b940ef74df1282dd31bcd31c2f7c855023d13d78 Mon Sep 17 00:00:00 2001 +From d75ddaf20e6eca7e96ab3aa7d84a845b25ae1e05 Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Mon, 10 Aug 2020 13:27:14 +0530 Subject: [PATCH] Added MessageHandle property in org.bluez.obex.Transfer1 diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0023-Create-Message-interface-for-sent-message-related-no.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0023-Create-Message-interface-for-sent-message-related-no.patch index 7ff220163..bb64009e5 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0023-Create-Message-interface-for-sent-message-related-no.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0023-Create-Message-interface-for-sent-message-related-no.patch @@ -1,4 +1,4 @@ -From 1b4888273e17cf5262c808204dbee675bbc12f86 Mon Sep 17 00:00:00 2001 +From 4760c54d961ed2cefd1b8aaeffa99bb66a63392c Mon Sep 17 00:00:00 2001 From: Rakes Pani Date: Mon, 10 Aug 2020 16:21:17 +0530 Subject: [PATCH] Create Message interface for sent message related diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0024-AVRCP-addToNowPlaying-return-error-when-player-not-s.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0024-AVRCP-addToNowPlaying-return-error-when-player-not-s.patch index 9db0045b0..f05e67d48 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0024-AVRCP-addToNowPlaying-return-error-when-player-not-s.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0024-AVRCP-addToNowPlaying-return-error-when-player-not-s.patch @@ -1,4 +1,4 @@ -From c443899c6717b7c456ac387b26bfde6174d267c5 Mon Sep 17 00:00:00 2001 +From 36d5aad241425cc3b8b327c3337830bcc4932633 Mon Sep 17 00:00:00 2001 From: "ramya.hegde" Date: Tue, 11 Aug 2020 15:18:43 +0530 Subject: [PATCH] AVRCP addToNowPlaying return error when player not supports @@ -26,7 +26,7 @@ Upstream-Status: Inappropriate[webos specific] 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/profiles/audio/avrcp.c b/profiles/audio/avrcp.c -index dbac46e24..24fdc2185 100644 +index fc588205d..890a926c8 100644 --- a/profiles/audio/avrcp.c +++ b/profiles/audio/avrcp.c @@ -2900,6 +2900,9 @@ static void avrcp_player_parse_features(struct avrcp_player *player, diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0025-AVRCP-MediaItem-object-path-fix.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0025-AVRCP-MediaItem-object-path-fix.patch index 6d654ffe0..08867dab5 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0025-AVRCP-MediaItem-object-path-fix.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0025-AVRCP-MediaItem-object-path-fix.patch @@ -1,4 +1,4 @@ -From feead0cea1521ded048092b09e26857c5e3ccb00 Mon Sep 17 00:00:00 2001 +From bf425499d623dbc1706baf5e209a99af3021484b Mon Sep 17 00:00:00 2001 From: "ramya.hegde" Date: Tue, 3 Nov 2020 11:32:38 +0530 Subject: [PATCH] AVRCP MediaItem object path fix diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0026-Revert-a2dp-Add-reverse-discovery.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0026-Revert-a2dp-Add-reverse-discovery.patch index 0ac68d37d..df37428eb 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0026-Revert-a2dp-Add-reverse-discovery.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0026-Revert-a2dp-Add-reverse-discovery.patch @@ -1,4 +1,4 @@ -From 2e21e494a1c040269ea244a9c6fff6b358d36d32 Mon Sep 17 00:00:00 2001 +From 7c666a5ea8aae7a429c0c7c2bdd098193e761be4 Mon Sep 17 00:00:00 2001 From: Sameer Mulla Date: Thu, 12 Nov 2020 15:04:36 +0530 Subject: [PATCH] Revert "a2dp: Add reverse discovery" @@ -28,10 +28,10 @@ Upstream Status: Pending 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/profiles/audio/a2dp.c b/profiles/audio/a2dp.c -index dc9858f91..61110d8c4 100644 +index 30638ae2f..c6ca5c24c 100644 --- a/profiles/audio/a2dp.c +++ b/profiles/audio/a2dp.c -@@ -586,12 +586,6 @@ static gboolean endpoint_match_codec_ind(struct avdtp *session, +@@ -622,12 +622,6 @@ static gboolean endpoint_match_codec_ind(struct avdtp *session, return TRUE; } @@ -44,7 +44,7 @@ index dc9858f91..61110d8c4 100644 static gboolean endpoint_setconf_ind(struct avdtp *session, struct avdtp_local_sep *sep, struct avdtp_stream *stream, -@@ -647,14 +641,8 @@ static gboolean endpoint_setconf_ind(struct avdtp *session, +@@ -683,14 +677,8 @@ static gboolean endpoint_setconf_ind(struct avdtp *session, setup_ref(setup), endpoint_setconf_cb, a2dp_sep->user_data); diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0027-Add-support-for-meshd-to-use-RAW-channel.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0027-Add-support-for-meshd-to-use-RAW-channel.patch index 1534c16ed..3ffb951cb 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0027-Add-support-for-meshd-to-use-RAW-channel.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0027-Add-support-for-meshd-to-use-RAW-channel.patch @@ -1,4 +1,4 @@ -From 95d5bc2cdc3e2c7938e252f4b8058122640bbfc6 Mon Sep 17 00:00:00 2001 +From f159e3d01cf6f88d5039422b210d19ca931c4e65 Mon Sep 17 00:00:00 2001 From: "ramya.hegde" Date: Mon, 25 Jan 2021 16:27:58 +0530 Subject: [PATCH] Add support for meshd to use RAW channel diff --git a/meta-webos/recipes-connectivity/bluez5/bluez5/0028-Enable-mesh-fixed-ell-undefined-symbol-error.patch b/meta-webos/recipes-connectivity/bluez5/bluez5/0028-Enable-mesh-fixed-ell-undefined-symbol-error.patch index 8ffd0de5b..8f92c51d0 100644 --- a/meta-webos/recipes-connectivity/bluez5/bluez5/0028-Enable-mesh-fixed-ell-undefined-symbol-error.patch +++ b/meta-webos/recipes-connectivity/bluez5/bluez5/0028-Enable-mesh-fixed-ell-undefined-symbol-error.patch @@ -1,4 +1,4 @@ -From b66c8b97636d7c47bf5c4142e4ddd8de0807dddf Mon Sep 17 00:00:00 2001 +From 54951be75f8b7587b3fbbd177bc767da43765bea Mon Sep 17 00:00:00 2001 From: "shoyeb.khan" Date: Wed, 27 Jan 2021 03:34:27 +0530 Subject: [PATCH] Enable mesh & fixed ell undefined symbol error @@ -25,7 +25,7 @@ Upstream-Status: Inappropriate[webos specific] 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile.am b/Makefile.am -index 497f05f06..6009ca398 100644 +index 0fd405e8c..441f08ba4 100644 --- a/Makefile.am +++ b/Makefile.am @@ -666,7 +666,7 @@ ell/internal: Makefile From 5107b62ad03ca4d94702688e80158f75a60deb97 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 27 Aug 2021 06:14:27 -0700 Subject: [PATCH 0606/2022] busybox: update the patches to apply on 1.34.0 version from oe-core :Release Notes: :Detailed Notes: Fixes: ERROR: busybox-1.34.0-r0 do_patch: Command Error: 'quilt --quiltrc /jenkins/mjansa/build/webos/honister/BUILD/work/qemux86-webos-linux/busybox/1.34.0-r0/recipe-sysroot-native/etc/quiltrc push' exited with 0 Output: stdout: Applying patch 0003-libedit-check-for-null-before-passing-cmdedit_prompt.patch patching file libbb/lineedit.c Hunk #1 FAILED at 460. 1 out of 1 hunk FAILED -- rejects in file libbb/lineedit.c Patch 0003-libedit-check-for-null-before-passing-cmdedit_prompt.patch does not apply (enforce with -f) :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: I1edd9164533a34c208e6535fb18122a1153bcdbf --- .../busybox/busybox/0001-Add-tzset-applet.patch | 2 +- .../0002-date-add-support-for-options-U-and-S.patch | 2 +- ...dit-check-for-null-before-passing-cmdedit_prompt.patch | 8 ++++---- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/meta-webos/recipes-core/busybox/busybox/0001-Add-tzset-applet.patch b/meta-webos/recipes-core/busybox/busybox/0001-Add-tzset-applet.patch index 60cf2a4c2..d2558f58e 100644 --- a/meta-webos/recipes-core/busybox/busybox/0001-Add-tzset-applet.patch +++ b/meta-webos/recipes-core/busybox/busybox/0001-Add-tzset-applet.patch @@ -1,4 +1,4 @@ -From 0b7ccc8f4c62c1c11593de542200e5974d5551e5 Mon Sep 17 00:00:00 2001 +From c4c67ae0387d4b99044d733128188df4ee337697 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 6 Nov 2017 17:22:45 +0000 Subject: [PATCH] Add tzset applet diff --git a/meta-webos/recipes-core/busybox/busybox/0002-date-add-support-for-options-U-and-S.patch b/meta-webos/recipes-core/busybox/busybox/0002-date-add-support-for-options-U-and-S.patch index 7ece38a48..3e6af0540 100644 --- a/meta-webos/recipes-core/busybox/busybox/0002-date-add-support-for-options-U-and-S.patch +++ b/meta-webos/recipes-core/busybox/busybox/0002-date-add-support-for-options-U-and-S.patch @@ -1,4 +1,4 @@ -From b6d8a3f0ac77267a40a010e854adfb573f82d9b4 Mon Sep 17 00:00:00 2001 +From 2b261a2232bda648401753f64bd65136aecd977d Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 6 Nov 2017 17:24:12 +0000 Subject: [PATCH] date: add support for options -U and -S diff --git a/meta-webos/recipes-core/busybox/busybox/0003-libedit-check-for-null-before-passing-cmdedit_prompt.patch b/meta-webos/recipes-core/busybox/busybox/0003-libedit-check-for-null-before-passing-cmdedit_prompt.patch index d44641c3c..25a94867d 100644 --- a/meta-webos/recipes-core/busybox/busybox/0003-libedit-check-for-null-before-passing-cmdedit_prompt.patch +++ b/meta-webos/recipes-core/busybox/busybox/0003-libedit-check-for-null-before-passing-cmdedit_prompt.patch @@ -1,4 +1,4 @@ -From 5a8682957534e7abd9f1bcfbe37c255cc9b73477 Mon Sep 17 00:00:00 2001 +From 774524dbddfdb74f92e56897a0b0a64d8876502d Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 6 Nov 2017 17:24:53 +0000 Subject: [PATCH] libedit: check for null before passing cmdedit_prompt to @@ -10,16 +10,16 @@ Signed-off-by: Martin Jansa 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libbb/lineedit.c b/libbb/lineedit.c -index 75de88e77..d5fe5120a 100644 +index 68d19e127..178018085 100644 --- a/libbb/lineedit.c +++ b/libbb/lineedit.c @@ -460,7 +460,9 @@ static void beep(void) */ static void put_prompt_custom(bool is_full) { -- fputs((is_full ? cmdedit_prompt : prompt_last_line), stdout); +- fputs_stdout((is_full ? cmdedit_prompt : prompt_last_line)); + if ( !is_full || NULL != cmdedit_prompt ) { -+ fputs((is_full ? cmdedit_prompt : prompt_last_line), stdout); ++ fputs_stdout((is_full ? cmdedit_prompt : prompt_last_line)); + } cursor = 0; cmdedit_y = cmdedit_prmt_len / cmdedit_termw; /* new quasireal y */ From 68396f0a1af7618c47d53652222cb71cb176d428 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Mon, 30 Aug 2021 04:28:55 -0700 Subject: [PATCH 0607/2022] webos: blacklist qt3d due to assimp :Release Notes: The test is now failing, probably due to changes discussed here: https://lists.openembedded.org/g/openembedded-core/message/155219 :Detailed Notes: CMake Error at TOPDIR/tmp-glibc/work/qemux86-webos-linux/qt3d/6.2.0-r0/recipe-sysroot/usr/lib/cmake/Qt6/QtBuildInformation.cmake:375 (message): Feature "qt3d_system_assimp": Forcing to "ON" breaks its condition: QT_FEATURE_qt3d_assimp AND TEST_assimp Condition values dump: QT_FEATURE_qt3d_assimp = "ON" TEST_assimp = "FALSE" :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: I953301e39072908f1138ee435a993228887cc77e --- meta-webos/conf/distro/include/webos-recipe-blacklist.inc | 1 + 1 file changed, 1 insertion(+) diff --git a/meta-webos/conf/distro/include/webos-recipe-blacklist.inc b/meta-webos/conf/distro/include/webos-recipe-blacklist.inc index 311f68868..e2a8b5627 100644 --- a/meta-webos/conf/distro/include/webos-recipe-blacklist.inc +++ b/meta-webos/conf/distro/include/webos-recipe-blacklist.inc @@ -40,6 +40,7 @@ PNBLACKLIST[qtdeviceutilities] ?= "fails to build with ninja: error: unknown tar PNBLACKLIST[qtcharts] ?= "fails to build with ninja: error: unknown target 'install' http://gecko.lge.com/Errors/Details/200305" PNBLACKLIST[qtdatavis3d] ?= "fails to build with ninja: error: unknown target 'install' http://gecko.lge.com/Errors/Details/200303" PNBLACKLIST[qtpositioning] ?= "requires dbus module enabled in qtbase, which was disabled in PLAT-18268 http://gecko.lge.com/Errors/Details/200302" +PNBLACKLIST[qt3d] ?= "fails to build with assimp enabled, Feature qt3d_system_assimp: Forcing to ON breaks its condition: QT_FEATURE_qt3d_assimp AND TEST_assimp, probably related to https://lists.openembedded.org/g/openembedded-core/message/155219" # meta-oe/recipes-support/vboxguestdrivers/vboxguestdrivers_6.1.18.bb:do_packagedata PNBLACKLIST[vboxguestdrivers] ?= "BROKEN: kernel-module-vboxguest conflicts in pkgdata with the vboxguest kernel modules we have enabled in linux-yocto" From 5b3a82b0cf238a2d75afb47233788c85808b6799 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 10 Sep 2021 06:44:23 -0700 Subject: [PATCH 0608/2022] pmtrace: disable, not compatible with lttng-ust-2.13 :Release Notes: I've tried to enable old API, but unfortunatelly this isn't enough and it still fails, so disable WEBOS_LTTNG_ENABLED until it's resolved, which removes most of the build failures except pmtrace where we disable libmemtracker which is failing. :Detailed Notes: http://gecko.lge.com/Errors/Details/241643 FAILED: src/libmemtracker/liblttng-ust-mtrace-malloc/CMakeFiles/lttng-ust-mtrace-malloc.dir/lttng-ust-mtrace-malloc.c.o TOPDIR/BUILD/work/qemux86-webos-linux/pmtrace/1.0.0-9-r11/recipe-sysroot-native/usr/bin/i686-webos-linux/i686-webos-linux-gcc -Dlttng_ust_mtrace_malloc_EXPORTS -ITOPDIR/BUILD/work/qemux86-webos-linux/pmtrace/1.0.0-9-r11/git/include -ITOPDIR/BUILD/work/qemux86-webos-linux/pmtrace/1.0.0-9-r11/git/src/libmemtracker/liblttng-ust-mtrace-malloc -m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/qemux86-webos-linux/pmtrace/1.0.0-9-r11/recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/qemux86-webos-linux/pmtrace/1.0.0-9-r11=/usr/src/debug/pmtrace/1.0.0-9-r11 -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86-webos-linux/pmtrace/1.0.0-9-r11=/usr/src/debug/pmtrace/1.0.0-9-r11 -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86-webos-linux/pmtrace/1.0.0-9-r11/recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/qemux86-webos-linux/pmtrace/1.0.0-9-r11/recipe-sysroot-native= -m32 -march=core2 -mtune=core2 -msse3 -mfpmath=sse -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/qemux86-webos-linux/pmtrace/1.0.0-9-r11/recipe-sysroot -DNDEBUG -fPIC -Wl,--no-as-needed -MD -MT src/libmemtracker/liblttng-ust-mtrace-malloc/CMakeFiles/lttng-ust-mtrace-malloc.dir/lttng-ust-mtrace-malloc.c.o -MF src/libmemtracker/liblttng-ust-mtrace-malloc/CMakeFiles/lttng-ust-mtrace-malloc.dir/lttng-ust-mtrace-malloc.c.o.d -o src/libmemtracker/liblttng-ust-mtrace-malloc/CMakeFiles/lttng-ust-mtrace-malloc.dir/lttng-ust-mtrace-malloc.c.o -c TOPDIR/BUILD/work/qemux86-webos-linux/pmtrace/1.0.0-9-r11/git/src/libmemtracker/liblttng-ust-mtrace-malloc/lttng-ust-mtrace-malloc.c In file included from TOPDIR/BUILD/work/qemux86-webos-linux/pmtrace/1.0.0-9-r11/recipe-sysroot/usr/include/lttng/tracepoint-event.h:69, from TOPDIR/BUILD/work/qemux86-webos-linux/pmtrace/1.0.0-9-r11/git/src/libmemtracker/liblttng-ust-mtrace-malloc/ust_mtrace_malloc.h:98, from TOPDIR/BUILD/work/qemux86-webos-linux/pmtrace/1.0.0-9-r11/git/src/libmemtracker/liblttng-ust-mtrace-malloc/lttng-ust-mtrace-malloc.c:29: TOPDIR/BUILD/work/qemux86-webos-linux/pmtrace/1.0.0-9-r11/git/src/libmemtracker/liblttng-ust-mtrace-malloc/./ust_mtrace_malloc.h:41:9: error: static assertion failed: "Non-integer type `bt` not supported as element of LTTNG_UST_FIELD_ARRAY or LTTNG_UST_FIELD_SEQUENCE" 41 | ctf_sequence(void *, bt, bt, size_t, depth) | ^~~~~~~~~~~~ TOPDIR/BUILD/work/qemux86-webos-linux/pmtrace/1.0.0-9-r11/git/src/libmemtracker/liblttng-ust-mtrace-new/./ust_mtrace_new.h: In function 'void lttng_ust__event_probe__mtrace_new___new(void*, size_t, void*, void*, void*, size_t)': TOPDIR/BUILD/work/qemux86-webos-linux/pmtrace/1.0.0-9-r11/git/src/libmemtracker/liblttng-ust-mtrace-new/./ust_mtrace_new.h:26:1: error: expected primary-expression before ')' token 26 | TRACEPOINT_EVENT(mtrace_new, new, | ^~~~~~~~~~~~~~~~ :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: I4eb608918cb6a40e6a222e53bb6b6b8151076288 --- meta-webos/classes/webos_lttng.bbclass | 2 +- meta-webos/recipes-webos/pmtrace/pmtrace.bb | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/classes/webos_lttng.bbclass b/meta-webos/classes/webos_lttng.bbclass index 8019f2d86..449af2cc7 100644 --- a/meta-webos/classes/webos_lttng.bbclass +++ b/meta-webos/classes/webos_lttng.bbclass @@ -14,7 +14,7 @@ inherit webos_prerelease_dep WEBOS_LTTNG_ENABLED ??= "0" -WEBOS_LTTNG_ENABLED ?= "${@ '0' if '${WEBOS_DISTRO_PRERELEASE}' == '' else '1' }" +#WEBOS_LTTNG_ENABLED ?= "${@ '0' if '${WEBOS_DISTRO_PRERELEASE}' == '' else '1' }" # Only enable LTTng for target components WEBOS_LTTNG_ENABLED:class-native = "0" WEBOS_LTTNG_ENABLED:class-nativesdk = "0" diff --git a/meta-webos/recipes-webos/pmtrace/pmtrace.bb b/meta-webos/recipes-webos/pmtrace/pmtrace.bb index 4c1357c31..537d300e0 100644 --- a/meta-webos/recipes-webos/pmtrace/pmtrace.bb +++ b/meta-webos/recipes-webos/pmtrace/pmtrace.bb @@ -36,7 +36,7 @@ S = "${WORKDIR}/git" # The libmemtracker, libpmtrace, pmctl (library/header/binary files) will be installed in all builds except RELEASE mode. # Only libpmtrace header files need to install in all builds for other modules that are referring to the header files. -EXTRA_OECMAKE += "-DENABLE_LIBPMTRACE:BOOLEAN=${@'False' if ('${WEBOS_DISTRO_PRERELEASE}' == '') else 'True'}" +EXTRA_OECMAKE += "-DENABLE_LIBPMTRACE:BOOLEAN=False" EXTRA_OECMAKE += "-DDEFAULT_LOGGING:STRING=${@'' if ('${WEBOS_DISTRO_PRERELEASE}' == '') else 'pmlog'}" SRC_URI += "file://0001-use-python3.patch" From 0052b2399d463c0b8155b436db821d4782ae3f6a Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 5 Nov 2021 03:06:49 -0700 Subject: [PATCH 0609/2022] systemd: update patches to apply on 249.5 version :Release Notes: :Detailed Notes: :Testing Performed: Only build tested. :QA Notes: None. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [WRN-9820] Create GPVB with Yocto 3.5 Kirkstone Change-Id: Ic6d4f86fa17f436b00c0b86f6dc82bc1bf15c8ce --- .../systemd/0001-systemd-oomd-depend-on-swap-on.patch | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/meta-webos/recipes-core/systemd/systemd/0001-systemd-oomd-depend-on-swap-on.patch b/meta-webos/recipes-core/systemd/systemd/0001-systemd-oomd-depend-on-swap-on.patch index f1fd37412..eace7ae75 100644 --- a/meta-webos/recipes-core/systemd/systemd/0001-systemd-oomd-depend-on-swap-on.patch +++ b/meta-webos/recipes-core/systemd/systemd/0001-systemd-oomd-depend-on-swap-on.patch @@ -1,4 +1,4 @@ -From e30822273d616cf65f4891a7f932eacd6743100a Mon Sep 17 00:00:00 2001 +From 464334b6179a848b22fe2aef2f3abf860d327726 Mon Sep 17 00:00:00 2001 From: Hotaek Jung Date: Mon, 12 Jul 2021 19:16:26 +0900 Subject: [PATCH] systemd-oomd: depend on swap-on @@ -8,7 +8,7 @@ Subject: [PATCH] systemd-oomd: depend on swap-on 1 file changed, 2 insertions(+) diff --git a/units/systemd-oomd.service.in b/units/systemd-oomd.service.in -index 0d2d409881..ca3ca8f0a3 100644 +index 44f71c9e36..8dfc22356e 100644 --- a/units/systemd-oomd.service.in +++ b/units/systemd-oomd.service.in @@ -12,6 +12,8 @@ Description=Userspace Out-Of-Memory (OOM) Killer @@ -19,4 +19,4 @@ index 0d2d409881..ca3ca8f0a3 100644 +After=swap-on.service Conflicts=shutdown.target ConditionControlGroupController=v2 - ConditionPathExists=/proc/pressure/cpu + ConditionControlGroupController=memory From 2b4b4b0e7e3eb9664ef4d304889cc486f57a6ac3 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 8 Apr 2022 09:27:40 +0000 Subject: [PATCH 0610/2022] Revert "libtool: Update 0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch" :Release Notes: gatesgarth and hardknott are using libtool-2.4.6 like dunfell, but don't have the patch which adds -f*-prefix-map* parameter in the same chunk: 3dcc84e37c libtool: Fix lto option passing for reproducible builds causing this patch to fail to apply. In honister this change needs to be reverted and in kirkstone this patch gets removed completely as it's already included in upstream version. :Detailed Notes: This reverts commit a238074dcfdb5a8628c2b4c1f4135fd102efb67e. :Testing Performed: Only build tested. :QA Notes: None. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: I481b176585e800b5f3cae1819d6e0f403f4d7ee0 --- ...ng-linking-with-fsanitize-address-or.patch | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/meta-webos/recipes-devtools/libtool/libtool/0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch b/meta-webos/recipes-devtools/libtool/libtool/0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch index 01a83681e..5f5f961ee 100644 --- a/meta-webos/recipes-devtools/libtool/libtool/0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch +++ b/meta-webos/recipes-devtools/libtool/libtool/0001-libtool-fix-clang-linking-with-fsanitize-address-or.patch @@ -1,25 +1,29 @@ -From 0071cf9c364e2410591434907442903f3f1c0bbb Mon Sep 17 00:00:00 2001 +From b421a1d2f2406bb1fe7219b430da57832057fc94 Mon Sep 17 00:00:00 2001 From: "jaekyu.lee" Date: Mon, 22 Nov 2021 14:53:08 +0900 Subject: [PATCH] libtool fix clang linking with fsanitize address or --- - build-aux/ltmain.in | 3 ++- - 1 file changed, 2 insertions(+), 1 deletion(-) + build-aux/ltmain.in | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/build-aux/ltmain.in b/build-aux/ltmain.in -index 7d9ce99..b12abae 100644 +index bdda9b4..40a2e1d 100644 --- a/build-aux/ltmain.in +++ b/build-aux/ltmain.in -@@ -5424,9 +5424,10 @@ func_mode_link () - # --sysroot=* for sysroot support +@@ -5425,9 +5425,11 @@ func_mode_link () # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -stdlib=* select c++ std lib with clang + # -f*-prefix-map* needed for lto linking + # -fsanitize=* Clang memory and address sanitizer -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -- -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*) -+ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*|-fsanitize=*) +- -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*|-f*-prefix-map*) ++ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*|-f*-prefix-map*| \ ++ -specs=*|-fsanitize=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" +-- +2.17.1 + From 2c00272afa6181f3a290a9b1209e4c271f71051c Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 3 Jun 2022 12:24:07 +0000 Subject: [PATCH 0611/2022] gcc-source: update patches to apply on 11.2 version :Release Notes: Another patch is included in 11.2 version used in Honister. :Detailed Notes: 0001-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch: 0faee8bae39 arm: Remove use of opts_set in arm_configure_build_target [PR100767] :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: Id1d7937dd39d365fc665d57be057200a58d3d292 --- .../gcc/gcc-source_%.bbappend | 7 +- ...f-opts_set-in-arm_configure_build_ta.patch | 160 ------------------ ...ch_name-is-always-set-for-the-build.patch} | 6 +- ...gure-globals-in-arm_configure_build.patch} | 14 +- ...bler-architecture-directives-PR1017.patch} | 67 +++++--- 5 files changed, 52 insertions(+), 202 deletions(-) delete mode 100644 meta-webos/recipes-devtools/gcc/gcc/0001-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch rename meta-webos/recipes-devtools/gcc/gcc/{0002-arm-ensure-the-arch_name-is-always-set-for-the-build.patch => 0001-arm-ensure-the-arch_name-is-always-set-for-the-build.patch} (90%) rename meta-webos/recipes-devtools/gcc/gcc/{0003-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch => 0002-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch} (86%) rename meta-webos/recipes-devtools/gcc/gcc/{0004-arm-reorder-assembler-architecture-directives-PR1017.patch => 0003-arm-reorder-assembler-architecture-directives-PR1017.patch} (92%) diff --git a/meta-webos/recipes-devtools/gcc/gcc-source_%.bbappend b/meta-webos/recipes-devtools/gcc/gcc-source_%.bbappend index f732bec63..789d34b35 100644 --- a/meta-webos/recipes-devtools/gcc/gcc-source_%.bbappend +++ b/meta-webos/recipes-devtools/gcc/gcc-source_%.bbappend @@ -5,8 +5,7 @@ EXTENDPRAUTO:append = "webos2" FILESEXTRAPATHS:prepend := "${THISDIR}/${BPN}:" SRC_URI:append = " \ - file://0001-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch \ - file://0002-arm-ensure-the-arch_name-is-always-set-for-the-build.patch \ - file://0003-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch \ - file://0004-arm-reorder-assembler-architecture-directives-PR1017.patch \ + file://0001-arm-ensure-the-arch_name-is-always-set-for-the-build.patch \ + file://0002-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch \ + file://0003-arm-reorder-assembler-architecture-directives-PR1017.patch \ " diff --git a/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch b/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch deleted file mode 100644 index 8983a04a4..000000000 --- a/meta-webos/recipes-devtools/gcc/gcc/0001-arm-Remove-use-of-opts_set-in-arm_configure_build_ta.patch +++ /dev/null @@ -1,160 +0,0 @@ -From 866a0c9c2b4ffaa7b216f2927660927448a649b0 Mon Sep 17 00:00:00 2001 -From: Richard Earnshaw -Date: Thu, 27 May 2021 10:25:37 +0100 -Subject: [PATCH] arm: Remove use of opts_set in arm_configure_build_target - [PR100767] - -The variable global_options_set is a reflection of which options have -been explicitly set from the command line in the structure -global_options. But it doesn't describe the contents of a -cl_target_option. cl_target_option is a set of options to apply and -once configured should represent a viable set of options without -needing to know which were explicitly set by the user. - -Unfortunately arm_configure_build_target was incorrectly conflating -the two. Fortunately, however, we do not really need to know this -since the various override_options functions should have sanitized the -target_options values before constructing a cl_target_option -structure. It is safe, therefore, to simply drop this parameter to -arm_configure_build_target and rely on checking that various string -parameters are non-null before dereferencing them. - -gcc: - - PR target/100767 - * config/arm/arm.c (arm_configure_build_target): Remove parameter - opts_set, directly check opts parameters for being non-null. - (arm_option_restore): Update call to arm_configure_build_target. - (arm_option_override): Likewise. - (arm_can_inline_p): Likewise. - (arm_valid_target_attribute_tree): Likewise. - * config/arm/arm-c.c (arm_pragma_target_parse): Likewise. - * config/arm/arm-protos.h (arm_configure_build_target): Adjust - prototype. - -(cherry picked from commit 262e75d22c350acbdf4c1fb4f224cc5d3d711eff) -Upstream-Status: Backport [releases/gcc-9 (9.5.0) 255fe52e8ad859f59bb863ad75d00fa84caa88bd == 12.1 262e75d22c350acbdf4c1fb4f224cc5d3d711eff] ---- - gcc/config/arm/arm-c.c | 3 +-- - gcc/config/arm/arm-protos.h | 3 +-- - gcc/config/arm/arm.c | 23 +++++++++-------------- - 3 files changed, 11 insertions(+), 18 deletions(-) - -diff --git a/gcc/config/arm/arm-c.c b/gcc/config/arm/arm-c.c -index 7468a20bd98..17b05567101 100644 ---- a/gcc/config/arm/arm-c.c -+++ b/gcc/config/arm/arm-c.c -@@ -408,8 +408,7 @@ arm_pragma_target_parse (tree args, tree pop_target) - target_option_current_node, but not handle_pragma_target. */ - target_option_current_node = cur_tree; - arm_configure_build_target (&arm_active_target, -- TREE_TARGET_OPTION (cur_tree), -- &global_options_set, false); -+ TREE_TARGET_OPTION (cur_tree), false); - } - - /* Update macros if target_node changes. The global state will be restored -diff --git a/gcc/config/arm/arm-protos.h b/gcc/config/arm/arm-protos.h -index bbbf67180f6..fac68cee8da 100644 ---- a/gcc/config/arm/arm-protos.h -+++ b/gcc/config/arm/arm-protos.h -@@ -241,8 +241,7 @@ extern bool arm_change_mode_p (tree); - extern tree arm_valid_target_attribute_tree (tree, struct gcc_options *, - struct gcc_options *); - extern void arm_configure_build_target (struct arm_build_target *, -- struct cl_target_option *, -- struct gcc_options *, bool); -+ struct cl_target_option *, bool); - extern void arm_option_reconfigure_globals (void); - extern void arm_options_perform_arch_sanity_checks (void); - extern void arm_pr_long_calls (struct cpp_reader *); -diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c -index db37e2b8e71..083b9d4a342 100644 ---- a/gcc/config/arm/arm.c -+++ b/gcc/config/arm/arm.c -@@ -3036,7 +3036,7 @@ arm_override_options_after_change (void) - { - arm_configure_build_target (&arm_active_target, - TREE_TARGET_OPTION (target_option_default_node), -- &global_options_set, false); -+ false); - - arm_override_options_after_change_1 (&global_options); - } -@@ -3057,8 +3057,7 @@ arm_option_restore (struct gcc_options *opts, struct cl_target_option *ptr) - opts->x_arm_arch_string = ptr->x_arm_arch_string; - opts->x_arm_cpu_string = ptr->x_arm_cpu_string; - opts->x_arm_tune_string = ptr->x_arm_tune_string; -- arm_configure_build_target (&arm_active_target, ptr, &global_options_set, -- false); -+ arm_configure_build_target (&arm_active_target, ptr, false); - } - - /* Reset options between modes that the user has specified. */ -@@ -3181,7 +3180,6 @@ static sbitmap isa_quirkbits; - void - arm_configure_build_target (struct arm_build_target *target, - struct cl_target_option *opts, -- struct gcc_options *opts_set, - bool warn_compatible) - { - const cpu_option *arm_selected_tune = NULL; -@@ -3196,7 +3194,7 @@ arm_configure_build_target (struct arm_build_target *target, - target->core_name = NULL; - target->arch_name = NULL; - -- if (opts_set->x_arm_arch_string) -+ if (opts->x_arm_arch_string) - { - arm_selected_arch = arm_parse_arch_option_name (all_architectures, - "-march", -@@ -3204,7 +3202,7 @@ arm_configure_build_target (struct arm_build_target *target, - arch_opts = strchr (opts->x_arm_arch_string, '+'); - } - -- if (opts_set->x_arm_cpu_string) -+ if (opts->x_arm_cpu_string) - { - arm_selected_cpu = arm_parse_cpu_option_name (all_cores, "-mcpu", - opts->x_arm_cpu_string); -@@ -3214,7 +3212,7 @@ arm_configure_build_target (struct arm_build_target *target, - options for tuning. */ - } - -- if (opts_set->x_arm_tune_string) -+ if (opts->x_arm_tune_string) - { - arm_selected_tune = arm_parse_cpu_option_name (all_cores, "-mtune", - opts->x_arm_tune_string); -@@ -3473,8 +3471,7 @@ arm_option_override (void) - } - - cl_target_option_save (&opts, &global_options); -- arm_configure_build_target (&arm_active_target, &opts, &global_options_set, -- true); -+ arm_configure_build_target (&arm_active_target, &opts, true); - - #ifdef SUBTARGET_OVERRIDE_OPTIONS - SUBTARGET_OVERRIDE_OPTIONS; -@@ -32397,10 +32394,8 @@ arm_can_inline_p (tree caller, tree callee) - caller_target.isa = sbitmap_alloc (isa_num_bits); - callee_target.isa = sbitmap_alloc (isa_num_bits); - -- arm_configure_build_target (&caller_target, caller_opts, &global_options_set, -- false); -- arm_configure_build_target (&callee_target, callee_opts, &global_options_set, -- false); -+ arm_configure_build_target (&caller_target, caller_opts, false); -+ arm_configure_build_target (&callee_target, callee_opts, false); - if (!bitmap_subset_p (callee_target.isa, caller_target.isa)) - can_inline = false; - -@@ -32536,7 +32531,7 @@ arm_valid_target_attribute_tree (tree args, struct gcc_options *opts, - return NULL_TREE; - - cl_target_option_save (&cl_opts, opts); -- arm_configure_build_target (&arm_active_target, &cl_opts, opts_set, false); -+ arm_configure_build_target (&arm_active_target, &cl_opts, false); - arm_option_check_internal (opts); - /* Do any overrides, such as global options arch=xxx. - We do this since arm_active_target was overridden. */ diff --git a/meta-webos/recipes-devtools/gcc/gcc/0002-arm-ensure-the-arch_name-is-always-set-for-the-build.patch b/meta-webos/recipes-devtools/gcc/gcc/0001-arm-ensure-the-arch_name-is-always-set-for-the-build.patch similarity index 90% rename from meta-webos/recipes-devtools/gcc/gcc/0002-arm-ensure-the-arch_name-is-always-set-for-the-build.patch rename to meta-webos/recipes-devtools/gcc/gcc/0001-arm-ensure-the-arch_name-is-always-set-for-the-build.patch index dd15a2500..d596a74d9 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0002-arm-ensure-the-arch_name-is-always-set-for-the-build.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0001-arm-ensure-the-arch_name-is-always-set-for-the-build.patch @@ -1,4 +1,4 @@ -From e42fadb20699cfe81f6853c5638269bcd1acb836 Mon Sep 17 00:00:00 2001 +From dc57177df42fa63b8ebdbc1e3039323c790a9510 Mon Sep 17 00:00:00 2001 From: Richard Earnshaw Date: Mon, 26 Jul 2021 17:07:14 +0100 Subject: [PATCH] arm: ensure the arch_name is always set for the build target @@ -24,10 +24,10 @@ Upstream-Status: Backport [releases/gcc-9 (9.5.0) 140a8089000ffa340b2f188be8abec 1 file changed, 2 insertions(+) diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c -index 083b9d4a342..95ffb966cad 100644 +index 783c5e51051..daafeb34683 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c -@@ -3427,6 +3427,8 @@ arm_configure_build_target (struct arm_build_target *target, +@@ -3430,6 +3430,8 @@ arm_configure_build_target (struct arm_build_target *target, const cpu_tune *tune_data = &all_tunes[arm_selected_tune - all_cores]; /* Finish initializing the target structure. */ diff --git a/meta-webos/recipes-devtools/gcc/gcc/0003-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch b/meta-webos/recipes-devtools/gcc/gcc/0002-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch similarity index 86% rename from meta-webos/recipes-devtools/gcc/gcc/0003-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch rename to meta-webos/recipes-devtools/gcc/gcc/0002-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch index f14fb4928..58c8a86ec 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0003-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0002-arm-Don-t-reconfigure-globals-in-arm_configure_build.patch @@ -1,4 +1,4 @@ -From 02511e81cf73cf05ffafade72d25d0fd32970311 Mon Sep 17 00:00:00 2001 +From 7a628d707bdbb37eece4ca77b15c8cbca6d0520c Mon Sep 17 00:00:00 2001 From: Richard Earnshaw Date: Tue, 27 Jul 2021 15:44:57 +0100 Subject: [PATCH] arm: Don't reconfigure globals in arm_configure_build_target @@ -35,7 +35,7 @@ Upstream-Status: Backport [releases/gcc-9 (9.5.0) 9a48ce5c29158af88c0b98a97f5336 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/gcc/config/arm/arm-c.c b/gcc/config/arm/arm-c.c -index 17b05567101..36b12215243 100644 +index ae2139c4bfa..cc7901bca8d 100644 --- a/gcc/config/arm/arm-c.c +++ b/gcc/config/arm/arm-c.c @@ -409,6 +409,7 @@ arm_pragma_target_parse (tree args, tree pop_target) @@ -47,18 +47,18 @@ index 17b05567101..36b12215243 100644 /* Update macros if target_node changes. The global state will be restored diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c -index 95ffb966cad..c151fdc84e4 100644 +index daafeb34683..a238118bd77 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c -@@ -3058,6 +3058,7 @@ arm_option_restore (struct gcc_options *opts, struct cl_target_option *ptr) - opts->x_arm_cpu_string = ptr->x_arm_cpu_string; - opts->x_arm_tune_string = ptr->x_arm_tune_string; +@@ -3056,6 +3056,7 @@ arm_option_restore (struct gcc_options */* opts */, + struct cl_target_option *ptr) + { arm_configure_build_target (&arm_active_target, ptr, false); + arm_option_reconfigure_globals (); } /* Reset options between modes that the user has specified. */ -@@ -3436,7 +3437,6 @@ arm_configure_build_target (struct arm_build_target *target, +@@ -3439,7 +3440,6 @@ arm_configure_build_target (struct arm_build_target *target, target->tune_flags = tune_data->tune_flags; target->tune = tune_data->tune; target->tune_core = tune_data->scheduler; diff --git a/meta-webos/recipes-devtools/gcc/gcc/0004-arm-reorder-assembler-architecture-directives-PR1017.patch b/meta-webos/recipes-devtools/gcc/gcc/0003-arm-reorder-assembler-architecture-directives-PR1017.patch similarity index 92% rename from meta-webos/recipes-devtools/gcc/gcc/0004-arm-reorder-assembler-architecture-directives-PR1017.patch rename to meta-webos/recipes-devtools/gcc/gcc/0003-arm-reorder-assembler-architecture-directives-PR1017.patch index ace7ea836..1da07d307 100644 --- a/meta-webos/recipes-devtools/gcc/gcc/0004-arm-reorder-assembler-architecture-directives-PR1017.patch +++ b/meta-webos/recipes-devtools/gcc/gcc/0003-arm-reorder-assembler-architecture-directives-PR1017.patch @@ -1,4 +1,4 @@ -From 4eb72551f63ecc71c753e4e30915315f846915a2 Mon Sep 17 00:00:00 2001 +From abbc69ffeb861c52fa73f611b6a387b8ea3d63d4 Mon Sep 17 00:00:00 2001 From: Richard Earnshaw Date: Thu, 29 Jul 2021 11:00:31 +0100 Subject: [PATCH] arm: reorder assembler architecture directives [PR101723] @@ -61,6 +61,7 @@ gcc/testsuite/ChangeLog: * gcc.target/arm/mve/intrinsics/mve_fpu1.c: Convert to dg-do assemble. Add a non-no-op function body. * gcc.target/arm/mve/intrinsics/mve_fpu2.c: Likewise. + * gcc.target/arm/pr98636.c (dg-options): Add -mfloat-abi=softfp. * gcc.target/arm/attr-neon.c: Tighten scan-assembler tests. * gcc.target/arm/attr-neon2.c: Use -Ofast, convert test to use check-function-bodies. @@ -78,21 +79,22 @@ Upstream-Status: Backport [releases/gcc-9 (9.5.0) 04c568961e793a1d7ad86248b4ca92 gcc/testsuite/gcc.target/arm/attr-neon.c | 9 +- gcc/testsuite/gcc.target/arm/attr-neon2.c | 35 ++-- gcc/testsuite/gcc.target/arm/attr-neon3.c | 48 +++-- - .../arm/cortex-m55-nofp-flag-hard.c | 4 +- - .../arm/cortex-m55-nofp-flag-softfp.c | 4 +- - .../arm/cortex-m55-nofp-nomve-flag-softfp.c | 4 +- + .../arm/cortex-m55-nofp-flag-hard.c | 2 +- + .../arm/cortex-m55-nofp-flag-softfp.c | 2 +- + .../arm/cortex-m55-nofp-nomve-flag-softfp.c | 2 +- .../gcc.target/arm/mve/intrinsics/mve_fpu1.c | 5 +- .../gcc.target/arm/mve/intrinsics/mve_fpu2.c | 5 +- gcc/testsuite/gcc.target/arm/pr69245.c | 6 +- + gcc/testsuite/gcc.target/arm/pr98636.c | 3 +- .../gcc.target/arm/pragma_fpu_attribute.c | 7 +- .../gcc.target/arm/pragma_fpu_attribute_2.c | 7 +- - 13 files changed, 170 insertions(+), 151 deletions(-) + 14 files changed, 169 insertions(+), 149 deletions(-) diff --git a/gcc/config/arm/arm-cpus.in b/gcc/config/arm/arm-cpus.in -index db0b93f6bb7..660d2b2f4cd 100644 +index ab4b6acf5ea..249995a6bca 100644 --- a/gcc/config/arm/arm-cpus.in +++ b/gcc/config/arm/arm-cpus.in -@@ -1078,6 +1078,7 @@ begin cpu generic-armv7-a +@@ -1080,6 +1080,7 @@ begin cpu generic-armv7-a cname genericv7a tune flags LDSCHED architecture armv7-a+fp @@ -101,7 +103,7 @@ index db0b93f6bb7..660d2b2f4cd 100644 option sec add sec option vfpv3-d16 add VFPv3 FP_DBL diff --git a/gcc/config/arm/arm.c b/gcc/config/arm/arm.c -index c151fdc84e4..60e29b233af 100644 +index a238118bd77..e7b92a725c6 100644 --- a/gcc/config/arm/arm.c +++ b/gcc/config/arm/arm.c @@ -77,10 +77,6 @@ @@ -115,15 +117,15 @@ index c151fdc84e4..60e29b233af 100644 void (*arm_lang_output_object_attributes_hook)(void); struct four_ints -@@ -332,6 +328,7 @@ static HOST_WIDE_INT arm_constant_alignment (const_tree, HOST_WIDE_INT); - static rtx_insn * thumb1_md_asm_adjust (vec &, vec &, - vec &, vec &, - HARD_REG_SET &); +@@ -332,6 +328,7 @@ static rtx_insn *thumb1_md_asm_adjust (vec &, vec &, + vec &, + vec &, vec &, + HARD_REG_SET &); +static const char *arm_identify_fpu_from_isa (sbitmap); /* Table of machine attributes. */ static const struct attribute_spec arm_attribute_table[] = -@@ -3406,6 +3403,11 @@ arm_configure_build_target (struct arm_build_target *target, +@@ -3409,6 +3406,11 @@ arm_configure_build_target (struct arm_build_target *target, bitmap_ior (target->isa, target->isa, fpu_bits); } @@ -135,7 +137,7 @@ index c151fdc84e4..60e29b233af 100644 /* There may be implied bits which we still need to enable. These are non-named features which are needed to complete other sets of features, but cannot be enabled from arm-cpus.in due to being shared between -@@ -28039,20 +28041,65 @@ arm_print_tune_info (void) +@@ -28090,20 +28092,65 @@ arm_print_tune_info (void) (int) current_tune->sched_autopref); } @@ -205,7 +207,7 @@ index c151fdc84e4..60e29b233af 100644 if (!arch->common.extensions) return; -@@ -28078,13 +28125,12 @@ arm_print_asm_arch_directives () +@@ -28129,13 +28176,12 @@ arm_print_asm_arch_directives () && !TARGET_HAVE_MVE_FLOAT)) continue; @@ -224,7 +226,7 @@ index c151fdc84e4..60e29b233af 100644 } } } -@@ -28094,46 +28140,23 @@ arm_file_start (void) +@@ -28145,46 +28191,23 @@ arm_file_start (void) { int val; @@ -280,7 +282,7 @@ index c151fdc84e4..60e29b233af 100644 } if (print_tune_info) -@@ -28201,6 +28224,13 @@ arm_file_end (void) +@@ -28249,6 +28272,13 @@ arm_file_end (void) { int regno; @@ -294,7 +296,7 @@ index c151fdc84e4..60e29b233af 100644 if (NEED_INDICATE_EXEC_STACK) /* Add .note.GNU-stack. */ file_end_indicate_exec_stack (); -@@ -32677,58 +32707,7 @@ arm_declare_function_name (FILE *stream, const char *name, tree decl) +@@ -33140,58 +33170,7 @@ arm_declare_function_name (FILE *stream, const char *name, tree decl) targ_options = TREE_TARGET_OPTION (target_option_current_node); gcc_assert (targ_options); @@ -354,7 +356,7 @@ index c151fdc84e4..60e29b233af 100644 fprintf (stream, "\t.syntax unified\n"); -@@ -32746,17 +32725,6 @@ arm_declare_function_name (FILE *stream, const char *name, tree decl) +@@ -33209,17 +33188,6 @@ arm_declare_function_name (FILE *stream, const char *name, tree decl) else fprintf (stream, "\t.arm\n"); @@ -536,14 +538,13 @@ index 17e429ad739..0fbce6e4cd4 100644 +/* { dg-final { scan-assembler "\.fpu\\s+crypto-neon-fp-armv8\n" } } */ +/* { dg-final { check-function-bodies "**" "" } } */ diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-hard.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-hard.c -index da1cc25e83b..e0fb307ac30 100644 +index 6a92dedcc59..e0fb307ac30 100644 --- a/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-hard.c +++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-hard.c @@ -1,12 +1,12 @@ /* { dg-do assemble } */ /* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ --/* { dg-additional-options "-mcpu=cortex-m55+nofp -mfloat-abi=hard -mfpu=auto --save-temps" } */ -+/* { dg-additional-options "-mcpu=cortex-m55+nofp -mthumb -mfloat-abi=hard -mfpu=auto --save-temps" } */ + /* { dg-additional-options "-mcpu=cortex-m55+nofp -mthumb -mfloat-abi=hard -mfpu=auto --save-temps" } */ +/* { dg-final { scan-assembler "\.fpu softvfp" } } */ /* { dg-final { scan-assembler "\.arch_extension mve" } } */ /* { dg-final { scan-assembler "\.arch_extension dsp" } } */ @@ -555,14 +556,13 @@ index da1cc25e83b..e0fb307ac30 100644 int f () diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-softfp.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-softfp.c -index 0a4fb14bd9b..50645e8cd0f 100644 +index 25e80e9bd64..50645e8cd0f 100644 --- a/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-softfp.c +++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-flag-softfp.c @@ -1,12 +1,12 @@ /* { dg-do assemble } */ /* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ --/* { dg-additional-options "-mcpu=cortex-m55+nofp -mfloat-abi=softfp -mfpu=auto --save-temps" } */ -+/* { dg-additional-options "-mcpu=cortex-m55+nofp -mthumb -mfloat-abi=softfp -mfpu=auto --save-temps" } */ + /* { dg-additional-options "-mcpu=cortex-m55+nofp -mthumb -mfloat-abi=softfp -mfpu=auto --save-temps" } */ +/* { dg-final { scan-assembler "\.fpu softvfp" } } */ /* { dg-final { scan-assembler "\.arch_extension mve" } } */ /* { dg-final { scan-assembler "\.arch_extension dsp" } } */ @@ -574,14 +574,13 @@ index 0a4fb14bd9b..50645e8cd0f 100644 int f () diff --git a/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c -index 2ae7f34d456..948f622633c 100644 +index 38042cc490c..948f622633c 100644 --- a/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c +++ b/gcc/testsuite/gcc.target/arm/cortex-m55-nofp-nomve-flag-softfp.c @@ -1,12 +1,12 @@ /* { dg-do assemble } */ /* { dg-require-effective-target arm_v8_1m_mve_fp_ok } */ --/* { dg-additional-options "-mcpu=cortex-m55+nomve+nofp -mfloat-abi=softfp -mfpu=auto --save-temps" } */ -+/* { dg-additional-options "-mcpu=cortex-m55+nomve+nofp -mthumb -mfloat-abi=softfp -mfpu=auto --save-temps" } */ + /* { dg-additional-options "-mcpu=cortex-m55+nomve+nofp -mthumb -mfloat-abi=softfp -mfpu=auto --save-temps" } */ +/* { dg-final { scan-assembler "\.fpu softvfp" } } */ /* { dg-final { scan-assembler-not "\.arch_extension mve" } } */ /* { dg-final { scan-assembler-not "\.arch_extension mve.fp" } } */ @@ -644,6 +643,18 @@ index bd505187728..34b97a22e15 100644 + least once. */ +/* { dg-final { scan-assembler "\.fpu\s+vfp\n" } } */ +/* { dg-final { scan-assembler "\.fpu\s+neon-vfpv4\n" } } */ +diff --git a/gcc/testsuite/gcc.target/arm/pr98636.c b/gcc/testsuite/gcc.target/arm/pr98636.c +index c4d235cb43d..559f9a26c1e 100644 +--- a/gcc/testsuite/gcc.target/arm/pr98636.c ++++ b/gcc/testsuite/gcc.target/arm/pr98636.c +@@ -1,5 +1,6 @@ + /* { dg-do compile } */ +-/* { dg-options "-mfp16-format=alternative" } */ ++/* { dg-require-effective-target arm_softfp_ok } */ ++/* { dg-options "-mfp16-format=alternative -mfloat-abi=softfp" } */ + + #pragma GCC push_options + # pragma GCC target ("arch=armv8.2-a+fp16") /* { dg-error "selected fp16 options are incompatible" } */ diff --git a/gcc/testsuite/gcc.target/arm/pragma_fpu_attribute.c b/gcc/testsuite/gcc.target/arm/pragma_fpu_attribute.c index 174be85f3f7..7e63cf53013 100644 --- a/gcc/testsuite/gcc.target/arm/pragma_fpu_attribute.c From 06c7aedcc3f21e1480b9617a53d0ff7f1b01cddb Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Fri, 3 Jun 2022 23:20:37 +0000 Subject: [PATCH 0612/2022] edgeai-vision: depend on msgpack-cpp instead of msgpack-c :Release Notes: It's separate recipes since upgrade to version 4: https://git.openembedded.org/meta-openembedded/commit/?id=71ab0ca5d65ded4cd812cb99addb6a52f6d5b6b2 :Detailed Notes: Fixes: http://gecko.lge.com/Errors/Details/415471 FAILED: framework/CMakeFiles/edgeai-vision.dir/base/WSServer.cpp.o TOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/recipe-sysroot-native/usr/bin/arm-oemllib32-linux-gnueabi/arm-oemllib32-linux-gnueabi-g++ -DBOOST_ATOMIC_DYN_LINK -DBOOST_ATOMIC_NO_LIB -DBOOST_DATE_TIME_DYN_LINK -DBOOST_DATE_TIME_NO_LIB -DBOOST_FILESYSTEM_DYN_LINK -DBOOST_FILESYSTEM_NO_LIB -DBOOST_IOSTREAMS_DYN_LINK -DBOOST_IOSTREAMS_NO_LIB -DBOOST_SYSTEM_DYN_LINK -DBOOST_SYSTEM_NO_LIB -DBOOST_THREAD_DYN_LINK -DBOOST_THREAD_NO_LIB -DEDGEAI_VISION_HOME=\"/usr/share/aif\" -DENABLE_DEBUG -DLOG_APPLICATION=\"AIF\" -DLOG_CONTEXT=\"FACE\" -DUSE_ARMNN -DUSE_BASE64IMAGE -DUSE_GPU_DELEGATE -DUSE_XNNPACK -Dedgeai_vision_EXPORTS -ITOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/lib32-recipe-sysroot/usr/include/opencv4 -ITOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/lib32-recipe-sysroot/usr/include/armnn -ITOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/include -ITOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/framework -ITOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/framework/log -ITOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/framework/tools -ITOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/framework/base -ITOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/framework/face -ITOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/framework/pose -ITOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/framework/movenet -ITOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/framework/semantic -ITOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/framework/bodypix -ITOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/framework/selfie -ITOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/framework/poseLandmark -ITOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/framework/handLandmark -ITOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/framework/palm -ITOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/framework/delegate -ITOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/framework/sample -ITOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/framework/facade -mthumb -mfpu=neon -mfloat-abi=softfp -mcpu=cortex-a9 -mtune=cortex-a9 -funwind-tables -fstack-protector-strong -O2 -D_FORTIFY_SOURCE=2 -Wformat -Wformat-security -Werror=format-security -Werror=return-type --sysroot=TOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/lib32-recipe-sysroot -O2 -pipe -g -feliminate-unused-debug-types -fmacro-prefix-map=TOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1=/usr/src/debug/lib32-edgeai-vision/1.0.0-7-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1=/usr/src/debug/lib32-edgeai-vision/1.0.0-7-r1 -fdebug-prefix-map=TOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/lib32-recipe-sysroot= -fdebug-prefix-map=TOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/recipe-sysroot-native= -fvisibility-inlines-hidden -fPIC -std=c++14 -MD -MT framework/CMakeFiles/edgeai-vision.dir/base/WSServer.cpp.o -MF framework/CMakeFiles/edgeai-vision.dir/base/WSServer.cpp.o.d -o framework/CMakeFiles/edgeai-vision.dir/base/WSServer.cpp.o -c TOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/framework/base/WSServer.cpp In file included from TOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/include/aif/base/WSServer.h:8, from TOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/framework/base/WSServer.cpp:1: TOPDIR/BUILD/work/MACHINE-oemllib32-linux-gnueabi/lib32-edgeai-vision/1.0.0-7-r1/git/include/aif/base/WSServerSession.h:11:10: fatal error: msgpack.hpp: No such file or directory 11 | #include | ^~~~~~~~~~~~~ compilation terminated. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: I6fae15241ed1ca0b5494a1aac06fa62944ab7c82 --- meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb b/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb index 56f67114d..4ebc28527 100644 --- a/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb +++ b/meta-webos/recipes-webos/edgeai-vision/edgeai-vision_1.0.0.bb @@ -24,7 +24,7 @@ inherit webos_public_repo inherit webos_test_provider DEPENDS = " \ - msgpack-c \ + msgpack-cpp \ rapidjson \ flatbuffers \ opencv \ From 698315915de146c957d4ec11bc3a9b4dcc57cde5 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Tue, 7 Jun 2022 21:30:29 +0000 Subject: [PATCH 0613/2022] qemux86: Use default WKS_FILE :Release Notes: With newer kernel the disks from VirtualBox are using /dev/sda* even when they are configured on default IDE controller in VirtualBox (while with older kernel they were using /dev/hda* unless attached on SATA controller in VM configuration :Detailed Notes: Legacy IDE driver was deprecated since Linux 5.2 and removed in 5.14: https://lore.kernel.org/lkml/20210318045706.200458-1-hch@lst.de/ And this generated line in /etc/fstab: /dev/hda1 /boot vfat defaults 0 0 was causing the emulator boot to end in emergency mode. :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: Ia67b3bd1a24283affc512d56439290d60be66273 --- meta-webos/classes/webos_image.bbclass | 3 --- meta-webos/wic/webos-qemux86-directdisk.wks | 8 -------- 2 files changed, 11 deletions(-) delete mode 100644 meta-webos/wic/webos-qemux86-directdisk.wks diff --git a/meta-webos/classes/webos_image.bbclass b/meta-webos/classes/webos_image.bbclass index 7ef804b42..f296f358c 100644 --- a/meta-webos/classes/webos_image.bbclass +++ b/meta-webos/classes/webos_image.bbclass @@ -92,9 +92,6 @@ inherit webos_filesystem_paths inherit webos_prerelease_dep do_rootfs[depends] += "libpbnjson-native:do_populate_sysroot" -WKS_FILE:qemux86 = "webos-qemux86-directdisk.wks" -WKS_FILE:qemux86-64 = "webos-qemux86-directdisk.wks" - # Build only wic.vmdk for qemux86*, otherwise wic.vmdk might conflict with tar.gz and cause errors like: # | tar: ./usr/lib/perl/5.24.1/unicore/lib/Bc/EN.pl: file changed as we read it IMAGE_FSTYPES:qemux86 = "wic.vmdk" diff --git a/meta-webos/wic/webos-qemux86-directdisk.wks b/meta-webos/wic/webos-qemux86-directdisk.wks deleted file mode 100644 index 6c9adb8b2..000000000 --- a/meta-webos/wic/webos-qemux86-directdisk.wks +++ /dev/null @@ -1,8 +0,0 @@ -# this file is combination of: -# oe-core/scripts/lib/wic/canned-wks/common.wks.inc -# + oe-core/scripts/lib/wic/canned-wks/qemux86-directdisk.wks -# '--ondisk sda' replaced with '--ondisk hda' - -part /boot --source bootimg-pcbios --ondisk hda --label boot --active --align 1024 -part / --source rootfs --use-uuid --fstype=ext4 --label platform --align 1024 -bootloader --timeout=0 --append="vga=0 rw oprofile.timer=1 rootfstype=ext4 " From fc265942b0ec068bfda1d85e1f2fbee89299d770 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 9 Jun 2022 19:23:36 +0000 Subject: [PATCH 0614/2022] nodejs-module-webos: use nodejs=v14.17.1 :Release Notes: Use nodejs=v14.17.1 for building nodejs-module-webos-* recipes. :Detailed Notes: Matches the version in meta-oe. https://git.openembedded.org/meta-openembedded/commit/?id=94e54c209de4788a85ea3c5b7e66dada5dc9f7af :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-78621] NodeJS upgrade to 10.15.3 [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: I3a57dc5ff1d7f811ff4ec169cb96aa4796288a04 --- .../recipes-webos/nodejs-module-webos/nodejs-module-webos.inc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos.inc b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos.inc index ea2c224de..f38b961aa 100644 --- a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos.inc +++ b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos.inc @@ -17,12 +17,12 @@ inherit python3native export PYTHON = "python3" -NODE_VERSION = "12.22.2" +NODE_VERSION = "14.17.1" SRC_URI = "${WEBOSOSE_GIT_REPO_COMPLETE} \ https://nodejs.org/dist/v${NODE_VERSION}/node-v${NODE_VERSION}.tar.xz;name=node \ " -SRC_URI[node.sha256sum] = "7fd805571df106f086f4c45e131efed98bfd62628d9dec96bd62f8c11b0c48dc" +SRC_URI[node.sha256sum] = "ddf1d2d56ddf35ecd98c5ea5ddcd690b245899f289559b4330c921255f5a247f" S = "${WORKDIR}/git" From 9e40d225cd5bb85a857a8c0a20a8889a545b6202 Mon Sep 17 00:00:00 2001 From: Martin Jansa Date: Thu, 9 Jun 2022 19:55:24 +0000 Subject: [PATCH 0615/2022] nodejs-module-webos-{dynaload,sysbus,pmlog}: Fix build for nodejs-14 :Release Notes: Import changes from LuneOS. :Detailed Notes: LuneOS uses nodejs-14 for a while: https://github.com/webOS-ports/meta-webos-ports/commit/1c72a66d1b87007ba5b188b5ecdb27545d3af2ac :Testing Performed: Only build tested. :QA Notes: No change to image. :Issues Addressed: [WRO-12998] CCC: Upgrade to Yocto 3.4 Honister [PLAT-78621] NodeJS upgrade to 10.15.3 [PLAT-141293] Create GPVB with Yocto 3.4 Honister Change-Id: Id78ce30066148877125eb7b5cbdf70586275d29e --- .../nodejs-module-webos-dynaload.bb | 2 + .../0001-Fix-build-for-nodejs-14.patch | 232 ++++++++++++++++++ .../nodejs-module-webos-pmlog.bb | 3 +- .../0001-Fix-build-for-nodejs-14.patch | 120 +++++++++ .../nodejs-module-webos-sysbus.bb | 2 + .../0001-Fix-build-for-nodejs-14.patch | 211 ++++++++++++++++ 6 files changed, 569 insertions(+), 1 deletion(-) create mode 100644 meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-dynaload/0001-Fix-build-for-nodejs-14.patch create mode 100644 meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-pmlog/0001-Fix-build-for-nodejs-14.patch create mode 100644 meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-sysbus/0001-Fix-build-for-nodejs-14.patch diff --git a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-dynaload.bb b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-dynaload.bb index 9abc0f804..a8c64249c 100644 --- a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-dynaload.bb +++ b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-dynaload.bb @@ -11,6 +11,8 @@ DEPENDS += "boost" WEBOS_VERSION = "3.0.2-3_ff4769966ef245bbe70e36296c1fb1e1a3205d23" PR = "r11" +SRC_URI += "file://0001-Fix-build-for-nodejs-14.patch" + do_configure() { export GYP_DEFINES="sysroot=${STAGING_DIR_HOST}" node-gyp --arch ${TARGET_ARCH} --nodedir "${WORKDIR}/node-v${NODE_VERSION}" configure diff --git a/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-dynaload/0001-Fix-build-for-nodejs-14.patch b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-dynaload/0001-Fix-build-for-nodejs-14.patch new file mode 100644 index 000000000..4615920b3 --- /dev/null +++ b/meta-webos/recipes-webos/nodejs-module-webos/nodejs-module-webos-dynaload/0001-Fix-build-for-nodejs-14.patch @@ -0,0 +1,232 @@ +From 7924002ce9c80a7c24645e3332a6bebdd3735632 Mon Sep 17 00:00:00 2001 +From: Christophe Chapuis +Date: Tue, 26 Oct 2021 20:08:33 +0000 +Subject: [PATCH] Fix build for nodejs-14 + +Signed-off-by: Christophe Chapuis + +Imported from LuneOS: +https://github.com/webOS-ports/nodejs-module-webos-dynaload/commit/ab87a7f2c59e96ec91360f3d4a1bc82f42594d6a +--- + src/external_string.cpp | 6 +-- + src/node_webos.cpp | 84 +++++++++++++++++++++-------------------- + 2 files changed, 46 insertions(+), 44 deletions(-) + +diff --git a/src/external_string.cpp b/src/external_string.cpp +index a3a731e..55a9dd8 100644 +--- a/src/external_string.cpp ++++ b/src/external_string.cpp +@@ -56,7 +56,7 @@ v8::Local createV8StringFromFile(const char* inPathToFile) + // exception and throw a runtime exception with a less boost-flavored message. + boost::uintmax_t fileSize = bf::file_size(pathToFile); + if (fileSize == 0) { +- return String::NewFromUtf8(v8::Isolate::GetCurrent(), ""); ++ return String::NewFromUtf8(v8::Isolate::GetCurrent(), "").ToLocalChecked(); + } + bi::file_mapping mappedFile(inPathToFile, bi::read_only); + bi::mapped_region region(mappedFile, bi::read_only); +@@ -71,7 +71,7 @@ v8::Local createV8StringFromFile(const char* inPathToFile) + } + // Let v8 do its normal string conversion. This should be a rare case, as there's + // no good reason for a JavaScript source file to have anything but ASCII. +- return String::NewFromUtf8(v8::Isolate::GetCurrent(), startPtr); ++ return String::NewFromUtf8(v8::Isolate::GetCurrent(), startPtr).ToLocalChecked(); + } + + // Wrapper function to create a v8 external string. +@@ -79,7 +79,7 @@ v8::Local MappedRegionExternalString::create(const char* pathToFile) + { + Isolate* isolate = Isolate::GetCurrent(); + MappedRegionExternalString* extString = new MappedRegionExternalString(pathToFile); +- return String::NewExternal(isolate, extString); ++ return String::NewExternalOneByte(isolate, extString).ToLocalChecked(); + } + + // The boost constructors do all the hard work of mapping the region and unmapping it when this object is destroyed. +diff --git a/src/node_webos.cpp b/src/node_webos.cpp +index 984d39a..a099972 100644 +--- a/src/node_webos.cpp ++++ b/src/node_webos.cpp +@@ -33,24 +33,24 @@ static void SetFileAndDirectoryGlobals(Local global, const char* path) + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + bf::path pathToFile(bf::system_complete(bf::path(path))); + bf::path pathToParentDir(pathToFile.parent_path()); +- Local fileName = v8::String::NewFromUtf8(isolate, pathToFile.string().c_str()); +- global->Set( +- v8::String::NewFromUtf8(isolate, kFileNameGlobal, v8::String::kInternalizedString), ++ Local fileName = v8::String::NewFromUtf8(isolate, pathToFile.string().c_str()).ToLocalChecked(); ++ global->Set(isolate->GetCurrentContext(), ++ v8::String::NewFromUtf8(isolate, kFileNameGlobal, v8::NewStringType::kInternalized).ToLocalChecked(), + fileName); +- Local dirName = v8::String::NewFromUtf8(isolate, pathToParentDir.string().c_str()); +- global->Set( +- v8::String::NewFromUtf8(isolate, kDirNameGlobal, v8::String::kInternalizedString), ++ Local dirName = v8::String::NewFromUtf8(isolate, pathToParentDir.string().c_str()).ToLocalChecked(); ++ global->Set(isolate->GetCurrentContext(), ++ v8::String::NewFromUtf8(isolate, kDirNameGlobal, v8::NewStringType::kInternalized).ToLocalChecked(), + dirName); + } + + static void ClearFileAndDirectoryGlobals(Local global) + { + v8::Isolate* isolate = v8::Isolate::GetCurrent(); +- global->Set( +- v8::String::NewFromUtf8(isolate, kFileNameGlobal, v8::String::kInternalizedString), ++ global->Set(isolate->GetCurrentContext(), ++ v8::String::NewFromUtf8(isolate, kFileNameGlobal, v8::NewStringType::kInternalized).ToLocalChecked(), + v8::Undefined(isolate)); +- global->Set( +- v8::String::NewFromUtf8(isolate, kDirNameGlobal, v8::String::kInternalizedString), ++ global->Set(isolate->GetCurrentContext(), ++ v8::String::NewFromUtf8(isolate, kDirNameGlobal, v8::NewStringType::kInternalized).ToLocalChecked(), + v8::Undefined(isolate)); + } + +@@ -63,14 +63,14 @@ Local IncludeScript(char const * pathToScriptSource, bool& exceptionOccur + v8::Isolate* isolate = v8::Isolate::GetCurrent(); + if(!pathToScriptSource || !*pathToScriptSource ) { + return isolate->ThrowException(v8::Exception::Error( +- v8::String::NewFromUtf8(isolate, "webOS 'include' requires a non-empty filename argument."))); ++ v8::String::NewFromUtf8(isolate, "webOS 'include' requires a non-empty filename argument.").ToLocalChecked())); + } + EscapableHandleScope scope(isolate); + Local returnValue = Undefined(isolate); + Local scriptSource = createV8StringFromFile(pathToScriptSource); + Local currentContext = isolate->GetCurrentContext(); +- Local